diff --git a/assets/xml/interface/week_static.xml b/assets/xml/interface/week_static.xml
index 12cc885fa..e2b098410 100644
--- a/assets/xml/interface/week_static.xml
+++ b/assets/xml/interface/week_static.xml
@@ -1,7 +1,7 @@
-
-
-
+
+
+
diff --git a/assets/xml/objects/gameplay_keep.xml b/assets/xml/objects/gameplay_keep.xml
index 8b1c482c2..37fb3fc61 100644
--- a/assets/xml/objects/gameplay_keep.xml
+++ b/assets/xml/objects/gameplay_keep.xml
@@ -1159,7 +1159,7 @@
-
+
@@ -1223,8 +1223,8 @@
-
-
+
+
@@ -1281,7 +1281,7 @@
-
+
@@ -1486,9 +1486,9 @@
-
-
-
+
+
+
diff --git a/assets/xml/objects/object_ani.xml b/assets/xml/objects/object_ani.xml
index 2900ff723..8bc8aa5e3 100644
--- a/assets/xml/objects/object_ani.xml
+++ b/assets/xml/objects/object_ani.xml
@@ -8,10 +8,10 @@
-
+
-
+
@@ -21,7 +21,7 @@
-
+
@@ -30,10 +30,10 @@
-
+
-
+
diff --git a/assets/xml/objects/object_az.xml b/assets/xml/objects/object_az.xml
index ea6fd5e7d..42e5bdc61 100644
--- a/assets/xml/objects/object_az.xml
+++ b/assets/xml/objects/object_az.xml
@@ -64,8 +64,8 @@
-
-
+
+
diff --git a/assets/xml/objects/object_bg.xml b/assets/xml/objects/object_bg.xml
index 272968b8d..9008fb381 100644
--- a/assets/xml/objects/object_bg.xml
+++ b/assets/xml/objects/object_bg.xml
@@ -1,62 +1,79 @@
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -73,6 +90,8 @@
+
+
@@ -84,6 +103,8 @@
+
+
@@ -107,6 +128,8 @@
+
+
diff --git a/assets/xml/objects/object_bigpo.xml b/assets/xml/objects/object_bigpo.xml
index 858ad4a87..fbde9e8e5 100644
--- a/assets/xml/objects/object_bigpo.xml
+++ b/assets/xml/objects/object_bigpo.xml
@@ -7,13 +7,13 @@
-
+
-
+
@@ -57,7 +57,7 @@
-
-
+
+
diff --git a/assets/xml/objects/object_boss03.xml b/assets/xml/objects/object_boss03.xml
index f4def4991..0b4ab9aa2 100644
--- a/assets/xml/objects/object_boss03.xml
+++ b/assets/xml/objects/object_boss03.xml
@@ -5,7 +5,7 @@
whip assets, along with an unused duplicate of the small fishes.
-->
-
+
@@ -69,12 +69,12 @@
-
+
-
-
+
+
diff --git a/assets/xml/objects/object_boss07.xml b/assets/xml/objects/object_boss07.xml
index ac2f9afc1..2d3aa4fa1 100644
--- a/assets/xml/objects/object_boss07.xml
+++ b/assets/xml/objects/object_boss07.xml
@@ -10,7 +10,7 @@
-
+
@@ -68,7 +68,7 @@
-
+
@@ -150,13 +150,13 @@
-
-
-
-
+
+
+
+
-
+
diff --git a/assets/xml/objects/object_box.xml b/assets/xml/objects/object_box.xml
index c0603a6cf..8bb2b7efe 100644
--- a/assets/xml/objects/object_box.xml
+++ b/assets/xml/objects/object_box.xml
@@ -11,12 +11,12 @@
-
-
-
-
-
-
+
+
+
+
+
+
@@ -24,7 +24,7 @@
-
+
diff --git a/assets/xml/objects/object_comb.xml b/assets/xml/objects/object_comb.xml
index d2b00b0dd..2bea4db20 100644
--- a/assets/xml/objects/object_comb.xml
+++ b/assets/xml/objects/object_comb.xml
@@ -1,8 +1,12 @@
+
-
-
-
-
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_dblue_object.xml b/assets/xml/objects/object_dblue_object.xml
index 08cb20ec3..63d28bd33 100644
--- a/assets/xml/objects/object_dblue_object.xml
+++ b/assets/xml/objects/object_dblue_object.xml
@@ -14,7 +14,7 @@
-
+
diff --git a/assets/xml/objects/object_dinofos.xml b/assets/xml/objects/object_dinofos.xml
index 7ed5f81f5..c3c575b0f 100644
--- a/assets/xml/objects/object_dinofos.xml
+++ b/assets/xml/objects/object_dinofos.xml
@@ -36,8 +36,8 @@
-
-
+
+
@@ -64,7 +64,7 @@
-
+
diff --git a/assets/xml/objects/object_dnj.xml b/assets/xml/objects/object_dnj.xml
index 3b4f27579..f7f9d830c 100644
--- a/assets/xml/objects/object_dnj.xml
+++ b/assets/xml/objects/object_dnj.xml
@@ -59,7 +59,7 @@
-
+
diff --git a/assets/xml/objects/object_dnk.xml b/assets/xml/objects/object_dnk.xml
index b085eed28..0e35b1f97 100644
--- a/assets/xml/objects/object_dnk.xml
+++ b/assets/xml/objects/object_dnk.xml
@@ -33,7 +33,7 @@
-
+
diff --git a/assets/xml/objects/object_dns.xml b/assets/xml/objects/object_dns.xml
index e5d91326f..903dfba6c 100644
--- a/assets/xml/objects/object_dns.xml
+++ b/assets/xml/objects/object_dns.xml
@@ -25,7 +25,7 @@
" Format="rgba16" Width="8" Height="8" Offset="0x28E8" />
-
+
diff --git a/assets/xml/objects/object_dog.xml b/assets/xml/objects/object_dog.xml
index 0e3d318b4..d0f306b24 100644
--- a/assets/xml/objects/object_dog.xml
+++ b/assets/xml/objects/object_dog.xml
@@ -3,13 +3,13 @@
-
+
-
+
diff --git a/assets/xml/objects/object_ds2n.xml b/assets/xml/objects/object_ds2n.xml
index 52284c224..e4757de31 100644
--- a/assets/xml/objects/object_ds2n.xml
+++ b/assets/xml/objects/object_ds2n.xml
@@ -14,15 +14,15 @@
-
+
-
+
-
-
-
+
+
+
@@ -49,9 +49,9 @@
-
-
-
+
+
+
@@ -70,10 +70,10 @@
-
+
-
+
@@ -86,7 +86,7 @@
-
+
diff --git a/assets/xml/objects/object_dy_obj.xml b/assets/xml/objects/object_dy_obj.xml
index 91b9a55fb..b321240cc 100644
--- a/assets/xml/objects/object_dy_obj.xml
+++ b/assets/xml/objects/object_dy_obj.xml
@@ -1,51 +1,62 @@
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -55,42 +66,46 @@
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_efc_tw.xml b/assets/xml/objects/object_efc_tw.xml
index a7ca81b55..c28ae3c81 100644
--- a/assets/xml/objects/object_efc_tw.xml
+++ b/assets/xml/objects/object_efc_tw.xml
@@ -1,13 +1,16 @@
-
-
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_eg.xml b/assets/xml/objects/object_eg.xml
index 28686f3ae..a79ff6332 100644
--- a/assets/xml/objects/object_eg.xml
+++ b/assets/xml/objects/object_eg.xml
@@ -41,7 +41,7 @@
-
+
diff --git a/assets/xml/objects/object_f40_switch.xml b/assets/xml/objects/object_f40_switch.xml
index 7e7fb5b1c..6be5a5bd5 100644
--- a/assets/xml/objects/object_f40_switch.xml
+++ b/assets/xml/objects/object_f40_switch.xml
@@ -1,9 +1,10 @@
+
-
-
-
-
-
+
+
+
+
+
diff --git a/assets/xml/objects/object_f52_obj.xml b/assets/xml/objects/object_f52_obj.xml
index 697a5b100..0da643be0 100644
--- a/assets/xml/objects/object_f52_obj.xml
+++ b/assets/xml/objects/object_f52_obj.xml
@@ -1,10 +1,10 @@
-
-
+
+
-
-
+
+
diff --git a/assets/xml/objects/object_famos.xml b/assets/xml/objects/object_famos.xml
index 186e2b59b..f62604424 100644
--- a/assets/xml/objects/object_famos.xml
+++ b/assets/xml/objects/object_famos.xml
@@ -22,7 +22,7 @@
-
+
diff --git a/assets/xml/objects/object_fish.xml b/assets/xml/objects/object_fish.xml
index b4de27c4e..318cb53d5 100644
--- a/assets/xml/objects/object_fish.xml
+++ b/assets/xml/objects/object_fish.xml
@@ -213,7 +213,7 @@
-
+
diff --git a/assets/xml/objects/object_geldb.xml b/assets/xml/objects/object_geldb.xml
index 3ed3ecd7f..3b5dfa4ea 100644
--- a/assets/xml/objects/object_geldb.xml
+++ b/assets/xml/objects/object_geldb.xml
@@ -1,78 +1,84 @@
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_gla.xml b/assets/xml/objects/object_gla.xml
index 60880a7a7..45da7754a 100644
--- a/assets/xml/objects/object_gla.xml
+++ b/assets/xml/objects/object_gla.xml
@@ -31,7 +31,7 @@
-
+
diff --git a/assets/xml/objects/object_ha.xml b/assets/xml/objects/object_ha.xml
index 1ef654330..860b592df 100644
--- a/assets/xml/objects/object_ha.xml
+++ b/assets/xml/objects/object_ha.xml
@@ -1,135 +1,162 @@
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_hs.xml b/assets/xml/objects/object_hs.xml
index d4bf08223..be333f1dc 100644
--- a/assets/xml/objects/object_hs.xml
+++ b/assets/xml/objects/object_hs.xml
@@ -44,8 +44,8 @@
-
+
-
+
diff --git a/assets/xml/objects/object_ik.xml b/assets/xml/objects/object_ik.xml
index fcbb90620..66df1e9ed 100644
--- a/assets/xml/objects/object_ik.xml
+++ b/assets/xml/objects/object_ik.xml
@@ -52,25 +52,25 @@
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_ka.xml b/assets/xml/objects/object_ka.xml
index 69ea2d929..914617b41 100644
--- a/assets/xml/objects/object_ka.xml
+++ b/assets/xml/objects/object_ka.xml
@@ -1,6 +1,7 @@
+
-
+
@@ -59,11 +60,11 @@
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_kaizoku_obj.xml b/assets/xml/objects/object_kaizoku_obj.xml
index 9ae61accf..c13f32125 100644
--- a/assets/xml/objects/object_kaizoku_obj.xml
+++ b/assets/xml/objects/object_kaizoku_obj.xml
@@ -1,22 +1,22 @@
-
+
-
-
+
+
-
-
+
+
-
+
@@ -27,15 +27,15 @@
-
-
-
+
+
+
-
+
-
+
diff --git a/assets/xml/objects/object_kamejima.xml b/assets/xml/objects/object_kamejima.xml
index cce285475..272a541be 100644
--- a/assets/xml/objects/object_kamejima.xml
+++ b/assets/xml/objects/object_kamejima.xml
@@ -5,29 +5,29 @@
-
+
-
+
-
-
+
+
-
-
-
+
+
+
-
+
-
+
@@ -88,12 +88,12 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_kanban.xml b/assets/xml/objects/object_kanban.xml
index b821aa288..e5baa90ee 100644
--- a/assets/xml/objects/object_kanban.xml
+++ b/assets/xml/objects/object_kanban.xml
@@ -1,18 +1,19 @@
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_kbt.xml b/assets/xml/objects/object_kbt.xml
index 102aed91d..bf6078da8 100644
--- a/assets/xml/objects/object_kbt.xml
+++ b/assets/xml/objects/object_kbt.xml
@@ -1,16 +1,16 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -69,7 +69,7 @@
-
-
+
+
diff --git a/assets/xml/objects/object_keikoku_demo.xml b/assets/xml/objects/object_keikoku_demo.xml
index 3a0a20b65..b9433a48f 100644
--- a/assets/xml/objects/object_keikoku_demo.xml
+++ b/assets/xml/objects/object_keikoku_demo.xml
@@ -7,21 +7,21 @@
-
+
-
+
-
+
-
+
-
+
diff --git a/assets/xml/objects/object_keikoku_obj.xml b/assets/xml/objects/object_keikoku_obj.xml
index ff5a6899c..b6d61e91f 100644
--- a/assets/xml/objects/object_keikoku_obj.xml
+++ b/assets/xml/objects/object_keikoku_obj.xml
@@ -8,19 +8,19 @@
-
+
-
+
-
+
-
+
diff --git a/assets/xml/objects/object_kepn_koya.xml b/assets/xml/objects/object_kepn_koya.xml
index 893892d25..cc14f0556 100644
--- a/assets/xml/objects/object_kepn_koya.xml
+++ b/assets/xml/objects/object_kepn_koya.xml
@@ -1,7 +1,7 @@
-
-
+
+
@@ -13,6 +13,6 @@
-
+
diff --git a/assets/xml/objects/object_kgy.xml b/assets/xml/objects/object_kgy.xml
index 5bbf17793..b83234b8c 100644
--- a/assets/xml/objects/object_kgy.xml
+++ b/assets/xml/objects/object_kgy.xml
@@ -1,13 +1,13 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
@@ -39,10 +39,10 @@
-
+
-
+
@@ -68,7 +68,7 @@
-
-
+
+
diff --git a/assets/xml/objects/object_kibako.xml b/assets/xml/objects/object_kibako.xml
index 43276080a..2cdd6ce36 100644
--- a/assets/xml/objects/object_kibako.xml
+++ b/assets/xml/objects/object_kibako.xml
@@ -2,8 +2,8 @@
-
+
-
+
diff --git a/assets/xml/objects/object_kibako2.xml b/assets/xml/objects/object_kibako2.xml
index 4b6ce5ac7..180038e82 100644
--- a/assets/xml/objects/object_kibako2.xml
+++ b/assets/xml/objects/object_kibako2.xml
@@ -4,11 +4,11 @@
-
-
+
+
-
-
+
+
diff --git a/assets/xml/objects/object_kin2_obj.xml b/assets/xml/objects/object_kin2_obj.xml
index d36766ee4..6e63f19cd 100644
--- a/assets/xml/objects/object_kin2_obj.xml
+++ b/assets/xml/objects/object_kin2_obj.xml
@@ -4,32 +4,28 @@
Piece, bookshelves and chests of drawers.
-->
-
+
+
-
-
-
-
+
+
+
-
+
+
+
-
-
-
-
+
+
+
-
-
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
diff --git a/assets/xml/objects/object_kinsta1_obj.xml b/assets/xml/objects/object_kinsta1_obj.xml
index 48d40c527..d2a55b04d 100644
--- a/assets/xml/objects/object_kinsta1_obj.xml
+++ b/assets/xml/objects/object_kinsta1_obj.xml
@@ -1,7 +1,8 @@
+
-
-
-
+
+
+
diff --git a/assets/xml/objects/object_kinsta2_obj.xml b/assets/xml/objects/object_kinsta2_obj.xml
index 85e829c66..66bec962d 100644
--- a/assets/xml/objects/object_kinsta2_obj.xml
+++ b/assets/xml/objects/object_kinsta2_obj.xml
@@ -1,7 +1,7 @@
-
+
diff --git a/assets/xml/objects/object_kitan.xml b/assets/xml/objects/object_kitan.xml
index edc2e5cc6..cd7db0005 100644
--- a/assets/xml/objects/object_kitan.xml
+++ b/assets/xml/objects/object_kitan.xml
@@ -1,8 +1,8 @@
-
-
-
+
+
+
diff --git a/assets/xml/objects/object_knight.xml b/assets/xml/objects/object_knight.xml
index fa0e900e4..2a8595627 100644
--- a/assets/xml/objects/object_knight.xml
+++ b/assets/xml/objects/object_knight.xml
@@ -1,49 +1,57 @@
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -101,14 +109,14 @@
-
-
+
+
-
+
@@ -201,11 +209,11 @@
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_kumo30.xml b/assets/xml/objects/object_kumo30.xml
index 24e8d3974..3a74c0988 100644
--- a/assets/xml/objects/object_kumo30.xml
+++ b/assets/xml/objects/object_kumo30.xml
@@ -1,12 +1,12 @@
-
-
+
+
-
+
diff --git a/assets/xml/objects/object_kusa.xml b/assets/xml/objects/object_kusa.xml
index 36c61f364..362e47114 100644
--- a/assets/xml/objects/object_kusa.xml
+++ b/assets/xml/objects/object_kusa.xml
@@ -1,6 +1,6 @@
-
-
+
+
diff --git a/assets/xml/objects/object_kz.xml b/assets/xml/objects/object_kz.xml
index f500ba141..6295d7b1d 100644
--- a/assets/xml/objects/object_kz.xml
+++ b/assets/xml/objects/object_kz.xml
@@ -1,17 +1,17 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
@@ -82,12 +82,12 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_kzsaku.xml b/assets/xml/objects/object_kzsaku.xml
index 4cfce2de2..fa157409e 100644
--- a/assets/xml/objects/object_kzsaku.xml
+++ b/assets/xml/objects/object_kzsaku.xml
@@ -1,7 +1,8 @@
+
-
-
-
+
+
+
diff --git a/assets/xml/objects/object_ladder.xml b/assets/xml/objects/object_ladder.xml
index 6e42412ec..2fc01e5bf 100644
--- a/assets/xml/objects/object_ladder.xml
+++ b/assets/xml/objects/object_ladder.xml
@@ -1,13 +1,23 @@
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_last_obj.xml b/assets/xml/objects/object_last_obj.xml
index 03dbddcf2..bd452a408 100644
--- a/assets/xml/objects/object_last_obj.xml
+++ b/assets/xml/objects/object_last_obj.xml
@@ -1,21 +1,21 @@
-
+
-
-
+
+
-
-
+
+
-
+
diff --git a/assets/xml/objects/object_lastday.xml b/assets/xml/objects/object_lastday.xml
index e447edfbf..4c6b5fdb4 100644
--- a/assets/xml/objects/object_lastday.xml
+++ b/assets/xml/objects/object_lastday.xml
@@ -3,13 +3,13 @@
-
+
-
+
-
+
-
+
diff --git a/assets/xml/objects/object_lbfshot.xml b/assets/xml/objects/object_lbfshot.xml
index 325ddf49e..881f877b6 100644
--- a/assets/xml/objects/object_lbfshot.xml
+++ b/assets/xml/objects/object_lbfshot.xml
@@ -1,9 +1,9 @@
-
-
+
+
-
+
diff --git a/assets/xml/objects/object_lightblock.xml b/assets/xml/objects/object_lightblock.xml
index 207b03020..07c5da688 100644
--- a/assets/xml/objects/object_lightblock.xml
+++ b/assets/xml/objects/object_lightblock.xml
@@ -1,9 +1,10 @@
+
-
-
-
-
-
+
+
+
+
+
diff --git a/assets/xml/objects/object_lightswitch.xml b/assets/xml/objects/object_lightswitch.xml
index 4318488be..a8b26bc51 100644
--- a/assets/xml/objects/object_lightswitch.xml
+++ b/assets/xml/objects/object_lightswitch.xml
@@ -1,9 +1,9 @@
-
-
+
+
-
+
diff --git a/assets/xml/objects/object_link_goron.xml b/assets/xml/objects/object_link_goron.xml
index 76017884e..b6dd7fe6f 100644
--- a/assets/xml/objects/object_link_goron.xml
+++ b/assets/xml/objects/object_link_goron.xml
@@ -42,7 +42,7 @@
-
+
@@ -72,10 +72,10 @@
-
+
-
+
@@ -90,7 +90,7 @@
-
+
diff --git a/assets/xml/objects/object_link_zora.xml b/assets/xml/objects/object_link_zora.xml
index 5833293b8..be4c54274 100644
--- a/assets/xml/objects/object_link_zora.xml
+++ b/assets/xml/objects/object_link_zora.xml
@@ -80,7 +80,7 @@
-
+
diff --git a/assets/xml/objects/object_lotus.xml b/assets/xml/objects/object_lotus.xml
index b9f40033c..923218811 100644
--- a/assets/xml/objects/object_lotus.xml
+++ b/assets/xml/objects/object_lotus.xml
@@ -4,6 +4,6 @@
-
+
diff --git a/assets/xml/objects/object_mamenoki.xml b/assets/xml/objects/object_mamenoki.xml
index 9ce4644c3..9fa5b6832 100644
--- a/assets/xml/objects/object_mamenoki.xml
+++ b/assets/xml/objects/object_mamenoki.xml
@@ -1,9 +1,9 @@
-
-
-
-
+
+
+
+
diff --git a/assets/xml/objects/object_maruta.xml b/assets/xml/objects/object_maruta.xml
index e61e1162b..c44907b1d 100644
--- a/assets/xml/objects/object_maruta.xml
+++ b/assets/xml/objects/object_maruta.xml
@@ -3,14 +3,14 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_mastergolon.xml b/assets/xml/objects/object_mastergolon.xml
index 35eb9d285..481fb7cde 100644
--- a/assets/xml/objects/object_mastergolon.xml
+++ b/assets/xml/objects/object_mastergolon.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/assets/xml/objects/object_masterzoora.xml b/assets/xml/objects/object_masterzoora.xml
index f21b99b50..5a72744da 100644
--- a/assets/xml/objects/object_masterzoora.xml
+++ b/assets/xml/objects/object_masterzoora.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/assets/xml/objects/object_milkbar.xml b/assets/xml/objects/object_milkbar.xml
index 38bec140b..f3e732514 100644
--- a/assets/xml/objects/object_milkbar.xml
+++ b/assets/xml/objects/object_milkbar.xml
@@ -1,27 +1,27 @@
-
+
-
+
-
+
-
+
-
+
-
-
+
+
@@ -33,12 +33,12 @@
-
+
-
-
+
+
diff --git a/assets/xml/objects/object_mir_ray.xml b/assets/xml/objects/object_mir_ray.xml
index 962982322..c0b1cf6f2 100644
--- a/assets/xml/objects/object_mir_ray.xml
+++ b/assets/xml/objects/object_mir_ray.xml
@@ -1,7 +1,7 @@
-
+
diff --git a/assets/xml/objects/object_mk.xml b/assets/xml/objects/object_mk.xml
index 087fcc9e0..0db6c703d 100644
--- a/assets/xml/objects/object_mk.xml
+++ b/assets/xml/objects/object_mk.xml
@@ -1,45 +1,46 @@
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_mm.xml b/assets/xml/objects/object_mm.xml
index 43e8e930b..b7b727d4e 100644
--- a/assets/xml/objects/object_mm.xml
+++ b/assets/xml/objects/object_mm.xml
@@ -1,10 +1,10 @@
-
-
-
-
-
+
+
+
+
+
@@ -32,9 +32,9 @@
-
-
-
+
+
+
@@ -55,14 +55,14 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_mnk.xml b/assets/xml/objects/object_mnk.xml
index ee2d1a55e..794069ee7 100644
--- a/assets/xml/objects/object_mnk.xml
+++ b/assets/xml/objects/object_mnk.xml
@@ -1,7 +1,7 @@
-
+
@@ -9,11 +9,11 @@
-
-
-
-
-
+
+
+
+
+
@@ -23,32 +23,32 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -109,14 +109,14 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
@@ -126,6 +126,6 @@
-
+
diff --git a/assets/xml/objects/object_moonend.xml b/assets/xml/objects/object_moonend.xml
index 666e9e07c..4e4b5a6f2 100644
--- a/assets/xml/objects/object_moonend.xml
+++ b/assets/xml/objects/object_moonend.xml
@@ -34,7 +34,7 @@
-
+
diff --git a/assets/xml/objects/object_moonston.xml b/assets/xml/objects/object_moonston.xml
index 58a920522..2945469f2 100644
--- a/assets/xml/objects/object_moonston.xml
+++ b/assets/xml/objects/object_moonston.xml
@@ -4,8 +4,8 @@
along with its associated fire trail.
-->
-
-
+
+
diff --git a/assets/xml/objects/object_ms.xml b/assets/xml/objects/object_ms.xml
index f861e6a37..1b3f86145 100644
--- a/assets/xml/objects/object_ms.xml
+++ b/assets/xml/objects/object_ms.xml
@@ -1,7 +1,7 @@
-
+
diff --git a/assets/xml/objects/object_mu.xml b/assets/xml/objects/object_mu.xml
index 37886e8f5..a72b184c1 100644
--- a/assets/xml/objects/object_mu.xml
+++ b/assets/xml/objects/object_mu.xml
@@ -1,11 +1,11 @@
-
-
-
-
-
+
+
+
+
+
@@ -58,6 +58,6 @@
-
+
diff --git a/assets/xml/objects/object_niw.xml b/assets/xml/objects/object_niw.xml
index 157d2b302..db47a439f 100644
--- a/assets/xml/objects/object_niw.xml
+++ b/assets/xml/objects/object_niw.xml
@@ -35,6 +35,6 @@
-
+
diff --git a/assets/xml/objects/object_ob.xml b/assets/xml/objects/object_ob.xml
index d23ab6790..1efe524b4 100644
--- a/assets/xml/objects/object_ob.xml
+++ b/assets/xml/objects/object_ob.xml
@@ -65,10 +65,10 @@
-
+
-
+
diff --git a/assets/xml/objects/object_obj_tokeidai.xml b/assets/xml/objects/object_obj_tokeidai.xml
index 09e070254..94a302ea4 100644
--- a/assets/xml/objects/object_obj_tokeidai.xml
+++ b/assets/xml/objects/object_obj_tokeidai.xml
@@ -36,7 +36,7 @@
-
+
@@ -68,11 +68,11 @@
-
+
-
+
diff --git a/assets/xml/objects/object_obj_yasi.xml b/assets/xml/objects/object_obj_yasi.xml
index a8e153edd..34ace132e 100644
--- a/assets/xml/objects/object_obj_yasi.xml
+++ b/assets/xml/objects/object_obj_yasi.xml
@@ -3,10 +3,10 @@
-
-
-
-
+
+
+
+
diff --git a/assets/xml/objects/object_random_obj.xml b/assets/xml/objects/object_random_obj.xml
index 9b9986ca1..509ed86c7 100644
--- a/assets/xml/objects/object_random_obj.xml
+++ b/assets/xml/objects/object_random_obj.xml
@@ -1,6 +1,7 @@
+
-
-
+
+
diff --git a/assets/xml/objects/object_redead_obj.xml b/assets/xml/objects/object_redead_obj.xml
index fd286d6e7..8460579b3 100644
--- a/assets/xml/objects/object_redead_obj.xml
+++ b/assets/xml/objects/object_redead_obj.xml
@@ -1,7 +1,8 @@
+
-
-
-
+
+
+
diff --git a/assets/xml/objects/object_rotlift.xml b/assets/xml/objects/object_rotlift.xml
index da5db27d7..c2acf0540 100644
--- a/assets/xml/objects/object_rotlift.xml
+++ b/assets/xml/objects/object_rotlift.xml
@@ -3,7 +3,7 @@
-
+
@@ -11,7 +11,7 @@
-
+
diff --git a/assets/xml/objects/object_ru2.xml b/assets/xml/objects/object_ru2.xml
index 89d00e9d7..7d5823a50 100644
--- a/assets/xml/objects/object_ru2.xml
+++ b/assets/xml/objects/object_ru2.xml
@@ -17,7 +17,7 @@
-
+
diff --git a/assets/xml/objects/object_sdn.xml b/assets/xml/objects/object_sdn.xml
index 8271480be..bcc1f7637 100644
--- a/assets/xml/objects/object_sdn.xml
+++ b/assets/xml/objects/object_sdn.xml
@@ -3,19 +3,19 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -33,17 +33,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -61,6 +61,6 @@
-
+
diff --git a/assets/xml/objects/object_shn.xml b/assets/xml/objects/object_shn.xml
index 97d2e4854..3e39b2eff 100644
--- a/assets/xml/objects/object_shn.xml
+++ b/assets/xml/objects/object_shn.xml
@@ -80,7 +80,7 @@
-
+
diff --git a/assets/xml/objects/object_sichitai_obj.xml b/assets/xml/objects/object_sichitai_obj.xml
index d1179beab..03bc4f7f3 100644
--- a/assets/xml/objects/object_sichitai_obj.xml
+++ b/assets/xml/objects/object_sichitai_obj.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/assets/xml/objects/object_skb.xml b/assets/xml/objects/object_skb.xml
index 78413a9de..b1afaf353 100644
--- a/assets/xml/objects/object_skb.xml
+++ b/assets/xml/objects/object_skb.xml
@@ -1,64 +1,65 @@
+
-
-
-
-
+
+
+
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
diff --git a/assets/xml/objects/object_stk.xml b/assets/xml/objects/object_stk.xml
index a6f00c89b..eccbbb3a1 100644
--- a/assets/xml/objects/object_stk.xml
+++ b/assets/xml/objects/object_stk.xml
@@ -23,13 +23,13 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_tro.xml b/assets/xml/objects/object_tro.xml
index a794217b4..0a4a3ea8b 100644
--- a/assets/xml/objects/object_tro.xml
+++ b/assets/xml/objects/object_tro.xml
@@ -1,6 +1,6 @@
-
+
@@ -13,6 +13,6 @@
-
+
diff --git a/assets/xml/objects/object_wdor04.xml b/assets/xml/objects/object_wdor04.xml
index 07ad601dd..d47e78a8e 100644
--- a/assets/xml/objects/object_wdor04.xml
+++ b/assets/xml/objects/object_wdor04.xml
@@ -2,6 +2,6 @@
-
+
diff --git a/assets/xml/objects/object_yb.xml b/assets/xml/objects/object_yb.xml
index d00a61170..6c0ae86df 100644
--- a/assets/xml/objects/object_yb.xml
+++ b/assets/xml/objects/object_yb.xml
@@ -8,10 +8,10 @@
-
+
-
+
@@ -39,10 +39,10 @@
-
+
-
+
@@ -57,6 +57,6 @@
-
+
diff --git a/assets/xml/objects/object_zl1.xml b/assets/xml/objects/object_zl1.xml
index 2b8a101bc..ed7fbf987 100644
--- a/assets/xml/objects/object_zl1.xml
+++ b/assets/xml/objects/object_zl1.xml
@@ -1,90 +1,117 @@
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_zl4.xml b/assets/xml/objects/object_zl4.xml
index 73ebb8606..2c5eff1ef 100644
--- a/assets/xml/objects/object_zl4.xml
+++ b/assets/xml/objects/object_zl4.xml
@@ -93,7 +93,7 @@
-
+
@@ -104,7 +104,7 @@
-
+
@@ -118,7 +118,7 @@
-
+
diff --git a/assets/xml/objects/object_zod.xml b/assets/xml/objects/object_zod.xml
index 45fb179cc..a926e6ef9 100644
--- a/assets/xml/objects/object_zod.xml
+++ b/assets/xml/objects/object_zod.xml
@@ -24,9 +24,9 @@
-
-
-
+
+
+
diff --git a/assets/xml/overlays/ovl_En_Mm2.xml b/assets/xml/overlays/ovl_En_Mm2.xml
index 5d0be627f..81457d849 100644
--- a/assets/xml/overlays/ovl_En_Mm2.xml
+++ b/assets/xml/overlays/ovl_En_Mm2.xml
@@ -8,7 +8,7 @@
-
+
diff --git a/docs/tutorial/object_decomp_example.md b/docs/tutorial/object_decomp_example.md
index e4025caae..10fcf2766 100644
--- a/docs/tutorial/object_decomp_example.md
+++ b/docs/tutorial/object_decomp_example.md
@@ -197,13 +197,13 @@ We can see this is the guard's Deku Flower:
We can name the display list as such in the XML:
```xml
-
+
```
Then, like all steps before, we can run `./extract_assets.py -s objects/object_dns` and then update `z_en_dns.c` with our new name:
```c
-gSPDisplayList(POLY_OPA_DISP++, gKingsChamberDekuGuardDekuFlower);
+gSPDisplayList(POLY_OPA_DISP++, gKingsChamberDekuGuardDekuFlowerDL);
```
## Step #5: Naming limb display lists
diff --git a/include/CIC6105.h b/include/CIC6105.h
new file mode 100644
index 000000000..09a363a4d
--- /dev/null
+++ b/include/CIC6105.h
@@ -0,0 +1,21 @@
+#ifndef CIC6105_H
+#define CIC6105_H
+
+#include "ultra64.h"
+
+// IPL3 puts values in those addresses as part of the anti-piracy checks
+#define CIC_ADDRESS_1 0x002FB1F4
+#define CIC_ADDRESS_2 0x002FE1C0
+
+
+void CIC6105_Noop1(void);
+void CIC6105_Noop2(void);
+void CIC6105_PrintRomInfo(void);
+void CIC6105_AddRomInfoFaultPage(void);
+void CIC6105_Destroy(void);
+void CIC6105_Init(void);
+
+extern s32 gCICAddr1Val;
+extern s32 gCICAddr2Val;
+
+#endif
diff --git a/include/build.h b/include/build.h
new file mode 100644
index 000000000..5099e5d3c
--- /dev/null
+++ b/include/build.h
@@ -0,0 +1,8 @@
+#ifndef BUILD_H
+#define BUILD_H
+
+extern char gBuildTeam[];
+extern char gBuildDate[];
+extern char gBuildMakeOption[];
+
+#endif
diff --git a/include/functions.h b/include/functions.h
index 7ab743bd0..74b593152 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -34,13 +34,9 @@ void IrqMgr_HandlePRENMI500(IrqMgr* irqmgr);
void IrqMgr_HandleRetrace(IrqMgr* irqmgr);
void IrqMgr_ThreadEntry(IrqMgr* irqmgr);
void IrqMgr_Init(IrqMgr* irqmgr, void* stack, OSPri pri, u8 retraceCount);
-void CIC6105_Nop80081820(void);
-void CIC6105_Nop80081828(void);
-void CIC6105_PrintRomInfo(void);
-void CIC6105_AddRomInfoFaultPage(void);
-void CIC6105_RemoveRomInfoFaultPage(void);
-void func_800818F4(void);
+
void osSyncPrintfUnused(const char* fmt, ...);
+
void rmonPrintf(const char* fmt, ...);
void RcpUtils_PrintRegisterStatus(void);
@@ -207,8 +203,8 @@ void EffectSsGFire_Spawn(PlayState* play, Vec3f* pos);
// void EffectSsLightning_Spawn(UNK_TYPE4 uParm1, Vec3f* pzParm2, Color_RGBA8* pzParm3, Color_RGBA8* pzParm4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8);
void EffectSsDtBubble_SpawnColorProfile(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, s16 life, s16 colorProfile, s16 randXZ);
void EffectSsDtBubble_SpawnCustomColor(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, Color_RGBA8* primColor, Color_RGBA8* envColor, s16 scale, s16 life, s16 randXZ);
-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 EffectSsHahen_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 flags, s16 scale, s16 objectId, s16 life, Gfx* dList);
+void EffectSsHahen_SpawnBurst(PlayState* play, Vec3f* pos, f32 burstScale, s16 flags, s16 scale, s16 randScaleRange, s16 count, s16 objectId, s16 life, Gfx* dList);
// void func_800B2364(void);
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);
@@ -219,7 +215,7 @@ void EffectSsHitmark_SpawnCustomScale(PlayState* play, s32 type, s16 scale, Vec3
void EffectSsFhgFlash_SpawnShock(PlayState* play, Actor* actor, Vec3f* pos, s16 scale, u8 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 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 objectId, 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(PlayState* play, Vec3f* refPos, f32 scale);
void func_800B2B44(PlayState* play, Actor* actor, Vec3f* pos, f32 scale);
@@ -531,89 +527,6 @@ void Font_LoadChar(PlayState* play, u16 codePointIndex, s32 offset);
void Font_LoadCharNES(PlayState* play, u8 codePointIndex, s32 offset);
void Font_LoadMessageBoxEndIcon(Font* font, u16 icon);
void Font_LoadOrderedFont(Font* font);
-// void func_800F5090(void);
-s32 Environment_ZBufValToFixedPoint(s32 zBufferVal);
-void Environment_Init(PlayState* play, EnvironmentContext* envCtx, s32 arg2);
-u32 func_800F5954(u8* param_1, u32 param_2, u32 param_3, u8 param_4, u8 param_5);
-f32 Environment_LerpWeight(u16 max, u16 min, u16 val);
-// void func_800F5B10(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5);
-void Environment_UpdateSkybox(u8 skyboxId, EnvironmentContext* envCtx, SkyboxContext* skyboxCtx);
-void func_800F6834(PlayState* play, s32 waterLightsIndex);
-void func_800F694C(PlayState* play);
-// void func_800F6A04(void);
-// void func_800F6A40(void);
-// void func_800F6AB8(void);
-void func_800F6B44(PlayState* play, EnvironmentContext* envCtx, s32 iParm3, s32 iParm4, s16* param_5);
-// void func_800F6CEC(void);
-// void func_800F6EA4(void);
-// UNK_TYPE4 Kankyo_IsSceneUpsideDown(PlayState* play);
-void func_800F6FF8(PlayState* play, EnvironmentContext* envCtx, LightContext* lightCtx);
-// void func_800F8554(void);
-// void func_800F88C4(void);
-// void func_800F8970(void);
-// void func_800F8A9C(void);
-void Environment_Update(PlayState* play, EnvironmentContext* envCtx, LightContext* lightCtx,
- PauseContext* pauseCtx, MessageContext* msgCtx, GameOverContext* gameOverCtx,
- GraphicsContext* gfxCtx);
-// void func_800F8D84(void);
-void Environment_DrawSunLensFlare(PlayState* play, EnvironmentContext* envCtx, View* view, GraphicsContext* gfxCtx, Vec3f pos);
-void func_800F9824(PlayState* play, EnvironmentContext* envCtx, View* view, GraphicsContext* gfxCtx, Vec3f vec, f32 arg5, f32 arg6, s8 arg7, s8 arg8);
-// void func_800FA39C(void);
-// void func_800FA3C4(void);
-void Environment_DrawRain(PlayState* play, View* view, GraphicsContext* gfxCtx);
-void func_800FAAB4(PlayState* play, u8 arg1);
-// void func_800FAC20(void);
-// void func_800FAF74(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE1 param_5);
-// void func_800FB010(void);
-void Environment_AddLightningBolts(PlayState* play, u8 num);
-// void func_800FB388(void);
-void func_800FB758(PlayState* play);
-// void func_800FB9B4(void);
-void Environment_DrawCustomLensFlare(PlayState* play);
-void Kankyo_InitGameOverLights(PlayState* play);
-void Kankyo_FadeInGameOverLights(PlayState* play);
-void Kankyo_FadeOutGameOverLights(PlayState* play);
-// void func_800FC3DC(void);
-void Environment_FillScreen(GraphicsContext* gfxCtx, u8 red, u8 green, u8 blue, u8 alpha, u8 drawFlags);
-void Environment_DrawSandstorm(PlayState* play, u8 sandstormState);
-s32 func_800FD2B4(PlayState* play, f32 arg1, f32 arg2, f32 arg3, f32 arg4);
-void func_800FD538(Color_RGB8* param_1, Color_RGB8* param_2, f32 param_3, Vec3s* param_4);
-void Environment_LerpAmbientColor(PlayState* play, Color_RGB8* to, f32 lerp);
-void Environment_LerpDiffuseColor(PlayState* play, Color_RGB8* to, f32 lerp);
-void Environment_LerpFogColor(PlayState* play, Color_RGB8* to, f32 lerp);
-void Environment_LerpFog(PlayState* play, s16 fogNearTarget, s16 zFarTarget, f32 lerp);
-// u32 get_days_elapsed(void);
-// void reset_days_elapsed(void);
-// u32 get_current_day(void);
-void func_800FD750(u16 seqId);
-s32 func_800FD768(void);
-void func_800FD78C(PlayState* play);
-void func_800FD858(PlayState* play);
-void func_800FD928(s32 param_1);
-// void func_800FD980(void);
-// void func_800FDAF8(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
-// void func_800FDC94(void);
-void func_800FE390(PlayState* play);
-void func_800FE3E0(PlayState* play);
-void Environment_StopTime(void);
-void Environment_StartTime(void);
-u8 Environment_IsTimeStopped(void);
-u32 func_800FE4B8(PlayState* play);
-s32 func_800FE590(PlayState* play);
-// void func_800FE5D0(void);
-// UNK_TYPE4 func_800FE610(void);
-u32 func_800FE620(PlayState* play);
-void func_800FE658(f32 arg0);
-// UNK_TYPE4 func_800FE6F8(UNK_TYPE4 param_1, s16 param_2, s16 param_3);
-// void func_800FE778(void);
-// void func_800FE788(void);
-// void func_800FE798(void);
-void func_800FE7A8(Color_RGBA8* inColor, Color_RGBA8* outColor);
-s32 func_800FE9B4(PlayState* play);
-void func_800FEA50(PlayState* play);
-void func_800FEAB0(void);
-// void func_800FEAC0(void);
-void func_800FEAF4(EnvironmentContext* envCtx);
void* Lib_MemCpy(void* dest, void* src, size_t size);
void* Lib_MemSet(void* buffer, s32 value, size_t size);
@@ -624,7 +537,7 @@ void Lib_PlaySfx(u16 sfxId);
void Lib_PlaySfx_2(u16 sfxId);
void Lib_PlaySfx_AtPos(Vec3f* pos, u16 sfxId);
void Lib_Vec3f_TranslateAndRotateY(Vec3f* translation, s16 rotAngle, Vec3f* src, Vec3f* dst);
-void Lib_LerpRGB(Color_RGB8* a, Color_RGB8* b, f32 t, Color_RGB8* dst);
+void Color_RGB8_Lerp(Color_RGB8* a, Color_RGB8* b, f32 t, Color_RGB8* dst);
void Lib_Nop801004FC(void);
void* Lib_SegmentedToVirtual(void* ptr);
void* Lib_SegmentedToVirtualNull(void* ptr);
@@ -671,10 +584,10 @@ 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* outMaxFree, size_t* outFree, size_t* outAlloc);
-s32 ZeldaArena_Check();
+s32 ZeldaArena_Check(void);
void ZeldaArena_Init(void* start, size_t size);
void ZeldaArena_Cleanup(void);
-u8 ZeldaArena_IsInitialized();
+u8 ZeldaArena_IsInitialized(void);
// void func_80102E40(void);
// void func_80102E90(void);
// void func_80102EA4(void);
@@ -888,7 +801,7 @@ s32 func_80123448(PlayState* play);
s32 Player_IsGoronOrDeku(Player* player);
s32 func_801234D4(PlayState* play);
s32 func_80123590(PlayState* play, Actor* actor);
-ItemId func_8012364C(PlayState* play, Player* player, s32 arg2);
+ItemId Player_GetItemOnButton(PlayState* play, Player* player, EquipSlot slot);
PlayerItemAction func_80123810(PlayState* play);
PlayerModelGroup Player_ActionToModelGroup(Player* player, PlayerItemAction itemAction);
void Player_SetModelsForHoldingShield(Player* player);
@@ -995,75 +908,6 @@ void func_8014116C(Gfx** gfxP, u16* arg1, u16* workBuffer, s32 width, s32 height
// void func_80141678(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
void func_80141778(Struct_80140E80* arg0, Gfx** gfxp, void* unk_18E60, GraphicsContext* gfxCtx);
-// void func_80147520(void);
-void func_80147564(PlayState* play);
-s32 Message_ShouldAdvance(PlayState* play);
-s32 Message_ShouldAdvanceSilent(PlayState* play);
-void Message_CloseTextbox(PlayState* play);
-void func_80147818(PlayState* play, UNK_PTR puParm2, UNK_TYPE4 uParm3, UNK_TYPE4 uParm4);
-// void func_80147F18(PlayState* play, UNK_PTR puParm2, UNK_TYPE4 uParm3, UNK_TYPE4 uParm4);
-// void func_80148558(PlayState* play, UNK_PTR puParm2, UNK_TYPE4 uParm3, UNK_TYPE4 uParm4);
-void func_80148B98(PlayState* play, u8 arg1);
-// void func_80148CBC(void);
-// void func_80148D64(void);
-// void func_80149048(void);
-// void func_801491DC(void);
-// void func_80149454(void);
-// void func_801496C8(void);
-// void func_8014995C(void);
-void func_80149C18(PlayState* play);
-// void Message_FindMessage(void);
-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 decodedBufPos);
-// void func_8014CCB4(void);
-// void func_8014CDF0(void);
-// void func_8014CFDC(void);
-void func_8014D304(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
-// void func_8014D62C(void);
-// void func_8014D7B4(void);
-void func_80150A84(PlayState* play);
-void func_80150D08(PlayState* play, u32 uParm2);
-void func_801514B0(PlayState* play, u16 arg1, u8 arg2);
-void Message_StartTextbox(PlayState* play, u16 textId, Actor* Actor);
-void Message_ContinueTextbox(PlayState* play, u16 textId);
-void func_80151A68(PlayState* play, u16 textId);
-void Message_BombersNotebookQueueEvent(PlayState* play, u8 event);
-// void func_80151C9C(void);
-void func_80151DA4(PlayState* play, u16 arg2);
-void func_80152434(PlayState* play, u16 arg2);
-// void func_80152464(void);
-u8 Message_GetState(MessageContext* msgCtx);
-// void func_8015268C(void);
-// void func_80152C64(void);
-// void func_80152CAC(void);
-// void func_80152EC0(void);
-// void func_80152FB8(void);
-// void func_80153750(void);
-// void func_80153E7C(void);
-// void func_80153EF0(void);
-void func_801541D4(PlayState* play, Gfx** gfxp);
-void Message_Draw(PlayState* play);
-void Message_Update(PlayState* play);
-void func_801586A4(PlayState* play);
-void Message_Init(PlayState* play);
-void Message_FindMessageNES(PlayState* play, u16 textId);
-// void Message_LoadCharNES(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5);
-// void Message_LoadPluralRupeesNES(void);
-// 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_LoadOwlWarpTextNES(void);
-// void func_80159438(void);
-void func_8015966C(PlayState* play, UNK_PTR puParm2, UNK_TYPE arg3);
-// void func_8015A144(void);
-void func_8015B198(PlayState* play);
-void Message_FindCreditsMessage(PlayState* play, u16 textId);
-void func_8015E7EC(PlayState* play, UNK_PTR puParm2);
-// void func_8015F8A8(UNK_TYPE4 ctxt);
-
uintptr_t KaleidoManager_FaultAddrConv(uintptr_t address, void* param);
void KaleidoManager_LoadOvl(KaleidoMgrOverlay* ovl);
void KaleidoManager_ClearOvl(KaleidoMgrOverlay* ovl);
@@ -1474,7 +1318,7 @@ void Audio_StopSequenceInCutscene(u16 seqId);
s32 Audio_IsSequencePlaying(u8 seqId);
void Audio_PlayBgm_StorePrevBgm(u16 seqId);
void Audio_RestorePrevBgm(void);
-// void func_801A3000(void);
+void func_801A3000(u16 seqId, u8 ioData);
// void func_801A3038(void);
void Audio_PlayFanfare(u16 seqId);
// void func_801A312C(void);
diff --git a/include/gfx.h b/include/gfx.h
index 790279368..63b3eadfc 100644
--- a/include/gfx.h
+++ b/include/gfx.h
@@ -146,8 +146,8 @@ typedef struct GraphicsContext {
/* 0x2D8 */ char unk_2D8[0x2];
/* 0x2DA */ u8 updateViMode;
/* 0x2DB */ u8 framebufferIndex;
- /* 0x2DC */ void (*callback)(struct GraphicsContext*, u32);
- /* 0x2E0 */ u32 callbackArg;
+ /* 0x2DC */ void (*callback)(struct GraphicsContext*, void*);
+ /* 0x2E0 */ void* callbackArg;
/* 0x2E4 */ f32 xScale;
/* 0x2E8 */ f32 yScale;
/* 0x2EC */ GfxMasterList* masterList;
diff --git a/include/macros.h b/include/macros.h
index 46932a0a6..bc7439394 100644
--- a/include/macros.h
+++ b/include/macros.h
@@ -38,6 +38,7 @@
#define DAY_LENGTH (CLOCK_TIME(24, 0))
#define TIME_TO_HOURS_F(time) ((time) * (24.0f / 0x10000))
+#define TIME_TO_HOURS_F_ALT(time) (TIME_TO_MINUTES_F(time) / 60.0f)
#define TIME_TO_MINUTES_F(time) ((time) * ((24.0f * 60.0f) / 0x10000)) // 0.021972656f
#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))
diff --git a/include/segment_symbols.h b/include/segment_symbols.h
index 6bf163379..f2f40820a 100644
--- a/include/segment_symbols.h
+++ b/include/segment_symbols.h
@@ -32,6 +32,11 @@
#define SEGMENT_BSS_END(segment) (_ ## segment ## SegmentBssEnd)
#define SEGMENT_BSS_SIZE(segment) ((uintptr_t)SEGMENT_BSS_END(segment) - (uintptr_t)SEGMENT_BSS_START(segment))
+#define ROM_FILE(name) \
+ { (uintptr_t)SEGMENT_ROM_START(name), (uintptr_t)SEGMENT_ROM_END(name) }
+#define ROM_FILE_UNSET \
+ { 0 }
+
DECLARE_SEGMENT(boot)
DECLARE_ROM_SEGMENT(boot)
diff --git a/include/variables.h b/include/variables.h
index fdc9e91b0..41c8f3966 100644
--- a/include/variables.h
+++ b/include/variables.h
@@ -14,7 +14,7 @@ extern OSPiHandle* gCartHandle;
extern size_t gDmaMgrDmaBuffSize;
extern vs32 gIrqMgrResetStatus;
extern volatile OSTime sIrqMgrResetTime;
-extern volatile OSTime sIrqMgrRetraceTime;
+extern volatile OSTime gIrqMgrRetraceTime;
extern s32 sIrqMgrRetraceCount;
// extern UNK_TYPE1 sGfxPrintFontTLUT;
@@ -24,19 +24,12 @@ extern s32 sIrqMgrRetraceCount;
// extern UNK_TYPE4 D_80097524;
// extern u32 sRandInt;
-extern char gBuildTeam[];
-extern char gBuildDate[];
-extern char gBuildMakeOption[];
-
extern u8 sYaz0DataBuffer[0x400];
extern u8* sYaz0CurDataEnd;
extern u32 sYaz0CurRomStart;
extern u32 sYaz0CurSize;
extern u8* sYaz0MaxPtr;
extern void* gYaz0DecompressDstEnd;
-// extern UNK_TYPE4 D_8009BE30;
-// extern UNK_TYPE4 D_8009BE34;
-// extern FaultClient romInfoFaultClient;
// extern UNK_TYPE4 D_8009CD10;
extern u32 sRandFloat;
@@ -106,36 +99,6 @@ extern BgSpecialSceneMaxObjects sCustomDynapolyMem[];
// extern UNK_TYPE4 D_801BDAF8;
extern u8 kanfontOrdering[92];
-// extern UNK_TYPE4 D_801BDB90;
-// extern UNK_TYPE4 D_801BDB94;
-// extern UNK_TYPE4 D_801BDB98;
-// extern UNK_TYPE2 D_801BDB9C;
-// extern UNK_TYPE1 D_801BDBA0;
-// extern UNK_TYPE1 D_801BDBA4;
-// extern UNK_TYPE1 D_801BDBA8;
-extern u8 gWeatherMode;
-// extern UNK_TYPE1 D_801BDBB4;
-// extern UNK_TYPE1 D_801BDBB8;
-// extern UNK_TYPE1 D_801BDBBC;
-// extern UNK_TYPE1 D_801BDBC0;
-// extern UNK_TYPE1 D_801BDBC4;
-extern u8 D_801BDBC8;
-// extern UNK_TYPE1 D_801BDBCC;
-// extern UNK_TYPE1 D_801BDCF4;
-// extern UNK_TYPE1 D_801BE38E;
-// extern UNK_TYPE1 D_801BE38F;
-// extern UNK_TYPE1 D_801BE390;
-// extern UNK_TYPE1 D_801BE4D4;
-// extern UNK_TYPE1 D_801BE4F4;
-// extern UNK_TYPE1 D_801BE534;
-// extern UNK_TYPE1 D_801BE6D4;
-// extern UNK_TYPE1 D_801BE874;
-// extern UNK_TYPE4 D_801BE894;
-// extern UNK_TYPE4 D_801BE8BC;
-// extern UNK_TYPE4 D_801BE8E4;
-// extern UNK_TYPE1 D_801BE90C;
-// extern UNK_TYPE1 D_801BE92C;
-// extern UNK_TYPE1 D_801BE944;
// extern actor_init_var_func sInitChainHandlers[11];
// extern UNK_TYPE4 D_801BEAD4;
// extern UNK_TYPE4 D_801BEAD8;
@@ -217,7 +180,7 @@ extern s16 gItemPrices[];
extern u16 gSceneIdsPerRegion[11][27];
extern u8 gPlayerFormItemRestrictions[PLAYER_FORM_MAX][114];
-extern s16 gPlayerFormObjectIndices[PLAYER_FORM_MAX];
+extern s16 gPlayerFormObjectIds[PLAYER_FORM_MAX];
extern ObjectId gObjectTableSize;
extern RomFile gObjectTable[OBJECT_ID_MAX];
@@ -226,137 +189,6 @@ extern UNK_PTR D_801C5C50;
// extern UNK_TYPE1 D_801C5C9C;
extern UNK_PTR D_801C5CB0;
-// extern UNK_TYPE1 D_801C6A70;
-// extern UNK_TYPE2 D_801C6A74;
-// extern UNK_TYPE2 D_801C6A78;
-// extern UNK_TYPE2 D_801C6A7C;
-// extern UNK_TYPE2 D_801C6A80;
-// extern UNK_TYPE2 D_801C6A84;
-// extern UNK_TYPE2 D_801C6A88;
-// extern UNK_TYPE2 D_801C6A8C;
-// extern UNK_TYPE2 D_801C6A90;
-// extern UNK_TYPE2 D_801C6A94;
-extern u8 gPageSwitchNextButtonStatus[6][5];
-// extern UNK_TYPE1 D_801CED40;
-// extern UNK_TYPE2 D_801CFC78;
-// extern UNK_TYPE1 D_801CFC7A;
-// extern UNK_TYPE1 D_801CFC7C;
-// extern UNK_TYPE1 D_801CFC7E;
-// extern UNK_TYPE1 D_801CFC84;
-// extern UNK_TYPE1 D_801CFC88;
-// extern UNK_TYPE1 D_801CFC8C;
-// extern UNK_TYPE1 D_801CFC8E;
-// extern UNK_TYPE1 D_801CFC92;
-extern u8 D_801CFC98;
-extern s16 D_801CFCA4[9];
-// extern UNK_TYPE2 D_801CFCAC;
-extern s16 gOcarinaSongItemMap[];
-// extern UNK_TYPE2 D_801CFCD8;
-// extern UNK_TYPE2 D_801CFCE4;
-// extern UNK_TYPE2 D_801CFCF0;
-// extern UNK_TYPE2 D_801CFCF4;
-// extern UNK_TYPE2 D_801CFCF8;
-// extern UNK_TYPE2 D_801CFCFC;
-// extern UNK_TYPE2 D_801CFD00;
-// extern UNK_TYPE2 D_801CFD04;
-// extern UNK_TYPE2 D_801CFD08;
-// extern UNK_TYPE2 D_801CFD0C;
-// extern UNK_TYPE2 D_801CFD10;
-// extern UNK_TYPE2 D_801CFD1C;
-// extern UNK_TYPE2 D_801CFD28;
-// extern UNK_TYPE2 D_801CFD2C;
-// extern UNK_TYPE2 D_801CFD30;
-// extern UNK_TYPE2 D_801CFD34;
-// extern UNK_TYPE2 D_801CFD38;
-// extern UNK_TYPE2 D_801CFD3C;
-// extern UNK_TYPE2 D_801CFD40;
-// extern UNK_TYPE2 D_801CFD44;
-// extern UNK_TYPE2 D_801CFD48;
-// extern UNK_TYPE2 D_801CFD54;
-// extern UNK_TYPE2 D_801CFD60;
-// extern UNK_TYPE2 D_801CFD64;
-// extern UNK_TYPE2 D_801CFD68;
-// extern UNK_TYPE2 D_801CFD6C;
-// extern UNK_TYPE2 D_801CFD70;
-// extern UNK_TYPE2 D_801CFD74;
-// extern UNK_TYPE2 D_801CFD78;
-// extern UNK_TYPE2 D_801CFD7C;
-// extern UNK_TYPE2 D_801CFD80;
-// extern UNK_TYPE2 D_801CFD84;
-// extern UNK_TYPE2 D_801CFD88;
-// extern UNK_TYPE2 D_801CFD8C;
-// extern UNK_TYPE2 D_801CFD90;
-extern UNK_PTR D_801CFD94;
-// extern UNK_TYPE2 D_801CFD98;
-// extern UNK_TYPE2 D_801CFD9C;
-// extern UNK_TYPE2 D_801CFDA0;
-// extern UNK_TYPE1 D_801CFDA4;
-// extern UNK_TYPE1 D_801CFDC8;
-// extern UNK_TYPE1 D_801CFDEC;
-// extern UNK_TYPE1 D_801CFE04;
-// extern UNK_TYPE1 D_801CFE1C;
-// extern UNK_TYPE1 D_801CFE34;
-// extern UNK_TYPE1 D_801CFE4C;
-// extern UNK_TYPE1 D_801CFE5C;
-// extern UNK_TYPE1 D_801CFE68;
-// extern UNK_TYPE1 D_801CFE74;
-// extern UNK_TYPE1 D_801CFEA4;
-// extern UNK_TYPE1 D_801CFED4;
-// extern UNK_TYPE1 D_801CFF04;
-// extern UNK_TYPE1 D_801CFF34;
-// extern UNK_TYPE1 D_801CFF64;
-// extern UNK_TYPE1 D_801CFF70;
-// extern UNK_TYPE1 D_801CFF7C;
-// extern UNK_TYPE1 D_801CFF88;
-// extern UNK_TYPE1 D_801CFF94;
-// extern UNK_TYPE1 D_801D0000;
-// extern UNK_TYPE1 D_801D0001;
-// extern UNK_TYPE1 D_801D001F;
-// extern UNK_TYPE1 D_801D0188;
-// extern UNK_TYPE1 D_801D023A;
-// extern UNK_TYPE1 D_801D0250;
-// extern UNK_TYPE2 D_801D0268;
-// extern UNK_TYPE1 D_801D027C;
-// extern UNK_TYPE1 D_801D0284;
-// extern UNK_TYPE1 D_801D028C;
-// extern UNK_TYPE1 D_801D02C0;
-// extern UNK_TYPE1 D_801D02D8;
-// extern UNK_TYPE1 D_801D02F8;
-// extern UNK_TYPE1 D_801D0330;
-// extern UNK_TYPE1 D_801D0334;
-// extern UNK_TYPE1 D_801D0340;
-// extern UNK_TYPE1 D_801D034C;
-// extern UNK_TYPE1 D_801D0358;
-// extern UNK_TYPE1 D_801D0364;
-// extern UNK_TYPE1 D_801D0378;
-extern char D_801D039C[];
-// extern UNK_TYPE1 D_801D03A4;
-// extern UNK_TYPE1 D_801D03A8;
-// extern UNK_TYPE1 D_801D03C8;
-// extern UNK_TYPE1 D_801D03E8;
-// extern UNK_TYPE1 D_801D03F0;
-// extern UNK_TYPE1 D_801D0401;
-// extern UNK_TYPE1 D_801D0408;
-// extern UNK_TYPE1 D_801D0428;
-// extern UNK_TYPE1 D_801D045A;
-// extern UNK_TYPE1 D_801D0462;
-//extern UNK_TYPE1 D_801D0468;
-// extern UNK_TYPE1 D_801D0470;
-// extern char D_801D06F0[];
-// extern UNK_TYPE1 D_801D0710;
-// extern char D_801D0714[];
-// extern UNK_TYPE1 D_801D07C4;
-// extern UNK_TYPE1 D_801D07DC;
-// extern UNK_TYPE1 D_801D080C;
-// extern UNK_TYPE1 D_801D083C;
-// extern UNK_TYPE1 D_801D086C;
-// extern UNK_TYPE1 D_801D0890;
-// extern UNK_TYPE1 D_801D089C;
-// extern UNK_TYPE1 D_801D08CC;
-// extern UNK_TYPE1 D_801D08D8;
-// extern UNK_TYPE1 D_801D08E4;
-// extern UNK_TYPE1 D_801D08E8;
-// extern UNK_TYPE1 D_801D0900;
extern KaleidoMgrOverlay gKaleidoMgrOverlayTable[2];
// extern UNK_TYPE1 D_801D0B8C;
extern KaleidoMgrOverlay* gKaleidoMgrCurOvl;
@@ -373,7 +205,6 @@ extern Input* D_801D0D60;
extern u32 retryCount;
extern u32 cfbIdx[3];
-extern UNK_PTR D_801D1540;
extern Vec3f gZeroVec3f;
extern Vec3s gZeroVec3s;
@@ -1822,43 +1653,6 @@ extern TriNorm D_801EF638;
extern SaveContext gSaveContext;
// extern UNK_TYPE1 D_801F4E20;
-extern u8 D_801F4E30;
-// extern UNK_TYPE1 D_801F4E31;
-extern s8 D_801F4E32;
-extern Vec3f D_801F4E38;
-extern f32 D_801F4E44;
-extern f32 D_801F4E48;
-extern s16 D_801F4E4C;
-extern s8 D_801F4E4E;
-extern Vec3f D_801F4E50;
-extern f32 D_801F4E5C;
-extern f32 D_801F4E60;
-extern s16 D_801F4E64;
-extern u8 D_801F4E68;
-extern f32 D_801F4E70;
-// extern UNK_TYPE1 D_801F4E74;
-extern u16 D_801F4E78;
-extern s16 D_801F4E7A;
-// extern UNK_TYPE1 D_801F4E80;
-// extern UNK_TYPE1 D_801F4EE0;
-// extern UNK_TYPE1 D_801F4EE8;
-// extern UNK_TYPE1 D_801F4EF8;
-// extern UNK_TYPE1 D_801F4F00;
-// extern UNK_TYPE1 D_801F4F10;
-// extern UNK_TYPE1 D_801F4F14;
-// extern UNK_TYPE1 D_801F4F18;
-// extern UNK_TYPE1 D_801F4F1C;
-// extern UNK_TYPE1 D_801F4F20;
-// extern UNK_TYPE1 D_801F4F24;
-// extern UNK_TYPE1 D_801F4F28;
-// extern UNK_TYPE1 D_801F4F2C;
-// extern UNK_TYPE1 D_801F4F2E;
-// extern UNK_TYPE1 D_801F4F30;
-// extern UNK_TYPE1 D_801F4F31;
-// extern UNK_TYPE1 D_801F4F32;
-// extern UNK_TYPE1 D_801F4F33;
-// extern UNK_TYPE1 D_801F4F34;
-// extern UNK_TYPE1 D_801F4F38;
// extern UNK_TYPE1 sBeatingHeartsDDPrim;
// extern UNK_TYPE1 sBeatingHeartsDDEnv;
// extern UNK_TYPE1 sHeartsDDPrim;
@@ -1910,19 +1704,6 @@ extern GfxMasterList* gGfxMasterDL;
extern u64* gAudioSPDataPtr;
extern u32 gAudioSPDataSize;
-extern volatile OSTime D_801FBAE0;
-extern volatile OSTime D_801FBAE8;
-extern volatile OSTime gRDPTimeTotal;
-extern volatile OSTime lastRenderFrameDuration;
-extern volatile OSTime gRSPAudioTotalTime;
-extern volatile OSTime sRSPGFXTotalTime;
-extern volatile OSTime sRSPOtherTotalTime;
-// extern UNK_TYPE1 D_801FBB18;
-
-// Accumulator for `gRDPTimeTotal`
-extern volatile OSTime gRDPTimeAcc;
-// extern UNK_TYPE1 D_801FBB28;
-
extern Vec3f D_801FBBF0;
extern LineSegment Math3D_ColSphereTri_line;
extern Vec3f Math3D_ColSphereTri_point;
diff --git a/include/z64.h b/include/z64.h
index 63aec32ef..57c25047e 100644
--- a/include/z64.h
+++ b/include/z64.h
@@ -40,6 +40,7 @@
#include "z64dma.h"
#include "z64eff_footmark.h"
#include "z64effect.h"
+#include "z64environment.h"
#include "z64frameadvance.h"
#include "z64game_over.h"
#include "z64game.h"
@@ -60,11 +61,13 @@
#include "z64skybox.h"
#include "z64sound_source.h"
#include "z64subs.h"
+#include "z64rumble.h"
#include "z64transition.h"
#include "z64view.h"
#include "regs.h"
-typedef struct {
+
+typedef struct PauseContext {
/* 0x000 */ View view;
/* 0x168 */ u8* iconItemSegment;
/* 0x16C */ u8* iconItem24Segment;
@@ -163,68 +166,6 @@ typedef enum {
/* 0x02 */ KALEID_OVL_MAX
} KaleidoMgrOverlayType;
-typedef struct {
- /* 0x00 */ u16 unk_0;
- /* 0x02 */ u16 sceneTimeSpeed;
- /* 0x04 */ Vec3f sunPos;
- /* 0x10 */ u8 skybox1Index;
- /* 0x11 */ u8 skybox2Index;
- /* 0x12 */ u8 unk_12;
- /* 0x13 */ u8 skyboxBlend;
- /* 0x14 */ u8 unk_14;
- /* 0x15 */ u8 skyboxDisabled;
- /* 0x16 */ u8 sunMoonDisabled;
- /* 0x17 */ u8 skyboxConfig;
- /* 0x18 */ u8 changeSkyboxNextConfig;
- /* 0x19 */ u8 changeSkyboxState;
- /* 0x1A */ u16 changeSkyboxTimer;
- /* 0x1C */ u16 unk_1C;
- /* 0x1E */ u8 lightMode;
- /* 0x1F */ u8 lightConfig;
- /* 0x20 */ u8 changeLightNextConfig;
- /* 0x21 */ u8 changeLightEnabled;
- /* 0x22 */ u16 changeLightTimer;
- /* 0x24 */ u16 changeDuration;
- /* 0x26 */ u8 unk_26;
- /* 0x28 */ LightInfo dirLight1; // sun 1
- /* 0x36 */ LightInfo unk_36; // sun 2
- /* 0x44 */ s8 skyboxDmaState;
- /* 0x48 */ DmaRequest dmaRequest;
- /* 0x68 */ OSMesgQueue loadQueue;
- /* 0x80 */ OSMesg loadMsg;
- /* 0x84 */ f32 glareAlpha;
- /* 0x88 */ f32 lensFlareAlphaScale;
- /* 0x8C */ EnvLightSettings lightSettings;
- /* 0xA8 */ f32 unk_A8;
- /* 0xAC */ Vec3s windDir;
- /* 0xB4 */ f32 windSpeed;
- /* 0xB8 */ u8 numLightSettings;
- /* 0xBC */ LightSettings* lightSettingsList;
- /* 0xC0 */ u8 lightBlendEnabled;
- /* 0xC1 */ u8 lightSetting;
- /* 0xC2 */ u8 prevLightSetting;
- /* 0xC3 */ u8 lightSettingOverride;
- /* 0xC4 */ LightSettings unk_C4;
- /* 0xDA */ u16 lightBlendRateOverride;
- /* 0xDC */ f32 lightBlend;
- /* 0xE0 */ u8 unk_E0;
- /* 0xE1 */ u8 unk_E1;
- /* 0xE2 */ s8 unk_E2;
- /* 0xE3 */ u8 unk_E3; // modified by unused func in EnWeatherTag
- /* 0xE4 */ u8 unk_E4;
- /* 0xE5 */ u8 fillScreen;
- /* 0xE6 */ u8 screenFillColor[4];
- /* 0xEA */ u8 sandstormState;
- /* 0xEB */ u8 sandstormPrimA;
- /* 0xEC */ u8 sandstormEnvA;
- /* 0xED */ u8 unk_ED;
- /* 0xEE */ u8 unk_EE[4];
- /* 0xF2 */ u8 unk_F2[8]; // [3] is used by both DemoKankyo and ObjectKankyo effect count
- /* 0xFA */ u8 unk_FA[4];
-} EnvironmentContext; // size = 0x100
-
-struct PlayState;
-
typedef struct {
/* 0x0 */ u8 seqId;
/* 0x1 */ u8 ambienceId;
diff --git a/include/z64actor.h b/include/z64actor.h
index 1b6c37072..b3e1fe77e 100644
--- a/include/z64actor.h
+++ b/include/z64actor.h
@@ -118,7 +118,7 @@ typedef struct Actor {
/* 0x004 */ u32 flags; // Flags used for various purposes
/* 0x008 */ PosRot home; // Initial position/rotation when spawned. Can be used for other purposes
/* 0x01C */ s16 params; // Configurable variable set by the actor's spawn data; original name: "args_data"
- /* 0x01E */ s8 objBankIndex; // Object bank index of the actor's object dependency; original name: "bank"
+ /* 0x01E */ s8 objectSlot; // Object slot (in ObjectContext) corresponding to the actor's object; original name: "bank"
/* 0x01F */ s8 targetMode; // Controls how far the actor can be targeted from and how far it can stay locked on
/* 0x020 */ s16 halfDaysBits; // Bitmask indicating which half-days this actor is allowed to not be killed(?) (TODO: not sure how to word this). If the current halfDayBit is not part of this mask then the actor is killed when spawning the setup actors
/* 0x024 */ PosRot world; // Position/rotation in the world
diff --git a/include/z64door.h b/include/z64door.h
index 26653c308..93dff5ea9 100644
--- a/include/z64door.h
+++ b/include/z64door.h
@@ -9,7 +9,7 @@ typedef struct KnobDoorActor {
/* 0x15C */ SkelAnime skelAnime;
/* 0x1A0 */ u8 animIndex;
/* 0x1A1 */ u8 playOpenAnim;
- /* 0x1A2 */ s8 requiredObjBankIndex;
+ /* 0x1A2 */ s8 objectSlot;
/* 0x1A3 */ s8 dlIndex;
} KnobDoorActor; // size = 0x1A4
diff --git a/include/z64effect.h b/include/z64effect.h
index 71ad80510..8950958cb 100644
--- a/include/z64effect.h
+++ b/include/z64effect.h
@@ -33,7 +33,7 @@ struct CollisionPoly;
#define rgEnvColorG regs[8]
#define rgEnvColorB regs[9]
#define rgEnvColorA regs[10]
-#define rgObjBankIndex regs[11]
+#define rgObjectSlot regs[11]
typedef struct {
/* 0x0 */ u8 active;
diff --git a/include/z64environment.h b/include/z64environment.h
new file mode 100644
index 000000000..18e1fbf70
--- /dev/null
+++ b/include/z64environment.h
@@ -0,0 +1,327 @@
+#ifndef Z64ENVIRONMENT_H
+#define Z64ENVIRONMENT_H
+
+#include "PR/ultratypes.h"
+#include "PR/os_message.h"
+#include "z64math.h"
+#include "z64dma.h"
+#include "unk.h"
+
+struct GameOverContext;
+struct GraphicsContext;
+struct LightContext;
+struct MessageContext;
+struct PauseContext;
+struct PlayState;
+struct SkyboxContext;
+struct View;
+
+#define FILL_SCREEN_OPA (1 << 0)
+#define FILL_SCREEN_XLU (1 << 1)
+
+#define NEXT_TIME_NONE 0xFFFF
+#define NEXT_TIME_DAY CLOCK_TIME(12, 0)
+#define NEXT_TIME_NIGHT CLOCK_TIME(0, 0)
+#define NEXT_TIME_DAY_SET 0xFFFE
+#define NEXT_TIME_NIGHT_SET 0xFFFD
+
+#define LIGHT_SETTING_MAX 31
+#define LIGHT_SETTING_OVERRIDE_NONE 0xFF
+
+// This mode disables the updating of lights in both light modes.
+// With this mode enabled, the only way lights can change is via the adjustment arrays.
+// This mode is not used in the original game.
+#define LIGHT_SETTING_OVERRIDE_FULL_CONTROL 0xFE
+
+#define LIGHT_BLENDRATE_OVERRIDE_NONE 0xFFFF
+#define LIGHT_BLEND_OVERRIDE_NONE 0
+#define LIGHT_BLEND_OVERRIDE_ON 1
+
+// This mode disables the light system's automatic blending between
+// light settings for `LIGHT_MODE_SETTINGS` (or using a light setting override).
+// This is a bit of a hack used only by bosses in the original game.
+#define LIGHT_BLEND_OVERRIDE_FULL_CONTROL 2
+
+typedef enum {
+ /* 0 */ LIGHT_MODE_TIME, // environment lights use `lightConfig` and change based on time of day
+ /* 1 */ LIGHT_MODE_SETTINGS // environment lights use `lightSetting`
+} LightMode;
+
+typedef enum {
+ /* 0 */ LIGHTNING_OFF, // no lightning
+ /* 1 */ LIGHTNING_ON, // request ligtning strikes at random intervals
+ /* 2 */ LIGHTNING_LAST // request one lightning strike before turning off
+} LightningState;
+
+typedef enum {
+ /* 0 */ LIGHTNING_STRIKE_WAIT, // wait between lightning strikes. request bolts when timer hits 0
+ /* 1 */ LIGHTNING_STRIKE_START, // fade in the flash. note: bolts are requested in the previous state
+ /* 2 */ LIGHTNING_STRIKE_END // fade out the flash and go back to wait
+} LightningStrikeState;
+
+typedef enum {
+ /* 0 */ WEATHER_MODE_CLEAR,
+ /* 1 */ WEATHER_MODE_1, // rain?
+ /* 2 */ WEATHER_MODE_2,
+ /* 3 */ WEATHER_MODE_SNOW
+} WeatherMode;
+
+typedef enum {
+ /* 0 */ CHANGE_SKYBOX_INACTIVE,
+ /* 1 */ CHANGE_SKYBOX_REQUESTED,
+ /* 2 */ CHANGE_SKYBOX_WAIT,
+ /* 3 */ CHANGE_SKYBOX_ACTIVE
+} ChangeSkyboxState;
+
+typedef enum {
+ /* 0 */ SKYBOX_DMA_INACTIVE,
+ /* 1 */ SKYBOX_DMA_TEXTURE1_START,
+ /* 11 */ SKYBOX_DMA_TEXTURE2_START = 11
+} SkyboxDmaState;
+
+//! @TODO: Verify from OoT (may not be the same)
+typedef enum {
+ /* 0 */ PRECIP_RAIN_MAX, // max number of raindrops that can draw; uses this or SOS_MAX, whichever is larger
+ /* 1 */ PRECIP_RAIN_CUR, // current number of rain drops being drawn on screen
+ /* 2 */ PRECIP_SNOW_CUR, // current number of snowflakes being drawn on screen
+ /* 3 */ PRECIP_SNOW_MAX, // max number of snowflakes that can draw
+ /* 4 */ PRECIP_SOS_MAX, // max number of rain drops requested from song of storms specifically
+ /* 5 */ PRECIP_MAX
+} PrecipitationData;
+
+typedef enum {
+ /* 0 */ STORM_REQUEST_NONE,
+ /* 1 */ STORM_REQUEST_START,
+ /* 2 */ STORM_REQUEST_STOP
+} StormRequest;
+
+typedef enum {
+ /* 0 */ STORM_STATE_OFF,
+ /* 1 */ STORM_STATE_ON
+} StormState;
+
+typedef enum {
+ /* 0x00 */ TIMESEQ_DAY_BGM,
+ /* 0x01 */ TIMESEQ_FADE_DAY_BGM,
+ /* 0x02 */ TIMESEQ_NIGHT_BEGIN_SFX,
+ /* 0x03 */ TIMESEQ_EARLY_NIGHT_CRITTERS,
+ /* 0x04 */ TIMESEQ_NIGHT_DELAY,
+ /* 0x05 */ TIMESEQ_NIGHT_CRITTERS,
+ /* 0x06 */ TIMESEQ_DAY_BEGIN_SFX,
+ /* 0x07 */ TIMESEQ_MORNING_CRITTERS,
+ /* 0x08 */ TIMESEQ_DAY_DELAY,
+ /* 0xFE */ TIMESEQ_REQUEST = 0xFE,
+ /* 0xFF */ TIMESEQ_DISABLED
+} TimeBasedSeqState;
+
+#define SCENESEQ_DEFAULT 0
+#define SCENESEQ_MORNING 0xFE
+
+typedef enum {
+ /* 0x0 */ SANDSTORM_OFF,
+ /* 0x1 */ SANDSTORM_FILL,
+ /* 0x2 */ SANDSTORM_UNFILL,
+ /* 0x3 */ SANDSTORM_ACTIVE,
+ /* 0x4 */ SANDSTORM_DISSIPATE,
+ /* 0x5 */ SANDSTORM_5,
+ /* 0x6 */ SANDSTORM_6,
+ /* 0x7 */ SANDSTORM_7,
+ /* 0x8 */ SANDSTORM_8,
+ /* 0x9 */ SANDSTORM_9,
+ /* 0xA */ SANDSTORM_A,
+ /* 0xB */ SANDSTORM_B,
+ /* 0xC */ SANDSTORM_C,
+ /* 0xD */ SANDSTORM_D
+} SandstormState;
+
+typedef struct LightningStrike {
+ /* 0x00 */ u8 state;
+ /* 0x01 */ u8 flashRed;
+ /* 0x02 */ u8 flashGreen;
+ /* 0x03 */ u8 flashBlue;
+ /* 0x04 */ u8 flashAlphaTarget;
+ /* 0x08 */ f32 delayTimer;
+} LightningStrike; // size = 0xC
+
+typedef struct {
+ /* 0x0 */ u16 startTime;
+ /* 0x2 */ u16 endTime;
+ /* 0x4 */ u8 skybox1Index;
+ /* 0x5 */ u8 skybox2Index;
+ /* 0x6 */ u8 color1Index;
+ /* 0x7 */ u8 color2Index;
+} TimeBasedSkyboxEntry; // size = 0x8
+
+#define ENV_FOGNEAR_MAX 996
+#define ENV_ZFAR_MAX 15000
+
+typedef struct {
+ /* 0x00 */ u8 ambientColor[3];
+ /* 0x03 */ s8 light1Dir[3];
+ /* 0x06 */ u8 light1Color[3];
+ /* 0x09 */ s8 light2Dir[3];
+ /* 0x0C */ u8 light2Color[3];
+ /* 0x0F */ u8 fogColor[3];
+ /* 0x12 */ s16 fogNear; // ranges from 0-1000 (0: starts immediately, 1000: no fog), but is clamped to ENV_FOGNEAR_MAX
+ /* 0x14 */ s16 zFar; // Max depth (render distance) of the view as a whole. fogFar will always match zFar
+} CurrentEnvLightSettings; // size = 0x16
+
+// `EnvLightSettings` is very similar to `CurrentEnvLightSettings` with one key difference.
+// The light settings data in the scene packs blend rate information with the fog near value.
+// The blendRate determines how fast the current light settings fade to the next one
+// (under LIGHT_MODE_SETTINGS, otherwise unused).
+
+// Get blend rate from `EnvLightSettings.blendRateAndFogNear` in 0-255 range
+#define ENV_LIGHT_SETTINGS_BLEND_RATE_U8(blendRateAndFogNear) (((blendRateAndFogNear) >> 10) * 4)
+#define ENV_LIGHT_SETTINGS_FOG_NEAR(blendRateAndFogNear) ((blendRateAndFogNear) & 0x3FF)
+
+typedef struct {
+ /* 0x00 */ u8 ambientColor[3];
+ /* 0x03 */ s8 light1Dir[3];
+ /* 0x06 */ u8 light1Color[3];
+ /* 0x09 */ s8 light2Dir[3];
+ /* 0x0C */ u8 light2Color[3];
+ /* 0x0F */ u8 fogColor[3];
+ /* 0x12 */ s16 blendRateAndFogNear;
+ /* 0x14 */ s16 zFar;
+} EnvLightSettings; // size = 0x16
+
+// ZAPD compatibility typedefs
+// TODO: Remove when ZAPD adds support for them
+typedef CurrentEnvLightSettings LightSettings;
+
+typedef struct EnvironmentContext {
+ /* 0x00 */ u16 unk_0;
+ /* 0x02 */ u16 sceneTimeSpeed;
+ /* 0x04 */ Vec3f sunPos;
+ /* 0x10 */ u8 skybox1Index;
+ /* 0x11 */ u8 skybox2Index;
+ /* 0x12 */ u8 unk_12;
+ /* 0x13 */ u8 skyboxBlend;
+ /* 0x14 */ u8 unk_14;
+ /* 0x15 */ u8 skyboxDisabled;
+ /* 0x16 */ u8 sunDisabled;
+ /* 0x17 */ u8 skyboxConfig;
+ /* 0x18 */ u8 changeSkyboxNextConfig;
+ /* 0x19 */ u8 changeSkyboxState;
+ /* 0x1A */ u16 changeSkyboxTimer;
+ /* 0x1C */ u16 unk_1C;
+ /* 0x1E */ u8 lightMode;
+ /* 0x1F */ u8 lightConfig;
+ /* 0x20 */ u8 changeLightNextConfig;
+ /* 0x21 */ u8 changeLightEnabled;
+ /* 0x22 */ u16 changeLightTimer;
+ /* 0x24 */ u16 changeDuration;
+ /* 0x26 */ u8 unk_26;
+ /* 0x28 */ LightInfo dirLight1; // sun 1
+ /* 0x36 */ LightInfo dirLight2; // sun 2
+ /* 0x44 */ s8 skyboxDmaState;
+ /* 0x48 */ DmaRequest dmaRequest;
+ /* 0x68 */ OSMesgQueue loadQueue;
+ /* 0x80 */ OSMesg loadMsg[1];
+ /* 0x84 */ f32 glareAlpha;
+ /* 0x88 */ f32 lensFlareAlphaScale;
+ /* 0x8C */ AdjLightSettings adjLightSettings;
+ /* 0xA8 */ f32 unk_A8;
+ /* 0xAC */ Vec3s windDirection;
+ /* 0xB4 */ f32 windSpeed;
+ /* 0xB8 */ u8 numLightSettings;
+ /* 0xBC */ EnvLightSettings* lightSettingsList; // list of light settings from the scene file
+ /* 0xC0 */ u8 lightBlendEnabled; // only used with `LIGHT_MODE_SETTINGS` or on override
+ /* 0xC1 */ u8 lightSetting; // only used with `LIGHT_MODE_SETTINGS` or on override
+ /* 0xC2 */ u8 prevLightSetting;
+ /* 0xC3 */ u8 lightSettingOverride;
+ /* 0xC4 */ CurrentEnvLightSettings lightSettings; // settings for the currently "live" lights
+ /* 0xDA */ u16 lightBlendRateOverride;
+ /* 0xDC */ f32 lightBlend;
+ /* 0xE0 */ u8 lightBlendOverride;
+ /* 0xE1 */ u8 stormRequest;
+ /* 0xE2 */ u8 stormState;
+ /* 0xE3 */ u8 lightningState; // modified by unused func in EnWeatherTag
+ /* 0xE4 */ u8 timeSeqState;
+ /* 0xE5 */ u8 fillScreen;
+ /* 0xE6 */ u8 screenFillColor[4];
+ /* 0xEA */ u8 sandstormState;
+ /* 0xEB */ u8 sandstormPrimA;
+ /* 0xEC */ u8 sandstormEnvA;
+ /* 0xED */ u8 customSkyboxFilter;
+ /* 0xEE */ u8 skyboxFilterColor[4];
+ /* 0xF2 */ u8 precipitation[PRECIP_MAX];
+ /* 0xF7 */ UNK_TYPE1 unk_FA[9];
+} EnvironmentContext; // size = 0x100
+
+s32 Environment_ZBufValToFixedPoint(s32 zBufferVal);
+void Environment_Init(struct PlayState* play2, EnvironmentContext* envCtx, s32 arg2);
+u8 Environment_SmoothStepToU8(u8* pvalue, u8 target, u8 scale, u8 step, u8 minStep);
+f32 Environment_LerpWeight(u16 max, u16 min, u16 val);
+f32 Environment_LerpWeightAccelDecel(u16 endFrame, u16 startFrame, u16 curFrame, u16 accelDuration, u16 decelDuration);
+void Environment_UpdateSkybox(u8 skyboxId, EnvironmentContext* envCtx, struct SkyboxContext* skyboxCtx);
+void Environment_EnableUnderwaterLights(struct PlayState* play, s32 waterLightsIndex);
+void Environment_DisableUnderwaterLights(struct PlayState* play);
+void Environment_Update(struct PlayState* play, EnvironmentContext* envCtx, struct LightContext* lightCtx,
+ struct PauseContext* pauseCtx, struct MessageContext* msgCtx, struct GameOverContext* gameOverCtx,
+ struct GraphicsContext* gfxCtx);
+void Environment_DrawSunLensFlare(struct PlayState* play, EnvironmentContext* envCtx, struct View* view, struct GraphicsContext* gfxCtx, Vec3f vec);
+void Environment_DrawLensFlare(struct PlayState* play, EnvironmentContext* envCtx, struct View* view, struct GraphicsContext* gfxCtx, Vec3f pos, f32 scale, f32 colorIntensity, s16 glareStrength, u8 isSun);
+void Environment_DrawRain(struct PlayState* play, struct View* view, struct GraphicsContext* gfxCtx);
+void Environment_ChangeLightSetting(struct PlayState* play, u8 lightSetting);
+void Environment_AddLightningBolts(struct PlayState* play, u8 num);
+void Environment_PlaySceneSequence(struct PlayState* play);
+void Environment_DrawCustomLensFlare(struct PlayState* play);
+void Environment_InitGameOverLights(struct PlayState* play);
+void Environment_FadeInGameOverLights(struct PlayState* play);
+void Environment_FadeOutGameOverLights(struct PlayState* play);
+void Environment_FillScreen(struct GraphicsContext* gfxCtx, u8 red, u8 green, u8 blue, u8 alpha, u8 drawFlags);
+void Environment_DrawSandstorm(struct PlayState* play, u8 sandstormState);
+s32 Environment_AdjustLights(struct PlayState* play, f32 arg1, f32 arg2, f32 arg3, f32 arg4);
+void Environment_LerpAmbientColor(struct PlayState* play, Color_RGB8* to, f32 lerp);
+void Environment_LerpDiffuseColor(struct PlayState* play, Color_RGB8* to, f32 lerp);
+void Environment_LerpFogColor(struct PlayState* play, Color_RGB8* to, f32 lerp);
+void Environment_LerpFog(struct PlayState* play, s16 fogNearTarget, s16 fogFarTarget, f32 lerp);
+void Environment_ForcePlaySequence(u16 seqId);
+s32 Environment_IsForcedSequenceDisabled(void);
+void Environment_PlayStormNatureAmbience(struct PlayState* play);
+void Environment_StopStormNatureAmbience(struct PlayState* play);
+void Environment_Draw(struct PlayState* play);
+void Environment_DrawSkyboxStars(struct PlayState* play);
+void Environment_StopTime(void);
+void Environment_StartTime(void);
+u8 Environment_IsTimeStopped(void);
+u32 Environment_GetStormState(struct PlayState* play);
+u8 Environment_IsFinalHours(struct PlayState* play);
+u16 Environment_GetTimeSpeed(struct PlayState* play);
+void Environment_SetTimeJump(f32 minutes);
+u8 func_800FE6F8(struct PlayState* play, s16 timeAdvanceScaling, s16 nextTimeLimit);
+void Environment_LerpSandstormColors(Color_RGBA8* colorSrc, Color_RGBA8* colorDst);
+u8 func_800FE9B4(struct PlayState* play);
+void func_800FEA50(struct PlayState* play);
+void func_800FEAB0(void);
+void func_800FEAF4(EnvironmentContext* envCtx);
+
+// Data
+extern u8 gWeatherMode;
+extern u8 gLightConfigAfterUnderwater;
+extern u8 gInterruptSongOfStorms;
+extern u8 gSceneSeqState;
+
+// Bss
+extern u8 D_801F4E30;
+
+extern u8 gCustomLensFlare1On;
+extern Vec3f gCustomLensFlare1Pos;
+extern f32 D_801F4E44;
+extern f32 D_801F4E48;
+extern s16 D_801F4E4C;
+
+extern u8 gCustomLensFlare2On;
+extern Vec3f gCustomLensFlare2Pos;
+extern f32 D_801F4E5C;
+extern f32 D_801F4E60;
+extern s16 D_801F4E64;
+
+extern struct LightningStrike gLightningStrike;
+extern f32 D_801F4E74;
+extern u16 D_801F4E78;
+extern u16 gSkyboxNumStars;
+
+#endif
diff --git a/include/z64game.h b/include/z64game.h
index 8b63b701f..50dd68473 100644
--- a/include/z64game.h
+++ b/include/z64game.h
@@ -61,7 +61,7 @@ typedef struct GameState {
/* 0x0C */ GameStateFunc init; // Usually the current game state's init, though after stopping, the graph thread will look here to determine the next game state to load.
/* 0x10 */ size_t size;
/* 0x14 */ Input input[MAXCONTROLLERS];
- /* 0x74 */ TwoHeadArena heap;
+ /* 0x74 */ TwoHeadArena tha;
/* 0x84 */ GameAlloc alloc;
/* 0x98 */ UNK_TYPE1 pad98[0x3];
/* 0x9B */ u8 running; // If 0, switch to next game state
diff --git a/include/z64item.h b/include/z64item.h
index 7cc31eeca..1a43b00af 100644
--- a/include/z64item.h
+++ b/include/z64item.h
@@ -326,6 +326,27 @@ typedef enum ItemId {
/* 0xB1 */ ITEM_MAP_POINT_MOUNTAIN_VILLAGE,
/* 0xB2 */ ITEM_MAP_POINT_MILK_ROAD,
/* 0xB3 */ ITEM_MAP_POINT_ZORA_CAPE,
+ /* 0xB8 */ ITEM_B8 = 0xB8,
+ /* 0xB9 */ ITEM_B9,
+ /* 0xBA */ ITEM_BA,
+ /* 0xBB */ ITEM_BB,
+ /* 0xBC */ ITEM_BC,
+ /* 0xBD */ ITEM_BD,
+ /* 0xBE */ ITEM_BE,
+ /* 0xBF */ ITEM_BF,
+ /* 0xC0 */ ITEM_C0,
+ /* 0xC1 */ ITEM_C1,
+ /* 0xC2 */ ITEM_C2,
+ /* 0xC3 */ ITEM_C3,
+ /* 0xC4 */ ITEM_C4,
+ /* 0xC5 */ ITEM_C5,
+ /* 0xC6 */ ITEM_C6,
+ /* 0xC7 */ ITEM_C7,
+ /* 0xC8 */ ITEM_C8,
+ /* 0xC9 */ ITEM_C9,
+ /* 0xCA */ ITEM_CA,
+ /* 0xCB */ ITEM_CB,
+ /* 0xCC */ ITEM_CC,
/* 0xF0 */ ITEM_F0 = 0xF0, // PLAYER_MASK_BLAST
/* 0xF1 */ ITEM_F1, // PLAYER_MASK_BREMEN
/* 0xF2 */ ITEM_F2, // PLAYER_MASK_KAMARO
diff --git a/include/z64light.h b/include/z64light.h
index 706df2f4d..21b1920c3 100644
--- a/include/z64light.h
+++ b/include/z64light.h
@@ -8,26 +8,14 @@
struct PlayState;
-
-typedef struct {
- /* 0x00 */ u8 ambientColor[3];
- /* 0x03 */ s8 diffuseDir1[3];
- /* 0x06 */ u8 diffuseColor1[3];
- /* 0x09 */ s8 diffusePos2[3];
- /* 0x0C */ u8 diffuseColor[3];
- /* 0x0F */ u8 fogColor[3];
- /* 0x12 */ s16 fogNear;
- /* 0x14 */ s16 zFar;
-} LightSettings; // size = 0x16
-
typedef struct {
/* 0x00 */ s16 ambientColor[3];
- /* 0x06 */ s16 diffuseColor1[3];
- /* 0x0C */ s16 diffuseColor2[3];
+ /* 0x06 */ s16 light1Color[3];
+ /* 0x0C */ s16 light2Color[3];
/* 0x12 */ s16 fogColor[3];
/* 0x18 */ s16 fogNear;
/* 0x1A */ s16 zFar;
-} EnvLightSettings; // size = 0x1C
+} AdjLightSettings; // size = 0x1C
typedef struct {
/* 0x0 */ s16 x;
@@ -77,8 +65,8 @@ typedef struct LightsBuffer {
typedef struct LightContext {
/* 0x0 */ LightNode* listHead;
- /* 0x4 */ Color_RGB8 ambient;
- /* 0x7 */ Color_RGB8 fogColor;
+ /* 0x4 */ u8 ambientColor[3];
+ /* 0x7 */ u8 fogColor[3];
/* 0xA */ s16 fogNear; // how close until fog starts taking effect. range 0 - 996
/* 0xC */ s16 zFar; // draw distance. range 0 - 12800
} LightContext; // size = 0x10
diff --git a/include/z64message.h b/include/z64message.h
index 2a3810ff1..1b84f90db 100644
--- a/include/z64message.h
+++ b/include/z64message.h
@@ -10,8 +10,134 @@ struct MessageTableEntry;
struct OcarinaStaff;
struct PlayState;
-extern u16 sBombersNotebookEventMessages[BOMBERS_NOTEBOOK_EVENT_MAX];
-extern u16 gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_EVENT_MAX];
+typedef enum TextBoxType {
+ /* 0x00 */ TEXTBOX_TYPE_0,
+ /* 0x01 */ TEXTBOX_TYPE_1,
+ /* 0x02 */ TEXTBOX_TYPE_2,
+ /* 0x03 */ TEXTBOX_TYPE_3,
+ /* 0x04 */ TEXTBOX_TYPE_4,
+ /* 0x05 */ TEXTBOX_TYPE_5,
+ /* 0x06 */ TEXTBOX_TYPE_6,
+ /* 0x07 */ TEXTBOX_TYPE_7,
+ /* 0x08 */ TEXTBOX_TYPE_8,
+ /* 0x09 */ TEXTBOX_TYPE_9,
+ /* 0x0A */ TEXTBOX_TYPE_A,
+ /* 0x0B */ TEXTBOX_TYPE_B,
+ /* 0x0C */ TEXTBOX_TYPE_C,
+ /* 0x0D */ TEXTBOX_TYPE_D,
+ /* 0x0E */ TEXTBOX_TYPE_E,
+ /* 0x0F */ TEXTBOX_TYPE_F,
+ /* 0x10 */ TEXTBOX_TYPE_MAX
+} TextBoxType;
+
+#define TEXTBOX_ENDTYPE_00 0x00
+
+#define TEXTBOX_ENDTYPE_10 0x10
+#define TEXTBOX_ENDTYPE_11 0x11
+#define TEXTBOX_ENDTYPE_12 0x12
+
+#define TEXTBOX_ENDTYPE_20 0x20
+
+#define TEXTBOX_ENDTYPE_30 0x30
+
+#define TEXTBOX_ENDTYPE_40 0x40
+#define TEXTBOX_ENDTYPE_41 0x41
+#define TEXTBOX_ENDTYPE_42 0x42
+
+#define TEXTBOX_ENDTYPE_50 0x50
+#define TEXTBOX_ENDTYPE_52 0x52
+#define TEXTBOX_ENDTYPE_55 0x55
+#define TEXTBOX_ENDTYPE_56 0x56
+#define TEXTBOX_ENDTYPE_57 0x57
+
+#define TEXTBOX_ENDTYPE_60 0x60
+#define TEXTBOX_ENDTYPE_61 0x61
+#define TEXTBOX_ENDTYPE_62 0x62
+#define TEXTBOX_ENDTYPE_63 0x63
+#define TEXTBOX_ENDTYPE_64 0x64
+
+typedef enum MessageMode {
+ /* 0x00 */ MSGMODE_NONE,
+ /* 0x01 */ MSGMODE_TEXT_START,
+ /* 0x02 */ MSGMODE_TEXT_BOX_GROWING,
+ /* 0x03 */ MSGMODE_TEXT_STARTING,
+ /* 0x04 */ MSGMODE_TEXT_NEXT_MSG,
+ /* 0x05 */ MSGMODE_TEXT_CONTINUING,
+ /* 0x06 */ MSGMODE_TEXT_DISPLAYING,
+ /* 0x07 */ MSGMODE_TEXT_AWAIT_INPUT,
+ /* 0x08 */ MSGMODE_TEXT_DELAYED_BREAK,
+ /* 0x09 */ MSGMODE_9,
+ /* 0x0A */ MSGMODE_OCARINA_STARTING,
+ /* 0x0B */ MSGMODE_SONG_DEMONSTRATION_STARTING,
+ /* 0x0C */ MSGMODE_SONG_PROMPT_STARTING,
+ /* 0x0D */ MSGMODE_OCARINA_PLAYING,
+ /* 0x0E */ MSGMODE_E,
+ /* 0x0F */ MSGMODE_OCARINA_FAIL,
+ /* 0x10 */ MSGMODE_OCARINA_FAIL_NO_TEXT,
+ /* 0x11 */ MSGMODE_OCARINA_NOTES_DROP,
+ /* 0x12 */ MSGMODE_SONG_PLAYED,
+ /* 0x13 */ MSGMODE_SETUP_DISPLAY_SONG_PLAYED,
+ /* 0x14 */ MSGMODE_DISPLAY_SONG_PLAYED,
+ /* 0x15 */ MSGMODE_DISPLAY_SONG_PLAYED_TEXT_BEGIN,
+ /* 0x16 */ MSGMODE_16,
+ /* 0x17 */ MSGMODE_17,
+ /* 0x18 */ MSGMODE_18,
+ /* 0x19 */ MSGMODE_19,
+ /* 0x1A */ MSGMODE_SONG_DEMONSTRATION,
+ /* 0x1B */ MSGMODE_SONG_DEMONSTRATION_DONE,
+ /* 0x1C */ MSGMODE_SONG_PROMPT,
+ /* 0x1D */ MSGMODE_SONG_PROMPT_SUCCESS,
+ /* 0x1E */ MSGMODE_SONG_PROMPT_FAIL,
+ /* 0x1F */ MSGMODE_SONG_PROMPT_NOTES_DROP,
+ /* 0x20 */ MSGMODE_OCARINA_AWAIT_INPUT,
+ /* 0x21 */ MSGMODE_21,
+ /* 0x22 */ MSGMODE_22,
+ /* 0x23 */ MSGMODE_23,
+ /* 0x24 */ MSGMODE_24,
+ /* 0x25 */ MSGMODE_25,
+ /* 0x26 */ MSGMODE_26,
+ /* 0x27 */ MSGMODE_SCARECROW_LONG_RECORDING_START,
+ /* 0x28 */ MSGMODE_SCARECROW_LONG_RECORDING_ONGOING,
+ /* 0x29 */ MSGMODE_SCARECROW_LONG_DEMONSTRATION,
+ /* 0x2A */ MSGMODE_SCARECROW_SPAWN_RECORDING_START,
+ /* 0x2B */ MSGMODE_SCARECROW_SPAWN_RECORDING_ONGOING,
+ /* 0x2C */ MSGMODE_SCARECROW_SPAWN_RECORDING_FAILED,
+ /* 0x2D */ MSGMODE_SCARECROW_SPAWN_RECORDING_DONE,
+ /* 0x2E */ MSGMODE_SCARECROW_SPAWN_DEMONSTRATION,
+ /* 0x2F */ MSGMODE_2F,
+ /* 0x30 */ MSGMODE_30,
+ /* 0x31 */ MSGMODE_31,
+ /* 0x32 */ MSGMODE_32,
+ /* 0x33 */ MSGMODE_33,
+ /* 0x34 */ MSGMODE_34,
+ /* 0x35 */ MSGMODE_35,
+ /* 0x36 */ MSGMODE_36,
+ /* 0x37 */ MSGMODE_37,
+ /* 0x38 */ MSGMODE_38,
+ /* 0x39 */ MSGMODE_39,
+ /* 0x3A */ MSGMODE_3A,
+ /* 0x3B */ MSGMODE_3B,
+ /* 0x3C */ MSGMODE_3C,
+ /* 0x3D */ MSGMODE_3D,
+ /* 0x3E */ MSGMODE_3E,
+ /* 0x3F */ MSGMODE_3F,
+ /* 0x40 */ MSGMODE_40,
+ /* 0x41 */ MSGMODE_TEXT_AWAIT_NEXT,
+ /* 0x42 */ MSGMODE_TEXT_DONE,
+ /* 0x43 */ MSGMODE_TEXT_CLOSING,
+ /* 0x44 */ MSGMODE_PAUSED, // Causes the message system to do nothing until external code sets a new message mode or calls a public function
+ /* 0x45 */ MSGMODE_SCENE_TITLE_CARD_FADE_IN_BACKGROUND, // Scene Title Card
+ /* 0x46 */ MSGMODE_SCENE_TITLE_CARD_FADE_IN_TEXT,
+ /* 0x47 */ MSGMODE_SCENE_TITLE_CARD_DISPLAYING,
+ /* 0x48 */ MSGMODE_SCENE_TITLE_CARD_FADE_OUT_TEXT,
+ /* 0x49 */ MSGMODE_SCENE_TITLE_CARD_FADE_OUT_BACKGROUND,
+ /* 0x4A */ MSGMODE_NEW_CYCLE_0, // End of cycle?
+ /* 0x4B */ MSGMODE_NEW_CYCLE_1,
+ /* 0x4C */ MSGMODE_NEW_CYCLE_2,
+ /* 0x4D */ MSGMODE_OWL_SAVE_0,
+ /* 0x4E */ MSGMODE_OWL_SAVE_1,
+ /* 0x4F */ MSGMODE_OWL_SAVE_2
+} MessageMode;
typedef enum FaceReactionSet {
/* 0x11 */ FACE_REACTION_SET_JIM = 0x11,
@@ -48,7 +174,6 @@ typedef enum TextState {
/* 18 */ TEXT_STATE_18
} TextState;
-
#define FONT_CHAR_TEX_WIDTH 16
#define FONT_CHAR_TEX_HEIGHT 16
//! TODO: Make this use `sizeof(AnyFontTextureSymbol)`
@@ -74,89 +199,86 @@ typedef struct {
u16 wchar[640]; // msgBufWide
u64 force_structure_alignment_msg;
} msgBuf;
- /* 0x11D80 */ u8* messageStart;
- /* 0x11D84 */ u8* messageEnd;
+ /* 0x11D80 */ u32 messageStart;
+ /* 0x11D84 */ u32 messageEnd;
/* 0x11D88 */ u8 unk_11D88; // current Char Buffer ?
} Font; // size = 0x11D90
typedef struct MessageContext {
/* 0x00000 */ View view;
/* 0x00168 */ Font font;
- /* 0x11EF8 */ UNK_PTR unk11EF8;
+ /* 0x11EF8 */ u8* textboxSegment;
/* 0x11EFC */ UNK_TYPE1 unk11EFC[0x4];
/* 0x11F00 */ struct OcarinaStaff* ocarinaStaff;
/* 0x11F04 */ u16 currentTextId;
- /* 0x11F06 */ UNK_TYPE1 unk11F06[0x2];
+ /* 0x11F06 */ u16 choiceTextId; // s16?
/* 0x11F08 */ u16 unk11F08;
- /* 0x11F0A */ u8 unk11F0A;
- /* 0x11F0B */ s8 unk11F0B;
- /* 0x11F0C */ s8 unk11F0C;
- /* 0x11F0B */ UNK_TYPE1 unk11F0D[0x3];
+ /* 0x11F0A */ u8 textBoxType;
+ /* 0x11F0B */ u8 textBoxPos;
+ /* 0x11F0C */ u8 unk11F0C;
/* 0x11F10 */ s32 msgLength;
- /* 0x11F14 */ u16 unk11F14;
- /* 0x11F16 */ u16 unk11F16;
- /* 0x11F18 */ s8 unk11F18;
- /* 0x11F19 */ UNK_TYPE1 unk11F19[0x1];
+ /* 0x11F14 */ u16 nextTextId;
+ /* 0x11F16 */ u16 itemId;
+ /* 0x11F18 */ u8 unk11F18;
/* 0x11F1A */ s16 unk11F1A[3];
/* 0x11F20 */ UNK_TYPE1 unk11F20[0x2];
- /* 0x11F22 */ u8 msgMode; // TODO: MessageMode enum
+ /* 0x11F22 */ u8 msgMode;
/* 0x11F23 */ UNK_TYPE1 unk11F23;
/* 0x11F24 */ union {
char schar[200];
u16 wchar[100];
} decodedBuffer;
/* 0x11FEC */ u16 msgBufPos;
- /* 0x11FEE */ s16 unk11FEE;
- /* 0x11FF0 */ s16 unk11FF0;
- /* 0x11FF2 */ u16 unk11FF2;
- /* 0x11FF4 */ s16 unk11FF4;
- /* 0x11FF6 */ s16 unk11FF6;
+ /* 0x11FEE */ u16 textDrawPos;
+ /* 0x11FF0 */ u16 decodedTextLen;
+ /* 0x11FF2 */ u16 textUnskippable;
+ /* 0x11FF4 */ s16 textPosX;
+ /* 0x11FF6 */ s16 textPosY;
/* 0x11FF8 */ s16 unk11FF8;
/* 0x11FFA */ s16 unk11FFA;
/* 0x11FFC */ s16 unk11FFC;
/* 0x11FFE */ s16 unk11FFE[0x3];
- /* 0x12004 */ s16 unk12004;
- /* 0x12006 */ s16 unk12006;
+ /* 0x12004 */ s16 textboxXTarget;
+ /* 0x12006 */ s16 textboxYTarget;
/* 0x12008 */ s16 unk12008;
- /* 0x1200A */ UNK_TYPE2 unk1200A;
+ /* 0x1200A */ s16 unk1200A;
/* 0x1200C */ s16 unk1200C;
/* 0x1200E */ s16 unk1200E;
/* 0x12010 */ s16 unk12010;
/* 0x12012 */ s16 unk12012;
/* 0x12014 */ s16 unk12014;
/* 0x12014 */ s16 unk12016;
- /* 0x12018 */ s16 unk12018; // messageR
- /* 0x1201A */ s16 unk1201A; // messageG
- /* 0x1201C */ s16 unk1201C; // messageB
- /* 0x1201E */ s16 unk1201E; // messageA
- /* 0x12020 */ u8 unk12020; // probably textboxEndType
+ /* 0x12018 */ s16 textColorR;
+ /* 0x1201A */ s16 textColorG;
+ /* 0x1201C */ s16 textColorB;
+ /* 0x1201E */ s16 textColorAlpha;
+ /* 0x12020 */ u8 textboxEndType;
/* 0x12021 */ u8 choiceIndex;
- /* 0x12022 */ u8 unk12022;
+ /* 0x12022 */ u8 choiceNum;
/* 0x12023 */ u8 stateTimer;
- /* 0x12024 */ s16 unk12024;
- /* 0x12026 */ u16 unk12026;
+ /* 0x12024 */ u16 textDelayTimer;
+ /* 0x12026 */ u16 textDelay;
/* 0x12028 */ u16 songPlayed;
/* 0x1202A */ u16 ocarinaMode;
/* 0x1202C */ u16 ocarinaAction;
/* 0x1202E */ u16 lastPlayedSong;
/* 0x12030 */ s16 unk_12030;
/* 0x12032 */ UNK_TYPE1 unk_12032[0x2];
- /* 0x12034 */ s16 unk12034;
- /* 0x12036 */ s16 unk12036;
- /* 0x12038 */ s16 unk12038;
- /* 0x1203A */ s16 unk1203A;
- /* 0x1203C */ s16 unk1203C;
+ /* 0x12034 */ s16 textboxColorRed;
+ /* 0x12036 */ s16 textboxColorGreen;
+ /* 0x12038 */ s16 textboxColorBlue;
+ /* 0x1203A */ s16 textboxColorAlphaTarget;
+ /* 0x1203C */ s16 textboxColorAlphaCurrent;
/* 0x1203E */ s16 unk1203E;
- /* 0x12040 */ struct Actor* unkActor;
+ /* 0x12040 */ struct Actor* talkActor;
/* 0x12044 */ s16 unk12044;
- /* 0x12046 */ s16 unk12046;
- /* 0x12048 */ u8 unk12048; // EnKakasi
- /* 0x12049 */ UNK_TYPE1 unk12049[0x1];
- /* 0x1204A */ s16 unk1204A[0x5];
+ /* 0x12046 */ s16 blockSunsSong;
+ /* 0x12048 */ u8 ocarinaButtonIndex;
+ /* 0x1204A */ s16 ocarinaButtonsPosY[5];
/* 0x12054 */ s16 unk12054[6]; // First, second and third digits in lottery code guess
/* 0x1205A */ UNK_TYPE1 unk12060[0x8];
- /* 0x12068 */ s16 unk12068;
- /* 0x1206A */ s16 unk1206A;
+ /* 0x12068 */ s16 textboxX;
+ /* 0x1206A */ s16 textboxY;
/* 0x1206C */ s32 unk1206C;
/* 0x12070 */ s32 unk12070;
/* 0x12074 */ s32 unk12074;
@@ -164,21 +286,24 @@ typedef struct MessageContext {
/* 0x1207C */ s32 bankRupees;
/* 0x12080 */ struct MessageTableEntry* messageEntryTable;
/* 0x12084 */ struct MessageTableEntry* messageEntryTableNes;
- /* 0x12088 */ UNK_TYPE4 unk12088;
+ /* 0x12088 */ UNK_TYPE1 unk12088[0x4];
/* 0x1208C */ struct MessageTableEntry* messageTableStaff;
- /* 0x12090 */ s16 unk12090;
- /* 0x12092 */ s16 unk12092;
- /* 0x12094 */ s8 unk12094;
- /* 0x12095 */ UNK_TYPE1 unk12095[0x3];
- /* 0x12098 */ f32 unk12098; // Text_Scale?
- /* 0x1209C */ s16 unk1209C;
- /* 0x1209E */ UNK_TYPE1 unk1209E[0x2];
- /* 0x120A0 */ s32 unk120A0;
- /* 0x120A4 */ s16 unk120A4[6];
- /* 0x120B0 */ u8 unk120B0;
+ /* 0x12090 */ s16 textIsCredits;
+ /* 0x12092 */ s16 messageHasSetSfx;
+ /* 0x12094 */ u8 textboxSkipped;
+ /* 0x12098 */ f32 textCharScale;
+ /* 0x1209C */ s16 textFade;
+ /* 0x120A0 */ s32 ocarinaAvailableSongs;
+ /* 0x120A4 */ s16 stickAdjX;
+ /* 0x120A6 */ s16 stickAdjY;
+ /* 0x120A8 */ s16 stickXRepeatState;
+ /* 0x120AA */ s16 stickYRepeatState;
+ /* 0x120AC */ s16 stickXRepeatTimer;
+ /* 0x120AE */ s16 stickYRepeatTimer;
+ /* 0x120B0 */ u8 ocarinaSongEffectActive;
/* 0x120B1 */ u8 bombersNotebookEventQueueCount;
/* 0x120B2 */ u8 bombersNotebookEventQueue[10];
- /* 0x120BC */ u16 unk_120BC;
+ /* 0x120BC */ u16 hudVisibility;
/* 0x120BE */ s16 unk120BE;
/* 0x120C0 */ s16 unk120C0;
/* 0x120C2 */ s16 unk120C2;
@@ -191,7 +316,37 @@ typedef struct MessageContext {
/* 0x120D2 */ s16 unk120D2;
/* 0x120D4 */ s16 unk120D4;
/* 0x120D6 */ s16 unk120D6;
- /* 0x120D8 */ UNK_TYPE1 unk120D8[0x8];
+ /* 0x120D8 */ s16 unk120D8;
+ /* 0x120DA */ UNK_TYPE1 unk_120DA[0x6];
} MessageContext; // size = 0x120E0
+s32 Message_ShouldAdvance(struct PlayState* play);
+void Message_CloseTextbox(struct PlayState* play);
+void Message_DrawTextChar(struct PlayState* play, TexturePtr texture, Gfx** gfxP);
+void Message_DrawItemIcon(struct PlayState* play, Gfx** gfxP);
+void Message_HandleOcarina(struct PlayState* play);
+void Message_LoadItemIcon(struct PlayState* play, u16 itemId, s16 arg2);
+void Message_SetupLoadItemIcon(struct PlayState* play);
+void func_801514B0(struct PlayState* play, u16 arg1, u8 arg2);
+void Message_StartTextbox(struct PlayState* play, u16 textId, Actor* actor);
+void Message_ContinueTextbox(struct PlayState* play, u16 textId);
+void Message_DisplaySceneTitleCard(struct PlayState* play, u16 textId);
+void Message_BombersNotebookQueueEvent(struct PlayState* play, u8 event);
+void Message_DisplayOcarinaStaff(struct PlayState* play, u16 ocarinaAction);
+void Message_DisplayOcarinaStaffBlockSunsSong(struct PlayState* play, u16 ocarinaAction);
+u8 Message_GetState(MessageContext* msgCtx);
+void Message_Draw(struct PlayState* play);
+void Message_Update(struct PlayState* play);
+void Message_Init(struct PlayState* play);
+void Message_FindMessageNES(struct PlayState* play, u16 textId);
+void Message_DrawTextNES(struct PlayState* play, Gfx** gfxP, u16 textDrawPos);
+void Message_DecodeNES(struct PlayState* play);
+void Message_FindCreditsMessage(struct PlayState* play, u16 textId);
+void Message_DrawTextCredits(struct PlayState* play, Gfx** gfxP);
+void Message_DecodeCredits(struct PlayState* play);
+
+extern u8 gPageSwitchNextButtonStatus[6][5];
+extern u16 gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_EVENT_MAX];
+extern s16 gOcarinaSongItemMap[];
+
#endif
diff --git a/include/z64object.h b/include/z64object.h
index 712826815..d547d4a9e 100644
--- a/include/z64object.h
+++ b/include/z64object.h
@@ -1,13 +1,6 @@
#ifndef Z64OBJECT_H
#define Z64OBJECT_H
-#define OBJECT_SPACE_SIZE_DEFAULT 1413120
-#define OBJECT_SPACE_SIZE_CLOCK_TOWN 1566720
-#define OBJECT_SPACE_SIZE_MILK_BAR 1617920
-#define OBJECT_SPACE_SIZE_TERMINA_FIELD 1505280
-
-#define OBJECT_EXCHANGE_BANK_MAX 35
-
#define DEFINE_OBJECT(_name, enumValue) enumValue,
#define DEFINE_OBJECT_UNSET(enumValue) enumValue,
#define DEFINE_OBJECT_SIZE_ZERO(_name, enumValue) enumValue,
diff --git a/include/z64ocarina.h b/include/z64ocarina.h
index 7cfafde4f..2419a98df 100644
--- a/include/z64ocarina.h
+++ b/include/z64ocarina.h
@@ -32,10 +32,135 @@ typedef enum {
/* 24 */ OCARINA_SONG_SCARECROW_LONG = OCARINA_SONG_MAX // anything larger than 24 is considered the long scarecrow's song
} OcarinaSongId;
-typedef enum OcarinaMode {
- /* 0x18 */ OCARINA_MODE_APPLY_INV_SOT_FAST = 24,
+typedef enum {
+ /* 0x00 */ OCARINA_ACTION_0, // acts like free play but never set
+ /* 0x01 */ OCARINA_ACTION_FREE_PLAY,
+ /* 0x02 */ OCARINA_ACTION_DEMONSTRATE_SONATA, // Song demonstrated/previewed by another actor/teacher
+ /* 0x03 */ OCARINA_ACTION_DEMONSTRATE_GORON_LULLABY,
+ /* 0x04 */ OCARINA_ACTION_DEMONSTRATE_NEW_WAVE,
+ /* 0x05 */ OCARINA_ACTION_DEMONSTRATE_ELEGY,
+ /* 0x06 */ OCARINA_ACTION_DEMONSTRATE_OATH,
+ /* 0x07 */ OCARINA_ACTION_DEMONSTRATE_SARIAS,
+ /* 0x08 */ OCARINA_ACTION_DEMONSTRATE_TIME,
+ /* 0x09 */ OCARINA_ACTION_DEMONSTRATE_HEALING,
+ /* 0x0A */ OCARINA_ACTION_DEMONSTRATE_EPONAS,
+ /* 0x0B */ OCARINA_ACTION_DEMONSTRATE_SOARING,
+ /* 0x0C */ OCARINA_ACTION_DEMONSTRATE_STORMS,
+ /* 0x0D */ OCARINA_ACTION_DEMONSTRATE_SUNS,
+ /* 0x0E */ OCARINA_ACTION_DEMONSTRATE_INVERTED_TIME,
+ /* 0x0F */ OCARINA_ACTION_DEMONSTRATE_DOUBLE_TIME,
+ /* 0x10 */ OCARINA_ACTION_DEMONSTRATE_GORON_LULLABY_INTRO,
+ /* 0x11 */ OCARINA_ACTION_11,
+ /* 0x12 */ OCARINA_ACTION_PROMPT_SONATA, // User plays back song through inputing 1 note at a time, as a tutorial. Each note is verified.
+ /* 0x13 */ OCARINA_ACTION_PROMPT_GORON_LULLABY,
+ /* 0x14 */ OCARINA_ACTION_PROMPT_NEW_WAVE,
+ /* 0x15 */ OCARINA_ACTION_PROMPT_ELEGY,
+ /* 0x16 */ OCARINA_ACTION_PROMPT_OATH,
+ /* 0x17 */ OCARINA_ACTION_PROMPT_SARIAS,
+ /* 0x18 */ OCARINA_ACTION_PROMPT_TIME,
+ /* 0x19 */ OCARINA_ACTION_PROMPT_HEALING,
+ /* 0x1A */ OCARINA_ACTION_PROMPT_EPONAS,
+ /* 0x1B */ OCARINA_ACTION_PROMPT_SOARING,
+ /* 0x1C */ OCARINA_ACTION_PROMPT_STORMS,
+ /* 0x1D */ OCARINA_ACTION_PROMPT_SUNS,
+ /* 0x1E */ OCARINA_ACTION_PROMPT_INVERTED_TIME,
+ /* 0x1F */ OCARINA_ACTION_PROMPT_DOUBLE_TIME,
+ /* 0x20 */ OCARINA_ACTION_PROMPT_GORON_LULLABY_INTRO,
+ /* 0x21 */ OCARINA_ACTION_21,
+ /* 0x22 */ OCARINA_ACTION_CHECK_SONATA, // Once the entire song is played, checks for a specific song. Broken as playing any dungeon song will softlock.
+ /* 0x23 */ OCARINA_ACTION_CHECK_GORON_LULLABY,
+ /* 0x24 */ OCARINA_ACTION_CHECK_NEW_WAVE,
+ /* 0x25 */ OCARINA_ACTION_CHECK_ELEGY,
+ /* 0x26 */ OCARINA_ACTION_CHECK_OATH,
+ /* 0x27 */ OCARINA_ACTION_CHECK_SARIAS,
+ /* 0x28 */ OCARINA_ACTION_CHECK_TIME,
+ /* 0x29 */ OCARINA_ACTION_CHECK_HEALING,
+ /* 0x2A */ OCARINA_ACTION_CHECK_EPONAS,
+ /* 0x2B */ OCARINA_ACTION_CHECK_SOARING,
+ /* 0x2C */ OCARINA_ACTION_CHECK_STORMS,
+ /* 0x2D */ OCARINA_ACTION_CHECK_SUNS,
+ /* 0x2E */ OCARINA_ACTION_CHECK_INVERTED_TIME,
+ /* 0x2F */ OCARINA_ACTION_CHECK_DOUBLE_TIME,
+ /* 0x30 */ OCARINA_ACTION_CHECK_GORON_LULLABY_INTRO,
+ /* 0x31 */ OCARINA_ACTION_CHECK_SCARECROW_SPAWN, // TODO: Verify (may include more)
+ /* 0x32 */ OCARINA_ACTION_FREE_PLAY_DONE,
+ /* 0x33 */ OCARINA_ACTION_SCARECROW_LONG_RECORDING,
+ /* 0x34 */ OCARINA_ACTION_SCARECROW_LONG_DEMONSTRATION,
+ /* 0x35 */ OCARINA_ACTION_SCARECROW_SPAWN_RECORDING,
+ /* 0x36 */ OCARINA_ACTION_SCARECROW_SPAWN_DEMONSTRATION,
+ /* 0x37 */ OCARINA_ACTION_37,
+ /* 0x38 */ OCARINA_ACTION_CHECK_NOTIME,
+ /* 0x39 */ OCARINA_ACTION_CHECK_NOTIME_DONE,
+ /* 0x3A */ OCARINA_ACTION_3A, // Monkey Instrument Prompt
+ /* 0x3B */ OCARINA_ACTION_3B,
+ /* 0x3C */ OCARINA_ACTION_3C,
+ /* 0x3D */ OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_FIRST_HALF, // Evan Part 1 demonstrate first half (Japa)
+ /* 0x3E */ OCARINA_ACTION_DEMONSTRATE_EVAN_PART2_FIRST_HALF, // Evan Part 2 demonstrate first half (Japa)
+ /* 0x3F */ OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_SECOND_HALF, // Evan Part 1 demonstrate second half (Diary)
+ /* 0x40 */ OCARINA_ACTION_DEMONSTRATE_EVAN_PART2_SECOND_HALF, // Evan Part 2 demonstrate second half (Diary)
+ /* 0x41 */ OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF, // Evan Part 1 prompt second half (Japa)
+ /* 0x42 */ OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF, // Evan Part 2 prompt second half (Japa)
+ /* 0x43 */ OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN,
+ /* 0x44 */ OCARINA_ACTION_PROMPT_WIND_FISH_GORON,
+ /* 0x45 */ OCARINA_ACTION_PROMPT_WIND_FISH_ZORA,
+ /* 0x46 */ OCARINA_ACTION_PROMPT_WIND_FISH_DEKU,
+ /* 0x47 */ OCARINA_ACTION_TIMED_PROMPT_SONATA, // Playing back a particular song, but must also time the notes properly. Not fully implemented
+ /* 0x48 */ OCARINA_ACTION_TIMED_PROMPT_GORON_LULLABY,
+ /* 0x49 */ OCARINA_ACTION_TIMED_PROMPT_NEW_WAVE,
+ /* 0x4A */ OCARINA_ACTION_TIMED_PROMPT_ELEGY,
+ /* 0x4B */ OCARINA_ACTION_TIMED_PROMPT_OATH,
+ /* 0x4C */ OCARINA_ACTION_TIMED_PROMPT_SARIAS,
+ /* 0x4D */ OCARINA_ACTION_TIMED_PROMPT_TIME,
+ /* 0x4E */ OCARINA_ACTION_TIMED_PROMPT_HEALING,
+ /* 0x4F */ OCARINA_ACTION_TIMED_PROMPT_EPONAS,
+ /* 0x50 */ OCARINA_ACTION_TIMED_PROMPT_SOARING,
+ /* 0x51 */ OCARINA_ACTION_TIMED_PROMPT_STORMS
+} OcarinaSongActionId;
+
+typedef enum {
+ /* 0x00 */ OCARINA_MODE_NONE,
+ /* 0x01 */ OCARINA_MODE_ACTIVE,
+ /* 0x02 */ OCARINA_MODE_WARP,
+ /* 0x03 */ OCARINA_MODE_EVENT,
+ /* 0x04 */ OCARINA_MODE_END,
+ /* 0x05 */ OCARINA_MODE_PLAYED_TIME, // Played Time
+ /* 0x06 */ OCARINA_MODE_PLAYED_HEALING,
+ /* 0x07 */ OCARINA_MODE_PLAYED_EPONAS,
+ /* 0x08 */ OCARINA_MODE_PLAYED_SOARING,
+ /* 0x09 */ OCARINA_MODE_PLAYED_STORMS,
+ /* 0x0A */ OCARINA_MODE_PLAYED_SUNS,
+ /* 0x0B */ OCARINA_MODE_PLAYED_INVERTED_TIME,
+ /* 0x0C */ OCARINA_MODE_PLAYED_DOUBLE_TIME,
+ /* 0x0D */ OCARINA_MODE_PLAYED_SCARECROW_SPAWN,
+ /* 0x0E */ OCARINA_MODE_E,
+ /* 0x0F */ OCARINA_MODE_F,
+ /* 0x10 */ OCARINA_MODE_10,
+ /* 0x11 */ OCARINA_MODE_11, // End memory/scarecrow from OoT
+ /* 0x12 */ OCARINA_MODE_PROCESS_SOT, // Song of Time related
+ /* 0x13 */ OCARINA_MODE_PROCESS_INVERTED_TIME, // Inverted Song of Time related
+ /* 0x14 */ OCARINA_MODE_14,
+ /* 0x15 */ OCARINA_MODE_PROCESS_DOUBLE_TIME, // Song of Double Time related
+ /* 0x16 */ OCARINA_MODE_APPLY_SOT, // Apply
+ /* 0x17 */ OCARINA_MODE_17,
+ /* 0x18 */ OCARINA_MODE_APPLY_INV_SOT_FAST,
/* 0x19 */ OCARINA_MODE_APPLY_INV_SOT_SLOW,
- /* 0x1A */ OCARINA_MODE_APPLY_DOUBLE_SOT
+ /* 0x1A */ OCARINA_MODE_APPLY_DOUBLE_SOT,
+ /* 0x1B */ OCARINA_MODE_1B,
+ /* 0x1C */ OCARINA_MODE_WARP_TO_GREAT_BAY_COAST,
+ /* 0x1D */ OCARINA_MODE_WARP_TO_ZORA_CAPE,
+ /* 0x1E */ OCARINA_MODE_WARP_TO_SNOWHEAD,
+ /* 0x1F */ OCARINA_MODE_WARP_TO_MOUNTAIN_VILLAGE,
+ /* 0x20 */ OCARINA_MODE_WARP_TO_SOUTH_CLOCK_TOWN,
+ /* 0x21 */ OCARINA_MODE_WARP_TO_MILK_ROAD,
+ /* 0x22 */ OCARINA_MODE_WARP_TO_WOODFALL,
+ /* 0x23 */ OCARINA_MODE_WARP_TO_SOUTHERN_SWAMP,
+ /* 0x24 */ OCARINA_MODE_WARP_TO_IKANA_CANYON,
+ /* 0x25 */ OCARINA_MODE_WARP_TO_STONE_TOWER,
+ /* 0x26 */ OCARINA_MODE_WARP_TO_ENTRANCE,
+ /* 0x27 */ OCARINA_MODE_PROCESS_RESTRICTED_SONG, // Variants of Song of Time, Soaring, or Elegy restricted
+ /* 0x28 */ OCARINA_MODE_28,
+ /* 0x29 */ OCARINA_MODE_29,
+ /* 0x2A */ OCARINA_MODE_PLAYED_FULL_EVAN_SONG
} OcarinaMode;
typedef enum {
@@ -78,7 +203,7 @@ typedef enum {
/* 3 */ OCARINA_INSTRUMENT_WHISTLING_FLUTE,
/* 4 */ OCARINA_INSTRUMENT_HARP,
/* 5 */ OCARINA_INSTRUMENT_IKANA_KING,
- /* 6 */ OCARINA_INSTRUMENT_TATL,
+ /* 6 */ OCARINA_INSTRUMENT_TATL, // Sounds like bells
/* 7 */ OCARINA_INSTRUMENT_GORON_DRUMS,
/* 8 */ OCARINA_INSTRUMENT_ZORA_GUITAR,
/* 9 */ OCARINA_INSTRUMENT_DEKU_PIPES,
@@ -98,6 +223,16 @@ typedef enum {
/* -1 */ OCARINA_RECORD_REJECTED = 0xFF
} OcarinaRecordingState;
+typedef enum {
+ /* 0 */ OCARINA_ERROR_NONE,
+ /* 1 */ OCARINA_ERROR_1,
+ /* 2 */ OCARINA_ERROR_2,
+ /* 3 */ OCARINA_ERROR_3,
+ /* 4 */ OCARINA_ERROR_BEND,
+ /* 5 */ OCARINA_ERROR_5,
+ /* 0xFF */ OCARINA_ERROR_INACTIVE = 0xFF // Song not available
+} OcarinaError;
+
/**
* bFlat4Flag Note:
* Flag for resolving whether (pitch = OCARINA_PITCH_BFLAT4)
diff --git a/include/z64player.h b/include/z64player.h
index ce5f33144..3f0af150a 100644
--- a/include/z64player.h
+++ b/include/z64player.h
@@ -1040,7 +1040,7 @@ typedef enum PlayerCueId {
// breman mask march?
#define PLAYER_STATE3_20000000 (1 << 29)
//
-#define PLAYER_STATE3_40000000 (1 << 30)
+#define PLAYER_STATE3_START_CHANGING_HELD_ITEM (1 << 30)
// TARGETING_HOSTILE?
#define PLAYER_STATE3_80000000 (1 << 31)
@@ -1095,7 +1095,7 @@ typedef struct Player {
/* 0x14B */ u8 transformation; // PlayerTransformation enum
/* 0x14C */ u8 modelGroup; // PlayerModelGroup enum
/* 0x14D */ u8 nextModelGroup;
- /* 0x14E */ s8 unk_14E;
+ /* 0x14E */ s8 itemChangeType; // ItemChangeType enum
/* 0x14F */ u8 modelAnimType; // PlayerAnimType enum
/* 0x150 */ u8 leftHandType;
/* 0x151 */ u8 rightHandType;
@@ -1122,7 +1122,7 @@ typedef struct Player {
/* 0x238 */ OSMesg maskObjectLoadMsg;
/* 0x23C */ void* maskObjectSegment;
/* 0x240 */ SkelAnime skelAnime;
- /* 0x284 */ SkelAnime unk_284;
+ /* 0x284 */ SkelAnime skelAnimeUpper;
/* 0x2C8 */ SkelAnime unk_2C8;
/* 0x30C */ Vec3s jointTable[5];
/* 0x32A */ Vec3s morphTable[5];
@@ -1176,8 +1176,8 @@ typedef struct Player {
/* 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];
+ /* 0x929 */ u8 jointTableUpperBuffer[PLAYER_LIMB_BUF_SIZE];
+ /* 0x9C8 */ u8 morphTableUpperBuffer[PLAYER_LIMB_BUF_SIZE];
/* 0xA68 */ PlayerAgeProperties* ageProperties; // repurposed as "transformation properties"?
/* 0xA6C */ u32 stateFlags1;
/* 0xA70 */ u32 stateFlags2;
@@ -1206,7 +1206,7 @@ typedef struct Player {
/* 0xABC */ f32 unk_ABC;
/* 0xAC0 */ f32 unk_AC0;
/* 0xAC4 */ PlayerUpperActionFunc upperActionFunc; // Upper body/item action functions
- /* 0xAC8 */ f32 unk_AC8;
+ /* 0xAC8 */ f32 skelAnimeUpperBlendWeight;
/* 0xACC */ s16 unk_ACC;
/* 0xACE */ s8 unk_ACE;
/* 0xACF */ u8 putAwayCountdown; // Frames to wait before showing "Put Away" on A
@@ -1221,8 +1221,8 @@ typedef struct Player {
/* 0xADE */ u8 unk_ADE;
/* 0xADF */ s8 unk_ADF[4]; // Circular buffer used for testing for triggering a quickspin
/* 0xAE3 */ s8 unk_AE3[4]; // Circular buffer used for ?
- /* 0xAE7 */ s8 unk_AE7; // a timer, used as an index for multiple kinds of animations too, room index?, etc
- /* 0xAE8 */ s16 unk_AE8; // multipurpose timer
+ /* 0xAE7 */ s8 actionVar1; // context dependent variable that has different meanings depending on what action is currently running
+ /* 0xAE8 */ s16 actionVar2; // context dependent variable that has different meanings depending on what action is currently running
/* 0xAEC */ f32 unk_AEC;
/* 0xAF0 */ union {
Vec3f unk_AF0[2];
diff --git a/include/z64save.h b/include/z64save.h
index cdc46f023..333953a76 100644
--- a/include/z64save.h
+++ b/include/z64save.h
@@ -115,7 +115,7 @@ typedef enum {
/* 16 */ TIMER_STATE_POSTMAN_END
} TimerState;
-typedef enum {
+typedef enum BottleTimerState {
/* 0 */ BOTTLE_TIMER_STATE_OFF,
/* 1 */ BOTTLE_TIMER_STATE_COUNTING
} BottleTimerState;
@@ -126,7 +126,7 @@ typedef enum {
/* 3 */ MINIGAME_STATUS_END = 3
} MinigameStatus;
-typedef enum {
+typedef enum HudVisibility {
/* 0 */ HUD_VISIBILITY_IDLE,
/* 1 */ HUD_VISIBILITY_NONE,
/* 2 */ HUD_VISIBILITY_NONE_ALT, // Identical to HUD_VISIBILITY_NONE
@@ -154,6 +154,27 @@ typedef enum {
/* 52 */ HUD_VISIBILITY_NONE_INSTANT = 52
} HudVisibility;
+// Based on sRupeesTextLocalization
+typedef enum Language {
+ /* 0 */ LANGUAGE_JPN,
+ /* 1 */ LANGUAGE_ENG,
+ /* 2 */ LANGUAGE_GER,
+ /* 3 */ LANGUAGE_FRE,
+ /* 4 */ LANGUAGE_SPA,
+ /* 5 */ LANGUAGE_MAX
+} Language;
+
+typedef enum HighScore {
+ /* 0 */ HS_BANK_RUPEES,
+ /* 1 */ HS_UNK_1,
+ /* 2 */ HS_FISHING, // Fishing flags
+ /* 3 */ HS_BOAT_ARCHERY,
+ /* 4 */ HS_HORSE_BACK_BALLOON,
+ /* 5 */ HS_LOTTERY_GUESS, // Lottery code chosen by player (only uses lower three hex digits)
+ /* 6 */ HS_SHOOTING_GALLERY, // High scores for both shooting galleries. Town uses lower 16 bits, Swamp uses higher 16 bits.
+ /* 7 */ HS_MAX
+} HighScore;
+
#define PICTO_PHOTO_WIDTH 160
#define PICTO_PHOTO_HEIGHT 112
@@ -278,18 +299,12 @@ typedef struct SaveInfo {
/* 0xEA8 */ u32 unk_EA8[2]; // Related to blue warps
/* 0xEB0 */ u32 stolenItems; // Items stolen by Takkuri and given to Curiosity Shop Man
/* 0xEB4 */ u32 unk_EB4;
- /* 0xEB8 */ u32 bankRupees;
- /* 0xEBC */ u32 unk_EBC;
- /* 0xEC0 */ u32 unk_EC0; // Fishing flags
- /* 0xEC4 */ u32 unk_EC4;
- /* 0xEC8 */ u32 horseBackBalloonHighScore;
- /* 0xECC */ u32 lotteryCodeGuess; // Lottery code chosen by player (only uses lower three hex digits)
- /* 0xED0 */ u32 shootingGalleryHighScores; // High scores for both shooting galleries. Town uses lower 16 bits, Swamp uses higher 16 bits.
+ /* 0xEB8 */ u32 highScores[HS_MAX];
/* 0xED4 */ u8 weekEventReg[100]; // "week_event_reg"
/* 0xF38 */ u32 regionsVisited; // "area_arrival"
/* 0xF3C */ u32 worldMapCloudVisibility; // "cloud_clear"
/* 0xF40 */ u8 unk_F40; // "oca_rec_flag" has scarecrows song
- /* 0xF41 */ u8 unk_F41; // "oca_rec_flag8" scarecrows song set?
+ /* 0xF41 */ u8 scarecrowSpawnSongSet; // "oca_rec_flag8"
/* 0xF42 */ u8 scarecrowSpawnSong[128];
/* 0xFC2 */ s8 bombersCaughtNum; // "aikotoba_index"
/* 0xFC3 */ s8 bombersCaughtOrder[5]; // "aikotoba_table"
@@ -312,7 +327,7 @@ typedef struct Save {
/* 0x10 */ s32 isNight; // "asahiru_fg"
/* 0x14 */ s32 timeSpeedOffset; // "change_zelda_time"
/* 0x18 */ s32 day; // "totalday"
- /* 0x1C */ s32 daysElapsed; // "eventday"
+ /* 0x1C */ s32 eventDayCount; // "eventday"
/* 0x20 */ u8 playerForm; // "player_character"
/* 0x21 */ u8 snowheadCleared; // "spring_flag"
/* 0x22 */ u8 hasTatl; // "bell_flag"
@@ -430,12 +445,16 @@ typedef enum {
#define LINK_IS_CHILD (gSaveContext.save.linkAge == 1)
#define LINK_IS_ADULT (gSaveContext.save.linkAge == 0)
+#define YEARS_CHILD 5
+#define YEARS_ADULT 17
+#define LINK_AGE_IN_YEARS (!LINK_IS_ADULT ? YEARS_CHILD : YEARS_ADULT)
+
#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)));
+ ((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)
@@ -510,10 +529,27 @@ typedef enum {
#define SET_STOLEN_ITEM_2(itemId) \
(gSaveContext.save.saveInfo.stolenItems = (gSaveContext.save.saveInfo.stolenItems & ~0x00FF0000) | ((itemId & 0xFF) << 0x10))
-#define GET_TOWN_SHOOTING_GALLERY_HIGH_SCORE() ((s32)(gSaveContext.save.saveInfo.shootingGalleryHighScores & 0xFFFF))
-#define GET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE() ((s32)((gSaveContext.save.saveInfo.shootingGalleryHighScores & 0xFFFF0000) >> 0x10))
-#define SET_TOWN_SHOOTING_GALLERY_HIGH_SCORE(score) (gSaveContext.save.saveInfo.shootingGalleryHighScores = (gSaveContext.save.saveInfo.shootingGalleryHighScores & 0xFFFF0000) | ((u16)(score)))
-#define SET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE(score) (gSaveContext.save.saveInfo.shootingGalleryHighScores = ((gSaveContext.save.saveInfo.shootingGalleryHighScores) & 0xFFFF) | ((u16)(score) << 0x10))
+#define HIGH_SCORE(type) (gSaveContext.save.saveInfo.highScores[(type)])
+#define GET_HIGH_SCORE(type) ((void)0, gSaveContext.save.saveInfo.highScores[(type)])
+
+#define HS_GET_BANK_RUPEES() (HIGH_SCORE(HS_BANK_RUPEES) & 0xFFFF)
+#define HS_SET_BANK_RUPEES(rupees) (HIGH_SCORE(HS_BANK_RUPEES) = ((HIGH_SCORE(HS_BANK_RUPEES) & 0xFFFF0000) | (rupees)))
+
+#define HS_GET_HIGH_SCORE_3_LOWER() (HIGH_SCORE(HS_BOAT_ARCHERY) & 0xFFFF)
+#define HS_SET_HIGH_SCORE_3_LOWER(score) (HIGH_SCORE(HS_BOAT_ARCHERY) = ((HIGH_SCORE(HS_BOAT_ARCHERY) & 0xFFFF0000) | (score)))
+#define HS_GET_BOAT_ARCHERY_HIGH_SCORE() ((HIGH_SCORE(HS_BOAT_ARCHERY) & 0xFFFF0000) >> 0x10)
+#define HS_SET_BOAT_ARCHERY_HIGH_SCORE(score) (HIGH_SCORE(HS_BOAT_ARCHERY) = ((HIGH_SCORE(HS_BOAT_ARCHERY) & 0xFFFF) | ((u16)(score) << 0x10)))
+
+#define HS_GET_HORSE_BACK_BALLOON_TIME() ((s32)HIGH_SCORE(HS_HORSE_BACK_BALLOON))
+#define HS_SET_HORSE_BACK_BALLOON_TIME(time) (HIGH_SCORE(HS_HORSE_BACK_BALLOON) = (time))
+
+#define HS_GET_LOTTERY_CODE_GUESS() (HIGH_SCORE(HS_LOTTERY_GUESS) & 0xFFFF)
+#define HS_SET_LOTTERY_CODE_GUESS(guess) (HIGH_SCORE(HS_LOTTERY_GUESS) = ((HIGH_SCORE(HS_LOTTERY_GUESS) & 0xFFFF0000) | ((guess) & 0xFFFF)))
+
+#define HS_GET_TOWN_SHOOTING_GALLERY_HIGH_SCORE() ((s32)(HIGH_SCORE(HS_SHOOTING_GALLERY) & 0xFFFF))
+#define HS_SET_TOWN_SHOOTING_GALLERY_HIGH_SCORE(score) (HIGH_SCORE(HS_SHOOTING_GALLERY) = (HIGH_SCORE(HS_SHOOTING_GALLERY) & 0xFFFF0000) | ((u16)(score)))
+#define HS_GET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE() ((s32)((HIGH_SCORE(HS_SHOOTING_GALLERY) & 0xFFFF0000) >> 0x10))
+#define HS_SET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE(score) (HIGH_SCORE(HS_SHOOTING_GALLERY) = (HIGH_SCORE(HS_SHOOTING_GALLERY) & 0xFFFF) | ((u16)(score) << 0x10))
/**
* gSaveContext.save.saveInfo.weekEventReg
@@ -614,11 +650,14 @@ typedef enum {
#define WEEKEVENTREG_CLOCK_TOWER_OPENED PACK_WEEKEVENTREG_FLAG(8, 0x40)
#define WEEKEVENTREG_08_80 PACK_WEEKEVENTREG_FLAG(8, 0x80)
+
+// This 5 flags are managed in a special way by EnElfgrp
#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)
@@ -759,7 +798,7 @@ typedef enum {
#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_OBTAINED_GREAT_SPIN_ATTACK 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)
@@ -1595,6 +1634,9 @@ typedef enum {
/* 3 */ DUNGEON_INDEX_STONE_TOWER_TEMPLE // Also applies to Inverted Stone Tower Temple
} DungeonIndex;
+#define STRAY_FAIRY_TOTAL 25 // total number of stray fairies, including those already in the Great Fairy Fountain
+#define STRAY_FAIRY_SCATTERED_TOTAL 15 // original number of stray fairies in one dungeon area
+
void Sram_ActivateOwl(u8 owlId);
void Sram_ClearFlagsAtDawnOfTheFirstDay(void);
void Sram_SaveEndOfCycle(struct PlayState* play);
diff --git a/include/z64scene.h b/include/z64scene.h
index e0f186cd8..3c74f6541 100644
--- a/include/z64scene.h
+++ b/include/z64scene.h
@@ -74,7 +74,7 @@ typedef struct {
typedef struct {
/* 0x0 */ u8 code;
/* 0x1 */ u8 naviQuestHintFileId;
- /* 0x4 */ u32 subKeepIndex;
+ /* 0x4 */ u32 subKeepId;
} SCmdSpecialFiles; // size = 0x8
typedef struct {
@@ -415,7 +415,7 @@ typedef struct {
/* 0x08 */ DmaRequest dmaReq;
/* 0x28 */ OSMesgQueue loadQueue;
/* 0x40 */ OSMesg loadMsg;
-} ObjectStatus; // size = 0x44
+} ObjectEntry; // size = 0x44
typedef struct {
/* 0x0 */ RomFile segment;
@@ -472,14 +472,16 @@ typedef struct {
typedef RoomShapeCullableEntry PolygonDlist2;
typedef RoomShapeCullable PolygonType2;
+#define OBJECT_SLOT_NONE -1
+
typedef struct {
/* 0x000 */ void* spaceStart;
/* 0x004 */ void* spaceEnd;
- /* 0x008 */ u8 num;
- /* 0x009 */ u8 spawnedObjectCount;
- /* 0x00A */ u8 mainKeepIndex;
- /* 0x00B */ u8 subKeepIndex;
- /* 0x00C */ ObjectStatus status[OBJECT_EXCHANGE_BANK_MAX];
+ /* 0x008 */ u8 numEntries; // total amount of used entries
+ /* 0x009 */ u8 numPersistentEntries; // amount of entries that won't be reused when loading a new object list (when loading a new room)
+ /* 0x00A */ u8 mainKeepSlot; // "gameplay_keep" slot
+ /* 0x00B */ u8 subKeepSlot; // "gameplay_field_keep" or "gameplay_dangeon_keep" slot
+ /* 0x00C */ ObjectEntry slots[35];
} ObjectContext; // size = 0x958
#define PATH_INDEX_NONE -1
@@ -899,13 +901,13 @@ typedef enum {
#define SCENE_CMD_MISC_SETTINGS SCENE_CMD_SET_REGION_VISITED
#define SCENE_CMD_CUTSCENE_LIST SCENE_CMD_CUTSCENE_SCRIPT_LIST
-s32 Object_Spawn(ObjectContext* objectCtx, s16 id);
-void Object_InitBank(struct GameState* gameState, ObjectContext* objectCtx);
-void Object_UpdateBank(ObjectContext* objectCtx);
-s32 Object_GetIndex(ObjectContext* objectCtx, s16 objectId);
-s32 Object_IsLoaded(ObjectContext* objectCtx, s32 index);
+s32 Object_SpawnPersistent(ObjectContext* objectCtx, s16 id);
+void Object_InitContext(struct GameState* gameState, ObjectContext* objectCtx);
+void Object_UpdateEntries(ObjectContext* objectCtx);
+s32 Object_GetSlot(ObjectContext* objectCtx, s16 objectId);
+s32 Object_IsLoaded(ObjectContext* objectCtx, s32 slot);
void Object_LoadAll(ObjectContext* objectCtx);
-void* func_8012F73C(ObjectContext* objectCtx, s32 iParm2, s16 id);
+void* func_8012F73C(ObjectContext* objectCtx, s32 slot, s16 id);
void Scene_CommandSpawnList(struct PlayState* play, SceneCmd* cmd);
void Scene_CommandActorList(struct PlayState* play, SceneCmd* cmd);
void Scene_CommandActorCutsceneCamList(struct PlayState* play, SceneCmd* cmd);
diff --git a/include/z64speed_meter.h b/include/z64speed_meter.h
index fbd815248..44b47ed1e 100644
--- a/include/z64speed_meter.h
+++ b/include/z64speed_meter.h
@@ -7,12 +7,24 @@ struct GameState;
struct GraphicsContext;
typedef struct SpeedMeter {
- /* 0x00 */ char unk_00[0x20];
+ /* 0x00 */ char unk_00[0x18];
+ /* 0x18 */ s32 x; // Unused
+ /* 0x1C */ s32 y;
} SpeedMeter; // size = 0x20
void SpeedMeter_Init(SpeedMeter* this);
void SpeedMeter_Destroy(SpeedMeter* this);
void SpeedMeter_DrawTimeEntries(SpeedMeter* this, struct GraphicsContext* gfxCtx);
-void SpeedMeter_DrawAllocEntries(SpeedMeter* this, struct GraphicsContext* gfxCtx, struct GameState* gameState);
+void SpeedMeter_DrawAllocEntries(SpeedMeter* this, struct GraphicsContext* gfxCtx, struct GameState* state);
+
+extern volatile OSTime gRSPAudioTimeTotal;
+extern volatile OSTime gRSPGfxTimeTotal;
+extern volatile OSTime gRDPTimeTotal;
+extern volatile OSTime gGraphUpdatePeriod;
+extern volatile OSTime gRSPAudioTimeAcc;
+extern volatile OSTime gRSPGfxTimeAcc;
+extern volatile OSTime gRSPOtherTimeAcc;
+extern volatile OSTime gUnkTimeAcc;
+extern volatile OSTime gRDPTimeAcc;
#endif
diff --git a/include/z64subs.h b/include/z64subs.h
index 4d365dd14..2e751dfc4 100644
--- a/include/z64subs.h
+++ b/include/z64subs.h
@@ -147,8 +147,8 @@ s16 SubS_GetDistSqAndOrientPoints(Vec3f* vecA, Vec3f* vecB, f32* distSq);
s32 SubS_MoveActorToPoint(Actor* actor, Vec3f* point, s16 rotStep);
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);
+s8 SubS_IsObjectLoaded(s8 objectSlot, struct PlayState* play);
+s8 SubS_GetObjectSlot(s16 objectId, struct PlayState* play);
Actor* SubS_FindActor(struct PlayState* play, Actor* actorListStart, u8 actorCategory, s16 actorId);
diff --git a/include/z64view.h b/include/z64view.h
index f0661d947..19bb4492c 100644
--- a/include/z64view.h
+++ b/include/z64view.h
@@ -65,6 +65,17 @@ typedef struct View {
} \
(void)0
+#define SET_FULLSCREEN_VIEWPORT_DYNAMIC(view) \
+{ \
+ Viewport viewport; \
+ viewport.bottomY = gScreenHeight; \
+ viewport.rightX = gScreenWidth; \
+ viewport.topY = 0; \
+ viewport.leftX = 0; \
+ View_SetViewport(view, &viewport); \
+} \
+(void)0
+
void View_Init(View* view, struct GraphicsContext* gfxCtx);
void View_LookAt(View* view, Vec3f* eye, Vec3f* at, Vec3f* up);
void View_SetScale(View* view, f32 scale);
diff --git a/include/z_en_hy_code.h b/include/z_en_hy_code.h
index 2b5d46d57..7bc41c7c8 100644
--- a/include/z_en_hy_code.h
+++ b/include/z_en_hy_code.h
@@ -81,10 +81,10 @@ typedef struct EnHy {
/* 0x144 */ EnHyActionFunc actionFunc;
/* 0x148 */ EnHyActionFunc prevActionFunc;
/* 0x14C */ SkelAnime skelAnime;
- /* 0x190 */ s8 headObjIndex; // Limb 15
- /* 0x191 */ s8 skelUpperObjIndex; // Limbs 8-14
- /* 0x192 */ s8 skelLowerObjIndex; // Limbs 1-7
- /* 0x193 */ s8 animObjIndex;
+ /* 0x190 */ s8 headObjectSlot; // Limb 15
+ /* 0x191 */ s8 skelUpperObjectSlot; // Limbs 8-14
+ /* 0x192 */ s8 skelLowerObjectSlot; // Limbs 1-7
+ /* 0x193 */ s8 animObjectSlot;
/* 0x194 */ ColliderCylinder collider;
/* 0x1E0 */ u16 textId;
/* 0x1E2 */ u8 waitingOnInit;
diff --git a/spec b/spec
index cb6eca1e1..62cc64d0e 100644
--- a/spec
+++ b/spec
@@ -476,8 +476,6 @@ beginseg
include "build/src/code/z_kaleido_setup.o"
include "build/src/code/z_kanfont.o"
include "build/src/code/z_kankyo.o"
- include "build/data/code/z_kankyo.data.o"
- include "build/data/code/z_kankyo.bss.o"
include "build/src/code/z_lib.o"
include "build/src/code/z_lifemeter.o"
include "build/src/code/z_lights.o"
@@ -528,10 +526,7 @@ beginseg
include "build/src/code/z_vr_box_draw.o"
include "build/src/code/z_sram_NES.o"
include "build/src/code/z_message.o"
- include "build/data/code/z_message.data.o"
- include "build/data/code/z_message.bss.o"
include "build/src/code/z_message_nes.o"
- include "build/data/code/z_message_nes.data.o"
include "build/src/code/z_message_staff.o"
include "build/src/code/z_player_call.o"
include "build/src/code/z_shrink_window.o"
@@ -561,8 +556,6 @@ beginseg
include "build/src/code/padmgr.o"
include "build/src/code/sched.o"
include "build/src/code/speed_meter.o"
- include "build/data/code/speed_meter.data.o"
- include "build/data/code/speed_meter.bss.o"
include "build/src/code/su_mtx.o"
include "build/src/code/sys_cfb.o"
include "build/src/code/sys_cmpdma.o"
@@ -2057,8 +2050,7 @@ beginseg
name "ovl_En_Ge3"
compress
include "build/src/overlays/actors/ovl_En_Ge3/z_en_ge3.o"
- include "build/data/ovl_En_Ge3/ovl_En_Ge3.data.o"
- include "build/data/ovl_En_Ge3/ovl_En_Ge3.reloc.o"
+ include "build/src/overlays/actors/ovl_En_Ge3/ovl_En_Ge3_reloc.o"
endseg
beginseg
@@ -2167,8 +2159,7 @@ beginseg
name "ovl_En_Encount3"
compress
include "build/src/overlays/actors/ovl_En_Encount3/z_en_encount3.o"
- include "build/data/ovl_En_Encount3/ovl_En_Encount3.data.o"
- include "build/data/ovl_En_Encount3/ovl_En_Encount3.reloc.o"
+ include "build/src/overlays/actors/ovl_En_Encount3/ovl_En_Encount3_reloc.o"
endseg
beginseg
@@ -2370,8 +2361,7 @@ beginseg
name "ovl_Bg_Dy_Yoseizo"
compress
include "build/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.o"
- include "build/data/ovl_Bg_Dy_Yoseizo/ovl_Bg_Dy_Yoseizo.data.o"
- include "build/data/ovl_Bg_Dy_Yoseizo/ovl_Bg_Dy_Yoseizo.reloc.o"
+ include "build/src/overlays/actors/ovl_Bg_Dy_Yoseizo/ovl_Bg_Dy_Yoseizo_reloc.o"
endseg
beginseg
@@ -2441,8 +2431,7 @@ beginseg
name "ovl_Dm_Hina"
compress
include "build/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.o"
- include "build/data/ovl_Dm_Hina/ovl_Dm_Hina.data.o"
- include "build/data/ovl_Dm_Hina/ovl_Dm_Hina.reloc.o"
+ include "build/src/overlays/actors/ovl_Dm_Hina/ovl_Dm_Hina_reloc.o"
endseg
beginseg
@@ -3345,8 +3334,7 @@ beginseg
name "ovl_En_Takaraya"
compress
include "build/src/overlays/actors/ovl_En_Takaraya/z_en_takaraya.o"
- include "build/data/ovl_En_Takaraya/ovl_En_Takaraya.data.o"
- include "build/data/ovl_En_Takaraya/ovl_En_Takaraya.reloc.o"
+ include "build/src/overlays/actors/ovl_En_Takaraya/ovl_En_Takaraya_reloc.o"
endseg
beginseg
diff --git a/src/boot/CIC6105.c b/src/boot/CIC6105.c
index e18223b03..f42edf656 100644
--- a/src/boot/CIC6105.c
+++ b/src/boot/CIC6105.c
@@ -1,32 +1,33 @@
#include "prevent_bss_reordering.h"
-#include "global.h"
+#include "CIC6105.h"
+#include "build.h"
#include "fault.h"
-UNK_TYPE4 D_8009BE30;
-UNK_TYPE4 D_8009BE34;
-FaultClient romInfoFaultClient;
+s32 gCICAddr1Val;
+s32 gCICAddr2Val;
+FaultClient sRomInfoFaultClient;
-void CIC6105_Nop80081820(void) {
+void CIC6105_Noop1(void) {
}
-void CIC6105_Nop80081828(void) {
+void CIC6105_Noop2(void) {
}
void CIC6105_PrintRomInfo(void) {
- FaultDrawer_DrawText(80, 200, "SP_STATUS %08x", HW_REG(SP_STATUS_REG, u32));
+ FaultDrawer_DrawText(80, 200, "SP_STATUS %08x", IO_READ(SP_STATUS_REG));
FaultDrawer_DrawText(40, 184, "ROM_F [Creator:%s]", gBuildTeam);
FaultDrawer_DrawText(56, 192, "[Date:%s]", gBuildDate);
}
void CIC6105_AddRomInfoFaultPage(void) {
- Fault_AddClient(&romInfoFaultClient, (void*)CIC6105_PrintRomInfo, NULL, NULL);
+ Fault_AddClient(&sRomInfoFaultClient, (void*)CIC6105_PrintRomInfo, NULL, NULL);
}
-void CIC6105_RemoveRomInfoFaultPage(void) {
- Fault_RemoveClient(&romInfoFaultClient);
+void CIC6105_Destroy(void) {
+ Fault_RemoveClient(&sRomInfoFaultClient);
}
-void func_800818F4(void) {
- D_8009BE30 = *(u32*)0xA02FB1F4;
- D_8009BE34 = *(u32*)0xA02FE1C0;
+void CIC6105_Init(void) {
+ gCICAddr1Val = IO_READ(CIC_ADDRESS_1);
+ gCICAddr2Val = IO_READ(CIC_ADDRESS_2);
}
diff --git a/src/boot/boot_main.c b/src/boot/boot_main.c
index dcb66fefd..cc2097f0f 100644
--- a/src/boot/boot_main.c
+++ b/src/boot/boot_main.c
@@ -3,6 +3,7 @@
#include "idle.h"
#include "stack.h"
#include "stackcheck.h"
+#include "CIC6105.h"
#include "z64thread.h"
StackEntry sBootStackInfo;
@@ -14,7 +15,7 @@ STACK(sBootStack, 0x400);
void bootproc(void) {
StackCheck_Init(&sBootStackInfo, sBootStack, STACK_TOP(sBootStack), 0, -1, "boot");
osMemSize = osGetMemSize();
- func_800818F4();
+ CIC6105_Init();
osInitialize();
osUnmapTLBAll();
gCartHandle = osCartRomInit();
diff --git a/src/boot/irqmgr.c b/src/boot/irqmgr.c
index 9a773f279..172eabec8 100644
--- a/src/boot/irqmgr.c
+++ b/src/boot/irqmgr.c
@@ -4,7 +4,7 @@
vs32 gIrqMgrResetStatus = 0;
volatile OSTime sIrqMgrResetTime = 0;
-volatile OSTime sIrqMgrRetraceTime = 0;
+volatile OSTime gIrqMgrRetraceTime = 0;
s32 sIrqMgrRetraceCount = 0;
void IrqMgr_AddClient(IrqMgr* irqmgr, IrqMgrClient* client, OSMesgQueue* msgQueue) {
@@ -109,11 +109,11 @@ void IrqMgr_HandlePRENMI500(IrqMgr* irqmgr) {
IrqMgr_CheckStack();
}
void IrqMgr_HandleRetrace(IrqMgr* irqmgr) {
- if (sIrqMgrRetraceTime == 0) {
+ if (gIrqMgrRetraceTime == 0) {
if (irqmgr->lastFrameTime == 0) {
irqmgr->lastFrameTime = osGetTime();
} else {
- sIrqMgrRetraceTime = osGetTime() - irqmgr->lastFrameTime;
+ gIrqMgrRetraceTime = osGetTime() - irqmgr->lastFrameTime;
}
}
diff --git a/src/code/code_8012EC80.c b/src/code/code_8012EC80.c
index 9a2100d01..768c0b8dc 100644
--- a/src/code/code_8012EC80.c
+++ b/src/code/code_8012EC80.c
@@ -723,6 +723,5 @@ void Inventory_SaveLotteryCodeGuess(PlayState* play) {
lotteryCodeGuess = ((play->msgCtx.unk12054[0] & 0xF) << 8); // First Digit
lotteryCodeGuess |= ((play->msgCtx.unk12054[1] & 0xF) << 4); // Second Digit
lotteryCodeGuess |= (play->msgCtx.unk12054[2] & 0xF); // Third Digit
- gSaveContext.save.saveInfo.lotteryCodeGuess =
- (gSaveContext.save.saveInfo.lotteryCodeGuess & 0xFFFF0000) | (lotteryCodeGuess & 0xFFFF);
+ HS_SET_LOTTERY_CODE_GUESS(lotteryCodeGuess);
}
diff --git a/src/code/game.c b/src/code/game.c
index 4f2df63cd..237783319 100644
--- a/src/code/game.c
+++ b/src/code/game.c
@@ -164,11 +164,11 @@ void GameState_InitArena(GameState* gameState, size_t size) {
void* buf = GameAlloc_Malloc(alloc, size);
if (buf) {
- THA_Init(&gameState->heap, buf, size);
+ THA_Init(&gameState->tha, buf, size);
return;
}
- THA_Init(&gameState->heap, NULL, 0);
+ THA_Init(&gameState->tha, NULL, 0);
_dbg_hungup("../game.c", 1035);
}
@@ -178,9 +178,9 @@ void GameState_Realloc(GameState* gameState, size_t size) {
size_t systemMaxFree;
size_t bytesFree;
size_t bytesAllocated;
- void* heapStart = gameState->heap.start;
+ void* heapStart = gameState->tha.start;
- THA_Destroy(&gameState->heap);
+ THA_Destroy(&gameState->tha);
GameAlloc_Free(alloc, heapStart);
SystemArena_GetSizes(&systemMaxFree, &bytesFree, &bytesAllocated);
size = ((systemMaxFree - sizeof(ArenaNode)) < size) ? 0 : size;
@@ -190,9 +190,9 @@ void GameState_Realloc(GameState* gameState, size_t size) {
gameArena = GameAlloc_Malloc(alloc, size);
if (gameArena != NULL) {
- THA_Init(&gameState->heap, gameArena, size);
+ THA_Init(&gameState->tha, gameArena, size);
} else {
- THA_Init(&gameState->heap, NULL, 0);
+ THA_Init(&gameState->tha, NULL, 0);
_dbg_hungup("../game.c", 1074);
}
}
@@ -246,7 +246,7 @@ void GameState_Destroy(GameState* gameState) {
VisZbuf_Destroy(&sGameVisZbuf);
VisMono_Destroy(&sGameVisMono);
ViMode_Destroy(&sGameViMode);
- THA_Destroy(&gameState->heap);
+ THA_Destroy(&gameState->tha);
GameAlloc_Cleanup(&gameState->alloc);
}
@@ -263,11 +263,11 @@ u32 GameState_IsRunning(GameState* gameState) {
}
s32 GameState_GetArenaSize(GameState* gameState) {
- return THA_GetRemaining(&gameState->heap);
+ return THA_GetRemaining(&gameState->tha);
}
s32 func_80173B48(GameState* gameState) {
- s32 result = OS_CYCLES_TO_NSEC(gameState->framerateDivisor * sIrqMgrRetraceTime) - OS_CYCLES_TO_NSEC(gRDPTimeTotal);
+ s32 result = OS_CYCLES_TO_NSEC(gameState->framerateDivisor * gIrqMgrRetraceTime) - OS_CYCLES_TO_NSEC(gRDPTimeTotal);
return result;
}
diff --git a/src/code/graph.c b/src/code/graph.c
index bce162406..3a178d2b8 100644
--- a/src/code/graph.c
+++ b/src/code/graph.c
@@ -1,3 +1,4 @@
+#include "prevent_bss_reordering.h"
#include "z64.h"
#include "regs.h"
#include "functions.h"
@@ -8,7 +9,7 @@ FaultAddrConvClient sGraphFaultAddrConvClient;
FaultClient sGraphFaultClient;
GfxMasterList* gGfxMasterDL;
CfbInfo sGraphCfbInfos[3];
-OSTime sGraphTaskStartTime;
+OSTime sGraphPrevUpdateEndTime;
#include "variables.h"
#include "macros.h"
@@ -16,6 +17,7 @@ OSTime sGraphTaskStartTime;
#include "idle.h"
#include "sys_cfb.h"
#include "system_malloc.h"
+#include "z64speed_meter.h"
#include "overlays/gamestates/ovl_daytelop/z_daytelop.h"
#include "overlays/gamestates/ovl_file_choose/z_file_select.h"
#include "overlays/gamestates/ovl_opening/z_opening.h"
@@ -310,17 +312,17 @@ void Graph_ExecuteAndDraw(GraphicsContext* gfxCtx, GameState* gameState) {
{
OSTime time = osGetTime();
- D_801FBAE8 = sRSPGFXTotalTime;
- D_801FBAE0 = gRSPAudioTotalTime;
+ gRSPGfxTimeTotal = gRSPGfxTimeAcc;
+ gRSPAudioTimeTotal = gRSPAudioTimeAcc;
gRDPTimeTotal = gRDPTimeAcc;
- sRSPGFXTotalTime = 0;
- gRSPAudioTotalTime = 0;
+ gRSPGfxTimeAcc = 0;
+ gRSPAudioTimeAcc = 0;
gRDPTimeAcc = 0;
- if (sGraphTaskStartTime != 0) {
- lastRenderFrameDuration = time - sGraphTaskStartTime;
+ if (sGraphPrevUpdateEndTime != 0) {
+ gGraphUpdatePeriod = time - sGraphPrevUpdateEndTime;
}
- sGraphTaskStartTime = time;
+ sGraphPrevUpdateEndTime = time;
}
}
diff --git a/src/code/main.c b/src/code/main.c
index 7fbb7ccb8..d3840eca5 100644
--- a/src/code/main.c
+++ b/src/code/main.c
@@ -4,6 +4,7 @@
#include "irqmgr.h"
#include "padmgr.h"
#include "scheduler.h"
+#include "CIC6105.h"
#include "stack.h"
#include "stackcheck.h"
diff --git a/src/code/object_table.c b/src/code/object_table.c
index aa73199b8..87c4069fe 100644
--- a/src/code/object_table.c
+++ b/src/code/object_table.c
@@ -1,6 +1,6 @@
#include "global.h"
-s16 gPlayerFormObjectIndices[PLAYER_FORM_MAX] = {
+s16 gPlayerFormObjectIds[PLAYER_FORM_MAX] = {
OBJECT_LINK_BOY, // PLAYER_FORM_FIERCE_DEITY
OBJECT_LINK_GORON, // PLAYER_FORM_GORON
OBJECT_LINK_ZORA, // PLAYER_FORM_ZORA
diff --git a/src/code/sched.c b/src/code/sched.c
index f8dc2a35d..289b4a696 100644
--- a/src/code/sched.c
+++ b/src/code/sched.c
@@ -16,6 +16,7 @@ u32 gAudioSPDataSize;
#include "functions.h"
#include "variables.h"
#include "stackcheck.h"
+#include "z64speed_meter.h"
#include "z64thread.h"
#define RSP_DONE_MSG 667
@@ -426,16 +427,16 @@ void Sched_HandleRSPDone(SchedContext* sched) {
time = osGetTime();
switch (sched->curRSPTask->list.t.type) {
case M_AUDTASK:
- gRSPAudioTotalTime += time - sRSPAudioStartTime;
+ gRSPAudioTimeAcc += time - sRSPAudioStartTime;
break;
case M_GFXTASK:
- sRSPGFXTotalTime += time - sRSPGFXStartTime;
+ gRSPGfxTimeAcc += time - sRSPGFXStartTime;
break;
default:
if (1) {}
- sRSPOtherTotalTime += time - sRSPOtherStartTime;
+ gRSPOtherTimeAcc += time - sRSPOtherStartTime;
break;
}
diff --git a/src/code/speed_meter.c b/src/code/speed_meter.c
index 1e6f1f886..3550d62ce 100644
--- a/src/code/speed_meter.c
+++ b/src/code/speed_meter.c
@@ -1,18 +1,266 @@
#include "global.h"
+#include "sys_cfb.h"
#include "z64speed_meter.h"
#include "z64view.h"
#include "system_malloc.h"
-#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/func_80177390.s")
+/**
+ * How much time the RSP ran audio tasks for over the course of `gGraphUpdatePeriod`.
+ */
+volatile OSTime gRSPAudioTimeTotal;
-#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/SpeedMeter_Init.s")
+/**
+ * How much time the RSP ran graphics tasks for over the course of `gGraphUpdatePeriod`.
+ * Typically the RSP runs 1 graphics task per `Graph_Update` cycle, but may run 0 (see `Graph_Update`).
+ */
+volatile OSTime gRSPGfxTimeTotal;
-#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/SpeedMeter_Destroy.s")
+/**
+ * How much time the RDP ran for over the course of `gGraphUpdatePeriod`.
+ */
+volatile OSTime gRDPTimeTotal;
-#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/SpeedMeter_DrawTimeEntries.s")
+/**
+ * How much time elapsed between the last two `Graph_Update` ending.
+ * This is expected to be at least the duration of a single frame, since it includes the time spent waiting on the
+ * graphics task to be done.
+ */
+volatile OSTime gGraphUpdatePeriod;
-#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/func_80177A84.s")
+// Accumulator for `gRSPAudioTimeTotal`
+volatile OSTime gRSPAudioTimeAcc;
-#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/func_80177AC8.s")
+// Accumulator for `gRSPGfxTimeTotal`.
+volatile OSTime gRSPGfxTimeAcc;
-#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/SpeedMeter_DrawAllocEntries.s")
+volatile OSTime gRSPOtherTimeAcc;
+volatile OSTime gUnkTimeAcc;
+
+// Accumulator for `gRDPTimeTotal`
+volatile OSTime gRDPTimeAcc;
+
+typedef struct {
+ /* 0x0 */ volatile OSTime* time;
+ /* 0x4 */ u16 x;
+ /* 0x5 */ u16 y;
+ /* 0x6 */ u16 color;
+} SpeedMeterTimeEntry; // size = 0x8
+
+SpeedMeterTimeEntry* sSpeedMeterTimeEntryPtr;
+
+SpeedMeterTimeEntry sSpeedMeterTimeEntryArray[] = {
+ { &gRSPAudioTimeTotal, 0, 6, GPACK_RGBA5551(0, 0, 255, 1) },
+ { &gRSPGfxTimeTotal, 0, 8, GPACK_RGBA5551(255, 128, 128, 1) },
+ { &gRDPTimeTotal, 0, 10, GPACK_RGBA5551(0, 255, 0, 1) },
+ { &gGraphUpdatePeriod, 0, 12, GPACK_RGBA5551(255, 0, 255, 1) },
+};
+
+typedef struct {
+ /* 0x00 */ s32 maxVal;
+ /* 0x04 */ s32 val;
+ /* 0x08 */ u16 backColor;
+ /* 0x0A */ u16 foreColor;
+ /* 0x0C */ s32 ulx;
+ /* 0x10 */ s32 lrx;
+ /* 0x14 */ s32 uly;
+ /* 0x18 */ s32 lry;
+} SpeedMeterAllocEntry; // size = 0x1C
+
+//! FAKE: if(1) in macro
+
+#define gDrawRect(gfx, color, ulx, uly, lrx, lry) \
+ do { \
+ if (gSysCfbHiResEnabled == true) { \
+ u32 tmp = color; \
+ gDPPipeSync(gfx); \
+ gDPSetFillColor(gfx, ((tmp) << 16) | (tmp)); \
+ gDPFillRectangle(gfx, (ulx)*2, (uly)*2, (lrx)*2, (lry)*2); \
+ if (1) {} \
+ } else { \
+ u32 tmp = color; \
+ gDPPipeSync(gfx); \
+ gDPSetFillColor(gfx, ((tmp) << 16) | (tmp)); \
+ gDPFillRectangle(gfx, (ulx), (uly), (lrx), (lry)); \
+ } \
+ } while (0)
+
+void SpeedMeter_InitImpl(SpeedMeter* this, s32 x, s32 y) {
+ this->x = x;
+ this->y = y;
+}
+
+void SpeedMeter_Init(SpeedMeter* this) {
+ SpeedMeter_InitImpl(this, 32, 22);
+}
+
+void SpeedMeter_Destroy(SpeedMeter* this) {
+}
+
+void SpeedMeter_DrawTimeEntries(SpeedMeter* this, GraphicsContext* gfxCtx) {
+ s32 pad[3];
+ u32 baseX = 32;
+ s32 width;
+ s32 uly;
+ s32 lry;
+ s32 pad3;
+ View view;
+ s32 pad2[2];
+ s32 i;
+ Gfx* gfx;
+
+ uly = this->y;
+ lry = this->y + 2;
+
+ OPEN_DISPS(gfxCtx);
+
+ /*! @bug if gIrqMgrRetraceTime is 0, CLOSE_DISPS will never be reached */
+ if (gIrqMgrRetraceTime == 0) {
+ return;
+ }
+
+ sSpeedMeterTimeEntryPtr = &sSpeedMeterTimeEntryArray[0];
+ for (i = 0; i < ARRAY_COUNT(sSpeedMeterTimeEntryArray); i++) {
+ width = ((f64)*sSpeedMeterTimeEntryPtr->time / gIrqMgrRetraceTime) * 64.0;
+ sSpeedMeterTimeEntryPtr->x = baseX + width;
+ sSpeedMeterTimeEntryPtr++;
+ }
+
+ View_Init(&view, gfxCtx);
+ view.flags = VIEW_VIEWPORT | VIEW_PROJECTION_ORTHO;
+
+ SET_FULLSCREEN_VIEWPORT_DYNAMIC(&view);
+
+ gfx = OVERLAY_DISP;
+ View_ApplyTo(&view, &gfx);
+
+ gDPPipeSync(gfx++);
+ 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_FILL | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_NOOP | G_RM_NOOP2);
+
+ gDrawRect(gfx++, GPACK_RGBA5551(0, 0, 255, 1), baseX + 64 * 0, uly, baseX + 64 * 1, lry);
+ gDrawRect(gfx++, GPACK_RGBA5551(0, 255, 0, 1), baseX + 64 * 1, uly, baseX + 64 * 2, lry);
+ gDrawRect(gfx++, GPACK_RGBA5551(255, 0, 0, 1), baseX + 64 * 2, uly, baseX + 64 * 3, lry);
+ gDrawRect(gfx++, GPACK_RGBA5551(255, 0, 255, 1), baseX + 64 * 3, uly, baseX + 64 * 4, lry);
+
+ sSpeedMeterTimeEntryPtr = &sSpeedMeterTimeEntryArray[0];
+ for (i = 0; i < ARRAY_COUNT(sSpeedMeterTimeEntryArray); i++) {
+ gDrawRect(gfx++, sSpeedMeterTimeEntryPtr->color, baseX, lry + sSpeedMeterTimeEntryPtr->y,
+ sSpeedMeterTimeEntryPtr->x, lry + sSpeedMeterTimeEntryPtr->y + 1);
+ sSpeedMeterTimeEntryPtr++;
+ }
+ gDPPipeSync(gfx++);
+
+ OVERLAY_DISP = gfx;
+
+ CLOSE_DISPS(gfxCtx);
+}
+
+void SpeedMeter_InitAllocEntry(SpeedMeterAllocEntry* this, u32 maxVal, u32 val, u16 backColor, u16 foreColor, u32 ulx,
+ u32 lrx, u32 uly, u32 lry) {
+ this->maxVal = maxVal;
+ this->val = val;
+ this->backColor = backColor;
+ this->foreColor = foreColor;
+ this->ulx = ulx;
+ this->lrx = lrx;
+ this->uly = uly;
+ this->lry = lry;
+}
+
+void SpeedMeter_DrawAllocEntry(SpeedMeterAllocEntry* this, GraphicsContext* gfxCtx) {
+ s32 usedOff;
+ View view;
+ Gfx* gfx;
+
+ if (this->maxVal != 0) {
+ OPEN_DISPS(gfxCtx);
+
+ View_Init(&view, gfxCtx);
+ view.flags = VIEW_VIEWPORT | VIEW_PROJECTION_ORTHO;
+
+ SET_FULLSCREEN_VIEWPORT_DYNAMIC(&view);
+
+ gfx = OVERLAY_DISP;
+ View_ApplyTo(&view, &gfx);
+
+ gDPPipeSync(gfx++);
+ 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_FILL | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_NOOP | G_RM_NOOP2);
+
+ usedOff = ((this->lrx - this->ulx) * this->val) / this->maxVal + this->ulx;
+ gDrawRect(gfx++, this->backColor, usedOff, this->uly, this->lrx, this->lry);
+ gDrawRect(gfx++, this->foreColor, this->ulx, this->uly, usedOff, this->lry);
+
+ gDPPipeSync(gfx++);
+
+ //! FAKE:
+ if (this && this && this) {}
+
+ OVERLAY_DISP = gfx;
+ CLOSE_DISPS(gfxCtx);
+ }
+}
+
+void SpeedMeter_DrawAllocEntries(SpeedMeter* meter, GraphicsContext* gfxCtx, GameState* state) {
+ s32 pad[2];
+ u32 ulx = 30;
+ u32 lrx = 290;
+ SpeedMeterAllocEntry entry;
+ TwoHeadArena* tha;
+ s32 y;
+ TwoHeadGfxArena* thga;
+ u32 zeldaFreeMax;
+ u32 zeldaFree;
+ u32 zeldaAlloc;
+ s32 sysFreeMax;
+ s32 sysFree;
+ s32 sysAlloc;
+
+ y = 212;
+ if (R_ENABLE_ARENA_DBG > 2) {
+ if (ZeldaArena_IsInitialized()) {
+ ZeldaArena_GetSizes(&zeldaFreeMax, &zeldaFree, &zeldaAlloc);
+ SpeedMeter_InitAllocEntry(&entry, zeldaFree + zeldaAlloc, zeldaAlloc, GPACK_RGBA5551(0, 0, 255, 1),
+ GPACK_RGBA5551(255, 255, 255, 1), ulx, lrx, y, y + 1);
+ SpeedMeter_DrawAllocEntry(&entry, gfxCtx);
+ y++;
+ y++;
+ }
+ }
+
+ if (R_ENABLE_ARENA_DBG > 1) {
+ SystemArena_GetSizes((u32*)&sysFreeMax, (u32*)&sysFree, (u32*)&sysAlloc);
+ SpeedMeter_InitAllocEntry(&entry, sysFree + sysAlloc - state->tha.size, sysAlloc - state->tha.size,
+ GPACK_RGBA5551(0, 0, 255, 1), GPACK_RGBA5551(255, 128, 128, 1), ulx, lrx, y, y);
+ SpeedMeter_DrawAllocEntry(&entry, gfxCtx);
+ y++;
+ }
+
+ tha = &state->tha;
+ SpeedMeter_InitAllocEntry(&entry, tha->size, tha->size - THA_GetRemaining(tha), GPACK_RGBA5551(0, 0, 255, 1),
+ GPACK_RGBA5551(0, 255, 0, 1), ulx, lrx, y, y);
+ SpeedMeter_DrawAllocEntry(&entry, gfxCtx);
+ y++;
+
+ thga = &gfxCtx->polyOpa;
+ SpeedMeter_InitAllocEntry(&entry, thga->size, thga->size - THGA_GetRemaining(thga), GPACK_RGBA5551(0, 0, 255, 1),
+ GPACK_RGBA5551(255, 0, 255, 1), ulx, lrx, y, y);
+ SpeedMeter_DrawAllocEntry(&entry, gfxCtx);
+ y++;
+
+ thga = &gfxCtx->polyXlu;
+ SpeedMeter_InitAllocEntry(&entry, thga->size, thga->size - THGA_GetRemaining(thga), GPACK_RGBA5551(0, 0, 255, 1),
+ GPACK_RGBA5551(255, 255, 0, 1), ulx, lrx, y, y);
+ SpeedMeter_DrawAllocEntry(&entry, gfxCtx);
+ y++;
+
+ thga = &gfxCtx->overlay;
+ SpeedMeter_InitAllocEntry(&entry, thga->size, thga->size - THGA_GetRemaining(thga), GPACK_RGBA5551(0, 0, 255, 1),
+ GPACK_RGBA5551(255, 0, 0, 1), ulx, lrx, y, y);
+ SpeedMeter_DrawAllocEntry(&entry, gfxCtx);
+ y++;
+}
diff --git a/src/code/sys_cfb.c b/src/code/sys_cfb.c
index 383a35cc9..32600643a 100644
--- a/src/code/sys_cfb.c
+++ b/src/code/sys_cfb.c
@@ -1,3 +1,4 @@
+#include "prevent_bss_reordering.h"
#include "z64.h"
#include "regs.h"
#include "functions.h"
diff --git a/src/code/sys_matrix.c b/src/code/sys_matrix.c
index 6269add5f..f84dae383 100644
--- a/src/code/sys_matrix.c
+++ b/src/code/sys_matrix.c
@@ -75,7 +75,7 @@ MtxF* sCurrentMatrix; //!< original name: "Matrix_now"
* @remark original name: "new_Matrix"
*/
void Matrix_Init(GameState* gameState) {
- sMatrixStack = THA_AllocTailAlign16(&gameState->heap, MATRIX_STACK_SIZE * sizeof(MtxF));
+ sMatrixStack = THA_AllocTailAlign16(&gameState->tha, MATRIX_STACK_SIZE * sizeof(MtxF));
sCurrentMatrix = sMatrixStack;
}
diff --git a/src/code/z_actor.c b/src/code/z_actor.c
index a69dada41..eb5ba018d 100644
--- a/src/code/z_actor.c
+++ b/src/code/z_actor.c
@@ -725,7 +725,7 @@ void Target_Update(TargetContext* targetCtx, Player* player, Actor* lockOnActor,
/* Start of Flags section */
/**
- * Tests if current scene switch flag is set.
+ * Tests if a current scene switch flag is set.
*/
s32 Flags_GetSwitch(PlayState* play, s32 flag) {
if ((flag >= 0) && (flag < 0x80)) {
@@ -735,7 +735,7 @@ s32 Flags_GetSwitch(PlayState* play, s32 flag) {
}
/**
- * Sets current scene switch flag.
+ * Sets a current scene switch flag.
*/
void Flags_SetSwitch(PlayState* play, s32 flag) {
if ((flag >= 0) && (flag < 0x80)) {
@@ -744,7 +744,7 @@ void Flags_SetSwitch(PlayState* play, s32 flag) {
}
/**
- * Unsets current scene switch flag.
+ * Unsets a current scene switch flag.
*/
void Flags_UnsetSwitch(PlayState* play, s32 flag) {
if ((flag >= 0) && (flag < 0x80)) {
@@ -753,77 +753,77 @@ void Flags_UnsetSwitch(PlayState* play, s32 flag) {
}
/**
- * Tests if current scene chest flag is set.
+ * Tests if a current scene chest flag is set.
*/
s32 Flags_GetTreasure(PlayState* play, s32 flag) {
return play->actorCtx.sceneFlags.chest & (1 << flag);
}
/**
- * Sets current scene chest flag.
+ * Sets a current scene chest flag.
*/
void Flags_SetTreasure(PlayState* play, s32 flag) {
play->actorCtx.sceneFlags.chest |= (1 << flag);
}
/**
- * Overrides the all the chest flags.
+ * Overrides all the current scene chest flags.
*/
void Flags_SetAllTreasure(PlayState* play, s32 flag) {
play->actorCtx.sceneFlags.chest = flag;
}
/**
- * Returns all the chest flags.
+ * Returns all the current scene chest flags.
*/
s32 Flags_GetAllTreasure(PlayState* play) {
return play->actorCtx.sceneFlags.chest;
}
/**
- * Tests if current scene clear flag is set.
+ * Tests if a current scene clear flag is set.
*/
s32 Flags_GetClear(PlayState* play, s32 roomNumber) {
return play->actorCtx.sceneFlags.clearedRoom & (1 << roomNumber);
}
/**
- * Sets current scene clear flag.
+ * Sets a current scene clear flag.
*/
void Flags_SetClear(PlayState* play, s32 roomNumber) {
play->actorCtx.sceneFlags.clearedRoom |= (1 << roomNumber);
}
/**
- * Unsets current scene clear flag.
+ * Unsets a current scene clear flag.
*/
void Flags_UnsetClear(PlayState* play, s32 roomNumber) {
play->actorCtx.sceneFlags.clearedRoom &= ~(1 << roomNumber);
}
/**
- * Tests if current scene temp clear flag is set.
+ * Tests if a current scene temp clear flag is set.
*/
s32 Flags_GetClearTemp(PlayState* play, s32 roomNumber) {
return play->actorCtx.sceneFlags.clearedRoomTemp & (1 << roomNumber);
}
/**
- * Sets current scene temp clear flag.
+ * Sets a current scene temp clear flag.
*/
void Flags_SetClearTemp(PlayState* play, s32 roomNumber) {
play->actorCtx.sceneFlags.clearedRoomTemp |= (1 << roomNumber);
}
/**
- * Unsets current scene temp clear flag.
+ * Unsets a current scene temp clear flag.
*/
void Flags_UnsetClearTemp(PlayState* play, s32 roomNumber) {
play->actorCtx.sceneFlags.clearedRoomTemp &= ~(1 << roomNumber);
}
/**
- * Tests if current scene collectible flag is set.
+ * Tests if a current scene collectible flag is set.
*/
s32 Flags_GetCollectible(PlayState* play, s32 flag) {
if ((flag > 0) && (flag < 0x80)) {
@@ -833,7 +833,7 @@ s32 Flags_GetCollectible(PlayState* play, s32 flag) {
}
/**
- * Sets current scene collectible flag.
+ * Sets a current scene collectible flag.
*/
void Flags_SetCollectible(PlayState* play, s32 flag) {
if ((flag > 0) && (flag < 0x80)) {
@@ -1096,7 +1096,7 @@ void Actor_SetScale(Actor* actor, f32 scale) {
}
void Actor_SetObjectDependency(PlayState* play, Actor* actor) {
- gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[actor->objBankIndex].segment);
+ gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[actor->objectSlot].segment);
}
void Actor_Init(Actor* actor, PlayState* play) {
@@ -1119,7 +1119,7 @@ void Actor_Init(Actor* actor, PlayState* play) {
actor->floorBgId = BGCHECK_SCENE;
ActorShape_Init(&actor->shape, 0.0f, NULL, 0.0f);
- if (Object_IsLoaded(&play->objectCtx, actor->objBankIndex)) {
+ if (Object_IsLoaded(&play->objectCtx, actor->objectSlot)) {
Actor_SetObjectDependency(play, actor);
actor->init(actor, play);
actor->init = NULL;
@@ -2486,7 +2486,7 @@ Actor* Actor_UpdateActor(UpdateActor_Params* params) {
actor->audioFlags &= ~ACTOR_AUDIO_FLAG_ALL;
if (actor->init != NULL) {
- if (Object_IsLoaded(&play->objectCtx, actor->objBankIndex)) {
+ if (Object_IsLoaded(&play->objectCtx, actor->objectSlot)) {
Actor_SetObjectDependency(play, actor);
actor->init(actor, play);
actor->init = NULL;
@@ -2500,7 +2500,7 @@ Actor* Actor_UpdateActor(UpdateActor_Params* params) {
nextActor = actor->next;
}
} else {
- if (!Object_IsLoaded(&play->objectCtx, actor->objBankIndex)) {
+ if (!Object_IsLoaded(&play->objectCtx, actor->objectSlot)) {
Actor_Kill(actor);
} else if ((params->requiredActorFlag && !(actor->flags & params->requiredActorFlag)) ||
(((!params->requiredActorFlag) != 0) &&
@@ -2700,8 +2700,8 @@ void Actor_Draw(PlayState* play, Actor* actor) {
Matrix_Scale(actor->scale.x, actor->scale.y, actor->scale.z, MTXMODE_APPLY);
Actor_SetObjectDependency(play, actor);
- gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[actor->objBankIndex].segment);
- gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.status[actor->objBankIndex].segment);
+ gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[actor->objectSlot].segment);
+ gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.slots[actor->objectSlot].segment);
if (actor->colorFilterTimer != 0) {
s32 colorFlag = COLORFILTER_GET_COLORFLAG(actor->colorFilterParams);
@@ -3055,7 +3055,7 @@ void Actor_KillAllWithMissingObject(PlayState* play, ActorContext* actorCtx) {
actor = actorCtx->actorLists[i].first;
while (actor != NULL) {
- if (!Object_IsLoaded(&play->objectCtx, actor->objBankIndex)) {
+ if (!Object_IsLoaded(&play->objectCtx, actor->objectSlot)) {
Actor_Kill(actor);
}
@@ -3287,7 +3287,7 @@ Actor* Actor_SpawnAsChildAndCutscene(ActorContext* actorCtx, PlayState* play, s1
s32 pad;
Actor* actor;
ActorInit* actorInit;
- s32 objBankIndex;
+ s32 objectSlot;
ActorOverlay* overlayEntry;
if (actorCtx->totalLoadedActors >= 0xFF) {
@@ -3299,9 +3299,10 @@ Actor* Actor_SpawnAsChildAndCutscene(ActorContext* actorCtx, PlayState* play, s1
return NULL;
}
- objBankIndex = Object_GetIndex(&play->objectCtx, actorInit->objectId);
- if ((objBankIndex < 0) || ((actorInit->type == ACTORCAT_ENEMY) && Flags_GetClear(play, play->roomCtx.curRoom.num) &&
- (actorInit->id != ACTOR_BOSS_05))) {
+ objectSlot = Object_GetSlot(&play->objectCtx, actorInit->objectId);
+ if ((objectSlot <= OBJECT_SLOT_NONE) ||
+ ((actorInit->type == ACTORCAT_ENEMY) && Flags_GetClear(play, play->roomCtx.curRoom.num) &&
+ (actorInit->id != ACTOR_BOSS_05))) {
Actor_FreeOverlay(&gActorOverlayTable[index]);
return NULL;
}
@@ -3323,10 +3324,10 @@ Actor* Actor_SpawnAsChildAndCutscene(ActorContext* actorCtx, PlayState* play, s1
actor->flags = actorInit->flags;
if (actorInit->id == ACTOR_EN_PART) {
- actor->objBankIndex = rotZ;
+ actor->objectSlot = rotZ;
rotZ = 0;
} else {
- actor->objBankIndex = objBankIndex;
+ actor->objectSlot = objectSlot;
}
actor->init = actorInit->init;
@@ -3705,7 +3706,7 @@ void Actor_SpawnBodyParts(Actor* actor, PlayState* play, s32 partParams, Gfx** d
spawnedPart =
Actor_SpawnAsChild(&play->actorCtx, actor, play, ACTOR_EN_PART, currentMatrix->mf[3][0],
- currentMatrix->mf[3][1], currentMatrix->mf[3][2], 0, 0, actor->objBankIndex, partParams);
+ currentMatrix->mf[3][1], currentMatrix->mf[3][2], 0, 0, actor->objectSlot, partParams);
if (spawnedPart != NULL) {
part = (EnPart*)spawnedPart;
diff --git a/src/code/z_bgcheck.c b/src/code/z_bgcheck.c
index ae871c8a6..2bef40dce 100644
--- a/src/code/z_bgcheck.c
+++ b/src/code/z_bgcheck.c
@@ -140,7 +140,7 @@ void DynaSSNodeList_Init(PlayState* play, DynaSSNodeList* list) {
}
void DynaSSNodeList_Alloc(PlayState* play, DynaSSNodeList* list, u32 numNodes) {
- list->tbl = (SSNode*)THA_AllocTailAlign(&play->state.heap, numNodes * sizeof(SSNode), -2);
+ list->tbl = (SSNode*)THA_AllocTailAlign(&play->state.tha, numNodes * sizeof(SSNode), -2);
list->maxNodes = numNodes;
list->count = 0;
}
@@ -1580,7 +1580,7 @@ void BgCheck_Allocate(CollisionContext* colCtx, PlayState* play, CollisionHeader
}
}
colCtx->lookupTbl = THA_AllocTailAlign(
- &play->state.heap,
+ &play->state.tha,
colCtx->subdivAmount.x * sizeof(StaticLookup) * colCtx->subdivAmount.y * colCtx->subdivAmount.z, ~1);
if (colCtx->lookupTbl == NULL) {
Fault_AddHungupAndCrash("../z_bgcheck.c", 3955);
@@ -2456,8 +2456,8 @@ void SSNodeList_Init(SSNodeList* this) {
void SSNodeList_Alloc(PlayState* play, SSNodeList* this, s32 tblMax, s32 numPolys) {
this->max = tblMax;
this->count = 0;
- this->tbl = THA_AllocTailAlign(&play->state.heap, tblMax * sizeof(SSNode), -2);
- this->polyCheckTbl = THA_AllocTailAlign16(&play->state.heap, numPolys * sizeof(u8));
+ this->tbl = THA_AllocTailAlign(&play->state.tha, tblMax * sizeof(SSNode), -2);
+ this->polyCheckTbl = THA_AllocTailAlign16(&play->state.tha, numPolys * sizeof(u8));
if (this->polyCheckTbl == NULL) {
sprintf(D_801ED950, "this->polygon_check == NULL(game_alloc() MemoryAllocationError.)\n");
@@ -2599,7 +2599,7 @@ void DynaPoly_NullPolyList(CollisionPoly** polyList) {
* Allocate dyna.polyList
*/
void DynaPoly_AllocPolyList(PlayState* play, CollisionPoly** polyList, s32 numPolys) {
- *polyList = THA_AllocTailAlign(&play->state.heap, numPolys * sizeof(CollisionPoly), -2);
+ *polyList = THA_AllocTailAlign(&play->state.tha, numPolys * sizeof(CollisionPoly), -2);
}
/**
@@ -2613,7 +2613,7 @@ void DynaPoly_NullVtxList(Vec3s** vtxList) {
* Allocate dyna.vtxList
*/
void DynaPoly_AllocVtxList(PlayState* play, Vec3s** vtxList, s32 numVtx) {
- *vtxList = THA_AllocTailAlign(&play->state.heap, numVtx * sizeof(Vec3s), -2);
+ *vtxList = THA_AllocTailAlign(&play->state.tha, numVtx * sizeof(Vec3s), -2);
}
/**
@@ -2628,7 +2628,7 @@ void DynaPoly_InitWaterBoxList(DynaWaterBoxList* waterBoxList) {
* Allocate dyna.waterBoxList
*/
void DynaPoly_AllocWaterBoxList(PlayState* play, DynaWaterBoxList* waterBoxList, s32 numWaterBoxes) {
- waterBoxList->boxes = THA_AllocTailAlign(&play->state.heap, numWaterBoxes * sizeof(WaterBox), -2);
+ waterBoxList->boxes = THA_AllocTailAlign(&play->state.tha, numWaterBoxes * sizeof(WaterBox), -2);
}
/**
diff --git a/src/code/z_common_data.c b/src/code/z_common_data.c
index 46dfe189e..f0805c46b 100644
--- a/src/code/z_common_data.c
+++ b/src/code/z_common_data.c
@@ -12,13 +12,13 @@ void SaveContext_Init(void) {
gSaveContext.nextCutsceneIndex = 0xFFEF;
gSaveContext.cutsceneTrigger = 0;
gSaveContext.chamberCutsceneNum = 0;
- gSaveContext.nextDayTime = 0xFFFF;
+ gSaveContext.nextDayTime = NEXT_TIME_NONE;
gSaveContext.skyboxTime = 0;
gSaveContext.dogIsLost = true;
gSaveContext.nextTransitionType = TRANS_NEXT_TYPE_DEFAULT;
gSaveContext.prevHudVisibility = HUD_VISIBILITY_ALL;
- gSaveContext.options.language = 1;
+ gSaveContext.options.language = LANGUAGE_ENG;
gSaveContext.options.audioSetting = SAVE_AUDIO_STEREO;
gSaveContext.options.zTargetSetting = 0;
}
diff --git a/src/code/z_demo.c b/src/code/z_demo.c
index ba9199dbb..300a3c20f 100644
--- a/src/code/z_demo.c
+++ b/src/code/z_demo.c
@@ -1,6 +1,4 @@
#include "PR/ultratypes.h"
-#include "prevent_bss_reordering.h"
-#include "prevent_bss_reordering2.h"
// Variables are put before most headers as a hacky way to bypass bss reordering
struct CutsceneCamera;
@@ -13,6 +11,15 @@ static s16 sBssPad;
u8 gDisablePlayerCsModeStartPos;
s16 gDungeonBossWarpSceneId;
+#include "prevent_bss_reordering.h"
+#include "prevent_bss_reordering2.h"
+// clang-format off
+// Partial structs taken from "prevent_bss_reordering.h"
+struct Dummy200 { int x; };
+struct Dummy201 { int x; };
+struct Dummy202 { int x; };
+// clang-format on
+
#include "global.h"
#include "z64quake.h"
#include "z64rumble.h"
@@ -154,8 +161,8 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) {
switch (cmd->type) {
case CS_MISC_RAIN:
if (isFirstFrame) {
- func_800FD78C(play);
- play->envCtx.unk_F2[0] = 60;
+ Environment_PlayStormNatureAmbience(play);
+ play->envCtx.precipitation[PRECIP_RAIN_MAX] = 60;
}
break;
@@ -163,19 +170,19 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) {
if (isFirstFrame) {
Audio_SetAmbienceChannelIO(AMBIENCE_CHANNEL_LIGHTNING, CHANNEL_IO_PORT_0, 0);
Environment_AddLightningBolts(play, 3);
- D_801F4E68 = 1;
+ gLightningStrike.state = LIGHTNING_STRIKE_START;
}
break;
case CS_MISC_LIFT_FOG:
- if (play->envCtx.lightSettings.zFar < 12800) {
- play->envCtx.lightSettings.zFar += 35;
+ if (play->envCtx.adjLightSettings.zFar < 12800) {
+ play->envCtx.adjLightSettings.zFar += 35;
}
break;
case CS_MISC_CLOUDY_SKY:
if (isFirstFrame) {
- play->envCtx.changeSkyboxState = 1;
+ play->envCtx.changeSkyboxState = CHANGE_SKYBOX_REQUESTED;
play->envCtx.skyboxConfig = 1;
play->envCtx.changeSkyboxNextConfig = 0;
play->envCtx.changeSkyboxTimer = 60;
@@ -197,7 +204,7 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) {
if (isFirstFrame) {
loadedScene = play->loadedScene;
if (loadedScene->titleTextId != 0) {
- func_80151A68(play, loadedScene->titleTextId);
+ Message_DisplaySceneTitleCard(play, loadedScene->titleTextId);
}
}
break;
@@ -238,16 +245,16 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) {
case CS_MISC_RED_PULSATING_LIGHTS:
if (play->state.frames & 8) {
- if (play->envCtx.lightSettings.ambientColor[0] < 40) {
- play->envCtx.lightSettings.ambientColor[0] += 2;
- play->envCtx.lightSettings.diffuseColor1[1] -= 3;
- play->envCtx.lightSettings.diffuseColor1[2] -= 3;
+ if (play->envCtx.adjLightSettings.ambientColor[0] < 40) {
+ play->envCtx.adjLightSettings.ambientColor[0] += 2;
+ play->envCtx.adjLightSettings.light1Color[1] -= 3;
+ play->envCtx.adjLightSettings.light1Color[2] -= 3;
}
} else {
- if (play->envCtx.lightSettings.ambientColor[0] > 2) {
- play->envCtx.lightSettings.ambientColor[0] -= 2;
- play->envCtx.lightSettings.diffuseColor1[1] += 3;
- play->envCtx.lightSettings.diffuseColor1[2] += 3;
+ if (play->envCtx.adjLightSettings.ambientColor[0] > 2) {
+ play->envCtx.adjLightSettings.ambientColor[0] -= 2;
+ play->envCtx.adjLightSettings.light1Color[1] += 3;
+ play->envCtx.adjLightSettings.light1Color[2] += 3;
}
}
break;
@@ -262,7 +269,7 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) {
case CS_MISC_SANDSTORM_FILL:
if (isFirstFrame) {
- play->envCtx.sandstormState = 1;
+ play->envCtx.sandstormState = SANDSTORM_FILL;
}
Audio_PlaySfx_2(NA_SE_EV_SAND_STORM - SFX_FLAG);
break;
@@ -409,7 +416,7 @@ void CutsceneCmd_SetLightSetting(PlayState* play, CutsceneContext* csCtx, CsCmdL
play->envCtx.lightSettingOverride = cmd->settingPlusOne - 1;
play->envCtx.lightBlend = 1.0f;
} else {
- play->envCtx.lightSettingOverride = 0xFF;
+ play->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE;
}
}
}
@@ -1043,7 +1050,7 @@ void CutsceneCmd_Text(PlayState* play, CutsceneContext* csCtx, CsCmdText* cmd) {
if (sCurOcarinaAction != cmd->textId) {
sCutsceneTextboxType = CS_TEXT_OCARINA_ACTION;
sCurOcarinaAction = cmd->textId;
- func_80152434(play, cmd->textId);
+ Message_DisplayOcarinaStaff(play, cmd->textId);
return;
}
}
@@ -1098,7 +1105,7 @@ void CutsceneCmd_Text(PlayState* play, CutsceneContext* csCtx, CsCmdText* cmd) {
}
if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- func_80152434(play, cmd->textId);
+ Message_DisplayOcarinaStaff(play, cmd->textId);
}
}
@@ -1565,7 +1572,7 @@ void Cutscene_HandleEntranceTriggers(PlayState* play) {
if ((Entrance_GetTransitionFlags(((void)0, gSaveContext.save.entrance) +
((void)0, gSaveContext.sceneLayer)) &
0x4000) != 0) {
- func_80151A68(play, scene->titleTextId);
+ Message_DisplaySceneTitleCard(play, scene->titleTextId);
}
}
diff --git a/src/code/z_draw.c b/src/code/z_draw.c
index 2a56e0ba5..1d5b967d7 100644
--- a/src/code/z_draw.c
+++ b/src/code/z_draw.c
@@ -823,13 +823,13 @@ void GetItem_DrawWallet(PlayState* play, s16 drawId) {
void GetItem_DrawRemains(PlayState* play, s16 drawId) {
s32 pad;
- s8 objectIndex;
+ s8 objectSlot;
OPEN_DISPS(play->state.gfxCtx);
- objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_BSMASK);
+ objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_BSMASK);
- gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[objectIndex].segment);
+ gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[objectSlot].segment);
Gfx_SetupDL25_Opa(play->state.gfxCtx);
Matrix_Scale(0.02f, 0.02f, 0.02f, MTXMODE_APPLY);
diff --git a/src/code/z_effect_soft_sprite.c b/src/code/z_effect_soft_sprite.c
index 870132a07..08aa845ab 100644
--- a/src/code/z_effect_soft_sprite.c
+++ b/src/code/z_effect_soft_sprite.c
@@ -8,7 +8,7 @@ void EffectSS_Init(PlayState* play, s32 numEntries) {
EffectSs* effectsSs;
EffectSsOverlay* overlay;
- sEffectSsInfo.data_table = (EffectSs*)THA_AllocTailAlign16(&play->state.heap, numEntries * sizeof(EffectSs));
+ sEffectSsInfo.data_table = (EffectSs*)THA_AllocTailAlign16(&play->state.tha, numEntries * sizeof(EffectSs));
sEffectSsInfo.searchIndex = 0;
sEffectSsInfo.size = numEntries;
diff --git a/src/code/z_effect_soft_sprite_old_init.c b/src/code/z_effect_soft_sprite_old_init.c
index 63b6861a7..245f90a82 100644
--- a/src/code/z_effect_soft_sprite_old_init.c
+++ b/src/code/z_effect_soft_sprite_old_init.c
@@ -41,7 +41,7 @@ void EffectSs_DrawGEffect(PlayState* play, EffectSs* this, TexturePtr texture) {
MtxF mfTrans11DA0;
s32 pad1;
Mtx* mtx;
- void* object = play->objectCtx.status[this->rgObjBankIndex].segment;
+ void* objectPtr = play->objectCtx.slots[this->rgObjectSlot].segment;
OPEN_DISPS(gfxCtx);
@@ -50,8 +50,8 @@ 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] = VIRTUAL_TO_PHYSICAL(object);
- gSPSegment(POLY_XLU_DISP++, 0x06, object);
+ gSegments[0x06] = VIRTUAL_TO_PHYSICAL(objectPtr);
+ gSPSegment(POLY_XLU_DISP++, 0x06, objectPtr);
mtx = SkinMatrix_MtxFToNewMtx(gfxCtx, &mfResult);
@@ -542,7 +542,7 @@ void EffectSsDtBubble_SpawnCustomColor(PlayState* play, Vec3f* pos, Vec3f* veloc
* - due to how life is implemented it is capped at 200. Any value over 200 is accepted, but the fragment will
* only live for 200 frames
*/
-void EffectSsHahen_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 flags, s16 scale, s16 objId,
+void EffectSsHahen_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 flags, s16 scale, s16 objectId,
s16 life, Gfx* dList) {
EffectSsHahenInitParams initParams;
@@ -552,7 +552,7 @@ void EffectSsHahen_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* ac
initParams.dList = dList;
initParams.flags = flags;
initParams.scale = scale;
- initParams.objId = objId;
+ initParams.objectId = objectId;
initParams.life = life;
EffectSs_Spawn(play, EFFECT_SS_HAHEN, 128, &initParams);
@@ -568,7 +568,7 @@ void EffectSsHahen_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* ac
* only live for 200 frames
*/
void EffectSsHahen_SpawnBurst(PlayState* play, Vec3f* pos, f32 burstScale, s16 flags, s16 scale, s16 randScaleRange,
- s16 count, s16 objId, s16 life, Gfx* dList) {
+ s16 count, s16 objectId, s16 life, Gfx* dList) {
s32 i;
Vec3f velocity;
Vec3f accel;
@@ -581,7 +581,7 @@ void EffectSsHahen_SpawnBurst(PlayState* play, Vec3f* pos, f32 burstScale, s16 f
velocity.z = (Rand_ZeroOne() - 0.5f) * burstScale;
velocity.y = ((Rand_ZeroOne() * 0.5f) + 0.5f) * burstScale;
- EffectSsHahen_Spawn(play, pos, &velocity, &accel, flags, Rand_S16Offset(scale, randScaleRange), objId, life,
+ EffectSsHahen_Spawn(play, pos, &velocity, &accel, flags, Rand_S16Offset(scale, randScaleRange), objectId, life,
dList);
}
}
@@ -719,7 +719,7 @@ void EffectSsSolderSrchBall_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity,
// EffectSsKakera Spawn Functions
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,
+ s16 arg7, s16 arg8, s16 scale, s16 arg10, s16 arg11, s32 life, s16 colorIdx, s16 objectId,
Gfx* dList) {
EffectSsKakeraInitParams initParams;
@@ -736,7 +736,7 @@ void EffectSsKakera_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* a
initParams.unk_32 = arg11;
initParams.life = life;
initParams.colorIdx = colorIdx;
- initParams.objId = objId;
+ initParams.objectId = objectId;
initParams.dList = dList;
EffectSs_Spawn(play, EFFECT_SS_KAKERA, 101, &initParams);
diff --git a/src/code/z_en_hy_code.c b/src/code/z_en_hy_code.c
index e2f31c404..c7d89137b 100644
--- a/src/code/z_en_hy_code.c
+++ b/src/code/z_en_hy_code.c
@@ -133,7 +133,7 @@ EnDoor* EnHy_FindNearestDoor(Actor* actor, PlayState* play) {
}
void EnHy_ChangeObjectAndAnim(EnHy* enHy, PlayState* play, s16 animIndex) {
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[enHy->animObjIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[enHy->animObjectSlot].segment);
EnHy_ChangeAnim(&enHy->skelAnime, animIndex);
}
@@ -141,7 +141,7 @@ s32 EnHy_UpdateSkelAnime(EnHy* enHy, PlayState* play) {
s32 isUpdated = false;
if (enHy->actor.draw != NULL) {
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[enHy->animObjIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[enHy->animObjectSlot].segment);
SkelAnime_Update(&enHy->skelAnime);
isUpdated = true;
}
@@ -161,14 +161,14 @@ void EnHy_Blink(EnHy* enHy, s32 eyeTexMaxIndex) {
s32 EnHy_Init(EnHy* enHy, PlayState* play, FlexSkeletonHeader* skeletonHeaderSeg, s16 animIndex) {
s32 isInitialized = false;
- if ((SubS_IsObjectLoaded(enHy->animObjIndex, play) == true) &&
- (SubS_IsObjectLoaded(enHy->headObjIndex, play) == true) &&
- (SubS_IsObjectLoaded(enHy->skelUpperObjIndex, play) == true) &&
- (SubS_IsObjectLoaded(enHy->skelLowerObjIndex, play) == true)) {
- enHy->actor.objBankIndex = enHy->skelLowerObjIndex;
+ if ((SubS_IsObjectLoaded(enHy->animObjectSlot, play) == true) &&
+ (SubS_IsObjectLoaded(enHy->headObjectSlot, play) == true) &&
+ (SubS_IsObjectLoaded(enHy->skelUpperObjectSlot, play) == true) &&
+ (SubS_IsObjectLoaded(enHy->skelLowerObjectSlot, play) == true)) {
+ enHy->actor.objectSlot = enHy->skelLowerObjectSlot;
isInitialized = true;
ActorShape_Init(&enHy->actor.shape, 0.0f, NULL, 0.0f);
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[enHy->actor.objBankIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[enHy->actor.objectSlot].segment);
SkelAnime_InitFlex(play, &enHy->skelAnime, skeletonHeaderSeg, NULL, enHy->jointTable, enHy->morphTable,
ENHY_LIMB_MAX);
EnHy_ChangeObjectAndAnim(enHy, play, animIndex);
diff --git a/src/code/z_en_item00.c b/src/code/z_en_item00.c
index 55ab1a708..d0dada57d 100644
--- a/src/code/z_en_item00.c
+++ b/src/code/z_en_item00.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "overlays/actors/ovl_En_Elforg/z_en_elforg.h"
#include "objects/gameplay_keep/gameplay_keep.h"
#include "objects/object_gi_hearts/object_gi_hearts.h"
#include "overlays/actors/ovl_En_Elf/z_en_elf.h"
@@ -183,17 +184,17 @@ void EnItem00_Init(Actor* thisx, PlayState* play) {
break;
case ITEM00_SHIELD_HERO:
- thisx->objBankIndex = Object_GetIndex(&play->objectCtx, OBJECT_GI_SHIELD_2);
+ thisx->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_GI_SHIELD_2);
EnItem00_SetObject(this, play, &shadowOffset, &shadowScale);
break;
case ITEM00_MAP:
- thisx->objBankIndex = Object_GetIndex(&play->objectCtx, OBJECT_GI_MAP);
+ thisx->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_GI_MAP);
EnItem00_SetObject(this, play, &shadowOffset, &shadowScale);
break;
case ITEM00_COMPASS:
- thisx->objBankIndex = Object_GetIndex(&play->objectCtx, OBJECT_GI_COMPASS);
+ thisx->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_GI_COMPASS);
EnItem00_SetObject(this, play, &shadowOffset, &shadowScale);
break;
@@ -316,10 +317,10 @@ void EnItem00_Destroy(Actor* thisx, PlayState* play) {
}
void EnItem00_WaitForHeartObject(EnItem00* this, PlayState* play) {
- s32 objBankIndex = Object_GetIndex(&play->objectCtx, OBJECT_GI_HEARTS);
+ s32 objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_GI_HEARTS);
- if (Object_IsLoaded(&play->objectCtx, objBankIndex)) {
- this->actor.objBankIndex = objBankIndex;
+ if (Object_IsLoaded(&play->objectCtx, objectSlot)) {
+ this->actor.objectSlot = objectSlot;
this->actionFunc = func_800A640C;
}
}
@@ -724,10 +725,10 @@ void EnItem00_Draw(Actor* thisx, PlayState* play) {
case ITEM00_RECOVERY_HEART:
if (this->unk152 < 0) {
if (this->unk152 == -1) {
- s8 bankIndex = Object_GetIndex(&play->objectCtx, OBJECT_GI_HEART);
+ s8 objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_GI_HEART);
- if (Object_IsLoaded(&play->objectCtx, bankIndex)) {
- this->actor.objBankIndex = bankIndex;
+ if (Object_IsLoaded(&play->objectCtx, objectSlot)) {
+ this->actor.objectSlot = objectSlot;
Actor_SetObjectDependency(play, &this->actor);
this->unk152 = -2;
}
@@ -851,7 +852,7 @@ void EnItem00_DrawSprite(EnItem00* this, PlayState* play) {
void EnItem00_DrawHeartContainer(EnItem00* this, PlayState* play) {
s32 pad[2];
- if (Object_GetIndex(&play->objectCtx, OBJECT_GI_HEARTS) == this->actor.objBankIndex) {
+ if (Object_GetSlot(&play->objectCtx, OBJECT_GI_HEARTS) == this->actor.objectSlot) {
OPEN_DISPS(play->state.gfxCtx);
Gfx_SetupDL25_Xlu(play->state.gfxCtx);
@@ -935,9 +936,9 @@ Actor* Item_DropCollectible(PlayState* play, Vec3f* spawnPos, u32 params) {
SoundSource_PlaySfxAtFixedWorldPos(play, spawnPos, 40, NA_SE_EV_BUTTERFRY_TO_FAIRY);
}
} else {
- spawnedActor =
- Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELFORG, spawnPos->x, spawnPos->y + 40.0f, spawnPos->z, 0, 0,
- 0, STRAY_FAIRY_PARAMS(((param7F00 >> 8) & 0x7F), 0, STRAY_FAIRY_TYPE_COLLECTIBLE));
+ spawnedActor = Actor_Spawn(
+ &play->actorCtx, play, ACTOR_EN_ELFORG, spawnPos->x, spawnPos->y + 40.0f, spawnPos->z, 0, 0, 0,
+ STRAY_FAIRY_PARAMS((param7F00 >> 8) & 0x7F, STRAY_FAIRY_AREA_CLOCK_TOWN, STRAY_FAIRY_TYPE_COLLECTIBLE));
if (param20000 == 0) {
if (!Flags_GetCollectible(play, (param7F00 >> 8) & 0x7F)) {
SoundSource_PlaySfxAtFixedWorldPos(play, spawnPos, 40, NA_SE_EV_BUTTERFRY_TO_FAIRY);
@@ -993,9 +994,9 @@ Actor* Item_DropCollectible2(PlayState* play, Vec3f* spawnPos, s32 params) {
spawnedActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, spawnPos->x, spawnPos->y + 40.0f,
spawnPos->z, 0, 0, 0, FAIRY_PARAMS(FAIRY_TYPE_2, true, param7F00 >> 8));
} else {
- spawnedActor =
- Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELFORG, spawnPos->x, spawnPos->y + 40.0f, spawnPos->z, 0, 0,
- 0, STRAY_FAIRY_PARAMS(((param7F00 >> 8) & 0x7F), 0, STRAY_FAIRY_TYPE_COLLECTIBLE));
+ spawnedActor = Actor_Spawn(
+ &play->actorCtx, play, ACTOR_EN_ELFORG, spawnPos->x, spawnPos->y + 40.0f, spawnPos->z, 0, 0, 0,
+ STRAY_FAIRY_PARAMS((param7F00 >> 8) & 0x7F, STRAY_FAIRY_AREA_CLOCK_TOWN, STRAY_FAIRY_TYPE_COLLECTIBLE));
}
if (Flags_GetCollectible(play, (param7F00 >> 8) & 0x7F) == 0) {
SoundSource_PlaySfxAtFixedWorldPos(play, spawnPos, 40, NA_SE_EV_BUTTERFRY_TO_FAIRY);
diff --git a/src/code/z_game_over.c b/src/code/z_game_over.c
index c3c6819be..003f5dd7b 100644
--- a/src/code/z_game_over.c
+++ b/src/code/z_game_over.c
@@ -15,7 +15,7 @@ void GameOver_FadeLights(PlayState* play) {
if ((gameOverCtx->state >= GAMEOVER_DEATH_WAIT_GROUND && gameOverCtx->state < GAMEOVER_REVIVE_START) ||
(gameOverCtx->state >= GAMEOVER_REVIVE_RUMBLE && gameOverCtx->state < GAMEOVER_REVIVE_FADE_OUT)) {
- Kankyo_FadeInGameOverLights(play);
+ Environment_FadeInGameOverLights(play);
}
}
@@ -66,7 +66,7 @@ void GameOver_Update(PlayState* play) {
gSaveContext.nextHudVisibility = HUD_VISIBILITY_IDLE;
gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE;
gSaveContext.hudVisibilityTimer = 0;
- Kankyo_InitGameOverLights(play);
+ Environment_InitGameOverLights(play);
sGameOverTimer = 20;
Rumble_Request(0.0f, 126, 124, 63);
gameOverCtx->state = GAMEOVER_DEATH_WAIT_GROUND;
@@ -92,7 +92,7 @@ void GameOver_Update(PlayState* play) {
case GAMEOVER_REVIVE_START:
gameOverCtx->state++; // GAMEOVER_REVIVE_RUMBLE
sGameOverTimer = 0;
- Kankyo_InitGameOverLights(play);
+ Environment_InitGameOverLights(play);
ShrinkWindow_Letterbox_SetSizeTarget(32);
break;
@@ -119,7 +119,7 @@ void GameOver_Update(PlayState* play) {
break;
case GAMEOVER_REVIVE_FADE_OUT:
- Kankyo_FadeOutGameOverLights(play);
+ Environment_FadeOutGameOverLights(play);
sGameOverTimer--;
if (sGameOverTimer == 0) {
gameOverCtx->state = GAMEOVER_INACTIVE;
diff --git a/src/code/z_horse.c b/src/code/z_horse.c
index ac0142fae..52808477a 100644
--- a/src/code/z_horse.c
+++ b/src/code/z_horse.c
@@ -216,7 +216,7 @@ s32 Horse_IsActive(PlayState* play, ActorContext* actorCtx) {
if (bgActor != NULL) {
while (true) {
if ((bgActor->update != NULL) && (bgActor->init == NULL)) {
- if (Object_IsLoaded(&play->objectCtx, bgActor->objBankIndex)) {
+ if (Object_IsLoaded(&play->objectCtx, bgActor->objectSlot)) {
if ((bgActor->id == ACTOR_EN_HORSE) && (((EnHorse*)bgActor)->action != ENHORSE_ACTION_INACTIVE)) {
return true;
}
diff --git a/src/code/z_kaleido_manager.c b/src/code/z_kaleido_manager.c
index e09492d4e..d0bacdd22 100644
--- a/src/code/z_kaleido_manager.c
+++ b/src/code/z_kaleido_manager.c
@@ -66,7 +66,7 @@ void KaleidoManager_Init(PlayState* play) {
}
}
- sKaleidoAreaPtr = THA_AllocTailAlign16(&play->state.heap, largestSize);
+ sKaleidoAreaPtr = THA_AllocTailAlign16(&play->state.tha, largestSize);
gKaleidoMgrCurOvl = NULL;
Fault_AddAddrConvClient(&sKaleidoMgrFaultAddrConvClient, KaleidoManager_FaultAddrConv, NULL);
}
diff --git a/src/code/z_kaleido_setup.c b/src/code/z_kaleido_setup.c
index a08f2b56b..1b3aa49d7 100644
--- a/src/code/z_kaleido_setup.c
+++ b/src/code/z_kaleido_setup.c
@@ -93,7 +93,7 @@ void KaleidoSetup_Update(PlayState* play) {
(play->gameOverCtx.state == GAMEOVER_INACTIVE)) {
if ((play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF)) {
if ((gSaveContext.save.cutsceneIndex < 0xFFF0) && (gSaveContext.nextCutsceneIndex < 0xFFF0)) {
- if (!Play_InCsMode(play) || ((msgCtx->msgMode != 0) && (msgCtx->currentTextId == 0xFF))) {
+ if (!Play_InCsMode(play) || ((msgCtx->msgMode != MSGMODE_NONE) && (msgCtx->currentTextId == 0xFF))) {
if ((play->unk_1887C < 2) && (gSaveContext.magicState != MAGIC_STATE_STEP_CAPACITY) &&
(gSaveContext.magicState != MAGIC_STATE_FILL)) {
if (!CHECK_EVENTINF(EVENTINF_17) && !(player->stateFlags1 & PLAYER_STATE1_20)) {
diff --git a/src/code/z_kankyo.c b/src/code/z_kankyo.c
index 9346af59a..30ea04e16 100644
--- a/src/code/z_kankyo.c
+++ b/src/code/z_kankyo.c
@@ -1,156 +1,980 @@
+#include "ultra64.h"
+#include "z64light.h"
+#include "z64math.h"
+
+typedef struct {
+ /* 0x00 */ u8 state;
+ /* 0x04 */ Vec3f offset;
+ /* 0x10 */ Vec3f pos;
+ /* 0x1C */ s8 pitch;
+ /* 0x1D */ s8 roll;
+ /* 0x1E */ u8 textureIndex;
+ /* 0x1F */ u8 delayTimer;
+} LightningBolt; // size = 0x20
+
+// Variables are put before most headers as a hacky way to bypass bss reordering
+struct LightningStrike;
+
+u8 D_801F4E30;
+u8 D_801F4E31;
+u8 gCustomLensFlare1On;
+Vec3f gCustomLensFlare1Pos;
+f32 D_801F4E44;
+f32 D_801F4E48;
+s16 D_801F4E4C;
+u8 gCustomLensFlare2On;
+Vec3f gCustomLensFlare2Pos;
+f32 D_801F4E5C;
+f32 D_801F4E60;
+s16 D_801F4E64;
+struct LightningStrike gLightningStrike;
+f32 D_801F4E74;
+u16 D_801F4E78;
+u16 gSkyboxNumStars;
+LightningBolt sLightningBolts[3];
+LightNode* sNGameOverLightNode;
+LightInfo sNGameOverLightInfo;
+LightNode* sSGameOverLightNode;
+LightInfo sSGameOverLightInfo;
+f32 sSunEnvAlpha;
+f32 sSunColor;
+f32 sSunScale;
+f32 sSunPrimAlpha;
+s32 sSunDepthTestX;
+s32 sSunDepthTestY;
+f32 D_801F4F28;
+s16 sLightningFlashAlpha;
+u16 sSandstormScroll;
+u8 D_801F4F30;
+u8 D_801F4F31;
+u8 sEnvIsTimeStopped;
+u8 D_801F4F33;
+u8 sGameOverLightsIntensity;
+Gfx* sSkyboxStarsDList;
+
+#include "z64environment.h"
#include "global.h"
+#include "sys_cfb.h"
+#include "objects/gameplay_keep/gameplay_keep.h"
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F5090.s")
+// Data
+f32 sSandstormLerpScale = 0.0f;
+s32 sSunScreenDepth = GPACK_ZDZ(G_MAXFBZ, 0);
+s32 sEnvSkyboxNumStars = 0;
+u16 sTimeJump = 0;
+u8 sSandstormColorIndex = 0;
+u8 sNextSandstormColorIndex = 0;
+u8 D_801BDBA8 = 0;
+u8 D_801BDBAC = 0;
+u8 gWeatherMode = WEATHER_MODE_CLEAR;
+u8 gLightConfigAfterUnderwater = 0;
+u8 gInterruptSongOfStorms = false;
+u8 sSkyboxIsChanging = false;
+u8 D_801BDBC0 = 0;
+u8 D_801BDBC4 = 0;
+u8 gSceneSeqState = SCENESEQ_DEFAULT;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_ZBufValToFixedPoint.s")
+typedef struct {
+ /* 0x0 */ u16 startTime;
+ /* 0x2 */ u16 endTime;
+ /* 0x4 */ u8 lightSetting;
+ /* 0x5 */ u8 nextLightSetting;
+} TimeBasedLightEntry; // size = 0x6
+
+TimeBasedLightEntry sTimeBasedLightConfigs[][7] = {
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 3, 3 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(6, 0), 3, 12 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 0, 1 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 2 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(19, 0), 2, 3 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 3, 3 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 7, 7 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(6, 0), 7, 8 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 4, 5 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 5, 5 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 5, 6 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(19, 0), 6, 7 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 7, 7 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 11, 11 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(6, 0), 11, 8 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 8, 9 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 9, 9 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 9, 10 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(19, 0), 10, 11 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 11, 11 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 15, 15 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(6, 0), 15, 16 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 12, 13 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 13, 13 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 13, 14 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(19, 0), 14, 15 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 15, 15 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 19, 19 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(6, 0), 19, 16 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 16, 17 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 17, 17 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 17, 18 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(19, 0), 18, 19 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 19, 19 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 23, 23 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(6, 0), 23, 20 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 20, 21 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 21, 21 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 21, 22 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(19, 0), 22, 23 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 23, 23 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 27, 27 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(6, 0), 27, 24 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 24, 25 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 25, 25 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 25, 26 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(19, 0), 26, 27 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 27, 27 },
+ },
+};
+
+TimeBasedSkyboxEntry sTimeBasedSkyboxConfigs[][9] = {
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 3, 3 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 3, 4 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 4, 4 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 0, 0, 0, 1 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 1, 1 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 0, 1, 2 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 2, 2 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 2, 3 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 3, 3 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 7, 7 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 7, 8 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 8, 8 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 0, 4, 5 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 5, 5 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 1, 5, 6 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 6, 6 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 6, 7 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 7, 7 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 11, 11 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 11, 52 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 52, 52 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 8, 9 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 9, 9 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 9, 10 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 10, 10 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 10, 11 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 11, 11 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 15, 15 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 15, 16 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 16, 16 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 0, 0, 12, 13 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 13, 13 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 0, 13, 14 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 14, 14 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 14, 15 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 15, 15 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 19, 19 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 19, 20 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 20, 20 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 0, 16, 17 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 17, 17 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 1, 17, 18 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 18, 18 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 0, 18, 19 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 19, 19 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 23, 23 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 23, 52 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 52, 52 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 20, 21 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 21, 21 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 21, 22 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 22, 22 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 22, 23 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 23, 23 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 27, 27 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 27, 28 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 28, 28 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 0, 0, 24, 25 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 25, 25 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 0, 25, 26 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 26, 26 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 26, 27 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 27, 27 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 31, 31 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 31, 32 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 32, 32 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 0, 28, 29 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 29, 29 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 1, 29, 30 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 30, 30 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 0, 30, 31 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 31, 31 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 35, 35 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 35, 52 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 52, 52 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 32, 33 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 33, 33 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 33, 34 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 34, 34 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 34, 35 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 35, 35 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 39, 39 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 39, 40 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 40, 40 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 0, 0, 36, 37 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 37, 37 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 0, 37, 38 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 38, 38 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 38, 39 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 39, 39 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 43, 43 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 43, 44 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 44, 44 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 0, 40, 41 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 41, 41 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 1, 41, 42 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 42, 42 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 0, 42, 43 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 43, 43 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 47, 47 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 47, 52 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 52, 52 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 44, 45 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 45, 45 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 45, 46 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 46, 46 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 46, 47 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 47, 47 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 51, 51 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 51, 48 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 48, 49 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 49, 49 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 49, 49 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 1, 49, 50 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 50, 50 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 50, 51 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 51, 51 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 55, 55 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 55, 52 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 52, 52 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 52, 53 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 53, 53 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 1, 53, 54 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 54, 54 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 54, 54 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 55, 55 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 59, 59 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 59, 56 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 56, 56 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 56, 57 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 57, 57 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 1, 57, 58 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 58, 58 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 58, 58 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 59, 59 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 63, 63 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 63, 60 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 60, 60 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 60, 61 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 61, 61 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 1, 61, 62 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 62, 62 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 62, 62 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 63, 63 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 67, 67 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 67, 64 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 64, 64 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 64, 65 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 65, 65 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 1, 65, 66 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 66, 66 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 66, 66 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 67, 67 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 1, 1 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 0, 1, 1 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 0, 0, 1, 1 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 0, 0, 1, 1 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 1, 1 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 0, 1, 1 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 1, 1 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 1, 1 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 1, 1 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 71, 71 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 71, 72 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 72, 72 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 68, 69 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 69, 69 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 69, 70 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 70, 70 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 70, 71 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 71, 71 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 75, 75 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 75, 76 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 76, 76 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 72, 73 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 73, 73 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 1, 73, 74 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 74, 74 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 74, 75 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 75, 75 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 79, 79 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 79, 52 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 52, 52 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 76, 77 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 77, 77 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 77, 78 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 78, 78 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 78, 79 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 79, 79 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 83, 83 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 83, 84 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 84, 84 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 80, 81 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 81, 81 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 81, 82 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 82, 82 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 82, 83 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 83, 83 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 87, 87 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 87, 88 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 88, 88 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 84, 85 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 85, 85 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 1, 85, 86 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 86, 86 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 86, 87 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 87, 87 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 91, 91 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 91, 52 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 52, 52 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 88, 89 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 89, 89 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 89, 90 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 90, 90 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 90, 91 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 91, 91 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 11, 11 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 0, 11, 11 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 0, 0, 11, 11 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 0, 0, 11, 11 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 11, 11 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 0, 11, 11 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 11, 11 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 11, 11 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 11, 11 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 95, 95 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 95, 96 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 96, 96 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 92, 93 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 93, 93 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 93, 94 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 94, 94 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 94, 95 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 95, 95 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 99, 99 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 99, 100 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 100, 100 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 96, 97 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 97, 97 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 1, 97, 98 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 98, 98 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 98, 99 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 99, 99 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 103, 103 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 103, 52 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 52, 52 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 100, 101 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 101, 101 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 101, 102 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 102, 102 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 102, 103 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 103, 103 },
+ },
+};
+
+typedef struct {
+ /* 0x0 */ RomFile file;
+ /* 0x8 */ RomFile palette;
+} SkyboxFile; // size = 0x10
+
+SkyboxFile sNormalSkyFiles[] = {
+ {
+ ROM_FILE(d2_fine_static),
+ ROM_FILE_UNSET,
+ },
+ {
+ ROM_FILE(d2_cloud_static),
+ ROM_FILE_UNSET,
+ },
+};
+
+void Environment_GraphCallback(GraphicsContext* gfxCtx, void* arg) {
+ PlayState* play = (PlayState*)arg;
+
+ sSunScreenDepth = SysCfb_GetZBufferPixel(sSunDepthTestX, sSunDepthTestY);
+ Lights_GlowCheck(play);
+}
+
+typedef struct {
+ /* 0x0 */ s32 mantissaShift; // shift applied to the mantissa of the z buffer value
+ /* 0x4 */ s32 base; // 15.3 fixed-point base value for the exponent
+} ZBufValConversionEntry; // size = 0x8
+
+ZBufValConversionEntry sZBufValConversionTable[1 << 3] = {
+ { 6, 0x00000 }, { 5, 0x20000 }, { 4, 0x30000 }, { 3, 0x38000 },
+ { 2, 0x3C000 }, { 1, 0x3E000 }, { 0, 0x3F000 }, { 0, 0x3F800 },
+};
+
+#define ZBUFVAL_EXPONENT(v) (((v) >> 15) & 7)
+#define ZBUFVAL_MANTISSA(v) (((v) >> 4) & 0x7FF)
+
+/**
+ * Convert an 18-bits Z buffer value to a fixed point 15.3 value
+ *
+ * zBufferVal is 18 bits:
+ * 3: Exponent of z value
+ * 11: Mantissa of z value
+ * 4: dz value (unused)
+ */
+s32 Environment_ZBufValToFixedPoint(s32 zBufferVal) {
+ // base[exp] + mantissa << shift[exp]
+ s32 ret = (ZBUFVAL_MANTISSA(zBufferVal) << sZBufValConversionTable[ZBUFVAL_EXPONENT(zBufferVal)].mantissaShift) +
+ sZBufValConversionTable[ZBUFVAL_EXPONENT(zBufferVal)].base;
+
+ return ret;
+}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_Init.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F5954.s")
+u8 Environment_SmoothStepToU8(u8* pvalue, u8 target, u8 scale, u8 step, u8 minStep) {
+ s16 stepSize = 0;
+ s16 diff = target - *pvalue;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpWeight.s")
+ if (target != *pvalue) {
+ stepSize = diff / scale;
+ if ((stepSize >= (s16)minStep) || ((s16)-minStep >= stepSize)) {
+ if ((s16)step < stepSize) {
+ stepSize = step;
+ }
+ if ((s16)-step > stepSize) {
+ stepSize = -step;
+ }
+ *pvalue += (u8)stepSize;
+ } else {
+ if (stepSize < (s16)minStep) {
+ stepSize = minStep;
+ *pvalue += (u8)stepSize;
+ if (target < *pvalue) {
+ *pvalue = target;
+ }
+ }
+ if ((s16)-minStep < stepSize) {
+ stepSize = -minStep;
+ *pvalue += (u8)stepSize;
+ if (*pvalue < target) {
+ *pvalue = target;
+ }
+ }
+ }
+ }
+ return diff;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F5B10.s")
+f32 Environment_LerpWeight(u16 max, u16 min, u16 val) {
+ f32 diff = max - min;
+
+ if (diff != 0.0f) {
+ f32 ret = 1.0f - (max - val) / diff;
+
+ if (!(ret >= 1.0f)) {
+ return ret;
+ }
+ }
+
+ return 1.0f;
+}
+
+f32 Environment_LerpWeightAccelDecel(u16 endFrame, u16 startFrame, u16 curFrame, u16 accelDuration, u16 decelDuration) {
+ f32 endFrameF;
+ f32 startFrameF;
+ f32 curFrameF;
+ f32 accelDurationF;
+ f32 decelDurationF;
+ f32 totalFrames;
+ f32 temp;
+ f32 framesElapsed;
+ f32 ret;
+
+ if (curFrame <= startFrame) {
+ return 0.0f;
+ }
+
+ if (curFrame >= endFrame) {
+ return 1.0f;
+ }
+
+ endFrameF = (s32)endFrame;
+ startFrameF = (s32)startFrame;
+ curFrameF = (s32)curFrame;
+ totalFrames = endFrameF - startFrameF;
+ framesElapsed = curFrameF - startFrameF;
+ accelDurationF = (s32)accelDuration;
+ decelDurationF = (s32)decelDuration;
+
+ if ((startFrameF >= endFrameF) || (accelDurationF + decelDurationF > totalFrames)) {
+ return 0.0f;
+ }
+
+ temp = 1.0f / ((totalFrames * 2.0f) - accelDurationF - decelDurationF);
+
+ if (accelDurationF != 0.0f) {
+ if (framesElapsed <= accelDurationF) {
+ return temp * framesElapsed * framesElapsed / accelDurationF;
+ }
+ ret = temp * accelDurationF;
+ } else {
+ ret = 0.0f;
+ }
+
+ if (framesElapsed <= totalFrames - decelDurationF) {
+ ret += 2.0f * temp * (framesElapsed - accelDurationF);
+ return ret;
+ }
+
+ ret += 2.0f * temp * (totalFrames - accelDurationF - decelDurationF);
+
+ if (decelDurationF != 0.0f) {
+ ret += temp * decelDurationF;
+ if (framesElapsed < totalFrames) {
+ ret -= temp * (totalFrames - framesElapsed) * (totalFrames - framesElapsed) / decelDurationF;
+ }
+ }
+
+ return ret;
+}
+
+Color_RGBA8 sSkyboxPrimColors[] = {
+ { 181, 100, 72, 0 }, { 255, 255, 255, 0 }, { 255, 164, 63, 0 }, { 70, 90, 100, 0 }, { 180, 110, 70, 0 },
+ { 140, 120, 90, 0 }, { 186, 107, 70, 0 }, { 50, 90, 120, 0 }, { 160, 104, 125, 0 }, { 225, 234, 150, 0 },
+ { 243, 84, 33, 0 }, { 112, 37, 55, 0 }, { 181, 100, 27, 0 }, { 255, 255, 255, 0 }, { 186, 107, 69, 0 },
+ { 10, 40, 90, 0 }, { 180, 120, 100, 0 }, { 140, 120, 110, 0 }, { 186, 107, 70, 0 }, { 0, 50, 60, 0 },
+ { 160, 104, 215, 0 }, { 225, 234, 150, 0 }, { 243, 84, 33, 0 }, { 100, 25, 45, 0 }, { 181, 100, 27, 0 },
+ { 255, 255, 255, 0 }, { 186, 107, 69, 0 }, { 10, 10, 50, 0 }, { 165, 110, 63, 0 }, { 150, 120, 90, 0 },
+ { 166, 112, 65, 0 }, { 10, 40, 60, 0 }, { 160, 104, 215, 0 }, { 225, 234, 150, 0 }, { 243, 84, 33, 0 },
+ { 100, 20, 40, 0 }, { 181, 100, 27, 0 }, { 255, 255, 255, 0 }, { 186, 107, 69, 0 }, { 0, 50, 70, 0 },
+ { 180, 126, 70, 0 }, { 150, 140, 120, 0 }, { 225, 164, 63, 0 }, { 0, 70, 80, 0 }, { 160, 104, 215, 0 },
+ { 225, 234, 150, 0 }, { 243, 84, 33, 0 }, { 100, 40, 65, 0 }, { 105, 72, 57, 0 }, { 150, 120, 90, 0 },
+ { 80, 56, 21, 0 }, { 60, 46, 40, 0 }, { 210, 120, 180, 0 }, { 210, 120, 180, 0 }, { 210, 120, 180, 0 },
+ { 210, 120, 180, 0 }, { 100, 90, 110, 0 }, { 100, 90, 110, 0 }, { 100, 90, 110, 0 }, { 100, 90, 110, 0 },
+ { 255, 255, 255, 0 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 }, { 25, 53, 235, 0 },
+ { 25, 53, 235, 0 }, { 25, 53, 235, 0 }, { 25, 53, 235, 0 }, { 198, 121, 88, 0 }, { 255, 255, 255, 0 },
+ { 255, 164, 70, 0 }, { 55, 53, 91, 0 }, { 199, 126, 78, 0 }, { 159, 125, 103, 0 }, { 186, 107, 59, 0 },
+ { 50, 90, 120, 0 }, { 171, 113, 131, 0 }, { 225, 234, 180, 0 }, { 237, 84, 37, 0 }, { 133, 48, 75, 0 },
+ { 198, 121, 88, 0 }, { 255, 255, 255, 0 }, { 255, 164, 70, 0 }, { 55, 53, 91, 0 }, { 209, 135, 100, 0 },
+ { 180, 177, 158, 0 }, { 196, 127, 79, 0 }, { 50, 90, 120, 0 }, { 171, 113, 131, 0 }, { 225, 234, 180, 0 },
+ { 237, 84, 37, 0 }, { 133, 48, 75, 0 }, { 198, 121, 88, 0 }, { 235, 250, 235, 0 }, { 255, 164, 70, 0 },
+ { 55, 53, 91, 0 }, { 205, 140, 110, 0 }, { 159, 125, 103, 0 }, { 186, 107, 59, 0 }, { 50, 90, 120, 0 },
+ { 171, 113, 131, 0 }, { 225, 234, 180, 0 }, { 237, 84, 37, 0 }, { 133, 48, 75, 0 },
+};
+
+Color_RGBA8 sSkyboxEnvColors[] = {
+ { 102, 135, 99, 0 }, { 0, 15, 69, 0 }, { 110, 55, 110, 0 }, { 0, 0, 100, 0 }, { 70, 10, 10, 0 },
+ { 40, 0, 10, 0 }, { 40, 40, 40, 0 }, { 20, 20, 30, 0 }, { 60, 0, 10, 0 }, { 65, 45, 0, 0 },
+ { 20, 25, 90, 0 }, { 0, 5, 25, 0 }, { 102, 135, 99, 0 }, { 0, 4, 199, 0 }, { 60, 65, 89, 0 },
+ { 0, 0, 0, 0 }, { 70, 10, 10, 0 }, { 20, 0, 30, 0 }, { 40, 40, 40, 0 }, { 0, 0, 20, 0 },
+ { 60, 0, 10, 0 }, { 65, 45, 0, 0 }, { 20, 25, 90, 0 }, { 0, 0, 30, 0 }, { 102, 135, 99, 0 },
+ { 0, 4, 199, 0 }, { 60, 65, 89, 0 }, { 0, 0, 20, 0 }, { 66, 10, 10, 0 }, { 46, 5, 2, 0 },
+ { 66, 10, 10, 0 }, { 0, 20, 50, 0 }, { 60, 0, 10, 0 }, { 65, 45, 0, 0 }, { 20, 25, 90, 0 },
+ { 0, 0, 20, 0 }, { 102, 135, 99, 0 }, { 0, 4, 199, 0 }, { 60, 65, 89, 0 }, { 0, 0, 40, 0 },
+ { 90, 90, 100, 0 }, { 60, 20, 30, 0 }, { 110, 55, 110, 0 }, { 0, 0, 50, 0 }, { 60, 0, 10, 0 },
+ { 65, 45, 0, 0 }, { 20, 25, 90, 0 }, { 0, 0, 25, 0 }, { 10, 0, 0, 0 }, { 46, 5, 2, 0 },
+ { 34, 14, 10, 0 }, { 21, 5, 13, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
+ { 0, 0, 0, 0 }, { 50, 20, 10, 0 }, { 50, 20, 10, 0 }, { 50, 20, 10, 0 }, { 50, 20, 10, 0 },
+ { 30, 15, 250, 0 }, { 30, 15, 250, 0 }, { 30, 15, 250, 0 }, { 30, 15, 250, 0 }, { 177, 82, 93, 0 },
+ { 177, 82, 93, 0 }, { 177, 82, 93, 0 }, { 177, 82, 93, 0 }, { 90, 82, 102, 0 }, { 0, 4, 199, 0 },
+ { 101, 24, 131, 0 }, { 26, 7, 0, 0 }, { 70, 9, 6, 0 }, { 49, 6, 1, 0 }, { 40, 15, 59, 0 },
+ { 0, 2, 28, 0 }, { 60, 0, 10, 0 }, { 75, 45, 0, 0 }, { 20, 20, 89, 0 }, { 0, 7, 17, 0 },
+ { 90, 82, 102, 0 }, { 0, 4, 199, 0 }, { 101, 24, 131, 0 }, { 26, 7, 0, 0 }, { 70, 12, 16, 0 },
+ { 51, 10, 15, 0 }, { 50, 15, 58, 0 }, { 0, 2, 28, 0 }, { 60, 0, 10, 0 }, { 75, 45, 0, 0 },
+ { 20, 20, 89, 0 }, { 0, 7, 17, 0 }, { 90, 82, 102, 0 }, { 0, 4, 199, 0 }, { 101, 24, 131, 0 },
+ { 26, 7, 0, 0 }, { 70, 20, 45, 0 }, { 49, 6, 1, 0 }, { 40, 15, 59, 0 }, { 0, 2, 28, 0 },
+ { 60, 0, 10, 0 }, { 75, 45, 0, 0 }, { 20, 20, 89, 0 }, { 0, 7, 17, 0 },
+};
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateSkybox.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F6834.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_EnableUnderwaterLights.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F694C.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DisableUnderwaterLights.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F6A04.s")
+void Environment_WipeRumbleRequests(void) {
+ if ((gSaveContext.gameMode != GAMEMODE_NORMAL) && (gSaveContext.gameMode != GAMEMODE_END_CREDITS)) {
+ Rumble_StateWipeRequests();
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F6A40.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateSkyboxRotY.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F6AB8.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateNextDayTime.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F6B44.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateTime.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F6CEC.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F6EA4.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Kankyo_IsSceneUpsideDown.s")
+s32 Environment_IsSceneUpsideDown(PlayState* play) {
+ s32 ret = false;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F6FF8.s")
+ if ((play->sceneId == SCENE_F41) || (play->sceneId == SCENE_INISIE_R)) {
+ ret = true;
+ }
+ return ret;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F8554.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateLights.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateSun.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F88C4.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F8970.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F8A9C.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdatePostmanEvents.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_Update.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F8D84.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawSun.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawSunLensFlare.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F9824.s")
+typedef enum {
+ /* 0 */ LENS_FLARE_CIRCLE0,
+ /* 1 */ LENS_FLARE_CIRCLE1,
+ /* 2 */ LENS_FLARE_RING
+} LensFlareType;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FA39C.s")
+static Color_RGB8 sLensFlareColors[] = {
+ { 155, 205, 255 }, // blue
+ { 255, 255, 205 }, // yellow
+ { 255, 255, 205 }, // yellow
+ { 255, 255, 205 }, // yellow
+ { 155, 255, 205 }, // green
+ { 205, 255, 255 }, // light blue
+ { 155, 155, 255 }, // dark blue
+ { 205, 175, 255 }, // purple
+ { 175, 255, 205 }, // light green
+ { 255, 155, 235 }, // pink
+};
+static f32 sLensFlareScales[] = {
+ 23.0f, 12.0f, 7.0f, 5.0f, 3.0f, 10.0f, 6.0f, 2.0f, 3.0f, 1.0f,
+};
+static u32 sLensFlareAlphas[] = {
+ 50, 10, 25, 40, 70, 30, 50, 70, 50, 40,
+};
+static u32 sLensFlareTypes[] = {
+ LENS_FLARE_RING, LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1,
+ LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1,
+};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FA3C4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawLensFlare.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_RandCentered.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawRainImpl.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawRain.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FAAB4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_ChangeLightSetting.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FAC20.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawSkyboxFilters.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FAF74.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawLightningFlash.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FB010.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateLightningStrike.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_AddLightningBolts.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FB388.s")
+static TexturePtr sLightningTextures[] = {
+ gEffLightning1Tex, gEffLightning2Tex, gEffLightning3Tex, gEffLightning4Tex,
+ gEffLightning5Tex, gEffLightning6Tex, gEffLightning7Tex, gEffLightning8Tex,
+};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FB758.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawLightning.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FB9B4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_PlaySceneSequence.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateTimeBasedSequence.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawCustomLensFlare.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Kankyo_InitGameOverLights.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_InitGameOverLights.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Kankyo_FadeInGameOverLights.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_FadeInGameOverLights.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Kankyo_FadeOutGameOverLights.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_FadeOutGameOverLights.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FC3DC.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateRain.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_FillScreen.s")
+u8 sSandstormPrimColors[] = {
+ 255, 255, 255, //
+ 255, 255, 255, //
+ 255, 255, 255, //
+ 255, 255, 255, //
+ 210, 156, 85, //
+ 255, 200, 100, //
+ 225, 160, 50, //
+ 105, 90, 40, //
+};
+
+u8 sSandstormEnvColors[] = {
+ 100, 100, 100, //
+ 100, 100, 100, //
+ 100, 100, 100, //
+ 100, 100, 100, //
+ 155, 106, 35, //
+ 200, 150, 50, //
+ 170, 110, 0, //
+ 50, 40, 0, //
+};
+
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawSandstorm.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD2B4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_AdjustLights.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD538.s")
+void Environment_LerpRGB8(u8* from, Color_RGB8* to, f32 lerp, s16* dst) {
+ Color_RGB8 result;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpAmbientColor.s")
+ Color_RGB8_Lerp((Color_RGB8*)from, to, lerp, &result);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpDiffuseColor.s")
+ dst[0] = result.r - from[0];
+ dst[1] = result.g - from[1];
+ dst[2] = result.b - from[2];
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpFogColor.s")
+void Environment_LerpAmbientColor(PlayState* play, Color_RGB8* to, f32 lerp) {
+ Environment_LerpRGB8(play->envCtx.lightSettings.ambientColor, to, lerp, play->envCtx.adjLightSettings.ambientColor);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpFog.s")
+void Environment_LerpDiffuseColor(PlayState* play, Color_RGB8* to, f32 lerp) {
+ Environment_LerpRGB8(play->envCtx.lightSettings.light1Color, to, lerp, play->envCtx.adjLightSettings.light1Color);
+ Environment_LerpRGB8(play->envCtx.lightSettings.light2Color, to, lerp, play->envCtx.adjLightSettings.light2Color);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/get_days_elapsed.s")
+void Environment_LerpFogColor(PlayState* play, Color_RGB8* to, f32 lerp) {
+ Environment_LerpRGB8(play->envCtx.lightSettings.fogColor, to, lerp, play->envCtx.adjLightSettings.fogColor);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/reset_days_elapsed.s")
+void Environment_LerpFog(PlayState* play, s16 fogNearTarget, s16 fogFarTarget, f32 lerp) {
+ play->envCtx.adjLightSettings.fogNear = (fogNearTarget - play->envCtx.lightSettings.fogNear) * lerp;
+ play->envCtx.adjLightSettings.zFar = (fogFarTarget - play->envCtx.lightSettings.zFar) * lerp;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/get_current_day.s")
+// Repurposed from OoT to be more general
+u32 Environment_GetEventDayCount(void) {
+ return gSaveContext.save.eventDayCount;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD750.s")
+// Repurposed from OoT to be more general
+void Environment_ClearEventDayCount(void) {
+ gSaveContext.save.eventDayCount = 0;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD768.s")
+// Repurposed from OoT to be more general
+u32 Environment_GetTotalDays(void) {
+ return gSaveContext.save.day;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD78C.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_ForcePlaySequence.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD858.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_IsForcedSequenceDisabled.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD928.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_PlayStormNatureAmbience.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD980.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_StopStormNatureAmbience.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FDAF8.s")
+void Environment_WarpSongLeave(PlayState* play) {
+ gWeatherMode = WEATHER_MODE_CLEAR;
+ gSaveContext.save.cutsceneIndex = 0;
+ gSaveContext.respawnFlag = -3;
+ play->nextEntrance = gSaveContext.respawn[RESPAWN_MODE_RETURN].entrance;
+ play->transitionTrigger = TRANS_TRIGGER_START;
+ play->transitionType = TRANS_TYPE_FADE_WHITE;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FDC94.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_SetupSkyboxStars.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE390.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawSkyboxStar.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE3E0.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawSkyboxStarsImpl.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_StopTime.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_Draw.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_StartTime.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawSkyboxStars.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_IsTimeStopped.s")
+void Environment_StopTime(void) {
+ sEnvIsTimeStopped = true;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE4B8.s")
+void Environment_StartTime(void) {
+ sEnvIsTimeStopped = false;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE590.s")
+u8 Environment_IsTimeStopped(void) {
+ return sEnvIsTimeStopped;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE5D0.s")
+u32 Environment_GetStormState(PlayState* play) {
+ u32 stormState = play->envCtx.stormState;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE610.s")
+ if ((play->sceneId == SCENE_OMOYA) && (play->roomCtx.curRoom.num == 0)) {
+ stormState = ((gSaveContext.save.day >= 2) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM))
+ ? STORM_STATE_ON
+ : STORM_STATE_OFF;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE620.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) {
+ stormState = STORM_STATE_OFF;
+ }
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE658.s")
+ case SCENE_10YUKIYAMANOMURA2:
+ if (gSaveContext.sceneLayer == 1) {
+ stormState = STORM_STATE_OFF;
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ return stormState;
+}
+
+u8 Environment_IsFinalHours(PlayState* play) {
+ u8 ret = false;
+
+ if ((gSaveContext.save.day == 3) && (gSaveContext.save.time < CLOCK_TIME(6, 0))) {
+ ret = true;
+ }
+
+ return ret;
+}
+
+u8 func_800FE5D0(PlayState* play) {
+ u8 ret = false;
+
+ if (Entrance_GetSceneId(((void)0, gSaveContext.save.entrance)) < 0) {
+ ret = true;
+ }
+
+ return ret;
+}
+
+u32 func_800FE610(PlayState* play) {
+ return 0;
+}
+
+u16 Environment_GetTimeSpeed(PlayState* play) {
+ u16 timeSpeed = 0;
+
+ if (R_TIME_SPEED != 0) {
+ timeSpeed = R_TIME_SPEED + (u16)((void)0, gSaveContext.save.timeSpeedOffset);
+ }
+
+ return timeSpeed;
+}
+
+void Environment_SetTimeJump(f32 minutes) {
+ sTimeJump = CLOCK_TIME_F(0, minutes);
+}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE6F8.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE778.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_GetSandstormColorIndex.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE788.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_GetNextSandstormColorIndex.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE798.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_GetSandstormLerpScale.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE7A8.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpSandstormColors.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE9B4.s")
@@ -158,6 +982,11 @@
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FEAB0.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FEAC0.s")
+void Environment_JumpForwardInTime(void) {
+ if (sTimeJump != 0) {
+ gSaveContext.save.time = ((void)0, gSaveContext.save.time) + sTimeJump;
+ sTimeJump = 0;
+ }
+}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FEAF4.s")
diff --git a/src/code/z_lib.c b/src/code/z_lib.c
index 634f0a47f..a68d7c882 100644
--- a/src/code/z_lib.c
+++ b/src/code/z_lib.c
@@ -663,7 +663,7 @@ void Lib_Vec3f_TranslateAndRotateY(Vec3f* translation, s16 rotAngle, Vec3f* src,
dst->z = translation->z + (src->z * cos - src->x * sin);
}
-void Lib_LerpRGB(Color_RGB8* a, Color_RGB8* b, f32 t, Color_RGB8* dst) {
+void Color_RGB8_Lerp(Color_RGB8* a, Color_RGB8* b, f32 t, Color_RGB8* dst) {
f32 aF;
aF = a->r;
diff --git a/src/code/z_lights.c b/src/code/z_lights.c
index ef1af66f5..e5b34f387 100644
--- a/src/code/z_lights.c
+++ b/src/code/z_lights.c
@@ -257,15 +257,15 @@ void LightContext_Init(PlayState* play, LightContext* lightCtx) {
}
void LightContext_SetAmbientColor(LightContext* lightCtx, u8 r, u8 g, u8 b) {
- lightCtx->ambient.r = r;
- lightCtx->ambient.g = g;
- lightCtx->ambient.b = b;
+ lightCtx->ambientColor[0] = r;
+ lightCtx->ambientColor[1] = g;
+ lightCtx->ambientColor[2] = b;
}
void LightContext_SetFog(LightContext* lightCtx, u8 r, u8 g, u8 b, s16 near, s16 far) {
- lightCtx->fogColor.r = r;
- lightCtx->fogColor.g = g;
- lightCtx->fogColor.b = b;
+ lightCtx->fogColor[0] = r;
+ lightCtx->fogColor[1] = g;
+ lightCtx->fogColor[2] = b;
lightCtx->fogNear = near;
lightCtx->zFar = far;
}
@@ -274,7 +274,7 @@ void LightContext_SetFog(LightContext* lightCtx, u8 r, u8 g, u8 b, s16 near, s16
* Allocate a new Lights group and initilize the ambient color with that provided by LightContext
*/
Lights* LightContext_NewLights(LightContext* lightCtx, GraphicsContext* gfxCtx) {
- return Lights_New(gfxCtx, lightCtx->ambient.r, lightCtx->ambient.g, lightCtx->ambient.b);
+ return Lights_New(gfxCtx, lightCtx->ambientColor[0], lightCtx->ambientColor[1], lightCtx->ambientColor[2]);
}
void LightContext_InitList(PlayState* play, LightContext* lightCtx) {
diff --git a/src/code/z_malloc.c b/src/code/z_malloc.c
index 781f4310e..ac56231cf 100644
--- a/src/code/z_malloc.c
+++ b/src/code/z_malloc.c
@@ -40,7 +40,7 @@ void ZeldaArena_GetSizes(size_t* outMaxFree, size_t* outFree, size_t* outAlloc)
__osGetSizes(&sZeldaArena, outMaxFree, outFree, outAlloc);
}
-s32 ZeldaArena_Check() {
+s32 ZeldaArena_Check(void) {
return __osCheckArena(&sZeldaArena);
}
@@ -48,10 +48,10 @@ void ZeldaArena_Init(void* start, size_t size) {
__osMallocInit(&sZeldaArena, start, size);
}
-void ZeldaArena_Cleanup() {
+void ZeldaArena_Cleanup(void) {
__osMallocCleanup(&sZeldaArena);
}
-u8 ZeldaArena_IsInitialized() {
+u8 ZeldaArena_IsInitialized(void) {
return __osMallocIsInitalized(&sZeldaArena);
}
diff --git a/src/code/z_map_exp.c b/src/code/z_map_exp.c
index c087fe059..f04562e03 100644
--- a/src/code/z_map_exp.c
+++ b/src/code/z_map_exp.c
@@ -181,7 +181,7 @@ void Map_Init(PlayState* play) {
func_80105C40(play->roomCtx.curRoom.num);
interfaceCtx->unk_278 = -1;
interfaceCtx->dungeonOrBossAreaMapIndex = -1;
- interfaceCtx->mapSegment = THA_AllocTailAlign16(&play->state.heap, 0x1000);
+ interfaceCtx->mapSegment = THA_AllocTailAlign16(&play->state.tha, 0x1000);
if (func_8010A2AC(play)) {
gSaveContext.mapIndex = func_8010A238(play);
return;
diff --git a/src/code/z_message.c b/src/code/z_message.c
index cf88c60df..3fb8f5bac 100644
--- a/src/code/z_message.c
+++ b/src/code/z_message.c
@@ -1,10 +1,31 @@
#include "global.h"
+#include "z64horse.h"
#include "z64shrink_window.h"
#include "z64view.h"
#include "message_data_static.h"
+#include "interface/parameter_static/parameter_static.h"
#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
-#if 0
+u8 D_801C6A70 = 0;
+s16 sOcarinaButtonIndexBufPos = 0;
+s16 sOcarinaButtonIndexBufLen = 0;
+s16 sLastPlayedSong = 0xFF;
+s16 sOcarinaButtonStepR = 0;
+s16 sOcarinaButtonStepG = 0;
+s16 sOcarinaButtonStepB = 0;
+s16 sOcarinaButtonFlashTimer = 12;
+s16 sOcarinaButtonFlashColorIndex = 1;
+s16 D_801C6A94 = 0;
+
+u8 gPageSwitchNextButtonStatus[][5] = {
+ { BTN_ENABLED, BTN_ENABLED, BTN_DISABLED, BTN_ENABLED, BTN_ENABLED },
+ { BTN_ENABLED, BTN_ENABLED, BTN_DISABLED, BTN_ENABLED, BTN_ENABLED },
+ { BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_ENABLED, BTN_ENABLED },
+ { BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_ENABLED, BTN_ENABLED },
+ { BTN_ENABLED, BTN_ENABLED, BTN_DISABLED, BTN_ENABLED, BTN_ENABLED },
+ { BTN_ENABLED, BTN_ENABLED, BTN_DISABLED, BTN_ENABLED, BTN_ENABLED },
+};
+
#define DEFINE_PERSON(_enum, _photo, _description, _metEnum, metMessage, _metFlag) metMessage,
#define DEFINE_EVENT(_enum, _icon, _colorFlag, _description, completedMessage, _completedFlag) completedMessage,
@@ -27,71 +48,94 @@ u16 gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_EVENT_MAX] = {
#undef DEFINE_PERSON
#undef DEFINE_EVENT
-s16 D_801D02D8[15] = {
- ACTOR_OCEFF_WIPE5, ACTOR_OCEFF_WIPE5, // Sonata of Awakening Effect, Sonata of Awakening Effect
- ACTOR_OCEFF_WIPE5, ACTOR_OCEFF_WIPE5, // Sonata of Awakening Effect, Sonata of Awakening Effect
- ACTOR_OCEFF_WIPE5, ACTOR_OCEFF_WIPE5, // Sonata of Awakening Effect, Sonata of Awakening Effect
- ACTOR_OCEFF_WIPE, ACTOR_OCEFF_WIPE7, // Song of Time Effect, Song of Healing Effect
- ACTOR_OCEFF_WIPE2, ACTOR_OCEFF_WIPE6, // Epona's Song Effect, Song of Soaring Effect
- ACTOR_OCEFF_STORM, ACTOR_OCEFF_SPOT, // Song of Storms Effect II [?], Sun's Song Effect
- ACTOR_OCEFF_WIPE, ACTOR_OCEFF_WIPE, // Song of Time Effect, Song of Time Effect
- ACTOR_OCEFF_WIPE4 // Scarecrow's Song Effect
+// TODO: Scripts
+// Include message tables D_801C6B98 and D_801CFB08
+#include "src/code/z_message_tables.inc.c"
+
+s16 D_801CFC78[TEXTBOX_TYPE_MAX] = {
+ 0, // TEXTBOX_TYPE_0
+ 1, // TEXTBOX_TYPE_1
+ 3, // TEXTBOX_TYPE_2
+ 2, // TEXTBOX_TYPE_3
+ 14, // TEXTBOX_TYPE_4
+ 14, // TEXTBOX_TYPE_5
+ 0, // TEXTBOX_TYPE_6
+ 14, // TEXTBOX_TYPE_7
+ 0, // TEXTBOX_TYPE_8
+ 0, // TEXTBOX_TYPE_9
+ 0, // TEXTBOX_TYPE_A
+ 14, // TEXTBOX_TYPE_B
+ 14, // TEXTBOX_TYPE_C
+ 4, // TEXTBOX_TYPE_D
+ 14, // TEXTBOX_TYPE_E
+ 0, // TEXTBOX_TYPE_F
+};
+u8 sOcarinaButtonIndexBuf[12] = { 0 };
+s16 sOcarinaButtonAlphaValues[9] = { 0 };
+s16 gOcarinaSongItemMap[] = {
+ OCARINA_SONG_SONATA, OCARINA_SONG_GORON_LULLABY, OCARINA_SONG_NEW_WAVE,
+ OCARINA_SONG_ELEGY, OCARINA_SONG_OATH, OCARINA_SONG_SARIAS,
+ OCARINA_SONG_TIME, OCARINA_SONG_HEALING, OCARINA_SONG_EPONAS,
+ OCARINA_SONG_SOARING, OCARINA_SONG_STORMS, OCARINA_SONG_SUNS,
+ OCARINA_SONG_INVERTED_TIME, OCARINA_SONG_DOUBLE_TIME, OCARINA_SONG_GORON_LULLABY_INTRO,
};
-s32 D_801D02F8[15] = { 0,1,2,3,4,0,1,0,0,0,0,0,1,1,0 };
-#endif
+// bss
-extern s16 D_801D02D8[];
-extern s32 D_801D02F8[];
-extern s16 D_801F6B0C;
-extern s16 D_801F6B0E;
-extern s16 D_801F6B10;
-extern s16 D_801F6B12;
-extern s16 D_801F6B14;
-extern s16 D_801F6B16;
-extern s16 D_801F6B18;
-extern s16 D_801F6B1A;
-extern s16 D_801F6B1C;
-extern s16 D_801F6B1E;
-extern s16 D_801F6B20;
-extern s16 D_801F6B22;
-extern MessageTableEntry D_801C6B98[];
-extern MessageTableEntry D_801CFB08[];
+s32 sCharTexSize;
+s32 sCharTexScale;
+s32 D_801F6B08;
-void func_80147520(void) {
- D_801CFC98 = 0xFF;
- D_801CFCA4[0] = D_801CFCA4[1] = D_801CFCA4[2] = D_801CFCA4[3] = D_801CFCA4[4] = D_801CFCA4[5] = D_801CFCA4[6] =
- D_801CFCA4[7] = D_801CFCA4[8] = 0;
+s16 sOcarinaButtonAPrimR;
+s16 sOcarinaButtonAPrimB;
+s16 sOcarinaButtonAPrimG;
+s16 sOcarinaButtonAEnvR;
+s16 sOcarinaButtonAEnvB;
+s16 sOcarinaButtonAEnvG;
+s16 sOcarinaButtonCPrimR;
+s16 sOcarinaButtonCPrimB;
+s16 sOcarinaButtonCPrimG;
+s16 sOcarinaButtonCEnvR;
+s16 sOcarinaButtonCEnvB;
+s16 sOcarinaButtonCEnvG;
+
+void Message_ResetOcarinaButtonAlphas(void) {
+ sOcarinaButtonIndexBuf[0] = OCARINA_BTN_INVALID;
+ sOcarinaButtonAlphaValues[0] = sOcarinaButtonAlphaValues[1] = sOcarinaButtonAlphaValues[2] =
+ sOcarinaButtonAlphaValues[3] = sOcarinaButtonAlphaValues[4] = sOcarinaButtonAlphaValues[5] =
+ sOcarinaButtonAlphaValues[6] = sOcarinaButtonAlphaValues[7] = sOcarinaButtonAlphaValues[8] = 0;
}
-void func_80147564(PlayState* play) {
+void Message_ResetOcarinaButtonState(PlayState* play) {
MessageContext* msgCtx = &play->msgCtx;
- msgCtx->unk1204A[0] = 0xBD;
- msgCtx->unk1204A[1] = 0xB8;
- msgCtx->unk1204A[2] = 0xB3;
- msgCtx->unk1204A[3] = 0xAE;
- msgCtx->unk1204A[4] = 0xA9;
- func_80147520();
- D_801F6B0C = 0x50;
- D_801F6B10 = 0x96;
- D_801F6B0E = 0xFF;
- D_801F6B12 = 0xA;
- D_801F6B16 = 0xA;
- D_801F6B14 = 0xA;
- D_801F6B18 = 0xFF;
- D_801F6B1C = 0xFF;
- D_801F6B1A = 0x32;
- D_801F6B1E = 0xA;
- D_801F6B22 = 0xA;
- D_801F6B20 = 0xA;
+ msgCtx->ocarinaButtonsPosY[OCARINA_BTN_A] = 189;
+ msgCtx->ocarinaButtonsPosY[OCARINA_BTN_C_DOWN] = 184;
+ msgCtx->ocarinaButtonsPosY[OCARINA_BTN_C_RIGHT] = 179;
+ msgCtx->ocarinaButtonsPosY[OCARINA_BTN_C_LEFT] = 174;
+ msgCtx->ocarinaButtonsPosY[OCARINA_BTN_C_UP] = 169;
+
+ Message_ResetOcarinaButtonAlphas();
+
+ sOcarinaButtonAPrimR = 80;
+ sOcarinaButtonAPrimG = 150;
+ sOcarinaButtonAPrimB = 255;
+ sOcarinaButtonAEnvR = 10;
+ sOcarinaButtonAEnvG = 10;
+ sOcarinaButtonAEnvB = 10;
+ sOcarinaButtonCPrimR = 255;
+ sOcarinaButtonCPrimG = 255;
+ sOcarinaButtonCPrimB = 50;
+ sOcarinaButtonCEnvR = 10;
+ sOcarinaButtonCEnvG = 10;
+ sOcarinaButtonCEnvB = 10;
}
s32 Message_ShouldAdvance(PlayState* play) {
MessageContext* msgCtx = &play->msgCtx;
Input* controller = CONTROLLER1(&play->state);
- if ((msgCtx->unk12020 == 0x10) || (msgCtx->unk12020 == 0x11)) {
+ if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_11)) {
if (CHECK_BTN_ALL(controller->press.button, BTN_A)) {
Audio_PlaySfx(NA_SE_SY_MESSAGE_PASS);
}
@@ -110,7 +154,7 @@ s32 Message_ShouldAdvanceSilent(PlayState* play) {
MessageContext* msgCtx = &play->msgCtx;
Input* controller = CONTROLLER1(&play->state);
- if (msgCtx->unk12020 == 0x10 || msgCtx->unk12020 == 0x11) {
+ if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_11)) {
return CHECK_BTN_ALL(controller->press.button, BTN_A);
} else {
return CHECK_BTN_ALL(controller->press.button, BTN_A) || CHECK_BTN_ALL(controller->press.button, BTN_B) ||
@@ -123,77 +167,617 @@ void Message_CloseTextbox(PlayState* play) {
if (play->msgCtx.msgLength != 0) {
msgCtx->stateTimer = 2;
- msgCtx->msgMode = 0x43;
- msgCtx->unk12020 = 0;
+ msgCtx->msgMode = MSGMODE_TEXT_CLOSING;
+ msgCtx->textboxEndType = TEXTBOX_ENDTYPE_00;
Audio_PlaySfx(NA_SE_NONE);
}
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80147818.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80147F18.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80148558.s")
-
-#ifdef NON_MATCHING
-void func_80148B98(PlayState* play, u8 arg1) {
- static s16 held = 0;
+void Message_DrawTextboxIcon(PlayState* play, Gfx** gfxP, s16 x, s16 y) {
+ static Color_RGB16 sIconPrimColors[] = {
+ { 0, 80, 200 },
+ { 50, 130, 255 },
+ };
+ static Color_RGB16 sIconEnvColors[] = {
+ { 0, 0, 0 },
+ { 0, 130, 255 },
+ };
+ static s16 sIconPrimR = 0;
+ static s16 sIconPrimG = 80;
+ static s16 sIconPrimB = 200;
+ static s16 sIconFlashTimer = 12;
+ static s16 sIconFlashColorIndex = 0;
+ static s16 sIconEnvR = 0;
+ static s16 sIconEnvG = 0;
+ static s16 sIconEnvB = 0;
+ Gfx* gfx;
MessageContext* msgCtx = &play->msgCtx;
- Input* curInput = CONTROLLER1(&play->state);
+ Font* font = &msgCtx->font;
+ s16 primR;
+ s16 primG;
+ s16 primB;
+ s16 envR;
+ s16 envG;
+ s16 envB;
+ u8* iconTexture = msgCtx->font.iconBuf;
- if ((curInput->rel.stick_y > 29) && held == 0) {
- held = 1;
+ gfx = *gfxP;
+
+ if (!msgCtx->textIsCredits) {
+ primR = ABS_ALT(sIconPrimR - sIconPrimColors[sIconFlashColorIndex].r) / sIconFlashTimer;
+ primG = ABS_ALT(sIconPrimG - sIconPrimColors[sIconFlashColorIndex].g) / sIconFlashTimer;
+ primB = ABS_ALT(sIconPrimB - sIconPrimColors[sIconFlashColorIndex].b) / sIconFlashTimer;
+
+ if (sIconPrimR >= sIconPrimColors[sIconFlashColorIndex].r) {
+ sIconPrimR -= primR;
+ } else {
+ sIconPrimR += primR;
+ }
+
+ if (sIconPrimG >= sIconPrimColors[sIconFlashColorIndex].g) {
+ sIconPrimG -= primG;
+ } else {
+ sIconPrimG += primG;
+ }
+
+ if (sIconPrimB >= sIconPrimColors[sIconFlashColorIndex].b) {
+ sIconPrimB -= primB;
+ } else {
+ sIconPrimB += primB;
+ }
+
+ envR = ABS_ALT(sIconEnvR - sIconEnvColors[sIconFlashColorIndex].r) / sIconFlashTimer;
+ envG = ABS_ALT(sIconEnvG - sIconEnvColors[sIconFlashColorIndex].g) / sIconFlashTimer;
+ envB = ABS_ALT(sIconEnvB - sIconEnvColors[sIconFlashColorIndex].b) / sIconFlashTimer;
+
+ if (sIconEnvR >= sIconEnvColors[sIconFlashColorIndex].r) {
+ sIconEnvR -= envR;
+ } else {
+ sIconEnvR += envR;
+ }
+
+ if (sIconEnvG >= sIconEnvColors[sIconFlashColorIndex].g) {
+ sIconEnvG -= envG;
+ } else {
+ sIconEnvG += envG;
+ }
+
+ if (sIconEnvB >= sIconEnvColors[sIconFlashColorIndex].b) {
+ sIconEnvB -= envB;
+ } else {
+ sIconEnvB += envB;
+ }
+
+ sIconFlashTimer--;
+ if (sIconFlashTimer == 0) {
+ sIconPrimR = sIconPrimColors[sIconFlashColorIndex].r;
+ sIconPrimG = sIconPrimColors[sIconFlashColorIndex].g;
+ sIconPrimB = sIconPrimColors[sIconFlashColorIndex].b;
+ sIconEnvR = sIconEnvColors[sIconFlashColorIndex].r;
+ sIconEnvG = sIconEnvColors[sIconFlashColorIndex].g;
+ sIconEnvB = sIconEnvColors[sIconFlashColorIndex].b;
+ sIconFlashTimer = 12;
+ sIconFlashColorIndex ^= 1;
+ }
+
+ gDPPipeSync(gfx++);
+ gDPSetCombineLERP(gfx++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE,
+ ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+ gDPSetPrimColor(gfx++, 0, 0, sIconPrimR, sIconPrimG, sIconPrimB, 255);
+ gDPSetEnvColor(gfx++, sIconEnvR, sIconEnvG, sIconEnvB, 255);
+
+ if (!play->pauseCtx.bombersNotebookOpen) {
+ gDPLoadTextureBlock_4b(gfx++, iconTexture, G_IM_FMT_I, 16, 16, 0, G_TX_NOMIRROR | G_TX_CLAMP,
+ G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+ gSPTextureRectangle(gfx++, x << 2, y << 2, (x + sCharTexSize) << 2, (y + sCharTexSize) << 2,
+ G_TX_RENDERTILE, 0, 0, sCharTexScale, sCharTexScale);
+ }
+
+ msgCtx->stateTimer++;
+ *gfxP = gfx;
+ }
+}
+
+void func_80147F18(PlayState* play, Gfx** gfxP, s16 arg2, s16 arg3) {
+ static Color_RGB16 D_801CFD10[] = {
+ { 0, 80, 200 },
+ { 50, 130, 255 },
+ };
+ static Color_RGB16 D_801CFD1C[] = {
+ { 0, 0, 0 },
+ { 0, 130, 255 },
+ };
+ static s16 D_801CFD28 = 0;
+ static s16 D_801CFD2C = 80;
+ static s16 D_801CFD30 = 200;
+ static s16 D_801CFD34 = 12;
+ static s16 D_801CFD38 = 0;
+ static s16 D_801CFD3C = 0;
+ static s16 D_801CFD40 = 0;
+ static s16 D_801CFD44 = 0;
+ Gfx* gfx;
+ MessageContext* msgCtx = &play->msgCtx;
+ s16 primR;
+ s16 primG;
+ s16 primB;
+ s16 envR;
+ s16 envG;
+ s16 envB;
+
+ gfx = *gfxP;
+
+ if (!msgCtx->textIsCredits) {
+ primR = ABS_ALT(D_801CFD28 - D_801CFD10[D_801CFD38].r) / D_801CFD34;
+ primG = ABS_ALT(D_801CFD2C - D_801CFD10[D_801CFD38].g) / D_801CFD34;
+ primB = ABS_ALT(D_801CFD30 - D_801CFD10[D_801CFD38].b) / D_801CFD34;
+
+ if (D_801CFD28 >= D_801CFD10[D_801CFD38].r) {
+ D_801CFD28 -= primR;
+ } else {
+ D_801CFD28 += primR;
+ }
+
+ if (D_801CFD2C >= D_801CFD10[D_801CFD38].g) {
+ D_801CFD2C -= primG;
+ } else {
+ D_801CFD2C += primG;
+ }
+
+ if (D_801CFD30 >= D_801CFD10[D_801CFD38].b) {
+ D_801CFD30 -= primB;
+ } else {
+ D_801CFD30 += primB;
+ }
+
+ envR = ABS_ALT(D_801CFD3C - D_801CFD1C[D_801CFD38].r) / D_801CFD34;
+ envG = ABS_ALT(D_801CFD40 - D_801CFD1C[D_801CFD38].g) / D_801CFD34;
+ envB = ABS_ALT(D_801CFD44 - D_801CFD1C[D_801CFD38].b) / D_801CFD34;
+
+ if (D_801CFD3C >= D_801CFD1C[D_801CFD38].r) {
+ D_801CFD3C -= envR;
+ } else {
+ D_801CFD3C += envR;
+ }
+
+ if (D_801CFD40 >= D_801CFD1C[D_801CFD38].g) {
+ D_801CFD40 -= envG;
+ } else {
+ D_801CFD40 += envG;
+ }
+
+ if (D_801CFD44 >= D_801CFD1C[D_801CFD38].b) {
+ D_801CFD44 -= envB;
+ } else {
+ D_801CFD44 += envB;
+ }
+
+ D_801CFD34--;
+ if (D_801CFD34 == 0) {
+ D_801CFD28 = D_801CFD10[D_801CFD38].r;
+ D_801CFD2C = D_801CFD10[D_801CFD38].g;
+ D_801CFD30 = D_801CFD10[D_801CFD38].b;
+ D_801CFD3C = D_801CFD1C[D_801CFD38].r;
+ D_801CFD40 = D_801CFD1C[D_801CFD38].g;
+ D_801CFD44 = D_801CFD1C[D_801CFD38].b;
+ D_801CFD34 = 12;
+ D_801CFD38 ^= 1;
+ }
+
+ gDPPipeSync(gfx++);
+ gDPSetRenderMode(gfx++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
+ gDPSetCombineMode(gfx++, G_CC_PRIMITIVE, G_CC_PRIMITIVE);
+ gDPSetPrimColor(gfx++, 0, 0, D_801CFD28, D_801CFD2C, D_801CFD30, 120);
+ gDPFillRectangle(gfx++, arg2 + 3, arg3, arg2 + 17, arg3 + 11);
+ gDPFillRectangle(gfx++, arg2 + 6, arg3 - 2, arg2 + 14, arg3 + 13);
+ gDPPipeSync(gfx++);
+
+ msgCtx->stateTimer++;
+ *gfxP = gfx++;
+ }
+}
+
+void func_80148558(PlayState* play, Gfx** gfxP, s16 arg2, s16 arg3) {
+ static Color_RGB16 D_801CFD48[] = {
+ { 0, 80, 200 },
+ { 50, 130, 255 },
+ };
+ static Color_RGB16 D_801CFD54[] = {
+ { 0, 0, 0 },
+ { 0, 130, 255 },
+ };
+ static s16 D_801CFD60 = 0;
+ static s16 D_801CFD64 = 80;
+ static s16 D_801CFD68 = 200;
+ static s16 D_801CFD6C = 12;
+ static s16 D_801CFD70 = 0;
+ static s16 D_801CFD74 = 0;
+ static s16 D_801CFD78 = 0;
+ static s16 D_801CFD7C = 0;
+ Gfx* gfx;
+ MessageContext* msgCtx = &play->msgCtx;
+ s16 primR;
+ s16 primG;
+ s16 primB;
+ s16 envR;
+ s16 envG;
+ s16 envB;
+
+ gfx = *gfxP;
+
+ if (!msgCtx->textIsCredits) {
+ primR = ABS_ALT(D_801CFD60 - D_801CFD48[D_801CFD70].r) / D_801CFD6C;
+ primG = ABS_ALT(D_801CFD64 - D_801CFD48[D_801CFD70].g) / D_801CFD6C;
+ primB = ABS_ALT(D_801CFD68 - D_801CFD48[D_801CFD70].b) / D_801CFD6C;
+
+ if (D_801CFD60 >= D_801CFD48[D_801CFD70].r) {
+ D_801CFD60 -= primR;
+ } else {
+ D_801CFD60 += primR;
+ }
+
+ if (D_801CFD64 >= D_801CFD48[D_801CFD70].g) {
+ D_801CFD64 -= primG;
+ } else {
+ D_801CFD64 += primG;
+ }
+
+ if (D_801CFD68 >= D_801CFD48[D_801CFD70].b) {
+ D_801CFD68 -= primB;
+ } else {
+ D_801CFD68 += primB;
+ }
+
+ envR = ABS_ALT(D_801CFD74 - D_801CFD54[D_801CFD70].r) / D_801CFD6C;
+ envG = ABS_ALT(D_801CFD78 - D_801CFD54[D_801CFD70].g) / D_801CFD6C;
+ envB = ABS_ALT(D_801CFD7C - D_801CFD54[D_801CFD70].b) / D_801CFD6C;
+
+ if (D_801CFD74 >= D_801CFD54[D_801CFD70].r) {
+ D_801CFD74 -= envR;
+ } else {
+ D_801CFD74 += envR;
+ }
+
+ if (D_801CFD78 >= D_801CFD54[D_801CFD70].g) {
+ D_801CFD78 -= envG;
+ } else {
+ D_801CFD78 += envG;
+ }
+
+ if (D_801CFD7C >= D_801CFD54[D_801CFD70].b) {
+ D_801CFD7C -= envB;
+ } else {
+ D_801CFD7C += envB;
+ }
+
+ D_801CFD6C--;
+ if (D_801CFD6C == 0) {
+ D_801CFD60 = D_801CFD48[D_801CFD70].r;
+ D_801CFD64 = D_801CFD48[D_801CFD70].g;
+ D_801CFD68 = D_801CFD48[D_801CFD70].b;
+ D_801CFD74 = D_801CFD54[D_801CFD70].r;
+ D_801CFD78 = D_801CFD54[D_801CFD70].g;
+ D_801CFD7C = D_801CFD54[D_801CFD70].b;
+ D_801CFD6C = 12;
+ D_801CFD70 ^= 1;
+ }
+
+ gDPPipeSync(gfx++);
+ gDPSetRenderMode(gfx++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
+ gDPSetCombineMode(gfx++, G_CC_PRIMITIVE, G_CC_PRIMITIVE);
+ gDPSetPrimColor(gfx++, 0, 0, D_801CFD60, D_801CFD64, D_801CFD68, 120);
+ gDPFillRectangle(gfx++, arg2 + 3, arg3, arg2 + 29, arg3 + 11);
+ gDPFillRectangle(gfx++, arg2 + 6, arg3 - 2, arg2 + 26, arg3 + 13);
+ gDPPipeSync(gfx++);
+
+ msgCtx->stateTimer++;
+ *gfxP = gfx++;
+ }
+}
+
+void Message_HandleChoiceSelection(PlayState* play, u8 numChoices) {
+ static s16 sAnalogStickHeld = false;
+ MessageContext* msgCtx = &play->msgCtx;
+ Input* input = CONTROLLER1(&play->state);
+
+ if ((input->rel.stick_y >= 30) && !sAnalogStickHeld) {
+ sAnalogStickHeld = true;
msgCtx->choiceIndex--;
if (msgCtx->choiceIndex > 128) {
msgCtx->choiceIndex = 0;
} else {
Audio_PlaySfx(NA_SE_SY_CURSOR);
}
- return;
- } else if ((curInput->rel.stick_y < -29) && held == 0) {
- held = 1;
+ } else if ((input->rel.stick_y <= -30) && !sAnalogStickHeld) {
+ sAnalogStickHeld = true;
msgCtx->choiceIndex++;
- if (msgCtx->choiceIndex > arg1) {
- msgCtx->choiceIndex = arg1;
+ if (msgCtx->choiceIndex > numChoices) {
+ msgCtx->choiceIndex = numChoices;
} else {
Audio_PlaySfx(NA_SE_SY_CURSOR);
}
- return;
- } else {
- if (ABS_ALT(curInput->rel.stick_y) < 30) {
- held = 0;
- }
+ } else if (ABS_ALT(input->rel.stick_y) < 30) {
+ sAnalogStickHeld = false;
}
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80148B98.s")
-#endif
-void func_80148CBC(PlayState* play, UNK_PTR puParm2, u8 arg2) {
+void func_80148CBC(PlayState* play, Gfx** gfxP, u8 arg2) {
MessageContext* msgCtx = &play->msgCtx;
- msgCtx->unk11FF4 = 0x30;
+ msgCtx->textPosX = 48;
if (arg2 == 1) {
- msgCtx->unk11FF6 = msgCtx->unk11FFE[1 + msgCtx->choiceIndex];
+ msgCtx->textPosY = msgCtx->unk11FFE[1 + msgCtx->choiceIndex];
} else {
- msgCtx->unk11FF6 = msgCtx->unk11FFE[msgCtx->choiceIndex];
+ msgCtx->textPosY = msgCtx->unk11FFE[msgCtx->choiceIndex];
}
- func_80147818(play, puParm2, msgCtx->unk11FF4, msgCtx->unk11FF6);
+ Message_DrawTextboxIcon(play, gfxP, msgCtx->textPosX, msgCtx->textPosY);
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80148D64.s")
+void func_80148D64(PlayState* play) {
+ static s16 sAnalogStickHeld = false;
+ MessageContext* msgCtx = &play->msgCtx;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80149048.s")
+ if (play->msgCtx.stickAdjY <= -30) {
+ msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2]--;
+ if (msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] < '0') {
+ msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] = '9';
+ }
+ Font_LoadCharNES(play, msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2],
+ msgCtx->unk120C4 + (msgCtx->unk120C2 << 7));
+ Audio_PlaySfx(NA_SE_SY_RUPY_COUNT);
+ } else if (msgCtx->stickAdjY >= 30) {
+ msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2]++;
+ if (msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] > '9') {
+ msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] = '0';
+ }
+ Font_LoadCharNES(play, msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2],
+ msgCtx->unk120C4 + (msgCtx->unk120C2 << 7));
+ Audio_PlaySfx(NA_SE_SY_RUPY_COUNT);
+ } else if ((msgCtx->stickAdjX >= 30) && !sAnalogStickHeld) {
+ sAnalogStickHeld = true;
+ msgCtx->unk120C2++;
+ if (msgCtx->unk120C2 > 2) {
+ msgCtx->unk120C2 = 2;
+ } else {
+ Audio_PlaySfx(NA_SE_SY_CURSOR);
+ }
+ } else if ((msgCtx->stickAdjX <= -30) && !sAnalogStickHeld) {
+ sAnalogStickHeld = true;
+ msgCtx->unk120C2--;
+ if (msgCtx->unk120C2 < 0) {
+ msgCtx->unk120C2 = 0;
+ } else {
+ Audio_PlaySfx(NA_SE_SY_CURSOR);
+ }
+ } else {
+ sAnalogStickHeld = false;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_801491DC.s")
+ msgCtx->bankRupeesSelected = (msgCtx->decodedBuffer.schar[msgCtx->unk120C0] - '0') * 100;
+ msgCtx->bankRupeesSelected += (msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + 1] - '0') * 10;
+ msgCtx->bankRupeesSelected += msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + 2] - '0';
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80149454.s")
+void func_80149048(PlayState* play) {
+ MessageContext* msgCtx = &play->msgCtx;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_801496C8.s")
+ if (msgCtx->stickAdjY <= -30) {
+ msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2]--;
+ if (msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] < '0') {
+ msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] = '9';
+ }
+ Font_LoadCharNES(play, msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2],
+ msgCtx->unk120C4 + (msgCtx->unk120C2 << 7));
+ Audio_PlaySfx(NA_SE_SY_RUPY_COUNT);
+ } else if (msgCtx->stickAdjY >= 30) {
+ msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2]++;
+ if (msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] > '9') {
+ msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] = '0';
+ }
+ Font_LoadCharNES(play, msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2],
+ msgCtx->unk120C4 + (msgCtx->unk120C2 << 7));
+ Audio_PlaySfx(NA_SE_SY_RUPY_COUNT);
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014995C.s")
+ msgCtx->bankRupeesSelected = (msgCtx->decodedBuffer.schar[msgCtx->unk120C0] - '0') * 10;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80149C18.s")
+void func_801491DC(PlayState* play) {
+ static s16 sAnalogStickHeld = false;
+ MessageContext* msgCtx = &play->msgCtx;
+
+ if (msgCtx->stickAdjY <= -30) {
+ msgCtx->unk12054[msgCtx->unk120C2]--;
+ if (msgCtx->unk12054[msgCtx->unk120C2] <= 0) {
+ msgCtx->unk12054[msgCtx->unk120C2] = 5;
+ }
+ msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] = msgCtx->unk12054[msgCtx->unk120C2] + '0';
+ Font_LoadCharNES(play, msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2],
+ msgCtx->unk120C4 + (msgCtx->unk120C2 << 7));
+ Audio_PlaySfx(NA_SE_SY_RUPY_COUNT);
+ } else if (msgCtx->stickAdjY >= 30) {
+ msgCtx->unk12054[msgCtx->unk120C2]++;
+ if (msgCtx->unk12054[msgCtx->unk120C2] > 5) {
+ msgCtx->unk12054[msgCtx->unk120C2] = 1;
+ }
+ msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] = msgCtx->unk12054[msgCtx->unk120C2] + '0';
+ Font_LoadCharNES(play, msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2],
+ msgCtx->unk120C4 + (msgCtx->unk120C2 << 7));
+ Audio_PlaySfx(NA_SE_SY_RUPY_COUNT);
+ } else if ((msgCtx->stickAdjX >= 30) && !sAnalogStickHeld) {
+ sAnalogStickHeld = true;
+ msgCtx->unk120C2++;
+ if (msgCtx->unk120C2 > 4) {
+ msgCtx->unk120C2 = 4;
+ } else {
+ Audio_PlaySfx(NA_SE_SY_CURSOR);
+ }
+ } else if ((msgCtx->stickAdjX <= -30) && !sAnalogStickHeld) {
+ sAnalogStickHeld = true;
+ msgCtx->unk120C2--;
+ if (msgCtx->unk120C2 < 0) {
+ msgCtx->unk120C2 = 0;
+ } else {
+ Audio_PlaySfx(NA_SE_SY_CURSOR);
+ }
+ } else {
+ sAnalogStickHeld = false;
+ }
+}
+
+void func_80149454(PlayState* play) {
+ static s16 sAnalogStickHeld = false;
+ MessageContext* msgCtx = &play->msgCtx;
+
+ if (msgCtx->stickAdjY <= -30) {
+ msgCtx->unk12054[msgCtx->unk120C2]--;
+ if (msgCtx->unk12054[msgCtx->unk120C2] < 0) {
+ msgCtx->unk12054[msgCtx->unk120C2] = 9;
+ }
+ msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] = msgCtx->unk12054[msgCtx->unk120C2] + '0';
+ Font_LoadCharNES(play, msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2],
+ msgCtx->unk120C4 + (msgCtx->unk120C2 << 7));
+ Audio_PlaySfx(NA_SE_SY_RUPY_COUNT);
+ } else if (msgCtx->stickAdjY >= 30) {
+ msgCtx->unk12054[msgCtx->unk120C2]++;
+ if (msgCtx->unk12054[msgCtx->unk120C2] > 9) {
+ msgCtx->unk12054[msgCtx->unk120C2] = 0;
+ }
+ msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] = msgCtx->unk12054[msgCtx->unk120C2] + '0';
+ Font_LoadCharNES(play, msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2],
+ msgCtx->unk120C4 + (msgCtx->unk120C2 << 7));
+ Audio_PlaySfx(NA_SE_SY_RUPY_COUNT);
+ } else if ((msgCtx->stickAdjX >= 30) && !sAnalogStickHeld) {
+ sAnalogStickHeld = true;
+ msgCtx->unk120C2++;
+ if (msgCtx->unk120C2 > 2) {
+ msgCtx->unk120C2 = 2;
+ } else {
+ Audio_PlaySfx(NA_SE_SY_CURSOR);
+ }
+ } else if ((msgCtx->stickAdjX <= -30) && !sAnalogStickHeld) {
+ sAnalogStickHeld = true;
+ msgCtx->unk120C2--;
+ if (msgCtx->unk120C2 < 0) {
+ msgCtx->unk120C2 = 0;
+ } else {
+ Audio_PlaySfx(NA_SE_SY_CURSOR);
+ }
+ } else {
+ sAnalogStickHeld = false;
+ }
+}
+
+void func_801496C8(PlayState* play) {
+ static s16 sAnalogStickHeld = false;
+ MessageContext* msgCtx = &play->msgCtx;
+
+ if (play->msgCtx.stickAdjY <= -30) {
+ msgCtx->unk12054[msgCtx->unk120C2]--;
+ if (msgCtx->unk12054[msgCtx->unk120C2] < 0) {
+ msgCtx->unk12054[msgCtx->unk120C2] = 3;
+ }
+ msgCtx->decodedBuffer.wchar[msgCtx->unk120C0 + msgCtx->unk120C2] = msgCtx->unk12054[msgCtx->unk120C2] + 0x824F;
+ Font_LoadChar(play, msgCtx->decodedBuffer.wchar[msgCtx->unk120C0 + msgCtx->unk120C2],
+ msgCtx->unk120C4 + (msgCtx->unk120C2 << 7));
+ Audio_PlaySfx(NA_SE_SY_RUPY_COUNT);
+ } else if (msgCtx->stickAdjY >= 30) {
+ msgCtx->unk12054[msgCtx->unk120C2]++;
+ if (msgCtx->unk12054[msgCtx->unk120C2] >= 4) {
+ msgCtx->unk12054[msgCtx->unk120C2] = 0;
+ }
+ msgCtx->decodedBuffer.wchar[msgCtx->unk120C0 + msgCtx->unk120C2] = msgCtx->unk12054[msgCtx->unk120C2] + 0x824F;
+ Font_LoadChar(play, msgCtx->decodedBuffer.wchar[msgCtx->unk120C0 + msgCtx->unk120C2],
+ msgCtx->unk120C4 + (msgCtx->unk120C2 << 7));
+ Audio_PlaySfx(NA_SE_SY_RUPY_COUNT);
+ } else if ((msgCtx->stickAdjX >= 30) && !sAnalogStickHeld) {
+ sAnalogStickHeld = true;
+ msgCtx->unk120C2++;
+ if (msgCtx->unk120C2 > 5) {
+ msgCtx->unk120C2 = 5;
+ } else {
+ Audio_PlaySfx(NA_SE_SY_CURSOR);
+ }
+ } else if ((msgCtx->stickAdjX <= -30) && !sAnalogStickHeld) {
+ sAnalogStickHeld = true;
+ msgCtx->unk120C2--;
+ if (msgCtx->unk120C2 < 0) {
+ msgCtx->unk120C2 = 0;
+ } else {
+ Audio_PlaySfx(NA_SE_SY_CURSOR);
+ }
+ } else {
+ sAnalogStickHeld = false;
+ }
+}
+
+void Message_DrawTextChar(PlayState* play, TexturePtr texture, Gfx** gfxP) {
+ MessageContext* msgCtx = &play->msgCtx;
+ Gfx* gfx = *gfxP;
+ s16 x = msgCtx->textPosX;
+ s16 y = msgCtx->textPosY;
+
+ gDPPipeSync(gfx++);
+
+ gDPLoadTextureBlock_4b(gfx++, texture, G_IM_FMT_I, 16, 16, 0, G_TX_NOMIRROR | G_TX_CLAMP,
+ G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+
+ if ((msgCtx->textBoxType != TEXTBOX_TYPE_5) && (msgCtx->textBoxType != TEXTBOX_TYPE_D) &&
+ !play->pauseCtx.bombersNotebookOpen) {
+ gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, msgCtx->textColorAlpha);
+ gSPTextureRectangle(gfx++, (x + 1) << 2, (y + 1) << 2, (x + sCharTexSize + 1) << 2, (y + sCharTexSize + 1) << 2,
+ G_TX_RENDERTILE, 0, 0, sCharTexScale, sCharTexScale);
+ gDPPipeSync(gfx++);
+ }
+
+ gDPSetPrimColor(gfx++, 0, 0, msgCtx->textColorR, msgCtx->textColorG, msgCtx->textColorB, msgCtx->textColorAlpha);
+ gSPTextureRectangle(gfx++, x << 2, y << 2, (x + sCharTexSize) << 2, (y + sCharTexSize) << 2, G_TX_RENDERTILE, 0, 0,
+ sCharTexScale, sCharTexScale);
+ *gfxP = gfx++;
+}
+
+s16 sTextboxWidth = 256;
+s16 sTextboxHeight = 64;
+s16 sTextboxTexWidth = 1024;
+s16 sTextboxTexHeight = 1024;
+
+f32 D_801CFDA4[] = { 0.6f, 0.75f, 0.9f, 1.0f, 1.05f, 1.1f, 1.05f, 1.0f, 1.0f };
+f32 D_801CFDC8[] = { 0.6f, 0.75f, 0.9f, 1.0f, 1.05f, 1.1f, 1.05f, 1.0f, 1.0f };
+
+// resizes textboxes when opening them
+void Message_GrowTextbox(PlayState* play) {
+ MessageContext* msgCtx = &play->msgCtx;
+
+ if (!play->pauseCtx.bombersNotebookOpen) {
+ sTextboxWidth = D_801CFDA4[msgCtx->stateTimer] * 256.0f;
+ sTextboxTexWidth = 1024.0f / D_801CFDA4[msgCtx->stateTimer];
+ sTextboxHeight = D_801CFDC8[msgCtx->stateTimer] * 64.0f;
+ sTextboxTexHeight = 1024.0f / D_801CFDC8[msgCtx->stateTimer];
+ msgCtx->textboxY = msgCtx->textboxYTarget + ((64 - sTextboxHeight) / 2);
+ msgCtx->textboxColorAlphaCurrent += msgCtx->textboxColorAlphaTarget / 8;
+ msgCtx->stateTimer++;
+ } else {
+ msgCtx->stateTimer = 8;
+ sTextboxWidth = 512;
+ sTextboxTexWidth = 512;
+ sTextboxHeight = 89;
+ sTextboxTexHeight = 731;
+ msgCtx->textboxY = msgCtx->textboxYTarget + ((90 - sTextboxHeight) / 2);
+ }
+
+ if (msgCtx->stateTimer == 8) {
+ // Reached the end
+ msgCtx->textboxX = msgCtx->textboxXTarget;
+ msgCtx->textboxY = msgCtx->textboxYTarget;
+ msgCtx->msgMode = MSGMODE_TEXT_STARTING;
+ msgCtx->textboxColorAlphaCurrent = msgCtx->textboxColorAlphaTarget;
+ }
+
+ if (!play->pauseCtx.bombersNotebookOpen) {
+ msgCtx->textboxX = msgCtx->textboxXTarget + ((256 - sTextboxWidth) / 2);
+ } else {
+ msgCtx->textboxX = msgCtx->textboxXTarget + ((512 - sTextboxWidth) / 2);
+ }
+}
void Message_FindMessage(PlayState* play, u16 textId) {
MessageContext* msgCtx = &play->msgCtx;
@@ -223,13 +807,1075 @@ void Message_FindMessage(PlayState* play, u16 textId) {
font->messageEnd = nextSegment - foundSegment;
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80149F74.s")
+Color_RGB8 D_801CFDEC[] = {
+ { 0, 255, 0 }, { 0, 0, 255 }, { 255, 255, 255 }, { 255, 0, 0 },
+ { 255, 0, 255 }, { 255, 255, 255 }, { 255, 100, 0 }, { 0, 0, 0 },
+};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014AAD0.s")
+s16 D_801CFE04[] = {
+ 150, // ITEM_SONG_SONATA
+ 255, // ITEM_SONG_LULLABY
+ 100, // ITEM_SONG_NOVA
+ 255, // ITEM_SONG_ELEGY
+ 255, // ITEM_SONG_OATH
+ 255, // ITEM_SONG_SARIA
+ 255, // ITEM_SONG_TIME
+ 255, // ITEM_SONG_HEALING
+ 255, // ITEM_SONG_EPONA
+ 255, // ITEM_SONG_SOARING
+ 255, // ITEM_SONG_STORMS
+ 255 // ITEM_SONG_SUN
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014ADBC.s")
+};
+s16 D_801CFE1C[] = {
+ 255, // ITEM_SONG_SONATA
+ 80, // ITEM_SONG_LULLABY
+ 150, // ITEM_SONG_NOVA
+ 160, // ITEM_SONG_ELEGY
+ 100, // ITEM_SONG_OATH
+ 240, // ITEM_SONG_SARIA
+ 255, // ITEM_SONG_TIME
+ 255, // ITEM_SONG_HEALING
+ 255, // ITEM_SONG_EPONA
+ 255, // ITEM_SONG_SOARING
+ 255, // ITEM_SONG_STORMS
+ 255 // ITEM_SONG_SUN
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014C70C.s")
+};
+s16 D_801CFE34[] = {
+ 100, // ITEM_SONG_SONATA
+ 40, // ITEM_SONG_LULLABY
+ 255, // ITEM_SONG_NOVA
+ 0, // ITEM_SONG_ELEGY
+ 255, // ITEM_SONG_OATH
+ 100, // ITEM_SONG_SARIA
+ 255, // ITEM_SONG_TIME
+ 255, // ITEM_SONG_HEALING
+ 255, // ITEM_SONG_EPONA
+ 255, // ITEM_SONG_SOARING
+ 255, // ITEM_SONG_STORMS
+ 255 // ITEM_SONG_SUN
+};
+
+static TexturePtr sStrayFairyIconTextures[] = {
+ gStrayFairyWoodfallIconTex,
+ gStrayFairySnowheadIconTex,
+ gStrayFairyGreatBayIconTex,
+ gStrayFairyStoneTowerIconTex,
+};
+
+static Color_RGB8 sStrayFairyIconPrimColors[] = {
+ { 255, 110, 160 },
+ { 90, 255, 100 },
+ { 120, 255, 255 },
+ { 245, 245, 90 },
+};
+
+static Color_RGB8 sStrayFairyIconEnvColors[] = {
+ { 255, 255, 255 },
+ { 255, 255, 255 },
+ { 255, 255, 255 },
+ { 225, 170, 0 },
+};
+
+void Message_DrawItemIcon(PlayState* play, Gfx** gfxP) {
+ MessageContext* msgCtx = &play->msgCtx;
+ Gfx* gfx = *gfxP;
+ s32 index;
+
+ msgCtx->unk12016 = msgCtx->unk12014;
+
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ Audio_PlaySfx(NA_SE_NONE);
+ }
+
+ gDPPipeSync(gfx++);
+ gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, msgCtx->textColorAlpha);
+
+ if (msgCtx->itemId == ITEM_RECOVERY_HEART) {
+ gDPPipeSync(gfx++);
+ gDPSetPrimColor(gfx++, 0, 0, 255, 0, 0, msgCtx->textColorAlpha);
+ gDPSetEnvColor(gfx++, 0, 80, 0, 255);
+ gDPLoadTextureBlock(gfx++, gHeartFullTex, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+ } else if ((msgCtx->itemId >= ITEM_RUPEE_GREEN) && (msgCtx->itemId <= ITEM_RUPEE_HUGE)) {
+ index = msgCtx->itemId - ITEM_RUPEE_GREEN;
+ gDPPipeSync(gfx++);
+ gDPSetPrimColor(gfx++, 0, 0, D_801CFDEC[index].r, D_801CFDEC[index].g, D_801CFDEC[index].b,
+ msgCtx->textColorAlpha);
+ gDPSetEnvColor(gfx++, 0, 80, 0, 255);
+ gDPLoadTextureBlock(gfx++, gRupeeCounterIconTex, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+ } else if (msgCtx->itemId == ITEM_STRAY_FAIRIES) {
+ msgCtx->unk12016 = 0x18;
+ gDPPipeSync(gfx++);
+ gDPSetPrimColor(gfx++, 0, 0, sStrayFairyIconPrimColors[((void)0, gSaveContext.dungeonIndex)].r,
+ sStrayFairyIconPrimColors[((void)0, gSaveContext.dungeonIndex)].g,
+ sStrayFairyIconPrimColors[((void)0, gSaveContext.dungeonIndex)].b, msgCtx->textColorAlpha);
+ gDPSetEnvColor(gfx++, sStrayFairyIconEnvColors[((void)0, gSaveContext.dungeonIndex)].r,
+ sStrayFairyIconEnvColors[((void)0, gSaveContext.dungeonIndex)].g,
+ sStrayFairyIconEnvColors[((void)0, gSaveContext.dungeonIndex)].b, 0);
+ gDPLoadTextureBlock_4b(gfx++, gStrayFairyGlowingCircleIconTex, G_IM_FMT_I, 32, 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(gfx++, msgCtx->unk12010 << 2, msgCtx->unk12012 << 2,
+ (msgCtx->unk12010 + msgCtx->unk12014) << 2, (msgCtx->unk12012 + msgCtx->unk12016) << 2,
+ G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
+ gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, msgCtx->textColorAlpha);
+ gDPLoadTextureBlock(gfx++, sStrayFairyIconTextures[((void)0, gSaveContext.dungeonIndex)], G_IM_FMT_RGBA,
+ G_IM_SIZ_32b, 32, 24, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK,
+ G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+ } else if ((msgCtx->itemId >= ITEM_SONG_SONATA) && (msgCtx->itemId <= ITEM_SONG_SUN)) {
+ index = msgCtx->itemId - ITEM_SONG_SONATA;
+ gDPSetPrimColor(gfx++, 0, 0, D_801CFE04[index], D_801CFE1C[index], D_801CFE34[index], msgCtx->textColorAlpha);
+ gDPLoadTextureBlock(gfx++, msgCtx->textboxSegment + 0x1000, 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);
+ msgCtx->unk12016 = 0x18;
+ } else if (msgCtx->itemId == ITEM_CC) {
+ gDPPipeSync(gfx++);
+ gDPSetPrimColor(gfx++, 0, 0, 255, 255, 0, msgCtx->textColorAlpha);
+ gDPSetEnvColor(gfx++, 0, 0, 0, 255);
+ gDPLoadTextureBlock(gfx++, msgCtx->textboxSegment + 0x1000, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 32, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
+ G_TX_NOLOD);
+ } else if (msgCtx->itemId >= ITEM_B8) {
+ gDPLoadTextureBlock(gfx++, msgCtx->textboxSegment + 0x1000, G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, 32, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
+ G_TX_NOLOD);
+ } else if (msgCtx->itemId >= ITEM_SKULL_TOKEN) {
+ gDPLoadTextureBlock(gfx++, msgCtx->textboxSegment + 0x1000, 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);
+ } else {
+ msgCtx->unk12016 = msgCtx->unk12014;
+ gDPLoadTextureBlock(gfx++, msgCtx->textboxSegment + 0x1000, G_IM_FMT_RGBA, G_IM_SIZ_32b, 32, 32, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
+ G_TX_NOLOD);
+ }
+
+ gSPTextureRectangle(gfx++, msgCtx->unk12010 << 2, msgCtx->unk12012 << 2, (msgCtx->unk12010 + msgCtx->unk12014) << 2,
+ (msgCtx->unk12012 + msgCtx->unk12016) << 2, G_TX_RENDERTILE, 0, 0, D_801F6B08, D_801F6B08);
+ gDPPipeSync(gfx++);
+ gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0);
+
+ if (!play->pauseCtx.bombersNotebookOpen) {
+ msgCtx->textPosX += 16;
+ } else {
+ msgCtx->textPosX += 50;
+ }
+ *gfxP = gfx;
+}
+
+void Message_HandleOcarina(PlayState* play) {
+ MessageContext* msgCtx = &play->msgCtx;
+
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ play->msgCtx.ocarinaMode = OCARINA_MODE_ACTIVE;
+ if (msgCtx->ocarinaAction == OCARINA_ACTION_SCARECROW_LONG_RECORDING) {
+ msgCtx->msgMode = MSGMODE_SCARECROW_LONG_RECORDING_START;
+ } else if (msgCtx->ocarinaAction == OCARINA_ACTION_SCARECROW_LONG_DEMONSTRATION) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
+ msgCtx->ocarinaStaff->pos = 0;
+ sOcarinaButtonIndexBufPos = sOcarinaButtonIndexBufLen = 0;
+ Message_ResetOcarinaButtonState(play);
+ msgCtx->stateTimer = 3;
+ msgCtx->msgMode = MSGMODE_SCARECROW_LONG_DEMONSTRATION;
+ AudioOcarina_SetPlaybackSong(OCARINA_SONG_SCARECROW_LONG + 1, 1);
+ } else if (msgCtx->ocarinaAction == OCARINA_ACTION_SCARECROW_SPAWN_RECORDING) {
+ msgCtx->msgMode = MSGMODE_SCARECROW_SPAWN_RECORDING_START;
+ } else if (msgCtx->ocarinaAction == OCARINA_ACTION_SCARECROW_SPAWN_DEMONSTRATION) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
+ msgCtx->ocarinaStaff->pos = 0;
+ sOcarinaButtonIndexBufPos = sOcarinaButtonIndexBufLen = 0;
+ Message_ResetOcarinaButtonState(play);
+ msgCtx->stateTimer = 3;
+ msgCtx->msgMode = MSGMODE_SCARECROW_SPAWN_DEMONSTRATION;
+ AudioOcarina_SetPlaybackSong(OCARINA_SONG_SCARECROW_SPAWN + 1, 1);
+ } else if (msgCtx->ocarinaAction == OCARINA_ACTION_37) {
+ msgCtx->msgMode = MSGMODE_2F;
+ } else if (msgCtx->ocarinaAction == OCARINA_ACTION_3A) {
+ msgCtx->msgMode = MSGMODE_32;
+ } else if ((msgCtx->ocarinaAction >= OCARINA_ACTION_TIMED_PROMPT_SONATA) &&
+ (msgCtx->ocarinaAction <= OCARINA_ACTION_TIMED_PROMPT_STORMS)) {
+ msgCtx->msgMode = MSGMODE_35;
+ } else if (((msgCtx->ocarinaAction >= OCARINA_ACTION_DEMONSTRATE_SONATA) &&
+ (msgCtx->ocarinaAction <= OCARINA_ACTION_DEMONSTRATE_GORON_LULLABY_INTRO)) ||
+ (msgCtx->ocarinaAction == OCARINA_ACTION_3B) || (msgCtx->ocarinaAction == OCARINA_ACTION_3C) ||
+ (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_FIRST_HALF) ||
+ (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_EVAN_PART2_FIRST_HALF) ||
+ (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_SECOND_HALF) ||
+ (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_EVAN_PART2_SECOND_HALF)) {
+ msgCtx->msgMode = MSGMODE_SONG_DEMONSTRATION_STARTING;
+ } else if ((msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF) ||
+ (msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF) ||
+ (msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN) ||
+ (msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_WIND_FISH_GORON) ||
+ (msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_WIND_FISH_ZORA) ||
+ (msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_WIND_FISH_DEKU)) {
+ msgCtx->msgMode = MSGMODE_SONG_PROMPT_STARTING;
+ } else if ((msgCtx->ocarinaAction == OCARINA_ACTION_0) || (msgCtx->ocarinaAction == OCARINA_ACTION_FREE_PLAY) ||
+ (msgCtx->ocarinaAction >= OCARINA_ACTION_CHECK_TIME)) {
+ msgCtx->msgMode = MSGMODE_OCARINA_STARTING;
+ } else {
+ msgCtx->msgMode = MSGMODE_SONG_PROMPT_STARTING;
+ }
+ }
+}
+
+Color_RGB16 D_801CFE74[] = {
+ { 255, 120, 0 }, { 70, 255, 80 }, { 80, 110, 255 }, { 255, 255, 30 },
+ { 90, 180, 255 }, { 210, 100, 255 }, { 170, 170, 170 }, { 255, 130, 30 },
+};
+Color_RGB16 D_801CFEA4[] = {
+ { 255, 60, 60 }, { 70, 255, 80 }, { 80, 90, 255 }, { 255, 255, 50 },
+ { 80, 150, 255 }, { 255, 150, 180 }, { 170, 170, 170 }, { 255, 130, 30 },
+};
+Color_RGB16 D_801CFED4[] = {
+ { 255, 60, 60 }, { 70, 255, 80 }, { 80, 90, 255 }, { 255, 255, 50 },
+ { 80, 150, 255 }, { 255, 150, 180 }, { 180, 180, 200 }, { 255, 130, 30 },
+};
+Color_RGB16 D_801CFF04[] = {
+ { 195, 0, 0 }, { 70, 255, 80 }, { 80, 90, 255 }, { 255, 255, 50 },
+ { 80, 150, 255 }, { 255, 150, 180 }, { 170, 170, 170 }, { 255, 130, 30 },
+};
+Color_RGB16 D_801CFF34[] = {
+ { 255, 60, 60 }, { 110, 170, 255 }, { 80, 90, 255 }, { 255, 255, 50 },
+ { 80, 150, 255 }, { 255, 150, 180 }, { 170, 170, 170 }, { 255, 130, 30 },
+};
+
+u8 D_801CFF64[] = { 2, 1, 3, 6, 6, 6, 3, 3, 3, 3, 1, 6 };
+
+#define MESSAGE_ITEM_NONE 9999
+
+void Message_DrawTextDefault(PlayState* play, Gfx** gfxP) {
+ MessageContext* msgCtx = &play->msgCtx;
+ u16 j;
+ Font* font = &play->msgCtx.font;
+ u16 i;
+ u16 charTexIndex;
+ Gfx* gfx = *gfxP;
+ u16 character;
+ s16 sp130;
+ s16 sp12E;
+ s16 sp12C;
+ s16 sp12A;
+ u16 lookAheadCharacter;
+
+ play->msgCtx.textPosX = play->msgCtx.unk11F1A[0] + play->msgCtx.unk11FF8;
+ play->msgCtx.textPosY = play->msgCtx.unk11FFA;
+
+ sp130 = 0;
+ if (play->msgCtx.itemId != MESSAGE_ITEM_NONE) {
+ Message_DrawItemIcon(play, &gfx);
+ }
+ msgCtx->textColorR = msgCtx->unk120C8;
+ msgCtx->textColorG = msgCtx->unk120CA;
+ msgCtx->textColorB = msgCtx->unk120CC;
+
+ charTexIndex = 0;
+
+ for (i = 0; i < msgCtx->textDrawPos; i++) {
+ character = msgCtx->decodedBuffer.wchar[i];
+
+ switch (character) {
+ case 0x2000:
+ if (play->pauseCtx.bombersNotebookOpen || (msgCtx->textBoxType == TEXTBOX_TYPE_D)) {
+ msgCtx->textColorR = msgCtx->textColorG = msgCtx->textColorB = 0;
+ } else if (msgCtx->textBoxType == TEXTBOX_TYPE_5) {
+ msgCtx->textColorR = msgCtx->textColorG = msgCtx->textColorB = 0;
+ } else {
+ msgCtx->textColorR = msgCtx->textColorG = msgCtx->textColorB = 255;
+ }
+ if ((i + 1) == msgCtx->textDrawPos) {
+ msgCtx->textDrawPos++;
+ }
+ break;
+
+ case 0x2001:
+ case 0x2002:
+ case 0x2003:
+ case 0x2004:
+ case 0x2005:
+ case 0x2006:
+ case 0x2007:
+ case 0x2008:
+ if ((msgCtx->msgMode >= MSGMODE_NEW_CYCLE_0) && (msgCtx->msgMode <= MSGMODE_NEW_CYCLE_2) &&
+ (character == 0x2002)) {
+ msgCtx->textDrawPos = msgCtx->decodedTextLen;
+ if (msgCtx->unk120D6) {
+ msgCtx->unk120D4 += 25;
+ if (msgCtx->unk120D4 >= 100) {
+ msgCtx->unk120D6 = false;
+ }
+ } else {
+ msgCtx->unk120D4 -= 25;
+ if (msgCtx->unk120D4 <= -100) {
+ msgCtx->unk120D6 = true;
+ }
+ }
+
+ if (D_801CFE74[(s16)(character - 0x2001)].r + msgCtx->unk120D4 < 0) {
+ msgCtx->textColorR = 0;
+ } else {
+ msgCtx->textColorR = D_801CFE74[(s16)(character - 0x2001)].r + msgCtx->unk120D4;
+ }
+ if (D_801CFE74[(s16)(character - 0x2001)].g + msgCtx->unk120D4 >= 255) {
+ msgCtx->textColorG = D_801CFE74[(s16)(character - 0x2001)].g;
+ } else {
+ msgCtx->textColorG = D_801CFE74[(s16)(character - 0x2001)].g + msgCtx->unk120D4;
+ }
+ if (D_801CFE74[(s16)(character - 0x2001)].b + msgCtx->unk120D4 < 0) {
+ msgCtx->textColorB = 0;
+ } else {
+ msgCtx->textColorB = D_801CFE74[(s16)(character - 0x2001)].b + msgCtx->unk120D4;
+ }
+ } else if (play->pauseCtx.bombersNotebookOpen) {
+ msgCtx->textColorR = D_801CFF34[(s16)(character - 0x2001)].r;
+ msgCtx->textColorG = D_801CFF34[(s16)(character - 0x2001)].g;
+ msgCtx->textColorB = D_801CFF34[(s16)(character - 0x2001)].b;
+ } else if (msgCtx->textBoxType == TEXTBOX_TYPE_1) {
+ msgCtx->textColorR = D_801CFE74[(s16)(character - 0x2001)].r;
+ msgCtx->textColorG = D_801CFE74[(s16)(character - 0x2001)].g;
+ msgCtx->textColorB = D_801CFE74[(s16)(character - 0x2001)].b;
+ } else if (msgCtx->textBoxType == TEXTBOX_TYPE_D) {
+ msgCtx->textColorR = D_801CFF04[(s16)(character - 0x2001)].r;
+ msgCtx->textColorG = D_801CFF04[(s16)(character - 0x2001)].g;
+ msgCtx->textColorB = D_801CFF04[(s16)(character - 0x2001)].b;
+ } else {
+ msgCtx->textColorR = D_801CFEA4[(s16)(character - 0x2001)].r;
+ msgCtx->textColorG = D_801CFEA4[(s16)(character - 0x2001)].g;
+ msgCtx->textColorB = D_801CFEA4[(s16)(character - 0x2001)].b;
+ }
+
+ if ((i + 1) == msgCtx->textDrawPos) {
+ msgCtx->textDrawPos++;
+ }
+ break;
+
+ case 0x20: // ` `
+ msgCtx->textPosX += 6;
+ break;
+
+ case 0xA:
+ msgCtx->textPosY += msgCtx->unk11FFC;
+ // fallthrough
+ case 0xC:
+ sp130++;
+ msgCtx->textPosX = msgCtx->unk11F1A[sp130] + msgCtx->unk11FF8;
+ if (msgCtx->choiceNum == 1) {
+ if (!play->pauseCtx.bombersNotebookOpen) {
+ msgCtx->textPosX += 32;
+ } else {
+ msgCtx->textPosX += 57;
+ }
+ } else if (msgCtx->choiceNum == 2) {
+ if (!play->pauseCtx.bombersNotebookOpen) {
+ msgCtx->textPosX += 22;
+ } else {
+ msgCtx->textPosX += 57;
+ }
+ }
+ continue;
+
+ case 0x9:
+ case 0xB:
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ if (!msgCtx->textboxSkipped) {
+ Audio_PlaySfx(NA_SE_NONE);
+ msgCtx->msgMode = MSGMODE_TEXT_AWAIT_NEXT;
+ Font_LoadMessageBoxEndIcon(font, 0);
+ } else {
+ msgCtx->msgMode = MSGMODE_TEXT_NEXT_MSG;
+ msgCtx->textUnskippable = false;
+ msgCtx->msgBufPos++;
+ }
+ msgCtx->unk120CE = msgCtx->textColorR;
+ msgCtx->unk120D0 = msgCtx->textColorG;
+ msgCtx->unk120D2 = msgCtx->textColorB;
+ }
+ *gfxP = gfx;
+ return;
+
+ case 0x101: // MESSAGE_QUICKTEXT_ENABLE
+ if (((i + 1) == msgCtx->textDrawPos) &&
+ ((msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) ||
+ ((msgCtx->msgMode >= MSGMODE_OCARINA_STARTING) && (msgCtx->msgMode <= MSGMODE_26)))) {
+
+ j = i;
+ while (true) {
+ if ((msgCtx->decodedBuffer.wchar[j] != 0x102) && (msgCtx->decodedBuffer.wchar[j] != 0x104) &&
+ (msgCtx->decodedBuffer.wchar[j] != 0x103) && (msgCtx->decodedBuffer.wchar[j] != 0x230) &&
+ (msgCtx->decodedBuffer.wchar[j] != 9) && (msgCtx->decodedBuffer.wchar[j] != 0xB)) {
+ j++;
+ continue;
+ }
+ break;
+ }
+
+ i = j - 1;
+ msgCtx->textDrawPos = i + 1;
+ }
+ break;
+
+ case 0x102: // MESSAGE_QUICKTEXT_DISABLE
+ break;
+
+ case 0x110: // MESSAGE_BOX_BREAK_DELAYED
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ msgCtx->stateTimer = msgCtx->decodedBuffer.wchar[++i];
+ msgCtx->msgMode = MSGMODE_TEXT_DELAYED_BREAK;
+ }
+ *gfxP = gfx;
+ return;
+
+ case 0x111:
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ msgCtx->msgMode = MSGMODE_TEXT_DONE;
+ if (msgCtx->unk11F0C == 3) {
+ msgCtx->textboxEndType = TEXTBOX_ENDTYPE_55;
+ } else {
+ msgCtx->textboxEndType = TEXTBOX_ENDTYPE_50;
+ }
+ msgCtx->stateTimer = msgCtx->decodedBuffer.wchar[++i];
+ Font_LoadMessageBoxEndIcon(&play->msgCtx.font, 1);
+ if (play->csCtx.state == CS_STATE_IDLE) {
+ func_8011552C(play, DO_ACTION_RETURN);
+ }
+ }
+ *gfxP = gfx;
+ return;
+
+ case 0x112:
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ msgCtx->msgMode = MSGMODE_TEXT_DONE;
+ msgCtx->textboxEndType = TEXTBOX_ENDTYPE_52;
+ msgCtx->stateTimer = msgCtx->decodedBuffer.wchar[++i];
+ Font_LoadMessageBoxEndIcon(&play->msgCtx.font, 1);
+ if (play->csCtx.state == CS_STATE_IDLE) {
+ func_8011552C(play, DO_ACTION_RETURN);
+ }
+ }
+ *gfxP = gfx;
+ return;
+
+ case 0x120: // MESSAGE_SFX
+ if (((i + 1) == msgCtx->textDrawPos) && (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING)) {
+ Audio_PlaySfx(msgCtx->decodedBuffer.wchar[i + 1]);
+ }
+ if ((i + 1) == msgCtx->textDrawPos) {
+ msgCtx->textDrawPos++;
+ }
+ i++;
+ break;
+
+ case 0x128:
+ if (((i + 1) == msgCtx->textDrawPos) && (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING)) {
+ msgCtx->msgMode = MSGMODE_9;
+ msgCtx->textDelayTimer = msgCtx->decodedBuffer.wchar[i + 1];
+ }
+ i++;
+ break;
+
+ case 0x130:
+ case 0x131:
+ case 0x132:
+ case 0x133:
+ case 0x134:
+ case 0x135:
+ case 0x136:
+ msgCtx->textDelay = character - 0x130;
+ if ((i + 1) == msgCtx->textDrawPos) {
+ msgCtx->textDrawPos++;
+ }
+ break;
+
+ case 0x201: // MESSAGE_BACKGROUND
+ msgCtx->textPosX = 45;
+
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ Audio_PlaySfx(NA_SE_NONE);
+ }
+
+ gDPPipeSync(gfx++);
+ gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, msgCtx->textColorAlpha);
+ gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1000, G_IM_FMT_I, 96, 48, 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++, msgCtx->textPosX << 2, (msgCtx->unk12012 + 1) << 2,
+ (msgCtx->textPosX + 96) << 2, (msgCtx->unk12012 + 49) << 2, G_TX_RENDERTILE, 0, 0,
+ 1 << 10, 1 << 10);
+ gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1900, G_IM_FMT_I, 96, 48, 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++, (msgCtx->textPosX + 96) << 2, (msgCtx->unk12012 + 1) << 2,
+ (msgCtx->textPosX + 193) << 2, (msgCtx->unk12012 + 49) << 2, G_TX_RENDERTILE, 0, 0,
+ 1 << 10, 1 << 10);
+
+ gDPPipeSync(gfx++);
+ gDPSetPrimColor(gfx++, 0, 0, 255, 60, 0, msgCtx->textColorAlpha);
+ gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1000, G_IM_FMT_I, 96, 48, 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++, msgCtx->textPosX << 2, msgCtx->unk12012 << 2, (msgCtx->textPosX + 96) << 2,
+ (msgCtx->unk12012 + 48) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
+ gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1900, G_IM_FMT_I, 96, 48, 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++, (msgCtx->textPosX + 96) << 2, msgCtx->unk12012 << 2,
+ (msgCtx->textPosX + 192) << 2, (msgCtx->unk12012 + 48) << 2, G_TX_RENDERTILE, 0, 0,
+ 1 << 10, 1 << 10);
+ gDPPipeSync(gfx++);
+ gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0,
+ PRIMITIVE, 0);
+
+ msgCtx->textPosX += 32;
+ break;
+
+ case 0x202:
+ msgCtx->textboxEndType = TEXTBOX_ENDTYPE_10;
+
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ msgCtx->choiceTextId = msgCtx->currentTextId;
+ msgCtx->stateTimer = 4;
+ Font_LoadMessageBoxEndIcon(&play->msgCtx.font, 2);
+ }
+ break;
+
+ case 0x203:
+ msgCtx->textboxEndType = TEXTBOX_ENDTYPE_11;
+
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ msgCtx->choiceTextId = msgCtx->currentTextId;
+ msgCtx->stateTimer = 4;
+ Font_LoadMessageBoxEndIcon(&play->msgCtx.font, 2);
+ }
+ break;
+
+ case 0x20C:
+ msgCtx->textboxEndType = TEXTBOX_ENDTYPE_60;
+
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ Font_LoadMessageBoxEndIcon(&play->msgCtx.font, 1);
+ }
+ break;
+
+ case 0x220:
+ msgCtx->textboxEndType = TEXTBOX_ENDTYPE_61;
+
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ Font_LoadMessageBoxEndIcon(&play->msgCtx.font, 1);
+ }
+ break;
+
+ case 0x221:
+ msgCtx->textboxEndType = TEXTBOX_ENDTYPE_62;
+
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ Font_LoadMessageBoxEndIcon(&play->msgCtx.font, 1);
+ }
+ break;
+
+ case 0x222:
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ msgCtx->msgMode = MSGMODE_TEXT_DONE;
+ msgCtx->textboxEndType = TEXTBOX_ENDTYPE_41;
+ Font_LoadMessageBoxEndIcon(&play->msgCtx.font, 0);
+ Audio_PlaySfx(NA_SE_SY_MESSAGE_END);
+ }
+ break;
+
+ case 0x225:
+ msgCtx->textboxEndType = TEXTBOX_ENDTYPE_63;
+
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ Font_LoadMessageBoxEndIcon(&play->msgCtx.font, 1);
+ }
+ break;
+
+ case 0x240:
+ case 0x500:
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ if (msgCtx->textBoxType == TEXTBOX_TYPE_3) {
+ Message_HandleOcarina(play);
+ *gfxP = gfx;
+ return;
+ }
+ msgCtx->msgMode = MSGMODE_TEXT_DONE;
+ if (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_00) {
+ Audio_PlaySfx(NA_SE_SY_MESSAGE_END);
+ if (character == 0x500) {
+ Font_LoadMessageBoxEndIcon(font, 1);
+ } else {
+ Font_LoadMessageBoxEndIcon(font, 0);
+ }
+ if (play->csCtx.state == CS_STATE_IDLE) {
+ func_8011552C(play, DO_ACTION_RETURN);
+ }
+ } else {
+ Audio_PlaySfx(NA_SE_NONE);
+ }
+ }
+ *gfxP = gfx;
+ return;
+
+ case 0x104:
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ Audio_PlaySfx(NA_SE_NONE);
+ msgCtx->msgMode = MSGMODE_TEXT_DONE;
+ msgCtx->textboxEndType = TEXTBOX_ENDTYPE_30;
+ }
+ *gfxP = gfx;
+ return;
+
+ case 0x103:
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ msgCtx->msgMode = MSGMODE_TEXT_DONE;
+ msgCtx->textboxEndType = TEXTBOX_ENDTYPE_40;
+ Font_LoadMessageBoxEndIcon(&play->msgCtx.font, 0);
+ Audio_PlaySfx(NA_SE_SY_MESSAGE_END);
+ }
+ *gfxP = gfx;
+ return;
+
+ case 0x230:
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ msgCtx->msgMode = MSGMODE_TEXT_DONE;
+ msgCtx->textboxEndType = TEXTBOX_ENDTYPE_42;
+ Font_LoadMessageBoxEndIcon(&play->msgCtx.font, 1);
+ Audio_PlaySfx(NA_SE_SY_MESSAGE_END);
+ }
+ *gfxP = gfx;
+ return;
+
+ default:
+ switch (character) {
+ case 0x8169:
+ case 0x8175:
+ msgCtx->textPosX -= (s16)(6.0f * msgCtx->textCharScale);
+ break;
+
+ case 0x8145:
+ msgCtx->textPosX -= (s16)(3.0f * msgCtx->textCharScale);
+ break;
+
+ case 0x8148:
+ case 0x8149:
+ msgCtx->textPosX -= (s16)(2.0f * msgCtx->textCharScale);
+ break;
+
+ default:
+ break;
+ }
+
+ if ((msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) && ((i + 1) == msgCtx->textDrawPos)) {
+ Audio_PlaySfx(NA_SE_NONE);
+ }
+
+ if ((character >= 0x839F) && (character < 0x83AB)) {
+ sp12E = msgCtx->textColorR;
+ sp12C = msgCtx->textColorG;
+ sp12A = msgCtx->textColorB;
+ msgCtx->textColorR = D_801CFED4[(s16)D_801CFF64[character - 0x839F]].r;
+ msgCtx->textColorG = D_801CFED4[(s16)D_801CFF64[character - 0x839F]].g;
+ msgCtx->textColorB = D_801CFED4[(s16)D_801CFF64[character - 0x839F]].b;
+ Message_DrawTextChar(play, &font->charBuf[font->unk_11D88][charTexIndex], &gfx);
+ msgCtx->textColorR = sp12E;
+ msgCtx->textColorG = sp12C;
+ msgCtx->textColorB = sp12A;
+ } else {
+ Message_DrawTextChar(play, &font->charBuf[font->unk_11D88][charTexIndex], &gfx);
+ }
+ charTexIndex += FONT_CHAR_TEX_SIZE;
+ switch (character) {
+ case 0x8144:
+ msgCtx->textPosX += (s16)(8.0f * msgCtx->textCharScale);
+ break;
+
+ case 0x816A:
+ case 0x8176:
+ msgCtx->textPosX += (s16)(10.0f * msgCtx->textCharScale);
+ break;
+
+ case 0x8141:
+ case 0x8142:
+ case 0x8168:
+ msgCtx->textPosX += (s16)(12.0f * msgCtx->textCharScale);
+ break;
+
+ case 0x8194:
+ msgCtx->textPosX += (s16)(14.0f * msgCtx->textCharScale);
+ break;
+
+ case 0x8145:
+ msgCtx->textPosX += (s16)(15.0f * msgCtx->textCharScale);
+ break;
+
+ default:
+ if ((msgCtx->msgMode >= MSGMODE_SCENE_TITLE_CARD_FADE_IN_BACKGROUND) &&
+ (msgCtx->msgMode <= MSGMODE_SCENE_TITLE_CARD_FADE_OUT_BACKGROUND)) {
+ msgCtx->textPosX += (s16)((16.0f * msgCtx->textCharScale) - 1.0f);
+ } else {
+ msgCtx->textPosX += (s16)(16.0f * msgCtx->textCharScale);
+ }
+ break;
+ }
+ break;
+ }
+ }
+
+ if (msgCtx->textDelayTimer == 0) {
+ msgCtx->textDrawPos = i + 1;
+ msgCtx->textDelayTimer = 0;
+ if (msgCtx->msgMode == MSGMODE_9) {
+ msgCtx->msgMode = MSGMODE_TEXT_DISPLAYING;
+ }
+ } else {
+ msgCtx->textDelayTimer--;
+ }
+ *gfxP = gfx;
+}
+
+s16 D_801CFF70[LANGUAGE_MAX] = {
+ 4, // LANGUAGE_JPN
+ 0x12, // LANGUAGE_ENG
+ 0x12, // LANGUAGE_GER
+ 0x12, // LANGUAGE_FRE
+ 0x12, // LANGUAGE_SPA
+};
+s16 D_801CFF7C[LANGUAGE_MAX] = {
+ 0, // LANGUAGE_JPN
+ 0xE, // LANGUAGE_ENG
+ 0xE, // LANGUAGE_GER
+ 0xE, // LANGUAGE_FRE
+ 0xE, // LANGUAGE_SPA
+};
+s16 D_801CFF88[LANGUAGE_MAX] = {
+ 0, // LANGUAGE_JPN
+ 0x16, // LANGUAGE_ENG
+ 0x16, // LANGUAGE_GER
+ 0x16, // LANGUAGE_FRE
+ 0x16, // LANGUAGE_SPA
+};
+
+s16 D_801CFF94[] = {
+ /* 0x00 */ MESSAGE_ITEM_NONE,
+ /* 0x01 */ ITEM_RUPEE_GREEN,
+ /* 0x02 */ ITEM_RUPEE_BLUE,
+ /* 0x03 */ ITEM_RUPEE_10,
+ /* 0x04 */ ITEM_RUPEE_RED,
+ /* 0x05 */ ITEM_RUPEE_PURPLE,
+ /* 0x06 */ ITEM_RUPEE_SILVER,
+ /* 0x07 */ ITEM_RUPEE_HUGE,
+ /* 0x08 */ ITEM_WALLET_ADULT,
+ /* 0x09 */ ITEM_WALLET_GIANT,
+ /* 0x0A */ ITEM_RECOVERY_HEART,
+ /* 0x0B */ ITEM_RECOVERY_HEART,
+ /* 0x0C */ ITEM_HEART_PIECE,
+ /* 0x0D */ ITEM_HEART_CONTAINER,
+ /* 0x0E */ ITEM_MAGIC_JAR_SMALL,
+ /* 0x0F */ ITEM_MAGIC_JAR_BIG,
+ /* 0x10 */ ITEM_RECOVERY_HEART,
+ /* 0x11 */ ITEM_STRAY_FAIRIES,
+ /* 0x12 */ ITEM_RECOVERY_HEART,
+ /* 0x13 */ ITEM_RECOVERY_HEART,
+ /* 0x14 */ ITEM_BOMB,
+ /* 0x15 */ ITEM_BOMB,
+ /* 0x16 */ ITEM_BOMB,
+ /* 0x17 */ ITEM_BOMB,
+ /* 0x18 */ ITEM_BOMB,
+ /* 0x19 */ ITEM_DEKU_STICK,
+ /* 0x1A */ ITEM_BOMBCHU,
+ /* 0x1B */ ITEM_BOMB_BAG_20,
+ /* 0x1C */ ITEM_BOMB_BAG_30,
+ /* 0x1D */ ITEM_BOMB_BAG_40,
+ /* 0x1E */ ITEM_BOW,
+ /* 0x1F */ ITEM_BOW,
+ /* 0x20 */ ITEM_BOW,
+ /* 0x21 */ ITEM_BOW,
+ /* 0x22 */ ITEM_QUIVER_30,
+ /* 0x23 */ ITEM_QUIVER_40,
+ /* 0x24 */ ITEM_QUIVER_50,
+ /* 0x25 */ ITEM_ARROW_FIRE,
+ /* 0x26 */ ITEM_ARROW_ICE,
+ /* 0x27 */ ITEM_ARROW_LIGHT,
+ /* 0x28 */ ITEM_DEKU_NUT,
+ /* 0x29 */ ITEM_DEKU_NUT,
+ /* 0x2A */ ITEM_DEKU_NUT,
+ /* 0x2B */ MESSAGE_ITEM_NONE,
+ /* 0x2C */ MESSAGE_ITEM_NONE,
+ /* 0x2D */ MESSAGE_ITEM_NONE,
+ /* 0x2E */ MESSAGE_ITEM_NONE,
+ /* 0x2F */ ITEM_DEKU_STICK_UPGRADE_20,
+ /* 0x30 */ MESSAGE_ITEM_NONE,
+ /* 0x31 */ MESSAGE_ITEM_NONE,
+ /* 0x32 */ ITEM_SHIELD_HERO,
+ /* 0x33 */ ITEM_SHIELD_MIRROR,
+ /* 0x34 */ ITEM_POWDER_KEG,
+ /* 0x35 */ ITEM_MAGIC_BEANS,
+ /* 0x36 */ ITEM_PICTOGRAPH_BOX,
+ /* 0x37 */ ITEM_SWORD_KOKIRI,
+ /* 0x38 */ ITEM_SWORD_RAZOR,
+ /* 0x39 */ ITEM_SWORD_GILDED,
+ /* 0x3A */ ITEM_SWORD_DEITY,
+ /* 0x3B */ ITEM_SWORD_GREAT_FAIRY,
+ /* 0x3C */ ITEM_KEY_SMALL,
+ /* 0x3D */ ITEM_KEY_BOSS,
+ /* 0x3E */ ITEM_DUNGEON_MAP,
+ /* 0x3F */ ITEM_COMPASS,
+ /* 0x40 */ ITEM_POWDER_KEG,
+ /* 0x41 */ ITEM_HOOKSHOT,
+ /* 0x42 */ ITEM_LENS_OF_TRUTH,
+ /* 0x43 */ ITEM_PICTOGRAPH_BOX,
+ /* 0x44 */ ITEM_FISHING_ROD,
+ /* 0x45 */ MESSAGE_ITEM_NONE,
+ /* 0x46 */ MESSAGE_ITEM_NONE,
+ /* 0x47 */ MESSAGE_ITEM_NONE,
+ /* 0x48 */ MESSAGE_ITEM_NONE,
+ /* 0x49 */ MESSAGE_ITEM_NONE,
+ /* 0x4A */ MESSAGE_ITEM_NONE,
+ /* 0x4B */ MESSAGE_ITEM_NONE,
+ /* 0x4C */ ITEM_OCARINA_OF_TIME,
+ /* 0x4D */ MESSAGE_ITEM_NONE,
+ /* 0x4E */ MESSAGE_ITEM_NONE,
+ /* 0x4F */ MESSAGE_ITEM_NONE,
+ /* 0x50 */ ITEM_BOMBERS_NOTEBOOK,
+ /* 0x51 */ MESSAGE_ITEM_NONE,
+ /* 0x52 */ ITEM_SKULL_TOKEN,
+ /* 0x53 */ MESSAGE_ITEM_NONE,
+ /* 0x54 */ MESSAGE_ITEM_NONE,
+ /* 0x55 */ ITEM_REMAINS_ODOLWA,
+ /* 0x56 */ ITEM_REMAINS_GOHT,
+ /* 0x57 */ ITEM_REMAINS_GYORG,
+ /* 0x58 */ ITEM_REMAINS_TWINMOLD,
+ /* 0x59 */ ITEM_POTION_RED,
+ /* 0x5A */ ITEM_BOTTLE,
+ /* 0x5B */ ITEM_POTION_RED,
+ /* 0x5C */ ITEM_POTION_GREEN,
+ /* 0x5D */ ITEM_POTION_BLUE,
+ /* 0x5E */ ITEM_FAIRY,
+ /* 0x5F */ ITEM_DEKU_PRINCESS,
+ /* 0x60 */ ITEM_MILK_BOTTLE,
+ /* 0x61 */ ITEM_MILK_HALF,
+ /* 0x62 */ ITEM_FISH,
+ /* 0x63 */ ITEM_BUG,
+ /* 0x64 */ ITEM_BLUE_FIRE,
+ /* 0x65 */ ITEM_POE,
+ /* 0x66 */ ITEM_BIG_POE,
+ /* 0x67 */ ITEM_SPRING_WATER,
+ /* 0x68 */ ITEM_HOT_SPRING_WATER,
+ /* 0x69 */ ITEM_ZORA_EGG,
+ /* 0x6A */ ITEM_GOLD_DUST,
+ /* 0x6B */ ITEM_MUSHROOM,
+ /* 0x6C */ MESSAGE_ITEM_NONE,
+ /* 0x6D */ MESSAGE_ITEM_NONE,
+ /* 0x6E */ ITEM_SEAHORSE,
+ /* 0x6F */ ITEM_CHATEAU,
+ /* 0x70 */ ITEM_HYLIAN_LOACH,
+ /* 0x71 */ MESSAGE_ITEM_NONE,
+ /* 0x72 */ MESSAGE_ITEM_NONE,
+ /* 0x73 */ MESSAGE_ITEM_NONE,
+ /* 0x74 */ MESSAGE_ITEM_NONE,
+ /* 0x75 */ MESSAGE_ITEM_NONE,
+ /* 0x76 */ MESSAGE_ITEM_NONE,
+ /* 0x77 */ MESSAGE_ITEM_NONE,
+ /* 0x78 */ ITEM_MASK_DEKU,
+ /* 0x79 */ ITEM_MASK_GORON,
+ /* 0x7A */ ITEM_MASK_ZORA,
+ /* 0x7B */ ITEM_MASK_FIERCE_DEITY,
+ /* 0x7C */ ITEM_MASK_TRUTH,
+ /* 0x7D */ ITEM_MASK_KAFEIS_MASK,
+ /* 0x7E */ ITEM_MASK_ALL_NIGHT,
+ /* 0x7F */ ITEM_MASK_BUNNY,
+ /* 0x80 */ ITEM_MASK_KEATON,
+ /* 0x81 */ ITEM_MASK_GARO,
+ /* 0x82 */ ITEM_MASK_ROMANI,
+ /* 0x83 */ ITEM_MASK_CIRCUS_LEADER,
+ /* 0x84 */ ITEM_MASK_POSTMAN,
+ /* 0x85 */ ITEM_MASK_COUPLE,
+ /* 0x86 */ ITEM_MASK_GREAT_FAIRY,
+ /* 0x87 */ ITEM_MASK_GIBDO,
+ /* 0x88 */ ITEM_MASK_DON_GERO,
+ /* 0x89 */ ITEM_MASK_KAMARO,
+ /* 0x8A */ ITEM_MASK_CAPTAIN,
+ /* 0x8B */ ITEM_MASK_STONE,
+ /* 0x8C */ ITEM_MASK_BREMEN,
+ /* 0x8D */ ITEM_MASK_BLAST,
+ /* 0x8E */ ITEM_MASK_SCENTS,
+ /* 0x8F */ ITEM_MASK_GIANT,
+ /* 0x90 */ MESSAGE_ITEM_NONE,
+ /* 0x91 */ ITEM_CHATEAU,
+ /* 0x92 */ ITEM_MILK_BOTTLE,
+ /* 0x93 */ ITEM_GOLD_DUST,
+ /* 0x94 */ ITEM_HYLIAN_LOACH,
+ /* 0x95 */ ITEM_SEAHORSE,
+ /* 0x96 */ ITEM_MOONS_TEAR,
+ /* 0x97 */ ITEM_DEED_LAND,
+ /* 0x98 */ ITEM_DEED_SWAMP,
+ /* 0x99 */ ITEM_DEED_MOUNTAIN,
+ /* 0x9A */ ITEM_DEED_OCEAN,
+ /* 0x9B */ MESSAGE_ITEM_NONE,
+ /* 0x9C */ MESSAGE_ITEM_NONE,
+ /* 0x9D */ MESSAGE_ITEM_NONE,
+ /* 0x9E */ MESSAGE_ITEM_NONE,
+ /* 0x9F */ MESSAGE_ITEM_NONE,
+ /* 0xA0 */ ITEM_ROOM_KEY,
+ /* 0xA1 */ ITEM_LETTER_MAMA,
+ /* 0xA2 */ MESSAGE_ITEM_NONE,
+ /* 0xA3 */ MESSAGE_ITEM_NONE,
+ /* 0xA4 */ MESSAGE_ITEM_NONE,
+ /* 0xA5 */ MESSAGE_ITEM_NONE,
+ /* 0xA6 */ MESSAGE_ITEM_NONE,
+ /* 0xA7 */ MESSAGE_ITEM_NONE,
+ /* 0xA8 */ MESSAGE_ITEM_NONE,
+ /* 0xA9 */ MESSAGE_ITEM_NONE,
+ /* 0xAA */ ITEM_LETTER_TO_KAFEI,
+ /* 0xAB */ ITEM_PENDANT_OF_MEMORIES,
+ /* 0xAC */ MESSAGE_ITEM_NONE,
+ /* 0xAD */ MESSAGE_ITEM_NONE,
+ /* 0xAE */ MESSAGE_ITEM_NONE,
+ /* 0xAF */ MESSAGE_ITEM_NONE,
+ /* 0xB0 */ MESSAGE_ITEM_NONE,
+ /* 0xB1 */ MESSAGE_ITEM_NONE,
+ /* 0xB2 */ MESSAGE_ITEM_NONE,
+ /* 0xB3 */ ITEM_TINGLE_MAP,
+ /* 0xB4 */ ITEM_TINGLE_MAP,
+ /* 0xB5 */ ITEM_TINGLE_MAP,
+ /* 0xB6 */ ITEM_TINGLE_MAP,
+ /* 0xB7 */ ITEM_TINGLE_MAP,
+ /* 0xB8 */ ITEM_TINGLE_MAP,
+ /* 0xB9 */ ITEM_TINGLE_MAP,
+ /* 0xBA */ MESSAGE_ITEM_NONE,
+ /* 0xBB */ MESSAGE_ITEM_NONE,
+ /* 0xBC */ MESSAGE_ITEM_NONE,
+ /* 0xBD */ MESSAGE_ITEM_NONE,
+ /* 0xBE */ MESSAGE_ITEM_NONE,
+ /* 0xBF */ MESSAGE_ITEM_NONE,
+ /* 0xC0 */ MESSAGE_ITEM_NONE,
+ /* 0xC1 */ MESSAGE_ITEM_NONE,
+ /* 0xC2 */ MESSAGE_ITEM_NONE,
+ /* 0xC3 */ MESSAGE_ITEM_NONE,
+ /* 0xC4 */ MESSAGE_ITEM_NONE,
+ /* 0xC5 */ MESSAGE_ITEM_NONE,
+ /* 0xC6 */ MESSAGE_ITEM_NONE,
+ /* 0xC7 */ MESSAGE_ITEM_NONE,
+ /* 0xC8 */ ITEM_SONG_SONATA,
+ /* 0xC9 */ ITEM_SONG_SONATA,
+ /* 0xCA */ ITEM_SONG_SONATA,
+ /* 0xCB */ ITEM_SONG_LULLABY,
+ /* 0xCC */ ITEM_SONG_NOVA,
+ /* 0xCD */ ITEM_SONG_ELEGY,
+ /* 0xCE */ ITEM_SONG_OATH,
+ /* 0xCF */ ITEM_SONG_SARIA,
+ /* 0xD0 */ ITEM_SONG_TIME,
+ /* 0xD1 */ ITEM_SONG_HEALING,
+ /* 0xD2 */ ITEM_SONG_EPONA,
+ /* 0xD3 */ ITEM_SONG_SOARING,
+ /* 0xD4 */ ITEM_SONG_STORMS,
+ /* 0xD5 */ ITEM_SONG_SUN,
+ /* 0xD6 */ ITEM_SONG_LULLABY,
+ /* 0xD7 */ ITEM_SONG_SONATA,
+ /* 0xD8 */ ITEM_SONG_SONATA,
+ /* 0xD9 */ ITEM_SONG_SONATA,
+ /* 0xDA */ ITEM_SONG_LULLABY,
+ /* 0xDB */ ITEM_SONG_NOVA,
+ /* 0xDC */ ITEM_B8,
+ /* 0xDD */ ITEM_B9,
+ /* 0xDE */ ITEM_BA,
+ /* 0xDF */ ITEM_BB,
+ /* 0xE0 */ ITEM_BC,
+ /* 0xE1 */ ITEM_BD,
+ /* 0xE2 */ ITEM_BE,
+ /* 0xE3 */ ITEM_BF,
+ /* 0xE4 */ ITEM_C0,
+ /* 0xE5 */ ITEM_C1,
+ /* 0xE6 */ ITEM_C2,
+ /* 0xE7 */ ITEM_C3,
+ /* 0xE8 */ ITEM_C4,
+ /* 0xE9 */ ITEM_C5,
+ /* 0xEA */ ITEM_C6,
+ /* 0xEB */ ITEM_C7,
+ /* 0xEC */ ITEM_C8,
+ /* 0xED */ ITEM_C9,
+ /* 0xEE */ ITEM_CA,
+ /* 0xEF */ ITEM_CB,
+ /* 0xF0 */ ITEM_CC,
+ /* 0xF1 */ MESSAGE_ITEM_NONE,
+ /* 0xF2 */ MESSAGE_ITEM_NONE,
+ /* 0xF3 */ MESSAGE_ITEM_NONE,
+ /* 0xF4 */ MESSAGE_ITEM_NONE,
+ /* 0xF5 */ MESSAGE_ITEM_NONE,
+ /* 0xF6 */ MESSAGE_ITEM_NONE,
+ /* 0xF7 */ MESSAGE_ITEM_NONE,
+ /* 0xF8 */ MESSAGE_ITEM_NONE,
+ /* 0xF9 */ MESSAGE_ITEM_NONE,
+};
+
+void Message_LoadItemIcon(PlayState* play, u16 itemId, s16 arg2) {
+ MessageContext* msgCtx = &play->msgCtx;
+ u16* new_var2 = &itemId;
+
+ if (itemId == ITEM_RECOVERY_HEART) {
+ msgCtx->unk12010 = (msgCtx->unk11FF8 - D_801CFF88[gSaveContext.options.language]);
+ msgCtx->unk12012 = (arg2 + 0xA);
+ msgCtx->unk12014 = 0x10;
+ } else if ((itemId >= ITEM_RUPEE_GREEN) && (itemId <= ITEM_RUPEE_HUGE)) {
+ msgCtx->unk12010 = (msgCtx->unk11FF8 - D_801CFF88[gSaveContext.options.language]);
+ msgCtx->unk12012 = (arg2 + 0xA);
+ msgCtx->unk12014 = 0x10;
+ } else if (itemId == ITEM_STRAY_FAIRIES) {
+ msgCtx->unk12010 = (msgCtx->unk11FF8 - D_801CFF70[gSaveContext.options.language]);
+ msgCtx->unk12012 = (arg2 + 0xA);
+ msgCtx->unk12014 = 0x20;
+ } else if ((itemId >= ITEM_SONG_SONATA) && (itemId <= ITEM_SONG_SUN)) {
+ msgCtx->unk12010 = (msgCtx->unk11FF8 - D_801CFF88[gSaveContext.options.language]);
+ msgCtx->unk12012 = (arg2 + 0xA);
+ msgCtx->unk12014 = 0x10;
+ CmpDma_LoadFile(SEGMENT_ROM_START(icon_item_static_yar), ITEM_SONG_SONATA, msgCtx->textboxSegment + 0x1000,
+ 0x180);
+ } else if (itemId == ITEM_BOMBERS_NOTEBOOK) {
+ msgCtx->unk12010 = (msgCtx->unk11FF8 - D_801CFF70[gSaveContext.options.language]);
+ msgCtx->unk12012 = (arg2 + 6);
+ msgCtx->unk12014 = 0x20;
+ CmpDma_LoadFile(SEGMENT_ROM_START(icon_item_static_yar), ITEM_SONG_SONATA, msgCtx->textboxSegment + 0x1000,
+ 0x1000);
+ } else if (itemId <= ITEM_REMAINS_TWINMOLD) {
+ msgCtx->unk12010 = (msgCtx->unk11FF8 - D_801CFF70[gSaveContext.options.language]);
+ msgCtx->unk12012 = (arg2 + 6);
+ msgCtx->unk12014 = 0x20;
+ CmpDma_LoadFile(SEGMENT_ROM_START(icon_item_static_yar), itemId, msgCtx->textboxSegment + 0x1000, 0x1000);
+ } else if (itemId == ITEM_CC) {
+ msgCtx->unk12010 = (msgCtx->unk11FF8 - D_801CFF70[gSaveContext.options.language]);
+ msgCtx->unk12012 = (arg2 + 8);
+ msgCtx->unk12014 = 0x20;
+ CmpDma_LoadFile(SEGMENT_ROM_START(schedule_dma_static_yar), ITEM_POTION_BLUE, msgCtx->textboxSegment + 0x1000,
+ 0x400);
+ } else if (itemId >= ITEM_B8) {
+ msgCtx->unk12010 = (msgCtx->unk11FF8 - D_801CFF70[gSaveContext.options.language]);
+ msgCtx->unk12012 = (arg2 + 8);
+ msgCtx->unk12014 = 0x20;
+ CmpDma_LoadFile(SEGMENT_ROM_START(schedule_dma_static_yar), (itemId - ITEM_B8), msgCtx->textboxSegment + 0x1000,
+ 0x800);
+ } else if (itemId >= ITEM_SKULL_TOKEN) {
+ msgCtx->unk12010 = (msgCtx->unk11FF8 - D_801CFF7C[gSaveContext.options.language]);
+ msgCtx->unk12012 = (arg2 + 0xA);
+ msgCtx->unk12014 = 0x18;
+ CmpDma_LoadFile(SEGMENT_ROM_START(icon_item_24_static_yar), (itemId - ITEM_SKULL_TOKEN),
+ msgCtx->textboxSegment + 0x1000, 0x900);
+ }
+
+ if (play->pauseCtx.bombersNotebookOpen) {
+ msgCtx->unk12010 = ((msgCtx->unk12010 * 1.4f) + 2.0f);
+ msgCtx->unk12014 = (msgCtx->unk12014 * 1.4f);
+ }
+
+ msgCtx->choiceNum = 1;
+}
void Message_LoadChar(PlayState* play, u16 codePointIndex, s32* offset, f32* arg3, s16 decodedBufPos) {
MessageContext* msgCtx = &play->msgCtx;
@@ -239,7 +1885,7 @@ void Message_LoadChar(PlayState* play, u16 codePointIndex, s32* offset, f32* arg
Font_LoadChar(play, codePointIndex, temp1);
msgCtx->decodedBuffer.wchar[decodedBufPos] = codePointIndex;
temp1 += FONT_CHAR_TEX_SIZE;
- temp2 += (16.0f * msgCtx->unk12098);
+ temp2 += (16.0f * msgCtx->textCharScale);
*offset = temp1;
*arg3 = temp2;
}
@@ -255,78 +1901,1426 @@ void func_8014CCB4(PlayState* play, s16* decodedBufPos, s32* offset, f32* arg3)
Font_LoadChar(play, 0x838B, k); // 0x838B = ル in JISX0213
k += FONT_CHAR_TEX_SIZE;
msgCtx->decodedBuffer.wchar[t] = 0x838B;
- t += 1;
+ t++;
Font_LoadChar(play, 0x8373, k); // 0x8373 = ピ in JISX0213
k += FONT_CHAR_TEX_SIZE;
msgCtx->decodedBuffer.wchar[t] = 0x8373;
- t += 1;
+ t++;
Font_LoadChar(play, 0x815C, k); // 0x815C = ― in JISX0213
k += FONT_CHAR_TEX_SIZE;
msgCtx->decodedBuffer.wchar[t] = 0x815C;
- f += 16.0f * msgCtx->unk12098 * 3.0f;
+ f += 16.0f * msgCtx->textCharScale * 3.0f;
*decodedBufPos = t;
*offset = k;
*arg3 = f;
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014CDF0.s")
+/*
+ * offsetting to actual codepoints is done outside this function
+ * every digit will be added 0x824F to get an actual S-JIS
+ * printable character.
+ */
+void Message_GetTimerDigits(OSTime time, s16* digits) {
+ OSTime t = time;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014CFDC.s")
+ // 6 minutes
+ digits[0] = t / SECONDS_TO_TIMER(360);
+ t -= digits[0] * SECONDS_TO_TIMER(360);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014D304.s")
+ // minutes
+ digits[1] = t / SECONDS_TO_TIMER(60);
+ t -= digits[1] * SECONDS_TO_TIMER(60);
-extern u16 D_801D0188[OWL_WARP_MAX][9];
-extern s16 D_801D0250[OWL_WARP_MAX];
+ digits[2] = 0x135B; // 0x135B + 0x824F = 分 (minutes) in S-JIS
-void func_8014D62C(PlayState* play, s32* arg1, f32* arg2, s16* arg3) {
+ // 10 seconds
+ digits[3] = t / SECONDS_TO_TIMER(10);
+ t -= digits[3] * SECONDS_TO_TIMER(10);
+
+ // seconds
+ digits[4] = t / SECONDS_TO_TIMER(1);
+ t -= digits[4] * SECONDS_TO_TIMER(1);
+
+ digits[5] = 0x1313; // 0x1313 + 0x824F = 秒 (seconds) in S-JIS
+
+ // 100 milliseconds
+ digits[6] = t / SECONDS_TO_TIMER_PRECISE(0, 10);
+ t -= digits[6] * SECONDS_TO_TIMER_PRECISE(0, 10);
+
+ // 10 milliseconds
+ digits[7] = t;
+}
+
+void Message_SetupLoadItemIcon(PlayState* play) {
+ Font* font;
+ MessageContext* msgCtx = &play->msgCtx;
+
+ font = &msgCtx->font;
+ if (msgCtx->msgBufPos == 0) {
+ if (font->msgBuf.schar[msgCtx->msgBufPos + 2] != 0xFE) {
+ msgCtx->unk11F18 = 0;
+ if ((msgCtx->currentTextId == 0x176F) || (msgCtx->currentTextId == 0x1770) ||
+ (msgCtx->currentTextId == 0x1771)) {
+ msgCtx->itemId = ITEM_OCARINA_OF_TIME;
+ msgCtx->msgBufPos += 2;
+ } else {
+ msgCtx->msgBufPos += 2;
+ if ((font->msgBuf.schar[msgCtx->msgBufPos] < 0xC8) || (font->msgBuf.schar[msgCtx->msgBufPos] >= 0xD8)) {
+ msgCtx->itemId = D_801CFF94[(u8)font->msgBuf.schar[msgCtx->msgBufPos]];
+ } else {
+ msgCtx->itemId = 0xFE;
+ }
+ }
+ } else {
+ msgCtx->msgBufPos += 2;
+ msgCtx->itemId = font->msgBuf.schar[msgCtx->msgBufPos];
+ }
+ msgCtx->nextTextId = font->msgBuf.schar[++msgCtx->msgBufPos] << 8;
+ msgCtx->nextTextId |= font->msgBuf.schar[++msgCtx->msgBufPos];
+
+ msgCtx->unk1206C = font->msgBuf.schar[++msgCtx->msgBufPos] << 8;
+ msgCtx->unk1206C |= font->msgBuf.schar[++msgCtx->msgBufPos];
+
+ msgCtx->unk12070 = font->msgBuf.schar[++msgCtx->msgBufPos] << 8;
+ msgCtx->unk12070 |= font->msgBuf.schar[++msgCtx->msgBufPos];
+
+ msgCtx->unk12074 = font->msgBuf.schar[++msgCtx->msgBufPos] << 8;
+ msgCtx->unk12074 |= font->msgBuf.schar[++msgCtx->msgBufPos];
+
+ msgCtx->msgBufPos++;
+ if (msgCtx->itemId != 0xFE) {
+ Message_LoadItemIcon(play, msgCtx->itemId, msgCtx->textboxY + 10);
+ }
+ }
+}
+
+void Message_LoadTime(PlayState* play, u16 curChar, s32* offset, f32* arg3, s16* decodedBufPos) {
+ MessageContext* msgCtx = &play->msgCtx;
+ s16 i;
+ s16 p = *decodedBufPos;
+ s32 o = *offset;
+ f32 f = *arg3;
+ u32 dayTime;
+ s16 digits[4];
+ f32 timeInMinutes;
+
+ if (curChar == 0x20F) {
+ dayTime = TIME_UNTIL_MOON_CRASH;
+ } else {
+ dayTime = TIME_UNTIL_NEW_DAY;
+ }
+ timeInMinutes = TIME_TO_MINUTES_F(dayTime);
+
+ digits[0] = 0;
+ digits[1] = (timeInMinutes / 60.0f);
+ while (digits[1] >= 10) {
+ digits[0]++;
+ digits[1] -= 10;
+ }
+
+ digits[2] = 0;
+ digits[3] = (s32)timeInMinutes % 60;
+ while (digits[3] >= 10) {
+ digits[2]++;
+ digits[3] -= 10;
+ }
+
+ for (i = 0; i < 4; i++) {
+ Font_LoadChar(play, digits[i] + 0x824F, o); // 0x824F = '0' in S-JIS
+ o += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.wchar[p] = digits[i] + 0x824F;
+ p++;
+ if (i == 1) {
+ // Hours (時間)
+ Font_LoadChar(play, 0x8E9E, o);
+ o += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.wchar[p] = 0x8E9E;
+ p++;
+ Font_LoadChar(play, 0x8AD4, o);
+ o += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.wchar[p] = 0x8E9E;
+ p++;
+ } else if (i == 3) {
+ // Minutes (分)
+ Font_LoadChar(play, 0x95AA, o);
+ o += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.wchar[p] = 0x95AA;
+ }
+ }
+
+ f += 7.0f * (16.0f * msgCtx->textCharScale);
+ *decodedBufPos = p;
+ *offset = o;
+ *arg3 = f;
+}
+
+#define GREAT_BAY_COAST_STR \
+ { 0x834F, 0x838C, 0x815B, 0x8367, 0x8378, 0x8343, 0x82CC, 0x8A43, 0x8ADD }
+#define ZORA_CAPE_STR \
+ { 0x835D, 0x815B, 0x8389, 0x82CC, 0x82DD, 0x82B3, 0x82AB }
+#define SNOWHEAD_STR \
+ { 0x8358, 0x836D, 0x815B, 0x8377, 0x8362, 0x8368 }
+#define MOUNTAIN_VILLAGE_STR \
+ { 0x8E52, 0x97A2 }
+#define CLOCK_TOWN_STR \
+ { 0x834E, 0x838D, 0x8362, 0x834E, 0x835E, 0x8345, 0x8393 }
+#define MILK_ROAD_STR \
+ { 0x837E, 0x838B, 0x834E, 0x838D, 0x815B, 0x8368 }
+#define WOODFALL_STR \
+ { 0x8345, 0x8362, 0x8368, 0x8374, 0x8348, 0x815B, 0x838B }
+#define SOUTHERN_SWAMP_STR \
+ { 0x8FC0, 0x926E }
+#define IKANA_CANYON_STR \
+ { 0x8343, 0x834A, 0x815B, 0x8369, 0x8C6B, 0x924A }
+#define STONE_TOWER_STR \
+ { 0x838D, 0x8362, 0x834E, 0x8372, 0x838B }
+#define ENTRANCE_STR \
+ { 0x93FC, 0x82E8, 0x8CFB }
+
+// Shift JIS
+u16 sOwlWarpTextJPN[OWL_WARP_MAX][9] = {
+ GREAT_BAY_COAST_STR, // OWL_WARP_GREAT_BAY_COAST
+ ZORA_CAPE_STR, // OWL_WARP_ZORA_CAPE
+ SNOWHEAD_STR, // OWL_WARP_SNOWHEAD
+ MOUNTAIN_VILLAGE_STR, // OWL_WARP_MOUNTAIN_VILLAGE
+ CLOCK_TOWN_STR, // OWL_WARP_CLOCK_TOWN
+ MILK_ROAD_STR, // OWL_WARP_MILK_ROAD
+ WOODFALL_STR, // OWL_WARP_WOODFALL
+ SOUTHERN_SWAMP_STR, // OWL_WARP_SOUTHERN_SWAMP
+ IKANA_CANYON_STR, // OWL_WARP_IKANA_CANYON
+ STONE_TOWER_STR, // OWL_WARP_STONE_TOWER
+ ENTRANCE_STR, // OWL_WARP_ENTRANCE
+};
+
+//! TODO: use sizeof when we have strings
+s16 sOwlWarpTextLengthJPN[OWL_WARP_MAX] = {
+ 9, // OWL_WARP_GREAT_BAY_COAST
+ 7, // OWL_WARP_ZORA_CAPE
+ 6, // OWL_WARP_SNOWHEAD
+ 2, // OWL_WARP_MOUNTAIN_VILLAGE
+ 7, // OWL_WARP_CLOCK_TOWN
+ 6, // OWL_WARP_MILK_ROAD
+ 7, // OWL_WARP_WOODFALL
+ 2, // OWL_WARP_SOUTHERN_SWAMP
+ 6, // OWL_WARP_IKANA_CANYON
+ 5, // OWL_WARP_STONE_TOWER
+ 3, // OWL_WARP_ENTRANCE
+};
+
+void Message_LoadOwlWarpText(PlayState* play, s32* offset, f32* arg2, s16* decodedBufPos) {
MessageContext* msgCtx = &play->msgCtx;
PauseContext* pauseCtx = &play->pauseCtx;
s16 stringLimit;
- s16 temp_s1 = *arg3;
- s32 temp_s2 = *arg1;
+ s16 curDecodedBufPos = *decodedBufPos;
+ s32 temp_s2 = *offset;
f32 sp3C = *arg2;
s16 owlWarpId;
- s16 phi_s0;
+ s16 i;
if (func_8010A0A4(play) || (play->sceneId == SCENE_SECOM)) {
owlWarpId = OWL_WARP_ENTRANCE;
} else {
owlWarpId = pauseCtx->cursorPoint[PAUSE_WORLD_MAP];
}
- stringLimit = D_801D0250[owlWarpId];
+ stringLimit = sOwlWarpTextLengthJPN[owlWarpId];
- 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);
+ for (i = 0; i < stringLimit; i++, curDecodedBufPos++, temp_s2 += FONT_CHAR_TEX_SIZE) {
+ msgCtx->decodedBuffer.wchar[curDecodedBufPos] = sOwlWarpTextJPN[owlWarpId][i];
+ Font_LoadChar(play, sOwlWarpTextJPN[owlWarpId][i], temp_s2);
}
- temp_s1--;
- sp3C += (stringLimit - 1) * (16.0f * msgCtx->unk12098);
+ curDecodedBufPos--;
+ sp3C += (stringLimit - 1) * (16.0f * msgCtx->textCharScale);
- *arg3 = temp_s1;
- *arg1 = temp_s2;
+ *decodedBufPos = curDecodedBufPos;
+ *offset = temp_s2;
*arg2 = sp3C;
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014D7B4.s")
+// Counterpart to NES D_801D08D8
+u16 D_801D0268[][3] = {
+ { 0x82CD, 0x82E2, 0x82A2 },
+ { 0x82D3, 0x82C2, 0x82A4 },
+ { 0x82A8, 0x82BB, 0x82A2 },
+};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80150A84.s")
+// Counterpart to NES D_801D08E4
+u16 D_801D027C[] = { 0x2001, 0x2003, 0x2004, 0x2002 };
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80150D08.s")
+// Counterpart to NES sMaskCodeTextENG
+u16 D_801D0284[] = { 0x90D4, 0x90C2, 0x89A9, 0x97CE };
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_801514B0.s")
+#ifdef NON_MATCHING
+// https://decomp.me/scratch/ZTbP4
+void Message_Decode(PlayState* play) {
+ MessageContext* msgCtx = &play->msgCtx;
+ Font* font = &msgCtx->font; // spF0
+ Player* player; // spEC
+ s16 decodedBufPos; // spEA
+ u32 timeToMoonCrash;
+ s16 temp2;
+ s16 spE0;
+ s32 pad4;
+ s16 digits[4]; // spD4/D6/D8/DA
+ s16 spD2;
+ f32 timeInSeconds;
+ s32 charTexIdx; // spC8
+ s16 var_v0;
+ s16 loadChar;
+ f32 spC0;
+ f32 var_fs0;
+ s16 index;
+ s16 value;
+ s16 playerNameLen;
+ s16 i; // s1
+ s16 spAC[4];
+ u8 var_s3_8;
+ u16 curChar;
+ u32 temp;
+ u8* ptr2;
-void Message_StartTextbox(PlayState* play, u16 textId, Actor* Actor) {
+ player = GET_PLAYER(play);
+ msgCtx->textDelayTimer = 0;
+ msgCtx->textDelay = msgCtx->textDelayTimer;
+ msgCtx->textFade = 0;
+ spC0 = 0.0f;
+ font->unk_11D88 = (font->unk_11D88 ^ 1) & 1;
+
+ if ((gSaveContext.options.language == LANGUAGE_JPN) && !msgCtx->textIsCredits) {
+ spD2 = 0;
+ spE0 = 0;
+ decodedBufPos = 0;
+ charTexIdx = 0;
+ Message_SetupLoadItemIcon(play);
+
+ while (true) {
+ curChar = msgCtx->decodedBuffer.wchar[decodedBufPos] = font->msgBuf.wchar[msgCtx->msgBufPos];
+
+ if ((curChar == 9) || (curChar == 0xB) || (curChar == 0x110) || (curChar == 0x111) || (curChar == 0x112) ||
+ (curChar == 0x103) || (curChar == 0x230) || (curChar == 0x500) || (curChar == 0x240) ||
+ (curChar == 0x104)) {
+
+ msgCtx->msgMode = MSGMODE_TEXT_DISPLAYING;
+ msgCtx->textDrawPos = 1;
+ msgCtx->unk11FFA = msgCtx->textboxY + 6;
+ msgCtx->unk11F1A[spD2] = 0;
+ if (msgCtx->unk11F18 == 0) {
+ msgCtx->unk11F1A[spD2] = (s16)((msgCtx->textCharScale * 16.0f * 16.0f) - spC0) / 2;
+ }
+ spC0 = 0.0f;
+ if (curChar == 0xB) {
+ if ((msgCtx->textBoxType != TEXTBOX_TYPE_3) && (msgCtx->textBoxType != TEXTBOX_TYPE_4)) {
+ if (spE0 < 2) {
+ msgCtx->unk11FFA = msgCtx->textboxY + 0x16;
+ } else if (spE0 == 2) {
+ msgCtx->unk11FFA = msgCtx->textboxY + 0xE;
+ }
+ }
+ } else {
+ if ((msgCtx->textBoxType != TEXTBOX_TYPE_3) && (msgCtx->textBoxType != TEXTBOX_TYPE_4)) {
+ if (spE0 == 0) {
+ msgCtx->unk11FFA = msgCtx->textboxY + 0x16;
+ } else if (spE0 == 1) {
+ msgCtx->unk11FFA = msgCtx->textboxY + 0xE;
+ }
+ }
+ }
+
+ {
+ s32 pad;
+
+ if ((curChar == 0x110) || (curChar == 0x111) || (curChar == 0x112)) {
+ msgCtx->decodedBuffer.wchar[++decodedBufPos] = font->msgBuf.wchar[msgCtx->msgBufPos + 1];
+ msgCtx->msgBufPos += 2;
+ }
+ }
+
+ msgCtx->decodedTextLen = decodedBufPos;
+ if (msgCtx->textboxSkipped || (msgCtx->textBoxType == TEXTBOX_TYPE_1) ||
+ (msgCtx->textBoxType == TEXTBOX_TYPE_3) || (msgCtx->textBoxType == TEXTBOX_TYPE_6) ||
+ (msgCtx->textBoxType == TEXTBOX_TYPE_8) || (msgCtx->textBoxType == TEXTBOX_TYPE_9) ||
+ (msgCtx->textBoxType == TEXTBOX_TYPE_B) || (msgCtx->unk11F0C == 3)) {
+ msgCtx->textDrawPos = msgCtx->decodedTextLen;
+ }
+ msgCtx->unk120C8 = msgCtx->unk120CE;
+ msgCtx->unk120CA = msgCtx->unk120D0;
+ msgCtx->unk120CC = msgCtx->unk120D2;
+ break;
+ }
+
+ if (curChar == 0x100) {
+ for (playerNameLen = ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); playerNameLen > 0;
+ playerNameLen--) {
+ if (gSaveContext.save.saveInfo.playerData.playerName[playerNameLen - 1] != 0x3E) {
+ break;
+ }
+ }
+
+ for (i = 0; i < playerNameLen; i++) {
+ ptr2 = &font->fontBuf[((void)0, gSaveContext.save.saveInfo.playerData.playerName[i]) *
+ FONT_CHAR_TEX_SIZE];
+ msgCtx->decodedBuffer.wchar[decodedBufPos + i] = 0x100;
+
+ for (var_v0 = 0; var_v0 < FONT_CHAR_TEX_SIZE; var_v0 += 4) {
+ font->charBuf[font->unk_11D88][charTexIdx + var_v0 + 0] =
+ ptr2[var_v0 + 0] & 0xFF; //! FAKE: Fixes later regalloc
+ font->charBuf[font->unk_11D88][charTexIdx + var_v0 + 1] = ptr2[var_v0 + 1];
+ font->charBuf[font->unk_11D88][charTexIdx + var_v0 + 2] = ptr2[var_v0 + 2];
+ font->charBuf[font->unk_11D88][charTexIdx + var_v0 + 3] = ptr2[var_v0 + 3];
+ }
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ }
+ decodedBufPos += playerNameLen - 1;
+ spC0 += playerNameLen * (16.0f * msgCtx->textCharScale);
+ } else if (curChar == 0x201) {
+ DmaMgr_SendRequest0(msgCtx->textboxSegment + 0x1000, SEGMENT_ROM_START(message_texture_static), 0x900);
+ DmaMgr_SendRequest0(msgCtx->textboxSegment + 0x1900,
+ (uintptr_t)SEGMENT_ROM_START(message_texture_static) + 0x900, 0x900);
+ spE0 = 2;
+ spD2 = 2;
+ msgCtx->unk12012 = msgCtx->textboxY + 8;
+ msgCtx->unk11F18 = 1;
+ msgCtx->unk12010 = XREG(47);
+ } else if (curChar == 0x202) {
+ msgCtx->unk11F18 = 1;
+ msgCtx->choiceNum = 2;
+ } else if (curChar == 0x203) {
+ msgCtx->unk11F18 = 1;
+ msgCtx->choiceNum = 3;
+ msgCtx->unk11FF8 = msgCtx->unk11FF8 + 0x16;
+ } else if (curChar == 0x204) {
+ Message_GetTimerDigits(((void)0, gSaveContext.timerCurTimes[curChar - 0x204]), spAC);
+
+ loadChar = false;
+ for (i = 0; i < 5; i++) {
+ if ((i == 1) || (spAC[i + 3] != 0)) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ Message_LoadChar(play, spAC[i + 3] + 0x824F, &charTexIdx, &spC0, decodedBufPos);
+ decodedBufPos++;
+ }
+ }
+ decodedBufPos--;
+ } else if ((curChar == 0x205) || (curChar == 0x206) || (curChar == 0x207) || (curChar == 0x208) ||
+ (curChar == 0x209)) {
+ Message_GetTimerDigits(((void)0, gSaveContext.timerCurTimes[curChar - 0x204]), spAC);
+
+ loadChar = false;
+ for (i = 0; i < 8; i++) {
+ if ((i == 4) || ((i != 2) && (i != 5) && (spAC[i] != '\0'))) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ Message_LoadChar(play, spAC[i] + 0x824F, &charTexIdx, &spC0, decodedBufPos);
+ decodedBufPos++;
+ }
+ }
+ decodedBufPos--;
+ } else if (curChar == 0x20A) {
+ digits[0] = 0;
+ timeInSeconds = TIME_TO_MINUTES_F(gSaveContext.save.time);
+ digits[1] = timeInSeconds / 60.0f;
+ while (digits[1] >= 10) {
+ digits[0]++;
+ digits[1] -= 10;
+ }
+
+ digits[2] = 0;
+ digits[3] = (s32)timeInSeconds % 60;
+ while (digits[3] >= 10) {
+ digits[2]++;
+ digits[3] -= 10;
+ }
+
+ for (i = 0; i < 4; i++) {
+ Font_LoadChar(play, digits[i] + 0x824F, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F;
+ decodedBufPos++;
+ if (i == 1) {
+ Font_LoadChar(play, 0x8E9E, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x8E9E;
+ decodedBufPos++;
+ } else if (i == 3) {
+ Font_LoadChar(play, 0x95AA, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x95AA;
+ }
+ }
+ spC0 += 6 * (16.0f * msgCtx->textCharScale);
+ } else if (curChar == 0x20B) {
+ digits[0] = digits[1] = digits[2] = 0;
+ digits[3] = Flags_GetAllTreasure(play);
+
+ while (digits[3] >= 1000) {
+ digits[0]++;
+ digits[3] -= 1000;
+ }
+ while (digits[3] >= 100) {
+ digits[1]++;
+ digits[3] -= 100;
+ }
+ while (digits[3] >= 10) {
+ digits[2]++;
+ digits[3] -= 10;
+ }
+
+ loadChar = false;
+ for (i = 0; i < 4; i++) {
+ if ((i == 3) || (digits[i] != 0)) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ Font_LoadChar(play, digits[i] + 0x824F, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F;
+ decodedBufPos++;
+ spC0 += 16.0f * msgCtx->textCharScale;
+ }
+ }
+ Message_LoadChar(play, 0x9543, &charTexIdx, &spC0, decodedBufPos);
+ } else if (curChar == 0x20C) {
+ decodedBufPos++;
+ msgCtx->unk120BE = spD2;
+ msgCtx->unk120C0 = decodedBufPos;
+ msgCtx->unk120C2 = 2;
+ msgCtx->bankRupeesSelected = 0;
+ msgCtx->unk120C4 = charTexIdx;
+ digits[0] = digits[1] = digits[2] = 0;
+
+ for (i = 0; i < 3; i++) {
+ Message_LoadChar(play, digits[i] + 0x824F, &charTexIdx, &spC0, decodedBufPos);
+ decodedBufPos++;
+ }
+ func_8014CCB4(play, &decodedBufPos, &charTexIdx, &spC0);
+ } else if (curChar == 0x20D) {
+ digits[0] = digits[1] = 0;
+ digits[2] = msgCtx->bankRupeesSelected;
+
+ while (digits[2] >= 100) {
+ digits[0]++;
+ digits[2] -= 100;
+ }
+
+ while (digits[2] >= 10) {
+ digits[1]++;
+ digits[2] -= 10;
+ }
+
+ loadChar = false;
+ for (i = 0; i < 3; i++) {
+ if ((i == 2) || (digits[i] != 0)) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ Message_LoadChar(play, digits[i] + 0x824F, &charTexIdx, &spC0, decodedBufPos);
+ decodedBufPos++;
+ }
+ }
+ func_8014CCB4(play, &decodedBufPos, &charTexIdx, &spC0);
+ } else if (curChar == 0x20E) {
+ digits[0] = digits[1] = digits[2] = 0;
+ digits[3] = msgCtx->bankRupees;
+
+ while (digits[3] >= 1000) {
+ digits[0]++;
+ digits[3] -= 1000;
+ }
+ while (digits[3] >= 100) {
+ digits[1]++;
+ digits[3] -= 100;
+ }
+ while (digits[3] >= 10) {
+ digits[2]++;
+ digits[3] -= 10;
+ }
+
+ loadChar = false;
+ for (i = 0; i < 4; i++) {
+ if ((i == 3) || (digits[i] != 0)) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ Message_LoadChar(play, digits[i] + 0x824F, &charTexIdx, &spC0, decodedBufPos);
+ decodedBufPos++;
+ }
+ }
+ func_8014CCB4(play, &decodedBufPos, &charTexIdx, &spC0);
+ } else if (curChar == 0x20F) {
+ Message_LoadTime(play, curChar, &charTexIdx, &spC0, &decodedBufPos);
+ } else if (curChar == 0x21C) {
+ digits[0] = digits[1] = 0;
+ digits[2] = gSaveContext.save.saveInfo.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex];
+
+ while (digits[2] >= 100) {
+ digits[0]++;
+ digits[2] -= 100;
+ }
+ while (digits[2] >= 10) {
+ digits[1]++;
+ digits[2] -= 10;
+ }
+
+ loadChar = false;
+ for (i = 0; i < 3; i++) {
+ if ((i == 2) || (digits[i] != 0)) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ Message_LoadChar(play, digits[i] + 0x824F, &charTexIdx, &spC0, decodedBufPos);
+ decodedBufPos++;
+ }
+ }
+ Message_LoadChar(play, 0x906C, &charTexIdx, &spC0, decodedBufPos);
+ decodedBufPos++;
+ Message_LoadChar(play, 0x96DA, &charTexIdx, &spC0, decodedBufPos);
+ } else if (curChar == 0x21D) {
+ digits[0] = digits[1] = 0;
+ digits[2] = Inventory_GetSkullTokenCount(play->sceneId);
+
+ while (digits[2] >= 100) {
+ digits[0]++;
+ digits[2] -= 100;
+ }
+ while (digits[2] >= 10) {
+ digits[1]++;
+ digits[2] -= 10;
+ }
+
+ loadChar = false;
+ for (i = 0; i < 3; i++) {
+ if ((i == 2) || (digits[i] != 0)) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ Message_LoadChar(play, digits[i] + 0x824F, &charTexIdx, &spC0, decodedBufPos);
+ decodedBufPos++;
+ }
+ }
+ Message_LoadChar(play, 0x9543, &charTexIdx, &spC0, decodedBufPos);
+ } else if (curChar == 0x21E) {
+ digits[0] = 0;
+ digits[1] = gSaveContext.minigameScore;
+
+ while (digits[1] >= 10) {
+ digits[0]++;
+ digits[1] -= 10;
+ }
+
+ for (i = 0; i < 2; i++) {
+ if ((i == 1) || (digits[i] != 0)) {
+ Message_LoadChar(play, digits[i] + 0x824F, &charTexIdx, &spC0, decodedBufPos);
+ decodedBufPos++;
+ }
+ }
+ decodedBufPos--;
+ } else if (curChar == 0x21F) {
+ digits[0] = digits[1] = digits[2] = 0;
+ digits[3] = gSaveContext.minigameScore;
+
+ while (digits[3] >= 1000) {
+ digits[0]++;
+ digits[3] -= 1000;
+ }
+ while (digits[3] >= 100) {
+ digits[1]++;
+ digits[3] -= 100;
+ }
+ while (digits[3] >= 10) {
+ digits[2]++;
+ digits[3] -= 10;
+ }
+
+ loadChar = false;
+ for (i = 0; i < 4; i++) {
+ if ((i == 3) || (digits[i] != 0)) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ Message_LoadChar(play, digits[i] + 0x824F, &charTexIdx, &spC0, decodedBufPos);
+ decodedBufPos++;
+ }
+ }
+ decodedBufPos--;
+ } else if (curChar == 0x220) {
+ decodedBufPos++;
+ msgCtx->unk120BE = spD2;
+ msgCtx->unk120C0 = decodedBufPos;
+ msgCtx->unk120C2 = 0;
+ msgCtx->bankRupeesSelected = 0;
+ msgCtx->unk120C4 = charTexIdx;
+ digits[0] = digits[1] = digits[2] = 0;
+ for (i = 0; i < 2; i++) {
+ Message_LoadChar(play, digits[i] + 0x824F, &charTexIdx, &spC0, decodedBufPos);
+ decodedBufPos++;
+ }
+ func_8014CCB4(play, &decodedBufPos, &charTexIdx, &spC0);
+ } else if (curChar == 0x221) {
+ decodedBufPos++;
+ msgCtx->unk120BE = spD2;
+ msgCtx->unk120C0 = decodedBufPos;
+ msgCtx->unk120C2 = 0;
+ msgCtx->bankRupeesSelected = 0;
+ msgCtx->unk120C4 = charTexIdx;
+
+ for (i = 0; i < 5; i++) {
+ msgCtx->unk12054[i] = 1;
+ Message_LoadChar(play, 0x8250, &charTexIdx, &spC0, decodedBufPos);
+ decodedBufPos++;
+ }
+ decodedBufPos--;
+ } else if (curChar == 0x223) {
+ if (gSaveContext.save.timeSpeedOffset == 0x12) {
+ var_s3_8 = 0;
+ } else if (gSaveContext.save.timeSpeedOffset == 0) {
+ var_s3_8 = 1;
+ } else {
+ var_s3_8 = 2;
+ }
+
+ for (i = 0; i < 3; i++) {
+ msgCtx->decodedBuffer.wchar[decodedBufPos] = D_801D0268[var_s3_8][i];
+ Font_LoadChar(play, D_801D0268[var_s3_8][i], charTexIdx);
+ decodedBufPos++;
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ }
+ decodedBufPos--;
+ spC0 += 3.0f * (16.0f * msgCtx->textCharScale);
+ msgCtx->choiceIndex = var_s3_8;
+ } else if (curChar == 0x224) {
+ Message_LoadOwlWarpText(play, &charTexIdx, &spC0, &decodedBufPos);
+ } else if (curChar == 0x225) {
+ decodedBufPos++;
+ msgCtx->unk120BE = spD2;
+ msgCtx->unk120C0 = decodedBufPos;
+ msgCtx->unk120C2 = 0;
+ msgCtx->bankRupeesSelected = 0;
+ msgCtx->unk120C4 = charTexIdx;
+
+ for (i = 0; i < 3; i++) {
+ msgCtx->unk12054[i] = 1;
+ Font_LoadChar(play, 0x8250, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x8250;
+ spC0 += 16.0f * msgCtx->textCharScale;
+ decodedBufPos++;
+ }
+ decodedBufPos--;
+ } else if (curChar == 0x226) {
+ for (i = 0; i < 6; i++) {
+ msgCtx->decodedBuffer.wchar[decodedBufPos] =
+ D_801D027C[((void)0, gSaveContext.save.saveInfo.spiderHouseMaskOrder[i])];
+ decodedBufPos++;
+ Message_LoadChar(play, i + 0x8250, &charTexIdx, &spC0, decodedBufPos);
+ decodedBufPos++;
+ }
+ msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x2000;
+ } else if ((curChar >= 0x227) && (curChar < 0x22B)) {
+ digits[0] = digits[1] = 0;
+ digits[2] = 15 - gSaveContext.save.saveInfo.inventory.strayFairies[curChar - 0x227];
+
+ while (digits[2] >= 100) {
+ digits[0]++;
+ digits[2] -= 100;
+ }
+ while (digits[2] >= 10) {
+ digits[1]++;
+ digits[2] -= 10;
+ }
+
+ loadChar = false;
+ for (i = 0; i < 3; i++) {
+ if ((i == 2) || (digits[i] != 0)) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ Font_LoadChar(play, digits[i] + 0x824F, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F;
+ decodedBufPos++;
+ spC0 += 16.0f * msgCtx->textCharScale;
+ }
+ }
+ Message_LoadChar(play, 0x906C, &charTexIdx, &spC0, decodedBufPos);
+ } else if (curChar == 0x22B) {
+ digits[0] = digits[1] = digits[2] = 0;
+ digits[3] = gSaveContext.minigameScore;
+
+ while (digits[3] >= 1000) {
+ digits[0]++;
+ digits[3] -= 1000;
+ }
+ while (digits[3] >= 100) {
+ digits[1]++;
+ digits[3] -= 100;
+ }
+ while (digits[3] >= 10) {
+ digits[2]++;
+ digits[3] -= 10;
+ }
+
+ loadChar = false;
+ for (i = 0; i < 4; i++) {
+ if ((i == 3) || (digits[i] != 0)) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ Font_LoadChar(play, digits[i] + 0x824F, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F;
+ decodedBufPos++;
+ spC0 += 16.0f * msgCtx->textCharScale;
+ }
+ }
+ Message_LoadChar(play, 0x94AD, &charTexIdx, &spC0, decodedBufPos);
+ } else if ((curChar == 0x22C) || (curChar == 0x22D)) {
+ if (curChar == 0x22C) {
+ digits[0] = gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][0];
+ digits[1] = gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][1];
+ digits[2] = gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][2];
+ } else {
+ digits[0] = (HS_GET_LOTTERY_CODE_GUESS() & 0xF00) >> 8;
+ digits[1] = (HS_GET_LOTTERY_CODE_GUESS() & 0xF0) >> 4;
+ digits[2] = HS_GET_LOTTERY_CODE_GUESS() & 0xF;
+ }
+ for (i = 0; i < 3; i++) {
+ Font_LoadChar(play, digits[i] + 0x824F, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F;
+ decodedBufPos++;
+ spC0 += 16.0f * msgCtx->textCharScale;
+ }
+ decodedBufPos--;
+ } else if (curChar == 0x22E) {
+ digits[0] = digits[1] = digits[2] = 0;
+ digits[3] = gItemPrices[GET_CUR_FORM_BTN_ITEM(player->heldItemButton)];
+
+ while (digits[3] >= 1000) {
+ digits[0]++;
+ digits[3] -= 1000;
+ }
+ while (digits[3] >= 100) {
+ digits[1]++;
+ digits[3] -= 100;
+ }
+ while (digits[3] >= 10) {
+ digits[2]++;
+ digits[3] -= 10;
+ }
+
+ loadChar = false;
+ for (i = 0; i < 4; i++) {
+ if ((i == 3) || (digits[i] != 0)) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ Font_LoadChar(play, digits[i] + 0x824F, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F;
+ decodedBufPos++;
+ spC0 += 16.0f * msgCtx->textCharScale;
+ }
+ }
+ func_8014CCB4(play, &decodedBufPos, &charTexIdx, &spC0);
+ } else if (curChar == 0x22F) {
+ for (i = 0; i < 5; i++) {
+ digits[i] = gSaveContext.save.saveInfo.bomberCode[i];
+ Font_LoadChar(play, digits[i] + 0x824F, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F;
+ decodedBufPos++;
+ spC0 += 16.0f * msgCtx->textCharScale;
+ }
+ decodedBufPos--;
+ } else if ((curChar >= 0x231) && (curChar < 0x237)) {
+ // index = curChar - 0x231;
+ msgCtx->decodedBuffer.wchar[decodedBufPos] =
+ D_801D027C[((void)0, gSaveContext.save.saveInfo.spiderHouseMaskOrder[(s16)(curChar - 0x231)])];
+ decodedBufPos++;
+ Message_LoadChar(
+ play,
+ D_801D0284[((void)0, gSaveContext.save.saveInfo.spiderHouseMaskOrder[(s16)(curChar - 0x231)])],
+ &charTexIdx, &spC0, decodedBufPos);
+ decodedBufPos++;
+ msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x2000;
+ } else if (curChar == 0x237) {
+ timeToMoonCrash = TIME_UNTIL_MOON_CRASH;
+ digits[0] = 0;
+ digits[1] = TIME_TO_HOURS_F_ALT(timeToMoonCrash);
+
+ while (digits[1] >= 10) {
+ digits[0]++;
+ digits[1] -= 10;
+ }
+
+ loadChar = false;
+ for (i = 0; i < 2; i++) {
+ if ((i == 1) || (digits[i] != 0)) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ Message_LoadChar(play, digits[i] + 0x824F, &charTexIdx, &spC0, decodedBufPos);
+ decodedBufPos++;
+ }
+ }
+ Font_LoadChar(play, 0x8E9E, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x8E9E;
+ decodedBufPos++;
+ Font_LoadChar(play, 0x8AD4, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x8E9E;
+ spC0 += 2.0f * (16.0f * msgCtx->textCharScale);
+ } else if (curChar == 0x238) {
+ Message_LoadTime(play, curChar, &charTexIdx, &spC0, &decodedBufPos);
+ } else if ((curChar == 0x300) || (curChar == 0x301) || (curChar == 0x302) || (curChar == 0x308)) {
+ if (curChar == 0x308) {
+ value = (s32)HS_GET_HIGH_SCORE_3_LOWER();
+ } else {
+ value = HIGH_SCORE(curChar - 0x300);
+ }
+ if (curChar == 0x302) {
+ if (LINK_AGE_IN_YEARS == YEARS_CHILD) {
+ value &= 0x7F;
+ } else {
+ value = (s16)((HIGH_SCORE(font->msgBuf.wchar[msgCtx->msgBufPos]) & 0xFF000000) >> 0x18) & 0x7F;
+ }
+ }
+ digits[3] = value;
+ digits[0] = digits[1] = digits[2] = 0;
+
+ while (digits[3] >= 1000) {
+ digits[0]++;
+ digits[3] -= 1000;
+ }
+ while (digits[3] >= 100) {
+ digits[1]++;
+ digits[3] -= 100;
+ }
+ while (digits[3] >= 10) {
+ digits[2]++;
+ digits[3] -= 10;
+ }
+
+ loadChar = false;
+ for (i = 0; i < 4; i++) {
+ if ((i == 3) || (digits[i] != 0)) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ Font_LoadChar(play, digits[i] + 0x824F, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F;
+ decodedBufPos++;
+ spC0 += 16.0f * msgCtx->textCharScale;
+ }
+ }
+ decodedBufPos--;
+ } else if ((curChar == 0x307) || (curChar == 0x309) || (curChar == 0x30A) || (curChar == 0x30B) ||
+ (curChar == 0x30C)) {
+ var_fs0 = 8.0f;
+ if (curChar == 0x307) {
+ Message_GetTimerDigits(GET_HIGH_SCORE(HS_UNK_1), spAC);
+ } else if (curChar == 0x309) {
+ Message_GetTimerDigits(GET_HIGH_SCORE(HS_HORSE_BACK_BALLOON), spAC);
+ } else {
+ Message_GetTimerDigits(
+ ((void)0, gSaveContext.save.saveInfo.dekuPlaygroundHighScores[curChar - 0x30A]), spAC);
+ }
+
+ loadChar = false;
+ for (i = 0; i < 8; i++) {
+ if ((i == 4) || ((i != 2) && (i != 5) && (spAC[i] != '\0'))) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ Font_LoadChar(play, spAC[i] + 0x824F, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.wchar[decodedBufPos] = spAC[i] + 0x824F;
+ decodedBufPos++;
+ } else {
+ var_fs0 -= 1.0f;
+ }
+ }
+ spC0 += var_fs0 * (16.0f * msgCtx->textCharScale);
+ decodedBufPos--;
+ } else if ((curChar == 0x303) || (curChar == 0x304) || (curChar == 0x305)) {
+ temp2 = HIGH_SCORE(curChar - 0x303 + HS_BOAT_ARCHERY);
+ digits[0] = digits[1] = digits[2] = 0;
+ digits[3] = temp2;
+
+ while (digits[3] >= 60) {
+ digits[1]++;
+ if (digits[1] >= 10) {
+ digits[0]++;
+ digits[1] -= 10;
+ }
+ digits[3] -= 60;
+ }
+ while (digits[3] >= 10) {
+ digits[2]++;
+ digits[3] -= 10;
+ }
+
+ for (i = 0; i < 4; i++) {
+ Font_LoadChar(play, digits[i] + 0x824F, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F;
+ decodedBufPos++;
+ if (i == 1) {
+ Font_LoadChar(play, 0x95AA, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x95AA;
+ decodedBufPos++;
+ } else if (i == 3) {
+ Font_LoadChar(play, 0x9562, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x9562;
+ }
+ }
+ spC0 += 4.0f * (16.0f * msgCtx->textCharScale);
+ } else if (curChar == 0x306) {
+ digits[0] = digits[1] = digits[2] = 0;
+ digits[3] = HS_GET_TOWN_SHOOTING_GALLERY_HIGH_SCORE();
+
+ while (digits[3] >= 1000) {
+ digits[0]++;
+ digits[3] -= 1000;
+ }
+ while (digits[3] >= 100) {
+ digits[1]++;
+ digits[3] -= 100;
+ }
+ while (digits[3] >= 10) {
+ digits[2]++;
+ digits[3] -= 10;
+ }
+
+ loadChar = false;
+ for (i = 0; i < 4; i++) {
+ if ((i == 3) || (digits[i] != 0)) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ Font_LoadChar(play, digits[i] + 0x824F, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F;
+ decodedBufPos++;
+ spC0 += 16.0f * msgCtx->textCharScale;
+ }
+ }
+ Message_LoadChar(play, 0x9543, &charTexIdx, &spC0, decodedBufPos);
+ } else if ((curChar == 0x30D) || (curChar == 0x30E) || (curChar == 0x30F)) {
+ //! Removing index and casting one version causes gSaveContext to be reloaded
+ // index = curChar - 0x30D;
+
+ for (playerNameLen = 8; playerNameLen > 0; playerNameLen--) {
+ if (gSaveContext.save.saveInfo.inventory
+ .dekuPlaygroundPlayerName[(s16)(curChar - 0x30D)][playerNameLen - 1] != 0x3E) {
+ break;
+ }
+ }
+
+ for (i = 0; i < playerNameLen; i++) {
+ ptr2 = &font->fontBuf[((void)0, gSaveContext.save.saveInfo.inventory
+ .dekuPlaygroundPlayerName[curChar - 0x30D][i]) *
+ FONT_CHAR_TEX_SIZE];
+ msgCtx->decodedBuffer.wchar[decodedBufPos + i] = 0x30D;
+
+ for (var_v0 = 0; var_v0 < FONT_CHAR_TEX_SIZE; var_v0 += 4) {
+ font->charBuf[font->unk_11D88][charTexIdx + var_v0 + 0] = ptr2[var_v0 + 0];
+ font->charBuf[font->unk_11D88][charTexIdx + var_v0 + 1] = ptr2[var_v0 + 1];
+ font->charBuf[font->unk_11D88][charTexIdx + var_v0 + 2] = ptr2[var_v0 + 2];
+ font->charBuf[font->unk_11D88][charTexIdx + var_v0 + 3] = ptr2[var_v0 + 3];
+ }
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ }
+ decodedBufPos += playerNameLen - 1;
+ spC0 += playerNameLen * (16.0f * msgCtx->textCharScale);
+ } else if (curChar == 0x310) {
+ digits[0] = digits[1] = digits[2] = 0;
+ digits[3] = HS_GET_BOAT_ARCHERY_HIGH_SCORE();
+
+ while (digits[3] >= 1000) {
+ digits[0]++;
+ digits[3] -= 1000;
+ }
+ while (digits[3] >= 100) {
+ digits[1]++;
+ digits[3] -= 100;
+ }
+ while (digits[3] >= 10) {
+ digits[2]++;
+ digits[3] -= 10;
+ }
+
+ loadChar = false;
+ for (i = 0; i < 4; i++) {
+ if ((i == 3) || (digits[i] != 0)) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ Font_LoadChar(play, digits[i] + 0x824F, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F;
+ decodedBufPos++;
+ spC0 += 16.0f * msgCtx->textCharScale;
+ }
+ }
+ Message_LoadChar(play, 0x94AD, &charTexIdx, &spC0, decodedBufPos);
+ } else if (curChar == 0x1F) {
+ decodedBufPos--;
+ for (i = 0; i < font->msgBuf.wchar[msgCtx->msgBufPos + 1]; i++) {
+ msgCtx->decodedBuffer.wchar[++decodedBufPos] = ' ';
+ spC0 += 6.0f;
+ }
+ msgCtx->msgBufPos++;
+ } else if ((curChar == 0xC) || (curChar == 0xA)) {
+ msgCtx->unk11F1A[spD2] = 0;
+ if (msgCtx->unk11F18 == 0) {
+ msgCtx->unk11F1A[spD2] = ((msgCtx->textCharScale * 16.0f * 16.0f) - spC0) * 0.5f;
+ }
+ spD2++;
+ spC0 = 0.0f;
+ if (curChar == 0xA) {
+ spE0++;
+ }
+ } else if ((curChar == 0x101) || (curChar == 0x102) || (curChar == 0x104) ||
+ ((curChar >= 0x130) && (curChar < 0x137))) {
+ // pass
+ } else if (curChar == 0x111) {
+ msgCtx->textFade = true;
+ msgCtx->decodedBuffer.wchar[++decodedBufPos] = font->msgBuf.wchar[++msgCtx->msgBufPos] & 0xFF;
+ } else if (curChar == 0x120) {
+ msgCtx->decodedBuffer.wchar[++decodedBufPos] = font->msgBuf.wchar[++msgCtx->msgBufPos];
+ if (msgCtx->textboxSkipped || (msgCtx->textBoxType == TEXTBOX_TYPE_1) ||
+ (msgCtx->textBoxType == TEXTBOX_TYPE_3) || (msgCtx->textBoxType == TEXTBOX_TYPE_6) ||
+ (msgCtx->textBoxType == TEXTBOX_TYPE_8) || (msgCtx->textBoxType == TEXTBOX_TYPE_9) ||
+ (msgCtx->textBoxType == TEXTBOX_TYPE_B) || (msgCtx->unk11F0C == 3)) {
+ Audio_PlaySfx(msgCtx->decodedBuffer.wchar[decodedBufPos]);
+ }
+ } else if (curChar == 0x128) {
+ msgCtx->decodedBuffer.wchar[++decodedBufPos] = font->msgBuf.wchar[++msgCtx->msgBufPos];
+ } else if ((curChar != 0x20) && ((curChar < 0x2000) || (curChar >= 0x2009))) {
+ Font_LoadChar(play, curChar, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ if ((curChar == 0x8169) || (curChar == 0x8175)) {
+ spC0 += 10.0f * msgCtx->textCharScale;
+ } else if (curChar == 0x8145) {
+ spC0 += (12.0f * msgCtx->textCharScale);
+ } else if ((curChar == 0x8148) || (curChar == 0x8149)) {
+ spC0 += 14.0f * msgCtx->textCharScale;
+ } else if (curChar == 0x8144) {
+ spC0 += 8.0f * msgCtx->textCharScale;
+ } else if ((curChar == 0x816A) || (curChar == 0x8176)) {
+ spC0 += 10.0f * msgCtx->textCharScale;
+ } else if ((curChar == 0x8141) || (curChar == 0x8142) || (curChar == 0x8168)) {
+ spC0 += 12.0f * msgCtx->textCharScale;
+ } else if (curChar == 0x8194) {
+ spC0 += 14.0f * msgCtx->textCharScale;
+ } else {
+ spC0 += 16.0f * msgCtx->textCharScale;
+ }
+
+ } else if (curChar == 0x20) {
+ spC0 += 6.0f;
+ }
+
+ decodedBufPos++;
+ msgCtx->msgBufPos++;
+ }
+ } else if (msgCtx->textIsCredits) {
+ Message_DecodeCredits(play);
+ } else {
+ Message_DecodeNES(play);
+ }
+}
+#else
+void Message_Decode(PlayState* play);
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/Message_Decode.s")
+#endif
+
+void func_80150A84(PlayState* play) {
+ MessageContext* msgCtx = &play->msgCtx;
+ s32 textBoxType = msgCtx->textBoxType;
+
+ if (D_801CFC78[textBoxType] != 14) {
+ DmaMgr_SendRequest0(msgCtx->textboxSegment,
+ &SEGMENT_ROM_START(message_static)[D_801CFC78[textBoxType] * 0x1000], 0x1000);
+
+ if (!play->pauseCtx.bombersNotebookOpen) {
+ if ((textBoxType == TEXTBOX_TYPE_0) || (textBoxType == TEXTBOX_TYPE_6) || (textBoxType == TEXTBOX_TYPE_A) ||
+ (textBoxType == TEXTBOX_TYPE_B)) {
+ msgCtx->textboxColorRed = 0;
+ msgCtx->textboxColorGreen = 0;
+ msgCtx->textboxColorBlue = 0;
+ } else if (textBoxType == TEXTBOX_TYPE_1) {
+ msgCtx->textboxColorRed = 70;
+ msgCtx->textboxColorGreen = 50;
+ msgCtx->textboxColorBlue = 30;
+ } else if ((textBoxType == TEXTBOX_TYPE_2) || (textBoxType == TEXTBOX_TYPE_8)) {
+ msgCtx->textboxColorRed = 0;
+ msgCtx->textboxColorGreen = 10;
+ msgCtx->textboxColorBlue = 50;
+ } else if (textBoxType == TEXTBOX_TYPE_D) {
+ msgCtx->textboxColorRed = 255;
+ msgCtx->textboxColorGreen = 255;
+ msgCtx->textboxColorBlue = 195;
+ } else {
+ msgCtx->textboxColorRed = 255;
+ msgCtx->textboxColorGreen = 0;
+ msgCtx->textboxColorBlue = 0;
+ }
+
+ if (textBoxType == TEXTBOX_TYPE_1) {
+ msgCtx->textboxColorAlphaTarget = 230;
+ } else if (textBoxType == TEXTBOX_TYPE_3) {
+ msgCtx->textboxColorAlphaTarget = 180;
+ } else if (textBoxType == TEXTBOX_TYPE_D) {
+ msgCtx->textboxColorAlphaTarget = 220;
+ } else {
+ msgCtx->textboxColorAlphaTarget = 170;
+ }
+ } else {
+ msgCtx->textboxColorRed = 255;
+ msgCtx->textboxColorGreen = 255;
+ msgCtx->textboxColorBlue = 255;
+ msgCtx->textboxColorAlphaTarget = 255;
+ }
+ msgCtx->textboxColorAlphaCurrent = 0;
+ }
+}
+
+void Message_OpenText(PlayState* play, u16 textId) {
+ MessageContext* msgCtx = &play->msgCtx;
+ Font* font = &msgCtx->font;
+ Player* player = GET_PLAYER(play);
+ f32 var_fv0;
+
+ if (play->msgCtx.msgMode == MSGMODE_NONE) {
+ gSaveContext.prevHudVisibility = gSaveContext.hudVisibility;
+ }
+
+ if (textId == 0xFF) {
+ func_80115844(play, DO_ACTION_STOP);
+ play->msgCtx.hudVisibility = gSaveContext.hudVisibility;
+ Interface_SetHudVisibility(HUD_VISIBILITY_A_B_C);
+ gSaveContext.save.unk_06 = 20;
+ } else if ((textId == 0x579) || (textId == 0x8D8)) {
+ Interface_SetHudVisibility(HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE);
+ } else if (((textId == 0x28) || (textId == 0x29) || (textId == 0x2A)) &&
+ (player->transformation == PLAYER_FORM_DEKU)) {
+ //! FAKE:
+ if (msgCtx) {}
+ textId = 0xC9;
+ } else if (textId == 0x11) {
+ if (gSaveContext.save.saveInfo.inventory.strayFairies[((void)0, gSaveContext.dungeonIndex)] == 0xF) {
+ textId = 0xF3;
+ }
+ } else if ((textId == 0x92) && (play->sceneId == SCENE_KOEPONARACE)) {
+ textId = 0xCD;
+ }
+
+ if ((textId == 0xC) && (GET_QUEST_HEART_PIECE_COUNT != 0)) {
+ textId = GET_QUEST_HEART_PIECE_COUNT;
+ textId += 0xC4;
+ }
+
+ msgCtx->currentTextId = textId;
+
+ if ((msgCtx->currentTextId == 0xC) || (msgCtx->currentTextId == 0xD) || (msgCtx->currentTextId == 0xC5) ||
+ (msgCtx->currentTextId == 0xC6) || (msgCtx->currentTextId == 0xC7)) {
+ Interface_SetHudVisibility(HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE);
+ }
+
+ msgCtx->messageHasSetSfx = false;
+ D_801C6A70 = 0;
+ msgCtx->textboxSkipped = false;
+ msgCtx->textIsCredits = false;
+ var_fv0 = 1.0f;
+
+ if (play->pauseCtx.bombersNotebookOpen) {
+ if (gSaveContext.options.language == LANGUAGE_JPN) {
+ msgCtx->textCharScale = 1.4f;
+ msgCtx->unk11FFC = 0x1E;
+ msgCtx->unk11FF8 = 0x32;
+ var_fv0 = 1.4;
+ } else {
+ msgCtx->textCharScale = 1.4f;
+ msgCtx->unk11FFC = 0x16;
+ msgCtx->unk11FF8 = 0x32;
+ var_fv0 = 1.4;
+ }
+ } else if (textId >= 0x4E20) {
+ msgCtx->textIsCredits = true;
+ msgCtx->textCharScale = 0.85f;
+ msgCtx->unk11FFC = 6;
+ msgCtx->unk11FF8 = 0x14;
+ } else if (gSaveContext.options.language == LANGUAGE_JPN) {
+ msgCtx->textCharScale = 0.88f;
+ msgCtx->unk11FFC = 0x12;
+ msgCtx->unk11FF8 = 0x32;
+ } else {
+ msgCtx->textCharScale = 0.75f;
+ msgCtx->unk11FFC = 0xC;
+ msgCtx->unk11FF8 = 0x41;
+ }
+
+ sCharTexSize = msgCtx->textCharScale * 16.0f;
+ sCharTexScale = 1024.0f / msgCtx->textCharScale;
+ D_801F6B08 = 1024.0f / var_fv0;
+
+ if (msgCtx->textIsCredits) {
+ Message_FindCreditsMessage(play, textId);
+ msgCtx->msgLength = font->messageEnd;
+ DmaMgr_SendRequest0(&font->msgBuf, &SEGMENT_ROM_START(staff_message_data_static)[font->messageStart],
+ font->messageEnd);
+ } else if (gSaveContext.options.language == LANGUAGE_JPN) {
+ Message_FindMessage(play, textId);
+ msgCtx->msgLength = font->messageEnd;
+ DmaMgr_SendRequest0(&font->msgBuf, &SEGMENT_ROM_START(message_data_static)[font->messageStart],
+ font->messageEnd);
+ } else {
+ Message_FindMessageNES(play, textId);
+ msgCtx->msgLength = font->messageEnd;
+ DmaMgr_SendRequest0(&font->msgBuf, &SEGMENT_ROM_START(message_data_static)[font->messageStart],
+ font->messageEnd);
+ }
+
+ msgCtx->choiceNum = 0;
+ msgCtx->textUnskippable = false;
+ msgCtx->textboxEndType = TEXTBOX_ENDTYPE_00;
+ msgCtx->textDrawPos = 0;
+ msgCtx->msgBufPos = 0;
+ msgCtx->decodedTextLen = 0;
+
+ msgCtx->unk11F08 = font->msgBuf.schar[msgCtx->msgBufPos] << 8;
+ msgCtx->unk11F08 |= font->msgBuf.schar[msgCtx->msgBufPos + 1];
+
+ msgCtx->unk11F18 = (msgCtx->unk11F08 & 0xF000) >> 0xC;
+ msgCtx->textBoxType = (msgCtx->unk11F08 & 0xF00) >> 8;
+ msgCtx->textBoxPos = (msgCtx->unk11F08 & 0xF0) >> 4;
+ msgCtx->unk11F0C = msgCtx->unk11F08 & 0xF;
+
+ if ((msgCtx->unk11F0C == 1) || (msgCtx->unk11F0C == 3)) {
+ msgCtx->textUnskippable = true;
+ }
+ msgCtx->itemId = 0xFE;
+
+ if ((msgCtx->textBoxType == TEXTBOX_TYPE_5) || (msgCtx->textBoxType == TEXTBOX_TYPE_D) ||
+ (play->pauseCtx.bombersNotebookOpen)) {
+ msgCtx->unk120CE = msgCtx->unk120D0 = msgCtx->unk120D2 = 0;
+ } else {
+ msgCtx->unk120CE = msgCtx->unk120D0 = msgCtx->unk120D2 = 0xFF;
+ }
+
+ msgCtx->choiceIndex = 0;
+
+ if (msgCtx->unk11F0C != 3) {
+ msgCtx->textColorAlpha = 0xFF;
+ } else {
+ msgCtx->textColorAlpha = 0;
+ }
+
+ if (textId == 0x1467) {
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_KAFEI);
+ }
+
+ if (textId == 0x2955) {
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ANJU);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_KAFEI);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_COUPLES_MASK);
+ }
+}
+
+void func_801514B0(PlayState* play, u16 arg1, u8 arg2) {
+ MessageContext* msgCtx = &play->msgCtx;
+ Font* font = &msgCtx->font;
+ Player* player = GET_PLAYER(play);
+ f32 temp = 1024.0f;
+
+ msgCtx->ocarinaAction = 0xFFFF;
+
+ if (msgCtx->msgMode == MSGMODE_NONE) {
+ gSaveContext.prevHudVisibility = gSaveContext.hudVisibility;
+ }
+ msgCtx->messageHasSetSfx = false;
+ D_801C6A70 = 0;
+ msgCtx->textboxSkipped = false;
+ msgCtx->textIsCredits = false;
+
+ if (gSaveContext.options.language == LANGUAGE_JPN) {
+ msgCtx->textCharScale = 0.88f;
+ msgCtx->unk11FFC = 0x12;
+ msgCtx->unk11FF8 = 0x32;
+ } else {
+ msgCtx->textCharScale = 0.75f;
+ msgCtx->unk11FFC = 0xC;
+ msgCtx->unk11FF8 = 0x41;
+ }
+
+ sCharTexSize = msgCtx->textCharScale * 16.0f;
+ sCharTexScale = temp / msgCtx->textCharScale;
+ D_801F6B08 = temp / 1;
+
+ if ((arg1 == 0x1709) && (player->transformation == 3)) {
+ arg1 = 0x1705;
+ }
+
+ msgCtx->currentTextId = arg1;
+
+ if (gSaveContext.options.language == LANGUAGE_JPN) {
+ Message_FindMessage(play, arg1);
+ msgCtx->msgLength = font->messageEnd;
+ DmaMgr_SendRequest0(&font->msgBuf, &SEGMENT_ROM_START(message_data_static)[font->messageStart],
+ font->messageEnd);
+ } else {
+ Message_FindMessageNES(play, arg1);
+ msgCtx->msgLength = font->messageEnd;
+ DmaMgr_SendRequest0(&font->msgBuf, &SEGMENT_ROM_START(message_data_static)[font->messageStart],
+ font->messageEnd);
+ }
+ msgCtx->choiceNum = 0;
+ msgCtx->textUnskippable = false;
+ msgCtx->textboxEndType = TEXTBOX_ENDTYPE_00;
+ msgCtx->textDrawPos = 0;
+ msgCtx->msgBufPos = 0;
+ msgCtx->decodedTextLen = 0;
+ msgCtx->unk11F08 = font->msgBuf.wchar[msgCtx->msgBufPos];
+ msgCtx->unk11F18 = (msgCtx->unk11F08 & 0xF000) >> 0xC;
+ msgCtx->textBoxType = TEXTBOX_TYPE_9;
+ msgCtx->textBoxPos = arg2;
+ msgCtx->unk11F0C = msgCtx->unk11F08 & 0xF;
+ msgCtx->textUnskippable = true;
+ DmaMgr_SendRequest0(msgCtx->textboxSegment, &SEGMENT_ROM_START(message_static)[D_801CFC78[0] << 12], 0x1000);
+ msgCtx->textboxColorRed = 0;
+ msgCtx->textboxColorGreen = 0;
+ msgCtx->textboxColorBlue = 0;
+ msgCtx->textboxColorAlphaTarget = 0xE6;
+ msgCtx->textboxColorAlphaCurrent = 0;
+ msgCtx->textColorAlpha = 0xFF;
+ msgCtx->talkActor = NULL;
+ msgCtx->msgMode = MSGMODE_TEXT_START;
+ msgCtx->stateTimer = 0;
+ msgCtx->textDelayTimer = 0;
+ play->msgCtx.ocarinaMode = OCARINA_MODE_NONE;
+ msgCtx->unk120D2 = 0xFF;
+ msgCtx->unk120CE = msgCtx->unk120D0 = msgCtx->unk120D2;
+}
+
+void Message_StartTextbox(PlayState* play, u16 textId, Actor* actor) {
MessageContext* msgCtx = &play->msgCtx;
msgCtx->ocarinaAction = 0xFFFF;
- func_80150D08(play, textId);
- msgCtx->unkActor = Actor;
- msgCtx->msgMode = 1;
+ Message_OpenText(play, textId);
+ msgCtx->talkActor = actor;
+ msgCtx->msgMode = MSGMODE_TEXT_START;
msgCtx->stateTimer = 0;
- msgCtx->unk12024 = 0;
- play->msgCtx.ocarinaMode = 0;
+ msgCtx->textDelayTimer = 0;
+ play->msgCtx.ocarinaMode = OCARINA_MODE_NONE;
}
void Message_ContinueTextbox(PlayState* play, u16 textId) {
@@ -334,11 +3328,11 @@ void Message_ContinueTextbox(PlayState* play, u16 textId) {
InterfaceContext* interfaceCtx = &play->interfaceCtx;
msgCtx->msgLength = 0;
- func_80150D08(play, textId);
+ Message_OpenText(play, textId);
func_80150A84(play);
- msgCtx->msgMode = 5;
+ msgCtx->msgMode = MSGMODE_TEXT_CONTINUING;
msgCtx->stateTimer = 8;
- msgCtx->unk12024 = 0;
+ msgCtx->textDelayTimer = 0;
if (interfaceCtx->unk_222 == 0) {
if (textId != 0x1B93) {
@@ -347,26 +3341,26 @@ void Message_ContinueTextbox(PlayState* play, u16 textId) {
func_8011552C(play, DO_ACTION_DECIDE);
}
}
- msgCtx->unk1203C = msgCtx->unk1203A;
+ msgCtx->textboxColorAlphaCurrent = msgCtx->textboxColorAlphaTarget;
if (play->pauseCtx.bombersNotebookOpen) {
- msgCtx->unk12004 = 0x22;
- msgCtx->unk12006 = 0x15E;
- func_80149C18(play);
+ msgCtx->textboxXTarget = 34;
+ msgCtx->textboxYTarget = 350;
+ Message_GrowTextbox(play);
msgCtx->stateTimer = 1;
}
}
-void func_80151A68(PlayState* play, u16 textId) {
+void Message_DisplaySceneTitleCard(PlayState* play, u16 textId) {
MessageContext* msgCtx = &play->msgCtx;
msgCtx->msgLength = 0;
- func_80150D08(play, textId);
+ Message_OpenText(play, textId);
func_80150A84(play);
- func_8015B198(play);
- msgCtx->msgMode = 0x45;
- msgCtx->unk12024 = 0;
- msgCtx->unk1203C = msgCtx->unk1203A = msgCtx->unk1201E = 0;
+ Message_DecodeNES(play);
+ msgCtx->msgMode = MSGMODE_SCENE_TITLE_CARD_FADE_IN_BACKGROUND;
+ msgCtx->textDelayTimer = 0;
+ msgCtx->textboxColorAlphaCurrent = msgCtx->textboxColorAlphaTarget = msgCtx->textColorAlpha = 0;
msgCtx->stateTimer = 30;
// Day/Dawn/Night.. Messages
@@ -402,7 +3396,10 @@ void Message_BombersNotebookQueueEvent(PlayState* play, u8 event) {
}
}
-u32 func_80151C9C(PlayState* play) {
+/**
+ * @return s32 true if an entry to be shown was found and triggered
+ */
+s32 Message_BombersNotebookProcessEventQueue(PlayState* play) {
MessageContext* msgCtx = &play->msgCtx;
while (true) {
@@ -429,16 +3426,188 @@ u32 func_80151C9C(PlayState* play) {
}
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80151DA4.s")
+u16 D_801D028C[] = {
+ 0x1B5A, // OCARINA_ACTION_0
+ 0x1B5B, //
+ 0x1B5C, // OCARINA_ACTION_DEMONSTRATE_SONATA
+ 0x1B5D, // OCARINA_ACTION_DEMONSTRATE_GORON_LULLABY
+ 0x1B5E, // OCARINA_ACTION_DEMONSTRATE_NEW_WAVE
+ 0x1B5F, // OCARINA_ACTION_DEMONSTRATE_ELEGY
+ 0x1B60, // OCARINA_ACTION_DEMONSTRATE_OATH
+ 0x1B61, // OCARINA_ACTION_DEMONSTRATE_SARIAS
+ 0x1B62, // OCARINA_ACTION_DEMONSTRATE_TIME
+ 0x1B63, // OCARINA_ACTION_DEMONSTRATE_HEALING
+ 0x1B64, // OCARINA_ACTION_DEMONSTRATE_EPONAS
+ 0x1B65, // OCARINA_ACTION_DEMONSTRATE_SOARING
+ 0x1B66, // OCARINA_ACTION_DEMONSTRATE_STORMS
+ 0x1B67, // OCARINA_ACTION_DEMONSTRATE_SUNS
+ 0x1B68, // OCARINA_ACTION_DEMONSTRATE_INVERTED_TIME
+ 0x1B69, // OCARINA_ACTION_DEMONSTRATE_DOUBLE_TIME
+ 0x1B6A, // OCARINA_ACTION_DEMONSTRATE_GORON_LULLABY_INTRO
+ 0, // OCARINA_ACTION_11
+ 0xDC7, // OCARINA_ACTION_3B
+ 0xDC9, // OCARINA_ACTION_3C
+ 0x120A, // OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_FIRST_HALF
+ 0x120B, // OCARINA_ACTION_DEMONSTRATE_EVAN_PART2_FIRST_HALF
+ 0x122C, // OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_SECOND_HALF
+ 0x122F, // OCARINA_ACTION_DEMONSTRATE_EVAN_PART2_SECOND_HALF
+ 0x120A, // OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF
+ 0x120B, // OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF
+};
-void func_80152434(PlayState* play, u16 arg2) {
- play->msgCtx.unk12046 = 0;
- func_80151DA4(play, arg2);
+u16 sOcarinaSongFlagsMap[] = { 1, 2, 4, 8, 0x10, 0x20, 0x40, 0x80, 0x100, 0x200, 0x400, 0x800 };
+
+void Message_DisplayOcarinaStaffImpl(PlayState* play, u16 ocarinaAction) {
+ MessageContext* msgCtx = &play->msgCtx;
+ s16 j;
+ s16 noStop;
+ s32 k;
+ u32 i;
+
+ msgCtx->ocarinaAvailableSongs = 0;
+
+ for (i = msgCtx->ocarinaAvailableSongs; i <= (QUEST_SONG_SUN - QUEST_SONG_SONATA); i++) {
+ if (CHECK_QUEST_ITEM(QUEST_SONG_SONATA + i)) {
+ msgCtx->ocarinaAvailableSongs = msgCtx->ocarinaAvailableSongs | sOcarinaSongFlagsMap[i];
+ }
+ }
+
+ if (CHECK_QUEST_ITEM(QUEST_SONG_TIME)) {
+ msgCtx->ocarinaAvailableSongs |= 0x3000;
+ }
+ if (CHECK_QUEST_ITEM(QUEST_SONG_LULLABY_INTRO)) {
+ msgCtx->ocarinaAvailableSongs |= 0x4000;
+ }
+ if (CHECK_QUEST_ITEM(QUEST_SONG_LULLABY)) {
+ msgCtx->ocarinaAvailableSongs &= (u16)~0x4000;
+ }
+ if (gSaveContext.save.saveInfo.scarecrowSpawnSongSet) {
+ msgCtx->ocarinaAvailableSongs |= 0x400000;
+ }
+ if (CHECK_EVENTINF(EVENTINF_31)) {
+ msgCtx->ocarinaAvailableSongs |= 0x800000;
+ }
+
+ msgCtx->ocarinaStaff = AudioOcarina_GetRecordingStaff();
+
+ if ((ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF) ||
+ (ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF)) {
+ sOcarinaButtonAlphaValues[0] = sOcarinaButtonAlphaValues[1] = sOcarinaButtonAlphaValues[2] =
+ sOcarinaButtonAlphaValues[3] = 255;
+ } else {
+ msgCtx->ocarinaStaff->pos = 0;
+ sOcarinaButtonIndexBufPos = 0;
+ sOcarinaButtonIndexBufLen = 0;
+ Message_ResetOcarinaButtonState(play);
+ }
+
+ sLastPlayedSong = 0xFF;
+ msgCtx->lastPlayedSong = 0xFF;
+ msgCtx->ocarinaButtonIndex = OCARINA_BTN_INVALID;
+ noStop = false;
+ msgCtx->ocarinaAction = ocarinaAction;
+
+ if ((ocarinaAction >= OCARINA_ACTION_TIMED_PROMPT_SONATA) &&
+ (ocarinaAction <= OCARINA_ACTION_TIMED_PROMPT_STORMS)) {
+ Message_OpenText(play, 0x1B59);
+ func_80150A84(play);
+ } else if ((ocarinaAction == OCARINA_ACTION_3B) || (ocarinaAction == OCARINA_ACTION_3C)) {
+ noStop = true;
+ Message_OpenText(play, D_801D028C[ocarinaAction - 0x29]);
+ func_80150A84(play);
+ } else if ((ocarinaAction >= OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_FIRST_HALF) &&
+ (ocarinaAction <= OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF)) {
+ noStop = true;
+ Message_OpenText(play, D_801D028C[ocarinaAction - 0x29]);
+ func_80150A84(play);
+ } else if ((ocarinaAction >= OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN) &&
+ (ocarinaAction <= OCARINA_ACTION_PROMPT_WIND_FISH_DEKU)) {
+ noStop = true;
+ Message_OpenText(play, 0x1B59);
+ func_80150A84(play);
+ } else if ((ocarinaAction == OCARINA_ACTION_FREE_PLAY) || (ocarinaAction >= OCARINA_ACTION_CHECK_TIME)) {
+ if ((ocarinaAction >= OCARINA_ACTION_CHECK_TIME) && (ocarinaAction <= OCARINA_ACTION_CHECK_STORMS)) {
+ Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR);
+ }
+ if (ocarinaAction == OCARINA_ACTION_SCARECROW_SPAWN_DEMONSTRATION) {
+ Message_OpenText(play, 0x1B5B);
+ func_80150A84(play);
+ } else {
+ Message_OpenText(play, 0x1B5A);
+ func_80150A84(play);
+ }
+ } else {
+ noStop = true;
+ if (ocarinaAction >= OCARINA_ACTION_PROMPT_SONATA) {
+ Message_OpenText(play, 0x1B59);
+ func_80150A84(play);
+ } else {
+ Message_OpenText(play, D_801D028C[ocarinaAction]);
+ func_80150A84(play);
+ }
+ }
+
+ msgCtx->talkActor = NULL;
+ msgCtx->textDelayTimer = 0;
+ play->msgCtx.ocarinaMode = OCARINA_MODE_NONE;
+ msgCtx->textboxXTarget = 34;
+ msgCtx->textboxYTarget = 142;
+ msgCtx->stateTimer = 8;
+ Message_GrowTextbox(play);
+ msgCtx->textboxX = 34;
+ msgCtx->textboxY = 142;
+ msgCtx->unk1200C = 0x200;
+ msgCtx->unk1200E = 0x200;
+ msgCtx->unk12008 = 0x100;
+ msgCtx->unk1200A = 0x40;
+ msgCtx->msgMode = MSGMODE_TEXT_CONTINUING;
+ msgCtx->textboxColorAlphaCurrent = msgCtx->textboxColorAlphaTarget;
+ msgCtx->textboxColorAlphaCurrent = msgCtx->textboxColorAlphaTarget;
+
+ if (!noStop) {
+ func_80115844(play, DO_ACTION_STOP);
+ noStop = gSaveContext.hudVisibility;
+ Interface_SetHudVisibility(HUD_VISIBILITY_B_ALT);
+ gSaveContext.hudVisibility = noStop;
+ }
+
+ if ((ocarinaAction == OCARINA_ACTION_FREE_PLAY) || (ocarinaAction == OCARINA_ACTION_CHECK_NOTIME)) {
+ msgCtx->msgMode = MSGMODE_OCARINA_STARTING;
+ msgCtx->textBoxType = TEXTBOX_TYPE_E;
+ } else if (ocarinaAction == OCARINA_ACTION_3A) {
+ msgCtx->msgMode = MSGMODE_32;
+ } else if (ocarinaAction == OCARINA_ACTION_37) {
+ msgCtx->msgMode = MSGMODE_2F;
+ msgCtx->textBoxType = TEXTBOX_TYPE_2;
+ } else if (ocarinaAction == OCARINA_ACTION_SCARECROW_LONG_DEMONSTRATION) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
+ msgCtx->ocarinaStaff->pos = 0;
+ sOcarinaButtonIndexBufLen = 0;
+ sOcarinaButtonIndexBufPos = sOcarinaButtonIndexBufLen;
+ Message_ResetOcarinaButtonState(play);
+ msgCtx->msgMode = MSGMODE_SCARECROW_LONG_DEMONSTRATION;
+ AudioOcarina_SetPlaybackSong(OCARINA_SONG_SCARECROW_LONG + 1, 1);
+ gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE;
+ Interface_SetHudVisibility(HUD_VISIBILITY_NONE);
+ }
+
+ for (j = 0, k = 0; j < 48; j++, k += FONT_CHAR_TEX_SIZE) {
+ Font_LoadChar(play, 0x8140, k);
+ };
+
+ msgCtx->stateTimer = 3;
}
-void func_80152464(PlayState* play, u16 arg1) {
- play->msgCtx.unk12046 = 1;
- func_80151DA4(play, arg1);
+void Message_DisplayOcarinaStaff(PlayState* play, u16 ocarinaAction) {
+ play->msgCtx.blockSunsSong = false;
+ Message_DisplayOcarinaStaffImpl(play, ocarinaAction);
+}
+
+void Message_DisplayOcarinaStaffBlockSunsSong(PlayState* play, u16 ocarinaAction) {
+ play->msgCtx.blockSunsSong = true;
+ Message_DisplayOcarinaStaffImpl(play, ocarinaAction);
}
/**
@@ -449,113 +3618,1488 @@ u8 Message_GetState(MessageContext* msgCtx) {
return TEXT_STATE_NONE;
}
- if (msgCtx->msgMode == 0x42) {
- if (msgCtx->unk11F14 != 0xFFFF) {
+ if (msgCtx->msgMode == MSGMODE_TEXT_DONE) {
+ if (msgCtx->nextTextId != 0xFFFF) {
return TEXT_STATE_1;
}
- if ((msgCtx->unk12020 == 0x10) || (msgCtx->unk12020 == 0x11)) {
+ if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_11)) {
return TEXT_STATE_CHOICE;
}
- if ((msgCtx->unk12020 == 0x40) || (msgCtx->unk12020 == 0x42) || (msgCtx->unk12020 == 0x30)) {
+ if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_40) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_42) ||
+ (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_30)) {
return TEXT_STATE_5;
}
- if (msgCtx->unk12020 == 0x41) {
+ if (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_41) {
return TEXT_STATE_16;
}
- if ((msgCtx->unk12020 >= 0x50) && (msgCtx->unk12020 < 0x58)) {
+ if ((msgCtx->textboxEndType >= TEXTBOX_ENDTYPE_50) && (msgCtx->textboxEndType <= TEXTBOX_ENDTYPE_57)) {
return TEXT_STATE_3;
}
- if ((msgCtx->unk12020 == 0x60) || (msgCtx->unk12020 == 0x61)) {
+ if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_60) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_61)) {
return TEXT_STATE_14;
}
- if (msgCtx->unk12020 == 0x62) {
+ if (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_62) {
return TEXT_STATE_15;
}
- if (msgCtx->unk12020 == 0x63) {
+ if (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_63) {
return TEXT_STATE_17;
}
- if (msgCtx->unk12020 == 0x12) {
+ if (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_12) {
return TEXT_STATE_18;
}
return TEXT_STATE_DONE;
}
- if (msgCtx->msgMode == 0x41) {
+ if (msgCtx->msgMode == MSGMODE_TEXT_AWAIT_NEXT) {
return TEXT_STATE_10;
}
- if (msgCtx->msgMode == 0x1B) {
+ if (msgCtx->msgMode == MSGMODE_SONG_DEMONSTRATION_DONE) {
return TEXT_STATE_7;
}
- if ((msgCtx->ocarinaMode == 3) || (msgCtx->msgMode == 0x37)) {
+ if ((msgCtx->ocarinaMode == OCARINA_MODE_EVENT) || (msgCtx->msgMode == MSGMODE_37)) {
return TEXT_STATE_8;
}
- if (msgCtx->msgMode == 0x20) {
+ if (msgCtx->msgMode == MSGMODE_OCARINA_AWAIT_INPUT) {
return TEXT_STATE_9;
}
- if ((msgCtx->msgMode == 0x21) || (msgCtx->msgMode == 0x3A)) {
+ if ((msgCtx->msgMode == MSGMODE_21) || (msgCtx->msgMode == MSGMODE_3A)) {
return TEXT_STATE_11;
}
- if (msgCtx->msgMode == 0x3D) {
+ if (msgCtx->msgMode == MSGMODE_3D) {
return TEXT_STATE_12;
}
- if (msgCtx->msgMode == 0x40) {
+ if (msgCtx->msgMode == MSGMODE_40) {
return TEXT_STATE_13;
}
- if ((msgCtx->msgMode == 0x43) && (msgCtx->stateTimer == 1) && (msgCtx->bombersNotebookEventQueueCount == 0)) {
+ if ((msgCtx->msgMode == MSGMODE_TEXT_CLOSING) && (msgCtx->stateTimer == 1) &&
+ (msgCtx->bombersNotebookEventQueueCount == 0)) {
return TEXT_STATE_CLOSING;
}
return TEXT_STATE_3;
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8015268C.s")
+void Message_DrawTextBox(PlayState* play, Gfx** gfxP) {
+ MessageContext* msgCtx = &play->msgCtx;
+ Gfx* gfx = *gfxP;
-void func_80152C64(View* view) {
+ gDPPipeSync(gfx++);
+
+ if (((u32)msgCtx->textBoxType == TEXTBOX_TYPE_0) || (msgCtx->textBoxType == TEXTBOX_TYPE_2) ||
+ (msgCtx->textBoxType == TEXTBOX_TYPE_9) || (msgCtx->textBoxType == TEXTBOX_TYPE_A)) {
+ gDPSetRenderMode(gfx++, G_RM_CLD_SURF, G_RM_CLD_SURF2);
+ } else if (msgCtx->textBoxType == TEXTBOX_TYPE_3) {
+ gDPSetAlphaCompare(gfx++, G_AC_THRESHOLD);
+ gDPSetRenderMode(gfx++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
+ }
+
+ gDPSetPrimColor(gfx++, 0, 0, msgCtx->textboxColorRed, msgCtx->textboxColorGreen, msgCtx->textboxColorBlue,
+ msgCtx->textboxColorAlphaCurrent);
+
+ if (((u32)msgCtx->textBoxType == TEXTBOX_TYPE_0) || (msgCtx->textBoxType == TEXTBOX_TYPE_2) ||
+ (msgCtx->textBoxType == TEXTBOX_TYPE_6) || (msgCtx->textBoxType == TEXTBOX_TYPE_8) ||
+ (msgCtx->textBoxType == TEXTBOX_TYPE_9) || (msgCtx->textBoxType == TEXTBOX_TYPE_A)) {
+ gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment, G_IM_FMT_I, 128, 64, 0, G_TX_MIRROR | G_TX_WRAP,
+ G_TX_NOMIRROR | G_TX_WRAP, 7, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+ } else {
+ gDPPipeSync(gfx++);
+
+ if (msgCtx->textBoxType == TEXTBOX_TYPE_3) {
+ gDPSetEnvColor(gfx++, 0, 0, 0, 255);
+ } else if (msgCtx->textBoxType == TEXTBOX_TYPE_D) {
+ gDPSetEnvColor(gfx++, 20, 0, 10, 255);
+ } else {
+ gDPSetEnvColor(gfx++, 50, 20, 0, 255);
+ }
+ gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment, G_IM_FMT_IA, 128, 64, 0, G_TX_MIRROR | G_TX_WRAP,
+ G_TX_MIRROR | G_TX_WRAP, 7, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+ }
+
+ if (msgCtx->textBoxType == TEXTBOX_TYPE_A) {
+ gSPTextureRectangle(gfx++, msgCtx->textboxX << 2, (msgCtx->textboxY + 22) << 2,
+ (msgCtx->textboxX + msgCtx->unk12008) << 2, (msgCtx->textboxY + 54) << 2, G_TX_RENDERTILE,
+ 0, 6, msgCtx->unk1200C << 1, 2 << 10);
+ } else {
+ gSPTextureRectangle(gfx++, msgCtx->textboxX << 2, (msgCtx->textboxY) << 2,
+ (msgCtx->textboxX + sTextboxWidth) << 2, (msgCtx->textboxY + sTextboxHeight) << 2,
+ G_TX_RENDERTILE, 0, 0, sTextboxTexWidth, sTextboxTexHeight);
+ }
+
+ // Draw treble clef
+ if (msgCtx->textBoxType == TEXTBOX_TYPE_3) {
+ gDPPipeSync(gfx++);
+ gDPSetCombineLERP(gfx++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE,
+ 0);
+ gDPSetPrimColor(gfx++, 0, 0, 255, 100, 0, 255);
+ gDPLoadTextureBlock_4b(gfx++, gOcarinaTrebleClefTex, G_IM_FMT_I, 16, 32, 0, G_TX_MIRROR | G_TX_WRAP,
+ G_TX_MIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+ gSPTextureRectangle(gfx++, 78 << 2, 166 << 2, 94 << 2, 198 << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
+ }
+
+ *gfxP = gfx++;
+}
+
+void Message_SetView(View* view) {
SET_FULLSCREEN_VIEWPORT(view);
View_ApplyOrthoToOverlay(view);
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80152CAC.s")
+void func_80152CAC(PlayState* play) {
+ MessageContext* msgCtx = &play->msgCtx;
-// Spawn song effect?
-void func_80152EC0(PlayState* play) {
+ if (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_SONATA) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_MONKEY);
+ } else if (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_HEALING) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_PIANO);
+ } else if (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_SARIAS) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_TATL);
+ } else if (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_EPONAS) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_FEMALE_VOICE);
+ } else if (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_STORMS) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ } else if (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_GORON_LULLABY) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_BABY_SINGING);
+ } else if (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_GORON_LULLABY_INTRO) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_ELDER_GORON_DRUMS);
+ } else if (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_OATH) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_TATL);
+ } else if (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_ELEGY) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_IKANA_KING);
+ } else {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ }
+
+ if ((msgCtx->ocarinaAction == OCARINA_ACTION_3B) || (msgCtx->ocarinaAction == OCARINA_ACTION_3C)) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_ELDER_GORON_DRUMS);
+ AudioOcarina_SetPlaybackSong(OCARINA_SONG_GORON_LULLABY_INTRO + 1, 0x83);
+ return;
+ }
+ if ((msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_FIRST_HALF) ||
+ (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_EVAN_PART2_FIRST_HALF)) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_BASS_GUITAR);
+ AudioOcarina_SetPlaybackSong(
+ ((msgCtx->ocarinaAction - OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_FIRST_HALF) + OCARINA_SONG_EVAN_PART1 + 1),
+ 0x84);
+ return;
+ }
+ if ((msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_SECOND_HALF) ||
+ (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_EVAN_PART2_SECOND_HALF)) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_ZORA_GUITAR);
+ AudioOcarina_SetPlaybackSong(
+ ((msgCtx->ocarinaAction - OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_SECOND_HALF) + OCARINA_SONG_EVAN_PART1 + 1),
+ 0x44);
+ return;
+ }
+ AudioOcarina_SetPlaybackSong((msgCtx->ocarinaAction - OCARINA_ACTION_FREE_PLAY), 2);
+}
+
+s16 sOcarinaEffectActorIds[] = {
+ ACTOR_OCEFF_WIPE5, // Sonata of Awakening Effect
+ ACTOR_OCEFF_WIPE5, // Sonata of Awakening Effect
+ ACTOR_OCEFF_WIPE5, // Sonata of Awakening Effect
+ ACTOR_OCEFF_WIPE5, // Sonata of Awakening Effect
+ ACTOR_OCEFF_WIPE5, // Sonata of Awakening Effect
+ ACTOR_OCEFF_WIPE5, // Sonata of Awakening Effect
+ ACTOR_OCEFF_WIPE, // Song of Time Effect
+ ACTOR_OCEFF_WIPE7, // Song of Healing Effect
+ ACTOR_OCEFF_WIPE2, // Epona's Song Effect
+ ACTOR_OCEFF_WIPE6, // Song of Soaring Effect
+ ACTOR_OCEFF_STORM, // Song of Storms Effect II [?]
+ ACTOR_OCEFF_SPOT, // Sun's Song Effect
+ ACTOR_OCEFF_WIPE, // Song of Time Effect
+ ACTOR_OCEFF_WIPE, // Song of Time Effect
+ ACTOR_OCEFF_WIPE4 // Scarecrow's Song Effect
+};
+s32 sOcarinaEffectActorParams[] = { 0, 1, 2, 3, 4, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0 };
+
+void Message_SpawnSongEffect(PlayState* play) {
MessageContext* msgCtx = &play->msgCtx;
Player* player = GET_PLAYER(play);
+ //! FAKE:
if (1) {}
- if ((msgCtx->songPlayed < 0x17) && (msgCtx->songPlayed != 0xE) &&
- ((msgCtx->ocarinaAction < 0x43) || (msgCtx->ocarinaAction >= 0x47))) {
- msgCtx->unk120B0 = 1;
- if (msgCtx->songPlayed != 0x16) {
- Actor_Spawn(&play->actorCtx, play, D_801D02D8[msgCtx->songPlayed], player->actor.world.pos.x,
- player->actor.world.pos.y, player->actor.world.pos.z, 0, 0, 0, D_801D02F8[msgCtx->songPlayed]);
- return;
+ if ((msgCtx->songPlayed <= OCARINA_SONG_SCARECROW_SPAWN) &&
+ (msgCtx->songPlayed != OCARINA_SONG_GORON_LULLABY_INTRO) &&
+ !((msgCtx->ocarinaAction >= OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN) &&
+ (msgCtx->ocarinaAction <= OCARINA_ACTION_PROMPT_WIND_FISH_DEKU))) {
+ msgCtx->ocarinaSongEffectActive = true;
+ if (msgCtx->songPlayed != OCARINA_SONG_SCARECROW_SPAWN) {
+ Actor_Spawn(&play->actorCtx, play, sOcarinaEffectActorIds[msgCtx->songPlayed], player->actor.world.pos.x,
+ player->actor.world.pos.y, player->actor.world.pos.z, 0, 0, 0,
+ sOcarinaEffectActorParams[msgCtx->songPlayed]);
+ } else {
+ Actor_Spawn(&play->actorCtx, play, ACTOR_OCEFF_WIPE4, player->actor.world.pos.x, player->actor.world.pos.y,
+ player->actor.world.pos.z, 0, 0, 0, 0);
}
- Actor_Spawn(&play->actorCtx, play, ACTOR_OCEFF_WIPE4, player->actor.world.pos.x, player->actor.world.pos.y,
- player->actor.world.pos.z, 0, 0, 0, 0);
}
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80152FB8.s")
+Color_RGB16 sOcarinaButtonAPrimColors[] = {
+ { 80, 150, 255 },
+ { 100, 200, 255 },
+};
+Color_RGB16 sOcarinaButtonAEnvColors[] = {
+ { 10, 10, 10 },
+ { 50, 50, 255 },
+};
+Color_RGB16 sOcarinaButtonCPrimColors[] = {
+ { 255, 255, 50 },
+ { 255, 255, 180 },
+};
+Color_RGB16 sOcarinaButtonCEnvColors[] = {
+ { 10, 10, 10 },
+ { 110, 110, 50 },
+};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80153750.s")
+void Message_FlashOcarinaButtons(void) {
+ sOcarinaButtonStepR = ABS_ALT(sOcarinaButtonAPrimR - sOcarinaButtonAPrimColors[sOcarinaButtonFlashColorIndex].r) /
+ sOcarinaButtonFlashTimer;
+ sOcarinaButtonStepG = ABS_ALT(sOcarinaButtonAPrimG - sOcarinaButtonAPrimColors[sOcarinaButtonFlashColorIndex].g) /
+ sOcarinaButtonFlashTimer;
+ sOcarinaButtonStepB = ABS_ALT(sOcarinaButtonAPrimB - sOcarinaButtonAPrimColors[sOcarinaButtonFlashColorIndex].b) /
+ sOcarinaButtonFlashTimer;
-void func_80153E7C(PlayState* play, void* arg1) {
- if ((gSaveContext.options.language == 0) && (play->msgCtx.unk12090 == 0)) {
- func_8014ADBC(play, arg1);
- return;
+ if (sOcarinaButtonAPrimR >= sOcarinaButtonAPrimColors[sOcarinaButtonFlashColorIndex].r) {
+ sOcarinaButtonAPrimR -= sOcarinaButtonStepR;
+ } else {
+ sOcarinaButtonAPrimR += sOcarinaButtonStepR;
}
- if (play->msgCtx.unk12090 != 0) {
- func_8015E7EC(play, arg1);
- return;
+ if (sOcarinaButtonAPrimG >= sOcarinaButtonAPrimColors[sOcarinaButtonFlashColorIndex].g) {
+ sOcarinaButtonAPrimG -= sOcarinaButtonStepG;
+ } else {
+ sOcarinaButtonAPrimG += sOcarinaButtonStepG;
+ }
+ if (sOcarinaButtonAPrimB >= sOcarinaButtonAPrimColors[sOcarinaButtonFlashColorIndex].b) {
+ sOcarinaButtonAPrimB -= sOcarinaButtonStepB;
+ } else {
+ sOcarinaButtonAPrimB += sOcarinaButtonStepB;
+ }
+
+ sOcarinaButtonStepR = ABS_ALT(sOcarinaButtonAEnvR - sOcarinaButtonAEnvColors[sOcarinaButtonFlashColorIndex].r) /
+ sOcarinaButtonFlashTimer;
+ sOcarinaButtonStepG = ABS_ALT(sOcarinaButtonAEnvG - sOcarinaButtonAEnvColors[sOcarinaButtonFlashColorIndex].g) /
+ sOcarinaButtonFlashTimer;
+ sOcarinaButtonStepB = ABS_ALT(sOcarinaButtonAEnvB - sOcarinaButtonAEnvColors[sOcarinaButtonFlashColorIndex].b) /
+ sOcarinaButtonFlashTimer;
+
+ if (sOcarinaButtonCEnvR >= sOcarinaButtonAEnvColors[sOcarinaButtonFlashColorIndex].r) {
+ sOcarinaButtonAEnvR -= sOcarinaButtonStepR;
+ } else {
+ sOcarinaButtonAEnvR += sOcarinaButtonStepR;
+ }
+ if (sOcarinaButtonCEnvG >= sOcarinaButtonAEnvColors[sOcarinaButtonFlashColorIndex].g) {
+ sOcarinaButtonAEnvG -= sOcarinaButtonStepG;
+ } else {
+ sOcarinaButtonAEnvG += sOcarinaButtonStepG;
+ }
+ if (sOcarinaButtonCEnvB >= sOcarinaButtonAEnvColors[sOcarinaButtonFlashColorIndex].b) {
+ sOcarinaButtonAEnvB -= sOcarinaButtonStepB;
+ } else {
+ sOcarinaButtonAEnvB += sOcarinaButtonStepB;
+ }
+
+ sOcarinaButtonStepR = ABS_ALT(sOcarinaButtonCPrimR - sOcarinaButtonCPrimColors[sOcarinaButtonFlashColorIndex].r) /
+ sOcarinaButtonFlashTimer;
+ sOcarinaButtonStepG = ABS_ALT(sOcarinaButtonCPrimG - sOcarinaButtonCPrimColors[sOcarinaButtonFlashColorIndex].g) /
+ sOcarinaButtonFlashTimer;
+ sOcarinaButtonStepB = ABS_ALT(sOcarinaButtonCPrimB - sOcarinaButtonCPrimColors[sOcarinaButtonFlashColorIndex].b) /
+ sOcarinaButtonFlashTimer;
+
+ if (sOcarinaButtonCPrimR >= sOcarinaButtonCPrimColors[sOcarinaButtonFlashColorIndex].r) {
+ sOcarinaButtonCPrimR -= sOcarinaButtonStepR;
+ } else {
+ sOcarinaButtonCPrimR += sOcarinaButtonStepR;
+ }
+ if (sOcarinaButtonCPrimG >= sOcarinaButtonCPrimColors[sOcarinaButtonFlashColorIndex].g) {
+ sOcarinaButtonCPrimG -= sOcarinaButtonStepG;
+ } else {
+ sOcarinaButtonCPrimG += sOcarinaButtonStepG;
+ }
+ if (sOcarinaButtonCPrimB >= sOcarinaButtonCPrimColors[sOcarinaButtonFlashColorIndex].b) {
+ sOcarinaButtonCPrimB -= sOcarinaButtonStepB;
+ } else {
+ sOcarinaButtonCPrimB += sOcarinaButtonStepB;
+ }
+
+ sOcarinaButtonStepR = ABS_ALT(sOcarinaButtonCEnvR - sOcarinaButtonCEnvColors[sOcarinaButtonFlashColorIndex].r) /
+ sOcarinaButtonFlashTimer;
+ sOcarinaButtonStepG = ABS_ALT(sOcarinaButtonCEnvG - sOcarinaButtonCEnvColors[sOcarinaButtonFlashColorIndex].g) /
+ sOcarinaButtonFlashTimer;
+ sOcarinaButtonStepB = ABS_ALT(sOcarinaButtonCEnvB - sOcarinaButtonCEnvColors[sOcarinaButtonFlashColorIndex].b) /
+ sOcarinaButtonFlashTimer;
+
+ if (sOcarinaButtonCEnvR >= sOcarinaButtonCEnvColors[sOcarinaButtonFlashColorIndex].r) {
+ sOcarinaButtonCEnvR -= sOcarinaButtonStepR;
+ } else {
+ sOcarinaButtonCEnvR += sOcarinaButtonStepR;
+ }
+ if (sOcarinaButtonCEnvG >= sOcarinaButtonCEnvColors[sOcarinaButtonFlashColorIndex].g) {
+ sOcarinaButtonCEnvG -= sOcarinaButtonStepG;
+ } else {
+ sOcarinaButtonCEnvG += sOcarinaButtonStepG;
+ }
+ if (sOcarinaButtonCEnvB >= sOcarinaButtonCEnvColors[sOcarinaButtonFlashColorIndex].b) {
+ sOcarinaButtonCEnvB -= sOcarinaButtonStepB;
+ } else {
+ sOcarinaButtonCEnvB += sOcarinaButtonStepB;
+ }
+
+ sOcarinaButtonFlashTimer--;
+ if (sOcarinaButtonFlashTimer == 0) {
+ sOcarinaButtonAPrimR = sOcarinaButtonAPrimColors[sOcarinaButtonFlashColorIndex].r;
+ sOcarinaButtonAPrimG = sOcarinaButtonAPrimColors[sOcarinaButtonFlashColorIndex].g;
+ sOcarinaButtonAPrimB = sOcarinaButtonAPrimColors[sOcarinaButtonFlashColorIndex].b;
+ sOcarinaButtonAEnvR = sOcarinaButtonAEnvColors[sOcarinaButtonFlashColorIndex].r;
+ sOcarinaButtonAEnvG = sOcarinaButtonAEnvColors[sOcarinaButtonFlashColorIndex].g;
+ sOcarinaButtonAEnvB = sOcarinaButtonAEnvColors[sOcarinaButtonFlashColorIndex].b;
+ sOcarinaButtonCPrimR = sOcarinaButtonCPrimColors[sOcarinaButtonFlashColorIndex].r;
+ sOcarinaButtonCPrimG = sOcarinaButtonCPrimColors[sOcarinaButtonFlashColorIndex].g;
+ sOcarinaButtonCPrimB = sOcarinaButtonCPrimColors[sOcarinaButtonFlashColorIndex].b;
+ sOcarinaButtonCEnvR = sOcarinaButtonCEnvColors[sOcarinaButtonFlashColorIndex].r;
+ sOcarinaButtonCEnvG = sOcarinaButtonCEnvColors[sOcarinaButtonFlashColorIndex].g;
+ sOcarinaButtonCEnvB = sOcarinaButtonCEnvColors[sOcarinaButtonFlashColorIndex].b;
+ sOcarinaButtonFlashTimer = 3;
+ sOcarinaButtonFlashColorIndex ^= 1;
}
- func_8015966C(play, arg1, 0);
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80153EF0.s")
+TexturePtr sOcarinaButtonTextures[] = {
+ gOcarinaATex, gOcarinaCDownTex, gOcarinaCRightTex, gOcarinaCLeftTex, gOcarinaCUpTex,
+};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_801541D4.s")
+void Message_DrawOcarinaButtons(PlayState* play, Gfx** gfxP) {
+ MessageContext* msgCtx = &play->msgCtx;
+ Gfx* gfx = *gfxP;
+ u16 i;
+ u16 notePosX;
+
+ if ((play->msgCtx.msgMode >= MSGMODE_OCARINA_PLAYING) && (msgCtx->msgMode <= MSGMODE_40)) {
+ if ((msgCtx->ocarinaAction != OCARINA_ACTION_FREE_PLAY) &&
+ (msgCtx->ocarinaAction != OCARINA_ACTION_CHECK_NOTIME)) {
+ Gfx_SetupDL39_Ptr(&gfx);
+
+ gDPSetCombineLERP(gfx++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE,
+ ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+
+ if ((msgCtx->msgMode == MSGMODE_SONG_PROMPT) || (msgCtx->msgMode == MSGMODE_36)) {
+ if ((msgCtx->ocarinaAction != OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF) &&
+ (msgCtx->ocarinaAction != OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF)) {
+ if (msgCtx->ocarinaAction >= OCARINA_ACTION_TIMED_PROMPT_SONATA) {
+ sOcarinaButtonStepG = msgCtx->ocarinaAction - OCARINA_ACTION_TIMED_PROMPT_SONATA;
+ } else if ((msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF) ||
+ (msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF)) {
+ // Can never pass as the conditional is opposite to one scope higher
+ sOcarinaButtonStepG = (msgCtx->ocarinaAction - OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF) +
+ OCARINA_SONG_EVAN_PART1;
+ } else if ((msgCtx->ocarinaAction >= OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN) &&
+ (msgCtx->ocarinaAction <= OCARINA_ACTION_PROMPT_WIND_FISH_DEKU)) {
+ sOcarinaButtonStepG = msgCtx->ocarinaAction - OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN +
+ OCARINA_SONG_WIND_FISH_HUMAN;
+ } else {
+ sOcarinaButtonStepG = msgCtx->ocarinaAction - OCARINA_ACTION_PROMPT_SONATA;
+ }
+ sOcarinaButtonStepR = gOcarinaSongButtons[sOcarinaButtonStepG].numButtons;
+
+ for (notePosX = 98, i = 0; i < sOcarinaButtonStepR; notePosX += 18, i++) {
+ gDPPipeSync(gfx++);
+ gDPSetPrimColor(gfx++, 0, 0, 150, 150, 150, 150);
+ gDPSetEnvColor(gfx++, 10, 10, 10, 0);
+
+ gDPLoadTextureBlock(
+ gfx++, sOcarinaButtonTextures[gOcarinaSongButtons[sOcarinaButtonStepG].buttonIndex[i]],
+ G_IM_FMT_IA, G_IM_SIZ_8b, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP,
+ G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+
+ gSPTextureRectangle(
+ gfx++, notePosX << 2,
+ msgCtx->ocarinaButtonsPosY[gOcarinaSongButtons[sOcarinaButtonStepG].buttonIndex[i]] << 2,
+ (notePosX + 16) << 2,
+ (msgCtx->ocarinaButtonsPosY[gOcarinaSongButtons[sOcarinaButtonStepG].buttonIndex[i]] + 16)
+ << 2,
+ G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
+ }
+ }
+ }
+
+ if (msgCtx->msgMode != MSGMODE_SCARECROW_LONG_RECORDING_START) {
+ for (notePosX = 98, i = 0; i < 8; notePosX += 18, i++) {
+ if (sOcarinaButtonIndexBuf[i] == OCARINA_BTN_INVALID) {
+ break;
+ }
+
+ if (sOcarinaButtonAlphaValues[i] != 255) {
+ sOcarinaButtonAlphaValues[i] += 50;
+ if (sOcarinaButtonAlphaValues[i] >= 255) {
+ sOcarinaButtonAlphaValues[i] = 255;
+ }
+ }
+
+ gDPPipeSync(gfx++);
+ if (sOcarinaButtonIndexBuf[i] == OCARINA_BTN_A) {
+ gDPSetPrimColor(gfx++, 0, 0, sOcarinaButtonAPrimR, sOcarinaButtonAPrimG, sOcarinaButtonAPrimB,
+ sOcarinaButtonAlphaValues[i]);
+ gDPSetEnvColor(gfx++, sOcarinaButtonAEnvR, sOcarinaButtonAEnvG, sOcarinaButtonAEnvB, 0);
+ } else {
+ gDPSetPrimColor(gfx++, 0, 0, sOcarinaButtonCPrimR, sOcarinaButtonCPrimG, sOcarinaButtonCPrimB,
+ sOcarinaButtonAlphaValues[i]);
+ gDPSetEnvColor(gfx++, sOcarinaButtonCEnvR, sOcarinaButtonCEnvG, sOcarinaButtonCEnvB, 0);
+ }
+
+ gDPLoadTextureBlock(gfx++, sOcarinaButtonTextures[sOcarinaButtonIndexBuf[i]], G_IM_FMT_IA,
+ G_IM_SIZ_8b, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP,
+ G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+
+ gSPTextureRectangle(
+ gfx++, notePosX << 2, msgCtx->ocarinaButtonsPosY[sOcarinaButtonIndexBuf[i]] << 2,
+ (notePosX + 16) << 2, (msgCtx->ocarinaButtonsPosY[sOcarinaButtonIndexBuf[i]] + 16) << 2,
+ G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
+ }
+ }
+ }
+ }
+ *gfxP = gfx;
+}
+
+void Message_DrawText(PlayState* play, Gfx** gfxP) {
+ if ((gSaveContext.options.language == LANGUAGE_JPN) && !play->msgCtx.textIsCredits) {
+ Message_DrawTextDefault(play, gfxP);
+ } else if (play->msgCtx.textIsCredits) {
+ Message_DrawTextCredits(play, gfxP);
+ } else {
+ Message_DrawTextNES(play, gfxP, 0);
+ }
+}
+
+void Message_DrawSceneTitleCard(PlayState* play, Gfx** gfxP) {
+ MessageContext* msgCtx = &play->msgCtx;
+ Gfx* gfx;
+
+ gfx = *gfxP;
+ Gfx_SetupDL39_Ptr(&gfx);
+
+ gDPSetCombineLERP(gfx++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE,
+ ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+ gDPSetTextureFilter(gfx++, G_TF_BILERP);
+ gDPSetAlphaDither(gfx++, G_AD_NOTPATTERN);
+ gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, msgCtx->textboxColorAlphaCurrent);
+ gDPSetEnvColor(gfx++, 140, 40, 160, 255);
+ gDPLoadTextureBlock(gfx++, gSceneTitleCardGradientTex, G_IM_FMT_I, G_IM_SIZ_8b, 64, 1, 0, G_TX_NOMIRROR | G_TX_WRAP,
+ G_TX_NOMIRROR | G_TX_WRAP, 6, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+ gSPTextureRectangle(gfx++, 0, XREG(77) << 2, 320 << 2, (XREG(77) + XREG(76)) << 2, G_TX_RENDERTILE, 0, 0, 204,
+ 1 << 10);
+ gDPPipeSync(gfx++);
+ gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0);
+ gDPSetEnvColor(gfx++, 0, 0, 0, 255);
+
+ if ((msgCtx->currentTextId < 0x1BB2) || (msgCtx->currentTextId >= 0x1BB7)) {
+ msgCtx->unk11FF8 = XREG(75);
+ }
+ msgCtx->unk11FFA = XREG(74);
+ Message_DrawTextNES(play, &gfx, 0);
+ *gfxP = gfx++;
+}
+
+s16 sOcarinaSongFanfares[] = {
+ NA_BGM_OCARINA_SONATA, // OCARINA_SONG_SONATA
+ NA_BGM_OCARINA_LULLABY, // OCARINA_SONG_GORON_LULLABY
+ NA_BGM_OCARINA_NEW_WAVE, // OCARINA_SONG_NEW_WAVE
+ NA_BGM_OCARINA_ELEGY, // OCARINA_SONG_ELEGY
+ NA_BGM_OCARINA_OATH, // OCARINA_SONG_OATH
+ NA_BGM_MAJORAS_LAIR, // OCARINA_SONG_SARIAS
+ NA_BGM_OCARINA_TIME, // OCARINA_SONG_TIME
+ NA_BGM_OCARINA_HEALING, // OCARINA_SONG_HEALING
+ NA_BGM_OCARINA_EPONA, // OCARINA_SONG_EPONAS
+ NA_BGM_OCARINA_SOARING, // OCARINA_SONG_SOARING
+ NA_BGM_OCARINA_STORM, // OCARINA_SONG_STORMS
+ NA_BGM_OCARINA_SUNS, // OCARINA_SONG_SUNS
+ NA_BGM_INVERTED_SONG_OF_TIME, // OCARINA_SONG_INVERTED_TIME
+ NA_BGM_SONG_OF_DOUBLE_TIME, // OCARINA_SONG_DOUBLE_TIME
+ NA_BGM_OCARINA_LULLABY_INTRO_PTR, // OCARINA_SONG_GORON_LULLABY_INTRO
+ NA_BGM_OCARINA_LULLABY_INTRO_PTR, // OCARINA_SONG_WIND_FISH_HUMAN
+ NA_BGM_OCARINA_LULLABY_INTRO_PTR, // OCARINA_SONG_WIND_FISH_GORON
+};
+
+s8 sOcarinaSongFanfareIoData[PLAYER_FORM_MAX] = {
+ 0x35, // PLAYER_FORM_FIERCE_DEITY
+ 0x5C, // PLAYER_FORM_GORON
+ 0x5D, // PLAYER_FORM_ZORA
+ 0x5E, // PLAYER_FORM_DEKU
+ 0x35, // PLAYER_FORM_HUMAN
+};
+
+u8 sPlayerFormOcarinaInstruments[] = {
+ OCARINA_INSTRUMENT_DEFAULT,
+ OCARINA_INSTRUMENT_GORON_DRUMS,
+ OCARINA_INSTRUMENT_ZORA_GUITAR,
+ OCARINA_INSTRUMENT_DEKU_PIPES,
+};
+
+s16 D_801D03A8[TEXTBOX_TYPE_MAX] = {
+ 0x3B, // TEXTBOX_TYPE_0
+ 0x3B, // TEXTBOX_TYPE_1
+ 0x3B, // TEXTBOX_TYPE_2
+ 0x3B, // TEXTBOX_TYPE_3
+ 0x22, // TEXTBOX_TYPE_4
+ 0x3B, // TEXTBOX_TYPE_5
+ 0x3B, // TEXTBOX_TYPE_6
+ 0x3B, // TEXTBOX_TYPE_7
+ 0x3B, // TEXTBOX_TYPE_8
+ 0x3B, // TEXTBOX_TYPE_9
+ 0x3B, // TEXTBOX_TYPE_A
+ 0x3B, // TEXTBOX_TYPE_B
+ 0x3B, // TEXTBOX_TYPE_C
+ 0x3B, // TEXTBOX_TYPE_D
+ 0x3B, // TEXTBOX_TYPE_E
+ 0x3B, // TEXTBOX_TYPE_F
+};
+
+void Message_DrawMain(PlayState* play, Gfx** gfxP) {
+ s32 pad;
+ MessageContext* msgCtx = &play->msgCtx;
+ Gfx* gfx;
+ u16 i;
+ u16 buttonIndexPos;
+ u8 ocarinaError;
+ s32 j;
+ s16 temp_v0_33;
+ s16 temp;
+
+ gfx = *gfxP;
+
+ gSPSegment(gfx++, 0x02, play->interfaceCtx.parameterSegment);
+ gSPSegment(gfx++, 0x07, msgCtx->textboxSegment);
+
+ if (msgCtx->msgLength != 0) {
+ if (!msgCtx->textIsCredits) {
+ Message_SetView(&msgCtx->view);
+ Gfx_SetupDL39_Ptr(&gfx);
+ if (msgCtx->ocarinaAction != OCARINA_ACTION_37) {
+ if ((msgCtx->msgMode != MSGMODE_18) && (msgCtx->msgMode != MSGMODE_39) &&
+ (msgCtx->msgMode != MSGMODE_3C) && (msgCtx->msgMode != MSGMODE_3F) &&
+ (msgCtx->msgMode != MSGMODE_3A) && (msgCtx->msgMode != MSGMODE_3D) &&
+ (msgCtx->msgMode != MSGMODE_40) &&
+ (((msgCtx->msgMode >= MSGMODE_TEXT_BOX_GROWING) && (msgCtx->msgMode <= MSGMODE_TEXT_DONE)) ||
+ ((msgCtx->msgMode >= MSGMODE_NEW_CYCLE_0) && (msgCtx->msgMode <= MSGMODE_OWL_SAVE_2))) &&
+ (D_801CFC78[msgCtx->textBoxType] != 0xE)) {
+ Message_DrawTextBox(play, &gfx);
+ }
+ }
+ }
+ Gfx_SetupDL39_Ptr(&gfx);
+ gDPSetAlphaCompare(gfx++, G_AC_NONE);
+ gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE,
+ 0);
+
+ if (YREG(0) != msgCtx->msgMode) {
+ YREG(0) = msgCtx->msgMode;
+ YREG(1) = msgCtx->ocarinaAction;
+ }
+
+ switch (msgCtx->msgMode) {
+ case MSGMODE_TEXT_START:
+ case MSGMODE_TEXT_BOX_GROWING:
+ case MSGMODE_TEXT_STARTING:
+ case MSGMODE_TEXT_NEXT_MSG:
+ break;
+
+ case MSGMODE_TEXT_CONTINUING:
+ if (msgCtx->stateTimer == 1) {
+ for (i = 0, j = 0; i < 48; i++, j += FONT_CHAR_TEX_SIZE) {
+ Font_LoadChar(play, 0x8140, j);
+ }
+ Message_DrawText(play, &gfx);
+ } else {
+ gDPPipeSync(gfx++);
+ gDPSetRenderMode(gfx++, G_RM_CLD_SURF, G_RM_CLD_SURF2);
+ gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, 0);
+ gDPSetEnvColor(gfx++, 0, 0, 0, 255);
+ }
+ break;
+
+ case MSGMODE_TEXT_DISPLAYING:
+ case MSGMODE_TEXT_DELAYED_BREAK:
+ case MSGMODE_9:
+ if ((gSaveContext.options.language == LANGUAGE_JPN) && !msgCtx->textIsCredits) {
+ if (msgCtx->textDelay != 0) {
+ msgCtx->textDrawPos += msgCtx->textDelay;
+ }
+ Message_DrawTextNES(play, &gfx, 0);
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ Message_DrawTextNES(play, &gfx, (s32)msgCtx->textDrawPos);
+ }
+ } else if (msgCtx->textIsCredits) {
+ Message_DrawTextCredits(play, &gfx);
+ } else {
+ if (msgCtx->textDelay != 0) {
+ msgCtx->textDrawPos += msgCtx->textDelay;
+ }
+ Message_DrawTextNES(play, &gfx, 0);
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ Message_DrawTextNES(play, &gfx, (s32)msgCtx->textDrawPos);
+ }
+ }
+ break;
+
+ case MSGMODE_NEW_CYCLE_0:
+ case MSGMODE_NEW_CYCLE_1:
+ case MSGMODE_NEW_CYCLE_2:
+ case MSGMODE_OWL_SAVE_0:
+ case MSGMODE_OWL_SAVE_1:
+ case MSGMODE_OWL_SAVE_2:
+ Message_DrawTextNES(play, &gfx, 0);
+ break;
+
+ case MSGMODE_TEXT_AWAIT_INPUT:
+ case MSGMODE_TEXT_AWAIT_NEXT:
+ Message_DrawText(play, &gfx);
+ Message_DrawTextboxIcon(play, &gfx, 158,
+ (s16)(D_801D03A8[msgCtx->textBoxType] + msgCtx->textboxYTarget));
+ break;
+
+ case MSGMODE_OCARINA_STARTING:
+ case MSGMODE_SONG_DEMONSTRATION_STARTING:
+ case MSGMODE_SONG_PROMPT_STARTING:
+ case MSGMODE_32:
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
+ play->msgCtx.ocarinaMode = OCARINA_MODE_ACTIVE;
+ if ((msgCtx->ocarinaAction != OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF) &&
+ (msgCtx->ocarinaAction != OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF)) {
+ msgCtx->ocarinaStaff->pos = 0;
+ sOcarinaButtonIndexBufPos = 0;
+ Message_ResetOcarinaButtonState(play);
+ }
+ sOcarinaButtonFlashColorIndex = 1;
+ sOcarinaButtonFlashTimer = 3;
+ if (msgCtx->msgMode == MSGMODE_OCARINA_STARTING) {
+ if ((msgCtx->ocarinaAction == OCARINA_ACTION_0) ||
+ (msgCtx->ocarinaAction == OCARINA_ACTION_FREE_PLAY) ||
+ (msgCtx->ocarinaAction == OCARINA_ACTION_SCARECROW_SPAWN_RECORDING) ||
+ (msgCtx->ocarinaAction == OCARINA_ACTION_CHECK_NOTIME) ||
+ (msgCtx->ocarinaAction >= OCARINA_ACTION_CHECK_TIME)) {
+ if ((msgCtx->ocarinaAction == OCARINA_ACTION_FREE_PLAY) ||
+ (msgCtx->ocarinaAction == OCARINA_ACTION_CHECK_NOTIME)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_52_10)) {
+ AudioOcarina_StartDefault(msgCtx->ocarinaAvailableSongs | 0xC0000000);
+ } else if (CHECK_EVENTINF(EVENTINF_31)) {
+ AudioOcarina_SetInstrument(sPlayerFormOcarinaInstruments[CUR_FORM]);
+ AudioOcarina_StartDefault(0x80800000);
+ } else {
+ AudioOcarina_StartAtSongStartingPos((msgCtx->ocarinaAvailableSongs + 0x80000) |
+ 0xC0000000);
+ AudioOcarina_SetInstrument(sPlayerFormOcarinaInstruments[CUR_FORM]);
+ }
+ } else {
+ AudioOcarina_StartDefault(msgCtx->ocarinaAvailableSongs);
+ }
+ } else {
+ AudioOcarina_StartDefault((1 << msgCtx->ocarinaAction) | 0x80000000);
+ }
+ msgCtx->msgMode = MSGMODE_OCARINA_PLAYING;
+ if (CHECK_EVENTINF(EVENTINF_24)) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEKU_TRUMPET);
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_41_20)) {
+ AudioOcarina_SetInstrument(sPlayerFormOcarinaInstruments[CUR_FORM]);
+ //! FAKE:
+ (void)CUR_FORM;
+ if (gSaveContext.save.playerForm == 4) {}
+ } else {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_AMPLIFIED_GUITAR);
+ }
+ } else if (msgCtx->msgMode == MSGMODE_SONG_DEMONSTRATION_STARTING) {
+ msgCtx->stateTimer = 20;
+ msgCtx->msgMode = MSGMODE_19;
+ } else if (msgCtx->msgMode == MSGMODE_32) {
+ AudioOcarina_SetInstrument(sPlayerFormOcarinaInstruments[CUR_FORM]);
+ AudioOcarina_StartDefault(0x80800000);
+ msgCtx->msgMode = MSGMODE_33;
+ } else { // MSGMODE_SONG_PROMPT_STARTING
+ if (CHECK_EVENTINF(EVENTINF_24)) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEKU_TRUMPET);
+ } else {
+ AudioOcarina_SetInstrument(sPlayerFormOcarinaInstruments[CUR_FORM]);
+ }
+
+ if ((msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF) ||
+ (msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF)) {
+ AudioOcarina_StartForSongCheck(
+ (1 << (OCARINA_ACTION_PROMPT_SONATA + msgCtx->ocarinaAction)) | 0x80000000, 4);
+ msgCtx->msgMode = MSGMODE_SONG_PROMPT;
+ } else {
+ if ((msgCtx->ocarinaAction >= OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN) &&
+ (msgCtx->ocarinaAction <= OCARINA_ACTION_PROMPT_WIND_FISH_DEKU)) {
+ AudioOcarina_StartDefault(
+ (1 << ((msgCtx->ocarinaAction - OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN) +
+ OCARINA_SONG_WIND_FISH_HUMAN)) |
+ 0x80000000);
+ } else {
+ AudioOcarina_StartDefault(
+ (1 << ((msgCtx->ocarinaAction - OCARINA_ACTION_PROMPT_SONATA) + OCARINA_SONG_SONATA)) |
+ 0x80000000);
+ }
+ msgCtx->msgMode = MSGMODE_SONG_PROMPT;
+ }
+ }
+
+ if ((msgCtx->ocarinaAction != OCARINA_ACTION_FREE_PLAY) &&
+ (msgCtx->ocarinaAction != OCARINA_ACTION_CHECK_NOTIME)) {
+ Message_DrawText(play, &gfx);
+ }
+ break;
+
+ case MSGMODE_OCARINA_PLAYING:
+ msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
+
+ if ((u32)msgCtx->ocarinaStaff->pos != 0) {
+ if ((msgCtx->ocarinaStaff->pos == 1) && (sOcarinaButtonIndexBufPos == 8)) {
+ sOcarinaButtonIndexBufPos = 0;
+ }
+
+ if (sOcarinaButtonIndexBufPos == (msgCtx->ocarinaStaff->pos - 1)) {
+ msgCtx->ocarinaButtonIndex = sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos - 1] =
+ msgCtx->ocarinaStaff->buttonIndex;
+ sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_BTN_INVALID;
+ sOcarinaButtonIndexBufPos++;
+ }
+ }
+
+ msgCtx->songPlayed = msgCtx->ocarinaStaff->state;
+
+ if (msgCtx->ocarinaStaff->state <= OCARINA_SONG_SCARECROW_SPAWN) {
+ if (msgCtx->ocarinaStaff->state == OCARINA_SONG_EVAN_PART1) {
+ AudioOcarina_ResetAndReadInput();
+ AudioOcarina_StartDefault(0x80100000);
+ } else if (msgCtx->ocarinaStaff->state == OCARINA_SONG_EVAN_PART2) {
+ Audio_PlaySfx(NA_SE_SY_CORRECT_CHIME);
+ AudioOcarina_SetOcarinaDisableTimer(0, 20);
+ Message_CloseTextbox(play);
+ play->msgCtx.ocarinaMode = OCARINA_MODE_PLAYED_FULL_EVAN_SONG;
+ } else if ((msgCtx->ocarinaStaff->state == OCARINA_SONG_SCARECROW_SPAWN) ||
+ (msgCtx->ocarinaStaff->state == OCARINA_SONG_INVERTED_TIME) ||
+ (msgCtx->ocarinaStaff->state == OCARINA_SONG_DOUBLE_TIME) ||
+ (msgCtx->ocarinaStaff->state == OCARINA_SONG_GORON_LULLABY_INTRO) ||
+ CHECK_QUEST_ITEM(QUEST_SONG_SONATA + msgCtx->ocarinaStaff->state)) {
+ sLastPlayedSong = msgCtx->ocarinaStaff->state;
+ msgCtx->lastPlayedSong = msgCtx->ocarinaStaff->state;
+ msgCtx->songPlayed = msgCtx->ocarinaStaff->state;
+ msgCtx->msgMode = MSGMODE_E;
+ msgCtx->stateTimer = 20;
+
+ if (msgCtx->ocarinaAction == OCARINA_ACTION_CHECK_NOTIME) {
+ if ((msgCtx->ocarinaStaff->state <= OCARINA_SONG_SARIAS) ||
+ (msgCtx->ocarinaStaff->state == OCARINA_SONG_SCARECROW_SPAWN)) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+ Audio_PlaySfx(NA_SE_SY_OCARINA_ERROR);
+ msgCtx->msgMode = MSGMODE_OCARINA_STARTING;
+ } else {
+ Message_ContinueTextbox(play, 0x1B5B);
+ msgCtx->msgMode = MSGMODE_SONG_PLAYED;
+ msgCtx->textBoxType = TEXTBOX_TYPE_3;
+ msgCtx->stateTimer = 10;
+ Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR);
+ Interface_SetHudVisibility(HUD_VISIBILITY_NONE);
+ }
+ } else if (msgCtx->ocarinaAction == OCARINA_ACTION_CHECK_SCARECROW_SPAWN) {
+ if (msgCtx->ocarinaStaff->state <= OCARINA_SONG_STORMS) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+ Audio_PlaySfx(NA_SE_SY_OCARINA_ERROR);
+ msgCtx->stateTimer = 10;
+ msgCtx->msgMode = MSGMODE_OCARINA_FAIL;
+ } else {
+ Message_ContinueTextbox(play, 0x1B5B);
+ msgCtx->msgMode = MSGMODE_SONG_PLAYED;
+ msgCtx->textBoxType = TEXTBOX_TYPE_3;
+ msgCtx->stateTimer = 10;
+ Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR);
+ Interface_SetHudVisibility(HUD_VISIBILITY_NONE);
+ }
+ } else if (msgCtx->ocarinaAction == OCARINA_ACTION_FREE_PLAY) {
+ Message_ContinueTextbox(play, 0x1B5B);
+ msgCtx->msgMode = MSGMODE_SONG_PLAYED;
+ msgCtx->textBoxType = TEXTBOX_TYPE_3;
+ msgCtx->stateTimer = 10;
+ Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR);
+ } else {
+ Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR);
+ }
+ Interface_SetHudVisibility(HUD_VISIBILITY_NONE);
+ } else {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+ Audio_PlaySfx(NA_SE_SY_OCARINA_ERROR);
+ msgCtx->msgMode = MSGMODE_OCARINA_STARTING;
+ }
+ } else if (msgCtx->ocarinaStaff->state == OCARINA_SONG_TERMINA_WALL) {
+ Message_CloseTextbox(play);
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
+ SET_EVENTINF(EVENTINF_32);
+ Audio_PlaySfx(NA_SE_SY_CORRECT_CHIME);
+ AudioOcarina_SetOcarinaDisableTimer(0, 20);
+ } else if (msgCtx->ocarinaStaff->state == 0xFF) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_52_10)) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+ Audio_PlaySfx(NA_SE_SY_OCARINA_ERROR);
+ msgCtx->stateTimer = 10;
+ msgCtx->msgMode = MSGMODE_OCARINA_FAIL;
+ } else {
+ AudioOcarina_SetSongStartingPos();
+ AudioOcarina_SetInstrument(sPlayerFormOcarinaInstruments[CUR_FORM]);
+ AudioOcarina_StartAtSongStartingPos((msgCtx->ocarinaAvailableSongs + 0x80000) | 0xC0000000);
+ }
+ }
+ if ((msgCtx->ocarinaAction != OCARINA_ACTION_FREE_PLAY) &&
+ (msgCtx->ocarinaAction != OCARINA_ACTION_CHECK_NOTIME)) {
+ Message_DrawText(play, &gfx);
+ }
+ break;
+
+ case MSGMODE_E:
+ case MSGMODE_SONG_PROMPT_SUCCESS:
+ case MSGMODE_22:
+ case MSGMODE_SCARECROW_SPAWN_RECORDING_DONE:
+ case MSGMODE_34:
+ Message_FlashOcarinaButtons();
+ msgCtx->stateTimer--;
+ if (msgCtx->stateTimer == 0) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+
+ if (msgCtx->msgMode == MSGMODE_E) {
+ Message_ContinueTextbox(play, 0x1B5B);
+ msgCtx->msgMode = MSGMODE_SONG_PLAYED;
+ msgCtx->textBoxType = TEXTBOX_TYPE_3;
+ msgCtx->stateTimer = 1;
+ } else if (msgCtx->msgMode == MSGMODE_SONG_PROMPT_SUCCESS) {
+ Message_ContinueTextbox(play, 0x1B5B);
+ msgCtx->msgMode = MSGMODE_SONG_PLAYED;
+ msgCtx->textBoxType = TEXTBOX_TYPE_3;
+ msgCtx->stateTimer = 1;
+ } else if (msgCtx->msgMode == MSGMODE_22) {
+ msgCtx->msgMode = MSGMODE_23;
+ play->msgCtx.ocarinaMode = OCARINA_MODE_EVENT;
+ msgCtx->textBoxType = TEXTBOX_TYPE_0;
+ } else if (msgCtx->msgMode == MSGMODE_34) {
+ if (msgCtx->songPlayed == OCARINA_SONG_TERMINA_WALL) {
+ Message_CloseTextbox(play);
+ play->msgCtx.ocarinaMode = OCARINA_MODE_EVENT;
+ Audio_PlaySfx(NA_SE_SY_CORRECT_CHIME);
+ } else {
+ Message_CloseTextbox(play);
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
+ }
+ } else {
+ Message_CloseTextbox(play);
+ play->msgCtx.ocarinaMode = OCARINA_MODE_EVENT;
+ }
+ }
+ Message_DrawText(play, &gfx);
+ break;
+
+ case MSGMODE_OCARINA_FAIL:
+ case MSGMODE_SONG_PROMPT_FAIL:
+ Message_DrawText(play, &gfx);
+ // fallthrough
+ case MSGMODE_OCARINA_FAIL_NO_TEXT:
+ msgCtx->stateTimer--;
+ if (msgCtx->stateTimer == 0) {
+ D_801C6A94 = 1;
+ if (msgCtx->msgMode == MSGMODE_SONG_PROMPT_FAIL) {
+ Message_ContinueTextbox(play, 0x1B89);
+ Message_Decode(play);
+ msgCtx->msgMode = MSGMODE_SONG_PROMPT_NOTES_DROP;
+ } else {
+ msgCtx->msgMode = MSGMODE_OCARINA_NOTES_DROP;
+ }
+ }
+ break;
+
+ case MSGMODE_OCARINA_NOTES_DROP:
+ case MSGMODE_SONG_PROMPT_NOTES_DROP:
+ for (i = 0; i < 5; i++) {
+ msgCtx->ocarinaButtonsPosY[i] += D_801C6A94;
+ }
+ D_801C6A94 += D_801C6A94;
+ if (D_801C6A94 >= 0x226) {
+ Message_ResetOcarinaButtonAlphas();
+ if (msgCtx->msgMode == MSGMODE_SONG_PROMPT_NOTES_DROP) {
+ msgCtx->msgMode = MSGMODE_OCARINA_AWAIT_INPUT;
+ msgCtx->stateTimer = 10;
+ } else {
+ msgCtx->msgMode = MSGMODE_OCARINA_STARTING;
+ }
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+ }
+ break;
+
+ case MSGMODE_SONG_PLAYED:
+ msgCtx->stateTimer--;
+ if (msgCtx->stateTimer == 0) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+ Message_Decode(play);
+ msgCtx->msgMode = MSGMODE_SETUP_DISPLAY_SONG_PLAYED;
+ msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
+ msgCtx->ocarinaStaff->pos = 0;
+ sOcarinaButtonIndexBufPos = 0;
+ Message_ResetOcarinaButtonState(play);
+ Message_SpawnSongEffect(play);
+ }
+ break;
+
+ case MSGMODE_SETUP_DISPLAY_SONG_PLAYED:
+ Message_DrawText(play, &gfx);
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+
+ if ((msgCtx->ocarinaAction >= OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN) &&
+ (msgCtx->ocarinaAction <= OCARINA_ACTION_PROMPT_WIND_FISH_DEKU)) {
+ AudioOcarina_SetInstrument(sPlayerFormOcarinaInstruments[CUR_FORM]);
+ AudioOcarina_SetPlaybackSong(msgCtx->ocarinaAction - OCARINA_ACTION_SCARECROW_LONG_RECORDING, 1);
+ } else {
+ AudioOcarina_SetInstrument(sPlayerFormOcarinaInstruments[CUR_FORM]);
+ AudioOcarina_SetPlaybackSong((u8)msgCtx->songPlayed + 1, 1);
+ if (msgCtx->songPlayed != OCARINA_SONG_SCARECROW_SPAWN) {
+ func_801A3000((u16)sOcarinaSongFanfares[msgCtx->songPlayed],
+ (u8)sOcarinaSongFanfareIoData[CUR_FORM]);
+ AudioSfx_MuteBanks(0x20);
+ }
+ }
+ play->msgCtx.ocarinaMode = OCARINA_MODE_ACTIVE;
+ if (msgCtx->ocarinaAction == OCARINA_ACTION_FREE_PLAY) {
+ msgCtx->ocarinaAction = OCARINA_ACTION_FREE_PLAY_DONE;
+ }
+ if (msgCtx->ocarinaAction == OCARINA_ACTION_CHECK_NOTIME) {
+ msgCtx->ocarinaAction = OCARINA_ACTION_CHECK_NOTIME_DONE;
+ }
+ sOcarinaButtonIndexBufPos = 0;
+ msgCtx->msgMode = MSGMODE_DISPLAY_SONG_PLAYED;
+ break;
+
+ case MSGMODE_DISPLAY_SONG_PLAYED_TEXT_BEGIN:
+ if (msgCtx->songPlayed == OCARINA_SONG_SCARECROW_SPAWN) {
+ Message_ContinueTextbox(play, 0x1B6B);
+ } else {
+ Message_ContinueTextbox(play, 0x1B72 + msgCtx->songPlayed);
+ }
+ Message_Decode(play);
+ msgCtx->msgMode = MSGMODE_16;
+ msgCtx->stateTimer = 20;
+ Message_DrawText(play, &gfx);
+ break;
+
+ case MSGMODE_16:
+ msgCtx->stateTimer--;
+ if (msgCtx->stateTimer == 0) {
+ msgCtx->msgMode = MSGMODE_17;
+ }
+ Message_DrawText(play, &gfx);
+ break;
+
+ case MSGMODE_17:
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+ Message_ResetOcarinaButtonState(play);
+ msgCtx->msgMode = MSGMODE_18;
+ msgCtx->stateTimer = 2;
+ Message_DrawText(play, &gfx);
+ break;
+
+ case MSGMODE_18:
+ msgCtx->stateTimer--;
+ if (msgCtx->stateTimer == 0) {
+ Message_CloseTextbox(play);
+ if (msgCtx->songPlayed == OCARINA_SONG_EPONAS) {
+ gHorsePlayedEponasSong = true;
+ }
+
+ if (msgCtx->ocarinaAction == OCARINA_ACTION_FREE_PLAY_DONE) {
+ if (sLastPlayedSong == OCARINA_SONG_ELEGY) {
+ if ((play->sceneId == SCENE_F40) || (play->sceneId == SCENE_F41) ||
+ (play->sceneId == SCENE_IKANAMAE) || (play->sceneId == SCENE_CASTLE) ||
+ (play->sceneId == SCENE_IKNINSIDE) || (play->sceneId == SCENE_IKANA) ||
+ (play->sceneId == SCENE_INISIE_N) || (play->sceneId == SCENE_INISIE_R) ||
+ (play->sceneId == SCENE_INISIE_BS) || (play->sceneId == SCENE_RANDOM) ||
+ (play->sceneId == SCENE_REDEAD) || (play->sceneId == SCENE_TOUGITES)) {
+ play->msgCtx.ocarinaMode = OCARINA_MODE_EVENT;
+ } else {
+ sLastPlayedSong = 0xFF;
+ Message_StartTextbox(play, 0x1B95, NULL);
+ play->msgCtx.ocarinaMode = OCARINA_MODE_PROCESS_RESTRICTED_SONG;
+ }
+ } else {
+ play->msgCtx.ocarinaMode = OCARINA_MODE_EVENT;
+ if (msgCtx->songPlayed == OCARINA_SONG_SCARECROW_SPAWN) {
+ play->msgCtx.ocarinaMode = OCARINA_MODE_PLAYED_SCARECROW_SPAWN;
+ }
+ }
+ } else if (msgCtx->ocarinaAction >= OCARINA_ACTION_CHECK_SONATA) {
+ if ((OCARINA_ACTION_CHECK_SONATA + msgCtx->songPlayed) == msgCtx->ocarinaAction) {
+ play->msgCtx.ocarinaMode = OCARINA_MODE_EVENT;
+ } else {
+ play->msgCtx.ocarinaMode = msgCtx->songPlayed - 1;
+ }
+ } else if ((OCARINA_ACTION_PROMPT_SONATA + msgCtx->songPlayed) == msgCtx->ocarinaAction) {
+ play->msgCtx.ocarinaMode = OCARINA_MODE_EVENT;
+ } else {
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
+ }
+ }
+ break;
+
+ case MSGMODE_19:
+ msgCtx->stateTimer--;
+ if (msgCtx->stateTimer == 0) {
+ func_80152CAC(play);
+ sOcarinaButtonIndexBufPos = 0;
+ msgCtx->msgMode = MSGMODE_SONG_DEMONSTRATION;
+ }
+ Message_DrawText(play, &gfx);
+ break;
+
+ case MSGMODE_DISPLAY_SONG_PLAYED:
+ case MSGMODE_SONG_DEMONSTRATION:
+ msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
+ if (msgCtx->ocarinaStaff->state == 0) {
+ if ((msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_SECOND_HALF) ||
+ (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_EVAN_PART2_SECOND_HALF)) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+ }
+ if ((msgCtx->ocarinaAction >= OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN) &&
+ (msgCtx->ocarinaAction <= OCARINA_ACTION_PROMPT_WIND_FISH_DEKU)) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+ Message_CloseTextbox(play);
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
+ } else if (msgCtx->msgMode == MSGMODE_DISPLAY_SONG_PLAYED) {
+ msgCtx->msgMode = MSGMODE_DISPLAY_SONG_PLAYED_TEXT_BEGIN;
+ } else {
+ msgCtx->msgMode = MSGMODE_SONG_DEMONSTRATION_DONE;
+ }
+ } else {
+ if ((sOcarinaButtonIndexBufPos != 0) && (msgCtx->ocarinaStaff->pos == 1)) {
+ sOcarinaButtonIndexBufPos = 0;
+ }
+
+ if (((u32)msgCtx->ocarinaStaff->pos != 0) &&
+ (sOcarinaButtonIndexBufPos == (msgCtx->ocarinaStaff->pos - 1))) {
+ msgCtx->ocarinaButtonIndex = sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos - 1] =
+ msgCtx->ocarinaStaff->buttonIndex;
+ sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_BTN_INVALID;
+ sOcarinaButtonIndexBufPos++;
+ }
+ }
+ // fallthrough
+ case MSGMODE_SONG_DEMONSTRATION_DONE:
+ Message_DrawText(play, &gfx);
+ break;
+
+ case MSGMODE_SONG_PROMPT:
+ case MSGMODE_33:
+ msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
+
+ if (((u32)msgCtx->ocarinaStaff->pos != 0) &&
+ (sOcarinaButtonIndexBufPos == (msgCtx->ocarinaStaff->pos - 1))) {
+ msgCtx->ocarinaButtonIndex = sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos - 1] =
+ msgCtx->ocarinaStaff->buttonIndex;
+ sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_BTN_INVALID;
+ sOcarinaButtonIndexBufPos++;
+ }
+
+ if (msgCtx->ocarinaStaff->state <= OCARINA_SONG_SCARECROW_SPAWN) {
+ if ((msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF) ||
+ (msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF)) {
+ msgCtx->songPlayed = msgCtx->ocarinaStaff->state;
+ msgCtx->msgMode = MSGMODE_22;
+ } else {
+ msgCtx->songPlayed = msgCtx->ocarinaStaff->state;
+ msgCtx->msgMode = MSGMODE_SONG_PROMPT_SUCCESS;
+ if (msgCtx->ocarinaStaff->state == OCARINA_SONG_GORON_LULLABY_INTRO) {
+ Item_Give(play, ITEM_SONG_LULLABY_INTRO);
+ } else if (!((msgCtx->ocarinaAction >= OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN) &&
+ (msgCtx->ocarinaAction <= OCARINA_ACTION_PROMPT_WIND_FISH_DEKU)) &&
+ (msgCtx->ocarinaStaff->state != OCARINA_SONG_NEW_WAVE)) {
+ Item_Give(play,
+ (gOcarinaSongItemMap[msgCtx->ocarinaStaff->state] + ITEM_SONG_SONATA) & 0xFF);
+ }
+ }
+ msgCtx->stateTimer = 20;
+ Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR);
+ } else if (msgCtx->ocarinaStaff->state == OCARINA_SONG_TERMINA_WALL) {
+ msgCtx->songPlayed = msgCtx->ocarinaStaff->state;
+ msgCtx->msgMode = MSGMODE_34;
+ Item_Give(play, (gOcarinaSongItemMap[msgCtx->ocarinaStaff->state] + ITEM_SONG_SONATA) & 0xFF);
+ msgCtx->stateTimer = 20;
+ AudioOcarina_SetOcarinaDisableTimer(0, 20);
+ Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR);
+ } else if (msgCtx->ocarinaStaff->state == 0xFF) {
+ Audio_PlaySfx(NA_SE_SY_OCARINA_ERROR);
+ msgCtx->stateTimer = 10;
+ if (msgCtx->msgMode == MSGMODE_SONG_PROMPT) {
+ msgCtx->msgMode = MSGMODE_SONG_PROMPT_FAIL;
+ } else {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
+ Message_CloseTextbox(play);
+ }
+ }
+ Message_DrawText(play, &gfx);
+ break;
+
+ case MSGMODE_OCARINA_AWAIT_INPUT:
+ Message_DrawText(play, &gfx);
+ if ((msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF) ||
+ (msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF)) {
+ msgCtx->stateTimer--;
+ if (msgCtx->stateTimer == 0) {
+ msgCtx->msgMode = MSGMODE_21;
+ msgCtx->textBoxType = TEXTBOX_TYPE_0;
+ }
+ }
+ break;
+
+ case MSGMODE_SCARECROW_LONG_RECORDING_START:
+ AudioOcarina_SetRecordingState(OCARINA_RECORD_SCARECROW_LONG);
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ msgCtx->ocarinaStaff = AudioOcarina_GetRecordingStaff();
+ msgCtx->ocarinaStaff->pos = 0;
+ sOcarinaButtonIndexBufPos = 0;
+ sOcarinaButtonIndexBufLen = 0;
+ Message_ResetOcarinaButtonState(play);
+ msgCtx->msgMode = MSGMODE_SCARECROW_LONG_RECORDING_ONGOING;
+ Message_DrawText(play, &gfx);
+ break;
+
+ case MSGMODE_SCARECROW_LONG_RECORDING_ONGOING:
+ msgCtx->ocarinaStaff = AudioOcarina_GetRecordingStaff();
+
+ if (((u32)msgCtx->ocarinaStaff->pos != 0) &&
+ (sOcarinaButtonIndexBufPos == (msgCtx->ocarinaStaff->pos - 1))) {
+
+ if (sOcarinaButtonIndexBufLen >= 8) {
+ for (buttonIndexPos = sOcarinaButtonIndexBufLen - 8, i = 0; i < 8; i++, buttonIndexPos++) {
+ sOcarinaButtonIndexBuf[buttonIndexPos] = sOcarinaButtonIndexBuf[buttonIndexPos + 1];
+ }
+ sOcarinaButtonIndexBufLen--;
+ }
+
+ msgCtx->ocarinaButtonIndex = sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufLen] =
+ msgCtx->ocarinaStaff->buttonIndex;
+ sOcarinaButtonIndexBufLen++;
+ sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufLen] = OCARINA_BTN_INVALID;
+ sOcarinaButtonIndexBufPos++;
+ if (msgCtx->ocarinaStaff) {}
+ if (msgCtx->ocarinaStaff->pos == 8) {
+ sOcarinaButtonIndexBufPos = 0;
+ }
+ }
+ Message_DrawText(play, &gfx);
+ break;
+
+ case MSGMODE_SCARECROW_LONG_DEMONSTRATION:
+ case MSGMODE_SCARECROW_SPAWN_DEMONSTRATION:
+ msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
+
+ if (((u32)msgCtx->ocarinaStaff->pos != 0) &&
+ (sOcarinaButtonIndexBufPos == (msgCtx->ocarinaStaff->pos - 1))) {
+ if (sOcarinaButtonIndexBufLen >= 8) {
+ for (buttonIndexPos = sOcarinaButtonIndexBufLen - 8, i = 0; i < 8; i++, buttonIndexPos++) {
+ sOcarinaButtonIndexBuf[buttonIndexPos] = sOcarinaButtonIndexBuf[buttonIndexPos + 1];
+ }
+ sOcarinaButtonIndexBufLen--;
+ }
+ sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufLen] = msgCtx->ocarinaStaff->buttonIndex;
+ sOcarinaButtonIndexBufLen++;
+ sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufLen] = OCARINA_BTN_INVALID;
+ sOcarinaButtonIndexBufPos++;
+ if (msgCtx->ocarinaStaff->pos == 8) {
+ sOcarinaButtonIndexBufLen = sOcarinaButtonIndexBufPos = 0;
+ }
+ }
+
+ if (msgCtx->stateTimer == 0) {
+ if (msgCtx->ocarinaStaff->state == 0) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+ play->msgCtx.ocarinaMode = OCARINA_MODE_11;
+ Message_CloseTextbox(play);
+ }
+ } else {
+ msgCtx->stateTimer--;
+ }
+ break;
+
+ case MSGMODE_SCARECROW_SPAWN_RECORDING_START:
+ AudioOcarina_SetRecordingState(OCARINA_RECORD_SCARECROW_SPAWN);
+ AudioOcarina_SetInstrument(sPlayerFormOcarinaInstruments[CUR_FORM]);
+ msgCtx->msgMode = MSGMODE_SCARECROW_SPAWN_RECORDING_ONGOING;
+ Message_DrawText(play, &gfx);
+ break;
+
+ case MSGMODE_SCARECROW_SPAWN_RECORDING_ONGOING:
+ msgCtx->ocarinaStaff = AudioOcarina_GetRecordingStaff();
+ if ((u32)msgCtx->ocarinaStaff->pos != 0) {
+ if (sOcarinaButtonIndexBufPos == (msgCtx->ocarinaStaff->pos - 1)) {
+ msgCtx->ocarinaButtonIndex = sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufPos] =
+ msgCtx->ocarinaStaff->buttonIndex;
+ sOcarinaButtonIndexBufPos++;
+ sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufPos] = OCARINA_BTN_INVALID;
+ }
+ }
+
+ if (msgCtx->ocarinaStaff->state == 0) {
+ msgCtx->stateTimer = 20;
+ gSaveContext.save.saveInfo.scarecrowSpawnSongSet = true;
+ msgCtx->msgMode = MSGMODE_SCARECROW_SPAWN_RECORDING_DONE;
+ Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR);
+ Lib_MemCpy(gSaveContext.save.saveInfo.scarecrowSpawnSong, gScarecrowSpawnSongPtr,
+ sizeof(gSaveContext.save.saveInfo.scarecrowSpawnSong));
+ for (i = 0; i < ARRAY_COUNT(gSaveContext.save.saveInfo.scarecrowSpawnSong); i++) {
+ // osSyncPrintf("%d, ", gSaveContext.scarecrowSpawnSong[i]);
+ }
+ } else if (msgCtx->ocarinaStaff->state == 0xFF) {
+ AudioOcarina_SetRecordingState(OCARINA_RECORD_OFF);
+ Audio_PlaySfx(NA_SE_SY_OCARINA_ERROR);
+ Message_CloseTextbox(play);
+ msgCtx->msgMode = MSGMODE_SCARECROW_SPAWN_RECORDING_FAILED;
+ }
+ Message_DrawText(play, &gfx);
+ break;
+
+ case MSGMODE_SCARECROW_SPAWN_RECORDING_FAILED:
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+ Message_StartTextbox(play, 0x1647, NULL);
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
+ break;
+
+ case MSGMODE_2F:
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
+ msgCtx->ocarinaStaff->pos = 0;
+ sOcarinaButtonIndexBufPos = 0;
+ play->msgCtx.ocarinaMode = OCARINA_MODE_ACTIVE;
+ Message_ResetOcarinaButtonState(play);
+ AudioOcarina_StartDefault(msgCtx->ocarinaAvailableSongs | 0xC0000000);
+ msgCtx->msgMode = MSGMODE_30;
+ break;
+
+ case MSGMODE_30:
+ msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
+ if (((u32)msgCtx->ocarinaStaff->pos != 0) &&
+ (sOcarinaButtonIndexBufPos == (msgCtx->ocarinaStaff->pos - 1))) {
+ msgCtx->ocarinaButtonIndex = msgCtx->ocarinaStaff->buttonIndex;
+ msgCtx->ocarinaStaff->pos = 0;
+ sOcarinaButtonIndexBufPos = 0;
+ Message_ResetOcarinaButtonState(play);
+ msgCtx->msgMode = MSGMODE_31;
+ }
+ break;
+
+ case MSGMODE_35:
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
+ msgCtx->ocarinaStaff->pos = 0;
+ sOcarinaButtonIndexBufPos = 0;
+ play->msgCtx.ocarinaMode = OCARINA_MODE_ACTIVE;
+ Message_ResetOcarinaButtonState(play);
+ sOcarinaButtonFlashColorIndex = 1;
+ sOcarinaButtonFlashTimer = 3;
+ AudioOcarina_StartWithSongNoteLengths(
+ (1 << ((msgCtx->ocarinaAction - OCARINA_ACTION_TIMED_PROMPT_SONATA) & 0xFFFF)) | 0x80000000);
+ msgCtx->msgMode = MSGMODE_36;
+ Message_DrawText(play, &gfx);
+ break;
+
+ case MSGMODE_36:
+ msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
+
+ if ((u32)msgCtx->ocarinaStaff->pos != 0) {
+ if (sOcarinaButtonIndexBufPos == (msgCtx->ocarinaStaff->pos - 1)) {
+ sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos - 1] = msgCtx->ocarinaStaff->buttonIndex;
+ sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_BTN_INVALID;
+ sOcarinaButtonIndexBufPos++;
+ }
+ }
+
+ if (msgCtx->ocarinaStaff->state <= OCARINA_SONG_SCARECROW_SPAWN) {
+ msgCtx->songPlayed = msgCtx->ocarinaStaff->state;
+ msgCtx->msgMode = MSGMODE_37;
+ Item_Give(play, (gOcarinaSongItemMap[msgCtx->ocarinaStaff->state] + ITEM_SONG_SONATA) & 0xFF);
+ msgCtx->stateTimer = 20;
+ Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR);
+ } else if (msgCtx->ocarinaStaff->state == 0xFF) {
+ ocarinaError = func_8019B5AC();
+ if (ocarinaError == OCARINA_ERROR_2) {
+ Audio_PlaySfx(NA_SE_SY_OCARINA_ERROR);
+ D_801C6A94 = 1;
+ msgCtx->msgMode = MSGMODE_3B;
+ } else if (ocarinaError == OCARINA_ERROR_3) {
+ Audio_PlaySfx(NA_SE_SY_OCARINA_ERROR);
+ D_801C6A94 = 1;
+ msgCtx->msgMode = MSGMODE_3E;
+ } else {
+ Audio_PlaySfx(NA_SE_SY_OCARINA_ERROR);
+ D_801C6A94 = 1;
+ msgCtx->msgMode = MSGMODE_38;
+ }
+ }
+ Message_DrawText(play, &gfx);
+ break;
+
+ case MSGMODE_37:
+ Message_FlashOcarinaButtons();
+ Message_DrawText(play, &gfx);
+ break;
+
+ case MSGMODE_38:
+ case MSGMODE_3B:
+ case MSGMODE_3E:
+ // notes drop
+ for (i = 0; i < 5; i++) {
+ msgCtx->ocarinaButtonsPosY[i] += D_801C6A94;
+ }
+
+ D_801C6A94 += D_801C6A94;
+ if (D_801C6A94 >= 0x226) {
+ Message_ResetOcarinaButtonAlphas();
+ msgCtx->textBoxType = TEXTBOX_TYPE_0;
+ msgCtx->textboxColorRed = msgCtx->textboxColorGreen = msgCtx->textboxColorBlue = 0;
+ msgCtx->stateTimer = 3;
+ msgCtx->msgMode++;
+ }
+ break;
+
+ case MSGMODE_39:
+ case MSGMODE_3C:
+ case MSGMODE_3F:
+ msgCtx->stateTimer--;
+ if (msgCtx->stateTimer == 0) {
+ msgCtx->msgMode++;
+ }
+ break;
+
+ case MSGMODE_TEXT_DONE:
+ switch (msgCtx->textboxEndType) {
+ case TEXTBOX_ENDTYPE_60:
+ temp_v0_33 = msgCtx->unk120BE;
+ temp = msgCtx->unk11FFA + (msgCtx->unk11FFC * temp_v0_33);
+ func_80147F18(play, &gfx,
+ msgCtx->unk11F1A[temp_v0_33] +
+ (s32)(16.0f * msgCtx->textCharScale * (msgCtx->unk120C2 + 5)) - 1,
+ temp);
+ func_80148D64(play);
+ break;
+
+ case TEXTBOX_ENDTYPE_61:
+ temp_v0_33 = msgCtx->unk120BE;
+ temp = msgCtx->unk11FFA + (msgCtx->unk11FFC * temp_v0_33);
+ func_80148558(play, &gfx,
+ msgCtx->unk11F1A[temp_v0_33] + (s32)(16.0f * msgCtx->textCharScale * 5.0f) - 1,
+ temp);
+ func_80149048(play);
+ break;
+
+ case TEXTBOX_ENDTYPE_62:
+ temp_v0_33 = msgCtx->unk120BE;
+ temp = msgCtx->unk11FFA + (msgCtx->unk11FFC * temp_v0_33);
+ func_80147F18(play, &gfx,
+ msgCtx->unk11F1A[temp_v0_33] +
+ (s32)(16.0f * msgCtx->textCharScale * (msgCtx->unk120C2 + 5)) - 1,
+ temp);
+ func_801491DC(play);
+ break;
+
+ case TEXTBOX_ENDTYPE_63:
+ temp_v0_33 = msgCtx->unk120BE;
+ temp = msgCtx->unk11FFA + (msgCtx->unk11FFC * temp_v0_33);
+ func_80147F18(play, &gfx,
+ msgCtx->unk11F1A[temp_v0_33] +
+ (s32)(16.0f * msgCtx->textCharScale * (msgCtx->unk120C2 + 5)) - 1,
+ temp);
+ func_80149454(play);
+ break;
+
+ case TEXTBOX_ENDTYPE_64:
+ temp_v0_33 = msgCtx->unk120BE;
+ temp = msgCtx->unk11FFA + (msgCtx->unk11FFC * temp_v0_33);
+ func_80147F18(play, &gfx,
+ msgCtx->unk11F1A[temp_v0_33] +
+ (s32)(16.0f * msgCtx->textCharScale * (msgCtx->unk120C2 + 4)) - 6,
+ temp);
+ func_801496C8(play);
+ break;
+
+ default:
+ break;
+ }
+
+ gDPPipeSync(gfx++);
+ gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0,
+ PRIMITIVE, 0);
+ gDPSetEnvColor(gfx++, 0, 0, 0, 255);
+ Message_DrawText(play, &gfx);
+
+ switch (msgCtx->textboxEndType) {
+ case TEXTBOX_ENDTYPE_10:
+ func_80148CBC(play, &gfx, 1);
+ break;
+
+ case TEXTBOX_ENDTYPE_11:
+ func_80148CBC(play, &gfx, 2);
+ break;
+
+ case TEXTBOX_ENDTYPE_12:
+ func_80148CBC(play, &gfx, 1);
+ break;
+
+ case TEXTBOX_ENDTYPE_30:
+ case TEXTBOX_ENDTYPE_41:
+ case TEXTBOX_ENDTYPE_50:
+ case TEXTBOX_ENDTYPE_52:
+ case TEXTBOX_ENDTYPE_55:
+ case TEXTBOX_ENDTYPE_56:
+ case TEXTBOX_ENDTYPE_57:
+ case TEXTBOX_ENDTYPE_62:
+ break;
+
+ case TEXTBOX_ENDTYPE_40:
+ case TEXTBOX_ENDTYPE_60:
+ case TEXTBOX_ENDTYPE_61:
+ default:
+ Message_DrawTextboxIcon(play, &gfx, 158,
+ (s16)(D_801D03A8[msgCtx->textBoxType] + msgCtx->textboxYTarget));
+ break;
+
+ case TEXTBOX_ENDTYPE_42:
+ Message_DrawTextboxIcon(play, &gfx, 158,
+ (s16)(D_801D03A8[msgCtx->textBoxType] + msgCtx->textboxYTarget));
+ break;
+ }
+ break;
+
+ case MSGMODE_SCENE_TITLE_CARD_FADE_IN_BACKGROUND:
+ case MSGMODE_SCENE_TITLE_CARD_FADE_IN_TEXT:
+ case MSGMODE_SCENE_TITLE_CARD_DISPLAYING:
+ case MSGMODE_SCENE_TITLE_CARD_FADE_OUT_TEXT:
+ case MSGMODE_SCENE_TITLE_CARD_FADE_OUT_BACKGROUND:
+ Message_DrawSceneTitleCard(play, &gfx);
+ break;
+
+ case MSGMODE_21:
+ case MSGMODE_23:
+ case MSGMODE_31:
+ case MSGMODE_3A:
+ case MSGMODE_3D:
+ case MSGMODE_40:
+ case MSGMODE_TEXT_CLOSING:
+ case MSGMODE_PAUSED:
+ break;
+
+ case MSGMODE_24:
+ case MSGMODE_25:
+ case MSGMODE_26:
+ default:
+ msgCtx->msgMode = MSGMODE_TEXT_DISPLAYING;
+ break;
+ }
+ }
+ Message_DrawOcarinaButtons(play, &gfx);
+ *gfxP = gfx;
+}
void Message_Draw(PlayState* play) {
Gfx* nextDisplayList;
@@ -568,7 +5112,7 @@ void Message_Draw(PlayState* play) {
gSPDisplayList(OVERLAY_DISP++, nextDisplayList);
if ((play->msgCtx.currentTextId != 0x5E6) || !Play_InCsMode(play)) {
- func_801541D4(play, &nextDisplayList);
+ Message_DrawMain(play, &nextDisplayList);
}
gSPEndDisplayList(nextDisplayList++);
@@ -577,48 +5121,935 @@ void Message_Draw(PlayState* play) {
CLOSE_DISPS(gfxCtx);
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/Message_Update.s")
+s16 sTextboxXPositions[TEXTBOX_TYPE_MAX] = {
+ 34, // TEXTBOX_TYPE_0
+ 34, // TEXTBOX_TYPE_1
+ 34, // TEXTBOX_TYPE_2
+ 34, // TEXTBOX_TYPE_3
+ 34, // TEXTBOX_TYPE_4
+ 34, // TEXTBOX_TYPE_5
+ 34, // TEXTBOX_TYPE_6
+ 34, // TEXTBOX_TYPE_7
+ 34, // TEXTBOX_TYPE_8
+ 34, // TEXTBOX_TYPE_9
+ 34, // TEXTBOX_TYPE_A
+ 34, // TEXTBOX_TYPE_B
+ 34, // TEXTBOX_TYPE_C
+ 34, // TEXTBOX_TYPE_D
+ 34, // TEXTBOX_TYPE_E
+ 34, // TEXTBOX_TYPE_F
+};
-void func_801586A4(PlayState* play) {
+s16 sTextboxLowerYPositions[] = {
+ 142, // TEXTBOX_TYPE_0
+ 142, // TEXTBOX_TYPE_1
+ 142, // TEXTBOX_TYPE_2
+ 142, // TEXTBOX_TYPE_3
+ 174, // TEXTBOX_TYPE_4
+ 142, // TEXTBOX_TYPE_5
+ 142, // TEXTBOX_TYPE_6
+ 142, // TEXTBOX_TYPE_7
+ 142, // TEXTBOX_TYPE_8
+ 130, // TEXTBOX_TYPE_9
+ 174, // TEXTBOX_TYPE_A
+ 0, // TEXTBOX_TYPE_B
+ 142, // TEXTBOX_TYPE_C
+ 142, // TEXTBOX_TYPE_D
+ 142, // TEXTBOX_TYPE_E
+ 142, // TEXTBOX_TYPE_F
+};
+
+s16 sTextboxUpperYPositions[] = {
+ 38, // TEXTBOX_TYPE_0
+ 38, // TEXTBOX_TYPE_1
+ 38, // TEXTBOX_TYPE_2
+ 38, // TEXTBOX_TYPE_3
+ 174, // TEXTBOX_TYPE_4
+ 38, // TEXTBOX_TYPE_5
+ 38, // TEXTBOX_TYPE_6
+ 38, // TEXTBOX_TYPE_7
+ 38, // TEXTBOX_TYPE_8
+ 60, // TEXTBOX_TYPE_9
+ 174, // TEXTBOX_TYPE_A
+ 0, // TEXTBOX_TYPE_B
+ 38, // TEXTBOX_TYPE_C
+ 38, // TEXTBOX_TYPE_D
+ 38, // TEXTBOX_TYPE_E
+ 38, // TEXTBOX_TYPE_F
+};
+
+s16 sTextboxMidYPositions[] = {
+ 90, // TEXTBOX_TYPE_0
+ 90, // TEXTBOX_TYPE_1
+ 90, // TEXTBOX_TYPE_2
+ 90, // TEXTBOX_TYPE_3
+ 174, // TEXTBOX_TYPE_4
+ 90, // TEXTBOX_TYPE_5
+ 90, // TEXTBOX_TYPE_6
+ 90, // TEXTBOX_TYPE_7
+ 90, // TEXTBOX_TYPE_8
+ 90, // TEXTBOX_TYPE_9
+ 174, // TEXTBOX_TYPE_A
+ 0, // TEXTBOX_TYPE_B
+ 90, // TEXTBOX_TYPE_C
+ 90, // TEXTBOX_TYPE_D
+ 90, // TEXTBOX_TYPE_E
+ 90, // TEXTBOX_TYPE_F
+};
+
+s16 D_801D0448[] = { 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25 };
+
+s16 D_801D045C[] = {
+ 0x1B91,
+ 0x1B90,
+ 0x1B8F,
+};
+s16 D_801D0464[] = {
+ 0x1B92,
+ 0x1B8E,
+};
+
+#ifdef NON_MATCHING
+// Down to a single compiler-managed stack variable
+// Also contains in-function data
+// https://decomp.me/scratch/QcQ0a
+void Message_Update(PlayState* play) {
+ static u8 D_801D0468 = 0;
+ MessageContext* msgCtx = &play->msgCtx;
+ SramContext* sramCtx = &play->sramCtx; // Optional
+ PauseContext* pauseCtx = &play->pauseCtx;
+ InterfaceContext* interfaceCtx = &play->interfaceCtx;
+ Input* input = CONTROLLER1(&play->state);
+ s16 averageY;
+ s16 sp50;
+ u16 temp_v1_2;
+ s16 sp4C;
+ s16 sp4A;
+ s16 sp48;
+ s32 sp44;
+ s32 sp40;
+ u16 sp3E;
+ s16 var_v1;
+ u16 temp;
+
+ msgCtx->stickAdjX = input->rel.stick_x;
+ msgCtx->stickAdjY = input->rel.stick_y;
+
+ averageY = 0;
+
+ // 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 (msgCtx->stickAdjX < -30) {
+ if (msgCtx->stickXRepeatState == -1) {
+ msgCtx->stickXRepeatTimer--;
+ if (msgCtx->stickXRepeatTimer < 0) {
+ // Allow the input to register and apply the delay for all subsequent repeated inputs
+ msgCtx->stickXRepeatTimer = 2;
+ } else {
+ // Cancel the current input
+ msgCtx->stickAdjX = 0;
+ }
+ } else {
+ // Allow the input to register and apply the delay for the first repeated input
+ msgCtx->stickXRepeatTimer = 10;
+ msgCtx->stickXRepeatState = -1;
+ }
+ } else if (msgCtx->stickAdjX > 30) {
+ if (msgCtx->stickXRepeatState == 1) {
+ msgCtx->stickXRepeatTimer--;
+ if (msgCtx->stickXRepeatTimer < 0) {
+ // Allow the input to register and apply the delay for all subsequent repeated inputs
+ msgCtx->stickXRepeatTimer = 2;
+ } else {
+ // Cancel the current input
+ msgCtx->stickAdjX = 0;
+ }
+ } else {
+ // Allow the input to register and apply the delay for the first repeated input
+ msgCtx->stickXRepeatTimer = 10;
+ msgCtx->stickXRepeatState = 1;
+ }
+ } else {
+ msgCtx->stickXRepeatState = 0;
+ }
+
+ if (msgCtx->stickAdjY < -30) {
+ if (msgCtx->stickYRepeatState == -1) {
+ msgCtx->stickYRepeatTimer--;
+ if (msgCtx->stickYRepeatTimer < 0) {
+ // Allow the input to register and apply the delay for all subsequent repeated inputs
+ msgCtx->stickYRepeatTimer = 2;
+ } else {
+ // Cancel the current input
+ msgCtx->stickAdjY = 0;
+ }
+ } else {
+ // Allow the input to register and apply the delay for the first repeated input
+ msgCtx->stickYRepeatTimer = 10;
+ msgCtx->stickYRepeatState = -1;
+ }
+ } else if (msgCtx->stickAdjY > 30) {
+ if (msgCtx->stickYRepeatState == 1) {
+ msgCtx->stickYRepeatTimer--;
+ if (msgCtx->stickYRepeatTimer < 0) {
+ // Allow the input to register and apply the delay for all subsequent repeated inputs
+ msgCtx->stickYRepeatTimer = 2;
+ } else {
+ // Cancel the current input
+ msgCtx->stickAdjY = 0;
+ }
+ } else {
+ // Allow the input to register and apply the delay for the first repeated input
+ msgCtx->stickYRepeatTimer = 10;
+ msgCtx->stickYRepeatState = 1;
+ }
+ } else {
+ msgCtx->stickYRepeatState = 0;
+ }
+
+ if (msgCtx->msgLength == 0) {
+ return;
+ }
+
+ switch (msgCtx->msgMode) {
+ case MSGMODE_TEXT_START:
+ D_801C6A70++;
+
+ temp = false;
+ if ((D_801C6A70 >= 4) || ((msgCtx->talkActor == NULL) && (D_801C6A70 >= 2))) {
+ temp = true;
+ }
+ if (temp) {
+ if (msgCtx->talkActor != NULL) {
+ Actor_GetScreenPos(play, &GET_PLAYER(play)->actor, &sp50, &sp4C);
+ Actor_GetScreenPos(play, msgCtx->talkActor, &sp50, &sp4A);
+ if (sp4C >= sp4A) {
+ averageY = ((sp4C - sp4A) / 2) + sp4A;
+ } else {
+ averageY = ((sp4A - sp4C) / 2) + sp4C;
+ }
+ } else {
+ msgCtx->textboxX = msgCtx->textboxXTarget;
+ msgCtx->textboxY = msgCtx->textboxYTarget;
+ }
+
+ var_v1 = msgCtx->textBoxType;
+
+ if ((u32)msgCtx->textBoxPos == 0) {
+ if ((play->sceneId == SCENE_UNSET_04) || (play->sceneId == SCENE_UNSET_05) ||
+ (play->sceneId == SCENE_UNSET_06)) {
+ if (averageY < 0x64) {
+ msgCtx->textboxYTarget = sTextboxLowerYPositions[var_v1];
+ } else {
+ msgCtx->textboxYTarget = sTextboxUpperYPositions[var_v1];
+ }
+ } else {
+ if (averageY < 0xA0) {
+ msgCtx->textboxYTarget = sTextboxLowerYPositions[var_v1];
+ } else {
+ msgCtx->textboxYTarget = sTextboxUpperYPositions[var_v1];
+ }
+ }
+ } else if (msgCtx->textBoxPos == 1) {
+ msgCtx->textboxYTarget = sTextboxUpperYPositions[var_v1];
+ } else if (msgCtx->textBoxPos == 2) {
+ msgCtx->textboxYTarget = sTextboxMidYPositions[var_v1];
+ } else if (msgCtx->textBoxPos == 7) {
+ msgCtx->textboxYTarget = 0x9E;
+ } else {
+ msgCtx->textboxYTarget = sTextboxLowerYPositions[var_v1];
+ }
+
+ msgCtx->textboxXTarget = sTextboxXPositions[var_v1];
+
+ if ((gSaveContext.options.language == LANGUAGE_JPN) && !msgCtx->textIsCredits) {
+ msgCtx->unk11FFE[0] = (s16)(msgCtx->textboxYTarget + 7);
+ msgCtx->unk11FFE[1] = (s16)(msgCtx->textboxYTarget + 0x19);
+ msgCtx->unk11FFE[2] = (s16)(msgCtx->textboxYTarget + 0x2B);
+ } else {
+ msgCtx->unk11FFE[0] = (s16)(msgCtx->textboxYTarget + 0x14);
+ msgCtx->unk11FFE[1] = (s16)(msgCtx->textboxYTarget + 0x20);
+ msgCtx->unk11FFE[2] = (s16)(msgCtx->textboxYTarget + 0x2C);
+ }
+
+ if ((msgCtx->textBoxType == TEXTBOX_TYPE_4) || (msgCtx->textBoxType == TEXTBOX_TYPE_5)) {
+ msgCtx->msgMode = MSGMODE_TEXT_STARTING;
+ msgCtx->textboxX = msgCtx->textboxXTarget;
+ msgCtx->textboxY = msgCtx->textboxYTarget;
+ msgCtx->unk12008 = 0x100;
+ msgCtx->unk1200A = 0x40;
+ msgCtx->unk1200C = 0x200;
+ msgCtx->unk1200E = 0x200;
+ break;
+ }
+
+ Message_GrowTextbox(play);
+ Audio_PlaySfx_IfNotInCutscene(NA_SE_NONE);
+ msgCtx->stateTimer = 0;
+ msgCtx->msgMode = MSGMODE_TEXT_BOX_GROWING;
+
+ if (!pauseCtx->itemDescriptionOn) {
+ func_80150A84(play);
+ }
+ }
+ break;
+
+ case MSGMODE_TEXT_BOX_GROWING:
+ Message_GrowTextbox(play);
+ break;
+
+ case MSGMODE_TEXT_STARTING:
+ msgCtx->msgMode = MSGMODE_TEXT_NEXT_MSG;
+ if (!pauseCtx->itemDescriptionOn) {
+ if (msgCtx->currentTextId == 0xFF) {
+ func_8011552C(play, DO_ACTION_STOP);
+ } else if (msgCtx->currentTextId != 0xF8) {
+ func_8011552C(play, DO_ACTION_NEXT);
+ }
+ }
+ break;
+
+ case MSGMODE_TEXT_NEXT_MSG:
+ Message_Decode(play);
+ if (msgCtx->textFade) {
+ Interface_SetHudVisibility(HUD_VISIBILITY_NONE);
+ }
+ if (D_801D0468 != 0) {
+ msgCtx->textDrawPos = msgCtx->decodedTextLen;
+ D_801D0468 = 0;
+ }
+ break;
+
+ case MSGMODE_TEXT_CONTINUING:
+ msgCtx->stateTimer--;
+ if (msgCtx->stateTimer == 0) {
+ Message_Decode(play);
+ }
+ break;
+
+ case MSGMODE_TEXT_DISPLAYING:
+ if (msgCtx->textBoxType != TEXTBOX_TYPE_4) {
+ if (CHECK_BTN_ALL(input->press.button, BTN_B) && !msgCtx->textUnskippable) {
+ msgCtx->textboxSkipped = true;
+ msgCtx->textDrawPos = msgCtx->decodedTextLen;
+ } else if (CHECK_BTN_ALL(input->press.button, BTN_A) && !msgCtx->textUnskippable) {
+
+ while (true) {
+ temp_v1_2 = msgCtx->decodedBuffer.wchar[msgCtx->textDrawPos];
+ if ((temp_v1_2 == 0x10) || (temp_v1_2 == 0x12) || (temp_v1_2 == 0x1B) || (temp_v1_2 == 0x1C) ||
+ (temp_v1_2 == 0x1D) || (temp_v1_2 == 0x19) || (temp_v1_2 == 0xE0) || (temp_v1_2 == 0xBF) ||
+ (temp_v1_2 == 0x15) || (temp_v1_2 == 0x1A)) {
+ break;
+ }
+ msgCtx->textDrawPos++;
+ }
+ }
+ } else if (CHECK_BTN_ALL(input->press.button, BTN_A) && (msgCtx->textUnskippable == 0)) {
+ while (true) {
+ temp_v1_2 = msgCtx->decodedBuffer.wchar[msgCtx->textDrawPos];
+ if ((temp_v1_2 == 0x10) || (temp_v1_2 == 0x12) || (temp_v1_2 == 0x1B) || (temp_v1_2 == 0x1C) ||
+ (temp_v1_2 == 0x1D) || (temp_v1_2 == 0x19) || (temp_v1_2 == 0xE0) || (temp_v1_2 == 0xBF) ||
+ (temp_v1_2 == 0x15) || (temp_v1_2 == 0x1A)) {
+ break;
+ }
+ msgCtx->textDrawPos++;
+ }
+ }
+ break;
+
+ case MSGMODE_TEXT_AWAIT_INPUT:
+ if (Message_ShouldAdvance(play)) {
+ msgCtx->msgMode = MSGMODE_TEXT_DISPLAYING;
+ msgCtx->textDrawPos++;
+ }
+ break;
+
+ case MSGMODE_TEXT_DELAYED_BREAK:
+ msgCtx->stateTimer--;
+ if (msgCtx->stateTimer == 0) {
+ msgCtx->msgMode = MSGMODE_TEXT_NEXT_MSG;
+ }
+ break;
+
+ case MSGMODE_TEXT_AWAIT_NEXT:
+ if (Message_ShouldAdvance(play)) {
+ msgCtx->msgMode = MSGMODE_TEXT_NEXT_MSG;
+ msgCtx->msgBufPos++;
+ }
+ break;
+
+ case MSGMODE_TEXT_DONE:
+ if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_50) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_52)) {
+ msgCtx->stateTimer--;
+ if ((msgCtx->stateTimer == 0) ||
+ ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_52) && Message_ShouldAdvance(play))) {
+ if (msgCtx->nextTextId != 0xFFFF) {
+ Audio_PlaySfx(NA_SE_SY_MESSAGE_PASS);
+ Message_ContinueTextbox(play, msgCtx->nextTextId);
+ } else if (msgCtx->bombersNotebookEventQueueCount != 0) {
+ if (Message_BombersNotebookProcessEventQueue(play) == 0) {
+ Message_CloseTextbox(play);
+ }
+ } else {
+ Message_CloseTextbox(play);
+ }
+ }
+ } else {
+ if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_30) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_40) ||
+ (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_42) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_41)) {
+ return;
+ }
+
+ switch (msgCtx->textboxEndType) {
+ case TEXTBOX_ENDTYPE_55:
+ msgCtx->textColorAlpha += 20;
+ if (msgCtx->textColorAlpha >= 255) {
+ msgCtx->textColorAlpha = 255;
+ msgCtx->textboxEndType = TEXTBOX_ENDTYPE_56;
+ }
+ break;
+
+ case TEXTBOX_ENDTYPE_56:
+ msgCtx->stateTimer--;
+ if (msgCtx->stateTimer == 0) {
+ msgCtx->textboxEndType = TEXTBOX_ENDTYPE_57;
+ }
+ break;
+
+ case TEXTBOX_ENDTYPE_57:
+ msgCtx->textColorAlpha -= 20;
+ if (msgCtx->textColorAlpha <= 0) {
+ msgCtx->textColorAlpha = 0;
+ if (msgCtx->nextTextId != 0xFFFF) {
+ Audio_PlaySfx(NA_SE_SY_MESSAGE_PASS);
+ Message_ContinueTextbox(play, msgCtx->nextTextId);
+ return;
+ }
+ if (msgCtx->bombersNotebookEventQueueCount != 0) {
+ if (Message_BombersNotebookProcessEventQueue(play) == 0) {
+ Message_CloseTextbox(play);
+ return;
+ }
+ } else {
+ Message_CloseTextbox(play);
+ return;
+ }
+ }
+ break;
+
+ case TEXTBOX_ENDTYPE_10:
+ Message_HandleChoiceSelection(play, 1);
+ break;
+
+ case TEXTBOX_ENDTYPE_11:
+ Message_HandleChoiceSelection(play, 2);
+ break;
+
+ case TEXTBOX_ENDTYPE_12:
+ Message_HandleChoiceSelection(play, 1);
+ break;
+
+ default:
+ break;
+ }
+
+ if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) &&
+ (play->msgCtx.ocarinaMode == OCARINA_MODE_ACTIVE)) {
+ if (Message_ShouldAdvance(play)) {
+ if (msgCtx->choiceIndex == 0) {
+ play->msgCtx.ocarinaMode = OCARINA_MODE_WARP;
+ } else {
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
+ }
+ Message_CloseTextbox(play);
+ }
+ } else if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) &&
+ (play->msgCtx.ocarinaMode == OCARINA_MODE_PROCESS_SOT)) {
+ if (Message_ShouldAdvance(play)) {
+ if (msgCtx->choiceIndex == 0) {
+ Audio_PlaySfx_MessageDecide();
+ msgCtx->msgMode = MSGMODE_NEW_CYCLE_0;
+ msgCtx->decodedTextLen -= 3;
+ msgCtx->unk120D6 = 0;
+ msgCtx->unk120D4 = 0;
+ } else {
+ Audio_PlaySfx_MessageCancel();
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
+ Message_CloseTextbox(play);
+ }
+ }
+ } else if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) &&
+ (play->msgCtx.ocarinaMode == OCARINA_MODE_PROCESS_INVERTED_TIME)) {
+ if (Message_ShouldAdvance(play)) {
+ if (msgCtx->choiceIndex == 0) {
+ Audio_PlaySfx_MessageDecide();
+ if (gSaveContext.save.timeSpeedOffset == 0) {
+ play->msgCtx.ocarinaMode = OCARINA_MODE_APPLY_INV_SOT_SLOW;
+ gSaveContext.save.timeSpeedOffset = -2;
+ } else {
+ play->msgCtx.ocarinaMode = OCARINA_MODE_APPLY_INV_SOT_FAST;
+ gSaveContext.save.timeSpeedOffset = 0;
+ }
+ Message_CloseTextbox(play);
+ } else {
+ Audio_PlaySfx_MessageCancel();
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
+ Message_CloseTextbox(play);
+ }
+ }
+ } else if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) &&
+ (play->msgCtx.ocarinaMode == OCARINA_MODE_PROCESS_DOUBLE_TIME)) {
+ if (Message_ShouldAdvance(play)) {
+ if (msgCtx->choiceIndex == 0) {
+ Audio_PlaySfx_MessageDecide();
+ if (gSaveContext.save.isNight != 0) {
+ gSaveContext.save.time = CLOCK_TIME(6, 0);
+ } else {
+ gSaveContext.save.time = CLOCK_TIME(18, 0);
+ }
+ play->msgCtx.ocarinaMode = OCARINA_MODE_APPLY_DOUBLE_SOT;
+ gSaveContext.timerStates[TIMER_ID_MOON_CRASH] = TIMER_STATE_OFF;
+ } else {
+ Audio_PlaySfx_MessageCancel();
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
+ }
+ Message_CloseTextbox(play);
+ }
+ } else if ((msgCtx->textboxEndType != TEXTBOX_ENDTYPE_10) ||
+ (pauseCtx->state != PAUSE_STATE_OWLWARP_CONFIRM)) {
+ if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) &&
+ (play->msgCtx.ocarinaMode == OCARINA_MODE_1B)) {
+ if (Message_ShouldAdvance(play)) {
+ if (msgCtx->choiceIndex == 0) {
+ Audio_PlaySfx_MessageDecide();
+ play->msgCtx.ocarinaMode = OCARINA_MODE_WARP_TO_ENTRANCE;
+ } else {
+ Audio_PlaySfx_MessageCancel();
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
+ }
+ Message_CloseTextbox(play);
+ }
+ } else if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_60) ||
+ (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_61) ||
+ (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) ||
+ (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_11) ||
+ (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_50) ||
+ (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_52) ||
+ (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_55) ||
+ (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_56) ||
+ (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_57) ||
+ (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_62)) {
+ //! FAKE: debug?
+ if (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_50) {}
+ } else if (pauseCtx->itemDescriptionOn) {
+ if ((input->rel.stick_x != 0) || (input->rel.stick_y != 0) ||
+ CHECK_BTN_ALL(input->press.button, BTN_A) || CHECK_BTN_ALL(input->press.button, BTN_B) ||
+ CHECK_BTN_ALL(input->press.button, BTN_START)) {
+ Audio_PlaySfx(NA_SE_SY_DECIDE);
+ Message_CloseTextbox(play);
+ }
+ } else if (play->msgCtx.ocarinaMode == OCARINA_MODE_PROCESS_RESTRICTED_SONG) {
+ if (Message_ShouldAdvanceSilent(play)) {
+ Audio_PlaySfx(NA_SE_SY_DECIDE);
+ Message_CloseTextbox(play);
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
+ }
+ } else if ((msgCtx->currentTextId != 0x2790) && Message_ShouldAdvanceSilent(play)) {
+ if (msgCtx->nextTextId != 0xFFFF) {
+ Audio_PlaySfx(NA_SE_SY_MESSAGE_PASS);
+ Message_ContinueTextbox(play, msgCtx->nextTextId);
+ } else if ((msgCtx->bombersNotebookEventQueueCount == 0) ||
+ (Message_BombersNotebookProcessEventQueue(play) != 1)) {
+ if (msgCtx->currentTextId == 0x579) {
+ gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE;
+ }
+ Audio_PlaySfx(NA_SE_SY_DECIDE);
+ Message_CloseTextbox(play);
+ }
+ }
+ }
+ }
+ break;
+
+ case MSGMODE_TEXT_CLOSING:
+ msgCtx->stateTimer--;
+ if (msgCtx->stateTimer != 0) {
+ break;
+ }
+
+ if (sLastPlayedSong == OCARINA_SONG_SOARING) {
+ if (interfaceCtx->restrictions.songOfSoaring == 0) {
+ if (func_8010A0A4(play) || (play->sceneId == SCENE_SECOM)) {
+ Message_StartTextbox(play, 0x1B93, NULL);
+ play->msgCtx.ocarinaMode = OCARINA_MODE_1B;
+ sLastPlayedSong = 0xFF;
+ } else if (!msgCtx->ocarinaSongEffectActive) {
+ if (gSaveContext.save.saveInfo.playerData.owlActivationFlags != 0) {
+ pauseCtx->unk_2C8 = pauseCtx->pageIndex;
+ pauseCtx->unk_2CA = pauseCtx->cursorPoint[4];
+ pauseCtx->pageIndex = PAUSE_ITEM;
+ pauseCtx->state = PAUSE_STATE_OWLWARP_0;
+ func_800F4A10(play);
+ pauseCtx->pageIndex = PAUSE_MAP;
+ sLastPlayedSong = 0xFF;
+ Message_CloseTextbox(play);
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
+ gSaveContext.prevHudVisibility = HUD_VISIBILITY_A_B;
+ func_80115844(play, DO_ACTION_STOP);
+ GameState_SetFramerateDivisor(&play->state, 2);
+ if (ShrinkWindow_Letterbox_GetSizeTarget() != 0) {
+ ShrinkWindow_Letterbox_SetSizeTarget(0);
+ }
+ Audio_PlaySfx_PauseMenuOpenOrClose(1);
+ break;
+ }
+ sLastPlayedSong = 0xFF;
+ Message_StartTextbox(play, 0xFB, NULL);
+ play->msgCtx.ocarinaMode = OCARINA_MODE_PROCESS_RESTRICTED_SONG;
+ } else {
+ msgCtx->stateTimer = 1;
+ }
+ } else {
+ sLastPlayedSong = 0xFF;
+ Message_StartTextbox(play, 0x1B95, NULL);
+ play->msgCtx.ocarinaMode = OCARINA_MODE_PROCESS_RESTRICTED_SONG;
+ }
+ break;
+ }
+
+ if ((msgCtx->currentTextId == 0xC) || (msgCtx->currentTextId == 0xD) || (msgCtx->currentTextId == 0xC5) ||
+ (msgCtx->currentTextId == 0xC6) || (msgCtx->currentTextId == 0xC7) ||
+ (msgCtx->currentTextId == 0x2165) || (msgCtx->currentTextId == 0x2166) ||
+ (msgCtx->currentTextId == 0x2167) || (msgCtx->currentTextId == 0x2168)) {
+ gSaveContext.healthAccumulator = 20 * 0x10; // Refill 20 hearts
+ }
+
+ if ((play->csCtx.state == CS_STATE_IDLE) && (gSaveContext.save.cutsceneIndex < 0xFFF0) &&
+ ((play->activeCamId == CAM_ID_MAIN) ||
+ ((play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF))) &&
+ (play->msgCtx.ocarinaMode == OCARINA_MODE_END)) {
+ if ((gSaveContext.prevHudVisibility == HUD_VISIBILITY_IDLE) ||
+ (gSaveContext.prevHudVisibility == HUD_VISIBILITY_NONE) ||
+ (gSaveContext.prevHudVisibility == HUD_VISIBILITY_NONE_ALT)) {
+ gSaveContext.prevHudVisibility = HUD_VISIBILITY_ALL;
+ }
+ gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE;
+ }
+
+ if ((msgCtx->currentTextId >= 0x1BB2) && (msgCtx->currentTextId <= 0x1BB6) &&
+ (play->actorCtx.flags & ACTORCTX_FLAG_1)) {
+ Message_StartTextbox(play, 0x5E6, NULL);
+ break;
+ }
+
+ if (msgCtx->bombersNotebookEventQueueCount != 0) {
+ if (Message_BombersNotebookProcessEventQueue(play) == 0) {
+ msgCtx->stateTimer = 1;
+ }
+ break;
+ }
+
+ msgCtx->msgLength = 0;
+ msgCtx->msgMode = MSGMODE_NONE;
+ msgCtx->currentTextId = 0;
+ msgCtx->stateTimer = 0;
+ XREG(31) = 0;
+
+ if (pauseCtx->itemDescriptionOn) {
+ func_8011552C(play, DO_ACTION_INFO);
+ pauseCtx->itemDescriptionOn = false;
+ }
+
+ if (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_30) {
+ msgCtx->textboxEndType = TEXTBOX_ENDTYPE_00;
+ play->msgCtx.ocarinaMode = OCARINA_MODE_WARP;
+ } else {
+ msgCtx->textboxEndType = TEXTBOX_ENDTYPE_00;
+ }
+
+ if (EQ_MAX_QUEST_HEART_PIECE_COUNT) {
+ RESET_HEART_PIECE_COUNT;
+ gSaveContext.save.saveInfo.playerData.healthCapacity += 0x10;
+ gSaveContext.save.saveInfo.playerData.health += 0x10;
+ }
+
+ if (msgCtx->ocarinaAction != OCARINA_ACTION_CHECK_NOTIME_DONE) {
+ s16 pad;
+
+ if (sLastPlayedSong == OCARINA_SONG_TIME) {
+ if (interfaceCtx->restrictions.songOfTime == 0) {
+ Message_StartTextbox(play, 0x1B8A, NULL);
+ play->msgCtx.ocarinaMode = OCARINA_MODE_PROCESS_SOT;
+ } else {
+ sLastPlayedSong = 0xFF;
+ Message_StartTextbox(play, 0x1B95, NULL);
+ play->msgCtx.ocarinaMode = OCARINA_MODE_PROCESS_RESTRICTED_SONG;
+ }
+ } else if (sLastPlayedSong == OCARINA_SONG_INVERTED_TIME) {
+ if (interfaceCtx->restrictions.invSongOfTime == 0) {
+ if (R_TIME_SPEED != 0) {
+ if (gSaveContext.save.timeSpeedOffset == 0) {
+ Message_StartTextbox(play, 0x1B8C, NULL);
+ } else {
+ Message_StartTextbox(play, 0x1B8D, NULL);
+ }
+ play->msgCtx.ocarinaMode = OCARINA_MODE_PROCESS_INVERTED_TIME;
+ } else {
+ Message_StartTextbox(play, 0x1B8B, NULL);
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
+ }
+ } else {
+ sLastPlayedSong = 0xFF;
+ Message_StartTextbox(play, 0x1B95, NULL);
+ play->msgCtx.ocarinaMode = OCARINA_MODE_PROCESS_RESTRICTED_SONG;
+ }
+ } else if (sLastPlayedSong == OCARINA_SONG_DOUBLE_TIME) {
+ if (interfaceCtx->restrictions.songOfDoubleTime == 0) {
+ if ((CURRENT_DAY != 3) || (gSaveContext.save.isNight == 0)) {
+ if (gSaveContext.save.isNight) {
+ Message_StartTextbox(play, D_801D0464[CURRENT_DAY - 1], NULL);
+ } else {
+ Message_StartTextbox(play, D_801D045C[CURRENT_DAY - 1], NULL);
+ }
+ play->msgCtx.ocarinaMode = OCARINA_MODE_PROCESS_DOUBLE_TIME;
+ } else {
+ Message_StartTextbox(play, 0x1B94, NULL);
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
+ }
+ } else {
+ sLastPlayedSong = 0xFF;
+ Message_StartTextbox(play, 0x1B95, NULL);
+ play->msgCtx.ocarinaMode = OCARINA_MODE_PROCESS_RESTRICTED_SONG;
+ }
+ } else if ((msgCtx->ocarinaAction == OCARINA_ACTION_FREE_PLAY_DONE) &&
+ ((play->msgCtx.ocarinaMode == OCARINA_MODE_ACTIVE) ||
+ (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) ||
+ (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_SCARECROW_SPAWN) ||
+ (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_FULL_EVAN_SONG))) {
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
+ if (msgCtx->lastPlayedSong == OCARINA_SONG_SOARING) {
+ play->msgCtx.ocarinaMode = OCARINA_MODE_ACTIVE;
+ }
+ }
+ sLastPlayedSong = 0xFF;
+ }
+ break;
+
+ case MSGMODE_OCARINA_PLAYING:
+ if (CHECK_BTN_ALL(input->press.button, BTN_B)) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
+ Message_CloseTextbox(play);
+ } else {
+ msgCtx->ocarinaButtonIndex = OCARINA_BTN_INVALID;
+ }
+ break;
+
+ case MSGMODE_OCARINA_AWAIT_INPUT:
+ if ((msgCtx->ocarinaAction != OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF) &&
+ (msgCtx->ocarinaAction != OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF)) {
+ if (Message_ShouldAdvance(play)) {
+ Message_DisplayOcarinaStaff(play, msgCtx->ocarinaAction);
+ }
+ }
+ break;
+
+ case MSGMODE_SCARECROW_SPAWN_RECORDING_ONGOING:
+ if (CHECK_BTN_ALL(input->press.button, BTN_B)) {
+ AudioOcarina_SetRecordingState(OCARINA_RECORD_OFF);
+ Audio_PlaySfx(NA_SE_SY_OCARINA_ERROR);
+ Message_CloseTextbox(play);
+ msgCtx->msgMode = MSGMODE_SCARECROW_SPAWN_RECORDING_FAILED;
+ } else {
+ msgCtx->ocarinaButtonIndex = OCARINA_BTN_INVALID;
+ }
+ break;
+
+ case MSGMODE_SCENE_TITLE_CARD_FADE_IN_BACKGROUND:
+ msgCtx->textboxColorAlphaCurrent += XREG(73);
+ if (msgCtx->textboxColorAlphaCurrent >= 255) {
+ msgCtx->textboxColorAlphaCurrent = 255;
+ msgCtx->msgMode = MSGMODE_SCENE_TITLE_CARD_FADE_IN_TEXT;
+ }
+ break;
+
+ case MSGMODE_SCENE_TITLE_CARD_FADE_IN_TEXT:
+ msgCtx->textColorAlpha += XREG(73);
+ if (msgCtx->textColorAlpha >= 255) {
+ msgCtx->textColorAlpha = 255;
+ msgCtx->msgMode = MSGMODE_SCENE_TITLE_CARD_DISPLAYING;
+ }
+ break;
+
+ case MSGMODE_SCENE_TITLE_CARD_DISPLAYING:
+ msgCtx->stateTimer--;
+ if (msgCtx->stateTimer == 0) {
+ msgCtx->msgMode = MSGMODE_SCENE_TITLE_CARD_FADE_OUT_TEXT;
+ }
+ break;
+
+ case MSGMODE_SCENE_TITLE_CARD_FADE_OUT_TEXT:
+ msgCtx->textColorAlpha -= XREG(70);
+ if (msgCtx->textColorAlpha <= 0) {
+ msgCtx->textColorAlpha = 0;
+ msgCtx->msgMode = MSGMODE_SCENE_TITLE_CARD_FADE_OUT_BACKGROUND;
+ }
+ break;
+
+ case MSGMODE_SCENE_TITLE_CARD_FADE_OUT_BACKGROUND:
+ msgCtx->textboxColorAlphaCurrent -= XREG(70);
+ if (msgCtx->textboxColorAlphaCurrent <= 0) {
+ if ((msgCtx->currentTextId >= 0x1BB2) && (msgCtx->currentTextId <= 0x1BB6) &&
+ (play->actorCtx.flags & ACTORCTX_FLAG_1)) {
+ Message_StartTextbox(play, 0x5E6, NULL);
+ Interface_SetHudVisibility(HUD_VISIBILITY_NONE_ALT);
+ } else {
+ //! FAKE: debug?
+ if (msgCtx->currentTextId >= 0x100) {
+ if (msgCtx && msgCtx && msgCtx) {}
+ }
+ msgCtx->textboxColorAlphaCurrent = 0;
+ msgCtx->msgLength = 0;
+ msgCtx->msgMode = MSGMODE_NONE;
+ msgCtx->currentTextId = 0;
+ msgCtx->stateTimer = 0;
+ }
+ }
+ break;
+
+ case MSGMODE_NEW_CYCLE_0:
+ play->state.unk_A3 = 1;
+ sp44 = gSaveContext.save.cutsceneIndex;
+ sp3E = gSaveContext.save.time;
+ sp40 = gSaveContext.save.day;
+
+ Sram_SaveEndOfCycle(play);
+ gSaveContext.timerStates[TIMER_ID_MOON_CRASH] = TIMER_STATE_OFF;
+ func_8014546C(&play->sramCtx);
+
+ gSaveContext.save.day = sp40;
+ gSaveContext.save.time = sp3E;
+ gSaveContext.save.cutsceneIndex = sp44;
+
+ if (gSaveContext.fileNum != 0xFF) {
+ Sram_SetFlashPagesDefault(&play->sramCtx, gFlashSaveStartPages[gSaveContext.fileNum * 2],
+ gFlashSpecialSaveNumPages[gSaveContext.fileNum * 2]);
+ Sram_StartWriteToFlashDefault(&play->sramCtx);
+ }
+ msgCtx->msgMode = MSGMODE_NEW_CYCLE_1;
+ break;
+
+ case MSGMODE_NEW_CYCLE_1:
+ if (gSaveContext.fileNum != 0xFF) {
+ play->state.unk_A3 = 1;
+ if (play->sramCtx.status == 0) {
+ play->msgCtx.ocarinaMode = OCARINA_MODE_APPLY_SOT;
+ msgCtx->msgMode = MSGMODE_NEW_CYCLE_2;
+ }
+ } else {
+ play->msgCtx.ocarinaMode = OCARINA_MODE_APPLY_SOT;
+ msgCtx->msgMode = MSGMODE_NEW_CYCLE_2;
+ }
+ break;
+
+ case MSGMODE_OWL_SAVE_0:
+ play->state.unk_A3 = 1;
+ gSaveContext.save.isOwlSave = true;
+ Play_SaveCycleSceneFlags(&play->state);
+ func_8014546C(&play->sramCtx);
+
+ if (gSaveContext.fileNum != 0xFF) {
+ Sram_SetFlashPagesOwlSave(&play->sramCtx, gFlashOwlSaveStartPages[gSaveContext.fileNum * 2],
+ gFlashOwlSaveNumPages[gSaveContext.fileNum * 2]);
+ Sram_StartWriteToFlashOwlSave(&play->sramCtx);
+ }
+ msgCtx->msgMode = MSGMODE_OWL_SAVE_1;
+ break;
+
+ case MSGMODE_OWL_SAVE_1:
+ if (gSaveContext.fileNum != 0xFF) {
+ play->state.unk_A3 = 1;
+ if (play->sramCtx.status == 0) {
+ play->msgCtx.ocarinaMode = OCARINA_MODE_APPLY_SOT;
+ msgCtx->msgMode = MSGMODE_OWL_SAVE_2;
+ }
+ } else {
+ play->msgCtx.ocarinaMode = OCARINA_MODE_APPLY_SOT;
+ msgCtx->msgMode = MSGMODE_OWL_SAVE_2;
+ }
+
+ if (msgCtx->msgMode == MSGMODE_OWL_SAVE_2) {
+ gSaveContext.gameMode = GAMEMODE_OWL_SAVE;
+ play->transitionTrigger = TRANS_TRIGGER_START;
+ play->transitionType = TRANS_TYPE_FADE_BLACK;
+ play->nextEntrance = ENTRANCE(CUTSCENE, 0);
+ gSaveContext.save.cutsceneIndex = 0;
+ gSaveContext.sceneLayer = 0;
+ }
+ break;
+
+ case MSGMODE_9:
+ case MSGMODE_PAUSED:
+ case MSGMODE_NEW_CYCLE_2:
+ case MSGMODE_OWL_SAVE_2:
+ break;
+
+ default:
+ msgCtx->ocarinaButtonIndex = OCARINA_BTN_INVALID;
+ break;
+ }
+}
+#else
+u8 D_801D0468 = 0;
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/Message_Update.s")
+#endif
+
+void Message_SetTables(PlayState* play) {
play->msgCtx.messageEntryTableNes = D_801C6B98;
play->msgCtx.messageTableStaff = D_801CFB08;
}
void Message_Init(PlayState* play) {
Font* font;
- MessageContext* messageCtx = &play->msgCtx;
+ MessageContext* msgCtx = &play->msgCtx;
+
+ Message_SetTables(play);
+
+ play->msgCtx.ocarinaMode = OCARINA_MODE_NONE;
+
+ msgCtx->msgMode = MSGMODE_NONE;
+ msgCtx->msgLength = 0;
+ msgCtx->currentTextId = 0;
+ msgCtx->textboxEndType = TEXTBOX_ENDTYPE_00;
+ msgCtx->choiceIndex = 0;
+ msgCtx->ocarinaAction = msgCtx->textUnskippable = 0;
+ msgCtx->textColorAlpha = 0xFF;
+
+ View_Init(&msgCtx->view, play->state.gfxCtx);
+
+ msgCtx->textboxSegment = THA_AllocTailAlign16(&play->state.tha, 0x13C00);
- func_801586A4(play);
- play->msgCtx.ocarinaMode = 0;
- messageCtx->msgMode = 0;
- messageCtx->msgLength = 0;
- messageCtx->currentTextId = 0;
- messageCtx->unk12020 = 0;
- messageCtx->choiceIndex = 0;
- messageCtx->ocarinaAction = messageCtx->unk11FF2 = 0;
- messageCtx->unk1201E = 0xFF;
- View_Init(&messageCtx->view, play->state.gfxCtx);
- messageCtx->unk11EF8 = THA_AllocTailAlign16(&play->state.heap, 0x13C00);
font = &play->msgCtx.font;
Font_LoadOrderedFont(&play->msgCtx.font);
font->unk_11D88 = 0;
- messageCtx->unk12090 = messageCtx->unk12092 = 0;
- messageCtx->unk12094 = 0;
- messageCtx->unk1209C = 0;
- messageCtx->unk120A0 = 0;
- messageCtx->unk12068 = 0x34;
- messageCtx->unk1206A = 0x24;
- messageCtx->unk120B0 = 0;
- messageCtx->unk120BE = 0;
- messageCtx->unk120C0 = 0;
- messageCtx->unk120C2 = 0;
- messageCtx->unk120C4 = 0;
- messageCtx->unk120C8 = 0;
- messageCtx->unk120CA = 0;
- messageCtx->unk120CC = 0;
- messageCtx->unk120CE = 0;
- messageCtx->unk120D0 = 0;
- messageCtx->unk120D2 = 0;
- messageCtx->unk120D4 = 0;
- messageCtx->unk120D6 = 0;
+
+ msgCtx->textIsCredits = msgCtx->messageHasSetSfx = false;
+ msgCtx->textboxSkipped = false;
+ msgCtx->textFade = false;
+ msgCtx->ocarinaAvailableSongs = 0;
+ msgCtx->textboxX = 52;
+ msgCtx->textboxY = 36;
+ msgCtx->ocarinaSongEffectActive = false;
+ msgCtx->unk120BE = 0;
+ msgCtx->unk120C0 = 0;
+ msgCtx->unk120C2 = 0;
+ msgCtx->unk120C4 = 0;
+ msgCtx->unk120C8 = 0;
+ msgCtx->unk120CA = 0;
+ msgCtx->unk120CC = 0;
+ msgCtx->unk120CE = 0;
+ msgCtx->unk120D0 = 0;
+ msgCtx->unk120D2 = 0;
+ msgCtx->unk120D4 = 0;
+ msgCtx->unk120D6 = 0;
}
diff --git a/src/code/z_message_nes.c b/src/code/z_message_nes.c
index 759c3d611..3775b5b26 100644
--- a/src/code/z_message_nes.c
+++ b/src/code/z_message_nes.c
@@ -2,59 +2,19 @@
#include "message_data_static.h"
#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
-#if 0
-
-//fontWidth
-extern f32 D_801D0470[159];
-
-//rupeesTextLocalization
-u8 D_801D06F0[4][8] = { { "rupee(s)" }, //EN
- { "rubin(e)" }, //DE
- { "rubis" }, //FR
- { "rupia(s)" } //SPA
- };
-
-// rupeesTextLength
-u8 D_801D0710[4] = {8,8,5,8};
-
-// 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
+f32 sNESFontWidths[160] = {
+ 8.0f, 8.0f, 6.0f, 9.0f, 9.0f, 14.0f, 12.0f, 3.0f, 7.0f, 7.0f, 7.0f, 9.0f, 4.0f, 6.0f, 4.0f, 9.0f,
+ 10.0f, 5.0f, 9.0f, 9.0f, 10.0f, 9.0f, 9.0f, 9.0f, 9.0f, 9.0f, 6.0f, 6.0f, 9.0f, 11.0f, 9.0f, 11.0f,
+ 13.0f, 12.0f, 9.0f, 11.0f, 11.0f, 8.0f, 8.0f, 12.0f, 10.0f, 4.0f, 8.0f, 10.0f, 8.0f, 13.0f, 11.0f, 13.0f,
+ 9.0f, 13.0f, 10.0f, 10.0f, 9.0f, 10.0f, 11.0f, 15.0f, 11.0f, 10.0f, 10.0f, 7.0f, 10.0f, 7.0f, 10.0f, 9.0f,
+ 5.0f, 8.0f, 9.0f, 8.0f, 9.0f, 9.0f, 6.0f, 9.0f, 8.0f, 4.0f, 6.0f, 8.0f, 4.0f, 12.0f, 9.0f, 9.0f,
+ 9.0f, 9.0f, 7.0f, 8.0f, 7.0f, 8.0f, 9.0f, 12.0f, 8.0f, 9.0f, 8.0f, 7.0f, 5.0f, 7.0f, 10.0f, 6.0f,
+ 12.0f, 12.0f, 12.0f, 12.0f, 11.0f, 8.0f, 8.0f, 8.0f, 8.0f, 6.0f, 6.0f, 6.0f, 6.0f, 10.0f, 13.0f, 13.0f,
+ 13.0f, 13.0f, 10.0f, 10.0f, 10.0f, 10.0f, 9.0f, 8.0f, 8.0f, 8.0f, 8.0f, 8.0f, 9.0f, 9.0f, 9.0f, 9.0f,
+ 4.0f, 4.0f, 4.0f, 4.0f, 8.0f, 9.0f, 9.0f, 9.0f, 9.0f, 8.0f, 8.0f, 8.0f, 8.0f, 8.0f, 11.0f, 6.0f,
+ 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f,
};
-// 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[OWL_WARP_MAX][16];
-extern s16 D_801D07C4[OWL_WARP_MAX];
-
void Message_FindMessageNES(PlayState* play, u16 textId) {
MessageContext* msgCtx = &play->msgCtx;
Font* font = &msgCtx->font;
@@ -91,7 +51,7 @@ void Message_LoadCharNES(PlayState* play, u8 codePointIndex, s32* offset, f32* a
Font_LoadCharNES(play, codePointIndex, temp1);
msgCtx->decodedBuffer.schar[decodedBufPos] = codePointIndex;
temp1 += FONT_CHAR_TEX_SIZE;
- temp2 += (16.0f * msgCtx->unk12098);
+ temp2 += (16.0f * msgCtx->textCharScale);
*offset = temp1;
*arg3 = temp2;
}
@@ -102,7 +62,7 @@ void Message_LoadPluralRupeesNES(PlayState* play, s16* decodedBufPos, s32* offse
s32 o = *offset;
f32 f = *arg3;
- msgCtx->decodedBuffer.schar[p] = 0x20;
+ msgCtx->decodedBuffer.schar[p] = ' ';
p++;
Font_LoadCharNES(play, 'R', o);
o += FONT_CHAR_TEX_SIZE;
@@ -128,12 +88,31 @@ void Message_LoadPluralRupeesNES(PlayState* play, s16* decodedBufPos, s32* offse
o += FONT_CHAR_TEX_SIZE;
msgCtx->decodedBuffer.schar[p] = 's';
- f += 16.0f * msgCtx->unk12098 * 6.0f;
+ f += 16.0f * msgCtx->textCharScale * 6.0f;
*decodedBufPos = p;
*offset = o;
*arg3 = f;
}
+#define RUPEES_STR_EN "Rupee(s)"
+#define RUPEES_STR_DE "Rubin(e)"
+#define RUPEES_STR_FR "Rubis"
+#define RUPEES_STR_SPA "Rupia(s)"
+
+char sRupeesTextLocalization[LANGUAGE_MAX - 1][8] = {
+ RUPEES_STR_EN, // EN
+ RUPEES_STR_DE, // DE
+ RUPEES_STR_FR, // FR
+ RUPEES_STR_SPA, // SPA
+};
+
+u8 sRupeesTextLength[LANGUAGE_MAX - 1] = {
+ sizeof(RUPEES_STR_EN) - 1,
+ sizeof(RUPEES_STR_DE) - 1,
+ sizeof(RUPEES_STR_FR) - 1,
+ sizeof(RUPEES_STR_SPA) - 1,
+};
+
void Message_LoadLocalizedRupeesNES(PlayState* play, s16* decodedBufPos, s32* offset, f32* arg3) {
MessageContext* msgCtx = &play->msgCtx;
s16 p = *decodedBufPos;
@@ -144,15 +123,15 @@ void Message_LoadLocalizedRupeesNES(PlayState* play, s16* decodedBufPos, s32* of
msgCtx->decodedBuffer.schar[p] = ' ';
p++;
- for (j = 0; j < D_801D0710[gSaveContext.options.language - 1]; j++) {
- Font_LoadCharNES(play, D_801D06F0[gSaveContext.options.language - 1][j], o);
- msgCtx->decodedBuffer.schar[p] = D_801D06F0[gSaveContext.options.language - 1][j];
+ for (j = 0; j < sRupeesTextLength[gSaveContext.options.language - 1]; j++) {
+ Font_LoadCharNES(play, sRupeesTextLocalization[gSaveContext.options.language - 1][j], o);
+ msgCtx->decodedBuffer.schar[p] = sRupeesTextLocalization[gSaveContext.options.language - 1][j];
o += FONT_CHAR_TEX_SIZE;
p++;
}
p--;
- f += 16.0f * msgCtx->unk12098 * (D_801D0710[gSaveContext.options.language - 1] + 1);
+ f += 16.0f * msgCtx->textCharScale * (sRupeesTextLength[gSaveContext.options.language - 1] + 1);
*decodedBufPos = p;
*offset = o;
*arg3 = f;
@@ -191,9 +170,9 @@ void Message_LoadRupeesNES(PlayState* play, s16* decodedBufPos, s32* offset, f32
Font_LoadCharNES(play, 's', o);
o += FONT_CHAR_TEX_SIZE;
msgCtx->decodedBuffer.schar[p] = 's';
- f += 16.0f * msgCtx->unk12098 * 6.0f;
+ f += 16.0f * msgCtx->textCharScale * 6.0f;
} else {
- f += 16.0f * msgCtx->unk12098 * 5.0f;
+ f += 16.0f * msgCtx->textCharScale * 5.0f;
}
*decodedBufPos = p;
@@ -201,7 +180,7 @@ void Message_LoadRupeesNES(PlayState* play, s16* decodedBufPos, s32* offset, f32
*arg3 = f;
}
-void Message_LoadTimeNES(PlayState* play, u8 arg1, s32* offset, f32* arg3, s16* decodedBufPos) {
+void Message_LoadTimeNES(PlayState* play, u8 curChar, s32* offset, f32* arg3, s16* decodedBufPos) {
MessageContext* msgCtx = &play->msgCtx;
s16 p = *decodedBufPos;
s32 o = *offset;
@@ -211,12 +190,11 @@ void Message_LoadTimeNES(PlayState* play, u8 arg1, s32* offset, f32* arg3, s16*
f32 timeLeftInMinutes;
s16 i;
- if (arg1 == 0xCF) {
+ if (curChar == 0xCF) {
timeLeft = TIME_UNTIL_MOON_CRASH;
} else {
timeLeft = TIME_UNTIL_NEW_DAY;
}
-
timeLeftInMinutes = TIME_TO_MINUTES_F(timeLeft);
digits[0] = 0;
@@ -246,12 +224,52 @@ void Message_LoadTimeNES(PlayState* play, u8 arg1, s32* offset, f32* arg3, s16*
}
}
- f += 5.0f * (16.0f * msgCtx->unk12098);
+ f += 5.0f * (16.0f * msgCtx->textCharScale);
*decodedBufPos = p - 1;
*offset = o;
*arg3 = f;
}
+#define GREAT_BAY_COAST_STR "Great Bay Coast"
+#define ZORA_CAPE_STR "Zora Cape"
+#define SNOWHEAD_STR "Snowhead"
+#define MOUNTAIN_VILLAGE_STR "Mountain Village"
+#define CLOCK_TOWN_STR "Clock Town"
+#define MILK_ROAD_STR "Milk Road"
+#define WOODFALL_STR "Woodfall"
+#define SOUTHERN_SWAMP_STR "Southern Swamp"
+#define IKANA_CANYON_STR "Ikana Canyon"
+#define STONE_TOWER_STR "Stone Tower"
+#define ENTRANCE_STR "Entrance"
+
+char sOwlWarpTextENG[OWL_WARP_MAX][16] = {
+ GREAT_BAY_COAST_STR, // OWL_WARP_GREAT_BAY_COAST
+ ZORA_CAPE_STR, // OWL_WARP_ZORA_CAPE
+ SNOWHEAD_STR, // OWL_WARP_SNOWHEAD
+ MOUNTAIN_VILLAGE_STR, // OWL_WARP_MOUNTAIN_VILLAGE
+ CLOCK_TOWN_STR, // OWL_WARP_CLOCK_TOWN
+ MILK_ROAD_STR, // OWL_WARP_MILK_ROAD
+ WOODFALL_STR, // OWL_WARP_WOODFALL
+ SOUTHERN_SWAMP_STR, // OWL_WARP_SOUTHERN_SWAMP
+ IKANA_CANYON_STR, // OWL_WARP_IKANA_CANYON
+ STONE_TOWER_STR, // OWL_WARP_STONE_TOWER
+ ENTRANCE_STR, // OWL_WARP_ENTRANCE
+};
+
+s16 sOwlWarpTextLengthENG[OWL_WARP_MAX] = {
+ sizeof(GREAT_BAY_COAST_STR) - 1, // OWL_WARP_GREAT_BAY_COAST
+ sizeof(ZORA_CAPE_STR) - 1, // OWL_WARP_ZORA_CAPE
+ sizeof(SNOWHEAD_STR) - 1, // OWL_WARP_SNOWHEAD
+ sizeof(MOUNTAIN_VILLAGE_STR) - 1, // OWL_WARP_MOUNTAIN_VILLAGE
+ sizeof(CLOCK_TOWN_STR) - 1, // OWL_WARP_CLOCK_TOWN
+ sizeof(MILK_ROAD_STR) - 1, // OWL_WARP_MILK_ROAD
+ sizeof(WOODFALL_STR) - 1, // OWL_WARP_WOODFALL
+ sizeof(SOUTHERN_SWAMP_STR) - 1, // OWL_WARP_SOUTHERN_SWAMP
+ sizeof(IKANA_CANYON_STR) - 1, // OWL_WARP_IKANA_CANYON
+ sizeof(STONE_TOWER_STR) - 1, // OWL_WARP_STONE_TOWER
+ sizeof(ENTRANCE_STR) - 1, // OWL_WARP_ENTRANCE
+};
+
void Message_LoadOwlWarpTextNES(PlayState* play, s32* offset, f32* arg2, s16* decodedBufPos) {
MessageContext* msgCtx = &play->msgCtx;
s16 p = *decodedBufPos;
@@ -267,29 +285,1606 @@ void Message_LoadOwlWarpTextNES(PlayState* play, s32* offset, f32* arg2, s16* de
} else {
owlWarpId = play->pauseCtx.cursorPoint[PAUSE_WORLD_MAP];
}
- stringLimit = D_801D07C4[owlWarpId];
+ stringLimit = sOwlWarpTextLengthENG[owlWarpId];
for (i = 0; i < stringLimit; i++) {
- msgCtx->decodedBuffer.schar[p] = D_801D0714[owlWarpId][i];
+ msgCtx->decodedBuffer.schar[p] = sOwlWarpTextENG[owlWarpId][i];
currentChar = msgCtx->decodedBuffer.schar[p];
if (currentChar != ' ') {
- Font_LoadCharNES(play, D_801D0714[owlWarpId][i], o);
+ Font_LoadCharNES(play, sOwlWarpTextENG[owlWarpId][i], o);
o += FONT_CHAR_TEX_SIZE;
}
currentChar = msgCtx->decodedBuffer.schar[p];
p++;
- f += (D_801D0470[currentChar - ' '] * msgCtx->unk12098);
+ f += (sNESFontWidths[currentChar - ' '] * msgCtx->textCharScale);
}
p--;
- f += (stringLimit - 1) * (16.0f * msgCtx->unk12098);
+ f += (stringLimit - 1) * (16.0f * msgCtx->textCharScale);
*decodedBufPos = p;
*offset = o;
*arg2 = f;
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message_nes/func_80159438.s")
+void Message_GetTimerDigitsNES(OSTime time, s16* digits) {
+ OSTime t = time;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message_nes/func_8015966C.s")
+ // 6 minutes
+ digits[0] = t / SECONDS_TO_TIMER(360);
+ t -= (digits[0] * SECONDS_TO_TIMER(360));
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message_nes/func_8015B198.s")
+ // minutes
+ digits[1] = t / SECONDS_TO_TIMER(60);
+ t -= (digits[1] * SECONDS_TO_TIMER(60));
+
+ digits[2] = '\'';
+
+ // 10 seconds
+ digits[3] = t / SECONDS_TO_TIMER(10);
+ t -= digits[3] * SECONDS_TO_TIMER(10);
+
+ // seconds
+ digits[4] = t / SECONDS_TO_TIMER(1);
+ t -= digits[4] * SECONDS_TO_TIMER(1);
+
+ digits[5] = '"';
+
+ // 100 milliseconds
+ digits[6] = t / SECONDS_TO_TIMER_PRECISE(0, 10);
+ t -= digits[6] * SECONDS_TO_TIMER_PRECISE(0, 10);
+
+ // 10 milliseconds
+ digits[7] = t;
+
+ digits[0] += '0';
+ digits[1] += '0';
+ digits[3] += '0';
+ digits[4] += '0';
+ digits[6] += '0';
+ digits[7] += '0';
+}
+
+Color_RGB16 D_801D07DC[] = {
+ { 255, 120, 0 }, { 70, 255, 80 }, { 80, 110, 255 }, { 255, 255, 30 },
+ { 90, 180, 255 }, { 210, 100, 255 }, { 170, 170, 170 }, { 255, 130, 30 },
+};
+
+Color_RGB16 D_801D080C[] = {
+ { 255, 60, 60 }, { 70, 255, 80 }, { 80, 90, 255 }, { 255, 255, 50 },
+ { 80, 150, 255 }, { 255, 150, 180 }, { 170, 170, 170 }, { 255, 130, 30 },
+};
+
+Color_RGB16 D_801D083C[] = {
+ { 255, 60, 60 }, { 70, 255, 80 }, { 80, 90, 255 }, { 255, 255, 50 },
+ { 80, 150, 255 }, { 255, 150, 180 }, { 180, 180, 200 }, { 255, 130, 30 },
+};
+
+Color_RGB16 D_801D086C[] = {
+ { 195, 0, 0 }, { 70, 255, 80 }, { 80, 90, 255 }, { 255, 255, 50 },
+ { 80, 150, 255 }, { 255, 150, 180 }, { 170, 170, 170 }, { 255, 130, 30 },
+};
+
+Color_RGB16 D_801D089C[] = {
+ { 255, 60, 60 }, { 110, 170, 255 }, { 80, 90, 255 }, { 255, 255, 50 },
+ { 80, 150, 255 }, { 255, 150, 180 }, { 170, 170, 170 }, { 255, 130, 30 },
+};
+
+u8 D_801D08CC[] = {
+ 0x02, 0x01, 0x03, 0x06, 0x06, 0x06, 0x03, 0x03, 0x03, 0x03, 0x01, 0x06,
+};
+
+void Message_DrawTextNES(PlayState* play, Gfx** gfxP, u16 textDrawPos) {
+ MessageContext* msgCtx = &play->msgCtx;
+ u16 i;
+ u16 j;
+ Font* font = &msgCtx->font;
+ u16 charTexIndex;
+ u16 stateTimerHi;
+ Gfx* gfx = *gfxP;
+ u16 character;
+ s16 sp130;
+ s16 sp12E;
+ s16 sp12C;
+ s16 sp12A;
+
+ msgCtx->textPosX = msgCtx->unk11F1A[0] + msgCtx->unk11FF8;
+ msgCtx->textPosY = msgCtx->unk11FFA;
+
+ sp130 = 0;
+ if (!msgCtx->textIsCredits) {
+ msgCtx->textPosY = msgCtx->unk11FFA;
+ } else {
+ msgCtx->textPosY = 48;
+ }
+
+ if (msgCtx->itemId != 0xFE) {
+ Message_DrawItemIcon(play, &gfx);
+ }
+
+ msgCtx->textColorR = msgCtx->unk120C8;
+ msgCtx->textColorG = msgCtx->unk120CA;
+ msgCtx->textColorB = msgCtx->unk120CC;
+
+ charTexIndex = 0;
+
+ for (i = textDrawPos; i < msgCtx->textDrawPos; i++) {
+ character = msgCtx->decodedBuffer.schar[i];
+
+ switch (character) {
+ case 0x0:
+ if (play->pauseCtx.bombersNotebookOpen || (msgCtx->textBoxType == TEXTBOX_TYPE_D)) {
+ msgCtx->textColorR = msgCtx->textColorG = msgCtx->textColorB = 0;
+ } else if (msgCtx->textBoxType == TEXTBOX_TYPE_5) {
+ msgCtx->textColorR = msgCtx->textColorG = msgCtx->textColorB = 0;
+ } else {
+ msgCtx->textColorR = msgCtx->textColorG = msgCtx->textColorB = 255;
+ }
+
+ if ((i + 1) == msgCtx->textDrawPos) {
+ msgCtx->textDrawPos++;
+ }
+ break;
+
+ case 0x1:
+ case 0x2:
+ case 0x3:
+ case 0x4:
+ case 0x5:
+ case 0x6:
+ case 0x7:
+ case 0x8:
+ if ((msgCtx->msgMode >= MSGMODE_NEW_CYCLE_0) && (msgCtx->msgMode <= MSGMODE_OWL_SAVE_2) &&
+ (character == 0x2)) {
+ msgCtx->textDrawPos = msgCtx->decodedTextLen;
+ if (msgCtx->unk120D6) {
+ msgCtx->unk120D4 += 25;
+ if (msgCtx->unk120D4 >= 100) {
+ msgCtx->unk120D6 = false;
+ }
+ } else {
+ msgCtx->unk120D4 -= 25;
+ if (msgCtx->unk120D4 <= -100) {
+ msgCtx->unk120D6 = true;
+ }
+ }
+
+ if (D_801D07DC[(s16)(character - 1)].r + msgCtx->unk120D4 < 0) {
+ msgCtx->textColorR = 0;
+ } else {
+ msgCtx->textColorR = D_801D07DC[(s16)(character - 1)].r + msgCtx->unk120D4;
+ }
+
+ if (D_801D07DC[(s16)(character - 1)].g + msgCtx->unk120D4 >= 255) {
+ msgCtx->textColorG = D_801D07DC[(s16)(character - 1)].g;
+ } else {
+ msgCtx->textColorG = D_801D07DC[(s16)(character - 1)].g + msgCtx->unk120D4;
+ }
+
+ if (D_801D07DC[(s16)(character - 1)].b + msgCtx->unk120D4 < 0) {
+ msgCtx->textColorB = 0;
+ } else {
+ msgCtx->textColorB = D_801D07DC[(s16)(character - 1)].b + msgCtx->unk120D4;
+ }
+
+ } else if (play->pauseCtx.bombersNotebookOpen) {
+ msgCtx->textColorR = D_801D089C[(s16)(character - 1)].r;
+ msgCtx->textColorG = D_801D089C[(s16)(character - 1)].g;
+ msgCtx->textColorB = D_801D089C[(s16)(character - 1)].b;
+ } else if (msgCtx->textBoxType == TEXTBOX_TYPE_1) {
+ msgCtx->textColorR = D_801D07DC[(s16)(character - 1)].r;
+ msgCtx->textColorG = D_801D07DC[(s16)(character - 1)].g;
+ msgCtx->textColorB = D_801D07DC[(s16)(character - 1)].b;
+ } else if (msgCtx->textBoxType == TEXTBOX_TYPE_D) {
+ msgCtx->textColorR = D_801D086C[(s16)(character - 1)].r;
+ msgCtx->textColorG = D_801D086C[(s16)(character - 1)].g;
+ msgCtx->textColorB = D_801D086C[(s16)(character - 1)].b;
+ } else {
+ msgCtx->textColorR = D_801D080C[(s16)(character - 1)].r;
+ msgCtx->textColorG = D_801D080C[(s16)(character - 1)].g;
+ msgCtx->textColorB = D_801D080C[(s16)(character - 1)].b;
+ }
+
+ if ((i + 1) == msgCtx->textDrawPos) {
+ msgCtx->textDrawPos++;
+ }
+ break;
+
+ case 0x20: // ` `
+ msgCtx->textPosX += 6;
+ break;
+
+ case 0x11:
+ msgCtx->textPosY += msgCtx->unk11FFC;
+ // fallthrough
+ case 0x13:
+ sp130++;
+
+ msgCtx->textPosX = msgCtx->unk11F1A[sp130] + msgCtx->unk11FF8;
+ if (msgCtx->choiceNum == 1) {
+ if (!play->pauseCtx.bombersNotebookOpen) {
+ msgCtx->textPosX += 16;
+ } else {
+ msgCtx->textPosX += 50;
+ }
+ } else if (msgCtx->choiceNum == 2) {
+ if (msgCtx->unk120D8 != 3) {
+ if (!play->pauseCtx.bombersNotebookOpen) {
+ msgCtx->textPosX += 10;
+ } else {
+ msgCtx->textPosX += 57;
+ }
+ } else if (sp130 >= 2) {
+ if (!play->pauseCtx.bombersNotebookOpen) {
+ msgCtx->textPosX += 10;
+ } else {
+ msgCtx->textPosX += 57;
+ }
+ }
+ }
+ continue;
+
+ case 0x10:
+ case 0x12:
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ if (!msgCtx->textboxSkipped) {
+ Audio_PlaySfx(NA_SE_NONE);
+ msgCtx->msgMode = MSGMODE_TEXT_AWAIT_NEXT;
+ Font_LoadMessageBoxEndIcon(font, 0);
+ } else {
+ msgCtx->msgMode = MSGMODE_TEXT_NEXT_MSG;
+ msgCtx->textUnskippable = false;
+ msgCtx->msgBufPos++;
+ }
+ msgCtx->unk120CE = msgCtx->textColorR;
+ msgCtx->unk120D0 = msgCtx->textColorG;
+ msgCtx->unk120D2 = msgCtx->textColorB;
+ }
+ *gfxP = gfx;
+ return;
+
+ case 0x17: // MESSAGE_QUICKTEXT_ENABLE
+ if ((i + 1) == msgCtx->textDrawPos) {
+ j = i;
+ if ((msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) ||
+ ((msgCtx->msgMode >= MSGMODE_OCARINA_STARTING) && (msgCtx->msgMode <= MSGMODE_26))) {
+ //! FAKE:
+ dummy:;
+ while (true) {
+ if ((msgCtx->decodedBuffer.schar[j] != 0x18) && (msgCtx->decodedBuffer.schar[j] != 0x1A) &&
+ (msgCtx->decodedBuffer.schar[j] != 0x19) && (msgCtx->decodedBuffer.schar[j] != 0xE0) &&
+ (msgCtx->decodedBuffer.schar[j] != 0x10) && (msgCtx->decodedBuffer.schar[j] != 0x12)) {
+ j++;
+ continue;
+ }
+ break;
+ }
+ i = j - 1;
+ msgCtx->textDrawPos = i + 1;
+ }
+ }
+ break;
+
+ case 0x18: // MESSAGE_QUICKTEXT_DISABLE
+ break;
+
+ case 0x1B: // MESSAGE_BOX_BREAK_DELAYED
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ stateTimerHi = msgCtx->decodedBuffer.schar[++i] << 8;
+ stateTimerHi |= msgCtx->decodedBuffer.schar[++i];
+ msgCtx->stateTimer = stateTimerHi;
+ msgCtx->msgMode = MSGMODE_TEXT_DELAYED_BREAK;
+ }
+ *gfxP = gfx;
+ return;
+
+ case 0x1C:
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ msgCtx->msgMode = MSGMODE_TEXT_DONE;
+ if (msgCtx->unk11F0C == 3) {
+ msgCtx->textboxEndType = 0x55;
+ } else {
+ msgCtx->textboxEndType = 0x50;
+ }
+ stateTimerHi = msgCtx->decodedBuffer.schar[++i] << 8;
+ stateTimerHi |= msgCtx->decodedBuffer.schar[++i];
+ msgCtx->stateTimer = stateTimerHi;
+ Font_LoadMessageBoxEndIcon(font, 1);
+ if (play->csCtx.state == CS_STATE_IDLE) {
+ func_8011552C(play, DO_ACTION_RETURN);
+ }
+ }
+ *gfxP = gfx;
+ return;
+
+ case 0x1D:
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ msgCtx->msgMode = MSGMODE_TEXT_DONE;
+ msgCtx->textboxEndType = 0x52;
+ stateTimerHi = msgCtx->decodedBuffer.schar[++i] << 8;
+ stateTimerHi |= msgCtx->decodedBuffer.schar[++i];
+ msgCtx->stateTimer = stateTimerHi;
+ Font_LoadMessageBoxEndIcon(font, 1);
+ if (play->csCtx.state == CS_STATE_IDLE) {
+ func_8011552C(play, DO_ACTION_RETURN);
+ }
+ }
+ *gfxP = gfx;
+ return;
+
+ case 0x1E: // MESSAGE_SFX
+ if (((i + 1) == msgCtx->textDrawPos) && (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING)) {
+ stateTimerHi = msgCtx->decodedBuffer.schar[i + 1] << 8;
+ stateTimerHi |= msgCtx->decodedBuffer.schar[i + 2];
+ Audio_PlaySfx(stateTimerHi);
+ }
+ if ((i + 1) == msgCtx->textDrawPos) {
+ msgCtx->textDrawPos += 2;
+ }
+ i += 2;
+ break;
+
+ case 0x1F:
+ if (((i + 1) == msgCtx->textDrawPos) && (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING)) {
+ msgCtx->msgMode = MSGMODE_9;
+ stateTimerHi = msgCtx->decodedBuffer.schar[i + 1] << 8;
+ stateTimerHi |= msgCtx->decodedBuffer.schar[i + 2];
+ msgCtx->textDelayTimer = stateTimerHi;
+ }
+ i += 2;
+ break;
+
+ case 0xA:
+ i++;
+ character = msgCtx->decodedBuffer.schar[i];
+ switch (character) {
+ case 0x0:
+ case 0x1:
+ case 0x2:
+ case 0x3:
+ case 0x4:
+ case 0x5:
+ case 0x6:
+ msgCtx->textDelay = character - 0x0;
+ if ((i + 1) == msgCtx->textDrawPos) {
+ msgCtx->textDrawPos++;
+ }
+ break;
+ }
+ break;
+
+ case 0xC1: // MESSAGE_BACKGROUND
+ msgCtx->textPosX = 0x2D;
+
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ Audio_PlaySfx(NA_SE_NONE);
+ }
+
+ gDPPipeSync(gfx++);
+ gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, msgCtx->textColorAlpha);
+ gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1000, G_IM_FMT_I, 96, 48, 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++, msgCtx->textPosX << 2, (msgCtx->unk12012 + 1) << 2,
+ (msgCtx->textPosX + 0x60) << 2, (msgCtx->unk12012 + 0x31) << 2, G_TX_RENDERTILE, 0,
+ 0, 1 << 10, 1 << 10);
+ gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1900, G_IM_FMT_I, 96, 48, 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++, (msgCtx->textPosX + 0x60) << 2, (msgCtx->unk12012 + 1) << 2,
+ (msgCtx->textPosX + 0xC1) << 2, (msgCtx->unk12012 + 0x31) << 2, G_TX_RENDERTILE, 0,
+ 0, 1 << 10, 1 << 10);
+
+ gDPPipeSync(gfx++);
+ gDPSetPrimColor(gfx++, 0, 0, 255, 60, 0, msgCtx->textColorAlpha);
+ gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1000, G_IM_FMT_I, 96, 48, 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++, msgCtx->textPosX << 2, msgCtx->unk12012 << 2, (msgCtx->textPosX + 0x60) << 2,
+ (msgCtx->unk12012 + 0x30) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
+ gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1900, G_IM_FMT_I, 96, 48, 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++, (msgCtx->textPosX + 0x60) << 2, msgCtx->unk12012 << 2,
+ (msgCtx->textPosX + 0xC0) << 2, (msgCtx->unk12012 + 0x30) << 2, G_TX_RENDERTILE, 0,
+ 0, 1 << 10, 1 << 10);
+
+ gDPPipeSync(gfx++);
+ gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0,
+ PRIMITIVE, 0);
+
+ msgCtx->textPosX += 32;
+ break;
+
+ case 0xC2:
+ msgCtx->textboxEndType = 0x10;
+
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ msgCtx->choiceTextId = msgCtx->currentTextId;
+ msgCtx->stateTimer = 4;
+ Font_LoadMessageBoxEndIcon(font, 2);
+ if (msgCtx->unk120D8 != 3) {
+ msgCtx->unk11FFE[0] = (s16)(msgCtx->textboxYTarget + 0xE);
+ msgCtx->unk11FFE[1] = (s16)(msgCtx->textboxYTarget + 0x1A);
+ msgCtx->unk11FFE[2] = (s16)(msgCtx->textboxYTarget + 0x26);
+ }
+ }
+ break;
+
+ case 0xC3:
+ msgCtx->textboxEndType = 0x11;
+
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ msgCtx->choiceTextId = msgCtx->currentTextId;
+ msgCtx->stateTimer = 4;
+ Font_LoadMessageBoxEndIcon(font, 2);
+ if (msgCtx->unk120D8 != 3) {
+ msgCtx->unk11FFE[0] = (s16)(msgCtx->textboxYTarget + 0xE);
+ msgCtx->unk11FFE[1] = (s16)(msgCtx->textboxYTarget + 0x1A);
+ msgCtx->unk11FFE[2] = (s16)(msgCtx->textboxYTarget + 0x26);
+ }
+ }
+ break;
+
+ case 0xCC:
+ msgCtx->textboxEndType = 0x60;
+
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ Font_LoadMessageBoxEndIcon(font, 1);
+ }
+ break;
+
+ case 0xD0:
+ msgCtx->textboxEndType = 0x61;
+
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ Font_LoadMessageBoxEndIcon(font, 1);
+ }
+ break;
+
+ case 0xD1:
+ msgCtx->textboxEndType = 0x62;
+
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ Font_LoadMessageBoxEndIcon(font, 1);
+ }
+ break;
+
+ case 0xD2:
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ msgCtx->msgMode = MSGMODE_TEXT_DONE;
+ msgCtx->textboxEndType = 0x41;
+ Font_LoadMessageBoxEndIcon(font, 0);
+ Audio_PlaySfx(NA_SE_SY_MESSAGE_END);
+ }
+ break;
+
+ case 0xD5:
+ msgCtx->textboxEndType = 0x63;
+
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ Font_LoadMessageBoxEndIcon(font, 1);
+ }
+ break;
+
+ case 0x15:
+ case 0xBF:
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ if (msgCtx->textBoxType == TEXTBOX_TYPE_3) {
+ Message_HandleOcarina(play);
+ *gfxP = gfx;
+ return;
+ }
+
+ msgCtx->msgMode = MSGMODE_TEXT_DONE;
+ if (msgCtx->textboxEndType == 0) {
+ Audio_PlaySfx(NA_SE_SY_MESSAGE_END);
+ if (character == 0xBF) {
+ Font_LoadMessageBoxEndIcon(font, 1);
+ } else {
+ Font_LoadMessageBoxEndIcon(font, 0);
+ }
+ if (play->csCtx.state == CS_STATE_IDLE) {
+ func_8011552C(play, DO_ACTION_RETURN);
+ }
+ } else {
+ Audio_PlaySfx(NA_SE_NONE);
+ }
+ }
+ *gfxP = gfx;
+ return;
+
+ case 0x1A:
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ Audio_PlaySfx(NA_SE_NONE);
+ msgCtx->msgMode = MSGMODE_TEXT_DONE;
+ msgCtx->textboxEndType = 0x30;
+ }
+ *gfxP = gfx;
+ return;
+
+ case 0x19:
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ msgCtx->msgMode = MSGMODE_TEXT_DONE;
+ msgCtx->textboxEndType = 0x40;
+ Font_LoadMessageBoxEndIcon(font, 0);
+ Audio_PlaySfx(NA_SE_SY_MESSAGE_END);
+ }
+ *gfxP = gfx;
+ return;
+
+ case 0xE0:
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ msgCtx->msgMode = MSGMODE_TEXT_DONE;
+ msgCtx->textboxEndType = 0x42;
+ Font_LoadMessageBoxEndIcon(font, 1);
+ Audio_PlaySfx(NA_SE_SY_MESSAGE_END);
+ }
+ *gfxP = gfx;
+ return;
+
+ default:
+ switch (character) {
+ case 0x8169:
+ case 0x8175:
+ msgCtx->textPosX -= (s16)(6.0f * msgCtx->textCharScale);
+ break;
+
+ case 0x8145:
+ msgCtx->textPosX -= (s16)(3.0f * msgCtx->textCharScale);
+ break;
+
+ case 0x8148:
+ case 0x8149:
+ msgCtx->textPosX -= (s16)(2.0f * msgCtx->textCharScale);
+ break;
+
+ default:
+ break;
+ }
+ if ((msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) && ((i + 1) == msgCtx->textDrawPos)) {
+ Audio_PlaySfx(NA_SE_NONE);
+ }
+ if ((character >= 0xB0) && (character <= 0xBB)) {
+ sp12E = msgCtx->textColorR;
+ sp12C = msgCtx->textColorG;
+ sp12A = msgCtx->textColorB;
+ msgCtx->textColorR = D_801D083C[(s16)D_801D08CC[character - 0xB0]].r;
+ msgCtx->textColorG = D_801D083C[(s16)D_801D08CC[character - 0xB0]].g;
+ msgCtx->textColorB = D_801D083C[(s16)D_801D08CC[character - 0xB0]].b;
+ Message_DrawTextChar(play, &font->charBuf[font->unk_11D88][charTexIndex], &gfx);
+ msgCtx->textColorR = sp12E;
+ msgCtx->textColorG = sp12C;
+ msgCtx->textColorB = sp12A;
+ } else if (msgCtx->msgMode >= MSGMODE_OWL_SAVE_0) {
+ if ((i < (msgCtx->decodedTextLen - 6)) || (i >= (msgCtx->decodedTextLen - 4))) {
+ Message_DrawTextChar(play, &font->charBuf[font->unk_11D88][charTexIndex], &gfx);
+ }
+ } else {
+ Message_DrawTextChar(play, &font->charBuf[font->unk_11D88][charTexIndex], &gfx);
+ }
+ charTexIndex += FONT_CHAR_TEX_SIZE;
+
+ //! @TODO: u8 character but > 0x255 cases
+ switch (character) {
+ case 0x8144:
+ msgCtx->textPosX += (s16)(8.0f * msgCtx->textCharScale);
+ break;
+
+ case 0x816A:
+ case 0x8176:
+ msgCtx->textPosX += (s16)(10.0f * msgCtx->textCharScale);
+ break;
+
+ case 0x8141:
+ case 0x8142:
+ case 0x8168:
+ msgCtx->textPosX += (s16)(12.0f * msgCtx->textCharScale);
+ break;
+
+ case 0x8194:
+ msgCtx->textPosX += (s16)(14.0f * msgCtx->textCharScale);
+ break;
+
+ case 0x8145:
+ msgCtx->textPosX += (s16)(15.0f * msgCtx->textCharScale);
+ break;
+
+ default:
+ if (((msgCtx->textboxEndType == 0x62) && (i >= msgCtx->unk120C0) &&
+ ((msgCtx->unk120C0 + 4) >= i)) ||
+ ((msgCtx->textboxEndType == 0x63) && (i >= msgCtx->unk120C0) &&
+ ((msgCtx->unk120C0 + 2) >= i)) ||
+ ((msgCtx->textboxEndType == 0x60) && (i >= msgCtx->unk120C0) &&
+ ((msgCtx->unk120C0 + 2) >= i)) ||
+ ((msgCtx->textboxEndType == 0x61) && (i >= msgCtx->unk120C0) &&
+ ((msgCtx->unk120C0 + 1) >= i))) {
+ msgCtx->textPosX += (s32)(16.0f * msgCtx->textCharScale);
+ } else {
+ msgCtx->textPosX += (s32)(sNESFontWidths[character - ' '] * msgCtx->textCharScale);
+ }
+ break;
+ }
+ break;
+ }
+ }
+
+ if (msgCtx->textDelayTimer == 0) {
+ msgCtx->textDrawPos = i + 1;
+ msgCtx->textDelayTimer = 0;
+ if (msgCtx->msgMode == MSGMODE_9) {
+ msgCtx->msgMode = MSGMODE_TEXT_DISPLAYING;
+ }
+ } else {
+ msgCtx->textDelayTimer--;
+ }
+
+ *gfxP = gfx;
+}
+
+char D_801D08D8[][4] = {
+ "Fast",
+ "----",
+ "Slow",
+};
+
+u8 D_801D08E4[] = {
+ 0x01,
+ 0x03,
+ 0x04,
+ 0x02,
+};
+
+#define RED_STR "RED"
+#define BLUE_STR "BLUE"
+#define YELLOW_STR "YELLOW"
+#define GREEN_STR "GREEN"
+
+char sMaskCodeTextENG[][6] = {
+ RED_STR,
+ BLUE_STR,
+ YELLOW_STR,
+ GREEN_STR,
+};
+
+u8 sMaskCodeTextLengthENG[] = {
+ sizeof(RED_STR) - 1,
+ sizeof(BLUE_STR) - 1,
+ sizeof(YELLOW_STR) - 1,
+ sizeof(GREEN_STR) - 1,
+};
+
+#ifdef NON_MATCHING
+// https://decomp.me/scratch/w2ckG
+void Message_DecodeNES(PlayState* play) {
+ f32 var_fs0;
+ MessageContext* msgCtx = &play->msgCtx;
+ u8* ptr;
+ Font* font = &msgCtx->font; // spE0
+ Player* player; // spDC
+ s16 decodedBufPos; // spDA
+ s16 value;
+ u32 timeToMoonCrash;
+ s16 i; // s1
+ s16 spD0; // numLines
+ s16 digits[4]; // spC8/CA/CC/CE
+ s16 spC6;
+ f32 timeInSeconds;
+ s32 charTexIdx; // spBC
+ s16 loadChar;
+ s16 spA8[8];
+ f32 spA4;
+ s16 playerNameLen; // s0
+ s16 var_v1_3;
+ u8 curChar; // sp78
+ s8 charOffset;
+ s16 temp_s2_2;
+ s16 var_s2_9;
+
+ player = GET_PLAYER(play);
+ decodedBufPos = 0;
+ spC6 = 0;
+ charTexIdx = 0;
+ spD0 = 0;
+ msgCtx->textDelayTimer = 0;
+ msgCtx->textDelay = msgCtx->textDelayTimer;
+ msgCtx->textFade = 0;
+ spA4 = 0.0f;
+ font->unk_11D88 = (font->unk_11D88 ^ 1) & 1;
+ Message_SetupLoadItemIcon(play);
+
+ while (true) {
+ curChar = font->msgBuf.schar[msgCtx->msgBufPos];
+ msgCtx->decodedBuffer.schar[decodedBufPos] = font->msgBuf.schar[msgCtx->msgBufPos];
+
+ if ((curChar == 0x10) || (curChar == 0x12) || (curChar == 0x1B) || (curChar == 0x1C) || (curChar == 0x1D) ||
+ (curChar == 0x19) || (curChar == 0xE0) || (curChar == 0xBF) || (curChar == 0x15) || (curChar == 0x1A)) {
+ msgCtx->msgMode = MSGMODE_TEXT_DISPLAYING;
+ msgCtx->textDrawPos = 1;
+ if (msgCtx->textBoxType == TEXTBOX_TYPE_3) {
+ msgCtx->unk11FFA = msgCtx->textboxY + 2;
+ } else {
+ msgCtx->unk11FFA = msgCtx->textboxY + 8;
+ }
+ msgCtx->unk11F1A[spC6] = 0;
+ if (msgCtx->unk11F18 != 0) {
+ msgCtx->unk11F1A[spC6] = (s16)((msgCtx->textCharScale * 16.0f * 16.0f) - spA4) / 2;
+ }
+ spA4 = 0.0f;
+ if (curChar == 0x12) {
+ if ((msgCtx->textBoxType != TEXTBOX_TYPE_3) && (msgCtx->textBoxType != TEXTBOX_TYPE_4)) {
+ if (spD0 < 2) {
+ msgCtx->unk11FFA = msgCtx->textboxY + XREG(10);
+ } else if (spD0 == 2) {
+ msgCtx->unk11FFA = msgCtx->textboxY + XREG(11);
+ } else if (spD0 == 3) {
+ msgCtx->unk11FFA = msgCtx->textboxY + XREG(12);
+ }
+ }
+ } else {
+ if ((msgCtx->textBoxType != TEXTBOX_TYPE_3) && (msgCtx->textBoxType != TEXTBOX_TYPE_4)) {
+ if (spD0 == 0) {
+ msgCtx->unk11FFA = msgCtx->textboxY + XREG(13) + XREG(10);
+ } else if (spD0 == 1) {
+ msgCtx->unk11FFA = msgCtx->textboxY + XREG(13) + XREG(11);
+ } else if (spD0 == 2) {
+ msgCtx->unk11FFA = msgCtx->textboxY + XREG(13) + XREG(12);
+ }
+ }
+ }
+
+ //! FAKE: Perhaps a locally required temp for scoping
+ dummy:;
+ if ((curChar == 0x1B) || (curChar == 0x1C) || (curChar == 0x1D)) {
+ //! FAKE: & 0xFFFF to fix regalloc
+ msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[msgCtx->msgBufPos + 1] & 0xFFFF;
+ msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[msgCtx->msgBufPos + 2];
+ msgCtx->msgBufPos += 3;
+ }
+ msgCtx->decodedTextLen = decodedBufPos;
+ msgCtx->unk120D8 = spD0;
+ if (msgCtx->textboxSkipped || (msgCtx->textBoxType == TEXTBOX_TYPE_1) ||
+ (msgCtx->textBoxType == TEXTBOX_TYPE_3) || (msgCtx->textBoxType == TEXTBOX_TYPE_6) ||
+ (msgCtx->textBoxType == TEXTBOX_TYPE_8) || (msgCtx->textBoxType == TEXTBOX_TYPE_9) ||
+ (msgCtx->textBoxType == TEXTBOX_TYPE_B) || (msgCtx->unk11F0C == 3)) {
+ msgCtx->textDrawPos = msgCtx->decodedTextLen;
+ }
+ msgCtx->unk120C8 = msgCtx->unk120CE;
+ msgCtx->unk120CA = msgCtx->unk120D0;
+ msgCtx->unk120CC = msgCtx->unk120D2;
+ break;
+ } else if (curChar == 0x16) {
+ // Substitute the player name control character for the file's player name.
+ for (playerNameLen = ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); playerNameLen > 0;
+ playerNameLen--) {
+ if (gSaveContext.save.saveInfo.playerData.playerName[playerNameLen - 1] != 0x3E) {
+ break;
+ }
+ }
+
+ for (i = 0; i < playerNameLen; i++) {
+ curChar = gSaveContext.save.saveInfo.playerData.playerName[i];
+ if (curChar == 0x3E) {
+ curChar = ' ';
+ } else if (curChar == 0x40) {
+ curChar = '.';
+ } else if (curChar == 0x3F) {
+ curChar = '-';
+ } else if (curChar < 0xA) {
+ charOffset = curChar;
+ curChar = '0' + charOffset;
+ } else if (curChar < 0x24) {
+ charOffset = curChar;
+ curChar = 'A' - 10 + charOffset;
+ } else if (curChar < 0x3E) {
+ charOffset = curChar;
+ curChar = 'a' - 36 + charOffset;
+ }
+ if (curChar != ' ') {
+ Font_LoadCharNES(play, curChar, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ }
+ msgCtx->decodedBuffer.schar[decodedBufPos] = curChar;
+ decodedBufPos++;
+ }
+ decodedBufPos--;
+ } else if (curChar == 0xC1) {
+ //! TODO: + 0x900 on the first one?
+ DmaMgr_SendRequest0(msgCtx->textboxSegment + 0x1000, SEGMENT_ROM_START(message_texture_static), 0x900);
+ DmaMgr_SendRequest0(msgCtx->textboxSegment + 0x1900,
+ (uintptr_t)SEGMENT_ROM_START(message_texture_static) + 0x900, 0x900);
+ spD0 = 2;
+ spC6 = 2;
+ msgCtx->unk12012 = msgCtx->textboxY + 8;
+ msgCtx->unk11F18 = 1;
+ msgCtx->unk12010 = XREG(47);
+ } else if (curChar == 0xC2) {
+ msgCtx->unk11F18 = 0;
+ msgCtx->choiceNum = 2;
+ } else if (curChar == 0xC3) {
+ msgCtx->unk11F18 = 0;
+ msgCtx->choiceNum = 3;
+ msgCtx->unk11FF8 = msgCtx->unk11FF8 + 0x16;
+ } else if (curChar == 0xC4) {
+ Message_GetTimerDigitsNES(((void)0, gSaveContext.timerCurTimes[curChar - 0xC4]), spA8);
+
+ loadChar = false;
+ for (i = 0; i < 5; i++) {
+ if ((i == 1) || (spA8[i + 3] != '0')) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ Message_LoadCharNES(play, spA8[i + 3], &charTexIdx, &spA4, decodedBufPos);
+ decodedBufPos++;
+ }
+ }
+ decodedBufPos--;
+ } else if ((curChar == 0xC5) || (curChar == 0xC6) || (curChar == 0xC7) || (curChar == 0xC8) ||
+ (curChar == 0xC9)) {
+ Message_GetTimerDigitsNES(((void)0, gSaveContext.timerCurTimes[curChar - 0xC4]), spA8);
+
+ loadChar = false;
+ for (i = 0; i < 8; i++) {
+ if ((i == 4) || ((i != 2) && (i != 5) && (spA8[i] != '0'))) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ Message_LoadCharNES(play, spA8[i], &charTexIdx, &spA4, decodedBufPos);
+ decodedBufPos++;
+ }
+ }
+ decodedBufPos--;
+ } else if (curChar == 0xCA) {
+ digits[0] = 0;
+ timeInSeconds = TIME_TO_MINUTES_F(gSaveContext.save.time);
+
+ digits[1] = timeInSeconds / 60.0f;
+ while (digits[1] >= 10) {
+ digits[0]++;
+ digits[1] -= 10;
+ }
+
+ digits[2] = 0;
+ digits[3] = (s32)timeInSeconds % 60;
+ while (digits[3] >= 10) {
+ digits[2]++;
+ digits[3] -= 10;
+ }
+
+ for (i = 0; i < 4; i++) {
+ Font_LoadCharNES(play, digits[i] + '0', charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0';
+ decodedBufPos++;
+ if (i == 1) {
+ Font_LoadCharNES(play, '"', charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.schar[decodedBufPos] = 0x22;
+ decodedBufPos++;
+ } else if (i == 3) {
+ Font_LoadCharNES(play, 0x27, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.schar[decodedBufPos] = 0x27;
+ }
+ }
+ spA4 += 6 * (16.0f * msgCtx->textCharScale);
+ } else if (curChar == 0xCB) {
+ digits[0] = digits[1] = digits[2] = 0;
+ digits[3] = Flags_GetAllTreasure(play);
+
+ while (digits[3] >= 1000) {
+ digits[0]++;
+ digits[3] -= 1000;
+ }
+ while (digits[3] >= 100) {
+ digits[1]++;
+ digits[3] -= 100;
+ }
+ while (digits[3] >= 10) {
+ digits[2]++;
+ digits[3] -= 10;
+ }
+
+ loadChar = false;
+ for (i = 0; i < 4; i++) {
+ if ((i == 3) || (digits[i] != 0)) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ Font_LoadCharNES(play, digits[i] + '0', charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0';
+ decodedBufPos++;
+ spA4 += 16.0f * msgCtx->textCharScale;
+ }
+ }
+ decodedBufPos--;
+ } else if (curChar == 0xCC) {
+ decodedBufPos++;
+ msgCtx->unk120BE = spC6;
+ msgCtx->unk120C0 = decodedBufPos;
+ msgCtx->unk120C2 = 2;
+ msgCtx->bankRupeesSelected = 0;
+ msgCtx->unk120C4 = charTexIdx;
+ digits[0] = digits[1] = digits[2] = 0;
+
+ for (i = 0; i < 3; i++) {
+ Message_LoadCharNES(play, digits[i] + '0', &charTexIdx, &spA4, decodedBufPos);
+ decodedBufPos++;
+ }
+ Message_LoadLocalizedRupeesNES(play, &decodedBufPos, &charTexIdx, &spA4);
+ } else if (curChar == 0xCD) {
+ digits[0] = digits[1] = 0;
+ digits[2] = msgCtx->bankRupeesSelected;
+
+ while (digits[2] >= 100) {
+ digits[0]++;
+ digits[2] -= 100;
+ }
+
+ while (digits[2] >= 10) {
+ digits[1]++;
+ digits[2] -= 10;
+ }
+
+ loadChar = false;
+ for (i = 0; i < 3; i++) {
+ if ((i == 2) || (digits[i] != 0)) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ Message_LoadCharNES(play, digits[i] + '0', &charTexIdx, &spA4, decodedBufPos);
+ decodedBufPos++;
+ }
+ }
+ Message_LoadRupeesNES(play, &decodedBufPos, &charTexIdx, &spA4, msgCtx->bankRupeesSelected);
+ } else if (curChar == 0xCE) {
+ digits[0] = digits[1] = digits[2] = 0;
+ digits[3] = msgCtx->bankRupees;
+
+ while (digits[3] >= 1000) {
+ digits[0]++;
+ digits[3] -= 1000;
+ }
+ while (digits[3] >= 100) {
+ digits[1]++;
+ digits[3] -= 100;
+ }
+ while (digits[3] >= 10) {
+ digits[2]++;
+ digits[3] -= 10;
+ }
+
+ loadChar = false;
+ for (i = 0; i < 4; i++) {
+ if ((i == 3) || (digits[i] != 0)) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ Message_LoadCharNES(play, digits[i] + '0', &charTexIdx, &spA4, decodedBufPos);
+ decodedBufPos++;
+ }
+ }
+ Message_LoadRupeesNES(play, &decodedBufPos, &charTexIdx, &spA4, msgCtx->bankRupees);
+ } else if (curChar == 0xCF) {
+ Message_LoadTimeNES(play, curChar, &charTexIdx, &spA4, &decodedBufPos);
+ } else if (curChar == 0xC) {
+ digits[0] = digits[1] = 0;
+ digits[2] = gSaveContext.save.saveInfo.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex];
+
+ while (digits[2] >= 100) {
+ digits[0]++;
+ digits[2] -= 100;
+ }
+ while (digits[2] >= 10) {
+ digits[1]++;
+ digits[2] -= 10;
+ }
+
+ loadChar = false;
+ for (i = 0; i < 3; i++) {
+ if ((i == 2) || (digits[i] != 0)) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ Message_LoadCharNES(play, digits[i] + '0', &charTexIdx, &spA4, decodedBufPos);
+ decodedBufPos++;
+ }
+ }
+
+ if ((gSaveContext.save.saveInfo.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex] == 1) ||
+ (gSaveContext.save.saveInfo.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex] == 21)) {
+ Message_LoadCharNES(play, 's', &charTexIdx, &spA4, decodedBufPos);
+ decodedBufPos++;
+ Message_LoadCharNES(play, 't', &charTexIdx, &spA4, decodedBufPos);
+ } else if ((gSaveContext.save.saveInfo.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex] == 2) ||
+ (gSaveContext.save.saveInfo.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex] == 22)) {
+ Message_LoadCharNES(play, 'n', &charTexIdx, &spA4, decodedBufPos);
+ decodedBufPos++;
+ Message_LoadCharNES(play, 'd', &charTexIdx, &spA4, decodedBufPos);
+ } else if ((gSaveContext.save.saveInfo.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex] == 3) ||
+ (gSaveContext.save.saveInfo.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex] == 23)) {
+ Message_LoadCharNES(play, 'r', &charTexIdx, &spA4, decodedBufPos);
+ decodedBufPos++;
+ Message_LoadCharNES(play, 'd', &charTexIdx, &spA4, decodedBufPos);
+ } else {
+ Message_LoadCharNES(play, 't', &charTexIdx, &spA4, decodedBufPos);
+ decodedBufPos++;
+ Message_LoadCharNES(play, 'h', &charTexIdx, &spA4, decodedBufPos);
+ }
+ } else if (curChar == 0xD) {
+ digits[0] = digits[1] = 0;
+ digits[2] = Inventory_GetSkullTokenCount(play->sceneId);
+
+ while (digits[2] >= 100) {
+ digits[0]++;
+ digits[2] -= 100;
+ }
+ while (digits[2] >= 10) {
+ digits[1]++;
+ digits[2] -= 10;
+ }
+
+ loadChar = false;
+ for (i = 0; i < 3; i++) {
+ if ((i == 2) || (digits[i] != 0)) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ Message_LoadCharNES(play, digits[i] + '0', &charTexIdx, &spA4, decodedBufPos);
+ decodedBufPos++;
+ }
+ }
+
+ if ((Inventory_GetSkullTokenCount(play->sceneId) == 1) ||
+ (Inventory_GetSkullTokenCount(play->sceneId) == 21)) {
+ Message_LoadCharNES(play, 's', &charTexIdx, &spA4, decodedBufPos);
+ decodedBufPos++;
+ Message_LoadCharNES(play, 't', &charTexIdx, &spA4, decodedBufPos);
+ } else if ((Inventory_GetSkullTokenCount(play->sceneId) == 2) ||
+ (Inventory_GetSkullTokenCount(play->sceneId) == 22)) {
+ Message_LoadCharNES(play, 'n', &charTexIdx, &spA4, decodedBufPos);
+ decodedBufPos++;
+ Message_LoadCharNES(play, 'd', &charTexIdx, &spA4, decodedBufPos);
+ } else if ((Inventory_GetSkullTokenCount(play->sceneId) == 3) ||
+ (Inventory_GetSkullTokenCount(play->sceneId) == 23)) {
+ Message_LoadCharNES(play, 'r', &charTexIdx, &spA4, decodedBufPos);
+ decodedBufPos++;
+ Message_LoadCharNES(play, 'd', &charTexIdx, &spA4, decodedBufPos);
+ } else {
+ Message_LoadCharNES(play, 't', &charTexIdx, &spA4, decodedBufPos);
+ decodedBufPos++;
+ Message_LoadCharNES(play, 'h', &charTexIdx, &spA4, decodedBufPos);
+ }
+ } else if (curChar == 0xE) {
+ digits[0] = 0;
+ digits[1] = gSaveContext.minigameScore;
+
+ while (digits[1] >= 10) {
+ digits[0]++;
+ digits[1] -= 10;
+ }
+
+ for (i = 0; i < 2; i++) {
+ if ((i == 1) || (digits[i] != 0)) {
+ Message_LoadCharNES(play, digits[i] + '0', &charTexIdx, &spA4, decodedBufPos);
+ decodedBufPos++;
+ }
+ }
+
+ decodedBufPos--;
+ } else if (curChar == 0xF) {
+ digits[0] = digits[1] = digits[2] = 0;
+ digits[3] = gSaveContext.minigameScore;
+
+ while (digits[3] >= 1000) {
+ digits[0]++;
+ digits[3] -= 1000;
+ }
+ while (digits[3] >= 100) {
+ digits[1]++;
+ digits[3] -= 100;
+ }
+ while (digits[3] >= 10) {
+ digits[2]++;
+ digits[3] -= 10;
+ }
+
+ loadChar = false;
+ for (i = 0; i < 4; i++) {
+ if ((i == 3) || (digits[i] != 0)) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ Message_LoadCharNES(play, digits[i] + '0', &charTexIdx, &spA4, decodedBufPos);
+ decodedBufPos++;
+ }
+ }
+ decodedBufPos--;
+ } else if (curChar == 0xD0) {
+ decodedBufPos++;
+ msgCtx->unk120BE = spC6;
+ msgCtx->unk120C0 = decodedBufPos;
+ msgCtx->unk120C2 = 0;
+ msgCtx->bankRupeesSelected = 0;
+ msgCtx->unk120C4 = charTexIdx;
+ digits[0] = digits[1] = digits[2] = 0;
+ for (i = 0; i < 2; i++) {
+ Message_LoadCharNES(play, digits[i] + '0', &charTexIdx, &spA4, decodedBufPos);
+ decodedBufPos++;
+ }
+ Message_LoadPluralRupeesNES(play, &decodedBufPos, &charTexIdx, &spA4);
+ } else if (curChar == 0xD1) {
+ decodedBufPos++;
+ msgCtx->unk120BE = spC6;
+ msgCtx->unk120C0 = decodedBufPos;
+ msgCtx->unk120C2 = 0;
+ msgCtx->bankRupeesSelected = 0;
+ msgCtx->unk120C4 = charTexIdx;
+
+ for (i = 0; i < 5; i++) {
+ msgCtx->unk12054[i] = 1;
+ Message_LoadCharNES(play, '1', &charTexIdx, &spA4, decodedBufPos);
+ decodedBufPos++;
+ }
+ decodedBufPos--;
+ } else if (curChar == 0xD3) {
+ if (gSaveContext.save.timeSpeedOffset == 18) {
+ var_s2_9 = 0;
+ } else if (gSaveContext.save.timeSpeedOffset == 0) {
+ var_s2_9 = 1;
+ } else {
+ var_s2_9 = 2;
+ }
+
+ for (i = 0; i < 4; i++) {
+ msgCtx->decodedBuffer.schar[decodedBufPos] = D_801D08D8[var_s2_9][i];
+ Font_LoadCharNES(play, D_801D08D8[var_s2_9][i], charTexIdx);
+ decodedBufPos++;
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ }
+ decodedBufPos--;
+ spA4 += 3.0f * (16.0f * msgCtx->textCharScale);
+ msgCtx->choiceIndex = var_s2_9;
+ } else if (curChar == 0xD4) {
+ Message_LoadOwlWarpTextNES(play, &charTexIdx, &spA4, &decodedBufPos);
+ } else if (curChar == 0xD5) {
+ decodedBufPos++;
+ msgCtx->unk120BE = spC6;
+ msgCtx->unk120C0 = decodedBufPos;
+ msgCtx->unk120C2 = 0;
+ msgCtx->bankRupeesSelected = 0;
+ msgCtx->unk120C4 = charTexIdx;
+
+ for (i = 0; i < 3; i++) {
+ msgCtx->unk12054[i] = 1;
+ Font_LoadCharNES(play, '1', charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.schar[decodedBufPos] = '1';
+ spA4 += 16.0f * msgCtx->textCharScale;
+ decodedBufPos++;
+ }
+ decodedBufPos--;
+ } else if (curChar == 0xD6) {
+ for (i = 0; i < 6; i++) {
+ msgCtx->decodedBuffer.schar[decodedBufPos] =
+ (s8)D_801D08E4[((void)0, gSaveContext.save.saveInfo.spiderHouseMaskOrder[i])];
+ decodedBufPos++;
+ Message_LoadCharNES(play, i + '1', &charTexIdx, &spA4, decodedBufPos);
+ decodedBufPos++;
+ }
+ msgCtx->decodedBuffer.schar[decodedBufPos] = 0;
+ } else if ((curChar >= 0xD7) && (curChar < 0xDB)) {
+ digits[0] = digits[1] = 0;
+ digits[2] = 15 - gSaveContext.save.saveInfo.inventory.strayFairies[curChar - 0xD7];
+
+ while (digits[2] >= 100) {
+ digits[0]++;
+ digits[2] -= 100;
+ }
+ while (digits[2] >= 10) {
+ digits[1]++;
+ digits[2] -= 10;
+ }
+
+ loadChar = false;
+ for (i = 0; i < 3; i++) {
+ if ((i == 2) || (digits[i] != 0)) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ Font_LoadCharNES(play, digits[i] + '0', charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0';
+ decodedBufPos++;
+ spA4 += 16.0f * msgCtx->textCharScale;
+ }
+ }
+ } else if (curChar == 0xDB) {
+ digits[0] = digits[1] = digits[2] = 0;
+ digits[3] = gSaveContext.minigameScore;
+
+ while (digits[3] >= 1000) {
+ digits[0]++;
+ digits[3] -= 1000;
+ }
+ while (digits[3] >= 100) {
+ digits[1]++;
+ digits[3] -= 100;
+ }
+ while (digits[3] >= 10) {
+ digits[2]++;
+ digits[3] -= 10;
+ }
+
+ loadChar = false;
+ for (i = 0; i < 4; i++) {
+ if ((i == 3) || (digits[i] != 0)) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ Font_LoadCharNES(play, digits[i] + '0', charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0';
+ decodedBufPos++;
+ spA4 += 16.0f * msgCtx->textCharScale;
+ }
+ }
+ decodedBufPos--;
+ } else if ((curChar == 0xDC) || (curChar == 0xDD)) {
+ if (curChar == 0xDC) {
+ digits[0] = gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][0];
+ digits[1] = gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][1];
+ digits[2] = gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][2];
+ } else {
+ digits[0] = (HS_GET_LOTTERY_CODE_GUESS() & 0xF00) >> 8;
+ digits[1] = (HS_GET_LOTTERY_CODE_GUESS() & 0xF0) >> 4;
+ digits[2] = HS_GET_LOTTERY_CODE_GUESS() & 0xF;
+ }
+
+ for (i = 0; i < 3; i++) {
+ Font_LoadCharNES(play, digits[i] + '0', charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0';
+ decodedBufPos++;
+ spA4 += 16.0f * msgCtx->textCharScale;
+ }
+ decodedBufPos--;
+ } else if (curChar == 0xDE) {
+ digits[0] = digits[1] = digits[2] = 0;
+ digits[3] = gItemPrices[GET_CUR_FORM_BTN_ITEM(player->heldItemButton)];
+
+ while (digits[3] >= 1000) {
+ digits[0]++;
+ digits[3] -= 1000;
+ }
+ while (digits[3] >= 100) {
+ digits[1]++;
+ digits[3] -= 100;
+ }
+ while (digits[3] >= 10) {
+ digits[2]++;
+ digits[3] -= 10;
+ }
+
+ loadChar = false;
+ for (i = 0; i < 4; i++) {
+ if ((i == 3) || (digits[i] != 0)) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ Font_LoadCharNES(play, digits[i] + '0', charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0';
+ decodedBufPos++;
+ spA4 += 16.0f * msgCtx->textCharScale;
+ }
+ }
+ Message_LoadPluralRupeesNES(play, &decodedBufPos, &charTexIdx, &spA4);
+ } else if (curChar == 0xDF) {
+ for (i = 0; i < 5; i++) {
+ digits[i] = gSaveContext.save.saveInfo.bomberCode[i];
+ Font_LoadCharNES(play, digits[i] + '0', charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0';
+ decodedBufPos++;
+ spA4 += 16.0f * msgCtx->textCharScale;
+ }
+ decodedBufPos--;
+ } else if ((curChar >= 0xE1) && (curChar < 0xE7)) {
+ msgCtx->decodedBuffer.schar[decodedBufPos] =
+ D_801D08E4[((void)0, gSaveContext.save.saveInfo.spiderHouseMaskOrder[(s16)(curChar - 0xE1)])];
+ temp_s2_2 = sMaskCodeTextLengthENG[(
+ (void)0, gSaveContext.save.saveInfo.spiderHouseMaskOrder[(s16)(curChar - 0xE1)])];
+ decodedBufPos++;
+
+ for (i = 0; i < temp_s2_2; i++) {
+ Message_LoadCharNES(
+ play,
+ sMaskCodeTextENG[((void)0, gSaveContext.save.saveInfo.spiderHouseMaskOrder[(s16)(curChar - 0xE1)])]
+ [i],
+ &charTexIdx, &spA4, decodedBufPos);
+ decodedBufPos++;
+ }
+
+ msgCtx->decodedBuffer.schar[decodedBufPos] = 0;
+ } else if (curChar == 0xE7) {
+ timeToMoonCrash = TIME_UNTIL_MOON_CRASH;
+ digits[0] = 0;
+ digits[1] = TIME_TO_HOURS_F_ALT(timeToMoonCrash);
+
+ while (digits[1] >= 10) {
+ digits[0]++;
+ digits[1] -= 10;
+ }
+
+ loadChar = false;
+ for (i = 0; i < 2; i++) {
+ if ((i == 1) || (digits[i] != 0)) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ Message_LoadCharNES(play, digits[i] + '0', &charTexIdx, &spA4, decodedBufPos);
+ decodedBufPos++;
+ }
+ }
+ msgCtx->decodedBuffer.schar[decodedBufPos] = ' ';
+ decodedBufPos++;
+ Message_LoadCharNES(play, 'h', &charTexIdx, &spA4, decodedBufPos);
+ decodedBufPos++;
+ Message_LoadCharNES(play, 'o', &charTexIdx, &spA4, decodedBufPos);
+ decodedBufPos++;
+ Message_LoadCharNES(play, 'u', &charTexIdx, &spA4, decodedBufPos);
+ decodedBufPos++;
+ Message_LoadCharNES(play, 'r', &charTexIdx, &spA4, decodedBufPos);
+ if ((digits[0] != 0) || (digits[1] != 1)) {
+ decodedBufPos++;
+ Message_LoadCharNES(play, 's', &charTexIdx, &spA4, decodedBufPos);
+ }
+ } else if (curChar == 0xE8) {
+ Message_LoadTimeNES(play, curChar, &charTexIdx, &spA4, &decodedBufPos);
+
+ } else if ((curChar == 0xF0) || (curChar == 0xF1) || (curChar == 0xF2) || (curChar == 0xF8)) {
+ if (curChar == 0xF8) {
+ value = (s32)HS_GET_HIGH_SCORE_3_LOWER();
+ } else {
+ value = HIGH_SCORE(curChar - 0xF0);
+ }
+ if (curChar == 0xF2) {
+ if (LINK_AGE_IN_YEARS == YEARS_CHILD) {
+ value &= 0x7F;
+ } else {
+ value = (s16)((HIGH_SCORE((u8)font->msgBuf.schar[msgCtx->msgBufPos]) & 0xFF000000) >> 0x18) & 0x7F;
+ }
+ }
+ digits[3] = value;
+ digits[0] = digits[1] = digits[2] = 0;
+
+ while (digits[3] >= 1000) {
+ digits[0]++;
+ digits[3] -= 1000;
+ }
+ while (digits[3] >= 100) {
+ digits[1]++;
+ digits[3] -= 100;
+ }
+ while (digits[3] >= 10) {
+ digits[2]++;
+ digits[3] -= 10;
+ }
+
+ loadChar = false;
+ for (i = 0; i < 4; i++) {
+ if ((i == 3) || (digits[i] != 0)) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ Font_LoadCharNES(play, digits[i] + '0', charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0';
+ decodedBufPos++;
+ spA4 += 16.0f * msgCtx->textCharScale;
+ }
+ }
+ decodedBufPos--;
+ } else if ((curChar == 0xF7) || (curChar == 0xF9) || (curChar == 0xFA) || (curChar == 0xFB) ||
+ (curChar == 0xFC)) {
+ var_fs0 = 8.0f;
+ if (curChar == 0xF7) {
+ Message_GetTimerDigitsNES(GET_HIGH_SCORE(HS_UNK_1), spA8);
+ } else if (curChar == 0xF9) {
+ Message_GetTimerDigitsNES(GET_HIGH_SCORE(HS_HORSE_BACK_BALLOON), spA8);
+ } else {
+ Message_GetTimerDigitsNES(
+ ((void)0, gSaveContext.save.saveInfo.dekuPlaygroundHighScores[curChar - 0xFA]), spA8);
+ }
+
+ loadChar = false;
+ for (i = 0; i < 8; i++) {
+ if ((i == 4) || ((i != 2) && (i != 5) && (spA8[i] != '\0'))) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ Font_LoadCharNES(play, spA8[i], charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.schar[decodedBufPos] = spA8[i];
+ decodedBufPos++;
+ } else {
+ var_fs0 -= 1.0f;
+ }
+ }
+ spA4 += var_fs0 * (16.0f * msgCtx->textCharScale);
+ decodedBufPos--;
+ } else if ((curChar == 0xF3) || (curChar == 0xF4) || (curChar == 0xF5)) {
+ value = HIGH_SCORE(curChar - 0xF3 + HS_BOAT_ARCHERY);
+ digits[0] = digits[1] = digits[2] = 0;
+ digits[3] = value;
+
+ while (digits[3] >= 60) {
+ digits[1]++;
+ if (digits[1] >= 10) {
+ digits[0]++;
+ digits[1] -= 10;
+ }
+ digits[3] -= 60;
+ }
+ while (digits[3] >= 10) {
+ digits[2]++;
+ digits[3] -= 10;
+ }
+
+ for (i = 0; i < 4; i++) {
+ Font_LoadCharNES(play, digits[i] + '0', charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0';
+ decodedBufPos++;
+ if (i == 1) {
+ Font_LoadCharNES(play, '"', charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.schar[decodedBufPos] = '"';
+ decodedBufPos++;
+ } else if (i == 3) {
+ Font_LoadCharNES(play, 0x27, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.schar[decodedBufPos] = 0x27;
+ }
+ }
+ spA4 += 4.0f * (16.0f * msgCtx->textCharScale);
+ } else if (curChar == 0xF6) {
+ digits[0] = digits[1] = digits[2] = 0;
+ digits[3] = HS_GET_TOWN_SHOOTING_GALLERY_HIGH_SCORE();
+
+ while (digits[3] >= 1000) {
+ digits[0]++;
+ digits[3] -= 1000;
+ }
+ while (digits[3] >= 100) {
+ digits[1]++;
+ digits[3] -= 100;
+ }
+ while (digits[3] >= 10) {
+ digits[2]++;
+ digits[3] -= 10;
+ }
+
+ loadChar = false;
+ for (i = 0; i < 4; i++) {
+ if ((i == 3) || (digits[i] != 0)) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ Font_LoadCharNES(play, digits[i] + '0', charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0';
+ decodedBufPos++;
+ spA4 += 16.0f * msgCtx->textCharScale;
+ }
+ }
+ decodedBufPos--;
+ } else if ((curChar == 0xFD) || (curChar == 0xFE) || (curChar == 0xFF)) {
+ for (playerNameLen = 8; playerNameLen > 0; playerNameLen--) {
+ if (gSaveContext.save.saveInfo.inventory
+ .dekuPlaygroundPlayerName[(s16)(curChar - 0xFD)][playerNameLen - 1] != 0x3E) {
+ break;
+ }
+ }
+
+ for (i = 0; i < playerNameLen; i++) {
+ ptr = &font->fontBuf[((void)0, gSaveContext.save.saveInfo.inventory
+ .dekuPlaygroundPlayerName[(s16)(curChar - 0xFD)][i]) *
+ FONT_CHAR_TEX_SIZE];
+ msgCtx->decodedBuffer.schar[decodedBufPos + i] = 0xFD;
+
+ for (var_v1_3 = 0; var_v1_3 < FONT_CHAR_TEX_SIZE; var_v1_3 += 4) {
+ font->charBuf[font->unk_11D88][charTexIdx + var_v1_3 + 0] = ptr[var_v1_3 + 0];
+ font->charBuf[font->unk_11D88][charTexIdx + var_v1_3 + 1] = ptr[var_v1_3 + 1];
+ font->charBuf[font->unk_11D88][charTexIdx + var_v1_3 + 2] = ptr[var_v1_3 + 2];
+ font->charBuf[font->unk_11D88][charTexIdx + var_v1_3 + 3] = ptr[var_v1_3 + 3];
+ }
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ }
+ decodedBufPos += playerNameLen - 1;
+ spA4 += playerNameLen * (16.0f * msgCtx->textCharScale);
+ } else if (curChar == 0xB) {
+ digits[0] = digits[1] = digits[2] = 0;
+ digits[3] = HS_GET_BOAT_ARCHERY_HIGH_SCORE();
+
+ while (digits[3] >= 1000) {
+ digits[0]++;
+ digits[3] -= 1000;
+ }
+ while (digits[3] >= 100) {
+ digits[1]++;
+ digits[3] -= 100;
+ }
+ while (digits[3] >= 10) {
+ digits[2]++;
+ digits[3] -= 10;
+ }
+
+ loadChar = false;
+ for (i = 0; i < 4; i++) {
+ if ((i == 3) || (digits[i] != 0)) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ Font_LoadCharNES(play, digits[i] + '0', charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0';
+ decodedBufPos++;
+ spA4 += 16.0f * msgCtx->textCharScale;
+ }
+ }
+ decodedBufPos--;
+ } else if (curChar == 0x14) {
+ decodedBufPos--;
+ for (i = 0; i < font->msgBuf.schar[msgCtx->msgBufPos + 1]; i++) {
+ msgCtx->decodedBuffer.schar[++decodedBufPos] = ' ';
+ spA4 += 6.0f;
+ }
+ msgCtx->msgBufPos++;
+ } else if ((curChar == 0x13) || (curChar == 0x11)) {
+ msgCtx->unk11F1A[spC6] = 0;
+ if (msgCtx->unk11F18 != 0) {
+ msgCtx->unk11F1A[spC6] = ((msgCtx->textCharScale * 16.0f * 16.0f) - spA4) * 0.5f;
+ }
+ spC6++;
+ spA4 = 0.0f;
+ if (curChar == 0x11) {
+ spD0++;
+ }
+ } else if ((curChar == 0x17) || (curChar == 0x18) || (curChar == 0x1A)) {
+ // pass
+ } else if (curChar == 0xA) {
+ decodedBufPos++;
+ } else if (curChar == 0x1C) {
+ msgCtx->textFade = true;
+ msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos];
+ msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos];
+ } else if (curChar == 0x1E) {
+ msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos];
+ msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos];
+ if (msgCtx->textboxSkipped || (msgCtx->textBoxType == TEXTBOX_TYPE_1) ||
+ (msgCtx->textBoxType == TEXTBOX_TYPE_3) || (msgCtx->textBoxType == TEXTBOX_TYPE_6) ||
+ (msgCtx->textBoxType == TEXTBOX_TYPE_8) || (msgCtx->textBoxType == TEXTBOX_TYPE_9) ||
+ (msgCtx->textBoxType == TEXTBOX_TYPE_B) || (msgCtx->unk11F0C == 3)) {
+ Audio_PlaySfx((msgCtx->decodedBuffer.schar[decodedBufPos - 1] << 8) |
+ msgCtx->decodedBuffer.schar[decodedBufPos]);
+ }
+ } else if (curChar == 0x1F) {
+ msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos];
+ msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos];
+ } else if ((curChar != 0x20) && (curChar >= 9)) {
+ Font_LoadCharNES(play, curChar, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ spA4 += sNESFontWidths[curChar - ' '] * msgCtx->textCharScale;
+ } else if (curChar == 0x20) {
+ spA4 += 6.0f;
+ }
+ decodedBufPos++;
+ msgCtx->msgBufPos++;
+ }
+}
+#else
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_message_nes/Message_DecodeNES.s")
+#endif
diff --git a/src/code/z_message_staff.c b/src/code/z_message_staff.c
index ab30a3d9c..a093ef5c1 100644
--- a/src/code/z_message_staff.c
+++ b/src/code/z_message_staff.c
@@ -17,12 +17,660 @@ void Message_FindCreditsMessage(PlayState* play, u16 textId) {
nextSegment = msgEntry->segment;
font->messageStart = foundSegment - segment;
font->messageEnd = nextSegment - foundSegment;
- return;
+ break;
}
msgEntry++;
}
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message_staff/func_8015E7EC.s")
+f32 sCreditsFontWidths[144] = {
+ 8.0f, 8.0f, 6.0f, 9.0f, 9.0f, 14.0f, 12.0f, 3.0f, 7.0f, 7.0f, 7.0f, 9.0f, 4.0f, 6.0f, 4.0f, 9.0f,
+ 10.0f, 5.0f, 9.0f, 9.0f, 10.0f, 9.0f, 9.0f, 9.0f, 9.0f, 9.0f, 6.0f, 6.0f, 9.0f, 11.0f, 9.0f, 11.0f,
+ 13.0f, 12.0f, 9.0f, 11.0f, 11.0f, 8.0f, 8.0f, 12.0f, 10.0f, 4.0f, 8.0f, 10.0f, 8.0f, 13.0f, 11.0f, 13.0f,
+ 9.0f, 13.0f, 10.0f, 10.0f, 9.0f, 10.0f, 11.0f, 15.0f, 11.0f, 10.0f, 10.0f, 7.0f, 10.0f, 7.0f, 10.0f, 9.0f,
+ 5.0f, 8.0f, 9.0f, 8.0f, 9.0f, 9.0f, 6.0f, 9.0f, 8.0f, 4.0f, 6.0f, 8.0f, 4.0f, 12.0f, 9.0f, 9.0f,
+ 9.0f, 9.0f, 7.0f, 8.0f, 7.0f, 8.0f, 9.0f, 12.0f, 8.0f, 9.0f, 8.0f, 7.0f, 5.0f, 7.0f, 10.0f, 10.0f,
+ 12.0f, 12.0f, 12.0f, 12.0f, 11.0f, 8.0f, 8.0f, 8.0f, 6.0f, 6.0f, 13.0f, 13.0f, 10.0f, 10.0f, 10.0f, 9.0f,
+ 8.0f, 8.0f, 8.0f, 8.0f, 8.0f, 9.0f, 9.0f, 9.0f, 9.0f, 6.0f, 9.0f, 9.0f, 9.0f, 9.0f, 9.0f, 14.0f,
+ 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f,
+};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message_staff/func_8015F8A8.s")
+#ifdef NON_MATCHING
+// https://decomp.me/scratch/yc8Or
+// v0/v1 swap between `character` and `i`
+void Message_DrawTextCredits(PlayState* play, Gfx** gfxP) {
+ MessageContext* msgCtx = &play->msgCtx;
+ u16 lookAheadCharacter;
+ u16 j;
+ u16 i;
+ u16 sfxHi;
+ char character;
+ u16 charTexIndex;
+ Font* font = &msgCtx->font;
+ Gfx* gfx = *gfxP;
+
+ msgCtx->textPosX = msgCtx->unk11FF8;
+
+ if (!msgCtx->textIsCredits) {
+ msgCtx->textPosY = msgCtx->unk11FFA;
+ } else {
+ msgCtx->textPosY = 48;
+ }
+
+ if (msgCtx->textBoxType == TEXTBOX_TYPE_5) {
+ msgCtx->textColorR = msgCtx->textColorG = msgCtx->textColorB = 0;
+ } else {
+ msgCtx->textColorR = msgCtx->textColorG = msgCtx->textColorB = 255;
+ }
+
+ charTexIndex = 0;
+
+ for (i = 0; i < msgCtx->textDrawPos; i++) {
+ character = msgCtx->decodedBuffer.schar[i];
+
+ switch (character) {
+ case 0x1: // MESSAGE_NEWLINE
+ msgCtx->textPosX = msgCtx->unk11FF8;
+ if ((msgCtx->choiceNum == 1) || (msgCtx->choiceNum == 3)) {
+ msgCtx->textPosX += 32;
+ }
+ if ((msgCtx->choiceNum == 2) && (msgCtx->textPosY != msgCtx->unk11FFA)) {
+ msgCtx->textPosX += 32;
+ }
+ msgCtx->textPosY += msgCtx->unk11FFC;
+ break;
+
+ case 0x5: // Remnant of MESSAGE_COLOR
+ break;
+
+ case ' ':
+ msgCtx->textPosX += 6;
+ break;
+
+ case 0x4: // MESSAGE_BOX_BREAK
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ if (!msgCtx->textboxSkipped) {
+ Audio_PlaySfx(NA_SE_NONE);
+ msgCtx->msgMode = MSGMODE_TEXT_AWAIT_NEXT;
+ Font_LoadMessageBoxEndIcon(font, 0);
+ } else {
+ msgCtx->msgMode = MSGMODE_TEXT_NEXT_MSG;
+ msgCtx->textUnskippable = false;
+ msgCtx->msgBufPos++;
+ }
+ }
+ *gfxP = gfx;
+ return;
+
+ case 0x6: // MESSAGE_SHIFT
+ msgCtx->textPosX += msgCtx->decodedBuffer.schar[++i];
+ break;
+
+ case 0x7: // MESSAGE_TEXTID
+ msgCtx->textboxEndType = TEXTBOX_ENDTYPE_20;
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ Audio_PlaySfx(NA_SE_NONE);
+ msgCtx->msgMode = MSGMODE_TEXT_DONE;
+ Font_LoadMessageBoxEndIcon(font, 0);
+ }
+ *gfxP = gfx;
+ return;
+
+ case 0x8: // MESSAGE_QUICKTEXT_ENABLE
+ if (((i + 1) == msgCtx->textDrawPos) &&
+ ((msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) ||
+ ((msgCtx->msgMode >= MSGMODE_OCARINA_STARTING) && (msgCtx->msgMode <= MSGMODE_26)))) {
+ j = i;
+ while (true) {
+ lookAheadCharacter = msgCtx->decodedBuffer.schar[j];
+ if (lookAheadCharacter == 6) {
+ j += 2;
+ continue;
+ }
+ if ((lookAheadCharacter != 9) && (lookAheadCharacter != 0xA) && (lookAheadCharacter != 0xB) &&
+ (lookAheadCharacter != 0xC) && (lookAheadCharacter != 0xD) && (lookAheadCharacter != 4) &&
+ (lookAheadCharacter != 2)) {
+ j++;
+ continue;
+ }
+ break;
+ }
+ i = j - 1;
+ msgCtx->textDrawPos = i + 1;
+ }
+ // fallthrough
+ case 0x9: // MESSAGE_QUICKTEXT_DISABLE
+ break;
+
+ case 0xD: // MESSAGE_AWAIT_BUTTON_PRESS
+ if ((i + 1) == msgCtx->textDrawPos) {
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ msgCtx->msgMode = MSGMODE_TEXT_AWAIT_INPUT;
+ Font_LoadMessageBoxEndIcon(font, 0);
+ }
+ *gfxP = gfx;
+ return;
+ }
+ break;
+
+ case 0xC: // MESSAGE_BOX_BREAK_DELAYED
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ msgCtx->stateTimer = msgCtx->decodedBuffer.schar[++i];
+ msgCtx->msgMode = MSGMODE_TEXT_DELAYED_BREAK;
+ }
+ *gfxP = gfx;
+ return;
+
+ case 0x11: // MESSAGE_FADE2
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ msgCtx->msgMode = MSGMODE_TEXT_DONE;
+ msgCtx->textboxEndType = TEXTBOX_ENDTYPE_50;
+ msgCtx->stateTimer = msgCtx->decodedBuffer.schar[++i] << 8;
+ msgCtx->stateTimer |= msgCtx->decodedBuffer.schar[++i];
+ }
+ *gfxP = gfx;
+ return;
+
+ case 0x12: // MESSAGE_SFX
+ if ((msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) && !msgCtx->messageHasSetSfx) {
+ msgCtx->messageHasSetSfx = true;
+ sfxHi = msgCtx->decodedBuffer.schar[i + 1];
+ sfxHi = sfxHi << 8;
+ Audio_PlaySfx(sfxHi | msgCtx->decodedBuffer.schar[i + 2]);
+ }
+ i += 2;
+ break;
+
+ case 0x13: // remnant of MESSAGE_ITEM_ICON
+ break;
+
+ case 0x15: // MESSAGE_BACKGROUND
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ Audio_PlaySfx(NA_SE_NONE);
+ }
+ gDPPipeSync(gfx++);
+ gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, msgCtx->textColorAlpha);
+
+ gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1000, G_IM_FMT_I, 96, 48, 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++, (msgCtx->textPosX + 1) << 2, (msgCtx->unk12012 + 1) << 2,
+ (msgCtx->textPosX + 0x61) << 2, (msgCtx->unk12012 + 0x31) << 2, G_TX_RENDERTILE, 0,
+ 0, 1 << 10, 1 << 10);
+
+ gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1900, G_IM_FMT_I, 96, 48, 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++, (msgCtx->textPosX + 0x61) << 2, (msgCtx->unk12012 + 1) << 2,
+ (msgCtx->textPosX + 0xC2) << 2, (msgCtx->unk12012 + 0x31) << 2, 0, 0, 0, 1 << 10,
+ 1 << 10);
+
+ gDPPipeSync(gfx++);
+ gDPSetPrimColor(gfx++, 0, 0, 255, 60, 0, msgCtx->textColorAlpha);
+ gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1000, G_IM_FMT_I, 96, 48, 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++, msgCtx->textPosX << 2, msgCtx->unk12012 << 2, (msgCtx->textPosX + 0x60) << 2,
+ (msgCtx->unk12012 + 0x30) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
+ gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1900, G_IM_FMT_I, 96, 48, 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++, (msgCtx->textPosX + 0x60) << 2, msgCtx->unk12012 << 2,
+ (msgCtx->textPosX + 0xC0) << 2, (msgCtx->unk12012 + 0x30) << 2, G_TX_RENDERTILE, 0,
+ 0, 1 << 10, 1 << 10);
+ gDPPipeSync(gfx++);
+ gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0,
+ PRIMITIVE, 0);
+ msgCtx->textPosX += 0x20;
+ break;
+
+ case 0x14: // MESSAGE_TEXT_SPEED
+ msgCtx->textDelay = msgCtx->decodedBuffer.schar[++i];
+ break;
+
+ case 0x1A: // MESSAGE_UNSKIPPABLE
+ msgCtx->textUnskippable = true;
+ break;
+
+ case 0x1B: // MESSAGE_TWO_CHOICE
+ msgCtx->textboxEndType = TEXTBOX_ENDTYPE_10;
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ msgCtx->choiceTextId = msgCtx->currentTextId;
+ msgCtx->stateTimer = 4;
+ msgCtx->choiceIndex = 0;
+ Font_LoadMessageBoxEndIcon(font, 2);
+ }
+ break;
+
+ case 0x1C: // MESSAGE_THREE_CHOICE
+ msgCtx->textboxEndType = TEXTBOX_ENDTYPE_11;
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ msgCtx->choiceTextId = msgCtx->currentTextId;
+ msgCtx->stateTimer = 4;
+ msgCtx->choiceIndex = 0;
+ Font_LoadMessageBoxEndIcon(font, 2);
+ }
+ break;
+
+ case 0x2: // MESSAGE_END
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ msgCtx->msgMode = MSGMODE_TEXT_DONE;
+ if (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_00) {
+ Audio_PlaySfx(NA_SE_SY_MESSAGE_END);
+ Font_LoadMessageBoxEndIcon(font, 1);
+ if (play->csCtx.state == CS_STATE_IDLE) {
+ func_8011552C(play, DO_ACTION_RETURN);
+ }
+ }
+ }
+ *gfxP = gfx;
+ return;
+
+ case 0x10: // MESSAGE_OCARINA
+ if ((i + 1) == msgCtx->textDrawPos) {
+ Message_HandleOcarina(play);
+ *gfxP = gfx;
+ return;
+ }
+ break;
+
+ case 0xE: // MESSAGE_FADE
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ msgCtx->msgMode = MSGMODE_TEXT_DONE;
+ msgCtx->textboxEndType = TEXTBOX_ENDTYPE_50;
+ msgCtx->stateTimer = msgCtx->decodedBuffer.schar[++i];
+ Font_LoadMessageBoxEndIcon(font, 1);
+ if (play->csCtx.state == CS_STATE_IDLE) {
+ func_8011552C(play, DO_ACTION_RETURN);
+ }
+ }
+ *gfxP = gfx;
+ return;
+
+ case 0xA: // MESSAGE_PERSISTENT
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ Audio_PlaySfx(NA_SE_NONE);
+ msgCtx->msgMode = MSGMODE_TEXT_DONE;
+ msgCtx->textboxEndType = TEXTBOX_ENDTYPE_30;
+ }
+ *gfxP = gfx;
+ return;
+
+ case 0xB: // MESSAGE_EVENT
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ msgCtx->msgMode = MSGMODE_TEXT_DONE;
+ msgCtx->textboxEndType = TEXTBOX_ENDTYPE_40;
+ Font_LoadMessageBoxEndIcon(font, 0);
+ Audio_PlaySfx(NA_SE_SY_MESSAGE_END);
+ }
+ *gfxP = gfx;
+ return;
+
+ default:
+ if ((msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) && ((i + 1) == msgCtx->textDrawPos) &&
+ (msgCtx->textDelayTimer == msgCtx->textDelay)) {
+ Audio_PlaySfx(NA_SE_NONE);
+ }
+ Message_DrawTextChar(play, &font->charBuf[font->unk_11D88][charTexIndex], &gfx);
+ charTexIndex += FONT_CHAR_TEX_SIZE;
+
+ msgCtx->textPosX += (s32)(sCreditsFontWidths[character - ' '] * msgCtx->textCharScale);
+ break;
+ }
+ }
+
+ if (msgCtx->textDelayTimer == 0) {
+ msgCtx->textDrawPos = i + 1;
+ msgCtx->textDelayTimer = msgCtx->textDelay;
+ } else {
+ msgCtx->textDelayTimer--;
+ }
+
+ *gfxP = gfx;
+}
+#else
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_message_staff/Message_DrawTextCredits.s")
+#endif
+
+void Message_DecodeCredits(PlayState* play) {
+ u16 curChar;
+ s16 loadChar;
+ s16 i;
+ s16 playerNameLen;
+ s16 decodedBufPos = 0;
+ s16 charOffset;
+ f32 timeInSeconds;
+ s16 numLines = 0;
+ s16 value;
+ s16 digits[4];
+ s32 charTexIdx = 0;
+ MessageContext* msgCtx = &play->msgCtx;
+ Font* font = &play->msgCtx.font;
+
+ msgCtx->nextTextId = 0xFFFF;
+
+ while (true) {
+ curChar = font->msgBuf.schar[msgCtx->msgBufPos];
+ msgCtx->decodedBuffer.schar[decodedBufPos] = font->msgBuf.schar[msgCtx->msgBufPos];
+
+ if ((curChar == 4) || (curChar == 7) || (curChar == 0xC) || (curChar == 0xB) || (curChar == 2)) {
+ // Textbox decoding ends with any of the above text control characters
+ msgCtx->msgMode = MSGMODE_TEXT_DISPLAYING;
+ msgCtx->textDrawPos = 1;
+ msgCtx->unk11FFA = msgCtx->textboxY + 8;
+
+ if (msgCtx->textBoxType != TEXTBOX_TYPE_4) {
+ if (numLines == 0) {
+ msgCtx->unk11FFA = msgCtx->textboxY + 26;
+ } else if (numLines == 1) {
+ msgCtx->unk11FFA = msgCtx->textboxY + 20;
+ } else if (numLines == 2) {
+ msgCtx->unk11FFA = msgCtx->textboxY + 16;
+ }
+ }
+
+ if (curChar == 7) {
+ value = font->msgBuf.schar[msgCtx->msgBufPos + 1];
+ msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[msgCtx->msgBufPos + 1];
+ msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[msgCtx->msgBufPos + 2];
+ value <<= 8;
+ msgCtx->nextTextId = msgCtx->decodedBuffer.schar[decodedBufPos] | value;
+ }
+
+ if (curChar == 0xC) {
+ msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[msgCtx->msgBufPos + 1];
+ msgCtx->msgBufPos += 2;
+ }
+
+ msgCtx->decodedTextLen = decodedBufPos;
+
+ if (msgCtx->textboxSkipped) {
+ msgCtx->textDrawPos = msgCtx->decodedTextLen;
+ }
+ break;
+ } else if (curChar == 0xF) {
+ // Substitute the player name control character for the file's player name.
+ for (playerNameLen = ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); playerNameLen > 0;
+ playerNameLen--) {
+ if (gSaveContext.save.saveInfo.playerData.playerName[playerNameLen - 1] != 0x3E) {
+ break;
+ }
+ }
+
+ for (i = 0; i < playerNameLen; i++) {
+ curChar = gSaveContext.save.saveInfo.playerData.playerName[i];
+ if (curChar == 62) {
+ curChar = ' ';
+ } else if (curChar == 64) {
+ curChar = '.';
+ } else if (curChar == 63) {
+ curChar = '-';
+ } else if (curChar < 10) {
+ charOffset = curChar;
+ curChar = '0' + charOffset;
+ } else if (curChar < 36) {
+ charOffset = curChar;
+ curChar = 'A' - 10 + charOffset;
+ } else if (curChar < 62) {
+ charOffset = curChar;
+ curChar = 'a' - 36 + charOffset;
+ }
+
+ if (curChar != ' ') {
+ Font_LoadCharNES(play, curChar - ' ', charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ }
+ msgCtx->decodedBuffer.schar[decodedBufPos] = curChar;
+ decodedBufPos++;
+ }
+ decodedBufPos--;
+ } else if ((curChar == 0x16) || (curChar == 0x17)) {
+ digits[0] = digits[1] = digits[2] = 0;
+ if (curChar == 0x17) {
+ digits[3] = gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2];
+ } else {
+ digits[3] = gSaveContext.timerCurTimes[TIMER_ID_GORON_RACE_UNUSED];
+ }
+
+ while (digits[3] >= 60) {
+ digits[1]++;
+ if (digits[1] >= 10) {
+ digits[0]++;
+ digits[1] -= 10;
+ }
+ digits[3] -= 60;
+ }
+
+ while (digits[3] >= 10) {
+ digits[2]++;
+ digits[3] -= 10;
+ }
+
+ for (i = 0; i < 4; i++) {
+ Font_LoadCharNES(play, digits[i] + '0' - ' ', charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0';
+ decodedBufPos++;
+ if (i == 1) {
+ Font_LoadCharNES(play, '"' - ' ', charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.schar[decodedBufPos] = '"';
+ decodedBufPos++;
+ } else if (i == 3) {
+ Font_LoadCharNES(play, '"' - ' ', charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.schar[decodedBufPos] = '"';
+ }
+ }
+
+ } else if (curChar == 0x18) {
+ digits[0] = digits[1] = digits[2] = 0;
+ digits[3] = gSaveContext.minigameScore;
+
+ while (digits[3] >= 1000) {
+ digits[0]++;
+ digits[3] -= 1000;
+ }
+ while (digits[3] >= 100) {
+ digits[1]++;
+ digits[3] -= 100;
+ }
+ while (digits[3] >= 10) {
+ digits[2]++;
+ digits[3] -= 10;
+ }
+
+ loadChar = false;
+ for (i = 0; i < 4; i++) {
+ if ((i == 3) || (digits[i] != 0)) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ Font_LoadCharNES(play, digits[i] + '0' - ' ', charTexIdx);
+ msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0';
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ decodedBufPos++;
+ }
+ }
+ decodedBufPos--;
+ } else if (curChar != 0x19) {
+ if (curChar == 0x1D) {
+ digits[0] = 0;
+ digits[1] = gSaveContext.minigameScore;
+
+ while (digits[1] >= 10) {
+ digits[0]++;
+ digits[1] -= 10;
+ }
+
+ for (i = 0; i < 2; i++) {
+ if ((i == 1) || (digits[i] != 0)) {
+ Font_LoadCharNES(play, digits[i] + '0' - ' ', charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0';
+ decodedBufPos++;
+ }
+ }
+ decodedBufPos--;
+ } else if (curChar == 0x1E) {
+ value = HIGH_SCORE((u8)font->msgBuf.schar[++msgCtx->msgBufPos]);
+ if ((font->msgBuf.schar[msgCtx->msgBufPos] & 0xFF) == HS_FISHING) {
+ if (LINK_AGE_IN_YEARS == YEARS_CHILD) {
+ value &= 0x7F;
+ } else {
+ value =
+ (s16)((HIGH_SCORE((u8)font->msgBuf.schar[msgCtx->msgBufPos]) & 0xFF000000) >> 0x18) & 0x7F;
+ }
+ value = SQ((f32)value) * 0.0036f + 0.5f;
+ }
+ switch (font->msgBuf.schar[msgCtx->msgBufPos] & 0xFF) {
+ case 0:
+ case 1:
+ case 2:
+ digits[0] = digits[1] = digits[2] = 0;
+ digits[3] = value;
+
+ while (digits[3] >= 1000) {
+ digits[0]++;
+ digits[3] -= 1000;
+ }
+ while (digits[3] >= 100) {
+ digits[1]++;
+ digits[3] -= 100;
+ }
+ while (digits[3] >= 10) {
+ digits[2]++;
+ digits[3] -= 10;
+ }
+
+ loadChar = false;
+ for (i = 0; i < 4; i++) {
+ if ((i == 3) || (digits[i] != 0)) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ Font_LoadCharNES(play, digits[i] + '0' - ' ', charTexIdx);
+ msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0';
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ decodedBufPos++;
+ }
+ }
+ decodedBufPos--;
+ break;
+
+ case 3:
+ case 4:
+ case 6:
+ digits[0] = digits[1] = digits[2] = 0;
+ digits[3] = value;
+
+ while (digits[3] >= 60) {
+ digits[1]++;
+ if (digits[1] >= 10) {
+ digits[0]++;
+ digits[1] -= 10;
+ }
+ digits[3] -= 60;
+ }
+ while (digits[3] >= 10) {
+ digits[2]++;
+ digits[3] -= 10;
+ }
+
+ for (i = 0; i < 4; i++) {
+ Font_LoadCharNES(play, digits[i] + '0' - ' ', charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0';
+ decodedBufPos++;
+ if (i == 1) {
+ Font_LoadCharNES(play, '"' - ' ', charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.schar[decodedBufPos] = '"';
+ decodedBufPos++;
+ } else if (i == 3) {
+ Font_LoadCharNES(play, '"' - ' ', charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.schar[decodedBufPos] = '"';
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
+ } else if (curChar == 0x1F) {
+ digits[0] = 0;
+ timeInSeconds = TIME_TO_MINUTES_F(gSaveContext.save.time);
+
+ digits[1] = timeInSeconds / 60.0f;
+ while (digits[1] >= 10) {
+ digits[0]++;
+ digits[1] -= 10;
+ }
+
+ digits[2] = 0;
+ digits[3] = (s32)timeInSeconds % 60;
+ while (digits[3] >= 10) {
+ digits[2]++;
+ digits[3] -= 10;
+ }
+
+ for (i = 0; i < 4; i++) {
+ Font_LoadCharNES(play, digits[i] + '0' - ' ', charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0';
+ decodedBufPos++;
+ if (i == 1) {
+ Font_LoadCharNES(play, ':' - ' ', charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->decodedBuffer.schar[decodedBufPos] = ':';
+ decodedBufPos++;
+ }
+ }
+
+ decodedBufPos--;
+ } else if (curChar == 0x13) {
+ msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[msgCtx->msgBufPos + 1];
+ Message_LoadItemIcon(play, font->msgBuf.schar[msgCtx->msgBufPos + 1], msgCtx->textboxY + 10);
+ } else if (curChar == 0x15) {
+ DmaMgr_SendRequest0(msgCtx->textboxSegment + 0x1000,
+ (uintptr_t)SEGMENT_ROM_START(message_texture_static) + 0x900, 0x900);
+ DmaMgr_SendRequest0(msgCtx->textboxSegment + 0x1900,
+ (uintptr_t)SEGMENT_ROM_START(message_texture_static) + 0x900, 0x900);
+ msgCtx->msgBufPos += 3;
+ msgCtx->unk12012 = msgCtx->textboxY + 8;
+ numLines = 2;
+ } else if (curChar == 5) {
+ msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos];
+ } else if (curChar == 1) {
+ numLines++;
+ } else if ((curChar != 8) && (curChar != 9) && (curChar != 0xD) && (curChar != 0x10) && (curChar != 0xA) &&
+ (curChar != 0x1A)) {
+ if (curChar == 0xE) {
+ msgCtx->textFade = true;
+ msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos];
+ } else if (curChar == 0x11) {
+ msgCtx->textFade = true;
+ msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos];
+ msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos];
+ } else if ((curChar == 6) || (curChar == 0x14)) {
+ msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos] & 0xFF;
+ } else if (curChar == 0x12) {
+ msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos];
+ msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos];
+ } else if (curChar == 0x1B) {
+ msgCtx->choiceNum = 2;
+ } else if (curChar == 0x1C) {
+ msgCtx->choiceNum = 3;
+ } else if (curChar != ' ') {
+ Font_LoadCharNES(play, curChar, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ }
+ }
+ }
+
+ decodedBufPos++;
+ msgCtx->msgBufPos++;
+ }
+}
diff --git a/src/code/z_message_tables.inc.c b/src/code/z_message_tables.inc.c
new file mode 100644
index 000000000..fb60e7a14
--- /dev/null
+++ b/src/code/z_message_tables.inc.c
@@ -0,0 +1,1172 @@
+#include "include/message_data_static.h"
+#include "PR/mbi.h"
+
+MessageTableEntry D_801C6B98[4590] = {
+ { 0, 0, 0x08000000 }, { 2, 0, 0x0800000C }, { 4, 0, 0x08000064 }, { 5, 0, 0x080000B8 },
+ { 6, 0, 0x08000110 }, { 7, 0, 0x08000168 }, { 8, 0, 0x080001C4 }, { 9, 0, 0x08000248 },
+ { 0xA, 0, 0x080002A8 }, { 0xB, 0, 0x08000310 }, { 0xC, 0, 0x0800031C }, { 0xD, 0, 0x080003E8 },
+ { 0xE, 0, 0x08000474 }, { 0xF, 0, 0x080004BC }, { 0x10, 0, 0x08000504 }, { 0x11, 0, 0x08000510 },
+ { 0x12, 0, 0x08000554 }, { 0x13, 0, 0x08000560 }, { 0x14, 0, 0x0800056C }, { 0x15, 0, 0x08000604 },
+ { 0x16, 0, 0x080006A0 }, { 0x17, 0, 0x0800073C }, { 0x18, 0, 0x080007D8 }, { 0x19, 0, 0x08000874 },
+ { 0x1A, 0, 0x08000940 }, { 0x1B, 0, 0x080009E8 }, { 0x1C, 0, 0x08000A84 }, { 0x1D, 0, 0x08000AD4 },
+ { 0x1E, 0, 0x08000B28 }, { 0x1F, 0, 0x08000B58 }, { 0x20, 0, 0x08000B88 }, { 0x21, 0, 0x08000BB8 },
+ { 0x22, 0, 0x08000BE8 }, { 0x23, 0, 0x08000C78 }, { 0x24, 0, 0x08000CD0 }, { 0x25, 0, 0x08000D30 },
+ { 0x26, 0, 0x08000DA4 }, { 0x27, 0, 0x08000E38 }, { 0x28, 0, 0x08000EB4 }, { 0x29, 0, 0x08000F88 },
+ { 0x2A, 0, 0x08001060 }, { 0x2B, 0, 0x0800113C }, { 0x2C, 0, 0x08001148 }, { 0x2D, 0, 0x08001154 },
+ { 0x2E, 0, 0x08001160 }, { 0x2F, 0, 0x08001210 }, { 0x30, 0, 0x0800121C }, { 0x31, 0, 0x08001228 },
+ { 0x32, 0, 0x08001234 }, { 0x33, 0, 0x080012D4 }, { 0x34, 0, 0x0800139C }, { 0x35, 0, 0x08001428 },
+ { 0x36, 0, 0x080014B0 }, { 0x37, 0, 0x08001554 }, { 0x38, 0, 0x08001560 }, { 0x39, 0, 0x08001624 },
+ { 0x3A, 0, 0x080016B8 }, { 0x3B, 0, 0x08001768 }, { 0x3C, 0, 0x08001814 }, { 0x3D, 0, 0x08001884 },
+ { 0x3E, 0, 0x080018E0 }, { 0x3F, 0, 0x080019DC }, { 0x40, 0, 0x08001A48 }, { 0x41, 0, 0x08001A54 },
+ { 0x42, 0, 0x08001B0C }, { 0x43, 0, 0x08001BF4 }, { 0x4C, 0, 0x08001CBC }, { 0x4D, 0, 0x08001DBC },
+ { 0x4E, 0, 0x08001DC8 }, { 0x50, 0, 0x08001DD4 }, { 0x51, 0, 0x08001EA4 }, { 0x52, 0, 0x08001EB0 },
+ { 0x53, 0, 0x08001EFC }, { 0x54, 0, 0x08001F08 }, { 0x55, 0, 0x08001F14 }, { 0x56, 0, 0x08001FB8 },
+ { 0x57, 0, 0x08002058 }, { 0x58, 0, 0x080020F8 }, { 0x59, 0, 0x080021A0 }, { 0x5A, 0, 0x08002290 },
+ { 0x5B, 0, 0x080022E4 }, { 0x5C, 0, 0x08002388 }, { 0x5D, 0, 0x08002434 }, { 0x5E, 0, 0x080024E8 },
+ { 0x5F, 0, 0x08002590 }, { 0x60, 0, 0x0800261C }, { 0x61, 0, 0x080026F0 }, { 0x62, 0, 0x080026FC },
+ { 0x63, 0, 0x08002760 }, { 0x64, 0, 0x080027CC }, { 0x65, 0, 0x080027D8 }, { 0x66, 0, 0x0800282C },
+ { 0x67, 0, 0x08002884 }, { 0x68, 0, 0x080028EC }, { 0x69, 0, 0x08002950 }, { 0x6A, 0, 0x080029CC },
+ { 0x6B, 0, 0x08002A24 }, { 0x6E, 0, 0x08002A7C }, { 0x6F, 0, 0x08002A88 }, { 0x70, 0, 0x08002B54 },
+ { 0x71, 0, 0x08002B60 }, { 0x72, 0, 0x08002B6C }, { 0x73, 0, 0x08002B78 }, { 0x74, 0, 0x08002B84 },
+ { 0x75, 0, 0x08002B90 }, { 0x76, 0, 0x08002B9C }, { 0x77, 0, 0x08002BA8 }, { 0x78, 0, 0x08002BB4 },
+ { 0x79, 0, 0x08002C98 }, { 0x7A, 0, 0x08002D54 }, { 0x7B, 0, 0x08002E14 }, { 0x7C, 0, 0x08002E90 },
+ { 0x7D, 0, 0x08002F20 }, { 0x7E, 0, 0x08002F9C }, { 0x7F, 0, 0x0800302C }, { 0x80, 0, 0x0800309C },
+ { 0x81, 0, 0x08003144 }, { 0x82, 0, 0x080031B0 }, { 0x83, 0, 0x08003224 }, { 0x84, 0, 0x08003298 },
+ { 0x85, 0, 0x08003324 }, { 0x86, 0, 0x08003370 }, { 0x87, 0, 0x08003444 }, { 0x88, 0, 0x080034F8 },
+ { 0x89, 0, 0x08003560 }, { 0x8A, 0, 0x080035F4 }, { 0x8B, 0, 0x080036B8 }, { 0x8C, 0, 0x08003710 },
+ { 0x8D, 0, 0x080037A0 }, { 0x8E, 0, 0x08003828 }, { 0x8F, 0, 0x080038E0 }, { 0x91, 0, 0x0800396C },
+ { 0x92, 0, 0x08003A44 }, { 0x93, 0, 0x08003B08 }, { 0x94, 0, 0x08003B60 }, { 0x95, 0, 0x08003B6C },
+ { 0x96, 0, 0x08003BC0 }, { 0x97, 0, 0x08003C1C }, { 0x98, 0, 0x08003C60 }, { 0x99, 0, 0x08003CA8 },
+ { 0x9A, 0, 0x08003CF4 }, { 0x9B, 0, 0x08003D40 }, { 0x9C, 0, 0x08003DE0 }, { 0x9D, 0, 0x08003E78 },
+ { 0x9E, 0, 0x08003F10 }, { 0x9F, 0, 0x08003FA8 }, { 0xA0, 0, 0x08003FB4 }, { 0xA1, 0, 0x0800401C },
+ { 0xA2, 0, 0x08004088 }, { 0xA3, 0, 0x08004094 }, { 0xA4, 0, 0x080040A0 }, { 0xA9, 0, 0x080040AC },
+ { 0xAA, 0, 0x08004130 }, { 0xAB, 0, 0x08004198 }, { 0xAC, 0, 0x08004240 }, { 0xAD, 0, 0x0800424C },
+ { 0xAE, 0, 0x08004258 }, { 0xAF, 0, 0x08004264 }, { 0xB0, 0, 0x08004270 }, { 0xB1, 0, 0x0800427C },
+ { 0xB2, 0, 0x08004288 }, { 0xB4, 0, 0x08004294 }, { 0xB5, 0, 0x08004354 }, { 0xB6, 0, 0x08004418 },
+ { 0xB7, 0, 0x080044E0 }, { 0xB8, 0, 0x080045A8 }, { 0xB9, 0, 0x08004670 }, { 0xBA, 0, 0x08004738 },
+ { 0xBB, 0, 0x08004744 }, { 0xBC, 0, 0x08004750 }, { 0xBD, 0, 0x0800475C }, { 0xBE, 0, 0x08004768 },
+ { 0xBF, 0, 0x08004774 }, { 0xC0, 0, 0x08004780 }, { 0xC4, 0, 0x0800478C }, { 0xC5, 0, 0x080047D0 },
+ { 0xC6, 0, 0x08004850 }, { 0xC7, 0, 0x080048D0 }, { 0xC8, 0, 0x08004954 }, { 0xC9, 0, 0x08004A5C },
+ { 0xCA, 0, 0x08004AFC }, { 0xCB, 0, 0x08004C14 }, { 0xCC, 0, 0x08004C78 }, { 0xCD, 0, 0x08004CDC },
+ { 0xF2, 0, 0x08004D8C }, { 0xF3, 0, 0x08004DC8 }, { 0xF4, 0, 0x08004E3C }, { 0xF5, 0, 0x08004E8C },
+ { 0xF6, 0, 0x08004EDC }, { 0xF7, 0, 0x08004F30 }, { 0xF8, 0, 0x08004F70 }, { 0xF9, 0, 0x08004F9C },
+ { 0xFA, 0, 0x08005034 }, { 0xFB, 0, 0x08005088 }, { 0xFC, 0, 0x080050FC }, { 0xFD, 0, 0x0800515C },
+ { 0xFE, 0, 0x08005184 }, { 0xFF, 0, 0x080051B8 }, { 0x100, 0, 0x08005214 }, { 0x101, 0, 0x08005230 },
+ { 0x102, 0, 0x0800524C }, { 0x103, 0, 0x08005268 }, { 0x104, 0, 0x08005284 }, { 0x105, 0, 0x080052A0 },
+ { 0x106, 0, 0x080052B8 }, { 0x107, 0, 0x080052D4 }, { 0x108, 0, 0x080052F8 }, { 0x109, 0, 0x0800531C },
+ { 0x10A, 0, 0x0800533C }, { 0x10B, 0, 0x08005358 }, { 0x10C, 0, 0x0800537C }, { 0x10D, 0, 0x08005390 },
+ { 0x10E, 0, 0x080053A8 }, { 0x10F, 0, 0x080053C4 }, { 0x110, 0, 0x080053DC }, { 0x111, 0, 0x080053FC },
+ { 0x112, 0, 0x08005414 }, { 0x113, 0, 0x0800542C }, { 0x114, 0, 0x08005450 }, { 0x115, 0, 0x08005470 },
+ { 0x116, 0, 0x0800548C }, { 0x117, 0, 0x080054A8 }, { 0x118, 0, 0x080054BC }, { 0x119, 0, 0x080054D4 },
+ { 0x11A, 0, 0x080054F4 }, { 0x11B, 0, 0x08005518 }, { 0x11C, 0, 0x0800553C }, { 0x11D, 0, 0x0800555C },
+ { 0x11E, 0, 0x08005578 }, { 0x11F, 0, 0x08005598 }, { 0x120, 0, 0x080055B4 }, { 0x121, 0, 0x080055CC },
+ { 0x122, 0, 0x080055E8 }, { 0x123, 0, 0x08005604 }, { 0x124, 0, 0x08005620 }, { 0x125, 0, 0x08005638 },
+ { 0x126, 0, 0x0800564C }, { 0x127, 0, 0x08005668 }, { 0x129, 0, 0x08005684 }, { 0x12A, 0, 0x0800569C },
+ { 0x12B, 0, 0x080056B8 }, { 0x12C, 0, 0x080056D4 }, { 0x12D, 0, 0x080056F0 }, { 0x12E, 0, 0x0800570C },
+ { 0x12F, 0, 0x08005724 }, { 0x130, 0, 0x0800573C }, { 0x131, 0, 0x08005758 }, { 0x132, 0, 0x08005770 },
+ { 0x134, 0, 0x08005788 }, { 0x135, 0, 0x080057A4 }, { 0x136, 0, 0x080057C0 }, { 0x137, 0, 0x080057D8 },
+ { 0x138, 0, 0x080057F4 }, { 0x139, 0, 0x08005814 }, { 0x13A, 0, 0x0800582C }, { 0x13B, 0, 0x0800584C },
+ { 0x13D, 0, 0x08005868 }, { 0x13E, 0, 0x08005884 }, { 0x13F, 0, 0x080058A0 }, { 0x140, 0, 0x080058C4 },
+ { 0x141, 0, 0x080058DC }, { 0x142, 0, 0x080058F4 }, { 0x143, 0, 0x08005918 }, { 0x144, 0, 0x08005934 },
+ { 0x145, 0, 0x08005954 }, { 0x146, 0, 0x08005970 }, { 0x147, 0, 0x08005988 }, { 0x148, 0, 0x080059A4 },
+ { 0x149, 0, 0x080059C0 }, { 0x200, 0, 0x080059D8 }, { 0x201, 0, 0x08005A54 }, { 0x202, 0, 0x08005B48 },
+ { 0x203, 0, 0x08005B74 }, { 0x204, 0, 0x08005BE4 }, { 0x205, 0, 0x08005C38 }, { 0x206, 0, 0x08005C94 },
+ { 0x207, 0, 0x08005D04 }, { 0x208, 0, 0x08005D2C }, { 0x209, 0, 0x08005D64 }, { 0x20A, 0, 0x08005DB4 },
+ { 0x20B, 0, 0x08005E08 }, { 0x20C, 0, 0x08005E14 }, { 0x20D, 0, 0x08005E60 }, { 0x20E, 0, 0x08005ECC },
+ { 0x20F, 0, 0x08005ED8 }, { 0x210, 0, 0x08005F74 }, { 0x211, 0, 0x08005FAC }, { 0x212, 0, 0x08005FD4 },
+ { 0x213, 0, 0x0800602C }, { 0x214, 0, 0x08006050 }, { 0x215, 0, 0x08006124 }, { 0x216, 0, 0x08006358 },
+ { 0x217, 0, 0x080065B8 }, { 0x218, 0, 0x08006620 }, { 0x219, 0, 0x0800668C }, { 0x21A, 0, 0x08006720 },
+ { 0x21B, 0, 0x0800674C }, { 0x21D, 0, 0x08006774 }, { 0x21E, 0, 0x080067CC }, { 0x21F, 0, 0x08006874 },
+ { 0x220, 0, 0x080068E0 }, { 0x221, 0, 0x08006978 }, { 0x222, 0, 0x08006A04 }, { 0x223, 0, 0x08006A48 },
+ { 0x224, 0, 0x08006AE8 }, { 0x225, 0, 0x08006B54 }, { 0x226, 0, 0x08006BB0 }, { 0x227, 0, 0x08006BE8 },
+ { 0x228, 0, 0x08006D58 }, { 0x229, 0, 0x08006E18 }, { 0x22A, 0, 0x08006EA0 }, { 0x22B, 0, 0x08006F00 },
+ { 0x22C, 0, 0x08006F44 }, { 0x22D, 0, 0x08006F60 }, { 0x22E, 0, 0x08006FB0 }, { 0x22F, 0, 0x08006FC8 },
+ { 0x230, 0, 0x08007010 }, { 0x231, 0, 0x080070C0 }, { 0x232, 0, 0x08007110 }, { 0x233, 0, 0x08007158 },
+ { 0x234, 0, 0x080071A4 }, { 0x235, 0, 0x08007208 }, { 0x236, 0, 0x0800725C }, { 0x237, 0, 0x080072AC },
+ { 0x238, 0, 0x0800730C }, { 0x239, 0, 0x0800734C }, { 0x23A, 0, 0x08007400 }, { 0x23B, 0, 0x08007468 },
+ { 0x23C, 0, 0x08007500 }, { 0x23D, 0, 0x08007538 }, { 0x23E, 0, 0x080075E4 }, { 0x23F, 0, 0x080075F0 },
+ { 0x240, 0, 0x0800765C }, { 0x241, 0, 0x080076D0 }, { 0x242, 0, 0x08007744 }, { 0x243, 0, 0x080077B0 },
+ { 0x244, 0, 0x08007830 }, { 0x245, 0, 0x08007888 }, { 0x246, 0, 0x080078B4 }, { 0x247, 0, 0x08007904 },
+ { 0x248, 0, 0x08007950 }, { 0x249, 0, 0x080079A0 }, { 0x24A, 0, 0x080079F0 }, { 0x24B, 0, 0x08007A30 },
+ { 0x24C, 0, 0x08007A78 }, { 0x24D, 0, 0x08007AD8 }, { 0x24E, 0, 0x08007B54 }, { 0x24F, 0, 0x08007BE8 },
+ { 0x250, 0, 0x08007C88 }, { 0x251, 0, 0x08007CEC }, { 0x252, 0, 0x08007D18 }, { 0x253, 0, 0x08007D68 },
+ { 0x254, 0, 0x08007DAC }, { 0x255, 0, 0x08007E04 }, { 0x256, 0, 0x08007E4C }, { 0x257, 0, 0x08007EA4 },
+ { 0x258, 0, 0x08007F00 }, { 0x25A, 0, 0x08007F58 }, { 0x25B, 0, 0x08007FA0 }, { 0x25C, 0, 0x08007FDC },
+ { 0x25D, 0, 0x08007FF8 }, { 0x25E, 0, 0x08008024 }, { 0x25F, 0, 0x080080E4 }, { 0x260, 0, 0x0800818C },
+ { 0x261, 0, 0x080081F8 }, { 0x262, 0, 0x08008288 }, { 0x263, 0, 0x08008304 }, { 0x264, 0, 0x08008344 },
+ { 0x265, 0, 0x08008420 }, { 0x302, 0, 0x08008498 }, { 0x303, 0, 0x080085DC }, { 0x304, 0, 0x08008660 },
+ { 0x305, 0, 0x080086B4 }, { 0x306, 0, 0x08008720 }, { 0x307, 0, 0x0800872C }, { 0x308, 0, 0x0800875C },
+ { 0x309, 0, 0x08008788 }, { 0x30A, 0, 0x080087BC }, { 0x30B, 0, 0x080087E8 }, { 0x30C, 0, 0x08008824 },
+ { 0x30D, 0, 0x08008894 }, { 0x30E, 0, 0x080088E4 }, { 0x30F, 0, 0x08008914 }, { 0x310, 0, 0x08008970 },
+ { 0x311, 0, 0x080089BC }, { 0x312, 0, 0x080089F0 }, { 0x313, 0, 0x08008A64 }, { 0x314, 0, 0x08008AA4 },
+ { 0x315, 0, 0x08008B0C }, { 0x316, 0, 0x08008B64 }, { 0x317, 0, 0x08008BA4 }, { 0x318, 0, 0x08008BF0 },
+ { 0x319, 0, 0x08008C48 }, { 0x31A, 0, 0x08008C84 }, { 0x31B, 0, 0x08008CD0 }, { 0x31C, 0, 0x08008D10 },
+ { 0x31D, 0, 0x08008D5C }, { 0x31E, 0, 0x08008DCC }, { 0x31F, 0, 0x08008E2C }, { 0x320, 0, 0x08008EBC },
+ { 0x321, 0, 0x08008F30 }, { 0x322, 0, 0x08008F60 }, { 0x323, 0, 0x08008F9C }, { 0x324, 0, 0x08008FFC },
+ { 0x325, 0, 0x08009044 }, { 0x326, 0, 0x080090A8 }, { 0x327, 0, 0x080090F8 }, { 0x328, 0, 0x08009140 },
+ { 0x329, 0, 0x08009188 }, { 0x32A, 0, 0x080091F0 }, { 0x32B, 0, 0x08009240 }, { 0x32C, 0, 0x0800928C },
+ { 0x32D, 0, 0x080092F0 }, { 0x32E, 0, 0x08009318 }, { 0x32F, 0, 0x08009358 }, { 0x330, 0, 0x0800939C },
+ { 0x331, 0, 0x080093E4 }, { 0x332, 0, 0x08009440 }, { 0x333, 0, 0x0800949C }, { 0x334, 0, 0x08009518 },
+ { 0x335, 0, 0x0800955C }, { 0x336, 0, 0x08009598 }, { 0x337, 0, 0x08009658 }, { 0x338, 0, 0x08009680 },
+ { 0x339, 0, 0x080096A8 }, { 0x33A, 0, 0x080096C8 }, { 0x33B, 0, 0x080096EC }, { 0x33C, 0, 0x0800973C },
+ { 0x33D, 0, 0x08009778 }, { 0x33E, 0, 0x080097BC }, { 0x33F, 0, 0x08009930 }, { 0x340, 0, 0x08009C50 },
+ { 0x341, 0, 0x08009CC4 }, { 0x342, 0, 0x08009D30 }, { 0x343, 0, 0x08009D58 }, { 0x3E8, 0, 0x08009D7C },
+ { 0x3E9, 0, 0x08009DCC }, { 0x3EA, 0, 0x08009DE8 }, { 0x3EB, 0, 0x08009E2C }, { 0x3EC, 0, 0x08009E54 },
+ { 0x3ED, 0, 0x08009EB8 }, { 0x3EE, 0, 0x08009EFC }, { 0x3EF, 0, 0x08009F6C }, { 0x3F0, 0, 0x08009FA0 },
+ { 0x3F1, 0, 0x08009FF0 }, { 0x3F2, 0, 0x0800A030 }, { 0x3F3, 0, 0x0800A090 }, { 0x3F4, 0, 0x0800A0D0 },
+ { 0x3F5, 0, 0x0800A0F8 }, { 0x3F6, 0, 0x0800A158 }, { 0x3F7, 0, 0x0800A190 }, { 0x3F8, 0, 0x0800A1BC },
+ { 0x3F9, 0, 0x0800A214 }, { 0x3FA, 0, 0x0800A25C }, { 0x3FB, 0, 0x0800A29C }, { 0x3FC, 0, 0x0800A2D8 },
+ { 0x3FD, 0, 0x0800A31C }, { 0x3FE, 0, 0x0800A40C }, { 0x3FF, 0, 0x0800A478 }, { 0x400, 0, 0x0800A4EC },
+ { 0x401, 0, 0x0800A528 }, { 0x402, 0, 0x0800A560 }, { 0x403, 0, 0x0800A5D4 }, { 0x404, 0, 0x0800A608 },
+ { 0x405, 0, 0x0800A63C }, { 0x406, 0, 0x0800A680 }, { 0x407, 0, 0x0800A6B8 }, { 0x408, 0, 0x0800A70C },
+ { 0x44C, 0, 0x0800A75C }, { 0x44D, 0, 0x0800A850 }, { 0x44E, 0, 0x0800A8B8 }, { 0x44F, 0, 0x0800A904 },
+ { 0x450, 0, 0x0800A924 }, { 0x451, 0, 0x0800A974 }, { 0x452, 0, 0x0800A9E8 }, { 0x453, 0, 0x0800AA24 },
+ { 0x454, 0, 0x0800AA7C }, { 0x455, 0, 0x0800AAB4 }, { 0x456, 0, 0x0800AB10 }, { 0x457, 0, 0x0800AB44 },
+ { 0x458, 0, 0x0800AB78 }, { 0x459, 0, 0x0800AC0C }, { 0x45A, 0, 0x0800AC84 }, { 0x45B, 0, 0x0800ACD0 },
+ { 0x45C, 0, 0x0800AD4C }, { 0x45D, 0, 0x0800ADC8 }, { 0x45E, 0, 0x0800AE68 }, { 0x45F, 0, 0x0800AEBC },
+ { 0x460, 0, 0x0800AF54 }, { 0x461, 0, 0x0800AF98 }, { 0x462, 0, 0x0800AFC8 }, { 0x463, 0, 0x0800AFE8 },
+ { 0x464, 0, 0x0800B044 }, { 0x465, 0, 0x0800B094 }, { 0x466, 0, 0x0800B0CC }, { 0x467, 0, 0x0800B0FC },
+ { 0x468, 0, 0x0800B178 }, { 0x469, 0, 0x0800B1B8 }, { 0x46A, 0, 0x0800B1F0 }, { 0x46B, 0, 0x0800B244 },
+ { 0x46C, 0, 0x0800B258 }, { 0x46D, 0, 0x0800B2B4 }, { 0x46E, 0, 0x0800B324 }, { 0x46F, 0, 0x0800B374 },
+ { 0x470, 0, 0x0800B3A8 }, { 0x471, 0, 0x0800B3F4 }, { 0x472, 0, 0x0800B428 }, { 0x473, 0, 0x0800B484 },
+ { 0x474, 0, 0x0800B4A4 }, { 0x475, 0, 0x0800B514 }, { 0x476, 0, 0x0800B570 }, { 0x477, 0, 0x0800B5FC },
+ { 0x478, 0, 0x0800B65C }, { 0x479, 0, 0x0800B6CC }, { 0x47A, 0, 0x0800B6FC }, { 0x47B, 0, 0x0800B760 },
+ { 0x47C, 0, 0x0800B78C }, { 0x47D, 0, 0x0800B7DC }, { 0x47E, 0, 0x0800B82C }, { 0x4B0, 0, 0x0800B854 },
+ { 0x4B1, 0, 0x0800B8B0 }, { 0x4B2, 0, 0x0800B8F8 }, { 0x4B3, 0, 0x0800B93C }, { 0x4B4, 0, 0x0800B994 },
+ { 0x4B5, 0, 0x0800B9D0 }, { 0x4B6, 0, 0x0800BA04 }, { 0x4B7, 0, 0x0800BA94 }, { 0x4B8, 0, 0x0800BAC4 },
+ { 0x4B9, 0, 0x0800BB4C }, { 0x4BA, 0, 0x0800BB7C }, { 0x4BB, 0, 0x0800BBFC }, { 0x4BC, 0, 0x0800BC28 },
+ { 0x4BD, 0, 0x0800BCA4 }, { 0x4BE, 0, 0x0800BCD0 }, { 0x4BF, 0, 0x0800BD58 }, { 0x4C0, 0, 0x0800BD84 },
+ { 0x4C1, 0, 0x0800BE18 }, { 0x4C2, 0, 0x0800BE54 }, { 0x4C3, 0, 0x0800BED0 }, { 0x4C4, 0, 0x0800BEEC },
+ { 0x4C5, 0, 0x0800BF5C }, { 0x4C6, 0, 0x0800BF78 }, { 0x4C7, 0, 0x0800BFF4 }, { 0x4C8, 0, 0x0800C018 },
+ { 0x4C9, 0, 0x0800C0A4 }, { 0x4CA, 0, 0x0800C0D8 }, { 0x4CB, 0, 0x0800C140 }, { 0x4CC, 0, 0x0800C158 },
+ { 0x4CD, 0, 0x0800C1E0 }, { 0x4CE, 0, 0x0800C220 }, { 0x4CF, 0, 0x0800C29C }, { 0x4D0, 0, 0x0800C2D0 },
+ { 0x4D1, 0, 0x0800C34C }, { 0x4D2, 0, 0x0800C378 }, { 0x4D3, 0, 0x0800C400 }, { 0x4D4, 0, 0x0800C448 },
+ { 0x4D5, 0, 0x0800C4BC }, { 0x4D6, 0, 0x0800C4E0 }, { 0x4D7, 0, 0x0800C560 }, { 0x4D8, 0, 0x0800C598 },
+ { 0x4D9, 0, 0x0800C604 }, { 0x4DA, 0, 0x0800C63C }, { 0x4DB, 0, 0x0800C6B4 }, { 0x4DC, 0, 0x0800C714 },
+ { 0x4DD, 0, 0x0800C784 }, { 0x4DE, 0, 0x0800C7B4 }, { 0x4DF, 0, 0x0800C81C }, { 0x4E0, 0, 0x0800C840 },
+ { 0x4E1, 0, 0x0800C8AC }, { 0x4E2, 0, 0x0800C8CC }, { 0x4E3, 0, 0x0800C95C }, { 0x4E4, 0, 0x0800C990 },
+ { 0x4E5, 0, 0x0800CA04 }, { 0x4E6, 0, 0x0800CA20 }, { 0x4E7, 0, 0x0800CA9C }, { 0x4E8, 0, 0x0800CAC0 },
+ { 0x4E9, 0, 0x0800CB48 }, { 0x4EA, 0, 0x0800CB64 }, { 0x4EB, 0, 0x0800CBE8 }, { 0x4EC, 0, 0x0800CC04 },
+ { 0x4ED, 0, 0x0800CC64 }, { 0x4EE, 0, 0x0800CC88 }, { 0x4EF, 0, 0x0800CCE8 }, { 0x4F0, 0, 0x0800CD0C },
+ { 0x4F1, 0, 0x0800CD7C }, { 0x514, 0, 0x0800CDA4 }, { 0x515, 0, 0x0800CED0 }, { 0x516, 0, 0x0800CFE8 },
+ { 0x517, 0, 0x0800D094 }, { 0x518, 0, 0x0800D128 }, { 0x519, 0, 0x0800D1C8 }, { 0x51A, 0, 0x0800D254 },
+ { 0x51B, 0, 0x0800D2A8 }, { 0x51C, 0, 0x0800D318 }, { 0x51D, 0, 0x0800D360 }, { 0x51E, 0, 0x0800D3D0 },
+ { 0x51F, 0, 0x0800D418 }, { 0x520, 0, 0x0800D488 }, { 0x521, 0, 0x0800D534 }, { 0x522, 0, 0x0800D5BC },
+ { 0x523, 0, 0x0800D65C }, { 0x524, 0, 0x0800D6E4 }, { 0x525, 0, 0x0800D728 }, { 0x526, 0, 0x0800D794 },
+ { 0x527, 0, 0x0800D7D0 }, { 0x528, 0, 0x0800D834 }, { 0x529, 0, 0x0800D878 }, { 0x52A, 0, 0x0800D8E4 },
+ { 0x52B, 0, 0x0800D98C }, { 0x52C, 0, 0x0800DA2C }, { 0x52D, 0, 0x0800DAC8 }, { 0x52E, 0, 0x0800DB6C },
+ { 0x52F, 0, 0x0800DBD4 }, { 0x530, 0, 0x0800DC5C }, { 0x531, 0, 0x0800DCC4 }, { 0x532, 0, 0x0800DD54 },
+ { 0x533, 0, 0x0800DDA4 }, { 0x534, 0, 0x0800DE1C }, { 0x535, 0, 0x0800DEC8 }, { 0x536, 0, 0x0800DF50 },
+ { 0x537, 0, 0x0800DFF0 }, { 0x538, 0, 0x0800E078 }, { 0x539, 0, 0x0800E0BC }, { 0x53A, 0, 0x0800E128 },
+ { 0x53B, 0, 0x0800E16C }, { 0x53C, 0, 0x0800E1D8 }, { 0x53D, 0, 0x0800E21C }, { 0x53E, 0, 0x0800E288 },
+ { 0x53F, 0, 0x0800E334 }, { 0x540, 0, 0x0800E414 }, { 0x541, 0, 0x0800E474 }, { 0x542, 0, 0x0800E50C },
+ { 0x543, 0, 0x0800E57C }, { 0x544, 0, 0x0800E614 }, { 0x545, 0, 0x0800E678 }, { 0x546, 0, 0x0800E728 },
+ { 0x547, 0, 0x0800E794 }, { 0x548, 0, 0x0800E7F4 }, { 0x549, 0, 0x0800E86C }, { 0x54A, 0, 0x0800E8D8 },
+ { 0x54B, 0, 0x0800E934 }, { 0x54C, 0, 0x0800E9B4 }, { 0x54D, 0, 0x0800EA28 }, { 0x54E, 0, 0x0800EB08 },
+ { 0x54F, 0, 0x0800EB60 }, { 0x550, 0, 0x0800EBC8 }, { 0x551, 0, 0x0800EC2C }, { 0x552, 0, 0x0800ECAC },
+ { 0x553, 0, 0x0800ED1C }, { 0x554, 0, 0x0800ED9C }, { 0x555, 0, 0x0800EE00 }, { 0x556, 0, 0x0800EEEC },
+ { 0x557, 0, 0x0800EF4C }, { 0x558, 0, 0x0800EFBC }, { 0x559, 0, 0x0800F03C }, { 0x55A, 0, 0x0800F0B4 },
+ { 0x55B, 0, 0x0800F110 }, { 0x55C, 0, 0x0800F188 }, { 0x55D, 0, 0x0800F258 }, { 0x55E, 0, 0x0800F300 },
+ { 0x55F, 0, 0x0800F398 }, { 0x560, 0, 0x0800F44C }, { 0x561, 0, 0x0800F570 }, { 0x562, 0, 0x0800F688 },
+ { 0x563, 0, 0x0800F7A8 }, { 0x564, 0, 0x0800F8B8 }, { 0x565, 0, 0x0800F9D8 }, { 0x566, 0, 0x0800FAEC },
+ { 0x567, 0, 0x0800FB84 }, { 0x568, 0, 0x0800FC34 }, { 0x569, 0, 0x0800FCC8 }, { 0x56A, 0, 0x0800FD78 },
+ { 0x56B, 0, 0x0800FE0C }, { 0x56C, 0, 0x0800FEBC }, { 0x56D, 0, 0x08010008 }, { 0x56E, 0, 0x08010168 },
+ { 0x56F, 0, 0x080102C4 }, { 0x570, 0, 0x0801042C }, { 0x571, 0, 0x08010584 }, { 0x572, 0, 0x080106EC },
+ { 0x573, 0, 0x08010844 }, { 0x578, 0, 0x080109A4 }, { 0x579, 0, 0x08010A70 }, { 0x57A, 0, 0x08010B28 },
+ { 0x57B, 0, 0x08010C7C }, { 0x57C, 0, 0x08010D98 }, { 0x57D, 0, 0x08010EC4 }, { 0x57E, 0, 0x08010FF4 },
+ { 0x57F, 0, 0x080110E4 }, { 0x580, 0, 0x080111D0 }, { 0x582, 0, 0x08011260 }, { 0x583, 0, 0x08011304 },
+ { 0x584, 0, 0x08011374 }, { 0x585, 0, 0x08011408 }, { 0x586, 0, 0x080114BC }, { 0x587, 0, 0x08011528 },
+ { 0x588, 0, 0x080115C0 }, { 0x589, 0, 0x08011674 }, { 0x58A, 0, 0x080116E4 }, { 0x58B, 0, 0x08011760 },
+ { 0x58C, 0, 0x08011820 }, { 0x58D, 0, 0x08011884 }, { 0x58E, 0, 0x0801192C }, { 0x58F, 0, 0x08011A20 },
+ { 0x590, 0, 0x08011B08 }, { 0x591, 0, 0x08011B68 }, { 0x592, 0, 0x08011BA4 }, { 0x593, 0, 0x08011BE4 },
+ { 0x594, 0, 0x08011C20 }, { 0x595, 0, 0x08011D00 }, { 0x59C, 0, 0x08011DC8 }, { 0x59D, 0, 0x08011E78 },
+ { 0x59E, 0, 0x08011EB4 }, { 0x59F, 0, 0x08011EFC }, { 0x5A0, 0, 0x08011FB4 }, { 0x5A1, 0, 0x08012068 },
+ { 0x5A2, 0, 0x080120A4 }, { 0x5A3, 0, 0x080120E4 }, { 0x5A4, 0, 0x08012198 }, { 0x5A5, 0, 0x08012248 },
+ { 0x5A6, 0, 0x08012284 }, { 0x5A7, 0, 0x080122C4 }, { 0x5A8, 0, 0x08012380 }, { 0x5A9, 0, 0x0801243C },
+ { 0x5AA, 0, 0x08012478 }, { 0x5DC, 0, 0x080124B8 }, { 0x5DD, 0, 0x08012548 }, { 0x5DE, 0, 0x080125BC },
+ { 0x5DF, 0, 0x08012678 }, { 0x5E0, 0, 0x08012730 }, { 0x5E1, 0, 0x0801276C }, { 0x5E2, 0, 0x08012784 },
+ { 0x5E3, 0, 0x080127C4 }, { 0x5E4, 0, 0x080128A8 }, { 0x5E5, 0, 0x080128E0 }, { 0x5E6, 0, 0x0801294C },
+ { 0x5E7, 0, 0x08012970 }, { 0x5E8, 0, 0x080129A4 }, { 0x5E9, 0, 0x08012A5C }, { 0x5EA, 0, 0x08012ACC },
+ { 0x5EB, 0, 0x08012B4C }, { 0x5EC, 0, 0x08012BF0 }, { 0x5ED, 0, 0x08012CE0 }, { 0x5EE, 0, 0x08012D84 },
+ { 0x5EF, 0, 0x08012DE4 }, { 0x5F0, 0, 0x08012E1C }, { 0x5F1, 0, 0x08012E7C }, { 0x5F2, 0, 0x08012EF0 },
+ { 0x5F3, 0, 0x08012FAC }, { 0x5F4, 0, 0x08013060 }, { 0x5F5, 0, 0x080130F4 }, { 0x5F6, 0, 0x0801315C },
+ { 0x5F7, 0, 0x08013210 }, { 0x5F8, 0, 0x08013258 }, { 0x60E, 0, 0x080132B0 }, { 0x60F, 0, 0x08013368 },
+ { 0x610, 0, 0x08013470 }, { 0x611, 0, 0x08013530 }, { 0x612, 0, 0x080135F8 }, { 0x613, 0, 0x08013680 },
+ { 0x614, 0, 0x080137D0 }, { 0x615, 0, 0x0801386C }, { 0x616, 0, 0x08013944 }, { 0x617, 0, 0x080139B8 },
+ { 0x618, 0, 0x08013A44 }, { 0x619, 0, 0x08013AA8 }, { 0x61A, 0, 0x08013BFC }, { 0x61B, 0, 0x08013C5C },
+ { 0x61C, 0, 0x08013CB0 }, { 0x61D, 0, 0x08013D00 }, { 0x61E, 0, 0x08013D60 }, { 0x61F, 0, 0x08013DAC },
+ { 0x620, 0, 0x08013DEC }, { 0x621, 0, 0x08013E4C }, { 0x622, 0, 0x08013E80 }, { 0x623, 0, 0x08013ED8 },
+ { 0x624, 0, 0x08013F24 }, { 0x625, 0, 0x08013FEC }, { 0x626, 0, 0x08014010 }, { 0x627, 0, 0x08014064 },
+ { 0x628, 0, 0x080140C4 }, { 0x629, 0, 0x08014170 }, { 0x62A, 0, 0x08014208 }, { 0x62B, 0, 0x080142D0 },
+ { 0x62C, 0, 0x08014398 }, { 0x640, 0, 0x0801454C }, { 0x641, 0, 0x0801458C }, { 0x642, 0, 0x080145B4 },
+ { 0x644, 0, 0x080145F0 }, { 0x645, 0, 0x08014608 }, { 0x646, 0, 0x08014648 }, { 0x647, 0, 0x080146B0 },
+ { 0x648, 0, 0x080146D4 }, { 0x649, 0, 0x08014760 }, { 0x64A, 0, 0x08014798 }, { 0x64B, 0, 0x08014850 },
+ { 0x64C, 0, 0x08014898 }, { 0x64D, 0, 0x080148B4 }, { 0x64E, 0, 0x08014924 }, { 0x64F, 0, 0x08014988 },
+ { 0x650, 0, 0x080149F0 }, { 0x651, 0, 0x08014A50 }, { 0x652, 0, 0x08014A8C }, { 0x653, 0, 0x08014AF4 },
+ { 0x654, 0, 0x08014B34 }, { 0x655, 0, 0x08014B9C }, { 0x656, 0, 0x08014BD8 }, { 0x657, 0, 0x08014C38 },
+ { 0x658, 0, 0x08014C78 }, { 0x659, 0, 0x08014CBC }, { 0x65A, 0, 0x08014D10 }, { 0x65B, 0, 0x08014D94 },
+ { 0x65C, 0, 0x08014E68 }, { 0x65D, 0, 0x08014F18 }, { 0x65E, 0, 0x08014F5C }, { 0x65F, 0, 0x08014F88 },
+ { 0x660, 0, 0x08014FD0 }, { 0x661, 0, 0x08015024 }, { 0x662, 0, 0x080150F0 }, { 0x663, 0, 0x08015188 },
+ { 0x664, 0, 0x080151AC }, { 0x665, 0, 0x080151E4 }, { 0x666, 0, 0x08015248 }, { 0x667, 0, 0x0801529C },
+ { 0x668, 0, 0x080152CC }, { 0x669, 0, 0x0801532C }, { 0x66A, 0, 0x08015390 }, { 0x66B, 0, 0x080153E4 },
+ { 0x66C, 0, 0x08015450 }, { 0x66D, 0, 0x080154BC }, { 0x66E, 0, 0x08015550 }, { 0x66F, 0, 0x080155C0 },
+ { 0x670, 0, 0x08015600 }, { 0x671, 0, 0x08015634 }, { 0x672, 0, 0x0801568C }, { 0x673, 0, 0x080156C8 },
+ { 0x674, 0, 0x0801574C }, { 0x675, 0, 0x08015784 }, { 0x676, 0, 0x080157F8 }, { 0x677, 0, 0x0801588C },
+ { 0x678, 0, 0x080158E4 }, { 0x679, 0, 0x08015940 }, { 0x67A, 0, 0x08015994 }, { 0x67B, 0, 0x080159E8 },
+ { 0x67C, 0, 0x08015A48 }, { 0x67D, 0, 0x08015B58 }, { 0x67E, 0, 0x08015C04 }, { 0x67F, 0, 0x08015C50 },
+ { 0x680, 0, 0x08015D64 }, { 0x681, 0, 0x08015E40 }, { 0x682, 0, 0x08015ED0 }, { 0x683, 0, 0x08015F00 },
+ { 0x684, 0, 0x08015F90 }, { 0x685, 0, 0x08015FCC }, { 0x686, 0, 0x08016020 }, { 0x687, 0, 0x08016078 },
+ { 0x688, 0, 0x080160AC }, { 0x689, 0, 0x08016104 }, { 0x68A, 0, 0x08016130 }, { 0x6A4, 0, 0x08016184 },
+ { 0x6A5, 0, 0x080161B8 }, { 0x6A6, 0, 0x0801620C }, { 0x6A7, 0, 0x08016248 }, { 0x6A8, 0, 0x080162A0 },
+ { 0x6A9, 0, 0x080162C8 }, { 0x6AA, 0, 0x0801634C }, { 0x6AB, 0, 0x08016398 }, { 0x6AC, 0, 0x080163FC },
+ { 0x6AD, 0, 0x08016478 }, { 0x6AE, 0, 0x080164B4 }, { 0x6AF, 0, 0x08016508 }, { 0x6B0, 0, 0x08016548 },
+ { 0x6B1, 0, 0x080165C0 }, { 0x6B2, 0, 0x08016600 }, { 0x6B3, 0, 0x08016674 }, { 0x6B4, 0, 0x080166B4 },
+ { 0x6B5, 0, 0x0801671C }, { 0x6B6, 0, 0x08016758 }, { 0x6B7, 0, 0x080167C0 }, { 0x6B8, 0, 0x080167F8 },
+ { 0x6B9, 0, 0x08016858 }, { 0x6BA, 0, 0x08016894 }, { 0x6BB, 0, 0x08016900 }, { 0x6BC, 0, 0x0801693C },
+ { 0x6BD, 0, 0x0801698C }, { 0x6BE, 0, 0x080169CC }, { 0x6BF, 0, 0x08016A04 }, { 0x6C0, 0, 0x08016A28 },
+ { 0x6C1, 0, 0x08016A7C }, { 0x6C2, 0, 0x08016A98 }, { 0x6C3, 0, 0x08016AC8 }, { 0x6C4, 0, 0x08016AE4 },
+ { 0x6C5, 0, 0x08016B2C }, { 0x6C6, 0, 0x08016B84 }, { 0x6C7, 0, 0x08016BC8 }, { 0x6C8, 0, 0x08016BE0 },
+ { 0x6C9, 0, 0x08016C34 }, { 0x6CA, 0, 0x08016C94 }, { 0x6CB, 0, 0x08016CD0 }, { 0x6CC, 0, 0x08016D24 },
+ { 0x6CD, 0, 0x08016D64 }, { 0x6CE, 0, 0x08016DC8 }, { 0x6CF, 0, 0x08016E08 }, { 0x6D0, 0, 0x08016E6C },
+ { 0x6D1, 0, 0x08016EAC }, { 0x6D2, 0, 0x08016F14 }, { 0x6D3, 0, 0x08016F50 }, { 0x6D4, 0, 0x08016FD0 },
+ { 0x6D5, 0, 0x08017008 }, { 0x6D6, 0, 0x08017084 }, { 0x6D7, 0, 0x080170C0 }, { 0x6D8, 0, 0x08017110 },
+ { 0x6D9, 0, 0x0801714C }, { 0x6DA, 0, 0x080171A4 }, { 0x6DB, 0, 0x080171E0 }, { 0x6DC, 0, 0x08017218 },
+ { 0x6DD, 0, 0x08017264 }, { 0x6DE, 0, 0x080172E0 }, { 0x708, 0, 0x08017330 }, { 0x709, 0, 0x080173C4 },
+ { 0x70A, 0, 0x0801741C }, { 0x70B, 0, 0x080174B4 }, { 0x70C, 0, 0x0801753C }, { 0x70D, 0, 0x08017564 },
+ { 0x70E, 0, 0x0801758C }, { 0x70F, 0, 0x080175FC }, { 0x710, 0, 0x08017650 }, { 0x711, 0, 0x08017748 },
+ { 0x712, 0, 0x0801775C }, { 0x713, 0, 0x080177B0 }, { 0x714, 0, 0x080177D8 }, { 0x715, 0, 0x0801781C },
+ { 0x716, 0, 0x0801787C }, { 0x717, 0, 0x08017A6C }, { 0x718, 0, 0x08017AB8 }, { 0x719, 0, 0x08017AE8 },
+ { 0x71A, 0, 0x08017B48 }, { 0x71B, 0, 0x08017BA0 }, { 0x721, 0, 0x08017C00 }, { 0x722, 0, 0x08017C44 },
+ { 0x723, 0, 0x08017C84 }, { 0x724, 0, 0x08017CC4 }, { 0x725, 0, 0x08017D04 }, { 0x726, 0, 0x08017D90 },
+ { 0x727, 0, 0x08017DE4 }, { 0x728, 0, 0x08017DF0 }, { 0x729, 0, 0x08017E50 }, { 0x72A, 0, 0x08017E9C },
+ { 0x72B, 0, 0x08017F08 }, { 0x72C, 0, 0x08017F5C }, { 0x72D, 0, 0x08017F8C }, { 0x72E, 0, 0x08017FC8 },
+ { 0x72F, 0, 0x0801800C }, { 0x730, 0, 0x08018064 }, { 0x731, 0, 0x080180A0 }, { 0x732, 0, 0x080180E8 },
+ { 0x733, 0, 0x08018104 }, { 0x734, 0, 0x08018188 }, { 0x735, 0, 0x08018240 }, { 0x736, 0, 0x080182A8 },
+ { 0x737, 0, 0x080182E4 }, { 0x738, 0, 0x080184D0 }, { 0x73A, 0, 0x08018510 }, { 0x73B, 0, 0x08018594 },
+ { 0x73C, 0, 0x08018618 }, { 0x73D, 0, 0x080186B0 }, { 0x73E, 0, 0x0801876C }, { 0x73F, 0, 0x08018818 },
+ { 0x740, 0, 0x080188CC }, { 0x741, 0, 0x08018908 }, { 0x742, 0, 0x08018938 }, { 0x743, 0, 0x080189A0 },
+ { 0x744, 0, 0x08018A00 }, { 0x745, 0, 0x08018A90 }, { 0x746, 0, 0x08018B4C }, { 0x747, 0, 0x08018C18 },
+ { 0x748, 0, 0x08018C8C }, { 0x749, 0, 0x08018CE0 }, { 0x74A, 0, 0x08018D78 }, { 0x74B, 0, 0x08018DD0 },
+ { 0x74C, 0, 0x08018E38 }, { 0x74D, 0, 0x08018E78 }, { 0x74E, 0, 0x08018EC0 }, { 0x74F, 0, 0x08018F38 },
+ { 0x750, 0, 0x08018FF4 }, { 0x751, 0, 0x08019014 }, { 0x752, 0, 0x0801910C }, { 0x753, 0, 0x08019160 },
+ { 0x754, 0, 0x080191A4 }, { 0x755, 0, 0x080191FC }, { 0x756, 0, 0x08019254 }, { 0x757, 0, 0x0801927C },
+ { 0x758, 0, 0x080192E8 }, { 0x759, 0, 0x08019354 }, { 0x75A, 0, 0x0801939C }, { 0x76C, 0, 0x0801941C },
+ { 0x76D, 0, 0x08019468 }, { 0x76E, 0, 0x080194BC }, { 0x76F, 0, 0x080194F8 }, { 0x770, 0, 0x08019530 },
+ { 0x771, 0, 0x0801956C }, { 0x772, 0, 0x080195A4 }, { 0x773, 0, 0x080195DC }, { 0x774, 0, 0x08019620 },
+ { 0x775, 0, 0x08019654 }, { 0x776, 0, 0x08019688 }, { 0x777, 0, 0x080196A4 }, { 0x778, 0, 0x080196F0 },
+ { 0x779, 0, 0x080197A4 }, { 0x77A, 0, 0x080197C0 }, { 0x77B, 0, 0x080197E4 }, { 0x77C, 0, 0x0801982C },
+ { 0x77D, 0, 0x08019854 }, { 0x7D0, 0, 0x08019878 }, { 0x7D1, 0, 0x080198BC }, { 0x7D2, 0, 0x080199A8 },
+ { 0x7D3, 0, 0x080199BC }, { 0x7D4, 0, 0x080199E4 }, { 0x7D5, 0, 0x08019AD8 }, { 0x7D6, 0, 0x08019B10 },
+ { 0x7D7, 0, 0x08019B28 }, { 0x7D8, 0, 0x08019BA4 }, { 0x7D9, 0, 0x08019BC8 }, { 0x7DC, 0, 0x08019C20 },
+ { 0x7DD, 0, 0x08019C40 }, { 0x7DE, 0, 0x08019C60 }, { 0x800, 0, 0x08019C80 }, { 0x801, 0, 0x08019D44 },
+ { 0x802, 0, 0x08019DD0 }, { 0x803, 0, 0x08019E24 }, { 0x804, 0, 0x08019E44 }, { 0x806, 0, 0x08019F84 },
+ { 0x807, 0, 0x0801A0F0 }, { 0x80B, 0, 0x0801A0FC }, { 0x80C, 0, 0x0801A144 }, { 0x80D, 0, 0x0801A1AC },
+ { 0x80E, 0, 0x0801A218 }, { 0x80F, 0, 0x0801A288 }, { 0x810, 0, 0x0801A320 }, { 0x811, 0, 0x0801A348 },
+ { 0x820, 0, 0x0801A378 }, { 0x821, 0, 0x0801A3B4 }, { 0x822, 0, 0x0801A408 }, { 0x823, 0, 0x0801A484 },
+ { 0x824, 0, 0x0801A4D4 }, { 0x825, 0, 0x0801A538 }, { 0x826, 0, 0x0801A5A8 }, { 0x827, 0, 0x0801A614 },
+ { 0x828, 0, 0x0801A654 }, { 0x829, 0, 0x0801A680 }, { 0x82A, 0, 0x0801A6EC }, { 0x82B, 0, 0x0801A740 },
+ { 0x82C, 0, 0x0801A79C }, { 0x82D, 0, 0x0801A808 }, { 0x82E, 0, 0x0801A868 }, { 0x82F, 0, 0x0801A894 },
+ { 0x830, 0, 0x0801A918 }, { 0x831, 0, 0x0801A968 }, { 0x832, 0, 0x0801A9DC }, { 0x833, 0, 0x0801AA5C },
+ { 0x834, 0, 0x0801AA80 }, { 0x835, 0, 0x0801AAD0 }, { 0x836, 0, 0x0801AB60 }, { 0x838, 0, 0x0801AC28 },
+ { 0x839, 0, 0x0801AC7C }, { 0x83A, 0, 0x0801AD18 }, { 0x83B, 0, 0x0801AD48 }, { 0x83C, 0, 0x0801ADC4 },
+ { 0x83D, 0, 0x0801AE2C }, { 0x83E, 0, 0x0801AE84 }, { 0x83F, 0, 0x0801AEC4 }, { 0x840, 0, 0x0801AF0C },
+ { 0x841, 0, 0x0801AF48 }, { 0x842, 0, 0x0801AFA4 }, { 0x843, 0, 0x0801AFE4 }, { 0x844, 0, 0x0801B054 },
+ { 0x845, 0, 0x0801B090 }, { 0x846, 0, 0x0801B0CC }, { 0x847, 0, 0x0801B114 }, { 0x848, 0, 0x0801B168 },
+ { 0x849, 0, 0x0801B190 }, { 0x84A, 0, 0x0801B210 }, { 0x84B, 0, 0x0801B278 }, { 0x84C, 0, 0x0801B2BC },
+ { 0x84D, 0, 0x0801B310 }, { 0x84E, 0, 0x0801B380 }, { 0x84F, 0, 0x0801B3A4 }, { 0x850, 0, 0x0801B3CC },
+ { 0x851, 0, 0x0801B47C }, { 0x852, 0, 0x0801B488 }, { 0x853, 0, 0x0801B4B4 }, { 0x854, 0, 0x0801B5C4 },
+ { 0x855, 0, 0x0801B608 }, { 0x856, 0, 0x0801B678 }, { 0x857, 0, 0x0801B6D8 }, { 0x858, 0, 0x0801B718 },
+ { 0x859, 0, 0x0801B78C }, { 0x85A, 0, 0x0801B810 }, { 0x85B, 0, 0x0801B85C }, { 0x85C, 0, 0x0801B8C4 },
+ { 0x85D, 0, 0x0801B8F4 }, { 0x85E, 0, 0x0801B900 }, { 0x85F, 0, 0x0801B92C }, { 0x860, 0, 0x0801B968 },
+ { 0x861, 0, 0x0801B994 }, { 0x862, 0, 0x0801B9E0 }, { 0x863, 0, 0x0801BA6C }, { 0x864, 0, 0x0801BACC },
+ { 0x865, 0, 0x0801BB18 }, { 0x866, 0, 0x0801BB8C }, { 0x867, 0, 0x0801BBA4 }, { 0x868, 0, 0x0801BC0C },
+ { 0x869, 0, 0x0801BC88 }, { 0x86A, 0, 0x0801BCC0 }, { 0x86B, 0, 0x0801BD30 }, { 0x86C, 0, 0x0801BD90 },
+ { 0x86D, 0, 0x0801BDD4 }, { 0x86E, 0, 0x0801BE60 }, { 0x86F, 0, 0x0801BF1C }, { 0x870, 0, 0x0801BF40 },
+ { 0x871, 0, 0x0801BF90 }, { 0x872, 0, 0x0801BFB0 }, { 0x873, 0, 0x0801C004 }, { 0x874, 0, 0x0801C038 },
+ { 0x875, 0, 0x0801C0A0 }, { 0x876, 0, 0x0801C0F8 }, { 0x877, 0, 0x0801C170 }, { 0x878, 0, 0x0801C1E0 },
+ { 0x879, 0, 0x0801C23C }, { 0x87A, 0, 0x0801C2A0 }, { 0x87B, 0, 0x0801C2D4 }, { 0x87C, 0, 0x0801C314 },
+ { 0x87D, 0, 0x0801C384 }, { 0x87E, 0, 0x0801C3DC }, { 0x87F, 0, 0x0801C43C }, { 0x880, 0, 0x0801C494 },
+ { 0x881, 0, 0x0801C504 }, { 0x882, 0, 0x0801C580 }, { 0x883, 0, 0x0801C5E8 }, { 0x884, 0, 0x0801C694 },
+ { 0x885, 0, 0x0801C6DC }, { 0x886, 0, 0x0801C73C }, { 0x887, 0, 0x0801C798 }, { 0x888, 0, 0x0801C7EC },
+ { 0x889, 0, 0x0801C824 }, { 0x88A, 0, 0x0801C86C }, { 0x88B, 0, 0x0801C890 }, { 0x88C, 0, 0x0801C8C4 },
+ { 0x88D, 0, 0x0801C914 }, { 0x88E, 0, 0x0801C98C }, { 0x88F, 0, 0x0801CA00 }, { 0x890, 0, 0x0801CA40 },
+ { 0x898, 0, 0x0801CADC }, { 0x899, 0, 0x0801CB1C }, { 0x89A, 0, 0x0801CB60 }, { 0x89B, 0, 0x0801CC18 },
+ { 0x89C, 0, 0x0801CC74 }, { 0x89D, 0, 0x0801CCCC }, { 0x89E, 0, 0x0801CD40 }, { 0x89F, 0, 0x0801CDA0 },
+ { 0x8A0, 0, 0x0801CDE8 }, { 0x8A1, 0, 0x0801CE44 }, { 0x8A2, 0, 0x0801CEB0 }, { 0x8A3, 0, 0x0801CF0C },
+ { 0x8A4, 0, 0x0801CF38 }, { 0x8A5, 0, 0x0801CFD0 }, { 0x8CA, 0, 0x0801D010 }, { 0x8CB, 0, 0x0801D0E0 },
+ { 0x8CC, 0, 0x0801D108 }, { 0x8CD, 0, 0x0801D138 }, { 0x8CE, 0, 0x0801D170 }, { 0x8CF, 0, 0x0801D1C0 },
+ { 0x8D0, 0, 0x0801D200 }, { 0x8D1, 0, 0x0801D238 }, { 0x8D2, 0, 0x0801D268 }, { 0x8D3, 0, 0x0801D340 },
+ { 0x8D4, 0, 0x0801D3D4 }, { 0x8D5, 0, 0x0801D444 }, { 0x8D6, 0, 0x0801D488 }, { 0x8D7, 0, 0x0801D4D8 },
+ { 0x8D8, 0, 0x0801D508 }, { 0x8D9, 0, 0x0801D574 }, { 0x8DA, 0, 0x0801D5A0 }, { 0x8DB, 0, 0x0801D5D0 },
+ { 0x8DC, 0, 0x0801D600 }, { 0x8DD, 0, 0x0801D644 }, { 0x8DE, 0, 0x0801D7C8 }, { 0x8DF, 0, 0x0801D7FC },
+ { 0x8E0, 0, 0x0801D844 }, { 0x8E1, 0, 0x0801D898 }, { 0x8E2, 0, 0x0801D938 }, { 0x8E3, 0, 0x0801D9E0 },
+ { 0x8E4, 0, 0x0801DA40 }, { 0x8E5, 0, 0x0801DA9C }, { 0x8E6, 0, 0x0801DB20 }, { 0x8E7, 0, 0x0801DB88 },
+ { 0x8E8, 0, 0x0801DBB0 }, { 0x8E9, 0, 0x0801DBE4 }, { 0x8EA, 0, 0x0801DC6C }, { 0x8EB, 0, 0x0801DC84 },
+ { 0x8EC, 0, 0x0801DD18 }, { 0x910, 0, 0x0801DD64 }, { 0x911, 0, 0x0801DDC0 }, { 0x912, 0, 0x0801DE3C },
+ { 0x913, 0, 0x0801DEAC }, { 0x914, 0, 0x0801DF18 }, { 0x915, 0, 0x0801DF88 }, { 0x916, 0, 0x0801DFF0 },
+ { 0x917, 0, 0x0801E038 }, { 0x918, 0, 0x0801E164 }, { 0x919, 0, 0x0801E1BC }, { 0x91A, 0, 0x0801E204 },
+ { 0x91B, 0, 0x0801E330 }, { 0x91C, 0, 0x0801E370 }, { 0x91E, 0, 0x0801E3CC }, { 0x92E, 0, 0x0801E464 },
+ { 0x92F, 0, 0x0801E4C0 }, { 0x930, 0, 0x0801E534 }, { 0x931, 0, 0x0801E5AC }, { 0x932, 0, 0x0801E5B8 },
+ { 0x933, 0, 0x0801E608 }, { 0x934, 0, 0x0801E650 }, { 0x935, 0, 0x0801E698 }, { 0x936, 0, 0x0801E6D0 },
+ { 0x937, 0, 0x0801E738 }, { 0x938, 0, 0x0801E768 }, { 0x960, 0, 0x0801E774 }, { 0x961, 0, 0x0801E798 },
+ { 0x962, 0, 0x0801E810 }, { 0x963, 0, 0x0801E8AC }, { 0x964, 0, 0x0801E97C }, { 0x965, 0, 0x0801E9C8 },
+ { 0x966, 0, 0x0801EA1C }, { 0x967, 0, 0x0801EABC }, { 0x968, 0, 0x0801EB08 }, { 0x969, 0, 0x0801EBC8 },
+ { 0x96A, 0, 0x0801EC58 }, { 0x96B, 0, 0x0801EC8C }, { 0x96C, 0, 0x0801ECD4 }, { 0x96D, 0, 0x0801ED40 },
+ { 0x96E, 0, 0x0801ED88 }, { 0x96F, 0, 0x0801EE4C }, { 0x970, 0, 0x0801EF08 }, { 0x971, 0, 0x0801EF98 },
+ { 0x972, 0, 0x0801EFF4 }, { 0x9C4, 0, 0x0801F000 }, { 0x9C5, 0, 0x0801F08C }, { 0x9C6, 0, 0x0801F0B0 },
+ { 0x9C7, 0, 0x0801F104 }, { 0x9C8, 0, 0x0801F110 }, { 0x9C9, 0, 0x0801F160 }, { 0x9CA, 0, 0x0801F1D4 },
+ { 0x9CB, 0, 0x0801F25C }, { 0x9CC, 0, 0x0801F2A0 }, { 0x9CD, 0, 0x0801F2E8 }, { 0x9CE, 0, 0x0801F338 },
+ { 0x9CF, 0, 0x0801F37C }, { 0x9D0, 0, 0x0801F3CC }, { 0x9D1, 0, 0x0801F424 }, { 0x9D2, 0, 0x0801F450 },
+ { 0x9D3, 0, 0x0801F510 }, { 0x9D4, 0, 0x0801F558 }, { 0x9D5, 0, 0x0801F580 }, { 0x9D6, 0, 0x0801F5D0 },
+ { 0x9D7, 0, 0x0801F61C }, { 0x9D8, 0, 0x0801F65C }, { 0x9D9, 0, 0x0801F69C }, { 0x9DA, 0, 0x0801F6EC },
+ { 0x9DB, 0, 0x0801F764 }, { 0x9DC, 0, 0x0801F7B0 }, { 0x9DD, 0, 0x0801F808 }, { 0x9DE, 0, 0x0801F8AC },
+ { 0x9DF, 0, 0x0801F91C }, { 0x9E0, 0, 0x0801F990 }, { 0x9E1, 0, 0x0801F9CC }, { 0x9E2, 0, 0x0801FA2C },
+ { 0x9E3, 0, 0x0801FA74 }, { 0x9E4, 0, 0x0801FB24 }, { 0x9E5, 0, 0x0801FB90 }, { 0x9E6, 0, 0x0801FBBC },
+ { 0x9E7, 0, 0x0801FBE4 }, { 0x9E8, 0, 0x0801FC4C }, { 0x9E9, 0, 0x0801FCA0 }, { 0x9EA, 0, 0x0801FD80 },
+ { 0x9EB, 0, 0x0801FDE8 }, { 0x9EC, 0, 0x0801FE70 }, { 0x9ED, 0, 0x0801FEAC }, { 0x9EE, 0, 0x0801FF40 },
+ { 0x9EF, 0, 0x0801FF8C }, { 0xA28, 0, 0x0801FFC4 }, { 0xA29, 0, 0x0801FFF4 }, { 0xA2A, 0, 0x08020014 },
+ { 0xA2B, 0, 0x08020048 }, { 0xA2C, 0, 0x0802012C }, { 0xA2D, 0, 0x08020190 }, { 0xA2E, 0, 0x080201EC },
+ { 0xA2F, 0, 0x08020278 }, { 0xA30, 0, 0x080202E4 }, { 0xA31, 0, 0x0802031C }, { 0xA32, 0, 0x08020360 },
+ { 0xA33, 0, 0x080203A4 }, { 0xA34, 0, 0x080203C8 }, { 0xA35, 0, 0x08020424 }, { 0xA36, 0, 0x0802047C },
+ { 0xA37, 0, 0x080204F0 }, { 0xA38, 0, 0x08020534 }, { 0xA39, 0, 0x08020570 }, { 0xA3A, 0, 0x080205E4 },
+ { 0xBB8, 0, 0x08020668 }, { 0xBB9, 0, 0x080206A4 }, { 0xBBA, 0, 0x080206EC }, { 0xBBB, 0, 0x08020710 },
+ { 0xBBC, 0, 0x08020764 }, { 0xBBD, 0, 0x080207A4 }, { 0xBBE, 0, 0x080207E8 }, { 0xBBF, 0, 0x08020814 },
+ { 0xBC0, 0, 0x08020858 }, { 0xBC1, 0, 0x080208B0 }, { 0xBC2, 0, 0x08020910 }, { 0xBC3, 0, 0x08020960 },
+ { 0xBC4, 0, 0x080209C4 }, { 0xBC5, 0, 0x080209F0 }, { 0xBC6, 0, 0x08020A50 }, { 0xBC7, 0, 0x08020A8C },
+ { 0xBC8, 0, 0x08020B00 }, { 0xBC9, 0, 0x08020B3C }, { 0xBCA, 0, 0x08020BB8 }, { 0xBCB, 0, 0x08020BF4 },
+ { 0xBCC, 0, 0x08020C4C }, { 0xBCD, 0, 0x08020C88 }, { 0xBCE, 0, 0x08020CF0 }, { 0xBCF, 0, 0x08020D2C },
+ { 0xBD0, 0, 0x08020D80 }, { 0xBD1, 0, 0x08020DC0 }, { 0xBD2, 0, 0x08020DFC }, { 0xBD3, 0, 0x08020E58 },
+ { 0xBD4, 0, 0x08020E88 }, { 0xBD5, 0, 0x08020EE0 }, { 0xBD6, 0, 0x08020F18 }, { 0xBD7, 0, 0x08020F44 },
+ { 0xBEA, 0, 0x08020F60 }, { 0xBEB, 0, 0x08021158 }, { 0xBEC, 0, 0x080211C0 }, { 0xBED, 0, 0x080211EC },
+ { 0xBEE, 0, 0x08021350 }, { 0xBEF, 0, 0x08021380 }, { 0xBF0, 0, 0x080213F8 }, { 0xBF1, 0, 0x08021480 },
+ { 0xBF2, 0, 0x08021558 }, { 0xBF3, 0, 0x08021588 }, { 0xBF4, 0, 0x080215E0 }, { 0xBF5, 0, 0x080216A0 },
+ { 0xBF6, 0, 0x080217CC }, { 0xBF7, 0, 0x08021858 }, { 0xBF8, 0, 0x080218CC }, { 0xBF9, 0, 0x08021974 },
+ { 0xBFA, 0, 0x080219F8 }, { 0xBFB, 0, 0x08021A68 }, { 0xBFC, 0, 0x08021AF8 }, { 0xBFD, 0, 0x08021B9C },
+ { 0xBFE, 0, 0x08021BE0 }, { 0xBFF, 0, 0x08021C54 }, { 0xC00, 0, 0x08021C80 }, { 0xC01, 0, 0x08021CC8 },
+ { 0xC02, 0, 0x08021F20 }, { 0xC03, 0, 0x08021F50 }, { 0xC04, 0, 0x08022024 }, { 0xC1D, 0, 0x08022090 },
+ { 0xC1E, 0, 0x080220B8 }, { 0xC1F, 0, 0x080220D0 }, { 0xC20, 0, 0x08022104 }, { 0xC21, 0, 0x08022198 },
+ { 0xC22, 0, 0x080221B8 }, { 0xC23, 0, 0x080221DC }, { 0xC24, 0, 0x08022248 }, { 0xC25, 0, 0x08022288 },
+ { 0xC26, 0, 0x08022308 }, { 0xC27, 0, 0x0802233C }, { 0xC28, 0, 0x0802239C }, { 0xC29, 0, 0x080223E4 },
+ { 0xC2A, 0, 0x08022408 }, { 0xC2B, 0, 0x08022470 }, { 0xC2C, 0, 0x080224C4 }, { 0xC2D, 0, 0x0802255C },
+ { 0xC2E, 0, 0x08022584 }, { 0xC2F, 0, 0x080225AC }, { 0xC30, 0, 0x08022640 }, { 0xC31, 0, 0x08022670 },
+ { 0xC32, 0, 0x0802268C }, { 0xC33, 0, 0x080226A0 }, { 0xC34, 0, 0x080226E0 }, { 0xC35, 0, 0x08022738 },
+ { 0xC36, 0, 0x08022760 }, { 0xC37, 0, 0x08022780 }, { 0xC38, 0, 0x080227B8 }, { 0xC39, 0, 0x080227F0 },
+ { 0xC3A, 0, 0x080228DC }, { 0xC3B, 0, 0x08022954 }, { 0xC3C, 0, 0x08022AD4 }, { 0xC3D, 0, 0x08022B48 },
+ { 0xC3E, 0, 0x08022C14 }, { 0xC3F, 0, 0x08022C48 }, { 0xC40, 0, 0x08022C78 }, { 0xC41, 0, 0x08022CB0 },
+ { 0xC42, 0, 0x08022CFC }, { 0xC43, 0, 0x08022D64 }, { 0xC44, 0, 0x08022D84 }, { 0xC45, 0, 0x08022DEC },
+ { 0xC46, 0, 0x08022EBC }, { 0xC47, 0, 0x08022F9C }, { 0xC48, 0, 0x08023004 }, { 0xC49, 0, 0x08023024 },
+ { 0xC4A, 0, 0x080230B0 }, { 0xC4B, 0, 0x080230E0 }, { 0xC4C, 0, 0x080231E4 }, { 0xC4D, 0, 0x0802329C },
+ { 0xC4E, 0, 0x080232FC }, { 0xC4F, 0, 0x08023360 }, { 0xC50, 0, 0x080233BC }, { 0xC51, 0, 0x080233F4 },
+ { 0xC52, 0, 0x0802352C }, { 0xC53, 0, 0x08023550 }, { 0xC54, 0, 0x08023640 }, { 0xC55, 0, 0x08023668 },
+ { 0xC56, 0, 0x080236A4 }, { 0xC57, 0, 0x080236F4 }, { 0xC58, 0, 0x08023788 }, { 0xC80, 0, 0x080237C4 },
+ { 0xC81, 0, 0x08023824 }, { 0xC82, 0, 0x080238F0 }, { 0xC83, 0, 0x08023920 }, { 0xC84, 0, 0x080239E4 },
+ { 0xC85, 0, 0x08023B24 }, { 0xC86, 0, 0x08023B58 }, { 0xC87, 0, 0x08023C3C }, { 0xC88, 0, 0x08023CF0 },
+ { 0xC89, 0, 0x08023D44 }, { 0xC8A, 0, 0x08023D80 }, { 0xC8B, 0, 0x08023DB0 }, { 0xC8C, 0, 0x08023E0C },
+ { 0xC8D, 0, 0x08023E60 }, { 0xC8E, 0, 0x08023E90 }, { 0xC8F, 0, 0x08023F40 }, { 0xC90, 0, 0x08023FA0 },
+ { 0xC91, 0, 0x0802400C }, { 0xC92, 0, 0x08024058 }, { 0xC93, 0, 0x080240D0 }, { 0xC94, 0, 0x0802410C },
+ { 0xCE4, 0, 0x08024164 }, { 0xCE5, 0, 0x080241D4 }, { 0xCE6, 0, 0x08024254 }, { 0xCE7, 0, 0x08024304 },
+ { 0xCE8, 0, 0x08024330 }, { 0xCE9, 0, 0x08024360 }, { 0xCEA, 0, 0x0802444C }, { 0xCEB, 0, 0x08024470 },
+ { 0xCEC, 0, 0x080244E8 }, { 0xCED, 0, 0x08024548 }, { 0xCEE, 0, 0x08024634 }, { 0xCEF, 0, 0x08024718 },
+ { 0xCF0, 0, 0x0802476C }, { 0xCF1, 0, 0x080247F8 }, { 0xCF2, 0, 0x0802483C }, { 0xCF3, 0, 0x08024880 },
+ { 0xCF4, 0, 0x08024918 }, { 0xCF5, 0, 0x08024994 }, { 0xCF6, 0, 0x08024B58 }, { 0xCF7, 0, 0x08024BD8 },
+ { 0xCF8, 0, 0x08024C84 }, { 0xCF9, 0, 0x08024D10 }, { 0xCFA, 0, 0x08024D44 }, { 0xCFB, 0, 0x08024D8C },
+ { 0xCFC, 0, 0x08024DB8 }, { 0xCFD, 0, 0x08024DFC }, { 0xCFE, 0, 0x08024E6C }, { 0xCFF, 0, 0x08024EA4 },
+ { 0xD00, 0, 0x08024ED4 }, { 0xD01, 0, 0x08024F4C }, { 0xD02, 0, 0x08024F8C }, { 0xD03, 0, 0x08024FDC },
+ { 0xD04, 0, 0x08025040 }, { 0xD05, 0, 0x080250D8 }, { 0xD06, 0, 0x08025100 }, { 0xD07, 0, 0x08025134 },
+ { 0xD08, 0, 0x0802516C }, { 0xD09, 0, 0x080251B4 }, { 0xD0A, 0, 0x080251E0 }, { 0xD0B, 0, 0x08025260 },
+ { 0xD0C, 0, 0x080252AC }, { 0xD0D, 0, 0x080252E4 }, { 0xD0E, 0, 0x08025330 }, { 0xD0F, 0, 0x08025358 },
+ { 0xD10, 0, 0x08025394 }, { 0xD11, 0, 0x080253C8 }, { 0xD12, 0, 0x08025434 }, { 0xD13, 0, 0x0802547C },
+ { 0xD14, 0, 0x080254C0 }, { 0xD15, 0, 0x0802550C }, { 0xD16, 0, 0x08025550 }, { 0xD17, 0, 0x080255A4 },
+ { 0xD18, 0, 0x080255DC }, { 0xD19, 0, 0x080255FC }, { 0xD1A, 0, 0x0802563C }, { 0xD1B, 0, 0x080256C8 },
+ { 0xD1C, 0, 0x08025708 }, { 0xD1D, 0, 0x0802575C }, { 0xD1E, 0, 0x080257B8 }, { 0xD1F, 0, 0x08025814 },
+ { 0xD20, 0, 0x08025874 }, { 0xD21, 0, 0x080258EC }, { 0xD48, 0, 0x08025960 }, { 0xD49, 0, 0x0802597C },
+ { 0xD4A, 0, 0x080259B8 }, { 0xD4B, 0, 0x080259F8 }, { 0xD4C, 0, 0x08025A9C }, { 0xD4D, 0, 0x08025AF4 },
+ { 0xD4E, 0, 0x08025B4C }, { 0xD4F, 0, 0x08025B80 }, { 0xD5E, 0, 0x08025BBC }, { 0xD5F, 0, 0x08025BD8 },
+ { 0xD60, 0, 0x08025BFC }, { 0xD61, 0, 0x08025C3C }, { 0xD62, 0, 0x08025C7C }, { 0xD63, 0, 0x08025CE0 },
+ { 0xD64, 0, 0x08025D64 }, { 0xD65, 0, 0x08025D90 }, { 0xD66, 0, 0x08025DC0 }, { 0xD67, 0, 0x08025E34 },
+ { 0xD68, 0, 0x08025E74 }, { 0xD69, 0, 0x08025EB0 }, { 0xD6A, 0, 0x08025EE4 }, { 0xD6B, 0, 0x08025F14 },
+ { 0xD6C, 0, 0x08025F4C }, { 0xD6D, 0, 0x08025F9C }, { 0xD6E, 0, 0x08025FEC }, { 0xD6F, 0, 0x08026024 },
+ { 0xD70, 0, 0x08026064 }, { 0xD71, 0, 0x080260D4 }, { 0xD72, 0, 0x0802613C }, { 0xD73, 0, 0x08026190 },
+ { 0xD74, 0, 0x080261E4 }, { 0xD75, 0, 0x0802621C }, { 0xD76, 0, 0x0802626C }, { 0xD77, 0, 0x08026354 },
+ { 0xD78, 0, 0x0802637C }, { 0xD79, 0, 0x080263C8 }, { 0xD7A, 0, 0x08026444 }, { 0xD7B, 0, 0x08026490 },
+ { 0xD7C, 0, 0x080264EC }, { 0xD7D, 0, 0x08026548 }, { 0xD7E, 0, 0x08026598 }, { 0xD7F, 0, 0x080265C4 },
+ { 0xD80, 0, 0x080265F8 }, { 0xD81, 0, 0x08026628 }, { 0xD82, 0, 0x08026658 }, { 0xD83, 0, 0x08026688 },
+ { 0xD84, 0, 0x080266D0 }, { 0xD85, 0, 0x08026728 }, { 0xD86, 0, 0x08026770 }, { 0xD87, 0, 0x080267B4 },
+ { 0xD88, 0, 0x08026850 }, { 0xD89, 0, 0x080268B0 }, { 0xD8A, 0, 0x08026998 }, { 0xD8B, 0, 0x08026A5C },
+ { 0xDAC, 0, 0x08026AA0 }, { 0xDAD, 0, 0x08026AC8 }, { 0xDAE, 0, 0x08026B04 }, { 0xDAF, 0, 0x08026B9C },
+ { 0xDB0, 0, 0x08026BDC }, { 0xDB1, 0, 0x08026C6C }, { 0xDB2, 0, 0x08026CD8 }, { 0xDB3, 0, 0x08026D4C },
+ { 0xDB4, 0, 0x08026DB4 }, { 0xDB5, 0, 0x08026E34 }, { 0xDB6, 0, 0x08026EA4 }, { 0xDB7, 0, 0x08026EBC },
+ { 0xDB8, 0, 0x08026EE8 }, { 0xDB9, 0, 0x08026F28 }, { 0xDBA, 0, 0x08026F70 }, { 0xDBB, 0, 0x08026FA0 },
+ { 0xDBC, 0, 0x0802701C }, { 0xDBD, 0, 0x08027070 }, { 0xDBE, 0, 0x08027088 }, { 0xDBF, 0, 0x080270BC },
+ { 0xDC0, 0, 0x080270E0 }, { 0xDC1, 0, 0x0802713C }, { 0xDC2, 0, 0x08027194 }, { 0xDC3, 0, 0x08027220 },
+ { 0xDC4, 0, 0x0802727C }, { 0xDC5, 0, 0x08027300 }, { 0xDC6, 0, 0x08027334 }, { 0xDC7, 0, 0x08027370 },
+ { 0xDC8, 0, 0x08027394 }, { 0xDC9, 0, 0x080273A8 }, { 0xDCA, 0, 0x080273D0 }, { 0xDCB, 0, 0x08027414 },
+ { 0xDCC, 0, 0x0802744C }, { 0xDCD, 0, 0x080274BC }, { 0xDCE, 0, 0x08027500 }, { 0xDCF, 0, 0x080275D4 },
+ { 0xDD0, 0, 0x0802762C }, { 0xDD1, 0, 0x08027668 }, { 0xDD2, 0, 0x08027684 }, { 0xDD3, 0, 0x080276D8 },
+ { 0xDD4, 0, 0x08027710 }, { 0xDD5, 0, 0x0802773C }, { 0xDD6, 0, 0x08027760 }, { 0xDD7, 0, 0x08027798 },
+ { 0xDD8, 0, 0x080277C0 }, { 0xDD9, 0, 0x08027824 }, { 0xDDA, 0, 0x080278AC }, { 0xDDB, 0, 0x08027934 },
+ { 0xDDC, 0, 0x08027984 }, { 0xDDD, 0, 0x080279E8 }, { 0xDDE, 0, 0x08027A70 }, { 0xDDF, 0, 0x08027AE8 },
+ { 0xDE0, 0, 0x08027B28 }, { 0xDE1, 0, 0x08027B84 }, { 0xDE2, 0, 0x08027BF4 }, { 0xDE3, 0, 0x08027C40 },
+ { 0xDE4, 0, 0x08027C84 }, { 0xDE5, 0, 0x08027CC8 }, { 0xDE6, 0, 0x08027D3C }, { 0xDE7, 0, 0x08027D8C },
+ { 0xDE8, 0, 0x08027DBC }, { 0xDE9, 0, 0x08027DEC }, { 0xDEA, 0, 0x08027E78 }, { 0xDEB, 0, 0x08027EBC },
+ { 0xDEC, 0, 0x08027EE4 }, { 0xDED, 0, 0x08027F4C }, { 0xDEE, 0, 0x08027F9C }, { 0xDEF, 0, 0x0802800C },
+ { 0xDF0, 0, 0x08028058 }, { 0xDF1, 0, 0x080280A4 }, { 0xDF2, 0, 0x080280DC }, { 0xDF3, 0, 0x08028134 },
+ { 0xDF4, 0, 0x080281B0 }, { 0xDF5, 0, 0x080281E8 }, { 0xDF6, 0, 0x08028234 }, { 0xDF7, 0, 0x08028264 },
+ { 0xDF8, 0, 0x080282C0 }, { 0xDF9, 0, 0x080282F8 }, { 0xDFA, 0, 0x08028378 }, { 0xDFB, 0, 0x080283C4 },
+ { 0xDFC, 0, 0x080283FC }, { 0xDFD, 0, 0x08028444 }, { 0xDFE, 0, 0x08028478 }, { 0xDFF, 0, 0x080284BC },
+ { 0xE02, 0, 0x080284F4 }, { 0xE03, 0, 0x08028540 }, { 0xE04, 0, 0x08028588 }, { 0xE05, 0, 0x080285C8 },
+ { 0xE06, 0, 0x08028604 }, { 0xE07, 0, 0x08028620 }, { 0xE10, 0, 0x08028670 }, { 0xE11, 0, 0x080286AC },
+ { 0xE12, 0, 0x08028744 }, { 0xE13, 0, 0x080287C4 }, { 0xE14, 0, 0x0802885C }, { 0xE15, 0, 0x08028940 },
+ { 0xE16, 0, 0x080289D4 }, { 0xE17, 0, 0x08028A20 }, { 0xE18, 0, 0x08028A58 }, { 0xE19, 0, 0x08028AA8 },
+ { 0xE1A, 0, 0x08028B5C }, { 0xE1B, 0, 0x08028B8C }, { 0xE1C, 0, 0x08028BF0 }, { 0xE1D, 0, 0x08028C38 },
+ { 0xE1E, 0, 0x08028C98 }, { 0xE1F, 0, 0x08028CBC }, { 0xE20, 0, 0x08028D10 }, { 0xE21, 0, 0x08028D28 },
+ { 0xE22, 0, 0x08028D68 }, { 0xE23, 0, 0x08028DC8 }, { 0xE24, 0, 0x08028E24 }, { 0xE25, 0, 0x08028E44 },
+ { 0xE26, 0, 0x08028E88 }, { 0xE27, 0, 0x08028ED0 }, { 0xE28, 0, 0x08028EEC }, { 0xE29, 0, 0x08028F40 },
+ { 0xE2A, 0, 0x08028F9C }, { 0xE2B, 0, 0x08029010 }, { 0xE2C, 0, 0x08029078 }, { 0xE2D, 0, 0x08029104 },
+ { 0xE2E, 0, 0x08029174 }, { 0xE2F, 0, 0x080291D4 }, { 0xE30, 0, 0x08029238 }, { 0xE31, 0, 0x080292B8 },
+ { 0xE32, 0, 0x0802933C }, { 0xE42, 0, 0x0802939C }, { 0xE43, 0, 0x080293FC }, { 0xE44, 0, 0x08029428 },
+ { 0xE45, 0, 0x080294A8 }, { 0xE46, 0, 0x08029500 }, { 0xE47, 0, 0x080295A0 }, { 0xE48, 0, 0x080295C4 },
+ { 0xE49, 0, 0x08029634 }, { 0xE4A, 0, 0x0802969C }, { 0xE4B, 0, 0x08029704 }, { 0xE4C, 0, 0x08029774 },
+ { 0xE4D, 0, 0x080297D4 }, { 0xE4E, 0, 0x08029860 }, { 0xE4F, 0, 0x080298C8 }, { 0xE50, 0, 0x08029948 },
+ { 0xE51, 0, 0x080299D0 }, { 0xE52, 0, 0x08029A30 }, { 0xE74, 0, 0x08029AC0 }, { 0xE75, 0, 0x08029B20 },
+ { 0xE76, 0, 0x08029B74 }, { 0xE77, 0, 0x08029BD4 }, { 0xE78, 0, 0x08029C48 }, { 0xE79, 0, 0x08029C9C },
+ { 0xE7A, 0, 0x08029CB0 }, { 0xE7B, 0, 0x08029CCC }, { 0xE7C, 0, 0x08029D58 }, { 0xE7D, 0, 0x08029DAC },
+ { 0xE7E, 0, 0x08029DC0 }, { 0xE7F, 0, 0x08029E10 }, { 0xE80, 0, 0x08029E74 }, { 0xE81, 0, 0x08029ED4 },
+ { 0xE82, 0, 0x08029F2C }, { 0xE83, 0, 0x08029F54 }, { 0xE84, 0, 0x08029FCC }, { 0xE85, 0, 0x0802A03C },
+ { 0xE86, 0, 0x0802A090 }, { 0xE87, 0, 0x0802A0D8 }, { 0xE88, 0, 0x0802A128 }, { 0xE89, 0, 0x0802A1BC },
+ { 0xE8A, 0, 0x0802A1F4 }, { 0xE8B, 0, 0x0802A260 }, { 0xE8C, 0, 0x0802A2A4 }, { 0xE8D, 0, 0x0802A2F4 },
+ { 0xE8E, 0, 0x0802A334 }, { 0xE8F, 0, 0x0802A37C }, { 0xE90, 0, 0x0802A3DC }, { 0xE91, 0, 0x0802A448 },
+ { 0xE92, 0, 0x0802A47C }, { 0xE93, 0, 0x0802A4A8 }, { 0xE94, 0, 0x0802A550 }, { 0xE95, 0, 0x0802A5B0 },
+ { 0xE97, 0, 0x0802A608 }, { 0xE98, 0, 0x0802A69C }, { 0xE99, 0, 0x0802A6F0 }, { 0xFA0, 0, 0x0802A760 },
+ { 0xFA1, 0, 0x0802A79C }, { 0xFA2, 0, 0x0802A7F4 }, { 0xFA3, 0, 0x0802A84C }, { 0xFA4, 0, 0x0802A8F4 },
+ { 0xFA5, 0, 0x0802AA24 }, { 0xFA6, 0, 0x0802AAA0 }, { 0xFA7, 0, 0x0802AB04 }, { 0xFA8, 0, 0x0802ABA0 },
+ { 0xFA9, 0, 0x0802AC08 }, { 0xFAA, 0, 0x0802ACA4 }, { 0xFAB, 0, 0x0802AD1C }, { 0xFAC, 0, 0x0802AD8C },
+ { 0xFAD, 0, 0x0802ADF4 }, { 0xFAE, 0, 0x0802AE90 }, { 0xFAF, 0, 0x0802AF00 }, { 0xFB0, 0, 0x0802AF70 },
+ { 0xFB1, 0, 0x0802B018 }, { 0xFB2, 0, 0x0802B0B8 }, { 0xFB3, 0, 0x0802B110 }, { 0xFB4, 0, 0x0802B190 },
+ { 0xFB5, 0, 0x0802B24C }, { 0xFB6, 0, 0x0802B288 }, { 0xFB7, 0, 0x0802B2E4 }, { 0xFB8, 0, 0x0802B314 },
+ { 0xFB9, 0, 0x0802B39C }, { 0xFBA, 0, 0x0802B40C }, { 0xFBB, 0, 0x0802B488 }, { 0xFBC, 0, 0x0802B4EC },
+ { 0xFBD, 0, 0x0802B598 }, { 0xFBE, 0, 0x0802B650 }, { 0xFBF, 0, 0x0802B6F8 }, { 0x1004, 0, 0x0802B750 },
+ { 0x1005, 0, 0x0802B778 }, { 0x1006, 0, 0x0802B7A0 }, { 0x1007, 0, 0x0802B7C8 }, { 0x1008, 0, 0x0802B7EC },
+ { 0x1009, 0, 0x0802B84C }, { 0x100A, 0, 0x0802B890 }, { 0x100B, 0, 0x0802B8D8 }, { 0x100C, 0, 0x0802B908 },
+ { 0x100D, 0, 0x0802B97C }, { 0x100E, 0, 0x0802BA00 }, { 0x100F, 0, 0x0802BA54 }, { 0x1010, 0, 0x0802BAC0 },
+ { 0x1011, 0, 0x0802BB28 }, { 0x1012, 0, 0x0802BB94 }, { 0x1013, 0, 0x0802BC18 }, { 0x1014, 0, 0x0802BC44 },
+ { 0x1015, 0, 0x0802BC88 }, { 0x1016, 0, 0x0802BCE0 }, { 0x1017, 0, 0x0802BD24 }, { 0x1018, 0, 0x0802BD8C },
+ { 0x1019, 0, 0x0802BE18 }, { 0x101A, 0, 0x0802BE80 }, { 0x101B, 0, 0x0802BF84 }, { 0x101C, 0, 0x0802C048 },
+ { 0x101D, 0, 0x0802C064 }, { 0x101E, 0, 0x0802C15C }, { 0x101F, 0, 0x0802C284 }, { 0x1020, 0, 0x0802C3BC },
+ { 0x1021, 0, 0x0802C3D4 }, { 0x1022, 0, 0x0802C438 }, { 0x1023, 0, 0x0802C470 }, { 0x1024, 0, 0x0802C494 },
+ { 0x1025, 0, 0x0802C4C4 }, { 0x1026, 0, 0x0802C4F8 }, { 0x1027, 0, 0x0802C564 }, { 0x1028, 0, 0x0802C5F8 },
+ { 0x1029, 0, 0x0802C67C }, { 0x102A, 0, 0x0802C6DC }, { 0x102B, 0, 0x0802C73C }, { 0x102C, 0, 0x0802C798 },
+ { 0x102D, 0, 0x0802C824 }, { 0x102E, 0, 0x0802C87C }, { 0x102F, 0, 0x0802C8B8 }, { 0x1030, 0, 0x0802C928 },
+ { 0x1031, 0, 0x0802CA60 }, { 0x1032, 0, 0x0802CAB4 }, { 0x1033, 0, 0x0802CB00 }, { 0x1034, 0, 0x0802CB3C },
+ { 0x1035, 0, 0x0802CB94 }, { 0x1036, 0, 0x0802CBF0 }, { 0x1037, 0, 0x0802CC28 }, { 0x1038, 0, 0x0802CC80 },
+ { 0x1039, 0, 0x0802CCE0 }, { 0x103A, 0, 0x0802CD30 }, { 0x103B, 0, 0x0802CD64 }, { 0x103C, 0, 0x0802CDDC },
+ { 0x1068, 0, 0x0802CE10 }, { 0x1069, 0, 0x0802CE64 }, { 0x106A, 0, 0x0802CF30 }, { 0x106B, 0, 0x0802CF90 },
+ { 0x106C, 0, 0x0802CFD4 }, { 0x106D, 0, 0x0802D07C }, { 0x106E, 0, 0x0802D0C0 }, { 0x106F, 0, 0x0802D110 },
+ { 0x1070, 0, 0x0802D178 }, { 0x1071, 0, 0x0802D1C4 }, { 0x1072, 0, 0x0802D234 }, { 0x1073, 0, 0x0802D27C },
+ { 0x1074, 0, 0x0802D2BC }, { 0x1075, 0, 0x0802D314 }, { 0x1076, 0, 0x0802D354 }, { 0x1077, 0, 0x0802D3AC },
+ { 0x1078, 0, 0x0802D3F0 }, { 0x1079, 0, 0x0802D434 }, { 0x107A, 0, 0x0802D4AC }, { 0x107B, 0, 0x0802D4EC },
+ { 0x107C, 0, 0x0802D554 }, { 0x107D, 0, 0x0802D5A8 }, { 0x107E, 0, 0x0802D5FC }, { 0x107F, 0, 0x0802D69C },
+ { 0x1080, 0, 0x0802D6E8 }, { 0x1081, 0, 0x0802D744 }, { 0x1082, 0, 0x0802D7A4 }, { 0x1083, 0, 0x0802D7EC },
+ { 0x1084, 0, 0x0802D82C }, { 0x1085, 0, 0x0802D8B0 }, { 0x1086, 0, 0x0802D8F0 }, { 0x1087, 0, 0x0802D954 },
+ { 0x1088, 0, 0x0802D9DC }, { 0x1089, 0, 0x0802DA24 }, { 0x108A, 0, 0x0802DA8C }, { 0x108B, 0, 0x0802DACC },
+ { 0x108C, 0, 0x0802DB30 }, { 0x108D, 0, 0x0802DBA0 }, { 0x108E, 0, 0x0802DBF4 }, { 0x108F, 0, 0x0802DC28 },
+ { 0x1090, 0, 0x0802DC94 }, { 0x1091, 0, 0x0802DCFC }, { 0x1092, 0, 0x0802DDC0 }, { 0x1093, 0, 0x0802DE18 },
+ { 0x1094, 0, 0x0802DEA0 }, { 0x1095, 0, 0x0802DF10 }, { 0x1096, 0, 0x0802DF78 }, { 0x1097, 0, 0x0802DFE0 },
+ { 0x1098, 0, 0x0802E024 }, { 0x1099, 0, 0x0802E088 }, { 0x109A, 0, 0x0802E170 }, { 0x109B, 0, 0x0802E1F8 },
+ { 0x109C, 0, 0x0802E240 }, { 0x109D, 0, 0x0802E290 }, { 0x109E, 0, 0x0802E2D8 }, { 0x109F, 0, 0x0802E308 },
+ { 0x10A0, 0, 0x0802E364 }, { 0x10A1, 0, 0x0802E3B8 }, { 0x10A2, 0, 0x0802E3DC }, { 0x10A3, 0, 0x0802E480 },
+ { 0x10A4, 0, 0x0802E4D4 }, { 0x10A5, 0, 0x0802E53C }, { 0x10A6, 0, 0x0802E624 }, { 0x10A7, 0, 0x0802E68C },
+ { 0x10A8, 0, 0x0802E738 }, { 0x10A9, 0, 0x0802E78C }, { 0x10CE, 0, 0x0802E830 }, { 0x10CF, 0, 0x0802E878 },
+ { 0x10D0, 0, 0x0802E8CC }, { 0x10D1, 0, 0x0802E90C }, { 0x10D2, 0, 0x0802E970 }, { 0x10D3, 0, 0x0802E9A4 },
+ { 0x10D4, 0, 0x0802E9D0 }, { 0x10D6, 0, 0x0802EA7C }, { 0x10D7, 0, 0x0802EB50 }, { 0x10D8, 0, 0x0802EB6C },
+ { 0x10D9, 0, 0x0802EBA0 }, { 0x10DA, 0, 0x0802EBC8 }, { 0x10DB, 0, 0x0802EC10 }, { 0x10DC, 0, 0x0802EC40 },
+ { 0x10DD, 0, 0x0802EC6C }, { 0x10DE, 0, 0x0802ECA8 }, { 0x10DF, 0, 0x0802ECD8 }, { 0x10E0, 0, 0x0802ED14 },
+ { 0x10E1, 0, 0x0802ED40 }, { 0x10E2, 0, 0x0802ED68 }, { 0x10E3, 0, 0x0802EDA0 }, { 0x10E4, 0, 0x0802EE18 },
+ { 0x10E5, 0, 0x0802EE44 }, { 0x10E6, 0, 0x0802EEB0 }, { 0x10E7, 0, 0x0802EEE8 }, { 0x10E8, 0, 0x0802EF24 },
+ { 0x10E9, 0, 0x0802EF84 }, { 0x10EA, 0, 0x0802EFCC }, { 0x10EB, 0, 0x0802EFF8 }, { 0x10EC, 0, 0x0802F030 },
+ { 0x10ED, 0, 0x0802F078 }, { 0x10EE, 0, 0x0802F0B4 }, { 0x10EF, 0, 0x0802F0E0 }, { 0x10F0, 0, 0x0802F110 },
+ { 0x10F1, 0, 0x0802F14C }, { 0x10F2, 0, 0x0802F184 }, { 0x10F3, 0, 0x0802F1A8 }, { 0x10F4, 0, 0x0802F1D4 },
+ { 0x10F5, 0, 0x0802F204 }, { 0x10F6, 0, 0x0802F258 }, { 0x10F7, 0, 0x0802F28C }, { 0x10F8, 0, 0x0802F2D4 },
+ { 0x10F9, 0, 0x0802F30C }, { 0x10FA, 0, 0x0802F334 }, { 0x10FB, 0, 0x0802F3A8 }, { 0x10FC, 0, 0x0802F3D8 },
+ { 0x10FD, 0, 0x0802F408 }, { 0x10FE, 0, 0x0802F44C }, { 0x10FF, 0, 0x0802F484 }, { 0x1100, 0, 0x0802F4CC },
+ { 0x1101, 0, 0x0802F500 }, { 0x1102, 0, 0x0802F590 }, { 0x1103, 0, 0x0802F5CC }, { 0x1104, 0, 0x0802F604 },
+ { 0x1105, 0, 0x0802F660 }, { 0x1106, 0, 0x0802F694 }, { 0x1107, 0, 0x0802F6B8 }, { 0x1108, 0, 0x0802F730 },
+ { 0x1109, 0, 0x0802F7B4 }, { 0x1130, 0, 0x0802F7D8 }, { 0x1131, 0, 0x0802F7F4 }, { 0x1132, 0, 0x0802F82C },
+ { 0x1133, 0, 0x0802F8C0 }, { 0x1134, 0, 0x0802F8E8 }, { 0x1135, 0, 0x0802F8F4 }, { 0x1136, 0, 0x0802F900 },
+ { 0x1137, 0, 0x0802F960 }, { 0x1138, 0, 0x0802F9D0 }, { 0x1139, 0, 0x0802FA70 }, { 0x113A, 0, 0x0802FB2C },
+ { 0x113B, 0, 0x0802FB64 }, { 0x113C, 0, 0x0802FBF4 }, { 0x113D, 0, 0x0802FC4C }, { 0x113E, 0, 0x0802FCA0 },
+ { 0x113F, 0, 0x0802FD10 }, { 0x1140, 0, 0x0802FDA8 }, { 0x1141, 0, 0x0802FE38 }, { 0x1142, 0, 0x0802FE7C },
+ { 0x1143, 0, 0x0802FEBC }, { 0x1144, 0, 0x0802FEF8 }, { 0x1145, 0, 0x0802FF58 }, { 0x1146, 0, 0x0802FFB4 },
+ { 0x1147, 0, 0x08030004 }, { 0x1148, 0, 0x08030018 }, { 0x1149, 0, 0x080300B8 }, { 0x114A, 0, 0x08030114 },
+ { 0x114B, 0, 0x08030170 }, { 0x114C, 0, 0x080301CC }, { 0x114D, 0, 0x08030228 }, { 0x114E, 0, 0x08030284 },
+ { 0x114F, 0, 0x080302E0 }, { 0x1150, 0, 0x08030318 }, { 0x1151, 0, 0x080303C8 }, { 0x1152, 0, 0x080303DC },
+ { 0x1194, 0, 0x08030438 }, { 0x1195, 0, 0x08030458 }, { 0x1196, 0, 0x080304AC }, { 0x1197, 0, 0x080304E0 },
+ { 0x1198, 0, 0x08030578 }, { 0x1199, 0, 0x080305E4 }, { 0x119A, 0, 0x080305FC }, { 0x119B, 0, 0x08030638 },
+ { 0x119C, 0, 0x080306D0 }, { 0x119D, 0, 0x08030748 }, { 0x119E, 0, 0x08030770 }, { 0x119F, 0, 0x08030784 },
+ { 0x11A0, 0, 0x080307EC }, { 0x11A1, 0, 0x08030828 }, { 0x11A2, 0, 0x080308E0 }, { 0x11A3, 0, 0x08030918 },
+ { 0x11A4, 0, 0x08030934 }, { 0x11A5, 0, 0x08030948 }, { 0x11A6, 0, 0x080309BC }, { 0x11A7, 0, 0x080309E8 },
+ { 0x11A8, 0, 0x08030A38 }, { 0x11A9, 0, 0x08030A60 }, { 0x11AA, 0, 0x08030AA0 }, { 0x11AB, 0, 0x08030ADC },
+ { 0x11AC, 0, 0x08030B10 }, { 0x11AD, 0, 0x08030B40 }, { 0x11AE, 0, 0x08030B80 }, { 0x11AF, 0, 0x08030BB4 },
+ { 0x11F8, 0, 0x08030BFC }, { 0x11F9, 0, 0x08030C64 }, { 0x11FA, 0, 0x08030CA0 }, { 0x11FB, 0, 0x08030D28 },
+ { 0x11FC, 0, 0x08030D58 }, { 0x11FD, 0, 0x08030E14 }, { 0x11FE, 0, 0x08030E94 }, { 0x11FF, 0, 0x08030F2C },
+ { 0x1200, 0, 0x08030F6C }, { 0x1201, 0, 0x08031004 }, { 0x1202, 0, 0x08031038 }, { 0x1203, 0, 0x080310A4 },
+ { 0x1204, 0, 0x08031110 }, { 0x1205, 0, 0x08031154 }, { 0x1206, 0, 0x080311EC }, { 0x1207, 0, 0x08031230 },
+ { 0x1208, 0, 0x08031290 }, { 0x1209, 0, 0x080312C4 }, { 0x120A, 0, 0x08031304 }, { 0x120B, 0, 0x08031320 },
+ { 0x120C, 0, 0x08031348 }, { 0x120D, 0, 0x08031390 }, { 0x120E, 0, 0x080313DC }, { 0x120F, 0, 0x08031470 },
+ { 0x1210, 0, 0x08031498 }, { 0x1211, 0, 0x08031520 }, { 0x1212, 0, 0x08031580 }, { 0x1213, 0, 0x080315A8 },
+ { 0x1214, 0, 0x08031644 }, { 0x1215, 0, 0x080316AC }, { 0x1216, 0, 0x08031708 }, { 0x1217, 0, 0x0803176C },
+ { 0x1218, 0, 0x080317BC }, { 0x1219, 0, 0x080317E8 }, { 0x121A, 0, 0x08031834 }, { 0x121B, 0, 0x080318B8 },
+ { 0x121C, 0, 0x08031900 }, { 0x121D, 0, 0x08031930 }, { 0x121E, 0, 0x08031984 }, { 0x121F, 0, 0x080319C8 },
+ { 0x1220, 0, 0x08031A08 }, { 0x1221, 0, 0x08031A7C }, { 0x1222, 0, 0x08031AFC }, { 0x1223, 0, 0x08031B68 },
+ { 0x1224, 0, 0x08031BC0 }, { 0x1225, 0, 0x08031C10 }, { 0x1226, 0, 0x08031CD4 }, { 0x1227, 0, 0x08031D38 },
+ { 0x1228, 0, 0x08031DC0 }, { 0x1229, 0, 0x08031E00 }, { 0x122A, 0, 0x08031E54 }, { 0x122B, 0, 0x08031E80 },
+ { 0x122C, 0, 0x08031EF8 }, { 0x122D, 0, 0x08031F1C }, { 0x122E, 0, 0x08031FA4 }, { 0x122F, 0, 0x0803202C },
+ { 0x1230, 0, 0x08032050 }, { 0x1231, 0, 0x0803210C }, { 0x1232, 0, 0x08032148 }, { 0x1233, 0, 0x080321B4 },
+ { 0x1234, 0, 0x08032200 }, { 0x1235, 0, 0x08032250 }, { 0x1236, 0, 0x080322C4 }, { 0x1237, 0, 0x08032330 },
+ { 0x1238, 0, 0x08032364 }, { 0x1239, 0, 0x08032414 }, { 0x123A, 0, 0x08032464 }, { 0x123B, 0, 0x08032504 },
+ { 0x123C, 0, 0x08032550 }, { 0x123D, 0, 0x080325A4 }, { 0x123E, 0, 0x08032638 }, { 0x123F, 0, 0x08032698 },
+ { 0x1240, 0, 0x080326FC }, { 0x1241, 0, 0x080327D4 }, { 0x1242, 0, 0x0803284C }, { 0x1243, 0, 0x08032904 },
+ { 0x1244, 0, 0x08032964 }, { 0x1245, 0, 0x080329B8 }, { 0x1246, 0, 0x080329E4 }, { 0x1247, 0, 0x08032A54 },
+ { 0x1248, 0, 0x08032AC0 }, { 0x1249, 0, 0x08032B08 }, { 0x124A, 0, 0x08032B68 }, { 0x124B, 0, 0x08032BC4 },
+ { 0x124C, 0, 0x08032BE0 }, { 0x124D, 0, 0x08032C24 }, { 0x124E, 0, 0x08032C68 }, { 0x124F, 0, 0x08032CD8 },
+ { 0x1250, 0, 0x08032D1C }, { 0x1251, 0, 0x08032D6C }, { 0x1252, 0, 0x08032DE4 }, { 0x1253, 0, 0x08032E0C },
+ { 0x1254, 0, 0x08032E60 }, { 0x1255, 0, 0x08032EC4 }, { 0x1256, 0, 0x08032F38 }, { 0x1257, 0, 0x08032F7C },
+ { 0x1258, 0, 0x08032FF4 }, { 0x1259, 0, 0x08033030 }, { 0x125A, 0, 0x080330BC }, { 0x125B, 0, 0x080330F8 },
+ { 0x125C, 0, 0x0803319C }, { 0x125D, 0, 0x08033224 }, { 0x125E, 0, 0x080332D0 }, { 0x125F, 0, 0x08033358 },
+ { 0x1260, 0, 0x080333CC }, { 0x1261, 0, 0x08033410 }, { 0x1262, 0, 0x08033450 }, { 0x1263, 0, 0x080334BC },
+ { 0x1264, 0, 0x080334F4 }, { 0x1265, 0, 0x0803353C }, { 0x1266, 0, 0x08033588 }, { 0x1267, 0, 0x080335F4 },
+ { 0x1268, 0, 0x08033678 }, { 0x1269, 0, 0x0803370C }, { 0x126A, 0, 0x08033778 }, { 0x126B, 0, 0x080337CC },
+ { 0x126C, 0, 0x08033830 }, { 0x126D, 0, 0x080338B0 }, { 0x126E, 0, 0x08033934 }, { 0x126F, 0, 0x0803397C },
+ { 0x1270, 0, 0x080339F0 }, { 0x1271, 0, 0x08033A14 }, { 0x1272, 0, 0x08033A44 }, { 0x1273, 0, 0x08033A88 },
+ { 0x1274, 0, 0x08033AE0 }, { 0x1275, 0, 0x08033B74 }, { 0x1276, 0, 0x08033BC0 }, { 0x1277, 0, 0x08033C24 },
+ { 0x1278, 0, 0x08033CA0 }, { 0x1279, 0, 0x08033D10 }, { 0x127A, 0, 0x08033D80 }, { 0x127B, 0, 0x08033DB4 },
+ { 0x127C, 0, 0x08033E18 }, { 0x127D, 0, 0x08033E68 }, { 0x127E, 0, 0x08033EB4 }, { 0x127F, 0, 0x08033F04 },
+ { 0x1280, 0, 0x08033F58 }, { 0x1281, 0, 0x08033FB8 }, { 0x1282, 0, 0x08034014 }, { 0x1283, 0, 0x08034044 },
+ { 0x1284, 0, 0x0803409C }, { 0x1285, 0, 0x080340EC }, { 0x1286, 0, 0x08034140 }, { 0x1287, 0, 0x080341A0 },
+ { 0x1288, 0, 0x08034204 }, { 0x1289, 0, 0x08034248 }, { 0x128A, 0, 0x080342A8 }, { 0x128B, 0, 0x080342E0 },
+ { 0x128C, 0, 0x08034314 }, { 0x128D, 0, 0x08034340 }, { 0x128E, 0, 0x08034368 }, { 0x128F, 0, 0x080343C8 },
+ { 0x1290, 0, 0x0803445C }, { 0x1291, 0, 0x080344E8 }, { 0x1292, 0, 0x08034528 }, { 0x1293, 0, 0x08034538 },
+ { 0x1294, 0, 0x08034578 }, { 0x1295, 0, 0x080345C4 }, { 0x1296, 0, 0x08034618 }, { 0x1297, 0, 0x08034680 },
+ { 0x1298, 0, 0x080346AC }, { 0x1299, 0, 0x08034728 }, { 0x129A, 0, 0x0803479C }, { 0x129B, 0, 0x08034808 },
+ { 0x129C, 0, 0x08034854 }, { 0x129D, 0, 0x08034888 }, { 0x129E, 0, 0x080348B4 }, { 0x129F, 0, 0x080348FC },
+ { 0x12A0, 0, 0x08034938 }, { 0x12A1, 0, 0x08034984 }, { 0x12A2, 0, 0x080349C4 }, { 0x12A3, 0, 0x08034A24 },
+ { 0x12A4, 0, 0x08034A80 }, { 0x12A5, 0, 0x08034AF0 }, { 0x12A6, 0, 0x08034B40 }, { 0x12A7, 0, 0x08034B74 },
+ { 0x12A8, 0, 0x08034BCC }, { 0x12A9, 0, 0x08034C2C }, { 0x12AA, 0, 0x08034CA0 }, { 0x12AB, 0, 0x08034CDC },
+ { 0x12AC, 0, 0x08034D50 }, { 0x12AD, 0, 0x08034D9C }, { 0x12AE, 0, 0x08034E10 }, { 0x12AF, 0, 0x08034E40 },
+ { 0x12B0, 0, 0x08034E70 }, { 0x12B1, 0, 0x08034EDC }, { 0x12B2, 0, 0x08034F28 }, { 0x12B3, 0, 0x08034F74 },
+ { 0x12B4, 0, 0x08034FA0 }, { 0x12B5, 0, 0x08034FF4 }, { 0x12B6, 0, 0x08035018 }, { 0x12B7, 0, 0x0803504C },
+ { 0x12B8, 0, 0x08035078 }, { 0x12B9, 0, 0x080350C0 }, { 0x12BA, 0, 0x080350F0 }, { 0x12BB, 0, 0x08035134 },
+ { 0x12BC, 0, 0x0803516C }, { 0x12BD, 0, 0x080351D0 }, { 0x12BE, 0, 0x0803521C }, { 0x12BF, 0, 0x08035288 },
+ { 0x12C0, 0, 0x08035308 }, { 0x12C1, 0, 0x0803534C }, { 0x12C2, 0, 0x0803539C }, { 0x12C3, 0, 0x080353CC },
+ { 0x12C4, 0, 0x08035410 }, { 0x12C5, 0, 0x08035470 }, { 0x12C6, 0, 0x080354B8 }, { 0x12C7, 0, 0x08035520 },
+ { 0x12C8, 0, 0x08035560 }, { 0x12C9, 0, 0x08035604 }, { 0x12CA, 0, 0x0803566C }, { 0x12CB, 0, 0x080356A4 },
+ { 0x12CC, 0, 0x080356E4 }, { 0x12CD, 0, 0x0803577C }, { 0x12CE, 0, 0x080357EC }, { 0x12CF, 0, 0x0803581C },
+ { 0x12D0, 0, 0x08035848 }, { 0x12D1, 0, 0x08035888 }, { 0x12D2, 0, 0x080358D0 }, { 0x12D3, 0, 0x080358E8 },
+ { 0x12D4, 0, 0x0803590C }, { 0x12D5, 0, 0x0803592C }, { 0x12D6, 0, 0x0803596C }, { 0x12D7, 0, 0x080359C4 },
+ { 0x12D8, 0, 0x08035A10 }, { 0x12D9, 0, 0x08035A80 }, { 0x12DA, 0, 0x08035ADC }, { 0x12DB, 0, 0x08035B48 },
+ { 0x12DC, 0, 0x08035BB8 }, { 0x12DD, 0, 0x08035BF8 }, { 0x12DE, 0, 0x08035C74 }, { 0x12DF, 0, 0x08035CB0 },
+ { 0x12E0, 0, 0x08035D10 }, { 0x12E3, 0, 0x08035D4C }, { 0x12E4, 0, 0x08035D70 }, { 0x12E5, 0, 0x08035DAC },
+ { 0x12E6, 0, 0x08035DD8 }, { 0x12E7, 0, 0x08035DF4 }, { 0x12E8, 0, 0x08035E0C }, { 0x12E9, 0, 0x08035E58 },
+ { 0x12EA, 0, 0x08035ED4 }, { 0x12EB, 0, 0x08035F44 }, { 0x12EC, 0, 0x08036074 }, { 0x12ED, 0, 0x080360BC },
+ { 0x12EE, 0, 0x08036104 }, { 0x12EF, 0, 0x0803613C }, { 0x12F0, 0, 0x080361A0 }, { 0x12F1, 0, 0x080361F0 },
+ { 0x12F2, 0, 0x08036248 }, { 0x12F3, 0, 0x08036260 }, { 0x12F4, 0, 0x080362A0 }, { 0x12F5, 0, 0x08036300 },
+ { 0x12F6, 0, 0x08036324 }, { 0x12F7, 0, 0x080363A0 }, { 0x12F8, 0, 0x0803640C }, { 0x12F9, 0, 0x08036474 },
+ { 0x12FA, 0, 0x080364CC }, { 0x12FB, 0, 0x08036508 }, { 0x12FC, 0, 0x0803655C }, { 0x12FD, 0, 0x08036578 },
+ { 0x12FE, 0, 0x080365D4 }, { 0x12FF, 0, 0x080365F8 }, { 0x1300, 0, 0x08036654 }, { 0x1301, 0, 0x080366A4 },
+ { 0x1302, 0, 0x080366F0 }, { 0x1303, 0, 0x08036738 }, { 0x1304, 0, 0x08036770 }, { 0x1305, 0, 0x080367AC },
+ { 0x1306, 0, 0x080367F0 }, { 0x1307, 0, 0x08036830 }, { 0x1308, 0, 0x08036850 }, { 0x1309, 0, 0x0803688C },
+ { 0x130A, 0, 0x080368F0 }, { 0x130B, 0, 0x08036924 }, { 0x130C, 0, 0x0803695C }, { 0x130D, 0, 0x080369A8 },
+ { 0x130E, 0, 0x080369FC }, { 0x130F, 0, 0x08036A40 }, { 0x1310, 0, 0x08036A74 }, { 0x1311, 0, 0x08036AB8 },
+ { 0x1312, 0, 0x08036B14 }, { 0x1313, 0, 0x08036B4C }, { 0x1314, 0, 0x08036BAC }, { 0x1315, 0, 0x08036C0C },
+ { 0x1316, 0, 0x08036C64 }, { 0x1317, 0, 0x08036CBC }, { 0x1318, 0, 0x08036D1C }, { 0x1319, 0, 0x08036D80 },
+ { 0x131A, 0, 0x08036DC4 }, { 0x131B, 0, 0x08036E0C }, { 0x131C, 0, 0x08036E8C }, { 0x131D, 0, 0x08036F14 },
+ { 0x1388, 0, 0x08036F8C }, { 0x1389, 0, 0x08036FB4 }, { 0x138A, 0, 0x08036FF8 }, { 0x138B, 0, 0x08037034 },
+ { 0x138C, 0, 0x08037060 }, { 0x138D, 0, 0x0803709C }, { 0x138E, 0, 0x0803711C }, { 0x138F, 0, 0x08037140 },
+ { 0x1390, 0, 0x08037178 }, { 0x1391, 0, 0x080371AC }, { 0x1392, 0, 0x08037204 }, { 0x1393, 0, 0x08037234 },
+ { 0x1394, 0, 0x08037288 }, { 0x1395, 0, 0x080372BC }, { 0x1396, 0, 0x080372F0 }, { 0x1397, 0, 0x08037310 },
+ { 0x1398, 0, 0x08037338 }, { 0x1399, 0, 0x080373C4 }, { 0x139A, 0, 0x08037438 }, { 0x139B, 0, 0x080374A0 },
+ { 0x139C, 0, 0x0803751C }, { 0x139D, 0, 0x0803758C }, { 0x139E, 0, 0x08037620 }, { 0x139F, 0, 0x08037704 },
+ { 0x13A0, 0, 0x08037764 }, { 0x13A1, 0, 0x080377F4 }, { 0x13A2, 0, 0x08037838 }, { 0x13A3, 0, 0x08037894 },
+ { 0x13A4, 0, 0x08037918 }, { 0x13A5, 0, 0x08037974 }, { 0x13A6, 0, 0x080379CC }, { 0x13A7, 0, 0x08037A68 },
+ { 0x13A8, 0, 0x08037ACC }, { 0x13AE, 0, 0x08037B5C }, { 0x13AF, 0, 0x08037BF8 }, { 0x13B0, 0, 0x08037CE0 },
+ { 0x13B1, 0, 0x08037D2C }, { 0x13B2, 0, 0x08037D54 }, { 0x13B3, 0, 0x08037D74 }, { 0x13EC, 0, 0x08037DB8 },
+ { 0x13ED, 0, 0x08037DCC }, { 0x13EE, 0, 0x08037E30 }, { 0x13EF, 0, 0x08037EB4 }, { 0x13F0, 0, 0x08037EF4 },
+ { 0x13F1, 0, 0x08037F34 }, { 0x13F2, 0, 0x08037F74 }, { 0x13F3, 0, 0x08037F8C }, { 0x13F4, 0, 0x08037FA4 },
+ { 0x13F5, 0, 0x08037FC8 }, { 0x13F6, 0, 0x08037FF8 }, { 0x13F7, 0, 0x0803800C }, { 0x13F8, 0, 0x0803803C },
+ { 0x13F9, 0, 0x08038084 }, { 0x13FA, 0, 0x080380C8 }, { 0x13FB, 0, 0x08038108 }, { 0x13FC, 0, 0x080381A4 },
+ { 0x13FD, 0, 0x080381FC }, { 0x13FE, 0, 0x08038254 }, { 0x13FF, 0, 0x080382D8 }, { 0x1400, 0, 0x080383A8 },
+ { 0x1401, 0, 0x08038504 }, { 0x1402, 0, 0x080385A8 }, { 0x1403, 0, 0x08038630 }, { 0x1404, 0, 0x0803868C },
+ { 0x1405, 0, 0x080386C4 }, { 0x1406, 0, 0x08038728 }, { 0x1407, 0, 0x08038824 }, { 0x1408, 0, 0x08038844 },
+ { 0x1409, 0, 0x080388F4 }, { 0x140A, 0, 0x08038984 }, { 0x140B, 0, 0x080389D0 }, { 0x140C, 0, 0x08038A3C },
+ { 0x140D, 0, 0x08038A88 }, { 0x140E, 0, 0x08038AE8 }, { 0x140F, 0, 0x08038B20 }, { 0x1410, 0, 0x08038B60 },
+ { 0x1411, 0, 0x08038BBC }, { 0x1412, 0, 0x08038BF4 }, { 0x1413, 0, 0x08038C34 }, { 0x1414, 0, 0x08038CC0 },
+ { 0x1450, 0, 0x08038D04 }, { 0x1451, 0, 0x08038EC4 }, { 0x1452, 0, 0x08038EF8 }, { 0x1453, 0, 0x08038F10 },
+ { 0x1454, 0, 0x08038F50 }, { 0x1455, 0, 0x08038F9C }, { 0x1456, 0, 0x08038FE4 }, { 0x1457, 0, 0x08039064 },
+ { 0x1458, 0, 0x080390A8 }, { 0x1459, 0, 0x080390D4 }, { 0x145A, 0, 0x08039128 }, { 0x145B, 0, 0x08039198 },
+ { 0x145C, 0, 0x080391C4 }, { 0x145D, 0, 0x080391D8 }, { 0x145E, 0, 0x08039204 }, { 0x145F, 0, 0x080392B0 },
+ { 0x1460, 0, 0x08039360 }, { 0x1461, 0, 0x080393A8 }, { 0x1462, 0, 0x080393BC }, { 0x1463, 0, 0x080393EC },
+ { 0x1464, 0, 0x0803940C }, { 0x1465, 0, 0x0803942C }, { 0x1466, 0, 0x08039454 }, { 0x1467, 0, 0x0803948C },
+ { 0x1468, 0, 0x080394E8 }, { 0x1469, 0, 0x08039548 }, { 0x146A, 0, 0x080395A8 }, { 0x146B, 0, 0x08039638 },
+ { 0x146C, 0, 0x08039700 }, { 0x146D, 0, 0x08039738 }, { 0x146E, 0, 0x08039758 }, { 0x146F, 0, 0x080397D8 },
+ { 0x1470, 0, 0x08039858 }, { 0x1471, 0, 0x08039880 }, { 0x1472, 0, 0x080398B8 }, { 0x1473, 0, 0x08039924 },
+ { 0x1474, 0, 0x08039950 }, { 0x1475, 0, 0x08039A64 }, { 0x1476, 0, 0x08039AE8 }, { 0x1477, 0, 0x08039B4C },
+ { 0x1478, 0, 0x08039B70 }, { 0x1479, 0, 0x08039B98 }, { 0x147A, 0, 0x08039BCC }, { 0x147B, 0, 0x08039C00 },
+ { 0x147C, 0, 0x08039D6C }, { 0x147D, 0, 0x08039E18 }, { 0x14B4, 0, 0x08039E78 }, { 0x14B5, 0, 0x08039EA8 },
+ { 0x14B6, 0, 0x08039EF8 }, { 0x14B7, 0, 0x08039F64 }, { 0x14B8, 0, 0x08039F90 }, { 0x14B9, 0, 0x08039FE4 },
+ { 0x14BA, 0, 0x0803A044 }, { 0x14BB, 0, 0x0803A090 }, { 0x14BC, 0, 0x0803A110 }, { 0x14BD, 0, 0x0803A138 },
+ { 0x14BE, 0, 0x0803A1B8 }, { 0x14BF, 0, 0x0803A208 }, { 0x14C0, 0, 0x0803A25C }, { 0x14C1, 0, 0x0803A29C },
+ { 0x14C2, 0, 0x0803A2E8 }, { 0x14C3, 0, 0x0803A384 }, { 0x14C4, 0, 0x0803A3FC }, { 0x14C5, 0, 0x0803A458 },
+ { 0x14C6, 0, 0x0803A514 }, { 0x14C7, 0, 0x0803A540 }, { 0x14C8, 0, 0x0803A570 }, { 0x14C9, 0, 0x0803A5E4 },
+ { 0x14CA, 0, 0x0803A614 }, { 0x14CB, 0, 0x0803A684 }, { 0x14CC, 0, 0x0803A700 }, { 0x14CD, 0, 0x0803A79C },
+ { 0x14CE, 0, 0x0803A7B8 }, { 0x14CF, 0, 0x0803A880 }, { 0x14D0, 0, 0x0803A8AC }, { 0x14D1, 0, 0x0803A96C },
+ { 0x14D2, 0, 0x0803AA08 }, { 0x14D3, 0, 0x0803AA80 }, { 0x14D4, 0, 0x0803AB40 }, { 0x14D5, 0, 0x0803AB80 },
+ { 0x14D6, 0, 0x0803ABC0 }, { 0x14D7, 0, 0x0803AC30 }, { 0x14D8, 0, 0x0803AC78 }, { 0x14D9, 0, 0x0803ACEC },
+ { 0x14DA, 0, 0x0803AD64 }, { 0x14DB, 0, 0x0803AD8C }, { 0x14DC, 0, 0x0803ADB8 }, { 0x14DD, 0, 0x0803ADEC },
+ { 0x14DE, 0, 0x0803AE40 }, { 0x14DF, 0, 0x0803AEAC }, { 0x14E0, 0, 0x0803AEFC }, { 0x14E1, 0, 0x0803AF58 },
+ { 0x14E2, 0, 0x0803AFDC }, { 0x14E3, 0, 0x0803B018 }, { 0x14E4, 0, 0x0803B044 }, { 0x14E5, 0, 0x0803B07C },
+ { 0x14E6, 0, 0x0803B100 }, { 0x14E7, 0, 0x0803B13C }, { 0x14E8, 0, 0x0803B19C }, { 0x14E9, 0, 0x0803B220 },
+ { 0x14EA, 0, 0x0803B2A0 }, { 0x14EB, 0, 0x0803B358 }, { 0x14EC, 0, 0x0803B398 }, { 0x14ED, 0, 0x0803B40C },
+ { 0x14EE, 0, 0x0803B518 }, { 0x14EF, 0, 0x0803B5F8 }, { 0x14F0, 0, 0x0803B63C }, { 0x14F1, 0, 0x0803B6A8 },
+ { 0x14F2, 0, 0x0803B734 }, { 0x14F3, 0, 0x0803B7B8 }, { 0x14F4, 0, 0x0803B834 }, { 0x14F5, 0, 0x0803B910 },
+ { 0x14F6, 0, 0x0803B984 }, { 0x14F7, 0, 0x0803B9F0 }, { 0x14F8, 0, 0x0803BA80 }, { 0x14F9, 0, 0x0803BAB8 },
+ { 0x14FA, 0, 0x0803BAF8 }, { 0x14FB, 0, 0x0803BB60 }, { 0x14FC, 0, 0x0803BB8C }, { 0x1518, 0, 0x0803BBFC },
+ { 0x1519, 0, 0x0803BC5C }, { 0x151A, 0, 0x0803BCB0 }, { 0x151B, 0, 0x0803BCC8 }, { 0x151C, 0, 0x0803BCF8 },
+ { 0x151D, 0, 0x0803BD44 }, { 0x151E, 0, 0x0803BDB8 }, { 0x151F, 0, 0x0803BDFC }, { 0x1520, 0, 0x0803BE9C },
+ { 0x1521, 0, 0x0803BF18 }, { 0x1522, 0, 0x0803BF64 }, { 0x1523, 0, 0x0803BF8C }, { 0x1524, 0, 0x0803BFA4 },
+ { 0x1525, 0, 0x0803BFD8 }, { 0x1526, 0, 0x0803BFF8 }, { 0x1527, 0, 0x0803C014 }, { 0x1528, 0, 0x0803C068 },
+ { 0x1529, 0, 0x0803C0EC }, { 0x152A, 0, 0x0803C174 }, { 0x152B, 0, 0x0803C1CC }, { 0x152C, 0, 0x0803C22C },
+ { 0x152D, 0, 0x0803C290 }, { 0x152E, 0, 0x0803C314 }, { 0x152F, 0, 0x0803C398 }, { 0x1530, 0, 0x0803C3F0 },
+ { 0x1531, 0, 0x0803C454 }, { 0x1532, 0, 0x0803C4DC }, { 0x1533, 0, 0x0803C518 }, { 0x1534, 0, 0x0803C564 },
+ { 0x1535, 0, 0x0803C5A4 }, { 0x1536, 0, 0x0803C5E4 }, { 0x1537, 0, 0x0803C644 }, { 0x1538, 0, 0x0803C6C8 },
+ { 0x1539, 0, 0x0803C744 }, { 0x153A, 0, 0x0803C7E0 }, { 0x153B, 0, 0x0803C80C }, { 0x153C, 0, 0x0803C84C },
+ { 0x153D, 0, 0x0803C884 }, { 0x153E, 0, 0x0803C89C }, { 0x153F, 0, 0x0803C8DC }, { 0x1540, 0, 0x0803C908 },
+ { 0x1541, 0, 0x0803C944 }, { 0x1542, 0, 0x0803C9A0 }, { 0x157C, 0, 0x0803C9BC }, { 0x157D, 0, 0x0803C9D4 },
+ { 0x157E, 0, 0x0803CA30 }, { 0x157F, 0, 0x0803CA70 }, { 0x1580, 0, 0x0803CAA0 }, { 0x1581, 0, 0x0803CAEC },
+ { 0x1582, 0, 0x0803CB04 }, { 0x1583, 0, 0x0803CB18 }, { 0x1584, 0, 0x0803CB30 }, { 0x1585, 0, 0x0803CB64 },
+ { 0x1586, 0, 0x0803CBD8 }, { 0x1587, 0, 0x0803CBF4 }, { 0x1588, 0, 0x0803CC34 }, { 0x1589, 0, 0x0803CC78 },
+ { 0x158A, 0, 0x0803CD14 }, { 0x158B, 0, 0x0803CDA0 }, { 0x158C, 0, 0x0803CDE0 }, { 0x158D, 0, 0x0803CE3C },
+ { 0x158E, 0, 0x0803CEA8 }, { 0x158F, 0, 0x0803CEE8 }, { 0x1590, 0, 0x0803CF30 }, { 0x1591, 0, 0x0803CFA4 },
+ { 0x1592, 0, 0x0803D050 }, { 0x1593, 0, 0x0803D0C8 }, { 0x1594, 0, 0x0803D118 }, { 0x1595, 0, 0x0803D168 },
+ { 0x1596, 0, 0x0803D1A8 }, { 0x1597, 0, 0x0803D1F0 }, { 0x1598, 0, 0x0803D228 }, { 0x1599, 0, 0x0803D290 },
+ { 0x159A, 0, 0x0803D2FC }, { 0x159B, 0, 0x0803D368 }, { 0x159C, 0, 0x0803D448 }, { 0x159D, 0, 0x0803D4C0 },
+ { 0x159E, 0, 0x0803D500 }, { 0x159F, 0, 0x0803D558 }, { 0x15A0, 0, 0x0803D5B4 }, { 0x15A1, 0, 0x0803D628 },
+ { 0x15A2, 0, 0x0803D730 }, { 0x15A3, 0, 0x0803D798 }, { 0x15A4, 0, 0x0803D818 }, { 0x15A5, 0, 0x0803D868 },
+ { 0x15A6, 0, 0x0803D8C4 }, { 0x15A7, 0, 0x0803D9AC }, { 0x15A8, 0, 0x0803D9FC }, { 0x15E0, 0, 0x0803DA3C },
+ { 0x15E1, 0, 0x0803DA80 }, { 0x15E2, 0, 0x0803DB14 }, { 0x15E3, 0, 0x0803DB9C }, { 0x15E4, 0, 0x0803DC1C },
+ { 0x15E5, 0, 0x0803DC70 }, { 0x15E6, 0, 0x0803DCA8 }, { 0x15E7, 0, 0x0803DCF8 }, { 0x15E8, 0, 0x0803DD5C },
+ { 0x15E9, 0, 0x0803DE00 }, { 0x15EA, 0, 0x0803DE5C }, { 0x15EB, 0, 0x0803DE84 }, { 0x15EC, 0, 0x0803DED0 },
+ { 0x15ED, 0, 0x0803DF34 }, { 0x15EE, 0, 0x0803DF64 }, { 0x15EF, 0, 0x0803DF9C }, { 0x15F0, 0, 0x0803DFBC },
+ { 0x15F1, 0, 0x0803E018 }, { 0x15F2, 0, 0x0803E0B8 }, { 0x15F3, 0, 0x0803E124 }, { 0x15F4, 0, 0x0803E178 },
+ { 0x15F5, 0, 0x0803E1E0 }, { 0x15F6, 0, 0x0803E298 }, { 0x15F7, 0, 0x0803E310 }, { 0x15F8, 0, 0x0803E36C },
+ { 0x15F9, 0, 0x0803E3D0 }, { 0x15FA, 0, 0x0803E420 }, { 0x15FB, 0, 0x0803E454 }, { 0x15FC, 0, 0x0803E488 },
+ { 0x15FD, 0, 0x0803E4E8 }, { 0x15FE, 0, 0x0803E59C }, { 0x15FF, 0, 0x0803E620 }, { 0x1600, 0, 0x0803E66C },
+ { 0x1601, 0, 0x0803E70C }, { 0x1602, 0, 0x0803E74C }, { 0x1603, 0, 0x0803E7A4 }, { 0x1604, 0, 0x0803E7DC },
+ { 0x1605, 0, 0x0803E804 }, { 0x1606, 0, 0x0803E864 }, { 0x1607, 0, 0x0803E8E8 }, { 0x1608, 0, 0x0803E930 },
+ { 0x1609, 0, 0x0803E9E4 }, { 0x160A, 0, 0x0803EA4C }, { 0x160B, 0, 0x0803EAB0 }, { 0x160C, 0, 0x0803EB18 },
+ { 0x160D, 0, 0x0803EB58 }, { 0x160E, 0, 0x0803EBA8 }, { 0x160F, 0, 0x0803EBFC }, { 0x1610, 0, 0x0803EC9C },
+ { 0x1611, 0, 0x0803ED14 }, { 0x1612, 0, 0x0803EE08 }, { 0x1613, 0, 0x0803EE48 }, { 0x1614, 0, 0x0803EEB0 },
+ { 0x1615, 0, 0x0803EEF0 }, { 0x1616, 0, 0x0803EFAC }, { 0x1617, 0, 0x0803F004 }, { 0x1618, 0, 0x0803F04C },
+ { 0x1619, 0, 0x0803F078 }, { 0x161A, 0, 0x0803F0E0 }, { 0x161B, 0, 0x0803F110 }, { 0x161C, 0, 0x0803F15C },
+ { 0x161D, 0, 0x0803F1EC }, { 0x161E, 0, 0x0803F264 }, { 0x161F, 0, 0x0803F2CC }, { 0x1620, 0, 0x0803F344 },
+ { 0x1621, 0, 0x0803F3A8 }, { 0x1622, 0, 0x0803F3F4 }, { 0x1623, 0, 0x0803F46C }, { 0x1624, 0, 0x0803F4AC },
+ { 0x1625, 0, 0x0803F500 }, { 0x1626, 0, 0x0803F608 }, { 0x1627, 0, 0x0803F66C }, { 0x1628, 0, 0x0803F6E8 },
+ { 0x1629, 0, 0x0803F718 }, { 0x162A, 0, 0x0803F760 }, { 0x162B, 0, 0x0803F7C0 }, { 0x162C, 0, 0x0803F87C },
+ { 0x162D, 0, 0x0803F8A8 }, { 0x162E, 0, 0x0803F8EC }, { 0x162F, 0, 0x0803F94C }, { 0x1630, 0, 0x0803F978 },
+ { 0x1631, 0, 0x0803F9DC }, { 0x1632, 0, 0x0803FA3C }, { 0x1633, 0, 0x0803FA78 }, { 0x1634, 0, 0x0803FAC4 },
+ { 0x1635, 0, 0x0803FB0C }, { 0x1636, 0, 0x0803FB5C }, { 0x1637, 0, 0x0803FBCC }, { 0x1638, 0, 0x0803FC50 },
+ { 0x1644, 0, 0x0803FC6C }, { 0x1645, 0, 0x0803FD0C }, { 0x1646, 0, 0x0803FD5C }, { 0x1647, 0, 0x0803FDC0 },
+ { 0x1648, 0, 0x0803FE08 }, { 0x1649, 0, 0x0803FE54 }, { 0x164A, 0, 0x0803FEB4 }, { 0x164B, 0, 0x0803FF88 },
+ { 0x164C, 0, 0x0803FFF4 }, { 0x164D, 0, 0x08040064 }, { 0x164E, 0, 0x080400BC }, { 0x164F, 0, 0x0804010C },
+ { 0x1650, 0, 0x08040174 }, { 0x1651, 0, 0x0804019C }, { 0x1652, 0, 0x08040208 }, { 0x1653, 0, 0x08040250 },
+ { 0x1654, 0, 0x080402B0 }, { 0x1655, 0, 0x080402CC }, { 0x1656, 0, 0x0804032C }, { 0x1657, 0, 0x0804035C },
+ { 0x1658, 0, 0x080403C0 }, { 0x1659, 0, 0x08040494 }, { 0x165A, 0, 0x08040530 }, { 0x165B, 0, 0x0804054C },
+ { 0x165C, 0, 0x080405AC }, { 0x165D, 0, 0x080405E0 }, { 0x165E, 0, 0x08040624 }, { 0x165F, 0, 0x0804070C },
+ { 0x1660, 0, 0x08040798 }, { 0x1661, 0, 0x080407C0 }, { 0x1700, 0, 0x08040848 }, { 0x1701, 0, 0x080408E4 },
+ { 0x1702, 0, 0x0804092C }, { 0x1703, 0, 0x08040988 }, { 0x1704, 0, 0x080409D4 }, { 0x1705, 0, 0x08040A28 },
+ { 0x1706, 0, 0x08040ABC }, { 0x1707, 0, 0x08040B0C }, { 0x1708, 0, 0x08040B50 }, { 0x1709, 0, 0x08040BA4 },
+ { 0x170A, 0, 0x08040C18 }, { 0x170B, 0, 0x08040C60 }, { 0x170C, 0, 0x08040C6C }, { 0x170D, 0, 0x08040CC8 },
+ { 0x170E, 0, 0x08040D38 }, { 0x170F, 0, 0x08040DBC }, { 0x1710, 0, 0x08040E0C }, { 0x1711, 0, 0x08040E84 },
+ { 0x1712, 0, 0x08040E90 }, { 0x1713, 0, 0x08040EE8 }, { 0x1714, 0, 0x08040F30 }, { 0x1715, 0, 0x08040F78 },
+ { 0x1716, 0, 0x08040FD0 }, { 0x1717, 0, 0x08041050 }, { 0x1718, 0, 0x08041084 }, { 0x1719, 0, 0x080410E8 },
+ { 0x171A, 0, 0x08041128 }, { 0x171B, 0, 0x08041170 }, { 0x171C, 0, 0x080411BC }, { 0x171D, 0, 0x080411C8 },
+ { 0x171E, 0, 0x0804122C }, { 0x171F, 0, 0x0804125C }, { 0x1720, 0, 0x080412A8 }, { 0x1721, 0, 0x080412E8 },
+ { 0x1722, 0, 0x0804132C }, { 0x1723, 0, 0x08041378 }, { 0x1724, 0, 0x080413C0 }, { 0x1725, 0, 0x08041414 },
+ { 0x1726, 0, 0x08041470 }, { 0x1727, 0, 0x0804147C }, { 0x1728, 0, 0x08041488 }, { 0x1729, 0, 0x080414D0 },
+ { 0x172A, 0, 0x08041530 }, { 0x172B, 0, 0x08041588 }, { 0x172C, 0, 0x080415E4 }, { 0x172D, 0, 0x08041640 },
+ { 0x172E, 0, 0x08041698 }, { 0x172F, 0, 0x080416FC }, { 0x1730, 0, 0x08041740 }, { 0x1731, 0, 0x08041794 },
+ { 0x1732, 0, 0x080417A0 }, { 0x1733, 0, 0x080417F4 }, { 0x1734, 0, 0x08041848 }, { 0x1735, 0, 0x0804189C },
+ { 0x1736, 0, 0x08041900 }, { 0x1737, 0, 0x08041958 }, { 0x1738, 0, 0x080419A8 }, { 0x1739, 0, 0x080419F4 },
+ { 0x173A, 0, 0x08041A54 }, { 0x173B, 0, 0x08041AA0 }, { 0x173C, 0, 0x08041AF8 }, { 0x173D, 0, 0x08041B54 },
+ { 0x173E, 0, 0x08041BA4 }, { 0x173F, 0, 0x08041BF4 }, { 0x1740, 0, 0x08041C48 }, { 0x1741, 0, 0x08041CAC },
+ { 0x1742, 0, 0x08041D08 }, { 0x1743, 0, 0x08041D68 }, { 0x1744, 0, 0x08041DB4 }, { 0x1745, 0, 0x08041DF8 },
+ { 0x1746, 0, 0x08041E54 }, { 0x1747, 0, 0x08041EB0 }, { 0x1748, 0, 0x08041F2C }, { 0x1749, 0, 0x08041F78 },
+ { 0x1784, 0, 0x08041FD0 }, { 0x1785, 0, 0x0804202C }, { 0x1786, 0, 0x08042088 }, { 0x1787, 0, 0x080420E4 },
+ { 0x1788, 0, 0x080420F0 }, { 0x1789, 0, 0x0804214C }, { 0x178A, 0, 0x080421B0 }, { 0x178B, 0, 0x080421F4 },
+ { 0x178C, 0, 0x0804223C }, { 0x178D, 0, 0x08042288 }, { 0x178E, 0, 0x080422CC }, { 0x178F, 0, 0x08042314 },
+ { 0x1798, 0, 0x08042360 }, { 0x1799, 0, 0x080423AC }, { 0x179A, 0, 0x080423F4 }, { 0x179B, 0, 0x08042440 },
+ { 0x17AA, 0, 0x08042490 }, { 0x17AC, 0, 0x08042514 }, { 0x17AD, 0, 0x08042568 }, { 0x17AE, 0, 0x080425C0 },
+ { 0x17AF, 0, 0x0804262C }, { 0x1800, 0, 0x080426AC }, { 0x1801, 0, 0x080426CC }, { 0x1802, 0, 0x0804272C },
+ { 0x1803, 0, 0x08042754 }, { 0x1804, 0, 0x08042784 }, { 0x1805, 0, 0x080427E0 }, { 0x1806, 0, 0x08042834 },
+ { 0x1807, 0, 0x08042870 }, { 0x1808, 0, 0x080428D0 }, { 0x1809, 0, 0x08042910 }, { 0x180A, 0, 0x0804293C },
+ { 0x180B, 0, 0x08042968 }, { 0x180C, 0, 0x08042990 }, { 0x180D, 0, 0x080429AC }, { 0x180E, 0, 0x08042A04 },
+ { 0x180F, 0, 0x08042A50 }, { 0x1810, 0, 0x08042A80 }, { 0x1811, 0, 0x08042AB4 }, { 0x1812, 0, 0x08042AF8 },
+ { 0x1813, 0, 0x08042B38 }, { 0x1814, 0, 0x08042B6C }, { 0x1815, 0, 0x08042BAC }, { 0x1816, 0, 0x08042C04 },
+ { 0x1817, 0, 0x08042C4C }, { 0x1818, 0, 0x08042C8C }, { 0x1819, 0, 0x08042CB8 }, { 0x181A, 0, 0x08042CEC },
+ { 0x181B, 0, 0x08042D28 }, { 0x181C, 0, 0x08042D34 }, { 0x181D, 0, 0x08042D94 }, { 0x181E, 0, 0x08042DD8 },
+ { 0x181F, 0, 0x08042DF0 }, { 0x1820, 0, 0x08042E40 }, { 0x1821, 0, 0x08042E7C }, { 0x1822, 0, 0x08042EB0 },
+ { 0x1823, 0, 0x08042EE8 }, { 0x1824, 0, 0x08042F20 }, { 0x1883, 0, 0x08042F2C }, { 0x1884, 0, 0x08042F60 },
+ { 0x1885, 0, 0x08042F9C }, { 0x1886, 0, 0x08043008 }, { 0x1887, 0, 0x08043054 }, { 0x1888, 0, 0x08043094 },
+ { 0x1889, 0, 0x080430E4 }, { 0x188A, 0, 0x08043134 }, { 0x188B, 0, 0x08043150 }, { 0x188C, 0, 0x0804318C },
+ { 0x188D, 0, 0x080431E8 }, { 0x188E, 0, 0x08043224 }, { 0x188F, 0, 0x0804326C }, { 0x1890, 0, 0x08043298 },
+ { 0x1891, 0, 0x080432D8 }, { 0x1892, 0, 0x0804332C }, { 0x1893, 0, 0x08043378 }, { 0x1901, 0, 0x080433B4 },
+ { 0x1902, 0, 0x0804341C }, { 0x1903, 0, 0x08043484 }, { 0x1904, 0, 0x08043508 }, { 0x1905, 0, 0x08043580 },
+ { 0x1906, 0, 0x08043610 }, { 0x1907, 0, 0x0804367C }, { 0x1908, 0, 0x08043710 }, { 0x1909, 0, 0x08043784 },
+ { 0x190A, 0, 0x0804380C }, { 0x190B, 0, 0x08043880 }, { 0x190C, 0, 0x080438E8 }, { 0x190D, 0, 0x08043948 },
+ { 0x190E, 0, 0x080439C4 }, { 0x190F, 0, 0x08043A20 }, { 0x1910, 0, 0x08043AA0 }, { 0x1911, 0, 0x08043B24 },
+ { 0x1912, 0, 0x08043BA8 }, { 0x1913, 0, 0x08043C30 }, { 0x1914, 0, 0x08043C9C }, { 0x1915, 0, 0x08043CEC },
+ { 0x1916, 0, 0x08043D50 }, { 0x1917, 0, 0x08043DD8 }, { 0x1918, 0, 0x08043E40 }, { 0x1919, 0, 0x08043EB0 },
+ { 0x191A, 0, 0x08043F24 }, { 0x191B, 0, 0x08043FB0 }, { 0x191C, 0, 0x0804401C }, { 0x191D, 0, 0x08044098 },
+ { 0x191E, 0, 0x0804411C }, { 0x191F, 0, 0x08044184 }, { 0x1921, 0, 0x080441E8 }, { 0x1922, 0, 0x08044258 },
+ { 0x1923, 0, 0x080442D4 }, { 0x1924, 0, 0x08044348 }, { 0x1925, 0, 0x080443D0 }, { 0x1926, 0, 0x08044458 },
+ { 0x1927, 0, 0x080444DC }, { 0x1928, 0, 0x08044574 }, { 0x1929, 0, 0x080445CC }, { 0x192A, 0, 0x08044630 },
+ { 0x192C, 0, 0x080446AC }, { 0x192D, 0, 0x0804471C }, { 0x192E, 0, 0x08044780 }, { 0x1930, 0, 0x08044808 },
+ { 0x1931, 0, 0x08044898 }, { 0x1932, 0, 0x08044910 }, { 0x1933, 0, 0x0804498C }, { 0x1934, 0, 0x08044A04 },
+ { 0x1935, 0, 0x08044A94 }, { 0x1937, 0, 0x08044B10 }, { 0x1939, 0, 0x08044B9C }, { 0x193A, 0, 0x08044C0C },
+ { 0x193B, 0, 0x08044C18 }, { 0x193C, 0, 0x08044C8C }, { 0x1942, 0, 0x08044D04 }, { 0x1944, 0, 0x08044D6C },
+ { 0x1945, 0, 0x08044DCC }, { 0x1946, 0, 0x08044E48 }, { 0x1947, 0, 0x08044EAC }, { 0x1948, 0, 0x08044F20 },
+ { 0x1949, 0, 0x08044F88 }, { 0x194A, 0, 0x08045004 }, { 0x194B, 0, 0x08045084 }, { 0x194C, 0, 0x080450F4 },
+ { 0x194D, 0, 0x08045174 }, { 0x1950, 0, 0x080451C8 }, { 0x1951, 0, 0x08045238 }, { 0x1952, 0, 0x080452A0 },
+ { 0x1953, 0, 0x08045310 }, { 0x1954, 0, 0x08045378 }, { 0x1955, 0, 0x080453E8 }, { 0x1956, 0, 0x08045458 },
+ { 0x1957, 0, 0x080454CC }, { 0x1958, 0, 0x08045540 }, { 0x1959, 0, 0x080455C4 }, { 0x195A, 0, 0x0804564C },
+ { 0x195B, 0, 0x080456AC }, { 0x195C, 0, 0x08045704 }, { 0x195D, 0, 0x0804576C }, { 0x195E, 0, 0x080457E8 },
+ { 0x195F, 0, 0x08045838 }, { 0x1960, 0, 0x0804589C }, { 0x1961, 0, 0x08045918 }, { 0x1962, 0, 0x08045988 },
+ { 0x1963, 0, 0x080459E4 }, { 0x1964, 0, 0x08045A24 }, { 0x1B58, 0, 0x08045ACC }, { 0x1B59, 0, 0x08045ADC },
+ { 0x1B5A, 0, 0x08045B00 }, { 0x1B5B, 0, 0x08045B20 }, { 0x1B5C, 0, 0x08045B2C }, { 0x1B5D, 0, 0x08045B58 },
+ { 0x1B5E, 0, 0x08045B7C }, { 0x1B5F, 0, 0x08045BAC }, { 0x1B60, 0, 0x08045BD8 }, { 0x1B61, 0, 0x08045BFC },
+ { 0x1B62, 0, 0x08045C18 }, { 0x1B63, 0, 0x08045C3C }, { 0x1B64, 0, 0x08045C60 }, { 0x1B65, 0, 0x08045C90 },
+ { 0x1B66, 0, 0x08045CC0 }, { 0x1B67, 0, 0x08045CEC }, { 0x1B6A, 0, 0x08045CF8 }, { 0x1B6B, 0, 0x08045D28 },
+ { 0x1B72, 0, 0x08045D58 }, { 0x1B73, 0, 0x08045D8C }, { 0x1B74, 0, 0x08045DB8 }, { 0x1B75, 0, 0x08045DEC },
+ { 0x1B76, 0, 0x08045E1C }, { 0x1B77, 0, 0x08045E48 }, { 0x1B78, 0, 0x08045E54 }, { 0x1B79, 0, 0x08045E80 },
+ { 0x1B7A, 0, 0x08045EB0 }, { 0x1B7B, 0, 0x08045ED8 }, { 0x1B7C, 0, 0x08045F08 }, { 0x1B7D, 0, 0x08045F34 },
+ { 0x1B7E, 0, 0x08045F40 }, { 0x1B7F, 0, 0x08045F74 }, { 0x1B80, 0, 0x08045FA8 }, { 0x1B81, 0, 0x08045FD4 },
+ { 0x1B89, 0, 0x08045FE0 }, { 0x1B8A, 0, 0x08045FF0 }, { 0x1B8B, 0, 0x08046038 }, { 0x1B8C, 0, 0x08046060 },
+ { 0x1B8D, 0, 0x08046098 }, { 0x1B8E, 0, 0x080460D4 }, { 0x1B8F, 0, 0x08046110 }, { 0x1B90, 0, 0x08046150 },
+ { 0x1B91, 0, 0x0804618C }, { 0x1B92, 0, 0x080461CC }, { 0x1B93, 0, 0x08046208 }, { 0x1B94, 0, 0x0804622C },
+ { 0x1B95, 0, 0x0804626C }, { 0x1B96, 0, 0x080462A8 }, { 0x1B98, 0, 0x080462B4 }, { 0x1B9E, 0, 0x08046300 },
+ { 0x1B9F, 0, 0x08046374 }, { 0x1BA0, 0, 0x080463FC }, { 0x1BA1, 0, 0x08046480 }, { 0x1BA2, 0, 0x08046594 },
+ { 0x1BA4, 0, 0x080465C4 }, { 0x1BA5, 0, 0x08046654 }, { 0x1BA6, 0, 0x08046684 }, { 0x1BA7, 0, 0x080466D4 },
+ { 0x1BA8, 0, 0x08046760 }, { 0x1BAC, 0, 0x080467E8 }, { 0x1BB2, 0, 0x08046848 }, { 0x1BB3, 0, 0x08046888 },
+ { 0x1BB4, 0, 0x080468C4 }, { 0x1BB5, 0, 0x08046904 }, { 0x1BB6, 0, 0x08046944 }, { 0x1C00, 0, 0x08046984 },
+ { 0x1C01, 0, 0x08046A4C }, { 0x1C02, 0, 0x08046AB8 }, { 0x1C03, 0, 0x08046BA8 }, { 0x1C04, 0, 0x08046C10 },
+ { 0x1C05, 0, 0x08046D68 }, { 0x1C06, 0, 0x08046E44 }, { 0x1C07, 0, 0x08046EAC }, { 0x1C08, 0, 0x08046F0C },
+ { 0x1C09, 0, 0x08046F5C }, { 0x1C0A, 0, 0x08046F94 }, { 0x1C0B, 0, 0x08047014 }, { 0x1C0C, 0, 0x080470D4 },
+ { 0x1C0D, 0, 0x08047118 }, { 0x1C0E, 0, 0x08047130 }, { 0x1C0F, 0, 0x08047148 }, { 0x1C10, 0, 0x08047164 },
+ { 0x1C11, 0, 0x0804717C }, { 0x1C12, 0, 0x0804719C }, { 0x1C13, 0, 0x080471BC }, { 0x1C14, 0, 0x080471D4 },
+ { 0x1C15, 0, 0x080471F0 }, { 0x1C16, 0, 0x08047214 }, { 0x1C17, 0, 0x0804730C }, { 0x1C18, 0, 0x0804734C },
+ { 0x1D00, 0, 0x080473A4 }, { 0x1D01, 0, 0x08047414 }, { 0x1D02, 0, 0x08047524 }, { 0x1D03, 0, 0x0804758C },
+ { 0x1D04, 0, 0x08047644 }, { 0x1D05, 0, 0x08047678 }, { 0x1D06, 0, 0x080476D0 }, { 0x1D07, 0, 0x080476F8 },
+ { 0x1D08, 0, 0x08047728 }, { 0x1D09, 0, 0x08047788 }, { 0x1D0A, 0, 0x080477C0 }, { 0x1D0B, 0, 0x080477F4 },
+ { 0x1D0C, 0, 0x08047808 }, { 0x1D0D, 0, 0x08047820 }, { 0x1D11, 0, 0x08047844 }, { 0x1D12, 0, 0x08047890 },
+ { 0x1D13, 0, 0x080478D8 }, { 0x1D14, 0, 0x08047920 }, { 0x1D15, 0, 0x0804796C }, { 0x1D16, 0, 0x080479B4 },
+ { 0x1D17, 0, 0x080479FC }, { 0x1F40, 0, 0x08047A20 }, { 0x1F41, 0, 0x08047ABC }, { 0x1F42, 0, 0x08047B20 },
+ { 0x1F43, 0, 0x08047B94 }, { 0x1F44, 0, 0x08047BD8 }, { 0x1F45, 0, 0x08047C40 }, { 0x1F46, 0, 0x08047CB4 },
+ { 0x1F47, 0, 0x08047D1C }, { 0x1F48, 0, 0x08047D88 }, { 0x1F49, 0, 0x08047DA8 }, { 0x1F4A, 0, 0x08047E48 },
+ { 0x1F4B, 0, 0x08047F30 }, { 0x1F4C, 0, 0x08047F88 }, { 0x1F4D, 0, 0x08048014 }, { 0x1F4E, 0, 0x080480E0 },
+ { 0x1F4F, 0, 0x0804819C }, { 0x1F50, 0, 0x08048280 }, { 0x1F51, 0, 0x080482E4 }, { 0x1F52, 0, 0x0804833C },
+ { 0x1F53, 0, 0x080483B8 }, { 0x1F54, 0, 0x08048430 }, { 0x1F55, 0, 0x080484AC }, { 0x1F56, 0, 0x080484F8 },
+ { 0x1F5F, 0, 0x0804857C }, { 0x1F60, 0, 0x0804859C }, { 0x1F61, 0, 0x080485D4 }, { 0x1F62, 0, 0x08048604 },
+ { 0x1F63, 0, 0x0804862C }, { 0x1F64, 0, 0x0804866C }, { 0x1F65, 0, 0x080486A4 }, { 0x1F66, 0, 0x080486E0 },
+ { 0x1F67, 0, 0x08048708 }, { 0x1F68, 0, 0x08048774 }, { 0x1F69, 0, 0x080487A4 }, { 0x1F6A, 0, 0x080487E0 },
+ { 0x1F6B, 0, 0x08048810 }, { 0x1F6C, 0, 0x08048864 }, { 0x1F6D, 0, 0x08048898 }, { 0x1F6E, 0, 0x08048960 },
+ { 0x1F6F, 0, 0x08048990 }, { 0x1F70, 0, 0x080489E8 }, { 0x1F71, 0, 0x08048A44 }, { 0x1F72, 0, 0x08048AB8 },
+ { 0x1F73, 0, 0x08048AE8 }, { 0x1F74, 0, 0x08048B94 }, { 0x1F75, 0, 0x08048BB0 }, { 0x1FA4, 0, 0x08048BD8 },
+ { 0x1FA5, 0, 0x08048C14 }, { 0x1FA6, 0, 0x08048CF8 }, { 0x1FA7, 0, 0x08048D40 }, { 0x1FA8, 0, 0x08048D88 },
+ { 0x1FA9, 0, 0x08048DF4 }, { 0x1FAA, 0, 0x08048E68 }, { 0x1FAB, 0, 0x08048EE0 }, { 0x1FAC, 0, 0x08048FB4 },
+ { 0x1FAD, 0, 0x08049034 }, { 0x1FAE, 0, 0x08049068 }, { 0x1FAF, 0, 0x080491B0 }, { 0x1FB0, 0, 0x0804927C },
+ { 0x1FB1, 0, 0x080492C8 }, { 0x1FB2, 0, 0x08049318 }, { 0x1FB3, 0, 0x08049384 }, { 0x1FB4, 0, 0x08049424 },
+ { 0x1FB5, 0, 0x0804951C }, { 0x1FB6, 0, 0x08049558 }, { 0x1FB7, 0, 0x08049598 }, { 0x1FB8, 0, 0x080495B8 },
+ { 0x1FB9, 0, 0x080495D0 }, { 0x1FBA, 0, 0x080495E8 }, { 0x1FBB, 0, 0x08049614 }, { 0x1FBC, 0, 0x0804963C },
+ { 0x1FBD, 0, 0x08049688 }, { 0x1FBE, 0, 0x080496DC }, { 0x1FBF, 0, 0x08049758 }, { 0x1FC0, 0, 0x080497BC },
+ { 0x1FC1, 0, 0x080497E4 }, { 0x1FC2, 0, 0x0804982C }, { 0x1FC3, 0, 0x080498A0 }, { 0x1FC4, 0, 0x08049920 },
+ { 0x1FC5, 0, 0x08049940 }, { 0x1FC6, 0, 0x08049A0C }, { 0x1FC7, 0, 0x08049A38 }, { 0x1FC8, 0, 0x08049AA0 },
+ { 0x1FC9, 0, 0x08049AB8 }, { 0x1FCA, 0, 0x08049AF0 }, { 0x1FCB, 0, 0x08049B74 }, { 0x1FCC, 0, 0x08049BD0 },
+ { 0x1FCD, 0, 0x08049C34 }, { 0x1FCE, 0, 0x08049D14 }, { 0x1FCF, 0, 0x08049D70 }, { 0x1FD0, 0, 0x08049DAC },
+ { 0x1FD1, 0, 0x08049E08 }, { 0x1FD2, 0, 0x08049E24 }, { 0x1FD3, 0, 0x08049E44 }, { 0x1FD4, 0, 0x08049E88 },
+ { 0x1FD5, 0, 0x08049EB8 }, { 0x1FD6, 0, 0x08049F00 }, { 0x1FD7, 0, 0x08049F3C }, { 0x1FD8, 0, 0x08049F90 },
+ { 0x1FD9, 0, 0x08049FC4 }, { 0x1FDA, 0, 0x0804A018 }, { 0x1FDB, 0, 0x0804A050 }, { 0x1FDC, 0, 0x0804A0BC },
+ { 0x1FDD, 0, 0x0804A0F0 }, { 0x1FDE, 0, 0x0804A11C }, { 0x1FDF, 0, 0x0804A14C }, { 0x1FE0, 0, 0x0804A1A0 },
+ { 0x1FE1, 0, 0x0804A1D4 }, { 0x1FE2, 0, 0x0804A210 }, { 0x1FE3, 0, 0x0804A244 }, { 0x1FE4, 0, 0x0804A290 },
+ { 0x1FE5, 0, 0x0804A2C8 }, { 0x1FE6, 0, 0x0804A334 }, { 0x1FE7, 0, 0x0804A36C }, { 0x1FE8, 0, 0x0804A3EC },
+ { 0x1FE9, 0, 0x0804A420 }, { 0x1FEA, 0, 0x0804A484 }, { 0x1FEB, 0, 0x0804A4B8 }, { 0x1FEC, 0, 0x0804A51C },
+ { 0x1FED, 0, 0x0804A554 }, { 0x1FEE, 0, 0x0804A59C }, { 0x1FEF, 0, 0x0804A5D0 }, { 0x1FF0, 0, 0x0804A620 },
+ { 0x1FF1, 0, 0x0804A658 }, { 0x1FF2, 0, 0x0804A6C0 }, { 0x1FF3, 0, 0x0804A6F4 }, { 0x1FF4, 0, 0x0804A74C },
+ { 0x1FF5, 0, 0x0804A788 }, { 0x1FF6, 0, 0x0804A800 }, { 0x1FF7, 0, 0x0804A834 }, { 0x1FF8, 0, 0x0804A888 },
+ { 0x1FF9, 0, 0x0804A8B8 }, { 0x1FFA, 0, 0x0804A908 }, { 0x1FFB, 0, 0x0804A940 }, { 0x1FFC, 0, 0x0804A970 },
+ { 0x1FFD, 0, 0x0804A9A4 }, { 0x1FFE, 0, 0x0804AA00 }, { 0x1FFF, 0, 0x0804AA60 }, { 0x2000, 0, 0x0804AAA0 },
+ { 0x2001, 0, 0x0804AACC }, { 0x2002, 0, 0x0804AB00 }, { 0x2003, 0, 0x0804AB60 }, { 0x2004, 0, 0x0804ABA0 },
+ { 0x2005, 0, 0x0804ACE0 }, { 0x2006, 0, 0x0804ADB4 }, { 0x2007, 0, 0x0804AE8C }, { 0x2008, 0, 0x0804AEE0 },
+ { 0x2009, 0, 0x0804AEF8 }, { 0x200A, 0, 0x0804AF10 }, { 0x200B, 0, 0x0804AFAC }, { 0x200C, 0, 0x0804B024 },
+ { 0x200D, 0, 0x0804B058 }, { 0x200E, 0, 0x0804B0D0 }, { 0x200F, 0, 0x0804B144 }, { 0x2010, 0, 0x0804B168 },
+ { 0x2011, 0, 0x0804B1B4 }, { 0x2012, 0, 0x0804B1F8 }, { 0x2013, 0, 0x0804B260 }, { 0x2014, 0, 0x0804B298 },
+ { 0x2015, 0, 0x0804B300 }, { 0x2016, 0, 0x0804B338 }, { 0x2017, 0, 0x0804B350 }, { 0x201D, 0, 0x0804B3B0 },
+ { 0x201E, 0, 0x0804B3F8 }, { 0x201F, 0, 0x0804B508 }, { 0x2020, 0, 0x0804B58C }, { 0x2021, 0, 0x0804B5F8 },
+ { 0x2022, 0, 0x0804B68C }, { 0x2023, 0, 0x0804B6E4 }, { 0x2024, 0, 0x0804B6F0 }, { 0x2026, 0, 0x0804B6FC },
+ { 0x2027, 0, 0x0804B71C }, { 0x2028, 0, 0x0804B744 }, { 0x2029, 0, 0x0804B758 }, { 0x202A, 0, 0x0804B770 },
+ { 0x202B, 0, 0x0804B7C4 }, { 0x202C, 0, 0x0804B81C }, { 0x202D, 0, 0x0804B860 }, { 0x202E, 0, 0x0804B8A8 },
+ { 0x202F, 0, 0x0804B908 }, { 0x2030, 0, 0x0804B93C }, { 0x2031, 0, 0x0804B9B8 }, { 0x2032, 0, 0x0804BA20 },
+ { 0x2033, 0, 0x0804BA9C }, { 0x2034, 0, 0x0804BAEC }, { 0x2035, 0, 0x0804BB34 }, { 0x2036, 0, 0x0804BB7C },
+ { 0x2037, 0, 0x0804BBAC }, { 0x2038, 0, 0x0804BBDC }, { 0x2039, 0, 0x0804BC20 }, { 0x203A, 0, 0x0804BC98 },
+ { 0x203B, 0, 0x0804BCF0 }, { 0x203C, 0, 0x0804BD40 }, { 0x203D, 0, 0x0804BD5C }, { 0x203E, 0, 0x0804BDAC },
+ { 0x203F, 0, 0x0804BE24 }, { 0x2040, 0, 0x0804BE4C }, { 0x2041, 0, 0x0804BEB8 }, { 0x2042, 0, 0x0804BEEC },
+ { 0x2043, 0, 0x0804BF08 }, { 0x2044, 0, 0x0804BF38 }, { 0x2045, 0, 0x0804BF74 }, { 0x2046, 0, 0x0804BFB4 },
+ { 0x2047, 0, 0x0804C028 }, { 0x2048, 0, 0x0804C08C }, { 0x2049, 0, 0x0804C0BC }, { 0x204A, 0, 0x0804C0D8 },
+ { 0x204B, 0, 0x0804C114 }, { 0x204C, 0, 0x0804C144 }, { 0x204D, 0, 0x0804C180 }, { 0x204E, 0, 0x0804C204 },
+ { 0x206C, 0, 0x0804C264 }, { 0x206D, 0, 0x0804C2A8 }, { 0x206E, 0, 0x0804C2F8 }, { 0x206F, 0, 0x0804C338 },
+ { 0x2070, 0, 0x0804C384 }, { 0x2076, 0, 0x0804C390 }, { 0x2077, 0, 0x0804C3C0 }, { 0x2078, 0, 0x0804C404 },
+ { 0x2079, 0, 0x0804C480 }, { 0x2080, 0, 0x0804C4C4 }, { 0x2081, 0, 0x0804C5B4 }, { 0x2082, 0, 0x0804C5FC },
+ { 0x2083, 0, 0x0804C630 }, { 0x208A, 0, 0x0804C674 }, { 0x208B, 0, 0x0804C6BC }, { 0x208C, 0, 0x0804C708 },
+ { 0x208D, 0, 0x0804C7B4 }, { 0x208E, 0, 0x0804C7FC }, { 0x2093, 0, 0x0804C8A4 }, { 0x2094, 0, 0x0804C8C0 },
+ { 0x2095, 0, 0x0804C8E8 }, { 0x20B0, 0, 0x0804C920 }, { 0x20B1, 0, 0x0804C984 }, { 0x20B2, 0, 0x0804CA38 },
+ { 0x20B3, 0, 0x0804CB34 }, { 0x20B4, 0, 0x0804CC18 }, { 0x20B5, 0, 0x0804CD10 }, { 0x20B6, 0, 0x0804CDD4 },
+ { 0x20B7, 0, 0x0804CE8C }, { 0x20B8, 0, 0x0804CF48 }, { 0x20B9, 0, 0x0804CFA4 }, { 0x20BA, 0, 0x0804D018 },
+ { 0x20BB, 0, 0x0804D084 }, { 0x20BC, 0, 0x0804D0EC }, { 0x20BD, 0, 0x0804D158 }, { 0x20BE, 0, 0x0804D1C0 },
+ { 0x20BF, 0, 0x0804D230 }, { 0x20C0, 0, 0x0804D294 }, { 0x20C1, 0, 0x0804D300 }, { 0x20C2, 0, 0x0804D380 },
+ { 0x20C3, 0, 0x0804D3F8 }, { 0x20C4, 0, 0x0804D460 }, { 0x20C5, 0, 0x0804D4AC }, { 0x20C6, 0, 0x0804D52C },
+ { 0x20C7, 0, 0x0804D590 }, { 0x20D0, 0, 0x0804D5FC }, { 0x20D1, 0, 0x0804D654 }, { 0x20D2, 0, 0x0804D6C8 },
+ { 0x20D4, 0, 0x0804D6EC }, { 0x20D5, 0, 0x0804D75C }, { 0x20D6, 0, 0x0804D7B4 }, { 0x20D7, 0, 0x0804D834 },
+ { 0x20D8, 0, 0x0804D8B0 }, { 0x20D9, 0, 0x0804D93C }, { 0x20DA, 0, 0x0804D99C }, { 0x20DB, 0, 0x0804D9FC },
+ { 0x20DC, 0, 0x0804DA74 }, { 0x20DD, 0, 0x0804DB20 }, { 0x20DE, 0, 0x0804DBB0 }, { 0x20DF, 0, 0x0804DC18 },
+ { 0x20E0, 0, 0x0804DC90 }, { 0x20E1, 0, 0x0804DCFC }, { 0x20E2, 0, 0x0804DD84 }, { 0x20E3, 0, 0x0804DE0C },
+ { 0x20E4, 0, 0x0804DEA0 }, { 0x20E5, 0, 0x0804DF10 }, { 0x20E6, 0, 0x0804DF78 }, { 0x20E7, 0, 0x0804DFEC },
+ { 0x20F3, 0, 0x0804E05C }, { 0x20F7, 0, 0x0804E0C0 }, { 0x20F8, 0, 0x0804E134 }, { 0x20F9, 0, 0x0804E1AC },
+ { 0x2103, 0, 0x0804E220 }, { 0x2104, 0, 0x0804E288 }, { 0x2105, 0, 0x0804E2CC }, { 0x2106, 0, 0x0804E320 },
+ { 0x2107, 0, 0x0804E364 }, { 0x2108, 0, 0x0804E3BC }, { 0x2109, 0, 0x0804E408 }, { 0x210A, 0, 0x0804E458 },
+ { 0x210B, 0, 0x0804E4B0 }, { 0x210C, 0, 0x0804E4EC }, { 0x210D, 0, 0x0804E52C }, { 0x210E, 0, 0x0804E578 },
+ { 0x210F, 0, 0x0804E5D0 }, { 0x2110, 0, 0x0804E618 }, { 0x2111, 0, 0x0804E660 }, { 0x2112, 0, 0x0804E6BC },
+ { 0x2113, 0, 0x0804E70C }, { 0x2114, 0, 0x0804E75C }, { 0x2115, 0, 0x0804E7A8 }, { 0x2116, 0, 0x0804E7F0 },
+ { 0x2134, 0, 0x0804E83C }, { 0x2135, 0, 0x0804E880 }, { 0x2136, 0, 0x0804E8CC }, { 0x2137, 0, 0x0804E91C },
+ { 0x2138, 0, 0x0804E96C }, { 0x2139, 0, 0x0804E9B4 }, { 0x213A, 0, 0x0804E9FC }, { 0x213B, 0, 0x0804EA38 },
+ { 0x213C, 0, 0x0804EA88 }, { 0x213D, 0, 0x0804EAD0 }, { 0x213E, 0, 0x0804EB28 }, { 0x213F, 0, 0x0804EB80 },
+ { 0x2140, 0, 0x0804EBD0 }, { 0x2141, 0, 0x0804EC1C }, { 0x2142, 0, 0x0804EC60 }, { 0x2143, 0, 0x0804ECAC },
+ { 0x2144, 0, 0x0804ECF0 }, { 0x2145, 0, 0x0804ED40 }, { 0x2146, 0, 0x0804ED88 }, { 0x2147, 0, 0x0804EDDC },
+ { 0x2152, 0, 0x0804EE34 }, { 0x2153, 0, 0x0804EE78 }, { 0x2154, 0, 0x0804EECC }, { 0x2156, 0, 0x0804EF1C },
+ { 0x2157, 0, 0x0804EF64 }, { 0x2158, 0, 0x0804EFC4 }, { 0x2159, 0, 0x0804F014 }, { 0x215A, 0, 0x0804F05C },
+ { 0x215B, 0, 0x0804F0C0 }, { 0x215D, 0, 0x0804F124 }, { 0x215E, 0, 0x0804F178 }, { 0x215F, 0, 0x0804F184 },
+ { 0x2160, 0, 0x0804F1D8 }, { 0x2161, 0, 0x0804F234 }, { 0x2162, 0, 0x0804F298 }, { 0x2163, 0, 0x0804F2A4 },
+ { 0x2164, 0, 0x0804F2F8 }, { 0x2165, 0, 0x0804F358 }, { 0x2166, 0, 0x0804F3B0 }, { 0x2167, 0, 0x0804F400 },
+ { 0x2168, 0, 0x0804F458 }, { 0x2169, 0, 0x0804F4B0 }, { 0x216A, 0, 0x0804F504 }, { 0x216B, 0, 0x0804F554 },
+ { 0x216C, 0, 0x0804F5A0 }, { 0x216D, 0, 0x0804F5F8 }, { 0x216E, 0, 0x0804F658 }, { 0x216F, 0, 0x0804F6B8 },
+ { 0x2170, 0, 0x0804F710 }, { 0x2171, 0, 0x0804F764 }, { 0x2172, 0, 0x0804F7BC }, { 0x2173, 0, 0x0804F814 },
+ { 0x2174, 0, 0x0804F870 }, { 0x2198, 0, 0x0804F8CC }, { 0x2199, 0, 0x0804F920 }, { 0x219A, 0, 0x0804F978 },
+ { 0x219B, 0, 0x0804F9D0 }, { 0x219C, 0, 0x0804FA2C }, { 0x219D, 0, 0x0804FA80 }, { 0x219E, 0, 0x0804FAD0 },
+ { 0x219F, 0, 0x0804FB28 }, { 0x21A0, 0, 0x0804FB80 }, { 0x21A1, 0, 0x0804FBD8 }, { 0x21A2, 0, 0x0804FC30 },
+ { 0x21A3, 0, 0x0804FC88 }, { 0x21A4, 0, 0x0804FCD8 }, { 0x21A5, 0, 0x0804FD30 }, { 0x21A6, 0, 0x0804FD84 },
+ { 0x21A7, 0, 0x0804FDDC }, { 0x21A8, 0, 0x0804FE34 }, { 0x21A9, 0, 0x0804FE88 }, { 0x21AA, 0, 0x0804FED8 },
+ { 0x21AB, 0, 0x0804FF30 }, { 0x21AC, 0, 0x0804FF84 }, { 0x21AD, 0, 0x0804FFDC }, { 0x21AE, 0, 0x08050038 },
+ { 0x21AF, 0, 0x08050094 }, { 0x21B0, 0, 0x080500EC }, { 0x21B1, 0, 0x08050140 }, { 0x21B2, 0, 0x08050198 },
+ { 0x21B3, 0, 0x080501F4 }, { 0x21B4, 0, 0x0805024C }, { 0x21B5, 0, 0x080502A4 }, { 0x21B6, 0, 0x080502F8 },
+ { 0x21B7, 0, 0x08050350 }, { 0x21B8, 0, 0x080503A8 }, { 0x21B9, 0, 0x08050400 }, { 0x21BA, 0, 0x0805045C },
+ { 0x21CA, 0, 0x080504AC }, { 0x21CB, 0, 0x080504EC }, { 0x21CC, 0, 0x08050528 }, { 0x21CD, 0, 0x08050580 },
+ { 0x21CE, 0, 0x080505C8 }, { 0x21CF, 0, 0x08050604 }, { 0x21D0, 0, 0x08050648 }, { 0x21D1, 0, 0x08050680 },
+ { 0x21D2, 0, 0x080506CC }, { 0x21D3, 0, 0x08050700 }, { 0x21D4, 0, 0x0805075C }, { 0x21D5, 0, 0x080507A8 },
+ { 0x21D6, 0, 0x080507F0 }, { 0x21D7, 0, 0x08050840 }, { 0x21D8, 0, 0x08050884 }, { 0x21D9, 0, 0x080508CC },
+ { 0x21DA, 0, 0x08050910 }, { 0x21DB, 0, 0x0805094C }, { 0x21DC, 0, 0x08050998 }, { 0x21DD, 0, 0x080509D0 },
+ { 0x21FC, 0, 0x08050A20 }, { 0x21FD, 0, 0x08050A50 }, { 0x21FE, 0, 0x08050A74 }, { 0x21FF, 0, 0x08050ABC },
+ { 0x2200, 0, 0x08050ADC }, { 0x2201, 0, 0x08050AF0 }, { 0x2202, 0, 0x08050B0C }, { 0x2203, 0, 0x08050B44 },
+ { 0x2204, 0, 0x08050B74 }, { 0x2205, 0, 0x08050B98 }, { 0x2206, 0, 0x08050BCC }, { 0x2207, 0, 0x08050BF8 },
+ { 0x2208, 0, 0x08050C48 }, { 0x2209, 0, 0x08050CB0 }, { 0x220A, 0, 0x08050CC4 }, { 0x220B, 0, 0x08050CE0 },
+ { 0x220C, 0, 0x08050D10 }, { 0x220D, 0, 0x08050D44 }, { 0x220E, 0, 0x08050D98 }, { 0x220F, 0, 0x08050DE0 },
+ { 0x2210, 0, 0x08050E24 }, { 0x2211, 0, 0x08050E44 }, { 0x2212, 0, 0x08050E78 }, { 0x2213, 0, 0x08050E8C },
+ { 0x2214, 0, 0x08050ECC }, { 0x2215, 0, 0x08050F14 }, { 0x2216, 0, 0x08050F44 }, { 0x2217, 0, 0x08050F6C },
+ { 0x2218, 0, 0x08050FB4 }, { 0x2219, 0, 0x08050FDC }, { 0x221A, 0, 0x0805100C }, { 0x221B, 0, 0x08051034 },
+ { 0x221C, 0, 0x08051054 }, { 0x221D, 0, 0x08051080 }, { 0x221E, 0, 0x080510A0 }, { 0x221F, 0, 0x080510DC },
+ { 0x2220, 0, 0x08051104 }, { 0x2221, 0, 0x08051138 }, { 0x2222, 0, 0x0805114C }, { 0x2223, 0, 0x0805117C },
+ { 0x2224, 0, 0x080511A8 }, { 0x2225, 0, 0x080511E4 }, { 0x2226, 0, 0x0805122C }, { 0x2227, 0, 0x08051258 },
+ { 0x2228, 0, 0x080512AC }, { 0x2229, 0, 0x080512D8 }, { 0x222A, 0, 0x08051338 }, { 0x222B, 0, 0x08051374 },
+ { 0x2328, 0, 0x080513C4 }, { 0x2329, 0, 0x08051410 }, { 0x232A, 0, 0x08051454 }, { 0x232B, 0, 0x080514B4 },
+ { 0x232C, 0, 0x08051514 }, { 0x232D, 0, 0x08051564 }, { 0x232E, 0, 0x080515A8 }, { 0x232F, 0, 0x080515E4 },
+ { 0x2330, 0, 0x08051630 }, { 0x2331, 0, 0x08051680 }, { 0x2332, 0, 0x08051700 }, { 0x2333, 0, 0x08051750 },
+ { 0x2334, 0, 0x080517AC }, { 0x2335, 0, 0x08051814 }, { 0x2336, 0, 0x08051868 }, { 0x2337, 0, 0x080518C8 },
+ { 0x2338, 0, 0x08051914 }, { 0x2339, 0, 0x08051948 }, { 0x233A, 0, 0x080519A4 }, { 0x233B, 0, 0x080519D8 },
+ { 0x233C, 0, 0x08051A10 }, { 0x233D, 0, 0x08051A70 }, { 0x233E, 0, 0x08051AA4 }, { 0x233F, 0, 0x08051ADC },
+ { 0x2340, 0, 0x08051B10 }, { 0x2341, 0, 0x08051B54 }, { 0x2342, 0, 0x08051BC8 }, { 0x2343, 0, 0x08051C38 },
+ { 0x2344, 0, 0x08051C70 }, { 0x2345, 0, 0x08051CC0 }, { 0x2346, 0, 0x08051CFC }, { 0x2347, 0, 0x08051D24 },
+ { 0x2348, 0, 0x08051DA4 }, { 0x2349, 0, 0x08051DE4 }, { 0x234A, 0, 0x08051E44 }, { 0x234B, 0, 0x08051E84 },
+ { 0x234C, 0, 0x08051EA4 }, { 0x234D, 0, 0x08051EC4 }, { 0x234E, 0, 0x08051F04 }, { 0x234F, 0, 0x08051F30 },
+ { 0x2350, 0, 0x08051F48 }, { 0x2351, 0, 0x08051F7C }, { 0x2352, 0, 0x08051FA8 }, { 0x2353, 0, 0x08051FC0 },
+ { 0x2354, 0, 0x08051FE4 }, { 0x2355, 0, 0x08052004 }, { 0x2356, 0, 0x08052020 }, { 0x2357, 0, 0x08052048 },
+ { 0x2358, 0, 0x080520AC }, { 0x2359, 0, 0x080520DC }, { 0x235A, 0, 0x08052104 }, { 0x235B, 0, 0x08052138 },
+ { 0x235C, 0, 0x0805215C }, { 0x235D, 0, 0x08052188 }, { 0x235E, 0, 0x080522B4 }, { 0x235F, 0, 0x080522DC },
+ { 0x2360, 0, 0x08052334 }, { 0x2361, 0, 0x080523A8 }, { 0x2362, 0, 0x08052400 }, { 0x2363, 0, 0x08052450 },
+ { 0x2364, 0, 0x0805250C }, { 0x2365, 0, 0x08052644 }, { 0x2366, 0, 0x080526C0 }, { 0x2367, 0, 0x08052718 },
+ { 0x2368, 0, 0x080527E4 }, { 0x2369, 0, 0x080528E0 }, { 0x236A, 0, 0x08052930 }, { 0x236B, 0, 0x08052A04 },
+ { 0x236C, 0, 0x08052A40 }, { 0x236D, 0, 0x08052A8C }, { 0x236E, 0, 0x08052ABC }, { 0x236F, 0, 0x08052AD8 },
+ { 0x2370, 0, 0x08052B34 }, { 0x2371, 0, 0x08052B64 }, { 0x2372, 0, 0x08052BE0 }, { 0x2373, 0, 0x08052BF8 },
+ { 0x2374, 0, 0x08052C3C }, { 0x2375, 0, 0x08052C80 }, { 0x2376, 0, 0x08052CE4 }, { 0x2377, 0, 0x08052D08 },
+ { 0x2378, 0, 0x08052D54 }, { 0x2710, 0, 0x08052D8C }, { 0x2711, 0, 0x08052E54 }, { 0x2712, 0, 0x08052EA4 },
+ { 0x2713, 0, 0x08053008 }, { 0x2714, 0, 0x0805305C }, { 0x2715, 0, 0x080531A0 }, { 0x2716, 0, 0x08053220 },
+ { 0x2717, 0, 0x08053284 }, { 0x2718, 0, 0x080532BC }, { 0x2719, 0, 0x08053300 }, { 0x271A, 0, 0x0805332C },
+ { 0x271B, 0, 0x08053424 }, { 0x271C, 0, 0x080534AC }, { 0x271D, 0, 0x08053524 }, { 0x271E, 0, 0x0805358C },
+ { 0x271F, 0, 0x08053608 }, { 0x2720, 0, 0x0805367C }, { 0x2721, 0, 0x08053718 }, { 0x2722, 0, 0x0805374C },
+ { 0x2723, 0, 0x080537A8 }, { 0x2724, 0, 0x080537F4 }, { 0x2725, 0, 0x08053850 }, { 0x2726, 0, 0x080538A8 },
+ { 0x2727, 0, 0x08053914 }, { 0x2728, 0, 0x08053974 }, { 0x2729, 0, 0x08053A34 }, { 0x272A, 0, 0x08053A4C },
+ { 0x272B, 0, 0x08053A90 }, { 0x272C, 0, 0x08053AB0 }, { 0x272D, 0, 0x08053AF4 }, { 0x272E, 0, 0x08053B3C },
+ { 0x272F, 0, 0x08053B9C }, { 0x2730, 0, 0x08053BCC }, { 0x2731, 0, 0x08053C04 }, { 0x2732, 0, 0x08053C70 },
+ { 0x2733, 0, 0x08053CD8 }, { 0x2734, 0, 0x08053D4C }, { 0x2735, 0, 0x08053DD4 }, { 0x2736, 0, 0x08053E48 },
+ { 0x2737, 0, 0x08053EA8 }, { 0x2738, 0, 0x08053F9C }, { 0x2739, 0, 0x08054038 }, { 0x273A, 0, 0x080540A0 },
+ { 0x273B, 0, 0x0805411C }, { 0x273C, 0, 0x08054188 }, { 0x273D, 0, 0x080541D0 }, { 0x273E, 0, 0x08054278 },
+ { 0x273F, 0, 0x080542A0 }, { 0x2740, 0, 0x0805432C }, { 0x2741, 0, 0x080543CC }, { 0x2742, 0, 0x08054478 },
+ { 0x2743, 0, 0x080544F8 }, { 0x2744, 0, 0x08054580 }, { 0x2745, 0, 0x08054630 }, { 0x2746, 0, 0x08054674 },
+ { 0x2747, 0, 0x080546C4 }, { 0x2748, 0, 0x08054784 }, { 0x2749, 0, 0x080547EC }, { 0x274A, 0, 0x0805483C },
+ { 0x274B, 0, 0x0805489C }, { 0x274C, 0, 0x08054924 }, { 0x274D, 0, 0x0805494C }, { 0x274E, 0, 0x080549E0 },
+ { 0x274F, 0, 0x08054A90 }, { 0x2774, 0, 0x08054B24 }, { 0x2775, 0, 0x08054B7C }, { 0x2776, 0, 0x08054C30 },
+ { 0x2777, 0, 0x08054C3C }, { 0x2778, 0, 0x08054CD0 }, { 0x2779, 0, 0x08054CDC }, { 0x277A, 0, 0x08054D00 },
+ { 0x277B, 0, 0x08054DA4 }, { 0x277C, 0, 0x08054EC8 }, { 0x277D, 0, 0x08054F54 }, { 0x277E, 0, 0x08054FA0 },
+ { 0x277F, 0, 0x08055004 }, { 0x2780, 0, 0x0805503C }, { 0x2781, 0, 0x080550B0 }, { 0x2782, 0, 0x08055110 },
+ { 0x2783, 0, 0x08055138 }, { 0x2784, 0, 0x08055160 }, { 0x2785, 0, 0x08055194 }, { 0x2786, 0, 0x080551E0 },
+ { 0x2787, 0, 0x08055224 }, { 0x2788, 0, 0x08055264 }, { 0x2789, 0, 0x080552A8 }, { 0x278A, 0, 0x080552E8 },
+ { 0x278B, 0, 0x08055310 }, { 0x278C, 0, 0x0805535C }, { 0x278D, 0, 0x080553E0 }, { 0x278E, 0, 0x08055424 },
+ { 0x278F, 0, 0x08055448 }, { 0x2790, 0, 0x08055470 }, { 0x2791, 0, 0x080554F0 }, { 0x2792, 0, 0x08055510 },
+ { 0x2793, 0, 0x08055534 }, { 0x2794, 0, 0x080555BC }, { 0x2795, 0, 0x080555FC }, { 0x2796, 0, 0x0805565C },
+ { 0x2797, 0, 0x08055688 }, { 0x2798, 0, 0x080556CC }, { 0x2799, 0, 0x08055700 }, { 0x279A, 0, 0x0805573C },
+ { 0x279B, 0, 0x0805576C }, { 0x279C, 0, 0x080557B0 }, { 0x279D, 0, 0x08055804 }, { 0x279E, 0, 0x08055858 },
+ { 0x279F, 0, 0x080558DC }, { 0x27A0, 0, 0x0805591C }, { 0x27A1, 0, 0x08055984 }, { 0x27A2, 0, 0x080559C0 },
+ { 0x27A3, 0, 0x08055A10 }, { 0x27A4, 0, 0x08055A38 }, { 0x27A5, 0, 0x08055AB0 }, { 0x27A6, 0, 0x08055AE8 },
+ { 0x27A7, 0, 0x08055B1C }, { 0x27A8, 0, 0x08055B60 }, { 0x27A9, 0, 0x08055BA8 }, { 0x27AA, 0, 0x08055BC0 },
+ { 0x27AB, 0, 0x08055C10 }, { 0x27AC, 0, 0x08055C34 }, { 0x27AD, 0, 0x08055CAC }, { 0x27AE, 0, 0x08055CC4 },
+ { 0x27D8, 0, 0x08055D0C }, { 0x27D9, 0, 0x08055D50 }, { 0x27DA, 0, 0x08055D94 }, { 0x27DB, 0, 0x08055DCC },
+ { 0x27DC, 0, 0x08055E10 }, { 0x27DD, 0, 0x08055E50 }, { 0x27DE, 0, 0x08055ED0 }, { 0x27DF, 0, 0x08055F14 },
+ { 0x27E0, 0, 0x08055F70 }, { 0x27E1, 0, 0x08056000 }, { 0x27E2, 0, 0x0805609C }, { 0x27E3, 0, 0x080560DC },
+ { 0x27E4, 0, 0x080560F8 }, { 0x27E5, 0, 0x08056128 }, { 0x27E6, 0, 0x08056170 }, { 0x27E7, 0, 0x08056220 },
+ { 0x27E8, 0, 0x0805627C }, { 0x27E9, 0, 0x080562D8 }, { 0x27EA, 0, 0x08056334 }, { 0x27EB, 0, 0x0805635C },
+ { 0x27EC, 0, 0x080563B0 }, { 0x27ED, 0, 0x080563D8 }, { 0x27EE, 0, 0x0805643C }, { 0x27EF, 0, 0x08056468 },
+ { 0x27F0, 0, 0x08056488 }, { 0x27F1, 0, 0x080564AC }, { 0x27F2, 0, 0x080564F4 }, { 0x27F3, 0, 0x0805653C },
+ { 0x27F4, 0, 0x08056570 }, { 0x27F5, 0, 0x0805662C }, { 0x27F6, 0, 0x0805668C }, { 0x27F7, 0, 0x080566B0 },
+ { 0x27F8, 0, 0x080566E4 }, { 0x27F9, 0, 0x08056708 }, { 0x27FA, 0, 0x08056734 }, { 0x283C, 0, 0x0805678C },
+ { 0x283D, 0, 0x080567C4 }, { 0x2841, 0, 0x080567FC }, { 0x2842, 0, 0x08056840 }, { 0x2843, 0, 0x08056878 },
+ { 0x2844, 0, 0x080568E0 }, { 0x2845, 0, 0x0805696C }, { 0x2846, 0, 0x080569BC }, { 0x2847, 0, 0x08056A18 },
+ { 0x2848, 0, 0x08056A54 }, { 0x2849, 0, 0x08056AB0 }, { 0x284A, 0, 0x08056AF4 }, { 0x284B, 0, 0x08056B38 },
+ { 0x284C, 0, 0x08056B88 }, { 0x284D, 0, 0x08056BCC }, { 0x284E, 0, 0x08056C2C }, { 0x284F, 0, 0x08056C7C },
+ { 0x2850, 0, 0x08056CA8 }, { 0x2851, 0, 0x08056CF8 }, { 0x2852, 0, 0x08056D24 }, { 0x2853, 0, 0x08056D68 },
+ { 0x2854, 0, 0x08056DC0 }, { 0x2855, 0, 0x08056E04 }, { 0x2856, 0, 0x08056E50 }, { 0x2857, 0, 0x08056E98 },
+ { 0x2858, 0, 0x08056EFC }, { 0x2859, 0, 0x08056F44 }, { 0x285A, 0, 0x08056FA8 }, { 0x285B, 0, 0x08056FE8 },
+ { 0x285C, 0, 0x08057014 }, { 0x285D, 0, 0x0805705C }, { 0x285E, 0, 0x08057088 }, { 0x285F, 0, 0x080570C8 },
+ { 0x2860, 0, 0x080570FC }, { 0x2861, 0, 0x08057114 }, { 0x2862, 0, 0x08057174 }, { 0x2863, 0, 0x080571C0 },
+ { 0x2864, 0, 0x0805722C }, { 0x2865, 0, 0x08057278 }, { 0x2866, 0, 0x080572E4 }, { 0x2867, 0, 0x08057328 },
+ { 0x2868, 0, 0x08057358 }, { 0x2869, 0, 0x080573A4 }, { 0x286A, 0, 0x08057410 }, { 0x286B, 0, 0x08057454 },
+ { 0x286C, 0, 0x08057484 }, { 0x286D, 0, 0x080574D0 }, { 0x286E, 0, 0x080574F8 }, { 0x286F, 0, 0x0805753C },
+ { 0x2870, 0, 0x080575A8 }, { 0x2871, 0, 0x080575E4 }, { 0x2872, 0, 0x08057628 }, { 0x2873, 0, 0x0805765C },
+ { 0x2874, 0, 0x080576B4 }, { 0x2875, 0, 0x080576D0 }, { 0x2876, 0, 0x08057728 }, { 0x2877, 0, 0x0805777C },
+ { 0x2878, 0, 0x080577D4 }, { 0x2879, 0, 0x08057828 }, { 0x287A, 0, 0x08057890 }, { 0x287B, 0, 0x08057900 },
+ { 0x287C, 0, 0x08057968 }, { 0x287D, 0, 0x080579B8 }, { 0x287E, 0, 0x080579E8 }, { 0x287F, 0, 0x08057A5C },
+ { 0x2880, 0, 0x08057AA8 }, { 0x2881, 0, 0x08057B24 }, { 0x2882, 0, 0x08057B5C }, { 0x2883, 0, 0x08057B94 },
+ { 0x2884, 0, 0x08057BC8 }, { 0x2885, 0, 0x08057BE0 }, { 0x2886, 0, 0x08057BF8 }, { 0x2887, 0, 0x08057C24 },
+ { 0x2888, 0, 0x08057C5C }, { 0x2889, 0, 0x08057C88 }, { 0x288A, 0, 0x08057CB4 }, { 0x288B, 0, 0x08057CD4 },
+ { 0x28A0, 0, 0x08057CF0 }, { 0x28A1, 0, 0x08057D20 }, { 0x28A2, 0, 0x08057D5C }, { 0x28A3, 0, 0x08057D94 },
+ { 0x28A4, 0, 0x08057E80 }, { 0x28A5, 0, 0x08057F64 }, { 0x28A6, 0, 0x08057FA8 }, { 0x28A7, 0, 0x08058080 },
+ { 0x28A8, 0, 0x080580B4 }, { 0x28A9, 0, 0x080580F4 }, { 0x28AA, 0, 0x08058130 }, { 0x28AB, 0, 0x08058160 },
+ { 0x28AC, 0, 0x080581EC }, { 0x28AD, 0, 0x080582C0 }, { 0x28AF, 0, 0x080582DC }, { 0x28B0, 0, 0x080582F8 },
+ { 0x28B1, 0, 0x08058340 }, { 0x28B2, 0, 0x080583A8 }, { 0x28B3, 0, 0x08058400 }, { 0x28B4, 0, 0x08058488 },
+ { 0x28B5, 0, 0x080584E8 }, { 0x28B6, 0, 0x08058524 }, { 0x28B7, 0, 0x08058594 }, { 0x28B8, 0, 0x080585F4 },
+ { 0x28B9, 0, 0x08058618 }, { 0x28BA, 0, 0x0805864C }, { 0x28BB, 0, 0x08058688 }, { 0x28BC, 0, 0x080586B8 },
+ { 0x28BD, 0, 0x080586F8 }, { 0x28BE, 0, 0x0805871C }, { 0x28BF, 0, 0x08058760 }, { 0x28C0, 0, 0x0805878C },
+ { 0x28C1, 0, 0x080587B4 }, { 0x28C2, 0, 0x0805881C }, { 0x28C3, 0, 0x08058880 }, { 0x28C4, 0, 0x080589EC },
+ { 0x28C5, 0, 0x08058A60 }, { 0x28C6, 0, 0x08058A78 }, { 0x28C7, 0, 0x08058AC0 }, { 0x28C8, 0, 0x08058AF4 },
+ { 0x28C9, 0, 0x08058B54 }, { 0x28CA, 0, 0x08058B9C }, { 0x28CB, 0, 0x08058BD4 }, { 0x28CC, 0, 0x08058C24 },
+ { 0x28CD, 0, 0x08058C58 }, { 0x28CE, 0, 0x08058C6C }, { 0x28CF, 0, 0x08058C88 }, { 0x28D0, 0, 0x08058CCC },
+ { 0x28D1, 0, 0x08058D1C }, { 0x28D2, 0, 0x08058D4C }, { 0x28D3, 0, 0x08058DA0 }, { 0x28D4, 0, 0x08058DF0 },
+ { 0x28D5, 0, 0x08058E4C }, { 0x28D6, 0, 0x08058EE8 }, { 0x28D7, 0, 0x08058F10 }, { 0x28D8, 0, 0x08058F60 },
+ { 0x28D9, 0, 0x0805901C }, { 0x28DA, 0, 0x08059030 }, { 0x28DB, 0, 0x08059154 }, { 0x28DC, 0, 0x08059184 },
+ { 0x28DE, 0, 0x080591A8 }, { 0x28DF, 0, 0x080591E4 }, { 0x28E0, 0, 0x08059220 }, { 0x28E1, 0, 0x08059260 },
+ { 0x28E2, 0, 0x080592C8 }, { 0x28E3, 0, 0x0805931C }, { 0x28E4, 0, 0x08059378 }, { 0x28E5, 0, 0x080593A4 },
+ { 0x28E6, 0, 0x080593B8 }, { 0x28E7, 0, 0x080593FC }, { 0x28E8, 0, 0x08059420 }, { 0x28E9, 0, 0x0805945C },
+ { 0x28EA, 0, 0x08059480 }, { 0x28EB, 0, 0x080594D4 }, { 0x28EC, 0, 0x08059564 }, { 0x28ED, 0, 0x080595B8 },
+ { 0x28EE, 0, 0x080595F8 }, { 0x28EF, 0, 0x08059640 }, { 0x28F0, 0, 0x080596F8 }, { 0x28F1, 0, 0x08059754 },
+ { 0x28F2, 0, 0x080597D4 }, { 0x28F3, 0, 0x08059814 }, { 0x28F4, 0, 0x080599B0 }, { 0x28F5, 0, 0x080599F8 },
+ { 0x28F6, 0, 0x08059AC0 }, { 0x28F7, 0, 0x08059AEC }, { 0x28F8, 0, 0x08059B70 }, { 0x28F9, 0, 0x08059BDC },
+ { 0x28FA, 0, 0x08059C00 }, { 0x28FB, 0, 0x08059C60 }, { 0x28FC, 0, 0x08059CBC }, { 0x28FD, 0, 0x08059DA0 },
+ { 0x28FE, 0, 0x08059DB0 }, { 0x28FF, 0, 0x08059E2C }, { 0x2900, 0, 0x08059EC8 }, { 0x2901, 0, 0x08059EF4 },
+ { 0x2902, 0, 0x08059F70 }, { 0x2903, 0, 0x08059FD0 }, { 0x2904, 0, 0x0805A04C }, { 0x2905, 0, 0x0805A24C },
+ { 0x2906, 0, 0x0805A4F8 }, { 0x2907, 0, 0x0805A584 }, { 0x2908, 0, 0x0805A5C0 }, { 0x2909, 0, 0x0805A60C },
+ { 0x290A, 0, 0x0805A640 }, { 0x290B, 0, 0x0805A6C8 }, { 0x290C, 0, 0x0805A9C0 }, { 0x290D, 0, 0x0805AD84 },
+ { 0x290E, 0, 0x0805ADF8 }, { 0x290F, 0, 0x0805AE40 }, { 0x2910, 0, 0x0805AE74 }, { 0x2911, 0, 0x0805AF50 },
+ { 0x2912, 0, 0x0805AFCC }, { 0x2913, 0, 0x0805B044 }, { 0x2914, 0, 0x0805B104 }, { 0x2915, 0, 0x0805B1F8 },
+ { 0x2916, 0, 0x0805B224 }, { 0x2917, 0, 0x0805B244 }, { 0x2918, 0, 0x0805B2A0 }, { 0x2919, 0, 0x0805B2D0 },
+ { 0x291A, 0, 0x0805B314 }, { 0x291B, 0, 0x0805B354 }, { 0x291C, 0, 0x0805B3B0 }, { 0x291D, 0, 0x0805B400 },
+ { 0x291E, 0, 0x0805B454 }, { 0x291F, 0, 0x0805B494 }, { 0x2920, 0, 0x0805B4EC }, { 0x2921, 0, 0x0805B538 },
+ { 0x2922, 0, 0x0805B58C }, { 0x2923, 0, 0x0805B600 }, { 0x2924, 0, 0x0805B65C }, { 0x2925, 0, 0x0805B738 },
+ { 0x2926, 0, 0x0805B770 }, { 0x2927, 0, 0x0805B794 }, { 0x2928, 0, 0x0805B7C8 }, { 0x2929, 0, 0x0805B7EC },
+ { 0x292A, 0, 0x0805B814 }, { 0x292B, 0, 0x0805B8C0 }, { 0x292C, 0, 0x0805B994 }, { 0x292D, 0, 0x0805BA44 },
+ { 0x292E, 0, 0x0805BB14 }, { 0x292F, 0, 0x0805BB74 }, { 0x2930, 0, 0x0805BBEC }, { 0x2931, 0, 0x0805BC40 },
+ { 0x2932, 0, 0x0805BCBC }, { 0x2933, 0, 0x0805BD3C }, { 0x2934, 0, 0x0805BDA4 }, { 0x2935, 0, 0x0805BDE0 },
+ { 0x2936, 0, 0x0805BE20 }, { 0x2937, 0, 0x0805BE90 }, { 0x2938, 0, 0x0805BEE8 }, { 0x2939, 0, 0x0805BF5C },
+ { 0x293A, 0, 0x0805BF80 }, { 0x293B, 0, 0x0805BFE4 }, { 0x293C, 0, 0x0805C00C }, { 0x293D, 0, 0x0805C094 },
+ { 0x293E, 0, 0x0805C0EC }, { 0x293F, 0, 0x0805C168 }, { 0x2940, 0, 0x0805C1EC }, { 0x2941, 0, 0x0805C258 },
+ { 0x2942, 0, 0x0805C2DC }, { 0x2943, 0, 0x0805C350 }, { 0x2944, 0, 0x0805C3B8 }, { 0x2945, 0, 0x0805C3F8 },
+ { 0x2946, 0, 0x0805C44C }, { 0x2947, 0, 0x0805C470 }, { 0x2948, 0, 0x0805C4F0 }, { 0x2949, 0, 0x0805C518 },
+ { 0x294A, 0, 0x0805C534 }, { 0x294B, 0, 0x0805C54C }, { 0x294C, 0, 0x0805C570 }, { 0x294D, 0, 0x0805C5A8 },
+ { 0x294E, 0, 0x0805C680 }, { 0x294F, 0, 0x0805C740 }, { 0x2950, 0, 0x0805C794 }, { 0x2951, 0, 0x0805C7F4 },
+ { 0x2952, 0, 0x0805C854 }, { 0x2953, 0, 0x0805C914 }, { 0x2954, 0, 0x0805C940 }, { 0x2955, 0, 0x0805C980 },
+ { 0x2956, 0, 0x0805C9DC }, { 0x2957, 0, 0x0805CA08 }, { 0x2958, 0, 0x0805CA2C }, { 0x2959, 0, 0x0805CA48 },
+ { 0x295A, 0, 0x0805CA6C }, { 0x295B, 0, 0x0805CAB4 }, { 0x295C, 0, 0x0805CB08 }, { 0x295D, 0, 0x0805CB24 },
+ { 0x295E, 0, 0x0805CB44 }, { 0x295F, 0, 0x0805CB60 }, { 0x2960, 0, 0x0805CC3C }, { 0x2961, 0, 0x0805CD14 },
+ { 0x2962, 0, 0x0805CD3C }, { 0x2968, 0, 0x0805CE60 }, { 0x2969, 0, 0x0805CE78 }, { 0x296A, 0, 0x0805CEF4 },
+ { 0x296B, 0, 0x0805CF24 }, { 0x296C, 0, 0x0805CF64 }, { 0x296D, 0, 0x0805CF9C }, { 0x296E, 0, 0x0805CFB4 },
+ { 0x296F, 0, 0x0805D018 }, { 0x2970, 0, 0x0805D08C }, { 0x2971, 0, 0x0805D17C }, { 0x2972, 0, 0x0805D1C4 },
+ { 0x2973, 0, 0x0805D234 }, { 0x2974, 0, 0x0805D258 }, { 0x2975, 0, 0x0805D2E4 }, { 0x2976, 0, 0x0805D314 },
+ { 0x2977, 0, 0x0805D358 }, { 0x2978, 0, 0x0805D3DC }, { 0x2979, 0, 0x0805D414 }, { 0x297A, 0, 0x0805D458 },
+ { 0x29CC, 0, 0x0805D4A8 }, { 0x29CD, 0, 0x0805D4C0 }, { 0x29CE, 0, 0x0805D514 }, { 0x29CF, 0, 0x0805D550 },
+ { 0x29D0, 0, 0x0805D580 }, { 0x29D1, 0, 0x0805D5AC }, { 0x29D2, 0, 0x0805D5D4 }, { 0x29D3, 0, 0x0805D620 },
+ { 0x29D4, 0, 0x0805D724 }, { 0x29D5, 0, 0x0805D824 }, { 0x29D6, 0, 0x0805D864 }, { 0x29D7, 0, 0x0805D8A8 },
+ { 0x29D8, 0, 0x0805D9A8 }, { 0x29D9, 0, 0x0805DAA4 }, { 0x29DA, 0, 0x0805DAFC }, { 0x29DB, 0, 0x0805DB3C },
+ { 0x29DC, 0, 0x0805DBA0 }, { 0x29DD, 0, 0x0805DBDC }, { 0x29DE, 0, 0x0805DC00 }, { 0x29DF, 0, 0x0805DC68 },
+ { 0x29E0, 0, 0x0805DC94 }, { 0x29E1, 0, 0x0805DCC0 }, { 0x29E2, 0, 0x0805DCE8 }, { 0x29E3, 0, 0x0805DE80 },
+ { 0x29E4, 0, 0x0805DEC0 }, { 0x29E5, 0, 0x0805DFAC }, { 0x29E6, 0, 0x0805DFC8 }, { 0x29E7, 0, 0x0805E00C },
+ { 0x29E8, 0, 0x0805E098 }, { 0x29E9, 0, 0x0805E0DC }, { 0x29EA, 0, 0x0805E1D0 }, { 0x29EB, 0, 0x0805E204 },
+ { 0x29EC, 0, 0x0805E234 }, { 0x29ED, 0, 0x0805E258 }, { 0x29EE, 0, 0x0805E2A4 }, { 0x29EF, 0, 0x0805E2D4 },
+ { 0x29F0, 0, 0x0805E314 }, { 0x29F1, 0, 0x0805E344 }, { 0x29F2, 0, 0x0805E390 }, { 0x29F3, 0, 0x0805E3EC },
+ { 0x29F4, 0, 0x0805E428 }, { 0x29F5, 0, 0x0805E49C }, { 0x29F8, 0, 0x0805E4D8 }, { 0x29F9, 0, 0x0805E530 },
+ { 0x29FA, 0, 0x0805E56C }, { 0x29FB, 0, 0x0805E5B8 }, { 0x29FC, 0, 0x0805E608 }, { 0x29FD, 0, 0x0805E654 },
+ { 0x29FE, 0, 0x0805E6C8 }, { 0x29FF, 0, 0x0805E700 }, { 0x2A00, 0, 0x0805E7B4 }, { 0x2A01, 0, 0x0805E7D0 },
+ { 0x2A02, 0, 0x0805E81C }, { 0x2A30, 0, 0x0805E878 }, { 0x2A31, 0, 0x0805E898 }, { 0x2A32, 0, 0x0805E8DC },
+ { 0x2A33, 0, 0x0805E94C }, { 0x2A34, 0, 0x0805EA04 }, { 0x2A35, 0, 0x0805EA90 }, { 0x2A36, 0, 0x0805EB14 },
+ { 0x2A37, 0, 0x0805EB4C }, { 0x2A38, 0, 0x0805EBD0 }, { 0x2A39, 0, 0x0805EC28 }, { 0x2A3A, 0, 0x0805EC40 },
+ { 0x2A94, 0, 0x0805EC78 }, { 0x2A95, 0, 0x0805ECA4 }, { 0x2A96, 0, 0x0805ECD0 }, { 0x2A97, 0, 0x0805EDEC },
+ { 0x2A98, 0, 0x0805EF18 }, { 0x2A99, 0, 0x0805EF50 }, { 0x2A9A, 0, 0x0805EFE0 }, { 0x2A9B, 0, 0x0805F120 },
+ { 0x2A9C, 0, 0x0805F254 }, { 0x2A9D, 0, 0x0805F30C }, { 0x2A9E, 0, 0x0805F3CC }, { 0x2A9F, 0, 0x0805F4B4 },
+ { 0x2AA0, 0, 0x0805F5D0 }, { 0x2AA1, 0, 0x0805F604 }, { 0x2AA2, 0, 0x0805F63C }, { 0x2AA3, 0, 0x0805F68C },
+ { 0x2AA4, 0, 0x0805F6BC }, { 0x2AA5, 0, 0x0805F71C }, { 0x2AA6, 0, 0x0805F760 }, { 0x2AA7, 0, 0x0805F7E4 },
+ { 0x2AA8, 0, 0x0805F81C }, { 0x2AA9, 0, 0x0805F834 }, { 0x2AAA, 0, 0x0805F870 }, { 0x2AAB, 0, 0x0805F888 },
+ { 0x2AAC, 0, 0x0805F8B0 }, { 0x2AAD, 0, 0x0805F8D4 }, { 0x2AAE, 0, 0x0805F944 }, { 0x2AAF, 0, 0x0805F988 },
+ { 0x2AB0, 0, 0x0805F9B0 }, { 0x2AB1, 0, 0x0805FA58 }, { 0x2AB2, 0, 0x0805FA6C }, { 0x2AB3, 0, 0x0805FA80 },
+ { 0x2AB4, 0, 0x0805FB0C }, { 0x2AB5, 0, 0x0805FB20 }, { 0x2AB6, 0, 0x0805FB64 }, { 0x2AB7, 0, 0x0805FB80 },
+ { 0x2AB8, 0, 0x0805FB9C }, { 0x2AB9, 0, 0x0805FBF4 }, { 0x2ABA, 0, 0x0805FC24 }, { 0x2ABB, 0, 0x0805FC88 },
+ { 0x2ABC, 0, 0x0805FCB0 }, { 0x2ABD, 0, 0x0805FCD8 }, { 0x2ABE, 0, 0x0805FDD8 }, { 0x2ABF, 0, 0x0805FDFC },
+ { 0x2AC0, 0, 0x0805FF50 }, { 0x2AC1, 0, 0x0805FF7C }, { 0x2AC2, 0, 0x080600D0 }, { 0x2AC3, 0, 0x080600EC },
+ { 0x2AC4, 0, 0x080601F8 }, { 0x2AC5, 0, 0x0806022C }, { 0x2AC6, 0, 0x08060250 }, { 0x2AC7, 0, 0x08060260 },
+ { 0x2AC8, 0, 0x08060270 }, { 0x2AC9, 0, 0x08060280 }, { 0x2ACA, 0, 0x080602E0 }, { 0x2ACB, 0, 0x0806030C },
+ { 0x2ACC, 0, 0x08060340 }, { 0x2ACD, 0, 0x080603A4 }, { 0x2ACE, 0, 0x080603C0 }, { 0x2ACF, 0, 0x0806047C },
+ { 0x2AD0, 0, 0x08060494 }, { 0x2AD1, 0, 0x0806053C }, { 0x2AD2, 0, 0x080605B0 }, { 0x2AD3, 0, 0x080605FC },
+ { 0x2AD4, 0, 0x0806067C }, { 0x2AD5, 0, 0x080606A0 }, { 0x2AD6, 0, 0x080606BC }, { 0x2AD7, 0, 0x080606EC },
+ { 0x2AD8, 0, 0x08060724 }, { 0x2AD9, 0, 0x08060748 }, { 0x2ADA, 0, 0x08060794 }, { 0x2ADB, 0, 0x08060814 },
+ { 0x2ADC, 0, 0x08060874 }, { 0x2ADD, 0, 0x080608B4 }, { 0x2ADE, 0, 0x080608D0 }, { 0x2ADF, 0, 0x08060960 },
+ { 0x2AE0, 0, 0x08060A00 }, { 0x2AE1, 0, 0x08060AA8 }, { 0x2AE2, 0, 0x08060AD4 }, { 0x2AE3, 0, 0x08060B10 },
+ { 0x2AE4, 0, 0x08060B74 }, { 0x2AE5, 0, 0x08060BD0 }, { 0x2AE6, 0, 0x08060C6C }, { 0x2AEA, 0, 0x08060CDC },
+ { 0x2AEB, 0, 0x08060D1C }, { 0x2AEC, 0, 0x08060D70 }, { 0x2AED, 0, 0x08060D98 }, { 0x2AEE, 0, 0x08060DB8 },
+ { 0x2AF8, 0, 0x08060DC8 }, { 0x2AF9, 0, 0x08060DE4 }, { 0x2AFA, 0, 0x08060EC8 }, { 0x2AFB, 0, 0x08060FC0 },
+ { 0x2AFC, 0, 0x080610CC }, { 0x2AFD, 0, 0x080611BC }, { 0x2AFE, 0, 0x080611F4 }, { 0x2AFF, 0, 0x080612EC },
+ { 0x2B00, 0, 0x080613FC }, { 0x2B01, 0, 0x08061448 }, { 0x2B02, 0, 0x08061470 }, { 0x2B03, 0, 0x080614D0 },
+ { 0x2B04, 0, 0x08061504 }, { 0x2B05, 0, 0x08061578 }, { 0x2B06, 0, 0x080615DC }, { 0x2B07, 0, 0x08061658 },
+ { 0x2B08, 0, 0x0806167C }, { 0x2B09, 0, 0x080616C0 }, { 0x2B0A, 0, 0x08061714 }, { 0x2B0B, 0, 0x08061750 },
+ { 0x2B0C, 0, 0x080617A8 }, { 0x2B0D, 0, 0x080617D8 }, { 0x2B0E, 0, 0x08061810 }, { 0x2B0F, 0, 0x08061890 },
+ { 0x2B10, 0, 0x080619A0 }, { 0x2B11, 0, 0x08061AD8 }, { 0x2B12, 0, 0x08061B44 }, { 0x2B13, 0, 0x08061BA0 },
+ { 0x2B14, 0, 0x08061C0C }, { 0x2B15, 0, 0x08061C44 }, { 0x2B16, 0, 0x08061CE0 }, { 0x2B17, 0, 0x08061D4C },
+ { 0x2B18, 0, 0x08061D70 }, { 0x2B19, 0, 0x08061DD4 }, { 0x2B1A, 0, 0x08061EB4 }, { 0x2B1B, 0, 0x08061F10 },
+ { 0x2B1C, 0, 0x08061F88 }, { 0x2B1D, 0, 0x08061FC4 }, { 0x2B1E, 0, 0x08061FEC }, { 0x2B1F, 0, 0x08062024 },
+ { 0x2B20, 0, 0x0806209C }, { 0x2B21, 0, 0x0806212C }, { 0x2B22, 0, 0x08062164 }, { 0x2B23, 0, 0x080621A8 },
+ { 0x2B24, 0, 0x0806229C }, { 0x2B25, 0, 0x080622D8 }, { 0x2B26, 0, 0x080622F8 }, { 0x2B27, 0, 0x08062350 },
+ { 0x2B28, 0, 0x080623A0 }, { 0x2B29, 0, 0x080623D0 }, { 0x2B2A, 0, 0x08062428 }, { 0x2B2B, 0, 0x08062478 },
+ { 0x2B2C, 0, 0x080624AC }, { 0x2B2D, 0, 0x08062500 }, { 0x2B2E, 0, 0x08062550 }, { 0x2B2F, 0, 0x08062580 },
+ { 0x2B30, 0, 0x080625D4 }, { 0x2B31, 0, 0x08062624 }, { 0x2B32, 0, 0x08062650 }, { 0x2B33, 0, 0x08062670 },
+ { 0x2B34, 0, 0x080626B0 }, { 0x2B35, 0, 0x080626DC }, { 0x2B36, 0, 0x080626FC }, { 0x2B37, 0, 0x0806273C },
+ { 0x2B38, 0, 0x080627D8 }, { 0x2B39, 0, 0x08062890 }, { 0x2B3A, 0, 0x08062910 }, { 0x2B3B, 0, 0x08062968 },
+ { 0x2B3C, 0, 0x080629A4 }, { 0x2B3D, 0, 0x080629E0 }, { 0x2B3E, 0, 0x08062A90 }, { 0x2B3F, 0, 0x08062AD8 },
+ { 0x2B40, 0, 0x08062B34 }, { 0x2B5C, 0, 0x08062B84 }, { 0x2B5D, 0, 0x08062C3C }, { 0x2B5E, 0, 0x08062C68 },
+ { 0x2B5F, 0, 0x08062C94 }, { 0x2B60, 0, 0x08062CE8 }, { 0x2B61, 0, 0x08062D8C }, { 0x2B62, 0, 0x08062E34 },
+ { 0x2B63, 0, 0x08062E84 }, { 0x2B64, 0, 0x08062F18 }, { 0x2B65, 0, 0x08062F50 }, { 0x2B66, 0, 0x08062F98 },
+ { 0x2B67, 0, 0x08062FE0 }, { 0x32C8, 0, 0x08063054 }, { 0x32C9, 0, 0x080630D8 }, { 0x32CA, 0, 0x08063120 },
+ { 0x32CB, 0, 0x08063184 }, { 0x32CC, 0, 0x080631E0 }, { 0x32CD, 0, 0x08063210 }, { 0x32CE, 0, 0x0806326C },
+ { 0x32CF, 0, 0x08063294 }, { 0x32D0, 0, 0x080632B4 }, { 0x32D1, 0, 0x08063300 }, { 0x32D2, 0, 0x08063338 },
+ { 0x32D3, 0, 0x08063384 }, { 0x32D4, 0, 0x080633B4 }, { 0x332C, 0, 0x080633E8 }, { 0x332D, 0, 0x08063408 },
+ { 0x332E, 0, 0x080634FC }, { 0x332F, 0, 0x0806356C }, { 0x3330, 0, 0x08063594 }, { 0x3331, 0, 0x080635AC },
+ { 0x3332, 0, 0x080635D0 }, { 0x3333, 0, 0x08063618 }, { 0x3334, 0, 0x0806369C }, { 0x3335, 0, 0x08063714 },
+ { 0x3336, 0, 0x08063734 }, { 0x3337, 0, 0x08063788 }, { 0x3338, 0, 0x080637AC }, { 0x3339, 0, 0x080637CC },
+ { 0x333A, 0, 0x08063838 }, { 0x333B, 0, 0x08063868 }, { 0x333C, 0, 0x08063898 }, { 0x333D, 0, 0x08063948 },
+ { 0x333E, 0, 0x08063988 }, { 0x333F, 0, 0x080639AC }, { 0x3340, 0, 0x08063A58 }, { 0x3341, 0, 0x08063AB0 },
+ { 0x3342, 0, 0x08063B24 }, { 0x3343, 0, 0x08063BBC }, { 0x3344, 0, 0x08063C28 }, { 0x3345, 0, 0x08063CF0 },
+ { 0x3346, 0, 0x08063D24 }, { 0x3347, 0, 0x08063D5C }, { 0x3348, 0, 0x08063D8C }, { 0x3349, 0, 0x08063DEC },
+ { 0x334A, 0, 0x08063E70 }, { 0x334B, 0, 0x08063EA8 }, { 0x334C, 0, 0x08063EC4 }, { 0x334D, 0, 0x08063FB4 },
+ { 0x334E, 0, 0x08063FDC }, { 0x334F, 0, 0x08064038 }, { 0x3350, 0, 0x08064058 }, { 0x3351, 0, 0x0806408C },
+ { 0x3352, 0, 0x080640B0 }, { 0x3353, 0, 0x080640E0 }, { 0x3354, 0, 0x08064168 }, { 0x3355, 0, 0x080641B4 },
+ { 0x3356, 0, 0x080641EC }, { 0x3357, 0, 0x08064218 }, { 0x3358, 0, 0x08064230 }, { 0x3359, 0, 0x08064264 },
+ { 0x335A, 0, 0x08064298 }, { 0x335B, 0, 0x080642F0 }, { 0x335C, 0, 0x08064354 }, { 0x335D, 0, 0x0806437C },
+ { 0x335E, 0, 0x080643B4 }, { 0x335F, 0, 0x080643E4 }, { 0x3360, 0, 0x0806444C }, { 0x3361, 0, 0x08064498 },
+ { 0x3362, 0, 0x080644EC }, { 0x3363, 0, 0x0806453C }, { 0x3364, 0, 0x08064564 }, { 0x3365, 0, 0x08064654 },
+ { 0x3366, 0, 0x08064718 }, { 0x3367, 0, 0x080647E4 }, { 0x3368, 0, 0x08064860 }, { 0x3369, 0, 0x080648B8 },
+ { 0x336A, 0, 0x08064988 }, { 0x336B, 0, 0x080649F4 }, { 0x336C, 0, 0x08064A44 }, { 0x336D, 0, 0x08064AA0 },
+ { 0x336E, 0, 0x08064AE8 }, { 0x336F, 0, 0x08064B10 }, { 0x3370, 0, 0x08064B64 }, { 0x3371, 0, 0x08064BBC },
+ { 0x3390, 0, 0x08064BEC }, { 0x3391, 0, 0x08064C24 }, { 0x3392, 0, 0x08064CE0 }, { 0x3393, 0, 0x08064D4C },
+ { 0x3394, 0, 0x08064DA0 }, { 0x3395, 0, 0x08064E04 }, { 0x3396, 0, 0x08064F10 }, { 0x3397, 0, 0x08064F84 },
+ { 0x3398, 0, 0x08064FBC }, { 0x3399, 0, 0x08065070 }, { 0x339A, 0, 0x080650DC }, { 0x339B, 0, 0x08065144 },
+ { 0x339C, 0, 0x0806516C }, { 0x339D, 0, 0x0806519C }, { 0x339E, 0, 0x080651D4 }, { 0x339F, 0, 0x080651F0 },
+ { 0x33A0, 0, 0x0806524C }, { 0x33A1, 0, 0x08065358 }, { 0x33A2, 0, 0x080653CC }, { 0x33A3, 0, 0x08065408 },
+ { 0x33A4, 0, 0x08065438 }, { 0x33A5, 0, 0x08065470 }, { 0x33A6, 0, 0x080654CC }, { 0x33A7, 0, 0x08065510 },
+ { 0x33A8, 0, 0x0806555C }, { 0x33A9, 0, 0x080655A0 }, { 0x33AA, 0, 0x080655C0 }, { 0x33AB, 0, 0x08065600 },
+ { 0x33AC, 0, 0x08065658 }, { 0x33AD, 0, 0x08065678 }, { 0x33AE, 0, 0x08065710 }, { 0x33AF, 0, 0x080657A8 },
+ { 0x33B0, 0, 0x080657D0 }, { 0x33B1, 0, 0x080657E8 }, { 0x33B2, 0, 0x08065860 }, { 0x33B3, 0, 0x080658E4 },
+ { 0x33B4, 0, 0x08065930 }, { 0x33B5, 0, 0x0806597C }, { 0x33B6, 0, 0x080659DC }, { 0x33B7, 0, 0x08065A28 },
+ { 0x33B8, 0, 0x08065ABC }, { 0x33B9, 0, 0x08065AE0 }, { 0x33BA, 0, 0x08065B08 }, { 0x33BB, 0, 0x08065B7C },
+ { 0x33BC, 0, 0x08065BD8 }, { 0x33BD, 0, 0x08065C5C }, { 0x33BE, 0, 0x08065C88 }, { 0x33BF, 0, 0x08065CCC },
+ { 0x33C0, 0, 0x08065D30 }, { 0x33C1, 0, 0x08065DD4 }, { 0x33C2, 0, 0x08065E24 }, { 0x33C3, 0, 0x08065E84 },
+ { 0x33C4, 0, 0x08065F4C }, { 0x33C5, 0, 0x08066024 }, { 0x33C6, 0, 0x08066120 }, { 0x33C7, 0, 0x08066144 },
+ { 0x33C8, 0, 0x08066200 }, { 0x33C9, 0, 0x08066268 }, { 0x33CA, 0, 0x0806629C }, { 0x33CB, 0, 0x080662D0 },
+ { 0x33CC, 0, 0x0806630C }, { 0x33CD, 0, 0x08066324 }, { 0x33CE, 0, 0x0806635C }, { 0x33CF, 0, 0x0806637C },
+ { 0x33D0, 0, 0x080663AC }, { 0x33D1, 0, 0x08066464 }, { 0x33D2, 0, 0x08066578 }, { 0x33D3, 0, 0x080665F4 },
+ { 0x33D4, 0, 0x0806665C }, { 0x33D5, 0, 0x080666D0 }, { 0x33D6, 0, 0x08066708 }, { 0x33D7, 0, 0x08066788 },
+ { 0x33D8, 0, 0x080667D4 }, { 0x33D9, 0, 0x08066834 }, { 0x33F4, 0, 0x080668FC }, { 0x33F5, 0, 0x08066934 },
+ { 0x33F6, 0, 0x080669DC }, { 0x33F7, 0, 0x08066A3C }, { 0x33F9, 0, 0x08066B00 }, { 0x3458, 0, 0x08066B40 },
+ { 0x3459, 0, 0x08066B60 }, { 0x345A, 0, 0x08066BC0 }, { 0x345B, 0, 0x08066C10 }, { 0x345C, 0, 0x08066C7C },
+ { 0x345D, 0, 0x08066CB8 }, { 0x345E, 0, 0x08066D20 }, { 0x345F, 0, 0x08066D90 }, { 0x3460, 0, 0x08066E58 },
+ { 0x3461, 0, 0x08066E9C }, { 0x3462, 0, 0x08066EE8 }, { 0x3463, 0, 0x08066F38 }, { 0x3464, 0, 0x08066F64 },
+ { 0x3465, 0, 0x08066FF8 }, { 0x3466, 0, 0x080670A4 }, { 0x3467, 0, 0x080670F0 }, { 0x3468, 0, 0x08067144 },
+ { 0x3469, 0, 0x08067174 }, { 0x346A, 0, 0x080671E8 }, { 0x346B, 0, 0x08067208 }, { 0x346C, 0, 0x08067224 },
+ { 0x346D, 0, 0x0806728C }, { 0x346E, 0, 0x0806731C }, { 0x346F, 0, 0x0806739C }, { 0x3470, 0, 0x08067400 },
+ { 0x3471, 0, 0x0806743C }, { 0x3472, 0, 0x0806746C }, { 0x3473, 0, 0x080674B0 }, { 0x3474, 0, 0x08067520 },
+ { 0x3475, 0, 0x08067594 }, { 0x3476, 0, 0x080675B8 }, { 0x3477, 0, 0x080675E0 }, { 0x3478, 0, 0x08067618 },
+ { 0x3479, 0, 0x08067648 }, { 0x347A, 0, 0x08067688 }, { 0x347B, 0, 0x080676B0 }, { 0x347C, 0, 0x080676F0 },
+ { 0x347D, 0, 0x08067760 }, { 0x347E, 0, 0x080677A4 }, { 0x347F, 0, 0x080677F4 }, { 0x3480, 0, 0x0806782C },
+ { 0x3481, 0, 0x080678A0 }, { 0x3482, 0, 0x080678C8 }, { 0x3483, 0, 0x080678F8 }, { 0x3484, 0, 0x08067934 },
+ { 0x3485, 0, 0x08067990 }, { 0x3486, 0, 0x080679E0 }, { 0x3487, 0, 0x08067A18 }, { 0x3488, 0, 0x08067A68 },
+ { 0x3489, 0, 0x08067AE8 }, { 0x348A, 0, 0x08067B54 }, { 0x348B, 0, 0x08067BBC }, { 0x348C, 0, 0x08067C0C },
+ { 0x348D, 0, 0x08067C5C }, { 0x348E, 0, 0x08067CB8 }, { 0x348F, 0, 0x08067D6C }, { 0x3490, 0, 0x08067DE0 },
+ { 0x3491, 0, 0x08067E2C }, { 0x3492, 0, 0x08067E80 }, { 0x3493, 0, 0x08067EDC }, { 0x3494, 0, 0x08067F20 },
+ { 0x3495, 0, 0x08067F44 }, { 0x3496, 0, 0x08067F64 }, { 0x3497, 0, 0x08067FEC }, { 0x3498, 0, 0x0806803C },
+ { 0x3499, 0, 0x08068094 }, { 0x349A, 0, 0x080680C8 }, { 0x349B, 0, 0x080680FC }, { 0x349C, 0, 0x0806812C },
+ { 0x349D, 0, 0x08068158 }, { 0x349E, 0, 0x08068180 }, { 0x349F, 0, 0x080681C0 }, { 0x34A0, 0, 0x08068224 },
+ { 0x34A1, 0, 0x08068278 }, { 0x34A2, 0, 0x080682C0 }, { 0x34A3, 0, 0x0806830C }, { 0x34A4, 0, 0x08068394 },
+ { 0x34A5, 0, 0x080683F4 }, { 0x34A6, 0, 0x08068430 }, { 0x34A7, 0, 0x08068498 }, { 0x34A8, 0, 0x080684FC },
+ { 0x34A9, 0, 0x08068544 }, { 0x34AA, 0, 0x08068564 }, { 0x34AB, 0, 0x08068598 }, { 0x34AC, 0, 0x0806860C },
+ { 0x34AD, 0, 0x08068640 }, { 0x34AE, 0, 0x080686F4 }, { 0x34AF, 0, 0x08068768 }, { 0x34B0, 0, 0x08068780 },
+ { 0x34B1, 0, 0x080687E0 }, { 0x34B2, 0, 0x080687F8 }, { 0x34B3, 0, 0x08068860 }, { 0x3520, 0, 0x080688F4 },
+ { 0x3521, 0, 0x08068958 }, { 0x3522, 0, 0x080689C8 }, { 0x3523, 0, 0x08068A38 }, { 0x3524, 0, 0x08068A88 },
+ { 0x3525, 0, 0x08068B04 }, { 0x3526, 0, 0x08068B30 }, { 0x3527, 0, 0x08068B7C }, { 0x3528, 0, 0x08068CA0 },
+ { 0x3529, 0, 0x08068CF4 }, { 0x352A, 0, 0x08068D1C }, { 0x352B, 0, 0x08068DB0 }, { 0x352C, 0, 0x08068E28 },
+ { 0x352D, 0, 0x08068E78 }, { 0x352E, 0, 0x08068F14 }, { 0x352F, 0, 0x08068F78 }, { 0x3530, 0, 0x08068FA0 },
+ { 0x3531, 0, 0x08069020 }, { 0x3532, 0, 0x080690CC }, { 0x3533, 0, 0x0806913C }, { 0x3534, 0, 0x080691B0 },
+ { 0x3535, 0, 0x08069224 }, { 0x3536, 0, 0x0806923C }, { 0x3537, 0, 0x08069284 }, { 0x3538, 0, 0x080692D8 },
+ { 0x3539, 0, 0x08069314 }, { 0x353A, 0, 0x08069358 }, { 0x353B, 0, 0x08069390 }, { 0x353C, 0, 0x080693E4 },
+ { 0x353D, 0, 0x08069434 }, { 0x353E, 0, 0x08069490 }, { 0x353F, 0, 0x080694C4 }, { 0x3540, 0, 0x08069524 },
+ { 0x3541, 0, 0x0806957C }, { 0x3542, 0, 0x080695C0 }, { 0x3543, 0, 0x08069608 }, { 0x3544, 0, 0x08069668 },
+ { 0x3545, 0, 0x080696DC }, { 0x3546, 0, 0x08069734 }, { 0x3548, 0, 0x08069774 }, { 0x3549, 0, 0x08069814 },
+ { 0x354A, 0, 0x080698A0 }, { 0x354B, 0, 0x08069930 }, { 0x354C, 0, 0x08069998 }, { 0xFFFC, 0, 0x080699C8 },
+ { 0xFFFD, 0, 0x080699D4 }, { 0xFFFF, 0, NULL },
+};
+
+MessageTableEntry D_801CFB08[46] = {
+ { 0x4E20, 0xB0, 0x07000000 }, { 0x4E21, 0xB0, 0x0700003C }, { 0x4E22, 0xB0, 0x07000094 },
+ { 0x4E23, 0xB0, 0x070000F0 }, { 0x4E24, 0xB0, 0x07000140 }, { 0x4E25, 0xB0, 0x0700019C },
+ { 0x4E26, 0xB0, 0x070001D8 }, { 0x4E27, 0xB0, 0x07000248 }, { 0x4E28, 0xB0, 0x0700027C },
+ { 0x4E29, 0xB0, 0x070002E0 }, { 0x4E2A, 0xB0, 0x0700033C }, { 0x4E2B, 0xB0, 0x07000384 },
+ { 0x4E2C, 0xB0, 0x070003C8 }, { 0x4E2D, 0xB0, 0x0700040C }, { 0x4E2E, 0xB0, 0x07000450 },
+ { 0x4E2F, 0xB0, 0x070004A8 }, { 0x4E30, 0xB0, 0x07000504 }, { 0x4E31, 0xB0, 0x07000564 },
+ { 0x4E32, 0xB0, 0x070005CC }, { 0x4E33, 0xB0, 0x07000610 }, { 0x4E34, 0xB0, 0x07000654 },
+ { 0x4E35, 0xB0, 0x07000698 }, { 0x4E36, 0xB0, 0x070006F8 }, { 0x4E37, 0xB0, 0x07000750 },
+ { 0x4E38, 0xB0, 0x07000798 }, { 0x4E39, 0xB0, 0x0700081C }, { 0x4E3A, 0xB0, 0x07000888 },
+ { 0x4E3B, 0xB0, 0x07000924 }, { 0x4E3C, 0xB0, 0x070009B4 }, { 0x4E3D, 0xB0, 0x070009E8 },
+ { 0x4E3E, 0xB0, 0x07000A78 }, { 0x4E3F, 0xB0, 0x07000AB0 }, { 0x4E40, 0xB0, 0x07000B2C },
+ { 0x4E41, 0xB0, 0x07000B54 }, { 0x4E42, 0xB0, 0x07000B7C }, { 0x4E43, 0xB0, 0x07000BA4 },
+ { 0x4E44, 0xB0, 0x07000BCC }, { 0x4E45, 0xB0, 0x07000BF4 }, { 0x4E46, 0xB0, 0x07000C1C },
+ { 0x4E47, 0xB0, 0x07000C44 }, { 0x4E48, 0xB0, 0x07000C6C }, { 0x4E49, 0xB0, 0x07000CEC },
+ { 0x4E4A, 0xB0, 0x07000D5C }, { 0x4E4B, 0xB0, 0x07000DC8 }, { 0x4E4C, 0xB0, 0x07000E54 },
+ { 0xFFFF, 0, NULL },
+};
diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c
index a3dc07aaf..cbfcd0481 100644
--- a/src/code/z_parameter.c
+++ b/src/code/z_parameter.c
@@ -1709,7 +1709,7 @@ void Interface_UpdateButtonsPart2(PlayState* play) {
if (CHECK_EVENTINF(EVENTINF_41)) {
// Related to swamp boat (non-minigame)?
for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) {
- if ((GET_CUR_FORM_BTN_ITEM(i) != ITEM_PICTOGRAPH_BOX) || (msgCtx->msgMode != 0)) {
+ if ((GET_CUR_FORM_BTN_ITEM(i) != ITEM_PICTOGRAPH_BOX) || (msgCtx->msgMode != MSGMODE_NONE)) {
if (gSaveContext.buttonStatus[i] == BTN_ENABLED) {
restoreHudVisibility = true;
}
@@ -3657,7 +3657,7 @@ void Magic_Update(PlayState* play) {
case MAGIC_STATE_CONSUME_LENS:
// Slowly consume magic while Lens of Truth is active
if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE) &&
- (msgCtx->msgMode == 0) && (play->gameOverCtx.state == GAMEOVER_INACTIVE) &&
+ (msgCtx->msgMode == MSGMODE_NONE) && (play->gameOverCtx.state == GAMEOVER_INACTIVE) &&
(play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF) &&
!Play_InCsMode(play)) {
@@ -3700,7 +3700,7 @@ void Magic_Update(PlayState* play) {
// fallthrough
case MAGIC_STATE_CONSUME_GORON_ZORA:
if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == 0) &&
- (msgCtx->msgMode == 0) && (play->gameOverCtx.state == GAMEOVER_INACTIVE) &&
+ (msgCtx->msgMode == MSGMODE_NONE) && (play->gameOverCtx.state == GAMEOVER_INACTIVE) &&
(play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF)) {
if (!Play_InCsMode(play)) {
interfaceCtx->magicConsumptionTimer--;
@@ -3722,7 +3722,7 @@ void Magic_Update(PlayState* play) {
case MAGIC_STATE_CONSUME_GIANTS_MASK:
if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE) &&
- (msgCtx->msgMode == 0) && (play->gameOverCtx.state == GAMEOVER_INACTIVE) &&
+ (msgCtx->msgMode == MSGMODE_NONE) && (play->gameOverCtx.state == GAMEOVER_INACTIVE) &&
(play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF)) {
if (!Play_InCsMode(play)) {
interfaceCtx->magicConsumptionTimer--;
@@ -3932,7 +3932,7 @@ void Interface_DrawItemButtons(PlayState* play) {
if ((gSaveContext.hudVisibility == HUD_VISIBILITY_NONE) ||
(gSaveContext.hudVisibility == HUD_VISIBILITY_NONE_ALT) ||
(gSaveContext.hudVisibility == HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE) ||
- (msgCtx->msgMode != 0)) {
+ (msgCtx->msgMode != MSGMODE_NONE)) {
temp = 0;
} else if (player->stateFlags1 & PLAYER_STATE1_200000) {
temp = 70;
@@ -4400,8 +4400,8 @@ void Interface_DrawClock(PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
if ((R_TIME_SPEED != 0) &&
- ((msgCtx->msgMode == 0) || ((play->actorCtx.flags & ACTORCTX_FLAG_1) && !Play_InCsMode(play)) ||
- (msgCtx->msgMode == 0) || ((msgCtx->currentTextId >= 0x100) && (msgCtx->currentTextId <= 0x200)) ||
+ ((msgCtx->msgMode == MSGMODE_NONE) || ((play->actorCtx.flags & ACTORCTX_FLAG_1) && !Play_InCsMode(play)) ||
+ (msgCtx->msgMode == MSGMODE_NONE) || ((msgCtx->currentTextId >= 0x100) && (msgCtx->currentTextId <= 0x200)) ||
(gSaveContext.gameMode == GAMEMODE_END_CREDITS)) &&
!FrameAdvance_IsEnabled(&play->state) && !Environment_IsTimeStopped() && (gSaveContext.save.day <= 3)) {
/**
@@ -5432,7 +5432,7 @@ void Interface_StartMoonCrash(PlayState* play) {
}
gSaveContext.save.day = 4;
- gSaveContext.save.daysElapsed = 4;
+ gSaveContext.save.eventDayCount = 4;
gSaveContext.save.time = CLOCK_TIME(6, 0) + 10;
play->nextEntrance = ENTRANCE(TERMINA_FIELD, 12);
gSaveContext.nextCutsceneIndex = 0;
@@ -5440,31 +5440,31 @@ void Interface_StartMoonCrash(PlayState* play) {
play->transitionType = TRANS_TYPE_FADE_WHITE;
}
-void Interface_GetTimerDigits(u64 timer, s16* timerArr) {
- u64 time = timer;
+void Interface_GetTimerDigits(OSTime time, s16* timerArr) {
+ OSTime t = time;
// 6 minutes
- timerArr[0] = time / SECONDS_TO_TIMER(360);
- time -= timerArr[0] * SECONDS_TO_TIMER(360);
+ timerArr[0] = t / SECONDS_TO_TIMER(360);
+ t -= timerArr[0] * SECONDS_TO_TIMER(360);
// minutes
- timerArr[1] = time / SECONDS_TO_TIMER(60);
- time -= timerArr[1] * SECONDS_TO_TIMER(60);
+ timerArr[1] = t / SECONDS_TO_TIMER(60);
+ t -= timerArr[1] * SECONDS_TO_TIMER(60);
// 10 seconds
- timerArr[3] = time / SECONDS_TO_TIMER(10);
- time -= timerArr[3] * SECONDS_TO_TIMER(10);
+ timerArr[3] = t / SECONDS_TO_TIMER(10);
+ t -= timerArr[3] * SECONDS_TO_TIMER(10);
// seconds
- timerArr[4] = time / SECONDS_TO_TIMER(1);
- time -= timerArr[4] * SECONDS_TO_TIMER(1);
+ timerArr[4] = t / SECONDS_TO_TIMER(1);
+ t -= timerArr[4] * SECONDS_TO_TIMER(1);
// 100 milliseconds
- timerArr[6] = time / SECONDS_TO_TIMER_PRECISE(0, 10);
- time -= timerArr[6] * SECONDS_TO_TIMER_PRECISE(0, 10);
+ timerArr[6] = t / SECONDS_TO_TIMER_PRECISE(0, 10);
+ t -= timerArr[6] * SECONDS_TO_TIMER_PRECISE(0, 10);
// 10 milliseconds
- timerArr[7] = time;
+ timerArr[7] = t;
}
#define IS_POSTMAN_TIMER_DRAWN \
@@ -5500,8 +5500,8 @@ void Interface_DrawTimers(PlayState* play) {
// Not satisfying any of these conditions will pause the timer
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))) &&
+ ((msgCtx->msgMode == MSGMODE_NONE) || ((msgCtx->msgMode != MSGMODE_NONE) && (msgCtx->currentTextId >= 0x1BB2) &&
+ (msgCtx->currentTextId <= 0x1BB6))) &&
!(player->stateFlags1 & PLAYER_STATE1_200) && (play->transitionTrigger == TRANS_TRIGGER_OFF) &&
(play->transitionMode == TRANS_MODE_OFF) && !Play_InCsMode(play)) {
@@ -5950,7 +5950,7 @@ void Interface_UpdateBottleTimers(PlayState* play) {
// Not satisfying any of these conditions will pause the bottle timer
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->msgMode == MSGMODE_NONE) || ((msgCtx->currentTextId >= 0x100) && (msgCtx->currentTextId <= 0x200)) ||
((msgCtx->currentTextId >= 0x1BB2) && (msgCtx->currentTextId <= 0x1BB6))) &&
(play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF) &&
!Play_InCsMode(play)) {
@@ -6870,7 +6870,7 @@ void Interface_Update(PlayState* play) {
interfaceCtx->aButtonRoll = -15700.0f;
interfaceCtx->aButtonState = A_BTN_STATE_2;
- if ((msgCtx->msgMode != 0) && (msgCtx->unk12006 == 0x26)) {
+ if ((msgCtx->msgMode != MSGMODE_NONE) && (msgCtx->textboxYTarget == 38)) {
R_A_BTN_Y_OFFSET = -14;
} else {
R_A_BTN_Y_OFFSET = 0;
@@ -7018,8 +7018,9 @@ void Interface_Update(PlayState* play) {
// 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;
+ if ((msgCtx->ocarinaAction != OCARINA_ACTION_CHECK_NOTIME_DONE) &&
+ (gSaveContext.sunsSongState == SUNSSONG_START)) {
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
}
// handle suns song in areas where time moves
@@ -7039,7 +7040,7 @@ void Interface_Update(PlayState* play) {
// Daytime has been reached. End suns song effect
gSaveContext.sunsSongState = SUNSSONG_INACTIVE;
R_TIME_SPEED = sPrevTimeSpeed;
- play->msgCtx.ocarinaMode = 4;
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
}
} else {
// Daytime
@@ -7047,7 +7048,7 @@ void Interface_Update(PlayState* play) {
// Nighttime has been reached. End suns song effect
gSaveContext.sunsSongState = SUNSSONG_INACTIVE;
R_TIME_SPEED = sPrevTimeSpeed;
- play->msgCtx.ocarinaMode = 4;
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
}
}
} else {
@@ -7115,16 +7116,16 @@ void Interface_Init(PlayState* play) {
interfaceCtx->healthTimer = 200;
parameterStaticSize = SEGMENT_ROM_SIZE(parameter_static);
- interfaceCtx->parameterSegment = THA_AllocTailAlign16(&play->state.heap, parameterStaticSize);
+ interfaceCtx->parameterSegment = THA_AllocTailAlign16(&play->state.tha, parameterStaticSize);
DmaMgr_SendRequest0(interfaceCtx->parameterSegment, SEGMENT_ROM_START(parameter_static), parameterStaticSize);
- interfaceCtx->doActionSegment = THA_AllocTailAlign16(&play->state.heap, 0xC90);
+ interfaceCtx->doActionSegment = THA_AllocTailAlign16(&play->state.tha, 0xC90);
DmaMgr_SendRequest0(interfaceCtx->doActionSegment, SEGMENT_ROM_START(do_action_static), 0x300);
DmaMgr_SendRequest0(interfaceCtx->doActionSegment + 0x300, SEGMENT_ROM_START(do_action_static) + 0x480, 0x180);
Interface_NewDay(play, CURRENT_DAY);
- interfaceCtx->iconItemSegment = THA_AllocTailAlign16(&play->state.heap, 0x4000);
+ interfaceCtx->iconItemSegment = THA_AllocTailAlign16(&play->state.tha, 0x4000);
if (CUR_FORM_EQUIP(EQUIP_SLOT_B) < ITEM_F0) {
Interface_LoadItemIconImpl(play, EQUIP_SLOT_B);
diff --git a/src/code/z_play.c b/src/code/z_play.c
index 9bb8d5817..5d9b2c048 100644
--- a/src/code/z_play.c
+++ b/src/code/z_play.c
@@ -1,3 +1,4 @@
+#include "prevent_bss_reordering.h"
#include "z64.h"
#include "regs.h"
#include "functions.h"
@@ -360,8 +361,8 @@ void Play_ClearTransition(PlayState* this) {
Gfx* Play_SetFog(PlayState* this, Gfx* gfx) {
s32 fogFar = this->lightCtx.zFar * (5.0f / 64.0f);
- return Gfx_SetFogWithSync(gfx, this->lightCtx.fogColor.r, this->lightCtx.fogColor.g, this->lightCtx.fogColor.b, 0,
- this->lightCtx.fogNear, ((fogFar <= 1000) ? 1000 : fogFar));
+ return Gfx_SetFogWithSync(gfx, this->lightCtx.fogColor[0], this->lightCtx.fogColor[1], this->lightCtx.fogColor[2],
+ 0, this->lightCtx.fogNear, ((fogFar <= 1000) ? 1000 : fogFar));
}
void Play_Destroy(GameState* thisx) {
@@ -524,7 +525,7 @@ void Play_UpdateWaterCamera(PlayState* this, Camera* camera) {
}
func_801A3EC0(0x20);
- func_800F6834(this, lightIndex);
+ Environment_EnableUnderwaterLights(this, lightIndex);
if ((sQuakeIndex == -1) || (Quake_GetTimeLeft(sQuakeIndex) == 10)) {
s16 quakeIndex = Quake_Request(camera, QUAKE_TYPE_5);
@@ -553,7 +554,7 @@ void Play_UpdateWaterCamera(PlayState* this, Camera* camera) {
if (sQuakeIndex != 0) {
Quake_RemoveRequest(sQuakeIndex);
}
- func_800F694C(this);
+ Environment_DisableUnderwaterLights(this);
func_801A3EC0(0);
}
}
@@ -585,20 +586,20 @@ void Play_UpdateTransition(PlayState* this) {
!CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) ||
((this->nextEntrance == ENTRANCE(ROAD_TO_IKANA, 1)) &&
!CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE))) &&
- (!func_800FE590(this) || (Entrance_GetSceneId(this->nextEntrance + sceneLayer) < 0) ||
+ (!Environment_IsFinalHours(this) || (Entrance_GetSceneId(this->nextEntrance + sceneLayer) < 0) ||
(AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) != NA_BGM_FINAL_HOURS))) {
func_801A4058(20);
gSaveContext.seqId = (u8)NA_BGM_DISABLED;
gSaveContext.ambienceId = AMBIENCE_ID_DISABLED;
}
- if (func_800FD768()) {
+ if (Environment_IsForcedSequenceDisabled()) {
func_801A4058(20);
gSaveContext.seqId = (u8)NA_BGM_DISABLED;
gSaveContext.ambienceId = AMBIENCE_ID_DISABLED;
}
- if (func_800FE590(this) && (Entrance_GetSceneId(this->nextEntrance + sceneLayer) >= 0) &&
+ if (Environment_IsFinalHours(this) && (Entrance_GetSceneId(this->nextEntrance + sceneLayer) >= 0) &&
(AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) == NA_BGM_FINAL_HOURS)) {
func_801A41C8(20);
}
@@ -824,10 +825,10 @@ void Play_UpdateTransition(PlayState* this) {
case TRANS_MODE_SANDSTORM_INIT:
if (this->transitionTrigger != TRANS_TRIGGER_END) {
- this->envCtx.sandstormState = 1;
+ this->envCtx.sandstormState = SANDSTORM_FILL;
this->transitionMode = TRANS_MODE_SANDSTORM;
} else {
- this->envCtx.sandstormState = 2;
+ this->envCtx.sandstormState = SANDSTORM_UNFILL;
this->envCtx.sandstormPrimA = 255;
this->envCtx.sandstormEnvA = 255;
this->transitionMode = TRANS_MODE_SANDSTORM;
@@ -856,7 +857,7 @@ void Play_UpdateTransition(PlayState* this) {
case TRANS_MODE_SANDSTORM_END_INIT:
if (this->transitionTrigger == TRANS_TRIGGER_END) {
- this->envCtx.sandstormState = 4;
+ this->envCtx.sandstormState = SANDSTORM_DISSIPATE;
this->envCtx.sandstormPrimA = 255;
this->envCtx.sandstormEnvA = 255;
@@ -921,8 +922,8 @@ void Play_UpdateMain(PlayState* this) {
u8 freezeFlashTimer;
s32 sp5C = false;
- gSegments[4] = VIRTUAL_TO_PHYSICAL(this->objectCtx.status[this->objectCtx.mainKeepIndex].segment);
- gSegments[5] = VIRTUAL_TO_PHYSICAL(this->objectCtx.status[this->objectCtx.subKeepIndex].segment);
+ gSegments[4] = VIRTUAL_TO_PHYSICAL(this->objectCtx.slots[this->objectCtx.mainKeepSlot].segment);
+ gSegments[5] = VIRTUAL_TO_PHYSICAL(this->objectCtx.slots[this->objectCtx.subKeepSlot].segment);
gSegments[2] = VIRTUAL_TO_PHYSICAL(this->sceneSegment);
if (R_PICTO_PHOTO_STATE == PICTO_PHOTO_STATE_PROCESS) {
@@ -961,9 +962,9 @@ void Play_UpdateMain(PlayState* this) {
Play_UpdateTransition(this);
if (gTransitionTileState != TRANS_TILE_READY) {
if ((gSaveContext.gameMode == GAMEMODE_NORMAL) &&
- (((this->msgCtx.msgMode == 0)) ||
- ((this->msgCtx.currentTextId == 0xFF) && (this->msgCtx.msgMode == 0x42) &&
- (this->msgCtx.unk12020 == 0x41)) ||
+ (((this->msgCtx.msgMode == MSGMODE_NONE)) ||
+ ((this->msgCtx.currentTextId == 0xFF) && (this->msgCtx.msgMode == MSGMODE_TEXT_DONE) &&
+ (this->msgCtx.textboxEndType == TEXTBOX_ENDTYPE_41)) ||
((this->msgCtx.currentTextId >= 0x100) && (this->msgCtx.currentTextId <= 0x200))) &&
(this->gameOverCtx.state == GAMEOVER_INACTIVE)) {
KaleidoSetup_Update(this);
@@ -972,7 +973,7 @@ void Play_UpdateMain(PlayState* this) {
sp5C = (this->pauseCtx.state != 0) || (this->pauseCtx.debugEditor != DEBUG_EDITOR_NONE);
AnimationContext_Reset(&this->animationCtx);
- Object_UpdateBank(&this->objectCtx);
+ Object_UpdateEntries(&this->objectCtx);
if (!sp5C && (IREG(72) == 0)) {
this->gameplayFrames++;
@@ -1072,7 +1073,7 @@ void Play_Update(PlayState* this) {
this->pauseCtx.bombersNotebookOpen = false;
sBombersNotebook.loadState = BOMBERS_NOTEBOOK_LOAD_STATE_NONE;
this->msgCtx.msgLength = 0;
- this->msgCtx.msgMode = 0;
+ this->msgCtx.msgMode = MSGMODE_NONE;
this->msgCtx.currentTextId = 0;
this->msgCtx.stateTimer = 0;
Audio_PlaySfx(NA_SE_SY_CANCEL);
@@ -1144,8 +1145,8 @@ void Play_DrawMain(PlayState* this) {
if (this->skyboxCtx.skyboxShouldDraw || (this->roomCtx.curRoom.roomShape->base.type == ROOM_SHAPE_TYPE_IMAGE)) {
func_8012CF0C(gfxCtx, false, true, 0, 0, 0);
} else {
- func_8012CF0C(gfxCtx, true, true, this->lightCtx.fogColor.r, this->lightCtx.fogColor.g,
- this->lightCtx.fogColor.b);
+ func_8012CF0C(gfxCtx, true, true, this->lightCtx.fogColor[0], this->lightCtx.fogColor[1],
+ this->lightCtx.fogColor[2]);
}
} else {
func_8012CF0C(gfxCtx, false, false, 0, 0, 0);
@@ -1153,17 +1154,17 @@ void Play_DrawMain(PlayState* this) {
OPEN_DISPS(gfxCtx);
- gSegments[4] = VIRTUAL_TO_PHYSICAL(this->objectCtx.status[this->objectCtx.mainKeepIndex].segment);
- gSegments[5] = VIRTUAL_TO_PHYSICAL(this->objectCtx.status[this->objectCtx.subKeepIndex].segment);
+ gSegments[4] = VIRTUAL_TO_PHYSICAL(this->objectCtx.slots[this->objectCtx.mainKeepSlot].segment);
+ gSegments[5] = VIRTUAL_TO_PHYSICAL(this->objectCtx.slots[this->objectCtx.subKeepSlot].segment);
gSegments[2] = VIRTUAL_TO_PHYSICAL(this->sceneSegment);
- gSPSegment(POLY_OPA_DISP++, 0x04, this->objectCtx.status[this->objectCtx.mainKeepIndex].segment);
- gSPSegment(POLY_XLU_DISP++, 0x04, this->objectCtx.status[this->objectCtx.mainKeepIndex].segment);
- gSPSegment(OVERLAY_DISP++, 0x04, this->objectCtx.status[this->objectCtx.mainKeepIndex].segment);
+ gSPSegment(POLY_OPA_DISP++, 0x04, this->objectCtx.slots[this->objectCtx.mainKeepSlot].segment);
+ gSPSegment(POLY_XLU_DISP++, 0x04, this->objectCtx.slots[this->objectCtx.mainKeepSlot].segment);
+ gSPSegment(OVERLAY_DISP++, 0x04, this->objectCtx.slots[this->objectCtx.mainKeepSlot].segment);
- gSPSegment(POLY_OPA_DISP++, 0x05, this->objectCtx.status[this->objectCtx.subKeepIndex].segment);
- gSPSegment(POLY_XLU_DISP++, 0x05, this->objectCtx.status[this->objectCtx.subKeepIndex].segment);
- gSPSegment(OVERLAY_DISP++, 0x05, this->objectCtx.status[this->objectCtx.subKeepIndex].segment);
+ gSPSegment(POLY_OPA_DISP++, 0x05, this->objectCtx.slots[this->objectCtx.subKeepSlot].segment);
+ gSPSegment(POLY_XLU_DISP++, 0x05, this->objectCtx.slots[this->objectCtx.subKeepSlot].segment);
+ gSPSegment(OVERLAY_DISP++, 0x05, this->objectCtx.slots[this->objectCtx.subKeepSlot].segment);
gSPSegment(POLY_OPA_DISP++, 0x02, this->sceneSegment);
gSPSegment(POLY_XLU_DISP++, 0x02, this->sceneSegment);
@@ -1292,7 +1293,7 @@ void Play_DrawMain(PlayState* this) {
}
}
- func_800FE390(this);
+ Environment_Draw(this);
}
sp268 = LightContext_NewLights(&this->lightCtx, gfxCtx);
@@ -1324,8 +1325,7 @@ void Play_DrawMain(PlayState* this) {
}
}
- // envCtx.precipitation[PRECIP_RAIN_CUR]
- if (this->envCtx.unk_F2[1] != 0) {
+ if (this->envCtx.precipitation[PRECIP_RAIN_CUR] != 0) {
Environment_DrawRain(this, &this->view, gfxCtx);
}
}
@@ -1339,7 +1339,7 @@ void Play_DrawMain(PlayState* this) {
}
if (1) {
- if (!this->envCtx.sunMoonDisabled) {
+ if (!this->envCtx.sunDisabled) {
sp25C.x = this->view.eye.x + this->envCtx.sunPos.x;
sp25C.y = this->view.eye.y + this->envCtx.sunPos.y;
sp25C.z = this->view.eye.z + this->envCtx.sunPos.z;
@@ -1367,7 +1367,7 @@ void Play_DrawMain(PlayState* this) {
}
if (1) {
- if (this->envCtx.sandstormState != 0) {
+ if (this->envCtx.sandstormState != SANDSTORM_OFF) {
Environment_DrawSandstorm(this, this->envCtx.sandstormState);
}
}
@@ -1440,7 +1440,7 @@ SkipPostWorldDraw:
}
if (!sp25B) {
- func_800FE3E0(this);
+ Environment_DrawSkyboxStars(this);
}
CLOSE_DISPS(gfxCtx);
@@ -1562,7 +1562,7 @@ void Play_GetFloorSurface(PlayState* this, MtxF* mtx, Vec3f* pos) {
void* Play_LoadFile(PlayState* this, RomFile* entry) {
size_t size = entry->vromEnd - entry->vromStart;
- void* allocp = THA_AllocTailAlign16(&this->state.heap, size);
+ void* allocp = THA_AllocTailAlign16(&this->state.tha, size);
DmaMgr_SendRequest0(allocp, entry->vromStart, size);
@@ -1585,7 +1585,7 @@ void Play_InitScene(PlayState* this, s32 spawn) {
this->sceneMaterialAnims = NULL;
this->roomCtx.unk74 = NULL;
this->numSetupActors = 0;
- Object_InitBank(&this->state, &this->objectCtx);
+ Object_InitContext(&this->state, &this->objectCtx);
LightContext_Init(this, &this->lightCtx);
Door_InitContext(&this->state, &this->doorCtx);
Room_Init(this, &this->roomCtx);
@@ -2217,7 +2217,7 @@ void Play_Init(GameState* thisx) {
gSaveContext.save.cutsceneIndex = 0;
}
- if (gSaveContext.nextDayTime != 0xFFFF) {
+ if (gSaveContext.nextDayTime != NEXT_TIME_NONE) {
gSaveContext.save.time = gSaveContext.nextDayTime;
gSaveContext.skyboxTime = gSaveContext.nextDayTime;
}
@@ -2250,14 +2250,14 @@ void Play_Init(GameState* thisx) {
KaleidoScopeCall_Init(this);
Interface_Init(this);
- if (gSaveContext.nextDayTime != 0xFFFF) {
- if (gSaveContext.nextDayTime == 0x8000) {
+ if (gSaveContext.nextDayTime != NEXT_TIME_NONE) {
+ if (gSaveContext.nextDayTime == NEXT_TIME_DAY) {
gSaveContext.save.day++;
- gSaveContext.save.daysElapsed++;
+ gSaveContext.save.eventDayCount++;
gSaveContext.dogIsLost = true;
- gSaveContext.nextDayTime = -2;
+ gSaveContext.nextDayTime = NEXT_TIME_DAY_SET;
} else {
- gSaveContext.nextDayTime = -3;
+ gSaveContext.nextDayTime = NEXT_TIME_NIGHT_SET;
}
}
@@ -2324,9 +2324,9 @@ void Play_Init(GameState* thisx) {
D_801F6D4C->envColor.b = 0;
D_801F6D4C->envColor.a = 0;
CutsceneFlags_UnsetAll(this);
- THA_GetRemaining(&this->state.heap);
- zAllocSize = THA_GetRemaining(&this->state.heap);
- zAlloc = (uintptr_t)THA_AllocTailAlign16(&this->state.heap, zAllocSize);
+ THA_GetRemaining(&this->state.tha);
+ zAllocSize = THA_GetRemaining(&this->state.tha);
+ zAlloc = (uintptr_t)THA_AllocTailAlign16(&this->state.tha, zAllocSize);
ZeldaArena_Init(((zAlloc + 8) & ~0xF), (zAllocSize - ((zAlloc + 8) & ~0xF)) + zAlloc); //! @bug: Incorrect ALIGN16s
Actor_InitContext(this, &this->actorCtx, this->linkActorEntry);
@@ -2348,7 +2348,7 @@ void Play_Init(GameState* thisx) {
CutsceneManager_StoreCamera(&this->mainCamera);
Interface_SetSceneRestrictions(this);
- func_800FB758(this);
+ Environment_PlaySceneSequence(this);
gSaveContext.seqId = this->sequenceCtx.seqId;
gSaveContext.ambienceId = this->sequenceCtx.ambienceId;
AnimationContext_Update(this, &this->animationCtx);
diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c
index a890090ff..3a5d69a34 100644
--- a/src/code/z_player_lib.c
+++ b/src/code/z_player_lib.c
@@ -369,13 +369,13 @@ void func_80122F28(Player* player) {
s32 func_80122F9C(PlayState* play) {
Player* player = GET_PLAYER(play);
- return (player->stateFlags2 & PLAYER_STATE2_80000) && (player->unk_AE7 == 2);
+ return (player->stateFlags2 & PLAYER_STATE2_80000) && (player->actionVar1 == 2);
}
s32 func_80122FCC(PlayState* play) {
Player* player = GET_PLAYER(play);
- return (player->stateFlags2 & PLAYER_STATE2_80000) && ((player->unk_AE7 == 1) || (player->unk_AE7 == 3));
+ return (player->stateFlags2 & PLAYER_STATE2_80000) && ((player->actionVar1 == 1) || (player->actionVar1 == 3));
}
void func_8012300C(PlayState* play, s32 arg1) {
@@ -389,19 +389,19 @@ void func_8012301C(Actor* thisx, PlayState* play2) {
PlayState* play = play2;
Player* this = (Player*)thisx;
- this->unk_AE7++;
+ this->actionVar1++;
- if (this->unk_AE7 == 2) {
- s16 objectId = gPlayerFormObjectIndices[GET_PLAYER_FORM];
+ if (this->actionVar1 == 2) {
+ s16 objectId = gPlayerFormObjectIds[GET_PLAYER_FORM];
gActorOverlayTable[ACTOR_PLAYER].initInfo->objectId = objectId;
- 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);
+ func_8012F73C(&play->objectCtx, this->actor.objectSlot, objectId);
+ this->actor.objectSlot = Object_GetSlot(&play->objectCtx, GAMEPLAY_KEEP);
+ } else if (this->actionVar1 >= 3) {
+ s32 objectSlot = Object_GetSlot(&play->objectCtx, gActorOverlayTable[ACTOR_PLAYER].initInfo->objectId);
- if (Object_IsLoaded(&play->objectCtx, objBankIndex)) {
- this->actor.objBankIndex = objBankIndex;
+ if (Object_IsLoaded(&play->objectCtx, objectSlot)) {
+ this->actor.objectSlot = objectSlot;
this->actor.shape.rot.z = GET_PLAYER_FORM + 1;
this->actor.init = PlayerCall_Init;
this->actor.update = PlayerCall_Update;
@@ -570,12 +570,12 @@ s32 func_801235DC(PlayState* play, f32 arg1, s16 arg2) {
return false;
}
-ItemId func_8012364C(PlayState* play, Player* player, s32 arg2) {
- if (arg2 >= 4) {
+ItemId Player_GetItemOnButton(PlayState* play, Player* player, EquipSlot slot) {
+ if (slot >= EQUIP_SLOT_A) {
return ITEM_NONE;
}
- if (arg2 == 0) {
+ if (slot == EQUIP_SLOT_B) {
ItemId item = Inventory_GetBtnBItem(play);
if (item >= ITEM_FD) {
@@ -597,18 +597,24 @@ ItemId func_8012364C(PlayState* play, Player* player, s32 arg2) {
return item;
}
- if (arg2 == 1) {
+ if (slot == EQUIP_SLOT_C_LEFT) {
return C_BTN_ITEM(EQUIP_SLOT_C_LEFT);
}
- if (arg2 == 2) {
+ if (slot == EQUIP_SLOT_C_DOWN) {
return C_BTN_ITEM(EQUIP_SLOT_C_DOWN);
}
+ // EQUIP_SLOT_C_RIGHT
+
return C_BTN_ITEM(EQUIP_SLOT_C_RIGHT);
}
-u16 sCItemButtons[] = { BTN_CLEFT, BTN_CDOWN, BTN_CRIGHT };
+u16 sCItemButtons[] = {
+ BTN_CLEFT,
+ BTN_CDOWN,
+ BTN_CRIGHT,
+};
PlayerItemAction func_80123810(PlayState* play) {
Player* player = GET_PLAYER(play);
@@ -620,7 +626,7 @@ PlayerItemAction func_80123810(PlayState* play) {
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);
+ Interface_SetHudVisibility(play->msgCtx.hudVisibility);
return PLAYER_IA_MINUS1;
}
} else {
@@ -630,11 +636,11 @@ PlayerItemAction func_80123810(PlayState* play) {
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);
+ itemId = Player_GetItemOnButton(play, player, i);
play->interfaceCtx.unk_222 = 0;
play->interfaceCtx.unk_224 = 0;
- Interface_SetHudVisibility(play->msgCtx.unk_120BC);
+ Interface_SetHudVisibility(play->msgCtx.hudVisibility);
if ((itemId >= ITEM_FD) || ((itemAction = play->unk_18794(play, player, itemId)) <= PLAYER_IA_MINUS1)) {
Audio_PlaySfx(NA_SE_SY_ERROR);
@@ -1863,7 +1869,7 @@ void Player_DrawHookshotReticle(PlayState* play, Player* player, f32 hookshotDis
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);
+ gSPSegment(OVERLAY_DISP++, 0x06, play->objectCtx.slots[player->actor.objectSlot].segment);
gSPDisplayList(OVERLAY_DISP++, gHookshotReticleDL);
CLOSE_DISPS(play->state.gfxCtx);
@@ -2092,7 +2098,7 @@ s32 Player_OverrideLimbDrawGameplayCommon(PlayState* play, s32 limbIndex, Gfx**
EnArrow* bubble = NULL;
if (((player->skelAnime.animation == &gPlayerAnim_pn_drinkend)) ||
- (player->unk_284.animation == &gPlayerAnim_pn_tamahaki) ||
+ (player->skelAnimeUpper.animation == &gPlayerAnim_pn_tamahaki) ||
((player->stateFlags3 & PLAYER_STATE3_40) && ((bubble = (EnArrow*)player->heldActor) != NULL))) {
Matrix_TranslateRotateZYX(pos, rot);
func_80125340();
@@ -2108,7 +2114,7 @@ s32 Player_OverrideLimbDrawGameplayCommon(PlayState* play, s32 limbIndex, Gfx**
} else if (player->skelAnime.animation == &gPlayerAnim_pn_drinkend) {
func_80124618(D_801C03E0, player->skelAnime.curFrame, player->unk_AF0);
} else {
- func_80124618(D_801C03C0, player->unk_284.curFrame, player->unk_AF0);
+ func_80124618(D_801C03C0, player->skelAnimeUpper.curFrame, player->unk_AF0);
}
Matrix_Scale(player->unk_AF0[0].x, player->unk_AF0[0].y, player->unk_AF0[0].z, MTXMODE_APPLY);
@@ -3744,7 +3750,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, G
}
}
- if ((player->stateFlags1 & (PLAYER_STATE1_2 | PLAYER_STATE1_100)) && (player->unk_AE8 != 0)) {
+ if ((player->stateFlags1 & (PLAYER_STATE1_2 | PLAYER_STATE1_100)) && (player->actionVar2 != 0)) {
static Vec3f D_801C0E40[PLAYER_FORM_MAX] = {
{ 0.0f, 0.0f, 0.0f }, // PLAYER_FORM_FIERCE_DEITY
{ -578.3f, -1100.9f, 0.0f }, // PLAYER_FORM_GORON
@@ -3764,7 +3770,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, G
}
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 255, (u8)player->unk_AE8);
+ gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 255, (u8)player->actionVar2);
gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_054C90);
Matrix_Pop();
@@ -3784,7 +3790,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, G
Matrix_MultVec3f(&sPlayerFocusHeadLimbModelPos, &player->actor.focus.pos);
Matrix_MultVec3f(&D_801C0E94, sPlayerCurBodyPartPos);
if ((player->skelAnime.animation == &gPlayerAnim_pn_drinkend) ||
- (player->unk_284.animation == &gPlayerAnim_pn_tamahaki) ||
+ (player->skelAnimeUpper.animation == &gPlayerAnim_pn_tamahaki) ||
((player->stateFlags3 & PLAYER_STATE3_40) && ((spA8 = player->heldActor) != NULL))) {
if (spA8 != NULL) {
static Vec3f D_801C0EA0 = { 1300.0f, -400.0f, 0.0f };
diff --git a/src/code/z_room.c b/src/code/z_room.c
index b8de6caec..428dd5c13 100644
--- a/src/code/z_room.c
+++ b/src/code/z_room.c
@@ -516,7 +516,7 @@ size_t Room_AllocateAndLoad(PlayState* play, RoomContext* roomCtx) {
}
}
- roomCtx->roomMemPages[0] = THA_AllocTailAlign16(&play->state.heap, maxRoomSize);
+ roomCtx->roomMemPages[0] = THA_AllocTailAlign16(&play->state.tha, maxRoomSize);
if (roomCtx->roomMemPages[0] == NULL) {
_dbg_hungup("../z_room.c", 1078);
}
@@ -581,12 +581,12 @@ s32 Room_HandleLoadCallbacks(PlayState* play, RoomContext* roomCtx) {
Actor_SpawnTransitionActors(play, &play->actorCtx);
if (((play->sceneId != SCENE_IKANA) || (roomCtx->curRoom.num != 1)) && (play->sceneId != SCENE_IKNINSIDE)) {
- play->envCtx.lightSettingOverride = 0xFF;
- play->envCtx.unk_E0 = 0;
+ play->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE;
+ play->envCtx.lightBlendOverride = LIGHT_BLEND_OVERRIDE_NONE;
}
func_800FEAB0();
- if (!func_800FE4B8(play)) {
- func_800FD858(play);
+ if (Environment_GetStormState(play) == STORM_STATE_OFF) {
+ Environment_StopStormNatureAmbience(play);
}
} else {
return 0;
diff --git a/src/code/z_scene.c b/src/code/z_scene.c
index 529458f83..923ba5a0e 100644
--- a/src/code/z_scene.c
+++ b/src/code/z_scene.c
@@ -1,28 +1,41 @@
#include "global.h"
-s32 Object_Spawn(ObjectContext* objectCtx, s16 id) {
+/**
+ * Spawn an object file of a specified ID that will persist through room changes.
+ *
+ * This waits for the file to be fully loaded, the data is available when the function returns.
+ *
+ * @return The new object slot corresponding to the requested object ID.
+ *
+ * @note This function is not meant to be called externally to spawn object files on the fly.
+ * When an object is spawned with this function, all objects that come before it in the entry list will be treated as
+ * persistent, which will likely cause either the amount of free slots or object space memory to run out.
+ * This function is only meant to be called internally on scene load, before the object list from any room is processed.
+ */
+s32 Object_SpawnPersistent(ObjectContext* objectCtx, s16 id) {
size_t size;
- objectCtx->status[objectCtx->num].id = id;
+ objectCtx->slots[objectCtx->numEntries].id = id;
size = gObjectTable[id].vromEnd - gObjectTable[id].vromStart;
if (1) {}
if (size != 0) {
- DmaMgr_SendRequest0(objectCtx->status[objectCtx->num].segment, gObjectTable[id].vromStart, size);
+ DmaMgr_SendRequest0(objectCtx->slots[objectCtx->numEntries].segment, gObjectTable[id].vromStart, size);
}
- if (objectCtx->num < OBJECT_EXCHANGE_BANK_MAX - 1) {
- objectCtx->status[objectCtx->num + 1].segment = ALIGN16((u32)objectCtx->status[objectCtx->num].segment + size);
+ if (objectCtx->numEntries < ARRAY_COUNT(objectCtx->slots) - 1) {
+ objectCtx->slots[objectCtx->numEntries + 1].segment =
+ ALIGN16((u32)objectCtx->slots[objectCtx->numEntries].segment + size);
}
- objectCtx->num++;
- objectCtx->spawnedObjectCount = objectCtx->num;
+ objectCtx->numEntries++;
+ objectCtx->numPersistentEntries = objectCtx->numEntries;
- return objectCtx->num - 1;
+ return objectCtx->numEntries - 1;
}
-void Object_InitBank(GameState* gameState, ObjectContext* objectCtx) {
+void Object_InitContext(GameState* gameState, ObjectContext* objectCtx) {
PlayState* play = (PlayState*)gameState;
s32 pad;
u32 spaceSize;
@@ -30,66 +43,66 @@ void Object_InitBank(GameState* gameState, ObjectContext* objectCtx) {
if (play->sceneId == SCENE_CLOCKTOWER || play->sceneId == SCENE_TOWN || play->sceneId == SCENE_BACKTOWN ||
play->sceneId == SCENE_ICHIBA) {
- spaceSize = OBJECT_SPACE_SIZE_CLOCK_TOWN;
+ spaceSize = 1530 * 1024;
} else if (play->sceneId == SCENE_MILK_BAR) {
- spaceSize = OBJECT_SPACE_SIZE_MILK_BAR;
+ spaceSize = 1580 * 1024;
} else if (play->sceneId == SCENE_00KEIKOKU) {
- spaceSize = OBJECT_SPACE_SIZE_TERMINA_FIELD;
+ spaceSize = 1470 * 1024;
} else {
- spaceSize = OBJECT_SPACE_SIZE_DEFAULT;
+ spaceSize = 1380 * 1024;
}
- objectCtx->num = 0;
- objectCtx->spawnedObjectCount = 0;
- objectCtx->mainKeepIndex = 0;
- objectCtx->subKeepIndex = 0;
+ objectCtx->numEntries = 0;
+ objectCtx->numPersistentEntries = 0;
+ objectCtx->mainKeepSlot = 0;
+ objectCtx->subKeepSlot = 0;
// clang-format off
- for (i = 0; i < OBJECT_EXCHANGE_BANK_MAX; i++) { objectCtx->status[i].id = 0; }
+ for (i = 0; i < ARRAY_COUNT(objectCtx->slots); i++) { objectCtx->slots[i].id = 0; }
// clang-format on
- objectCtx->spaceStart = objectCtx->status[0].segment = THA_AllocTailAlign16(&gameState->heap, spaceSize);
+ objectCtx->spaceStart = objectCtx->slots[0].segment = THA_AllocTailAlign16(&gameState->tha, spaceSize);
objectCtx->spaceEnd = (void*)((u32)objectCtx->spaceStart + spaceSize);
- objectCtx->mainKeepIndex = Object_Spawn(objectCtx, GAMEPLAY_KEEP);
+ objectCtx->mainKeepSlot = Object_SpawnPersistent(objectCtx, GAMEPLAY_KEEP);
- gSegments[0x04] = VIRTUAL_TO_PHYSICAL(objectCtx->status[objectCtx->mainKeepIndex].segment);
+ gSegments[4] = VIRTUAL_TO_PHYSICAL(objectCtx->slots[objectCtx->mainKeepSlot].segment);
}
-void Object_UpdateBank(ObjectContext* objectCtx) {
+void Object_UpdateEntries(ObjectContext* objectCtx) {
s32 i;
- ObjectStatus* status = &objectCtx->status[0];
+ ObjectEntry* entry = &objectCtx->slots[0];
RomFile* objectFile;
size_t size;
- for (i = 0; i < objectCtx->num; i++) {
- if (status->id < 0) {
- s32 id = -status->id;
+ for (i = 0; i < objectCtx->numEntries; i++) {
+ if (entry->id < 0) {
+ s32 id = -entry->id;
- if (status->dmaReq.vromAddr == 0) {
+ if (entry->dmaReq.vromAddr == 0) {
objectFile = &gObjectTable[id];
size = objectFile->vromEnd - objectFile->vromStart;
if (size == 0) {
- status->id = 0;
+ entry->id = 0;
} else {
- osCreateMesgQueue(&status->loadQueue, &status->loadMsg, 1);
- DmaMgr_SendRequestImpl(&status->dmaReq, status->segment, objectFile->vromStart, size, 0,
- &status->loadQueue, NULL);
+ osCreateMesgQueue(&entry->loadQueue, &entry->loadMsg, 1);
+ DmaMgr_SendRequestImpl(&entry->dmaReq, entry->segment, objectFile->vromStart, size, 0,
+ &entry->loadQueue, NULL);
}
- } else if (!osRecvMesg(&status->loadQueue, NULL, OS_MESG_NOBLOCK)) {
- status->id = id;
+ } else if (!osRecvMesg(&entry->loadQueue, NULL, OS_MESG_NOBLOCK)) {
+ entry->id = id;
}
}
- status++;
+ entry++;
}
}
-s32 Object_GetIndex(ObjectContext* objectCtx, s16 objectId) {
+s32 Object_GetSlot(ObjectContext* objectCtx, s16 objectId) {
s32 i;
- for (i = 0; i < objectCtx->num; i++) {
- if (ABS_ALT(objectCtx->status[i].id) == objectId) {
+ for (i = 0; i < objectCtx->numEntries; i++) {
+ if (ABS_ALT(objectCtx->slots[i].id) == objectId) {
return i;
}
}
@@ -97,8 +110,8 @@ s32 Object_GetIndex(ObjectContext* objectCtx, s16 objectId) {
return -1;
}
-s32 Object_IsLoaded(ObjectContext* objectCtx, s32 index) {
- if (objectCtx->status[index].id > 0) {
+s32 Object_IsLoaded(ObjectContext* objectCtx, s32 slot) {
+ if (objectCtx->slots[slot].id > 0) {
return true;
} else {
return false;
@@ -110,31 +123,31 @@ void Object_LoadAll(ObjectContext* objectCtx) {
s32 id;
uintptr_t vromSize;
- for (i = 0; i < objectCtx->num; i++) {
- id = objectCtx->status[i].id;
+ for (i = 0; i < objectCtx->numEntries; i++) {
+ id = objectCtx->slots[i].id;
vromSize = gObjectTable[id].vromEnd - gObjectTable[id].vromStart;
if (vromSize == 0) {
continue;
}
- DmaMgr_SendRequest0(objectCtx->status[i].segment, gObjectTable[id].vromStart, vromSize);
+ DmaMgr_SendRequest0(objectCtx->slots[i].segment, gObjectTable[id].vromStart, vromSize);
}
}
-void* func_8012F73C(ObjectContext* objectCtx, s32 iParm2, s16 id) {
+void* func_8012F73C(ObjectContext* objectCtx, s32 slot, s16 id) {
u32 addr;
uintptr_t vromSize;
RomFile* fileTableEntry;
- objectCtx->status[iParm2].id = -id;
- objectCtx->status[iParm2].dmaReq.vromAddr = 0;
+ objectCtx->slots[slot].id = -id;
+ objectCtx->slots[slot].dmaReq.vromAddr = 0;
fileTableEntry = &gObjectTable[id];
vromSize = fileTableEntry->vromEnd - fileTableEntry->vromStart;
// TODO: UB to cast void to u32
- addr = ((u32)objectCtx->status[iParm2].segment) + vromSize;
+ addr = ((u32)objectCtx->slots[slot].segment) + vromSize;
addr = ALIGN16(addr);
return (void*)addr;
@@ -144,7 +157,7 @@ void* func_8012F73C(ObjectContext* objectCtx, s32 iParm2, s16 id) {
void Scene_CommandSpawnList(PlayState* play, SceneCmd* cmd) {
s32 loadedCount;
s16 playerObjectId;
- void* nextObject;
+ void* objectPtr;
play->linkActorEntry =
(ActorEntry*)Lib_SegmentedToVirtual(cmd->spawnList.segment) + play->setupEntranceList[play->curSpawn].spawn;
@@ -152,19 +165,19 @@ void Scene_CommandSpawnList(PlayState* play, SceneCmd* cmd) {
((gSaveContext.respawnFlag == 2) &&
(gSaveContext.respawn[RESPAWN_MODE_RETURN].playerParams == PLAYER_PARAMS(0xFF, PLAYER_INITMODE_TELESCOPE)))) {
// Skull Kid Object
- Object_Spawn(&play->objectCtx, OBJECT_STK);
+ Object_SpawnPersistent(&play->objectCtx, OBJECT_STK);
return;
}
- loadedCount = Object_Spawn(&play->objectCtx, OBJECT_LINK_CHILD);
- nextObject = play->objectCtx.status[play->objectCtx.num].segment;
- play->objectCtx.num = loadedCount;
- play->objectCtx.spawnedObjectCount = loadedCount;
- playerObjectId = gPlayerFormObjectIndices[GET_PLAYER_FORM];
+ loadedCount = Object_SpawnPersistent(&play->objectCtx, OBJECT_LINK_CHILD);
+ objectPtr = play->objectCtx.slots[play->objectCtx.numEntries].segment;
+ play->objectCtx.numEntries = loadedCount;
+ play->objectCtx.numPersistentEntries = loadedCount;
+ playerObjectId = gPlayerFormObjectIds[GET_PLAYER_FORM];
gActorOverlayTable[0].initInfo->objectId = playerObjectId;
- Object_Spawn(&play->objectCtx, playerObjectId);
+ Object_SpawnPersistent(&play->objectCtx, playerObjectId);
- play->objectCtx.status[play->objectCtx.num].segment = nextObject;
+ play->objectCtx.slots[play->objectCtx.numEntries].segment = objectPtr;
}
// SceneTableEntry Header Command 0x01: Actor List
@@ -224,10 +237,10 @@ void Scene_CommandSpecialFiles(PlayState* play, SceneCmd* cmd) {
{ SEGMENT_ROM_START(elf_message_ydan), SEGMENT_ROM_END(elf_message_ydan) },
};
- if (cmd->specialFiles.subKeepIndex != 0) {
- play->objectCtx.subKeepIndex = Object_Spawn(&play->objectCtx, cmd->specialFiles.subKeepIndex);
+ if (cmd->specialFiles.subKeepId != 0) {
+ play->objectCtx.subKeepSlot = Object_SpawnPersistent(&play->objectCtx, cmd->specialFiles.subKeepId);
// TODO: Segment number enum?
- gSegments[0x05] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[play->objectCtx.subKeepIndex].segment);
+ gSegments[0x05] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[play->objectCtx.subKeepSlot].segment);
}
if (cmd->specialFiles.naviQuestHintFileId != NAVI_QUEST_HINTS_NONE) {
@@ -242,7 +255,7 @@ void Scene_CommandRoomBehavior(PlayState* play, SceneCmd* cmd) {
play->roomCtx.curRoom.lensMode = (cmd->roomBehavior.gpFlag2 >> 8) & 1;
play->msgCtx.unk12044 = (cmd->roomBehavior.gpFlag2 >> 0xA) & 1;
play->roomCtx.curRoom.enablePosLights = (cmd->roomBehavior.gpFlag2 >> 0xB) & 1;
- play->envCtx.unk_E2 = (cmd->roomBehavior.gpFlag2 >> 0xC) & 1;
+ play->envCtx.stormState = (cmd->roomBehavior.gpFlag2 >> 0xC) & 1;
}
// SceneTableEntry Header Command 0x0A: Mesh Header
@@ -255,28 +268,28 @@ void Scene_CommandObjectList(PlayState* play, SceneCmd* cmd) {
s32 i;
s32 j;
s32 k;
- ObjectStatus* firstObject;
- ObjectStatus* status;
- ObjectStatus* status2;
+ ObjectEntry* firstObject;
+ ObjectEntry* entry;
+ ObjectEntry* invalidatedEntry;
s16* objectEntry;
void* nextPtr;
objectEntry = Lib_SegmentedToVirtual(cmd->objectList.segment);
k = 0;
- i = play->objectCtx.spawnedObjectCount;
- status = &play->objectCtx.status[i];
- firstObject = play->objectCtx.status;
+ i = play->objectCtx.numPersistentEntries;
+ entry = &play->objectCtx.slots[i];
+ firstObject = &play->objectCtx.slots[0];
- while (i < play->objectCtx.num) {
- if (status->id != *objectEntry) {
- status2 = &play->objectCtx.status[i];
+ while (i < play->objectCtx.numEntries) {
+ if (entry->id != *objectEntry) {
+ invalidatedEntry = &play->objectCtx.slots[i];
- for (j = i; j < play->objectCtx.num; j++) {
- status2->id = 0;
- status2++;
+ for (j = i; j < play->objectCtx.numEntries; j++) {
+ invalidatedEntry->id = 0;
+ invalidatedEntry++;
}
- play->objectCtx.num = i;
+ play->objectCtx.numEntries = i;
Actor_KillAllWithMissingObject(play, &play->actorCtx);
continue;
@@ -285,13 +298,13 @@ void Scene_CommandObjectList(PlayState* play, SceneCmd* cmd) {
i++;
k++;
objectEntry++;
- status++;
+ entry++;
}
while (k < cmd->objectList.num) {
nextPtr = func_8012F73C(&play->objectCtx, i, *objectEntry);
- if (i < OBJECT_EXCHANGE_BANK_MAX - 1) {
+ if (i < ARRAY_COUNT(play->objectCtx.slots) - 1) {
firstObject[i + 1].segment = nextPtr;
}
@@ -300,7 +313,7 @@ void Scene_CommandObjectList(PlayState* play, SceneCmd* cmd) {
objectEntry++;
}
- play->objectCtx.num = i;
+ play->objectCtx.numEntries = i;
}
// SceneTableEntry Header Command 0x0C: Light List
@@ -357,7 +370,7 @@ void Scene_LoadAreaTextures(PlayState* play, s32 fileIndex) {
size_t size = sceneTextureFiles[fileIndex].vromEnd - vromStart;
if (size != 0) {
- play->roomCtx.unk74 = THA_AllocTailAlign16(&play->state.heap, size);
+ play->roomCtx.unk74 = THA_AllocTailAlign16(&play->state.tha, size);
DmaMgr_SendRequest0(play->roomCtx.unk74, vromStart, size);
}
}
@@ -373,7 +386,7 @@ void Scene_CommandSkyboxSettings(PlayState* play, SceneCmd* cmd) {
// SceneTableEntry Header Command 0x12: Skybox Disables
void Scene_CommandSkyboxDisables(PlayState* play, SceneCmd* cmd) {
play->envCtx.skyboxDisabled = cmd->skyboxDisables.unk4;
- play->envCtx.sunMoonDisabled = cmd->skyboxDisables.unk5;
+ play->envCtx.sunDisabled = cmd->skyboxDisables.unk5;
}
// SceneTableEntry Header Command 0x10: Time Settings
@@ -423,9 +436,9 @@ void Scene_CommandWindSettings(PlayState* play, SceneCmd* cmd) {
s8 temp2 = cmd->windSettings.vertical;
s8 temp3 = cmd->windSettings.south;
- play->envCtx.windDir.x = temp1;
- play->envCtx.windDir.y = temp2;
- play->envCtx.windDir.z = temp3;
+ play->envCtx.windDirection.x = temp1;
+ play->envCtx.windDirection.y = temp2;
+ play->envCtx.windDirection.z = temp3;
play->envCtx.windSpeed = cmd->windSettings.clothIntensity;
}
diff --git a/src/code/z_skelanime.c b/src/code/z_skelanime.c
index 79af1b73f..675487072 100644
--- a/src/code/z_skelanime.c
+++ b/src/code/z_skelanime.c
@@ -1680,7 +1680,8 @@ void SkelAnime_AnimateFrame(SkelAnime* skelAnime) {
s32 frame = skelAnime->curFrame;
f32 partialFrame = skelAnime->curFrame - frame;
- if (++frame >= (s32)skelAnime->animLength) {
+ frame++;
+ if (frame >= (s32)skelAnime->animLength) {
frame = 0;
}
SkelAnime_GetFrameData(skelAnime->animation, frame, skelAnime->limbCount, nextjointTable);
diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c
index 768314490..01a493cc0 100644
--- a/src/code/z_sram_NES.c
+++ b/src/code/z_sram_NES.c
@@ -97,7 +97,8 @@ u16 sPersistentCycleWeekEventRegs[ARRAY_COUNT(gSaveContext.save.saveInfo.weekEve
/* 20 */ 0,
/* 21 */ 0,
/* 22 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_22_02) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_22_80),
- /* 23 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_23_02) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_23_80),
+ /* 23 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_OBTAINED_GREAT_SPIN_ATTACK) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_23_80),
/* 24 */ PERSISTENT_WEEKEVENTREG_ALT(WEEKEVENTREG_24_02) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_24_80),
/* 25 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_25_01),
/* 26 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_26_40),
@@ -396,11 +397,11 @@ void Sram_ActivateOwl(u8 owlId) {
}
void Sram_ClearHighscores(void) {
- gSaveContext.save.saveInfo.unk_EC4 = (gSaveContext.save.saveInfo.unk_EC4 & 0xFFFF) | 0x130000;
- gSaveContext.save.saveInfo.unk_EC4 = (gSaveContext.save.saveInfo.unk_EC4 & 0xFFFF0000) | 0xA;
- gSaveContext.save.saveInfo.horseBackBalloonHighScore = SECONDS_TO_TIMER(60);
- SET_TOWN_SHOOTING_GALLERY_HIGH_SCORE(39);
- SET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE(10);
+ HS_SET_BOAT_ARCHERY_HIGH_SCORE(19);
+ HS_SET_HIGH_SCORE_3_LOWER(10);
+ HS_SET_HORSE_BACK_BALLOON_TIME(SECONDS_TO_TIMER(60));
+ HS_SET_TOWN_SHOOTING_GALLERY_HIGH_SCORE(39);
+ HS_SET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE(10);
gSaveContext.save.saveInfo.dekuPlaygroundHighScores[0] = SECONDS_TO_TIMER(75);
gSaveContext.save.saveInfo.dekuPlaygroundHighScores[1] = SECONDS_TO_TIMER(75);
@@ -429,7 +430,7 @@ void Sram_SaveEndOfCycle(PlayState* play) {
u8 item;
gSaveContext.save.timeSpeedOffset = 0;
- gSaveContext.save.daysElapsed = 0;
+ gSaveContext.save.eventDayCount = 0;
gSaveContext.save.day = 0;
gSaveContext.save.time = CLOCK_TIME(6, 0) - 1;
@@ -637,7 +638,7 @@ void Sram_SaveEndOfCycle(PlayState* play) {
}
gSaveContext.save.saveInfo.playerData.rupees = 0;
- gSaveContext.save.saveInfo.unk_F41 = 0;
+ gSaveContext.save.saveInfo.scarecrowSpawnSongSet = false;
gSaveContext.powderKegTimer = 0;
gSaveContext.unk_1014 = 0;
gSaveContext.jinxTimer = 0;
@@ -649,7 +650,7 @@ void Sram_SaveEndOfCycle(PlayState* play) {
void Sram_IncrementDay(void) {
if (CURRENT_DAY <= 3) {
gSaveContext.save.day++;
- gSaveContext.save.daysElapsed++;
+ gSaveContext.save.eventDayCount++;
}
gSaveContext.save.saveInfo.bombersCaughtNum = 0;
@@ -917,7 +918,7 @@ u16 sSaveDefaultChecksum = 0;
*/
void Sram_InitNewSave(void) {
gSaveContext.save.playerForm = PLAYER_FORM_HUMAN;
- gSaveContext.save.daysElapsed = 0;
+ gSaveContext.save.eventDayCount = 0;
gSaveContext.save.day = 0;
gSaveContext.save.time = CLOCK_TIME(6, 0) - 1;
Sram_ResetSave();
@@ -1303,7 +1304,7 @@ void Sram_OpenSave(FileSelectState* fileSelect, SramContext* sramCtx) {
gSaveContext.cycleSceneFlags[i].collectible = gSaveContext.save.saveInfo.permanentSceneFlags[i].collectible;
}
- if (gSaveContext.save.saveInfo.unk_F41) {
+ if (gSaveContext.save.saveInfo.scarecrowSpawnSongSet) {
Lib_MemCpy(gScarecrowSpawnSongPtr, gSaveContext.save.saveInfo.scarecrowSpawnSong,
sizeof(gSaveContext.save.saveInfo.scarecrowSpawnSong));
@@ -1648,7 +1649,7 @@ void func_801457CC(GameState* gameState, SramContext* sramCtx) {
} else {
if (phi_s2) {
gSaveContext.options.optionId = 0xA51D;
- gSaveContext.options.language = 1;
+ gSaveContext.options.language = LANGUAGE_ENG;
gSaveContext.options.audioSetting = SAVE_AUDIO_STEREO;
gSaveContext.options.languageSetting = 0;
gSaveContext.options.zTargetSetting = 0;
@@ -1656,7 +1657,7 @@ void func_801457CC(GameState* gameState, SramContext* sramCtx) {
Lib_MemCpy(&gSaveContext.options, sramCtx->saveBuf, sizeof(SaveOptions));
if (gSaveContext.options.optionId != 0xA51D) {
gSaveContext.options.optionId = 0xA51D;
- gSaveContext.options.language = 1;
+ gSaveContext.options.language = LANGUAGE_ENG;
gSaveContext.options.audioSetting = SAVE_AUDIO_STEREO;
gSaveContext.options.languageSetting = 0;
gSaveContext.options.zTargetSetting = 0;
@@ -1670,7 +1671,7 @@ void func_801457CC(GameState* gameState, SramContext* sramCtx) {
gSaveContext.flashSaveAvailable = D_801F6AF2;
}
- gSaveContext.options.language = 1;
+ gSaveContext.options.language = LANGUAGE_ENG;
}
#else
#pragma GLOBAL_ASM("asm/non_matchings/code/z_sram_NES/func_801457CC.s")
@@ -1852,8 +1853,7 @@ void Sram_InitSave(FileSelectState* fileSelect2, SramContext* sramCtx) {
*/
void Sram_WriteSaveOptionsToBuffer(SramContext* sramCtx) {
if (gSaveContext.flashSaveAvailable) {
- // TODO: macros for languages
- gSaveContext.options.language = 1;
+ gSaveContext.options.language = LANGUAGE_ENG;
Lib_MemCpy(sramCtx->saveBuf, &gSaveContext.options, sizeof(SaveOptions));
}
}
@@ -1866,7 +1866,7 @@ void Sram_InitSram(GameState* gameState, SramContext* sramCtx) {
void Sram_Alloc(GameState* gameState, SramContext* sramCtx) {
if (gSaveContext.flashSaveAvailable) {
- sramCtx->saveBuf = THA_AllocTailAlign16(&gameState->heap, SAVE_BUFFER_SIZE);
+ sramCtx->saveBuf = THA_AllocTailAlign16(&gameState->tha, SAVE_BUFFER_SIZE);
sramCtx->status = 0;
}
}
diff --git a/src/code/z_sub_s.c b/src/code/z_sub_s.c
index 4baff41ce..e630ed150 100644
--- a/src/code/z_sub_s.c
+++ b/src/code/z_sub_s.c
@@ -1169,12 +1169,12 @@ s16 SubS_GetDistSqAndOrientPath(Path* path, s32 pointIndex, Vec3f* pos, f32* dis
return Math_Atan2S(diffX, diffZ);
}
-s8 SubS_IsObjectLoaded(s8 index, PlayState* play) {
- return !Object_IsLoaded(&play->objectCtx, index) ? false : true;
+s8 SubS_IsObjectLoaded(s8 objectSlot, PlayState* play) {
+ return !Object_IsLoaded(&play->objectCtx, objectSlot) ? false : true;
}
-s8 SubS_GetObjectIndex(s16 id, PlayState* play) {
- return Object_GetIndex(&play->objectCtx, id);
+s8 SubS_GetObjectSlot(s16 objectId, PlayState* play) {
+ return Object_GetSlot(&play->objectCtx, objectId);
}
/**
diff --git a/src/code/z_vr_box.c b/src/code/z_vr_box.c
index dd0785d94..605dff84c 100644
--- a/src/code/z_vr_box.c
+++ b/src/code/z_vr_box.c
@@ -294,15 +294,15 @@ void Skybox_Init(GameState* gameState, SkyboxContext* skyboxCtx, s16 skyboxId) {
Skybox_Setup(gameState, skyboxCtx, skyboxId);
if (skyboxId != SKYBOX_NONE) {
- skyboxCtx->dListBuf = THA_AllocTailAlign16(&gameState->heap, 0x3840);
+ skyboxCtx->dListBuf = THA_AllocTailAlign16(&gameState->tha, 0x3840);
if (skyboxId == SKYBOX_CUTSCENE_MAP) {
// Allocate enough space for the vertices for a 6 sided skybox (cube)
- skyboxCtx->roomVtx = THA_AllocTailAlign16(&gameState->heap, sizeof(Vtx) * 32 * 6);
+ skyboxCtx->roomVtx = THA_AllocTailAlign16(&gameState->tha, sizeof(Vtx) * 32 * 6);
func_80143148(skyboxCtx, 6);
} else {
// Allocate enough space for the vertices for a 5 sided skybox (bottom is missing)
- skyboxCtx->roomVtx = THA_AllocTailAlign16(&gameState->heap, sizeof(Vtx) * 32 * 5);
+ skyboxCtx->roomVtx = THA_AllocTailAlign16(&gameState->tha, sizeof(Vtx) * 32 * 5);
func_80143148(skyboxCtx, 5);
}
}
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 1d8ca14b0..83edc9548 100644
--- a/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c
+++ b/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c
@@ -204,7 +204,7 @@ void FireArrow_Fly(ArrowFire* this, PlayState* play) {
void ArrowFire_Update(Actor* thisx, PlayState* play) {
ArrowFire* this = (ArrowFire*)thisx;
- if ((play->msgCtx.msgMode == 0xE) || (play->msgCtx.msgMode == 0x12)) {
+ if ((play->msgCtx.msgMode == MSGMODE_E) || (play->msgCtx.msgMode == MSGMODE_SONG_PLAYED)) {
Actor_Kill(&this->actor);
return;
}
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 b3df6c265..8a908a0e3 100644
--- a/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c
+++ b/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c
@@ -176,7 +176,7 @@ void ArrowIce_Fly(ArrowIce* this, PlayState* play) {
void ArrowIce_Update(Actor* thisx, PlayState* play) {
ArrowIce* this = THIS;
- if ((play->msgCtx.msgMode == 0xE) || (play->msgCtx.msgMode == 0x12)) {
+ if ((play->msgCtx.msgMode == MSGMODE_E) || (play->msgCtx.msgMode == MSGMODE_SONG_PLAYED)) {
Actor_Kill(&this->actor);
return;
} else {
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 8b4f8cad9..902443a95 100644
--- a/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c
+++ b/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c
@@ -172,7 +172,7 @@ void ArrowLight_Fly(ArrowLight* this, PlayState* play) {
void ArrowLight_Update(Actor* thisx, PlayState* play) {
ArrowLight* this = THIS;
- if ((play->msgCtx.msgMode == 0xE) || (play->msgCtx.msgMode == 0x12)) {
+ if ((play->msgCtx.msgMode == MSGMODE_E) || (play->msgCtx.msgMode == MSGMODE_SONG_PLAYED)) {
Actor_Kill(&this->actor);
return;
}
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 0391925ae..da688a81b 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
@@ -103,7 +103,7 @@ void BgAstrBombwall_Init(Actor* thisx, PlayState* play) {
DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
DynaPolyActor_LoadMesh(play, &this->dyna, &object_astr_obj_Colheader_002498);
Collider_InitTris(play, &this->collider);
- if (Flags_GetSwitch(play, BGASTRBOMBWALL_GET_SWITCHFLAG(thisx))) {
+ if (Flags_GetSwitch(play, BGASTRBOMBWALL_GET_SWITCH_FLAG(thisx))) {
Actor_Kill(&this->dyna.actor);
return;
}
@@ -163,7 +163,7 @@ void func_80C0A378(BgAstrBombwall* this) {
void func_80C0A38C(BgAstrBombwall* this, PlayState* play) {
if (this->collider.base.acFlags & AC_HIT) {
this->collider.base.acFlags &= ~AC_HIT;
- Flags_SetSwitch(play, BGASTRBOMBWALL_GET_SWITCHFLAG(&this->dyna.actor));
+ Flags_SetSwitch(play, BGASTRBOMBWALL_GET_SWITCH_FLAG(&this->dyna.actor));
func_80C0A400(this, play);
} else {
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
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 224d94d7a..698ccfda1 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
@@ -5,7 +5,7 @@
struct BgAstrBombwall;
-#define BGASTRBOMBWALL_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F)
+#define BGASTRBOMBWALL_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
typedef void (*BgAstrBombwallActionFunc)(struct BgAstrBombwall*, PlayState*);
typedef struct BgAstrBombwall {
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 ea2fe2c90..9db179c1a 100644
--- a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c
+++ b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c
@@ -52,7 +52,7 @@ ActorInit Bg_Breakwall_InitVars = {
};
typedef struct {
- /* 0x00 */ s16 unk_00;
+ /* 0x00 */ s16 objectId;
/* 0x04 */ Gfx* unk_04;
/* 0x08 */ Gfx* unk_08;
/* 0x0C */ AnimatedMaterial* unk_0C;
@@ -191,8 +191,8 @@ s32 func_808B74D8(BgBreakwall* this, PlayState* play) {
s32 func_808B751C(BgBreakwall* this, PlayState* play) {
Actor_SetScale(&this->dyna.actor, 0.1f);
- if ((BGBREAKWALL_SWITCHFLAG(&this->dyna.actor) != 0x7F) &&
- !Flags_GetSwitch(play, BGBREAKWALL_SWITCHFLAG(&this->dyna.actor))) {
+ if ((BGBREAKWALL_SWITCH_FLAG(&this->dyna.actor) != 0x7F) &&
+ !Flags_GetSwitch(play, BGBREAKWALL_SWITCH_FLAG(&this->dyna.actor))) {
return false;
}
@@ -212,15 +212,15 @@ void BgBreakwall_Init(Actor* thisx, PlayState* play) {
BgBreakwallStruct* sp24 = &D_808B8140[BGBREAKWALL_GET_F(&this->dyna.actor)];
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
- this->unk_15C = Object_GetIndex(&play->objectCtx, sp24->unk_00);
+ this->objectSlot = Object_GetSlot(&play->objectCtx, sp24->objectId);
- if ((this->unk_15C < 0) || !sp24->unk_14(this, play)) {
+ if ((this->objectSlot <= OBJECT_SLOT_NONE) || !sp24->unk_14(this, play)) {
Actor_Kill(&this->dyna.actor);
return;
}
BgBreakwall_SetupAction(this, func_808B76CC);
- this->switchFlag = BGBREAKWALL_SWITCHFLAG(&this->dyna.actor);
+ this->switchFlag = BGBREAKWALL_SWITCH_FLAG(&this->dyna.actor);
}
void BgBreakwall_Destroy(Actor* thisx, PlayState* play) {
@@ -233,10 +233,10 @@ void BgBreakwall_Destroy(Actor* thisx, PlayState* play) {
}
void func_808B76CC(BgBreakwall* this, PlayState* play) {
- if (Object_IsLoaded(&play->objectCtx, this->unk_15C)) {
+ if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) {
BgBreakwallStruct* temp_s1 = &D_808B8140[BGBREAKWALL_GET_F(&this->dyna.actor)];
- this->dyna.actor.objBankIndex = this->unk_15C;
+ this->dyna.actor.objectSlot = this->objectSlot;
this->dyna.actor.draw = BgBreakwall_Draw;
if (((BGBREAKWALL_GET_F(&this->dyna.actor)) != BGBREAKWALL_F_7) &&
@@ -338,8 +338,8 @@ void func_808B7A90(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_800FE7A8(D_808B82F0, &sp2C);
- func_800FE7A8(D_808B8300, &sp28);
+ Environment_LerpSandstormColors(D_808B82F0, &sp2C);
+ Environment_LerpSandstormColors(D_808B8300, &sp28);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, sp2C.r, sp2C.g, sp2C.b, 255);
gDPSetEnvColor(POLY_XLU_DISP++, sp28.r, sp28.g, sp28.b, 255);
@@ -358,15 +358,15 @@ void func_808B7B54(Actor* thisx, PlayState* play) {
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_800FE7A8(D_808B8310, &sp50);
- func_800FE7A8(D_808B8330, &sp4C);
+ Environment_LerpSandstormColors(D_808B8310, &sp50);
+ Environment_LerpSandstormColors(D_808B8330, &sp4C);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, sp50.r, sp50.g, sp50.b, 255);
gDPSetEnvColor(POLY_XLU_DISP++, sp4C.r, sp4C.g, sp4C.b, 255);
gSPDisplayList(POLY_XLU_DISP++, object_posthouse_obj_DL_000A50);
- func_800FE7A8(D_808B8320, &sp50);
- func_800FE7A8(D_808B8340, &sp4C);
+ Environment_LerpSandstormColors(D_808B8320, &sp50);
+ Environment_LerpSandstormColors(D_808B8340, &sp4C);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, sp50.r, sp50.g, sp50.b, 255);
gDPSetEnvColor(POLY_XLU_DISP++, sp4C.r, sp4C.g, sp4C.b, 255);
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 c332fe82c..f1f3c2b5c 100644
--- a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.h
+++ b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.h
@@ -10,7 +10,7 @@ typedef s32 (*BgBreakwallUnkFunc)(struct BgBreakwall*, PlayState*);
typedef void (*BgBreakwallUnkFunc2)(struct BgBreakwall*, PlayState*);
#define BGBREAKWALL_GET_F(thisx) ((thisx)-> params & 0xF)
-#define BGBREAKWALL_SWITCHFLAG(thisx) (((thisx)-> params & 0xFE00) >> 9)
+#define BGBREAKWALL_SWITCH_FLAG(thisx) (((thisx)-> params & 0xFE00) >> 9)
typedef enum {
/* 7 */ BGBREAKWALL_F_7 = 7,
@@ -20,7 +20,7 @@ typedef enum {
typedef struct BgBreakwall {
/* 0x000 */ DynaPolyActor dyna;
- /* 0x15C */ s8 unk_15C;
+ /* 0x15C */ s8 objectSlot;
/* 0x15D */ u8 switchFlag;
/* 0x15E */ u8 unk_15E;
/* 0x160 */ BgBreakwallActionFunc actionFunc;
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 5d0ac3bc5..52c0f046f 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
@@ -198,7 +198,7 @@ void func_80B8264C(BgDblueBalance* this) {
f32 temp_f0;
s16 phi_s2;
- if (this->unk_170 != 0) {
+ if (this->isSwitchFlagSet) {
if (this->unk_183 < 8) {
this->unk_183 = 0;
} else {
@@ -247,7 +247,7 @@ void func_80B8264C(BgDblueBalance* this) {
}
void func_80B828E4(BgDblueBalance* this, PlayState* play) {
- if (Flags_GetSwitch(play, BGDBLUEBALANCE_GET_7F(&this->dyna.actor)) && (this->unk_17D <= 0)) {
+ if (Flags_GetSwitch(play, BGDBLUEBALANCE_GET_SWITCH_FLAG(&this->dyna.actor)) && (this->unk_17D <= 0)) {
if (this->unk_183 >= 252) {
this->unk_183 = 255;
} else {
@@ -306,7 +306,7 @@ void BgDblueBalance_Init(Actor* thisx, PlayState* play) {
BgDblueBalance* this = THIS;
s32 sp2C = BGDBLUEBALANCE_GET_300(&this->dyna.actor);
s32 pad2;
- s32 sp24 = Flags_GetSwitch(play, BGDBLUEBALANCE_GET_7F(&this->dyna.actor));
+ s32 isSwitchFlagSet = Flags_GetSwitch(play, BGDBLUEBALANCE_GET_SWITCH_FLAG(&this->dyna.actor));
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
@@ -326,7 +326,7 @@ void BgDblueBalance_Init(Actor* thisx, PlayState* play) {
}
if (sp2C == 0) {
- if (sp24 != 0) {
+ if (isSwitchFlagSet) {
this->dyna.actor.shape.rot.z = -0x1C72;
this->unk_174 = -0x1C72;
} else {
@@ -337,9 +337,9 @@ void BgDblueBalance_Init(Actor* thisx, PlayState* play) {
func_80B8259C(this, play);
func_80B82DC4(this);
} else if (sp2C == 3) {
- this->unk_16C = sp24;
- this->unk_170 = sp24;
- if (sp24 != 0) {
+ this->isSwitchFlagSet2 = isSwitchFlagSet;
+ this->isSwitchFlagSet = isSwitchFlagSet;
+ if (isSwitchFlagSet) {
func_80B83344(this);
} else {
this->unk_178 = 0x1F4;
@@ -396,7 +396,7 @@ void func_80B82DE0(BgDblueBalance* this, PlayState* play) {
BgDblueBalance* sp3C;
Vec3f sp30;
- if (Flags_GetSwitch(play, BGDBLUEBALANCE_GET_7F(&this->dyna.actor))) {
+ if (Flags_GetSwitch(play, BGDBLUEBALANCE_GET_SWITCH_FLAG(&this->dyna.actor))) {
if (this->unk_17D > 0) {
this->unk_17D--;
} else {
@@ -555,7 +555,7 @@ void func_80B83344(BgDblueBalance* this) {
}
void func_80B8335C(BgDblueBalance* this, PlayState* play) {
- if (!Flags_GetSwitch(play, BGDBLUEBALANCE_GET_7F(&this->dyna.actor))) {
+ if (!Flags_GetSwitch(play, BGDBLUEBALANCE_GET_SWITCH_FLAG(&this->dyna.actor))) {
this->unk_178 = -0x14;
func_80B833A8(this);
}
@@ -573,8 +573,8 @@ void func_80B833C4(BgDblueBalance* this, PlayState* play) {
s16 sp26;
s16 sp24;
- if (this->unk_170 != 0) {
- if ((this->unk_16C == 0) && (this->unk_17F == 0)) {
+ if (this->isSwitchFlagSet) {
+ if (!this->isSwitchFlagSet2 && (this->unk_17F == 0)) {
this->unk_17F = 1;
}
@@ -590,9 +590,11 @@ void func_80B833C4(BgDblueBalance* this, PlayState* play) {
sp26 = this->dyna.actor.shape.rot.x;
this->dyna.actor.shape.rot.x += this->unk_178;
sp24 = this->dyna.actor.shape.rot.x;
+
+ //! FAKE:
if (sp24) {}
- if (this->unk_170 != 0) {
+ if (this->isSwitchFlagSet) {
if (this->unk_186 != 0) {
if (func_80B82B00(sp26, sp24, this->unk_184)) {
sp28 = true;
@@ -619,7 +621,7 @@ void func_80B833C4(BgDblueBalance* this, PlayState* play) {
void func_80B83518(Actor* thisx, PlayState* play) {
BgDblueBalance* this = THIS;
- this->unk_170 = Flags_GetSwitch(play, BGDBLUEBALANCE_GET_7F(&this->dyna.actor));
+ this->isSwitchFlagSet = Flags_GetSwitch(play, BGDBLUEBALANCE_GET_SWITCH_FLAG(&this->dyna.actor));
this->actionFunc(this, play);
@@ -638,7 +640,7 @@ void func_80B83518(Actor* thisx, PlayState* play) {
CutsceneManager_Queue(this->dyna.actor.csId);
}
}
- this->unk_16C = this->unk_170;
+ this->isSwitchFlagSet2 = this->isSwitchFlagSet;
}
void BgDblueBalance_Draw(Actor* thisx, PlayState* play) {
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 5d72ea3db..4c16a1cb8 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
@@ -7,7 +7,7 @@ struct BgDblueBalance;
typedef void (*BgDblueBalanceActionFunc)(struct BgDblueBalance*, PlayState*);
-#define BGDBLUEBALANCE_GET_7F(thisx) ((thisx)->params & 0x7F)
+#define BGDBLUEBALANCE_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
#define BGDBLUEBALANCE_GET_300(thisx) (((thisx)->params >> 8) & 3)
typedef struct {
@@ -23,8 +23,8 @@ typedef struct BgDblueBalance {
/* 0x160 */ struct BgDblueBalance* unk_160;
/* 0x164 */ struct BgDblueBalance* unk_164;
/* 0x168 */ BgDblueBalanceActionFunc actionFunc;
- /* 0x16C */ s32 unk_16C;
- /* 0x170 */ s32 unk_170;
+ /* 0x16C */ s32 isSwitchFlagSet2;
+ /* 0x170 */ s32 isSwitchFlagSet;
/* 0x174 */ s16 unk_174;
/* 0x176 */ s16 unk_176;
/* 0x178 */ s16 unk_178;
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 6562c4738..be3623f2d 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
@@ -108,22 +108,22 @@ static InitChainEntry sInitChain[] = {
Vec3f D_80A2B988 = { 1785.0f, 0.0f, 220.0f };
-s32 func_80A29A80(PlayState* play, s32 arg1, s32 arg2) {
+s32 func_80A29A80(PlayState* play, s32 switchFlagBase, s32 arg2) {
s32 sp2C = 1;
- s32 val;
+ s32 switchFlagOffset;
s32 val2;
if (arg2 < 14) {
- val = D_80A2B870[arg2][0];
+ switchFlagOffset = D_80A2B870[arg2][0];
val2 = D_80A2B870[arg2][1];
- while (val--) {
- if ((1 << val) & val2) {
- if (!Flags_GetSwitch(play, arg1 + val)) {
+ while (switchFlagOffset--) {
+ if ((1 << switchFlagOffset) & val2) {
+ if (!Flags_GetSwitch(play, switchFlagBase + switchFlagOffset)) {
sp2C = 0;
break;
}
- } else if (Flags_GetSwitch(play, arg1 + val)) {
+ } else if (Flags_GetSwitch(play, switchFlagBase + switchFlagOffset)) {
sp2C = 0;
break;
}
@@ -132,20 +132,20 @@ s32 func_80A29A80(PlayState* play, s32 arg1, s32 arg2) {
sp2C = 0;
switch (arg2) {
case 14:
- if (!Flags_GetSwitch(play, arg1)) {
+ if (!Flags_GetSwitch(play, switchFlagBase)) {
sp2C = 1;
}
- if (Flags_GetSwitch(play, arg1 + 1) && Flags_GetSwitch(play, arg1 + 2) &&
- Flags_GetSwitch(play, arg1 + 3)) {
+ if (Flags_GetSwitch(play, switchFlagBase + 1) && Flags_GetSwitch(play, switchFlagBase + 2) &&
+ Flags_GetSwitch(play, switchFlagBase + 3)) {
sp2C += 2;
}
break;
case 15:
- if (!Flags_GetSwitch(play, arg1) ||
- (Flags_GetSwitch(play, arg1 + 1) && Flags_GetSwitch(play, arg1 + 2) &&
- Flags_GetSwitch(play, arg1 + 3))) {
+ if (!Flags_GetSwitch(play, switchFlagBase) ||
+ (Flags_GetSwitch(play, switchFlagBase + 1) && Flags_GetSwitch(play, switchFlagBase + 2) &&
+ Flags_GetSwitch(play, switchFlagBase + 3))) {
sp2C = 1;
}
break;
@@ -162,7 +162,7 @@ void BgDblueMovebg_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
this->unk_160 = BGDBLUEMOVEBG_GET_F(thisx);
this->unk_1BC = BGDBLUEMOVEBG_GET_F000(thisx);
- this->unk_1C0 = BGDBLUEMOVEBG_GET_FF0(thisx);
+ this->switchFlag = BGDBLUEMOVEBG_GET_SWITCH_FLAG(thisx);
DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
if ((this->unk_160 == 9) || (this->unk_160 == 8)) {
@@ -214,7 +214,7 @@ void BgDblueMovebg_Init(Actor* thisx, PlayState* play) {
}
this->unk_17E = 0;
this->unk_184 = 0.0f;
- if (Flags_GetSwitch(play, this->unk_1C0)) {
+ if (Flags_GetSwitch(play, this->switchFlag)) {
this->unk_18C = 0x384;
} else {
this->unk_18C = 0;
@@ -224,7 +224,7 @@ void BgDblueMovebg_Init(Actor* thisx, PlayState* play) {
break;
case 6:
- this->unk_178 = func_80A29A80(play, this->unk_1C0, this->unk_1BC);
+ this->unk_178 = func_80A29A80(play, this->switchFlag, this->unk_1BC);
this->unk_1CC = D_80A2B96C[this->unk_178];
this->unk_1CE = this->unk_1CC;
this->actionFunc = func_80A2A1E0;
@@ -237,7 +237,7 @@ void BgDblueMovebg_Init(Actor* thisx, PlayState* play) {
this->dyna.actor.shape.rot.x = 0;
this->dyna.actor.world.rot.z = 0;
this->dyna.actor.shape.rot.z = 0;
- if (Flags_GetSwitch(play, this->unk_1C0)) {
+ if (Flags_GetSwitch(play, this->switchFlag)) {
Actor_Kill(&this->dyna.actor);
break;
}
@@ -257,7 +257,7 @@ void BgDblueMovebg_Init(Actor* thisx, PlayState* play) {
for (i = 0; i < ARRAY_COUNT(sCsIdList); i++) {
sCsIdList[i] = this->csIdList[i];
}
- this->unk_178 = func_80A29A80(play, this->unk_1C0, this->unk_1BC);
+ this->unk_178 = func_80A29A80(play, this->switchFlag, this->unk_1BC);
this->unk_1CC = D_80A2B96C[this->unk_178];
this->unk_1CE = this->unk_1CC;
Matrix_RotateYS(this->dyna.actor.shape.rot.y, MTXMODE_NEW);
@@ -275,7 +275,7 @@ void BgDblueMovebg_Init(Actor* thisx, PlayState* play) {
break;
case 11:
- this->unk_1CC = D_80A2B96C[func_80A29A80(play, this->unk_1C0, this->unk_1BC)];
+ this->unk_1CC = D_80A2B96C[func_80A29A80(play, this->switchFlag, this->unk_1BC)];
D_80A2BBF0 = this;
this->dyna.actor.flags |= ACTOR_FLAG_20;
this->dyna.actor.update = Actor_Noop;
@@ -314,7 +314,7 @@ void func_80A2A128(BgDblueMovebg* this, PlayState* play) {
}
void func_80A2A1E0(BgDblueMovebg* this, PlayState* play) {
- s32 temp_v0 = func_80A29A80(play, this->unk_1C0, this->unk_1BC);
+ s32 temp_v0 = func_80A29A80(play, this->switchFlag, this->unk_1BC);
if (temp_v0 != this->unk_178) {
switch (temp_v0) {
@@ -422,7 +422,7 @@ void func_80A2A444(BgDblueMovebg* this, PlayState* play) {
if (sp20) {
player->stateFlags2 &= ~PLAYER_STATE2_10;
this->dyna.pushForce = 0.0f;
- Flags_SetSwitch(play, this->unk_1C0);
+ Flags_SetSwitch(play, this->switchFlag);
Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_STONEDOOR_STOP);
if (func_80A29A80(play, this->unk_1C8, this->unk_1C4)) {
@@ -510,9 +510,9 @@ void func_80A2A7F8(BgDblueMovebg* this, PlayState* play) {
temp = (this->unk_18C + sp26 + 3600) % 3600;
if ((temp == 900) || (temp == 2700)) {
- Flags_SetSwitch(play, this->unk_1C0);
+ Flags_SetSwitch(play, this->switchFlag);
} else {
- Flags_UnsetSwitch(play, this->unk_1C0);
+ Flags_UnsetSwitch(play, this->switchFlag);
}
player->stateFlags1 |= PLAYER_STATE1_20;
@@ -637,7 +637,7 @@ void func_80A2AED0(BgDblueMovebg* this, PlayState* play) {
}
}
- temp_v0_3 = func_80A29A80(play, this->unk_1C0, this->unk_1BC);
+ temp_v0_3 = func_80A29A80(play, this->switchFlag, this->unk_1BC);
if (temp_v0_3 != this->unk_178) {
switch (temp_v0_3) {
case 1:
@@ -704,7 +704,7 @@ void func_80A2AED0(BgDblueMovebg* this, PlayState* play) {
}
void func_80A2B1A0(BgDblueMovebg* this, PlayState* play) {
- switch (func_80A29A80(play, this->unk_1C0, this->unk_1BC)) {
+ switch (func_80A29A80(play, this->switchFlag, this->unk_1BC)) {
case 1:
this->dyna.actor.shape.rot.z = this->dyna.actor.home.rot.z;
break;
@@ -736,7 +736,7 @@ void func_80A2B274(Actor* thisx, PlayState* play) {
return;
}
- temp_v1 = D_80A2B96C[func_80A29A80(play, this->unk_1C0, this->unk_1BC)];
+ temp_v1 = D_80A2B96C[func_80A29A80(play, this->switchFlag, this->unk_1BC)];
if (temp_v1 != 0) {
if (temp_v1 > 0) {
Audio_PlaySfx_WaterWheel(&this->dyna.actor.projectedPos, NA_SE_EV_DUMMY_WATER_WHEEL_RR - SFX_FLAG);
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 6e81c24c1..c9a4e2f7e 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
@@ -8,7 +8,7 @@ struct BgDblueMovebg;
typedef void (*BgDblueMovebgActionFunc)(struct BgDblueMovebg*, PlayState*);
#define BGDBLUEMOVEBG_GET_F(thisx) ((thisx)->params & 0xF)
-#define BGDBLUEMOVEBG_GET_FF0(thisx) (((thisx)->params >> 4) & 0xFF)
+#define BGDBLUEMOVEBG_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 4) & 0xFF)
#define BGDBLUEMOVEBG_GET_F000(thisx) (((thisx)->params >> 0xC) & 0xF)
#define BGDBLUEMOVEBG_F_8 8
@@ -39,7 +39,7 @@ typedef struct BgDblueMovebg {
/* 0x1B4 */ UNK_TYPE1 unk1B4[2];
/* 0x1B6 */ s16 csIdList[2];
/* 0x1BC */ s32 unk_1BC;
- /* 0x1C0 */ s32 unk_1C0;
+ /* 0x1C0 */ s32 switchFlag;
/* 0x1C4 */ s32 unk_1C4;
/* 0x1C8 */ s32 unk_1C8;
/* 0x1CC */ s16 unk_1CC;
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 44acf9343..211aac6fd 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
@@ -80,7 +80,7 @@ s32 func_80B83D04(BgDblueWaterfall* this, PlayState* play) {
s32 phi_v1;
s32 sp18 = BGDBLUEWATERFALL_GET_100(&this->actor);
- if (Flags_GetSwitch(play, BGDBLUEWATERFALL_GET_7F(&this->actor))) {
+ if (Flags_GetSwitch(play, BGDBLUEWATERFALL_GET_SWITCH_FLAG(&this->actor))) {
phi_v1 = true;
} else {
phi_v1 = false;
@@ -91,7 +91,7 @@ s32 func_80B83D04(BgDblueWaterfall* this, PlayState* play) {
s32 func_80B83D58(Actor* thisx, PlayState* play) {
BgDblueWaterfall* this = THIS;
- if (Flags_GetSwitch(play, BGDBLUEWATERFALL_GET_7F(&this->actor))) {
+ if (Flags_GetSwitch(play, BGDBLUEWATERFALL_GET_SWITCH_FLAG(&this->actor))) {
return false;
}
return true;
@@ -99,11 +99,11 @@ s32 func_80B83D58(Actor* thisx, PlayState* play) {
void func_80B83D94(BgDblueWaterfall* this, PlayState* play) {
s32 pad;
- s32 sp20 = BGDBLUEWATERFALL_GET_7F(&this->actor);
+ s32 switchFlag = BGDBLUEWATERFALL_GET_SWITCH_FLAG(&this->actor);
s32 sp1C = BGDBLUEWATERFALL_GET_100(&this->actor);
s32 phi_v0;
- if (Flags_GetSwitch(play, sp20)) {
+ if (Flags_GetSwitch(play, switchFlag)) {
phi_v0 = true;
} else {
phi_v0 = false;
@@ -111,20 +111,20 @@ void func_80B83D94(BgDblueWaterfall* this, PlayState* play) {
if (phi_v0 != sp1C) {
if (phi_v0) {
- Flags_UnsetSwitch(play, sp20);
+ Flags_UnsetSwitch(play, switchFlag);
} else {
- Flags_SetSwitch(play, sp20);
+ Flags_SetSwitch(play, switchFlag);
}
}
}
void func_80B83E1C(BgDblueWaterfall* this, PlayState* play) {
s32 pad;
- s32 sp20 = BGDBLUEWATERFALL_GET_7F(&this->actor);
+ s32 switchFlag = BGDBLUEWATERFALL_GET_SWITCH_FLAG(&this->actor);
s32 sp1C = BGDBLUEWATERFALL_GET_100(&this->actor);
s32 phi_v0;
- if (Flags_GetSwitch(play, sp20)) {
+ if (Flags_GetSwitch(play, switchFlag)) {
phi_v0 = true;
} else {
phi_v0 = false;
@@ -132,9 +132,9 @@ void func_80B83E1C(BgDblueWaterfall* this, PlayState* play) {
if (phi_v0 == sp1C) {
if (phi_v0) {
- Flags_UnsetSwitch(play, sp20);
+ Flags_UnsetSwitch(play, switchFlag);
} else {
- Flags_SetSwitch(play, sp20);
+ Flags_SetSwitch(play, switchFlag);
}
}
}
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 fae5cca6a..6e373084e 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
@@ -7,7 +7,7 @@ struct BgDblueWaterfall;
typedef void (*BgDblueWaterfallActionFunc)(struct BgDblueWaterfall*, PlayState*);
-#define BGDBLUEWATERFALL_GET_7F(thisx) ((thisx)->params & 0x7F)
+#define BGDBLUEWATERFALL_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
#define BGDBLUEWATERFALL_GET_100(thisx) (((thisx)->params >> 8) & 1)
typedef struct BgDblueWaterfall {
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 344fcce84..b6db682d2 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
@@ -57,7 +57,7 @@ static ColliderCylinderInit sCylinderInit = {
};
void BgDkjailIvy_IvyCutEffects(BgDkjailIvy* this, PlayState* play) {
- static Gfx* sLeafDlists[] = { gKakeraLeafMiddle, gKakeraLeafTip };
+ static Gfx* sLeafDlists[] = { gKakeraLeafMiddleDL, gKakeraLeafTipDL };
static s16 sLeafScales[] = { 110, 80, 60, 40 };
f32 phi_fs0;
s32 i;
@@ -120,15 +120,16 @@ void BgDkjailIvy_Init(Actor* thisx, PlayState* play) {
DynaPolyActor_Init(&this->dyna, 0);
Collider_InitCylinder(play, &this->collider);
- if (Flags_GetSwitch(play, BG_DKJAIL_GET_SWITCH(thisx))) {
+ if (Flags_GetSwitch(play, BG_DKJAIL_GET_SWITCH_FLAG(thisx))) {
Actor_Kill(&this->dyna.actor);
- } else {
- DynaPolyActor_LoadMesh(play, &this->dyna, &gDkjailCol);
- Collider_SetCylinder(play, &this->collider, &this->dyna.actor, &sCylinderInit);
- Collider_UpdateCylinder(&this->dyna.actor, &this->collider);
- this->alpha = 255;
- BgDkjailIvy_SetupWaitForCut(this);
+ return;
}
+
+ DynaPolyActor_LoadMesh(play, &this->dyna, &gDkjailCol);
+ Collider_SetCylinder(play, &this->collider, &this->dyna.actor, &sCylinderInit);
+ Collider_UpdateCylinder(&this->dyna.actor, &this->collider);
+ this->alpha = 255;
+ BgDkjailIvy_SetupWaitForCut(this);
}
void BgDkjailIvy_Destroy(Actor* thisx, PlayState* play) {
@@ -162,7 +163,7 @@ void BgDkjailIvy_BeginCutscene(BgDkjailIvy* this, PlayState* play) {
CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
this->fadeOutTimer = 50;
DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
- Flags_SetSwitch(play, BG_DKJAIL_GET_SWITCH(&this->dyna.actor));
+ Flags_SetSwitch(play, BG_DKJAIL_GET_SWITCH_FLAG(&this->dyna.actor));
BgDkjailIvy_IvyCutEffects(this, play);
Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_GRASS_WALL_BROKEN);
BgDkjailIvy_SetupFadeOut(this);
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 4835b7a0b..e7ce39a64 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,7 +3,7 @@
#include "global.h"
-#define BG_DKJAIL_GET_SWITCH(thisx) ((thisx)->params & 0x7F)
+#define BG_DKJAIL_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
struct BgDkjailIvy;
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 332e4e543..404530342 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
@@ -5,6 +5,7 @@
*/
#include "z_bg_dy_yoseizo.h"
+#include "overlays/actors/ovl_Demo_Effect/z_demo_effect.h"
#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_2000000)
@@ -13,19 +14,17 @@
void BgDyYoseizo_Init(Actor* thisx, PlayState* play);
void BgDyYoseizo_Destroy(Actor* thisx, PlayState* play);
void BgDyYoseizo_Update(Actor* thisx, PlayState* play);
+void BgDyYoseizo_Draw(Actor* thisx, PlayState* play);
-void func_80A0AE1C(BgDyYoseizo* this, PlayState* play);
-void func_80A0B078(BgDyYoseizo* this, PlayState* play);
void func_80A0B184(BgDyYoseizo* this, PlayState* play);
-void func_80A0B290(BgDyYoseizo* this, PlayState* play);
-void func_80A0B35C(BgDyYoseizo* this, PlayState* play);
-void func_80A0B500(BgDyYoseizo* this, PlayState* play);
-void func_80A0B5F0(BgDyYoseizo* this, PlayState* play);
-void func_80A0B75C(BgDyYoseizo* this, PlayState* play);
-void func_80A0B8CC(BgDyYoseizo* this, PlayState* play);
void func_80A0BB08(BgDyYoseizo* this, PlayState* play);
-#if 0
+/* Effects functions */
+void BgDyYoseizo_SpawnEffect(BgDyYoseizo* this, Vec3f* initPos, Vec3f* initVelocity, Vec3f* accel,
+ Color_RGB8* primColor, Color_RGB8* envColor, f32 scale, s16 life, s16 type);
+void BgDyYoseizo_UpdateEffects(BgDyYoseizo* this, PlayState* play);
+void BgDyYoseizo_DrawEffects(BgDyYoseizo* this, PlayState* play);
+
ActorInit Bg_Dy_Yoseizo_InitVars = {
ACTOR_BG_DY_YOSEIZO,
ACTORCAT_PROP,
@@ -38,56 +37,730 @@ ActorInit Bg_Dy_Yoseizo_InitVars = {
(ActorFunc)NULL,
};
-#endif
+typedef enum GreatFairyAnimation {
+ /* 0 */ GREATFAIRY_ANIM_START_GIVING_UPGRADE,
+ /* 1 */ GREATFAIRY_ANIM_GIVING_UPGRADE,
+ /* 2 */ GREATFAIRY_ANIM_SPIN_LAY_DOWN,
+ /* 3 */ GREATFAIRY_ANIM_LAY_DOWN_TRANSITION,
+ /* 4 */ GREATFAIRY_ANIM_LAYING_DOWN,
+ /* 5 */ GREATFAIRY_ANIM_SHOWING_ITEM,
+ /* 6 */ GREATFAIRY_ANIM_ARMS_FOLDED,
+ /* 7 */ GREATFAIRY_ANIM_CLAPPING,
+ /* 8 */ GREATFAIRY_ANIM_TEACH_SPIN_ATTACK,
+ /* 9 */ GREATFAIRY_ANIM_MAX
+} GreatFairyAnimation;
-extern UNK_TYPE D_06008090;
-extern UNK_TYPE D_0600D228;
-extern UNK_TYPE D_0601C6F4;
+static AnimationHeader* sAnimations[GREATFAIRY_ANIM_MAX] = {
+ &gGreatFairyStartGivingUpgradeAnim, // GREATFAIRY_ANIM_START_GIVING_UPGRADE
+ &gGreatFairyGivingUpgradeAnim, // GREATFAIRY_ANIM_GIVING_UPGRADE
+ &gGreatFairySpinLayDownAnim, // GREATFAIRY_ANIM_SPIN_LAY_DOWN
+ &gGreatFairyLayDownTransitionAnim, // GREATFAIRY_ANIM_LAY_DOWN_TRANSITION
+ &gGreatFairyLayingDownAnim, // GREATFAIRY_ANIM_LAYING_DOWN
+ &gGreatFairyShowingItemAnim, // GREATFAIRY_ANIM_SHOWING_ITEM
+ &gGreatFairyArmsFoldedAnim, // GREATFAIRY_ANIM_ARMS_FOLDED
+ &gGreatFairyClappingAnim, // GREATFAIRY_ANIM_CLAPPING
+ &gGreatFairyTeachSpinAttackAnim, // GREATFAIRY_ANIM_TEACH_SPIN_ATTACK
+};
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/BgDyYoseizo_Init.s")
+void BgDyYoseizo_Init(Actor* thisx, PlayState* play) {
+ BgDyYoseizo* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/BgDyYoseizo_Destroy.s")
+ this->unk2EC = this->actor.world.pos.y + 40.0f;
+ this->actor.focus.pos = this->actor.world.pos;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0A96C.s")
+ SkelAnime_InitFlex(play, &this->skelAnime, &gGreatFairySkel, &gGreatFairyShowingItemAnim, this->jointTable,
+ this->morphTable, GREAT_FAIRY_LIMB_MAX);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0A9E4.s")
+ this->actionFunc = func_80A0BB08;
+ Actor_SetScale(&this->actor, 0.0f);
+ this->eyeIndex = 0;
+ this->mouthIndex = 0;
+ this->blinkTimer = 0;
+ this->unk2F8 = 0;
+ GREAT_FAIRY_ROTZ(&this->actor) = 1;
+ this->unk302 = 0;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0AA40.s")
+void BgDyYoseizo_Destroy(Actor* thisx, PlayState* play) {
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0AD50.s")
+// Has no visible effect since no segment is set for manually-controllable eye textures
+void BgDyYoseizo_UpdateEyes(BgDyYoseizo* this) {
+ if (this->blinkTimer != 0) {
+ this->blinkTimer--;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0AE1C.s")
+ if (this->blinkTimer == 0) {
+ this->eyeIndex++;
+ if (this->eyeIndex >= 3) {
+ this->eyeIndex = 0;
+ this->blinkTimer = (s32)Rand_ZeroFloat(60.0f) + 20;
+ }
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0AFDC.s")
+void BgDyYoseizo_Bob(BgDyYoseizo* this, PlayState* play) {
+ this->actor.shape.yOffset = Math_SinS(play->gameplayFrames * 1000) * 15.0f;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0B078.s")
+typedef enum GreatFairyEffectTrajectory {
+ /* 0 */ GREAT_FAIRY_EFFECT_TRAJECTORY_RADIANT, // Dispersing particles, in the Great Fairy's signature colour.
+ /* 2 */ GREAT_FAIRY_EFFECT_TRAJECTORY_FAST_RADIANT = 2, // As above, but initially move 10 times faster.
+ /* 5 */ GREAT_FAIRY_EFFECT_TRAJECTORY_CONVERGE_ON_PLAYER = 5 // Similar to OoT's healing effect, fixed colour.
+} GreatFairyEffectTrajectory;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0B184.s")
+/**
+ * Spawn particle effects; see `GreatFairyEffectTrajectory` enum for details
+ *
+ * @param trajectoryType use the `GreatFairyEffectTrajectory` enum.
+ * @param count number to spawn.
+ */
+void BgDyYoseizo_SpawnEffects(BgDyYoseizo* this, s16 trajectoryType, s32 count) {
+ static Color_RGB8 sEffectPrimColors[] = {
+ { 255, 235, 220 }, // Magic
+ { 255, 220, 220 }, // Power
+ { 220, 255, 220 }, // Wisdom
+ { 220, 220, 255 }, // Courage
+ { 255, 255, 200 }, // Kindness
+ { 255, 255, 170 }, // GREAT_FAIRY_EFFECT_TRAJECTORY_CONVERGE_ON_PLAYER
+ };
+ static Color_RGB8 sEffectEnvColors[] = {
+ { 255, 150, 0 }, // Magic
+ { 255, 0, 0 }, // Power
+ { 0, 255, 0 }, // Wisdom
+ { 0, 0, 255 }, // Courage
+ { 255, 255, 0 }, // Kindness
+ { 255, 100, 255 }, // GREAT_FAIRY_EFFECT_TRAJECTORY_CONVERGE_ON_PLAYER
+ };
+ Vec3f velocity;
+ Vec3f accel;
+ Vec3f pos;
+ Color_RGB8 primColor;
+ Color_RGB8 envColor;
+ f32 spawnHeightVariation;
+ f32 scale;
+ s32 effectType;
+ s32 life;
+ s32 i;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0B290.s")
+ if (this->actor.scale.y < 0.01f) {
+ return;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0B35C.s")
+ spawnHeightVariation = this->actor.scale.y * 3500.0f;
+ accel.x = Rand_ZeroOne() - 0.5f;
+ accel.y = Rand_ZeroOne() - 0.5f;
+ accel.z = Rand_ZeroOne() - 0.5f;
+ velocity.x = accel.x * 10.0f;
+ velocity.y = accel.y * 10.0f;
+ velocity.z = accel.z * 10.0f;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0B500.s")
+ for (i = 0; i < count; i++) {
+ switch (trajectoryType) {
+ case GREAT_FAIRY_EFFECT_TRAJECTORY_FAST_RADIANT:
+ scale = 1.0f;
+ life = 90;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0B5F0.s")
+ velocity.x = accel.x * 100.0f;
+ velocity.y = accel.y * 100.0f;
+ velocity.z = accel.z * 100.0f;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0B75C.s")
+ effectType = GREAT_FAIRY_GET_TYPE(&this->actor);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0B834.s")
+ pos.x = this->actor.world.pos.x;
+ pos.y = this->actor.world.pos.y + spawnHeightVariation +
+ (Rand_ZeroOne() - 0.5f) * (spawnHeightVariation * 0.5f);
+ pos.z = this->actor.world.pos.z + 30.0f;
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0B8CC.s")
+ case GREAT_FAIRY_EFFECT_TRAJECTORY_RADIANT:
+ scale = 1.0f;
+ life = 90;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0BB08.s")
+ effectType = GREAT_FAIRY_GET_TYPE(&this->actor);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/BgDyYoseizo_Update.s")
+ pos.x = this->actor.world.pos.x;
+ pos.y = this->actor.world.pos.y + spawnHeightVariation +
+ (Rand_ZeroOne() - 0.5f) * (spawnHeightVariation * 0.5f);
+ pos.z = this->actor.world.pos.z + 30.0f;
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0BCD8.s")
+ default: // all become convergent type
+ scale = 0.2f;
+ life = 50;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0BD40.s")
+ effectType = GREAT_FAIRY_EFFECT_TRAJECTORY_CONVERGE_ON_PLAYER;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0BE60.s")
+ pos.x = Rand_CenteredFloat(10.0f) + this->actor.world.pos.x;
+ pos.y = this->actor.world.pos.y + spawnHeightVariation + 50.0f +
+ (Rand_ZeroOne() - 0.5f) * (spawnHeightVariation * 0.1f);
+ pos.z = this->actor.world.pos.z + 30.0f;
+ break;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0BF70.s")
+ primColor.r = sEffectPrimColors[effectType].r;
+ primColor.g = sEffectPrimColors[effectType].g;
+ primColor.b = sEffectPrimColors[effectType].b;
+ envColor.r = sEffectEnvColors[effectType].r;
+ envColor.g = sEffectEnvColors[effectType].g;
+ envColor.b = sEffectEnvColors[effectType].b;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0C270.s")
+ BgDyYoseizo_SpawnEffect(this, &pos, &velocity, &accel, &primColor, &envColor, scale, life, effectType);
+ }
+}
+
+void func_80A0AD50(BgDyYoseizo* this) {
+ f32 scale = this->actor.scale.x;
+ f32 heightTarget = this->actor.home.pos.y + 40.0f;
+
+ Math_ApproachF(&this->actor.world.pos.y, heightTarget, this->unk2F0, 100.0f);
+ Math_ApproachF(&scale, 0.035f, this->unk2F4, 0.005f);
+ Math_ApproachF(&this->unk2F0, 0.8f, 0.1f, 0.02f);
+ Math_ApproachF(&this->unk2F4, 0.2f, 0.03f, 0.05f);
+ BgDyYoseizo_SpawnEffects(this, GREAT_FAIRY_EFFECT_TRAJECTORY_RADIANT, 2);
+ Actor_SetScale(&this->actor, scale);
+}
+
+void func_80A0AE1C(BgDyYoseizo* this, PlayState* play) {
+ f32 scale = this->actor.scale.x;
+ f32 heightTarget = this->actor.home.pos.y;
+
+ if (scale < 0.003f) {
+ this->actionFunc = func_80A0BB08;
+ Actor_SetScale(&this->actor, 0.0f);
+ this->unk2F0 = 0.0f;
+ this->unk2F4 = 0.0f;
+ this->unk2F8 = 0;
+
+ if (GREAT_FAIRY_GET_TYPE(&this->actor) <= GREAT_FAIRY_TYPE_COURAGE) {
+ Actor_Spawn(&play->actorCtx, play, ACTOR_DEMO_EFFECT, this->actor.world.pos.x,
+ this->actor.world.pos.y + 20.0f, this->actor.world.pos.z, 0, 0, 0,
+ GREAT_FAIRY_GET_TYPE(&this->actor) + DEMO_EFFECT_TYPE_LIGHT_BASE);
+ } else {
+ Actor_Spawn(&play->actorCtx, play, ACTOR_DEMO_EFFECT, this->actor.world.pos.x,
+ this->actor.world.pos.y + 20.0f, this->actor.world.pos.z, 0, 0, 0,
+ DEMO_EFFECT_TYPE_LIGHT_DARK_YELLOW);
+ }
+ Audio_PlaySfx(NA_SE_SY_WHITE_OUT_T);
+ } else {
+ Math_ApproachF(&this->actor.world.pos.y, heightTarget, this->unk2F0, 100.0f);
+ Math_ApproachZeroF(&scale, this->unk2F4, 0.005f);
+ Math_ApproachF(&this->unk2F0, 0.8f, 0.1f, 0.02f);
+ Math_ApproachF(&this->unk2F4, 0.2f, 0.03f, 0.05f);
+
+ this->actor.shape.rot.y += this->unk2F8;
+ if (this->unk2F8 < 0x1770) {
+ this->unk2F8 += 0x12C;
+ }
+
+ BgDyYoseizo_SpawnEffects(this, GREAT_FAIRY_EFFECT_TRAJECTORY_RADIANT, 2);
+ Actor_SetScale(&this->actor, scale);
+ }
+}
+
+void func_80A0AFDC(BgDyYoseizo* this) {
+ Animation_Change(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_SPIN_LAY_DOWN], 0.0f, 46.0f,
+ Animation_GetLastFrame(sAnimations[GREATFAIRY_ANIM_SPIN_LAY_DOWN]), ANIMMODE_ONCE, 0.0f);
+ this->actionFunc = func_80A0AE1C;
+ Actor_PlaySfx(&this->actor, NA_SE_VO_FR_LAUGH_0);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_GREAT_FAIRY_VANISH);
+ this->unk2F8 = 0;
+ this->actor.velocity.y = 0.0f;
+ this->unk2F0 = 0.0f;
+ this->unk2F4 = 0.0f;
+ this->actor.shape.yOffset = 0.0f;
+}
+
+void func_80A0B078(BgDyYoseizo* this, PlayState* play) {
+ BgDyYoseizo_Bob(this, play);
+ SkelAnime_Update(&this->skelAnime);
+
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103) &&
+ (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id == 7)) {
+ Animation_Change(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_LAYING_DOWN], 1.0f, 0.0f,
+ Animation_GetLastFrame(sAnimations[GREATFAIRY_ANIM_LAYING_DOWN]), ANIMMODE_LOOP, 0.0f);
+ this->actionFunc = func_80A0B184;
+ } else if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103) &&
+ (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id == 6)) {
+ func_80A0AFDC(this);
+ }
+}
+
+void func_80A0B184(BgDyYoseizo* this, PlayState* play) {
+ BgDyYoseizo_Bob(this, play);
+ SkelAnime_Update(&this->skelAnime);
+
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103) &&
+ (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id == 8)) {
+ Animation_Change(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_SHOWING_ITEM], 1.0f, 0.0f,
+ Animation_GetLastFrame(sAnimations[GREATFAIRY_ANIM_SHOWING_ITEM]), ANIMMODE_LOOP, 0.0f);
+ this->actionFunc = func_80A0B078;
+ } else if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103) &&
+ (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id == 6)) {
+ func_80A0AFDC(this);
+ }
+}
+
+void func_80A0B290(BgDyYoseizo* this, PlayState* play) {
+ BgDyYoseizo_Bob(this, play);
+ SkelAnime_Update(&this->skelAnime);
+
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103) &&
+ (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id == 7)) {
+ Animation_Change(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_LAYING_DOWN], 1.0f, 0.0f,
+ Animation_GetLastFrame(sAnimations[GREATFAIRY_ANIM_LAYING_DOWN]), ANIMMODE_LOOP, -10.0f);
+ this->actionFunc = func_80A0B184;
+ this->mouthIndex = 0;
+ }
+}
+
+void func_80A0B35C(BgDyYoseizo* this, PlayState* play) {
+ BgDyYoseizo_Bob(this, play);
+ SkelAnime_Update(&this->skelAnime);
+
+ if (this->timer == 60) {
+ if (!Flags_GetSwitch(play, GREAT_FAIRY_GET_SWITCHFLAG(&this->actor))) {
+ switch (GREAT_FAIRY_GET_TYPE(&this->actor)) {
+ case GREAT_FAIRY_TYPE_MAGIC:
+ if (gSaveContext.save.saveInfo.playerData.isMagicAcquired != true) {
+ gSaveContext.save.saveInfo.playerData.isMagicAcquired = true;
+ gSaveContext.magicFillTarget = MAGIC_NORMAL_METER;
+ }
+ break;
+
+ case GREAT_FAIRY_TYPE_WISDOM:
+ if (gSaveContext.save.saveInfo.playerData.isDoubleMagicAcquired != true) {
+ gSaveContext.save.saveInfo.playerData.isDoubleMagicAcquired = true;
+ gSaveContext.magicFillTarget = MAGIC_DOUBLE_METER;
+ gSaveContext.save.saveInfo.playerData.magicLevel = 0;
+ }
+ break;
+
+ case GREAT_FAIRY_TYPE_COURAGE:
+ if (gSaveContext.save.saveInfo.playerData.doubleDefense != true) {
+ gSaveContext.save.saveInfo.playerData.doubleDefense = true;
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+ Interface_SetHudVisibility(9);
+ }
+
+ if ((this->timer < 50) && (GREAT_FAIRY_GET_TYPE(&this->actor) == GREAT_FAIRY_TYPE_COURAGE)) {
+ if (gSaveContext.save.saveInfo.inventory.defenseHearts < 20) {
+ gSaveContext.save.saveInfo.inventory.defenseHearts++;
+ }
+ }
+
+ if (this->timer == 50) {
+ gSaveContext.healthAccumulator = 0x140;
+ Magic_Add(play, MAGIC_FILL_TO_CAPACITY);
+ }
+
+ if (this->timer == 0) {
+ this->beam->trigger = true;
+ this->actionFunc = func_80A0B290;
+ }
+}
+
+void func_80A0B500(BgDyYoseizo* this, PlayState* play) {
+ Player* player = GET_PLAYER(play);
+
+ BgDyYoseizo_Bob(this, play);
+
+ if (SkelAnime_Update(&this->skelAnime)) {
+ Vec3f pos;
+
+ Animation_Change(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_GIVING_UPGRADE], 1.0f, 0.0f,
+ Animation_GetLastFrame(sAnimations[GREATFAIRY_ANIM_GIVING_UPGRADE]), ANIMMODE_LOOP, 0.0f);
+ this->actionFunc = func_80A0B35C;
+ pos.x = player->actor.world.pos.x;
+ pos.y = player->actor.world.pos.y + 200.0f;
+ pos.z = player->actor.world.pos.z;
+ this->beam = (EnDyExtra*)Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_DY_EXTRA, pos.x,
+ pos.y, pos.z, 0, 0, 0, GREAT_FAIRY_GET_TYPE(&this->actor));
+ this->timer = 120;
+ }
+}
+
+void func_80A0B5F0(BgDyYoseizo* this, PlayState* play) {
+ BgDyYoseizo_Bob(this, play);
+
+ if (SkelAnime_Update(&this->skelAnime)) {
+ Animation_Change(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_LAYING_DOWN], 1.0f, 0.0f,
+ Animation_GetLastFrame(sAnimations[GREATFAIRY_ANIM_LAYING_DOWN]), ANIMMODE_LOOP, 0.0f);
+ }
+
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103) &&
+ (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id == 5)) {
+ Animation_Change(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_START_GIVING_UPGRADE], 1.0f, 0.0f,
+ Animation_GetLastFrame(sAnimations[GREATFAIRY_ANIM_START_GIVING_UPGRADE]), ANIMMODE_ONCE,
+ -5.0f);
+ Actor_PlaySfx(&this->actor, NA_SE_VO_FR_SMILE_0);
+ this->mouthIndex = 1;
+ this->eyeIndex = 0;
+ this->actionFunc = func_80A0B500;
+ }
+
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103) &&
+ (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id == 6)) {
+ func_80A0AFDC(this);
+ }
+
+ BgDyYoseizo_UpdateEyes(this);
+}
+
+void func_80A0B75C(BgDyYoseizo* this, PlayState* play) {
+ func_80A0AD50(this);
+ SkelAnime_Update(&this->skelAnime);
+
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103) &&
+ (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id == 4)) {
+ this->actor.shape.rot.y = 0;
+ this->actionFunc = func_80A0B5F0;
+ Animation_Change(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_LAY_DOWN_TRANSITION], 1.0f, 2.0f,
+ Animation_GetLastFrame(sAnimations[GREATFAIRY_ANIM_LAY_DOWN_TRANSITION]), ANIMMODE_ONCE, 0.0f);
+ Actor_PlaySfx(&this->actor, NA_SE_VO_FR_SMILE_0);
+ this->unk2F8 = 0;
+ }
+}
+
+void func_80A0B834(BgDyYoseizo* this) {
+ this->actor.draw = BgDyYoseizo_Draw;
+ Animation_Change(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_SPIN_LAY_DOWN], 1.0f, 0.0f,
+ Animation_GetLastFrame(sAnimations[GREATFAIRY_ANIM_SPIN_LAY_DOWN]), ANIMMODE_ONCE, 0.0f);
+ Actor_PlaySfx(&this->actor, NA_SE_VO_FR_LAUGH_0);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_GREAT_FAIRY_APPEAR);
+ BgDyYoseizo_SpawnEffects(this, GREAT_FAIRY_EFFECT_TRAJECTORY_FAST_RADIANT, 30);
+}
+
+void BgDyYoseizo_TrainPlayer(BgDyYoseizo* this, PlayState* play) {
+ s16 csId;
+ s32 pad;
+ Player* player = GET_PLAYER(play);
+
+ SkelAnime_Update(&this->skelAnime);
+
+ csId = 0;
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103)) {
+ csId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id;
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103));
+ } else {
+ if (GREAT_FAIRY_ROTZ(&this->actor) != 0) {
+ this->actor.home.pos.x = player->actor.world.pos.x;
+ this->actor.home.pos.z = player->actor.world.pos.z;
+ GREAT_FAIRY_ROTZ(&this->actor) = 0;
+ } else {
+ player->actor.world.pos.x = this->actor.home.pos.x;
+ player->actor.world.pos.z = this->actor.home.pos.z;
+ }
+
+ if (this->unk302 & 1) {
+ if (this->timer == 0) {
+ if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
+ this->unk302 &= ~1;
+ } else {
+ CutsceneManager_Queue(this->actor.csId);
+ }
+ }
+ } else if (!(this->unk302 & 2) && (player->meleeWeaponState != 0)) {
+ if (player->meleeWeaponAnimation >= PLAYER_MWA_SPIN_ATTACK_1H) {
+ if (player->unk_B08 >= 0.85f) {
+ this->unk302 |= 1;
+ this->unk302 |= 2;
+ if (play->msgCtx.currentTextId == 0x59A) {
+ Message_CloseTextbox(play);
+ }
+ this->timer = 20;
+ return;
+ }
+ }
+
+ if (play->msgCtx.currentTextId != 0x59A) {
+ // "Hold B and then release"
+ Message_StartTextbox(play, 0x59A, &this->actor);
+ }
+ }
+ }
+
+ if (csId != this->csId) {
+ switch (csId) {
+ case 9:
+ Animation_PlayLoop(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_ARMS_FOLDED]);
+ break;
+
+ case 10:
+ Animation_PlayLoop(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_CLAPPING]);
+ break;
+
+ case 11:
+ Animation_PlayOnce(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_TEACH_SPIN_ATTACK]);
+ break;
+
+ default:
+ break;
+ }
+
+ this->csId = csId;
+ }
+}
+
+// Choose behaviour?
+void func_80A0BB08(BgDyYoseizo* this, PlayState* play) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103) &&
+ (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id == 2)) {
+ func_80A0B834(this);
+ this->actionFunc = func_80A0B75C;
+ }
+
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103) &&
+ (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id == 7)) {
+ this->actor.draw = BgDyYoseizo_Draw;
+ Animation_PlayLoop(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_LAYING_DOWN]);
+ this->actionFunc = func_80A0B184;
+ this->mouthIndex = 0;
+ this->actor.world.pos.y = this->actor.home.pos.y + 40.0f;
+ Actor_SetScale(&this->actor, 0.035f);
+ this->unk2F8 = 0;
+ }
+
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103) &&
+ (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id == 9)) {
+ Actor_SetScale(&this->actor, 0.01f);
+ Animation_PlayLoop(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_ARMS_FOLDED]);
+ this->csId = 9;
+ this->actionFunc = BgDyYoseizo_TrainPlayer;
+ this->actor.draw = BgDyYoseizo_Draw;
+ }
+}
+
+void BgDyYoseizo_Update(Actor* thisx, PlayState* play) {
+ BgDyYoseizo* this = THIS;
+
+ this->actionFunc(this, play);
+ Actor_MoveWithGravity(&this->actor);
+
+ DECR(this->timer);
+
+ BgDyYoseizo_UpdateEffects(this, play);
+}
+
+s32 BgDyYoseizo_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
+ BgDyYoseizo* this = THIS;
+
+ if (limbIndex == GREAT_FAIRY_LIMB_TORSO) {
+ rot->x += this->torsoRot.y;
+ }
+
+ if (limbIndex == GREAT_FAIRY_LIMB_HEAD) {
+ rot->x += this->headRot.y;
+ rot->z += this->headRot.z;
+ }
+
+ return false;
+}
+
+/* Colour and shape of eyebrows, hair colour. */
+typedef enum GreatFairyAppearance {
+ /* 0 */ GREAT_FAIRY_APPEARANCE_MAGIC, // Orange
+ /* 1 */ GREAT_FAIRY_APPEARANCE_WISDOM, // Green
+ /* 2 */ GREAT_FAIRY_APPEARANCE_POWER, // Pink
+ /* 3 */ GREAT_FAIRY_APPEARANCE_COURAGE, // Purple
+ /* 4 */ GREAT_FAIRY_APPEARANCE_KINDNESS // Yellow
+} GreatFairyAppearance;
+
+void BgDyYoseizo_Draw(Actor* thisx, PlayState* play) {
+ static TexturePtr sMouthTextures[] = {
+ gGreatFairyMouthClosedTex,
+ gGreatFairyMouthOpenTex,
+ };
+ BgDyYoseizo* this = THIS;
+ GreatFairyAppearance appearance = GREAT_FAIRY_APPEARANCE_MAGIC;
+
+ // The differing eyes and hair colours
+ switch (GREAT_FAIRY_GET_TYPE(&this->actor)) {
+ case GREAT_FAIRY_TYPE_POWER:
+ appearance = GREAT_FAIRY_APPEARANCE_POWER;
+ break;
+
+ case GREAT_FAIRY_TYPE_WISDOM:
+ appearance = GREAT_FAIRY_APPEARANCE_WISDOM;
+ break;
+
+ case GREAT_FAIRY_TYPE_COURAGE:
+ case GREAT_FAIRY_TYPE_KINDNESS:
+ appearance = GREAT_FAIRY_GET_TYPE(&this->actor);
+ break;
+
+ default: // GREAT_FAIRY_APPEARANCE_MAGIC
+ break;
+ }
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+
+ // Set eyes and hair colour, not actually animated.
+ AnimatedMat_DrawStepOpa(play, Lib_SegmentedToVirtual(gGreatFairyAppearenceTexAnim), appearance);
+
+ // Draw mouth
+ {
+ Gfx* gfx = POLY_OPA_DISP;
+ s16 index = this->mouthIndex;
+ TexturePtr mouthTex = Lib_SegmentedToVirtual(sMouthTextures[index]);
+
+ gSPSegment(&gfx[0], 0x09, mouthTex);
+ POLY_OPA_DISP = &gfx[1];
+ }
+
+ SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
+ BgDyYoseizo_OverrideLimbDraw, NULL, &this->actor);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+
+ BgDyYoseizo_DrawEffects(this, play);
+}
+
+/* Effects functions */
+
+void BgDyYoseizo_SpawnEffect(BgDyYoseizo* this, Vec3f* initPos, Vec3f* initVelocity, Vec3f* accel,
+ Color_RGB8* primColor, Color_RGB8* envColor, f32 scale, s16 life, s16 type) {
+ BgDyYoseizoEffect* effect = this->effects;
+ s16 i;
+
+ for (i = 0; i < BG_DY_YOSEIZO_EFFECT_COUNT; i++, effect++) {
+ if (!effect->alive) {
+ effect->alive = true;
+ effect->pos = *initPos;
+ effect->velocity = *initVelocity;
+ effect->accel = *accel;
+ effect->primColor = *primColor;
+ effect->alpha = 0;
+ effect->envColor = *envColor;
+ effect->scale = scale;
+ effect->timer = life;
+ effect->type = type;
+ effect->pitch = 0;
+ effect->yaw = TRUNCF_BINANG(Rand_CenteredFloat(30000.0f));
+ effect->roll = 0;
+ return;
+ }
+ }
+}
+
+void BgDyYoseizo_UpdateEffects(BgDyYoseizo* this, PlayState* play) {
+ BgDyYoseizoEffect* effect = this->effects;
+ Player* player = GET_PLAYER(play);
+ Vec3f sp94;
+ Vec3f sp88;
+ s32 pad[2];
+ f32 targetPitch;
+ f32 targetYaw;
+ f32 floatAngle;
+ s16 i = 0;
+
+ for (i = 0; i < BG_DY_YOSEIZO_EFFECT_COUNT; i++, effect++) {
+ if (effect->alive) {
+ effect->roll += 3000;
+
+ if (effect->type < GREAT_FAIRY_EFFECT_TRAJECTORY_CONVERGE_ON_PLAYER) {
+ 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;
+ } else {
+ Actor_PlaySfx(&this->actor, NA_SE_EV_HEALING - SFX_FLAG);
+
+ sp94 = player->actor.world.pos;
+ sp94.y = player->actor.world.pos.y - 150.0f;
+ sp94.z = player->actor.world.pos.z - 50.0f;
+
+ targetPitch = Math_Vec3f_Pitch(&effect->pos, &sp94);
+ targetYaw = Math_Vec3f_Yaw(&effect->pos, &sp94);
+
+ floatAngle = effect->pitch;
+ Math_ApproachF(&floatAngle, targetPitch, 0.9f, 5000.0f);
+ effect->pitch = floatAngle;
+
+ floatAngle = effect->yaw;
+ Math_ApproachF(&floatAngle, targetYaw, 0.9f, 5000.0f);
+ effect->yaw = floatAngle;
+
+ Matrix_Push();
+ Matrix_RotateYS(effect->yaw, MTXMODE_NEW);
+ Matrix_RotateXS(effect->pitch, MTXMODE_APPLY);
+
+ sp94.x = sp94.y = sp94.z = 3.0f;
+
+ Matrix_MultVec3f(&sp94, &sp88);
+ Matrix_Pop();
+ effect->pos.x += sp88.x;
+ effect->pos.y += sp88.y;
+ effect->pos.z += sp88.z;
+ }
+ }
+
+ // fade up, fade down, vanish and reset
+ if (effect->timer != 0) {
+ effect->timer--;
+ effect->alpha += 30;
+
+ if (effect->alpha > 255) {
+ effect->alpha = 255;
+ }
+ } else {
+ effect->alpha -= 30;
+
+ if (effect->alpha <= 0) {
+ effect->alpha = 0;
+ effect->alive = false;
+ }
+ }
+ }
+}
+
+void BgDyYoseizo_DrawEffects(BgDyYoseizo* this, PlayState* play) {
+ static f32 sStretchFactors[] = {
+ 1.0f, 1.1f, 1.15f, 1.1f, 1.0f, 0.9f, 0.85f, 0.9f,
+ };
+ GraphicsContext* gfxCtx = play->state.gfxCtx;
+ u8 setup = 0;
+ BgDyYoseizoEffect* effect = this->effects;
+ f32 stretchFactor = sStretchFactors[play->gameplayFrames % ARRAY_COUNT(sStretchFactors)];
+ s16 i;
+
+ OPEN_DISPS(gfxCtx);
+
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
+
+ for (i = 0; i < BG_DY_YOSEIZO_EFFECT_COUNT; i++, effect++) {
+ if (effect->alive == true) {
+ if (setup == 0) {
+ gSPDisplayList(POLY_XLU_DISP++, gGreatFairyParticleSetupDL);
+ gDPPipeSync(POLY_XLU_DISP++);
+ setup++;
+ }
+
+ gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, effect->primColor.r, effect->primColor.g, effect->primColor.b,
+ effect->alpha);
+ gDPSetEnvColor(POLY_XLU_DISP++, effect->envColor.r, effect->envColor.g, effect->envColor.b, 0);
+
+ Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW);
+ Matrix_ReplaceRotation(&play->billboardMtxF);
+
+ Matrix_Scale(effect->scale, effect->scale * stretchFactor, 1.0f, MTXMODE_APPLY);
+ Matrix_RotateZS(effect->roll, MTXMODE_APPLY);
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, gGreatFairyParticleDL);
+ }
+ }
+
+ CLOSE_DISPS(gfxCtx);
+}
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 bd06cdb38..4aaf67e77 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
@@ -2,15 +2,65 @@
#define Z_BG_DY_YOSEIZO_H
#include "global.h"
+#include "overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.h"
+#include "objects/object_dy_obj/object_dy_obj.h"
struct BgDyYoseizo;
typedef void (*BgDyYoseizoActionFunc)(struct BgDyYoseizo*, PlayState*);
+#define GREAT_FAIRY_GET_SWITCHFLAG(thisx) (((thisx)->params & 0xFE00) >> 9)
+#define GREAT_FAIRY_GET_TYPE(thisx) ((thisx)->params & 0xF)
+#define GREAT_FAIRY_ROTZ(thisx) ((thisx)->home.rot.z)
+
+typedef enum GreatFairyType {
+ /* 0 */ GREAT_FAIRY_TYPE_MAGIC,
+ /* 1 */ GREAT_FAIRY_TYPE_POWER,
+ /* 2 */ GREAT_FAIRY_TYPE_WISDOM,
+ /* 3 */ GREAT_FAIRY_TYPE_COURAGE,
+ /* 4 */ GREAT_FAIRY_TYPE_KINDNESS
+} GreatFairyType;
+
+#define BG_DY_YOSEIZO_EFFECT_COUNT 200
+
+typedef struct BgDyYoseizoEffect {
+ /* 0x00 */ u8 alive; // drawn if 1, respawn if 0
+ /* 0x04 */ Vec3f pos;
+ /* 0x10 */ Vec3f velocity;
+ /* 0x1C */ Vec3f accel;
+ /* 0x28 */ Color_RGB8 primColor;
+ /* 0x2B */ Color_RGB8 envColor;
+ /* 0x2E */ s16 alpha;
+ /* 0x30 */ f32 scale;
+ /* 0x34 */ s16 timer; // lifetime
+ /* 0x36 */ s16 type; // 0 is general radiance, else is directed towards Player
+ /* 0x38 */ s16 pitch;
+ /* 0x3A */ s16 yaw;
+ /* 0x3C */ s16 roll; // all three are f32 in OoT
+} BgDyYoseizoEffect; // size = 0x40
+
typedef struct BgDyYoseizo {
/* 0x0000 */ Actor actor;
/* 0x0144 */ BgDyYoseizoActionFunc actionFunc;
- /* 0x0148 */ char unk_148[0x33BC];
+ /* 0x0148 */ SkelAnime skelAnime;
+ /* 0x018C */ Vec3s jointTable[GREAT_FAIRY_LIMB_MAX];
+ /* 0x0234 */ Vec3s morphTable[GREAT_FAIRY_LIMB_MAX];
+ /* 0x02DC */ Vec3s headRot;
+ /* 0x02DC */ Vec3s torsoRot;
+ /* 0x02E8 */ EnDyExtra* beam;
+ /* 0x02EC */ f32 unk2EC; // unused
+ /* 0x02F0 */ f32 unk2F0;
+ /* 0x02F4 */ f32 unk2F4;
+ /* 0x02F8 */ union {
+ s16 unk2F8;
+ s16 csId; // used on BgDyYoseizo_TrainPlayer
+ };
+ /* 0x02FA */ s16 eyeIndex;
+ /* 0x02FC */ s16 mouthIndex;
+ /* 0x02FE */ s16 blinkTimer;
+ /* 0x0300 */ s16 timer;
+ /* 0x0302 */ u16 unk302;
+ /* 0x0304 */ BgDyYoseizoEffect effects[BG_DY_YOSEIZO_EFFECT_COUNT];
} BgDyYoseizo; // size = 0x3504
#endif // Z_BG_DY_YOSEIZO_H
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 6a4c44b65..db4a1105a 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
@@ -238,7 +238,7 @@ void BgF40Block_Init(Actor* thisx, PlayState* play) {
}
if (this->path != NULL) {
- if (Flags_GetSwitch(play, BGF40BLOCK_GET_SWITCHFLAG(&this->dyna.actor))) {
+ if (Flags_GetSwitch(play, BGF40BLOCK_GET_SWITCH_FLAG(&this->dyna.actor))) {
this->actionFunc = func_80BC4530;
this->dyna.actor.speed = 40.0f;
func_80BC3A2C(this, play);
@@ -261,7 +261,7 @@ void BgF40Block_Destroy(Actor* thisx, PlayState* play) {
void func_80BC41AC(BgF40Block* this, PlayState* play) {
if (func_80BC3D08(this, play, 1)) {
- if (!Flags_GetSwitch(play, BGF40BLOCK_GET_SWITCHFLAG(&this->dyna.actor))) {
+ if (!Flags_GetSwitch(play, BGF40BLOCK_GET_SWITCH_FLAG(&this->dyna.actor))) {
func_80BC4038(this);
this->actionFunc = func_80BC44F4;
}
@@ -314,14 +314,14 @@ void func_80BC4344(BgF40Block* this, PlayState* play) {
}
void func_80BC4380(BgF40Block* this, PlayState* play) {
- if (Flags_GetSwitch(play, BGF40BLOCK_GET_SWITCHFLAG(&this->dyna.actor))) {
+ if (Flags_GetSwitch(play, BGF40BLOCK_GET_SWITCH_FLAG(&this->dyna.actor))) {
this->actionFunc = func_80BC4344;
}
}
void func_80BC43CC(BgF40Block* this, PlayState* play) {
if (func_80BC3D08(this, play, 1)) {
- if (Flags_GetSwitch(play, BGF40BLOCK_GET_SWITCHFLAG(&this->dyna.actor))) {
+ if (Flags_GetSwitch(play, BGF40BLOCK_GET_SWITCH_FLAG(&this->dyna.actor))) {
func_80BC4038(this);
this->actionFunc = func_80BC4344;
}
@@ -356,7 +356,7 @@ void func_80BC44F4(BgF40Block* this, PlayState* play) {
}
void func_80BC4530(BgF40Block* this, PlayState* play) {
- if (!Flags_GetSwitch(play, BGF40BLOCK_GET_SWITCHFLAG(&this->dyna.actor))) {
+ if (!Flags_GetSwitch(play, BGF40BLOCK_GET_SWITCH_FLAG(&this->dyna.actor))) {
this->actionFunc = func_80BC44F4;
}
}
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 228fb6bfd..f74dc754a 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
@@ -8,7 +8,7 @@ struct BgF40Block;
typedef void (*BgF40BlockActionFunc)(struct BgF40Block*, PlayState*);
#define BGF40BLOCK_GET_PATH_INDEX(thisx) (((thisx)->params & 0x1FC) >> 2)
-#define BGF40BLOCK_GET_SWITCHFLAG(thisx) (((thisx)->params & 0xFE00) >> 9)
+#define BGF40BLOCK_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0xFE00) >> 9)
#define BGF40BLOCK_PATH_INDEX_NONE 0x3F
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 be3c9cb47..18063efce 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
@@ -1,7 +1,7 @@
/*
* File: z_bg_f40_switch.c
* Overlay: ovl_Bg_F40_Switch
- * Description: Stone Tower Switch
+ * Description: Stone Tower FloorSwitch
*/
#include "z_bg_f40_switch.h"
@@ -73,7 +73,7 @@ void BgF40Switch_CheckAll(BgF40Switch* this, PlayState* play) {
actorAsSwitch->isPressed = isPressed;
}
if (actorAsSwitch->isPressed) {
- switchFlag = BGF40SWITCH_GET_SWITCHFLAG(&actorAsSwitch->dyna.actor);
+ switchFlag = BGF40SWITCH_GET_SWITCH_FLAG(&actorAsSwitch->dyna.actor);
if ((switchFlag >= 0) && (switchFlag < 0x80)) {
pressedSwitchFlags[(switchFlag & ~0x1F) >> 5] |= 1 << (switchFlag & 0x1F);
if (!actorAsSwitch->wasPressed && (actorAsSwitch->actionFunc == BgF40Switch_IdleUnpressed) &&
@@ -87,7 +87,7 @@ void BgF40Switch_CheckAll(BgF40Switch* this, PlayState* play) {
for (actor = play->actorCtx.actorLists[ACTORCAT_SWITCH].first; actor != NULL; actor = actor->next) {
if ((actor->id == ACTOR_BG_F40_SWITCH) && (actor->room == this->dyna.actor.room) &&
(actor->update != NULL)) {
- switchFlag = BGF40SWITCH_GET_SWITCHFLAG(actor);
+ switchFlag = BGF40SWITCH_GET_SWITCH_FLAG(actor);
if ((switchFlag >= 0) && (switchFlag < 0x80) && Flags_GetSwitch(play, switchFlag) &&
!(pressedSwitchFlags[(switchFlag & ~0x1F) >> 5] & (1 << (switchFlag & 0x1F)))) {
Flags_UnsetSwitch(play, switchFlag);
@@ -113,7 +113,7 @@ void BgF40Switch_Init(Actor* thisx, PlayState* play) {
this->actionFunc = BgF40Switch_IdleUnpressed;
this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y + 1.0f;
DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
- DynaPolyActor_LoadMesh(play, &this->dyna, &object_f40_switch_Colheader_000118);
+ DynaPolyActor_LoadMesh(play, &this->dyna, &gStoneTowerFloorSwitchCol);
if (!sBgF40SwitchGlobalsInitialized) {
sBgF40SwitchLastUpdateFrame = play->gameplayFrames;
sBgF40SwitchGlobalsInitialized = true;
@@ -160,13 +160,13 @@ void BgF40Switch_WaitToPress(BgF40Switch* this, PlayState* play) {
if (!this->isInitiator || (this->dyna.actor.csId == CS_ID_NONE)) {
this->actionFunc = BgF40Switch_Press;
if (this->isInitiator) {
- Flags_SetSwitch(play, BGF40SWITCH_GET_SWITCHFLAG(&this->dyna.actor));
+ Flags_SetSwitch(play, BGF40SWITCH_GET_SWITCH_FLAG(&this->dyna.actor));
}
} else if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
this->actionFunc = BgF40Switch_Press;
if (this->isInitiator) {
- Flags_SetSwitch(play, BGF40SWITCH_GET_SWITCHFLAG(&this->dyna.actor));
+ Flags_SetSwitch(play, BGF40SWITCH_GET_SWITCH_FLAG(&this->dyna.actor));
}
} else {
CutsceneManager_Queue(this->dyna.actor.csId);
@@ -189,6 +189,6 @@ void BgF40Switch_Update(Actor* thisx, PlayState* play) {
void BgF40Switch_Draw(Actor* thisx, PlayState* play) {
BgF40Switch* this = THIS;
- Gfx_DrawDListOpa(play, object_f40_switch_DL_000438);
- Gfx_DrawDListOpa(play, object_f40_switch_DL_000390);
+ Gfx_DrawDListOpa(play, gStoneTowerFloorSwitchDL);
+ Gfx_DrawDListOpa(play, gStoneTowerFloorSwitchOutlineDL);
}
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 cfa8c5462..2d9fc589b 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
@@ -5,7 +5,7 @@
struct BgF40Switch;
-#define BGF40SWITCH_GET_SWITCHFLAG(thisx) (((thisx)->params & 0xFE00) >> 9)
+#define BGF40SWITCH_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0xFE00) >> 9)
typedef void (*BgF40SwitchActionFunc)(struct BgF40Switch*, PlayState*);
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 039d20f3c..9b210c1b8 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
@@ -51,7 +51,7 @@ void BgF40Swlift_Init(Actor* thisx, PlayState* play) {
}
sHeights[index] = this->dyna.actor.world.pos.y;
- sSwitchFlags[index] = BG_F40_SWLIFT_GET_SWITCHFLAG(thisx);
+ sSwitchFlags[index] = BG_F40_SWLIFT_GET_SWITCH_FLAG(thisx);
if (index != 0) {
Actor_Kill(&this->dyna.actor);
return;
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 e377b73e0..e2931698e 100644
--- a/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.h
+++ b/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.h
@@ -1,7 +1,7 @@
#ifndef Z_BG_F40_SWLIFT_H
#define Z_BG_F40_SWLIFT_H
-#define BG_F40_SWLIFT_GET_SWITCHFLAG(thisx) ((thisx)->params & 0xFF)
+#define BG_F40_SWLIFT_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0xFF)
#define BG_F40_SWLIFT_GET_INDEX(thisx) (((thisx)->params >> 8) & 0xFF)
#include "global.h"
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 fc209773b..a9e70027c 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
@@ -160,14 +160,15 @@ void BgHakaBombwall_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
DynaPolyActor_Init(&this->dyna, 0);
Collider_InitCylinder(play, &this->collider);
- if (Flags_GetSwitch(play, BGHAKABOMBWALL_GET_7F(thisx))) {
+ if (Flags_GetSwitch(play, BGHAKABOMBWALL_GET_SWITCH_FLAG(thisx))) {
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);
- Collider_UpdateCylinder(&this->dyna.actor, &this->collider);
- func_80BD6260(this);
+ return;
}
+
+ DynaPolyActor_LoadMesh(play, &this->dyna, &object_haka_obj_Colheader_000148);
+ Collider_SetCylinder(play, &this->collider, &this->dyna.actor, &sCylinderInit);
+ Collider_UpdateCylinder(&this->dyna.actor, &this->collider);
+ func_80BD6260(this);
}
void BgHakaBombwall_Destroy(Actor* thisx, PlayState* play) {
@@ -200,7 +201,7 @@ void BgHakaBombwall_PlayCutscene(BgHakaBombwall* this, PlayState* play) {
CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
func_80BD5E6C(this, play);
this->dyna.actor.draw = NULL;
- Flags_SetSwitch(play, BGHAKABOMBWALL_GET_7F(&this->dyna.actor));
+ Flags_SetSwitch(play, BGHAKABOMBWALL_GET_SWITCH_FLAG(&this->dyna.actor));
SoundSource_PlaySfxAtFixedWorldPos(play, &this->dyna.actor.world.pos, 0x3C, NA_SE_EV_WALL_BROKEN);
DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
BgHakaBombwall_SetupEndCutscene(this);
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 9e5bd1c43..cb2ce7d02 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
@@ -3,7 +3,7 @@
#include "global.h"
-#define BGHAKABOMBWALL_GET_7F(thisx) ((thisx)->params & 0x7F)
+#define BGHAKABOMBWALL_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
struct BgHakaBombwall;
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 a1d1ebd48..3f043bcc2 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
@@ -316,7 +316,7 @@ void BgHakuginBombwall_Init(Actor* thisx, PlayState* play) {
DynaPolyActor_Init(&this->dyna, 0);
Collider_InitCylinder(play, &this->collider);
- if (Flags_GetSwitch(play, BGHAKUGIN_BOMBWALL_SWITCHFLAG(&this->dyna.actor))) {
+ if (Flags_GetSwitch(play, BGHAKUGIN_BOMBWALL_SWITCH_FLAG(&this->dyna.actor))) {
Actor_Kill(&this->dyna.actor);
return;
}
@@ -400,7 +400,7 @@ void func_80ABCD98(BgHakuginBombwall* this, PlayState* play) {
ptr->unk_24(this, play);
this->dyna.actor.draw = NULL;
this->unk_1AC = 20;
- Flags_SetSwitch(play, BGHAKUGIN_BOMBWALL_SWITCHFLAG(&this->dyna.actor));
+ Flags_SetSwitch(play, BGHAKUGIN_BOMBWALL_SWITCH_FLAG(&this->dyna.actor));
DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->actionFunc = func_80ABCE60;
} else {
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 24b04139e..78b7bf9a8 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
@@ -9,7 +9,7 @@ typedef void (*BgHakuginBombwallActionFunc)(struct BgHakuginBombwall*, PlayState
typedef s32 (*BgHakuginBombwallUnkFunc)(struct BgHakuginBombwall*, PlayState*);
typedef void (*BgHakuginBombwallUnkFunc2)(struct BgHakuginBombwall*, PlayState*);
-#define BGHAKUGIN_BOMBWALL_SWITCHFLAG(thisx) ((thisx)->params & 0x7F)
+#define BGHAKUGIN_BOMBWALL_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
#define BGHAKUGIN_BOMBWALL_100(thisx) (((thisx)->params >> 8) & 1)
typedef struct BgHakuginBombwall {
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 b4c653b99..35e03c438 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
@@ -42,8 +42,8 @@ void BgHakuginElvpole_Init(Actor* thisx, PlayState* play) {
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader);
this->unk_15C = 0;
this->unk_160 = false;
- if ((BGHAKUGINELVPOLE_GET_SWITCHFLAG(&this->dyna.actor) != 0x7F) &&
- Flags_GetSwitch(play, BGHAKUGINELVPOLE_GET_SWITCHFLAG(&this->dyna.actor))) {
+ if ((BGHAKUGINELVPOLE_GET_SWITCH_FLAG(&this->dyna.actor) != 0x7F) &&
+ Flags_GetSwitch(play, BGHAKUGINELVPOLE_GET_SWITCH_FLAG(&this->dyna.actor))) {
this->unk_15E = 0x64;
} else {
this->unk_15E = -1;
@@ -81,12 +81,12 @@ void func_80ABD92C(BgHakuginElvpole* this, PlayState* play) {
sp28 = true;
} else {
this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y - 320.0f;
- Flags_UnsetSwitch(play, BGHAKUGINELVPOLE_GET_SWITCHFLAG(&this->dyna.actor));
+ Flags_UnsetSwitch(play, BGHAKUGINELVPOLE_GET_SWITCH_FLAG(&this->dyna.actor));
this->unk_15E = -1;
Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_STONEDOOR_STOP);
}
- } else if ((BGHAKUGINELVPOLE_GET_SWITCHFLAG(&this->dyna.actor) != 0x7F) &&
- Flags_GetSwitch(play, BGHAKUGINELVPOLE_GET_SWITCHFLAG(&this->dyna.actor))) {
+ } else if ((BGHAKUGINELVPOLE_GET_SWITCH_FLAG(&this->dyna.actor) != 0x7F) &&
+ Flags_GetSwitch(play, BGHAKUGINELVPOLE_GET_SWITCH_FLAG(&this->dyna.actor))) {
this->unk_15E = 0x64;
this->unk_160 = true;
}
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 ace71e7b3..575a0d8cb 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
@@ -5,7 +5,7 @@
struct BgHakuginElvpole;
-#define BGHAKUGINELVPOLE_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F)
+#define BGHAKUGINELVPOLE_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
typedef void (*BgHakuginElvpoleActionFunc)(struct BgHakuginElvpole*, PlayState*);
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 2a79bfd08..dc20a1fd3 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
@@ -155,9 +155,9 @@ void func_80A9AFB4(BgHakuginPost* this, PlayState* play, BgHakuginPostUnkStruct*
unkStruct->unk_0000[i].unk_00 = BGHAKUGINPOST_GET_7(&this->dyna.actor);
Math_Vec3f_Copy(&unkStruct->unk_0000[i].unk_08, &this->dyna.actor.world.pos);
Math_Vec3f_Copy(&unkStruct->unk_0000[i].unk_14, &this->dyna.actor.world.pos);
- unkStruct->unk_0000[i].unk_2E = BGHAKUGINPOST_GET_7F00(&this->dyna.actor);
+ unkStruct->unk_0000[i].switchFlag = BGHAKUGINPOST_GET_SWITCH_FLAG(&this->dyna.actor);
if (D_80A9D880[unkStruct->unk_0000[i].unk_00].unk_04) {
- if (Flags_GetSwitch(play, unkStruct->unk_0000[i].unk_2E)) {
+ if (Flags_GetSwitch(play, unkStruct->unk_0000[i].switchFlag)) {
unkStruct->unk_0000[i].unk_34 = 5;
} else {
unkStruct->unk_0000[i].unk_34 = 1;
@@ -184,7 +184,7 @@ void func_80A9B160(BgHakuginPostUnkStruct* unkStruct, PlayState* play) {
unkStruct->unk_0000[i].unk_24 = 0.0f;
unkStruct->unk_0000[i].unk_34 = 1;
if (D_80A9D880[unkStruct->unk_0000[i].unk_00].unk_04 != 0) {
- Flags_UnsetSwitch(play, unkStruct->unk_0000[i].unk_2E);
+ Flags_UnsetSwitch(play, unkStruct->unk_0000[i].switchFlag);
}
}
}
@@ -240,25 +240,25 @@ void func_80A9B384(Vec3f* arg0) {
void func_80A9B3BC(BgHakuginPost* this, PlayState* play) {
s32 pad;
- s32 sp28 = BGHAKUGINPOST_GET_7F00(&this->dyna.actor);
- s32 sp24 = BGHAKUGINPOST_GET_7F00(&this->dyna.actor) + 1;
+ s32 switchFlag1 = BGHAKUGINPOST_GET_SWITCH_FLAG(&this->dyna.actor);
+ s32 switchFlag2 = BGHAKUGINPOST_GET_SWITCH_FLAG(&this->dyna.actor) + 1;
s32 sp20;
s32 sp1C;
- if (Flags_GetSwitch(play, sp28)) {
+ if (Flags_GetSwitch(play, switchFlag1)) {
sp20 = true;
} else {
sp20 = false;
}
- if (Flags_GetSwitch(play, sp24)) {
+ if (Flags_GetSwitch(play, switchFlag2)) {
sp1C = true;
} else {
sp1C = false;
}
if (!(sp20 | sp1C)) {
- Flags_SetSwitch(play, sp28);
+ Flags_SetSwitch(play, switchFlag1);
this->unk_170 = true;
} else {
this->unk_170 = sp20;
@@ -269,27 +269,27 @@ void func_80A9B3BC(BgHakuginPost* this, PlayState* play) {
void func_80A9B46C(BgHakuginPost* this, PlayState* play) {
s32 pad;
- s32 sp30 = BGHAKUGINPOST_GET_7F00(&this->dyna.actor);
- s32 sp2C = BGHAKUGINPOST_GET_7F00(&this->dyna.actor) + 1;
+ s32 switchFlag1 = BGHAKUGINPOST_GET_SWITCH_FLAG(&this->dyna.actor);
+ s32 switchFlag2 = BGHAKUGINPOST_GET_SWITCH_FLAG(&this->dyna.actor) + 1;
s32 sp28;
s32 sp24;
- if (Flags_GetSwitch(play, sp30)) {
+ if (Flags_GetSwitch(play, switchFlag1)) {
sp28 = true;
} else {
sp28 = false;
}
- if (Flags_GetSwitch(play, sp2C)) {
+ if (Flags_GetSwitch(play, switchFlag2)) {
sp24 = true;
} else {
sp24 = false;
}
if (!this->unk_170 && (sp28 == 1)) {
- Flags_UnsetSwitch(play, sp2C);
+ Flags_UnsetSwitch(play, switchFlag2);
} else if (!this->unk_174 && (sp24 == 1)) {
- Flags_UnsetSwitch(play, sp30);
+ Flags_UnsetSwitch(play, switchFlag1);
}
this->unk_170 = sp28;
@@ -668,7 +668,7 @@ void func_80A9C854(BgHakuginPost* this, PlayState* play) {
for (i = 0; i < D_80A9E028.count; i++) {
ColliderCylinder* collider = D_80A9E028.unk_0000[i].collider;
- if ((collider != NULL) && Flags_GetSwitch(play, D_80A9E028.unk_0000[i].unk_2E)) {
+ if ((collider != NULL) && Flags_GetSwitch(play, D_80A9E028.unk_0000[i].switchFlag)) {
sp28 = false;
break;
}
@@ -681,9 +681,9 @@ void func_80A9C854(BgHakuginPost* this, PlayState* play) {
}
if (sp38) {
- Flags_SetSwitch(play, this->dyna.actor.home.rot.x & 0x7F);
+ Flags_SetSwitch(play, BGHAKUGINPOST_GET_SWITCH_FLAG_2(&this->dyna.actor));
} else {
- Flags_UnsetSwitch(play, this->dyna.actor.home.rot.x & 0x7F);
+ Flags_UnsetSwitch(play, BGHAKUGINPOST_GET_SWITCH_FLAG_2(&this->dyna.actor));
}
}
@@ -841,7 +841,7 @@ void func_80A9CE1C(BgHakuginPost* this, PlayState* play) {
D_80A9E028.unk_0000[i].unk_34 = 2;
Player_PlaySfx(player, NA_SE_IT_HAMMER_HIT);
Audio_PlaySfx_2(NA_SE_EV_SLIDE_DOOR_OPEN);
- Flags_SetSwitch(play, D_80A9E028.unk_0000[i].unk_2E);
+ Flags_SetSwitch(play, D_80A9E028.unk_0000[i].switchFlag);
this->unk_178 = 20;
func_80A9D2C4(this, func_80A9CE00, D_80A9E028.unk_0000[i].unk_14.y + 50.0f, D_80A9E028.unk_0000[i].csId,
D_80A9E028.unk_0000[i].additionalCsId);
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 4797a684a..897228bb9 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
@@ -9,7 +9,8 @@ typedef void (*BgHakuginPostActionFunc)(struct BgHakuginPost*, PlayState*);
typedef void (*BgHakuginPostFunc)(struct BgHakuginPost*);
#define BGHAKUGINPOST_GET_7(thisx) ((thisx)->params & 7)
-#define BGHAKUGINPOST_GET_7F00(thisx) (((thisx)->params >> 8) & 0x7F)
+#define BGHAKUGINPOST_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0x7F)
+#define BGHAKUGINPOST_GET_SWITCH_FLAG_2(thisx) (((thisx)->home.rot.x) & 0x7F)
typedef struct {
/* 0x00 */ s32 unk_00;
@@ -21,7 +22,7 @@ typedef struct {
/* 0x28 */ s16 unk_28;
/* 0x2A */ s16 csId;
/* 0x2C */ s16 additionalCsId;
- /* 0x2E */ u8 unk_2E;
+ /* 0x2E */ u8 switchFlag;
/* 0x2F */ u8 unk_2F;
/* 0x30 */ s8 unk_30;
/* 0x34 */ s32 unk_34;
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 583384c7d..4ecce9c3a 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
@@ -121,7 +121,7 @@ void BgHakuginSwitch_Init(Actor* thisx, PlayState* play) {
s32 pad2;
s32 sp28;
- if (Flags_GetSwitch(play, BGHAKUGINSWITCH_GET_SWITCHFLAG(&this->dyna.actor))) {
+ if (Flags_GetSwitch(play, BGHAKUGINSWITCH_GET_SWITCH_FLAG(&this->dyna.actor))) {
sp30 = true;
} else {
sp30 = false;
@@ -228,7 +228,7 @@ void func_80B15B74(BgHakuginSwitch* this, PlayState* play) {
s32 sp24;
s32 sp20;
- if (Flags_GetSwitch(play, BGHAKUGINSWITCH_GET_SWITCHFLAG(&this->dyna.actor))) {
+ if (Flags_GetSwitch(play, BGHAKUGINSWITCH_GET_SWITCH_FLAG(&this->dyna.actor))) {
sp2C = 1;
} else {
sp2C = 0;
@@ -274,9 +274,9 @@ void func_80B15B74(BgHakuginSwitch* this, PlayState* play) {
if (sp24) {
if (sp20 == 1) {
- Flags_SetSwitch(play, BGHAKUGINSWITCH_GET_SWITCHFLAG(&this->dyna.actor));
+ Flags_SetSwitch(play, BGHAKUGINSWITCH_GET_SWITCH_FLAG(&this->dyna.actor));
} else if (sp20 == 0) {
- Flags_UnsetSwitch(play, BGHAKUGINSWITCH_GET_SWITCHFLAG(&this->dyna.actor));
+ Flags_UnsetSwitch(play, BGHAKUGINSWITCH_GET_SWITCH_FLAG(&this->dyna.actor));
}
D_80B16AF0 = play->gameplayFrames;
@@ -329,7 +329,7 @@ void func_80B15F88(BgHakuginSwitch* this, PlayState* play) {
BgHakuginSwitchStruct* sp18 = &D_80B1688C[BGHAKUGINSWITCH_GET_7(&this->dyna.actor)];
s32 phi_v1;
- if (Flags_GetSwitch(play, BGHAKUGINSWITCH_GET_SWITCHFLAG(&this->dyna.actor))) {
+ if (Flags_GetSwitch(play, BGHAKUGINSWITCH_GET_SWITCH_FLAG(&this->dyna.actor))) {
phi_a0 = true;
} else {
phi_a0 = false;
@@ -384,9 +384,9 @@ void func_80B161A0(BgHakuginSwitch* this, PlayState* play) {
if (CutsceneManager_IsNext(this->curCsId)) {
CutsceneManager_StartWithPlayerCs(this->curCsId, &this->dyna.actor);
if (this->unk_1BE != 0) {
- Flags_SetSwitch(play, BGHAKUGINSWITCH_GET_SWITCHFLAG(&this->dyna.actor));
+ Flags_SetSwitch(play, BGHAKUGINSWITCH_GET_SWITCH_FLAG(&this->dyna.actor));
} else {
- Flags_UnsetSwitch(play, BGHAKUGINSWITCH_GET_SWITCHFLAG(&this->dyna.actor));
+ Flags_UnsetSwitch(play, BGHAKUGINSWITCH_GET_SWITCH_FLAG(&this->dyna.actor));
}
this->unk_1BF = 50;
this->unk_1B4(this, play);
@@ -421,7 +421,7 @@ void func_80B162AC(BgHakuginSwitch* this, PlayState* play) {
}
if (sp30 == 1) {
- if (Flags_GetSwitch(play, BGHAKUGINSWITCH_GET_SWITCHFLAG(&this->dyna.actor))) {
+ if (Flags_GetSwitch(play, BGHAKUGINSWITCH_GET_SWITCH_FLAG(&this->dyna.actor))) {
sp24 = true;
}
}
@@ -465,7 +465,7 @@ void func_80B16494(BgHakuginSwitch* this, PlayState* play) {
}
void func_80B16520(BgHakuginSwitch* this, PlayState* play) {
- if (!Flags_GetSwitch(play, BGHAKUGINSWITCH_GET_SWITCHFLAG(&this->dyna.actor))) {
+ if (!Flags_GetSwitch(play, BGHAKUGINSWITCH_GET_SWITCH_FLAG(&this->dyna.actor))) {
if (BGHAKUGINSWITCH_GET_7(&this->dyna.actor) == BGHAKUGINSWITCH_GET_7_1) {
func_80B16180(this, func_80B165A0, 0, this->additionalCsId);
} else {
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 caf3c2f65..f8a27429d 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
@@ -10,7 +10,7 @@ typedef void (*BgHakuginSwitchUnkFunc)(struct BgHakuginSwitch*, PlayState*);
#define BGHAKUGINSWITCH_GET_7(thisx) ((thisx)->params & 7)
#define BGHAKUGINSWITCH_GET_10(thisx) (((thisx)->params >> 4) & 1)
-#define BGHAKUGINSWITCH_GET_SWITCHFLAG(thisx) (((thisx)->params >> 8) & 0x7F)
+#define BGHAKUGINSWITCH_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0x7F)
#define BGHAKUGINSWITCH_GET_7_1 1
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 edcda4b37..e06b788c4 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
@@ -242,7 +242,7 @@ void BgIkanaBombwall_Init(Actor* thisx, PlayState* play) {
DynaPolyActor_Init(&this->dyna, 0);
Collider_InitCylinder(play, &this->collider);
- if (Flags_GetSwitch(play, BGIKANABOMBWALL_GET_SWITCHFLAG(&this->dyna.actor))) {
+ if (Flags_GetSwitch(play, BGIKANABOMBWALL_GET_SWITCH_FLAG(&this->dyna.actor))) {
Actor_Kill(&this->dyna.actor);
return;
}
@@ -333,7 +333,7 @@ void func_80BD503C(BgIkanaBombwall* this, PlayState* play) {
}
this->dyna.actor.draw = NULL;
SoundSource_PlaySfxAtFixedWorldPos(play, &this->dyna.actor.world.pos, 60, NA_SE_EV_WALL_BROKEN);
- Flags_SetSwitch(play, BGIKANABOMBWALL_GET_SWITCHFLAG(&this->dyna.actor));
+ Flags_SetSwitch(play, BGIKANABOMBWALL_GET_SWITCH_FLAG(&this->dyna.actor));
if (!BGIKANABOMBWALL_GET_100(&this->dyna.actor)) {
DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
}
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 e9ff850ad..393e1d9e6 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
@@ -7,7 +7,7 @@ struct BgIkanaBombwall;
typedef void (*BgIkanaBombwallActionFunc)(struct BgIkanaBombwall*, PlayState*);
-#define BGIKANABOMBWALL_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F)
+#define BGIKANABOMBWALL_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
#define BGIKANABOMBWALL_GET_100(thisx) (((thisx)->params >> 8) & 1)
typedef struct BgIkanaBombwall {
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 4646b8d45..a0062a62b 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
@@ -153,7 +153,7 @@ void BgIkanaDharma_WaitForHit(BgIkanaDharma* this, PlayState* play) {
if (wasHit && (sFirstHitBgIkanaDharma == NULL)) {
sFirstHitBgIkanaDharma = this2;
- Flags_SetSwitch(play, BGIKANADHARMA_GET_SWITCHFLAG(&this->dyna.actor));
+ Flags_SetSwitch(play, BGIKANADHARMA_GET_SWITCH_FLAG(&this->dyna.actor));
tempAngle1 = BINANG_ADD(this->dyna.actor.yawTowardsPlayer, 0x8000);
tempAngle2 = (BINANG_SUB(player->actor.shape.rot.y, tempAngle1) >> 1);
this->dyna.actor.world.rot.y = tempAngle1 + tempAngle2 + 0xF000;
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 ac1bcadf0..a8c08e364 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
@@ -3,7 +3,7 @@
#include "global.h"
-#define BGIKANADHARMA_GET_SWITCHFLAG(thisx) (((thisx)->params >> 8) & 0x7F)
+#define BGIKANADHARMA_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0x7F)
#define BGIKANADHARMA_IS_CHILD(thisx) (((thisx)->params >> 5) & 1)
#define BGIKANADHARMA_NUM_SEGMENTS(thisx) ((thisx)->params & 0xF)
#define BGIKANADHARMA_PARAMS(switchFlag, isChild, numSegments) (((switchFlag & 0x7F) << 8) | ((isChild & 1) << 5) | (numSegments & 0xF))
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 23e707d7b..8850d8852 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
@@ -169,7 +169,7 @@ void func_80B80440(BgIkanaRotaryroom* this, PlayState* play) {
Matrix_Push();
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);
- if (Flags_GetSwitch(play, BGIKANAROTARYROOM_GET_7F00(&this->dyna.actor))) {
+ if (Flags_GetSwitch(play, BGIKANAROTARYROOM_GET_SWITCH_FLAG_2(&this->dyna.actor))) {
Matrix_Translate(D_80B82178.x, D_80B82178.y, D_80B82178.z, MTXMODE_APPLY);
} else {
Matrix_Translate(D_80B8216C.x, D_80B8216C.y, D_80B8216C.z, MTXMODE_APPLY);
@@ -195,7 +195,7 @@ void func_80B80550(BgIkanaRotaryroom* this, PlayState* play) {
MtxF sp68;
Vec3s sp60;
- if (Flags_GetSwitch(play, BGIKANAROTARYROOM_GET_FE(&this->dyna.actor))) {
+ if (Flags_GetSwitch(play, BGIKANAROTARYROOM_GET_SWITCH_FLAG_1(&this->dyna.actor))) {
spC4 = 1;
} else {
spC4 = 0;
@@ -494,10 +494,10 @@ s32 func_80B80F08(BgIkanaRotaryroom* this, PlayState* play) {
Matrix_Pop();
if (Math3D_Vec3fDistSq(&sp34, &sp28) < 3.0f) {
- if (!Flags_GetSwitch(play, BGIKANAROTARYROOM_GET_7F00(&this->dyna.actor))) {
+ if (!Flags_GetSwitch(play, BGIKANAROTARYROOM_GET_SWITCH_FLAG_2(&this->dyna.actor))) {
sp24 = true;
}
- Flags_SetSwitch(play, BGIKANAROTARYROOM_GET_7F00(&this->dyna.actor));
+ Flags_SetSwitch(play, BGIKANAROTARYROOM_GET_SWITCH_FLAG_2(&this->dyna.actor));
}
}
return sp24;
@@ -708,7 +708,7 @@ void BgIkanaRotaryroom_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
- if (Flags_GetSwitch(play, BGIKANAROTARYROOM_GET_FE(&this->dyna.actor))) {
+ if (Flags_GetSwitch(play, BGIKANAROTARYROOM_GET_SWITCH_FLAG_1(&this->dyna.actor))) {
this->dyna.actor.shape.rot.x = -0x8000;
} else {
this->dyna.actor.shape.rot.x = 0;
@@ -753,15 +753,15 @@ void func_80B818B4(BgIkanaRotaryroom* this) {
void func_80B818C8(Actor* thisx, PlayState* play) {
BgIkanaRotaryroom* this = THIS;
- s32 sp20;
+ s32 switchFlag;
if (this->collider.base.acFlags & AC_HIT) {
this->collider.base.acFlags &= ~AC_HIT;
- sp20 = BGIKANAROTARYROOM_GET_FE(&this->dyna.actor);
- if (Flags_GetSwitch(play, sp20)) {
- Flags_UnsetSwitch(play, sp20);
+ switchFlag = BGIKANAROTARYROOM_GET_SWITCH_FLAG_1(&this->dyna.actor);
+ if (Flags_GetSwitch(play, switchFlag)) {
+ Flags_UnsetSwitch(play, switchFlag);
} else {
- Flags_SetSwitch(play, sp20);
+ Flags_SetSwitch(play, switchFlag);
}
func_80B81978(this);
} else {
@@ -866,7 +866,7 @@ void func_80B81BA0(Actor* thisx, PlayState* play) {
Quake_SetDuration(quakeIndex, 15);
}
- if (Flags_GetSwitch(play, BGIKANAROTARYROOM_GET_FE(&this->dyna.actor))) {
+ if (Flags_GetSwitch(play, BGIKANAROTARYROOM_GET_SWITCH_FLAG_1(&this->dyna.actor))) {
if (this->dyna.actor.shape.rot.x < 0) {
this->dyna.actor.shape.rot.x = -0x8000;
sp30 = 1;
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 4184220e0..e2737e0c2 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
@@ -10,8 +10,8 @@ typedef void (*BgIkanaRotaryroomUnkFunc)(Actor*, PlayState*);
typedef void (*BgIkanaRotaryroomUnkFunc2)(struct BgIkanaRotaryroom*, PlayState*);
#define BGIKANAROTARYROOM_GET_1(thisx) ((thisx)->params & 1)
-#define BGIKANAROTARYROOM_GET_FE(thisx) (((thisx)->params >> 1) & 0x7F)
-#define BGIKANAROTARYROOM_GET_7F00(thisx) (((thisx)->params >> 8) & 0x7F)
+#define BGIKANAROTARYROOM_GET_SWITCH_FLAG_1(thisx) (((thisx)->params >> 1) & 0x7F)
+#define BGIKANAROTARYROOM_GET_SWITCH_FLAG_2(thisx) (((thisx)->params >> 8) & 0x7F)
typedef struct {
/* 0x00 */ Actor* unk_00;
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 4a0abb472..6891956db 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
@@ -56,10 +56,10 @@ static InitChainEntry sInitChain[] = {
};
s32 BgIkanaShutter_AllSwitchesPressed(BgIkanaShutter* this, PlayState* play) {
- return Flags_GetSwitch(play, this->dyna.actor.params & 0x7F) &&
- Flags_GetSwitch(play, (this->dyna.actor.params & 0x7F) + 1) &&
- Flags_GetSwitch(play, (this->dyna.actor.params & 0x7F) + 2) &&
- Flags_GetSwitch(play, (this->dyna.actor.params & 0x7F) + 3);
+ return Flags_GetSwitch(play, BGIKANASHUTTER_GET_SWITCH_FLAG(&this->dyna.actor)) &&
+ Flags_GetSwitch(play, BGIKANASHUTTER_GET_SWITCH_FLAG(&this->dyna.actor) + 1) &&
+ Flags_GetSwitch(play, BGIKANASHUTTER_GET_SWITCH_FLAG(&this->dyna.actor) + 2) &&
+ Flags_GetSwitch(play, BGIKANASHUTTER_GET_SWITCH_FLAG(&this->dyna.actor) + 3);
}
void BgIkanaShutter_Init(Actor* thisx, PlayState* play) {
@@ -68,7 +68,7 @@ void BgIkanaShutter_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
DynaPolyActor_Init(&this->dyna, 0);
DynaPolyActor_LoadMesh(play, &this->dyna, &object_ikana_obj_Colheader_000F28);
- if (!((this->dyna.actor.params >> 8) & 1)) {
+ if (!BGIKANASHUTTER_GET_100(&this->dyna.actor)) {
if (BgIkanaShutter_AllSwitchesPressed(this, play)) {
func_80BD599C(this);
return;
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 094334600..c1ad76b7d 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
@@ -7,6 +7,9 @@ struct BgIkanaShutter;
typedef void (*BgIkanaShutterActionFunc)(struct BgIkanaShutter*, PlayState*);
+#define BGIKANASHUTTER_GET_SWITCH_FLAG(thisx) (((thisx)->params) & 0x7F)
+#define BGIKANASHUTTER_GET_100(thisx) (((thisx)->params >> 8) & 1)
+
typedef struct BgIkanaShutter {
/* 0x000 */ DynaPolyActor dyna;
/* 0x15C */ BgIkanaShutterActionFunc actionFunc;
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 18d670830..f7c0e5710 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
@@ -159,7 +159,7 @@ void func_80C0ABA8(BgIkninSusceil* this, PlayState* play) {
this->dyna.actor.world.pos.y += this->dyna.actor.velocity.y;
if (this->dyna.actor.world.pos.y <= this->dyna.actor.home.pos.y) {
BgIkninSusceil_RequestQuakeAndRumble(this, play, 4, 14, 1);
- Flags_UnsetSwitch(play, SUSCEIL_GET_SWITCHFLAG(&this->dyna.actor));
+ Flags_UnsetSwitch(play, SUSCEIL_GET_SWITCH_FLAG(&this->dyna.actor));
Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BIGWALL_BOUND);
func_80C0AC74(this);
} else {
@@ -173,7 +173,7 @@ void func_80C0AC74(BgIkninSusceil* this) {
}
void func_80C0AC90(BgIkninSusceil* this, PlayState* play) {
- if (Flags_GetSwitch(play, SUSCEIL_GET_SWITCHFLAG(&this->dyna.actor))) {
+ if (Flags_GetSwitch(play, SUSCEIL_GET_SWITCH_FLAG(&this->dyna.actor))) {
func_80C0ACD4(this);
}
}
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 2fa153ac0..faf29a022 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
@@ -3,7 +3,7 @@
#include "global.h"
-#define SUSCEIL_GET_SWITCHFLAG(thisx) (((thisx)->params) & 0x7F)
+#define SUSCEIL_GET_SWITCH_FLAG(thisx) (((thisx)->params) & 0x7F)
struct BgIkninSusceil;
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 07968e801..ecf34c2ae 100644
--- a/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.c
+++ b/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.c
@@ -64,7 +64,7 @@ void BgIkninside_Init(Actor* thisx, PlayState* play) {
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader);
Collider_InitAndSetCylinder(play, &this->collider, &this->dyna.actor, &sCylinderInit);
Collider_UpdateCylinder(&this->dyna.actor, &this->collider);
- if (Flags_GetSwitch(play, DMIKNINSIDE_GET_SWITCH(thisx))) {
+ if (Flags_GetSwitch(play, DMIKNINSIDE_GET_SWITCH_FLAG(thisx))) {
Actor_Kill(&this->dyna.actor);
}
}
@@ -118,7 +118,7 @@ void func_80C072D0(BgIkninside* this, PlayState* play) {
EffectSsHahen_Spawn(play, &pos, &velocity, &D_80C076D4, 0, 30, OBJECT_IKNINSIDE_OBJ, 25,
D_80C076A0[i & 1]);
}
- Flags_SetSwitch(play, DMIKNINSIDE_GET_SWITCH(&this->dyna.actor));
+ Flags_SetSwitch(play, DMIKNINSIDE_GET_SWITCH_FLAG(&this->dyna.actor));
this->actionFunc = func_80C07230;
this->dyna.actor.draw = NULL;
DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
diff --git a/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.h b/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.h
index 84a66a88d..6cddba2f0 100644
--- a/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.h
+++ b/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.h
@@ -5,7 +5,7 @@
struct BgIkninside;
-#define DMIKNINSIDE_GET_SWITCH(thisx) (((thisx)->params & 0xFE00) >> 9)
+#define DMIKNINSIDE_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0xFE00) >> 9)
typedef void (*BgIkninsideActionFunc)(struct BgIkninside*, PlayState*);
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 05d4a27bf..ebdaeff51 100644
--- a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c
+++ b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c
@@ -386,7 +386,7 @@ void BgIngate_Draw(Actor* thisx, PlayState* play) {
Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_OPA_DISP++, gSichitaiBoat);
+ gSPDisplayList(POLY_OPA_DISP++, gSichitaiBoatDL);
CLOSE_DISPS(play->state.gfxCtx);
}
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 ff0227f70..6cc7f7684 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
@@ -40,7 +40,7 @@ void BgKeikokuSaku_Init(Actor* thisx, PlayState* play) {
DynaPolyActor_Init(&this->dyna, 0);
CollisionHeader_GetVirtual(&object_keikoku_obj_Colheader_002300, &colHeader);
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader);
- this->switchFlag = BGKEIKOKUSAKU_GET_SWITCHFLAG(thisx);
+ this->switchFlag = BGKEIKOKUSAKU_GET_SWITCH_FLAG(thisx);
if (Flags_GetSwitch(play, this->switchFlag)) {
this->dyna.actor.world.pos.z = 2659.0f;
} else {
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 6a3bad9c8..6db094693 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
@@ -3,7 +3,7 @@
#include "global.h"
-#define BGKEIKOKUSAKU_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F)
+#define BGKEIKOKUSAKU_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
struct BgKeikokuSaku;
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 a868b355c..5a8192bc4 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
@@ -145,7 +145,7 @@ void BgKin2Bombwall_Init(Actor* thisx, PlayState* play) {
DynaPolyActor_Init(&this->dyna, 0);
bombwallCollider = &this->collider;
Collider_InitCylinder(play, bombwallCollider);
- if (Flags_GetSwitch(play, BG_KIN2_BOMBWALL_SWITCH_FLAG(&this->dyna.actor))) {
+ if (Flags_GetSwitch(play, BG_KIN2_BOMBWALL_GET_SWITCH_FLAG(&this->dyna.actor))) {
Actor_Kill(&this->dyna.actor);
return;
}
@@ -185,7 +185,7 @@ void BgKin2Bombwall_SetupPlayCutscene(BgKin2Bombwall* this) {
void BgKin2Bombwall_PlayCutscene(BgKin2Bombwall* this, PlayState* play) {
if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
- Flags_SetSwitch(play, BG_KIN2_BOMBWALL_SWITCH_FLAG(&this->dyna.actor));
+ Flags_SetSwitch(play, BG_KIN2_BOMBWALL_GET_SWITCH_FLAG(&this->dyna.actor));
SoundSource_PlaySfxAtFixedWorldPos(play, &this->dyna.actor.world.pos, 60, NA_SE_EV_WALL_BROKEN);
DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->dyna.actor.draw = NULL;
diff --git a/src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.h b/src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.h
index 17370427a..553cd05b9 100644
--- a/src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.h
+++ b/src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.h
@@ -1,7 +1,7 @@
#ifndef Z_BG_KIN2_BOMBWALL_H
#define Z_BG_KIN2_BOMBWALL_H
-#define BG_KIN2_BOMBWALL_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
+#define BG_KIN2_BOMBWALL_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
#include "global.h"
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 37ac6c2ac..3f68cad8d 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
@@ -161,7 +161,7 @@ void BgKin2Fence_Init(Actor* thisx, PlayState* play) {
Collider_UpdateSpheres(i, &this->collider);
}
- if (Flags_GetSwitch(play, this->dyna.actor.params & 0x7F)) {
+ if (Flags_GetSwitch(play, BG_KIN2_FENCE_GET_SWITCH_FLAG(&this->dyna.actor))) {
BgKin2Fence_SetupDoNothing(this);
return;
}
@@ -219,7 +219,7 @@ void BgKin2Fence_SetupPlayOpenCutscene(BgKin2Fence* this) {
void BgKin2Fence_PlayOpenCutscene(BgKin2Fence* this, PlayState* play) {
if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
- Flags_SetSwitch(play, this->dyna.actor.params & 0x7F);
+ Flags_SetSwitch(play, BG_KIN2_FENCE_GET_SWITCH_FLAG(&this->dyna.actor));
BgKin2Fence_SetupWaitBeforeOpen(this);
return;
}
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 98bb51243..7c864d3ae 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
@@ -7,6 +7,8 @@ struct BgKin2Fence;
typedef void (*BgKin2FenceActionFunc)(struct BgKin2Fence*, PlayState*);
+#define BG_KIN2_FENCE_GET_SWITCH_FLAG(thisx) (((thisx)->params) & 0x7F)
+
typedef struct BgKin2Fence {
/* 0x000 */ DynaPolyActor dyna;
/* 0x15C */ ColliderJntSph collider;
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 63e7b5974..8445e855a 100644
--- a/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.c
+++ b/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.c
@@ -37,10 +37,10 @@ static InitChainEntry sInitChain[] = {
};
static Gfx* sLadderDLists[] = {
- object_ladder_DL_0000A0, // 12 Rung
- object_ladder_DL_0002D0, // 16 Rung
- object_ladder_DL_000500, // 20 Rung
- object_ladder_DL_000730, // 24 Rung
+ gWoodenLadder12RungDL,
+ gWoodenLadder16RungDL,
+ gWoodenLadder20RungDL,
+ gWoodenLadder24RungDL,
};
void BgLadder_Init(Actor* thisx, PlayState* play) {
@@ -49,19 +49,19 @@ void BgLadder_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
- this->switchFlag = BGLADDER_GET_SWITCHFLAG(thisx);
+ this->switchFlag = BGLADDER_GET_SWITCH_FLAG(thisx);
thisx->params = BGLADDER_GET_SIZE(thisx);
DynaPolyActor_Init(&this->dyna, 0);
size = thisx->params;
if (size == LADDER_SIZE_12RUNG) {
- DynaPolyActor_LoadMesh(play, &this->dyna, &object_ladder_Colheader_0001D8);
+ DynaPolyActor_LoadMesh(play, &this->dyna, &gWoodenLadder12RungCol);
} else if (size == LADDER_SIZE_16RUNG) {
- DynaPolyActor_LoadMesh(play, &this->dyna, &object_ladder_Colheader_000408);
+ DynaPolyActor_LoadMesh(play, &this->dyna, &gWoodenLadder16RungCol);
} else if (size == LADDER_SIZE_20RUNG) {
- DynaPolyActor_LoadMesh(play, &this->dyna, &object_ladder_Colheader_000638);
+ DynaPolyActor_LoadMesh(play, &this->dyna, &gWoodenLadder20RungCol);
} else if (size == LADDER_SIZE_24RUNG) {
- DynaPolyActor_LoadMesh(play, &this->dyna, &object_ladder_Colheader_000868);
+ DynaPolyActor_LoadMesh(play, &this->dyna, &gWoodenLadder24RungCol);
} else {
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 f920c18eb..4b06a32e8 100644
--- a/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.h
+++ b/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.h
@@ -4,7 +4,7 @@
#include "global.h"
#define BGLADDER_GET_SIZE(thisx) ((thisx)->params & 0xFF)
-#define BGLADDER_GET_SWITCHFLAG(thisx) (((thisx)->params >> 8) & 0xFF)
+#define BGLADDER_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0xFF)
struct BgLadder;
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 a09c0fb02..b74fdbd6d 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
@@ -152,7 +152,7 @@ void BgLastBwall_Init(Actor* thisx, PlayState* play) {
DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
DynaPolyActor_LoadMesh(play, &this->dyna, D_80C18A48[this->type].colHeader);
Collider_InitTris(play, &this->colliderTris);
- if (Flags_GetSwitch(play, BGLASTBWALL_GET_SWITCHFLAGS(&this->dyna.actor))) {
+ if (Flags_GetSwitch(play, BGLASTBWALL_GET_SWITCH_FLAG(&this->dyna.actor))) {
Actor_Kill(&this->dyna.actor);
return;
}
@@ -227,7 +227,7 @@ void func_80C187E4(BgLastBwall* this) {
void func_80C187F8(BgLastBwall* this, PlayState* play) {
if (this->colliderTris.base.acFlags & AC_HIT) {
this->colliderTris.base.acFlags &= ~AC_HIT;
- Flags_SetSwitch(play, BGLASTBWALL_GET_SWITCHFLAGS(&this->dyna.actor));
+ Flags_SetSwitch(play, BGLASTBWALL_GET_SWITCH_FLAG(&this->dyna.actor));
func_80C1886C(this, play);
} else {
CollisionCheck_SetAC(play, &play->colChkCtx, &this->colliderTris.base);
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 cae36be27..0e6568611 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
@@ -8,7 +8,7 @@ struct BgLastBwall;
typedef void (*BgLastBwallActionFunc)(struct BgLastBwall*, PlayState*);
-#define BGLASTBWALL_GET_SWITCHFLAGS(thisx) ((thisx)->params & 0x7F)
+#define BGLASTBWALL_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
#define BGLASTBWALL_GET_TYPE(thisx) (((thisx)->params >> 0xC) & 0xF)
typedef enum {
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 8e96cae50..0d308979c 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
@@ -378,7 +378,7 @@ void BgNumaHana_Draw(Actor* thisx, PlayState* play2) {
BgNumaHana* this = THIS;
WoodenFlowerPetalPosRot* innerPetalPosRot;
WoodenFlowerPetalPosRot* outerPetalPosRot;
- s32 objectIndex;
+ s32 objectSlot;
s32 i;
OPEN_DISPS(play->state.gfxCtx);
@@ -404,13 +404,13 @@ void BgNumaHana_Draw(Actor* thisx, PlayState* play2) {
gSPDisplayList(POLY_OPA_DISP++, gWoodenFlowerOuterPetalDL);
}
- objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_SYOKUDAI);
- if ((objectIndex >= 0) && (Object_IsLoaded(&play->objectCtx, objectIndex))) {
+ objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_SYOKUDAI);
+ if ((objectSlot > OBJECT_SLOT_NONE) && (Object_IsLoaded(&play->objectCtx, objectSlot))) {
Matrix_SetTranslateRotateYXZ(this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y - 64.5f,
this->dyna.actor.world.pos.z, &this->dyna.actor.shape.rot);
Matrix_Scale(1.5f, 1.5f, 1.5f, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[objectIndex].segment);
+ gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[objectSlot].segment);
gSPDisplayList(POLY_OPA_DISP++, gObjectSyokudaiTypeNoSwitchDL);
}
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 9f5a9c42d..ec3961fd7 100644
--- a/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c
+++ b/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c
@@ -148,7 +148,7 @@ void BgSpdweb_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
this->unk_161 = 0;
- this->switchFlag = BGSPDWEB_GET_SWITCHFLAG(&this->dyna.actor);
+ this->switchFlag = BGSPDWEB_GET_SWITCH_FLAG(&this->dyna.actor);
thisx->params &= 0xFF;
DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
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 c57353ce0..7737fc684 100644
--- a/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.h
+++ b/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.h
@@ -7,7 +7,7 @@ struct BgSpdweb;
typedef void (*BgSpdwebActionFunc)(struct BgSpdweb*, PlayState*);
-#define BGSPDWEB_GET_SWITCHFLAG(thisx) (((thisx)->params >> 8) & 0x7F)
+#define BGSPDWEB_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0x7F)
#define BGSPDWEB_FF_0 0
#define BGSPDWEB_FF_1 1
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 16e068156..3eb8e3c8a 100644
--- a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c
+++ b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c
@@ -103,9 +103,9 @@ void BgUmajump_Init(Actor* thisx, PlayState* play) {
thisx->update = Actor_Noop;
}
} else {
- this->objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_UMAJUMP);
+ this->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_UMAJUMP);
- if (this->objectIndex < 0) {
+ if (this->objectSlot <= OBJECT_SLOT_NONE) {
Actor_Kill(thisx);
}
@@ -126,8 +126,8 @@ void BgUmajump_Destroy(Actor* thisx, PlayState* play) {
void BgUmajump_Update(Actor* thisx, PlayState* play) {
BgUmajump* this = THIS;
- if (Object_IsLoaded(&play->objectCtx, this->objectIndex)) {
- this->dyna.actor.objBankIndex = this->objectIndex;
+ if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) {
+ this->dyna.actor.objectSlot = this->objectSlot;
this->dyna.actor.draw = BgUmajump_Draw;
Actor_SetObjectDependency(play, &this->dyna.actor);
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 ae35ac98c..372402ebd 100644
--- a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.h
+++ b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.h
@@ -23,7 +23,7 @@ typedef struct BgUmajump {
/* 0x000 */ DynaPolyActor dyna;
/* 0x15C */ BgUmajumpActionFunc actionFunc;
/* 0x160 */ union {
- s32 objectIndex;
+ s32 objectSlot;
s32 rotationTimer; // y rotation
s32 pathIndex;
};
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 bf3aa576d..f96c2864f 100644
--- a/src/overlays/actors/ovl_Boss_02/z_boss_02.c
+++ b/src/overlays/actors/ovl_Boss_02/z_boss_02.c
@@ -1320,7 +1320,7 @@ void Boss02_Static_Update(Actor* thisx, PlayState* play) {
Boss02* this = THIS;
this->giantModeScaleFactor = sGiantModeScaleFactor;
- play->envCtx.sandstormState = 0xD;
+ play->envCtx.sandstormState = SANDSTORM_D;
if (sBlueWarp != NULL) {
this->fogNear = KREG(23) + -15.0f;
@@ -1828,7 +1828,7 @@ void Boss02_HandleGiantsMaskCutscene(Boss02* this, PlayState* play) {
Actor_SetScale(&player->actor, this->playerScale);
}
- play->envCtx.lightSettings.fogNear = this->fogNear;
+ play->envCtx.adjLightSettings.fogNear = this->fogNear;
// Switches from the "normal" variation of the arena to the "giant" variation (or vice versa)
// at the appropriate point in the Giant's Mask cutscene.
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 20a25036f..9e1111a6b 100644
--- a/src/overlays/actors/ovl_Boss_03/z_boss_03.c
+++ b/src/overlays/actors/ovl_Boss_03/z_boss_03.c
@@ -685,7 +685,7 @@ void Boss03_ChasePlayer(Boss03* this, PlayState* play) {
(player->actor.shape.feetPos[0].y >= WATER_HEIGHT + 8.0f)) ||
(this->workTimer[WORK_TIMER_CURRENT_ACTION] == 0)) {
if (&this->actor == player->actor.parent) {
- player->unk_AE8 = 101;
+ player->actionVar2 = 101;
player->actor.parent = NULL;
player->csMode = PLAYER_CSMODE_NONE;
}
@@ -781,7 +781,7 @@ void Boss03_CatchPlayer(Boss03* this, PlayState* play) {
(player->actor.shape.feetPos[FOOT_LEFT].y >= WATER_HEIGHT + 8.0f)) ||
(this->workTimer[WORK_TIMER_CURRENT_ACTION] == 0)) {
if (&this->actor == player->actor.parent) {
- player->unk_AE8 = 101;
+ player->actionVar2 = 101;
player->actor.parent = NULL;
player->csMode = PLAYER_CSMODE_NONE;
Play_DisableMotionBlur();
@@ -909,7 +909,7 @@ void Boss03_ChewPlayer(Boss03* this, PlayState* play) {
// Stop chewing when the timer runs out
if (this->workTimer[WORK_TIMER_CURRENT_ACTION] == 0) {
if (&this->actor == player->actor.parent) {
- player->unk_AE8 = 101;
+ player->actionVar2 = 101;
player->actor.parent = NULL;
player->csMode = PLAYER_CSMODE_NONE;
Play_DisableMotionBlur();
@@ -1751,7 +1751,7 @@ void Boss03_SetupStunned(Boss03* this, PlayState* play) {
}
if (&this->actor == player->actor.parent) {
- player->unk_AE8 = 101;
+ player->actionVar2 = 101;
player->actor.parent = NULL;
player->csMode = PLAYER_CSMODE_NONE;
Play_DisableMotionBlur();
@@ -1903,7 +1903,7 @@ void Boss03_UpdateCollision(Boss03* this, PlayState* play) {
Boss03_PlayUnderwaterSfx(&this->actor.projectedPos, NA_SE_EN_KONB_DAMAGE_OLD);
if (&this->actor == player->actor.parent) {
- player->unk_AE8 = 101;
+ player->actionVar2 = 101;
player->actor.parent = NULL;
player->csMode = PLAYER_CSMODE_NONE;
Play_DisableMotionBlur();
@@ -2152,14 +2152,14 @@ void Boss03_Update(Actor* thisx, PlayState* play2) {
/* Start of Gyorg's Draw section */
void Boss03_SetObject(PlayState* play, s16 objectId) {
- s32 objectIndex = Object_GetIndex(&play->objectCtx, objectId);
+ s32 objectSlot = Object_GetSlot(&play->objectCtx, objectId);
OPEN_DISPS(play->state.gfxCtx);
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectSlot].segment);
- gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[objectIndex].segment);
- gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.status[objectIndex].segment);
+ gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[objectSlot].segment);
+ gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.slots[objectSlot].segment);
CLOSE_DISPS(play->state.gfxCtx);
}
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 82495ea1e..c35e6e9b1 100644
--- a/src/overlays/actors/ovl_Boss_04/z_boss_04.c
+++ b/src/overlays/actors/ovl_Boss_04/z_boss_04.c
@@ -173,7 +173,7 @@ void Boss04_Init(Actor* thisx, PlayState* play2) {
this->unk_6F8 = 1.0f;
Collider_InitAndSetJntSph(play, &this->collider1, &this->actor, &sJntSphInit1, this->collider1Elements);
Collider_InitAndSetJntSph(play, &this->collider2, &this->actor, &sJntSphInit2, this->collider2Elements);
- SkelAnime_InitFlex(play, &this->skelAnime, &gWartSkel, &gWartIdleAnim, this->jointTable, this->morphtable,
+ SkelAnime_InitFlex(play, &this->skelAnime, &gWartSkel, &gWartIdleAnim, this->jointTable, this->morphTable,
WART_LIMB_MAX);
spA8.y = this->actor.world.pos.y + 200.0f;
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 6aa153597..97c296b84 100644
--- a/src/overlays/actors/ovl_Boss_04/z_boss_04.h
+++ b/src/overlays/actors/ovl_Boss_04/z_boss_04.h
@@ -12,7 +12,7 @@ typedef struct Boss04 {
/* 0x000 */ Actor actor;
/* 0x144 */ SkelAnime skelAnime;
/* 0x188 */ Vec3s jointTable[WART_LIMB_MAX];
- /* 0x1BE */ Vec3s morphtable[WART_LIMB_MAX];
+ /* 0x1BE */ Vec3s morphTable[WART_LIMB_MAX];
/* 0x1F4 */ s16 unk_1F4;
/* 0x1F6 */ u8 unk_1F6;
/* 0x1F7 */ u8 unk_1F7;
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 38ca4f799..6dc94e0e3 100644
--- a/src/overlays/actors/ovl_Boss_06/z_boss_06.c
+++ b/src/overlays/actors/ovl_Boss_06/z_boss_06.c
@@ -431,26 +431,26 @@ void Boss06_Update(Actor* thisx, PlayState* play) {
if (this->unk_1E4 > 0.0f) {
if (ENBOSS06_GET_PARAMS(&this->actor) == 0) {
- D_801F4E32 = 1;
- D_801F4E38.x = this->actor.world.pos.x + this->unk_1B0;
- D_801F4E38.y = this->actor.world.pos.y + 80.0f + this->unk_1B4 + this->unk_1AC;
- D_801F4E38.z = this->actor.world.pos.z;
+ gCustomLensFlare1On = true;
+ gCustomLensFlare1Pos.x = this->actor.world.pos.x + this->unk_1B0;
+ gCustomLensFlare1Pos.y = this->actor.world.pos.y + 80.0f + this->unk_1B4 + this->unk_1AC;
+ gCustomLensFlare1Pos.z = this->actor.world.pos.z;
D_801F4E44 = this->unk_1E4;
D_801F4E48 = 10.0f;
D_801F4E4C = 0;
} else {
- D_801F4E4E = 1;
- D_801F4E50.x = this->actor.world.pos.x + this->unk_1B0;
- D_801F4E50.y = this->actor.world.pos.y + 80.0f + this->unk_1B4 + this->unk_1AC;
- D_801F4E50.z = this->actor.world.pos.z;
+ gCustomLensFlare2On = true;
+ gCustomLensFlare2Pos.x = this->actor.world.pos.x + this->unk_1B0;
+ gCustomLensFlare2Pos.y = this->actor.world.pos.y + 80.0f + this->unk_1B4 + this->unk_1AC;
+ gCustomLensFlare2Pos.z = this->actor.world.pos.z;
D_801F4E5C = this->unk_1E4;
D_801F4E60 = 10.0f;
D_801F4E64 = 0;
}
} else if (ENBOSS06_GET_PARAMS(&this->actor) == 0) {
- D_801F4E32 = 0;
+ gCustomLensFlare1On = false;
} else {
- D_801F4E4E = 0;
+ gCustomLensFlare2On = false;
}
if ((this->unk_1C8 != 0) && (this->unk_1C8 != 0)) {
diff --git a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c
index ca472ccc3..3f29047fa 100644
--- a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c
+++ b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c
@@ -16,14 +16,13 @@ void DemoEffect_Init(Actor* thisx, PlayState* play);
void DemoEffect_Destroy(Actor* thisx, PlayState* play);
void DemoEffect_Update(Actor* thisx, PlayState* play);
-void func_808CD940(DemoEffect* this, PlayState* play);
-void func_808CD998(DemoEffect* this, PlayState* play);
-void func_808CDBDC(DemoEffect* this, PlayState* play);
-void func_808CDCEC(DemoEffect* this, PlayState* play);
-void func_808CDD70(DemoEffect* this, PlayState* play);
-void func_808CDDE0(DemoEffect* this, PlayState* play);
-void func_808CDFF8(Actor* thisx, PlayState* play);
-void func_808CE078(Actor* thisx, PlayState* play2);
+void DemoEffect_WaitForObject(DemoEffect* this, PlayState* play);
+void DemoEffect_SetupTimewarp(DemoEffect* this, PlayState* play);
+void DemoEffect_StartTimewarp(DemoEffect* this, PlayState* play);
+void DemoEffect_ShrinkLight(DemoEffect* this, PlayState* play);
+void DemoEffect_ExpandLight(DemoEffect* this, PlayState* play);
+void DemoEffect_DrawTimewarp(Actor* thisx, PlayState* play);
+void DemoEffect_DrawLight(Actor* thisx, PlayState* play2);
ActorInit Demo_Effect_InitVars = {
ACTOR_DEMO_EFFECT,
@@ -38,42 +37,46 @@ ActorInit Demo_Effect_InitVars = {
};
void DemoEffect_Init(Actor* thisx, PlayState* play) {
- static s16 sEffectTypeObjects[] = {
+ static s16 sEffectTypeObjectIds[] = {
OBJECT_EFC_TW, OBJECT_EFC_TW, OBJECT_EFC_TW, OBJECT_EFC_TW, GAMEPLAY_KEEP,
GAMEPLAY_KEEP, GAMEPLAY_KEEP, GAMEPLAY_KEEP, GAMEPLAY_KEEP,
};
s32 pad;
DemoEffect* this = THIS;
s32 type = DEMO_EFFECT_GET_TYPE(&this->actor);
- s32 objectIndex;
+ s32 objectSlot;
s32 pad2;
- Color_RGB8 colors[] = {
- { 200, 200, 0 }, { 255, 40, 100 }, { 50, 255, 0 }, { 0, 0, 255 }, { 255, 255, 80 },
+ Color_RGB8 lightColors[] = {
+ { 200, 200, 0 }, // Yellow
+ { 255, 40, 100 }, // Pink
+ { 50, 255, 0 }, // Light green
+ { 0, 0, 255 }, // Blue
+ { 255, 255, 80 }, // Light Yellow
};
- if (sEffectTypeObjects[type] == GAMEPLAY_KEEP) {
- objectIndex = 0;
+ if (sEffectTypeObjectIds[type] == GAMEPLAY_KEEP) {
+ objectSlot = 0;
} else {
- objectIndex = Object_GetIndex(&play->objectCtx, sEffectTypeObjects[type]);
+ objectSlot = Object_GetSlot(&play->objectCtx, sEffectTypeObjectIds[type]);
}
- if (objectIndex < 0) {
+ if (objectSlot <= OBJECT_SLOT_NONE) {
// assert on debug
} else {
- this->initObjectIndex = objectIndex;
+ this->initObjectSlot = objectSlot;
}
Actor_SetScale(&this->actor, 0.2f);
switch (type) {
- case DEMO_EFFECT_TYPE_0:
- case DEMO_EFFECT_TYPE_1:
+ case DEMO_EFFECT_TIMEWARP_TIMEBLOCK_LARGE:
+ case DEMO_EFFECT_TIMEWARP_TIMEBLOCK_SMALL:
this->actor.flags |= ACTOR_FLAG_2000000;
-
- case DEMO_EFFECT_TYPE_2:
- case DEMO_EFFECT_TYPE_3:
- this->initDrawFunc = func_808CDFF8;
- this->initActionFunc = func_808CD998;
+ // FALLTHROUGH
+ case DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_LARGE:
+ case DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_VERY_LARGE:
+ this->initDrawFunc = DemoEffect_DrawTimewarp;
+ this->initActionFunc = DemoEffect_SetupTimewarp;
this->envXluColor[0] = 0;
this->envXluColor[1] = 100;
this->envXluColor[2] = 255;
@@ -81,17 +84,17 @@ void DemoEffect_Init(Actor* thisx, PlayState* play) {
this->timer = 0;
break;
- case DEMO_EFFECT_TYPE_4:
- case DEMO_EFFECT_TYPE_5:
- case DEMO_EFFECT_TYPE_6:
- case DEMO_EFFECT_TYPE_7:
- case DEMO_EFFECT_TYPE_8:
- this->envXluColor[0] = colors[type - 4].r;
- this->envXluColor[1] = colors[type - 4].g;
- this->envXluColor[2] = colors[type - 4].b;
+ case DEMO_EFFECT_TYPE_LIGHT_DARK_YELLOW:
+ case DEMO_EFFECT_TYPE_LIGHT_PINK:
+ case DEMO_EFFECT_TYPE_LIGHT_GREEN:
+ case DEMO_EFFECT_TYPE_LIGHT_BLUE:
+ case DEMO_EFFECT_TYPE_LIGHT_YELLOW:
+ this->envXluColor[0] = lightColors[type - DEMO_EFFECT_TYPE_LIGHT_BASE].r;
+ this->envXluColor[1] = lightColors[type - DEMO_EFFECT_TYPE_LIGHT_BASE].g;
+ this->envXluColor[2] = lightColors[type - DEMO_EFFECT_TYPE_LIGHT_BASE].b;
Actor_SetScale(&this->actor, 0.0f);
- this->initDrawFunc = func_808CE078;
- this->initActionFunc = func_808CDDE0;
+ this->initDrawFunc = DemoEffect_DrawLight;
+ this->initActionFunc = DemoEffect_ExpandLight;
this->timer = 0;
break;
@@ -100,17 +103,17 @@ void DemoEffect_Init(Actor* thisx, PlayState* play) {
}
ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.0f);
- this->actionFunc = func_808CD940;
+ this->actionFunc = DemoEffect_WaitForObject;
}
void DemoEffect_Destroy(Actor* thisx, PlayState* play) {
DemoEffect* this = THIS;
switch (DEMO_EFFECT_GET_TYPE(&this->actor)) {
- case DEMO_EFFECT_TYPE_0:
- case DEMO_EFFECT_TYPE_1:
- case DEMO_EFFECT_TYPE_2:
- case DEMO_EFFECT_TYPE_3:
+ case DEMO_EFFECT_TIMEWARP_TIMEBLOCK_LARGE:
+ case DEMO_EFFECT_TIMEWARP_TIMEBLOCK_SMALL:
+ case DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_LARGE:
+ case DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_VERY_LARGE:
SkelCurve_Destroy(play, &this->skelCurve);
break;
@@ -119,49 +122,49 @@ void DemoEffect_Destroy(Actor* thisx, PlayState* play) {
}
}
-void func_808CD940(DemoEffect* this, PlayState* play) {
- if (Object_IsLoaded(&play->objectCtx, this->initObjectIndex)) {
- this->actor.objBankIndex = this->initObjectIndex;
+void DemoEffect_WaitForObject(DemoEffect* this, PlayState* play) {
+ if (Object_IsLoaded(&play->objectCtx, this->initObjectSlot)) {
+ this->actor.objectSlot = this->initObjectSlot;
this->actor.draw = this->initDrawFunc;
this->actionFunc = this->initActionFunc;
}
}
-void func_808CD998(DemoEffect* this, PlayState* play) {
+void DemoEffect_SetupTimewarp(DemoEffect* this, PlayState* play) {
s32 type = DEMO_EFFECT_GET_TYPE(&this->actor);
- if (SkelCurve_Init(play, &this->skelCurve, &object_efc_tw_Skel_0012E8, &object_efc_tw_CurveAnim_000050)) {}
+ if (SkelCurve_Init(play, &this->skelCurve, &gTimewarpSkel, &gTimewarpAnim)) {}
- SkelCurve_SetAnim(&this->skelCurve, &object_efc_tw_CurveAnim_000050, 1.0f, 59.0f, 1.0f, 1.7f);
+ SkelCurve_SetAnim(&this->skelCurve, &gTimewarpAnim, 1.0f, 59.0f, 1.0f, 1.7f);
SkelCurve_Update(play, &this->skelCurve);
- this->actionFunc = func_808CDCEC;
+ this->actionFunc = DemoEffect_StartTimewarp;
switch (type) {
- case DEMO_EFFECT_TYPE_0:
- Actor_SetScale(&this->actor, 0.16800001f);
+ case DEMO_EFFECT_TIMEWARP_TIMEBLOCK_LARGE:
+ Actor_SetScale(&this->actor, 168.0f * 0.001f);
break;
- case DEMO_EFFECT_TYPE_1:
- Actor_SetScale(&this->actor, 0.08400001f);
+ case DEMO_EFFECT_TIMEWARP_TIMEBLOCK_SMALL:
+ Actor_SetScale(&this->actor, 84.0f * 0.001f);
break;
- case DEMO_EFFECT_TYPE_2:
- Actor_SetScale(&this->actor, 0.16800001f);
+ case DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_LARGE:
+ Actor_SetScale(&this->actor, 168.0f * 0.001f);
break;
- case DEMO_EFFECT_TYPE_3:
- Actor_SetScale(&this->actor, 0.28f);
+ case DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_VERY_LARGE:
+ Actor_SetScale(&this->actor, 280.0f * 0.001f);
break;
default:
- Actor_SetScale(&this->actor, 0.014f);
+ Actor_SetScale(&this->actor, 14.0f * 0.001f);
break;
}
}
-void func_808CDAD0(f32 alphaScale) {
+void DemoEffect_SetPerVertexAlpha(f32 alphaScale) {
static u8 sAlphaTypes[] = { 1, 1, 2, 0, 1, 1, 2, 0, 1, 2, 0, 2, 1, 0, 1, 0, 2, 0, 2, 2, 0 };
- Vtx* vtx = Lib_SegmentedToVirtual(object_efc_tw_Vtx_000060);
+ Vtx* vtx = Lib_SegmentedToVirtual(gTimewarpVtx);
s32 i;
u8 alphas[3];
@@ -176,7 +179,10 @@ void func_808CDAD0(f32 alphaScale) {
}
}
-void func_808CDBDC(DemoEffect* this, PlayState* play) {
+/**
+ * Shrink and fade linearly for 100 frames then remove.
+ */
+void DemoEffect_FinishTimewarp(DemoEffect* this, PlayState* play) {
s32 type = DEMO_EFFECT_GET_TYPE(&this->actor);
f32 scale;
f32 alphaScale;
@@ -187,19 +193,19 @@ void func_808CDBDC(DemoEffect* this, PlayState* play) {
scale = alphaScale * 0.14f;
switch (type) {
- case DEMO_EFFECT_TYPE_0:
+ case DEMO_EFFECT_TIMEWARP_TIMEBLOCK_LARGE:
scale *= 1.2f;
break;
- case DEMO_EFFECT_TYPE_1:
+ case DEMO_EFFECT_TIMEWARP_TIMEBLOCK_SMALL:
scale *= 0.6f;
break;
- case DEMO_EFFECT_TYPE_2:
+ case DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_LARGE:
scale *= 1.2f;
break;
- case DEMO_EFFECT_TYPE_3:
+ case DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_VERY_LARGE:
scale *= 2.0f;
break;
@@ -209,25 +215,31 @@ void func_808CDBDC(DemoEffect* this, PlayState* play) {
this->actor.scale.x = scale;
this->actor.scale.z = scale;
- func_808CDAD0(alphaScale);
+ DemoEffect_SetPerVertexAlpha(alphaScale);
Actor_PlaySfx_FlaggedCentered3(&this->actor, NA_SE_EV_TIMETRIP_LIGHT - SFX_FLAG);
} else {
- func_808CDAD0(1.0f);
+ DemoEffect_SetPerVertexAlpha(1.0f);
Actor_Kill(&this->actor);
}
}
-void func_808CDCEC(DemoEffect* this, PlayState* play) {
+/**
+ * Runs until animation plays to frame 59 and pauses it on frame 59.
+ */
+void DemoEffect_StartTimewarp(DemoEffect* this, PlayState* play) {
Actor_PlaySfx_FlaggedCentered3(&this->actor, NA_SE_EV_TIMETRIP_LIGHT - SFX_FLAG);
if (SkelCurve_Update(play, &this->skelCurve)) {
- SkelCurve_SetAnim(&this->skelCurve, &object_efc_tw_CurveAnim_000050, 1.0f, 60.0f, 59.0f, 0.0f);
- this->actionFunc = func_808CDBDC;
+ SkelCurve_SetAnim(&this->skelCurve, &gTimewarpAnim, 1.0f, 60.0f, 59.0f, 0.0f);
+ this->actionFunc = DemoEffect_FinishTimewarp;
this->timer = 0;
}
}
-void func_808CDD70(DemoEffect* this, PlayState* play) {
+/**
+ * Take scale to 0 linearly, when scale is small enough, remove.
+ */
+void DemoEffect_ShrinkLight(DemoEffect* this, PlayState* play) {
Actor_SetScale(&this->actor, this->actor.scale.x - 0.02f);
this->timer++;
@@ -236,12 +248,16 @@ void func_808CDD70(DemoEffect* this, PlayState* play) {
}
}
-void func_808CDDE0(DemoEffect* this, PlayState* play) {
+/**
+ * Changes scale for 3 frames, scale is successively 0.0f, 0.2f, 0.3f, 0.35f (would converge to 0.4 exponentially if run
+ * for a long time).
+ */
+void DemoEffect_ExpandLight(DemoEffect* this, PlayState* play) {
Actor_SetScale(&this->actor, (this->actor.scale.x * 0.5f) + 0.2f);
this->timer++;
if (this->timer >= 3) {
- this->actionFunc = func_808CDD70;
+ this->actionFunc = DemoEffect_ShrinkLight;
}
}
@@ -251,7 +267,7 @@ void DemoEffect_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
}
-s32 func_808CDE78(PlayState* play, SkelCurve* skelCurve, s32 limbIndex, Actor* thisx) {
+s32 DemoEffect_OverrideLimbDrawTimewarp(PlayState* play, SkelCurve* skelCurve, s32 limbIndex, Actor* thisx) {
s32 pad;
DemoEffect* this = THIS;
u32 frames = play->gameplayFrames;
@@ -278,7 +294,7 @@ s32 func_808CDE78(PlayState* play, SkelCurve* skelCurve, s32 limbIndex, Actor* t
return true;
}
-void func_808CDFF8(Actor* thisx, PlayState* play) {
+void DemoEffect_DrawTimewarp(Actor* thisx, PlayState* play) {
GraphicsContext* gfxCtx = play->state.gfxCtx;
DemoEffect* this = THIS;
@@ -287,12 +303,12 @@ void func_808CDFF8(Actor* thisx, PlayState* play) {
POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_25);
Matrix_Scale(2.0f, 2.0f, 2.0f, MTXMODE_APPLY);
- SkelCurve_Draw(&this->actor, play, &this->skelCurve, func_808CDE78, NULL, 1, &this->actor);
+ SkelCurve_Draw(&this->actor, play, &this->skelCurve, DemoEffect_OverrideLimbDrawTimewarp, NULL, 1, &this->actor);
CLOSE_DISPS(gfxCtx);
}
-void func_808CE078(Actor* thisx, PlayState* play2) {
+void DemoEffect_DrawLight(Actor* thisx, PlayState* play2) {
PlayState* play = play2;
DemoEffect* this = THIS;
s16 zRot = (this->timer * 0x400) & 0xFFFF;
@@ -319,10 +335,10 @@ void func_808CE078(Actor* thisx, PlayState* play2) {
CLOSE_DISPS(play->state.gfxCtx);
- D_801F4E32 = 1;
- D_801F4E38.x = thisx->world.pos.x;
- D_801F4E38.y = thisx->world.pos.y;
- D_801F4E38.z = thisx->world.pos.z;
+ gCustomLensFlare1On = true;
+ gCustomLensFlare1Pos.x = thisx->world.pos.x;
+ gCustomLensFlare1Pos.y = thisx->world.pos.y;
+ gCustomLensFlare1Pos.z = thisx->world.pos.z;
D_801F4E44 = thisx->scale.x * 60.0f;
D_801F4E48 = thisx->scale.x * 50.0f;
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 9901a3189..538f6bc1e 100644
--- a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.h
+++ b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.h
@@ -11,21 +11,22 @@ typedef void (*DemoEffectActionFunc)(struct DemoEffect*, PlayState*);
#define DEMO_EFFECT_GET_TYPE(thisx) ((thisx)->params & 0xFF)
typedef enum {
- /* 0 */ DEMO_EFFECT_TYPE_0,
- /* 1 */ DEMO_EFFECT_TYPE_1,
- /* 2 */ DEMO_EFFECT_TYPE_2,
- /* 3 */ DEMO_EFFECT_TYPE_3,
- /* 4 */ DEMO_EFFECT_TYPE_4,
- /* 5 */ DEMO_EFFECT_TYPE_5,
- /* 6 */ DEMO_EFFECT_TYPE_6,
- /* 7 */ DEMO_EFFECT_TYPE_7,
- /* 8 */ DEMO_EFFECT_TYPE_8
+ /* 0 */ DEMO_EFFECT_TIMEWARP_TIMEBLOCK_LARGE,
+ /* 1 */ DEMO_EFFECT_TIMEWARP_TIMEBLOCK_SMALL,
+ /* 2 */ DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_LARGE,
+ /* 3 */ DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_VERY_LARGE,
+ /* 4 */ DEMO_EFFECT_TYPE_LIGHT_BASE,
+ /* 4 */ DEMO_EFFECT_TYPE_LIGHT_DARK_YELLOW = DEMO_EFFECT_TYPE_LIGHT_BASE,
+ /* 5 */ DEMO_EFFECT_TYPE_LIGHT_PINK,
+ /* 6 */ DEMO_EFFECT_TYPE_LIGHT_GREEN,
+ /* 7 */ DEMO_EFFECT_TYPE_LIGHT_BLUE,
+ /* 8 */ DEMO_EFFECT_TYPE_LIGHT_YELLOW // Unused
} DemoEffectType;
typedef struct DemoEffect {
/* 0x000 */ Actor actor;
/* 0x144 */ SkelCurve skelCurve;
- /* 0x164 */ u8 initObjectIndex;
+ /* 0x164 */ u8 initObjectSlot;
/* 0x165 */ u8 primXluColor[3];
/* 0x168 */ u8 envXluColor[3];
/* 0x16C */ s16 timer;
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 6882c189a..d72fdca4f 100644
--- a/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.c
+++ b/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.c
@@ -1,7 +1,7 @@
/*
* File: z_demo_getitem.c
* Overlay: ovl_Demo_Getitem
- * Description: Cutscene objectIndex for Great Fairy's Mask and Great Fairy's Sword
+ * Description: Cutscene objects for Great Fairy's Mask and Great Fairy's Sword
*/
#include "z_demo_getitem.h"
@@ -14,8 +14,8 @@ void DemoGetitem_Init(Actor* thisx, PlayState* play);
void DemoGetitem_Destroy(Actor* thisx, PlayState* play);
void DemoGetitem_Update(Actor* thisx, PlayState* play);
-void func_80A4FB10(DemoGetitem* this, PlayState* play);
-void func_80A4FB68(DemoGetitem* this, PlayState* play2);
+void DemoGetitem_Wait(DemoGetitem* this, PlayState* play);
+void DemoGetitem_PerformCutsceneActions(DemoGetitem* this, PlayState* play);
void DemoGetitem_Draw(Actor* thisx, PlayState* play);
ActorInit Demo_Getitem_InitVars = {
@@ -30,54 +30,62 @@ ActorInit Demo_Getitem_InitVars = {
(ActorFunc)NULL,
};
-static s16 sObjectBankIndices[] = { OBJECT_GI_MASK14, OBJECT_GI_SWORD_4 };
+static s16 sObjectIds[] = { OBJECT_GI_MASK14, OBJECT_GI_SWORD_4 };
static s16 sGetItemDraws[] = { GID_MASK_GREAT_FAIRY, GID_SWORD_GREAT_FAIRY };
static u16 sCueTypes[] = { CS_CMD_ACTOR_CUE_110, CS_CMD_ACTOR_CUE_566 };
+typedef enum GreatFairyRewardItem {
+ /* 0 */ DEMOGETITEM_ITEM_MASK_GREAT_FAIRY,
+ /* 1 */ DEMOGETITEM_ITEM_SWORD_GREAT_FAIRY
+} GreatFairyRewardItem;
+
void DemoGetitem_Init(Actor* thisx, PlayState* play) {
s32 pad;
- s32 objectIndex;
+ s32 objectSlot;
s32 itemIndex;
DemoGetitem* this = THIS;
- itemIndex = 0;
- if (DEMOGETITEM_GET_F(thisx) == 1) {
- itemIndex = 1;
+ itemIndex = DEMOGETITEM_ITEM_MASK_GREAT_FAIRY;
+ if (DEMOGETITEM_GET_F(&this->actor) == 1) {
+ itemIndex = DEMOGETITEM_ITEM_SWORD_GREAT_FAIRY;
}
+
Actor_SetScale(&this->actor, 0.25f);
- this->actionFunc = func_80A4FB10;
- this->item = sGetItemDraws[itemIndex];
+ this->actionFunc = DemoGetitem_Wait;
+ this->getItemDrawId = sGetItemDraws[itemIndex];
this->cueType = sCueTypes[itemIndex];
- objectIndex = Object_GetIndex(&play->objectCtx, sObjectBankIndices[itemIndex]);
- if (objectIndex < 0) {
+
+ objectSlot = Object_GetSlot(&play->objectCtx, sObjectIds[itemIndex]);
+ if (objectSlot <= OBJECT_SLOT_NONE) {
Actor_Kill(&this->actor);
return;
}
- this->objectIndex = objectIndex;
+ this->objectSlot = objectSlot;
}
void DemoGetitem_Destroy(Actor* thisx, PlayState* play) {
}
-void func_80A4FB10(DemoGetitem* this, PlayState* play) {
- if (Object_IsLoaded(&play->objectCtx, this->objectIndex)) {
+void DemoGetitem_Wait(DemoGetitem* this, PlayState* play) {
+ if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) {
this->actor.draw = NULL;
- this->actor.objBankIndex = this->objectIndex;
- this->actionFunc = func_80A4FB68;
+ this->actor.objectSlot = this->objectSlot;
+ this->actionFunc = DemoGetitem_PerformCutsceneActions;
}
}
-void func_80A4FB68(DemoGetitem* this, PlayState* play2) {
- PlayState* play = play2;
- u16 sp22 = (play->gameplayFrames * 1000) & 0xFFFF;
+void DemoGetitem_PerformCutsceneActions(DemoGetitem* this, PlayState* play) {
+ s32 pad;
+ u16 bobPhase = (play->gameplayFrames * 1000) % 0x10000;
if (Cutscene_IsCueInChannel(play, this->cueType)) {
if (play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id != 4) {
this->actor.shape.yOffset = 0.0f;
}
+
switch (play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id) {
case 2:
this->actor.draw = DemoGetitem_Draw;
@@ -92,7 +100,7 @@ void func_80A4FB68(DemoGetitem* this, PlayState* play2) {
case 4:
this->actor.draw = DemoGetitem_Draw;
Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType));
- this->actor.shape.yOffset = Math_SinS(sp22) * 15.0f;
+ this->actor.shape.yOffset = Math_SinS(bobPhase) * 15.0f;
break;
default:
@@ -115,5 +123,5 @@ void DemoGetitem_Draw(Actor* thisx, PlayState* play) {
func_800B8050(&this->actor, play, 0);
func_800B8118(&this->actor, play, 0);
- GetItem_Draw(play, this->item);
+ GetItem_Draw(play, this->getItemDrawId);
}
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 ca00f6048..c43020300 100644
--- a/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.h
+++ b/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.h
@@ -11,9 +11,9 @@ typedef void (*DemoGetitemActionFunc)(struct DemoGetitem*, PlayState*);
typedef struct DemoGetitem {
/* 0x000 */ Actor actor;
- /* 0x144 */ s16 item;
+ /* 0x144 */ s16 getItemDrawId;
/* 0x146 */ u16 cueType;
- /* 0x148 */ s8 objectIndex;
+ /* 0x148 */ s8 objectSlot;
/* 0x14C */ DemoGetitemActionFunc actionFunc;
} DemoGetitem; // size = 0x150
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 1ee2b1c9d..bce779aa7 100644
--- a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c
+++ b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c
@@ -34,7 +34,7 @@ ActorInit Demo_Kankyo_InitVars = {
(ActorFunc)DemoKankyo_Draw,
};
-static s32 sObjectBubbleIndex = OBJECT_BUBBLE | 0x10000;
+static s32 sObjectBubbleId = OBJECT_BUBBLE | 0x10000;
void DemoKankyo_SetupAction(DemoKankyo* this, DemoKankyoActionFunc actionFunc) {
this->actionFunc = actionFunc;
@@ -56,21 +56,21 @@ void DemoKakyo_LostWoodsSparkleActionFunc(DemoKankyo* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (play->roomCtx.unk7A[1] != 0) {
- if (play->envCtx.unk_F2[3] != 0) {
- play->envCtx.unk_F2[3]--;
+ if (play->envCtx.precipitation[PRECIP_SNOW_MAX] != 0) {
+ play->envCtx.precipitation[PRECIP_SNOW_MAX]--;
} else {
Actor_Kill(&this->actor);
}
- } else if (play->envCtx.unk_F2[3] < DEMOKANKYO_EFFECT_COUNT) {
- play->envCtx.unk_F2[3] += 16;
+ } else if (play->envCtx.precipitation[PRECIP_SNOW_MAX] < DEMOKANKYO_EFFECT_COUNT) {
+ play->envCtx.precipitation[PRECIP_SNOW_MAX] += 16;
}
// note: DemoKankyo can crash if placed in an area that snows (ObjectKankyo)
- // because they both use unk_F2 as an effect counter,
+ // because they both use PRECIP_SNOW_MAX precipitation as an effect counter,
// causing DemoKankyo to write beyond its efffect array boundry
// this crash can occur if the two actors are in different scenes connected by an exit
// e.g. if you add DemoKankyo to GoronShrine, you will crash entering/leaving through door
- for (i = 0; i < play->envCtx.unk_F2[3]; i++) {
+ for (i = 0; i < play->envCtx.precipitation[PRECIP_SNOW_MAX]; i++) {
repositionLimit = 130.0f;
eyeToAt.x = play->view.at.x - play->view.eye.x;
@@ -279,9 +279,9 @@ void DemoKakyo_LostWoodsSparkleActionFunc(DemoKankyo* this, PlayState* play) {
}
void DemoKakyo_GiantObjectCheck(DemoKankyo* this, PlayState* play) {
- if (Object_IsLoaded(&play->objectCtx, this->objectId)) {
+ if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) {
this->isSafeToDrawGiants = true;
- this->actor.objBankIndex = this->objectId;
+ this->actor.objectSlot = this->objectSlot;
DemoKankyo_SetupAction(this, DemoKakyo_MoonSparklesActionFunc);
}
}
@@ -304,8 +304,8 @@ void DemoKakyo_MoonSparklesActionFunc(DemoKankyo* this, PlayState* play) {
s32 pad1;
Vec3f worldPos;
- if (play->envCtx.unk_F2[3] < DEMOKANKYO_EFFECT_COUNT) {
- play->envCtx.unk_F2[3] += 16;
+ if (play->envCtx.precipitation[PRECIP_SNOW_MAX] < DEMOKANKYO_EFFECT_COUNT) {
+ play->envCtx.precipitation[PRECIP_SNOW_MAX] += 16;
}
eyeToAt.x = play->view.at.x - play->view.eye.x;
@@ -318,7 +318,7 @@ void DemoKakyo_MoonSparklesActionFunc(DemoKankyo* this, PlayState* play) {
halfScreenHeight = SCREEN_HEIGHT / 2;
- for (i = 0; i < play->envCtx.unk_F2[3]; i++) {
+ for (i = 0; i < play->envCtx.precipitation[PRECIP_SNOW_MAX]; i++) {
switch (this->effects[i].state) {
case DEMO_KANKYO_STATE_INIT:
this->effects[i].posBase.x = play->view.eye.x + (eyeToAtNormX * halfScreenHeight);
@@ -437,7 +437,7 @@ void DemoKankyo_Init(Actor* thisx, PlayState* play) {
DemoKankyo* this = THIS;
s32 pad;
s32 i;
- s32 objId;
+ s32 objectSlot;
// This must be a single line to match, possibly a macro?
// clang-format off
@@ -449,7 +449,7 @@ void DemoKankyo_Init(Actor* thisx, PlayState* play) {
switch (this->actor.params) {
case DEMO_KANKYO_TYPE_LOSTWOODS:
- objId = OBJECT_UNSET_0;
+ objectSlot = 0;
this->actor.room = -1;
if (sLostWoodsSparklesMutex == false) {
DemoKankyo_SetupAction(this, DemoKakyo_LostWoodsSparkleActionFunc);
@@ -461,24 +461,24 @@ void DemoKankyo_Init(Actor* thisx, PlayState* play) {
case DEMO_KANKYO_TYPE_GIANTS:
this->isSafeToDrawGiants = false;
- objId = Object_GetIndex(&play->objectCtx, sObjectBubbleIndex);
+ objectSlot = Object_GetSlot(&play->objectCtx, sObjectBubbleId);
DemoKankyo_SetupAction(this, DemoKakyo_GiantObjectCheck);
break;
case DEMO_KANKYO_TYPE_MOON:
- objId = OBJECT_UNSET_0;
+ objectSlot = 0;
this->isSafeToDrawGiants = true;
DemoKankyo_SetupAction(this, DemoKakyo_MoonSparklesActionFunc);
break;
default:
//! @bug: this causes a crash because the actionfunc is never set
- objId = -1;
+ objectSlot = OBJECT_SLOT_NONE;
break;
}
- if (objId > -1) {
- this->objectId = objId;
+ if (objectSlot > OBJECT_SLOT_NONE) {
+ this->objectSlot = objectSlot;
}
}
@@ -511,7 +511,7 @@ void DemoKakyo_DrawLostWoodsSparkle(Actor* thisx, PlayState* play2) {
gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(gSun1Tex));
gSPDisplayList(POLY_XLU_DISP++, gSunSparkleMaterialDL);
- for (i = 0; i < play->envCtx.unk_F2[3]; i++) {
+ for (i = 0; i < play->envCtx.precipitation[PRECIP_SNOW_MAX]; i++) {
worldPos.x = this->effects[i].posBase.x + this->effects[i].posOffset.x;
worldPos.y = this->effects[i].posBase.y + this->effects[i].posOffset.y;
worldPos.z = this->effects[i].posBase.z + this->effects[i].posOffset.z;
@@ -601,7 +601,7 @@ void DemoKankyo_DrawMoonAndGiant(Actor* thisx, PlayState* play2) {
Gfx_SetupDL25_Xlu(gfxCtx);
- for (i = 0; i < play->envCtx.unk_F2[3]; i++) {
+ for (i = 0; i < play->envCtx.precipitation[PRECIP_SNOW_MAX]; i++) {
worldPos.x = this->effects[i].posBase.x + this->effects[i].posOffset.x;
worldPos.y = this->effects[i].posBase.y + this->effects[i].posOffset.y;
worldPos.z = this->effects[i].posBase.z + this->effects[i].posOffset.z;
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 cbee0a148..6142796ce 100644
--- a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.h
+++ b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.h
@@ -31,7 +31,7 @@ typedef struct DemoKankyo {
/* 0x0000 */ Actor actor;
/* 0x0144 */ DemoKankyoEffect effects[DEMOKANKYO_EFFECT_COUNT];
/* 0x1644 */ DemoKankyoActionFunc actionFunc;
- /* 0x1648 */ s32 objectId;
+ /* 0x1648 */ s32 objectSlot;
/* 0x164C */ u8 isSafeToDrawGiants;
} DemoKankyo; // size = 0x1650
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 2341b3a64..09f4fe1c1 100644
--- a/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.c
+++ b/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.c
@@ -499,8 +499,8 @@ void func_80C17468(PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_800FE7A8(D_80C17824, &sp2C);
- func_800FE7A8(D_80C17834, &sp28);
+ Environment_LerpSandstormColors(D_80C17824, &sp2C);
+ Environment_LerpSandstormColors(D_80C17834, &sp28);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, sp2C.r, sp2C.g, sp2C.b, 255);
gDPSetEnvColor(POLY_XLU_DISP++, sp28.r, sp28.g, sp28.b, 255);
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 dfcb610c8..3b05c6e56 100644
--- a/src/overlays/actors/ovl_Dm_An/z_dm_an.c
+++ b/src/overlays/actors/ovl_Dm_An/z_dm_an.c
@@ -70,41 +70,41 @@ static AnimationInfoS sAnimationInfo[DMAN_ANIM_MAX] = {
};
s32 DmAn_UpdateSkelAnime(DmAn* this, PlayState* play) {
- s8 objectIndex = this->actor.objBankIndex;
- s8 objectIndex2;
+ s8 objectSlot = this->actor.objectSlot;
+ s8 objectSlot2;
s32 isAnimFinished = false;
if (this->animIndex <= DMAN_ANIM_1) {
- objectIndex2 = this->actor.objBankIndex;
+ objectSlot2 = this->actor.objectSlot;
} else {
- objectIndex2 = this->unk_2AC;
+ objectSlot2 = this->an4ObjectSlot;
}
- if (objectIndex2 >= 0) {
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex2].segment);
+ if (objectSlot2 >= 0) {
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectSlot2].segment);
isAnimFinished = SkelAnime_Update(&this->skelAnime);
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectSlot].segment);
}
return isAnimFinished;
}
s32 DmAn_ChangeAnim(DmAn* this, PlayState* play, s32 animIndex) {
- s8 objectIndex = this->actor.objBankIndex;
- s8 objectIndex2;
+ s8 objectSlot = this->actor.objectSlot;
+ s8 objectSlot2;
s32 didAnimChange = false;
if (animIndex <= DMAN_ANIM_1) {
- objectIndex2 = this->actor.objBankIndex;
+ objectSlot2 = this->actor.objectSlot;
} else {
- objectIndex2 = this->unk_2AC;
+ objectSlot2 = this->an4ObjectSlot;
}
- if ((objectIndex2 >= 0) && (this->animIndex != animIndex)) {
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex2].segment);
+ if ((objectSlot2 >= 0) && (this->animIndex != animIndex)) {
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectSlot2].segment);
this->animIndex = animIndex;
didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex);
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectSlot].segment);
}
return didAnimChange;
@@ -191,8 +191,8 @@ Actor* func_80C1C8E8(PlayState* play) {
}
void func_80C1C958(DmAn* this, PlayState* play) {
- if ((this->unk_2AC >= 0) && SubS_IsObjectLoaded(this->unk_2AC, play) && (this->unk_2AD >= 0) &&
- SubS_IsObjectLoaded(this->unk_2AD, play)) {
+ if ((this->an4ObjectSlot > OBJECT_SLOT_NONE) && SubS_IsObjectLoaded(this->an4ObjectSlot, play) &&
+ (this->msmoObjectSlot > OBJECT_SLOT_NONE) && SubS_IsObjectLoaded(this->msmoObjectSlot, play)) {
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 14.0f);
SkelAnime_InitFlex(play, &this->skelAnime, &object_an1_Skel_012618, NULL, this->jointTable, this->morphTable,
OBJECT_AN1_LIMB_MAX);
@@ -273,8 +273,8 @@ void DmAn_DoNothing(DmAn* this, PlayState* play) {
void DmAn_Init(Actor* thisx, PlayState* play) {
DmAn* this = THIS;
- this->unk_2AC = SubS_GetObjectIndex(OBJECT_AN4, play);
- this->unk_2AD = SubS_GetObjectIndex(OBJECT_MSMO, play);
+ this->an4ObjectSlot = SubS_GetObjectSlot(OBJECT_AN4, play);
+ this->msmoObjectSlot = SubS_GetObjectSlot(OBJECT_MSMO, play);
this->actionFunc = func_80C1C958;
}
@@ -302,8 +302,8 @@ Vec3f D_80C1D2DC = { 1000.0f, 0.0f, 0.0f };
void func_80C1CD80(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
s32 pad[2];
DmAn* this = THIS;
- s8 sp2B = this->actor.objBankIndex;
- s8 sp2A = this->unk_2AD;
+ s8 objectSlot = this->actor.objectSlot;
+ s8 msmoObjectSlot = this->msmoObjectSlot;
if ((limbIndex == OBJECT_AN1_LIMB_05) && this->didAnimChangeInCs) {
OPEN_DISPS(play->state.gfxCtx);
@@ -312,9 +312,9 @@ void func_80C1CD80(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Acto
Matrix_TranslateRotateZYX(&D_80C1D2C8, &D_80C1D2D4);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[sp2A].segment);
+ gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[msmoObjectSlot].segment);
gSPDisplayList(POLY_OPA_DISP++, gMoonMaskDL);
- gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[sp2B].segment);
+ gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[objectSlot].segment);
Matrix_Pop();
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 c1e85d3eb..00931d731 100644
--- a/src/overlays/actors/ovl_Dm_An/z_dm_an.h
+++ b/src/overlays/actors/ovl_Dm_An/z_dm_an.h
@@ -18,8 +18,8 @@ typedef struct DmAn {
/* 0x1A4 */ Vec3s unk_1AA;
/* 0x1B0 */ Vec3s jointTable[OBJECT_AN1_LIMB_MAX];
/* 0x22E */ Vec3s morphTable[OBJECT_AN1_LIMB_MAX];
- /* 0x2AC */ s8 unk_2AC;
- /* 0x2AD */ s8 unk_2AD;
+ /* 0x2AC */ s8 an4ObjectSlot;
+ /* 0x2AD */ s8 msmoObjectSlot;
/* 0x2AE */ u16 unk_2AE;
/* 0x2B0 */ u8 cueId;
/* 0x2B4 */ Actor* unk_2B4;
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 764b00224..d224694ec 100644
--- a/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c
+++ b/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c
@@ -176,7 +176,7 @@ void func_80AA8698(DmChar01* this, PlayState* play) {
D_80AAAAB4 = false;
}
- if ((player->transformation == PLAYER_FORM_DEKU) && (play->msgCtx.ocarinaMode == 3) &&
+ if ((player->transformation == PLAYER_FORM_DEKU) && (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) &&
(play->msgCtx.lastPlayedSong == OCARINA_SONG_SONATA)) {
if ((player2->actor.world.pos.x > -40.0f) && (player2->actor.world.pos.x < 40.0f) &&
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 9f30d4343..d7d7460c8 100644
--- a/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c
+++ b/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c
@@ -72,10 +72,10 @@ void DmChar03_Destroy(Actor* thisx, PlayState* play) {
}
void func_80AAB5F8(DmChar03* this, PlayState* play) {
- s32 index = Object_GetIndex(&play->objectCtx, OBJECT_GI_NUTSMASK);
+ s32 objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_GI_NUTSMASK);
- if (index >= 0) {
- this->objectIndex = index;
+ if (objectSlot > OBJECT_SLOT_NONE) {
+ this->objectSlot = objectSlot;
this->actionFunc = func_80AAB644;
}
}
@@ -187,13 +187,13 @@ void DmChar03_Draw(Actor* thisx, PlayState* play) {
void func_80AABA84(PlayState* play, DmChar03* this) {
s32 pad;
- if (this->actor.objBankIndex == this->objectIndex) {
+ if (this->actor.objectSlot == this->objectSlot) {
Matrix_Translate(this->offset.x, this->offset.y, this->offset.z, MTXMODE_NEW);
Matrix_RotateZYX(0, (play->gameplayFrames * 0x3E8), 0, MTXMODE_APPLY);
Matrix_Scale(0.2f, 0.2f, 0.2f, MTXMODE_APPLY);
GetItem_Draw(play, GID_MASK_DEKU);
}
- if (Object_IsLoaded(&play->objectCtx, this->objectIndex)) {
- this->actor.objBankIndex = this->objectIndex;
+ if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) {
+ this->actor.objectSlot = this->objectSlot;
}
}
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 5b4a2e621..3b60c18c2 100644
--- a/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.h
+++ b/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.h
@@ -13,7 +13,7 @@ typedef struct DmChar03 {
/* 0x188 */ DmChar03ActionFunc actionFunc;
/* 0x18C */ s16 animIndex;
/* 0x18E */ u8 unk_18E;
- /* 0x18F */ u8 objectIndex;
+ /* 0x18F */ u8 objectSlot;
/* 0x190 */ Vec3f offset;
} DmChar03; // size = 0x19C
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 192e040a9..43c049f97 100644
--- a/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c
+++ b/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c
@@ -178,10 +178,10 @@ void DmChar05_Destroy(Actor* thisx, PlayState* play) {
}
void func_80AAC990(DmChar05* this, PlayState* play) {
- s32 objectIdx = Object_GetIndex(&play->objectCtx, OBJECT_GI_GOLONMASK);
+ s32 objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_GI_GOLONMASK);
- if (objectIdx >= 0) {
- this->unk_18F = objectIdx;
+ if (objectSlot > OBJECT_SLOT_NONE) {
+ this->objectSlot = objectSlot;
this->actionFunc = func_80AAC9DC;
}
}
@@ -200,10 +200,10 @@ void func_80AAC9DC(DmChar05* this, PlayState* play) {
}
void func_80AACA98(DmChar05* this, PlayState* play) {
- s32 objectIdx = Object_GetIndex(&play->objectCtx, OBJECT_GI_MASK13);
+ s32 objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_GI_MASK13);
- if (objectIdx >= 0) {
- this->unk_18F = objectIdx;
+ if (objectSlot > OBJECT_SLOT_NONE) {
+ this->objectSlot = objectSlot;
this->actionFunc = func_80AACAE4;
}
}
@@ -227,15 +227,15 @@ void func_80AACAE4(DmChar05* this, PlayState* play) {
}
void func_80AACBE4(DmChar05* this, PlayState* play) {
- static s16 D_80AAE2F0[] = {
+ static s16 sObjectIds[] = {
OBJECT_GI_MASK17, OBJECT_GI_MASK14, OBJECT_GI_MASK10, OBJECT_GI_MASK21,
OBJECT_GI_MASK11, OBJECT_GI_MASK20, OBJECT_GI_RABIT_MASK, OBJECT_GI_MASK12,
};
s32 params = DMCHAR05_GET(&this->actor) - DMCHAR05_5;
- s32 objectIdx = Object_GetIndex(&play->objectCtx, D_80AAE2F0[params]);
+ s32 objectSlot = Object_GetSlot(&play->objectCtx, sObjectIds[params]);
- if (objectIdx >= 0) {
- this->unk_18F = objectIdx;
+ if (objectSlot > OBJECT_SLOT_NONE) {
+ this->objectSlot = objectSlot;
this->actionFunc = func_80AACD0C;
}
}
@@ -278,10 +278,10 @@ void func_80AACD0C(DmChar05* this, PlayState* play) {
}
void func_80AACD1C(DmChar05* this, PlayState* play) {
- s32 objectIdx = Object_GetIndex(&play->objectCtx, OBJECT_GI_ZORAMASK);
+ s32 objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_GI_ZORAMASK);
- if (objectIdx >= 0) {
- this->unk_18F = objectIdx;
+ if (objectSlot > OBJECT_SLOT_NONE) {
+ this->objectSlot = objectSlot;
this->actionFunc = func_80AACD68;
}
}
@@ -298,10 +298,10 @@ void func_80AACD68(DmChar05* this, PlayState* play) {
}
void func_80AACE10(DmChar05* this, PlayState* play) {
- s32 objectIdx = Object_GetIndex(&play->objectCtx, OBJECT_GI_MASK15);
+ s32 objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_GI_MASK15);
- if (objectIdx >= 0) {
- this->unk_18F = objectIdx;
+ if (objectSlot > OBJECT_SLOT_NONE) {
+ this->objectSlot = objectSlot;
this->actionFunc = func_80AACE5C;
}
}
@@ -723,55 +723,55 @@ void DmChar05_Draw(Actor* thisx, PlayState* play) {
}
void func_80AADD9C(PlayState* play, DmChar05* this) {
- if (this->actor.objBankIndex == this->unk_18F) {
+ if (this->actor.objectSlot == this->objectSlot) {
Matrix_Translate(this->unk_190.x, this->unk_190.y, this->unk_190.z, MTXMODE_NEW);
Matrix_RotateZYX(0, play->gameplayFrames * 1000, 0, MTXMODE_APPLY);
Matrix_Scale(0.2f, 0.2f, 0.2f, MTXMODE_APPLY);
GetItem_Draw(play, GID_MASK_GORON);
}
- if (Object_IsLoaded(&play->objectCtx, this->unk_18F)) {
- this->actor.objBankIndex = this->unk_18F;
+ if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) {
+ this->actor.objectSlot = this->objectSlot;
}
}
void func_80AADE78(PlayState* play, DmChar05* this) {
- if (this->actor.objBankIndex == this->unk_18F) {
+ if (this->actor.objectSlot == this->objectSlot) {
Matrix_Translate(this->unk_190.x, this->unk_190.y, this->unk_190.z, MTXMODE_NEW);
Matrix_RotateZYX(0, play->gameplayFrames * 1000, 0, MTXMODE_APPLY);
Matrix_Scale(0.2f, 0.2f, 0.2f, MTXMODE_APPLY);
GetItem_Draw(play, GID_MASK_ZORA);
}
- if (Object_IsLoaded(&play->objectCtx, this->unk_18F)) {
- this->actor.objBankIndex = this->unk_18F;
+ if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) {
+ this->actor.objectSlot = this->objectSlot;
}
}
void func_80AADF54(PlayState* play, DmChar05* this) {
- if (this->actor.objBankIndex == this->unk_18F) {
+ if (this->actor.objectSlot == this->objectSlot) {
Matrix_Translate(this->unk_190.x, this->unk_190.y, this->unk_190.z, MTXMODE_NEW);
Matrix_RotateZYX(0, play->gameplayFrames * 1000, 0, MTXMODE_APPLY);
Matrix_Scale(0.2f, 0.2f, 0.2f, MTXMODE_APPLY);
GetItem_Draw(play, GID_MASK_GIBDO);
}
- if (Object_IsLoaded(&play->objectCtx, this->unk_18F)) {
- this->actor.objBankIndex = this->unk_18F;
+ if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) {
+ this->actor.objectSlot = this->objectSlot;
}
}
void func_80AAE030(PlayState* play, DmChar05* this) {
if (this->unk_18E != 0) {
- if (this->actor.objBankIndex == this->unk_18F) {
+ if (this->actor.objectSlot == this->objectSlot) {
Matrix_Translate(this->unk_190.x, this->unk_190.y, this->unk_190.z, MTXMODE_NEW);
Matrix_RotateZYX(0, play->gameplayFrames * 1000, 0, MTXMODE_APPLY);
Matrix_Scale(0.2f, 0.2f, 0.2f, MTXMODE_APPLY);
GetItem_Draw(play, GID_MASK_COUPLE);
}
- if (Object_IsLoaded(&play->objectCtx, this->unk_18F)) {
- this->actor.objBankIndex = this->unk_18F;
+ if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) {
+ this->actor.objectSlot = this->objectSlot;
}
}
}
@@ -784,14 +784,14 @@ void func_80AAE114(PlayState* play, DmChar05* this) {
};
getItemDrawIndex = DMCHAR05_GET(&this->actor) - DMCHAR05_5;
- if (this->actor.objBankIndex == this->unk_18F) {
+ if (this->actor.objectSlot == this->objectSlot) {
Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, MTXMODE_NEW);
Matrix_RotateZYX(0, play->gameplayFrames * 1000, 0, MTXMODE_APPLY);
Matrix_Scale(0.2f, 0.2f, 0.2f, MTXMODE_APPLY);
GetItem_Draw(play, getItemDrawIds[getItemDrawIndex]);
}
- if (Object_IsLoaded(&play->objectCtx, this->unk_18F)) {
- this->actor.objBankIndex = this->unk_18F;
+ if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) {
+ this->actor.objectSlot = this->objectSlot;
}
}
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 62500ec9c..a690cd50f 100644
--- a/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.h
+++ b/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.h
@@ -31,7 +31,7 @@ typedef struct DmChar05 {
/* 0x188 */ DmChar05ActionFunc actionFunc;
/* 0x18C */ s16 animIndex;
/* 0x18E */ u8 unk_18E;
- /* 0x18F */ u8 unk_18F;
+ /* 0x18F */ u8 objectSlot;
/* 0x190 */ Vec3f unk_190;
/* 0x19C */ u32 unk_19C;
/* 0x1A0 */ u32 unk_1A0;
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 0948b7afc..250abea20 100644
--- a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c
+++ b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c
@@ -266,7 +266,7 @@ void DmChar08_WaitForSong(DmChar08* this, PlayState* play) {
} else {
sSuccessSoundAlreadyPlayed = false;
}
- if ((player->transformation == PLAYER_FORM_ZORA) && (play->msgCtx.ocarinaMode == 3) &&
+ if ((player->transformation == PLAYER_FORM_ZORA) && (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) &&
(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)) {
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 2f7435053..3994c8fce 100644
--- a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c
+++ b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c
@@ -70,41 +70,41 @@ static AnimationInfoS sAnimationInfo[DMGM_ANIM_MAX] = {
};
s32 DmGm_UpdateSkelAnime(DmGm* this, PlayState* play) {
- s8 objectIndex = this->actor.objBankIndex;
+ s8 objectSlot = this->actor.objectSlot;
s8 objectIndex2;
s32 isAnimFinished = false;
if (this->animIndex <= DMGM_ANIM_1) {
- objectIndex2 = this->actor.objBankIndex;
+ objectIndex2 = this->actor.objectSlot;
} else {
- objectIndex2 = this->unk_2AC;
+ objectIndex2 = this->an4ObjectSlot;
}
if (objectIndex2 >= 0) {
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex2].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex2].segment);
isAnimFinished = SkelAnime_Update(&this->skelAnime);
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectSlot].segment);
}
return isAnimFinished;
}
s32 DmGm_ChangeAnim(DmGm* this, PlayState* play, s32 animIndex) {
- s8 objectIndex = this->actor.objBankIndex;
+ s8 objectSlot = this->actor.objectSlot;
s8 objectIndex2;
s32 didAnimChange = false;
if (animIndex <= DMGM_ANIM_1) {
- objectIndex2 = this->actor.objBankIndex;
+ objectIndex2 = this->actor.objectSlot;
} else {
- objectIndex2 = this->unk_2AC;
+ objectIndex2 = this->an4ObjectSlot;
}
if ((objectIndex2 >= 0) && (this->animIndex != animIndex)) {
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex2].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex2].segment);
this->animIndex = animIndex;
didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex);
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectSlot].segment);
}
return didAnimChange;
@@ -191,8 +191,8 @@ Actor* func_80C24838(PlayState* play) {
}
void func_80C248A8(DmGm* this, PlayState* play) {
- if ((this->unk_2AC >= 0) && SubS_IsObjectLoaded(this->unk_2AC, play) && (this->unk_2AD >= 0) &&
- SubS_IsObjectLoaded(this->unk_2AD, play)) {
+ if ((this->an4ObjectSlot > OBJECT_SLOT_NONE) && SubS_IsObjectLoaded(this->an4ObjectSlot, play) &&
+ (this->msmoObjectSlot > OBJECT_SLOT_NONE) && SubS_IsObjectLoaded(this->msmoObjectSlot, play)) {
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 14.0f);
SkelAnime_InitFlex(play, &this->skelAnime, &object_an1_Skel_012618, NULL, this->jointTable, this->morphTable,
OBJECT_AN1_LIMB_MAX);
@@ -273,8 +273,8 @@ void DmGm_DoNothing(DmGm* this, PlayState* play) {
void DmGm_Init(Actor* thisx, PlayState* play) {
DmGm* this = THIS;
- this->unk_2AC = SubS_GetObjectIndex(OBJECT_AN4, play);
- this->unk_2AD = SubS_GetObjectIndex(OBJECT_MSMO, play);
+ this->an4ObjectSlot = SubS_GetObjectSlot(OBJECT_AN4, play);
+ this->msmoObjectSlot = SubS_GetObjectSlot(OBJECT_MSMO, play);
this->actionFunc = func_80C248A8;
}
@@ -302,8 +302,8 @@ Vec3f D_80C2522C = { 1000.0f, 0.0f, 0.0f };
void DmGm_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
s32 pad[2];
DmGm* this = THIS;
- s8 sp2B = this->actor.objBankIndex;
- s8 sp2A = this->unk_2AD;
+ s8 sp2B = this->actor.objectSlot;
+ s8 sp2A = this->msmoObjectSlot;
if ((limbIndex == OBJECT_AN1_LIMB_05) && this->didAnimChangeInCs) {
OPEN_DISPS(play->state.gfxCtx);
@@ -312,9 +312,9 @@ void DmGm_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
Matrix_TranslateRotateZYX(&D_80C25218, &D_80C25224);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[sp2A].segment);
+ gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[sp2A].segment);
gSPDisplayList(POLY_OPA_DISP++, gMoonMaskDL);
- gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[sp2B].segment);
+ gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[sp2B].segment);
Matrix_Pop();
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 e54ee07ee..8abcba712 100644
--- a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h
+++ b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h
@@ -18,8 +18,8 @@ typedef struct DmGm {
/* 0x1A4 */ Vec3s unk_1AA;
/* 0x1B0 */ Vec3s jointTable[OBJECT_AN1_LIMB_MAX];
/* 0x22E */ Vec3s morphTable[OBJECT_AN1_LIMB_MAX];
- /* 0x2AC */ s8 unk_2AC;
- /* 0x2AD */ s8 unk_2AD;
+ /* 0x2AC */ s8 an4ObjectSlot;
+ /* 0x2AD */ s8 msmoObjectSlot;
/* 0x2AE */ u16 unk_2AE;
/* 0x2B0 */ u8 cueId;
/* 0x2B4 */ Actor* unk_2B4;
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 a2a2589fb..b28a44d1b 100644
--- a/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.c
+++ b/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.c
@@ -5,6 +5,7 @@
*/
#include "z_dm_hina.h"
+#include "objects/gameplay_keep/gameplay_keep.h"
#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20)
@@ -20,7 +21,6 @@ void func_80A1F56C(DmHina* this, PlayState* play);
void func_80A1F5AC(DmHina* this, PlayState* play);
void func_80A1F63C(DmHina* this, PlayState* play);
-#if 0
ActorInit Dm_Hina_InitVars = {
ACTOR_DM_HINA,
ACTORCAT_ITEMACTION,
@@ -33,24 +33,163 @@ ActorInit Dm_Hina_InitVars = {
(ActorFunc)DmHina_Draw,
};
-#endif
+void DmHina_Init(Actor* thisx, PlayState* play) {
+ DmHina* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/DmHina_Init.s")
+ this->isDrawn = true;
+ this->actionFunc = func_80A1F470;
+ this->unk158 = this->actor.world.pos.y;
+ this->unk148 = 0.0f;
+ this->unk15C = 1.0f;
+ this->actor.focus.pos.x = this->actor.world.pos.x;
+ this->actor.focus.pos.y = this->actor.world.pos.y;
+ this->actor.focus.pos.z = this->actor.world.pos.z;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/DmHina_Destroy.s")
+void DmHina_Destroy(Actor* thisx, PlayState* play) {
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/func_80A1F470.s")
+void func_80A1F470(DmHina* this, PlayState* play) {
+ Player* player = GET_PLAYER(play);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/func_80A1F56C.s")
+ Math_SmoothStepToF(&this->unk148, 0.6f, 0.5f, 0.05f, 0.001f);
+ this->unk154 = Math_SinS(play->gameplayFrames * 0x708) * 8.0f;
+ if ((player->stateFlags1 & PLAYER_STATE1_400) && (this->actor.xzDistToPlayer < 80.0f)) {
+ this->isDrawn = false;
+ this->unk154 = 0.0f;
+ this->actor.world.pos.y += 40.0f;
+ this->actionFunc = func_80A1F56C;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/func_80A1F5AC.s")
+void func_80A1F56C(DmHina* this, PlayState* play) {
+ if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) {
+ this->unk17C = 2;
+ this->actionFunc = func_80A1F5AC;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/func_80A1F63C.s")
+void func_80A1F5AC(DmHina* this, PlayState* play) {
+ this->unk17C--;
+ if (this->unk17C == 0) {
+ this->isDrawn = true;
+ Cutscene_StartManual(play, &play->csCtx);
+ this->subCamId = Play_CreateSubCamera(play);
+ Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT);
+ Play_ChangeCameraStatus(play, this->subCamId, CAM_STATUS_ACTIVE);
+ this->actionFunc = func_80A1F63C;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/func_80A1F75C.s")
+void func_80A1F63C(DmHina* this, PlayState* play) {
+ this->subCamEye.x = this->actor.world.pos.x + 100.0f;
+ this->subCamEye.y = this->unk158 + 260.0f;
+ this->subCamEye.z = this->actor.world.pos.z + 100.0f;
+ this->subCamAt.x = this->actor.world.pos.x;
+ this->subCamAt.y = this->actor.world.pos.y + this->unk154 * this->unk15C + 40.0f * this->unk15C;
+ this->subCamAt.z = this->actor.world.pos.z;
+ Play_SetCameraAtEye(play, this->subCamId, &this->subCamAt, &this->subCamEye);
+ Math_SmoothStepToF(&this->actor.world.pos.y, this->unk158 + 300.0f, 0.5f, 2.0f, 0.1f);
+ if (((this->unk158 + 240.0f) < this->actor.world.pos.y) && (this->unk17E != 1)) {
+ this->unk17E = 1;
+ Actor_PlaySfx(&this->actor, NA_SE_OC_WHITE_OUT_INTO_KYOJIN);
+ }
+ Actor_PlaySfx(&this->actor, NA_SE_EV_MASK_RISING - SFX_FLAG);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/DmHina_Update.s")
+void func_80A1F75C(DmHina* this, PlayState* play) {
+ s32 i;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/func_80A1F9AC.s")
+ switch (this->unk17E) {
+ case 0:
+ this->unk17F = 0;
+ this->unk14C = 0.0f;
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/DmHina_Draw.s")
+ case 1:
+ Math_SmoothStepToF(&this->unk14C, 1.0f, 0.4f, 0.05f, 0.001f);
+ this->unk17F = this->unk14C * 255.0f;
+ this->unk150 = Math_SinS(play->state.frames * 0x1F40);
+ for (i = 0; i < ARRAY_COUNT(play->envCtx.adjLightSettings.light1Color); i++) {
+ play->envCtx.adjLightSettings.ambientColor[i] = play->envCtx.adjLightSettings.fogColor[i] =
+ play->envCtx.adjLightSettings.light1Color[i] = -255.0f * this->unk14C;
+ }
+
+ play->envCtx.adjLightSettings.fogNear = -500.0f * this->unk14C;
+ if (play->envCtx.adjLightSettings.fogNear < -300) {
+ play->roomCtx.curRoom.segment = NULL;
+ }
+ break;
+
+ default:
+ break;
+ }
+}
+
+void DmHina_Update(Actor* thisx, PlayState* play) {
+ DmHina* this = THIS;
+
+ this->actionFunc(this, play);
+ func_80A1F75C(this, play);
+}
+
+void func_80A1F9AC(DmHina* this, PlayState* play) {
+ GraphicsContext* gfxCtx = play->state.gfxCtx;
+
+ if (this->unk17E != 0) {
+ OPEN_DISPS(gfxCtx);
+
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
+
+ gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, (u8)(this->unk14C * 100.0f) + 155, this->unk17F);
+ gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, (u8)(this->unk150 * 100.0f) + 50, 0);
+ gSPDisplayList(POLY_XLU_DISP++, gLightOrbMaterial1DL);
+
+ Matrix_Translate(this->actor.world.pos.x,
+ this->actor.world.pos.y + (this->unk154 * this->unk15C) + (40.0f * this->unk15C),
+ this->actor.world.pos.z, MTXMODE_NEW);
+ Matrix_ReplaceRotation(&play->billboardMtxF);
+ Matrix_Scale(this->unk14C * 20.0f, this->unk14C * 20.0f, this->unk14C * 20.0f, MTXMODE_APPLY);
+ Matrix_RotateZF(Rand_ZeroFloat(2 * M_PI), MTXMODE_APPLY);
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, gLightOrbModelDL);
+
+ CLOSE_DISPS(gfxCtx);
+ }
+}
+
+void DmHina_Draw(Actor* thisx, PlayState* play) {
+ DmHina* this = THIS;
+ f32 scale;
+
+ if (this->isDrawn) {
+ Matrix_Translate(this->actor.world.pos.x,
+ this->actor.world.pos.y + (this->unk154 * this->unk15C) + (40.0f * this->unk15C),
+ this->actor.world.pos.z, MTXMODE_NEW);
+ Matrix_RotateZYX(0, play->gameplayFrames * 0x3E8, 0, MTXMODE_APPLY);
+ scale = this->unk148 * (1.0f - this->unk14C) * this->unk15C;
+ Matrix_Scale(scale, scale, scale, MTXMODE_APPLY);
+ switch (this->actor.params) {
+ case 0:
+ GetItem_Draw(play, GID_REMAINS_ODOLWA);
+ break;
+
+ case 1:
+ GetItem_Draw(play, GID_REMAINS_GOHT);
+ break;
+
+ case 2:
+ GetItem_Draw(play, GID_REMAINS_GYORG);
+ break;
+
+ case 3:
+ GetItem_Draw(play, GID_REMAINS_TWINMOLD);
+ break;
+
+ default:
+ break;
+ }
+ func_80A1F9AC(this, play);
+ }
+}
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 21c9e55dc..a3ef636be 100644
--- a/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.h
+++ b/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.h
@@ -10,10 +10,20 @@ typedef void (*DmHinaActionFunc)(struct DmHina*, PlayState*);
typedef struct DmHina {
/* 0x000 */ Actor actor;
/* 0x144 */ DmHinaActionFunc actionFunc;
- /* 0x148 */ char unk_148[0x10];
- /* 0x158 */ f32 unk_158;
- /* 0x15C */ f32 unk_15C;
- /* 0x160 */ char unk_160[0x24];
+ /* 0x148 */ f32 unk148;
+ /* 0x14C */ f32 unk14C;
+ /* 0x150 */ f32 unk150;
+ /* 0x154 */ f32 unk154;
+ /* 0x158 */ f32 unk158;
+ /* 0x15C */ f32 unk15C;
+ /* 0x160 */ Vec3f subCamEye;
+ /* 0x16C */ Vec3f subCamAt;
+ /* 0x178 */ UNK_TYPE1 pad178[2];
+ /* 0x17A */ s16 subCamId;
+ /* 0x17C */ s16 unk17C;
+ /* 0x17E */ u8 unk17E;
+ /* 0x17F */ u8 unk17F;
+ /* 0x180 */ u8 isDrawn;
} DmHina; // size = 0x184
#endif // Z_DM_HINA_H
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 b13fbd9d7..b26948090 100644
--- a/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.c
+++ b/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.c
@@ -47,7 +47,7 @@ void DmOpstage_Init(Actor* thisx, PlayState* play) {
if (DMOPSTAGE_GET_TYPE(&this->dyna.actor) == DMOPSTAGE_TYPE_GROUND) {
DynaPolyActor_Init(&this->dyna, 0);
- DynaPolyActor_LoadMesh(play, &this->dyna, &gKeikokuDemoFloorColliderHeader);
+ DynaPolyActor_LoadMesh(play, &this->dyna, &gKeikokuDemoFloorCol);
}
if (DMOPSTAGE_GET_TYPE(&this->dyna.actor) > DMOPSTAGE_TYPE_GROUND) {
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 9b1d0f048..e4f85e15c 100644
--- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c
+++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c
@@ -307,20 +307,20 @@ static AnimationInfo sAnimationInfo[SK_ANIM_LAUGH_AFTER_MAX] = {
* Ensures the correct object for the current animation is in segment 6.
*/
void DmStk_LoadObjectForAnimation(DmStk* this, PlayState* play) {
- s32 objectIndex;
+ s32 objectSlot;
if (((this->animIndex >= SK_ANIM_SHAKE_HEAD) && (this->animIndex <= SK_ANIM_BENT_OVER_HEAD_TWITCH)) ||
(this->animIndex == SK_ANIM_CALL_DOWN_MOON_START) || (this->animIndex == SK_ANIM_CALL_DOWN_MOON_LOOP) ||
(this->animIndex == SK_ANIM_TELESCOPE_LOOK_UP_START) || (this->animIndex == SK_ANIM_TELESCOPE_LOOK_UP_LOOP)) {
- objectIndex = this->objectStkObjectIndex;
+ objectSlot = this->objectStkObjectSlot;
} else if (this->animIndex >= SK_ANIM_LOOK_UP_AT_GIANTS) {
- objectIndex = this->objectStk3ObjectIndex;
+ objectSlot = this->objectStk3ObjectSlot;
} else {
- objectIndex = this->objectStk2ObjectIndex;
+ objectSlot = this->objectStk2ObjectSlot;
}
- if (objectIndex >= 0) {
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex].segment);
+ if (objectSlot > OBJECT_SLOT_NONE) {
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectSlot].segment);
}
}
@@ -1062,10 +1062,10 @@ void DmStk_Init(Actor* thisx, PlayState* play) {
this->shouldDraw = true;
if (DM_STK_GET_TYPE(&this->actor) != DM_STK_TYPE_MAJORAS_MASK) {
this->dekuPipesCutsceneState = SK_DEKU_PIPES_CS_STATE_NOT_READY;
- this->objectStkObjectIndex = Object_GetIndex(&play->objectCtx, OBJECT_STK);
- this->objectStk2ObjectIndex = Object_GetIndex(&play->objectCtx, OBJECT_STK2);
- this->objectStk3ObjectIndex = Object_GetIndex(&play->objectCtx, OBJECT_STK3);
- if (this->objectStkObjectIndex < 0) {
+ this->objectStkObjectSlot = Object_GetSlot(&play->objectCtx, OBJECT_STK);
+ this->objectStk2ObjectSlot = Object_GetSlot(&play->objectCtx, OBJECT_STK2);
+ this->objectStk3ObjectSlot = Object_GetSlot(&play->objectCtx, OBJECT_STK3);
+ if (this->objectStkObjectSlot <= OBJECT_SLOT_NONE) {
Actor_Kill(&this->actor);
}
@@ -1073,9 +1073,9 @@ void DmStk_Init(Actor* thisx, PlayState* play) {
this->deflectCount = 0;
this->maskType = SK_MASK_TYPE_NORMAL;
this->animIndex = SK_ANIM_IDLE;
- this->fogR = play->lightCtx.fogColor.r;
- this->fogG = play->lightCtx.fogColor.g;
- this->fogB = play->lightCtx.fogColor.b;
+ this->fogR = play->lightCtx.fogColor[0];
+ this->fogG = play->lightCtx.fogColor[1];
+ this->fogB = play->lightCtx.fogColor[2];
if ((play->sceneId == SCENE_LOST_WOODS) && (gSaveContext.sceneLayer == 1)) {
this->alpha = 0;
@@ -1643,9 +1643,9 @@ void DmStk_HandleCutscene(DmStk* this, PlayState* play) {
this->fadeInState++;
}
- this->fogR = play->lightCtx.fogColor.r * this->fogScale;
- this->fogG = play->lightCtx.fogColor.g * this->fogScale;
- this->fogB = play->lightCtx.fogColor.b * this->fogScale;
+ this->fogR = play->lightCtx.fogColor[0] * this->fogScale;
+ this->fogG = play->lightCtx.fogColor[1] * this->fogScale;
+ this->fogB = play->lightCtx.fogColor[2] * this->fogScale;
} else if (this->fadeInState == SK_FADE_IN_STATE_INCREASE_FOG) {
if (this->fogN < 996) {
this->fogN += 10;
@@ -1867,7 +1867,7 @@ void DmStk_Update(Actor* thisx, PlayState* play) {
// This code is responsible for making in-game time pass while using the telescope in the Astral Observatory.
// Skull Kid is always loaded in the scene, even if he isn't visible, hence why time always passes.
- if ((play->actorCtx.flags & ACTORCTX_FLAG_1) && (play->msgCtx.msgMode != 0) &&
+ if ((play->actorCtx.flags & ACTORCTX_FLAG_1) && (play->msgCtx.msgMode != MSGMODE_NONE) &&
(play->msgCtx.currentTextId == 0x5E6) && !FrameAdvance_IsEnabled(&play->state) &&
(play->transitionTrigger == TRANS_TRIGGER_OFF) && (CutsceneManager_GetCurrentCsId() == CS_ID_NONE) &&
(play->csCtx.state == CS_STATE_IDLE)) {
@@ -1965,18 +1965,18 @@ void DmStk_PostLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot
if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_513) &&
(play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_513)]->id == 2) &&
- (this->objectStk2ObjectIndex >= 0)) {
+ (this->objectStk2ObjectSlot > OBJECT_SLOT_NONE)) {
Matrix_Push();
Matrix_Scale(2.0f, 2.0f, 2.0f, MTXMODE_APPLY);
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->objectStk2ObjectIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->objectStk2ObjectSlot].segment);
- gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->objectStk2ObjectIndex].segment);
+ gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->objectStk2ObjectSlot].segment);
AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gSkullKidMajorasMaskCurseOverlayTexAnim));
Gfx_DrawDListOpa(play, gSkullKidMajorasMaskCurseOverlayDL);
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->objectStkObjectIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->objectStkObjectSlot].segment);
- gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->objectStkObjectIndex].segment);
+ gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->objectStkObjectSlot].segment);
Matrix_Pop();
}
@@ -1998,17 +1998,17 @@ void DmStk_PostLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot
switch (this->handType) {
case SK_HAND_TYPE_HOLDING_LINK_MASK_AND_FLUTE:
- gSPDisplayList(POLY_OPA_DISP++, gSkullKidUntexturedRightHand);
+ gSPDisplayList(POLY_OPA_DISP++, gSkullKidUntexturedRightHandDL);
gSPDisplayList(POLY_OPA_DISP++, gSkullKidLinkMask2DL);
break;
case SK_HAND_TYPE_HOLDING_LINK_MASK:
- gSPDisplayList(POLY_OPA_DISP++, gSkullKidMaskHoldingRightHand);
+ gSPDisplayList(POLY_OPA_DISP++, gSkullKidMaskHoldingRightHandDL);
gSPDisplayList(POLY_OPA_DISP++, gSkullKidLinkMask3DL);
break;
case SK_HAND_TYPE_HOLDING_OCARINA:
- gSPDisplayList(POLY_OPA_DISP++, gSkullKidOcarinaHoldingRightHand);
+ gSPDisplayList(POLY_OPA_DISP++, gSkullKidOcarinaHoldingRightHandDL);
if ((play->sceneId == SCENE_LOST_WOODS) && (gSaveContext.sceneLayer == 1)) {
gSPDisplayList(POLY_OPA_DISP++, gSkullKidOcarinaOfTimeDL);
@@ -2042,11 +2042,11 @@ void DmStk_PostLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot
break;
case SK_HAND_TYPE_HOLDING_LINK_MASK:
- gSPDisplayList(POLY_OPA_DISP++, gSkullKidUntexturedLeftHand);
+ gSPDisplayList(POLY_OPA_DISP++, gSkullKidUntexturedLeftHandDL);
break;
case SK_HAND_TYPE_HOLDING_MAJORAS_MASK:
- gSPDisplayList(POLY_OPA_DISP++, gSkullKidTwoFingersExtendedLeftHand);
+ gSPDisplayList(POLY_OPA_DISP++, gSkullKidTwoFingersExtendedLeftHandDL);
gSPDisplayList(POLY_OPA_DISP++, gSkullKidMajorasMask2DL);
break;
@@ -2054,21 +2054,21 @@ void DmStk_PostLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot
if ((play->sceneId != SCENE_LOST_WOODS) || (gSaveContext.sceneLayer != 1)) {
gSPDisplayList(POLY_OPA_DISP++, gSkullKidOcarinaOfTimeDL);
}
- gSPDisplayList(POLY_OPA_DISP++, gSkullKidTwoFingersExtendedLeftHand);
+ gSPDisplayList(POLY_OPA_DISP++, gSkullKidTwoFingersExtendedLeftHandDL);
break;
case SK_HAND_TYPE_JUGGLING_OR_DROPPING_OCARINA:
- gSPDisplayList(POLY_OPA_DISP++, gSkullKidTwoFingersExtendedLeftHand);
+ gSPDisplayList(POLY_OPA_DISP++, gSkullKidTwoFingersExtendedLeftHandDL);
break;
case SK_HAND_TYPE_HOLDING_FLUTE:
- gSPDisplayList(POLY_OPA_DISP++, gSkullKidFluteHoldingLeftHand);
+ gSPDisplayList(POLY_OPA_DISP++, gSkullKidFluteHoldingLeftHandDL);
gSPDisplayList(POLY_OPA_DISP++, gSkullKidFluteDL);
break;
case SK_HAND_TYPE_DEFAULT:
if (this->alpha == 255) {
- gSPDisplayList(POLY_OPA_DISP++, gSkullKidOpenLeftHand);
+ gSPDisplayList(POLY_OPA_DISP++, gSkullKidOpenLeftHandDL);
}
break;
@@ -2095,7 +2095,7 @@ void DmStk_Draw(Actor* thisx, PlayState* play) {
return;
}
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->objectStkObjectIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->objectStkObjectSlot].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 cc7ac89ea..0b723019a 100644
--- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.h
+++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.h
@@ -43,9 +43,9 @@ typedef struct DmStk {
/* 0x330 */ s32 fadeOutTimer;
/* 0x334 */ u8 cueId;
/* 0x335 */ u8 hasBeenHit; // set but never used
- /* 0x336 */ s8 objectStkObjectIndex;
- /* 0x337 */ s8 objectStk2ObjectIndex;
- /* 0x338 */ s8 objectStk3ObjectIndex;
+ /* 0x336 */ s8 objectStkObjectSlot;
+ /* 0x337 */ s8 objectStk2ObjectSlot;
+ /* 0x338 */ s8 objectStk3ObjectSlot;
/* 0x339 */ u8 deflectCount;
/* 0x33A */ u8 dekuPipesCutsceneState;
/* 0x33B */ u8 shouldDraw;
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 a5c678647..4a585c779 100644
--- a/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c
+++ b/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c
@@ -41,7 +41,7 @@ typedef enum {
} DmZlAnimation;
static AnimationInfo sAnimationInfo[ZELDA_ANIM_MAX] = {
- { &gDmZl4FacingAwayHandsOverEmblemLoop, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -10.0f }, // ZELDA_ANIM_FACING_AWAY
+ { &gDmZl4FacingAwayHandsOverEmblemLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -10.0f }, // ZELDA_ANIM_FACING_AWAY
{ &gDmZl4TurningAround2Anim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -10.0f }, // ZELDA_ANIM_TURNING_TOWARD_PLAYER
{ &gDmZl4HandsOverEmblemLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -10.0f }, // ZELDA_ANIM_FACING_PLAYER
{ &gDmZl4GivingItemStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -10.0f }, // ZELDA_ANIM_GIVING_OCARINA_START
@@ -119,7 +119,7 @@ void DmZl_Init(Actor* thisx, PlayState* play) {
this->actor.targetArrowOffset = 1000.0f;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f);
// these three set to NULL should mean they are dynamically allocated
- SkelAnime_InitFlex(play, &this->skelAnime, &gZl4Skeleton, NULL, NULL, NULL, 0);
+ SkelAnime_InitFlex(play, &this->skelAnime, &gZl4Skel, NULL, NULL, NULL, 0);
DmZl_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0);
Actor_SetScale(&this->actor, 0.01f);
this->actionFunc = DmZl_DoNothing;
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 8d3fc8db4..f002bc8bd 100644
--- a/src/overlays/actors/ovl_Door_Ana/z_door_ana.c
+++ b/src/overlays/actors/ovl_Door_Ana/z_door_ana.c
@@ -132,7 +132,7 @@ void DoorAna_WaitOpen(DoorAna* this, PlayState* play) {
if (Math_StepToF(&this->actor.scale.x, 0.01f, 0.001f)) {
if ((this->actor.targetMode != TARGET_MODE_0) && (play->transitionTrigger == TRANS_TRIGGER_OFF) &&
(play->transitionMode == TRANS_MODE_OFF) && (player->stateFlags1 & PLAYER_STATE1_80000000) &&
- (player->unk_AE7 == 0)) {
+ (player->actionVar1 == 0)) {
if (grottoType == DOORANA_TYPE_VISIBLE_SCENE_EXIT) {
s32 exitIndex = DOORANA_GET_EXIT_INDEX(&this->actor);
diff --git a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c
index c6e0e4269..b0805ef59 100644
--- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c
+++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c
@@ -81,10 +81,10 @@ ShutterInfo D_808A21B0[] = {
{ object_hakugin_obj_DL_000128, gameplay_keep_DL_078A80, 130, 12, 20, 15 },
{ gGreatBayTempleObjectDoorDL, gameplay_keep_DL_078A80, 130, 12, 20, 15 },
{ object_ikana_obj_DL_014A40, gameplay_keep_DL_078A80, 130, 12, 20, 15 },
- { object_redead_obj_DL_0001A0, gameplay_keep_DL_078A80, 130, 12, 20, 15 },
+ { gBeneathTheWellSlidingDoorDL, gameplay_keep_DL_078A80, 130, 12, 20, 15 },
{ object_ikninside_obj_DL_004440, object_ikninside_obj_DL_005260, 130, 0, 20, 15 },
- { object_random_obj_DL_000190, gameplay_keep_DL_078A80, 130, 12, 20, 15 },
- { object_kinsta1_obj_DL_000198, gameplay_keep_DL_078A80, 130, 12, 20, 15 },
+ { gSecretShrineSlidingDoorDL, gameplay_keep_DL_078A80, 130, 12, 20, 15 },
+ { gSwampSpiderHouseSlidingDoorDL, gameplay_keep_DL_078A80, 130, 12, 20, 15 },
{ object_kaizoku_obj_DL_0001A0, gameplay_keep_DL_078A80, 130, 12, 20, 15 },
{ object_last_obj_DL_0039C0, gameplay_keep_DL_078A80, 130, 12, 20, 15 },
};
@@ -181,7 +181,7 @@ s32 DoorShutter_SetupDoor(DoorShutter* this, PlayState* play) {
return true;
}
} else if ((doorType == 2) || (doorType == 7)) {
- if (!Flags_GetSwitch(play, DOORSHUTTER_GET_7F(&this->slidingDoor.dyna.actor))) {
+ if (!Flags_GetSwitch(play, DOORSHUTTER_GET_SWITCH_FLAG(&this->slidingDoor.dyna.actor))) {
DoorShutter_SetupAction(this, func_808A1548);
this->unk_168 = 1.0f;
return true;
@@ -234,7 +234,7 @@ void DoorShutter_Init(Actor* thisx, PlayState* play2) {
this->slidingDoor.dyna.actor.room = -1;
}
- if ((this->requiredObjBankIndex = Object_GetIndex(&play->objectCtx, D_808A2180[sp24].objectId)) < 0) {
+ if ((this->objectSlot = Object_GetSlot(&play->objectCtx, D_808A2180[sp24].objectId)) <= OBJECT_SLOT_NONE) {
Actor_Kill(&this->slidingDoor.dyna.actor);
return;
}
@@ -243,7 +243,7 @@ void DoorShutter_Init(Actor* thisx, PlayState* play2) {
this->unk_163 = sp24;
if ((this->doorType == 4) || (this->doorType == 5)) {
- if (!Flags_GetSwitch(play, DOORSHUTTER_GET_7F(&this->slidingDoor.dyna.actor))) {
+ if (!Flags_GetSwitch(play, DOORSHUTTER_GET_SWITCH_FLAG(&this->slidingDoor.dyna.actor))) {
this->unk_166 = 10;
}
}
@@ -263,9 +263,9 @@ void DoorShutter_Destroy(Actor* thisx, PlayState* play) {
}
void DoorShutter_SetupType(DoorShutter* this, PlayState* play) {
- if (Object_IsLoaded(&play->objectCtx, this->requiredObjBankIndex) &&
+ if (Object_IsLoaded(&play->objectCtx, this->objectSlot) &&
(!R_PLAY_FILL_SCREEN_ON || (R_PLAY_FILL_SCREEN_ALPHA == 0))) {
- this->slidingDoor.dyna.actor.objBankIndex = this->requiredObjBankIndex;
+ this->slidingDoor.dyna.actor.objectSlot = this->objectSlot;
this->slidingDoor.dyna.actor.draw = DoorShutter_Draw;
DoorShutter_SetupDoor(this, play);
}
@@ -346,7 +346,7 @@ void func_808A1090(DoorShutter* this, PlayState* play) {
DoorShutter_SetupAction(this, func_808A1684);
this->slidingDoor.dyna.actor.velocity.y = 0.0f;
if (this->unk_166 != 0) {
- Flags_SetSwitch(play, DOORSHUTTER_GET_7F(&this->slidingDoor.dyna.actor));
+ Flags_SetSwitch(play, DOORSHUTTER_GET_SWITCH_FLAG(&this->slidingDoor.dyna.actor));
if (this->doorType != 5) {
DUNGEON_KEY_COUNT(gSaveContext.mapIndex) = DUNGEON_KEY_COUNT(gSaveContext.mapIndex) - 1;
Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK);
@@ -474,7 +474,7 @@ s32 func_808A1478(DoorShutter* this, PlayState* play, f32 arg2) {
void func_808A1548(DoorShutter* this, PlayState* play) {
if (func_808A1478(this, play, 1.0f)) {
- if (Flags_GetSwitch(play, DOORSHUTTER_GET_7F(&this->slidingDoor.dyna.actor))) {
+ if (Flags_GetSwitch(play, DOORSHUTTER_GET_SWITCH_FLAG(&this->slidingDoor.dyna.actor))) {
this->csId = this->slidingDoor.dyna.actor.csId;
if (CutsceneManager_IsNext(this->csId)) {
CutsceneManager_StartWithPlayerCs(this->csId, &this->slidingDoor.dyna.actor);
@@ -495,7 +495,8 @@ void func_808A1548(DoorShutter* this, PlayState* play) {
}
void func_808A1618(DoorShutter* this, PlayState* play) {
- if ((this->slidingDoor.unk_15C == 0) && !Flags_GetSwitch(play, DOORSHUTTER_GET_7F(&this->slidingDoor.dyna.actor))) {
+ if ((this->slidingDoor.unk_15C == 0) &&
+ !Flags_GetSwitch(play, DOORSHUTTER_GET_SWITCH_FLAG(&this->slidingDoor.dyna.actor))) {
DoorShutter_SetupAction(this, func_808A1548);
} else {
func_808A1090(this, play);
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 abdf0ce84..d1ccd1955 100644
--- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h
+++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h
@@ -9,7 +9,7 @@ struct DoorShutter;
typedef void (*DoorShutterActionFunc)(struct DoorShutter*, PlayState*);
#define DOORSHUTTER_GET_1F(thisx) ((thisx)->params & 0x1F)
-#define DOORSHUTTER_GET_7F(thisx) ((thisx)->params & 0x7F)
+#define DOORSHUTTER_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
#define DOORSHUTTER_GET_380(thisx) (((thisx)->params >> 7) & 7)
typedef struct DoorShutter {
@@ -18,7 +18,7 @@ typedef struct DoorShutter {
/* 0x0162 */ u8 doorType;
/* 0x0163 */ u8 unk_163;
/* 0x0164 */ u8 unk_164;
- /* 0x0165 */ s8 requiredObjBankIndex;
+ /* 0x0165 */ s8 objectSlot;
/* 0x0166 */ s8 unk_166;
/* 0x0167 */ s8 unk_167;
/* 0x0168 */ f32 unk_168;
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 798edb09d..ec1480a67 100644
--- a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c
+++ b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c
@@ -178,10 +178,9 @@ void DoorWarp1_Destroy(Actor* thisx, PlayState* play) {
LightContext_RemoveLight(play, &play->lightCtx, this->unk_1DC);
LightContext_RemoveLight(play, &play->lightCtx, this->unk_1F0);
- for (i = 0; i < ARRAY_COUNT(play->envCtx.lightSettings.diffuseColor1); i++) {
- play->envCtx.lightSettings.diffuseColor1[i] = 0;
- play->envCtx.lightSettings.fogColor[i] = play->envCtx.lightSettings.diffuseColor1[i];
- play->envCtx.lightSettings.ambientColor[i] = play->envCtx.lightSettings.diffuseColor1[i];
+ for (i = 0; i < ARRAY_COUNT(play->envCtx.adjLightSettings.light1Color); i++) {
+ play->envCtx.adjLightSettings.ambientColor[i] = play->envCtx.adjLightSettings.fogColor[i] =
+ play->envCtx.adjLightSettings.light1Color[i] = 0;
}
if (this->unk_1D3 != 0) {
@@ -781,7 +780,6 @@ void func_808BA550(DoorWarp1* this, PlayState* play) {
Player* player2 = GET_PLAYER(play);
Player* player = GET_PLAYER(play);
s16 i;
- s32 temp_f16;
f32 temp_f0;
f32 temp_f2;
s32 temp;
@@ -869,16 +867,13 @@ void func_808BA550(DoorWarp1* this, PlayState* play) {
if (1) {}
temp_f0 = 1.0f - ((f32)(D_808BC000 - this->unk_1D0) / ((D_808BC000 - tempS) + 100));
if (temp_f0 > 0.0f) {
- temp_f16 = -255.0f * temp_f0;
-
- for (i = 0; i < 3; i++) {
- play->envCtx.lightSettings.diffuseColor1[i] = temp_f16;
- play->envCtx.lightSettings.fogColor[i] = temp_f16;
- play->envCtx.lightSettings.ambientColor[i] = temp_f16;
+ for (i = 0; i < ARRAY_COUNT(play->envCtx.adjLightSettings.light1Color); i++) {
+ play->envCtx.adjLightSettings.ambientColor[i] = play->envCtx.adjLightSettings.fogColor[i] =
+ play->envCtx.adjLightSettings.light1Color[i] = -255.0f * temp_f0;
}
- play->envCtx.lightSettings.fogNear = -500.0f * temp_f0;
- if (play->envCtx.lightSettings.fogNear < -300) {
+ play->envCtx.adjLightSettings.fogNear = -500.0f * temp_f0;
+ if (play->envCtx.adjLightSettings.fogNear < -300) {
play->roomCtx.curRoom.segment = NULL;
}
}
@@ -919,10 +914,10 @@ void DoorWarp1_Update(Actor* thisx, PlayState* play) {
this->unk_204 = 1.0f;
}
- if ((this->unk_1A0 != NULL) && (this->unk_1A0->unk_15C != this->unk_204)) {
+ if ((this->unk_1A0 != NULL) && (this->unk_1A0->unk15C != this->unk_204)) {
this->unk_1A0->actor.world.pos.y = this->dyna.actor.world.pos.y;
- this->unk_1A0->unk_158 = this->dyna.actor.world.pos.y;
- this->unk_1A0->unk_15C = this->unk_204;
+ this->unk_1A0->unk158 = this->dyna.actor.world.pos.y;
+ this->unk_1A0->unk15C = this->unk_204;
}
this->actionFunc(this, play);
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 bc95d4312..470f9b89d 100644
--- a/src/overlays/actors/ovl_Eff_Change/z_eff_change.c
+++ b/src/overlays/actors/ovl_Eff_Change/z_eff_change.c
@@ -81,7 +81,7 @@ void func_80A4C5CC(EffChange* this, PlayState* play) {
if (func_80183DE0(&this->skeletonInfo)) {
Actor_Kill(&this->actor);
CutsceneManager_Stop(CS_ID_GLOBAL_ELEGY);
- func_800FD2B4(play, 0.0f, 850.0f, 0.2f, 0.0f);
+ Environment_AdjustLights(play, 0.0f, 850.0f, 0.2f, 0.0f);
return;
}
@@ -108,7 +108,7 @@ void func_80A4C5CC(EffChange* this, PlayState* play) {
} else if (phi_fv0 < 0.0f) {
phi_fv0 = 0.0f;
}
- func_800FD2B4(play, phi_fv0, 850.0f, 0.2f, 0.0f);
+ Environment_AdjustLights(play, phi_fv0, 850.0f, 0.2f, 0.0f);
if (CutsceneManager_GetCurrentCsId() != CS_ID_GLOBAL_ELEGY) {
if (CutsceneManager_IsNext(CS_ID_GLOBAL_ELEGY)) {
CutsceneManager_Start(CS_ID_GLOBAL_ELEGY, &this->actor);
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 9b5290907..ee493fe24 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
@@ -153,8 +153,8 @@ void EffKamejimaWave_Draw(Actor* thisx, PlayState* play) {
Color_RGBA8 primColor;
Color_RGBA8 envColor;
- func_800FE7A8(sPrimColors, &primColor);
- func_800FE7A8(sEnvColors, &envColor);
+ Environment_LerpSandstormColors(sPrimColors, &primColor);
+ Environment_LerpSandstormColors(sEnvColors, &envColor);
EffKamejimaWave_SetVtxAlpha(sVtxAlpha);
OPEN_DISPS(play->state.gfxCtx);
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 c88835373..f2089ca03 100644
--- a/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.c
+++ b/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.c
@@ -43,25 +43,25 @@ s32 func_8092DF9C(ElfMsg* this, PlayState* play) {
if ((this->actor.home.rot.y > 0) && (this->actor.home.rot.y < 0x81) &&
(Flags_GetSwitch(play, this->actor.home.rot.y - 1))) {
(void)"共倒れ"; // "Collapse together"
- if (ELFMSG_GET_SWITCHFLAG(&this->actor) != 0x7F) {
- Flags_SetSwitch(play, ELFMSG_GET_SWITCHFLAG(&this->actor));
+ if (ELFMSG_GET_SWITCH_FLAG(&this->actor) != 0x7F) {
+ Flags_SetSwitch(play, ELFMSG_GET_SWITCH_FLAG(&this->actor));
}
Actor_Kill(&this->actor);
return true;
}
if (this->actor.home.rot.y == 0x81) {
if (Flags_GetClear(play, this->actor.room)) {
- if (ELFMSG_GET_SWITCHFLAG(&this->actor) != 0x7F) {
- Flags_SetSwitch(play, ELFMSG_GET_SWITCHFLAG(&this->actor));
+ if (ELFMSG_GET_SWITCH_FLAG(&this->actor) != 0x7F) {
+ Flags_SetSwitch(play, ELFMSG_GET_SWITCH_FLAG(&this->actor));
}
Actor_Kill(&this->actor);
return true;
}
}
- if (ELFMSG_GET_SWITCHFLAG(&this->actor) == 0x7F) {
+ if (ELFMSG_GET_SWITCH_FLAG(&this->actor) == 0x7F) {
return false;
}
- if (Flags_GetSwitch(play, ELFMSG_GET_SWITCHFLAG(&this->actor))) {
+ if (Flags_GetSwitch(play, ELFMSG_GET_SWITCH_FLAG(&this->actor))) {
(void)"共倒れ"; // "Collapse together"
Actor_Kill(&this->actor);
return true;
@@ -136,8 +136,8 @@ void ElfMsg_Update(Actor* thisx, PlayState* play) {
if (func_8092DF9C(this, play) == 0) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- if (ELFMSG_GET_SWITCHFLAG(thisx) != 0x7F) {
- Flags_SetSwitch(play, ELFMSG_GET_SWITCHFLAG(thisx));
+ if (ELFMSG_GET_SWITCH_FLAG(thisx) != 0x7F) {
+ Flags_SetSwitch(play, ELFMSG_GET_SWITCH_FLAG(thisx));
}
Actor_Kill(&this->actor);
return;
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 51a3ddda3..b512af2de 100644
--- a/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.h
+++ b/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.h
@@ -4,7 +4,7 @@
#include "global.h"
#define ELFMSG_GET_FF(thisx) ((thisx)->params & 0xFF)
-#define ELFMSG_GET_SWITCHFLAG(thisx) (((thisx)->params & 0x7F00) >> 8)
+#define ELFMSG_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0x7F00) >> 8)
#define ELFMSG_GET_8000(thisx) ((thisx)->params & 0x8000)
struct ElfMsg;
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 ea443472f..552478ace 100644
--- a/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c
+++ b/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c
@@ -43,8 +43,8 @@ s32 func_8096EC4C(ElfMsg2* this, PlayState* play) {
if ((this->actor.home.rot.y > 0) && (this->actor.home.rot.y < 0x81) &&
(Flags_GetSwitch(play, this->actor.home.rot.y - 1))) {
(void)"共倒れ"; // "Collapse together"
- if (ELFMSG2_GET_SWITCHFLAG(&this->actor) != 0x7F) {
- Flags_SetSwitch(play, ELFMSG2_GET_SWITCHFLAG(&this->actor));
+ if (ELFMSG2_GET_SWITCH_FLAG(&this->actor) != 0x7F) {
+ Flags_SetSwitch(play, ELFMSG2_GET_SWITCH_FLAG(&this->actor));
}
Actor_Kill(&this->actor);
return true;
@@ -53,17 +53,17 @@ s32 func_8096EC4C(ElfMsg2* this, PlayState* play) {
if (Flags_GetClear(play, this->actor.room)) {
(void)"共倒れ2"; // "Collapse 2"
- if (ELFMSG2_GET_SWITCHFLAG(&this->actor) != 0x7F) {
- Flags_SetSwitch(play, ELFMSG2_GET_SWITCHFLAG(&this->actor));
+ if (ELFMSG2_GET_SWITCH_FLAG(&this->actor) != 0x7F) {
+ Flags_SetSwitch(play, ELFMSG2_GET_SWITCH_FLAG(&this->actor));
}
Actor_Kill(&this->actor);
return true;
}
}
- if (ELFMSG2_GET_SWITCHFLAG(&this->actor) == 0x7F) {
+ if (ELFMSG2_GET_SWITCH_FLAG(&this->actor) == 0x7F) {
return false;
}
- if (Flags_GetSwitch(play, ELFMSG2_GET_SWITCHFLAG(&this->actor))) {
+ if (Flags_GetSwitch(play, ELFMSG2_GET_SWITCH_FLAG(&this->actor))) {
(void)"共倒れ"; // "Collapse together"
Actor_Kill(&this->actor);
return true;
@@ -108,8 +108,8 @@ void func_8096EE64(ElfMsg2* this, PlayState* play) {
if (this->actor.home.rot.z != 1) {
Actor_Kill(&this->actor);
- if (ELFMSG2_GET_SWITCHFLAG(&this->actor) != 0x7F) {
- Flags_SetSwitch(play, ELFMSG2_GET_SWITCHFLAG(&this->actor));
+ if (ELFMSG2_GET_SWITCH_FLAG(&this->actor) != 0x7F) {
+ Flags_SetSwitch(play, ELFMSG2_GET_SWITCH_FLAG(&this->actor));
}
return;
}
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 4d9583d20..aa717800b 100644
--- a/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.h
+++ b/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.h
@@ -3,7 +3,7 @@
#include "global.h"
-#define ELFMSG2_GET_SWITCHFLAG(thisx) (((thisx)->params >> 8) & 0x7F)
+#define ELFMSG2_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0x7F)
#define ELFMSG2_GET_FF(thisx) ((thisx)->params & 0xFF)
struct ElfMsg2;
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 e3e8b7bc5..b7b349dfe 100644
--- a/src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.c
+++ b/src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.c
@@ -42,25 +42,25 @@ s32 func_80A2CD1C(ElfMsg3* this, PlayState* play) {
if ((this->actor.home.rot.y > 0) && (this->actor.home.rot.y < 0x81) &&
(Flags_GetSwitch(play, this->actor.home.rot.y - 1))) {
(void)"共倒れ"; // "Collapse together"
- if (ELFMSG3_GET_SWITCH(&this->actor) != 0x7F) {
- Flags_SetSwitch(play, ELFMSG3_GET_SWITCH(&this->actor));
+ if (ELFMSG3_GET_SWITCH_FLAG(&this->actor) != 0x7F) {
+ Flags_SetSwitch(play, ELFMSG3_GET_SWITCH_FLAG(&this->actor));
}
Actor_Kill(&this->actor);
return true;
}
if (this->actor.home.rot.y == 0x81) {
if (Flags_GetClear(play, this->actor.room)) {
- if (ELFMSG3_GET_SWITCH(&this->actor) != 0x7F) {
- Flags_SetSwitch(play, ELFMSG3_GET_SWITCH(&this->actor));
+ if (ELFMSG3_GET_SWITCH_FLAG(&this->actor) != 0x7F) {
+ Flags_SetSwitch(play, ELFMSG3_GET_SWITCH_FLAG(&this->actor));
}
Actor_Kill(&this->actor);
return true;
}
}
- if (ELFMSG3_GET_SWITCH(&this->actor) == 0x7F) {
+ if (ELFMSG3_GET_SWITCH_FLAG(&this->actor) == 0x7F) {
return false;
}
- if (Flags_GetSwitch(play, ELFMSG3_GET_SWITCH(&this->actor))) {
+ if (Flags_GetSwitch(play, ELFMSG3_GET_SWITCH_FLAG(&this->actor))) {
(void)"共倒れ"; // "Collapse together"
Actor_Kill(&this->actor);
return true;
@@ -134,8 +134,8 @@ void ElfMsg3_Update(Actor* thisx, PlayState* play) {
if (!func_80A2CD1C(this, play)) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- if (ELFMSG3_GET_SWITCH(thisx) != 0x7F) {
- Flags_SetSwitch(play, ELFMSG3_GET_SWITCH(thisx));
+ if (ELFMSG3_GET_SWITCH_FLAG(thisx) != 0x7F) {
+ Flags_SetSwitch(play, ELFMSG3_GET_SWITCH_FLAG(thisx));
}
Actor_Kill(&this->actor);
return;
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 615cde1eb..6b1c24671 100644
--- a/src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.h
+++ b/src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.h
@@ -3,7 +3,7 @@
#include "global.h"
-#define ELFMSG3_GET_SWITCH(thisx) (((thisx)->params & 0x7F00) >> 8)
+#define ELFMSG3_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0x7F00) >> 8)
#define ELFMSG3_GET_FF(thisx) ((thisx)->params & 0xFF)
#define ELFMSG3_GET_8000(thisx) ((thisx)->params & 0x8000)
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 c85db8ef0..423f8c351 100644
--- a/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.c
+++ b/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.c
@@ -43,25 +43,25 @@ s32 func_80AFD380(ElfMsg4* this, PlayState* play) {
if ((this->actor.home.rot.y > 0) && (this->actor.home.rot.y < 0x81) &&
(Flags_GetSwitch(play, this->actor.home.rot.y - 1))) {
(void)"共倒れ"; // "Collapse together"
- if (ELFMSG4_GET_SWITCHFLAG(&this->actor) != 0x7F) {
- Flags_SetSwitch(play, ELFMSG4_GET_SWITCHFLAG(&this->actor));
+ if (ELFMSG4_GET_SWITCH_FLAG(&this->actor) != 0x7F) {
+ Flags_SetSwitch(play, ELFMSG4_GET_SWITCH_FLAG(&this->actor));
}
Actor_Kill(&this->actor);
return true;
}
if (this->actor.home.rot.y == 0x81) {
if (Flags_GetClear(play, this->actor.room)) {
- if (ELFMSG4_GET_SWITCHFLAG(&this->actor) != 0x7F) {
- Flags_SetSwitch(play, ELFMSG4_GET_SWITCHFLAG(&this->actor));
+ if (ELFMSG4_GET_SWITCH_FLAG(&this->actor) != 0x7F) {
+ Flags_SetSwitch(play, ELFMSG4_GET_SWITCH_FLAG(&this->actor));
}
Actor_Kill(&this->actor);
return true;
}
}
- if (ELFMSG4_GET_SWITCHFLAG(&this->actor) == 0x7F) {
+ if (ELFMSG4_GET_SWITCH_FLAG(&this->actor) == 0x7F) {
return false;
}
- if (Flags_GetSwitch(play, ELFMSG4_GET_SWITCHFLAG(&this->actor))) {
+ if (Flags_GetSwitch(play, ELFMSG4_GET_SWITCH_FLAG(&this->actor))) {
(void)"共倒れ"; // "Collapse together"
Actor_Kill(&this->actor);
return true;
@@ -161,8 +161,8 @@ void ElfMsg4_Update(Actor* thisx, PlayState* play) {
}
if ((bgActor != NULL) && Actor_ProcessTalkRequest(bgActor, &play->state)) {
- if (ELFMSG4_GET_SWITCHFLAG(thisx) != 0x7F) {
- Flags_SetSwitch(play, ELFMSG4_GET_SWITCHFLAG(thisx));
+ if (ELFMSG4_GET_SWITCH_FLAG(thisx) != 0x7F) {
+ Flags_SetSwitch(play, ELFMSG4_GET_SWITCH_FLAG(thisx));
}
Actor_Kill(&this->actor);
return;
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 e9ccbc906..1e4b78f29 100644
--- a/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.h
+++ b/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.h
@@ -3,7 +3,7 @@
#include "global.h"
-#define ELFMSG4_GET_SWITCHFLAG(thisx) (((thisx)->params & 0x7F00) >> 8)
+#define ELFMSG4_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0x7F00) >> 8)
#define ELFMSG4_GET_8000(thisx) ((thisx)->params & 0x8000)
#define ELFMSG4_GET_TEXT(thisx) ((thisx)->params & 0xFF)
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 db97a0f74..c44ab8e0a 100644
--- a/src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.c
+++ b/src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.c
@@ -38,8 +38,8 @@ s32 func_80AFD990(ElfMsg5* this, PlayState* play) {
if ((this->actor.home.rot.y > 0) && (this->actor.home.rot.y < 0x81) &&
(Flags_GetSwitch(play, this->actor.home.rot.y - 1))) {
(void)"共倒れ"; // Collapse together
- if (ELFMSG5_GET_SWITCHFLAG(&this->actor) != 0x7F) {
- Flags_SetSwitch(play, ELFMSG5_GET_SWITCHFLAG(&this->actor));
+ if (ELFMSG5_GET_SWITCH_FLAG(&this->actor) != 0x7F) {
+ Flags_SetSwitch(play, ELFMSG5_GET_SWITCH_FLAG(&this->actor));
}
Actor_Kill(&this->actor);
return true;
@@ -47,17 +47,17 @@ s32 func_80AFD990(ElfMsg5* this, PlayState* play) {
if (this->actor.home.rot.y == 0x81) {
if (Flags_GetClear(play, this->actor.room)) {
(void)"共倒れ2"; // Collapse 2
- if (ELFMSG5_GET_SWITCHFLAG(&this->actor) != 0x7F) {
- Flags_SetSwitch(play, ELFMSG5_GET_SWITCHFLAG(&this->actor));
+ if (ELFMSG5_GET_SWITCH_FLAG(&this->actor) != 0x7F) {
+ Flags_SetSwitch(play, ELFMSG5_GET_SWITCH_FLAG(&this->actor));
}
Actor_Kill(&this->actor);
return true;
}
}
- if (ELFMSG5_GET_SWITCHFLAG(&this->actor) == 0x7F) {
+ if (ELFMSG5_GET_SWITCH_FLAG(&this->actor) == 0x7F) {
return false;
}
- if (Flags_GetSwitch(play, ELFMSG5_GET_SWITCHFLAG(&this->actor))) {
+ if (Flags_GetSwitch(play, ELFMSG5_GET_SWITCH_FLAG(&this->actor))) {
(void)"共倒れ"; // Collapse together
Actor_Kill(&this->actor);
return true;
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 36daecca1..e1e54ca64 100644
--- a/src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.h
+++ b/src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.h
@@ -3,7 +3,7 @@
#include "global.h"
-#define ELFMSG5_GET_SWITCHFLAG(thisx) (((thisx)->params >> 8) & 0x7F)
+#define ELFMSG5_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0x7F)
#define ELFMSG5_GET_FF(thisx) ((thisx)->params & 0xFF)
struct ElfMsg5;
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 6b2b37a41..4c565fdf8 100644
--- a/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c
+++ b/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c
@@ -154,8 +154,8 @@ void ElfMsg6_Init(Actor* thisx, PlayState* play) {
case 1:
this->actionFunc = func_80BA1F80;
- if ((this->actor.csId == CS_ID_NONE) || ((ELFMSG6_SWITCHFLAG(&this->actor) != 0x7F) &&
- Flags_GetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor)))) {
+ if ((this->actor.csId == CS_ID_NONE) || ((ELFMSG6_SWITCH_FLAG(&this->actor) != 0x7F) &&
+ Flags_GetSwitch(play, ELFMSG6_SWITCH_FLAG(&this->actor)))) {
Actor_Kill(&this->actor);
return;
}
@@ -200,8 +200,8 @@ void ElfMsg6_Init(Actor* thisx, PlayState* play) {
break;
case 3:
- if (((ELFMSG6_SWITCHFLAG(&this->actor) != 0x7F) &&
- Flags_GetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor))) ||
+ if (((ELFMSG6_SWITCH_FLAG(&this->actor) != 0x7F) &&
+ Flags_GetSwitch(play, ELFMSG6_SWITCH_FLAG(&this->actor))) ||
CHECK_WEEKEVENTREG(WEEKEVENTREG_88_10) || CHECK_WEEKEVENTREG(WEEKEVENTREG_91_01) ||
(INV_CONTENT(ITEM_MASK_ZORA) == ITEM_MASK_ZORA)) {
Actor_Kill(&this->actor);
@@ -338,7 +338,7 @@ void func_80BA1F80(ElfMsg6* this, PlayState* play) {
if (func_80BA1C00(this)) {
if (CutsceneManager_IsNext(this->actor.csId)) {
CutsceneManager_StartWithPlayerCs(this->actor.csId, NULL);
- Flags_SetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor));
+ Flags_SetSwitch(play, ELFMSG6_SWITCH_FLAG(&this->actor));
Actor_Kill(&this->actor);
return;
}
@@ -355,14 +355,14 @@ void func_80BA2048(ElfMsg6* this, PlayState* play) {
EnElf* sp20 = (EnElf*)GET_PLAYER(play)->tatlActor;
sp20->unk_264 |= 0x20;
- if (ELFMSG6_SWITCHFLAG(&this->actor) != 0x7F) {
- Flags_SetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor));
+ if (ELFMSG6_SWITCH_FLAG(&this->actor) != 0x7F) {
+ Flags_SetSwitch(play, ELFMSG6_SWITCH_FLAG(&this->actor));
}
Actor_Kill(&this->actor);
return;
}
- if (((ELFMSG6_SWITCHFLAG(&this->actor) != 0x7F) && Flags_GetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor))) ||
+ if (((ELFMSG6_SWITCH_FLAG(&this->actor) != 0x7F) && Flags_GetSwitch(play, ELFMSG6_SWITCH_FLAG(&this->actor))) ||
CHECK_WEEKEVENTREG(WEEKEVENTREG_88_10) || CHECK_WEEKEVENTREG(WEEKEVENTREG_91_01) ||
(INV_CONTENT(ITEM_MASK_ZORA) == ITEM_MASK_ZORA)) {
Actor_Kill(&this->actor);
@@ -390,14 +390,14 @@ void func_80BA21C4(ElfMsg6* this, PlayState* play) {
EnElf* sp20 = (EnElf*)GET_PLAYER(play)->tatlActor;
sp20->unk_264 |= 0x20;
- if (ELFMSG6_SWITCHFLAG(&this->actor) != 0x7F) {
- Flags_SetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor));
+ if (ELFMSG6_SWITCH_FLAG(&this->actor) != 0x7F) {
+ Flags_SetSwitch(play, ELFMSG6_SWITCH_FLAG(&this->actor));
}
Actor_Kill(&this->actor);
return;
}
- if (((ELFMSG6_SWITCHFLAG(&this->actor) != 0x7F) && Flags_GetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor))) ||
+ if (((ELFMSG6_SWITCH_FLAG(&this->actor) != 0x7F) && Flags_GetSwitch(play, ELFMSG6_SWITCH_FLAG(&this->actor))) ||
CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) {
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 8e9a5d0ed..640c35987 100644
--- a/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.h
+++ b/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.h
@@ -9,7 +9,7 @@ typedef void (*ElfMsg6ActionFunc)(struct ElfMsg6*, PlayState*);
#define ELFMSG6_GET_F(thisx) ((thisx)->params & 0xF)
#define ELFMSG6_GET_F0(thisx) (((thisx)->params & 0xF0) >> 4)
-#define ELFMSG6_SWITCHFLAG(thisx) (((thisx)->params & 0xFE00) >> 9)
+#define ELFMSG6_SWITCH_FLAG(thisx) (((thisx)->params & 0xFE00) >> 9)
typedef struct ElfMsg6 {
/* 0x000 */ Actor actor;
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 0d6ee9380..c7bfb6234 100644
--- a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c
+++ b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c
@@ -457,7 +457,7 @@ void func_80BED3BC(EnAkindonuts* this, PlayState* play) {
Audio_PlaySfx_MessageDecide();
this->unk_32C &= ~0x1;
this->unk_32C |= 0x40;
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->unk_33C = 0x15EF;
this->actionFunc = func_80BEF360;
@@ -546,7 +546,7 @@ void func_80BED680(EnAkindonuts* this, PlayState* play) {
Audio_PlaySfx_MessageDecide();
this->unk_32C |= 0x40;
this->unk_32C &= ~0x1;
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->unk_33C = 0x15EF;
this->actionFunc = func_80BEF360;
@@ -650,7 +650,7 @@ void func_80BED8A4(EnAkindonuts* this, PlayState* play) {
Audio_PlaySfx_MessageDecide();
this->unk_32C |= 0x40;
this->unk_32C &= ~0x1;
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->unk_33C = 0x15EF;
this->actionFunc = func_80BEF360;
@@ -739,7 +739,7 @@ void func_80BEDB88(EnAkindonuts* this, PlayState* play) {
Audio_PlaySfx_MessageDecide();
this->unk_32C |= 0x40;
this->unk_32C &= ~0x1;
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->unk_33C = 0x15EF;
this->actionFunc = func_80BEF360;
@@ -838,7 +838,7 @@ void func_80BEDDAC(EnAkindonuts* this, PlayState* play) {
Audio_PlaySfx_MessageDecide();
this->unk_32C |= 0x40;
this->unk_32C &= ~0x1;
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->unk_33C = 0x15EF;
this->actionFunc = func_80BEF360;
@@ -922,7 +922,7 @@ void func_80BEE070(EnAkindonuts* this, PlayState* play) {
Audio_PlaySfx_MessageDecide();
this->unk_32C |= 0x40;
this->unk_32C &= ~0x1;
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->unk_33C = 0x161A;
this->actionFunc = func_80BEF360;
@@ -1011,7 +1011,7 @@ void func_80BEE274(EnAkindonuts* this, PlayState* play) {
Audio_PlaySfx_MessageDecide();
this->unk_32C |= 0x40;
this->unk_32C &= ~0x1;
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->unk_33C = 0x1629;
this->actionFunc = func_80BEF360;
@@ -1095,7 +1095,7 @@ void func_80BEE530(EnAkindonuts* this, PlayState* play) {
Audio_PlaySfx_MessageDecide();
this->unk_32C |= 0x40;
this->unk_32C &= ~0x1;
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->unk_33C = 0x15EF;
this->actionFunc = func_80BEF360;
@@ -1335,7 +1335,7 @@ void func_80BEEFA8(EnAkindonuts* this, PlayState* play) {
if (Message_ShouldAdvance(play)) {
if (this->unk_32C & 1) {
this->unk_32C &= ~0x1;
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->unk_33C = 0;
this->actionFunc = func_80BEEE10;
@@ -1343,7 +1343,7 @@ void func_80BEEFA8(EnAkindonuts* this, PlayState* play) {
this->unk_32C &= ~0x20;
this->actor.flags &= ~ACTOR_FLAG_TARGETABLE;
this->unk_32C &= ~0x4;
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->animIndex = ENAKINDONUTS_ANIM_8;
this->unk_33C = 0;
@@ -1378,7 +1378,7 @@ void func_80BEEFA8(EnAkindonuts* this, PlayState* play) {
void func_80BEF18C(EnAkindonuts* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->unk_33C = 0;
this->actionFunc = func_80BEEE10;
@@ -1405,7 +1405,7 @@ void func_80BEF20C(EnAkindonuts* this, PlayState* play) {
if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
if (this->unk_32C & 1) {
this->unk_32C &= ~0x1;
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->actionFunc = func_80BEF360;
} else {
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 d8b87a81f..d27a8a93d 100644
--- a/src/overlays/actors/ovl_En_Ani/z_en_ani.c
+++ b/src/overlays/actors/ovl_En_Ani/z_en_ani.c
@@ -117,8 +117,8 @@ void EnAni_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->actor, sInitChain);
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f);
- SkelAnime_InitFlex(play, &this->skelAnime, &gAniSkeleton, &gAniStandingNormalAnim, this->jointTable,
- this->morphTable, ANI_LIMB_MAX);
+ SkelAnime_InitFlex(play, &this->skelAnime, &gAniSkel, &gAniStandingNormalAnim, this->jointTable, this->morphTable,
+ ANI_LIMB_MAX);
Animation_PlayOnce(&this->skelAnime, &gAniStandingNormalAnim);
Collider_InitAndSetCylinder(play, &this->collider1, &this->actor, &sCylinderInit);
Collider_InitAndSetCylinder(play, &this->collider2, &this->actor, &sCylinderInit);
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 eab1c83ce..783f157b1 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
@@ -449,7 +449,7 @@ void EnAob01_BeforeRace_HandleConversation(EnAob01* this, PlayState* play) {
this->stateFlags &= ~ENAOB01_FLAG_PLAYER_CONFIRMED_CHOICE;
Rupees_ChangeBy(-this->rupeesBet);
func_800B7298(play, NULL, PLAYER_CSMODE_WAIT);
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->actionFunc = EnAob01_BeforeRace_StartRace;
return;
@@ -475,7 +475,7 @@ void EnAob01_BeforeRace_StartRace(EnAob01* this, PlayState* play) {
SET_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT);
CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED);
this->stateFlags |= ENAOB01_FLAG_STARTED_RACE;
- func_800FD750(NA_BGM_HORSE);
+ Environment_ForcePlaySequence(NA_BGM_HORSE);
play->nextEntrance = ENTRANCE(DOGGY_RACETRACK, 1);
play->transitionType = TRANS_TYPE_64;
gSaveContext.nextTransitionType = TRANS_TYPE_64;
@@ -518,7 +518,7 @@ void EnAob01_BeforeRace_RespondToPlayAgainQuestion(EnAob01* this, PlayState* pla
}
}
} else if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->textId = 0;
this->actionFunc = EnAob01_BeforeRace_Idle;
@@ -672,7 +672,7 @@ void EnAob01_BeforeRace_Talk(EnAob01* this, PlayState* play) {
this->stateFlags &= ~ENAOB01_FLAG_LAUGH;
if (this->stateFlags & ENAOB01_FLAG_CONVERSATION_OVER) {
this->stateFlags &= ~ENAOB01_FLAG_CONVERSATION_OVER;
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->actionFunc = EnAob01_BeforeRace_Idle;
} else {
@@ -898,7 +898,7 @@ void EnAob01_AfterRace_GiveReward(EnAob01* this, PlayState* play) {
if (EnAob01_ProcessIdleAnim(this)) {
if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
this->rupeesBet = 0;
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
}
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 daba8eea6..e8c4c9fa2 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
@@ -43,7 +43,7 @@ void EnAttackNiw_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->actor, sInitChain);
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 25.0f);
- SkelAnime_InitFlex(play, &this->skelAnime, &gNiwSkeleton, &gNiwIdleAnim, this->jointTable, this->morphTable,
+ SkelAnime_InitFlex(play, &this->skelAnime, &gNiwSkel, &gNiwIdleAnim, this->jointTable, this->morphTable,
NIW_LIMB_MAX);
// probably copy pasted from EnNiw, which has this same code, but AttackNiw has no params
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 8b98808e1..43a557aae 100644
--- a/src/overlays/actors/ovl_En_Az/z_en_az.c
+++ b/src/overlays/actors/ovl_En_Az/z_en_az.c
@@ -78,20 +78,20 @@ typedef enum {
} BeaverAnimation;
static AnimationSpeedInfo sAnimationSpeedInfo[BEAVER_ANIM_IDLE_FACE_MAX] = {
- { &gBeaverIdleAnim, 1.0f, ANIMMODE_LOOP, -10.0f }, // BEAVER_ANIM_IDLE
- { &gBeaverWalkAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_WALK
- { &gBeaverSwimWithSpinningTail, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_SWIM_WITH_SPINNING_TAIL
- { &gBeaverSwimWithRaisedTail, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_SWIM_WITH_RAISED_TAIL
- { &gBeaverTalkAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_TALK
- { &gBeaverTalkWaveArmsAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_TALK_WAVE_ARMS
- { &gBeaverLaughRightAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_LAUGH_RIGHT
- { &gBeaverLaughLeftAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_LAUGH_LEFT
- { &gBeaverSwimAnim, 2.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_SWIM
- { &gBeaverTalkToLeftAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_TALK_TO_LEFT
- { &gBeaverTalkToRightAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_TALK_TO_RIGHT
- { &gBeaverBowAnim, 1.0f, ANIMMODE_ONCE, -5.0f }, // BEAVER_ANIM_BOW
- { &gBeaverIdleFaceLeftAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_IDLE_FACE_LEFT
- { &gBeaverIdleFaceRightAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_IDLE_FACE_RIGHT
+ { &gBeaverIdleAnim, 1.0f, ANIMMODE_LOOP, -10.0f }, // BEAVER_ANIM_IDLE
+ { &gBeaverWalkAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_WALK
+ { &gBeaverSwimWithSpinningTailAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_SWIM_WITH_SPINNING_TAIL
+ { &gBeaverSwimWithRaisedTailAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_SWIM_WITH_RAISED_TAIL
+ { &gBeaverTalkAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_TALK
+ { &gBeaverTalkWaveArmsAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_TALK_WAVE_ARMS
+ { &gBeaverLaughRightAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_LAUGH_RIGHT
+ { &gBeaverLaughLeftAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_LAUGH_LEFT
+ { &gBeaverSwimAnim, 2.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_SWIM
+ { &gBeaverTalkToLeftAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_TALK_TO_LEFT
+ { &gBeaverTalkToRightAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_TALK_TO_RIGHT
+ { &gBeaverBowAnim, 1.0f, ANIMMODE_ONCE, -5.0f }, // BEAVER_ANIM_BOW
+ { &gBeaverIdleFaceLeftAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_IDLE_FACE_LEFT
+ { &gBeaverIdleFaceRightAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_IDLE_FACE_RIGHT
};
ActorInit En_Az_InitVars = {
@@ -707,7 +707,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) {
if (SubS_StartCutscene(&brother->actor, brother->csIdList[0], CS_ID_GLOBAL_TALK,
SUBS_CUTSCENE_NORMAL)) {
brother->unk_374 |= 0x8000;
- play->msgCtx.msgMode = 0x44;
+ play->msgCtx.msgMode = MSGMODE_PAUSED;
ret = 0;
}
} else if (Message_ShouldAdvance(play)) {
@@ -832,7 +832,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) {
case 0x10DB:
if (play->msgCtx.choiceIndex == 0) {
Audio_PlaySfx_MessageDecide();
- play->msgCtx.msgMode = 0x44;
+ play->msgCtx.msgMode = MSGMODE_PAUSED;
this->unk_2FA = 1;
ret = 0;
} else {
@@ -945,7 +945,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) {
case 0x10EB:
if (play->msgCtx.choiceIndex == 0) {
- play->msgCtx.msgMode = 0x44;
+ play->msgCtx.msgMode = MSGMODE_PAUSED;
Audio_PlaySfx_MessageDecide();
switch (this->unk_2FA) {
case 4:
@@ -1497,7 +1497,7 @@ void func_80A97A28(EnAz* this, PlayState* play) {
void func_80A97A40(EnAz* this, PlayState* play) {
if (SubS_StartCutscene(&this->actor, 0, CS_ID_NONE, SUBS_CUTSCENE_WITH_PLAYER)) {
- play->msgCtx.msgMode = 0;
+ play->msgCtx.msgMode = MSGMODE_NONE;
play->msgCtx.msgLength = 0;
func_80A97A9C(this, play);
}
@@ -1525,8 +1525,8 @@ void func_80A97AB4(EnAz* this, PlayState* play) {
case 0x10D8:
if (play->msgCtx.choiceIndex == 0) {
Audio_PlaySfx_MessageDecide();
- play->msgCtx.msgMode = 0x44;
- func_800FD750(NA_BGM_TIMED_MINI_GAME);
+ play->msgCtx.msgMode = MSGMODE_PAUSED;
+ Environment_ForcePlaySequence(NA_BGM_TIMED_MINI_GAME);
func_80A94AB8(this, play, 1);
func_80A979DC(this, play);
} else {
@@ -1571,7 +1571,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)) {
CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_01);
- func_800FD750(NA_BGM_TIMED_MINI_GAME);
+ Environment_ForcePlaySequence(NA_BGM_TIMED_MINI_GAME);
play->nextEntrance = Entrance_CreateFromSpawn(1);
gSaveContext.nextCutsceneIndex = 0;
play->transitionTrigger = TRANS_TRIGGER_START;
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 bf93ad365..43cbd2969 100644
--- a/src/overlays/actors/ovl_En_Baba/z_en_baba.c
+++ b/src/overlays/actors/ovl_En_Baba/z_en_baba.c
@@ -596,7 +596,7 @@ void EnBaba_FollowSchedule_Talk(EnBaba* this, PlayState* play) {
u8 talkState = Message_GetState(&play->msgCtx);
if (((talkState == TEXT_STATE_5) || (talkState == TEXT_STATE_DONE)) && Message_ShouldAdvance(play)) {
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->actionFunc = EnBaba_FollowSchedule;
}
@@ -610,7 +610,7 @@ void EnBaba_Talk(EnBaba* this, PlayState* play) {
if (Message_ShouldAdvance(play)) {
if (this->stateFlags & BOMB_SHOP_LADY_STATE_END_CONVERSATION) {
this->stateFlags &= ~BOMB_SHOP_LADY_STATE_END_CONVERSATION;
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
if (this->stateFlags & BOMB_SHOP_LADY_STATE_AUTOTALK) {
if (CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) {
@@ -629,7 +629,7 @@ void EnBaba_Talk(EnBaba* this, PlayState* play) {
}
} else if (this->stateFlags & BOMB_SHOP_LADY_STATE_GIVE_BLAST_MASK) {
this->stateFlags &= ~BOMB_SHOP_LADY_STATE_GIVE_BLAST_MASK;
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->actionFunc = EnBaba_GiveBlastMask;
} else {
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 d1de1bb0d..e57ec81cc 100644
--- a/src/overlays/actors/ovl_En_Bat/z_en_bat.c
+++ b/src/overlays/actors/ovl_En_Bat/z_en_bat.c
@@ -136,7 +136,7 @@ void EnBat_Init(Actor* thisx, PlayState* play) {
this->animationFrame = Rand_ZeroOne() * 9.0f;
this->paramFlags = BAD_BAT_GET_PARAMFLAGS(thisx);
- this->switchFlag = BAD_BAT_GET_SWITCHFLAG(thisx);
+ this->switchFlag = BAD_BAT_GET_SWITCH_FLAG(thisx);
thisx->params = BAD_BAT_GET_TYPE(thisx);
thisx->depthInWater = BGCHECK_Y_MIN;
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 927dfbef8..5b552d2c1 100644
--- a/src/overlays/actors/ovl_En_Bat/z_en_bat.h
+++ b/src/overlays/actors/ovl_En_Bat/z_en_bat.h
@@ -5,7 +5,7 @@
#define BAD_BAT_GET_TYPE(thisx) (((thisx)->params >> 0) & 0x1F)
#define BAD_BAT_GET_PARAMFLAGS(thisx) (((thisx)->params >> 5) & 7)
-#define BAD_BAT_GET_SWITCHFLAG(thisx) (((thisx)->params >> 8) & 0xFF)
+#define BAD_BAT_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0xFF)
#define BAD_BAT_PARAMS(switchFlag, paramflags, type) ((type) | ((paramflags) << 5) | ((switchFlag) << 8))
//! PARAMFLAGS
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 7b9355305..850ffa198 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
@@ -215,13 +215,13 @@ void EnBba01_Init(Actor* thisx, PlayState* play) {
s32 pad;
EnBba01* this = THIS;
- this->enHy.animObjIndex = SubS_GetObjectIndex(OBJECT_BBA, play);
- this->enHy.headObjIndex = SubS_GetObjectIndex(OBJECT_BBA, play);
- this->enHy.skelUpperObjIndex = SubS_GetObjectIndex(OBJECT_BBA, play);
- this->enHy.skelLowerObjIndex = SubS_GetObjectIndex(OBJECT_BBA, play);
+ this->enHy.animObjectSlot = SubS_GetObjectSlot(OBJECT_BBA, play);
+ this->enHy.headObjectSlot = SubS_GetObjectSlot(OBJECT_BBA, play);
+ this->enHy.skelUpperObjectSlot = SubS_GetObjectSlot(OBJECT_BBA, play);
+ this->enHy.skelLowerObjectSlot = SubS_GetObjectSlot(OBJECT_BBA, play);
- if ((this->enHy.animObjIndex < 0) || (this->enHy.headObjIndex < 0) || (this->enHy.skelUpperObjIndex < 0) ||
- (this->enHy.skelLowerObjIndex < 0)) {
+ if ((this->enHy.animObjectSlot <= OBJECT_SLOT_NONE) || (this->enHy.headObjectSlot <= OBJECT_SLOT_NONE) ||
+ (this->enHy.skelUpperObjectSlot <= OBJECT_SLOT_NONE) || (this->enHy.skelLowerObjectSlot <= OBJECT_SLOT_NONE)) {
Actor_Kill(&this->enHy.actor);
}
this->enHy.actor.draw = NULL;
@@ -264,9 +264,9 @@ s32 EnBba01_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f*
if (limbIndex == BBA_LIMB_RIGHT_LOWER_ARM_ROOT) {
OPEN_DISPS(play->state.gfxCtx);
- gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->enHy.headObjIndex].segment);
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.headObjIndex].segment);
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.skelLowerObjIndex].segment);
+ gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->enHy.headObjectSlot].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->enHy.headObjectSlot].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->enHy.skelLowerObjectSlot].segment);
CLOSE_DISPS(play->state.gfxCtx);
}
@@ -303,8 +303,8 @@ void EnBba01_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* ro
if (limbIndex == BBA_LIMB_HEAD) {
OPEN_DISPS(play->state.gfxCtx);
- gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->enHy.skelUpperObjIndex].segment);
- gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.skelUpperObjIndex].segment);
+ gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->enHy.skelUpperObjectSlot].segment);
+ gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->enHy.skelUpperObjectSlot].segment);
CLOSE_DISPS(play->state.gfxCtx);
}
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 a147db127..0f505820d 100644
--- a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c
+++ b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c
@@ -104,7 +104,8 @@ void EnBigokuta_Init(Actor* thisx, PlayState* play) {
this->csId = CutsceneManager_GetAdditionalCsId(this->picto.actor.csId);
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE) ||
- ((this->picto.actor.params != 0xFF) && Flags_GetSwitch(play, this->picto.actor.params))) {
+ ((EN_BIGOKUTA_GET_SWITCH_FLAG(&this->picto.actor) != 0xFF) &&
+ Flags_GetSwitch(play, EN_BIGOKUTA_GET_SWITCH_FLAG(&this->picto.actor)))) {
Actor_Kill(&this->picto.actor);
} else {
this->picto.actor.world.pos.y -= 99.0f;
@@ -168,7 +169,7 @@ void EnBigokuta_ShootPlayer(EnBigokuta* this, PlayState* play) {
if (&this->picto.actor == player->actor.parent) {
player->actor.parent = NULL;
- player->unk_AE8 = 100;
+ player->actionVar2 = 100;
player->actor.velocity.y = 0.0f;
player->actor.world.pos.x += 20.0f * Math_SinS(this->picto.actor.home.rot.y);
player->actor.world.pos.z += 20.0f * Math_CosS(this->picto.actor.home.rot.y);
@@ -309,7 +310,7 @@ void EnBigokuta_SuckInPlayer(EnBigokuta* this, PlayState* play) {
this->timer++;
}
- player->unk_AE8 = 0;
+ player->actionVar2 = 0;
Math_Vec3f_Copy(&player->actor.world.pos, &this->playerPos);
if (Math_Vec3f_StepTo(&player->actor.world.pos, &this->playerHoldPos, sqrtf(this->timer) * 5.0f) < 0.1f) {
s16 rotY = this->picto.actor.shape.rot.y;
@@ -445,8 +446,8 @@ void EnBigokuta_PlayDeathEffects(EnBigokuta* this, PlayState* play) {
&D_80AC45B8, Rand_S16Offset(150, 50), 25, false);
}
- if (this->picto.actor.params != 0xFF) {
- Flags_SetSwitch(play, this->picto.actor.params);
+ if (EN_BIGOKUTA_GET_SWITCH_FLAG(&this->picto.actor) != 0xFF) {
+ Flags_SetSwitch(play, EN_BIGOKUTA_GET_SWITCH_FLAG(&this->picto.actor));
}
CutsceneManager_Stop(this->csId);
@@ -492,7 +493,7 @@ void EnBigokuta_CheckOneHitKill(EnBigokuta* this, PlayState* play) {
if (this->bodyCollider.info.acHitInfo->toucher.dmgFlags & 0x1000) { // Ice Arrow
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX;
this->drawDmgEffScale = 1.2f;
- this->drawDmgEffFrozenSteamScale = 1.8000001f;
+ this->drawDmgEffFrozenSteamScale = 1800.0f * 0.001f;
this->drawDmgEffAlpha = 1.0f;
} else if (this->bodyCollider.info.acHitInfo->toucher.dmgFlags & 0x2000) { // Light Arrow
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
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 1fdad749b..5e30eab95 100644
--- a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.h
+++ b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.h
@@ -9,6 +9,8 @@ struct EnBigokuta;
typedef void (*EnBigokutaActionFunc)(struct EnBigokuta*, PlayState*);
+#define EN_BIGOKUTA_GET_SWITCH_FLAG(thisx) ((thisx)->params)
+
typedef enum BigokutaBodyPart {
/* 0 */ BIGOKUTA_BODYPART_0,
/* 1 */ BIGOKUTA_BODYPART_1,
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 cced08a09..e754ff5b8 100644
--- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c
+++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c
@@ -188,10 +188,10 @@ void EnBigpo_Init(Actor* thisx, PlayState* play2) {
Actor_ProcessInitChain(&this->actor, sInitChain);
- this->switchFlags = BIG_POE_GET_SWITCHFLAGS(thisx);
+ this->switchFlag = BIG_POE_GET_SWITCH_FLAG(thisx);
thisx->params &= 0xFF;
if (thisx->params == BIG_POE_TYPE_POSSIBLE_FIRE) {
- if (Flags_GetSwitch(play, this->switchFlags)) {
+ if (Flags_GetSwitch(play, this->switchFlag)) {
Actor_Kill(&this->actor);
return;
}
@@ -201,7 +201,7 @@ void EnBigpo_Init(Actor* thisx, PlayState* play2) {
return;
}
- SkelAnime_Init(play, &this->skelAnime, &gBigPoeSkeleton, &gBigPoeFloatAnim, this->jointTable, this->morphTable,
+ SkelAnime_Init(play, &this->skelAnime, &gBigPoeSkel, &gBigPoeFloatAnim, this->jointTable, this->morphTable,
BIG_POE_LIMB_MAX);
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
CollisionCheck_SetInfo(&thisx->colChkInfo, &sDamageTable, &sColChkInfoInit);
@@ -222,7 +222,7 @@ void EnBigpo_Init(Actor* thisx, PlayState* play2) {
this->mainColor.b = 210;
this->mainColor.a = 0; // fully invisible
- if ((this->switchFlags != 0xFF) && (Flags_GetSwitch(play, this->switchFlags))) {
+ if ((this->switchFlag != 0xFF) && (Flags_GetSwitch(play, this->switchFlag))) {
Actor_Kill(&this->actor);
}
@@ -756,8 +756,8 @@ void EnBigpo_SetupLanternDrop(EnBigpo* this, PlayState* play) {
void EnBigpo_LanternFalling(EnBigpo* this, PlayState* play) {
if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND || this->actor.floorHeight == BGCHECK_Y_MIN) {
- if (this->switchFlags != 0xFF) {
- Flags_SetSwitch(play, this->switchFlags);
+ if (this->switchFlag != 0xFF) {
+ Flags_SetSwitch(play, this->switchFlag);
}
EffectSsHahen_SpawnBurst(play, &this->actor.world.pos, 6.0f, 0, 1, 1, 15, OBJECT_BIGPO, 10,
@@ -1051,7 +1051,8 @@ void EnBigpo_FlameCircleCutscene(EnBigpo* this, PlayState* play) {
this->idleTimer--;
if (this->idleTimer == 0) {
EnBigpo* parentPoh = (EnBigpo*)this->actor.parent;
- Flags_SetSwitch(play, this->switchFlags);
+
+ Flags_SetSwitch(play, this->switchFlag);
Math_Vec3f_Copy(&parentPoh->fires[this->unk20C].pos, &this->actor.world.pos);
Actor_Kill(&this->actor);
if (this->unk20C == 0) {
diff --git a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h
index 12b230614..d5bdaf1e8 100644
--- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h
+++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h
@@ -47,7 +47,7 @@ typedef struct EnBigpo {
/* 0x20A */ s16 rotVelocity;
/* 0x20C */ s16 unk20C; // is this counting the number of frames the player is ztargeting them?
/* 0x20E */ s16 subCamId;
- /* 0x210 */ s16 switchFlags;
+ /* 0x210 */ s16 switchFlag;
/* 0x212 */ s16 hoverHeightCycleTimer; // sin wave up and down bobbing
/* 0x214 */ f32 fireRadius; // distance from center during conjunction cutscene
/* 0x218 */ f32 savedHeight; // actual height while flying moves as part of bobbing
@@ -75,6 +75,6 @@ typedef enum EnBigpoType {
/* 5 */ BIG_POE_TYPE_UNK5
} EnBigpoType;
-#define BIG_POE_GET_SWITCHFLAGS(thisx) (u8)((thisx)->params >> 0x8)
+#define BIG_POE_GET_SWITCH_FLAG(thisx) (u8)((thisx)->params >> 0x8)
#endif // Z_EN_BIGPO_H
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 744b46e24..e8ce29da2 100644
--- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c
+++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c
@@ -729,7 +729,7 @@ void EnBigslime_SetPlayerParams(EnBigslime* this, PlayState* play) {
if (player->stateFlags2 & PLAYER_STATE2_80) {
player->actor.parent = NULL;
- player->unk_AE8 = 100;
+ player->actionVar2 = 100;
func_800B8D98(play, &this->actor, 10.0f, this->actor.world.rot.y, 10.0f);
}
}
@@ -1009,7 +1009,7 @@ void EnBigslime_CallMinislime(EnBigslime* this, PlayState* play) {
EnBigslime_UpdateCameraIntroCs(this, play, 25);
Audio_PlayBgm_StorePrevBgm(NA_BGM_MINI_BOSS);
EnBigslime_InitFallMinislime(this);
- play->envCtx.lightSettingOverride = 0xFF;
+ play->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE;
this->callTimer = 35;
func_800B7298(play, &this->actor, PLAYER_CSMODE_4);
}
@@ -1528,7 +1528,7 @@ void EnBigslime_CutsceneGrabPlayer(EnBigslime* this, PlayState* play) {
s32 i;
s32 j;
- player->unk_AE8 = 0;
+ player->actionVar2 = 0;
Math_ScaledStepToS(&this->gekkoRot.x, 0, 0x400);
EnBigslime_UpdateCameraGrabPlayer(this, play);
if (this->grabPlayerTimer > 0) {
@@ -1577,7 +1577,7 @@ void EnBigslime_AttackPlayerInBigslime(EnBigslime* this, PlayState* play) {
Player* player = GET_PLAYER(play);
s16 pitch = this->scaleFactor * 0x3333; // polar (zenith) angle
- player->unk_AE8 = 0;
+ player->actionVar2 = 0;
Math_ScaledStepToS(&this->gekkoRot.x, 0, 0x400);
EnBigslime_UpdateCameraGrabPlayer(this, play);
EnBigslime_UpdateWavySurface(this);
@@ -1710,7 +1710,7 @@ void EnBigslime_WindupThrowPlayer(EnBigslime* this, PlayState* play) {
if (this->windupPunchTimer == -5) {
if (player->stateFlags2 & PLAYER_STATE2_80) {
player->actor.parent = NULL;
- player->unk_AE8 = 100;
+ player->actionVar2 = 100;
}
player->actor.velocity.y = 0.0f;
@@ -1989,7 +1989,7 @@ void EnBigslime_Melt(EnBigslime* this, PlayState* play) {
if (this->meltCounter == 100) {
EnBigslime_SetTargetVtxFromPreFrozen(this);
} else if (this->meltCounter == 50) {
- play->envCtx.lightSettingOverride = 0xFF;
+ play->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE;
}
}
@@ -2777,7 +2777,7 @@ void EnBigslime_UpdateBigslime(Actor* thisx, PlayState* play) {
Vec3f vtxMin;
if (play->envCtx.lightSettingOverride == 3) {
- play->envCtx.lightSettingOverride = 0xFF;
+ play->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE;
}
Audio_SetSfxUnderwaterReverb(true);
@@ -2822,7 +2822,7 @@ void EnBigslime_UpdateGekko(Actor* thisx, PlayState* play) {
s32 pad;
if (play->envCtx.lightSettingOverride == 3) {
- play->envCtx.lightSettingOverride = 0xFF;
+ play->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE;
}
Audio_SetSfxUnderwaterReverb(false);
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 81e94d78f..a9f290371 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
@@ -101,7 +101,7 @@ void func_809CCEE8(EnBji01* this, PlayState* play) {
}
}
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- play->msgCtx.msgMode = 0;
+ play->msgCtx.msgMode = MSGMODE_NONE;
play->msgCtx.msgLength = 0;
func_809CD028(this, play);
} else {
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 c55c5bb3a..2f76201c5 100644
--- a/src/overlays/actors/ovl_En_Bom/z_en_bom.c
+++ b/src/overlays/actors/ovl_En_Bom/z_en_bom.c
@@ -356,28 +356,28 @@ void EnBom_Explode(EnBom* this, PlayState* play) {
CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider2.base);
}
- if (play->envCtx.lightSettings.diffuseColor1[0] != 0) {
- play->envCtx.lightSettings.diffuseColor1[0] -= 25;
+ if (play->envCtx.adjLightSettings.light1Color[0] != 0) {
+ play->envCtx.adjLightSettings.light1Color[0] -= 25;
}
- if (play->envCtx.lightSettings.diffuseColor1[1] != 0) {
- play->envCtx.lightSettings.diffuseColor1[1] -= 25;
+ if (play->envCtx.adjLightSettings.light1Color[1] != 0) {
+ play->envCtx.adjLightSettings.light1Color[1] -= 25;
}
- if (play->envCtx.lightSettings.diffuseColor1[2] != 0) {
- play->envCtx.lightSettings.diffuseColor1[2] -= 25;
+ if (play->envCtx.adjLightSettings.light1Color[2] != 0) {
+ play->envCtx.adjLightSettings.light1Color[2] -= 25;
}
- if (play->envCtx.lightSettings.ambientColor[0] != 0) {
- play->envCtx.lightSettings.ambientColor[0] -= 25;
+ if (play->envCtx.adjLightSettings.ambientColor[0] != 0) {
+ play->envCtx.adjLightSettings.ambientColor[0] -= 25;
}
- if (play->envCtx.lightSettings.ambientColor[1] != 0) {
- play->envCtx.lightSettings.ambientColor[1] -= 25;
+ if (play->envCtx.adjLightSettings.ambientColor[1] != 0) {
+ play->envCtx.adjLightSettings.ambientColor[1] -= 25;
}
- if (play->envCtx.lightSettings.ambientColor[2] != 0) {
- play->envCtx.lightSettings.ambientColor[2] -= 25;
+ if (play->envCtx.adjLightSettings.ambientColor[2] != 0) {
+ play->envCtx.adjLightSettings.ambientColor[2] -= 25;
}
if (this->timer == 0) {
@@ -550,10 +550,10 @@ void EnBom_Update(Actor* thisx, PlayState* play) {
CLEAR_TAG_PARAMS(this->isPowderKeg));
Actor_RequestQuakeAndRumble(thisx, play, sQuakeY[this->isPowderKeg],
sQuakeDurations[this->isPowderKeg]);
- play->envCtx.lightSettings.diffuseColor1[0] = play->envCtx.lightSettings.diffuseColor1[1] =
- play->envCtx.lightSettings.diffuseColor1[2] = 250;
- play->envCtx.lightSettings.ambientColor[0] = play->envCtx.lightSettings.ambientColor[1] =
- play->envCtx.lightSettings.ambientColor[2] = 250;
+ play->envCtx.adjLightSettings.light1Color[0] = play->envCtx.adjLightSettings.light1Color[1] =
+ play->envCtx.adjLightSettings.light1Color[2] = 250;
+ play->envCtx.adjLightSettings.ambientColor[0] = play->envCtx.adjLightSettings.ambientColor[1] =
+ play->envCtx.adjLightSettings.ambientColor[2] = 250;
Camera_AddQuake(&play->mainCamera, 2, 11, 8);
thisx->params = BOMB_TYPE_EXPLOSION;
this->timer = 10;
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 7e277f4cf..061081bc1 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
@@ -393,7 +393,7 @@ void func_809C51B4(EnBomBowlMan* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if ((play->msgCtx.bombersNotebookEventQueueCount == 0) &&
- ((play->msgCtx.msgMode == 0) || (Message_GetState(&play->msgCtx) == TEXT_STATE_DONE))) {
+ ((play->msgCtx.msgMode == MSGMODE_NONE) || (Message_GetState(&play->msgCtx) == TEXT_STATE_DONE))) {
play->nextEntrance = Entrance_CreateFromSpawn(6);
gSaveContext.nextCutsceneIndex = 0;
play->transitionTrigger = TRANS_TRIGGER_START;
@@ -511,7 +511,7 @@ void func_809C5738(EnBomBowlMan* this, PlayState* play) {
if (this->unk_2C2 == 0) {
if ((play->msgCtx.bombersNotebookEventQueueCount == 0) &&
- ((play->msgCtx.msgMode == 0) || (Message_GetState(&play->msgCtx) == TEXT_STATE_DONE))) {
+ ((play->msgCtx.msgMode == MSGMODE_NONE) || (Message_GetState(&play->msgCtx) == TEXT_STATE_DONE))) {
this->unk_2C2 = 1;
func_809C4B6C(this);
if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
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 21d8bf309..4f4b15545 100644
--- a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c
+++ b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c
@@ -142,7 +142,7 @@ void EnBombers_Init(Actor* thisx, PlayState* play) {
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 19.0f);
this->actor.gravity = -1.0f;
SkelAnime_InitFlex(play, &this->skelAnime, &object_cs_Skel_00F82C, &gBomberIdleAnim, this->jointTable,
- this->morphtable, OBJECT_CS_LIMB_MAX);
+ this->morphTable, OBJECT_CS_LIMB_MAX);
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
this->actor.targetMode = TARGET_MODE_0;
Actor_SetScale(&this->actor, 0.01f);
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 76013781b..500fff573 100644
--- a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.h
+++ b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.h
@@ -25,7 +25,7 @@ typedef struct EnBombers {
/* 0x000 */ Actor actor;
/* 0x144 */ SkelAnime skelAnime;
/* 0x188 */ Vec3s jointTable[OBJECT_CS_LIMB_MAX];
- /* 0x206 */ Vec3s morphtable[OBJECT_CS_LIMB_MAX];
+ /* 0x206 */ Vec3s morphTable[OBJECT_CS_LIMB_MAX];
/* 0x284 */ EnBombersActionFunc actionFunc;
/* 0x288 */ s16 unk_288;
/* 0x28A */ s16 unk_28A;
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 bf9ba05a9..92dfe8418 100644
--- a/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c
+++ b/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c
@@ -273,28 +273,28 @@ void func_808AEFD4(EnBombf* this, PlayState* play) {
CollisionCheck_SetAT(play, &play->colChkCtx, &this->colliderJntSph.base);
}
- if (play->envCtx.lightSettings.diffuseColor1[0] != 0) {
- play->envCtx.lightSettings.diffuseColor1[0] -= 25;
+ if (play->envCtx.adjLightSettings.light1Color[0] != 0) {
+ play->envCtx.adjLightSettings.light1Color[0] -= 25;
}
- if (play->envCtx.lightSettings.diffuseColor1[1] != 0) {
- play->envCtx.lightSettings.diffuseColor1[1] -= 25;
+ if (play->envCtx.adjLightSettings.light1Color[1] != 0) {
+ play->envCtx.adjLightSettings.light1Color[1] -= 25;
}
- if (play->envCtx.lightSettings.diffuseColor1[2] != 0) {
- play->envCtx.lightSettings.diffuseColor1[2] -= 25;
+ if (play->envCtx.adjLightSettings.light1Color[2] != 0) {
+ play->envCtx.adjLightSettings.light1Color[2] -= 25;
}
- if (play->envCtx.lightSettings.ambientColor[0] != 0) {
- play->envCtx.lightSettings.ambientColor[0] -= 25;
+ if (play->envCtx.adjLightSettings.ambientColor[0] != 0) {
+ play->envCtx.adjLightSettings.ambientColor[0] -= 25;
}
- if (play->envCtx.lightSettings.ambientColor[1] != 0) {
- play->envCtx.lightSettings.ambientColor[1] -= 25;
+ if (play->envCtx.adjLightSettings.ambientColor[1] != 0) {
+ play->envCtx.adjLightSettings.ambientColor[1] -= 25;
}
- if (play->envCtx.lightSettings.ambientColor[2] != 0) {
- play->envCtx.lightSettings.ambientColor[2] -= 25;
+ if (play->envCtx.adjLightSettings.ambientColor[2] != 0) {
+ play->envCtx.adjLightSettings.ambientColor[2] -= 25;
}
if (this->timer == 0) {
@@ -414,10 +414,10 @@ void EnBombf_Update(Actor* thisx, PlayState* play) {
CLEAR_TAG_PARAMS(CLEAR_TAG_SMALL_EXPLOSION));
Actor_PlaySfx(&this->actor, NA_SE_IT_BOMB_EXPLOSION);
- play->envCtx.lightSettings.diffuseColor1[0] = play->envCtx.lightSettings.diffuseColor1[1] =
- play->envCtx.lightSettings.diffuseColor1[2] = 250;
- play->envCtx.lightSettings.ambientColor[0] = play->envCtx.lightSettings.ambientColor[1] =
- play->envCtx.lightSettings.ambientColor[2] = 250;
+ play->envCtx.adjLightSettings.light1Color[0] = play->envCtx.adjLightSettings.light1Color[1] =
+ play->envCtx.adjLightSettings.light1Color[2] = 250;
+ play->envCtx.adjLightSettings.ambientColor[0] = play->envCtx.adjLightSettings.ambientColor[1] =
+ play->envCtx.adjLightSettings.ambientColor[2] = 250;
Camera_AddQuake(&play->mainCamera, 2, 11, 8);
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 959a986a4..8157d09c6 100644
--- a/src/overlays/actors/ovl_En_Box/z_en_box.c
+++ b/src/overlays/actors/ovl_En_Box/z_en_box.c
@@ -539,7 +539,8 @@ void EnBox_Open(EnBox* this, PlayState* play) {
Actor_SpawnAsChild(&play->actorCtx, &this->dyna.actor, play, ACTOR_EN_ELFORG, this->dyna.actor.world.pos.x,
this->dyna.actor.world.pos.y, this->dyna.actor.world.pos.z, this->dyna.actor.world.rot.x,
this->dyna.actor.world.rot.y, this->dyna.actor.world.rot.z,
- STRAY_FAIRY_PARAMS(ENBOX_GET_CHEST_FLAG(&this->dyna.actor), 0, STRAY_FAIRY_TYPE_CHEST));
+ STRAY_FAIRY_PARAMS(ENBOX_GET_CHEST_FLAG(&this->dyna.actor), STRAY_FAIRY_AREA_CLOCK_TOWN,
+ STRAY_FAIRY_TYPE_CHEST));
} else if (this->movementFlags & ENBOX_MOVE_0x40) {
this->movementFlags &= ~ENBOX_MOVE_0x40;
}
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 daa07db44..c55169218 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
@@ -205,13 +205,13 @@ void EnCne01_Init(Actor* thisx, PlayState* play) {
s32 pad;
EnCne01* this = THIS;
- this->enHy.animObjIndex = SubS_GetObjectIndex(OBJECT_OS_ANIME, play);
- this->enHy.headObjIndex = SubS_GetObjectIndex(OBJECT_CNE, play);
- this->enHy.skelUpperObjIndex = SubS_GetObjectIndex(OBJECT_CNE, play);
- this->enHy.skelLowerObjIndex = SubS_GetObjectIndex(OBJECT_CNE, play);
+ this->enHy.animObjectSlot = SubS_GetObjectSlot(OBJECT_OS_ANIME, play);
+ this->enHy.headObjectSlot = SubS_GetObjectSlot(OBJECT_CNE, play);
+ this->enHy.skelUpperObjectSlot = SubS_GetObjectSlot(OBJECT_CNE, play);
+ this->enHy.skelLowerObjectSlot = SubS_GetObjectSlot(OBJECT_CNE, play);
- if ((this->enHy.animObjIndex < 0) || (this->enHy.headObjIndex < 0) || (this->enHy.skelUpperObjIndex < 0) ||
- (this->enHy.skelLowerObjIndex < 0)) {
+ if ((this->enHy.animObjectSlot <= OBJECT_SLOT_NONE) || (this->enHy.headObjectSlot <= OBJECT_SLOT_NONE) ||
+ (this->enHy.skelUpperObjectSlot <= OBJECT_SLOT_NONE) || (this->enHy.skelLowerObjectSlot <= OBJECT_SLOT_NONE)) {
Actor_Kill(&this->enHy.actor);
}
this->enHy.actor.draw = NULL;
@@ -254,10 +254,10 @@ s32 EnCne01_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f*
if (limbIndex == CNE_LIMB_HEAD) {
OPEN_DISPS(play->state.gfxCtx);
- gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->enHy.headObjIndex].segment);
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.headObjIndex].segment);
+ gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->enHy.headObjectSlot].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->enHy.headObjectSlot].segment);
*dList = gCneHeadBrownHairDL;
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.skelLowerObjIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->enHy.skelLowerObjectSlot].segment);
CLOSE_DISPS(play->state.gfxCtx);
}
@@ -294,8 +294,8 @@ void EnCne01_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* ro
if (limbIndex == CNE_LIMB_RIGHT_FOOT) {
OPEN_DISPS(play->state.gfxCtx);
- gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->enHy.skelUpperObjIndex].segment);
- gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.skelUpperObjIndex].segment);
+ gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->enHy.skelUpperObjectSlot].segment);
+ gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->enHy.skelUpperObjectSlot].segment);
CLOSE_DISPS(play->state.gfxCtx);
}
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 f96e43cd5..5a234c05e 100644
--- a/src/overlays/actors/ovl_En_Cow/z_en_cow.c
+++ b/src/overlays/actors/ovl_En_Cow/z_en_cow.c
@@ -268,7 +268,7 @@ void EnCow_Talk(EnCow* this, PlayState* play) {
}
void EnCow_Idle(EnCow* this, PlayState* play) {
- if ((play->msgCtx.ocarinaMode == 0) || (play->msgCtx.ocarinaMode == 4)) {
+ if ((play->msgCtx.ocarinaMode == OCARINA_MODE_NONE) || (play->msgCtx.ocarinaMode == OCARINA_MODE_END)) {
if (gHorsePlayedEponasSong) {
if (this->flags & EN_COW_FLAG_WONT_GIVE_MILK) {
this->flags &= ~EN_COW_FLAG_WONT_GIVE_MILK;
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 6a936636c..d9147aa26 100644
--- a/src/overlays/actors/ovl_En_Dai/z_en_dai.c
+++ b/src/overlays/actors/ovl_En_Dai/z_en_dai.c
@@ -429,7 +429,7 @@ void func_80B3EE8C(EnDai* this, PlayState* play) {
void func_80B3EEDC(EnDai* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if ((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == 3) &&
+ if ((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) &&
(play->msgCtx.lastPlayedSong == OCARINA_SONG_GORON_LULLABY)) {
EnDai_ChangeAnim(this, ENDAI_ANIM_1);
this->actionFunc = func_80B3EE8C;
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 5282697a4..1e322650e 100644
--- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c
+++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c
@@ -86,7 +86,7 @@ void EnDaiku2_Init(Actor* thisx, PlayState* play) {
this->morphTable, OBJECT_DAIKU_LIMB_MAX);
this->actor.targetMode = TARGET_MODE_0;
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
- this->unk_278 = ENDAIKU2_GET_7F(&this->actor);
+ this->switchFlag = ENDAIKU2_GET_SWITCH_FLAG(&this->actor);
this->pathIndex = ENDAIKU2_GET_PATH_INDEX(&this->actor);
this->path = SubS_GetPathByIndex(play, this->pathIndex, ENDAIKU2_PATH_INDEX_NONE);
this->unk_280 = ENDAIKU2_GET_8000(&this->actor);
@@ -97,9 +97,9 @@ void EnDaiku2_Init(Actor* thisx, PlayState* play) {
return;
}
- if (this->unk_278 == ENDAIKU2_GET_7F_127) {
- this->unk_278 = ENDAIKU2_GET_7F_MINUS1;
- } else if (Flags_GetSwitch(play, this->unk_278)) {
+ if (this->switchFlag == 0x7F) {
+ this->switchFlag = -1;
+ } else if (Flags_GetSwitch(play, this->switchFlag)) {
this->unk_25C = this->path->count - 1;
func_80BE61D0(this);
Math_Vec3f_Copy(&this->actor.world.pos, &this->unk_268);
@@ -185,7 +185,7 @@ s32 func_80BE64C0(EnDaiku2* this, PlayState* play) {
Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.home.pos);
bomb = (EnBom*)Actor_FindNearby(play, &this->actor, -1, ACTORCAT_EXPLOSIVES, BREG(7) + 240.0f);
Math_Vec3f_Copy(&this->actor.world.pos, &sp30);
- if ((this->unk_278 >= ENDAIKU2_GET_7F_0) && !Flags_GetSwitch(play, this->unk_278) && (bomb != NULL) &&
+ if ((this->switchFlag >= 0) && !Flags_GetSwitch(play, this->switchFlag) && (bomb != NULL) &&
(bomb->actor.id == ACTOR_EN_BOM)) {
if (!bomb->isPowderKeg) {
this->actor.textId = 0x32D3;
@@ -228,7 +228,7 @@ void func_80BE65B4(EnDaiku2* this, PlayState* play) {
}
this->unk_264 = 1.0f;
- if ((this->unk_278 >= ENDAIKU2_GET_7F_0) && Flags_GetSwitch(play, this->unk_278)) {
+ if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) {
this->unk_28A = 5;
if (this->animIndex != ENDAIKU2_ANIM_10) {
EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_10);
@@ -251,7 +251,7 @@ void func_80BE66E4(EnDaiku2* this, PlayState* play) {
Math_SmoothStepToS(&this->actor.world.rot.y, this->actor.home.rot.y, 1, 0xBB8, 0x0);
if (sp98 != 2) {
- if ((this->unk_278 >= ENDAIKU2_GET_7F_0) && Flags_GetSwitch(play, this->unk_278)) {
+ if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) {
this->unk_28A = 5;
if (this->animIndex != ENDAIKU2_ANIM_10) {
EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_10);
@@ -323,7 +323,7 @@ void func_80BE6B40(EnDaiku2* this, PlayState* play) {
s32 day = gSaveContext.save.day;
this->unk_288 = 1;
- if ((day != 3) && Flags_GetSwitch(play, this->unk_278)) {
+ if ((day != 3) && Flags_GetSwitch(play, this->switchFlag)) {
this->actionFunc = func_80BE6BC0;
} else {
EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_5);
@@ -433,7 +433,7 @@ void func_80BE6EF0(EnDaiku2* this, PlayState* play) {
EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_3);
}
- if ((this->unk_278 >= ENDAIKU2_GET_7F_0) && Flags_GetSwitch(play, this->unk_278)) {
+ if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) {
this->unk_28A = 5;
if (this->animIndex != ENDAIKU2_ANIM_10) {
EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_10);
@@ -582,16 +582,16 @@ void func_80BE7718(EnDaiku2* this, PlayState* play) {
s32 i;
GraphicsContext* gfxCtx = play->state.gfxCtx;
EnDaiku2Effect* effect = this->effects;
- s32 objectIdx;
+ s32 objectSlot;
OPEN_DISPS(play->state.gfxCtx);
Gfx_SetupDL25_Opa(play->state.gfxCtx);
- objectIdx = Object_GetIndex(&play->objectCtx, OBJECT_BOMBIWA);
- if ((objectIdx >= 0) && Object_IsLoaded(&play->objectCtx, objectIdx)) {
+ objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_BOMBIWA);
+ if ((objectSlot > OBJECT_SLOT_NONE) && Object_IsLoaded(&play->objectCtx, objectSlot)) {
gDPPipeSync(POLY_OPA_DISP++);
- gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[objectIdx].segment);
+ gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[objectSlot].segment);
for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) {
if (effect->isEnabled) {
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 51cd23124..c047b6577 100644
--- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h
+++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h
@@ -8,18 +8,12 @@ struct EnDaiku2;
typedef void (*EnDaiku2ActionFunc)(struct EnDaiku2*, PlayState*);
-#define ENDAIKU2_GET_7F(thisx) ((thisx)->params & 0x7F)
+#define ENDAIKU2_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
#define ENDAIKU2_GET_PATH_INDEX(thisx) (((thisx)->params >> 7) & 0x3F)
#define ENDAIKU2_GET_8000(thisx) (((thisx)->params >> 15) & 0x1)
#define ENDAIKU2_PATH_INDEX_NONE 0x3F
-typedef enum {
- /* -1 */ ENDAIKU2_GET_7F_MINUS1 = -1,
- /* 0 */ ENDAIKU2_GET_7F_0,
- /* 127 */ ENDAIKU2_GET_7F_127 = 127
-} EnDaiku2Param;
-
typedef struct EnDaiku2Effect {
/* 0x00 */ u8 isEnabled;
/* 0x04 */ Vec3f unk_04;
@@ -45,7 +39,7 @@ typedef struct EnDaiku2 {
/* 0x268 */ Vec3f unk_268;
/* 0x274 */ s16 unk_274;
/* 0x276 */ s16 animIndex;
- /* 0x278 */ s16 unk_278;
+ /* 0x278 */ s16 switchFlag;
/* 0x27A */ s16 pathIndex;
/* 0x27C */ UNK_TYPE1 unk_27C[0x4];
/* 0x280 */ s32 unk_280;
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 7da0437a9..4fb015365 100644
--- a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c
+++ b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c
@@ -150,7 +150,7 @@ void EnDekunuts_Destroy(Actor* thisx, PlayState* play) {
void func_808BD348(EnDekunuts* this) {
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX;
this->drawDmgEffScale = 0.55f;
- this->drawDmgEffFrozenSteamScale = 0.82500005f;
+ this->drawDmgEffFrozenSteamScale = 825.0f * 0.001f;
this->drawDmgEffAlpha = 1.0f;
this->collider.base.colType = COLTYPE_HIT3;
this->unk_190 = 80;
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 3d4d95b87..86d8524be 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
@@ -58,7 +58,7 @@ void EnDemoheishi_Init(Actor* thisx, PlayState* play) {
EnDemoheishi* this = THIS;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 25.0f);
- SkelAnime_InitFlex(play, &this->skelAnime, &gSoldierSkel, &gSoldierWave, this->jointTable, this->morphTable,
+ SkelAnime_InitFlex(play, &this->skelAnime, &gSoldierSkel, &gSoldierWaveAnim, this->jointTable, this->morphTable,
SOLDIER_LIMB_MAX);
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
this->actor.targetMode = TARGET_MODE_6;
@@ -83,11 +83,11 @@ typedef enum {
} EnDemoheishiAnimation;
static AnimationHeader* sAnimations[DEMOHEISHI_ANIM_MAX] = {
- &gSoldierStandHandOnHip, // DEMOHEISHI_ANIM_STAND_HAND_ON_HIP
- &gSoldierCheerWithSpear, // DEMOHEISHI_ANIM_CHEER_WITH_SPEAR
- &gSoldierWave, // DEMOHEISHI_ANIM_WAVE
- &gSoldierSitAndReach, // DEMOHEISHI_ANIM_SIT_AND_REACH
- &gSoldierStandUp, // DEMOHEISHI_ANIM_STAND_UP
+ &gSoldierStandHandOnHipAnim, // DEMOHEISHI_ANIM_STAND_HAND_ON_HIP
+ &gSoldierCheerWithSpearAnim, // DEMOHEISHI_ANIM_CHEER_WITH_SPEAR
+ &gSoldierWaveAnim, // DEMOHEISHI_ANIM_WAVE
+ &gSoldierSitAndReachAnim, // DEMOHEISHI_ANIM_SIT_AND_REACH
+ &gSoldierStandUpAnim, // DEMOHEISHI_ANIM_STAND_UP
};
static u8 sAnimationModes[DEMOHEISHI_ANIM_MAX] = {
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 0dcce10d0..22c247c1f 100644
--- a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c
+++ b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c
@@ -378,7 +378,7 @@ void func_8089AC70(EnDinofos* this) {
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX;
this->drawDmgEffScale = 0.55f;
this->colliderJntSph.base.colType = COLTYPE_HIT3;
- this->drawDmgEffFrozenSteamScale = 0.82500005f;
+ this->drawDmgEffFrozenSteamScale = 825.0f * 0.001f;
this->drawDmgEffAlpha = 1.0f;
this->unk_290 = 80;
this->actor.flags &= ~ACTOR_FLAG_400;
@@ -450,7 +450,7 @@ s32 func_8089AE00(EnDinofos* this, PlayState* play) {
return true;
}
- if ((GET_PLAYER_FORM == PLAYER_FORM_GORON) && (player->actor.velocity.y < -5.0f) && (player->unk_AE7 == 1) &&
+ if ((GET_PLAYER_FORM == PLAYER_FORM_GORON) && (player->actor.velocity.y < -5.0f) && (player->actionVar1 == 1) &&
(this->unk_28B == 0)) {
this->unk_28B = 1;
for (i = 0; i < ARRAY_COUNT(this->colliderJntSphElement) - 3; i++) {
@@ -563,7 +563,7 @@ void func_8089B580(EnDinofos* this, PlayState* play) {
}
if ((play->sceneId == SCENE_MITURIN) && Animation_OnFrame(&this->skelAnime, 55.0f)) {
- play->envCtx.lightSettingOverride = 0xFF;
+ play->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE;
}
if (SkelAnime_Update(&this->skelAnime)) {
@@ -1118,7 +1118,7 @@ void func_8089CF00(EnDinofos* this, PlayState* play) {
Animation_PlayOnce(&this->skelAnime, &gDinolfosFireEndAnim);
this->colliderJntSph.base.atFlags &= ~AT_ON;
if (play->sceneId == SCENE_MITURIN) {
- play->envCtx.lightSettingOverride = 255;
+ play->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE;
}
this->actionFunc = func_8089CF70;
}
@@ -1289,7 +1289,7 @@ s32 func_8089D60C(EnDinofos* this, PlayState* play) {
func_8089ACEC(this, play);
func_8089AD70(this);
if (play->sceneId == SCENE_MITURIN) {
- play->envCtx.lightSettingOverride = 255;
+ play->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE;
}
this->colliderQuad.base.atFlags &= ~(AT_ON | AT_BOUNCED);
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 25a54ec4a..e30ee26ab 100644
--- a/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c
+++ b/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c
@@ -60,7 +60,7 @@ typedef enum {
} EnDnhAnimation;
static AnimationInfoS sAnimationInfo[ENDNH_ANIM_MAX] = {
- { &gKoumeKioskHeadMoving, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENDNH_ANIM_HEAD_MOVING
+ { &gKoumeKioskHeadMovingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENDNH_ANIM_HEAD_MOVING
};
static TexturePtr sEyeTextures[] = {
@@ -136,7 +136,7 @@ void EnDnh_Init(Actor* thisx, PlayState* play) {
EnDnh* this = THIS;
ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.0f);
- SkelAnime_Init(play, &this->skelAnime, &gKoumeKioskSkeleton, NULL, this->jointTable, this->morphTable,
+ SkelAnime_Init(play, &this->skelAnime, &gKoumeKioskSkel, NULL, this->jointTable, this->morphTable,
KOUME_KIOSK_LIMB_MAX);
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, ENDNH_ANIM_HEAD_MOVING);
this->actor.shape.yOffset = 1100.0f;
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 2dfc36daa..0dab8ff45 100644
--- a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c
+++ b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c
@@ -209,10 +209,10 @@ s32 func_80A515C4(EnDnk* this) {
}
void func_80A51648(EnDnk* this, PlayState* play) {
- if (SubS_IsObjectLoaded(this->unk_28E, play) == true) {
- gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->unk_28E].segment);
+ if (SubS_IsObjectLoaded(this->objectSlot, play) == true) {
+ gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->objectSlot].segment);
this->actor.draw = func_80A52018;
- this->actor.objBankIndex = this->unk_28E;
+ this->actor.objectSlot = this->objectSlot;
ActorShape_Init(&this->actor.shape, 0.0f, NULL, 18.0f);
switch (ENDNK_GET_3(&this->actor)) {
@@ -263,22 +263,23 @@ void EnDnk_DoNothing(EnDnk* this, PlayState* play) {
void EnDnk_Init(Actor* thisx, PlayState* play) {
EnDnk* this = THIS;
- this->unk_28E = -1;
+ this->objectSlot = OBJECT_SLOT_NONE;
+
switch (ENDNK_GET_3(&this->actor)) {
case ENDNK_GET_3_1:
- this->unk_28E = SubS_GetObjectIndex(OBJECT_HINTNUTS, play);
+ this->objectSlot = SubS_GetObjectSlot(OBJECT_HINTNUTS, play);
break;
case ENDNK_GET_3_0:
- this->unk_28E = SubS_GetObjectIndex(OBJECT_DNK, play);
+ this->objectSlot = SubS_GetObjectSlot(OBJECT_DNK, play);
break;
case ENDNK_GET_3_2:
- this->unk_28E = SubS_GetObjectIndex(OBJECT_DEKUNUTS, play);
+ this->objectSlot = SubS_GetObjectSlot(OBJECT_DEKUNUTS, play);
break;
}
- if (this->unk_28E >= 0) {
+ if (this->objectSlot > OBJECT_SLOT_NONE) {
this->actionFunc = func_80A51648;
} else {
Actor_Kill(&this->actor);
diff --git a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.h b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.h
index ba870d67b..8b0900ae7 100644
--- a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.h
+++ b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.h
@@ -33,7 +33,7 @@ typedef struct EnDnk {
/* 0x21E */ Vec3s morphTable[DNK_LIMB_MAX];
/* 0x260 */ Gfx* unk_260[DEKU_PALACE_GUARD_LIMB_MAX];
/* 0x28C */ u16 unk_28C;
- /* 0x28E */ s8 unk_28E;
+ /* 0x28E */ s8 objectSlot;
/* 0x290 */ s16 unk_290;
/* 0x292 */ s16 unk_292;
/* 0x294 */ s16 unk_294;
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 500259dc6..d32f2f3f4 100644
--- a/src/overlays/actors/ovl_En_Dno/z_en_dno.c
+++ b/src/overlays/actors/ovl_En_Dno/z_en_dno.c
@@ -372,7 +372,7 @@ void func_80A71C3C(EnDno* this, PlayState* play) {
}
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- play->msgCtx.msgMode = 0;
+ play->msgCtx.msgMode = MSGMODE_NONE;
play->msgCtx.msgLength = 0;
func_80A71E54(this, play);
} else if (this->actor.xzDistToPlayer < 60.0f) {
@@ -482,7 +482,7 @@ void func_80A71F18(EnDno* this, PlayState* play) {
if (Message_ShouldAdvance(play)) {
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo,
EN_DNO_ANIM_IMPLORE_END, &this->animIndex);
- play->msgCtx.msgMode = 0x44;
+ play->msgCtx.msgMode = MSGMODE_PAUSED;
}
break;
@@ -688,7 +688,7 @@ void func_80A725F8(EnDno* this, PlayState* play) {
case 0x800:
case 0x801:
if (Message_ShouldAdvance(play)) {
- play->msgCtx.msgMode = 0x44;
+ play->msgCtx.msgMode = MSGMODE_PAUSED;
this->unk_452 = 1;
this->unk_454 = 0.0f;
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_OPEN_PARASOL,
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 723ee895f..02777ec44 100644
--- a/src/overlays/actors/ovl_En_Dns/z_en_dns.c
+++ b/src/overlays/actors/ovl_En_Dns/z_en_dns.c
@@ -386,7 +386,7 @@ void func_8092D108(EnDns* this, PlayState* play) {
Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_OPA_DISP++, gKingsChamberDekuGuardDekuFlower);
+ gSPDisplayList(POLY_OPA_DISP++, gKingsChamberDekuGuardDekuFlowerDL);
CLOSE_DISPS(play->state.gfxCtx);
}
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 289b1403d..3451af722 100644
--- a/src/overlays/actors/ovl_En_Door/z_en_door.c
+++ b/src/overlays/actors/ovl_En_Door/z_en_door.c
@@ -294,7 +294,7 @@ typedef struct {
/* 0x4 */ s16 objectId;
} EnDoorInfo; // size = 0x6
-static EnDoorInfo sObjInfo[] = {
+static EnDoorInfo sObjectInfo[] = {
{ SCENE_MITURIN, 0x01, OBJECT_NUMA_OBJ },
{ SCENE_TENMON_DAI, 0x02, OBJECT_DOR01 },
{ SCENE_00KEIKOKU, 0x02, OBJECT_DOR01 },
@@ -416,8 +416,8 @@ static Gfx* D_808679A4[14][2] = {
void EnDoor_Init(Actor* thisx, PlayState* play2) {
PlayState* play = play2;
- s32 objectBankIndex;
- EnDoorInfo* objectInfo = &sObjInfo[0];
+ s32 objectSlot;
+ EnDoorInfo* objectInfo = &sObjectInfo[0];
EnDoor* this = THIS;
s32 i;
@@ -425,7 +425,7 @@ void EnDoor_Init(Actor* thisx, PlayState* play2) {
this->doorType = ENDOOR_GET_TYPE(thisx);
- this->switchFlag = ENDOOR_GET_PARAM_7F(thisx);
+ this->switchFlag = ENDOOR_GET_SWITCH_FLAG(thisx);
if ((this->doorType == ENDOOR_TYPE_7) && (this->switchFlag == 0)) {
DynaPolyActor_Init(&this->knobDoor.dyna, 0);
DynaPolyActor_LoadMesh(play, &this->knobDoor.dyna, &gDoorCol);
@@ -433,31 +433,32 @@ void EnDoor_Init(Actor* thisx, PlayState* play2) {
SkelAnime_Init(play, &this->knobDoor.skelAnime, &gDoorSkel, &gameplay_keep_Anim_020658, this->limbTable,
this->limbTable, DOOR_LIMB_MAX);
if (this->doorType == ENDOOR_TYPE_5) {
- objectInfo = &sObjInfo[17 + this->switchFlag];
+ objectInfo = &sObjectInfo[17 + this->switchFlag];
} else {
- for (i = 0; i < ARRAY_COUNT(sObjInfo) - 34; i++, objectInfo++) {
+ for (i = 0; i < ARRAY_COUNT(sObjectInfo) - 34; i++, objectInfo++) {
if (play->sceneId == objectInfo->sceneId) {
break;
}
}
- if ((i >= ARRAY_COUNT(sObjInfo) - 34) && (Object_GetIndex(&play->objectCtx, GAMEPLAY_FIELD_KEEP) >= 0)) {
+ if ((i >= ARRAY_COUNT(sObjectInfo) - 34) &&
+ (Object_GetSlot(&play->objectCtx, GAMEPLAY_FIELD_KEEP) > OBJECT_SLOT_NONE)) {
objectInfo++;
}
}
this->knobDoor.dlIndex = objectInfo->dListIndex;
- objectBankIndex = Object_GetIndex(&play->objectCtx, objectInfo->objectId);
- if (objectBankIndex < 0) {
- objectInfo = &sObjInfo[15];
- objectBankIndex = Object_GetIndex(&play->objectCtx, objectInfo->objectId);
- if (objectBankIndex != 0) {
+ objectSlot = Object_GetSlot(&play->objectCtx, objectInfo->objectId);
+ if (objectSlot <= OBJECT_SLOT_NONE) {
+ objectInfo = &sObjectInfo[15];
+ objectSlot = Object_GetSlot(&play->objectCtx, objectInfo->objectId);
+ if (objectSlot != 0) {
Actor_Kill(&this->knobDoor.dyna.actor);
return;
}
}
- this->knobDoor.requiredObjBankIndex = objectBankIndex;
+ this->knobDoor.objectSlot = objectSlot;
this->knobDoor.dlIndex = objectInfo->dListIndex; // Set twice?
- if (this->knobDoor.dyna.actor.objBankIndex == this->knobDoor.requiredObjBankIndex) {
+ if (this->knobDoor.dyna.actor.objectSlot == this->knobDoor.objectSlot) {
func_80866A5C(this, play);
} else {
this->actionFunc = func_80866A5C;
@@ -480,8 +481,8 @@ void EnDoor_Destroy(Actor* thisx, PlayState* play) {
}
void func_80866A5C(EnDoor* this, PlayState* play) {
- if (Object_IsLoaded(&play->objectCtx, this->knobDoor.requiredObjBankIndex)) {
- this->knobDoor.dyna.actor.objBankIndex = this->knobDoor.requiredObjBankIndex;
+ if (Object_IsLoaded(&play->objectCtx, this->knobDoor.objectSlot)) {
+ this->knobDoor.dyna.actor.objectSlot = this->knobDoor.objectSlot;
this->actionFunc = func_80866B20;
this->knobDoor.dyna.actor.world.rot.y = 0;
if (this->doorType == ENDOOR_TYPE_1) {
@@ -688,7 +689,7 @@ s32 EnDoor_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f*
void EnDoor_Draw(Actor* thisx, PlayState* play) {
EnDoor* this = THIS;
- if (this->knobDoor.dyna.actor.objBankIndex == this->knobDoor.requiredObjBankIndex) {
+ if (this->knobDoor.dyna.actor.objectSlot == this->knobDoor.objectSlot) {
OPEN_DISPS(play->state.gfxCtx);
if ((this->doorType == ENDOOR_TYPE_7) && (this->switchFlag == 0)) {
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 03dc31ab6..5ea0b7df3 100644
--- a/src/overlays/actors/ovl_En_Door/z_en_door.h
+++ b/src/overlays/actors/ovl_En_Door/z_en_door.h
@@ -10,7 +10,7 @@ struct EnDoor;
typedef void (*EnDoorActionFunc)(struct EnDoor*, PlayState*);
#define ENDOOR_GET_TYPE(thisx) (((thisx)->params >> 7) & 7)
-#define ENDOOR_GET_PARAM_7F(thisx) (((thisx)->params) & 0x7F)
+#define ENDOOR_GET_SWITCH_FLAG(thisx) (((thisx)->params) & 0x7F)
typedef enum EnDoorType {
/* 0 */ ENDOOR_TYPE_0,
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 dfa0e4934..c6c1b312e 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
@@ -58,7 +58,7 @@ typedef struct {
/* 0x4 */ s16 objectId;
} EnDoorEtcInfo; // size = 0x6
-EnDoorEtcInfo sObjInfo[] = {
+EnDoorEtcInfo sObjectInfo[] = {
{ SCENE_MITURIN, 1, OBJECT_NUMA_OBJ },
{ -1, 0, GAMEPLAY_KEEP },
{ -1, 13, GAMEPLAY_FIELD_KEEP },
@@ -87,8 +87,8 @@ static InitChainEntry sInitChain[] = {
void EnDoorEtc_Init(Actor* thisx, PlayState* play2) {
PlayState* play = play2;
- s32 objectIndex;
- EnDoorEtcInfo* objectInfo = sObjInfo;
+ s32 objectSlot;
+ EnDoorEtcInfo* objectInfo = sObjectInfo;
s32 i;
EnDoorEtc* this = THIS;
@@ -101,16 +101,16 @@ void EnDoorEtc_Init(Actor* thisx, PlayState* play2) {
break;
}
}
- if ((i >= 15) && (Object_GetIndex(&play->objectCtx, GAMEPLAY_FIELD_KEEP) >= 0)) {
+ if ((i >= 15) && (Object_GetSlot(&play->objectCtx, GAMEPLAY_FIELD_KEEP) > OBJECT_SLOT_NONE)) {
objectInfo++;
}
- objectIndex = Object_GetIndex(&play->objectCtx, objectInfo->objectId);
- if (objectIndex < 0) {
+ objectSlot = Object_GetSlot(&play->objectCtx, objectInfo->objectId);
+ if (objectSlot <= OBJECT_SLOT_NONE) {
Actor_Kill(&this->knobDoor.dyna.actor);
} else {
- this->knobDoor.requiredObjBankIndex = objectIndex;
+ this->knobDoor.objectSlot = objectSlot;
this->knobDoor.dlIndex = objectInfo->dListIndex;
- if (this->knobDoor.dyna.actor.objBankIndex == this->knobDoor.requiredObjBankIndex) {
+ if (this->knobDoor.dyna.actor.objectSlot == this->knobDoor.objectSlot) {
EnDoorEtc_WaitForObject(this, play);
} else {
this->actionFunc = EnDoorEtc_WaitForObject;
@@ -139,9 +139,9 @@ s32 EnDoorEtc_IsDistanceGreater(Vec3f* a, Vec3f* b, f32 c) {
}
void EnDoorEtc_WaitForObject(EnDoorEtc* this, PlayState* play) {
- if (Object_IsLoaded(&play->objectCtx, this->knobDoor.requiredObjBankIndex)) {
+ if (Object_IsLoaded(&play->objectCtx, this->knobDoor.objectSlot)) {
this->knobDoor.dyna.actor.flags &= ~ACTOR_FLAG_10;
- this->knobDoor.dyna.actor.objBankIndex = this->knobDoor.requiredObjBankIndex;
+ this->knobDoor.dyna.actor.objectSlot = this->knobDoor.objectSlot;
this->actionFunc = func_80AC2354;
this->knobDoor.dyna.actor.draw = EnDoorEtc_Draw;
}
@@ -193,8 +193,8 @@ void func_80AC21A0(EnDoorEtc* this, PlayState* play) {
}
}
if ((this->knobDoor.dyna.actor.textId == 0x239B) &&
- Flags_GetSwitch(play, ENDOORETC_GET_SWITCHFLAG(&this->knobDoor.dyna.actor))) {
- Flags_UnsetSwitch(play, ENDOORETC_GET_SWITCHFLAG(&this->knobDoor.dyna.actor));
+ Flags_GetSwitch(play, ENDOORETC_GET_SWITCH_FLAG(&this->knobDoor.dyna.actor))) {
+ Flags_UnsetSwitch(play, ENDOORETC_GET_SWITCH_FLAG(&this->knobDoor.dyna.actor));
this->actionFunc = func_80AC2154;
this->knobDoor.dyna.actor.textId = 0x1800; // "It won't budge!"
this->unk_1F4 |= 1;
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 9cd63248f..c0bbdf98b 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
@@ -6,7 +6,7 @@
struct EnDoorEtc;
-#define ENDOORETC_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F)
+#define ENDOORETC_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
typedef void (*EnDoorEtcActionFunc)(struct EnDoorEtc*, PlayState*);
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 efaa851e6..59d504705 100644
--- a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c
+++ b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c
@@ -548,7 +548,7 @@ void EnDragon_Grab(EnDragon* this, PlayState* play) {
play->unk_18770(play, player);
player->actor.parent = &this->actor;
- player->unk_AE8 = 50;
+ player->actionVar2 = 50;
this->action = DEEP_PYTHON_ACTION_GRAB;
Actor_PlaySfx(&this->actor, NA_SE_EN_UTSUBO_EAT);
EnDragon_SetupAttack(this);
@@ -626,7 +626,7 @@ void EnDragon_Attack(EnDragon* this, PlayState* play) {
this->grabWaitTimer = 30;
CutsceneManager_Stop(this->grabCsId);
if (player->stateFlags2 & PLAYER_STATE2_80) {
- player->unk_AE8 = 100;
+ player->actionVar2 = 100;
}
this->actor.flags &= ~ACTOR_FLAG_100000;
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 da2f0571d..e067b57b4 100644
--- a/src/overlays/actors/ovl_En_Drs/z_en_drs.c
+++ b/src/overlays/actors/ovl_En_Drs/z_en_drs.c
@@ -68,7 +68,7 @@ void EnDrs_CollisionUpdate(EnDrs* this, PlayState* play) {
void EnDrs_Setup(EnDrs* this, PlayState* play) {
s32 pad[2];
- if ((this->moonMaskObjBankIndex >= 0) && SubS_IsObjectLoaded(this->moonMaskObjBankIndex, play)) {
+ if ((this->moonMaskObjectSlot > OBJECT_SLOT_NONE) && SubS_IsObjectLoaded(this->moonMaskObjectSlot, play)) {
ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.0f);
SkelAnime_InitFlex(play, &this->skelAnime, &gWeddingDressMannequinSkel, NULL, this->jointTable,
this->morphTable, WEDDING_DRESS_MANNEQUIN_LIMB_MAX);
@@ -87,7 +87,7 @@ void EnDrs_Idle(EnDrs* this, PlayState* play) {
void EnDrs_Init(Actor* thisx, PlayState* play) {
EnDrs* this = THIS;
- this->moonMaskObjBankIndex = SubS_GetObjectIndex(OBJECT_MSMO, play);
+ this->moonMaskObjectSlot = SubS_GetObjectSlot(OBJECT_MSMO, play);
this->actionFunc = EnDrs_Setup;
}
@@ -110,17 +110,17 @@ void EnDrs_Update(Actor* thisx, PlayState* play) {
void EnDrs_PostLimbDraw(PlayState* play2, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
EnDrs* this = THIS;
PlayState* play = play2;
- s8 temp = this->moonMaskObjBankIndex;
- s8 temp2 = this->actor.objBankIndex;
+ s8 temp = this->moonMaskObjectSlot;
+ s8 temp2 = this->actor.objectSlot;
// Anju removes the Moon Mask at the start of the Couple's Mask cutscene
// after that it will no longer be rendered.
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_87_02) && (limbIndex == WEDDING_DRESS_MANNEQUIN_LIMB_MASK)) {
OPEN_DISPS(play->state.gfxCtx);
- gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[temp].segment);
+ gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[temp].segment);
gSPDisplayList(POLY_OPA_DISP++, &gMoonMaskDL);
- gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[temp2].segment);
+ gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[temp2].segment);
CLOSE_DISPS(play->state.gfxCtx);
}
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 d811ae780..3c9803bf5 100644
--- a/src/overlays/actors/ovl_En_Drs/z_en_drs.h
+++ b/src/overlays/actors/ovl_En_Drs/z_en_drs.h
@@ -16,7 +16,7 @@ typedef struct EnDrs {
/* 0x18C */ ColliderCylinder collider;
/* 0x1D8 */ Vec3s jointTable[WEDDING_DRESS_MANNEQUIN_LIMB_MAX];
/* 0x1F0 */ Vec3s morphTable[WEDDING_DRESS_MANNEQUIN_LIMB_MAX];
- /* 0x208 */ s8 moonMaskObjBankIndex;
+ /* 0x208 */ s8 moonMaskObjectSlot;
} EnDrs; // size = 0x20C */
#endif // Z_EN_DRS_H
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 50db36063..8287c0680 100644
--- a/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c
+++ b/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c
@@ -71,7 +71,7 @@ void EnDs2n_Init(Actor* thisx, PlayState* play) {
EnDs2n* this = THIS;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 20.0f);
- SkelAnime_InitFlex(play, &this->skelAnime, &gDs2nSkeleton, &gDs2nIdleAnim, NULL, NULL, 0);
+ SkelAnime_InitFlex(play, &this->skelAnime, &gDs2nSkel, &gDs2nIdleAnim, NULL, NULL, 0);
EnDs2n_SetupIdle(this);
}
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 14f08c531..b8dea95a0 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
@@ -16,8 +16,8 @@ void EnDyExtra_Destroy(Actor* thisx, PlayState* play);
void EnDyExtra_Update(Actor* thisx, PlayState* play);
void EnDyExtra_Draw(Actor* thisx, PlayState* play);
-void func_80A61334(EnDyExtra* this, PlayState* play);
-void func_80A613C8(EnDyExtra* this, PlayState* play);
+void EnDyExtra_WaitForTrigger(EnDyExtra* this, PlayState* play);
+void EnDyExtra_Fall(EnDyExtra* this, PlayState* play);
ActorInit En_Dy_Extra_InitVars = {
ACTOR_EN_DY_EXTRA,
@@ -41,35 +41,35 @@ void EnDyExtra_Init(Actor* thisx, PlayState* play) {
this->actor.scale.x = 0.025f;
this->actor.scale.y = 0.039f;
this->actor.scale.z = 0.025f;
- this->unk160 = this->actor.world.pos;
+ this->initPos = this->actor.world.pos;
this->actor.gravity = -0.2f;
- this->unk150 = 1.0f;
- this->unk14C = 0x3C;
- this->actionFunc = func_80A61334;
+ this->alphaScale = 1.0f;
+ this->timer = 60;
+ this->actionFunc = EnDyExtra_WaitForTrigger;
}
-void func_80A61334(EnDyExtra* this, PlayState* play) {
+void EnDyExtra_WaitForTrigger(EnDyExtra* this, PlayState* play) {
Math_ApproachF(&this->actor.gravity, 0.0f, 0.1f, 0.005f);
if (this->actor.world.pos.y < -85.0f) {
this->actor.velocity.y = 0.0f;
}
- if ((this->unk14C == 0) && (this->unk14A != 0)) {
- this->unk14C = 0x32;
- this->actionFunc = func_80A613C8;
+ if ((this->timer == 0) && this->trigger) {
+ this->timer = 50;
+ this->actionFunc = EnDyExtra_Fall;
}
}
-void func_80A613C8(EnDyExtra* this, PlayState* play) {
+void EnDyExtra_Fall(EnDyExtra* this, PlayState* play) {
Math_ApproachF(&this->actor.gravity, 0.0f, 0.1f, 0.005f);
- if ((this->unk14C == 0) || (this->unk150 < 0.02f)) {
+ if ((this->timer == 0) || (this->alphaScale < 0.02f)) {
Actor_Kill(&this->actor);
return;
}
- this->unk150 -= 0.02f;
+ this->alphaScale -= 0.02f;
if (this->actor.world.pos.y < -85.0f) {
this->actor.velocity.y = 0.0f;
@@ -79,40 +79,40 @@ void func_80A613C8(EnDyExtra* this, PlayState* play) {
void EnDyExtra_Update(Actor* thisx, PlayState* play) {
EnDyExtra* this = THIS;
- DECR(this->unk14C);
+ DECR(this->timer);
Actor_PlaySfx(&this->actor, NA_SE_PL_SPIRAL_HEAL_BEAM - SFX_FLAG);
this->actionFunc(this, play);
Actor_MoveWithGravity(&this->actor);
}
-static Color_RGBA8 D_80A61740[] = {
+static Color_RGBA8 sPrimColors[] = {
{ 255, 255, 170, 255 }, { 255, 170, 255, 255 }, { 255, 255, 170, 255 },
{ 170, 255, 255, 255 }, { 255, 255, 170, 255 },
};
-static Color_RGBA8 D_80A61754[] = {
+static Color_RGBA8 sEnvColors[] = {
{ 255, 100, 0, 255 }, { 255, 0, 100, 255 }, { 100, 255, 0, 255 }, { 0, 100, 255, 255 }, { 255, 230, 0, 255 }
};
-static u8 D_80A61768[] = {
- 2, 1, 1, 2, 0, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 1, 2, 0, 0,
+static u8 sAlphaTypeIndices[] = {
+ 2, 1, 1, 2, 0, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 1, 2, 0,
};
void EnDyExtra_Draw(Actor* thisx, PlayState* play) {
- EnDyExtra* this = THIS;
s32 pad;
+ EnDyExtra* this = THIS;
GraphicsContext* gfxCtx = play->state.gfxCtx;
- Vtx* vertices = Lib_SegmentedToVirtual(object_dy_obj_Vtx_00DD40);
+ Vtx* vertices = Lib_SegmentedToVirtual(gGreatFairySpiralBeamVtx);
s32 i;
- u8 unk[3];
+ u8 alphas[3];
- unk[0] = 0.0f;
- unk[1] = (s8)(this->unk150 * 240.0f);
- unk[2] = (s8)(this->unk150 * 255.0f);
+ alphas[0] = 0.0f;
+ alphas[1] = (s32)(this->alphaScale * 240.0f);
+ alphas[2] = (s32)(this->alphaScale * 255.0f);
- for (i = 0; i < 27; i++) {
- if (D_80A61768[i]) {
- vertices[i].v.cn[3] = unk[D_80A61768[i]];
+ for (i = 0; i < ARRAY_COUNT(sAlphaTypeIndices); i++) {
+ if (sAlphaTypeIndices[i]) {
+ vertices[i].v.cn[3] = alphas[sAlphaTypeIndices[i]];
}
}
@@ -124,10 +124,10 @@ void EnDyExtra_Draw(Actor* thisx, PlayState* play) {
play->state.frames * -8, 0x10, 0x10));
gDPPipeSync(POLY_XLU_DISP++);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, D_80A61740[this->type].r, D_80A61740[this->type].g,
- D_80A61740[this->type].b, 255);
- gDPSetEnvColor(POLY_XLU_DISP++, D_80A61754[this->type].r, D_80A61754[this->type].g, D_80A61754[this->type].b, 128);
- gSPDisplayList(POLY_XLU_DISP++, object_dy_obj_DL_00DEF0);
+ gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, sPrimColors[this->type].r, sPrimColors[this->type].g,
+ sPrimColors[this->type].b, 255);
+ gDPSetEnvColor(POLY_XLU_DISP++, sEnvColors[this->type].r, sEnvColors[this->type].g, sEnvColors[this->type].b, 128);
+ gSPDisplayList(POLY_XLU_DISP++, gGreatFairySpiralBeamDL);
CLOSE_DISPS(gfxCtx);
}
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 0e5d8614b..f36b12051 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
@@ -11,12 +11,11 @@ typedef struct EnDyExtra {
/* 0x000 */ Actor actor;
/* 0x144 */ EnDyExtraActionFunc actionFunc;
/* 0x148 */ s16 type;
- /* 0x14A */ s16 unk14A;
- /* 0x14C */ s16 unk14C;
- /* 0x14E */ s16 unk14E;
- /* 0x150 */ f32 unk150;
- /* 0x154 */ UNK_TYPE1 unk154[0xC];
- /* 0x160 */ Vec3f unk160;
+ /* 0x14A */ s16 trigger;
+ /* 0x14C */ s16 timer;
+ /* 0x150 */ f32 alphaScale;
+ /* 0x154 */ Vec3f scale; // not used, leftover from OoT
+ /* 0x160 */ Vec3f initPos; // set and not used
} EnDyExtra; // size = 0x16C
#endif // Z_EN_DY_EXTRA_H
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 30dc3de26..775a14eb5 100644
--- a/src/overlays/actors/ovl_En_Egol/z_en_egol.c
+++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.c
@@ -481,7 +481,7 @@ void EnEgol_Init(Actor* thisx, PlayState* play) {
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);
- this->switchFlag = EYEGORE_GET_SWITCH(&this->actor);
+ this->switchFlag = EYEGORE_GET_SWITCH_FLAG(&this->actor);
if (this->switchFlag == 0x7F) {
this->switchFlag = -1;
}
@@ -933,7 +933,7 @@ void EnEgol_Slam(EnEgol* this, PlayState* play) {
}
EnEgol_DestroyBlocks(this, play, this->rightHandPos, this->leftHandPos);
}
- if (this->animEndFrame <= curFrame) {
+ if (curFrame >= this->animEndFrame) {
EnEgol_SetupSlamWait(this);
} else if ((this->skelAnime.curFrame <= 17.0f) && (this->skelAnime.curFrame >= 10.0f)) {
CollisionCheck_SetAT(play, &play->colChkCtx, &this->bodyCollider.base);
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 35d232d51..0861ce580 100644
--- a/src/overlays/actors/ovl_En_Egol/z_en_egol.h
+++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.h
@@ -9,7 +9,7 @@ struct EnEgol;
typedef void (*EnEgolActionFunc)(struct EnEgol*, PlayState*);
#define EYEGORE_GET_PATH_INDEX(thisx) ((thisx)->params & 0x3F)
-#define EYEGORE_GET_SWITCH(thisx) (((thisx)->params >> 6) & 0x7F)
+#define EYEGORE_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 6) & 0x7F)
#define EYEGORE_PATH_INDEX_NONE 0x3F
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 61cf693d7..53864ab9c 100644
--- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c
+++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c
@@ -744,7 +744,7 @@ void func_8088E0F0(EnElf* this, PlayState* play) {
if (this->unk_250 < 2.0f) {
this->unk_250 += 0.1f;
} else {
- gSaveContext.healthAccumulator = 160;
+ gSaveContext.healthAccumulator = 0xA0;
this->unk_246++;
}
break;
@@ -1323,7 +1323,7 @@ void func_8088FC34(EnElf* this, PlayState* play) {
} else {
Math_StepToF(&this->unk_240, 1.0f, 0.05f);
}
- func_800FD2B4(play, SQ(this->unk_240), player->actor.projectedPos.z + 780.0f, 0.2f, 0.5f);
+ Environment_AdjustLights(play, SQ(this->unk_240), player->actor.projectedPos.z + 780.0f, 0.2f, 0.5f);
}
}
@@ -1521,8 +1521,8 @@ void func_8089010C(Actor* thisx, PlayState* play) {
this->elfMsg = NULL;
this->timer++;
- if ((this->unk_240 >= 0.0f) &&
- func_800FD2B4(play, SQ(this->unk_240) * this->unk_240, player->actor.projectedPos.z + 780.0f, 0.2f, 0.5f)) {
+ if ((this->unk_240 >= 0.0f) && Environment_AdjustLights(play, SQ(this->unk_240) * this->unk_240,
+ player->actor.projectedPos.z + 780.0f, 0.2f, 0.5f)) {
Math_StepToF(&this->unk_240, -0.05f, 0.05f);
}
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 ef53999de..c9d86e4f6 100644
--- a/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c
+++ b/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c
@@ -56,7 +56,7 @@ void EnElfbub_Init(Actor* thisx, PlayState* play) {
EnElfbub* this = THIS;
Actor* childActor;
- if (Flags_GetSwitch(play, ENELFBUB_GET_SWITCHFLAG(&this->actor))) {
+ if (Flags_GetSwitch(play, ENELFBUB_GET_SWITCH_FLAG(&this->actor))) {
Actor_Kill(&this->actor);
return;
}
@@ -73,10 +73,11 @@ void EnElfbub_Init(Actor* thisx, PlayState* play) {
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
- childActor = Actor_SpawnAsChild(
- &play->actorCtx, &this->actor, play, ACTOR_EN_ELFORG, this->actor.world.pos.x, this->actor.world.pos.y + 12.0f,
- this->actor.world.pos.z, this->actor.world.rot.x, this->actor.world.rot.y, this->actor.world.rot.z,
- STRAY_FAIRY_PARAMS(ENELFBUB_GET_SWITCHFLAG(&this->actor), 0, STRAY_FAIRY_TYPE_BUBBLE));
+ childActor = Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_ELFORG, this->actor.world.pos.x,
+ this->actor.world.pos.y + 12.0f, this->actor.world.pos.z, this->actor.world.rot.x,
+ this->actor.world.rot.y, this->actor.world.rot.z,
+ STRAY_FAIRY_PARAMS(ENELFBUB_GET_SWITCH_FLAG(&this->actor),
+ STRAY_FAIRY_AREA_CLOCK_TOWN, STRAY_FAIRY_TYPE_BUBBLE));
if (childActor != NULL) {
childActor->parent = &this->actor;
}
@@ -140,6 +141,7 @@ void EnElfbub_Idle(EnElfbub* this, PlayState* play) {
void EnElfbub_Update(Actor* thisx, PlayState* play) {
EnElfbub* this = THIS;
+
Collider_UpdateCylinder(&this->actor, &this->collider);
this->actionFunc(this, play);
Actor_SetFocus(&this->actor, this->actor.shape.yOffset);
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 50c6bd672..d115ab91c 100644
--- a/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.h
+++ b/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.h
@@ -3,7 +3,7 @@
#include "global.h"
-#define ENELFBUB_GET_SWITCHFLAG(thisx) ((((thisx)->params) & 0xFE00) >> 9)
+#define ENELFBUB_GET_SWITCH_FLAG(thisx) ((((thisx)->params) & 0xFE00) >> 9)
struct EnElfbub;
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 42ac47f69..3eb2e357b 100644
--- a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c
+++ b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c
@@ -1,11 +1,38 @@
-/*
- * File: z_en_elfgrp.c
+/**
+ * @file z_en_elfgrp.c
* Overlay: ovl_En_Elfgrp
- * Description: Group of Stray Fairies in Fairy Fountain
+ * Description: Manager for group of Stray Fairies and Great Fairy in Fairy's Fountains
+ *
+ * There are many different quantities associated to the Stray Fairies in each of the 3 places (missing, in the
+ * Fountain, held by Player)
+ * - Total number of fairies (always 25 in the original game)
+ * - Original number in the Fountain (24 for Clock Town Fairy Fountain, 10 for the other 4)
+ * - Current number in the Fountain (bitpacked in Fountain scene flags, see below)
+ * - Total number found (stored in save context)
+ * - Current number held (i.e. found but not returned)
+ *
+ * The permanentSceneFlags for Fairy Fountains used in this actor are of the form
+ * ```c
+ * struct {
+ * u32 clockTown : 1;
+ * u32 fountains[4] : 5;
+ * } FairyFountains;
+ * ```
+ * where arg1 is:
+ * - 0: Clock Town
+ * - 1: Woodfall,
+ * - 2: Snowhead,
+ * - 3: Great Bay,
+ * - 4: Ikana
+ *
+ * Clock Town is handled separately, and then the fountains are looked up with manual array indexing
+ *
+ * @note Clock Town is handled separately in a number of places
*/
#include "z_en_elfgrp.h"
#include "overlays/actors/ovl_En_Elforg/z_en_elforg.h"
+#include "overlays/actors/ovl_Demo_Effect/z_demo_effect.h"
#define FLAGS (ACTOR_FLAG_10)
@@ -17,24 +44,28 @@ void EnElfgrp_Init(Actor* thisx, PlayState* play);
void EnElfgrp_Destroy(Actor* thisx, PlayState* play);
void EnElfgrp_Update(Actor* thisx, PlayState* play);
-s32 func_80A39BD0(PlayState* play, s32 arg2);
-s32 func_80A39C1C(PlayState* play, s32 arg1);
-void func_80A39DC8(EnElfgrp* this, PlayState* play, s32 arg2, s32 arg3);
-void func_80A3A0AC(EnElfgrp* this, PlayState* play);
-void func_80A3A0F4(EnElfgrp* this, PlayState* play);
-void func_80A3A210(EnElfgrp* this, PlayState* play);
-void func_80A3A274(EnElfgrp* this, PlayState* play);
+s32 EnElfgrp_GetHeldFairiesCount(PlayState* play, s32 type);
+s32 EnElfgrp_GetFountainFairiesCount(PlayState* play, s32 type);
+void EnElfgrp_SpawnStrayFairies(EnElfgrp* this, PlayState* play, s32 count, s32 fairyType);
void func_80A3A398(EnElfgrp* this, PlayState* play);
-void func_80A3A484(EnElfgrp* this, PlayState* play);
-void func_80A3A4AC(EnElfgrp* this, PlayState* play);
void func_80A3A520(EnElfgrp* this, PlayState* play);
-void func_80A3A600(EnElfgrp* this, PlayState* play);
-void func_80A3A610(EnElfgrp* this, PlayState* play);
-void func_80A3A6F4(EnElfgrp* this, PlayState* play);
-void func_80A3A77C(EnElfgrp* this, PlayState* play);
+void EnElfgrp_DoNothing(EnElfgrp* this, PlayState* play);
void func_80A3A7FC(EnElfgrp* this, PlayState* play);
void func_80A3A8F8(EnElfgrp* this, PlayState* play);
+// State flags
+#define ELFGRP_STATE_0 (1 << 0)
+#define ELFGRP_STATE_1 (1 << 1)
+#define ELFGRP_STATE_2 (1 << 2)
+#define ELFGRP_STATE_3 (1 << 3)
+#define ELFGRP_STATE_4 (1 << 4)
+
+// Used for the type in EnElfgrp_SpawnStrayFairies
+typedef enum ElfgrpSpawnedFairyTypes {
+ /* 0 */ SPAWNED_STRAY_FAIRY_TYPE_PRESENT, // STRAY_FAIRY_TYPE_FAIRY_FOUNTAIN
+ /* 1 */ SPAWNED_STRAY_FAIRY_TYPE_RETURNING // STRAY_FAIRY_TYPE_RETURNING_TO_FOUNTAIN
+} ElfgrpSpawnedFairyTypes;
+
ActorInit En_Elfgrp_InitVars = {
ACTOR_EN_ELFGRP,
ACTORCAT_PROP,
@@ -47,7 +78,15 @@ ActorInit En_Elfgrp_InitVars = {
(ActorFunc)NULL,
};
-void func_80A396B0(EnElfgrp* this, s32 numCutscenes) {
+/**
+ * Set the actor's cutscene id to a later one, or -1 if run out.
+ *
+ * @note This is only expected to be called in Init when this actor has the first cutscene set, but can also work for
+ * later cutscenes if \p numCutscenes is set correcly.
+ *
+ * @param numCutscenes Number of cutscenes in the list to skip forward to set this one.
+ */
+void EnElfgrp_SetCutscene(EnElfgrp* this, s32 numCutscenes) {
while (numCutscenes > 0) {
if (this->actor.csId == CS_ID_NONE) {
break;
@@ -61,113 +100,118 @@ void func_80A396B0(EnElfgrp* this, s32 numCutscenes) {
void EnElfgrp_Init(Actor* thisx, PlayState* play) {
s32 pad;
EnElfgrp* this = THIS;
- s32 sp24;
+ s32 numberInFountain;
- this->unk_147 = ENELFGRP_GET(&this->actor);
+ this->type = ENELFGRP_GET_TYPE(&this->actor);
this->unk_148 = 0;
- this->unk_14A = 0;
+ this->stateFlags = 0;
this->actor.focus.pos.y += 40.0f;
this->actor.flags &= ~ACTOR_FLAG_TARGETABLE;
- switch (this->unk_147) {
- case ENELFGRP_1:
- case ENELFGRP_2:
- case ENELFGRP_3:
- case ENELFGRP_4:
- this->unk_148 = this->unk_147 - 1;
- sp24 = func_80A39C1C(play, this->unk_147);
- this->unk_146 = 1 << this->unk_147;
+ switch (this->type) {
+ case ENELFGRP_TYPE_POWER:
+ case ENELFGRP_TYPE_WISDOM:
+ case ENELFGRP_TYPE_COURAGE:
+ case ENELFGRP_TYPE_KINDNESS:
+ this->unk_148 = this->type - 1;
+ numberInFountain = EnElfgrp_GetFountainFairiesCount(play, this->type);
+ this->talkedOnceFlag = 1 << this->type;
- if (sp24 < 25) {
- func_80A39DC8(this, play, sp24, 0);
+ if (numberInFountain < STRAY_FAIRY_TOTAL) {
+ EnElfgrp_SpawnStrayFairies(this, play, numberInFountain, SPAWNED_STRAY_FAIRY_TYPE_PRESENT);
}
- if (sp24 >= 25) {
+ if (numberInFountain >= STRAY_FAIRY_TOTAL) {
this->actionFunc = func_80A3A520;
- func_80A396B0(this, 2);
- return;
+ EnElfgrp_SetCutscene(this, 2);
+ break;
}
- if ((func_80A39BD0(play, this->unk_147) + sp24) >= 25) {
+ if ((EnElfgrp_GetHeldFairiesCount(play, this->type) + numberInFountain) >= STRAY_FAIRY_TOTAL) {
this->actionFunc = func_80A3A398;
- switch (this->unk_147) {
- case ENELFGRP_1:
- if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_02)) {
- func_80A396B0(this, 1);
+ switch (this->type) {
+ case ENELFGRP_TYPE_POWER:
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_OBTAINED_GREAT_SPIN_ATTACK)) {
+ EnElfgrp_SetCutscene(this, 1);
} else {
- this->unk_14A |= 4;
+ this->stateFlags |= ELFGRP_STATE_2;
}
break;
- case ENELFGRP_2:
+ case ENELFGRP_TYPE_WISDOM:
if (gSaveContext.save.saveInfo.playerData.isDoubleMagicAcquired == true) {
- func_80A396B0(this, 1);
+ EnElfgrp_SetCutscene(this, 1);
}
break;
- case ENELFGRP_3:
+ case ENELFGRP_TYPE_COURAGE:
if (gSaveContext.save.saveInfo.playerData.doubleDefense) {
- func_80A396B0(this, 1);
+ EnElfgrp_SetCutscene(this, 1);
}
break;
- case ENELFGRP_4:
+ case ENELFGRP_TYPE_KINDNESS:
if (INV_CONTENT(ITEM_SWORD_GREAT_FAIRY) == ITEM_SWORD_GREAT_FAIRY) {
- func_80A396B0(this, 1);
+ EnElfgrp_SetCutscene(this, 1);
} else {
- this->unk_14A |= 0x10;
+ this->stateFlags |= ELFGRP_STATE_4;
}
break;
default:
break;
}
- } else if (func_80A39BD0(play, this->unk_147)) {
+ } else if (EnElfgrp_GetHeldFairiesCount(play, this->type)) {
this->actionFunc = func_80A3A7FC;
- this->actor.textId = (this->unk_147 * 3) + 0x581;
+ this->actor.textId = (this->type * 3) + 0x581;
} else {
this->actionFunc = func_80A3A8F8;
- if ((gSaveContext.save.saveInfo.weekEventReg[9] & this->unk_146)) {
- this->actor.textId = (this->unk_147 * 3) + 0x580;
+
+ if ((gSaveContext.save.saveInfo.weekEventReg[9] & this->talkedOnceFlag)) { // talked for first time
+ this->actor.textId = (this->type * 3) + 0x580;
} else {
- this->actor.textId = (this->unk_147 * 3) + 0x57F;
+ this->actor.textId = (this->type * 3) + 0x57F;
}
}
break;
- default:
- sp24 = func_80A39C1C(play, 0);
- this->unk_146 = ENELFGRP_1;
- if (sp24 >= 25) {
+ default: // ENELFGRP_TYPE_MAGIC
+ numberInFountain = EnElfgrp_GetFountainFairiesCount(play, ENELFGRP_TYPE_MAGIC);
+ this->talkedOnceFlag = 1 << ENELFGRP_TYPE_MAGIC;
+
+ if (numberInFountain >= STRAY_FAIRY_TOTAL) {
this->actionFunc = func_80A3A520;
- if ((this->actor.home.rot.z != 0) && Flags_GetSwitch(play, this->actor.home.rot.z)) {
- this->actionFunc = func_80A3A600;
+
+ if ((ENELFGRP_GET_SWITCHFLAG_ROT(&this->actor) != 0) &&
+ Flags_GetSwitch(play, ENELFGRP_GET_SWITCHFLAG_ROT(&this->actor))) {
+ this->actionFunc = EnElfgrp_DoNothing;
} else if (INV_CONTENT(ITEM_MASK_GREAT_FAIRY) == ITEM_MASK_GREAT_FAIRY) {
- func_80A396B0(this, 4);
+ EnElfgrp_SetCutscene(this, 4);
} else if (INV_CONTENT(ITEM_MASK_DEKU) != ITEM_MASK_DEKU) {
- func_80A396B0(this, 5);
+ EnElfgrp_SetCutscene(this, 5);
} else {
- this->unk_14A |= 2;
- func_80A396B0(this, 6);
+ this->stateFlags |= ELFGRP_STATE_1;
+ EnElfgrp_SetCutscene(this, 6);
}
} else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_80)) {
- func_80A39DC8(this, play, 24, 0);
+ EnElfgrp_SpawnStrayFairies(this, play, STRAY_FAIRY_TOTAL - 1, SPAWNED_STRAY_FAIRY_TYPE_PRESENT);
this->actionFunc = func_80A3A398;
+
if (INV_CONTENT(ITEM_MASK_DEKU) == ITEM_MASK_DEKU) {
if (INV_CONTENT(ITEM_MASK_GREAT_FAIRY) == ITEM_MASK_GREAT_FAIRY) {
- func_80A396B0(this, 2);
+ EnElfgrp_SetCutscene(this, 2);
} else {
- func_80A396B0(this, 3);
- this->unk_14A |= 2;
+ EnElfgrp_SetCutscene(this, 3);
+ this->stateFlags |= ELFGRP_STATE_1;
}
} else if (gSaveContext.save.saveInfo.playerData.isMagicAcquired == true) {
- func_80A396B0(this, 1);
+ EnElfgrp_SetCutscene(this, 1);
}
} else {
- func_80A39DC8(this, play, 24, 0);
+ EnElfgrp_SpawnStrayFairies(this, play, STRAY_FAIRY_TOTAL - 1, SPAWNED_STRAY_FAIRY_TYPE_PRESENT);
this->actionFunc = func_80A3A8F8;
- if ((gSaveContext.save.saveInfo.weekEventReg[9] & this->unk_146)) {
+ if ((gSaveContext.save.saveInfo.weekEventReg[9] & this->talkedOnceFlag)) {
this->actor.textId = 0x580;
} else {
this->actor.textId = 0x578;
@@ -181,116 +225,119 @@ void EnElfgrp_Init(Actor* thisx, PlayState* play) {
void EnElfgrp_Destroy(Actor* thisx, PlayState* play) {
}
-s32 func_80A39BD0(PlayState* play, s32 arg2) {
- if ((arg2 < 1) || (arg2 >= 5)) {
+// Number of Stray Fairies currently held by Player
+s32 EnElfgrp_GetHeldFairiesCount(PlayState* play, s32 type) {
+ if ((type <= ENELFGRP_TYPE_MAGIC) || (type > ENELFGRP_TYPE_KINDNESS)) {
return 0;
}
- return (((void)0, gSaveContext.save.saveInfo.inventory.strayFairies[arg2 - 1]) - func_80A39C1C(play, arg2)) + 10;
+ // Number in fountain originally + total number collected - number currently in fountain
+ return (STRAY_FAIRY_TOTAL - STRAY_FAIRY_SCATTERED_TOTAL) +
+ ((void)0, gSaveContext.save.saveInfo.inventory.strayFairies[type - 1]) -
+ EnElfgrp_GetFountainFairiesCount(play, type);
}
-s32 func_80A39C1C(PlayState* play, s32 arg1) {
- // the permanentSceneFlags access here is in the form
- // struct {
- // u32 clockTown : 1;
- // u32 fountains[4] : 5;
- // } FairyFountains;
- // where arg1 is:
- // 0: clocktown
- // 1: woodfall,
- // 2: snowhead,
- // 3: great bay,
- // 4: stone tower
- // clocktown is handled separately, and then the fountains are looked up as array indexing
+// Number of Stray Fairies in currently in Fountain
+s32 EnElfgrp_GetFountainFairiesCount(PlayState* play, s32 type) {
+ s32 numberInFountain;
- s32 temp_v1;
-
- if ((arg1 < 0) || (arg1 >= 5)) {
+ if ((type < ENELFGRP_TYPE_MAGIC) || (type > ENELFGRP_TYPE_KINDNESS)) {
return 0;
}
- if (arg1 == 0) {
+ if (type == ENELFGRP_TYPE_MAGIC) {
if (gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 & 1) {
- return 25;
+ return STRAY_FAIRY_TOTAL;
+ } else {
+ return STRAY_FAIRY_TOTAL - 1;
}
- return 24;
}
- temp_v1 = (gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 >> (((arg1 - 1) * 5) + 1)) & 0x1F;
- if (temp_v1 < 10) {
- temp_v1 = 10;
- } else if (temp_v1 > 25) {
- temp_v1 = 25;
+ numberInFountain =
+ (gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 >> (((type - 1) * 5) + 1)) & 0x1F;
+ if (numberInFountain < STRAY_FAIRY_TOTAL - STRAY_FAIRY_SCATTERED_TOTAL) {
+ numberInFountain = STRAY_FAIRY_TOTAL - STRAY_FAIRY_SCATTERED_TOTAL;
+ } else if (numberInFountain > STRAY_FAIRY_TOTAL) {
+ numberInFountain = STRAY_FAIRY_TOTAL;
}
- return temp_v1;
+ return numberInFountain;
}
-void func_80A39CD4(PlayState* play, s32 arg1, s32 arg2) {
- if ((arg1 < 0) || (arg1 > 4) || (arg2 < 10) || (arg2 > 25)) {
+// Update number of Stray Fairies in Fountain
+void EnElfgrp_SetFountainFairiesCount(PlayState* play, s32 type, s32 newCount) {
+ if ((type < ENELFGRP_TYPE_MAGIC) || (type > ENELFGRP_TYPE_KINDNESS) ||
+ (newCount < (STRAY_FAIRY_TOTAL - STRAY_FAIRY_SCATTERED_TOTAL)) || (newCount > STRAY_FAIRY_TOTAL)) {
return;
}
- if (arg1 == 0) {
- if (arg2 == 25) {
+ if (type == ENELFGRP_TYPE_MAGIC) {
+ if (newCount == STRAY_FAIRY_TOTAL) {
gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 |= 1;
} else {
gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 &= ~1;
}
} else {
- gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 &= ~(0x1F << ((arg1 * 5) - 4));
- gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 |= arg2 << ((arg1 * 5) - 4);
+ gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 &= ~(0x1F << ((type * 5) - 4));
+ gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 |= newCount << ((type * 5) - 4);
}
}
-void func_80A39DC8(EnElfgrp* this, PlayState* play, s32 arg2, s32 arg3) {
+void EnElfgrp_SpawnStrayFairies(EnElfgrp* this, PlayState* play, s32 count, s32 fairyType) {
s32 pad;
s32 i;
- Actor* elforg;
- s32 params;
- Vec3f sp6C;
+ Actor* strayFairy;
+ s32 strayFairyParams;
+ Vec3f spawnCenterPos;
Player* player = GET_PLAYER(play);
- if (arg3 == 0) {
- this->unk_14A |= 8;
+ if (fairyType == 0) {
+ this->stateFlags |= ELFGRP_STATE_3;
}
- if (arg3 == 0) {
- sp6C = this->actor.world.pos;
- sp6C.y += 20.0f;
- params = STRAY_FAIRY_PARAMS(0, this->unk_147, STRAY_FAIRY_TYPE_FAIRY_FOUNTAIN);
+ if (fairyType == 0) {
+ spawnCenterPos = this->actor.world.pos;
+ spawnCenterPos.y += 20.0f;
+ strayFairyParams = STRAY_FAIRY_PARAMS(0, this->type, STRAY_FAIRY_TYPE_FAIRY_FOUNTAIN);
} else {
- sp6C = player->actor.world.pos;
- sp6C.y += 20.0f;
- params = STRAY_FAIRY_PARAMS(0, this->unk_147, STRAY_FAIRY_TYPE_TURN_IN_TO_FAIRY_FOUNTAIN);
+ spawnCenterPos = player->actor.world.pos;
+ spawnCenterPos.y += 20.0f;
+ strayFairyParams = STRAY_FAIRY_PARAMS(0, this->type, STRAY_FAIRY_TYPE_RETURNING_TO_FOUNTAIN);
}
- for (i = 0; i < arg2; i++) {
- elforg = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELFORG, Rand_CenteredFloat(20.0f) + sp6C.x, sp6C.y,
- Rand_CenteredFloat(20.0f) + sp6C.z, 0, 0, 0, params);
- if (elforg == NULL) {
+ for (i = 0; i < count; i++) {
+ strayFairy =
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELFORG, Rand_CenteredFloat(20.0f) + spawnCenterPos.x,
+ spawnCenterPos.y, Rand_CenteredFloat(20.0f) + spawnCenterPos.z, 0, 0, 0, strayFairyParams);
+
+ if (strayFairy == NULL) {
continue;
}
- elforg->home.pos.x = this->actor.home.pos.x;
- elforg->home.pos.y = this->actor.home.pos.y + 20.0f;
- elforg->home.pos.z = this->actor.home.pos.z;
+ strayFairy->home.pos.x = this->actor.home.pos.x;
+ strayFairy->home.pos.y = this->actor.home.pos.y + 20.0f;
+ strayFairy->home.pos.z = this->actor.home.pos.z;
}
}
-s32 func_80A39F50(PlayState* play) {
+/**
+ * Tell any spawned Stray Fairies to come to the Fountain center.
+ *
+ * @return s32 always 0
+ */
+s32 EnElfgrp_SummonStrayFairies(PlayState* play) {
Actor* itemAction = play->actorCtx.actorLists[ACTORCAT_ITEMACTION].first;
- EnElforg* elfOrg;
+ EnElforg* strayFairy;
while (itemAction != NULL) {
if ((itemAction->id != ACTOR_EN_ELFORG) ||
((STRAY_FAIRY_TYPE(itemAction) != STRAY_FAIRY_TYPE_FAIRY_FOUNTAIN) &&
- (STRAY_FAIRY_TYPE(itemAction) != STRAY_FAIRY_TYPE_TURN_IN_TO_FAIRY_FOUNTAIN))) {
+ (STRAY_FAIRY_TYPE(itemAction) != STRAY_FAIRY_TYPE_RETURNING_TO_FOUNTAIN))) {
itemAction = itemAction->next;
continue;
}
- elfOrg = (EnElforg*)itemAction;
- if (!(elfOrg->strayFairyFlags & STRAY_FAIRY_FLAG_MOVES_QUICKLY_TO_HOME)) {
- elfOrg->strayFairyFlags |= STRAY_FAIRY_FLAG_MOVES_QUICKLY_TO_HOME;
+ strayFairy = (EnElforg*)itemAction;
+ if (!(strayFairy->strayFairyFlags & STRAY_FAIRY_FLAG_MOVES_QUICKLY_TO_HOME)) {
+ strayFairy->strayFairyFlags |= STRAY_FAIRY_FLAG_MOVES_QUICKLY_TO_HOME;
}
itemAction = itemAction->next;
}
@@ -298,50 +345,58 @@ s32 func_80A39F50(PlayState* play) {
return 0;
}
-s32 func_80A39FBC(PlayState* play) {
+/**
+ * Make the Stray Fairies in the fountain spin quickly when healing Player.
+ *
+ * @return s32 time to spend in healing action.
+ */
+s32 EnElfgrp_SpinStrayFairies(PlayState* play) {
Actor* itemAction = play->actorCtx.actorLists[ACTORCAT_ITEMACTION].first;
- EnElforg* elfOrg;
- s32 phi_v1 = 30;
+ EnElforg* strayFairy;
+ s32 timer = 30;
while (itemAction != NULL) {
if ((itemAction->id != ACTOR_EN_ELFORG) ||
((STRAY_FAIRY_TYPE(itemAction) != STRAY_FAIRY_TYPE_FAIRY_FOUNTAIN) &&
- (STRAY_FAIRY_TYPE(itemAction) != STRAY_FAIRY_TYPE_TURN_IN_TO_FAIRY_FOUNTAIN))) {
+ (STRAY_FAIRY_TYPE(itemAction) != STRAY_FAIRY_TYPE_RETURNING_TO_FOUNTAIN))) {
itemAction = itemAction->next;
continue;
}
- elfOrg = (EnElforg*)itemAction;
- if (!(elfOrg->strayFairyFlags & STRAY_FAIRY_FLAG_CIRCLES_QUICKLY_IN_FOUNTAIN)) {
- elfOrg->strayFairyFlags |= STRAY_FAIRY_FLAG_CIRCLES_QUICKLY_IN_FOUNTAIN;
- if (phi_v1 >= 100) {
- return phi_v1;
+ strayFairy = (EnElforg*)itemAction;
+ if (!(strayFairy->strayFairyFlags & STRAY_FAIRY_FLAG_CIRCLES_QUICKLY_IN_FOUNTAIN)) {
+ strayFairy->strayFairyFlags |= STRAY_FAIRY_FLAG_CIRCLES_QUICKLY_IN_FOUNTAIN;
+ if (timer >= 100) {
+ return timer;
}
- elfOrg->secondaryTimer = phi_v1;
- phi_v1 += 5;
+ strayFairy->secondaryTimer = timer;
+ timer += 5;
}
itemAction = itemAction->next;
}
- return phi_v1;
+ return timer;
}
-void func_80A3A044(PlayState* play) {
+/**
+ * Tell the Stray Fairies to disappear, before reviving the Great Fairy
+ */
+void EnElfgrp_VanishStrayFairies(PlayState* play) {
Actor* itemAction = play->actorCtx.actorLists[ACTORCAT_ITEMACTION].first;
- EnElforg* elfOrg;
+ EnElforg* strayFairy;
while (itemAction != NULL) {
if ((itemAction->id != ACTOR_EN_ELFORG) ||
((STRAY_FAIRY_TYPE(itemAction) != STRAY_FAIRY_TYPE_FAIRY_FOUNTAIN) &&
- (STRAY_FAIRY_TYPE(itemAction) != STRAY_FAIRY_TYPE_TURN_IN_TO_FAIRY_FOUNTAIN))) {
+ (STRAY_FAIRY_TYPE(itemAction) != STRAY_FAIRY_TYPE_RETURNING_TO_FOUNTAIN))) {
itemAction = itemAction->next;
continue;
}
- elfOrg = (EnElforg*)itemAction;
- elfOrg->actor.home.rot.x = 0x14;
- elfOrg->strayFairyFlags |= STRAY_FAIRY_FLAG_SPARKLES_AND_SHRINKS;
+ strayFairy = (EnElforg*)itemAction;
+ STRAY_FAIRY_SPARKLE_COUNT(&strayFairy->actor) = 20;
+ strayFairy->strayFairyFlags |= STRAY_FAIRY_FLAG_SPARKLES_AND_SHRINKS;
itemAction = itemAction->next;
}
@@ -349,68 +404,70 @@ void func_80A3A044(PlayState* play) {
void func_80A3A0AC(EnElfgrp* this, PlayState* play) {
if (!Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_100)) {
- this->actionFunc = func_80A3A600;
+ this->actionFunc = EnElfgrp_DoNothing;
CutsceneManager_Stop(this->actor.csId);
}
}
void func_80A3A0F4(EnElfgrp* this, PlayState* play) {
- if (this->unk_144 == 10) {
+ if (this->timer == 10) {
Audio_PlaySfx(NA_SE_SY_WHITE_OUT_T);
- if (ENELFGRP_GET(&this->actor) < ENELFGRP_4) {
+ if (ENELFGRP_GET_TYPE(&this->actor) < ENELFGRP_TYPE_KINDNESS) {
Actor_Spawn(&play->actorCtx, play, ACTOR_DEMO_EFFECT, this->actor.world.pos.x,
this->actor.world.pos.y + 30.0f, this->actor.world.pos.z, 0, 0, 0,
- ENELFGRP_GET(&this->actor) + ENELFGRP_4);
- } else {
+ ENELFGRP_GET_TYPE(&this->actor) + DEMO_EFFECT_TYPE_LIGHT_BASE);
+ } else { // ENELFGRP_TYPE_KINDNESS
Actor_Spawn(&play->actorCtx, play, ACTOR_DEMO_EFFECT, this->actor.world.pos.x,
- this->actor.world.pos.y + 30.0f, this->actor.world.pos.z, 0, 0, 0, 4);
+ this->actor.world.pos.y + 30.0f, this->actor.world.pos.z, 0, 0, 0,
+ DEMO_EFFECT_TYPE_LIGHT_DARK_YELLOW);
}
}
- if ((this->unk_144 > 10) && (this->unk_14A & 1)) {
+ if ((this->timer > 10) && (this->stateFlags & ELFGRP_STATE_0)) {
Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_FAIRY_GROUP_FRY - SFX_FLAG);
}
- if (this->unk_144 == 0) {
+ if (this->timer == 0) {
this->actionFunc = func_80A3A0AC;
}
}
void func_80A3A210(EnElfgrp* this, PlayState* play) {
- if (this->unk_144 == 0) {
+ if (this->timer == 0) {
this->actionFunc = func_80A3A0F4;
- func_80A3A044(play);
- this->unk_144 = 30;
+ EnElfgrp_VanishStrayFairies(play);
+ this->timer = 30;
}
- if (this->unk_14A & 1) {
+ if (this->stateFlags & ELFGRP_STATE_0) {
Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_FAIRY_GROUP_FRY - SFX_FLAG);
}
}
void func_80A3A274(EnElfgrp* this, PlayState* play) {
if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_100)) {
- if (this->unk_14A & 1) {
+ if (this->stateFlags & ELFGRP_STATE_0) {
Actor_PlaySfx_Flagged(&this->actor, NA_SE_PL_CHIBI_FAIRY_HEAL - SFX_FLAG);
}
switch (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_100)]->id) {
case 2:
- if (!(this->unk_14A & 1)) {
- if (this->unk_147 == ENELFGRP_0) {
- func_80A39DC8(this, play, 1, 1);
+ if (!(this->stateFlags & ELFGRP_STATE_0)) {
+ if (this->type == ENELFGRP_TYPE_MAGIC) { // Clock Town
+ EnElfgrp_SpawnStrayFairies(this, play, 1, SPAWNED_STRAY_FAIRY_TYPE_RETURNING);
} else {
- func_80A39DC8(this, play, func_80A39BD0(play, this->unk_147), 1);
+ EnElfgrp_SpawnStrayFairies(this, play, EnElfgrp_GetHeldFairiesCount(play, this->type),
+ SPAWNED_STRAY_FAIRY_TYPE_RETURNING);
}
- this->unk_14A |= 1;
- func_80A39CD4(play, this->unk_147, 25);
+ this->stateFlags |= ELFGRP_STATE_0;
+ EnElfgrp_SetFountainFairiesCount(play, this->type, STRAY_FAIRY_TOTAL);
}
break;
case 3:
- func_80A39F50(play);
+ EnElfgrp_SummonStrayFairies(play);
this->actionFunc = func_80A3A210;
- this->unk_144 = 90;
+ this->timer = 90;
break;
default:
@@ -423,28 +480,30 @@ void func_80A3A398(EnElfgrp* this, PlayState* play) {
if (CutsceneManager_IsNext(this->actor.csId)) {
CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
this->actionFunc = func_80A3A274;
- Flags_UnsetSwitch(play, ENELFGRP_GET_FE00(&this->actor));
- if (this->unk_14A & 2) {
+ Flags_UnsetSwitch(play, ENELFGRP_GET_SWITCH_FLAG_PARAMS(&this->actor));
+
+ if (this->stateFlags & ELFGRP_STATE_1) {
Item_Give(play, ITEM_MASK_GREAT_FAIRY);
}
- if ((this->unk_14A & 4) != 0) {
- SET_WEEKEVENTREG(WEEKEVENTREG_23_02);
+ if (this->stateFlags & ELFGRP_STATE_2) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_OBTAINED_GREAT_SPIN_ATTACK);
}
- if (this->unk_14A & 0x10) {
+ if (this->stateFlags & ELFGRP_STATE_4) {
Item_Give(play, ITEM_SWORD_GREAT_FAIRY);
}
- this->unk_14A &= ~8;
+
+ this->stateFlags &= ~ELFGRP_STATE_3;
} else if (this->actor.xzDistToPlayer < 350.0f) {
CutsceneManager_Queue(this->actor.csId);
}
}
void func_80A3A484(EnElfgrp* this, PlayState* play) {
- if (this->unk_144 == 0) {
+ if (this->timer == 0) {
this->actionFunc = func_80A3A0F4;
- this->unk_144 = 30;
+ this->timer = 30;
}
}
@@ -454,51 +513,51 @@ void func_80A3A4AC(EnElfgrp* this, PlayState* play) {
if (cueId == 3) {
this->actionFunc = func_80A3A484;
- this->unk_144 = 90;
+ this->timer = 90;
}
}
}
void func_80A3A520(EnElfgrp* this, PlayState* play) {
if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103)) {
- this->actionFunc = func_80A3A600;
+ this->actionFunc = EnElfgrp_DoNothing;
} else if (CutsceneManager_IsNext(this->actor.csId)) {
CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
this->actionFunc = func_80A3A4AC;
- Flags_SetSwitch(play, ENELFGRP_GET_FE00(&this->actor));
+ Flags_SetSwitch(play, ENELFGRP_GET_SWITCH_FLAG_PARAMS(&this->actor));
- if (this->unk_14A & 2) {
+ if (this->stateFlags & ELFGRP_STATE_1) {
Item_Give(play, ITEM_MASK_GREAT_FAIRY);
}
- if (this->actor.home.rot.z != 0) {
- Flags_SetSwitch(play, this->actor.home.rot.z);
+ if (ENELFGRP_GET_SWITCHFLAG_ROT(&this->actor) != 0) {
+ Flags_SetSwitch(play, ENELFGRP_GET_SWITCHFLAG_ROT(&this->actor));
}
} else if (this->actor.xzDistToPlayer < 350.0f) {
CutsceneManager_Queue(this->actor.csId);
}
}
-void func_80A3A600(EnElfgrp* this, PlayState* play) {
+void EnElfgrp_DoNothing(EnElfgrp* this, PlayState* play) {
}
-void func_80A3A610(EnElfgrp* this, PlayState* play) {
+void EnElfgrp_HealPlayer(EnElfgrp* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (this->unk_144 == 60) {
+ if (this->timer == 60) {
Magic_Add(play, MAGIC_FILL_TO_CAPACITY);
- gSaveContext.healthAccumulator = 320;
+ gSaveContext.healthAccumulator = 0x140;
}
- if (this->unk_144 > 0) {
+ if (this->timer > 0) {
player->actor.freezeTimer = 100;
player->stateFlags1 |= PLAYER_STATE1_20000000;
Actor_PlaySfx(&this->actor, NA_SE_EV_FAIRY_GROUP_HEAL - SFX_FLAG);
} else {
player->actor.freezeTimer = 0;
player->stateFlags1 &= ~PLAYER_STATE1_20000000;
- this->actionFunc = func_80A3A600;
- this->unk_14A |= 8;
+ this->actionFunc = EnElfgrp_DoNothing;
+ this->stateFlags |= ELFGRP_STATE_3;
}
}
@@ -509,9 +568,9 @@ void func_80A3A6F4(EnElfgrp* this, PlayState* play) {
if (Actor_TextboxIsClosing(&this->actor, play)) {
player->actor.freezeTimer = 100;
player->stateFlags1 |= PLAYER_STATE1_20000000;
- this->unk_144 = func_80A39FBC(play);
- this->actionFunc = func_80A3A610;
- this->unk_14A &= ~8;
+ this->timer = EnElfgrp_SpinStrayFairies(play);
+ this->actionFunc = EnElfgrp_HealPlayer;
+ this->stateFlags &= ~ELFGRP_STATE_3;
}
}
@@ -521,25 +580,27 @@ void func_80A3A77C(EnElfgrp* this, PlayState* play) {
player->actor.freezeTimer = 100;
player->stateFlags1 |= PLAYER_STATE1_20000000;
if (Actor_TextboxIsClosing(&this->actor, play)) {
- this->unk_144 = func_80A39FBC(play);
- this->actionFunc = func_80A3A610;
- this->unk_14A &= ~8;
+ this->timer = EnElfgrp_SpinStrayFairies(play);
+ this->actionFunc = EnElfgrp_HealPlayer;
+ this->stateFlags &= ~ELFGRP_STATE_3;
}
}
void func_80A3A7FC(EnElfgrp* this, PlayState* play) {
- s32 temp_s0;
+ s32 curTotalFairies;
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- gSaveContext.save.saveInfo.weekEventReg[9] |= this->unk_146;
+ gSaveContext.save.saveInfo.weekEventReg[9] |= this->talkedOnceFlag;
this->actionFunc = func_80A3A6F4;
- temp_s0 = func_80A39BD0(play, this->unk_147);
- func_80A39DC8(this, play, temp_s0, 1);
- temp_s0 += func_80A39C1C(play, this->unk_147);
- if (temp_s0 > 25) {
- temp_s0 = 25;
+
+ curTotalFairies = EnElfgrp_GetHeldFairiesCount(play, this->type);
+ EnElfgrp_SpawnStrayFairies(this, play, curTotalFairies, SPAWNED_STRAY_FAIRY_TYPE_RETURNING);
+ curTotalFairies += EnElfgrp_GetFountainFairiesCount(play, this->type);
+ if (curTotalFairies > STRAY_FAIRY_TOTAL) {
+ curTotalFairies = STRAY_FAIRY_TOTAL;
}
- func_80A39CD4(play, this->unk_147, temp_s0);
+
+ EnElfgrp_SetFountainFairiesCount(play, this->type, curTotalFairies);
} else if (this->actor.xzDistToPlayer < 280.0f) {
this->actor.flags |= ACTOR_FLAG_10000;
Actor_OfferTalk(&this->actor, play, 300.0f);
@@ -551,13 +612,13 @@ void func_80A3A8F8(EnElfgrp* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- gSaveContext.save.saveInfo.weekEventReg[9] |= this->unk_146;
+ gSaveContext.save.saveInfo.weekEventReg[9] |= this->talkedOnceFlag;
this->actionFunc = func_80A3A6F4;
return;
}
- if (this->unk_147 != ENELFGRP_0) {
- if (func_80A39BD0(play, this->unk_147) > 0) {
+ if (this->type != ENELFGRP_TYPE_MAGIC) {
+ if (EnElfgrp_GetHeldFairiesCount(play, this->type) > 0) {
this->actionFunc = func_80A3A7FC;
return;
}
@@ -570,7 +631,7 @@ void func_80A3A8F8(EnElfgrp* this, PlayState* play) {
player->stateFlags1 |= PLAYER_STATE1_20000000;
Message_StartTextbox(play, this->actor.textId, &this->actor);
this->actionFunc = func_80A3A77C;
- gSaveContext.save.saveInfo.weekEventReg[9] |= this->unk_146;
+ gSaveContext.save.saveInfo.weekEventReg[9] |= this->talkedOnceFlag;
} else {
this->actor.flags |= ACTOR_FLAG_10000;
Actor_OfferTalk(&this->actor, play, 100.0f);
@@ -585,11 +646,11 @@ void EnElfgrp_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
- if (this->unk_14A & 8) {
+ if (this->stateFlags & ELFGRP_STATE_3) {
Actor_PlaySfx(&this->actor, NA_SE_EV_FAIRY_GROUP_FRY - SFX_FLAG);
}
- if (this->unk_144 != 0) {
- this->unk_144--;
+ if (this->timer != 0) {
+ this->timer--;
}
}
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 692a76d82..90f73a8a6 100644
--- a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.h
+++ b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.h
@@ -2,29 +2,32 @@
#define Z_EN_ELFGRP_H
#include "global.h"
+#include "overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.h"
struct EnElfgrp;
typedef void (*EnElfgrpActionFunc)(struct EnElfgrp*, PlayState*);
-#define ENELFGRP_GET(thisx) ((thisx)->params & 0xF)
-#define ENELFGRP_GET_FE00(thisx) (((thisx)->params & 0xFE00) >> 9)
+#define ENELFGRP_GET_TYPE(thisx) ((thisx)->params & 0xF) //!< Same type as Great Fairies
+#define ENELFGRP_GET_SWITCH_FLAG_PARAMS(thisx) (((thisx)->params & 0xFE00) >> 9)
+#define ENELFGRP_GET_SWITCHFLAG_ROT(thisx) ((thisx)->home.rot.z)
-typedef enum {
- /* 0 */ ENELFGRP_0,
- /* 2 */ ENELFGRP_1,
- /* 2 */ ENELFGRP_2,
- /* 3 */ ENELFGRP_3,
- /* 4 */ ENELFGRP_4
-} EnElfgrpParam;
+typedef enum ElfgrpType {
+ /* 0 */ ENELFGRP_TYPE_MAGIC = GREAT_FAIRY_TYPE_MAGIC,
+ /* 1 */ ENELFGRP_TYPE_POWER = GREAT_FAIRY_TYPE_POWER,
+ /* 2 */ ENELFGRP_TYPE_WISDOM = GREAT_FAIRY_TYPE_WISDOM,
+ /* 3 */ ENELFGRP_TYPE_COURAGE = GREAT_FAIRY_TYPE_COURAGE,
+ /* 4 */ ENELFGRP_TYPE_KINDNESS = GREAT_FAIRY_TYPE_KINDNESS,
+ /* 5 */ ENELFGRP_TYPE_MAX
+} ElfgrpType;
typedef struct EnElfgrp {
/* 0x000 */ Actor actor;
- /* 0x144 */ s16 unk_144;
- /* 0x146 */ u8 unk_146;
- /* 0x147 */ u8 unk_147;
- /* 0x148 */ s8 unk_148;
- /* 0x14A */ u16 unk_14A;
+ /* 0x144 */ s16 timer;
+ /* 0x146 */ u8 talkedOnceFlag;
+ /* 0x147 */ u8 type;
+ /* 0x148 */ s8 unk_148; // set and not used
+ /* 0x14A */ u16 stateFlags;
/* 0x14C */ EnElfgrpActionFunc actionFunc;
} EnElfgrp; // size = 0x150
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 f57f8e066..3dc3cd7bc 100644
--- a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c
+++ b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c
@@ -87,7 +87,7 @@ void EnElforg_Init(Actor* thisx, PlayState* play) {
break;
case STRAY_FAIRY_TYPE_COLLECTIBLE:
- if (Flags_GetCollectible(play, STRAY_FAIRY_FLAG(thisx))) {
+ if (Flags_GetCollectible(play, STRAY_FAIRY_GET_FLAG(thisx))) {
Actor_Kill(thisx);
return;
}
@@ -96,11 +96,11 @@ void EnElforg_Init(Actor* thisx, PlayState* play) {
case STRAY_FAIRY_TYPE_FAIRY_FOUNTAIN:
case STRAY_FAIRY_TYPE_BUBBLE:
case STRAY_FAIRY_TYPE_CHEST:
- case STRAY_FAIRY_TYPE_TURN_IN_TO_FAIRY_FOUNTAIN:
+ case STRAY_FAIRY_TYPE_RETURNING_TO_FOUNTAIN:
break;
default:
- if (Flags_GetSwitch(play, STRAY_FAIRY_FLAG(thisx))) {
+ if (Flags_GetSwitch(play, STRAY_FAIRY_GET_FLAG(thisx))) {
Actor_Kill(thisx);
return;
}
@@ -121,7 +121,7 @@ void EnElforg_Init(Actor* thisx, PlayState* play) {
this->targetDistanceFromHome = Rand_ZeroFloat(100.0f) + 50.0f;
break;
- case STRAY_FAIRY_TYPE_TURN_IN_TO_FAIRY_FOUNTAIN:
+ case STRAY_FAIRY_TYPE_RETURNING_TO_FOUNTAIN:
EnElforg_InitializeParams(this);
this->actionFunc = EnElforg_TurnInFairy;
this->secondaryTimer = 60;
@@ -324,6 +324,7 @@ void EnElforg_TurnInFairy(EnElforg* this, PlayState* play) {
void EnElforg_QuicklyCircleFairyFountain(EnElforg* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
EnElforg_MoveToTargetFairyFountain(this, &this->actor.home.pos);
+
if (this->secondaryTimer <= 30) {
this->actionFunc = EnElforg_TurnInFairy;
}
@@ -367,9 +368,9 @@ void EnElforg_FreeFloatingFairyFountain(EnElforg* this, PlayState* play) {
if (this->strayFairyFlags & STRAY_FAIRY_FLAG_SPARKLES_AND_SHRINKS) {
// This happens right before the Great Fairy appears once all
// Stray Fairies are saved.
- if (this->actor.home.rot.x > 0) {
+ if (STRAY_FAIRY_SPARKLE_COUNT(&this->actor) > 0) {
EnElforg_SpawnSparkles(this, play, 10);
- this->actor.home.rot.x--;
+ STRAY_FAIRY_SPARKLE_COUNT(&this->actor)--;
}
Actor_SetScale(&this->actor, this->actor.scale.x * 0.9f);
@@ -383,22 +384,24 @@ void EnElforg_CirclePlayer(EnElforg* this, PlayState* play) {
s32 pad;
Actor* playerActor = &GET_PLAYER(play)->actor;
Player* player = GET_PLAYER(play);
- f32 distanceFromPlayer;
+ f32 orbitRadius;
if (GET_PLAYER_FORM == PLAYER_FORM_GORON) {
- distanceFromPlayer = 40.0f;
+ orbitRadius = 40.0f;
} else {
- distanceFromPlayer = 20.0f;
+ orbitRadius = 20.0f;
}
- this->actor.world.pos.x = (Math_SinS(this->timer * 0x1000) * distanceFromPlayer) + playerActor->world.pos.x;
- this->actor.world.pos.z = (Math_CosS(this->timer * 0x1000) * distanceFromPlayer) + playerActor->world.pos.z;
+ this->actor.world.pos.x = (Math_SinS(this->timer * 0x1000) * orbitRadius) + playerActor->world.pos.x;
+ this->actor.world.pos.z = (Math_CosS(this->timer * 0x1000) * orbitRadius) + playerActor->world.pos.z;
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_Kill(&this->actor);
return;
@@ -424,8 +427,10 @@ void EnElforg_ClockTownFairyCollected(EnElforg* this, PlayState* play) {
Player* player = GET_PLAYER(play);
EnElforg_CirclePlayer(this, play);
+
player->actor.freezeTimer = 100;
player->stateFlags1 |= PLAYER_STATE1_20000000;
+
if (Actor_TextboxIsClosing(&this->actor, play)) {
player->actor.freezeTimer = 0;
player->stateFlags1 &= ~PLAYER_STATE1_20000000;
@@ -451,6 +456,7 @@ void EnElforg_FreeFloating(EnElforg* this, PlayState* play) {
Player* player = GET_PLAYER(play);
SkelAnime_Update(&this->skelAnime);
+
if (Player_GetMask(play) == PLAYER_MASK_GREAT_FAIRY) {
pos = player->bodyPartsPos[PLAYER_BODYPART_WAIST];
this->targetSpeedXZ = 5.0f;
@@ -461,21 +467,23 @@ void EnElforg_FreeFloating(EnElforg* this, PlayState* play) {
}
scaledYDistance = this->actor.playerHeightRel - (this->actor.shape.yOffset * this->actor.scale.y);
+
if (!Player_InCsMode(play)) {
if ((this->actor.xzDistToPlayer < 30.0f) && (scaledYDistance < 12.0f) && (scaledYDistance > -68.0f)) {
EnElforg_SetupFairyCollected(this, play);
Health_ChangeBy(play, 0x30);
+
switch (STRAY_FAIRY_TYPE(&this->actor)) {
case STRAY_FAIRY_TYPE_COLLECTIBLE:
- Flags_SetCollectible(play, STRAY_FAIRY_FLAG(&this->actor));
+ Flags_SetCollectible(play, STRAY_FAIRY_GET_FLAG(&this->actor));
break;
case STRAY_FAIRY_TYPE_CHEST:
- Flags_SetTreasure(play, STRAY_FAIRY_FLAG(&this->actor));
+ Flags_SetTreasure(play, STRAY_FAIRY_GET_FLAG(&this->actor));
break;
default:
- Flags_SetSwitch(play, STRAY_FAIRY_FLAG(&this->actor));
+ Flags_SetSwitch(play, STRAY_FAIRY_GET_FLAG(&this->actor));
break;
}
@@ -493,7 +501,8 @@ void EnElforg_FreeFloating(EnElforg* this, PlayState* play) {
gSaveContext.save.saveInfo.inventory.strayFairies[gSaveContext.dungeonIndex]++;
// You found a Stray Fairy!
Message_StartTextbox(play, 0x11, NULL);
- if (gSaveContext.save.saveInfo.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex] >= 15) {
+ if (gSaveContext.save.saveInfo.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex] >=
+ STRAY_FAIRY_SCATTERED_TOTAL) {
Audio_PlayFanfare(NA_BGM_GET_ITEM | 0x900);
}
}
@@ -502,6 +511,7 @@ void EnElforg_FreeFloating(EnElforg* this, PlayState* play) {
Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f,
UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4);
func_80ACCBB8(this, play);
+
if (Player_GetMask(play) == PLAYER_MASK_GREAT_FAIRY) {
if (!(this->strayFairyFlags & STRAY_FAIRY_FLAG_GREAT_FAIRYS_MASK_EQUIPPED)) {
Audio_PlaySfx(NA_SE_SY_FAIRY_MASK_SUCCESS);
@@ -627,6 +637,7 @@ void EnElforg_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
Gfx_SetupDL25_Xlu(play->state.gfxCtx);
+
switch (this->area) {
case STRAY_FAIRY_AREA_WOODFALL:
AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gStrayFairyWoodfallTexAnim));
@@ -644,7 +655,7 @@ void EnElforg_Draw(Actor* thisx, PlayState* play) {
AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gStrayFairyStoneTowerTexAnim));
break;
- default:
+ default: // STRAY_FAIRY_AREA_CLOCK_TOWN
AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gStrayFairyClockTownTexAnim));
break;
}
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 798982b09..f4da3cd5e 100644
--- a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.h
+++ b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.h
@@ -2,36 +2,41 @@
#define Z_EN_ELFORG_H
#include "global.h"
+#include "overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.h"
#include "objects/gameplay_keep/gameplay_keep.h"
#define STRAY_FAIRY_TYPE(thisx) ((thisx)->params & 0xF)
#define STRAY_FAIRY_GET_NON_DUNGEON_AREA(thisx) (((thisx)->params & 0x1C0) >> 6)
-#define STRAY_FAIRY_FLAG(thisx) (((thisx)->params & 0xFE00) >> 9)
-#define STRAY_FAIRY_PARAMS(flag, nonDungeonArea, type) (((flag & 0x7F) << 9) | ((nonDungeonArea & 7) << 6) | (type & 0xF))
+#define STRAY_FAIRY_GET_FLAG(thisx) (((thisx)->params & 0xFE00) >> 9)
+#define STRAY_FAIRY_SPARKLE_COUNT(thisx) ((thisx)->home.rot.x)
+
+//! @note `nonDungeonArea` does not always use the enum
+#define STRAY_FAIRY_PARAMS(flag, nonDungeonArea, type) ((((flag) & 0x7F) << 9) | (((nonDungeonArea) & 7) << 6) | ((type) & 0xF))
#define STRAY_FAIRY_FLAG_MOVES_QUICKLY_TO_HOME (1 << 0)
#define STRAY_FAIRY_FLAG_SPARKLES_AND_SHRINKS (1 << 1)
#define STRAY_FAIRY_FLAG_CIRCLES_QUICKLY_IN_FOUNTAIN (1 << 2)
#define STRAY_FAIRY_FLAG_GREAT_FAIRYS_MASK_EQUIPPED (1 << 3)
-typedef enum {
- /* 0 */ STRAY_FAIRY_TYPE_FREE_FLOATING, // The ones just floating around
- /* 1 */ STRAY_FAIRY_TYPE_FAIRY_FOUNTAIN, // The ones already present when you enter a Fairy Fountain
- /* 2 */ STRAY_FAIRY_TYPE_BUBBLE, // The ones trapped in bubbles
- /* 3 */ STRAY_FAIRY_TYPE_CLOCK_TOWN, // The free-floating Stray Fairies in Clock Town
- /* 4 */ STRAY_FAIRY_TYPE_ENEMY, // The ones trapped inside enemies
- /* 5 */ STRAY_FAIRY_TYPE_COLLIDER, // Unused in retail. The fairy is hidden until the collider is hit
- /* 6 */ STRAY_FAIRY_TYPE_CHEST, // The ones in treasure chests
- /* 7 */ STRAY_FAIRY_TYPE_COLLECTIBLE, // The ones in boxes, pots, beehives, etc.
- /* 8 */ STRAY_FAIRY_TYPE_TURN_IN_TO_FAIRY_FOUNTAIN // The ones you "turn in" by walking into a Fairy Fountain
+typedef enum StrayFairyType {
+ /* 0 */ STRAY_FAIRY_TYPE_FREE_FLOATING, // The ones just floating around
+ /* 1 */ STRAY_FAIRY_TYPE_FAIRY_FOUNTAIN, // The ones already present when you enter a Fairy Fountain
+ /* 2 */ STRAY_FAIRY_TYPE_BUBBLE, // The ones trapped in bubbles
+ /* 3 */ STRAY_FAIRY_TYPE_CLOCK_TOWN, // The free-floating Stray Fairies in Clock Town
+ /* 4 */ STRAY_FAIRY_TYPE_ENEMY, // The ones trapped inside enemies
+ /* 5 */ STRAY_FAIRY_TYPE_COLLIDER, // Unused in retail. The fairy is hidden until the collider is hit
+ /* 6 */ STRAY_FAIRY_TYPE_CHEST, // The ones in treasure chests
+ /* 7 */ STRAY_FAIRY_TYPE_COLLECTIBLE, // The ones in boxes, pots, beehives, etc.
+ /* 8 */ STRAY_FAIRY_TYPE_RETURNING_TO_FOUNTAIN // The ones you "turn in" by walking into a Fairy Fountain
} StrayFairyType;
-typedef enum {
- /* 0 */ STRAY_FAIRY_AREA_CLOCK_TOWN,
- /* 1 */ STRAY_FAIRY_AREA_WOODFALL,
- /* 2 */ STRAY_FAIRY_AREA_SNOWHEAD,
- /* 3 */ STRAY_FAIRY_AREA_GREAT_BAY,
- /* 4 */ STRAY_FAIRY_AREA_STONE_TOWER,
+// Corresponds to the Great Fairy types
+typedef enum StrayFairyArea {
+ /* 0 */ STRAY_FAIRY_AREA_CLOCK_TOWN = GREAT_FAIRY_TYPE_MAGIC,
+ /* 1 */ STRAY_FAIRY_AREA_WOODFALL = GREAT_FAIRY_TYPE_POWER,
+ /* 2 */ STRAY_FAIRY_AREA_SNOWHEAD = GREAT_FAIRY_TYPE_WISDOM,
+ /* 3 */ STRAY_FAIRY_AREA_GREAT_BAY = GREAT_FAIRY_TYPE_COURAGE,
+ /* 4 */ STRAY_FAIRY_AREA_STONE_TOWER = GREAT_FAIRY_TYPE_KINDNESS,
/* 5 */ STRAY_FAIRY_AREA_MAX
} StrayFairyArea;
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 b2d172cfc..931e8c6d4 100644
--- a/src/overlays/actors/ovl_En_Encount3/z_en_encount3.c
+++ b/src/overlays/actors/ovl_En_Encount3/z_en_encount3.c
@@ -5,6 +5,7 @@
*/
#include "z_en_encount3.h"
+#include "objects/object_big_fwall/object_big_fwall.h"
#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_CANT_LOCK_ON)
@@ -12,14 +13,15 @@
void EnEncount3_Init(Actor* thisx, PlayState* play);
void EnEncount3_Destroy(Actor* thisx, PlayState* play);
-void EnEncount3_Update(Actor* thisx, PlayState* play);
+void EnEncount3_Update(Actor* thisx, PlayState* play2);
void EnEncount3_Draw(Actor* thisx, PlayState* play);
+void func_809AD058(EnEncount3* this);
+
void func_809AD084(EnEncount3* this, PlayState* play);
void func_809AD194(EnEncount3* this, PlayState* play);
void func_809AD1EC(EnEncount3* this, PlayState* play);
-#if 0
ActorInit En_Encount3_InitVars = {
ACTOR_EN_ENCOUNT3,
ACTORCAT_ENEMY,
@@ -32,22 +34,174 @@ ActorInit En_Encount3_InitVars = {
(ActorFunc)EnEncount3_Draw,
};
-#endif
+s32 D_809AD810 = false;
-extern UNK_TYPE D_060009A0;
+void EnEncount3_Init(Actor* thisx, PlayState* play) {
+ EnEncount3* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Encount3/EnEncount3_Init.s")
+ this->unk14A = ENCOUNT3_GET_SPAWN_INDEX(thisx);
+ this->childParams = ENCOUNT3_GET_PARAM_F80(thisx);
+ this->switchFlag = ENCOUNT3_GET_SWITCH_FLAG(thisx);
+ this->csId = this->actor.csId;
+ this->unk16C = ENCOUNT3_GET_ROTZ(thisx) * 10.0f;
+ if (this->unk16C < 10.0f) {
+ this->unk16C = 10.0f;
+ } else if (this->unk16C > 1000.0f) {
+ this->unk16C = 1000.0f;
+ }
+ if (this->switchFlag == 0x7F) {
+ this->switchFlag = -1;
+ }
+ if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) {
+ Actor_Kill(&this->actor);
+ }
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
+ this->actor.flags &= ~ACTOR_FLAG_TARGETABLE;
+ func_809AD058(this);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Encount3/EnEncount3_Destroy.s")
+void EnEncount3_Destroy(Actor* thisx, PlayState* play) {
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Encount3/func_809AD058.s")
+void func_809AD058(EnEncount3* this) {
+ this->childActorId = ACTOR_EN_JSO;
+ this->unk150 = 1;
+ this->timer = 30;
+ this->actionFunc = func_809AD084;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Encount3/func_809AD084.s")
+void func_809AD084(EnEncount3* this, PlayState* play) {
+ if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) {
+ Actor_Kill(&this->actor);
+ return;
+ }
+ if (!(this->unk16C < this->actor.xzDistToPlayer) && (Player_GetMask(play) == PLAYER_MASK_GARO) && !D_809AD810) {
+ if (this->timer > 0) {
+ this->timer--;
+ } else {
+ this->child =
+ Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, this->childActorId, this->actor.world.pos.x,
+ this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, this->childParams);
+ if (this->child != NULL) {
+ this->unk14E++;
+ D_809AD810 = true;
+ this->actionFunc = func_809AD194;
+ }
+ }
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Encount3/func_809AD194.s")
+void func_809AD194(EnEncount3* this, PlayState* play) {
+ if (this->unk14E == 0) {
+ this->unk178 = 0.0f;
+ if (this->switchFlag >= 0) {
+ Flags_SetSwitch(play, this->switchFlag);
+ }
+ this->actionFunc = func_809AD1EC;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Encount3/func_809AD1EC.s")
+void func_809AD1EC(EnEncount3* this, PlayState* play) {
+ if (this->unk174 < 0.002f) {
+ D_809AD810 = false;
+ Actor_Kill(&this->actor);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Encount3/EnEncount3_Update.s")
+void EnEncount3_Update(Actor* thisx, PlayState* play2) {
+ EnEncount3* this = THIS;
+ f32 new_var;
+ PlayState* play = play2;
+ Player* player = GET_PLAYER(play);
+ f32 sp3C;
+ f32 sp38;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Encount3/EnEncount3_Draw.s")
+ this->actionFunc(this, play);
+ if (this->actionFunc == func_809AD194) {
+ new_var = this->unk16C * 0.52f;
+ if (new_var < this->actor.xzDistToPlayer) {
+ this->unk178 = ((this->unk16C * 0.03125f) * 0.001f) + 0.1f;
+ } else {
+ this->unk178 = 0.06f;
+ }
+
+ if (((this->unk16C + 50.0f) + BREG(0)) < this->actor.xzDistToPlayer) {
+ if (this->actionFunc == func_809AD194) {
+ this->unk148 = 0;
+ this->unk178 = 0.0f;
+ D_809AD810 = false;
+ if (((this->child != NULL) && (this->child->update != NULL)) && (this->child->colChkInfo.health > 0)) {
+ Actor_Kill(this->child);
+ this->child = NULL;
+ }
+ func_809AD058(this);
+ }
+ } else if (this->unk16C < this->actor.xzDistToPlayer) {
+ s16 i;
+
+ for (i = 0; i < PLAYER_BODYPART_MAX; i++) {
+ player->flameTimers[i] = Rand_S16Offset(0, 200);
+ }
+ player->isBurning = true;
+
+ sp3C = this->actor.world.pos.x - player->actor.world.pos.x;
+ sp38 = this->actor.world.pos.z - player->actor.world.pos.z;
+ if (!Play_InCsMode(play)) {
+ func_800B8D50(play, &this->actor, 10.0f, Math_Atan2S_XY(sp38, sp3C), 0.0f, 1);
+ }
+ }
+ this->child->colChkInfo = this->child->colChkInfo;
+ }
+
+ this->unk168 = this->unk16C;
+ this->unk168 /= 7666.0f;
+ if (this->actionFunc != func_809AD194) {
+ Math_ApproachZeroF(&this->unk170, 0.3f, 10.0f);
+ Math_ApproachZeroF(&this->unk160, 0.3f, 5.0f);
+ if (this->unk160 < 1.0f) {
+ play->unk_18880 = 0;
+ }
+ } else if (this->unk148 != 0) {
+ Math_ApproachF(&this->unk170, 255.0f, 0.4f, 10.0f);
+ Math_ApproachF(&this->unk160, 60.0f, 0.3f, 5.0f);
+ }
+ Math_ApproachF(&this->unk174, this->unk178, 0.3f, 0.03f);
+
+ this->unk164 = this->unk160 / 60.0f;
+ if (this->unk164 != 0.0f) {
+ play->envCtx.adjLightSettings.fogNear = (960 - play->envCtx.lightSettings.fogNear) * this->unk164;
+ play->envCtx.adjLightSettings.fogColor[0] = (40.0f - play->envCtx.lightSettings.fogColor[0]) * this->unk164;
+ play->envCtx.adjLightSettings.fogColor[1] = (10.0f - play->envCtx.lightSettings.fogColor[1]) * this->unk164;
+ play->envCtx.adjLightSettings.fogColor[2] = (0.0f - play->envCtx.lightSettings.fogColor[2]) * this->unk164;
+ }
+}
+
+void EnEncount3_Draw(Actor* thisx, PlayState* play) {
+ EnEncount3* this = THIS;
+ s32 pad;
+
+ if (this->unk170 > 0.0f) {
+ OPEN_DISPS(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
+ Matrix_Push();
+
+ gDPPipeSync(POLY_XLU_DISP++);
+ gSPSegment(POLY_XLU_DISP++, 0x08,
+ Gfx_TwoTexScroll(play->state.gfxCtx, 0, (s32)play->gameplayFrames, 0, 0x20, 0x40, 1,
+ (s32)play->gameplayFrames * -2, (s32)play->gameplayFrames * -8, 0x20, 0x20));
+
+ gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 200, 0, (s8)this->unk170);
+ gDPSetEnvColor(POLY_XLU_DISP++, 255, 0, 0, 128);
+
+ Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y - 40.0f, this->actor.world.pos.z,
+ MTXMODE_NEW);
+ Matrix_Scale(this->unk168, this->unk174, this->unk168, MTXMODE_APPLY);
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, object_big_fwall_DL_0009A0);
+
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+}
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 9ebc87303..9e8bd01ad 100644
--- a/src/overlays/actors/ovl_En_Encount3/z_en_encount3.h
+++ b/src/overlays/actors/ovl_En_Encount3/z_en_encount3.h
@@ -7,10 +7,36 @@ struct EnEncount3;
typedef void (*EnEncount3ActionFunc)(struct EnEncount3*, PlayState*);
+#define ENCOUNT3_GET_SPAWN_INDEX(thisx) (((thisx)->params >> 0xC) & 0xF)
+#define ENCOUNT3_GET_PARAM_F80(thisx) (((thisx)->params >> 7) & 0x1F)
+#define ENCOUNT3_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
+
+#define ENCOUNT3_GET_ROTZ(thisx) ((thisx)->world.rot.z)
+
typedef struct EnEncount3 {
/* 0x000 */ Actor actor;
/* 0x144 */ EnEncount3ActionFunc actionFunc;
- /* 0x148 */ char unk_148[0x84];
+ /* 0x148 */ u8 unk148;
+ /* 0x14A */ s16 unk14A;
+ /* 0x14C */ UNK_TYPE1 pad14C[0x2];
+ /* 0x14E */ s16 unk14E;
+ /* 0x150 */ s16 unk150;
+ /* 0x152 */ s16 unk152;
+ /* 0x154 */ s16 childActorId;
+ /* 0x156 */ s16 unk156;
+ /* 0x158 */ s16 childParams;
+ /* 0x15A */ s16 csId;
+ /* 0x15C */ s16 switchFlag;
+ /* 0x15E */ s16 timer;
+ /* 0x160 */ f32 unk160;
+ /* 0x164 */ f32 unk164;
+ /* 0x168 */ f32 unk168;
+ /* 0x16C */ f32 unk16C;
+ /* 0x170 */ f32 unk170;
+ /* 0x174 */ f32 unk174;
+ /* 0x178 */ f32 unk178;
+ /* 0x17C */ Actor* child;
+ /* 0x180 */ UNK_TYPE1 unk180[0x4C];
} EnEncount3; // size = 0x1CC
#endif // Z_EN_ENCOUNT3_H
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 3d75e19d7..b75e0f21c 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
@@ -37,7 +37,7 @@ void EnEndingHero4_Init(Actor* thisx, PlayState* play) {
Actor_SetScale(&this->actor, 0.01f);
this->actor.targetMode = TARGET_MODE_6;
this->actor.gravity = -3.0f;
- SkelAnime_InitFlex(play, &this->skelAnime, &gSoldierSkel, &gSoldierCheerWithSpear, this->jointTable,
+ SkelAnime_InitFlex(play, &this->skelAnime, &gSoldierSkel, &gSoldierCheerWithSpearAnim, this->jointTable,
this->morphTable, SOLDIER_LIMB_MAX);
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 25.0f);
EnEndingHero4_SetupIdle(this);
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 8f6551e84..47312b722 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
@@ -56,15 +56,15 @@ static FlexSkeletonHeader* sSkeletons[ENDING_HERO6_TYPE_MAX] = {
};
static AnimationHeader* sAnimations[ENDING_HERO6_TYPE_MAX] = {
- &object_dt_Anim_000BE0, // ENDING_HERO6_TYPE_DT
- &object_bai_Anim_0011C0, // ENDING_HERO6_TYPE_BAI
- &object_toryo_Anim_000E50, // ENDING_HERO6_TYPE_TORYO
- &gSoldierCheerWithSpear, // ENDING_HERO6_TYPE_SOLDIER
- &object_daiku_Anim_002FA0, // ENDING_HERO6_TYPE_DAIKU_RED
- &object_daiku_Anim_002FA0, // ENDING_HERO6_TYPE_DAIKU_BLUE
- &object_daiku_Anim_002FA0, // ENDING_HERO6_TYPE_DAIKU_GREEN
- &object_daiku_Anim_002FA0, // ENDING_HERO6_TYPE_DAIKU_PURPLE
- &object_daiku_Anim_002FA0, // ENDING_HERO6_TYPE_DAIKU_ORANGE
+ &object_dt_Anim_000BE0, // ENDING_HERO6_TYPE_DT
+ &object_bai_Anim_0011C0, // ENDING_HERO6_TYPE_BAI
+ &object_toryo_Anim_000E50, // ENDING_HERO6_TYPE_TORYO
+ &gSoldierCheerWithSpearAnim, // ENDING_HERO6_TYPE_SOLDIER
+ &object_daiku_Anim_002FA0, // ENDING_HERO6_TYPE_DAIKU_RED
+ &object_daiku_Anim_002FA0, // ENDING_HERO6_TYPE_DAIKU_BLUE
+ &object_daiku_Anim_002FA0, // ENDING_HERO6_TYPE_DAIKU_GREEN
+ &object_daiku_Anim_002FA0, // ENDING_HERO6_TYPE_DAIKU_PURPLE
+ &object_daiku_Anim_002FA0, // ENDING_HERO6_TYPE_DAIKU_ORANGE
};
static s32 sLimbCounts[ENDING_HERO6_TYPE_MAX] = {
@@ -171,8 +171,8 @@ void EnEndingHero6_Draw(Actor* thisx, PlayState* play) {
Gfx_SetupDL25_Opa(play->state.gfxCtx);
Gfx_SetupDL25_Xlu(play->state.gfxCtx);
- if ((this->objectIndex >= 0) && Object_IsLoaded(&play->objectCtx, this->objectIndex)) {
- gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->objectIndex].segment);
+ if ((this->objectSlot > OBJECT_SLOT_NONE) && Object_IsLoaded(&play->objectCtx, this->objectSlot)) {
+ gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->objectSlot].segment);
switch (this->type) {
case ENDING_HERO6_TYPE_DAIKU_RED:
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 808267b7b..3ec5698e0 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
@@ -27,7 +27,7 @@ typedef struct EnEndingHero6 {
/* 0x278 */ EnEndingHero6ActionFunc actionFunc;
/* 0x27C */ s32 animIndex;
/* 0x280 */ s32 type;
- /* 0x284 */ s8 objectIndex;
+ /* 0x284 */ s8 objectSlot;
/* 0x286 */ s16 timer;
/* 0x288 */ s16 blinkTimer;
/* 0x28A */ s16 eyeState;
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 8468c3e54..33a6bf992 100644
--- a/src/overlays/actors/ovl_En_Fall/z_en_fall.c
+++ b/src/overlays/actors/ovl_En_Fall/z_en_fall.c
@@ -132,7 +132,7 @@ void EnFall_RisingDebris_ResetEffects(EnFall* this) {
void EnFall_Init(Actor* thisx, PlayState* play) {
EnFall* this = THIS;
- s32 objectIndex;
+ s32 objectSlot;
this->eyeGlowIntensity = 0.0f;
this->flags = 0;
@@ -165,27 +165,27 @@ void EnFall_Init(Actor* thisx, PlayState* play) {
case EN_FALL_TYPE_LODMOON_NO_LERP:
case EN_FALL_TYPE_LODMOON:
case EN_FALL_TYPE_LODMOON_INVERTED_STONE_TOWER:
- objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_LODMOON);
+ objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_LODMOON);
break;
case EN_FALL_TYPE_MOONS_TEAR:
- objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_MOONSTON);
+ objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_MOONSTON);
break;
case EN_FALL_TYPE_STOPPED_MOON_OPEN_MOUTH:
- objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_FALL2);
+ objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_FALL2);
break;
default:
- objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_FALL);
+ objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_FALL);
break;
}
- if (objectIndex < 0) {
+ if (objectSlot <= OBJECT_SLOT_NONE) {
Actor_Kill(&this->actor);
return;
}
- this->objIndex = objectIndex;
+ this->objectSlot = objectSlot;
this->actionFunc = EnFall_Setup;
}
@@ -210,8 +210,8 @@ Actor* EnFall_MoonsTear_GetTerminaFieldMoon(PlayState* play) {
void EnFall_Setup(EnFall* this, PlayState* play) {
Actor* moon;
- if (Object_IsLoaded(&play->objectCtx, this->objIndex)) {
- this->actor.objBankIndex = this->objIndex;
+ if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) {
+ this->actor.objectSlot = this->objectSlot;
this->actionFunc = EnFall_Moon_PerformDefaultActions;
switch (EN_FALL_TYPE(&this->actor)) {
case EN_FALL_TYPE_TITLE_SCREEN_MOON:
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 60bb7ec33..dde56ce91 100644
--- a/src/overlays/actors/ovl_En_Fall/z_en_fall.h
+++ b/src/overlays/actors/ovl_En_Fall/z_en_fall.h
@@ -30,7 +30,7 @@ typedef struct EnFall {
/* 0x000 */ Actor actor;
/* 0x144 */ s16 dayStartTime;
/* 0x146 */ s16 currentDay;
- /* 0x148 */ u8 objIndex;
+ /* 0x148 */ u8 objectSlot;
/* 0x14C */ f32 scale;
/* 0x150 */ union {
f32 eyeGlowIntensity;
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 f99f179af..8219a23a3 100644
--- a/src/overlays/actors/ovl_En_Famos/z_en_famos.c
+++ b/src/overlays/actors/ovl_En_Famos/z_en_famos.c
@@ -173,7 +173,7 @@ void EnFamos_Init(Actor* thisx, PlayState* play) {
}
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawSquare, 30.0f);
- SkelAnime_Init(play, &this->skelAnime, &gFamosSkeleton, &gFamosIdleAnim, this->jointTable, this->morphTable,
+ SkelAnime_Init(play, &this->skelAnime, &gFamosSkel, &gFamosIdleAnim, this->jointTable, this->morphTable,
FAMOS_LIMB_MAX);
Collider_InitAndSetCylinder(play, &this->collider1, &this->actor, &sCylinderInit1);
Collider_InitAndSetCylinder(play, &this->collider2, &this->actor, &sCylinderInit2);
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 4ae5482bf..9e442b637 100644
--- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c
+++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c
@@ -835,8 +835,7 @@ void EnFishing_Init(Actor* thisx, PlayState* play2) {
thisx->flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY);
if (sLinkAge != 1) {
- // HIGH_SCORE(HS_FISHING) from OoT
- if (gSaveContext.save.saveInfo.unk_EC0 & 0x1000) {
+ if (HIGH_SCORE(HS_FISHING) & 0x1000) {
D_8090CD08 = 0;
} else {
D_8090CD08 = 1;
@@ -854,18 +853,18 @@ void EnFishing_Init(Actor* thisx, PlayState* play2) {
SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 1);
if (sLinkAge == 1) {
- if (gSaveContext.save.saveInfo.unk_EC0 & 0x7F) {
- D_809171CC = gSaveContext.save.saveInfo.unk_EC0 & 0x7F;
+ if (HIGH_SCORE(HS_FISHING) & 0x7F) {
+ D_809171CC = HIGH_SCORE(HS_FISHING) & 0x7F;
} else {
D_809171CC = 40.0f;
}
- } else if (gSaveContext.save.saveInfo.unk_EC0 & 0x7F000000) {
- D_809171CC = (gSaveContext.save.saveInfo.unk_EC0 & 0x7F000000) >> 0x18;
+ } else if (HIGH_SCORE(HS_FISHING) & 0x7F000000) {
+ D_809171CC = (HIGH_SCORE(HS_FISHING) & 0x7F000000) >> 0x18;
} else {
D_809171CC = 45.0f;
}
- D_809171D1 = (gSaveContext.save.saveInfo.unk_EC0 & 0xFF0000) >> 0x10;
+ D_809171D1 = (HIGH_SCORE(HS_FISHING) & 0xFF0000) >> 0x10;
if ((D_809171D1 & 7) == 7) {
play->roomCtx.unk7A[0] = 90;
D_809171CA = 1;
@@ -2799,8 +2798,8 @@ void func_80903C60(EnFishing* this, u8 arg1) {
void EnFishing_HandleAquariumDialog(EnFishing* this, PlayState* play) {
if (sLinkAge == 1) {
- if (gSaveContext.save.saveInfo.unk_EC0 & 0x7F) {
- if (gSaveContext.save.saveInfo.unk_EC0 & 0x80) {
+ if (HIGH_SCORE(HS_FISHING) & 0x7F) {
+ if (HIGH_SCORE(HS_FISHING) & 0x80) {
this->actor.textId = 0x40B1;
} else {
this->actor.textId = 0x4089;
@@ -2808,8 +2807,8 @@ void EnFishing_HandleAquariumDialog(EnFishing* this, PlayState* play) {
} else {
this->actor.textId = 0x40AE;
}
- } else if (gSaveContext.save.saveInfo.unk_EC0 & 0x7F000000) {
- if (gSaveContext.save.saveInfo.unk_EC0 & 0x80000000) {
+ } else if (HIGH_SCORE(HS_FISHING) & 0x7F000000) {
+ if (HIGH_SCORE(HS_FISHING) & 0x80000000) {
this->actor.textId = 0x40B1;
} else {
this->actor.textId = 0x4089;
@@ -3749,8 +3748,8 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
if ((D_80917272 == 0) && (D_80917274 == 0)) {
// Assignment of OoT's D_80B7E086 here removed in MM
- if (((sLinkAge == 1) && (gSaveContext.save.saveInfo.unk_EC0 & 0x400)) ||
- ((sLinkAge != 1) && (gSaveContext.save.saveInfo.unk_EC0 & 0x800))) {
+ if (((sLinkAge == 1) && (HIGH_SCORE(HS_FISHING) & 0x400)) ||
+ ((sLinkAge != 1) && (HIGH_SCORE(HS_FISHING) & 0x800))) {
// Assignment of OoT's D_80B7A67C here removed in MM, this is now an empty branch
}
} else {
@@ -3932,10 +3931,11 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
SkelAnime_Free(&this->skelAnime, play);
if (this->unk_148 == 0) {
- SkelAnime_InitFlex(play, &this->skelAnime, &gFishingBassSkel, &gFishingBassAnim, 0, 0, 0);
+ SkelAnime_InitFlex(play, &this->skelAnime, &gFishingBassSkel, &gFishingBassAnim, NULL, NULL, 0);
Animation_MorphToLoop(&this->skelAnime, &gFishingBassAnim, 0.0f);
} else {
- SkelAnime_InitFlex(play, &this->skelAnime, &gFishingLoachSkel, &gFishingLoachAnim, 0, 0, 0);
+ SkelAnime_InitFlex(play, &this->skelAnime, &gFishingLoachSkel, &gFishingLoachAnim, NULL, NULL,
+ 0);
Animation_MorphToLoop(&this->skelAnime, &gFishingLoachAnim, 0.0f);
}
}
@@ -4694,7 +4694,7 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) {
case 0:
if (D_809171FC == 0) {
if (sLinkAge != 1) {
- if ((gSaveContext.save.saveInfo.unk_EC0 & 0x100) && !(gSaveContext.save.saveInfo.unk_EC0 & 0x200)) {
+ if ((HIGH_SCORE(HS_FISHING) & 0x100) && !(HIGH_SCORE(HS_FISHING) & 0x200)) {
this->actor.textId = 0x4093;
} else {
this->actor.textId = 0x407B;
@@ -4712,9 +4712,9 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) {
if (D_809171FC == 0) {
this->unk_154 = 1;
if (sLinkAge != 1) {
- gSaveContext.save.saveInfo.unk_EC0 |= 0x200;
+ HIGH_SCORE(HS_FISHING) |= 0x200;
} else {
- gSaveContext.save.saveInfo.unk_EC0 |= 0x100;
+ HIGH_SCORE(HS_FISHING) |= 0x100;
}
} else {
this->unk_154 = 10;
@@ -4805,8 +4805,8 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) {
D_8090CD04 = 20;
this->unk_154 = 0;
- if ((gSaveContext.save.saveInfo.unk_EC0 & 0xFF0000) < 0xFF0000) {
- gSaveContext.save.saveInfo.unk_EC0 += 0x10000;
+ if ((HIGH_SCORE(HS_FISHING) & 0xFF0000) < 0xFF0000) {
+ HIGH_SCORE(HS_FISHING) += 0x10000;
}
}
break;
@@ -4924,29 +4924,29 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) {
if (sLinkAge == 1) {
f32 temp;
- gSaveContext.save.saveInfo.unk_EC0 &= 0xFFFFFF00;
- gSaveContext.save.saveInfo.unk_EC0 |= ((s16)D_809171CC & 0x7F);
- temp = (gSaveContext.save.saveInfo.unk_EC0 & 0x7F000000) >> 0x18;
+ HIGH_SCORE(HS_FISHING) &= 0xFFFFFF00;
+ HIGH_SCORE(HS_FISHING) |= ((s16)D_809171CC & 0x7F);
+ temp = (HIGH_SCORE(HS_FISHING) & 0x7F000000) >> 0x18;
if (temp < D_809171CC) {
- gSaveContext.save.saveInfo.unk_EC0 &= 0xFFFFFF;
- gSaveContext.save.saveInfo.unk_EC0 |= ((s16)D_809171CC & 0x7F) << 0x18;
+ HIGH_SCORE(HS_FISHING) &= 0xFFFFFF;
+ HIGH_SCORE(HS_FISHING) |= ((s16)D_809171CC & 0x7F) << 0x18;
if (D_809171D2 == 2) {
- gSaveContext.save.saveInfo.unk_EC0 |= 0x80000000;
+ HIGH_SCORE(HS_FISHING) |= 0x80000000;
}
}
if (D_809171D2 == 2) {
- gSaveContext.save.saveInfo.unk_EC0 |= 0x80;
+ HIGH_SCORE(HS_FISHING) |= 0x80;
this->unk_154 = 0;
break;
}
} else {
- gSaveContext.save.saveInfo.unk_EC0 &= 0xFFFFFF;
- gSaveContext.save.saveInfo.unk_EC0 |= ((s16)D_809171CC & 0x7F) << 0x18;
+ HIGH_SCORE(HS_FISHING) &= 0xFFFFFF;
+ HIGH_SCORE(HS_FISHING) |= ((s16)D_809171CC & 0x7F) << 0x18;
if (D_809171D2 == 2) {
- gSaveContext.save.saveInfo.unk_EC0 |= 0x80000000;
+ HIGH_SCORE(HS_FISHING) |= 0x80000000;
this->unk_154 = 0;
break;
}
@@ -4963,14 +4963,14 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) {
}
if (sLinkAge == 1) {
- if ((D_809171CC >= 50.0f) && !(gSaveContext.save.saveInfo.unk_EC0 & 0x400)) {
- gSaveContext.save.saveInfo.unk_EC0 |= 0x400;
+ if ((D_809171CC >= 50.0f) && !(HIGH_SCORE(HS_FISHING) & 0x400)) {
+ HIGH_SCORE(HS_FISHING) |= 0x400;
getItemId = GI_HEART_PIECE;
sSinkingLureLocation = Rand_ZeroFloat(3.999f) + 1.0f;
}
} else {
- if ((D_809171CC >= 60.0f) && !(gSaveContext.save.saveInfo.unk_EC0 & 0x800)) {
- gSaveContext.save.saveInfo.unk_EC0 |= 0x800;
+ if ((D_809171CC >= 60.0f) && !(HIGH_SCORE(HS_FISHING) & 0x800)) {
+ HIGH_SCORE(HS_FISHING) |= 0x800;
getItemId = GI_SKULL_TOKEN;
sSinkingLureLocation = Rand_ZeroFloat(3.999f) + 1.0f;
}
@@ -5140,9 +5140,9 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) {
}
if (D_8090CD08 == 0) {
- gSaveContext.save.saveInfo.unk_EC0 |= 0x1000;
+ HIGH_SCORE(HS_FISHING) |= 0x1000;
} else if (D_8090CD08 == 1) {
- gSaveContext.save.saveInfo.unk_EC0 &= ~0x1000;
+ HIGH_SCORE(HS_FISHING) &= ~0x1000;
}
if (D_8090CCFC != 0) {
@@ -5314,8 +5314,8 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) {
Cutscene_StopManual(play, &play->csCtx);
D_8090CD4C = 0;
sSubCamId = SUB_CAM_ID_DONE;
- func_800F6834(play, 0);
- play->envCtx.lightSettings.fogNear = 0;
+ Environment_EnableUnderwaterLights(play, 0);
+ play->envCtx.adjLightSettings.fogNear = 0;
player->unk_B28 = -5;
D_80917200 = 5;
break;
@@ -5356,8 +5356,8 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) {
D_8090CD4C = 0;
sSubCamId = SUB_CAM_ID_DONE;
D_8090CD50 = 30;
- func_800F6834(play, 0);
- play->envCtx.lightSettings.fogNear = 0;
+ Environment_EnableUnderwaterLights(play, 0);
+ play->envCtx.adjLightSettings.fogNear = 0;
}
break;
@@ -5460,8 +5460,8 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) {
D_80917200 = 5;
D_8090CD54 = 0;
D_809171F6 = 20;
- func_800F6834(play, 0);
- play->envCtx.lightSettings.fogNear = 0;
+ Environment_EnableUnderwaterLights(play, 0);
+ play->envCtx.adjLightSettings.fogNear = 0;
}
}
}
@@ -5476,15 +5476,15 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) {
Math_ApproachF(&sSubCamVelFactor, 1.0f, 1.0f, 0.02f);
if (sSubCamEye.y <= (WATER_SURFACE_Y(play) + 1.0f)) {
- func_800F6834(play, 1);
+ Environment_EnableUnderwaterLights(play, 1);
if (D_809171CA != 0) {
- play->envCtx.lightSettings.fogNear = -0xB2;
+ play->envCtx.adjLightSettings.fogNear = -178;
} else {
- play->envCtx.lightSettings.fogNear = -0x2E;
+ play->envCtx.adjLightSettings.fogNear = -46;
}
} else {
- func_800F6834(play, 0);
- play->envCtx.lightSettings.fogNear = 0;
+ Environment_EnableUnderwaterLights(play, 0);
+ play->envCtx.adjLightSettings.fogNear = 0;
}
}
@@ -5534,10 +5534,10 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) {
if (Rand_ZeroOne() < 0.5f) {
D_8090CCD4 = Rand_ZeroFloat(10.0f) + 5.0f;
- play->envCtx.unk_E1 = 1;
+ play->envCtx.stormRequest = STORM_REQUEST_START;
} else {
D_8090CCD4 = 0;
- play->envCtx.unk_E1 = 2;
+ play->envCtx.stormRequest = STORM_REQUEST_STOP;
}
}
@@ -5568,8 +5568,8 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) {
Math_ApproachZeroF(&D_8090CCD8, 1.0f, 2.0f);
}
- play->envCtx.lightSettings.diffuseColor1[0] = play->envCtx.lightSettings.diffuseColor1[1] =
- play->envCtx.lightSettings.diffuseColor1[2] = D_8090CCD8;
+ play->envCtx.adjLightSettings.light1Color[0] = play->envCtx.adjLightSettings.light1Color[1] =
+ play->envCtx.adjLightSettings.light1Color[2] = D_8090CCD8;
if ((u8)D_8090CCD0 > 0) {
s32 pad;
@@ -5605,7 +5605,7 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) {
Audio_PlaySfx_AtPos(&sStreamSoundProjectedPos, NA_SE_EV_WATER_WALL - SFX_FLAG);
- if (gSaveContext.options.language == 0) { // Added in MM
+ if (gSaveContext.options.language == LANGUAGE_JPN) { // Added in MM
gSaveContext.minigameScore = D_8090CCF8;
} else {
gSaveContext.minigameScore = (SQ((f32)D_8090CCF8) * 0.0036f) + 0.5f;
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 a8e916aa0..bd706810d 100644
--- a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c
+++ b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c
@@ -224,7 +224,7 @@ void func_808D0930(EnFloormas* this, PlayState* play) {
void func_808D09CC(EnFloormas* this) {
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX;
this->drawDmgEffScale = 0.55f;
- this->drawDmgEffFrozenSteamScale = 0.82500005f;
+ this->drawDmgEffFrozenSteamScale = 825.0f * 0.001f;
this->drawDmgEffAlpha = 1.0f;
this->collider.base.colType = COLTYPE_HIT3;
this->unk_18E = 80;
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 0b645b302..07e4d60b9 100644
--- a/src/overlays/actors/ovl_En_Fr/z_en_fr.c
+++ b/src/overlays/actors/ovl_En_Fr/z_en_fr.c
@@ -29,7 +29,7 @@ ActorInit En_Fr_InitVars = {
void EnFr_Init(Actor* thisx, PlayState* play) {
EnFr* this = THIS;
- if (Flags_GetSwitch(play, ENFR_GET_SWITCHFLAG(&this->actor))) {
+ if (Flags_GetSwitch(play, ENFR_GET_SWITCH_FLAG(&this->actor))) {
Actor_Kill(&this->actor);
return;
}
@@ -43,7 +43,7 @@ void EnFr_Destroy(Actor* thisx, PlayState* play) {
void EnFr_Update(Actor* thisx, PlayState* play) {
EnFr* this = THIS;
- if (Flags_GetSwitch(play, ENFR_GET_SWITCHFLAG(&this->actor))) {
+ if (Flags_GetSwitch(play, ENFR_GET_SWITCH_FLAG(&this->actor))) {
Actor_Kill(&this->actor);
return;
}
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 27682ce40..0227608fb 100644
--- a/src/overlays/actors/ovl_En_Fr/z_en_fr.h
+++ b/src/overlays/actors/ovl_En_Fr/z_en_fr.h
@@ -5,7 +5,7 @@
struct EnFr;
-#define ENFR_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F)
+#define ENFR_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
#define ENFR_GET_TARGETMODE(thisx) (((thisx)->params >> 7) & 0xF)
typedef struct EnFr {
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 f106aa406..ec8c09b71 100644
--- a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c
+++ b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c
@@ -126,7 +126,7 @@ static Vec3f sShopItemPositions[3] = {
s32 EnFsn_TestItemSelected(PlayState* play) {
MessageContext* msgCtx = &play->msgCtx;
- if ((msgCtx->unk12020 == 0x10) || (msgCtx->unk12020 == 0x11)) {
+ if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_11)) {
return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A);
}
return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) ||
@@ -410,7 +410,7 @@ void EnFsn_EndInteraction(EnFsn* this, PlayState* play) {
this->cutsceneState = ENFSN_CUTSCENESTATE_STOPPED;
}
Actor_ProcessTalkRequest(&this->actor, &play->state);
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
this->drawCursor = 0;
@@ -995,7 +995,7 @@ void EnFsn_MakeOffer(EnFsn* this, PlayState* play) {
switch (play->msgCtx.choiceIndex) {
case 0:
Audio_PlaySfx_MessageDecide();
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
if (this->cutsceneState == ENFSN_CUTSCENESTATE_PLAYING) {
CutsceneManager_Stop(this->csId);
@@ -1204,7 +1204,7 @@ void EnFsn_HandleCanPlayerBuyItem(EnFsn* this, PlayState* play) {
item = this->items[this->cursorIndex];
item->buyFanfareFunc(play, item);
Actor_OfferGetItem(&this->actor, play, this->items[this->cursorIndex]->getItemId, 300.0f, 300.0f);
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
this->drawCursor = 0;
@@ -1246,7 +1246,7 @@ void EnFsn_SetupEndInteraction(EnFsn* this, PlayState* play) {
if (play->msgCtx.bombersNotebookEventQueueCount == 0) {
EnFsn_EndInteraction(this, play);
} else {
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
}
} else {
@@ -1327,7 +1327,7 @@ void EnFsn_AskCanBuyMore(EnFsn* this, PlayState* play) {
if (play->msgCtx.bombersNotebookEventQueueCount == 0) {
EnFsn_EndInteraction(this, play);
} else {
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
}
} else {
@@ -1378,7 +1378,7 @@ void EnFsn_AskCanBuyAterRunningOutOfItems(EnFsn* this, PlayState* play) {
if (play->msgCtx.bombersNotebookEventQueueCount == 0) {
EnFsn_EndInteraction(this, play);
} else {
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
}
} else {
@@ -1433,12 +1433,12 @@ void EnFsn_ConverseBackroom(EnFsn* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
if (this->flags & ENFSN_END_CONVERSATION) {
this->flags &= ~ENFSN_END_CONVERSATION;
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->actionFunc = EnFsn_IdleBackroom;
} else if (this->flags & ENFSN_GIVE_ITEM) {
this->flags &= ~ENFSN_GIVE_ITEM;
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->actionFunc = EnFsn_GiveItem;
} else {
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 b0a5200e2..6a68f283a 100644
--- a/src/overlays/actors/ovl_En_Fu/z_en_fu.c
+++ b/src/overlays/actors/ovl_En_Fu/z_en_fu.c
@@ -996,46 +996,46 @@ s32 func_80963810(PlayState* play, Vec3f pos) {
s32 func_809638F8(PlayState* play) {
s32 ret = true;
- if (play->envCtx.lightSettings.diffuseColor1[0] > 25) {
- play->envCtx.lightSettings.diffuseColor1[0] -= 25;
+ if (play->envCtx.adjLightSettings.light1Color[0] > 25) {
+ play->envCtx.adjLightSettings.light1Color[0] -= 25;
ret = false;
} else {
- play->envCtx.lightSettings.diffuseColor1[0] = 0;
+ play->envCtx.adjLightSettings.light1Color[0] = 0;
}
- if (play->envCtx.lightSettings.diffuseColor1[1] > 25) {
- play->envCtx.lightSettings.diffuseColor1[1] -= 25;
+ if (play->envCtx.adjLightSettings.light1Color[1] > 25) {
+ play->envCtx.adjLightSettings.light1Color[1] -= 25;
ret = false;
} else {
- play->envCtx.lightSettings.diffuseColor1[1] = 0;
+ play->envCtx.adjLightSettings.light1Color[1] = 0;
}
- if (play->envCtx.lightSettings.diffuseColor1[2] > 25) {
- play->envCtx.lightSettings.diffuseColor1[2] -= 25;
+ if (play->envCtx.adjLightSettings.light1Color[2] > 25) {
+ play->envCtx.adjLightSettings.light1Color[2] -= 25;
ret = false;
} else {
- play->envCtx.lightSettings.diffuseColor1[2] = 0;
+ play->envCtx.adjLightSettings.light1Color[2] = 0;
}
- if (play->envCtx.lightSettings.ambientColor[0] > 25) {
- play->envCtx.lightSettings.ambientColor[0] -= 25;
+ if (play->envCtx.adjLightSettings.ambientColor[0] > 25) {
+ play->envCtx.adjLightSettings.ambientColor[0] -= 25;
ret = false;
} else {
- play->envCtx.lightSettings.ambientColor[0] = 0;
+ play->envCtx.adjLightSettings.ambientColor[0] = 0;
}
- if (play->envCtx.lightSettings.ambientColor[1] > 25) {
- play->envCtx.lightSettings.ambientColor[1] -= 25;
+ if (play->envCtx.adjLightSettings.ambientColor[1] > 25) {
+ play->envCtx.adjLightSettings.ambientColor[1] -= 25;
ret = false;
} else {
- play->envCtx.lightSettings.ambientColor[1] = 0;
+ play->envCtx.adjLightSettings.ambientColor[1] = 0;
}
- if (play->envCtx.lightSettings.ambientColor[2] > 25) {
- play->envCtx.lightSettings.ambientColor[2] -= 25;
+ if (play->envCtx.adjLightSettings.ambientColor[2] > 25) {
+ play->envCtx.adjLightSettings.ambientColor[2] -= 25;
ret = false;
} else {
- play->envCtx.lightSettings.ambientColor[2] = 0;
+ play->envCtx.adjLightSettings.ambientColor[2] = 0;
}
return ret;
}
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 9b96771be..e7d8e9032 100644
--- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c
+++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c
@@ -5,7 +5,6 @@
*/
#include "z_en_gb2.h"
-#include "objects/object_ps/object_ps.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20)
@@ -163,7 +162,7 @@ u16 func_80B0F7FC(EnGb2* this) {
return 0x14E4;
}
- if (gSaveContext.save.saveInfo.playerData.health > 48) {
+ if (gSaveContext.save.saveInfo.playerData.health > 0x30) {
return 0x14D2;
}
@@ -171,7 +170,7 @@ u16 func_80B0F7FC(EnGb2* this) {
return 0x14D3;
case 0x14E4:
- if (gSaveContext.save.saveInfo.playerData.health > 48) {
+ if (gSaveContext.save.saveInfo.playerData.health > 0x30) {
return 0x14D2;
}
@@ -193,8 +192,10 @@ u16 func_80B0F7FC(EnGb2* this) {
case 0x14D9:
return 0x14DA;
+
+ default:
+ return 0;
}
- return 0;
}
u16 func_80B0F8F8(EnGb2* this) {
@@ -213,8 +214,10 @@ u16 func_80B0F8F8(EnGb2* this) {
case 0x14E1:
return 0x14E2;
+
+ default:
+ return 0;
}
- return 0;
}
u16 func_80B0F97C(EnGb2* this) {
@@ -236,8 +239,10 @@ u16 func_80B0F97C(EnGb2* this) {
case 0x14FA:
this->unk_26C |= 2;
return 0x14FB;
+
+ default:
+ return 0;
}
- return 0;
}
void func_80B0FA04(EnGb2* this) {
@@ -262,17 +267,19 @@ s32 func_80B0FA48(EnGb2* this, PlayState* play) {
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_80_40)) {
this->unk_26E = 0x14EB;
return false;
+ } else {
+ this->unk_26E = 0x14EE;
+ return true;
}
- this->unk_26E = 0x14EE;
- return true;
- }
- if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_80_20)) {
- this->unk_26E = 0x14EF;
- return false;
- } else {
- this->unk_26E = 0x14F4;
- return true;
+ default:
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_80_20)) {
+ this->unk_26E = 0x14EF;
+ return false;
+ } else {
+ this->unk_26E = 0x14F4;
+ return true;
+ }
}
}
@@ -314,12 +321,14 @@ u16 func_80B0FB24(EnGb2* this) {
case 0x14F2:
this->unk_26C |= 2;
return 0x14F3;
+
+ default:
+ return 0;
}
- return 0;
}
void func_80B0FBF0(EnGb2* this, PlayState* play) {
- Vec3f sp90[4] = {
+ Vec3f sp90[] = {
{ 120.0f, 0.0f, 800.0f },
{ -120.0f, 0.0f, 750.0f },
{ 60.0f, 0.0f, 750.0f },
@@ -355,7 +364,7 @@ void func_80B0FD8C(EnGb2* this, PlayState* play) {
}
void func_80B0FE18(PlayState* play) {
- func_800FD750(NA_BGM_MINI_BOSS);
+ Environment_ForcePlaySequence(NA_BGM_MINI_BOSS);
play->nextEntrance = ENTRANCE(GHOST_HUT, 1);
play->transitionType = TRANS_TYPE_64;
gSaveContext.nextTransitionType = TRANS_TYPE_64;
@@ -370,8 +379,8 @@ void func_80B0FE7C(PlayState* play) {
}
void func_80B0FEBC(EnGb2* this, PlayState* play) {
- if ((play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING)) {
- play->msgCtx.ocarinaMode = 4;
+ if ((play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING)) {
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
SET_EVENTINF(EVENTINF_47);
this->unk_26E = 0x14D1;
this->unk_288 = 10;
@@ -391,7 +400,7 @@ void func_80B0FFA8(EnGb2* this, PlayState* play) {
if (talkState == TEXT_STATE_5) {
if (Message_ShouldAdvance(play)) {
if (this->unk_26C & 2) {
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->unk_26E = 0x14D1;
this->unk_288 = 30;
@@ -425,13 +434,16 @@ void func_80B0FFA8(EnGb2* this, PlayState* play) {
this->unk_26C |= 2;
Message_StartTextbox(play, this->unk_26E, &this->actor);
break;
+
+ default:
+ break;
}
} else if (this->unk_26E == 0x14DA) {
switch (play->msgCtx.choiceIndex) {
case 0:
Audio_PlaySfx_MessageDecide();
Rupees_ChangeBy(-this->unk_288);
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
func_800B7298(play, NULL, PLAYER_CSMODE_WAIT);
this->actionFunc = func_80B11344;
@@ -443,6 +455,9 @@ void func_80B0FFA8(EnGb2* this, PlayState* play) {
this->unk_26C |= 2;
Message_StartTextbox(play, this->unk_26E, &this->actor);
break;
+
+ default:
+ break;
}
}
}
@@ -505,7 +520,7 @@ void func_80B10344(EnGb2* this, PlayState* play) {
}
}
- if (gSaveContext.save.saveInfo.playerData.health < 49) {
+ if (gSaveContext.save.saveInfo.playerData.health <= 0x30) {
gSaveContext.timerStates[TIMER_ID_MINIGAME_1] = TIMER_STATE_STOP;
SET_EVENTINF(EVENTINF_46);
SET_EVENTINF(EVENTINF_45);
@@ -553,7 +568,7 @@ void func_80B10634(EnGb2* this, PlayState* play) {
if (talkState == TEXT_STATE_5) {
if (Message_ShouldAdvance(play)) {
if (this->unk_26C & 2) {
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->unk_26C &= ~2;
if (this->unk_26E == 0x14DD) {
@@ -583,7 +598,7 @@ void func_80B10634(EnGb2* this, PlayState* play) {
} else {
Audio_PlaySfx_MessageDecide();
Rupees_ChangeBy(-this->unk_288);
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
func_800B7298(play, NULL, PLAYER_CSMODE_WAIT);
this->actionFunc = func_80B11344;
@@ -596,6 +611,9 @@ void func_80B10634(EnGb2* this, PlayState* play) {
this->unk_26C |= 2;
Message_StartTextbox(play, this->unk_26E, &this->actor);
break;
+
+ default:
+ break;
}
}
}
@@ -663,7 +681,7 @@ void func_80B10A48(EnGb2* this, PlayState* play) {
case ENGB2_7_2:
CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
if (this->unk_26E == 0x14FB) {
- Flags_SetSwitch(play, ENGB2_GET_7F8(&this->actor));
+ Flags_SetSwitch(play, ENGB2_GET_SWITCH_FLAG(&this->actor));
Actor_Kill(&this->actor);
return;
}
@@ -673,6 +691,9 @@ void func_80B10A48(EnGb2* this, PlayState* play) {
this->actor.flags &= ~ACTOR_FLAG_TARGETABLE;
this->actionFunc = func_80B111AC;
break;
+
+ default:
+ break;
}
}
}
@@ -731,7 +752,7 @@ void func_80B10DAC(EnGb2* this, PlayState* play) {
if (this->csIdIndex != 2) {
this->actionFunc = func_80B10E98;
} else {
- Flags_SetSwitch(play, ENGB2_GET_7F8(&this->actor));
+ Flags_SetSwitch(play, ENGB2_GET_SWITCH_FLAG(&this->actor));
this->actionFunc = func_80B10868;
}
} else {
@@ -750,12 +771,12 @@ void func_80B10E98(EnGb2* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
if (this->unk_26C & 2) {
this->unk_26C &= ~2;
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
if ((this->unk_26E != 0x14E8) && (this->unk_26E != 0x14EA)) {
CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
this->actionFunc = func_80B10B5C;
- } else if (Flags_GetSwitch(play, ENGB2_GET_7F8(&this->actor))) {
+ } else if (Flags_GetSwitch(play, ENGB2_GET_SWITCH_FLAG(&this->actor))) {
this->actionFunc = func_80B10A48;
} else {
CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
@@ -793,7 +814,7 @@ void func_80B11048(EnGb2* this, PlayState* play) {
void func_80B110F8(EnGb2* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
if (this->unk_26C & 2) {
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->unk_26C &= ~2;
this->actionFunc = func_80B10A48;
@@ -877,7 +898,7 @@ void EnGb2_Init(Actor* thisx, PlayState* play) {
this->actor.room = -1;
Actor_ProcessInitChain(&this->actor, sInitChain);
SkelAnime_InitFlex(play, &this->skelAnime, &object_ps_Skel_007230, &object_ps_Anim_00049C, this->jointTable,
- this->morphTable, 12);
+ this->morphTable, OBJECT_PS_LIMB_MAX);
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 35.0f);
Collider_InitCylinder(play, &this->collider);
Collider_SetCylinderType1(play, &this->collider, &this->actor, &sCylinderInit);
@@ -915,7 +936,7 @@ void EnGb2_Init(Actor* thisx, PlayState* play) {
return;
}
- if (Flags_GetSwitch(play, ENGB2_GET_7F8(thisx))) {
+ if (Flags_GetSwitch(play, ENGB2_GET_SWITCH_FLAG(thisx))) {
Actor_Kill(&this->actor);
return;
}
@@ -929,7 +950,7 @@ void EnGb2_Init(Actor* thisx, PlayState* play) {
case ENGB2_7_2:
this->csIdIndex = 0;
this->csIdList[0] = this->actor.csId;
- if (Flags_GetSwitch(play, ENGB2_GET_7F8(thisx))) {
+ if (Flags_GetSwitch(play, ENGB2_GET_SWITCH_FLAG(thisx))) {
Actor_Kill(&this->actor);
return;
}
@@ -981,11 +1002,11 @@ s32 EnGb2_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p
Gfx** gfx) {
EnGb2* this = THIS;
- if (limbIndex == 7) {
+ if (limbIndex == OBJECT_PS_LIMB_07) {
Matrix_RotateYS(this->unk_270.y, MTXMODE_APPLY);
}
- if (limbIndex == 1) {
+ if (limbIndex == OBJECT_PS_LIMB_01) {
*dList = NULL;
}
@@ -996,7 +1017,7 @@ void EnGb2_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
EnGb2* this = THIS;
Vec3f sp18 = { 2400.0f, 0.0f, 0.0f };
- if (limbIndex == 7) {
+ if (limbIndex == OBJECT_PS_LIMB_07) {
Matrix_MultVec3f(&sp18, &this->actor.focus.pos);
}
}
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 a257ab3d4..e59eecee0 100644
--- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.h
+++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.h
@@ -2,13 +2,14 @@
#define Z_EN_GB2_H
#include "global.h"
+#include "objects/object_ps/object_ps.h"
struct EnGb2;
typedef void (*EnGb2ActionFunc)(struct EnGb2*, PlayState*);
#define ENGB2_GET_7(thisx) ((thisx)->params & 7)
-#define ENGB2_GET_7F8(thisx) (((thisx)->params & 0x7F8) >> 3)
+#define ENGB2_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0x7F8) >> 3)
typedef enum {
/* 0 */ ENGB2_7_0,
@@ -19,8 +20,8 @@ typedef enum {
typedef struct EnGb2 {
/* 0x0000 */ Actor actor;
/* 0x144 */ SkelAnime skelAnime;
- /* 0x188 */ Vec3s jointTable[12];
- /* 0x1D0 */ Vec3s morphTable[12];
+ /* 0x188 */ Vec3s jointTable[OBJECT_PS_LIMB_MAX];
+ /* 0x1D0 */ Vec3s morphTable[OBJECT_PS_LIMB_MAX];
/* 0x218 */ EnGb2ActionFunc actionFunc;
/* 0x21C */ ColliderCylinder collider;
/* 0x268 */ Actor* unk_268;
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 25556fdf7..c83305a8c 100644
--- a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c
+++ b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c
@@ -69,10 +69,11 @@ typedef enum {
/* 6 */ GERUDO_WHITE_ANIM_EXCITED_CLAPPING,
/* 7 */ GERUDO_WHITE_ANIM_SALUTE,
/* 8 */ GERUDO_WHITE_ANIM_LEADING_BOAT,
- /* 9 */ GERUDO_WHITE_ANIM_BLOWN_AWAY
+ /* 9 */ GERUDO_WHITE_ANIM_BLOWN_AWAY,
+ /* 10 */ GERUDO_WHITE_ANIM_MAX
} GerudoWhiteAnimation;
-void EnGe1_ChangeAnim(EnGe1* this, s16 animIndex, u8 mode, f32 morphFrames);
+void EnGe1_ChangeAnim(EnGe1* this, s16 animIndex, u8 animMode, f32 morphFrames);
void EnGe1_ShadowDraw(Actor* thisx, Lights* lights, PlayState* play);
void EnGe1_Wait(EnGe1* this, PlayState* play);
void EnGe1_PerformCutsceneActions(EnGe1* this, PlayState* play);
@@ -127,8 +128,8 @@ void EnGe1_Destroy(Actor* thisx, PlayState* play) {
Collider_DestroyCylinder(play, &this->collider);
}
-void EnGe1_ChangeAnim(EnGe1* this, s16 animIndex, u8 mode, f32 morphFrames) {
- static AnimationHeader* sAnimations[] = {
+void EnGe1_ChangeAnim(EnGe1* this, s16 animIndex, u8 animMode, f32 morphFrames) {
+ static AnimationHeader* sAnimations[GERUDO_WHITE_ANIM_MAX] = {
&gGerudoWhiteArmsFoldedAnim, // GERUDO_WHITE_ANIM_ARMS_FOLDED,
&gGerudoWhiteUnfoldingArmsAnim, // GERUDO_WHITE_ANIM_UNFOLDING_ARMS
&gGerudoWhiteStandingHeadBowedAnim, // GERUDO_WHITE_ANIM_STANDING_HEAD_BOWED,
@@ -154,7 +155,7 @@ void EnGe1_ChangeAnim(EnGe1* this, s16 animIndex, u8 mode, f32 morphFrames) {
default:
Animation_Change(&this->skelAnime, sAnimations[animIndex], 1.0f, 0.0f,
- Animation_GetLastFrame(sAnimations[animIndex]), mode, morphFrames);
+ Animation_GetLastFrame(sAnimations[animIndex]), animMode, morphFrames);
break;
}
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 eeacf00a5..45d304aaf 100644
--- a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c
+++ b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c
@@ -119,7 +119,7 @@ void EnGe2_Init(Actor* thisx, PlayState* play) {
switch (GERUDO_PURPLE_GET_TYPE(&this->picto.actor)) {
case GERUDO_PURPLE_TYPE_BOAT_SENTRY:
Animation_Change(&this->skelAnime, &gGerudoPurpleLookingAboutAnim, 1.0f, 0.0f,
- Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), 0, 0.0f);
+ Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), ANIMMODE_LOOP, 0.0f);
this->actionFunc = EnGe2_GuardStationary;
this->picto.actor.speed = 0.0f;
this->picto.actor.uncullZoneForward = 4000.0f;
@@ -343,18 +343,18 @@ s32 EnGe2_FollowPathWithoutGravity(EnGe2* this) {
/* Action and helper functions */
void EnGe2_SpawnEffects(EnGe2* this, PlayState* play) {
- static Vec3f effectVelocity = { 0.0f, -0.05f, 0.0f };
- static Vec3f effectAccel = { 0.0f, -0.025f, 0.0f };
- static Color_RGBA8 effectPrimColor = { 255, 255, 255, 0 };
- static Color_RGBA8 effectEnvColor = { 255, 150, 0, 0 };
+ static Vec3f sEffectVelocity = { 0.0f, -0.05f, 0.0f };
+ static Vec3f sEffectAccel = { 0.0f, -0.025f, 0.0f };
+ static Color_RGBA8 sEffectPrimColor = { 255, 255, 255, 0 };
+ static Color_RGBA8 sEffectEnvColor = { 255, 150, 0, 0 };
s16 effectAngle = play->state.frames * 0x2800;
Vec3f effectPos;
effectPos.x = (Math_CosS(effectAngle) * 5.0f) + this->picto.actor.focus.pos.x;
effectPos.y = this->picto.actor.focus.pos.y + 10.0f;
effectPos.z = (Math_SinS(effectAngle) * 5.0f) + this->picto.actor.focus.pos.z;
- EffectSsKirakira_SpawnDispersed(play, &effectPos, &effectVelocity, &effectAccel, &effectPrimColor, &effectEnvColor,
- 1000, 16);
+ EffectSsKirakira_SpawnDispersed(play, &effectPos, &sEffectVelocity, &sEffectAccel, &sEffectPrimColor,
+ &sEffectEnvColor, 1000, 16);
}
void EnGe2_Scream(EnGe2* this) {
@@ -396,7 +396,7 @@ void EnGe2_SetupCapturePlayer(EnGe2* this) {
this->picto.actor.speed = 0.0f;
this->actionFunc = EnGe2_CapturePlayer;
Animation_Change(&this->skelAnime, &gGerudoPurpleLookingAboutAnim, 1.0f, 0.0f,
- Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), 0, -8.0f);
+ Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), ANIMMODE_LOOP, -8.0f);
}
void EnGe2_Charge(EnGe2* this, PlayState* play) {
@@ -429,7 +429,7 @@ void EnGe2_SetupCharge(EnGe2* this, PlayState* play) {
if (this->picto.actor.shape.rot.y == this->picto.actor.yawTowardsPlayer) {
Animation_Change(&this->skelAnime, &gGerudoPurpleChargingAnim, 1.0f, 0.0f,
- Animation_GetLastFrame(&gGerudoPurpleChargingAnim), 0, -8.0f);
+ Animation_GetLastFrame(&gGerudoPurpleChargingAnim), ANIMMODE_LOOP, -8.0f);
this->timer = 50;
this->picto.actor.speed = 4.0f;
this->actionFunc = EnGe2_Charge;
@@ -438,7 +438,7 @@ void EnGe2_SetupCharge(EnGe2* this, PlayState* play) {
void EnGe2_SetupLookAround(EnGe2* this) {
Animation_Change(&this->skelAnime, &gGerudoPurpleLookingAboutAnim, 1.0f, 0.0f,
- Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), 0, -8.0f);
+ Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), ANIMMODE_LOOP, -8.0f);
this->timer = 60;
this->picto.actor.speed = 0.0f;
this->actionFunc = EnGe2_LookAround;
@@ -483,13 +483,13 @@ void EnGe2_PatrolDuties(EnGe2* this, PlayState* play) {
this->picto.actor.speed = 0.0f;
this->actionFunc = EnGe2_SetupCharge;
Animation_Change(&this->skelAnime, &gGerudoPurpleLookingAboutAnim, 1.0f, 0.0f,
- Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), 0, -8.0f);
+ Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), ANIMMODE_LOOP, -8.0f);
this->stateFlags |= GERUDO_PURPLE_STATE_CAPTURING;
} else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_80_08)) {
this->picto.actor.speed = 0.0f;
this->actionFunc = EnGe2_TurnToPlayerFast;
Animation_Change(&this->skelAnime, &gGerudoPurpleLookingAboutAnim, 1.0f, 0.0f,
- Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), 0, -8.0f);
+ Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), ANIMMODE_LOOP, -8.0f);
} else if (EnGe2_LookForPlayer(play, &this->picto.actor, &this->picto.actor.focus.pos,
this->picto.actor.shape.rot.y, 0x1800, visionRange, this->verticalDetectRange)) {
if ((GERUDO_PURPLE_GET_EXIT(&this->picto.actor) != GERUDO_PURPLE_EXIT_NONE) && !Play_InCsMode(play)) {
@@ -499,7 +499,7 @@ void EnGe2_PatrolDuties(EnGe2* this, PlayState* play) {
Message_StartTextbox(play, 0x1194, &this->picto.actor);
this->actionFunc = EnGe2_SetupCharge;
Animation_Change(&this->skelAnime, &gGerudoPurpleLookingAboutAnim, 1.0f, 0.0f,
- Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), 0, -8.0f);
+ Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), ANIMMODE_LOOP, -8.0f);
}
} else if (this->collider.base.acFlags & AC_HIT) {
if ((this->collider.info.acHitInfo != NULL) &&
@@ -510,7 +510,7 @@ void EnGe2_PatrolDuties(EnGe2* this, PlayState* play) {
this->stateFlags |= GERUDO_PURPLE_STATE_STUNNED;
} else {
Animation_Change(&this->skelAnime, &gGerudoPurpleFallingToGroundAnim, 1.0f, 0.0f,
- Animation_GetLastFrame(&gGerudoPurpleFallingToGroundAnim), 2, -8.0f);
+ Animation_GetLastFrame(&gGerudoPurpleFallingToGroundAnim), ANIMMODE_ONCE, -8.0f);
this->timer = 200;
this->picto.actor.speed = 0.0f;
this->actionFunc = EnGe2_KnockedOut;
@@ -543,7 +543,7 @@ void EnGe2_LookAround(EnGe2* this, PlayState* play) {
} else {
this->actionFunc = EnGe2_Walk;
Animation_Change(&this->skelAnime, &gGerudoPurpleWalkingAnim, 1.0f, 0.0f,
- Animation_GetLastFrame(&gGerudoPurpleWalkingAnim), 0, -8.0f);
+ Animation_GetLastFrame(&gGerudoPurpleWalkingAnim), ANIMMODE_LOOP, -8.0f);
this->headRot.y = 0;
this->detectedStatus = GERUDO_PURPLE_DETECTION_UNDETECTED;
}
@@ -602,13 +602,14 @@ void EnGe2_PerformCutsceneActions(EnGe2* this, PlayState* play) {
switch (cueId) {
case ENGE2_CUEID_BEEHIVE_PATROL:
Animation_Change(&this->skelAnime, &gGerudoPurpleLookingAboutAnim, 1.0f, 0.0f,
- Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), 0, -8.0f);
+ Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), ANIMMODE_LOOP, -8.0f);
EnGe2_GetNextPath(this, play);
break;
case ENGE2_CUEID_BEEHIVE_RUN_AWAY:
Animation_Change(&this->skelAnime, &gGerudoPurpleRunningAwayCutsceneAnim, 1.0f, 0.0f,
- Animation_GetLastFrame(&gGerudoPurpleRunningAwayCutsceneAnim), 0, -5.0f);
+ Animation_GetLastFrame(&gGerudoPurpleRunningAwayCutsceneAnim), ANIMMODE_LOOP,
+ -5.0f);
this->screamTimer = (s32)(Rand_ZeroFloat(10.0f) + 20.0f);
break;
@@ -617,11 +618,13 @@ void EnGe2_PerformCutsceneActions(EnGe2* this, PlayState* play) {
break;
case ENGE2_CUEID_GBT_ENTR_STAND_STILL:
- Animation_Change(&this->skelAnime, &gGerudoPurpleGreatBayCutsceneAnim, 0.0f, 0.0f, 0.0f, 2, 0.0f);
+ Animation_Change(&this->skelAnime, &gGerudoPurpleGreatBayCutsceneAnim, 0.0f, 0.0f, 0.0f,
+ ANIMMODE_ONCE, 0.0f);
break;
case ENGE2_CUEID_GBT_ENTR_BLOWN_AWAY:
- Animation_Change(&this->skelAnime, &gGerudoPurpleGreatBayCutsceneAnim, 0.0f, 1.0f, 1.0f, 2, 0.0f);
+ Animation_Change(&this->skelAnime, &gGerudoPurpleGreatBayCutsceneAnim, 0.0f, 1.0f, 1.0f,
+ ANIMMODE_ONCE, 0.0f);
EnGe2_SetupBlownAwayPath(this, play);
this->stateFlags |= GERUDO_PURPLE_STATE_DISABLE_MOVEMENT;
this->screamTimer = (s32)(Rand_ZeroFloat(10.0f) + 20.0f);
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 8baf9c0a3..21f207e7c 100644
--- a/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c
+++ b/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c
@@ -1,7 +1,7 @@
/*
* File: z_en_ge3.c
* Overlay: ovl_En_Ge3
- * Description: Aviel
+ * Description: Aviel, leader of the Gerudo Pirates
*/
#include "z_en_ge3.h"
@@ -15,7 +15,26 @@ void EnGe3_Destroy(Actor* thisx, PlayState* play);
void EnGe3_Update(Actor* thisx, PlayState* play);
void EnGe3_Draw(Actor* thisx, PlayState* play);
-#if 0
+void EnGe3_ChangeAnim(EnGe3* this, s16 animIndex, u8 animMode, f32 morphFrames);
+void EnGe3_SetupPath(EnGe3* this, PlayState* play);
+void EnGe3_Idle(EnGe3* this, PlayState* play);
+void EnGe3_AveilsChamberIdle(EnGe3* this, PlayState* play);
+s32 EnGe3_ValidatePictograph(PlayState* play, Actor* thisx);
+
+typedef enum GerudoAveilAnimation {
+ /* -1 */ GERUDO_AVEIL_ANIM_NONE = -1,
+ /* 0 */ GERUDO_AVEIL_ANIM_STAND,
+ /* 1 */ GERUDO_AVEIL_ANIM_WALK,
+ /* 2 */ GERUDO_AVEIL_ANIM_HAND_ON_HIP_WAIT,
+ /* 3 */ GERUDO_AVEIL_ANIM_TURN_HEAD,
+ /* 4 */ GERUDO_AVEIL_ANIM_WAIT,
+ /* 5 */ GERUDO_AVEIL_ANIM_DEMAND,
+ /* 6 */ GERUDO_AVEIL_ANIM_DISMISS,
+ /* 7 */ GERUDO_AVEIL_ANIM_BEG,
+ /* 8 */ GERUDO_AVEIL_ANIM_RUN_AWAY,
+ /* 9 */ GERUDO_AVEIL_ANIM_MAX
+} GerudoAveilAnimation;
+
ActorInit En_Ge3_InitVars = {
ACTOR_EN_GE3,
ACTORCAT_NPC,
@@ -28,49 +47,386 @@ ActorInit En_Ge3_InitVars = {
(ActorFunc)EnGe3_Draw,
};
-// static ColliderCylinderInit sCylinderInit = {
-static ColliderCylinderInit D_809A0DA0 = {
- { COLTYPE_NONE, AT_NONE, AC_ON | AC_TYPE_PLAYER, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_CYLINDER, },
- { ELEMTYPE_UNK0, { 0x00000000, 0x00, 0x00 }, { 0x01000222, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, 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_UNK0,
+ { 0x00000000, 0x00, 0x00 },
+ { 0x01000222, 0x00, 0x00 },
+ TOUCH_NONE | TOUCH_SFX_NORMAL,
+ BUMP_ON,
+ OCELEM_ON,
+ },
{ 20, 50, 0, { 0, 0, 0 } },
};
-#endif
+void EnGe3_Init(Actor* thisx, PlayState* play) {
+ s32 pad;
+ EnGe3* this = THIS;
-extern ColliderCylinderInit D_809A0DA0;
+ ActorShape_Init(&this->picto.actor.shape, 0.0f, ActorShadow_DrawCircle, 20.0f);
+ SkelAnime_InitFlex(play, &this->skelAnime, &gGerudoRedSkel, NULL, this->jointTable, this->morphTable,
+ GERUDO_RED_LIMB_MAX);
+ Animation_PlayLoop(&this->skelAnime, &gGerudoRedHandOnHipWaitAnim);
+ Collider_InitAndSetCylinder(play, &this->collider, &this->picto.actor, &sCylinderInit);
+ this->picto.actor.colChkInfo.mass = MASS_IMMOVABLE;
+ Actor_SetScale(&this->picto.actor, 0.01f);
-extern UNK_TYPE D_0600A808;
+ this->animIndex = GERUDO_AVEIL_ANIM_NONE;
+ this->cueId = GERUDO_AVEIL_CUEID_NONE;
+ this->picto.validationFunc = EnGe3_ValidatePictograph;
+ EnGe3_SetupPath(this, play);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/EnGe3_Init.s")
+ if (GERUDO_AVEIL_GET_TYPE(&this->picto.actor) == GERUDO_AVEIL_TYPE_AVEILS_CHAMBER) {
+ EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_HAND_ON_HIP_WAIT, ANIMMODE_LOOP, 0.0f);
+ this->actionFunc = EnGe3_AveilsChamberIdle;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/EnGe3_Destroy.s")
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_83_02)) {
+ Actor_Kill(&this->picto.actor);
+ return;
+ }
+ } else {
+ EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_WALK, ANIMMODE_LOOP, 0.0f);
+ this->actionFunc = EnGe3_Idle;
+ this->picto.actor.speed = 1.5f;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A0070.s")
+ this->stateFlags = 0;
+ this->picto.actor.targetMode = 6;
+ this->picto.actor.terminalVelocity = -4.0f;
+ this->picto.actor.gravity = -1.0f;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_80_08);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A00F8.s")
+void EnGe3_Destroy(Actor* thisx, PlayState* play) {
+ EnGe3* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A020C.s")
+ Collider_DestroyCylinder(play, &this->collider);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A024C.s")
+void EnGe3_ChangeAnim(EnGe3* this, s16 animIndex, u8 animMode, f32 morphFrames) {
+ static AnimationHeader* sAnimations[GERUDO_AVEIL_ANIM_MAX] = {
+ &gGerudoRedStandAnim, // GERUDO_AVEIL_ANIM_STAND
+ &gGerudoRedWalkAnim, // GERUDO_AVEIL_ANIM_WALK
+ &gGerudoRedHandOnHipWaitAnim, // GERUDO_AVEIL_ANIM_HAND_ON_HIP_WAIT
+ &gGerudoRedTurnHeadAnim, // GERUDO_AVEIL_ANIM_TURN_HEAD
+ &gGerudoRedWaitAnim, // GERUDO_AVEIL_ANIM_WAIT
+ &gGerudoRedDemandAnim, // GERUDO_AVEIL_ANIM_DEMAND
+ &gGerudoRedDismissAnim, // GERUDO_AVEIL_ANIM_DISMISS
+ &gGerudoRedBegAnim, // GERUDO_AVEIL_ANIM_BEG
+ &gGerudoRedRunAwayAnim, // GERUDO_AVEIL_ANIM_RUN_AWAY
+ };
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A0350.s")
+ Animation_Change(&this->skelAnime, sAnimations[animIndex], 1.0f, 0.0f,
+ Animation_GetLastFrame(sAnimations[animIndex]), animMode, morphFrames);
+ this->animIndex = animIndex;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A03AC.s")
+void EnGe3_LookAtPlayer(EnGe3* this, PlayState* play) {
+ s16 yawDiff = this->picto.actor.yawTowardsPlayer - this->picto.actor.shape.rot.y;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A03FC.s")
+ if ((ABS_ALT(yawDiff) <= 0x2300) && (this->picto.actor.xzDistToPlayer < 100.0f)) {
+ Actor_TrackPlayer(play, &this->picto.actor, &this->headRot, &this->torsoRot, this->picto.actor.focus.pos);
+ } else {
+ Math_SmoothStepToS(&this->headRot.x, 0, 6, 0x1838, 0x64);
+ Math_SmoothStepToS(&this->headRot.y, 0, 6, 0x1838, 0x64);
+ Math_SmoothStepToS(&this->torsoRot.x, 0, 6, 0x1838, 0x64);
+ Math_SmoothStepToS(&this->torsoRot.y, 0, 6, 0x1838, 0x64);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A04D0.s")
+void EnGe3_SetupPath(EnGe3* this, PlayState* play) {
+ this->curPointIndex = 0;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A0820.s")
+ if (GERUDO_AVEIL_GET_PATH(&this->picto.actor) != GERUDO_AVEIL_PATH_INDEX_NONE) {
+ this->path = &play->setupPathList[GERUDO_AVEIL_GET_PATH(&this->picto.actor)];
+ } else {
+ this->path = NULL;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A08A4.s")
+/**
+ * @return true if no path or reached end of path
+ */
+s32 EnGe3_FollowPath(EnGe3* this) {
+ Path* path = this->path;
+ Vec3s* curPoint;
+ f32 diffX;
+ f32 diffZ;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/EnGe3_Update.s")
+ if (path == NULL) {
+ return true;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A096C.s")
+ curPoint = Lib_SegmentedToVirtual(path->points);
+ curPoint += this->curPointIndex;
+ diffX = curPoint->x - this->picto.actor.world.pos.x;
+ diffZ = curPoint->z - this->picto.actor.world.pos.z;
+ this->picto.actor.world.rot.y = Math_Atan2S(diffX, diffZ);
+ Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.world.rot.y, 2, 0x7D0, 0xC8);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A0A14.s")
+ if ((SQ(diffX) + SQ(diffZ)) < SQ(10.0f)) {
+ this->curPointIndex++;
+ if (this->curPointIndex >= path->count) {
+ return true;
+ }
+ }
+ return false;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A0C60.s")
+void EnGe3_Scream(EnGe3* this) {
+ if ((s32)Rand_ZeroFloat(2.0f) == 0) {
+ Actor_PlaySfx(&this->picto.actor, NA_SE_VO_FPVO00);
+ } else {
+ Actor_PlaySfx(&this->picto.actor, NA_SE_VO_FPVO01);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/EnGe3_Draw.s")
+void EnGe3_Idle(EnGe3* this, PlayState* play) {
+ SkelAnime_Update(&this->skelAnime);
+ EnGe3_LookAtPlayer(this, play);
+
+ if (EnGe3_FollowPath(this)) {
+ EnGe3_SetupPath(this, play);
+ }
+}
+
+void EnGe3_ThrowPlayerOut(EnGe3* this, PlayState* play) {
+ SkelAnime_Update(&this->skelAnime);
+ Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 2, 0x400, 0x100);
+
+ if (this->actionTimer > 0) {
+ this->actionTimer--;
+ } else if (play->nextEntrance != play->setupExitList[GERUDO_AVEIL_GET_EXIT(&this->picto.actor)]) {
+ play->nextEntrance = play->setupExitList[GERUDO_AVEIL_GET_EXIT(&this->picto.actor)];
+ play->transitionTrigger = TRANS_TRIGGER_START;
+ play->transitionType = TRANS_TYPE_38;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_80_08);
+ }
+}
+
+void EnGe3_AveilsChamberIdle(EnGe3* this, PlayState* play) {
+ if (SkelAnime_Update(&this->skelAnime) && (this->cueId == GERUDO_AVEIL_CUEID_INSTRUCT)) {
+ EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_WAIT, ANIMMODE_ONCE, 0.0f);
+ }
+
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_108)) {
+ s16 cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_108)]->id;
+
+ if (this->cueId != GERUDO_AVEIL_CUEID_BEEHIVE_RUN_AWAY) {
+ Cutscene_ActorTranslateAndYaw(&this->picto.actor, play, Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_108));
+ }
+
+ if (this->cueId != cueId) {
+ this->cueId = cueId;
+ switch (this->cueId) {
+ // Both cutscenes
+ case GERUDO_AVEIL_CUEID_WAIT:
+ EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_HAND_ON_HIP_WAIT, ANIMMODE_LOOP, 0.0f);
+ break;
+
+ // Instructing expedition leader cutscene
+ case GERUDO_AVEIL_CUEID_PAUSE:
+ EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_TURN_HEAD, ANIMMODE_ONCE, 0.0f);
+ this->skelAnime.playSpeed = 0.0f;
+ break;
+
+ case GERUDO_AVEIL_CUEID_INSTRUCT:
+ EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_TURN_HEAD, ANIMMODE_ONCE, 0.0f);
+ break;
+
+ case GERUDO_AVEIL_CUEID_DEMAND:
+ EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_DEMAND, ANIMMODE_LOOP, 0.0f);
+ break;
+
+ case GERUDO_AVEIL_CUEID_DISMISS:
+ EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_DISMISS, ANIMMODE_ONCE, 0.0f);
+ break;
+
+ case GERUDO_AVEIL_CUEID_BEG:
+ EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_BEG, ANIMMODE_LOOP, 0.0f);
+ break;
+
+ // Fleeing from bees cutscene
+ case GERUDO_AVEIL_CUEID_BEEHIVE_RUN_AWAY:
+ EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_RUN_AWAY, ANIMMODE_LOOP, 0.0f);
+ this->picto.actor.speed = 5.0f;
+ this->screamTimer = (s32)(Rand_ZeroFloat(10.0f) + 20.0f);
+ break;
+
+ case GERUDO_AVEIL_CUEID_BEEHIVE_VANISH:
+ Actor_Kill(&this->picto.actor);
+ break;
+
+ default:
+ break;
+ }
+
+ SkelAnime_Update(&this->skelAnime);
+ }
+ } else if ((this->picto.actor.xzDistToPlayer < 700.0f) && (fabsf(this->picto.actor.playerHeightRel) < 100.0f) &&
+ !Play_InCsMode(play)) {
+ func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_26);
+ Lib_PlaySfx(NA_SE_SY_FOUND);
+
+ if (Player_GetMask(play) == PLAYER_MASK_STONE) { // Not fooled by Stone Mask
+ Message_StartTextbox(play, 0x11AF, &this->picto.actor);
+ } else {
+ Message_StartTextbox(play, 0x11AE, &this->picto.actor);
+ }
+
+ this->actionFunc = EnGe3_ThrowPlayerOut;
+ this->actionTimer = 50;
+ SET_WEEKEVENTREG(WEEKEVENTREG_80_08);
+ }
+
+ if (this->cueId == GERUDO_AVEIL_CUEID_BEEHIVE_RUN_AWAY) {
+ this->picto.actor.speed = 5.0f;
+ EnGe3_FollowPath(this);
+
+ if (Animation_OnFrame(&this->skelAnime, 2.0f) || Animation_OnFrame(&this->skelAnime, 6.0f)) {
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EV_PIRATE_WALK);
+ }
+
+ if (this->screamTimer > 0) {
+ this->screamTimer--;
+ } else {
+ this->screamTimer = (s32)(Rand_ZeroFloat(10.0f) + 20.0f);
+ EnGe3_Scream(this);
+ }
+ }
+}
+
+void EnGe3_UpdateColliderAndMove(Actor* thisx, PlayState* play) {
+ s32 pad;
+ EnGe3* this = THIS;
+
+ Collider_UpdateCylinder(&this->picto.actor, &this->collider);
+ CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
+ Actor_MoveWithGravity(&this->picto.actor);
+ Actor_UpdateBgCheckInfo(play, &this->picto.actor, 40.0f, 25.0f, 40.0f, UPDBGCHECKINFO_FLAG_4);
+}
+
+void EnGe3_Blink(EnGe3* this, PlayState* play) {
+ if (DECR(this->blinkTimer) == 0) {
+ this->blinkTimer = Rand_S16Offset(60, 60);
+ }
+
+ this->eyeIndex = this->blinkTimer;
+
+ if (this->eyeIndex >= 3) {
+ this->eyeIndex = 0;
+ }
+}
+
+void EnGe3_Update(Actor* thisx, PlayState* play) {
+ EnGe3* this = THIS;
+
+ EnGe3_UpdateColliderAndMove(&this->picto.actor, play);
+ this->actionFunc(this, play);
+ EnGe3_Blink(this, play);
+}
+
+s32 EnGe3_ValidatePictograph(PlayState* play, Actor* thisx) {
+ s32 ret = Snap_ValidatePictograph(play, thisx, PICTO_VALID_PIRATE_GOOD, &thisx->focus.pos, &thisx->shape.rot, 10.0f,
+ 400.0f, -1);
+
+ ret |= Snap_ValidatePictograph(play, thisx, PICTO_VALID_PIRATE_TOO_FAR, &thisx->focus.pos, &thisx->shape.rot, 10.0f,
+ 1200.0f, -1);
+
+ return ret;
+}
+
+s32 EnGe3_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
+ EnGe3* this = THIS;
+
+ switch (limbIndex) {
+ case GERUDO_RED_LIMB_VEIL:
+ case GERUDO_RED_LIMB_RIGHT_SWORD:
+ case GERUDO_RED_LIMB_LEFT_SWORD:
+ *dList = NULL;
+ return false;
+
+ case GERUDO_RED_LIMB_HEAD:
+ rot->x += this->headRot.y;
+ // fallthrough
+ default:
+ // This is required since EnGe3 shares a skeleton with EnKaizoku; it avoids stale colours being used in the
+ // displaylists.
+ OPEN_DISPS(play->state.gfxCtx);
+
+ switch (limbIndex) {
+ case GERUDO_RED_LIMB_NECK:
+ break;
+
+ case GERUDO_RED_LIMB_HEAD:
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetEnvColor(POLY_OPA_DISP++, 80, 60, 10, 255);
+ break;
+
+ case GERUDO_RED_LIMB_RIGHT_SWORD:
+ case GERUDO_RED_LIMB_LEFT_SWORD:
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetEnvColor(POLY_OPA_DISP++, 140, 170, 230, 255);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255);
+ break;
+
+ default:
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetEnvColor(POLY_OPA_DISP++, 140, 0, 0, 255);
+ break;
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+
+ if (this->animIndex == GERUDO_AVEIL_ANIM_HAND_ON_HIP_WAIT) {
+ // Fidget
+ if ((limbIndex == GERUDO_RED_LIMB_RIGHT_FOREARM) || (limbIndex == GERUDO_RED_LIMB_LEFT_FOREARM) ||
+ (limbIndex == GERUDO_RED_LIMB_TORSO)) {
+ s32 temp = limbIndex * 50;
+
+ // required to match
+ rot->y = rot->y + (s32)(Math_SinS(play->state.frames * (temp + 0x814)) * 200.0f);
+ rot->z = rot->z + (s32)(Math_CosS(play->state.frames * (temp + 0x940)) * 200.0f);
+ }
+ }
+ break;
+ }
+ return false;
+}
+
+void EnGe3_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
+ EnGe3* this = THIS;
+ Vec3f sFocusOffset = { 600.0f, 700.0f, 0.0f };
+
+ if (limbIndex == GERUDO_RED_LIMB_HEAD) {
+ Matrix_MultVec3f(&sFocusOffset, &this->picto.actor.focus.pos);
+ }
+}
+
+void EnGe3_Draw(Actor* thisx, PlayState* play) {
+ static TexturePtr sEyeTextures[] = {
+ gGerudoRedEyeOpenTex,
+ gGerudoRedEyeHalfTex,
+ gGerudoRedEyeClosedTex,
+ };
+ s32 pad;
+ EnGe3* this = THIS;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ Gfx_SetupDL37_Opa(play->state.gfxCtx);
+ gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeIndex]));
+ func_800B8050(&this->picto.actor, play, 0);
+ SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
+ EnGe3_OverrideLimbDraw, EnGe3_PostLimbDraw, &this->picto.actor);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
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 909ed7599..f2611e408 100644
--- a/src/overlays/actors/ovl_En_Ge3/z_en_ge3.h
+++ b/src/overlays/actors/ovl_En_Ge3/z_en_ge3.h
@@ -2,14 +2,54 @@
#define Z_EN_GE3_H
#include "global.h"
+#include "z64snap.h"
+#include "objects/object_geldb/object_geldb.h"
struct EnGe3;
typedef void (*EnGe3ActionFunc)(struct EnGe3*, PlayState*);
+#define GERUDO_AVEIL_GET_PATH(thisx) (((thisx)->params & 0xFC00) >> 10)
+#define GERUDO_AVEIL_GET_EXIT(thisx) (((thisx)->params & 0x1F0) >> 4)
+#define GERUDO_AVEIL_GET_TYPE(thisx) ((thisx)->params & 1)
+
+#define GERUDO_AVEIL_PATH_INDEX_NONE 0x3F
+
+typedef enum GerudoAveilType {
+ /* 0 */ GERUDO_AVEIL_TYPE_0, // Unused, just walks forwards
+ /* 1 */ GERUDO_AVEIL_TYPE_AVEILS_CHAMBER
+} GerudoAveilType;
+
+typedef enum GerudoAveilCueId {
+ /* -1 */ GERUDO_AVEIL_CUEID_NONE = -1,
+ /* 0 */ GERUDO_AVEIL_CUEID_0, // Unused
+ /* 1 */ GERUDO_AVEIL_CUEID_WAIT,
+ /* 2 */ GERUDO_AVEIL_CUEID_PAUSE,
+ /* 3 */ GERUDO_AVEIL_CUEID_INSTRUCT,
+ /* 4 */ GERUDO_AVEIL_CUEID_DEMAND,
+ /* 5 */ GERUDO_AVEIL_CUEID_DISMISS,
+ /* 6 */ GERUDO_AVEIL_CUEID_BEG,
+ /* 7 */ GERUDO_AVEIL_CUEID_BEEHIVE_RUN_AWAY,
+ /* 8 */ GERUDO_AVEIL_CUEID_BEEHIVE_VANISH
+} GerudoAveilCueId;
+
typedef struct EnGe3 {
- /* 0x000 */ Actor actor;
- /* 0x144 */ char unk_144[0x1D8];
+ /* 0x000 */ PictoActor picto;
+ /* 0x148 */ ColliderCylinder collider;
+ /* 0x194 */ SkelAnime skelAnime;
+ /* 0x1D8 */ Vec3s jointTable[GERUDO_RED_LIMB_MAX];
+ /* 0x268 */ Vec3s morphTable[GERUDO_RED_LIMB_MAX];
+ /* 0x2F8 */ s16 eyeIndex;
+ /* 0x2FA */ s16 blinkTimer;
+ /* 0x2FC */ Path* path;
+ /* 0x300 */ s32 curPointIndex;
+ /* 0x304 */ Vec3s headRot;
+ /* 0x30A */ Vec3s torsoRot;
+ /* 0x310 */ s16 stateFlags; // Set and not used, named based on OoT use
+ /* 0x312 */ s16 animIndex;
+ /* 0x314 */ s16 cueId;
+ /* 0x316 */ s16 actionTimer;
+ /* 0x318 */ s16 screamTimer;
/* 0x31C */ EnGe3ActionFunc actionFunc;
} EnGe3; // size = 0x320
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 a01bfbd19..10c8b5037 100644
--- a/src/overlays/actors/ovl_En_Geg/z_en_geg.c
+++ b/src/overlays/actors/ovl_En_Geg/z_en_geg.c
@@ -7,7 +7,6 @@
#include "z_en_geg.h"
#include "overlays/actors/ovl_En_Bom/z_en_bom.h"
#include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h"
-#include "objects/object_oF1d_map/object_oF1d_map.h"
#include "objects/object_taisou/object_taisou.h"
#include "objects/object_hakugin_demo/object_hakugin_demo.h"
#include "objects/gameplay_keep/gameplay_keep.h"
@@ -126,68 +125,112 @@ static DamageTable sDamageTable = {
/* Powder Keg */ DMG_ENTRY(1, 0x0),
};
-static AnimationInfoS sAnimationInfo[] = {
- { &gGoronLyingDownIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &gGoronLyingDownIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &gGoronUnrollAnim, 2.0f, 0, -1, ANIMMODE_ONCE, 0 },
- { &gGoronUnrollAnim, 2.0f, 0, -1, ANIMMODE_ONCE, -4 },
- { &gGoronUnrollAnim, -2.0f, 0, -1, ANIMMODE_ONCE, -4 },
- { &gGoronShiverAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &gGoronShiverAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &gGoronDropKegAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
- { &gGoronAthleticsSquatSideToSideAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &gGoronAthleticsDoubleArmSideBendAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &gGoronAthleticsShakeLimbsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &gGoronAthleticsSingleArmSideBendAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &gGoronAthleticsHamstringStretchSittingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &gGoronAthleticsCheerAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &gGoronAthleticsShoutAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &gGoronAthleticsHamstringStretchStandingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &gGoronCoverEarsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &gGoronSpringLookAroundAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
- { &gGoronSpringLookAroundLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &gGoronShiveringSurprisedAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
- { &gGoronStandingIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
+typedef enum {
+ /* -1 */ ENGEG_ANIM_NONE = -1,
+ /* 0x00 */ ENGEG_ANIM_0,
+ /* 0x01 */ ENGEG_ANIM_1,
+ /* 0x02 */ ENGEG_ANIM_2,
+ /* 0x03 */ ENGEG_ANIM_3,
+ /* 0x04 */ ENGEG_ANIM_4,
+ /* 0x05 */ ENGEG_ANIM_5,
+ /* 0x06 */ ENGEG_ANIM_6,
+ /* 0x07 */ ENGEG_ANIM_7,
+ /* 0x08 */ ENGEG_ANIM_8,
+ /* 0x09 */ ENGEG_ANIM_9,
+ /* 0x0A */ ENGEG_ANIM_10,
+ /* 0x0B */ ENGEG_ANIM_11,
+ /* 0x0C */ ENGEG_ANIM_12,
+ /* 0x0D */ ENGEG_ANIM_13,
+ /* 0x0E */ ENGEG_ANIM_14,
+ /* 0x0F */ ENGEG_ANIM_15,
+ /* 0x10 */ ENGEG_ANIM_16,
+ /* 0x11 */ ENGEG_ANIM_17,
+ /* 0x12 */ ENGEG_ANIM_18,
+ /* 0x13 */ ENGEG_ANIM_19,
+ /* 0x14 */ ENGEG_ANIM_20,
+ /* 0x15 */ ENGEG_ANIM_MAX
+} EnGegAnimation;
+
+static AnimationInfoS sAnimationInfo[ENGEG_ANIM_MAX] = {
+ { &gGoronLyingDownIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_0
+ { &gGoronLyingDownIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENGEG_ANIM_1
+ { &gGoronUnrollAnim, 2.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENGEG_ANIM_2
+ { &gGoronUnrollAnim, 2.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENGEG_ANIM_3
+ { &gGoronUnrollAnim, -2.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENGEG_ANIM_4
+ { &gGoronShiverAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_5
+ { &gGoronShiverAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENGEG_ANIM_6
+ { &gGoronDropKegAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENGEG_ANIM_7
+ { &gGoronAthleticsSquatSideToSideAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_8
+ { &gGoronAthleticsDoubleArmSideBendAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_9
+ { &gGoronAthleticsShakeLimbsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_10
+ { &gGoronAthleticsSingleArmSideBendAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_11
+ { &gGoronAthleticsHamstringStretchSittingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_12
+ { &gGoronAthleticsCheerAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_13
+ { &gGoronAthleticsShoutAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_14
+ { &gGoronAthleticsHamstringStretchStandingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_15
+ { &gGoronCoverEarsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_16
+ { &gGoronSpringLookAroundAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENGEG_ANIM_17
+ { &gGoronSpringLookAroundLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENGEG_ANIM_18
+ { &gGoronShiveringSurprisedAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENGEG_ANIM_19
+ { &gGoronStandingIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_20
};
u16 func_80BB16D0(EnGeg* this) {
switch (this->unk_496) {
case 0xD5E:
return 0xD5F;
+
case 0xD5F:
return 0xD60;
+
case 0xD60:
return 0xD61;
+
case 0xD62:
return 0xD63;
+
case 0xD64:
return 0xD65;
+
case 0xD66:
return 0xD67;
+
case 0xD67:
return 0xD68;
+
case 0xD68:
return 0xD69;
+
case 0xD6A:
return 0xD6B;
+
case 0xD6B:
return 0xD6C;
+
case 0xD6C:
return 0xD6D;
+
case 0xD6E:
return 0xD6F;
+
case 0xD70:
return 0xD71;
+
case 0xD71:
return 0xD72;
+
case 0xD73:
return 0xD74;
+
case 0xD74:
return 0xD75;
+
case 0xD89:
return 0xD8A;
+
+ default:
+ return 0;
}
- return 0;
}
void func_80BB178C(EnGeg* this, PlayState* play) {
@@ -372,14 +415,14 @@ s32 func_80BB1D64(EnGeg* this, PlayState* play) {
return true;
}
-void func_80BB1FCC(EnGeg* this, PlayState* play) {
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->unk_248].segment);
+void EnGeg_UpdateSkelAnime(EnGeg* this, PlayState* play) {
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->objectSlot].segment);
SkelAnime_Update(&this->skelAnime);
}
-void func_80BB2020(EnGeg* this, PlayState* play) {
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->unk_248].segment);
- SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->unk_4AC);
+void EnGeg_ChangeAnim(EnGeg* this, PlayState* play) {
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->objectSlot].segment);
+ SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex);
}
s32 func_80BB2088(EnGeg* this, PlayState* play) {
@@ -393,7 +436,7 @@ s32 func_80BB2088(EnGeg* this, PlayState* play) {
}
if (Actor_IsFacingAndNearPlayer(&this->actor, 300.0f, 0x7FF8) &&
- ((this->unk_4AC == 5) || ((this->unk_4AC == 13) && (this->unk_496 == 0xD69)))) {
+ ((this->animIndex == ENGEG_ANIM_5) || ((this->animIndex == ENGEG_ANIM_13) && (this->unk_496 == 0xD69)))) {
this->unk_230 |= 2;
func_80BB1D64(this, play);
} else {
@@ -411,9 +454,9 @@ s32 func_80BB2088(EnGeg* this, PlayState* play) {
}
void func_80BB217C(EnGeg* this, PlayState* play) {
- if (Object_IsLoaded(&play->objectCtx, this->unk_248)) {
- this->unk_4AC = 5;
- func_80BB2020(this, play);
+ if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) {
+ this->animIndex = ENGEG_ANIM_5;
+ EnGeg_ChangeAnim(this, play);
Actor_SetScale(&this->actor, 0.01f);
this->unk_230 = 0;
this->actor.shape.shadowScale = 20.0f;
@@ -507,10 +550,10 @@ void func_80BB2520(EnGeg* this, PlayState* play) {
break;
case 0xD66:
- this->unk_248 = Object_GetIndex(&play->objectCtx, OBJECT_OF1D_MAP);
- if (this->unk_248 >= 0) {
- this->unk_4AC = 19;
- func_80BB2020(this, play);
+ this->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_OF1D_MAP);
+ if (this->objectSlot > OBJECT_SLOT_NONE) {
+ this->animIndex = ENGEG_ANIM_19;
+ EnGeg_ChangeAnim(this, play);
}
this->unk_230 |= 0x20;
this->actionFunc = func_80BB2944;
@@ -525,13 +568,16 @@ void func_80BB2520(EnGeg* this, PlayState* play) {
case 0xD72:
case 0xD75:
case 0xD8B:
- this->unk_248 = Object_GetIndex(&play->objectCtx, OBJECT_OF1D_MAP);
- if (this->unk_248 >= 0) {
- this->unk_4AC = 4;
- func_80BB2020(this, play);
+ this->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_OF1D_MAP);
+ if (this->objectSlot > OBJECT_SLOT_NONE) {
+ this->animIndex = ENGEG_ANIM_4;
+ EnGeg_ChangeAnim(this, play);
}
this->actionFunc = func_80BB2E00;
break;
+
+ default:
+ break;
}
} else {
if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
@@ -552,11 +598,14 @@ void func_80BB26EC(EnGeg* this, PlayState* play) {
case 0xD61:
CutsceneManager_Stop(this->csId);
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->unk_230 &= ~0x10;
this->actionFunc = func_80BB221C;
return;
+
+ default:
+ break;
}
this->unk_496 = func_80BB16D0(this);
@@ -568,14 +617,14 @@ void func_80BB27D4(EnGeg* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
switch (this->unk_496) {
case 0xD63:
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->actionFunc = func_80BB221C;
break;
case 0xD69:
this->nextCsId = this->csIdList[6];
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->actionFunc = func_80BB2520;
break;
@@ -583,7 +632,7 @@ void func_80BB27D4(EnGeg* this, PlayState* play) {
case 0xD6D:
case 0xD6F:
case 0xD8A:
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->actionFunc = func_80BB31B8;
break;
@@ -591,7 +640,7 @@ void func_80BB27D4(EnGeg* this, PlayState* play) {
case 0xD72:
case 0xD75:
case 0xD8B:
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->unk_230 &= ~0x10;
this->nextCsId = this->csIdList[7];
@@ -609,16 +658,16 @@ void func_80BB27D4(EnGeg* this, PlayState* play) {
void func_80BB2944(EnGeg* this, PlayState* play) {
u8 talkState = Message_GetState(&play->msgCtx);
s16 curFrame = this->skelAnime.curFrame;
- s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->unk_4AC].animation);
+ s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation);
- if (this->unk_4AC == 19) {
- if (curFrame == lastFrame) {
- this->unk_4AC = 6;
- func_80BB2020(this, play);
+ if (this->animIndex == ENGEG_ANIM_19) {
+ if (curFrame == endFrame) {
+ this->animIndex = ENGEG_ANIM_6;
+ EnGeg_ChangeAnim(this, play);
}
} else if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
if (this->unk_496 == 0xD67) {
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->nextCsId = this->csIdList[4];
this->actionFunc = func_80BB2520;
@@ -635,7 +684,7 @@ void func_80BB2A54(EnGeg* this, PlayState* play) {
CutsceneManager_Stop(this->csId);
this->unk_230 &= ~0x10;
this->unk_244 = 65;
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->actionFunc = func_80BB347C;
} else {
@@ -664,10 +713,10 @@ void func_80BB2B1C(EnGeg* this, PlayState* play) {
CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor);
this->unk_496 = 0xD68;
Message_ContinueTextbox(play, this->unk_496);
- this->unk_248 = Object_GetIndex(&play->objectCtx, OBJECT_TAISOU);
- if (this->unk_248 >= 0) {
- this->unk_4AC = 13;
- func_80BB2020(this, play);
+ this->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_TAISOU);
+ if (this->objectSlot > OBJECT_SLOT_NONE) {
+ this->animIndex = ENGEG_ANIM_13;
+ EnGeg_ChangeAnim(this, play);
}
this->actionFunc = func_80BB27D4;
} else {
@@ -704,21 +753,21 @@ void func_80BB2B1C(EnGeg* this, PlayState* play) {
}
void func_80BB2E00(EnGeg* this, PlayState* play) {
- s16 sp2E = this->skelAnime.curFrame;
- s16 sp2C = Animation_GetLastFrame(sAnimationInfo[this->unk_4AC].animation);
+ s16 curFrame = this->skelAnime.curFrame;
+ s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation);
- if (this->unk_4AC == 2) {
+ if (this->animIndex == ENGEG_ANIM_2) {
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 5, 0x1000, 0x100);
this->actor.world.rot.y = this->actor.shape.rot.y;
- if (sp2E == sp2C) {
+ if (curFrame == endFrame) {
CutsceneManager_Stop(this->csId);
- this->unk_4AC = 20;
- func_80BB2020(this, play);
+ this->animIndex = ENGEG_ANIM_20;
+ EnGeg_ChangeAnim(this, play);
this->actionFunc = func_80BB30B4;
} else if (Animation_OnFrame(&this->skelAnime, 24.0f)) {
Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_STAND_IMT);
}
- } else if (this->unk_4AC == 4) {
+ } else if (this->animIndex == ENGEG_ANIM_4) {
if (Animation_OnFrame(&this->skelAnime, 0.0f)) {
this->unk_230 |= 1;
this->actor.shape.yOffset = 14.0f;
@@ -740,11 +789,11 @@ void func_80BB2F7C(EnGeg* this, PlayState* play) {
if ((this->actor.xzDistToPlayer < 150.0f) && (fabsf(this->actor.playerHeightRel) < 10.0f) &&
(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
- this->unk_4AC = 2;
+ this->animIndex = ENGEG_ANIM_2;
this->actor.speed = 0.0f;
this->unk_230 &= ~1;
this->actor.shape.yOffset = 0.0f;
- func_80BB2020(this, play);
+ EnGeg_ChangeAnim(this, play);
this->actionFunc = func_80BB2E00;
} else {
this->actor.speed = 5.0f;
@@ -877,8 +926,8 @@ void EnGeg_Init(Actor* thisx, PlayState* play) {
CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
if (this->actor.update != NULL) {
- this->unk_248 = Object_GetIndex(&play->objectCtx, OBJECT_OF1D_MAP);
- if (this->unk_248 < 0) {
+ this->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_OF1D_MAP);
+ if (this->objectSlot <= OBJECT_SLOT_NONE) {
Actor_Kill(&this->actor);
}
}
@@ -902,7 +951,7 @@ void EnGeg_Update(Actor* thisx, PlayState* play) {
EnGeg* this = THIS;
this->actionFunc(this, play);
- func_80BB1FCC(this, play);
+ EnGeg_UpdateSkelAnime(this, play);
func_80BB2088(this, play);
func_80BB1C8C(this);
SubS_UpdateFidgetTables(play, this->fidgetTableY, this->fidgetTableZ, ENGEG_FIDGET_TABLE_LEN);
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 522312fc2..5d2990a09 100644
--- a/src/overlays/actors/ovl_En_Geg/z_en_geg.h
+++ b/src/overlays/actors/ovl_En_Geg/z_en_geg.h
@@ -2,6 +2,7 @@
#define Z_EN_GEG_H
#include "global.h"
+#include "objects/object_oF1d_map/object_oF1d_map.h"
struct EnGeg;
@@ -22,9 +23,9 @@ typedef struct EnGeg {
/* 0x240 */ s16 unk_240;
/* 0x242 */ s16 unk_242;
/* 0x244 */ s16 unk_244;
- /* 0x248 */ s32 unk_248;
- /* 0x24C */ Vec3s jointTable[18];
- /* 0x2B8 */ Vec3s morphTable[18];
+ /* 0x248 */ s32 objectSlot;
+ /* 0x24C */ Vec3s jointTable[GORON_LIMB_MAX];
+ /* 0x2B8 */ Vec3s morphTable[GORON_LIMB_MAX];
/* 0x324 */ UNK_TYPE1 unk324[0x144];
/* 0x468 */ s16 unk_468;
/* 0x46A */ s16 unk_46A;
@@ -38,7 +39,7 @@ typedef struct EnGeg {
/* 0x498 */ s16 csId;
/* 0x49A */ s16 nextCsId;
/* 0x49C */ s16 csIdList[8];
- /* 0x4AC */ s32 unk_4AC;
+ /* 0x4AC */ s32 animIndex;
/* 0x4B0 */ s16 unk_4B0;
/* 0x4B4 */ Vec3f unk_4B4;
/* 0x4C0 */ Vec3f unk_4C0[2];
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 ab1f8b539..5a0f0f3f2 100644
--- a/src/overlays/actors/ovl_En_Gg/z_en_gg.c
+++ b/src/overlays/actors/ovl_En_Gg/z_en_gg.c
@@ -6,7 +6,6 @@
#include "z_en_gg.h"
#include "objects/gameplay_keep/gameplay_keep.h"
-#include "objects/object_gg/object_gg.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_REACT_TO_LENS)
@@ -95,15 +94,44 @@ static DamageTable sDamageTable = {
/* Powder Keg */ DMG_ENTRY(0, 0x0),
};
-static AnimationInfo sAnimationInfo[] = {
- { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, 0, -10.0f }, { &object_gg_Anim_00D528, 1.0f, 0.0f, 0.0f, 2, -10.0f },
- { &object_gg_Anim_00D174, 1.0f, 0.0f, 0.0f, 2, -10.0f }, { &object_gg_Anim_00ECC0, 1.0f, 0.0f, 0.0f, 2, -10.0f },
- { &object_gg_Anim_00BAF0, 1.0f, 0.0f, 0.0f, 0, -10.0f }, { &object_gg_Anim_00AF40, 1.0f, 0.0f, 0.0f, 0, -10.0f },
- { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, 0, -10.0f }, { &object_gg_Anim_00AF40, 1.0f, 0.0f, 0.0f, 0, -10.0f },
- { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, 0, -10.0f }, { &object_gg_Anim_0100C8, 1.0f, 0.0f, 0.0f, 0, 0.0f },
- { &object_gg_Anim_00CDA0, 1.0f, 0.0f, 0.0f, 0, 0.0f }, { &object_gg_Anim_00B560, 1.0f, 0.0f, 0.0f, 0, 0.0f },
- { &object_gg_Anim_00A4B4, 1.0f, 0.0f, 0.0f, 2, 0.0f }, { &object_gg_Anim_00E86C, 1.0f, 0.0f, 0.0f, 2, 0.0f },
- { &object_gg_Anim_00D99C, 1.0f, 0.0f, 0.0f, 2, 0.0f }, { &object_gg_Anim_00E2A4, 1.0f, 0.0f, 0.0f, 0, 0.0f },
+typedef enum {
+ /* -1 */ ENGG_ANIM_NONE = -1,
+ /* 0x00 */ ENGG_ANIM_0,
+ /* 0x01 */ ENGG_ANIM_1,
+ /* 0x02 */ ENGG_ANIM_2,
+ /* 0x03 */ ENGG_ANIM_3,
+ /* 0x04 */ ENGG_ANIM_4,
+ /* 0x05 */ ENGG_ANIM_5,
+ /* 0x06 */ ENGG_ANIM_6,
+ /* 0x07 */ ENGG_ANIM_7,
+ /* 0x08 */ ENGG_ANIM_8,
+ /* 0x09 */ ENGG_ANIM_9,
+ /* 0x0A */ ENGG_ANIM_10,
+ /* 0x0B */ ENGG_ANIM_11,
+ /* 0x0C */ ENGG_ANIM_12,
+ /* 0x0D */ ENGG_ANIM_13,
+ /* 0x0E */ ENGG_ANIM_14,
+ /* 0x0F */ ENGG_ANIM_15,
+ /* 0x10 */ ENGG_ANIM_MAX
+} EnGgAnimation;
+
+static AnimationInfo sAnimationInfo[ENGG_ANIM_MAX] = {
+ { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG_ANIM_0
+ { &object_gg_Anim_00D528, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -10.0f }, // ENGG_ANIM_1
+ { &object_gg_Anim_00D174, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -10.0f }, // ENGG_ANIM_2
+ { &object_gg_Anim_00ECC0, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -10.0f }, // ENGG_ANIM_3
+ { &object_gg_Anim_00BAF0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG_ANIM_4
+ { &object_gg_Anim_00AF40, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG_ANIM_5
+ { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG_ANIM_6
+ { &object_gg_Anim_00AF40, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG_ANIM_7
+ { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG_ANIM_8
+ { &object_gg_Anim_0100C8, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGG_ANIM_9
+ { &object_gg_Anim_00CDA0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGG_ANIM_10
+ { &object_gg_Anim_00B560, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGG_ANIM_11
+ { &object_gg_Anim_00A4B4, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // ENGG_ANIM_12
+ { &object_gg_Anim_00E86C, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // ENGG_ANIM_13
+ { &object_gg_Anim_00D99C, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // ENGG_ANIM_14
+ { &object_gg_Anim_00E2A4, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGG_ANIM_15
};
void func_80B34F70(EnGg* this) {
@@ -149,7 +177,7 @@ void func_80B35108(EnGg* this, PlayState* play) {
}
void func_80B351A4(EnGg* this) {
- if ((this->unk_2E6 == 2) || (this->unk_2E6 == 3)) {
+ if ((this->animIndex == ENGG_ANIM_2) || (this->animIndex == ENGG_ANIM_3)) {
this->unk_2E2 = 3;
} else {
s16 temp = this->unk_2E4 - 1;
@@ -170,57 +198,57 @@ void func_80B351A4(EnGg* this) {
void func_80B35250(EnGg* this) {
this->unk_2E4 = 20;
this->unk_2E2 = 0;
- this->unk_2E6 = 0;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0);
+ this->animIndex = ENGG_ANIM_0;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG_ANIM_0);
this->actionFunc = func_80B35450;
}
void func_80B352A4(EnGg* this, PlayState* play) {
- s16 sp26 = this->skelAnime.curFrame;
- s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->unk_2E6].animation);
+ s16 curFrame = this->skelAnime.curFrame;
+ s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation);
- if (sp26 == lastFrame) {
+ if (curFrame == endFrame) {
switch (this->actor.textId) {
case 0xCE5:
- this->unk_2E6 = 1;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1);
+ this->animIndex = ENGG_ANIM_1;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG_ANIM_1);
break;
case 0xCE6:
case 0xCEC:
- this->unk_2E6 = 0;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0);
+ this->animIndex = ENGG_ANIM_0;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG_ANIM_0);
break;
case 0xCE8:
- this->unk_2E6 = 2;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2);
+ this->animIndex = ENGG_ANIM_2;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG_ANIM_2);
break;
case 0xCE9:
- this->unk_2E6 = 3;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
+ this->animIndex = ENGG_ANIM_3;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG_ANIM_3);
break;
case 0xCED:
case 0xCEE:
- this->unk_2E6 = 4;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 4);
+ this->animIndex = ENGG_ANIM_4;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG_ANIM_4);
break;
default:
- this->unk_2E6 = 0;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0);
+ this->animIndex = ENGG_ANIM_0;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG_ANIM_0);
break;
}
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)) {
+ } else if ((this->animIndex == ENGG_ANIM_0) && ((this->actor.textId == 0xCED) || (this->actor.textId == 0xCEE))) {
+ if (curFrame < (endFrame - 1)) {
this->skelAnime.playSpeed = 2.0f;
} else {
- this->unk_2E6 = 4;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 4);
+ this->animIndex = ENGG_ANIM_4;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG_ANIM_4);
}
}
}
@@ -249,8 +277,8 @@ void func_80B35450(EnGg* this, PlayState* play) {
void func_80B3556C(EnGg* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- if (this->unk_2E6 == 4) {
- play->msgCtx.msgMode = 0x43;
+ if (this->animIndex == ENGG_ANIM_4) {
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->unk_308 = 0;
this->actor.flags &= ~ACTOR_FLAG_REACT_TO_LENS;
@@ -275,47 +303,43 @@ void func_80B35634(EnGg* this, PlayState* play) {
switch (play->csCtx.actorCues[cueChannel]->id) {
case 1:
- this->unk_2DA = 0;
- this->unk_2E6 = 0;
+ this->csAnimIndex = ENGG_ANIM_0;
+ this->animIndex = ENGG_ANIM_0;
break;
case 2:
- this->unk_2DA = 9;
- this->unk_2E6 = 9;
+ this->csAnimIndex = ENGG_ANIM_9;
+ this->animIndex = ENGG_ANIM_9;
break;
case 3:
- this->unk_2DA = 10;
- this->unk_2E6 = 10;
+ this->csAnimIndex = ENGG_ANIM_10;
+ this->animIndex = ENGG_ANIM_10;
break;
case 4:
- do {
- this->unk_344.unk_30 = this->unk_2DA = 11;
- } while (0);
- this->unk_2E6 = 11;
+ this->unk_344.animIndex = this->csAnimIndex = ENGG_ANIM_11;
+ this->animIndex = ENGG_ANIM_11;
func_80B364D4(&this->unk_344, play);
break;
case 5:
- do {
- this->unk_344.unk_30 = this->unk_2DA = 12;
- } while (0);
- this->unk_2E6 = 12;
+ this->unk_344.animIndex = this->csAnimIndex = ENGG_ANIM_12;
+ //! FAKE:
+ if (1) {}
+ this->animIndex = ENGG_ANIM_12;
break;
case 6:
- do {
- this->unk_344.unk_30 = this->unk_2DA = 13;
- } while (0);
- this->unk_2E6 = 13;
+ this->unk_344.animIndex = this->csAnimIndex = ENGG_ANIM_13;
+ //! FAKE:
+ if (1) {}
+ this->animIndex = ENGG_ANIM_13;
break;
case 7:
- do {
- this->unk_344.unk_30 = this->unk_2DA = 14;
- } while (0);
- this->unk_2E6 = 14;
+ this->unk_344.animIndex = this->csAnimIndex = ENGG_ANIM_14;
+ this->animIndex = ENGG_ANIM_14;
func_80B364D4(&this->unk_344, play);
break;
@@ -324,13 +348,13 @@ void func_80B35634(EnGg* this, PlayState* play) {
return;
default:
- this->unk_2DA = 0;
+ this->csAnimIndex = ENGG_ANIM_0;
break;
}
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->unk_2DA);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->csAnimIndex);
}
- if (this->unk_2DA == 14) {
+ if (this->csAnimIndex == ENGG_ANIM_14) {
func_80B358D8(this, play);
}
@@ -345,16 +369,22 @@ u16 func_80B357F0(EnGg* this) {
switch (this->actor.textId) {
case 0xCE5:
return 0xCE6;
+
case 0xCE6:
return 0xCE8;
+
case 0xCE8:
return 0xCE9;
+
case 0xCE9:
return 0xCEC;
+
case 0xCEC:
return 0xCED;
+
+ default:
+ return 0;
}
- return 0;
}
void func_80B3584C(EnGg* this) {
@@ -366,12 +396,12 @@ void func_80B3584C(EnGg* this) {
}
void func_80B358D8(EnGg* this, PlayState* play) {
- s16 sp1E = this->skelAnime.curFrame;
- s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->unk_2DA].animation);
+ s16 curFrame = this->skelAnime.curFrame;
+ s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->csAnimIndex].animation);
- if ((this->unk_2E6 == 14) && (sp1E == lastFrame)) {
- this->unk_2E6 = 15;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 15);
+ if ((this->animIndex == ENGG_ANIM_14) && (curFrame == endFrame)) {
+ this->animIndex = ENGG_ANIM_15;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG_ANIM_15);
}
}
@@ -379,8 +409,8 @@ void func_80B35968(EnGg* this, PlayState* play) {
if (this->unk_344.unk_34 != NULL) {
this->unk_344.unk_34(&this->unk_344, play);
} else {
- if ((this->unk_2DA == 11) || (this->unk_2DA == 14)) {
- this->unk_344.unk_30 = this->unk_2DA;
+ if ((this->csAnimIndex == ENGG_ANIM_11) || (this->csAnimIndex == ENGG_ANIM_14)) {
+ this->unk_344.animIndex = this->csAnimIndex;
}
func_80B363E8(&this->unk_344, play, &this->unk_320, &this->unk_32C, &this->unk_338);
}
@@ -399,7 +429,7 @@ void func_80B359DC(EnGg* this, PlayState* play) {
this->unk_306 = 0;
}
- if ((player->transformation == PLAYER_FORM_HUMAN) && (play->msgCtx.ocarinaMode == 3) &&
+ if ((player->transformation == PLAYER_FORM_HUMAN) && (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) &&
(play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING)) {
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_19_80)) {
SET_WEEKEVENTREG(WEEKEVENTREG_19_80);
@@ -433,7 +463,7 @@ void func_80B35B24(EnGgStruct* ptr, PlayState* play) {
}
void func_80B35B44(EnGgStruct* ptr, PlayState* play) {
- if (ptr->unk_30 == 0xE) {
+ if (ptr->animIndex == ENGG_ANIM_14) {
ptr->unk_40++;
if (ptr->unk_40 > 0x46) {
ptr->unk_48 = 1;
@@ -455,13 +485,13 @@ void func_80B35B44(EnGgStruct* ptr, PlayState* play) {
ptr->unk_44 = 0x37;
}
}
- } else if ((ptr->unk_30 == 11) || (ptr->unk_30 == 12)) {
+ } else if ((ptr->animIndex == ENGG_ANIM_11) || (ptr->animIndex == ENGG_ANIM_12)) {
ptr->unk_40++;
if (ptr->unk_40 > 0x46) {
ptr->unk_48 = 1;
ptr->unk_40 = 0;
}
- } else if (ptr->unk_30 == 0xD) {
+ } else if (ptr->animIndex == ENGG_ANIM_13) {
ptr->unk_48 = 0;
ptr->unk_40++;
if (ptr->unk_40 > 0x46) {
@@ -496,7 +526,7 @@ void func_80B35C84(EnGgStruct* ptr, PlayState* play) {
sp74 = ptr->unk_40 % temp;
ptr->unk_40 = sp74;
phi_s7 = 0x46;
- } else if (ptr->unk_30 == 0xD) {
+ } else if (ptr->animIndex == ENGG_ANIM_13) {
sp74 = ptr->unk_40;
phi_s7 = 0x46;
} else {
@@ -519,6 +549,7 @@ void func_80B35C84(EnGgStruct* ptr, PlayState* play) {
temp_f26 = ptr->unk_00.z + (ptr->unk_18.z * temp_f20) + (0.5f * ptr->unk_24.z * temp_f20 * temp_f20);
temp_f20 = Rand_ZeroOne() * 0.003f;
+ //! FAKE:
if (1) {}
Matrix_Translate(temp_f22, temp_f24, temp_f26, MTXMODE_NEW);
@@ -630,9 +661,9 @@ void func_80B363E8(EnGgStruct* ptr, PlayState* play, Vec3f* arg1, Vec3f* arg2, V
ptr->unk_00.x += -4.0f;
ptr->unk_0C.x += 4.0f;
- if ((ptr->unk_30 == 11) || (ptr->unk_30 == 12) || (ptr->unk_30 == 13)) {
+ if ((ptr->animIndex == ENGG_ANIM_11) || (ptr->animIndex == ENGG_ANIM_12) || (ptr->animIndex == ENGG_ANIM_13)) {
ptr->unk_38 = func_80B35C84;
- } else if (ptr->unk_30 == 14) {
+ } else if (ptr->animIndex == ENGG_ANIM_14) {
ptr->unk_38 = func_80B3610C;
}
}
@@ -655,7 +686,7 @@ void EnGg_Init(Actor* thisx, PlayState* play) {
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 30.0f);
this->actor.bgCheckFlags |= BGCHECKFLAG_PLAYER_400;
SkelAnime_InitFlex(play, &this->skelAnime, &object_gg_Skel_00F6C0, &object_gg_Anim_00F578, this->jointTable,
- this->morphTable, 20);
+ this->morphTable, OBJECT_GG_LIMB_MAX);
Collider_InitCylinder(play, &this->collider);
Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
@@ -700,11 +731,13 @@ void EnGg_Update(Actor* thisx, PlayState* play) {
}
if ((play->csCtx.state == CS_STATE_IDLE) &&
- ((this->unk_2DA != 14) && (this->unk_2DA != 11) && (this->unk_2DA != 12) && (this->unk_2DA != 13))) {
+ ((this->csAnimIndex != ENGG_ANIM_14) && (this->csAnimIndex != ENGG_ANIM_11) &&
+ (this->csAnimIndex != ENGG_ANIM_12) && (this->csAnimIndex != ENGG_ANIM_13))) {
func_80B364D4(&this->unk_344, play);
}
- if (((this->unk_2DA == 14) || (this->unk_2DA == 11) || (this->unk_2DA == 12) || (this->unk_2DA == 13)) &&
+ if (((this->csAnimIndex == ENGG_ANIM_14) || (this->csAnimIndex == ENGG_ANIM_11) ||
+ (this->csAnimIndex == ENGG_ANIM_12) || (this->csAnimIndex == ENGG_ANIM_13)) &&
(this->unk_309 == 1)) {
func_80B35968(this, play);
}
@@ -738,7 +771,7 @@ s32 EnGg_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po
Gfx** gfx) {
EnGg* this = THIS;
- if (limbIndex == 2) {
+ if (limbIndex == OBJECT_GG_LIMB_02) {
Matrix_RotateZS(this->unk_2E8, MTXMODE_APPLY);
}
return false;
@@ -750,12 +783,13 @@ void EnGg_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
Vec3f sp30 = { 0.0f, 0.0f, 0.0f };
Vec3f sp24 = { 0.0f, 0.0f, 0.0f };
- if (this->unk_2DA == 14) {
+ if (this->csAnimIndex == ENGG_ANIM_14) {
sp30.y = 3.0f;
sp30.z = -1.0f;
sp24.y = -0.07f;
this->unk_309 = 1;
- } else if ((this->unk_2DA == 11) || (this->unk_2DA == 12) || (this->unk_2DA == 13)) {
+ } else if ((this->csAnimIndex == ENGG_ANIM_11) || (this->csAnimIndex == ENGG_ANIM_12) ||
+ (this->csAnimIndex == ENGG_ANIM_13)) {
sp30.x = 3.0f;
sp24.x = 0.5f;
this->unk_309 = 1;
@@ -763,7 +797,7 @@ void EnGg_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
this->unk_309 = 0;
}
- if (limbIndex == 4) {
+ if (limbIndex == OBJECT_GG_LIMB_04) {
Matrix_MultVec3f(&D_80B36DF0, &this->unk_320);
Matrix_Push();
Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_NEW);
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 802024897..436d5a4ab 100644
--- a/src/overlays/actors/ovl_En_Gg/z_en_gg.h
+++ b/src/overlays/actors/ovl_En_Gg/z_en_gg.h
@@ -2,6 +2,7 @@
#define Z_EN_GG_H
#include "global.h"
+#include "objects/object_gg/object_gg.h"
struct EnGg;
struct EnGgStruct;
@@ -14,7 +15,7 @@ typedef struct EnGgStruct {
/* 0x0C */ Vec3f unk_0C;
/* 0x18 */ Vec3f unk_18;
/* 0x24 */ Vec3f unk_24;
- /* 0x30 */ u8 unk_30;
+ /* 0x30 */ u8 animIndex;
/* 0x34 */ EnGgUnkFunc unk_34;
/* 0x38 */ EnGgUnkFunc unk_38;
/* 0x3C */ s32 unk_3C;
@@ -30,16 +31,16 @@ typedef struct EnGg {
/* 0x1D4 */ EnGgActionFunc actionFunc;
/* 0x1D8 */ Vec3s unk_1D8;
/* 0x1DE */ Vec3s unk_1DE;
- /* 0x1E4 */ Vec3s jointTable[20];
- /* 0x25C */ Vec3s morphTable[20];
+ /* 0x1E4 */ Vec3s jointTable[OBJECT_GG_LIMB_MAX];
+ /* 0x25C */ Vec3s morphTable[OBJECT_GG_LIMB_MAX];
/* 0x2D4 */ UNK_TYPE1 unk_2D4[0x6];
- /* 0x2DA */ u8 unk_2DA;
+ /* 0x2DA */ u8 csAnimIndex;
/* 0x2DB */ u8 cueId;
/* 0x2DC */ s16 csId;
/* 0x2DE */ UNK_TYPE1 unk2DE[4];
/* 0x2E2 */ s16 unk_2E2;
/* 0x2E4 */ s16 unk_2E4;
- /* 0x2E6 */ s16 unk_2E6;
+ /* 0x2E6 */ s16 animIndex;
/* 0x2E8 */ s16 unk_2E8;
/* 0x2EA */ UNK_TYPE1 unk2EA[0x1A];
/* 0x304 */ s16 unk_304;
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 abb80780d..3b6d62775 100644
--- a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c
+++ b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c
@@ -5,7 +5,6 @@
*/
#include "z_en_gg2.h"
-#include "objects/object_gg/object_gg.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_REACT_TO_LENS)
@@ -39,15 +38,44 @@ ActorInit En_Gg2_InitVars = {
(ActorFunc)EnGg2_Draw,
};
-AnimationInfo D_80B3BF00[] = {
- { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, 0, -10.0f }, { &object_gg_Anim_00D528, 1.0f, 0.0f, 0.0f, 2, -10.0f },
- { &object_gg_Anim_00D174, 1.0f, 0.0f, 0.0f, 2, -10.0f }, { &object_gg_Anim_00ECC0, 1.0f, 0.0f, 0.0f, 2, -10.0f },
- { &object_gg_Anim_00BAF0, 1.0f, 0.0f, 0.0f, 0, -10.0f }, { &object_gg_Anim_00AF40, 1.0f, 0.0f, 0.0f, 0, -10.0f },
- { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, 0, -10.0f }, { &object_gg_Anim_00AF40, 1.0f, 0.0f, 0.0f, 0, -10.0f },
- { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, 0, -10.0f }, { &object_gg_Anim_0100C8, 1.0f, 0.0f, 0.0f, 0, 0.0f },
- { &object_gg_Anim_00CDA0, 1.0f, 0.0f, 0.0f, 0, 0.0f }, { &object_gg_Anim_00B560, 1.0f, 0.0f, 0.0f, 0, 0.0f },
- { &object_gg_Anim_00A4B4, 1.0f, 0.0f, 0.0f, 2, 0.0f }, { &object_gg_Anim_00E86C, 1.0f, 0.0f, 0.0f, 2, 0.0f },
- { &object_gg_Anim_00D99C, 1.0f, 0.0f, 0.0f, 2, 0.0f }, { &object_gg_Anim_00E2A4, 1.0f, 0.0f, 0.0f, 0, 0.0f },
+typedef enum {
+ /* -1 */ ENGG2_ANIM_NONE = -1,
+ /* 0x00 */ ENGG2_ANIM_0,
+ /* 0x01 */ ENGG2_ANIM_1,
+ /* 0x02 */ ENGG2_ANIM_2,
+ /* 0x03 */ ENGG2_ANIM_3,
+ /* 0x04 */ ENGG2_ANIM_4,
+ /* 0x05 */ ENGG2_ANIM_5,
+ /* 0x06 */ ENGG2_ANIM_6,
+ /* 0x07 */ ENGG2_ANIM_7,
+ /* 0x08 */ ENGG2_ANIM_8,
+ /* 0x09 */ ENGG2_ANIM_9,
+ /* 0x0A */ ENGG2_ANIM_10,
+ /* 0x0B */ ENGG2_ANIM_11,
+ /* 0x0C */ ENGG2_ANIM_12,
+ /* 0x0D */ ENGG2_ANIM_13,
+ /* 0x0E */ ENGG2_ANIM_14,
+ /* 0x0F */ ENGG2_ANIM_15,
+ /* 0x10 */ ENGG2_ANIM_MAX
+} EnGg2Animation;
+
+static AnimationInfo sAnimationInfo[ENGG2_ANIM_MAX] = {
+ { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG2_ANIM_0
+ { &object_gg_Anim_00D528, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -10.0f }, // ENGG2_ANIM_1
+ { &object_gg_Anim_00D174, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -10.0f }, // ENGG2_ANIM_2
+ { &object_gg_Anim_00ECC0, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -10.0f }, // ENGG2_ANIM_3
+ { &object_gg_Anim_00BAF0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG2_ANIM_4
+ { &object_gg_Anim_00AF40, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG2_ANIM_5
+ { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG2_ANIM_6
+ { &object_gg_Anim_00AF40, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG2_ANIM_7
+ { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG2_ANIM_8
+ { &object_gg_Anim_0100C8, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGG2_ANIM_9
+ { &object_gg_Anim_00CDA0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGG2_ANIM_10
+ { &object_gg_Anim_00B560, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGG2_ANIM_11
+ { &object_gg_Anim_00A4B4, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // ENGG2_ANIM_12
+ { &object_gg_Anim_00E86C, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // ENGG2_ANIM_13
+ { &object_gg_Anim_00D99C, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // ENGG2_ANIM_14
+ { &object_gg_Anim_00E2A4, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGG2_ANIM_15
};
Color_RGBA8 D_80B3C080 = { 255, 255, 255, 255 };
@@ -116,38 +144,38 @@ void func_80B3ADD8(EnGg2* this) {
void func_80B3AE60(EnGg2* this, PlayState* play) {
s16 curFrame = this->skelAnime.curFrame;
- s16 lastFrame = Animation_GetLastFrame(D_80B3BF00[this->unk_2EE].animation);
+ s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation);
- if (curFrame == lastFrame) {
- switch (this->unk_2EE) {
- case 0:
- this->unk_2EE = 1;
- Actor_ChangeAnimationByInfo(&this->skelAnime, D_80B3BF00, 1);
+ if (curFrame == endFrame) {
+ switch (this->animIndex) {
+ case ENGG2_ANIM_0:
+ this->animIndex = ENGG2_ANIM_1;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG2_ANIM_1);
this->actionFunc = func_80B3B0A0;
break;
- case 1:
- case 8:
- this->unk_2EE = 5;
+ case ENGG2_ANIM_1:
+ case ENGG2_ANIM_8:
+ this->animIndex = ENGG2_ANIM_5;
this->actor.flags &= ~ACTOR_FLAG_TARGETABLE;
- Actor_ChangeAnimationByInfo(&this->skelAnime, D_80B3BF00, 5);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG2_ANIM_5);
this->actionFunc = func_80B3B120;
break;
- case 5:
- this->unk_2EE = 6;
- Actor_ChangeAnimationByInfo(&this->skelAnime, D_80B3BF00, 0);
+ case ENGG2_ANIM_5:
+ this->animIndex = ENGG2_ANIM_6;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG2_ANIM_0);
this->actionFunc = func_80B3B21C;
break;
- case 6:
- this->unk_2EE = 7;
- Actor_ChangeAnimationByInfo(&this->skelAnime, D_80B3BF00, 5);
+ case ENGG2_ANIM_6:
+ this->animIndex = ENGG2_ANIM_7;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG2_ANIM_5);
this->actionFunc = func_80B3B294;
break;
default:
- Actor_ChangeAnimationByInfo(&this->skelAnime, D_80B3BF00, 0);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG2_ANIM_0);
this->actionFunc = func_80B3AFB0;
break;
}
@@ -173,7 +201,7 @@ void func_80B3B05C(EnGg2* this, PlayState* play) {
void func_80B3B0A0(EnGg2* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->unk_2F0 = 0;
this->actionFunc = func_80B3B5D4;
@@ -338,7 +366,7 @@ f32 func_80B3B7E4(Path* path, s32 arg1, Vec3f* arg2, Vec3s* arg3) {
void func_80B3B8A4(EnGg2* this) {
f32 sp1C;
- if ((this->unk_2EE != 5) && (this->unk_2EE != 7)) {
+ if ((this->animIndex != ENGG2_ANIM_5) && (this->animIndex != ENGG2_ANIM_7)) {
this->unk_2F2 += 0x62C;
sp1C = 1100.0f;
} else {
@@ -368,7 +396,7 @@ void EnGg2_Init(Actor* thisx, PlayState* play2) {
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 30.0f);
this->actor.bgCheckFlags |= BGCHECKFLAG_PLAYER_400;
SkelAnime_InitFlex(play, &this->skelAnime, &object_gg_Skel_00F6C0, &object_gg_Anim_00F578, this->jointTable,
- this->morphTable, 20);
+ this->morphTable, OBJECT_GG_LIMB_MAX);
this->path = SubS_GetPathByIndex(play, ENGG2_GET_PATH_INDEX(&this->actor), ENGG2_PATH_INDEX_NONE);
this->actor.flags &= ~ACTOR_FLAG_REACT_TO_LENS;
this->unk_2F0 = 0;
@@ -384,15 +412,15 @@ void EnGg2_Init(Actor* thisx, PlayState* play2) {
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->animIndex = ENGG2_ANIM_0;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG2_ANIM_0);
this->actionFunc = func_80B3AFB0;
} else if (play->sceneId == SCENE_17SETUGEN) {
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->animIndex = ENGG2_ANIM_8;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG2_ANIM_0);
this->actionFunc = func_80B3B05C;
} else {
Actor_Kill(&this->actor);
@@ -401,8 +429,8 @@ void EnGg2_Init(Actor* thisx, PlayState* play2) {
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->animIndex = ENGG2_ANIM_8;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG2_ANIM_0);
this->actionFunc = func_80B3B05C;
} else {
Actor_Kill(&this->actor);
@@ -424,7 +452,7 @@ void EnGg2_Update(Actor* thisx, PlayState* play) {
if (play->actorCtx.lensMaskSize == LENS_MASK_ACTIVE_SIZE) {
this->actor.flags |= ACTOR_FLAG_REACT_TO_LENS;
this->actor.flags |= ACTOR_FLAG_TARGETABLE;
- if ((this->unk_2EE == 5) && (this->unk_2EE == 7)) {
+ if ((this->animIndex == ENGG2_ANIM_5) && (this->animIndex == ENGG2_ANIM_7)) {
this->actor.flags &= ~ACTOR_FLAG_TARGETABLE;
}
} else {
@@ -441,7 +469,7 @@ void EnGg2_Update(Actor* thisx, PlayState* play) {
func_80B3B8A4(this);
Actor_TrackPlayer(play, &this->actor, &this->unk_1E0, &this->unk_1E6, this->actor.focus.pos);
- if ((this->unk_2EE == 5) || (this->unk_2EE == 7)) {
+ if ((this->animIndex == ENGG2_ANIM_5) || (this->animIndex == ENGG2_ANIM_7)) {
Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_SHARP_FLOAT - SFX_FLAG);
if ((play->actorCtx.lensMaskSize == LENS_MASK_ACTIVE_SIZE) && ((play->state.frames % 4) == 0)) {
func_80B3B4B0(this, play);
@@ -454,12 +482,12 @@ void EnGg2_Update(Actor* thisx, PlayState* play) {
s32 func_80B3BD44(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx, Gfx** gfx) {
EnGg2* this = THIS;
- if ((this->unk_2EE != 5) && (this->unk_2EE != 7)) {
- if (limbIndex == 1) {
+ if ((this->animIndex != ENGG2_ANIM_5) && (this->animIndex != ENGG2_ANIM_7)) {
+ if (limbIndex == OBJECT_GG_LIMB_01) {
Matrix_RotateYS(this->unk_2F6, MTXMODE_APPLY);
}
- if (limbIndex == 2) {
+ if (limbIndex == OBJECT_GG_LIMB_02) {
Matrix_RotateZS(this->unk_2F4, MTXMODE_APPLY);
}
}
@@ -469,7 +497,7 @@ s32 func_80B3BD44(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s
void func_80B3BDC0(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx, Gfx** gfx) {
EnGg2* this = THIS;
- if (limbIndex == 4) {
+ if (limbIndex == OBJECT_GG_LIMB_04) {
Matrix_MultVec3f(&D_80B3C0A0, &this->unk_304);
}
}
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 83b4bad42..dd68c20b1 100644
--- a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.h
+++ b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.h
@@ -2,6 +2,7 @@
#define Z_EN_GG2_H
#include "global.h"
+#include "objects/object_gg/object_gg.h"
struct EnGg2;
@@ -20,14 +21,14 @@ typedef struct EnGg2 {
/* 0x1DC */ s32 unk_1DC;
/* 0x1E0 */ Vec3s unk_1E0;
/* 0x1E6 */ Vec3s unk_1E6;
- /* 0x1EC */ Vec3s jointTable[20];
- /* 0x264 */ Vec3s morphTable[20];
+ /* 0x1EC */ Vec3s jointTable[OBJECT_GG_LIMB_MAX];
+ /* 0x264 */ Vec3s morphTable[OBJECT_GG_LIMB_MAX];
/* 0x2DC */ UNK_TYPE1 unk2DC[0x8];
/* 0x2E4 */ s16 csId;
/* 0x2E6 */ UNK_TYPE1 unk2E6[4];
/* 0x2EA */ s16 unk_2EA;
/* 0x2EC */ s16 unk_2EC;
- /* 0x2EE */ s16 unk_2EE;
+ /* 0x2EE */ s16 animIndex;
/* 0x2F0 */ u8 unk_2F0;
/* 0x2F1 */ u8 unk_2F1;
/* 0x2F2 */ s16 unk_2F2;
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 8d244c09c..d68e6902f 100644
--- a/src/overlays/actors/ovl_En_Giant/z_en_giant.c
+++ b/src/overlays/actors/ovl_En_Giant/z_en_giant.c
@@ -28,10 +28,45 @@ void EnGiant_PerformCutsceneActions(EnGiant* this, PlayState* play);
#define GIANT_TYPE_IS_CLOCK_TOWER_FAILURE(type) \
(type >= GIANT_TYPE_MOUNTAIN_CLOCK_TOWER_FAILURE && type <= GIANT_TYPE_OCEAN_CLOCK_TOWER_FAILURE)
+/**
+ * Used as values for cueId. The UNKNOWN ones are never used in-game.
+ */
+typedef enum {
+ /* 0 */ GIANT_CUEID_NONE,
+ /* 1 */ GIANT_CUEID_IDLE,
+ /* 2 */ GIANT_CUEID_WALKING,
+ /* 3 */ GIANT_CUEID_LOOKING_UP,
+ /* 4 */ GIANT_CUEID_RAISING_ARMS,
+ /* 5 */ GIANT_CUEID_STRUGGLING,
+ /* 6 */ GIANT_CUEID_FALLING_OVER,
+ /* 7 */ GIANT_CUEID_IDLE_FADE_IN,
+ /* 8 */ GIANT_CUEID_TALKING,
+ /* 9 */ GIANT_CUEID_DONE_TALKING,
+ /* 10 */ GIANT_CUEID_TEACHING_OATH_TO_ORDER,
+ /* 11 */ GIANT_CUEID_PLAYER_LEARNED_OATH_TO_ORDER,
+ /* 12 */ GIANT_CUEID_UNKNOWN_12,
+ /* 13 */ GIANT_CUEID_UNKNOWN_13,
+ /* 14 */ GIANT_CUEID_UNKNOWN_14,
+ /* 15 */ GIANT_CUEID_HOLDING_UP_MOON_IN_CLOCK_TOWER
+} GiantCueId;
+
+ActorInit En_Giant_InitVars = {
+ ACTOR_EN_GIANT,
+ ACTORCAT_NPC,
+ FLAGS,
+ OBJECT_GIANT,
+ sizeof(EnGiant),
+ (ActorFunc)EnGiant_Init,
+ (ActorFunc)EnGiant_Destroy,
+ (ActorFunc)EnGiant_Update,
+ (ActorFunc)EnGiant_Draw,
+};
+
/**
* These values are used to index into sAnimations to pick the appropriate animation.
*/
typedef enum {
+ /* -1 */ GIANT_ANIM_NONE = -1,
/* 0 */ GIANT_ANIM_LOOK_UP_START,
/* 1 */ GIANT_ANIM_LOOK_UP_LOOP,
/* 2 */ GIANT_ANIM_FALLING_OVER,
@@ -50,49 +85,26 @@ typedef enum {
/* 15 */ GIANT_ANIM_MAX
} GiantAnimation;
-/**
- * Used as values for cueId. The UNKNOWN ones are never used in-game.
- */
-typedef enum {
- /* 0 */ GIANT_CUE_ID_NONE,
- /* 1 */ GIANT_CUE_ID_IDLE,
- /* 2 */ GIANT_CUE_ID_WALKING,
- /* 3 */ GIANT_CUE_ID_LOOKING_UP,
- /* 4 */ GIANT_CUE_ID_RAISING_ARMS,
- /* 5 */ GIANT_CUE_ID_STRUGGLING,
- /* 6 */ GIANT_CUE_ID_FALLING_OVER,
- /* 7 */ GIANT_CUE_ID_IDLE_FADE_IN,
- /* 8 */ GIANT_CUE_ID_TALKING,
- /* 9 */ GIANT_CUE_ID_DONE_TALKING,
- /* 10 */ GIANT_CUE_ID_TEACHING_OATH_TO_ORDER,
- /* 11 */ GIANT_CUE_ID_PLAYER_LEARNED_OATH_TO_ORDER,
- /* 12 */ GIANT_CUE_ID_UNKNOWN_12,
- /* 13 */ GIANT_CUE_ID_UNKNOWN_13,
- /* 14 */ GIANT_CUE_ID_UNKNOWN_14,
- /* 15 */ GIANT_CUE_ID_HOLDING_UP_MOON_IN_CLOCK_TOWER
-} GiantCueId;
-
-ActorInit En_Giant_InitVars = {
- ACTOR_EN_GIANT,
- ACTORCAT_NPC,
- FLAGS,
- OBJECT_GIANT,
- sizeof(EnGiant),
- (ActorFunc)EnGiant_Init,
- (ActorFunc)EnGiant_Destroy,
- (ActorFunc)EnGiant_Update,
- (ActorFunc)EnGiant_Draw,
-};
-
-static AnimationHeader* sAnimations[] = {
- &gGiantLookUpStartAnim, &gGiantLookUpLoopAnim, &gGiantFallingOverAnim, &gGiantRaisedArmsStartAnim,
- &gGiantRaisedArmsLoopAnim, &gGiantStruggleStartAnim, &gGiantStruggleLoopAnim, &gGiantIdleAnim,
- &gGiantWalkingAnim, &gGiantBigCallStartAnim, &gGiantBigCallLoopAnim, &gGiantBigCallEndAnim,
- &gGiantSmallCallStartAnim, &gGiantSmallCallLoopAnim, &gGiantSmallCallEndAnim,
+static AnimationHeader* sAnimations[GIANT_ANIM_MAX] = {
+ &gGiantLookUpStartAnim, // GIANT_ANIM_LOOK_UP_START
+ &gGiantLookUpLoopAnim, // GIANT_ANIM_LOOK_UP_LOOP
+ &gGiantFallingOverAnim, // GIANT_ANIM_FALLING_OVER
+ &gGiantRaisedArmsStartAnim, // GIANT_ANIM_RAISED_ARMS_START
+ &gGiantRaisedArmsLoopAnim, // GIANT_ANIM_RAISED_ARMS_LOOP
+ &gGiantStruggleStartAnim, // GIANT_ANIM_STRUGGLE_START
+ &gGiantStruggleLoopAnim, // GIANT_ANIM_STRUGGLE_LOOP
+ &gGiantIdleAnim, // GIANT_ANIM_IDLE_LOOP
+ &gGiantWalkingAnim, // GIANT_ANIM_WALKING_LOOP
+ &gGiantBigCallStartAnim, // GIANT_ANIM_BIG_CALL_START
+ &gGiantBigCallLoopAnim, // GIANT_ANIM_BIG_CALL_LOOP
+ &gGiantBigCallEndAnim, // GIANT_ANIM_BIG_CALL_END
+ &gGiantSmallCallStartAnim, // GIANT_ANIM_SMALL_CALL_START
+ &gGiantSmallCallLoopAnim, // GIANT_ANIM_SMALL_CALL_LOOP
+ &gGiantSmallCallEndAnim, // GIANT_ANIM_SMALL_CALL_END
};
void EnGiant_ChangeAnim(EnGiant* this, s16 animIndex) {
- if (animIndex >= GIANT_ANIM_LOOK_UP_START && animIndex < GIANT_ANIM_MAX) {
+ if ((animIndex >= GIANT_ANIM_LOOK_UP_START) && (animIndex < GIANT_ANIM_MAX)) {
if (((this->animIndex == GIANT_ANIM_WALKING_LOOP) && (animIndex != GIANT_ANIM_WALKING_LOOP)) ||
((animIndex == GIANT_ANIM_WALKING_LOOP) && (this->animIndex != GIANT_ANIM_WALKING_LOOP))) {
Animation_Change(&this->skelAnime, sAnimations[animIndex], 1.0f, 0.0f,
@@ -160,7 +172,7 @@ void EnGiant_Init(Actor* thisx, PlayState* play) {
SkelAnime_InitFlex(play, &this->skelAnime, &gGiantSkel, &gGiantLargeStrideAnim, this->jointTable, this->morphTable,
GIANT_LIMB_MAX);
EnGiant_ChangeAnim(this, GIANT_ANIM_IDLE_LOOP);
- this->cueId = GIANT_CUE_ID_NONE;
+ this->cueId = GIANT_CUEID_NONE;
this->actionFunc = EnGiant_PerformCutsceneActions;
this->actor.draw = NULL;
this->alpha = 0;
@@ -275,58 +287,58 @@ void EnGiant_ChangeToStartOrLoopAnimation(EnGiant* this, s16 requestedAnimIndex)
*/
void EnGiant_ChangeAnimBasedOnCueId(EnGiant* this) {
switch (this->cueId) {
- case GIANT_CUE_ID_IDLE:
+ case GIANT_CUEID_IDLE:
EnGiant_ChangeAnim(this, GIANT_ANIM_IDLE_LOOP);
break;
- case GIANT_CUE_ID_WALKING:
+ case GIANT_CUEID_WALKING:
EnGiant_ChangeAnim(this, GIANT_ANIM_WALKING_LOOP);
break;
- case GIANT_CUE_ID_STRUGGLING:
+ case GIANT_CUEID_STRUGGLING:
EnGiant_ChangeAnim(this, GIANT_ANIM_STRUGGLE_START);
break;
- case GIANT_CUE_ID_FALLING_OVER:
+ case GIANT_CUEID_FALLING_OVER:
EnGiant_ChangeAnim(this, GIANT_ANIM_FALLING_OVER);
break;
- case GIANT_CUE_ID_IDLE_FADE_IN:
+ case GIANT_CUEID_IDLE_FADE_IN:
EnGiant_ChangeAnim(this, GIANT_ANIM_IDLE_LOOP);
this->alpha = 0;
break;
- case GIANT_CUE_ID_TALKING:
+ case GIANT_CUEID_TALKING:
EnGiant_ChangeAnim(this, GIANT_ANIM_BIG_CALL_START);
break;
- case GIANT_CUE_ID_DONE_TALKING:
+ case GIANT_CUEID_DONE_TALKING:
EnGiant_ChangeAnim(this, GIANT_ANIM_BIG_CALL_END);
break;
- case GIANT_CUE_ID_TEACHING_OATH_TO_ORDER:
+ case GIANT_CUEID_TEACHING_OATH_TO_ORDER:
EnGiant_ChangeAnim(this, GIANT_ANIM_SMALL_CALL_START);
break;
- case GIANT_CUE_ID_PLAYER_LEARNED_OATH_TO_ORDER:
+ case GIANT_CUEID_PLAYER_LEARNED_OATH_TO_ORDER:
EnGiant_ChangeAnim(this, GIANT_ANIM_SMALL_CALL_END);
break;
- case GIANT_CUE_ID_UNKNOWN_12:
+ case GIANT_CUEID_UNKNOWN_12:
EnGiant_ChangeAnim(this, GIANT_ANIM_IDLE_LOOP);
break;
- case GIANT_CUE_ID_UNKNOWN_13:
+ case GIANT_CUEID_UNKNOWN_13:
EnGiant_ChangeAnim(this, GIANT_ANIM_WALKING_LOOP);
break;
- case GIANT_CUE_ID_UNKNOWN_14:
+ case GIANT_CUEID_UNKNOWN_14:
if (this->animIndex != GIANT_ANIM_WALKING_LOOP) {
EnGiant_ChangeAnim(this, GIANT_ANIM_WALKING_LOOP);
}
break;
- case GIANT_CUE_ID_HOLDING_UP_MOON_IN_CLOCK_TOWER:
+ case GIANT_CUEID_HOLDING_UP_MOON_IN_CLOCK_TOWER:
Animation_Change(&this->skelAnime, &gGiantRaisedArmsStartAnim, 0.0f,
Animation_GetLastFrame(&gGiantRaisedArmsStartAnim) - 1.0f,
Animation_GetLastFrame(&gGiantRaisedArmsStartAnim), ANIMMODE_ONCE, 0.0f);
@@ -339,14 +351,16 @@ void EnGiant_ChangeAnimBasedOnCueId(EnGiant* this) {
void EnGiant_UpdateAlpha(EnGiant* this) {
switch (this->cueId) {
- case GIANT_CUE_ID_FALLING_OVER:
+ case GIANT_CUEID_FALLING_OVER:
if (this->skelAnime.curFrame >= 90.0f && this->alpha > 0) {
this->alpha -= 12;
}
break;
- case GIANT_CUE_ID_UNKNOWN_14:
+
+ case GIANT_CUEID_UNKNOWN_14:
this->alpha -= 12;
break;
+
default:
if (this->alpha < 255) {
this->alpha += 8;
@@ -363,36 +377,37 @@ void EnGiant_UpdateAlpha(EnGiant* this) {
*/
void EnGiant_PlayAndUpdateAnimation(EnGiant* this) {
if (SkelAnime_Update(&this->skelAnime) &&
- (this->animIndex != GIANT_ANIM_FALLING_OVER || this->cueId != GIANT_CUE_ID_FALLING_OVER)) {
+ ((this->animIndex != GIANT_ANIM_FALLING_OVER) || (this->cueId != GIANT_CUEID_FALLING_OVER))) {
EnGiant_ChangeAnim(this, this->animIndex);
+
switch (this->cueId) {
- case GIANT_CUE_ID_LOOKING_UP:
+ case GIANT_CUEID_LOOKING_UP:
EnGiant_ChangeToStartOrLoopAnimation(this, GIANT_ANIM_LOOK_UP_START);
break;
- case GIANT_CUE_ID_RAISING_ARMS:
+ case GIANT_CUEID_RAISING_ARMS:
EnGiant_ChangeToStartOrLoopAnimation(this, GIANT_ANIM_RAISED_ARMS_START);
break;
- case GIANT_CUE_ID_STRUGGLING:
+ case GIANT_CUEID_STRUGGLING:
EnGiant_ChangeToStartOrLoopAnimation(this, GIANT_ANIM_STRUGGLE_START);
break;
- case GIANT_CUE_ID_FALLING_OVER:
+ case GIANT_CUEID_FALLING_OVER:
// Unused
EnGiant_ChangeToStartOrLoopAnimation(this, GIANT_ANIM_FALLING_OVER);
break;
- case GIANT_CUE_ID_TALKING:
+ case GIANT_CUEID_TALKING:
EnGiant_ChangeAnim(this, GIANT_ANIM_BIG_CALL_LOOP);
break;
- case GIANT_CUE_ID_DONE_TALKING:
- case GIANT_CUE_ID_PLAYER_LEARNED_OATH_TO_ORDER:
+ case GIANT_CUEID_DONE_TALKING:
+ case GIANT_CUEID_PLAYER_LEARNED_OATH_TO_ORDER:
EnGiant_ChangeAnim(this, GIANT_ANIM_IDLE_LOOP);
break;
- case GIANT_CUE_ID_TEACHING_OATH_TO_ORDER:
+ case GIANT_CUEID_TEACHING_OATH_TO_ORDER:
EnGiant_ChangeAnim(this, GIANT_ANIM_SMALL_CALL_LOOP);
break;
@@ -445,7 +460,7 @@ void EnGiant_PerformClockTowerSuccessActions(EnGiant* this, PlayState* play) {
}
EnGiant_PlaySound(this);
- if (this->cueId == GIANT_CUE_ID_STRUGGLING) {
+ if (this->cueId == GIANT_CUEID_STRUGGLING) {
Actor_PlaySfx_Flagged(&this->actor, NA_SE_IT_KYOJIN_BEARING - SFX_FLAG);
}
EnGiant_PlayAndUpdateAnimation(this);
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 387763de1..2a5e6712a 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
@@ -5,7 +5,6 @@
*/
#include "z_en_ginko_man.h"
-#include "objects/object_boj/object_boj.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY)
@@ -47,15 +46,16 @@ typedef enum {
/* 1 */ GINKO_ANIM_SITTING,
/* 2 */ GINKO_ANIM_REACHING,
/* 3 */ GINKO_ANIM_AMAZED,
- /* 4 */ GINKO_ANIM_ADVERTISING
+ /* 4 */ GINKO_ANIM_ADVERTISING, // looking around for customers
+ /* 5 */ GINKO_ANIM_MAX
} GinkoAnimation;
-static AnimationInfo sAnimationInfo[] = {
- { &object_boj_Anim_0008C0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
- { &object_boj_Anim_0043F0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
- { &object_boj_Anim_004F40, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f },
- { &object_boj_Anim_000AC4, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // looking around for customers
- { &object_boj_Anim_004A7C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+static AnimationInfo sAnimationInfo[GINKO_ANIM_MAX] = {
+ { &object_boj_Anim_0008C0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // GINKO_ANIM_LEGSMACKING
+ { &object_boj_Anim_0043F0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // GINKO_ANIM_SITTING
+ { &object_boj_Anim_004F40, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, // GINKO_ANIM_REACHING
+ { &object_boj_Anim_000AC4, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // GINKO_ANIM_AMAZED
+ { &object_boj_Anim_004A7C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // GINKO_ANIM_ADVERTISING
};
void EnGinkoMan_Init(Actor* thisx, PlayState* play) {
@@ -71,7 +71,7 @@ void EnGinkoMan_Init(Actor* thisx, PlayState* play) {
this->choiceDepositWithdrawl = GINKOMAN_CHOICE_RESET;
this->serviceFee = 0;
SkelAnime_InitFlex(play, &this->skelAnime, &object_boj_Skel_00C240, &object_boj_Anim_0043F0, this->jointTable,
- this->morphTable, 16);
+ this->morphTable, OBJECT_BOJ_LIMB_MAX);
EnGinkoMan_SetupIdle(this);
}
@@ -89,7 +89,7 @@ void EnGinkoMan_Idle(EnGinkoMan* this, PlayState* play) {
EnGinkoMan_SwitchAnimation(this, play);
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- if ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) == 0) {
+ if (HS_GET_BANK_RUPEES() == 0) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_LEGSMACKING);
Message_StartTextbox(play, 0x44C, &this->actor);
this->curTextId = 0x44C; // would you like to make an account
@@ -154,7 +154,7 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_LEGSMACKING);
}
- play->msgCtx.bankRupees = gSaveContext.save.saveInfo.bankRupees & 0xFFFF;
+ play->msgCtx.bankRupees = HS_GET_BANK_RUPEES();
Message_StartTextbox(play, 0x45A, &this->actor);
this->curTextId = 0x45A;
}
@@ -167,22 +167,22 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) {
break;
case 0x45A:
- if (((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) >= 200) && (this->previousBankValue < 200) &&
+ if ((HS_GET_BANK_RUPEES() >= 200) && (this->previousBankValue < 200) &&
!CHECK_WEEKEVENTREG(WEEKEVENTREG_59_40)) {
SET_WEEKEVENTREG(WEEKEVENTREG_59_40);
Message_StartTextbox(play, 0x45B, &this->actor);
this->curTextId = 0x45B;
- } else if (((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) >= 1000) &&
- ((this->previousBankValue) < 1000) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_59_80)) {
+ } else if ((HS_GET_BANK_RUPEES() >= 1000) && (this->previousBankValue < 1000) &&
+ !CHECK_WEEKEVENTREG(WEEKEVENTREG_59_80)) {
SET_WEEKEVENTREG(WEEKEVENTREG_59_80);
Message_StartTextbox(play, 0x45C, &this->actor);
this->curTextId = 0x45C;
- } else if ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) >= 5000) {
+ } else if (HS_GET_BANK_RUPEES() >= 5000) {
if ((this->previousBankValue < 5000) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_60_01)) {
SET_WEEKEVENTREG(WEEKEVENTREG_60_01);
Message_StartTextbox(play, 0x45D, &this->actor);
this->curTextId = 0x45D;
- } else if (this->previousBankValue < (s16)(gSaveContext.save.saveInfo.bankRupees & 0xFFFF)) {
+ } else if (this->previousBankValue < (s16)HS_GET_BANK_RUPEES()) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_SITTING);
Message_StartTextbox(play, 0x45E, &this->actor);
this->curTextId = 0x45E;
@@ -223,13 +223,13 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) {
break;
case 0x464:
- play->msgCtx.msgMode = 0x44;
+ play->msgCtx.msgMode = MSGMODE_PAUSED;
EnGinkoMan_SetupStamp(this); // stamp player
break;
case 0x465:
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_LEGSMACKING);
- play->msgCtx.bankRupees = gSaveContext.save.saveInfo.bankRupees & 0xFFFF;
+ play->msgCtx.bankRupees = HS_GET_BANK_RUPEES();
Message_StartTextbox(play, 0x45A, &this->actor);
this->curTextId = 0x45A;
break;
@@ -248,7 +248,7 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) {
case 0x46C:
case 0x47E:
if (this->choiceDepositWithdrawl == GINKOMAN_CHOICE_DEPOSIT) {
- if ((u32)(gSaveContext.save.saveInfo.bankRupees & 0xFFFF) >= 5000) {
+ if (HS_GET_BANK_RUPEES() >= 5000) {
Message_StartTextbox(play, 0x45F, &this->actor);
this->curTextId = 0x45F;
} else if (gSaveContext.save.saveInfo.playerData.rupees == 0) {
@@ -301,11 +301,11 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) {
case 0x472:
case 0x473:
case 0x474:
- if ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) == 0) {
+ if (HS_GET_BANK_RUPEES() == 0) {
Message_StartTextbox(play, 0x478, &this->actor);
this->curTextId = 0x478;
} else {
- play->msgCtx.bankRupees = gSaveContext.save.saveInfo.bankRupees & 0xFFFF;
+ play->msgCtx.bankRupees = HS_GET_BANK_RUPEES();
Message_StartTextbox(play, 0x45A, &this->actor);
this->curTextId = 0x45A;
}
@@ -335,7 +335,7 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, PlayState* play) {
switch (this->curTextId) {
case 0x44E:
if (play->msgCtx.choiceIndex == GINKOMAN_CHOICE_YES) {
- if ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) >= 5000) {
+ if (HS_GET_BANK_RUPEES() >= 5000) {
Audio_PlaySfx(NA_SE_SY_ERROR);
Message_StartTextbox(play, 0x45F, &this->actor);
this->curTextId = 0x45F; // bank full, cannot accept more
@@ -378,20 +378,18 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, PlayState* play) {
this->curTextId = 0x453;
}
- if ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) == 0) {
+ if (HS_GET_BANK_RUPEES() == 0) {
this->isNewAccount = true;
}
Rupees_ChangeBy(-play->msgCtx.bankRupeesSelected);
- this->previousBankValue = gSaveContext.save.saveInfo.bankRupees & 0xFFFF;
- gSaveContext.save.saveInfo.bankRupees =
- ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) + play->msgCtx.bankRupeesSelected) |
- (gSaveContext.save.saveInfo.bankRupees & 0xFFFF0000);
+ this->previousBankValue = HS_GET_BANK_RUPEES();
+ HS_SET_BANK_RUPEES(HS_GET_BANK_RUPEES() + play->msgCtx.bankRupeesSelected);
}
} else { // GINKOMAN_CHOICE_NO
Audio_PlaySfx_MessageCancel();
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_SITTING);
- if ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) == 0) {
+ if (HS_GET_BANK_RUPEES() == 0) {
Message_StartTextbox(play, 0x456, &this->actor);
this->curTextId = 0x456;
} else {
@@ -422,8 +420,7 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, PlayState* play) {
case 0x471:
if (play->msgCtx.choiceIndex == GINKOMAN_CHOICE_YES) {
- if ((s32)((gSaveContext.save.saveInfo.bankRupees & 0xFFFF)) <
- ((s32)(play->msgCtx.bankRupeesSelected + this->serviceFee))) {
+ if ((s32)HS_GET_BANK_RUPEES() < (play->msgCtx.bankRupeesSelected + this->serviceFee)) {
Audio_PlaySfx(NA_SE_SY_ERROR);
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_LEGSMACKING);
Message_StartTextbox(play, 0x476, &this->actor);
@@ -447,11 +444,8 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, PlayState* play) {
this->curTextId = 0x472;
}
- this->previousBankValue = (s16)(gSaveContext.save.saveInfo.bankRupees & 0xFFFF);
- gSaveContext.save.saveInfo.bankRupees =
- (((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) - play->msgCtx.bankRupeesSelected) -
- this->serviceFee) |
- (gSaveContext.save.saveInfo.bankRupees & 0xFFFF0000);
+ this->previousBankValue = HS_GET_BANK_RUPEES();
+ HS_SET_BANK_RUPEES(HS_GET_BANK_RUPEES() - play->msgCtx.bankRupeesSelected - this->serviceFee);
Rupees_ChangeBy(play->msgCtx.bankRupeesSelected);
}
} else {
@@ -615,7 +609,7 @@ void EnGinkoMan_Stamp(EnGinkoMan* this, PlayState* play) {
case 0x469:
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_SITTING);
- play->msgCtx.bankRupees = (gSaveContext.save.saveInfo.bankRupees & 0xFFFF);
+ play->msgCtx.bankRupees = HS_GET_BANK_RUPEES();
if ((CURRENT_DAY == 3) && (gSaveContext.save.isNight == true)) {
Message_StartTextbox(play, 0x46C, &this->actor);
this->curTextId = 0x46C;
@@ -670,16 +664,16 @@ void EnGinkoMan_Update(Actor* thisx, PlayState* play) {
s32 EnGinkoMan_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
EnGinkoMan* this = THIS;
- if (limbIndex == 15) {
+ if (limbIndex == OBJECT_BOJ_LIMB_0F) {
*dList = object_boj_DL_00B1D8;
}
- if (limbIndex == 15) {
+ if (limbIndex == OBJECT_BOJ_LIMB_0F) {
Matrix_Translate(1500.0f, 0.0f, 0.0f, MTXMODE_APPLY);
Matrix_RotateXS(this->limb15Rot.y, MTXMODE_APPLY);
Matrix_RotateZS(this->limb15Rot.x, MTXMODE_APPLY);
Matrix_Translate(-1500.0f, 0.0f, 0.0f, MTXMODE_APPLY);
- } else if (limbIndex == 8) {
+ } else if (limbIndex == OBJECT_BOJ_LIMB_08) {
Matrix_RotateXS(-this->limb8Rot.y, MTXMODE_APPLY);
Matrix_RotateZS(-this->limb8Rot.x, MTXMODE_APPLY);
}
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 b8a19d0f3..48ef4bdb1 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
@@ -2,6 +2,7 @@
#define Z_EN_GINKO_MAN_H
#include "global.h"
+#include "objects/object_boj/object_boj.h"
struct EnGinkoMan;
@@ -11,8 +12,8 @@ typedef struct EnGinkoMan {
/* 0x000 */ Actor actor;
/* 0x144 */ SkelAnime skelAnime;
/* 0x188 */ EnGinkoManActionFunc actionFunc;
- /* 0x18C */ Vec3s jointTable[0x10];
- /* 0x1EC */ Vec3s morphTable[0x10];
+ /* 0x18C */ Vec3s jointTable[OBJECT_BOJ_LIMB_MAX];
+ /* 0x1EC */ Vec3s morphTable[OBJECT_BOJ_LIMB_MAX];
/* 0x24C */ Vec3s limb15Rot;
/* 0x252 */ Vec3s limb8Rot;
/* 0x258 */ s16 curTextId;
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 495f4712c..5481d8a70 100644
--- a/src/overlays/actors/ovl_En_GirlA/z_en_girla.c
+++ b/src/overlays/actors/ovl_En_GirlA/z_en_girla.c
@@ -165,8 +165,8 @@ void EnGirlA_InitObjIndex(EnGirlA* this, PlayState* play) {
return;
}
- this->objIndex = Object_GetIndex(&play->objectCtx, sShopItemEntries[params].objectId);
- if (this->objIndex < 0) {
+ this->objectSlot = Object_GetSlot(&play->objectCtx, sShopItemEntries[params].objectId);
+ if (this->objectSlot <= OBJECT_SLOT_NONE) {
Actor_Kill(&this->actor);
return;
}
@@ -564,9 +564,9 @@ void EnGirlA_InitalUpdate(EnGirlA* this, PlayState* play) {
s16 params = this->actor.params;
ShopItemEntry* shopItem = &sShopItemEntries[params];
- if (Object_IsLoaded(&play->objectCtx, this->objIndex)) {
+ if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) {
this->actor.flags &= ~ACTOR_FLAG_10;
- this->actor.objBankIndex = this->objIndex;
+ this->actor.objectSlot = this->objectSlot;
this->actor.textId = shopItem->descriptionTextId;
this->choiceTextId = shopItem->choiceTextId;
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 e155ef6df..f289e31d5 100644
--- a/src/overlays/actors/ovl_En_GirlA/z_en_girla.h
+++ b/src/overlays/actors/ovl_En_GirlA/z_en_girla.h
@@ -27,7 +27,7 @@ typedef struct EnGirlA {
/* 0x000 */ Actor actor;
/* 0x144 */ UNK_TYPE1 unk144[0x44];
/* 0x188 */ EnGirlAActionFunc actionFunc;
- /* 0x18C */ s8 objIndex;
+ /* 0x18C */ s8 objectSlot;
/* 0x190 */ EnGirlAActionFunc mainActionFunc;
/* 0x194 */ s32 isInitialized;
/* 0x198 */ u16 choiceTextId;
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 dd87be400..c631b24e3 100644
--- a/src/overlays/actors/ovl_En_Gk/z_en_gk.c
+++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.c
@@ -5,7 +5,6 @@
*/
#include "z_en_gk.h"
-#include "objects/object_gk/object_gk.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY)
@@ -102,14 +101,38 @@ static DamageTable sDamageTable = {
/* Powder Keg */ DMG_ENTRY(0, 0x0),
};
-static AnimationInfo sAnimationInfo[] = {
- { &object_gk_Anim_00787C, 1.0f, 0.0f, 0.0f, 0, 0.0f }, { &object_gk_Anim_007DC4, 1.0f, 0.0f, 0.0f, 2, 0.0f },
- { &object_gk_Anim_0092C0, 1.0f, 0.0f, 0.0f, 0, 0.0f }, { &object_gk_Anim_005EDC, 1.0f, 0.0f, 0.0f, 0, 0.0f },
- { &object_gk_Anim_009638, 1.0f, 0.0f, 0.0f, 0, 0.0f }, { &object_gk_Anim_008774, 1.0f, 0.0f, 0.0f, 0, 0.0f },
- { &object_gk_Anim_00AE34, 1.0f, 0.0f, 0.0f, 0, 0.0f }, { &object_gk_Anim_00BD90, 1.0f, 0.0f, 0.0f, 2, 0.0f },
- { &object_gk_Anim_00C308, 1.0f, 0.0f, 0.0f, 0, 0.0f }, { &object_gk_Anim_009858, 1.0f, 0.0f, 0.0f, 2, 0.0f },
- { &object_gk_Anim_009D88, 1.0f, 0.0f, 0.0f, 0, 0.0f }, { &object_gk_Anim_00A21C, 1.0f, 0.0f, 0.0f, 2, 0.0f },
- { &object_gk_Anim_00AAEC, 1.0f, 0.0f, 0.0f, 0, 0.0f },
+typedef enum {
+ /* -1 */ ENGK_ANIM_NONE = -1,
+ /* 0x0 */ ENGK_ANIM_0,
+ /* 0x1 */ ENGK_ANIM_1,
+ /* 0x2 */ ENGK_ANIM_2,
+ /* 0x3 */ ENGK_ANIM_3,
+ /* 0x4 */ ENGK_ANIM_4,
+ /* 0x5 */ ENGK_ANIM_5,
+ /* 0x6 */ ENGK_ANIM_6,
+ /* 0x7 */ ENGK_ANIM_7,
+ /* 0x8 */ ENGK_ANIM_8,
+ /* 0x9 */ ENGK_ANIM_9,
+ /* 0xA */ ENGK_ANIM_10,
+ /* 0xB */ ENGK_ANIM_11,
+ /* 0xC */ ENGK_ANIM_12,
+ /* 0xD */ ENGK_ANIM_MAX
+} EnGkAnimation;
+
+static AnimationInfo sAnimationInfo[ENGK_ANIM_MAX] = {
+ { &object_gk_Anim_00787C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGK_ANIM_0
+ { &object_gk_Anim_007DC4, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // ENGK_ANIM_1
+ { &object_gk_Anim_0092C0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGK_ANIM_2
+ { &object_gk_Anim_005EDC, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGK_ANIM_3
+ { &object_gk_Anim_009638, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGK_ANIM_4
+ { &object_gk_Anim_008774, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGK_ANIM_5
+ { &object_gk_Anim_00AE34, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGK_ANIM_6
+ { &object_gk_Anim_00BD90, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // ENGK_ANIM_7
+ { &object_gk_Anim_00C308, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGK_ANIM_8
+ { &object_gk_Anim_009858, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // ENGK_ANIM_9
+ { &object_gk_Anim_009D88, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGK_ANIM_10
+ { &object_gk_Anim_00A21C, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // ENGK_ANIM_11
+ { &object_gk_Anim_00AAEC, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGK_ANIM_12
};
Color_RGBA8 D_80B533A0 = { 255, 255, 255, 255 };
@@ -124,18 +147,24 @@ u16 func_80B50410(EnGk* this, PlayState* play) {
switch (this->unk_31C) {
case 0xE7A:
return 0xE7B;
+
case 0xE7B:
return 0xE7C;
+
case 0xE7C:
return 0xE7D;
+
case 0xE7D:
return 0xE7E;
+
case 0xE7E:
return 0xE7F;
+
case 0xE7F:
SET_WEEKEVENTREG(WEEKEVENTREG_40_80);
this->unk_1E4 |= 1;
return 0xE80;
+
default:
return 0xE7A;
}
@@ -147,16 +176,21 @@ u16 func_80B50410(EnGk* this, PlayState* play) {
switch (this->unk_31C) {
case 0xE82:
return 0xE83;
+
case 0xE83:
return 0xE7D;
+
case 0xE7D:
return 0xE7E;
+
case 0xE7E:
return 0xE7F;
+
case 0xE7F:
SET_WEEKEVENTREG(WEEKEVENTREG_41_01);
this->unk_1E4 |= 1;
return 0xE80;
+
default:
return 0xE82;
}
@@ -197,10 +231,12 @@ u16 func_80B50410(EnGk* this, PlayState* play) {
switch (this->unk_31C) {
case 0xE85:
return 0xE86;
+
case 0xE86:
SET_WEEKEVENTREG(WEEKEVENTREG_41_02);
this->unk_1E4 |= 1;
return 0xE87;
+
default:
return 0xE85;
}
@@ -208,9 +244,9 @@ u16 func_80B50410(EnGk* this, PlayState* play) {
this->unk_1E4 |= 1;
return 0xE87;
}
- } else {
- return 0;
}
+
+ return 0;
}
u16 func_80B50710(EnGk* this) {
@@ -229,8 +265,10 @@ u16 func_80B50710(EnGk* this) {
this->unk_1E4 |= 0x10;
this->unk_1E4 |= 1;
return 0xE8C;
+
+ default:
+ return 0;
}
- return 0;
}
void func_80B507A0(EnGk* this, PlayState* play) {
@@ -256,11 +294,11 @@ s32 func_80B50854(EnGk* this, PlayState* play) {
this->unk_1E4 &= ~0x40;
}
- if ((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == 3) &&
+ if ((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) &&
(play->msgCtx.lastPlayedSong == OCARINA_SONG_GORON_LULLABY)) {
- Flags_SetSwitch(play, ENGK_GET_3F00(&this->actor));
- this->unk_2E4 = 3;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
+ Flags_SetSwitch(play, ENGK_GET_SWITCH_FLAG(&this->actor));
+ this->animIndex = ENGK_ANIM_3;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_3);
this->actionFunc = func_80B521E8;
return true;
}
@@ -285,12 +323,13 @@ void func_80B509A8(EnGk* this, PlayState* play) {
this->unk_30C.y += Rand_ZeroOne();
this->unk_30C.z += 2.0f * Rand_Centered();
- if (this->unk_2E4 == 0) {
+ if (this->animIndex == ENGK_ANIM_0) {
sp4C.x = 0.0f;
sp4C.z = 0.0f;
sp4C.y = -1.2f;
phi_s1 = 25;
- } else if ((this->unk_2E4 == 2) || (this->unk_2E4 == 9) || (this->unk_2E4 == 10) || (this->unk_2E4 == 11)) {
+ } else if ((this->animIndex == ENGK_ANIM_2) || (this->animIndex == ENGK_ANIM_9) ||
+ (this->animIndex == ENGK_ANIM_10) || (this->animIndex == ENGK_ANIM_11)) {
sp4C.x = 0.0f;
sp4C.z = 0.0f;
sp4C.y = -0.5f;
@@ -307,28 +346,28 @@ void func_80B50B38(EnGk* this, PlayState* play) {
s16 i;
s16 temp;
- switch (this->unk_2E4) {
- case 0:
+ switch (this->animIndex) {
+ case ENGK_ANIM_0:
this->unk_2E0 = 3;
for (i = 0; i < 2; i++) {
func_80B509A8(this, play);
}
break;
- case 2:
+ case ENGK_ANIM_2:
this->unk_2E0 = 3;
func_80B509A8(this, play);
break;
- case 1:
- case 3:
- case 12:
+ case ENGK_ANIM_1:
+ case ENGK_ANIM_3:
+ case ENGK_ANIM_12:
this->unk_2E0 = 2;
break;
- case 9:
- case 10:
- case 11:
+ case ENGK_ANIM_9:
+ case ENGK_ANIM_10:
+ case ENGK_ANIM_11:
this->unk_2E0 = 3;
func_80B509A8(this, play);
break;
@@ -483,22 +522,22 @@ s32 func_80B5123C(EnGk* this, PlayState* play) {
}
void func_80B51308(EnGk* this, PlayState* play) {
- s16 sp1E = this->skelAnime.curFrame;
- s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->unk_31A].animation);
+ s16 curFrame = this->skelAnime.curFrame;
+ s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->csAnimIndex].animation);
- if ((this->unk_2E4 == 7) && (sp1E == lastFrame)) {
- this->unk_2E4 = 8;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 8);
+ if ((this->animIndex == ENGK_ANIM_7) && (curFrame == endFrame)) {
+ this->animIndex = ENGK_ANIM_8;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_8);
}
}
void func_80B51398(EnGk* this, PlayState* play) {
- s16 sp1E = this->skelAnime.curFrame;
- s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[9].animation);
+ s16 curFrame = this->skelAnime.curFrame;
+ s16 endFrame = Animation_GetLastFrame(sAnimationInfo[9].animation);
- if ((this->unk_2E4 == 9) && (sp1E == lastFrame)) {
- this->unk_2E4 = 10;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 10);
+ if ((this->animIndex == ENGK_ANIM_9) && (curFrame == endFrame)) {
+ this->animIndex = ENGK_ANIM_10;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_10);
}
}
@@ -506,7 +545,7 @@ void func_80B51410(EnGk* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (this->actor.xzDistToPlayer < 100.0f) {
- if ((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == 3) &&
+ if ((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) &&
(play->msgCtx.lastPlayedSong == OCARINA_SONG_GORON_LULLABY_INTRO)) {
this->unk_1E4 |= 0x20;
}
@@ -541,48 +580,48 @@ void func_80B51510(EnGk* this, PlayState* play) {
this->cueId = play->csCtx.actorCues[cueChannel]->id;
switch (play->csCtx.actorCues[cueChannel]->id) {
case 1:
- this->unk_31A = 0;
- this->unk_2E4 = 0;
+ this->csAnimIndex = ENGK_ANIM_0;
+ this->animIndex = ENGK_ANIM_0;
break;
case 2:
- this->unk_31A = 2;
- this->unk_2E4 = 2;
+ this->csAnimIndex = ENGK_ANIM_2;
+ this->animIndex = ENGK_ANIM_2;
break;
case 3:
- this->unk_31A = 7;
- this->unk_2E4 = 7;
+ this->csAnimIndex = ENGK_ANIM_7;
+ this->animIndex = ENGK_ANIM_7;
break;
case 4:
- this->unk_31A = 3;
- this->unk_2E4 = 3;
+ this->csAnimIndex = ENGK_ANIM_3;
+ this->animIndex = ENGK_ANIM_3;
break;
case 5:
- this->unk_31A = 1;
- this->unk_2E4 = 1;
+ this->csAnimIndex = ENGK_ANIM_1;
+ this->animIndex = ENGK_ANIM_1;
this->unk_1E4 |= 0x80;
this->actionFunc = func_80B5227C;
break;
case 6:
- this->unk_31A = 12;
- this->unk_2E4 = 12;
+ this->csAnimIndex = ENGK_ANIM_12;
+ this->animIndex = ENGK_ANIM_12;
break;
case 7:
- Flags_SetSwitch(play, ENGK_GET_3F00(&this->actor));
+ Flags_SetSwitch(play, ENGK_GET_SWITCH_FLAG(&this->actor));
break;
default:
break;
}
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->unk_31A);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->csAnimIndex);
}
- if (this->unk_31A == 7) {
+ if (this->csAnimIndex == ENGK_ANIM_7) {
func_80B51308(this, play);
}
@@ -594,44 +633,47 @@ void func_80B51510(EnGk* this, PlayState* play) {
}
void func_80B51698(EnGk* this, PlayState* play) {
- s16 sp26 = this->skelAnime.curFrame;
- s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->unk_2E4].animation);
+ s16 curFrame = this->skelAnime.curFrame;
+ s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation);
- if (sp26 == lastFrame) {
- switch (this->unk_2E4) {
- case 0:
- this->unk_2E4 = 2;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2);
+ if (curFrame == endFrame) {
+ switch (this->animIndex) {
+ case ENGK_ANIM_0:
+ this->animIndex = ENGK_ANIM_2;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_2);
this->actionFunc = func_80B5216C;
break;
- case 2:
- this->unk_2E4 = 0;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0);
+ case ENGK_ANIM_2:
+ this->animIndex = ENGK_ANIM_0;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_0);
this->actionFunc = func_80B5202C;
break;
+
+ default:
+ break;
}
}
}
void func_80B51760(EnGk* this, PlayState* play) {
- s16 sp2E = this->skelAnime.curFrame;
- s16 lastFrame;
+ s16 curFrame = this->skelAnime.curFrame;
+ s16 endFrame;
- if (this->unk_2E4 == 11) {
- lastFrame = Animation_GetLastFrame(sAnimationInfo[this->unk_2E4].animation);
- if (sp2E == lastFrame) {
- this->unk_2E4 = 5;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->unk_2E4);
+ if (this->animIndex == ENGK_ANIM_11) {
+ endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation);
+ if (curFrame == endFrame) {
+ this->animIndex = ENGK_ANIM_5;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex);
}
- } else if (this->unk_2E4 == 10) {
- lastFrame = Animation_GetLastFrame(sAnimationInfo[this->unk_2E4].animation);
- if (sp2E == lastFrame) {
- this->unk_2E4 = 11;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->unk_2E4);
+ } else if (this->animIndex == ENGK_ANIM_10) {
+ endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation);
+ if (curFrame == endFrame) {
+ this->animIndex = ENGK_ANIM_11;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex);
}
} else {
- if (Flags_GetSwitch(play, ENGK_GET_3F00(&this->actor))) {
+ if (Flags_GetSwitch(play, ENGK_GET_SWITCH_FLAG(&this->actor))) {
SET_WEEKEVENTREG(WEEKEVENTREG_40_40);
this->actionFunc = func_80B51D9C;
return;
@@ -643,7 +685,7 @@ void func_80B51760(EnGk* this, PlayState* play) {
Message_StartTextbox(play, this->unk_31C, &this->actor);
this->actionFunc = func_80B51970;
if (this->unk_31C == 0xE81) {
- this->unk_2E4 = 0;
+ this->animIndex = ENGK_ANIM_0;
this->unk_1E4 |= 2;
}
} else if (((this->actor.xzDistToPlayer < 100.0f) || this->actor.isLockedOn) &&
@@ -673,7 +715,7 @@ void func_80B51970(EnGk* this, PlayState* play) {
if (this->unk_1E4 & 1) {
this->unk_1E4 &= ~1;
this->unk_1E4 &= ~4;
- if (this->unk_2E4 == 10) {
+ if (this->animIndex == ENGK_ANIM_10) {
this->unk_1E4 &= ~2;
}
this->actionFunc = func_80B51760;
@@ -691,10 +733,10 @@ void func_80B51970(EnGk* this, PlayState* play) {
if (this->unk_1E4 & 2) {
Audio_PlaySfx_AtFixedPos(&this->actor.projectedPos, NA_SE_EN_GOLON_KID_CRY - SFX_FLAG);
- if (this->unk_2E4 != 10) {
- if (this->unk_2E4 != 9) {
- this->unk_2E4 = 9;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 9);
+ if (this->animIndex != ENGK_ANIM_10) {
+ if (this->animIndex != ENGK_ANIM_9) {
+ this->animIndex = ENGK_ANIM_9;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_9);
} else {
func_80B51398(this, play);
}
@@ -703,7 +745,7 @@ void func_80B51970(EnGk* this, PlayState* play) {
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 5, 0x1000, 0x100);
this->actor.world.rot.y = this->actor.shape.rot.y;
- if (this->unk_2E4 == 6) {
+ if (this->animIndex == ENGK_ANIM_6) {
func_80B50954(this);
}
}
@@ -717,7 +759,7 @@ void func_80B51B40(EnGk* this, PlayState* play) {
this->unk_1E4 &= ~1;
this->unk_1E4 &= ~4;
- if (this->unk_2E4 == 10) {
+ if (this->animIndex == ENGK_ANIM_10) {
this->unk_1E4 &= ~2;
}
@@ -752,15 +794,18 @@ void func_80B51B40(EnGk* this, PlayState* play) {
this->unk_31C = 0xE8A;
Message_StartTextbox(play, this->unk_31C, &this->actor);
break;
+
+ default:
+ break;
}
}
if (this->unk_1E4 & 2) {
Audio_PlaySfx_AtFixedPos(&this->actor.projectedPos, NA_SE_EN_GOLON_KID_CRY - SFX_FLAG);
- if (this->unk_2E4 != 10) {
- if (this->unk_2E4 != 9) {
- this->unk_2E4 = 9;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 9);
+ if (this->animIndex != ENGK_ANIM_10) {
+ if (this->animIndex != ENGK_ANIM_9) {
+ this->animIndex = ENGK_ANIM_9;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_9);
} else {
func_80B51398(this, play);
}
@@ -778,8 +823,8 @@ void func_80B51D9C(EnGk* this, PlayState* play) {
CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor);
if (this->unk_1E4 & 4) {
this->unk_1E4 &= ~4;
- this->unk_2E4 = 6;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 6);
+ this->animIndex = ENGK_ANIM_6;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_6);
this->actionFunc = func_80B51EA4;
} else {
this->unk_1E4 |= 4;
@@ -861,7 +906,7 @@ void func_80B5202C(EnGk* this, PlayState* play) {
}
if (this->unk_1E4 & 2) {
- if ((play->msgCtx.ocarinaMode != 1) && (play->msgCtx.ocarinaMode != 3) &&
+ if ((play->msgCtx.ocarinaMode != OCARINA_MODE_ACTIVE) && (play->msgCtx.ocarinaMode != OCARINA_MODE_EVENT) &&
(play->csCtx.state == CS_STATE_IDLE)) {
Audio_PlaySfx_AtFixedPos(&this->actor.projectedPos, NA_SE_EN_GOLON_KID_CRY - SFX_FLAG);
}
@@ -873,28 +918,28 @@ void func_80B5202C(EnGk* this, PlayState* play) {
void func_80B5216C(EnGk* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->actionFunc = func_80B51698;
}
}
void func_80B521E8(EnGk* this, PlayState* play) {
- s16 sp1E = this->skelAnime.curFrame;
- s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->unk_2E4].animation);
+ s16 curFrame = this->skelAnime.curFrame;
+ s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation);
- if (sp1E == lastFrame) {
- this->unk_2E4 = 1;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1);
+ if (curFrame == endFrame) {
+ this->animIndex = ENGK_ANIM_1;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_1);
this->actionFunc = func_80B5227C;
}
}
void func_80B5227C(EnGk* this, PlayState* play) {
- s16 sp26 = this->skelAnime.curFrame;
- s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->unk_2E4].animation);
+ s16 curFrame = this->skelAnime.curFrame;
+ s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation);
- if ((sp26 + 1) == lastFrame) {
+ if (curFrame == (endFrame - 1)) {
func_800B14D4(play, 20.0f, &this->actor.home.pos);
this->unk_350 = 60;
if (!(this->unk_1E4 & 0x80)) {
@@ -948,6 +993,9 @@ void func_80B52430(EnGk* this, PlayState* play) {
this->unk_1E4 &= ~4;
this->actionFunc = func_80B51760;
return;
+
+ default:
+ break;
}
}
@@ -1005,7 +1053,7 @@ void EnGk_Init(Actor* thisx, PlayState* play) {
EnGk* this = THIS;
SkelAnime_InitFlex(play, &this->skelAnime, &object_gk_Skel_0079C0, &object_gk_Anim_00787C, this->jointTable,
- this->morphTable, 20);
+ this->morphTable, OBJECT_GK_LIMB_MAX);
Collider_InitCylinder(play, &this->collider);
Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
@@ -1019,16 +1067,16 @@ void EnGk_Init(Actor* thisx, PlayState* play) {
this->actor.gravity = -1.0f;
if (ENGK_GET_F(&this->actor) == ENGK_F_1) {
- this->unk_2E4 = 5;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 5);
+ this->animIndex = ENGK_ANIM_5;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_5);
if (play->sceneId == SCENE_17SETUGEN2) {
- if (Flags_GetSwitch(play, ENGK_GET_3F00(&this->actor))) {
+ if (Flags_GetSwitch(play, ENGK_GET_SWITCH_FLAG(&this->actor))) {
Actor_Kill(&this->actor);
- } else {
- this->csId = this->actor.csId;
- this->path = SubS_GetPathByIndex(play, ENGK_GET_PATH_INDEX(&this->actor), ENGK_PATH_INDEX_NONE);
- this->actionFunc = func_80B51760;
+ return;
}
+ this->csId = this->actor.csId;
+ this->path = SubS_GetPathByIndex(play, ENGK_GET_PATH_INDEX(&this->actor), ENGK_PATH_INDEX_NONE);
+ this->actionFunc = func_80B51760;
} else if (play->sceneId == SCENE_GORONRACE) {
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) {
if (gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 1)) {
@@ -1054,11 +1102,11 @@ void EnGk_Init(Actor* thisx, PlayState* play) {
Actor_Kill(&this->actor);
}
} else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) {
- this->unk_2E4 = 0;
+ this->animIndex = ENGK_ANIM_0;
this->csId = this->actor.csId;
this->actor.flags |= ACTOR_FLAG_10;
this->actor.flags |= ACTOR_FLAG_2000000;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_0);
this->actionFunc = func_80B5202C;
} else {
this->actionFunc = func_80B52654;
@@ -1111,7 +1159,7 @@ void EnGk_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
sp28.x = 1100.0f;
sp28.z = -500.0f;
- if (this->unk_2E4 == 0) {
+ if (this->animIndex == ENGK_ANIM_0) {
sp34.y = -100.0f;
sp28.y = -100.0f;
@@ -1121,7 +1169,8 @@ void EnGk_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
sp4C = sp40;
sp4C.x *= -1.0f;
- } else if ((this->unk_2E4 == 2) || (this->unk_2E4 == 9) || (this->unk_2E4 == 10) || (this->unk_2E4 == 11)) {
+ } else if ((this->animIndex == ENGK_ANIM_2) || (this->animIndex == ENGK_ANIM_9) ||
+ (this->animIndex == ENGK_ANIM_10) || (this->animIndex == ENGK_ANIM_11)) {
sp34.y = 400.0f;
sp28.y = 400.0f;
@@ -1133,7 +1182,7 @@ void EnGk_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
sp4C.x *= -1.0f;
}
- if (limbIndex == 17) {
+ if (limbIndex == OBJECT_GK_LIMB_11) {
if (ENGK_GET_F(&this->actor) == ENGK_F_1) {
phi_f0 = 100.0f;
} else {
@@ -1164,7 +1213,7 @@ void EnGk_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) {
s32 phi_v1;
switch (limbIndex) {
- case 18:
+ case OBJECT_GK_LIMB_12:
if (this->unk_1E4 & 8) {
phi_v1 = true;
} else {
@@ -1191,7 +1240,7 @@ void EnGk_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) {
Matrix_Push();
break;
- case 9:
+ case OBJECT_GK_LIMB_09:
if (this->unk_1E4 & 8) {
phi_v1 = true;
} else {
@@ -1216,6 +1265,9 @@ void EnGk_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) {
Matrix_Push();
break;
+
+ default:
+ break;
}
}
@@ -1260,8 +1312,9 @@ void EnGk_Draw(Actor* thisx, PlayState* play) {
if (ENGK_GET_F(&this->actor) != ENGK_F_2) {
Gfx_SetupDL25_Xlu(play->state.gfxCtx);
- if ((this->unk_2E4 == 0) || (this->unk_2E4 == 1) || (this->unk_2E4 == 2) || (this->unk_2E4 == 3) ||
- (this->unk_2E4 == 4)) {
+ if ((this->animIndex == ENGK_ANIM_0) || (this->animIndex == ENGK_ANIM_1) ||
+ (this->animIndex == ENGK_ANIM_2) || (this->animIndex == ENGK_ANIM_3) ||
+ (this->animIndex == ENGK_ANIM_4)) {
pos.x = this->actor.world.pos.x - 15.0f;
pos.y = this->actor.world.pos.y;
pos.z = this->actor.world.pos.z;
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 130b97675..b9d237cd5 100644
--- a/src/overlays/actors/ovl_En_Gk/z_en_gk.h
+++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.h
@@ -2,6 +2,7 @@
#define Z_EN_GK_H
#include "global.h"
+#include "objects/object_gk/object_gk.h"
struct EnGk;
@@ -9,7 +10,7 @@ typedef void (*EnGkActionFunc)(struct EnGk*, PlayState*);
#define ENGK_GET_F(thisx) ((thisx)->params & 0xF)
#define ENGK_GET_PATH_INDEX(thisx) (((thisx)->params & 0xF0) >> 4)
-#define ENGK_GET_3F00(thisx) (((thisx)->params & 0x3F00) >> 8)
+#define ENGK_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0x3F00) >> 8)
#define ENGK_PATH_INDEX_NONE 0xF
@@ -32,17 +33,17 @@ typedef struct EnGk {
/* 0x1E4 */ u16 unk_1E4;
/* 0x1E8 */ Path* path;
/* 0x1EC */ s32 unk_1EC;
- /* 0x1F0 */ Vec3s jointTable[20];
- /* 0x1F0 */ Vec3s morphTable[20];
+ /* 0x1F0 */ Vec3s jointTable[OBJECT_GK_LIMB_MAX];
+ /* 0x1F0 */ Vec3s morphTable[OBJECT_GK_LIMB_MAX];
/* 0x2E0 */ s16 unk_2E0;
/* 0x2E2 */ s16 unk_2E2;
- /* 0x2E4 */ s16 unk_2E4;
+ /* 0x2E4 */ s16 animIndex;
/* 0x2E8 */ Vec3f unk_2E8;
/* 0x2F4 */ Vec3f unk_2F4;
/* 0x300 */ Vec3f unk_300;
/* 0x30C */ Vec3f unk_30C;
/* 0x318 */ s16 csId;
- /* 0x31A */ u8 unk_31A;
+ /* 0x31A */ u8 csAnimIndex;
/* 0x31B */ u8 cueId;
/* 0x31C */ u16 unk_31C;
/* 0x31E */ s16 unk_31E;
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 787ce43b9..ca38f91ef 100644
--- a/src/overlays/actors/ovl_En_Gm/z_en_gm.c
+++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.c
@@ -6,7 +6,6 @@
#include "z_en_gm.h"
#include "overlays/actors/ovl_En_Door/z_en_door.h"
-#include "objects/object_in2/object_in2.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10)
@@ -209,20 +208,38 @@ static ColliderSphereInit sSphereInit = {
static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE };
-static AnimationInfoS sAnimationInfo[] = {
- { &object_in2_Anim_009CDC, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_in2_Anim_009CDC, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_in2_Anim_00A5E0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_in2_Anim_00A70C, 1.0f, 0, 1, ANIMMODE_LOOP, 0 },
- { &object_in2_Anim_008090, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_in2_Anim_00898C, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
- { &object_in2_Anim_009450, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
- { &object_in2_Anim_00AD18, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_in2_Anim_00AD18, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_in2_Anim_00B8B0, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
- { &object_in2_Anim_00BA80, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_in2_Anim_00C03C, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_in2_Anim_00B990, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
+typedef enum {
+ /* -1 */ ENGM_ANIM_NONE = -1,
+ /* 0x0 */ ENGM_ANIM_0,
+ /* 0x1 */ ENGM_ANIM_1,
+ /* 0x2 */ ENGM_ANIM_2,
+ /* 0x3 */ ENGM_ANIM_3,
+ /* 0x4 */ ENGM_ANIM_4,
+ /* 0x5 */ ENGM_ANIM_5,
+ /* 0x6 */ ENGM_ANIM_6,
+ /* 0x7 */ ENGM_ANIM_7,
+ /* 0x8 */ ENGM_ANIM_8,
+ /* 0x9 */ ENGM_ANIM_9,
+ /* 0xA */ ENGM_ANIM_10,
+ /* 0xB */ ENGM_ANIM_11,
+ /* 0xC */ ENGM_ANIM_12,
+ /* 0xD */ ENGM_ANIM_MAX
+} EnGmAnimation;
+
+static AnimationInfoS sAnimationInfo[ENGM_ANIM_MAX] = {
+ { &object_in2_Anim_009CDC, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGM_ANIM_0
+ { &object_in2_Anim_009CDC, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENGM_ANIM_1
+ { &object_in2_Anim_00A5E0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGM_ANIM_2
+ { &object_in2_Anim_00A70C, 1.0f, 0, 1, ANIMMODE_LOOP, 0 }, // ENGM_ANIM_3
+ { &object_in2_Anim_008090, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGM_ANIM_4
+ { &object_in2_Anim_00898C, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENGM_ANIM_5
+ { &object_in2_Anim_009450, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENGM_ANIM_6
+ { &object_in2_Anim_00AD18, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGM_ANIM_7
+ { &object_in2_Anim_00AD18, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENGM_ANIM_8
+ { &object_in2_Anim_00B8B0, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENGM_ANIM_9
+ { &object_in2_Anim_00BA80, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENGM_ANIM_10
+ { &object_in2_Anim_00C03C, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENGM_ANIM_11
+ { &object_in2_Anim_00B990, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENGM_ANIM_12
};
Actor* func_8094DEE0(EnGm* this, PlayState* play, u8 arg2, s16 arg3) {
@@ -286,43 +303,43 @@ EnDoor* func_8094DF90(PlayState* play, s32 arg1) {
return SubS_FindDoor(play, phi_a1);
}
-s32 func_8094DFF8(EnGm* this, PlayState* play) {
- s32 ret = false;
+s32 EnGm_UpdateSkelAnime(EnGm* this, PlayState* play) {
+ s32 isAnimFinished = false;
- if (this->unk_262 < 0) {
+ if (this->objectSlot <= OBJECT_SLOT_NONE) {
return false;
}
- if (this->unk_262 >= 0) {
- this->skelAnime.playSpeed = this->unk_3A8;
- ret = SkelAnime_Update(&this->skelAnime);
+ if (this->objectSlot > OBJECT_SLOT_NONE) {
+ this->skelAnime.playSpeed = this->animPlaySpeed;
+ isAnimFinished = SkelAnime_Update(&this->skelAnime);
}
- return ret;
+ return isAnimFinished;
}
-s32 func_8094E054(EnGm* this, PlayState* play, s32 arg2) {
- s8 tmp = this->unk_262;
- s32 phi_v1 = false;
- s32 ret = false;
+s32 EnGm_ChangeAnim(EnGm* this, PlayState* play, s32 animIndex) {
+ s8 tmp = this->objectSlot;
+ s32 changeAnim = false;
+ s32 didAnimChange = false;
- if ((arg2 == 0) || (arg2 == 1)) {
- if ((this->unk_3E8 != 0) && (this->unk_3E8 != 1)) {
- phi_v1 = true;
+ if ((animIndex == ENGM_ANIM_0) || (animIndex == ENGM_ANIM_1)) {
+ if ((this->animIndex != ENGM_ANIM_0) && (this->animIndex != ENGM_ANIM_1)) {
+ changeAnim = true;
}
- } else if (arg2 != this->unk_3E8) {
- phi_v1 = true;
+ } else if (this->animIndex != animIndex) {
+ changeAnim = true;
}
- if (phi_v1) {
+ if (changeAnim) {
if (tmp >= 0) {
- this->unk_3E8 = arg2;
- ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, arg2);
- this->unk_3A8 = this->skelAnime.playSpeed;
+ this->animIndex = animIndex;
+ didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex);
+ this->animPlaySpeed = this->skelAnime.playSpeed;
}
}
- return ret;
+ return didAnimChange;
}
s32 func_8094E0F8(EnGm* this, PlayState* play) {
@@ -330,7 +347,7 @@ s32 func_8094E0F8(EnGm* this, PlayState* play) {
if ((this->unk_260 != play->roomCtx.curRoom.num) && (play->roomCtx.status == 0)) {
this->unk_260 = play->roomCtx.curRoom.num;
- this->unk_262 = SubS_GetObjectIndex(OBJECT_IN2, play);
+ this->objectSlot = SubS_GetObjectSlot(OBJECT_IN2, play);
this->actor.draw = NULL;
this->unk_3FC = 1;
}
@@ -339,7 +356,7 @@ s32 func_8094E0F8(EnGm* this, PlayState* play) {
return false;
}
- if ((this->unk_262 < 0) || !SubS_IsObjectLoaded(this->unk_262, play)) {
+ if ((this->objectSlot <= OBJECT_SLOT_NONE) || !SubS_IsObjectLoaded(this->objectSlot, play)) {
ret = true;
} else {
this->actor.draw = EnGm_Draw;
@@ -486,6 +503,9 @@ s32 func_8094E52C(EnGm* this, PlayState* play) {
this->unk_3E0++;
ret = true;
break;
+
+ default:
+ break;
}
return ret;
@@ -502,7 +522,7 @@ s32 func_8094E69C(EnGm* this, PlayState* play) {
switch (this->unk_3E0) {
case 0:
Actor_PlaySfx(&this->actor, NA_SE_EV_CHAIR_ROLL);
- func_8094E054(this, play, 2);
+ EnGm_ChangeAnim(this, play, ENGM_ANIM_2);
this->unk_3E2 = 0;
this->unk_3E0++;
break;
@@ -558,6 +578,7 @@ s32 func_8094E69C(EnGm* this, PlayState* play) {
this->unk_3E2 = 0;
this->unk_3E0++;
break;
+
case 9:
sp48 = this->actor.world.rot.y;
this->unk_3E2++;
@@ -565,13 +586,16 @@ s32 func_8094E69C(EnGm* this, PlayState* play) {
Math_ApproachS(&this->actor.shape.rot.y, sp48, 3, 0x2AA8);
this->unk_3A4 &= ~0x20;
} else {
- func_8094E054(this, play, 1);
+ EnGm_ChangeAnim(this, play, ENGM_ANIM_1);
this->actor.shape.rot.y = sp48;
this->unk_3E0++;
this->unk_3E2 = 0;
ret = true;
}
break;
+
+ default:
+ break;
}
return ret;
}
@@ -639,7 +663,7 @@ s32 func_8094EB1C(EnGm* this, PlayState* play) {
break;
}
Actor_PlaySfx(&this->actor, NA_SE_EV_CHAIR_ROLL);
- func_8094E054(this, play, 2);
+ EnGm_ChangeAnim(this, play, ENGM_ANIM_2);
this->unk_3E2 = 0;
this->unk_3E0++;
@@ -669,7 +693,7 @@ s32 func_8094EB1C(EnGm* this, PlayState* play) {
Math_ApproachS(&this->actor.shape.rot.y, oldYaw, 3, 0x2AA8);
this->unk_3A4 &= ~0x20;
} else {
- func_8094E054(this, play, 1);
+ EnGm_ChangeAnim(this, play, ENGM_ANIM_1);
this->actor.shape.rot.y = oldYaw;
this->unk_3E2 = 0;
this->unk_3E0++;
@@ -763,7 +787,7 @@ s32 func_8094EFC4(EnGm* this, PlayState* play) {
if (play->csCtx.state != CS_STATE_IDLE) {
if (this->unk_3F8 == 0) {
if ((play->sceneId == SCENE_MILK_BAR) && (gSaveContext.sceneLayer == 2)) {
- func_8094E054(this, play, 0);
+ EnGm_ChangeAnim(this, play, ENGM_ANIM_0);
this->unk_258 = 255;
}
this->cueId = 255;
@@ -879,9 +903,9 @@ void func_8094F3D0(EnGm* this, PlayState* play) {
}
s32 func_8094F4EC(EnGm* this, PlayState* play) {
- if ((this->unk_258 != 6) && (this->unk_3E8 == 12)) {
+ if ((this->unk_258 != 6) && (this->animIndex == ENGM_ANIM_12)) {
this->unk_3A4 &= ~0x2000;
- func_8094E054(this, play, 8);
+ EnGm_ChangeAnim(this, play, ENGM_ANIM_8);
}
return true;
}
@@ -897,30 +921,30 @@ s32 func_8094F53C(EnGm* this, PlayState* play) {
if (this->unk_3A6 != sp32) {
switch (sp32) {
case 0x2B13:
- func_8094E054(this, play, 2);
+ EnGm_ChangeAnim(this, play, ENGM_ANIM_2);
break;
case 0x2B14:
case 0x2B18:
- func_8094E054(this, play, 0);
+ EnGm_ChangeAnim(this, play, ENGM_ANIM_0);
break;
case 0x2B16:
- func_8094E054(this, play, 1);
+ EnGm_ChangeAnim(this, play, ENGM_ANIM_1);
break;
case 0x2B15:
- func_8094E054(this, play, 5);
+ EnGm_ChangeAnim(this, play, ENGM_ANIM_5);
break;
case 0x2B17:
- func_8094E054(this, play, 6);
+ EnGm_ChangeAnim(this, play, ENGM_ANIM_6);
break;
default:
- if ((this->unk_3E8 == 7) || (this->unk_3E8 == 8)) {
+ if ((this->animIndex == ENGM_ANIM_7) || (this->animIndex == ENGM_ANIM_8)) {
this->unk_3A4 |= 0x2000;
- func_8094E054(this, play, 12);
+ EnGm_ChangeAnim(this, play, ENGM_ANIM_12);
}
break;
}
@@ -941,6 +965,9 @@ s32 func_8094F53C(EnGm* this, PlayState* play) {
this->unk_268 = toto;
}
break;
+
+ default:
+ break;
}
if (sp32 == 0x2AA8) {
@@ -963,7 +990,7 @@ s32 func_8094F53C(EnGm* this, PlayState* play) {
this->unk_18C(this, play);
}
- if ((this->unk_3E8 == 6) && !(play->actorCtx.flags & ACTORCTX_FLAG_5) &&
+ if ((this->animIndex == ENGM_ANIM_6) && !(play->actorCtx.flags & ACTORCTX_FLAG_5) &&
Animation_OnFrame(&this->skelAnime, 20.0f)) {
Actor_PlaySfx(&this->actor, NA_SE_EV_HANKO);
}
@@ -1039,7 +1066,7 @@ s32 func_8094F904(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
this->actor.flags &= ~ACTOR_FLAG_TARGETABLE;
this->unk_3A4 |= 0x100;
this->unk_3A4 |= 0x200;
- func_8094E054(this, play, 7);
+ EnGm_ChangeAnim(this, play, ENGM_ANIM_7);
this->actor.gravity = 0.0f;
ret = true;
}
@@ -1087,7 +1114,7 @@ s32 func_8094FAC4(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK);
this->unk_3A4 |= 0x100;
this->unk_3A4 |= 0x200;
- func_8094E054(this, play, 7);
+ EnGm_ChangeAnim(this, play, ENGM_ANIM_7);
this->actor.gravity = -1.0f;
ret = true;
}
@@ -1102,9 +1129,9 @@ s32 func_8094FCC4(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
if (this->unk_258 == 0) {
Math_Vec3f_Copy(&this->actor.world.pos, &D_80951D90);
SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK);
- func_8094E054(this, play, 0);
+ EnGm_ChangeAnim(this, play, ENGM_ANIM_0);
} else {
- func_8094E054(this, play, 9);
+ EnGm_ChangeAnim(this, play, ENGM_ANIM_9);
this->skelAnime.moveFlags = ANIM_FLAG_NOMOVE;
}
this->unk_3A4 |= 0x100;
@@ -1118,7 +1145,7 @@ s32 func_8094FD88(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
s32 ret = false;
if (func_8094F7D0(this, play, scheduleOutput, ACTORCAT_NPC, ACTOR_EN_RECEPGIRL)) {
- func_8094E054(this, play, 11);
+ EnGm_ChangeAnim(this, play, ENGM_ANIM_11);
SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK);
this->unk_3A4 |= 0x100;
this->unk_3A4 |= 0x200;
@@ -1134,7 +1161,7 @@ s32 func_8094FE10(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
al = func_8094DEE0(this, play, ACTORCAT_NPC, ACTOR_EN_AL);
if (func_8094F7D0(this, play, scheduleOutput, ACTORCAT_NPC, ACTOR_EN_TOTO) && (al != NULL) &&
(al->update != NULL)) {
- func_8094E054(this, play, 11);
+ EnGm_ChangeAnim(this, play, ENGM_ANIM_11);
SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK);
this->unk_268 = al;
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_86_20)) {
@@ -1176,11 +1203,11 @@ s32 func_8094FF04(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
this->unk_3C8 = 4;
this->unk_3CA = 4;
this->unk_3CC = 8;
- func_8094E054(this, play, 0);
+ EnGm_ChangeAnim(this, play, ENGM_ANIM_0);
func_8094E278(play);
} else {
Math_Vec3f_Copy(&this->actor.world.pos, &sp30);
- func_8094E054(this, play, 9);
+ EnGm_ChangeAnim(this, play, ENGM_ANIM_9);
this->skelAnime.moveFlags = ANIM_FLAG_NOMOVE;
}
this->unk_400 = 0;
@@ -1202,7 +1229,7 @@ s32 func_80950088(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK);
this->unk_3A4 |= (0x2000 | 0x100);
this->unk_3A4 |= 0x200;
- func_8094E054(this, play, 12);
+ EnGm_ChangeAnim(this, play, ENGM_ANIM_12);
return true;
}
@@ -1217,7 +1244,7 @@ s32 func_80950120(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK);
this->unk_3A4 |= (0x800 | 0x100);
this->unk_3A4 |= 0x200;
- func_8094E054(this, play, 4);
+ EnGm_ChangeAnim(this, play, ENGM_ANIM_4);
return true;
}
@@ -1238,7 +1265,7 @@ s32 func_809501B8(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
this->unk_3CC = 8;
this->actor.targetMode = TARGET_MODE_6;
this->unk_3B4 = 60.0f;
- func_8094E054(this, play, 10);
+ EnGm_ChangeAnim(this, play, ENGM_ANIM_10);
return true;
}
@@ -1334,11 +1361,11 @@ s32 func_80950388(EnGm* this, PlayState* play) {
s32 func_809503F8(EnGm* this, PlayState* play) {
s32 pad;
- if (this->unk_3E8 == 9) {
+ if (this->animIndex == ENGM_ANIM_9) {
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
this->actor.shape.shadowDraw = ActorShadow_DrawCircle;
SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK);
- func_8094E054(this, play, 0);
+ EnGm_ChangeAnim(this, play, ENGM_ANIM_0);
} else {
AnimationContext_SetMoveActor(play, &this->actor, &this->skelAnime, 1.0f);
}
@@ -1348,7 +1375,8 @@ s32 func_809503F8(EnGm* this, PlayState* play) {
s32 func_80950490(EnGm* this, PlayState* play) {
static s32 D_80951DE4[] = {
- 1, 5, 5, 1, 6, 5, 1, 5, 6, 1, 5, 6,
+ ENGM_ANIM_1, ENGM_ANIM_5, ENGM_ANIM_5, ENGM_ANIM_1, ENGM_ANIM_6, ENGM_ANIM_5,
+ ENGM_ANIM_1, ENGM_ANIM_5, ENGM_ANIM_6, ENGM_ANIM_1, ENGM_ANIM_5, ENGM_ANIM_6,
};
s32 pad;
@@ -1358,32 +1386,32 @@ s32 func_80950490(EnGm* this, PlayState* play) {
this->unk_3CA = 1;
this->unk_3CC = 8;
this->unk_400 = 1;
- func_8094E054(this, play, 3);
+ EnGm_ChangeAnim(this, play, ENGM_ANIM_3);
}
return false;
}
this->unk_400 = 0;
- switch (this->unk_3E8) {
- case 9:
+ switch (this->animIndex) {
+ case ENGM_ANIM_9:
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
this->actor.shape.shadowDraw = ActorShadow_DrawCircle;
SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK);
this->unk_3C8 = 4;
this->unk_3CA = 4;
this->unk_3CC = 8;
- func_8094E054(this, play, 0);
+ EnGm_ChangeAnim(this, play, ENGM_ANIM_0);
func_8094E278(play);
} else {
AnimationContext_SetMoveActor(play, &this->actor, &this->skelAnime, 1.0f);
}
break;
- case 5:
- case 6:
+ case ENGM_ANIM_5:
+ case ENGM_ANIM_6:
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- func_8094E054(this, play, D_80951DE4[this->unk_3F4]);
+ EnGm_ChangeAnim(this, play, D_80951DE4[this->unk_3F4]);
this->unk_3F4++;
this->unk_3F4 %= 12;
this->unk_3DE = Rand_S16Offset(30, 30);
@@ -1392,7 +1420,7 @@ s32 func_80950490(EnGm* this, PlayState* play) {
default:
if (DECR(this->unk_3DE) == 0) {
- func_8094E054(this, play, D_80951DE4[this->unk_3F4]);
+ EnGm_ChangeAnim(this, play, D_80951DE4[this->unk_3F4]);
this->unk_3F4++;
this->unk_3F4 %= 12;
this->unk_3DE = Rand_S16Offset(30, 30);
@@ -1433,6 +1461,7 @@ s32 func_80950690(EnGm* this, PlayState* play) {
break;
case 8:
+ default:
break;
}
@@ -1574,6 +1603,9 @@ void func_80950C24(EnGm* this, PlayState* play) {
case 30:
func_8095097C(this, play);
break;
+
+ default:
+ break;
}
Math_ApproachS(&this->actor.shape.rot.y, this->actor.world.rot.y, 3, 0x2AA8);
@@ -1629,7 +1661,7 @@ void func_80950DB8(EnGm* this, PlayState* play) {
}
void func_80950F2C(EnGm* this, PlayState* play) {
- s32 sp50[] = { 0, 0, 3, 2 };
+ s32 csAnimIndex[] = { ENGM_ANIM_0, ENGM_ANIM_0, ENGM_ANIM_3, ENGM_ANIM_2 };
Player* player = GET_PLAYER(play);
s32 pad;
Vec3f sp3C;
@@ -1644,7 +1676,7 @@ void func_80950F2C(EnGm* this, PlayState* play) {
Actor_PlaySfx(&this->actor, NA_SE_EV_CHAIR_ROLL);
}
this->cueId = cueId;
- func_8094E054(this, play, sp50[cueId]);
+ EnGm_ChangeAnim(this, play, csAnimIndex[cueId]);
}
if ((this->cueId == 3) && (this->unk_268 != NULL) && (this->unk_268->update != NULL)) {
@@ -1670,9 +1702,10 @@ void EnGm_Init(Actor* thisx, PlayState* play) {
}
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 22.0f);
- SkelAnime_InitFlex(play, &this->skelAnime, &object_in2_Skel_0078B0, NULL, this->jointTable, this->morphTable, 20);
- this->unk_3E8 = -1;
- func_8094E054(this, play, 0);
+ SkelAnime_InitFlex(play, &this->skelAnime, &object_in2_Skel_0078B0, NULL, this->jointTable, this->morphTable,
+ OBJECT_IN2_LIMB_MAX);
+ this->animIndex = ENGM_ANIM_NONE;
+ EnGm_ChangeAnim(this, play, ENGM_ANIM_0);
Collider_InitAndSetCylinder(play, &this->colliderCylinder, &this->actor, &sCylinderInit);
Collider_InitAndSetSphere(play, &this->colliderSphere, &this->actor, &sSphereInit);
CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit);
@@ -1698,7 +1731,7 @@ void EnGm_Update(Actor* thisx, PlayState* play) {
if (!func_8094E0F8(this, play)) {
if (!func_8094EE84(this, play) && func_8094EFC4(this, play)) {
func_80950F2C(this, play);
- func_8094DFF8(this, play);
+ EnGm_UpdateSkelAnime(this, play);
func_8094E2D0(this);
return;
}
@@ -1708,7 +1741,7 @@ void EnGm_Update(Actor* thisx, PlayState* play) {
func_8094F53C(this, play);
if (this->unk_258 != 0) {
- func_8094DFF8(this, play);
+ EnGm_UpdateSkelAnime(this, play);
func_8094E2D0(this);
func_8094F2E8(this);
SubS_Offer(&this->actor, play, this->unk_3B4, 30.0f, PLAYER_IA_NONE, this->unk_3A4 & SUBS_OFFER_MODE_MASK);
@@ -1726,20 +1759,20 @@ s32 EnGm_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po
EnGm* this = THIS;
s32 fidgetIndex;
- if (limbIndex == 16) {
+ if (limbIndex == OBJECT_IN2_LIMB_10) {
func_8094F3D0(this, play);
}
switch (limbIndex) {
- case 9:
+ case OBJECT_IN2_LIMB_09:
fidgetIndex = 0;
break;
- case 10:
+ case OBJECT_IN2_LIMB_0A:
fidgetIndex = 1;
break;
- case 13:
+ case OBJECT_IN2_LIMB_0D:
fidgetIndex = 2;
break;
@@ -1763,20 +1796,20 @@ void EnGm_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
Vec3f sp30;
s32 pad2;
- if ((CutsceneManager_GetCurrentCsId() == CS_ID_NONE) && (limbIndex == 16)) {
+ if ((CutsceneManager_GetCurrentCsId() == CS_ID_NONE) && (limbIndex == OBJECT_IN2_LIMB_10)) {
Matrix_MultVec3f(&D_80951E24, &this->actor.focus.pos);
Math_Vec3s_Copy(&this->actor.focus.rot, &this->actor.world.rot);
}
OPEN_DISPS(play->state.gfxCtx);
- if ((limbIndex == 15) && (this->unk_3A4 & 0x800)) {
+ if ((limbIndex == OBJECT_IN2_LIMB_0F) && (this->unk_3A4 & 0x800)) {
gSPDisplayList(POLY_OPA_DISP++, object_in2_DL_007528);
}
CLOSE_DISPS(play->state.gfxCtx);
- if (limbIndex == 9) {
+ if (limbIndex == OBJECT_IN2_LIMB_09) {
Matrix_MultVec3f(&gZeroVec3f, &sp30);
Math_Vec3f_ToVec3s(&this->colliderSphere.dim.worldSphere.center, &sp30);
}
@@ -1799,7 +1832,7 @@ void EnGm_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) {
overrideRot = false;
}
- if (limbIndex == 16) {
+ if (limbIndex == OBJECT_IN2_LIMB_10) {
SubS_UpdateLimb(BINANG_ADD(this->unk_3BC + this->unk_3C0, 0x4000),
BINANG_ADD(this->unk_3BE + this->unk_3C2 + this->actor.shape.rot.y, 0x4000), &this->unk_290,
&this->unk_2A8, stepRot, overrideRot);
@@ -1810,7 +1843,7 @@ void EnGm_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) {
Matrix_RotateXS(this->unk_2A8.x, MTXMODE_APPLY);
Matrix_RotateZS(this->unk_2A8.z, MTXMODE_APPLY);
Matrix_Push();
- } else if (limbIndex == 9) {
+ } else if (limbIndex == OBJECT_IN2_LIMB_09) {
SubS_UpdateLimb(BINANG_ADD(this->unk_3C0, 0x4000), BINANG_ADD(this->unk_3C2 + this->actor.shape.rot.y, 0x4000),
&this->unk_29C, &this->unk_2AE, stepRot, overrideRot);
Matrix_Pop();
@@ -1824,11 +1857,13 @@ void EnGm_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) {
}
void EnGm_Draw(Actor* thisx, PlayState* play) {
- static TexturePtr D_80951E30[] = { object_in2_Tex_0054A8, object_in2_Tex_005028, object_in2_Tex_006828,
- object_in2_Tex_005028, object_in2_Tex_005CE8, object_in2_Tex_006C68 };
+ static TexturePtr D_80951E30[] = {
+ object_in2_Tex_0054A8, object_in2_Tex_005028, object_in2_Tex_006828,
+ object_in2_Tex_005028, object_in2_Tex_005CE8, object_in2_Tex_006C68,
+ };
EnGm* this = THIS;
- if ((this->unk_258 != 0) && (this->unk_262 >= 0)) {
+ if ((this->unk_258 != 0) && (this->objectSlot > OBJECT_SLOT_NONE)) {
OPEN_DISPS(play->state.gfxCtx);
Gfx_SetupDL25_Opa(play->state.gfxCtx);
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 572fa322f..e5785d837 100644
--- a/src/overlays/actors/ovl_En_Gm/z_en_gm.h
+++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.h
@@ -2,6 +2,7 @@
#define Z_EN_GM_H
#include "global.h"
+#include "objects/object_in2/object_in2.h"
struct EnGm;
@@ -32,7 +33,7 @@ typedef struct EnGm {
/* 0x25C */ s32 unk_25C;
/* 0x260 */ s8 unk_260;
/* 0x261 */ s8 unk_261;
- /* 0x262 */ s8 unk_262;
+ /* 0x262 */ s8 objectSlot;
/* 0x264 */ s32* unk_264;
/* 0x268 */ Actor* unk_268;
/* 0x26C */ UNK_TYPE1 unk_26C[0xC];
@@ -42,11 +43,11 @@ typedef struct EnGm {
/* 0x29C */ Vec3f unk_29C;
/* 0x2A8 */ Vec3s unk_2A8;
/* 0x2AE */ Vec3s unk_2AE;
- /* 0x2B4 */ Vec3s jointTable[20];
- /* 0x32C */ Vec3s morphTable[20];
+ /* 0x2B4 */ Vec3s jointTable[OBJECT_IN2_LIMB_MAX];
+ /* 0x32C */ Vec3s morphTable[OBJECT_IN2_LIMB_MAX];
/* 0x3A4 */ u16 unk_3A4;
/* 0x3A6 */ u16 unk_3A6;
- /* 0x3A8 */ f32 unk_3A8;
+ /* 0x3A8 */ f32 animPlaySpeed;
/* 0x3AC */ f32 unk_3AC;
/* 0x3B0 */ f32 unk_3B0;
/* 0x3B4 */ f32 unk_3B4;
@@ -69,7 +70,7 @@ typedef struct EnGm {
/* 0x3E0 */ s16 unk_3E0;
/* 0x3E2 */ s16 unk_3E2;
/* 0x3E4 */ EnGmUnkFunc unk_3E4;
- /* 0x3E8 */ s32 unk_3E8;
+ /* 0x3E8 */ s32 animIndex;
/* 0x3EC */ UNK_TYPE1 unk3EC[0x4];
/* 0x3F0 */ s32 prevTalkState;
/* 0x3F4 */ s32 unk_3F4;
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 10dda353c..691703307 100644
--- a/src/overlays/actors/ovl_En_Go/z_en_go.c
+++ b/src/overlays/actors/ovl_En_Go/z_en_go.c
@@ -82,8 +82,8 @@ typedef enum EnGoEffectType {
/* 7 */ ENGO_EFFECT_STEAM = ENGO_EFFECT_STEAM_MIN
} EnGoEffectType;
-typedef enum EnGoAnimationIndex {
- /* -1 */ ENGO_ANIM_INVALID = -1,
+typedef enum EnGoAnimation {
+ /* -1 */ ENGO_ANIM_NONE = -1,
/* 0 */ ENGO_ANIM_GORON_MIN,
/* 0 */ ENGO_ANIM_LYINGDOWNIDLE = ENGO_ANIM_GORON_MIN,
/* 1 */ ENGO_ANIM_LYINGDOWNIDLE_IMM,
@@ -95,21 +95,21 @@ typedef enum EnGoAnimationIndex {
/* 7 */ ENGO_ANIM_DROPKEG,
/* 8 */ ENGO_ANIM_COVEREARS,
/* 9 */ ENGO_ANIM_SHIVERINGSURPRISED,
- /* 10 */ ENGO_ANIM_ATHLETICS_MIN,
- /* 10 */ ENGO_ANIM_DOUBLE_ARM_SIDEBEND = ENGO_ANIM_ATHLETICS_MIN,
- /* 11 */ ENGO_ANIM_SQUAT_SIDE_TO_SIDE,
- /* 12 */ ENGO_ANIM_SHAKE_LIMBS,
- /* 13 */ ENGO_ANIM_SINGLE_ARM_SIDEBEND,
- /* 14 */ ENGO_ANIM_SITTING_STRETCH,
- /* 15 */ ENGO_ANIM_CHEER,
- /* 16 */ ENGO_ANIM_SHOUT,
- /* 17 */ ENGO_ANIM_HELP_SITTING_STRETCH,
- /* 18 */ ENGO_ANIM_SPRING_MIN,
- /* 18 */ ENGO_ANIM_SHOW = ENGO_ANIM_SPRING_MIN,
- /* 19 */ ENGO_ANIM_SHOW_LOOPED,
- /* 20 */ ENGO_ANIM_LOOK_AROUND,
- /* 21 */ ENGO_ANIM_LOOK_AROUND_LOOPED
-} EnGoAnimationIndex;
+ /* 10 */ ENGO_ANIM_ATHLETICS_MIN,
+ /* 10 */ ENGO_ANIM_DOUBLE_ARM_SIDEBEND = ENGO_ANIM_ATHLETICS_MIN,
+ /* 11 */ ENGO_ANIM_SQUAT_SIDE_TO_SIDE,
+ /* 12 */ ENGO_ANIM_SHAKE_LIMBS,
+ /* 13 */ ENGO_ANIM_SINGLE_ARM_SIDEBEND,
+ /* 14 */ ENGO_ANIM_SITTING_STRETCH,
+ /* 15 */ ENGO_ANIM_CHEER,
+ /* 16 */ ENGO_ANIM_SHOUT,
+ /* 17 */ ENGO_ANIM_HELP_SITTING_STRETCH,
+ /* 18 */ ENGO_ANIM_SPRING_MIN,
+ /* 18 */ ENGO_ANIM_SHOW = ENGO_ANIM_SPRING_MIN,
+ /* 19 */ ENGO_ANIM_SHOW_LOOPED,
+ /* 20 */ ENGO_ANIM_LOOK_AROUND,
+ /* 21 */ ENGO_ANIM_LOOK_AROUND_LOOPED
+} EnGoAnimation;
void EnGo_Idle(EnGo* this, PlayState* play);
void EnGo_Sleep(EnGo* this, PlayState* play);
@@ -309,7 +309,7 @@ static DamageTable sDamageTable = {
/**
* Animations used in the actor.
*
- * @see EnGoAnimationIndex
+ * @see EnGoAnimation
*/
static AnimationInfoS sAnimationInfo[] = {
@@ -530,7 +530,7 @@ void EnGo_DrawDust(EnGoEffect effect[ENGO_EFFECT_COUNT], PlayState* play2) {
* @param pos Position around which the effects appear
*/
void EnGo_InitSnow(EnGoEffect effect[ENGO_SNOW_EFFECT_COUNT], Vec3f pos) {
- static u8 effectIndexToSnowEffectTable[ENGO_SNOW_EFFECT_COUNT] = {
+ static u8 sEffectIndexToSnowEffectTable[ENGO_SNOW_EFFECT_COUNT] = {
ENGO_EFFECT_SNOW3, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW2,
ENGO_EFFECT_SNOW3, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW2,
ENGO_EFFECT_SNOW3, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW2,
@@ -570,7 +570,7 @@ void EnGo_InitSnow(EnGoEffect effect[ENGO_SNOW_EFFECT_COUNT], Vec3f pos) {
effect->alphaDenom = effect->alphaNumer = 1;
// Assign a snow effect value of 'ENGO_EFFECT_SNOW1'/'2'/'3'
- effect->type = effectIndexToSnowEffectTable[i];
+ effect->type = sEffectIndexToSnowEffectTable[i];
// Initialize the parameters for the paired element
randRelativeToWorldPos.x = ((Rand_ZeroOne() - 0.5f) * 80.0f) + effect->pos.x;
@@ -748,7 +748,7 @@ s32 EnGo_IsFallingAsleep(EnGo* this, PlayState* play) {
Player* player = GET_PLAYER(play);
s32 isFallingAsleep = false;
- if (((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == 3) &&
+ if (((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) &&
(play->msgCtx.lastPlayedSong == OCARINA_SONG_GORON_LULLABY) && (this->sleepState == ENGO_AWAKE) &&
(this->actor.xzDistToPlayer < 400.0f)) ||
(!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON) && (play->sceneId == SCENE_16GORON_HOUSE) &&
@@ -977,27 +977,27 @@ s32 EnGo_UpdateSpringArrivalCutscene(EnGo* this, PlayState* play) {
*
* @return True if non-repeating animation has finished
*/
-s32 EnGo_UpdateAnimationToCurrent(EnGo* this, PlayState* play) {
- s8 objIndex = this->actor.objBankIndex;
+s32 EnGo_UpdateSkelAnime(EnGo* this, PlayState* play) {
+ s8 objectSlot = this->actor.objectSlot;
s8 extraObjIndex = -1;
- s32 ret = false;
+ s32 isAnimFinished = false;
- if ((this->curAnimIndex >= ENGO_ANIM_SPRING_MIN) && (this->hakuginDemoObjIndex >= 0)) {
- extraObjIndex = this->hakuginDemoObjIndex;
- } else if ((this->curAnimIndex >= ENGO_ANIM_ATHLETICS_MIN) && (this->taisouObjIndex >= 0)) {
- extraObjIndex = this->taisouObjIndex;
- } else if (this->curAnimIndex < ENGO_ANIM_ATHLETICS_MIN) {
- extraObjIndex = this->actor.objBankIndex;
+ if ((this->animIndex >= ENGO_ANIM_SPRING_MIN) && (this->hakuginDemoObjectSlot > OBJECT_SLOT_NONE)) {
+ extraObjIndex = this->hakuginDemoObjectSlot;
+ } else if ((this->animIndex >= ENGO_ANIM_ATHLETICS_MIN) && (this->taisouObjectSlot > OBJECT_SLOT_NONE)) {
+ extraObjIndex = this->taisouObjectSlot;
+ } else if (this->animIndex < ENGO_ANIM_ATHLETICS_MIN) {
+ extraObjIndex = this->actor.objectSlot;
}
if (extraObjIndex >= 0) {
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[extraObjIndex].segment);
- this->skelAnime.playSpeed = this->curAnimPlaySpeed;
- ret = SkelAnime_Update(&this->skelAnime);
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[extraObjIndex].segment);
+ this->skelAnime.playSpeed = this->animPlaySpeed;
+ isAnimFinished = SkelAnime_Update(&this->skelAnime);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectSlot].segment);
}
- return ret;
+ return isAnimFinished;
}
/**
@@ -1005,7 +1005,7 @@ s32 EnGo_UpdateAnimationToCurrent(EnGo* this, PlayState* play) {
*/
s32 EnGo_UpdateSfx(EnGo* this, PlayState* play) {
if (play->csCtx.state == CS_STATE_IDLE) {
- if (this->curAnimIndex == ENGO_ANIM_ROLL) {
+ if (this->animIndex == ENGO_ANIM_ROLL) {
if (Animation_OnFrame(&this->skelAnime, 2.0f)) {
Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_CIRCLE);
}
@@ -1013,7 +1013,7 @@ s32 EnGo_UpdateSfx(EnGo* this, PlayState* play) {
if (Animation_OnFrame(&this->skelAnime, 22.0f)) {
Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_SIT_IMT);
}
- } else if ((this->curAnimIndex == ENGO_ANIM_UNROLL) || (this->curAnimIndex == ENGO_ANIM_UNROLL_IMM)) {
+ } else if ((this->animIndex == ENGO_ANIM_UNROLL) || (this->animIndex == ENGO_ANIM_UNROLL_IMM)) {
if (Animation_OnFrame(&this->skelAnime, 2.0f)) {
Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_CIRCLE_OFF);
}
@@ -1037,28 +1037,28 @@ s32 EnGo_UpdateSfx(EnGo* this, PlayState* play) {
*
* @return True if animation was changed
*/
-s32 EnGo_ChangeAnim(EnGo* this, PlayState* play, EnGoAnimationIndex animIndex) {
- s8 objIndex = this->actor.objBankIndex;
+s32 EnGo_ChangeAnim(EnGo* this, PlayState* play, EnGoAnimation animIndex) {
+ s8 objectSlot = this->actor.objectSlot;
s8 extraObjIndex = -1;
- s32 ret = false;
+ s32 didAnimChange = false;
- if ((animIndex >= ENGO_ANIM_SPRING_MIN) && (this->hakuginDemoObjIndex >= 0)) {
- extraObjIndex = this->hakuginDemoObjIndex;
- } else if ((animIndex >= ENGO_ANIM_ATHLETICS_MIN) && (this->taisouObjIndex >= 0)) {
- extraObjIndex = this->taisouObjIndex;
+ if ((animIndex >= ENGO_ANIM_SPRING_MIN) && (this->hakuginDemoObjectSlot > OBJECT_SLOT_NONE)) {
+ extraObjIndex = this->hakuginDemoObjectSlot;
+ } else if ((animIndex >= ENGO_ANIM_ATHLETICS_MIN) && (this->taisouObjectSlot > OBJECT_SLOT_NONE)) {
+ extraObjIndex = this->taisouObjectSlot;
} else if (animIndex < ENGO_ANIM_ATHLETICS_MIN) {
- extraObjIndex = this->actor.objBankIndex;
+ extraObjIndex = this->actor.objectSlot;
}
if (extraObjIndex >= 0) {
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[extraObjIndex].segment);
- this->curAnimIndex = animIndex;
- ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex);
- this->curAnimPlaySpeed = this->skelAnime.playSpeed;
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[extraObjIndex].segment);
+ this->animIndex = animIndex;
+ didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex);
+ this->animPlaySpeed = this->skelAnime.playSpeed;
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectSlot].segment);
}
- return ret;
+ return didAnimChange;
}
/**
@@ -1651,7 +1651,7 @@ void EnGo_ChangeToStretchingAnimation(EnGo* this, PlayState* play) {
EnGo_ChangeAnim(this, play, sSubtypeToAnimIndex[subtypeLookup]);
// Move the sitting Goron forward, since their spawn location is the same as their standing counterpart.
- if (this->curAnimIndex == ENGO_ANIM_SITTING_STRETCH) {
+ if (this->animIndex == ENGO_ANIM_SITTING_STRETCH) {
Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, this->actor.shape.rot.y, &sStretchingGoronOffset,
&newSittingStretcherPos);
@@ -1701,7 +1701,7 @@ void EnGo_ChangeToSpectatingAnimation(EnGo* this, PlayState* play) {
void EnGo_ChangeToFrozenAnimation(EnGo* this, PlayState* play) {
Collider_InitAndSetCylinder(play, &this->colliderCylinder, &this->actor, &sCylinderInitFrozen);
CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
- this->curAnimIndex = -1;
+ this->animIndex = ENGO_ANIM_NONE;
EnGo_ChangeAnim(this, play, ENGO_ANIM_SHIVER);
this->sleepState = ENGO_AWAKE;
this->iceBlockScale = (this->scaleFactor / 0.01f) * 0.9f;
@@ -1893,13 +1893,13 @@ void EnGo_SetupMedigoron(EnGo* this, PlayState* play) {
void EnGo_SetupInitialAction(EnGo* this, PlayState* play) {
EffectTireMarkInit tireMarkInit = { 0, 62, { 0, 0, 15, 100 } };
- if (((this->taisouObjIndex < 0) || SubS_IsObjectLoaded(this->taisouObjIndex, play)) ||
- ((this->hakuginDemoObjIndex < 0) || SubS_IsObjectLoaded(this->hakuginDemoObjIndex, play))) {
+ if (((this->taisouObjectSlot <= OBJECT_SLOT_NONE) || SubS_IsObjectLoaded(this->taisouObjectSlot, play)) ||
+ ((this->hakuginDemoObjectSlot <= OBJECT_SLOT_NONE) || SubS_IsObjectLoaded(this->hakuginDemoObjectSlot, play))) {
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 20.0f);
SkelAnime_InitFlex(play, &this->skelAnime, &gGoronSkel, NULL, this->jointTable, this->morphTable,
GORON_LIMB_MAX);
- this->curAnimIndex = ENGO_ANIM_INVALID;
+ this->animIndex = ENGO_ANIM_NONE;
EnGo_ChangeAnim(this, play, ENGO_ANIM_UNROLL);
this->actor.draw = EnGo_Draw;
@@ -2168,14 +2168,14 @@ void EnGo_HandleSpringArrivalCutscene(EnGo* this, PlayState* play) {
switch (this->springArrivalCueId) {
case 3:
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame) &&
- (this->curAnimIndex == ENGO_ANIM_LOOK_AROUND)) {
+ (this->animIndex == ENGO_ANIM_LOOK_AROUND)) {
EnGo_ChangeAnim(this, play, ENGO_ANIM_LOOK_AROUND_LOOPED);
}
break;
case 4:
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame) &&
- (this->curAnimIndex == ENGO_ANIM_SHOW)) {
+ (this->animIndex == ENGO_ANIM_SHOW)) {
EnGo_ChangeAnim(this, play, ENGO_ANIM_SHOW_LOOPED);
}
break;
@@ -2412,8 +2412,8 @@ void EnGo_Talk(EnGo* this, PlayState* play) {
void EnGo_Init(Actor* thisx, PlayState* play) {
EnGo* this = THIS;
- this->taisouObjIndex = SubS_GetObjectIndex(OBJECT_TAISOU, play);
- this->hakuginDemoObjIndex = SubS_GetObjectIndex(OBJECT_HAKUGIN_DEMO, play);
+ this->taisouObjectSlot = SubS_GetObjectSlot(OBJECT_TAISOU, play);
+ this->hakuginDemoObjectSlot = SubS_GetObjectSlot(OBJECT_HAKUGIN_DEMO, play);
this->actionFunc = EnGo_SetupInitialAction;
}
@@ -2439,7 +2439,7 @@ void EnGo_Update(Actor* thisx, PlayState* play) {
if (!(this->actionFlags & ENGO_FLAG_FROZEN)) {
EnGo_UpdateEyes(this);
- EnGo_UpdateAnimationToCurrent(this, play);
+ EnGo_UpdateSkelAnime(this, play);
EnGo_UpdateAttentionTargetAndReactions(this, play);
EnGo_UpdateSfx(this, play);
}
@@ -2599,7 +2599,7 @@ void EnGo_Draw(Actor* thisx, PlayState* play) {
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex]));
- if (this->curAnimIndex == ENGO_ANIM_SITTING_STRETCH) {
+ if (this->animIndex == ENGO_ANIM_SITTING_STRETCH) {
Matrix_Translate(0.0f, 0.0f, -4000.0f, MTXMODE_APPLY);
}
SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
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 0ada7fe1e..d6173d6b2 100644
--- a/src/overlays/actors/ovl_En_Go/z_en_go.h
+++ b/src/overlays/actors/ovl_En_Go/z_en_go.h
@@ -93,8 +93,8 @@ typedef struct EnGo {
/* 0x1E0 */ ColliderCylinder unusedCylinder;
/* 0x22C */ ColliderSphere colliderSphere;
/* 0x284 */ Path* gatekeeperPath;
- /* 0x288 */ s8 taisouObjIndex;
- /* 0x289 */ s8 hakuginDemoObjIndex;
+ /* 0x288 */ s8 taisouObjectSlot;
+ /* 0x289 */ s8 hakuginDemoObjectSlot;
/* 0x28C */ s32 msgScriptResumePos;
/* 0x290 */ Vec3f headPos;
/* 0x29C */ Vec3f bodyPos;
@@ -106,7 +106,7 @@ typedef struct EnGo {
/* 0x390 */ u16 actionFlags;
/* 0x392 */ u16 lastTextId;
/* 0x394 */ u8 springArrivalCueId;
- /* 0x398 */ f32 curAnimPlaySpeed;
+ /* 0x398 */ f32 animPlaySpeed;
/* 0x39C */ f32 iceBlockScale;
/* 0x3A0 */ f32 iceBlockAlpha;
/* 0x3A4 */ f32 scaleFactor;
@@ -132,7 +132,7 @@ typedef struct EnGo {
/* 0x3CE */ s16 fidgetTableY[ENGO_FIDGET_TABLE_LEN];
/* 0x3D4 */ s16 surprisePhase;
/* 0x3D8 */ MsgEventFunc msgEventFunc;
- /* 0x3DC */ s32 curAnimIndex;
+ /* 0x3DC */ s32 animIndex;
/* 0x3E0 */ UNK_TYPE1 unk3E0[0x4];
/* 0x3E4 */ s32 indexPathPoint;
/* 0x3E8 */ s32 indexEffect;
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 148b2d116..aa6eb041f 100644
--- a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c
+++ b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c
@@ -674,6 +674,7 @@ void func_80940090(EnGoroiwa* this, PlayState* play) {
sp10C.x = this->actor.world.pos.x;
sp10C.y = this->actor.world.pos.y + this->unk_1DC;
sp10C.z = this->actor.world.pos.z;
+ //! FAKE:
if (1) {}
spD8 = spEC * 150.0f;
spA8 = 0x10000 / spD8;
@@ -1117,8 +1118,8 @@ void func_809419D0(EnGoroiwa* this) {
void func_80941A10(EnGoroiwa* this, PlayState* play) {
static EnGoroiwaUnkFunc D_80942E94[] = {
- &func_8093F498,
- &func_8093F34C,
+ func_8093F498,
+ func_8093F34C,
};
static u16 D_80942E9C[][2] = {
{ NA_SE_EV_BIGBALL_ROLL - SFX_FLAG, NA_SE_EV_BIGBALL_ROLL_SR - SFX_FLAG },
@@ -1507,6 +1508,9 @@ void EnGoroiwa_Update(Actor* thisx, PlayState* play) {
this->actor.floorBgId = 50;
}
break;
+
+ default:
+ break;
}
func_8093FAA4(this, play);
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 3c0d97d20..90b39f860 100644
--- a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c
+++ b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c
@@ -75,8 +75,9 @@ typedef enum {
/* 4 */ DRAGONFLY_ANIM_HOVER,
/* 5 */ DRAGONFLY_ANIM_DAMAGE,
/* 6 */ DRAGONFLY_ANIM_DEAD,
- /* 7 */ DRAGONFLY_ANIM_FALL
-} EnGrasshopperAnim;
+ /* 7 */ DRAGONFLY_ANIM_FALL,
+ /* 8 */ DRAGONFLY_ANIM_MAX
+} DragonflyAnimation;
static s32 sOccupiedIndices[] = {
false, false, false, false, false,
@@ -333,7 +334,7 @@ void EnGrasshopper_Destroy(Actor* thisx, PlayState* play) {
sOccupiedIndices[this->index] = false;
}
-static AnimationHeader* sAnimations[] = {
+static AnimationHeader* sAnimations[DRAGONFLY_ANIM_MAX] = {
&gDragonflyRaiseTailAnim, // DRAGONFLY_ANIM_RAISE_TAIL
&gDragonflyLowerTailAnim, // DRAGONFLY_ANIM_LOWER_TAIL
&gDragonflyFlyAnim, // DRAGONFLY_ANIM_FLY
@@ -344,7 +345,7 @@ static AnimationHeader* sAnimations[] = {
&gDragonflyFallAnim, // DRAGONFLY_ANIM_FALL
};
-static u8 sAnimationModes[] = {
+static u8 sAnimationModes[DRAGONFLY_ANIM_MAX] = {
ANIMMODE_ONCE, // DRAGONFLY_ANIM_RAISE_TAIL
ANIMMODE_ONCE, // DRAGONFLY_ANIM_LOWER_TAIL
ANIMMODE_LOOP, // DRAGONFLY_ANIM_FLY
@@ -358,15 +359,15 @@ static u8 sAnimationModes[] = {
void EnGrasshopper_ChangeAnim(EnGrasshopper* this, s32 animIndex) {
f32 morphFrames;
- this->endFrame = Animation_GetLastFrame(sAnimations[animIndex]);
+ this->animEndFrame = Animation_GetLastFrame(sAnimations[animIndex]);
morphFrames = 0.0f;
if ((animIndex == DRAGONFLY_ANIM_ATTACK) || (animIndex == DRAGONFLY_ANIM_HOVER) ||
(animIndex == DRAGONFLY_ANIM_DAMAGE)) {
morphFrames = -3.0f;
}
- Animation_Change(&this->skelAnime, sAnimations[animIndex], 1.0f, 0.0f, this->endFrame, sAnimationModes[animIndex],
- morphFrames);
+ Animation_Change(&this->skelAnime, sAnimations[animIndex], 1.0f, 0.0f, this->animEndFrame,
+ sAnimationModes[animIndex], morphFrames);
}
void EnGrasshopper_RaiseTail(EnGrasshopper* this) {
@@ -389,7 +390,7 @@ void EnGrasshopper_LowerTail(EnGrasshopper* this) {
void EnGrasshopper_DecideAction(EnGrasshopper* this, PlayState* play) {
f32 curFrame = this->skelAnime.curFrame;
- if (curFrame >= this->endFrame) {
+ if (curFrame >= this->animEndFrame) {
if (this->decision == DRAGONFLY_DECISION_ATTACK) {
EnGrasshopper_SetupAttack(this);
} else {
@@ -580,6 +581,9 @@ void EnGrasshopper_Bank(EnGrasshopper* this, PlayState* play) {
this->actionFunc = EnGrasshopper_RoamInCircles;
}
break;
+
+ default:
+ break;
}
}
@@ -735,7 +739,7 @@ void EnGrasshopper_Attack(EnGrasshopper* this, PlayState* play) {
Math_ApproachF(&this->actor.world.pos.y, this->targetApproachPos.y, 0.1f, this->approachSpeed);
Math_ApproachF(&this->approachSpeed, 10.0f, 0.1f, 1.0f);
Math_SmoothStepToS(&this->actor.world.rot.y, this->actor.yawTowardsPlayer, 0xA, 0xFA0, 0xA);
- if (curFrame >= this->endFrame) {
+ if (curFrame >= this->animEndFrame) {
EnGrasshopper_SetupWaitAfterAttack(this);
}
}
@@ -831,7 +835,7 @@ void EnGrasshopper_Dead(EnGrasshopper* this, PlayState* play) {
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
}
- if (curFrame >= this->endFrame) {
+ if (curFrame >= this->animEndFrame) {
this->actor.flags &= ~ACTOR_FLAG_10;
EnGrasshopper_SetupFall(this);
}
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 cf0e50cbe..a07091dd8 100644
--- a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h
+++ b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h
@@ -91,7 +91,7 @@ typedef struct EnGrasshopper {
/* 0x035E */ s16 type;
/* 0x0360 */ f32 dragonflyScale;
/* 0x0364 */ f32 angularVelocity;
- /* 0x0368 */ f32 endFrame;
+ /* 0x0368 */ f32 animEndFrame;
/* 0x036C */ f32 approachSpeed;
/* 0x0370 */ f32 baseFlyHeight;
/* 0x0374 */ f32 targetPosY;
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 e3ddfee6a..17f8cbb1d 100644
--- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c
+++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c
@@ -143,7 +143,7 @@ void EnGs_Init(Actor* thisx, PlayState* play) {
this->unk_204 = 1;
this->unk_198 = this->actor.world.rot.z;
this->unk_195 = ENGS_GET_1F(thisx);
- this->unk_196 = ENGS_GET_FE0(thisx);
+ this->switchFlag = ENGS_GET_SWITCH_FLAG(thisx);
this->actor.params = ENGS_GET_F000(thisx);
this->actor.world.rot.z = 0;
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
@@ -250,6 +250,9 @@ void func_80997E4C(EnGs* this, PlayState* play) {
case ENGS_2:
this->unk_210 = this->unk_195 + 0x20F7;
break;
+
+ default:
+ break;
}
Message_ContinueTextbox(play, this->unk_210);
break;
@@ -260,6 +263,9 @@ void func_80997E4C(EnGs* this, PlayState* play) {
}
}
break;
+
+ default:
+ break;
}
}
@@ -271,32 +277,32 @@ void func_80997FF0(EnGs* this, PlayState* play) {
}
void func_80998040(EnGs* this, PlayState* play) {
- func_80152434(play, 1);
+ Message_DisplayOcarinaStaff(play, OCARINA_ACTION_FREE_PLAY);
this->actionFunc = func_8099807C;
}
void func_8099807C(EnGs* this, PlayState* play) {
switch (play->msgCtx.ocarinaMode) {
- case 3:
+ case OCARINA_MODE_EVENT:
switch (play->msgCtx.lastPlayedSong) {
case OCARINA_SONG_HEALING:
case OCARINA_SONG_EPONAS:
- if (!Flags_GetSwitch(play, this->unk_196)) {
+ if (!Flags_GetSwitch(play, this->switchFlag)) {
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, this->actor.world.pos.x,
this->actor.world.pos.y + 40.0f, this->actor.world.pos.z, 0, 0, 0,
FAIRY_PARAMS(FAIRY_TYPE_2, false, 0));
Actor_PlaySfx(&this->actor, NA_SE_EV_BUTTERFRY_TO_FAIRY);
- Flags_SetSwitch(play, this->unk_196);
+ Flags_SetSwitch(play, this->switchFlag);
}
break;
case OCARINA_SONG_STORMS:
- if (!Flags_GetSwitch(play, this->unk_196)) {
+ if (!Flags_GetSwitch(play, this->switchFlag)) {
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, this->actor.world.pos.x,
this->actor.world.pos.y + 40.0f, this->actor.world.pos.z, 0, 0, 0,
FAIRY_PARAMS(FAIRY_TYPE_7, false, 0));
Actor_PlaySfx(&this->actor, NA_SE_EV_BUTTERFRY_TO_FAIRY);
- Flags_SetSwitch(play, this->unk_196);
+ Flags_SetSwitch(play, this->switchFlag);
}
break;
@@ -329,16 +335,22 @@ void func_8099807C(EnGs* this, PlayState* play) {
func_809984F4(this, play);
}
break;
+
+ default:
+ break;
}
break;
- case 0:
- case 4:
+ case OCARINA_MODE_NONE:
+ case OCARINA_MODE_END:
func_80998300(this, play);
- case 26:
+ case OCARINA_MODE_APPLY_DOUBLE_SOT:
func_80997D14(this, play);
break;
+
+ default:
+ break;
}
}
@@ -444,6 +456,9 @@ void func_8099874C(EnGs* this, PlayState* play) {
case 4:
phi_v0 = func_809995A4(this, play);
break;
+
+ default:
+ break;
}
if (phi_v0 == 0) {
@@ -483,6 +498,9 @@ void func_8099874C(EnGs* this, PlayState* play) {
SET_WEEKEVENTREG(WEEKEVENTREG_77_20);
}
break;
+
+ default:
+ break;
}
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_90_10)) {
@@ -754,16 +772,16 @@ void func_80999584(Color_RGB8* arg0, Color_RGB8* arg1) {
}
s32 func_809995A4(EnGs* this, PlayState* play) {
- static Color_RGB8 flashColours[] = {
+ static Color_RGB8 sFlashColours[] = {
{ 255, 50, 50 },
{ 50, 50, 255 },
{ 255, 255, 255 },
};
- static Vec3f dustAccel = { 0.0f, -0.3f, 0.0f };
- static Color_RGBA8 dustPrim = { 200, 200, 200, 128 };
- static Color_RGBA8 dustEnv = { 100, 100, 100, 0 };
- static Vec3f bomb2Velocity = { 0.0f, 0.0f, 0.0f };
- static Vec3f bomb2Accel = { 0.0f, 0.0f, 0.0f };
+ static Vec3f sDustAccel = { 0.0f, -0.3f, 0.0f };
+ static Color_RGBA8 sDustPrimColor = { 200, 200, 200, 128 };
+ static Color_RGBA8 sDustEnvColor = { 100, 100, 100, 0 };
+ static Vec3f sBomb2Velocity = { 0.0f, 0.0f, 0.0f };
+ static Vec3f sBomb2Accel = { 0.0f, 0.0f, 0.0f };
s32 sp7C = -1;
if (this->unk_19D == 0) {
@@ -784,18 +802,18 @@ s32 func_809995A4(EnGs* this, PlayState* play) {
u8 pad;
this->unk_1D4--;
- func_80999584(&this->unk_1FA, &flashColours[2]);
+ func_80999584(&this->unk_1FA, &sFlashColours[2]);
if (this->unk_1D4 < 80) {
if ((this->unk_1D4 % 20) < 8) {
if (this->unk_1D4 < 20) {
if ((this->unk_1D4 % 20) == 7) {
- func_80999584(&this->unk_1FA, &flashColours[0]);
+ func_80999584(&this->unk_1FA, &sFlashColours[0]);
this->unk_1F4 = this->unk_1FA;
Audio_PlaySfx(NA_SE_SY_WARNING_COUNT_E);
this->unk_200 = 0.0f;
}
} else if ((this->unk_1D4 % 20) == 7) {
- func_80999584(&this->unk_1FA, &flashColours[1]);
+ func_80999584(&this->unk_1FA, &sFlashColours[1]);
this->unk_1F4 = this->unk_1FA;
Audio_PlaySfx(NA_SE_SY_WARNING_COUNT_N);
this->unk_200 = 0.0f;
@@ -826,7 +844,8 @@ s32 func_809995A4(EnGs* this, PlayState* play) {
sp6C.y = this->actor.world.pos.y + 7.0f;
sp6C.z = this->actor.world.pos.z + (2.0f * sp60.z);
- func_800B0EB0(play, &sp6C, &sp60, &dustAccel, &dustPrim, &dustEnv, Rand_ZeroFloat(50.0f) + 200.0f, 40, 15);
+ func_800B0EB0(play, &sp6C, &sp60, &sDustAccel, &sDustPrimColor, &sDustEnvColor,
+ Rand_ZeroFloat(50.0f) + 200.0f, 40, 15);
}
Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_FIRE_PILLAR - SFX_FLAG);
@@ -856,7 +875,7 @@ s32 func_809995A4(EnGs* this, PlayState* play) {
sp54.y = this->actor.world.pos.y;
sp54.z = this->actor.world.pos.z;
Actor_PlaySfx(&this->actor, NA_SE_IT_BOMB_EXPLOSION);
- EffectSsBomb2_SpawnLayered(play, &sp54, &bomb2Velocity, &bomb2Accel, 100, 20);
+ EffectSsBomb2_SpawnLayered(play, &sp54, &sBomb2Velocity, &sBomb2Accel, 100, 20);
this->unk_1D4 = 10;
this->unk_19A |= 8;
this->unk_216 = 0;
@@ -1011,7 +1030,7 @@ void EnGs_Update(Actor* thisx, PlayState* play) {
EnGs* this = THIS;
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- play->msgCtx.msgMode = 0;
+ play->msgCtx.msgMode = MSGMODE_NONE;
play->msgCtx.msgLength = 0;
this->collider.base.acFlags &= ~AC_HIT;
func_80997DEC(this, play);
@@ -1047,7 +1066,7 @@ void EnGs_Update(Actor* thisx, PlayState* play) {
Math_StepToF(&this->unk_200, 1.0f, 0.02f);
}
func_80997AFC(this->unk_194, &this->unk_1F7);
- Lib_LerpRGB(&this->unk_1F4, &this->unk_1F7, this->unk_200, &this->unk_1FA);
+ Color_RGB8_Lerp(&this->unk_1F4, &this->unk_1F7, this->unk_200, &this->unk_1FA);
if (this->unk_200 >= 1.0f) {
this->unk_1F4 = this->unk_1FA;
}
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 b7af0c582..ffeb3083e 100644
--- a/src/overlays/actors/ovl_En_Gs/z_en_gs.h
+++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.h
@@ -8,7 +8,7 @@ struct EnGs;
typedef void (*EnGsActionFunc)(struct EnGs*, PlayState*);
#define ENGS_GET_1F(thisx) ((thisx)->params & 0x1F)
-#define ENGS_GET_FE0(thisx) (((thisx)->params >> 5) & 0x7F)
+#define ENGS_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 5) & 0x7F)
#define ENGS_GET_F000(thisx) (((thisx)->params >> 0xC) & 0xF)
typedef enum {
@@ -24,7 +24,7 @@ typedef struct EnGs {
/* 0x190 */ EnGsActionFunc actionFunc;
/* 0x194 */ s8 unk_194;
/* 0x195 */ u8 unk_195;
- /* 0x196 */ u8 unk_196;
+ /* 0x196 */ u8 switchFlag;
/* 0x197 */ s8 unk_197;
/* 0x198 */ s16 unk_198;
/* 0x19A */ s16 unk_19A;
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 d51cf7703..92e3bf306 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
@@ -61,18 +61,32 @@ s32 sGuardCount = 0;
s32 D_80ABBE20 = 0;
-static u16 sTextIDs[] = { 0x0824, 0x0825, 0x0826, 0x082D, 0x0827, 0x0828, 0x0829, 0x082A, 0x082B, 0x082C };
+static u16 sTextIds[] = { 0x0824, 0x0825, 0x0826, 0x082D, 0x0827, 0x0828, 0x0829, 0x082A, 0x082B, 0x082C };
s16 D_80ABBE38[] = { 0x0000, 0x0000, 0x0002, 0x0001, 0x0000, 0x0000, 0x0002, 0x0000, 0x0000, 0x0002 };
-static AnimationHeader* sAnimations[] = {
- &gDekuPalaceGuardWaitAnim,
- &gDekuPalaceGuardWalkAnim,
- &gDekuPalaceGuardDigAnim,
- &gDekuPalaceGuardWalkAnim,
+typedef enum {
+ /* -1 */ GUARD_NUTS_ANIM_NONE = -1,
+ /* 0 */ GUARD_NUTS_ANIM_WAIT_HEAD_TILT,
+ /* 1 */ GUARD_NUTS_ANIM_WALK,
+ /* 2 */ GUARD_NUTS_ANIM_DIG,
+ /* 3 */ GUARD_NUTS_ANIM_WALK_2,
+ /* 4 */ GUARD_NUTS_ANIM_MAX
+} EnGuardNutsAnimation;
+
+static AnimationHeader* sAnimations[GUARD_NUTS_ANIM_MAX] = {
+ &gDekuPalaceGuardWaitAnim, // GUARD_NUTS_ANIM_WAIT_HEAD_TILT
+ &gDekuPalaceGuardWalkAnim, // GUARD_NUTS_ANIM_WALK
+ &gDekuPalaceGuardDigAnim, // GUARD_NUTS_ANIM_DIG
+ &gDekuPalaceGuardWalkAnim, // GUARD_NUTS_ANIM_WALK_2
};
-static u8 sAnimationModes[] = { ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_ONCE };
+static u8 sAnimationModes[GUARD_NUTS_ANIM_MAX] = {
+ ANIMMODE_LOOP, // GUARD_NUTS_ANIM_WAIT_HEAD_TILT
+ ANIMMODE_LOOP, // GUARD_NUTS_ANIM_WALK
+ ANIMMODE_ONCE, // GUARD_NUTS_ANIM_DIG
+ ANIMMODE_ONCE, // GUARD_NUTS_ANIM_WALK_2
+};
static TexturePtr sEyeTextures[] = {
gDekuPalaceGuardEyeOpenTex,
@@ -80,13 +94,6 @@ static TexturePtr sEyeTextures[] = {
gDekuPalaceGuardEyeClosedTex,
};
-typedef enum {
- /* 0 */ WAIT_HEAD_TILT_ANIM,
- /* 1 */ WALK_ANIM,
- /* 2 */ DIG_ANIM,
- /* 3 */ WALK_ANIM_2
-} EnGuardNutsAnim;
-
typedef enum {
/* 0 */ GUARD_NUTS_WAIT_STATE,
/* 1 */ GUARD_NUTS_TALKING_STATE,
@@ -123,20 +130,20 @@ void EnGuardNuts_Destroy(Actor* thisx, PlayState* play) {
}
/**
- * @brief Changes the animation to the provided index. Updates animIndex and animFrameCount for the animation.
+ * @brief Changes the animation to the provided index. Updates animIndex and animEndFrame for the animation.
*
* @param this
* @param animIndex the index of sAnimations to change to
*/
void EnGuardNuts_ChangeAnim(EnGuardNuts* this, s32 animIndex) {
this->animIndex = animIndex;
- this->animFrameCount = Animation_GetLastFrame(sAnimations[this->animIndex]);
- Animation_Change(&this->skelAnime, sAnimations[this->animIndex], 1.0f, 0.0f, this->animFrameCount,
+ this->animEndFrame = Animation_GetLastFrame(sAnimations[this->animIndex]);
+ Animation_Change(&this->skelAnime, sAnimations[this->animIndex], 1.0f, 0.0f, this->animEndFrame,
sAnimationModes[this->animIndex], -2.0f);
}
void EnGuardNuts_SetupWait(EnGuardNuts* this) {
- EnGuardNuts_ChangeAnim(this, WAIT_HEAD_TILT_ANIM);
+ EnGuardNuts_ChangeAnim(this, GUARD_NUTS_ANIM_WAIT_HEAD_TILT);
this->state = GUARD_NUTS_WAIT_STATE;
this->actionFunc = EnGuardNuts_Wait;
}
@@ -169,22 +176,22 @@ void EnGuardNuts_Wait(EnGuardNuts* this, PlayState* play) {
// No place for an outsider
this->guardTextIndex = 3;
}
- this->actor.textId = sTextIDs[this->guardTextIndex];
+ this->actor.textId = sTextIds[this->guardTextIndex];
phi_a1 = this->actor.world.rot.y;
if (D_80ABBE20 == 2) {
EnGuardNuts_Burrow(this, play);
return;
}
if (D_80ABBE20 == 1) {
- if (this->animIndex != WALK_ANIM) {
- EnGuardNuts_ChangeAnim(this, WALK_ANIM);
+ if (this->animIndex != GUARD_NUTS_ANIM_WALK) {
+ EnGuardNuts_ChangeAnim(this, GUARD_NUTS_ANIM_WALK);
}
phi_a1 = (this->actor.home.rot.y + 0x8000);
}
if (fabsf((f32)(this->actor.shape.rot.y - phi_a1)) < 100.0f) {
this->actor.shape.rot.y = phi_a1;
- if ((D_80ABBE20 == 1) && (this->animIndex != WALK_ANIM_2)) {
- EnGuardNuts_ChangeAnim(this, WALK_ANIM_2);
+ if ((D_80ABBE20 == 1) && (this->animIndex != GUARD_NUTS_ANIM_WALK_2)) {
+ EnGuardNuts_ChangeAnim(this, GUARD_NUTS_ANIM_WALK_2);
}
} else {
Math_SmoothStepToS(&this->actor.shape.rot.y, phi_a1, 1, 0xBB8, 0);
@@ -199,7 +206,7 @@ void EnGuardNuts_Wait(EnGuardNuts* this, PlayState* play) {
}
void func_80ABB540(EnGuardNuts* this) {
- EnGuardNuts_ChangeAnim(this, WALK_ANIM);
+ EnGuardNuts_ChangeAnim(this, GUARD_NUTS_ANIM_WALK);
this->targetHeadPos.x = this->targetHeadPos.y = 0;
this->timer = 16;
this->state = GUARD_NUTS_TALKING_STATE;
@@ -216,7 +223,7 @@ void func_80ABB590(EnGuardNuts* this, PlayState* play) {
if (fabsf((this->actor.shape.rot.y - yaw)) < 100.0f) {
this->actor.shape.rot.y = yaw;
curFrame = this->skelAnime.curFrame;
- if ((curFrame < this->animFrameCount) || (this->guardTextIndex >= 7)) {
+ if ((curFrame < this->animEndFrame) || (this->guardTextIndex >= 7)) {
SkelAnime_Update(&this->skelAnime);
}
} else {
@@ -226,8 +233,8 @@ void func_80ABB590(EnGuardNuts* this, PlayState* play) {
if (Message_GetState(&play->msgCtx) == TEXT_STATE_5) {
this->targetHeadPos.y = 0;
this->targetHeadPos.x = 0;
- if ((this->guardTextIndex == 3) && (this->animIndex == WAIT_HEAD_TILT_ANIM)) {
- EnGuardNuts_ChangeAnim(this, WAIT_HEAD_TILT_ANIM);
+ if ((this->guardTextIndex == 3) && (this->animIndex == GUARD_NUTS_ANIM_WAIT_HEAD_TILT)) {
+ EnGuardNuts_ChangeAnim(this, GUARD_NUTS_ANIM_WAIT_HEAD_TILT);
}
if (Message_ShouldAdvance(play)) {
if (D_80ABBE38[this->guardTextIndex] != 1) {
@@ -238,7 +245,7 @@ void func_80ABB590(EnGuardNuts* this, PlayState* play) {
EnGuardNuts_Burrow(this, play);
} else {
this->guardTextIndex++;
- Message_StartTextbox(play, sTextIDs[this->guardTextIndex], &this->actor);
+ Message_StartTextbox(play, sTextIds[this->guardTextIndex], &this->actor);
if (D_80ABBE38[this->guardTextIndex] == 2) {
D_80ABBE20 = 1;
}
@@ -271,7 +278,7 @@ void func_80ABB590(EnGuardNuts* this, PlayState* play) {
void EnGuardNuts_Burrow(EnGuardNuts* this, PlayState* play) {
Vec3f digPos;
- EnGuardNuts_ChangeAnim(this, DIG_ANIM);
+ EnGuardNuts_ChangeAnim(this, GUARD_NUTS_ANIM_DIG);
Math_Vec3f_Copy(&digPos, &this->actor.world.pos);
digPos.y = this->actor.floorHeight;
EffectSsHahen_SpawnBurst(play, &digPos, 4.0f, 0, 10, 3, 15, HAHEN_OBJECT_DEFAULT, 10, NULL);
@@ -287,7 +294,7 @@ void EnGuardNuts_SetupUnburrow(EnGuardNuts* this, PlayState* play) {
f32 curFrame = this->skelAnime.curFrame;
SkelAnime_Update(&this->skelAnime);
- if (this->animFrameCount <= curFrame) {
+ if (curFrame >= this->animEndFrame) {
this->state = GUARD_NUTS_BURROWED_STATE;
this->actionFunc = EnGuardNuts_Unburrow;
this->actor.world.rot.y = this->actor.home.rot.y;
@@ -322,12 +329,13 @@ void EnGuardNuts_Update(Actor* thisx, PlayState* play) {
s32 pad;
if (this->blinkTimer == 0) {
- if (++(this->eyeState) >= 3) {
+ this->eyeState++;
+ if (this->eyeState >= 3) {
this->eyeState = 0;
this->blinkTimer = (s16)Rand_ZeroFloat(60.0f) + 20;
}
}
- if ((this->animIndex == WALK_ANIM) &&
+ if ((this->animIndex == GUARD_NUTS_ANIM_WALK) &&
(Animation_OnFrame(&this->skelAnime, 1.0f) || Animation_OnFrame(&this->skelAnime, 5.0f))) {
Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_WALK);
}
@@ -381,7 +389,7 @@ void EnGuardNuts_Draw(Actor* thisx, PlayState* play) {
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_OPA_DISP++, gDekuPalaceGuardFlower);
+ gSPDisplayList(POLY_OPA_DISP++, gDekuPalaceGuardFlowerDL);
CLOSE_DISPS(play->state.gfxCtx);
}
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 8cbe26f03..e07e70eaf 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
@@ -25,7 +25,7 @@ typedef struct EnGuardNuts {
/* 0x228 */ Vec3f guardPos;
/* 0x234 */ Vec3s headRot;
/* 0x23A */ Vec3s targetHeadPos;
- /* 0x240 */ f32 animFrameCount;
+ /* 0x240 */ f32 animEndFrame;
/* 0x244 */ ColliderCylinder collider;
} EnGuardNuts; // size = 0x290
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 28b37cc91..92afb3083 100644
--- a/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c
+++ b/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c
@@ -5,7 +5,6 @@
*/
#include "z_en_guruguru.h"
-#include "objects/object_fu/object_fu.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10)
@@ -62,9 +61,27 @@ static ColliderCylinderInit sCylinderInit = {
{ 15, 20, 0, { 0, 0, 0 } },
};
-static AnimationHeader* sAnimations[] = { &gGuruGuruPlayStillAnim, &gGuruGuruPlayAndMoveHeadAnim };
-static u8 sAnimationModes[] = { ANIMMODE_LOOP, ANIMMODE_LOOP };
-static f32 sPlaySpeeds[] = { 1.0f, 1.0f };
+typedef enum {
+ /* 0 */ GURU_GURU_ANIM_PLAY_STILL,
+ /* 1 */ GURU_GURU_ANIM_PLAY_MOVE_HEAD,
+ /* 2 */ GURU_GURU_ANIM_MAX
+} GuruGuruAnimation;
+
+static AnimationHeader* sAnimations[GURU_GURU_ANIM_MAX] = {
+ &gGuruGuruPlayStillAnim, // GURU_GURU_ANIM_PLAY_STILL
+ &gGuruGuruPlayAndMoveHeadAnim, // GURU_GURU_ANIM_PLAY_MOVE_HEAD
+};
+
+static u8 sAnimationModes[GURU_GURU_ANIM_MAX] = {
+ ANIMMODE_LOOP, // GURU_GURU_ANIM_PLAY_STILL
+ ANIMMODE_LOOP, // GURU_GURU_ANIM_PLAY_MOVE_HEAD
+};
+
+static f32 sPlaySpeeds[GURU_GURU_ANIM_MAX] = {
+ 1.0f, // GURU_GURU_ANIM_PLAY_STILL
+ 1.0f, // GURU_GURU_ANIM_PLAY_MOVE_HEAD
+};
+
static TexturePtr sEyeTextures[] = { gGuruGuruEyeClosedTex, gGuruGuruEyeAngryTex };
static TexturePtr sMouthTextures[] = { gGuruGuruMouthOpenTex, gGuruGuruMouthAngryTex };
@@ -74,7 +91,7 @@ void EnGuruguru_Init(Actor* thisx, PlayState* play) {
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 19.0f);
SkelAnime_InitFlex(play, &this->skelAnime, &gGuruGuruSkel, &gGuruGuruPlayStillAnim, this->jointTable,
- this->morphTable, 16);
+ this->morphTable, GURU_GURU_LIMB_MAX);
this->actor.targetMode = TARGET_MODE_0;
if (this->actor.params != 2) {
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
@@ -106,8 +123,8 @@ void EnGuruguru_Destroy(Actor* thisx, PlayState* play) {
}
void EnGuruguru_ChangeAnim(EnGuruguru* this, s32 animIndex) {
- this->frameCount = Animation_GetLastFrame(sAnimations[animIndex]);
- Animation_Change(&this->skelAnime, sAnimations[animIndex], sPlaySpeeds[animIndex], 0.0f, this->frameCount,
+ this->animEndFrame = Animation_GetLastFrame(sAnimations[animIndex]);
+ Animation_Change(&this->skelAnime, sAnimations[animIndex], sPlaySpeeds[animIndex], 0.0f, this->animEndFrame,
sAnimationModes[animIndex], -4.0f);
}
@@ -115,7 +132,7 @@ void EnGuruguru_DoNothing(EnGuruguru* this, PlayState* play) {
}
void func_80BC6E10(EnGuruguru* this) {
- EnGuruguru_ChangeAnim(this, 0);
+ EnGuruguru_ChangeAnim(this, GURU_GURU_ANIM_PLAY_STILL);
this->textIdIndex = 0;
this->unk270 = 0;
if (this->actor.params == 0) {
@@ -373,7 +390,7 @@ void EnGuruguru_Update(Actor* thisx, PlayState* play) {
s32 EnGuruguru_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
EnGuruguru* this = THIS;
- if (limbIndex == 14) {
+ if (limbIndex == GURU_GURU_LIMB_HEAD) {
rot->x += this->headXRot;
rot->z += this->headZRot;
}
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 0158e3ddc..4913d4124 100644
--- a/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.h
+++ b/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.h
@@ -2,6 +2,7 @@
#define Z_EN_GURUGURU_H
#include "global.h"
+#include "objects/object_fu/object_fu.h"
struct EnGuruguru;
@@ -10,8 +11,8 @@ typedef void (*EnGuruguruActionFunc)(struct EnGuruguru*, PlayState*);
typedef struct EnGuruguru {
/* 0x000 */ Actor actor;
/* 0x144 */ SkelAnime skelAnime;
- /* 0x188 */ Vec3s jointTable[16];
- /* 0x1E8 */ Vec3s morphTable[16];
+ /* 0x188 */ Vec3s jointTable[GURU_GURU_LIMB_MAX];
+ /* 0x1E8 */ Vec3s morphTable[GURU_GURU_LIMB_MAX];
/* 0x248 */ EnGuruguruActionFunc actionFunc;
/* 0x24C */ s16 headZRot;
/* 0x24E */ s16 headXRot;
@@ -22,7 +23,7 @@ typedef struct EnGuruguru {
/* 0x264 */ s16 unusedTimer; // set to 6 and decremented, but never has any effect
/* 0x266 */ s16 unk266;
/* 0x268 */ s16 unk268;
- /* 0x26C */ f32 frameCount;
+ /* 0x26C */ f32 animEndFrame;
/* 0x270 */ u8 unk270;
/* 0x272 */ s16 unk272; // set, but never used
/* 0x274 */ s16 textIdIndex;
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 841e6f539..85000e5cb 100644
--- a/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c
+++ b/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c
@@ -194,6 +194,7 @@ void EnHanabi_Init(Actor* thisx, PlayState* play2) {
EnHanabi* this = THIS;
s32 i;
+ //! FAKE:
if (1) {}
Actor_SetScale(thisx, 1.0f);
diff --git a/src/overlays/actors/ovl_En_Hata/z_en_hata.c b/src/overlays/actors/ovl_En_Hata/z_en_hata.c
index e9cfb258e..b22949cb0 100644
--- a/src/overlays/actors/ovl_En_Hata/z_en_hata.c
+++ b/src/overlays/actors/ovl_En_Hata/z_en_hata.c
@@ -62,10 +62,10 @@ void EnHata_Update(Actor* thisx, PlayState* play2) {
this->skelAnime.playSpeed = 2.75f * phi_fv0;
this->skelAnime.playSpeed += 1.0f + Rand_ZeroFloat(1.25f);
- sp34.x = play->envCtx.windDir.x;
- sp34.y = play->envCtx.windDir.y + ((1.0f - phi_fv0) * 240.0f);
+ sp34.x = play->envCtx.windDirection.x;
+ sp34.y = play->envCtx.windDirection.y + ((1.0f - phi_fv0) * 240.0f);
sp34.y = CLAMP(sp34.y, -118.0f, 118.0f);
- sp34.z = play->envCtx.windDir.z;
+ sp34.z = play->envCtx.windDirection.z;
phi_fv0 = CLAMP(phi_fv0, 0.1f, 0.4f);
Math_ApproachF(&this->unk_2A4.x, sp34.x, phi_fv0, 1000.0f);
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 83973d9e9..650d4c69d 100644
--- a/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c
+++ b/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c
@@ -20,14 +20,6 @@ void EnHeishi_SetHeadRotation(EnHeishi* this);
void EnHeishi_SetupIdle(EnHeishi* this);
void EnHeishi_Idle(EnHeishi* this, PlayState* play);
-typedef enum {
- /* 0 */ HEISHI_ANIM_STAND_HAND_ON_HIP,
- /* 1 */ HEISHI_ANIM_CHEER_WITH_SPEAR,
- /* 2 */ HEISHI_ANIM_WAVE,
- /* 3 */ HEISHI_ANIM_SIT_AND_REACH,
- /* 4 */ HEISHI_ANIM_STAND_UP
-} EnHeishiAnimation;
-
ActorInit En_Heishi_InitVars = {
ACTOR_EN_HEISHI,
ACTORCAT_NPC,
@@ -64,7 +56,7 @@ void EnHeishi_Init(Actor* thisx, PlayState* play) {
EnHeishi* this = THIS;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 25.0f);
- SkelAnime_InitFlex(play, &this->skelAnime, &gSoldierSkel, &gSoldierWave, this->jointTable, this->morphTable,
+ SkelAnime_InitFlex(play, &this->skelAnime, &gSoldierSkel, &gSoldierWaveAnim, this->jointTable, this->morphTable,
SOLDIER_LIMB_MAX);
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
this->paramsCopy = this->actor.params;
@@ -97,19 +89,36 @@ void EnHeishi_Destroy(Actor* thisx, PlayState* play) {
Collider_DestroyCylinder(play, &this->colliderCylinder);
}
+typedef enum EnHeishiAnimation {
+ /* 0 */ HEISHI_ANIM_STAND_HAND_ON_HIP,
+ /* 1 */ HEISHI_ANIM_CHEER_WITH_SPEAR,
+ /* 2 */ HEISHI_ANIM_WAVE,
+ /* 3 */ HEISHI_ANIM_SIT_AND_REACH,
+ /* 4 */ HEISHI_ANIM_STAND_UP,
+ /* 5 */ HEISHI_ANIM_MAX
+} EnHeishiAnimation;
+
+static AnimationHeader* sAnimations[HEISHI_ANIM_MAX] = {
+ &gSoldierStandHandOnHipAnim, // HEISHI_ANIM_STAND_HAND_ON_HIP
+ &gSoldierCheerWithSpearAnim, // HEISHI_ANIM_CHEER_WITH_SPEAR
+ &gSoldierWaveAnim, // HEISHI_ANIM_WAVE
+ &gSoldierSitAndReachAnim, // HEISHI_ANIM_SIT_AND_REACH
+ &gSoldierStandUpAnim, // HEISHI_ANIM_STAND_UP
+};
+
+static u8 sAnimationModes[HEISHI_ANIM_MAX] = {
+ ANIMMODE_LOOP, // HEISHI_ANIM_STAND_HAND_ON_HIP
+ ANIMMODE_LOOP, // HEISHI_ANIM_CHEER_WITH_SPEAR
+ ANIMMODE_LOOP, // HEISHI_ANIM_WAVE
+ ANIMMODE_LOOP, // HEISHI_ANIM_SIT_AND_REACH
+ ANIMMODE_ONCE, // HEISHI_ANIM_STAND_UP
+};
+
void EnHeishi_ChangeAnim(EnHeishi* this, s32 animIndex) {
- static AnimationHeader* sAnimations[] = {
- &gSoldierStandHandOnHip, &gSoldierCheerWithSpear, &gSoldierWave, &gSoldierSitAndReach, &gSoldierStandUp,
- };
- static u8 sAnimationModes[] = {
- ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_LOOP,
- ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP,
- ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP,
- };
this->animIndex = animIndex;
- this->frameCount = Animation_GetLastFrame(sAnimations[this->animIndex]);
- Animation_Change(&this->skelAnime, sAnimations[this->animIndex], 1.0f, 0.0f, this->frameCount,
+ this->animEndFrame = Animation_GetLastFrame(sAnimations[this->animIndex]);
+ Animation_Change(&this->skelAnime, sAnimations[this->animIndex], 1.0f, 0.0f, this->animEndFrame,
sAnimationModes[this->animIndex], -10.0f);
}
diff --git a/src/overlays/actors/ovl_En_Heishi/z_en_heishi.h b/src/overlays/actors/ovl_En_Heishi/z_en_heishi.h
index 1758ceae6..4d886cb3c 100644
--- a/src/overlays/actors/ovl_En_Heishi/z_en_heishi.h
+++ b/src/overlays/actors/ovl_En_Heishi/z_en_heishi.h
@@ -25,7 +25,7 @@ typedef struct EnHeishi {
/* 0x26C */ s32 shouldSetHeadRotation;
/* 0x270 */ s16 timer;
/* 0x272 */ s16 yawTowardsPlayer;
- /* 0x274 */ f32 frameCount;
+ /* 0x274 */ f32 animEndFrame;
/* 0x278 */ s16 unk278; // set and not used
/* 0x27C */ UNK_TYPE1 unk_27C[0x8];
/* 0x284 */ ColliderCylinder colliderCylinder;
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 2c652f11c..648b63b6b 100644
--- a/src/overlays/actors/ovl_En_Hg/z_en_hg.c
+++ b/src/overlays/actors/ovl_En_Hg/z_en_hg.c
@@ -29,17 +29,6 @@ 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);
-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,
@@ -118,15 +107,27 @@ static CollisionCheckInfoInit2 sColChkInfoInit2 = {
0, 0, 0, 0, 0x80,
};
-static AnimationInfo sAnimationInfo[] = {
- { &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 },
+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,
+ /* 8 */ HG_ANIM_MAX
+} HgAnimation;
+
+static AnimationInfo sAnimationInfo[HG_ANIM_MAX] = {
+ { &gPamelasFatherIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // HG_ANIM_IDLE
+ { &gPamelasFatherLurchForwardAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // HG_ANIM_LURCH_FORWARD
+ { &gPamelasFatherRecoilFromHitAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // HG_ANIM_RECOIL
+ { &gPamelasFatherLeanForwardAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // HG_ANIM_LEAN_FORWARD
+ { &gPamelasFatherReachForwardAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // HG_ANIM_REACH_FORWARD
+ { &gPamelasFatherCurlUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // HG_ANIM_CURL_UP
+ { &gPamelasFatherCrouchedPanicAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // HG_ANIM_CROUCHED_PANIC
+ { &gPamelasFatherPanicAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // HG_ANIM_PANIC
};
static u32 sHasSoundPlayed = false;
@@ -192,7 +193,7 @@ void EnHg_ChasePlayer(EnHg* this, PlayState* play) {
s32 pad;
this->actor.speed = 1.6f;
- if (!(player->stateFlags2 & PLAYER_STATE2_8000000) && 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);
@@ -233,7 +234,6 @@ void EnHg_ReactToHit(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 {
Actor_OfferTalk(&this->actor, play, 80.0f);
@@ -295,7 +295,7 @@ void EnHg_HandleCsAction(EnHg* this, PlayState* play) {
this->csIdList[3] = play->csCtx.actorCues[cueChannel]->id;
switch (play->csCtx.actorCues[cueChannel]->id) {
case 1:
- this->animIndex = 0;
+ this->animIndex = HG_ANIM_IDLE;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HG_ANIM_IDLE);
break;
@@ -329,6 +329,9 @@ void EnHg_HandleCsAction(EnHg* this, PlayState* play) {
SET_WEEKEVENTREG(WEEKEVENTREG_75_20);
Actor_Kill(&this->actor);
break;
+
+ default:
+ break;
}
} else if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
switch (this->animIndex) {
@@ -341,6 +344,9 @@ void EnHg_HandleCsAction(EnHg* this, PlayState* play) {
this->animIndex = HG_ANIM_CROUCHED_PANIC;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HG_ANIM_CROUCHED_PANIC);
break;
+
+ default:
+ break;
}
}
@@ -360,6 +366,9 @@ void EnHg_HandleCsAction(EnHg* this, PlayState* play) {
Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_HALF_REDEAD_SCREAME - SFX_FLAG);
}
break;
+
+ default:
+ break;
}
Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
@@ -389,7 +398,7 @@ void EnHg_WaitForPlayerAction(EnHg* this, PlayState* play) {
sHasSoundPlayed = false;
}
- if (play->msgCtx.ocarinaMode == 3) {
+ if (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) {
if ((play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING) && (GET_PLAYER_FORM == PLAYER_FORM_HUMAN)) {
if (INV_CONTENT(ITEM_MASK_GIBDO) == ITEM_MASK_GIBDO) {
this->csIdIndex = HG_CS_SONG_OF_HEALING;
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 15bfd598b..c4d9c0371 100644
--- a/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c
+++ b/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c
@@ -38,16 +38,6 @@ typedef enum {
/* 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,
@@ -60,14 +50,25 @@ ActorInit En_Hgo_InitVars = {
(ActorFunc)EnHgo_Draw,
};
-static AnimationInfo sAnimationInfo[] = {
- { &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 },
+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,
+ /* 7 */ HGO_ANIM_MAX
+} HgoAnimation;
+
+static AnimationInfo sAnimationInfo[HGO_ANIM_MAX] = {
+ { &gPamelasFatherArmsFoldedAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // HGO_ANIM_ARMS_FOLDED
+ { &gPamelasFatherAstonishedAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // HGO_ANIM_ASTONISHED
+ { &gPamelasFatherKneelDownAndHugAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // HGO_ANIM_KNEEL_DOWN_AND_HUG
+ { &gPamelasFatherConsoleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // HGO_ANIM_CONSOLE
+ { &gPamelasFatherConsoleHeadUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // HGO_ANIM_CONSOLE_HEAD_UP
+ { &gPamelasFatherReachDownToLiftAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // HGO_ANIM_REACH_DOWN_TO_LIFT
+ { &gPamelasFatherTossAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // HGO_ANIM_TOSS
};
static ColliderCylinderInit sCylinderInit = {
@@ -109,6 +110,7 @@ void EnHgo_Init(Actor* thisx, PlayState* play) {
this->textId = 0;
this->talkFlags = TALK_FLAG_NONE;
this->isInCutscene = false;
+
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20) || CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE)) {
EnHgo_SetupTalk(this);
} else {
@@ -143,7 +145,7 @@ void EnHgo_UpdateCollision(EnHgo* this, PlayState* play) {
}
void EnHgo_SetupTalk(EnHgo* this) {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HGO_ANIM_ARMS_FOLDED);
this->actionFunc = EnHgo_Talk;
}
@@ -206,6 +208,9 @@ void EnHgo_DefaultDialogueHandler(EnHgo* this, PlayState* play) {
EnHgo_SetupTalk(this);
}
break;
+
+ default:
+ break;
}
Math_SmoothStepToS(&this->actor.world.rot.y, this->actor.yawTowardsPlayer, 0xA, 0x71C, 0xB6);
@@ -271,6 +276,9 @@ void EnHgo_HandlePlayerChoice(EnHgo* this, PlayState* play) {
Message_CloseTextbox(play);
EnHgo_SetupTalk(this);
break;
+
+ default:
+ break;
}
}
}
@@ -285,33 +293,36 @@ s32 EnHgo_HandleCsAction(EnHgo* this, PlayState* play) {
switch (play->csCtx.actorCues[cueChannel]->id) {
case 1:
this->animIndex = HGO_ANIM_ARMS_FOLDED;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HGO_ANIM_ARMS_FOLDED);
break;
case 2:
this->actor.draw = EnHgo_Draw;
this->animIndex = HGO_ANIM_ASTONISHED;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HGO_ANIM_ASTONISHED);
break;
case 3:
this->animIndex = HGO_ANIM_KNEEL_DOWN_AND_HUG;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HGO_ANIM_KNEEL_DOWN_AND_HUG);
break;
case 4:
this->animIndex = HGO_ANIM_CONSOLE;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HGO_ANIM_CONSOLE);
break;
case 5:
this->animIndex = HGO_ANIM_CONSOLE_HEAD_UP;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 4);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HGO_ANIM_CONSOLE_HEAD_UP);
break;
case 6:
this->animIndex = HGO_ANIM_REACH_DOWN_TO_LIFT;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 5);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HGO_ANIM_REACH_DOWN_TO_LIFT);
+ break;
+
+ default:
break;
}
} else if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
@@ -328,12 +339,15 @@ s32 EnHgo_HandleCsAction(EnHgo* this, PlayState* play) {
case HGO_ANIM_KNEEL_DOWN_AND_HUG:
this->animIndex = HGO_ANIM_CONSOLE;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HGO_ANIM_CONSOLE);
break;
case HGO_ANIM_REACH_DOWN_TO_LIFT:
this->animIndex = HGO_ANIM_TOSS;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 6);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HGO_ANIM_TOSS);
+
+ default:
+ break;
}
}
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 e07dfb8a9..48f75aa68 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
@@ -6,7 +6,6 @@
#include "z_en_hidden_nuts.h"
#include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h"
-#include "objects/object_hintnuts/object_hintnuts.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_2000000)
@@ -63,15 +62,41 @@ static ColliderCylinderInit sCylinderInit = {
{ 30, 20, 0, { 0, 0, 0 } },
};
-static AnimationHeader* D_80BDC0FC[] = {
- &object_hintnuts_Anim_000168, &object_hintnuts_Anim_0024CC, &object_hintnuts_Anim_0026C4,
- &object_hintnuts_Anim_002894, &object_hintnuts_Anim_002B90, &object_hintnuts_Anim_002F7C,
- &object_hintnuts_Anim_003128, &object_hintnuts_Anim_0029BC, &object_hintnuts_Anim_0024CC,
+typedef enum EnHiddenNutsAnimation {
+ /* 0 */ ENHIDDENNUTS_ANIM_0,
+ /* 1 */ ENHIDDENNUTS_ANIM_1,
+ /* 2 */ ENHIDDENNUTS_ANIM_2,
+ /* 3 */ ENHIDDENNUTS_ANIM_3,
+ /* 4 */ ENHIDDENNUTS_ANIM_4,
+ /* 5 */ ENHIDDENNUTS_ANIM_5,
+ /* 6 */ ENHIDDENNUTS_ANIM_6,
+ /* 7 */ ENHIDDENNUTS_ANIM_7,
+ /* 8 */ ENHIDDENNUTS_ANIM_8,
+ /* 9 */ ENHIDDENNUTS_ANIM_MAX
+} EnHiddenNutsAnimation;
+
+static AnimationHeader* sAnimations[ENHIDDENNUTS_ANIM_MAX] = {
+ &object_hintnuts_Anim_000168, // ENHIDDENNUTS_ANIM_0
+ &object_hintnuts_Anim_0024CC, // ENHIDDENNUTS_ANIM_1
+ &object_hintnuts_Anim_0026C4, // ENHIDDENNUTS_ANIM_2
+ &object_hintnuts_Anim_002894, // ENHIDDENNUTS_ANIM_3
+ &object_hintnuts_Anim_002B90, // ENHIDDENNUTS_ANIM_4
+ &object_hintnuts_Anim_002F7C, // ENHIDDENNUTS_ANIM_5
+ &object_hintnuts_Anim_003128, // ENHIDDENNUTS_ANIM_6
+ &object_hintnuts_Anim_0029BC, // ENHIDDENNUTS_ANIM_7
+ &object_hintnuts_Anim_0024CC, // ENHIDDENNUTS_ANIM_8
};
-u8 D_80BDC120[] = {
- ANIMMODE_ONCE, ANIMMODE_ONCE, ANIMMODE_ONCE, ANIMMODE_LOOP, ANIMMODE_ONCE,
- ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_ONCE, ANIMMODE_LOOP,
+static u8 sAnimationModes[ENHIDDENNUTS_ANIM_MAX] = {
+ ANIMMODE_ONCE, // ENHIDDENNUTS_ANIM_0
+ ANIMMODE_ONCE, // ENHIDDENNUTS_ANIM_1
+ ANIMMODE_ONCE, // ENHIDDENNUTS_ANIM_2
+ ANIMMODE_LOOP, // ENHIDDENNUTS_ANIM_3
+ ANIMMODE_ONCE, // ENHIDDENNUTS_ANIM_4
+ ANIMMODE_LOOP, // ENHIDDENNUTS_ANIM_5
+ ANIMMODE_LOOP, // ENHIDDENNUTS_ANIM_6
+ ANIMMODE_ONCE, // ENHIDDENNUTS_ANIM_7
+ ANIMMODE_ONCE, // ENHIDDENNUTS_ANIM_8
};
void EnHiddenNuts_Init(Actor* thisx, PlayState* play) {
@@ -79,7 +104,7 @@ void EnHiddenNuts_Init(Actor* thisx, PlayState* play) {
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 20.0f);
SkelAnime_Init(play, &this->skelAnime, &object_hintnuts_Skel_0023B8.sh, &object_hintnuts_Anim_0024CC,
- this->jointTable, this->morphTable, 10);
+ this->jointTable, this->morphTable, OBJECT_HINTNUTS_LIMB_MAX);
Actor_SetScale(&this->actor, 0.01f);
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
@@ -88,7 +113,7 @@ void EnHiddenNuts_Init(Actor* thisx, PlayState* play) {
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
this->pathIndex = ENHIDDENNUTS_GET_PATH_INDEX(&this->actor);
- this->switchFlag = ENHIDDENNUTS_GET_SWITCHFLAG(&this->actor);
+ this->switchFlag = ENHIDDENNUTS_GET_SWITCH_FLAG(&this->actor);
if (this->switchFlag == 0x7F) {
this->switchFlag = -1;
@@ -116,27 +141,29 @@ void EnHiddenNuts_Destroy(Actor* thisx, PlayState* play) {
Collider_DestroyCylinder(play, &this->collider);
}
-void func_80BDB1B4(EnHiddenNuts* this, s32 arg1) {
- f32 sp34;
- f32 sp30;
+void EnHiddenNuts_ChangeAnim(EnHiddenNuts* this, s32 animIndex) {
+ f32 startFrame;
+ f32 morphFrames;
- this->unk_220 = arg1;
- sp34 = 0.0f;
- sp30 = -4.0f;
- this->unk_22C = Animation_GetLastFrame(D_80BDC0FC[arg1]);
- if (this->unk_220 == 1) {
- sp34 = this->unk_22C;
- sp30 = 0.0f;
+ this->animIndex = animIndex;
+ startFrame = 0.0f;
+ morphFrames = -4.0f;
+ this->animEndFrame = Animation_GetLastFrame(sAnimations[animIndex]);
+
+ if (this->animIndex == ENHIDDENNUTS_ANIM_1) {
+ startFrame = this->animEndFrame;
+ morphFrames = 0.0f;
}
- Animation_Change(&this->skelAnime, D_80BDC0FC[this->unk_220], 1.0f, sp34, this->unk_22C, D_80BDC120[this->unk_220],
- sp30);
+
+ Animation_Change(&this->skelAnime, sAnimations[this->animIndex], 1.0f, startFrame, this->animEndFrame,
+ sAnimationModes[this->animIndex], morphFrames);
}
void func_80BDB268(EnHiddenNuts* this) {
this->actor.textId = 0x234;
this->unk_228 = 1600.0f;
this->actor.shape.yOffset = 1600.0f;
- func_80BDB1B4(this, 1);
+ EnHiddenNuts_ChangeAnim(this, ENHIDDENNUTS_ANIM_1);
this->unk_21A = 0;
this->actionFunc = func_80BDB2B8;
}
@@ -148,12 +175,12 @@ void func_80BDB2B8(EnHiddenNuts* this, PlayState* play) {
Actor_PlaySfx(&this->actor, NA_SE_EN_NEMURI_SLEEP - SFX_FLAG);
if (player->stateFlags2 & PLAYER_STATE2_8000000) {
- if (this->unk_20A == 0) {
+ if (!this->unk_20A) {
Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR);
- this->unk_20A = 1;
+ this->unk_20A = true;
}
} else {
- this->unk_20A = 0;
+ this->unk_20A = false;
}
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
@@ -183,8 +210,8 @@ void func_80BDB2B8(EnHiddenNuts* this, PlayState* play) {
}
if (!(this->actor.xzDistToPlayer > 120.0f)) {
- if ((play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_SONATA)) {
- play->msgCtx.ocarinaMode = 4;
+ if ((play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_SONATA)) {
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
func_80BDB788(this);
} else if (func_801A5100() == 2) {
func_80BDB788(this);
@@ -263,20 +290,20 @@ void func_80BDB7E8(EnHiddenNuts* this, PlayState* play) {
EffectSsHahen_SpawnBurst(play, &sp3C, 4.0f, 0, 10, 3, 15, HAHEN_OBJECT_DEFAULT, 10, NULL);
Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_UP);
- func_80BDB1B4(this, 7);
+ EnHiddenNuts_ChangeAnim(this, ENHIDDENNUTS_ANIM_7);
this->actionFunc = func_80BDB8F4;
}
void func_80BDB8F4(EnHiddenNuts* this, PlayState* play) {
f32 curFrame = this->skelAnime.curFrame;
- if (this->unk_22C <= curFrame) {
+ if (curFrame >= this->animEndFrame) {
func_80BDB930(this);
}
}
void func_80BDB930(EnHiddenNuts* this) {
- func_80BDB1B4(this, 3);
+ EnHiddenNuts_ChangeAnim(this, ENHIDDENNUTS_ANIM_3);
this->unk_21A = 3;
this->unk_228 = 500.0f;
this->actionFunc = func_80BDB978;
@@ -290,7 +317,7 @@ void func_80BDB978(EnHiddenNuts* this, PlayState* play) {
Actor_PlaySfx(&this->actor, NA_SE_EN_NUT_FAINT);
}
- if (this->unk_22C <= curFrame) {
+ if (curFrame >= this->animEndFrame) {
this->unk_224++;
if (this->unk_224 >= 2) {
func_80BDBA28(this, play);
@@ -301,7 +328,7 @@ void func_80BDB978(EnHiddenNuts* this, PlayState* play) {
void func_80BDBA28(EnHiddenNuts* this, PlayState* play) {
Vec3f sp44;
- func_80BDB1B4(this, 2);
+ EnHiddenNuts_ChangeAnim(this, ENHIDDENNUTS_ANIM_2);
this->unk_228 = 0.0f;
Math_Vec3f_Copy(&sp44, &this->actor.world.pos);
@@ -326,10 +353,10 @@ void func_80BDBA28(EnHiddenNuts* this, PlayState* play) {
void func_80BDBB48(EnHiddenNuts* this, PlayState* play) {
s32 pad[3];
- f32 sp58 = this->skelAnime.curFrame;
+ f32 curFrame = this->skelAnime.curFrame;
WaterBox* sp54;
f32 sp50;
- s16 sp4E = 0;
+ s16 sp4E = false;
Vec3f sp40;
if (WaterBox_GetSurface1(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &sp50, &sp54) &&
@@ -346,23 +373,23 @@ void func_80BDBB48(EnHiddenNuts* this, PlayState* play) {
if (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 5.0f) ||
Animation_OnFrame(&this->skelAnime, 10.0f)) {
Actor_PlaySfx(&this->actor, NA_SE_EV_WALK_WATER);
- sp4E = 1;
+ sp4E = true;
}
}
- if ((sp4E != 0) && (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 5.0f) ||
- Animation_OnFrame(&this->skelAnime, 10.0f))) {
+ if (sp4E && (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 5.0f) ||
+ Animation_OnFrame(&this->skelAnime, 10.0f))) {
Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_WALK);
}
Math_SmoothStepToS(&this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_20C), 1, 0x1388, 0);
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.world.rot.y, 1, 0x3E8, 0);
- if (this->unk_220 == 2) {
- if (this->unk_22C <= sp58) {
+ if (this->animIndex == ENHIDDENNUTS_ANIM_2) {
+ if (curFrame >= this->animEndFrame) {
this->actor.speed = 0.0f;
this->actor.velocity.y = 0.0f;
- func_80BDB1B4(this, 6);
+ EnHiddenNuts_ChangeAnim(this, ENHIDDENNUTS_ANIM_6);
}
} else {
Math_ApproachF(&this->actor.world.pos.x, this->unk_20C.x, 0.5f,
@@ -387,7 +414,7 @@ void func_80BDBE70(EnHiddenNuts* this, PlayState* play) {
if (this->switchFlag >= 0) {
Flags_SetSwitch(play, this->switchFlag);
}
- func_80BDB1B4(this, 8);
+ EnHiddenNuts_ChangeAnim(this, ENHIDDENNUTS_ANIM_8);
this->unk_21A = 5;
this->actionFunc = func_80BDBED4;
}
@@ -396,7 +423,7 @@ void func_80BDBED4(EnHiddenNuts* this, PlayState* play) {
f32 curFrame = this->skelAnime.curFrame;
Vec3f sp38;
- if (this->unk_22C <= curFrame) {
+ if (curFrame >= this->animEndFrame) {
Math_Vec3f_Copy(&sp38, &this->actor.world.pos);
sp38.y = this->actor.floorHeight;
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 03a0a52b7..7df4b5f01 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
@@ -2,12 +2,13 @@
#define Z_EN_HIDDEN_NUTS_H
#include "global.h"
+#include "objects/object_hintnuts/object_hintnuts.h"
struct EnHiddenNuts;
typedef void (*EnHiddenNutsActionFunc)(struct EnHiddenNuts*, PlayState*);
-#define ENHIDDENNUTS_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F)
+#define ENHIDDENNUTS_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
#define ENHIDDENNUTS_GET_PATH_INDEX(thisx) (((thisx)->params >> 7) & 0x1F)
#define ENHIDDENNUTS_PATH_INDEX_NONE 0x1F
@@ -16,8 +17,8 @@ typedef void (*EnHiddenNutsActionFunc)(struct EnHiddenNuts*, PlayState*);
typedef struct EnHiddenNuts {
/* 0x000 */ Actor actor;
/* 0x144 */ SkelAnime skelAnime;
- /* 0x188 */ Vec3s jointTable[10];
- /* 0x1C4 */ Vec3s morphTable[10];
+ /* 0x188 */ Vec3s jointTable[OBJECT_HINTNUTS_LIMB_MAX];
+ /* 0x1C4 */ Vec3s morphTable[OBJECT_HINTNUTS_LIMB_MAX];
/* 0x200 */ EnHiddenNutsActionFunc actionFunc;
/* 0x204 */ Path* path;
/* 0x208 */ s16 unk_208;
@@ -27,11 +28,11 @@ typedef struct EnHiddenNuts {
/* 0x21A */ s16 unk_21A;
/* 0x21C */ s16 switchFlag;
/* 0x21E */ s16 pathIndex;
- /* 0x220 */ s32 unk_220;
+ /* 0x220 */ s32 animIndex;
/* 0x224 */ s16 unk_224;
/* 0x226 */ s16 csId;
/* 0x228 */ f32 unk_228;
- /* 0x22C */ f32 unk_22C;
+ /* 0x22C */ f32 animEndFrame;
/* 0x230 */ UNK_TYPE1 unk230[4];
/* 0x234 */ ColliderCylinder collider;
} EnHiddenNuts; // size = 0x280
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 5ad3e9dcf..86cb7235d 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
@@ -6,7 +6,6 @@
#include "z_en_hint_skb.h"
#include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h"
-#include "objects/object_skb/object_skb.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10)
@@ -126,20 +125,37 @@ static DamageTable sDamageTable = {
/* Powder Keg */ DMG_ENTRY(1, 0xF),
};
-static AnimationInfo sAnimationInfo[] = {
- { &object_skb_Anim_0064E0, 0.96f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
- { &object_skb_Anim_003584, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f },
- { &object_skb_Anim_002190, 0.6f, 0.0f, 0.0f, ANIMMODE_ONCE_INTERP, 4.0f },
- { &object_skb_Anim_002AC8, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f },
- { &object_skb_Anim_00270C, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f },
- { &object_skb_Anim_00697C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
- { &object_skb_Anim_006D90, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
- { &object_skb_Anim_001D1C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
- { &object_skb_Anim_003584, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f },
- { &object_skb_Anim_003584, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -16.0f },
- { &object_skb_Anim_002AC8, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f },
- { &object_skb_Anim_0015EC, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f },
- { &object_skb_Anim_0009E4, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
+typedef enum StalchildHintAnimation {
+ /* 0 */ STALCHILD_HINT_ANIM_WALK,
+ /* 1 */ STALCHILD_HINT_ANIM_STAND_UP_MORPH_1,
+ /* 2 */ STALCHILD_HINT_ANIM_ATTACK,
+ /* 3 */ STALCHILD_HINT_ANIM_STAGGER_MORPH_4,
+ /* 4 */ STALCHILD_HINT_ANIM_COLLAPSE,
+ /* 5 */ STALCHILD_HINT_ANIM_SIT_LAUGH,
+ /* 6 */ STALCHILD_HINT_ANIM_SIT_TAP_TOES,
+ /* 7 */ STALCHILD_HINT_ANIM_SWING_ON_BRANCH,
+ /* 8 */ STALCHILD_HINT_ANIM_STAND_UP_MORPH_8,
+ /* 9 */ STALCHILD_HINT_ANIM_STAND_UP_MORPH_16,
+ /* 10 */ STALCHILD_HINT_ANIM_STAGGER_MORPH_8,
+ /* 11 */ STALCHILD_HINT_ANIM_SALUTE,
+ /* 12 */ STALCHILD_HINT_ANIM_IDLE,
+ /* 13 */ STALCHILD_HINT_ANIM_MAX
+} StalchildHintAnimation;
+
+static AnimationInfo sAnimationInfo[STALCHILD_HINT_ANIM_MAX] = {
+ { &gStalchildWalkAnim, 0.96f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // STALCHILD_HINT_ANIM_WALK
+ { &gStalchildStandUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, // STALCHILD_HINT_ANIM_STAND_UP_MORPH_1
+ { &gStalchildAttackAnim, 0.6f, 0.0f, 0.0f, ANIMMODE_ONCE_INTERP, 4.0f }, // STALCHILD_HINT_ANIM_ATTACK
+ { &gStalchildStaggerAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, // STALCHILD_HINT_ANIM_STAGGER_MORPH_4
+ { &gStalchildCollapseAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, // STALCHILD_HINT_ANIM_COLLAPSE
+ { &gStalchildSitLaughAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // STALCHILD_HINT_ANIM_SIT_LAUGH
+ { &gStalchildSitTapToesAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // STALCHILD_HINT_ANIM_SIT_TAP_TOES
+ { &gStalchildSwingOnBranchAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // STALCHILD_HINT_ANIM_SWING_ON_BRANCH
+ { &gStalchildStandUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // STALCHILD_HINT_ANIM_STAND_UP_MORPH_8
+ { &gStalchildStandUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -16.0f }, // STALCHILD_HINT_ANIM_STAND_UP_MORPH_16
+ { &gStalchildStaggerAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // STALCHILD_HINT_ANIM_STAGGER_MORPH_8
+ { &gStalchildSaluteAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // STALCHILD_HINT_ANIM_SALUTE
+ { &gStalchildIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // STALCHILD_HINT_ANIM_IDLE
};
static InitChainEntry sInitChain[] = {
@@ -152,8 +168,8 @@ void EnHintSkb_Init(Actor* thisx, PlayState* play) {
EnHintSkb* this = THIS;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 36.0f);
- SkelAnime_Init(play, &this->skelAnime, &object_skb_Skel_005EF8, &object_skb_Anim_00697C, this->jointTable,
- this->morphtable, 20);
+ SkelAnime_Init(play, &this->skelAnime, &gStalchildSkel, &gStalchildSitLaughAnim, this->jointTable, this->morphTable,
+ STALCHILD_LIMB_MAX);
Collider_InitJntSph(play, &this->collider);
Collider_SetJntSph(play, &this->collider, &this->actor, &sJntSphInit, this->colliderElement);
CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
@@ -181,7 +197,7 @@ void func_80C1FE20(EnHintSkb* this, PlayState* play) {
}
void func_80C1FE30(EnHintSkb* this) {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, STALCHILD_HINT_ANIM_WALK);
this->actor.speed = 1.6f;
this->actionFunc = func_80C1FE80;
}
@@ -200,7 +216,7 @@ void func_80C1FE80(EnHintSkb* this, PlayState* play) {
void func_80C1FF30(EnHintSkb* this) {
this->collider.base.atFlags &= ~AT_BOUNCED;
this->actor.speed = 0.0f;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, STALCHILD_HINT_ANIM_ATTACK);
this->actionFunc = func_80C1FF88;
}
@@ -224,7 +240,7 @@ void func_80C1FF88(EnHintSkb* this, PlayState* play) {
}
void func_80C2003C(EnHintSkb* this) {
- Animation_Change(&this->skelAnime, &object_skb_Anim_002190, -0.4f, this->skelAnime.curFrame - 1.0f, 0.0f,
+ Animation_Change(&this->skelAnime, &gStalchildAttackAnim, -0.4f, this->skelAnime.curFrame - 1.0f, 0.0f,
ANIMMODE_ONCE_INTERP, 0.0f);
this->collider.base.atFlags &= ~AT_BOUNCED;
this->actionFunc = func_80C200B8;
@@ -261,7 +277,7 @@ void func_80C2016C(EnHintSkb* this, PlayState* play) {
if (this->actor.colChkInfo.health == 0) {
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EN_STALKID_DEAD);
func_80C20484(this);
- } else if (this->skelAnime.animation == &object_skb_Anim_00697C) {
+ } else if (this->skelAnime.animation == &gStalchildSitLaughAnim) {
func_80C1FE0C(this);
} else if (func_80C21414(this)) {
func_80C1FF30(this);
@@ -272,14 +288,14 @@ void func_80C2016C(EnHintSkb* this, PlayState* play) {
}
void func_80C20274(EnHintSkb* this) {
- if (this->skelAnime.animation == &object_skb_Anim_00697C) {
+ if (this->skelAnime.animation == &gStalchildSitLaughAnim) {
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 8);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, STALCHILD_HINT_ANIM_STAND_UP_MORPH_8);
this->actor.gravity = -1.0f;
this->actor.speed = 1.0f;
} else {
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, STALCHILD_HINT_ANIM_STAGGER_MORPH_4);
if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
this->actor.speed = -4.0f;
}
@@ -317,7 +333,7 @@ void func_80C20334(EnHintSkb* this, PlayState* play) {
}
void func_80C20484(EnHintSkb* this) {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 4);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, STALCHILD_HINT_ANIM_COLLAPSE);
this->unk_3E8 |= 4;
if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
this->actor.speed = -6.0f;
@@ -349,7 +365,7 @@ void func_80C20590(EnHintSkb* this, PlayState* play) {
this->drawDmgEffAlpha = 0.0f;
if (this->actor.colChkInfo.health != 0) {
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, STALCHILD_HINT_ANIM_STAGGER_MORPH_4);
Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE);
this->unk_3E8 |= 1;
func_80C20274(this);
@@ -376,7 +392,7 @@ void func_80C2069C(EnHintSkb* this, PlayState* play) {
this->drawDmgEffAlpha = 0.0f;
if (this->actor.colChkInfo.health != 0) {
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, STALCHILD_HINT_ANIM_STAGGER_MORPH_4);
Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE);
this->unk_3E8 |= 1;
func_80C20274(this);
@@ -400,15 +416,15 @@ void func_80C2077C(EnHintSkb* this, PlayState* play) {
this->unk_3DC = 1;
Message_StartTextbox(play, 0x1147, &this->actor);
this->unk_3E6 = 0x1147;
- if (this->skelAnime.animation == &object_skb_Anim_00697C) {
- play->msgCtx.msgMode = 0x44;
+ if (this->skelAnime.animation == &gStalchildSitLaughAnim) {
+ play->msgCtx.msgMode = MSGMODE_PAUSED;
this->actor.speed = 2.4f;
this->actor.gravity = -1.0f;
this->actor.velocity.y = 3.0f;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 8);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, STALCHILD_HINT_ANIM_STAND_UP_MORPH_8);
}
} else {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 11);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, STALCHILD_HINT_ANIM_SALUTE);
Message_StartTextbox(play, 0x1148, &this->actor);
this->unk_3E6 = 0x1148;
}
@@ -449,6 +465,7 @@ void func_80C208D0(EnHintSkb* this, PlayState* play) {
case TEXT_STATE_NONE:
case TEXT_STATE_1:
case TEXT_STATE_CLOSING:
+ default:
break;
}
@@ -463,11 +480,11 @@ void func_80C208D0(EnHintSkb* this, PlayState* play) {
}
}
- if ((this->skelAnime.animation == &object_skb_Anim_003584) &&
+ if ((this->skelAnime.animation == &gStalchildStandUpAnim) &&
Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
Message_StartTextbox(play, 0x1147, &this->actor);
this->unk_3E6 = 0x1147;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, STALCHILD_HINT_ANIM_WALK);
}
}
@@ -542,7 +559,7 @@ void func_80C20C24(EnHintSkb* this, PlayState* play) {
case 0x1147:
Message_StartTextbox(play, 0x1148, &this->actor);
this->unk_3E6 = 0x1148;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 11);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, STALCHILD_HINT_ANIM_SALUTE);
break;
case 0x1148:
@@ -578,6 +595,9 @@ void func_80C20C24(EnHintSkb* this, PlayState* play) {
func_80C2075C(this);
}
break;
+
+ default:
+ break;
}
}
@@ -591,7 +611,7 @@ void func_80C20D64(EnHintSkb* this, PlayState* play) {
this->actor.hintId = TATL_HINT_ID_NONE;
this->actor.textId = 0;
if (this->actionFunc == func_80C1FE80) {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 12);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, STALCHILD_HINT_ANIM_IDLE);
}
func_80C2075C(this);
}
@@ -600,7 +620,7 @@ void func_80C20D64(EnHintSkb* this, PlayState* play) {
this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY);
this->actor.hintId = TATL_HINT_ID_STALCHILD;
this->actor.textId = 0;
- if (this->skelAnime.animation == &object_skb_Anim_00697C) {
+ if (this->skelAnime.animation == &gStalchildSitLaughAnim) {
func_80C1FE0C(this);
} else {
func_80C1FE30(this);
@@ -682,6 +702,7 @@ void func_80C20E90(EnHintSkb* this, PlayState* play) {
this->unk_3E8 |= 1;
func_80C20274(this);
break;
+
case 3:
if (this->actor.colChkInfo.health != 0) {
Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE);
@@ -695,6 +716,7 @@ void func_80C20E90(EnHintSkb* this, PlayState* play) {
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
func_80C20540(this);
break;
+
case 4:
this->drawDmgEffTimer = 40;
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
@@ -702,14 +724,14 @@ void func_80C20E90(EnHintSkb* this, PlayState* play) {
this->drawDmgEffScale = 0.5f;
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE);
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, STALCHILD_HINT_ANIM_STAGGER_MORPH_4);
func_80C2066C(this);
break;
case 12:
case 14:
this->unk_3E8 |= 1;
-
+ // fallthrough
case 15:
if ((player->meleeWeaponAnimation == PLAYER_MWA_RIGHT_SLASH_1H) ||
(player->meleeWeaponAnimation == PLAYER_MWA_LEFT_COMBO_2H) ||
@@ -717,11 +739,11 @@ void func_80C20E90(EnHintSkb* this, PlayState* play) {
(player->meleeWeaponAnimation == PLAYER_MWA_BACKSLASH_LEFT)) {
this->unk_3E8 |= 1;
}
-
+ // fallthrough
case 13:
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE);
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, STALCHILD_HINT_ANIM_STAGGER_MORPH_4);
func_80C20274(this);
break;
@@ -731,6 +753,7 @@ void func_80C20E90(EnHintSkb* this, PlayState* play) {
case 8:
case 9:
case 10:
+ default:
break;
}
}
@@ -850,7 +873,7 @@ s32 EnHintSkb_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3
EnHintSkb* this = THIS;
f32 temp_f10;
- if (limbIndex == 11) {
+ if (limbIndex == STALCHILD_LIMB_HEAD) {
OPEN_DISPS(play->state.gfxCtx);
temp_f10 = fabsf(Math_SinS(play->state.frames * 6000) * 95.0f) + 160.0f;
@@ -859,13 +882,13 @@ s32 EnHintSkb_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3
gDPSetEnvColor(POLY_OPA_DISP++, (s16)temp_f10, (s16)temp_f10, (s16)temp_f10, 255);
CLOSE_DISPS(play->state.gfxCtx);
- } else if (limbIndex == 10) {
+ } else if (limbIndex == STALCHILD_LIMB_RIBCAGE) {
Matrix_MultZero(&this->actor.focus.pos);
- } else if ((limbIndex == 12) && (this->unk_3DE == 1)) {
+ } else if ((limbIndex == STALCHILD_LIMB_LOWER_JAW) && (this->unk_3DE == 1)) {
Matrix_RotateZS(0x71C, MTXMODE_APPLY);
}
- if (((limbIndex == 11) || (limbIndex == 12)) && (this->unk_3E8 & 2)) {
+ if (((limbIndex == STALCHILD_LIMB_HEAD) || (limbIndex == STALCHILD_LIMB_LOWER_JAW)) && (this->unk_3E8 & 2)) {
*dList = NULL;
}
@@ -879,21 +902,26 @@ void EnHintSkb_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s*
if (!(this->unk_3E8 & 8)) {
Collider_UpdateSpheres(limbIndex, &this->collider);
- if ((limbIndex == 11) && (this->unk_3E8 & 1) && !(this->unk_3E8 & 2)) {
+ if ((limbIndex == STALCHILD_LIMB_HEAD) && (this->unk_3E8 & 1) && !(this->unk_3E8 & 2)) {
Actor_SpawnBodyParts(&this->actor, play, 1, dList);
this->unk_3E8 |= 2;
- } else if ((this->unk_3E8 & 4) && !(this->unk_3E8 & 8) && ((limbIndex != 11) || !(this->unk_3E8 & 1)) &&
- (limbIndex != 12)) {
+ } else if ((this->unk_3E8 & 4) && !(this->unk_3E8 & 8) &&
+ ((limbIndex != STALCHILD_LIMB_HEAD) || !(this->unk_3E8 & 1)) &&
+ (limbIndex != STALCHILD_LIMB_LOWER_JAW)) {
Actor_SpawnBodyParts(&this->actor, play, 1, dList);
}
if (this->drawDmgEffTimer != 0) {
- if ((limbIndex == 2) || (limbIndex == 4) || (limbIndex == 5) || (limbIndex == 6) || (limbIndex == 7) ||
- (limbIndex == 8) || (limbIndex == 9) || (limbIndex == 13) || (limbIndex == 14) || (limbIndex == 15) ||
- (limbIndex == 16) || (limbIndex == 17) || (limbIndex == 18)) {
+ if ((limbIndex == STALCHILD_LIMB_PELVIS) || (limbIndex == STALCHILD_LIMB_RIGHT_THIGH) ||
+ (limbIndex == STALCHILD_LIMB_RIGHT_SHIN) || (limbIndex == STALCHILD_LIMB_RIGHT_FOOT) ||
+ (limbIndex == STALCHILD_LIMB_LEFT_THIGH) || (limbIndex == STALCHILD_LIMB_LEFT_SHIN) ||
+ (limbIndex == STALCHILD_LIMB_LEFT_FOOT) || (limbIndex == STALCHILD_LIMB_RIGHT_UPPER_ARM) ||
+ (limbIndex == STALCHILD_LIMB_RIGHT_LOWER_ARM) || (limbIndex == STALCHILD_LIMB_RIGHT_HAND) ||
+ (limbIndex == STALCHILD_LIMB_LEFT_UPPER_ARM) || (limbIndex == STALCHILD_LIMB_LEFT_LOWER_ARM) ||
+ (limbIndex == STALCHILD_LIMB_LEFT_HAND)) {
Matrix_MultZero(&this->bodyPartsPos[this->bodyPartsCount]);
this->bodyPartsCount++;
- } else if ((limbIndex == 11) && !(this->unk_3E8 & 2)) {
+ } else if ((limbIndex == STALCHILD_LIMB_HEAD) && !(this->unk_3E8 & 2)) {
Matrix_MultVec3f(&D_80C21E70, &this->bodyPartsPos[this->bodyPartsCount]);
this->bodyPartsCount++;
}
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 e263b9de0..d29dd7fbf 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
@@ -2,6 +2,7 @@
#define Z_EN_HINT_SKB_H
#include "global.h"
+#include "objects/object_skb/object_skb.h"
struct EnHintSkb;
@@ -37,8 +38,8 @@ typedef struct EnHintSkb {
/* 0x2D4 */ f32 drawDmgEffAlpha;
/* 0x2D8 */ f32 drawDmgEffScale;
/* 0x2DC */ s32 bodyPartsCount;
- /* 0x2E0 */ Vec3s jointTable[20];
- /* 0x358 */ Vec3s morphtable[20];
+ /* 0x2E0 */ Vec3s jointTable[STALCHILD_LIMB_MAX];
+ /* 0x358 */ Vec3s morphTable[STALCHILD_LIMB_MAX];
/* 0x3D0 */ UNK_TYPE1 unk3D0[0xC];
/* 0x3DC */ s16 unk_3DC;
/* 0x3DE */ s16 unk_3DE;
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 95cc793ac..208708c58 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
@@ -56,7 +56,7 @@ void EnHitTag_Init(Actor* thisx, PlayState* play) {
this->actionFunc = EnHitTag_WaitForHit;
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
Collider_UpdateCylinder(&this->actor, &this->collider);
- if (Flags_GetSwitch(play, ENHITTAG_GET_SWITCHFLAG(thisx))) {
+ if (Flags_GetSwitch(play, ENHITTAG_GET_SWITCH_FLAG(thisx))) {
Actor_Kill(&this->actor);
}
}
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 e2effa078..645c95465 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
@@ -7,7 +7,7 @@ struct EnHitTag;
typedef void (*EnHitTagActionFunc)(struct EnHitTag*, PlayState*);
-#define ENHITTAG_GET_SWITCHFLAG(thisx) (((thisx)->params & 0xFE00) >> 9)
+#define ENHITTAG_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0xFE00) >> 9)
typedef struct EnHitTag {
/* 0x000 */ Actor actor;
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 1bb7640dc..eaf49d673 100644
--- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c
+++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c
@@ -40,10 +40,10 @@ void EnHorse_StartReversing(EnHorse* this);
void EnHorse_StartLowJump(EnHorse* this, PlayState* play);
void EnHorse_StartHighJump(EnHorse* this, PlayState* play);
void EnHorse_InitInactive(EnHorse* this);
-void EnHorse_ChangeIdleAnimation(EnHorse* this, s32 anim, f32 morphFrames);
+void EnHorse_ChangeIdleAnimation(EnHorse* this, s32 animIndex, f32 morphFrames);
void EnHorse_ResetIdleAnimation(EnHorse* this);
void EnHorse_StartIdleRidable(EnHorse* this);
-void EnHorse_StartMovingAnimation(EnHorse* this, s32 anim, f32 morphFrames, f32 startFrames);
+void EnHorse_StartMovingAnimation(EnHorse* this, s32 animIndex, f32 morphFrames, f32 startFrames);
void EnHorse_SetFollowAnimation(EnHorse* this, PlayState* play);
void EnHorse_InitIngoHorse(EnHorse* this);
void EnHorse_UpdateIngoHorseAnim(EnHorse* this);
@@ -109,34 +109,56 @@ typedef struct {
/* 0x4 */ RaceWaypoint* waypoints;
} RaceInfo; // size = 0x8
-static AnimationHeader* sEponaAnimations[] = {
- &gEponaIdleAnim,
- &gEponaWhinnyAnim,
- &object_horse_link_child_Anim_005F64,
- &object_horse_link_child_Anim_004DE8,
- &gEponaWalkAnim,
- &gEponaTrotAnim,
- &gEponaGallopAnim,
- &object_horse_link_child_Anim_0035B0,
- &object_horse_link_child_Anim_003D38,
+static AnimationHeader* sEponaAnimations[ENHORSE_ANIM_MAX] = {
+ &gEponaIdleAnim, // ENHORSE_ANIM_IDLE
+ &gEponaWhinnyAnim, // ENHORSE_ANIM_WHINNY
+ &object_horse_link_child_Anim_005F64, // ENHORSE_ANIM_STOPPING
+ &object_horse_link_child_Anim_004DE8, // ENHORSE_ANIM_REARING
+ &gEponaWalkAnim, // ENHORSE_ANIM_WALK
+ &gEponaTrotAnim, // ENHORSE_ANIM_TROT
+ &gEponaGallopAnim, // ENHORSE_ANIM_GALLOP
+ &object_horse_link_child_Anim_0035B0, // ENHORSE_ANIM_LOW_JUMP
+ &object_horse_link_child_Anim_003D38, // ENHORSE_ANIM_HIGH_JUMP
};
-static AnimationHeader* sHniAnimations[] = {
- &object_ha_Anim_00C850, &object_ha_Anim_00CE70, &object_ha_Anim_00B9C8,
- &object_ha_Anim_00B00C, &object_ha_Anim_00D648, &object_ha_Anim_00A650,
- &object_ha_Anim_009208, &object_ha_Anim_009858, &object_ha_Anim_00A05C,
+static AnimationHeader* sHniAnimations[ENHORSE_ANIM_MAX] = {
+ &gHorseIdleAnim, // ENHORSE_ANIM_IDLE
+ &gHorseShakeHeadAnim, // ENHORSE_ANIM_WHINNY
+ &gHorseStopAnim, // ENHORSE_ANIM_STOPPING
+ &gHorseWhinnyAnim, // ENHORSE_ANIM_REARING @TODO: Does not line up
+ &gHorseWalkAnim, // ENHORSE_ANIM_WALK
+ &gHorseTrotAnim, // ENHORSE_ANIM_TROT
+ &gHorseGallopAnim, // ENHORSE_ANIM_GALLOP
+ &gHorseJumpLowAnim, // ENHORSE_ANIM_LOW_JUMP
+ &gHorseJumpHighAnim, // ENHORSE_ANIM_HIGH_JUMP
};
-static AnimationHeader** sAnimationHeaders[] = {
- NULL, NULL, sEponaAnimations, sHniAnimations, sHniAnimations,
+static AnimationHeader** sAnimationHeaders[HORSE_TYPE_MAX] = {
+ NULL, // HORSE_TYPE_EPONA
+ NULL, // HORSE_TYPE_HNI
+ sEponaAnimations, // HORSE_TYPE_2
+ sHniAnimations, // HORSE_TYPE_BANDIT
+ sHniAnimations, // HORSE_TYPE_DONKEY
};
-static f32 sPlaybackSpeeds[] = {
- 2.0f / 3.0f, 2.0f / 3.0f, 3.0f / 3.0f, 3.0f / 3.0f, 3.0f / 3.0f, 3.0f / 3.0f, 3.0f / 3.0f, 2.0f / 3.0f, 2.0f / 3.0f,
+static f32 sPlaybackSpeeds[ENHORSE_ANIM_MAX] = {
+ 2.0f / 3.0f, // ENHORSE_ANIM_IDLE
+ 2.0f / 3.0f, // ENHORSE_ANIM_WHINNY
+ 3.0f / 3.0f, // ENHORSE_ANIM_STOPPING
+ 3.0f / 3.0f, // ENHORSE_ANIM_REARING
+ 3.0f / 3.0f, // ENHORSE_ANIM_WALK
+ 3.0f / 3.0f, // ENHORSE_ANIM_TROT
+ 3.0f / 3.0f, // ENHORSE_ANIM_GALLOP
+ 2.0f / 3.0f, // ENHORSE_ANIM_LOW_JUMP
+ 2.0f / 3.0f, // ENHORSE_ANIM_HIGH_JUMP
};
-static SkeletonHeader* sSkeletonHeaders[] = {
- NULL, NULL, &gEponaSkel, NULL, NULL,
+static SkeletonHeader* sSkeletonHeaders[HORSE_TYPE_MAX] = {
+ NULL, // HORSE_TYPE_EPONA
+ NULL, // HORSE_TYPE_HNI
+ &gEponaSkel, // HORSE_TYPE_2
+ NULL, // HORSE_TYPE_BANDIT
+ NULL, // HORSE_TYPE_DONKEY
};
ActorInit En_Horse_InitVars = {
@@ -571,7 +593,8 @@ void EnHorse_IdleAnimSounds(EnHorse* this, PlayState* play) {
} else {
Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_SANDDUST);
}
- } else if ((this->animIndex == 3) && (this->curFrame > 25.0f) && !(this->stateFlags & ENHORSE_LAND2_SOUND)) {
+ } else if ((this->animIndex == ENHORSE_ANIM_REARING) && (this->curFrame > 25.0f) &&
+ !(this->stateFlags & ENHORSE_LAND2_SOUND)) {
this->stateFlags |= ENHORSE_LAND2_SOUND;
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2);
@@ -715,7 +738,7 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) {
this->type = HORSE_TYPE_DONKEY;
this->unk_528 = 80.0f;
this->boostSpeed = 12;
- if ((this->bankIndex = Object_GetIndex(&play->objectCtx, OBJECT_HA)) < 0) {
+ if ((this->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_HA)) <= OBJECT_SLOT_NONE) {
Actor_Kill(&this->actor);
return;
}
@@ -725,8 +748,8 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) {
this->type = HORSE_TYPE_2;
this->unk_528 = 64.8f;
this->boostSpeed = 15;
- if ((this->bankIndex = Object_GetIndex(&play->objectCtx, OBJECT_HORSE_LINK_CHILD)) < 0) {
- thisx->objBankIndex = Object_Spawn(&play->objectCtx, OBJECT_HORSE_LINK_CHILD);
+ if ((this->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_HORSE_LINK_CHILD)) <= OBJECT_SLOT_NONE) {
+ thisx->objectSlot = Object_SpawnPersistent(&play->objectCtx, OBJECT_HORSE_LINK_CHILD);
Actor_SetObjectDependency(play, &this->actor);
Skin_Init(&play->state, &this->skin, sSkeletonHeaders[this->type], sAnimationHeaders[this->type][0]);
Animation_PlayOnce(&this->skin.skelAnime, sAnimationHeaders[this->type][this->animIndex]);
@@ -737,7 +760,7 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) {
} else if (ENHORSE_IS_BANDIT_TYPE(&this->actor)) {
this->type = HORSE_TYPE_BANDIT;
this->boostSpeed = 12;
- if ((this->bankIndex = Object_GetIndex(&play->objectCtx, OBJECT_HA)) < 0) {
+ if ((this->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_HA)) <= OBJECT_SLOT_NONE) {
Actor_Kill(&this->actor);
return;
}
@@ -837,7 +860,7 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) {
Skin_Init(&play->state, &this->skin, sSkeletonHeaders[this->type], sAnimationHeaders[this->type][0]);
}
- this->animIndex = 0;
+ this->animIndex = ENHORSE_ANIM_IDLE;
this->numBoosts = 6;
this->boostRegenTime = 0;
this->postDrawFunc = NULL;
@@ -925,17 +948,17 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) {
void func_8087D540(Actor* thisx, PlayState* play) {
EnHorse* this = THIS;
- if (Object_IsLoaded(&play->objectCtx, this->bankIndex)) {
- this->actor.objBankIndex = this->bankIndex;
+ if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) {
+ this->actor.objectSlot = this->objectSlot;
Actor_SetObjectDependency(play, &this->actor);
this->actor.update = EnHorse_Update;
if (this->unk_1EC & 1) {
if (this->type == HORSE_TYPE_BANDIT) {
- SkelAnime_InitFlex(play, &this->skin.skelAnime, &object_ha_Skel_008C68, NULL, this->jointTable,
- this->morphTable, OBJECT_HA_1_LIMB_MAX);
+ SkelAnime_InitFlex(play, &this->skin.skelAnime, &gHorseBanditSkel, NULL, this->jointTable,
+ this->morphTable, HORSE_BANDIT_LIMB_MAX);
} else {
- SkelAnime_InitFlex(play, &this->skin.skelAnime, &object_ha_Skel_0150D8, NULL, this->jointTable,
- this->morphTable, OBJECT_HA_2_LIMB_MAX);
+ SkelAnime_InitFlex(play, &this->skin.skelAnime, &gDonkeySkel, NULL, this->jointTable, this->morphTable,
+ DONKEY_LIMB_MAX);
}
} else {
Skin_Init(&play->state, &this->skin, sSkeletonHeaders[this->type], sAnimationHeaders[this->type][0]);
@@ -1901,21 +1924,21 @@ void EnHorse_Inactive(EnHorse* this, PlayState* play) {
}
}
-void EnHorse_PlayIdleAnimation(EnHorse* this, s32 anim, f32 morphFrames, f32 startFrames) {
+void EnHorse_PlayIdleAnimation(EnHorse* this, s32 animIndex, f32 morphFrames, f32 startFrames) {
this->action = ENHORSE_ACTION_IDLE;
this->actor.speed = 0.0f;
- if ((anim != ENHORSE_ANIM_IDLE) && (anim != ENHORSE_ANIM_WHINNY) && (anim != ENHORSE_ANIM_REARING)) {
- anim = ENHORSE_ANIM_IDLE;
+ if ((animIndex != ENHORSE_ANIM_IDLE) && (animIndex != ENHORSE_ANIM_WHINNY) && (animIndex != ENHORSE_ANIM_REARING)) {
+ animIndex = ENHORSE_ANIM_IDLE;
}
- if (sAnimationHeaders[this->type][anim] == NULL) {
- anim = ENHORSE_ANIM_IDLE;
+ if (sAnimationHeaders[this->type][animIndex] == NULL) {
+ animIndex = ENHORSE_ANIM_IDLE;
}
- if (anim != this->animIndex) {
- this->animIndex = anim;
- if (anim == ENHORSE_ANIM_IDLE) {
+ if (this->animIndex != animIndex) {
+ this->animIndex = animIndex;
+ if (animIndex == ENHORSE_ANIM_IDLE) {
this->stateFlags &= ~ENHORSE_SANDDUST_SOUND;
} else {
if (this->animIndex == ENHORSE_ANIM_WHINNY) {
@@ -1943,8 +1966,8 @@ void EnHorse_PlayIdleAnimation(EnHorse* this, s32 anim, f32 morphFrames, f32 sta
}
}
-void EnHorse_ChangeIdleAnimation(EnHorse* this, s32 anim, f32 morphFrames) {
- EnHorse_PlayIdleAnimation(this, anim, morphFrames, this->curFrame);
+void EnHorse_ChangeIdleAnimation(EnHorse* this, s32 animIndex, f32 morphFrames) {
+ EnHorse_PlayIdleAnimation(this, animIndex, morphFrames, this->curFrame);
}
void EnHorse_ResetIdleAnimation(EnHorse* this) {
@@ -2000,16 +2023,16 @@ void EnHorse_Idle(EnHorse* this, PlayState* play) {
}
}
-void EnHorse_StartMovingAnimation(EnHorse* this, s32 anim, f32 morphFrames, f32 startFrames) {
+void EnHorse_StartMovingAnimation(EnHorse* this, s32 animIndex, f32 morphFrames, f32 startFrames) {
this->action = ENHORSE_ACTION_FOLLOW_PLAYER;
this->stateFlags &= ~ENHORSE_TURNING_TO_PLAYER;
- if ((anim != ENHORSE_ANIM_TROT) && (anim != ENHORSE_ANIM_GALLOP) && (anim != ENHORSE_ANIM_WALK)) {
- anim = ENHORSE_ANIM_WALK;
+ if ((animIndex != ENHORSE_ANIM_TROT) && (animIndex != ENHORSE_ANIM_GALLOP) && (animIndex != ENHORSE_ANIM_WALK)) {
+ animIndex = ENHORSE_ANIM_WALK;
}
- if (anim != this->animIndex) {
- this->animIndex = anim;
+ if (this->animIndex != animIndex) {
+ this->animIndex = animIndex;
Animation_Change(&this->skin.skelAnime, sAnimationHeaders[this->type][this->animIndex], 1.0f, startFrames,
Animation_GetLastFrame(sAnimationHeaders[this->type][this->animIndex]), ANIMMODE_ONCE,
morphFrames);
@@ -2020,38 +2043,38 @@ void EnHorse_StartMovingAnimation(EnHorse* this, s32 anim, f32 morphFrames, f32
}
void EnHorse_SetFollowAnimation(EnHorse* this, PlayState* play) {
- s32 anim = ENHORSE_ANIM_WALK;
+ s32 animIndex = ENHORSE_ANIM_WALK;
f32 distToPlayer = Actor_WorldDistXZToActor(&this->actor, &GET_PLAYER(play)->actor);
if (distToPlayer > 400.0f) {
- anim = ENHORSE_ANIM_GALLOP;
+ animIndex = ENHORSE_ANIM_GALLOP;
} else if (!(distToPlayer <= 300.0f) && (distToPlayer <= 400.0f)) {
- anim = ENHORSE_ANIM_TROT;
+ animIndex = ENHORSE_ANIM_TROT;
}
if (this->animIndex == ENHORSE_ANIM_GALLOP) {
if (distToPlayer > 400.0f) {
- anim = ENHORSE_ANIM_GALLOP;
+ animIndex = ENHORSE_ANIM_GALLOP;
} else {
- anim = ENHORSE_ANIM_TROT;
+ animIndex = ENHORSE_ANIM_TROT;
}
} else if (this->animIndex == ENHORSE_ANIM_TROT) {
if (distToPlayer > 400.0f) {
- anim = ENHORSE_ANIM_GALLOP;
+ animIndex = ENHORSE_ANIM_GALLOP;
} else if (distToPlayer < 300.0f) {
- anim = ENHORSE_ANIM_WALK;
+ animIndex = ENHORSE_ANIM_WALK;
} else {
- anim = ENHORSE_ANIM_TROT;
+ animIndex = ENHORSE_ANIM_TROT;
}
} else if (this->animIndex == ENHORSE_ANIM_WALK) {
if (distToPlayer > 300.0f) {
- anim = ENHORSE_ANIM_TROT;
+ animIndex = ENHORSE_ANIM_TROT;
} else {
- anim = ENHORSE_ANIM_WALK;
+ animIndex = ENHORSE_ANIM_WALK;
}
}
- EnHorse_StartMovingAnimation(this, anim, -3.0f, 0.0f);
+ EnHorse_StartMovingAnimation(this, animIndex, -3.0f, 0.0f);
}
void EnHorse_FollowPlayer(EnHorse* this, PlayState* play) {
@@ -2156,7 +2179,7 @@ void EnHorse_InitIngoHorse(EnHorse* this) {
void EnHorse_SetIngoAnimation(s32 animIndex, f32 curFrame, s32 arg2, s16* animIndexOut) {
*animIndexOut = sIngoAnimIndices[animIndex];
- if (arg2 == ENIN_ANIM_1) {
+ if (arg2 == 1) {
if (animIndex == ENHORSE_ANIM_TROT) {
*animIndexOut = ENIN_ANIM_4;
} else if (animIndex == ENHORSE_ANIM_GALLOP) {
@@ -2287,7 +2310,7 @@ void func_80881290(EnHorse* this, PlayState* play) {
void func_80881398(EnHorse* this, PlayState* play) {
Vec3s* jointTable;
f32 y;
- s32 animeUpdated;
+ s32 isAnimFinished;
f32 curFrame;
this->stateFlags |= ENHORSE_JUMPING;
@@ -2295,7 +2318,7 @@ void func_80881398(EnHorse* this, PlayState* play) {
this->actor.speed = 14.0f;
}
- animeUpdated = SkelAnime_Update(&this->skin.skelAnime);
+ isAnimFinished = SkelAnime_Update(&this->skin.skelAnime);
curFrame = this->skin.skelAnime.curFrame;
if (curFrame > 23.0f) {
@@ -2314,8 +2337,8 @@ void func_80881398(EnHorse* this, PlayState* play) {
this->actor.world.pos.y = this->jumpStartY + (y * 0.01f * this->unk_528 * 0.01f);
}
- if (animeUpdated || ((curFrame > 17.0f) &&
- (this->actor.world.pos.y < ((this->actor.floorHeight - this->actor.velocity.y) + 80.0f)))) {
+ if (isAnimFinished || ((curFrame > 17.0f) &&
+ (this->actor.world.pos.y < ((this->actor.floorHeight - this->actor.velocity.y) + 80.0f)))) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_LAND);
} else {
@@ -2468,10 +2491,10 @@ void func_808819D8(EnHorse* this, PlayState* play) {
}
if (GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_3) {
- this->rider->unk488 = 7;
+ this->rider->animIndex2 = ENIN_ANIM2_7;
} else {
EnHorse_SetIngoAnimation(this->animIndex, this->skin.skelAnime.curFrame, this->unk_394 & 1,
- &this->rider->unk488);
+ &this->rider->animIndex2);
}
}
@@ -2963,7 +2986,7 @@ void EnHorse_FleePlayer(EnHorse* this, PlayState* play) {
f32 playerDistToHome;
f32 distToPlayer;
s32 nextAnimIndex = this->animIndex;
- s32 animFinished;
+ s32 isAnimFinished;
s16 yaw;
if (gHorsePlayedEponasSong || (this->type == HORSE_TYPE_HNI)) {
@@ -3042,7 +3065,7 @@ void EnHorse_FleePlayer(EnHorse* this, PlayState* play) {
this->actor.shape.rot.y = this->actor.world.rot.y;
}
- animFinished = SkelAnime_Update(&this->skin.skelAnime);
+ isAnimFinished = SkelAnime_Update(&this->skin.skelAnime);
if (((this->animIndex == ENHORSE_ANIM_IDLE) || (this->animIndex == ENHORSE_ANIM_WHINNY)) &&
((nextAnimIndex == ENHORSE_ANIM_GALLOP) || (nextAnimIndex == ENHORSE_ANIM_TROT) ||
@@ -3055,7 +3078,7 @@ void EnHorse_FleePlayer(EnHorse* this, PlayState* play) {
} else if (this->animIndex == ENHORSE_ANIM_TROT) {
func_8087C178(this);
}
- } else if (animFinished) {
+ } else if (isAnimFinished) {
if (nextAnimIndex == ENHORSE_ANIM_GALLOP) {
func_8087C1C0(this);
} else if (nextAnimIndex == ENHORSE_ANIM_TROT) {
@@ -3424,10 +3447,10 @@ void func_80884E0C(EnHorse* this, PlayState* play) {
this->unk_56C = Math3D_Distance(&this->actor.world.pos, &this->actor.prevPos);
if (((this->unk_550 == 5) || (this->unk_550 == 7)) && (Player_GetMask(play) != PLAYER_MASK_CIRCUS_LEADER)) {
- this->rider->unk488 = 7;
+ this->rider->animIndex2 = ENIN_ANIM2_7;
} else {
EnHorse_SetIngoAnimation(this->animIndex, this->skin.skelAnime.curFrame, this->unk_394 & 1,
- &this->rider->unk488);
+ &this->rider->animIndex2);
}
pos = this->actor.world.pos;
@@ -3500,7 +3523,7 @@ void EnHorse_ObstructMovement(EnHorse* this, PlayState* play, s32 obstacleType,
this->actor.world.pos = this->lastPos;
this->stateFlags |= ENHORSE_OBSTACLE;
if (this->playerControlled == 0) {
- if (this->animIndex != 3) {}
+ if (this->animIndex != ENHORSE_ANIM_REARING) {}
} else if (this->action != ENHORSE_ACTION_MOUNTED_REARING) {
if (this->stateFlags & ENHORSE_JUMPING) {
this->stateFlags &= ~ENHORSE_JUMPING;
diff --git a/src/overlays/actors/ovl_En_Horse/z_en_horse.h b/src/overlays/actors/ovl_En_Horse/z_en_horse.h
index 3cfc1fb54..8213bed6a 100644
--- a/src/overlays/actors/ovl_En_Horse/z_en_horse.h
+++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.h
@@ -93,7 +93,8 @@ typedef enum EnHorseAnimation {
/* 5 */ ENHORSE_ANIM_TROT,
/* 6 */ ENHORSE_ANIM_GALLOP,
/* 7 */ ENHORSE_ANIM_LOW_JUMP,
- /* 8 */ ENHORSE_ANIM_HIGH_JUMP
+ /* 8 */ ENHORSE_ANIM_HIGH_JUMP,
+ /* 9 */ ENHORSE_ANIM_MAX
} EnHorseAnimation;
typedef enum HorseType {
@@ -101,7 +102,8 @@ typedef enum HorseType {
/* 1 */ HORSE_TYPE_HNI,
/* 2 */ HORSE_TYPE_2,
/* 3 */ HORSE_TYPE_BANDIT,
- /* 4 */ HORSE_TYPE_DONKEY // Cremia's donkey
+ /* 4 */ HORSE_TYPE_DONKEY, // Cremia's donkey
+ /* 5 */ HORSE_TYPE_MAX
} HorseType;
#define ENHORSE_PARAM_BANDIT 0x2000
@@ -148,7 +150,7 @@ typedef struct EnHorse {
/* 0x148 */ s32 noInputTimer;
/* 0x14C */ s32 noInputTimerMax;
/* 0x150 */ s32 type;
- /* 0x154 */ s8 bankIndex;
+ /* 0x154 */ s8 objectSlot;
/* 0x158 */ Skin skin;
/* 0x1E8 */ s32 stateFlags;
/* 0x1EC */ s32 unk_1EC;
@@ -206,8 +208,8 @@ typedef struct EnHorse {
/* 0x3E4 */ UNK_TYPE1 unk_3E4[0x4];
/* 0x3E8 */ f32 unk_3E8;
/* 0x3EC */ s16 unk_3EC;
- /* 0x3EE */ Vec3s jointTable[OBJECT_HA_1_LIMB_MAX];
- /* 0x48A */ Vec3s morphTable[OBJECT_HA_1_LIMB_MAX];
+ /* 0x3EE */ Vec3s jointTable[HORSE_BANDIT_LIMB_MAX];
+ /* 0x48A */ Vec3s morphTable[HORSE_BANDIT_LIMB_MAX];
/* 0x528 */ f32 unk_528;
/* 0x52C */ s32 unk_52C;
/* 0x530 */ s32 cueChannel;
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 bba55073b..78d6f8624 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
@@ -19,7 +19,7 @@ void EnHorseLinkChild_Update(Actor* thisx, PlayState* play);
void EnHorseLinkChild_Draw(Actor* thisx, PlayState* play);
void EnHorseLinkChild_ActionFunc0(EnHorseLinkChild* this, PlayState* play);
-void EnHorseLinkChild_SetupWaitForPlayer(EnHorseLinkChild* this, s32 nextAnimIndex);
+void EnHorseLinkChild_SetupWaitForPlayer(EnHorseLinkChild* this, s32 animIndex);
void EnHorseLinkChild_WaitForPlayer(EnHorseLinkChild* this, PlayState* play);
void EnHorseLinkChild_SetupGreetPlayer(EnHorseLinkChild* this);
void EnHorseLinkChild_GreetPlayer(EnHorseLinkChild* this, PlayState* play);
@@ -51,7 +51,7 @@ typedef enum {
/* 5 */ OOT_CHILD_EPONA_ANIM_MAX
} OoTEponaAnimation;
-AnimationHeader* sAnimations[OOT_CHILD_EPONA_ANIM_MAX] = {
+static AnimationHeader* sAnimations[OOT_CHILD_EPONA_ANIM_MAX] = {
&gEponaIdleAnim, // OOT_CHILD_EPONA_ANIM_IDLE
&gEponaWhinnyAnim, // OOT_CHILD_EPONA_ANIM_WHINNY
&gEponaWalkAnim, // OOT_CHILD_EPONA_ANIM_WALK
@@ -221,7 +221,7 @@ void EnHorseLinkChild_Destroy(Actor* thisx, PlayState* play) {
void EnHorseLinkChild_SetupActionFunc0(EnHorseLinkChild* this) {
this->action = OOT_CHILD_EPONA_ACTION_0;
this->animIndex++;
- if (this->animIndex >= ARRAY_COUNT(sAnimPlaySpeeds)) {
+ if (this->animIndex >= OOT_CHILD_EPONA_ANIM_MAX) {
this->animIndex = OOT_CHILD_EPONA_ANIM_IDLE;
}
Animation_PlayOnce(&this->skin.skelAnime, sAnimations[this->animIndex]);
@@ -238,16 +238,16 @@ void EnHorseLinkChild_ActionFunc0(EnHorseLinkChild* this, PlayState* play) {
}
}
-void EnHorseLinkChild_SetupWaitForPlayer(EnHorseLinkChild* this, s32 nextAnimIndex) {
+void EnHorseLinkChild_SetupWaitForPlayer(EnHorseLinkChild* this, s32 animIndex) {
this->action = OOT_CHILD_EPONA_ACTION_WAIT_FOR_PLAYER;
this->actor.speed = 0.0f;
- if ((nextAnimIndex != OOT_CHILD_EPONA_ANIM_IDLE) && (nextAnimIndex != OOT_CHILD_EPONA_ANIM_WHINNY)) {
- nextAnimIndex = OOT_CHILD_EPONA_ANIM_IDLE;
+ if ((animIndex != OOT_CHILD_EPONA_ANIM_IDLE) && (animIndex != OOT_CHILD_EPONA_ANIM_WHINNY)) {
+ animIndex = OOT_CHILD_EPONA_ANIM_IDLE;
}
- if (nextAnimIndex != this->animIndex) {
- this->animIndex = nextAnimIndex;
+ if (this->animIndex != animIndex) {
+ this->animIndex = animIndex;
Animation_Change(&this->skin.skelAnime, sAnimations[this->animIndex], EnHorseLinkChild_GetAnimSpeed(this), 0.0f,
Animation_GetLastFrame(sAnimations[this->animIndex]), ANIMMODE_ONCE, -5.0f);
}
@@ -258,7 +258,7 @@ void EnHorseLinkChild_SetupWaitForPlayer(EnHorseLinkChild* this, s32 nextAnimInd
*/
void EnHorseLinkChild_WaitForPlayer(EnHorseLinkChild* this, PlayState* play) {
f32 distToPlayer = Actor_WorldDistXZToActor(&this->actor, &GET_PLAYER(play)->actor);
- s32 nextAnimIndex;
+ s32 animIndex;
if (SkelAnime_Update(&this->skin.skelAnime)) {
if ((distToPlayer < 1000.0f) && (distToPlayer > 70.0f)) {
@@ -267,13 +267,13 @@ void EnHorseLinkChild_WaitForPlayer(EnHorseLinkChild* this, PlayState* play) {
}
if (this->animIndex == OOT_CHILD_EPONA_ANIM_WHINNY) {
- nextAnimIndex = OOT_CHILD_EPONA_ANIM_IDLE;
+ animIndex = OOT_CHILD_EPONA_ANIM_IDLE;
} else {
- nextAnimIndex = OOT_CHILD_EPONA_ANIM_WHINNY;
+ animIndex = OOT_CHILD_EPONA_ANIM_WHINNY;
}
- if (nextAnimIndex != this->animIndex) {
- this->animIndex = nextAnimIndex;
+ if (this->animIndex != animIndex) {
+ this->animIndex = animIndex;
Animation_Change(&this->skin.skelAnime, sAnimations[this->animIndex], EnHorseLinkChild_GetAnimSpeed(this),
0.0f, Animation_GetLastFrame(sAnimations[this->animIndex]), ANIMMODE_ONCE, -5.0f);
} else {
@@ -297,7 +297,7 @@ void EnHorseLinkChild_SetupGreetPlayer(EnHorseLinkChild* this) {
void EnHorseLinkChild_GreetPlayer(EnHorseLinkChild* this, PlayState* play) {
f32 distToPlayer;
s16 yawTowardPlayerDiff;
- s32 nextAnimIndex;
+ s32 animIndex;
if ((this->animIndex == OOT_CHILD_EPONA_ANIM_GALLOP) || (this->animIndex == OOT_CHILD_EPONA_ANIM_TROT) ||
(this->animIndex == OOT_CHILD_EPONA_ANIM_WALK)) {
@@ -321,13 +321,13 @@ void EnHorseLinkChild_GreetPlayer(EnHorseLinkChild* this, PlayState* play) {
}
if ((distToPlayer < 1000.0f) && (distToPlayer >= 300.0f)) {
- nextAnimIndex = OOT_CHILD_EPONA_ANIM_GALLOP;
+ animIndex = OOT_CHILD_EPONA_ANIM_GALLOP;
this->actor.speed = 6.0f;
} else if ((distToPlayer < 300.0f) && (distToPlayer >= 150.0f)) {
- nextAnimIndex = OOT_CHILD_EPONA_ANIM_TROT;
+ animIndex = OOT_CHILD_EPONA_ANIM_TROT;
this->actor.speed = 4.0f;
} else if ((distToPlayer < 150.0f) && (distToPlayer >= 70.0f)) {
- nextAnimIndex = OOT_CHILD_EPONA_ANIM_WALK;
+ animIndex = OOT_CHILD_EPONA_ANIM_WALK;
this->footstepCounter = 0;
this->actor.speed = 2.0f;
} else {
@@ -335,8 +335,8 @@ void EnHorseLinkChild_GreetPlayer(EnHorseLinkChild* this, PlayState* play) {
return;
}
- if (nextAnimIndex != this->animIndex) {
- this->animIndex = nextAnimIndex;
+ if (this->animIndex != animIndex) {
+ this->animIndex = animIndex;
Animation_Change(&this->skin.skelAnime, sAnimations[this->animIndex], EnHorseLinkChild_GetAnimSpeed(this),
0.0f, Animation_GetLastFrame(sAnimations[this->animIndex]), ANIMMODE_ONCE, -5.0f);
} else {
@@ -394,16 +394,16 @@ void EnHorseLinkChild_LonLonIdle(EnHorseLinkChild* this, PlayState* play) {
Player* player;
f32 distToPlayer;
s32 isAnimFinished;
- s32 nextAnimIndex;
+ s32 animIndex;
func_808DF088(this, play);
player = GET_PLAYER(play);
distToPlayer = Actor_WorldDistXZToActor(&this->actor, &player->actor);
- nextAnimIndex = this->animIndex;
+ animIndex = this->animIndex;
isAnimFinished = SkelAnime_Update(&this->skin.skelAnime);
- if ((isAnimFinished) || (this->animIndex == OOT_CHILD_EPONA_ANIM_WHINNY) ||
+ if (isAnimFinished || (this->animIndex == OOT_CHILD_EPONA_ANIM_WHINNY) ||
(this->animIndex == OOT_CHILD_EPONA_ANIM_IDLE)) {
//! @bug: The carry-over of this flag from OoT was not done correctly
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_ENTERED_ZORA_HALL)) {
@@ -412,55 +412,53 @@ void EnHorseLinkChild_LonLonIdle(EnHorseLinkChild* this, PlayState* play) {
if (Math3D_Distance(&player->actor.world.pos, &this->actor.home.pos) > 250.0f) {
if (distToHome >= 300.0f) {
- nextAnimIndex = OOT_CHILD_EPONA_ANIM_GALLOP;
+ animIndex = OOT_CHILD_EPONA_ANIM_GALLOP;
this->actor.speed = 6.0f;
} else if ((distToHome < 300.0f) && (distToHome >= 150.0f)) {
- nextAnimIndex = OOT_CHILD_EPONA_ANIM_TROT;
+ animIndex = OOT_CHILD_EPONA_ANIM_TROT;
this->actor.speed = 4.0f;
} else if ((distToHome < 150.0f) && (distToHome >= 70.0f)) {
- nextAnimIndex = OOT_CHILD_EPONA_ANIM_WALK;
+ animIndex = OOT_CHILD_EPONA_ANIM_WALK;
this->footstepCounter = 0;
this->actor.speed = 2.0f;
} else {
this->actor.speed = 0.0f;
if (this->animIndex == OOT_CHILD_EPONA_ANIM_IDLE) {
- nextAnimIndex =
- (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_WHINNY : OOT_CHILD_EPONA_ANIM_IDLE;
+ animIndex = (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_WHINNY : OOT_CHILD_EPONA_ANIM_IDLE;
} else {
- nextAnimIndex =
- (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_IDLE : OOT_CHILD_EPONA_ANIM_WHINNY;
+ animIndex = (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_IDLE : OOT_CHILD_EPONA_ANIM_WHINNY;
}
}
} else if (distToPlayer < 200.0f) {
- nextAnimIndex = OOT_CHILD_EPONA_ANIM_GALLOP;
+ animIndex = OOT_CHILD_EPONA_ANIM_GALLOP;
this->actor.speed = 6.0f;
} else if (distToPlayer < 300.0f) {
- nextAnimIndex = OOT_CHILD_EPONA_ANIM_TROT;
+ animIndex = OOT_CHILD_EPONA_ANIM_TROT;
this->actor.speed = 4.0f;
} else if (distToPlayer < 400.0f) {
- nextAnimIndex = OOT_CHILD_EPONA_ANIM_WALK;
+ animIndex = OOT_CHILD_EPONA_ANIM_WALK;
this->footstepCounter = 0;
this->actor.speed = 2.0f;
} else {
this->actor.speed = 0.0f;
if (this->animIndex == OOT_CHILD_EPONA_ANIM_IDLE) {
- nextAnimIndex = (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_WHINNY : OOT_CHILD_EPONA_ANIM_IDLE;
+ animIndex = (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_WHINNY : OOT_CHILD_EPONA_ANIM_IDLE;
} else {
- nextAnimIndex = (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_IDLE : OOT_CHILD_EPONA_ANIM_WHINNY;
+ animIndex = (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_IDLE : OOT_CHILD_EPONA_ANIM_WHINNY;
}
}
} else {
this->actor.speed = 0.0f;
if (this->animIndex == OOT_CHILD_EPONA_ANIM_IDLE) {
- nextAnimIndex = (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_WHINNY : OOT_CHILD_EPONA_ANIM_IDLE;
+ animIndex = (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_WHINNY : OOT_CHILD_EPONA_ANIM_IDLE;
} else {
- nextAnimIndex = (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_IDLE : OOT_CHILD_EPONA_ANIM_WHINNY;
+ animIndex = (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_IDLE : OOT_CHILD_EPONA_ANIM_WHINNY;
}
}
}
- if ((nextAnimIndex != this->animIndex) || (isAnimFinished == true)) {
- this->animIndex = nextAnimIndex;
+ if ((this->animIndex != animIndex) || (isAnimFinished == true)) {
+ this->animIndex = animIndex;
Animation_Change(&this->skin.skelAnime, sAnimations[this->animIndex], EnHorseLinkChild_GetAnimSpeed(this), 0.0f,
Animation_GetLastFrame(sAnimations[this->animIndex]), ANIMMODE_ONCE, -5.0f);
} else {
@@ -526,7 +524,7 @@ void EnHorseLinkChild_SetupActionFunc4(EnHorseLinkChild* this) {
void EnHorseLinkChild_ActionFunc4(EnHorseLinkChild* this, PlayState* play) {
Player* player = GET_PLAYER(play);
f32 distToTargetPos;
- s32 nextAnimIndex;
+ s32 animIndex;
this->timer++;
if (this->timer > 300) {
@@ -551,24 +549,24 @@ void EnHorseLinkChild_ActionFunc4(EnHorseLinkChild* this, PlayState* play) {
if (!this->isReturningHome) {
if (distToTargetPos >= 300.0f) {
- nextAnimIndex = OOT_CHILD_EPONA_ANIM_GALLOP;
+ animIndex = OOT_CHILD_EPONA_ANIM_GALLOP;
this->actor.speed = 6.0f;
} else if (distToTargetPos >= 150.0f) {
- nextAnimIndex = OOT_CHILD_EPONA_ANIM_TROT;
+ animIndex = OOT_CHILD_EPONA_ANIM_TROT;
this->actor.speed = 4.0f;
} else {
- nextAnimIndex = OOT_CHILD_EPONA_ANIM_WALK;
+ animIndex = OOT_CHILD_EPONA_ANIM_WALK;
this->footstepCounter = 0;
this->actor.speed = 2.0f;
}
} else if (distToTargetPos >= 300.0f) {
- nextAnimIndex = OOT_CHILD_EPONA_ANIM_GALLOP;
+ animIndex = OOT_CHILD_EPONA_ANIM_GALLOP;
this->actor.speed = 6.0f;
} else if (distToTargetPos >= 150.0f) {
- nextAnimIndex = OOT_CHILD_EPONA_ANIM_TROT;
+ animIndex = OOT_CHILD_EPONA_ANIM_TROT;
this->actor.speed = 4.0f;
} else if (distToTargetPos >= 70.0f) {
- nextAnimIndex = OOT_CHILD_EPONA_ANIM_WALK;
+ animIndex = OOT_CHILD_EPONA_ANIM_WALK;
this->footstepCounter = 0;
this->actor.speed = 2.0f;
} else {
@@ -576,8 +574,8 @@ void EnHorseLinkChild_ActionFunc4(EnHorseLinkChild* this, PlayState* play) {
return;
}
- if (nextAnimIndex != this->animIndex) {
- this->animIndex = nextAnimIndex;
+ if (this->animIndex != animIndex) {
+ this->animIndex = animIndex;
Animation_Change(&this->skin.skelAnime, sAnimations[this->animIndex], EnHorseLinkChild_GetAnimSpeed(this),
0.0f, Animation_GetLastFrame(sAnimations[this->animIndex]), ANIMMODE_ONCE, -5.0f);
} else {
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 5146f4fcd..ef991495a 100644
--- a/src/overlays/actors/ovl_En_Hs/z_en_hs.c
+++ b/src/overlays/actors/ovl_En_Hs/z_en_hs.c
@@ -74,7 +74,7 @@ void EnHs_Init(Actor* thisx, PlayState* play) {
EnHs* this = THIS;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 36.0f);
- SkelAnime_InitFlex(play, &this->skelAnime, &gHsSkeleton, &gHsIdleAnim, this->jointTable, this->morphTable,
+ SkelAnime_InitFlex(play, &this->skelAnime, &gHsSkel, &gHsIdleAnim, this->jointTable, this->morphTable,
OBJECT_HS_LIMB_MAX);
Animation_PlayLoop(&this->skelAnime, &gHsIdleAnim);
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
@@ -110,7 +110,7 @@ void EnHs_UpdateChickPos(Vec3f* dst, Vec3f src, f32 offset) {
Math_Vec3f_Diff(&src, dst, &diff);
- distance = SQ(diff.x) + SQ(diff.z); // gets un-squared after we check if we are too close
+ distance = SQXZ(diff); // gets un-squared after we check if we are too close
if (SQ(offset) > distance) {
return;
@@ -176,20 +176,20 @@ void func_80953098(EnHs* this, PlayState* play) {
void func_80953180(EnHs* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
switch (play->msgCtx.currentTextId) {
- case 0x33F4: // text: laughing that they are all roosters (!)
- case 0x33F6: // text: Grog regrets not being able to see his chicks reach adult hood
+ case 0x33F4: // laughing that they are all roosters (!)
+ case 0x33F6: // Grog regrets not being able to see his chicks reach adult hood
Message_CloseTextbox(play);
this->actionFunc = func_8095345C;
break;
- case 0x33F7: // text: notice his chicks are grown up, happy, wants to give you bunny hood
+ case 0x33F7: // notice his chicks are grown up, happy, wants to give you bunny hood
this->actor.flags &= ~ACTOR_FLAG_10000;
Message_CloseTextbox(play);
this->actionFunc = func_80953098;
func_80953098(this, play);
break;
- case 0x33F9: // text: laughing that they are all roosters (.)
+ case 0x33F9: // laughing that they are all roosters (.)
this->actor.flags &= ~ACTOR_FLAG_10000;
Message_CloseTextbox(play);
this->actionFunc = func_8095345C;
@@ -341,6 +341,9 @@ s32 EnHs_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po
return false;
}
break;
+
+ default:
+ break;
}
return false;
}
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 bd90f48c1..3006c7bfe 100644
--- a/src/overlays/actors/ovl_En_Ig/z_en_ig.c
+++ b/src/overlays/actors/ovl_En_Ig/z_en_ig.c
@@ -6,7 +6,6 @@
#include "z_en_ig.h"
#include "overlays/actors/ovl_En_Door/z_en_door.h"
-#include "objects/object_dai/object_dai.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10)
@@ -143,17 +142,32 @@ static ColliderSphereInit sSphereInit = {
static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE };
-static AnimationInfoS sAnimationInfo[] = {
- { &object_dai_Anim_0048B4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_dai_Anim_0048B4, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_dai_Anim_005100, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_dai_Anim_005100, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_dai_Anim_0010F8, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
- { &object_dai_Anim_001E44, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_dai_Anim_0014BC, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
- { &object_dai_Anim_003CAC, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
- { &object_dai_Anim_0040E0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_dai_Anim_0040E0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
+typedef enum EnIgAnimation {
+ /* -1 */ ENIG_ANIM_NONE = -1,
+ /* 0 */ ENIG_ANIM_0,
+ /* 1 */ ENIG_ANIM_1,
+ /* 2 */ ENIG_ANIM_2,
+ /* 3 */ ENIG_ANIM_3,
+ /* 4 */ ENIG_ANIM_4,
+ /* 5 */ ENIG_ANIM_5,
+ /* 6 */ ENIG_ANIM_6,
+ /* 7 */ ENIG_ANIM_7,
+ /* 8 */ ENIG_ANIM_8,
+ /* 9 */ ENIG_ANIM_9,
+ /* 10 */ ENIG_ANIM_MAX
+} EnIgAnimation;
+
+static AnimationInfoS sAnimationInfo[ENIG_ANIM_MAX] = {
+ { &object_dai_Anim_0048B4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENIG_ANIM_0
+ { &object_dai_Anim_0048B4, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIG_ANIM_1
+ { &object_dai_Anim_005100, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENIG_ANIM_2
+ { &object_dai_Anim_005100, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIG_ANIM_3
+ { &object_dai_Anim_0010F8, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENIG_ANIM_4
+ { &object_dai_Anim_001E44, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIG_ANIM_5
+ { &object_dai_Anim_0014BC, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENIG_ANIM_6
+ { &object_dai_Anim_003CAC, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENIG_ANIM_7
+ { &object_dai_Anim_0040E0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENIG_ANIM_8
+ { &object_dai_Anim_0040E0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIG_ANIM_9
};
Actor* func_80BF1150(EnIg* this, PlayState* play, u8 actorCat, s16 actorId) {
@@ -204,44 +218,44 @@ EnDoor* func_80BF1200(PlayState* play, s32 arg1) {
return SubS_FindDoor(play, phi_a1);
}
-void func_80BF1258(EnIg* this) {
- this->skelAnime.playSpeed = this->unk_3D4;
+void EnIg_UpdateSkelAnime(EnIg* this) {
+ this->skelAnime.playSpeed = this->animPlaySpeed;
SkelAnime_Update(&this->skelAnime);
}
-s32 func_80BF1284(EnIg* this, s32 arg1) {
- s32 phi_v1 = false;
- s32 ret = false;
+s32 EnIg_ChangeAnim(EnIg* this, s32 animIndex) {
+ s32 changeAnim = false;
+ s32 didAnimChange = false;
- switch (arg1) {
- case 0:
- case 1:
- if ((this->unk_3FC != 0) && (this->unk_3FC != 1)) {
- phi_v1 = true;
+ switch (animIndex) {
+ case ENIG_ANIM_0:
+ case ENIG_ANIM_1:
+ if ((this->animIndex != ENIG_ANIM_0) && (this->animIndex != ENIG_ANIM_1)) {
+ changeAnim = true;
}
break;
- case 2:
- case 3:
- if ((this->unk_3FC != 2) && (this->unk_3FC != 3)) {
- phi_v1 = true;
+ case ENIG_ANIM_2:
+ case ENIG_ANIM_3:
+ if ((this->animIndex != ENIG_ANIM_2) && (this->animIndex != ENIG_ANIM_3)) {
+ changeAnim = true;
}
break;
default:
- if (arg1 != this->unk_3FC) {
- phi_v1 = true;
+ if (this->animIndex != animIndex) {
+ changeAnim = true;
}
break;
}
- if (phi_v1) {
- this->unk_3FC = arg1;
- ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, arg1);
- this->unk_3D4 = this->skelAnime.playSpeed;
+ if (changeAnim) {
+ this->animIndex = animIndex;
+ didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex);
+ this->animPlaySpeed = this->skelAnime.playSpeed;
}
- return ret;
+ return didAnimChange;
}
void func_80BF1354(EnIg* this, PlayState* play) {
@@ -358,16 +372,18 @@ s32 func_80BF17BC(EnIg* this, PlayState* play) {
switch (this->unk_3F6) {
case 0:
- if (func_80BF16C8(this, csId)) {
- case 2:
- case 4:
- if ((this->actor.child != NULL) && (this->actor.child->update != NULL)) {
- Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId)),
- this->actor.child);
- }
- this->unk_3F6++;
- ret = true;
+ if (!func_80BF16C8(this, csId)) {
+ break;
}
+ // fallthrough
+ case 2:
+ case 4:
+ if ((this->actor.child != NULL) && (this->actor.child->update != NULL)) {
+ Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId)),
+ this->actor.child);
+ }
+ this->unk_3F6++;
+ ret = true;
break;
case 1:
@@ -387,6 +403,9 @@ s32 func_80BF17BC(EnIg* this, PlayState* play) {
this->unk_3F6++;
ret = true;
break;
+
+ default:
+ break;
}
return ret;
}
@@ -438,10 +457,10 @@ s32 func_80BF19A0(EnIg* this, PlayState* play) {
void func_80BF1A60(EnIg* this, PlayState* play) {
if (this->unk_3F4 == 0) {
- func_80BF1284(this, 4);
+ EnIg_ChangeAnim(this, ENIG_ANIM_4);
this->unk_3F4++;
} else if ((this->unk_3F4 == 1) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- func_80BF1284(this, 5);
+ EnIg_ChangeAnim(this, ENIG_ANIM_5);
this->unk_3F4++;
}
}
@@ -449,7 +468,7 @@ void func_80BF1A60(EnIg* this, PlayState* play) {
s32 func_80BF1AE0(EnIg* this, PlayState* play) {
switch (this->scheduleResult) {
case 3:
- func_80BF1284(this, 0);
+ EnIg_ChangeAnim(this, ENIG_ANIM_0);
break;
case 10:
@@ -457,7 +476,10 @@ s32 func_80BF1AE0(EnIg* this, PlayState* play) {
case 12:
case 13:
case 14:
- func_80BF1284(this, 2);
+ EnIg_ChangeAnim(this, ENIG_ANIM_2);
+ break;
+
+ default:
break;
}
return true;
@@ -471,8 +493,8 @@ s32 func_80BF1B40(EnIg* this, PlayState* play) {
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)) {
- func_80BF1284(this, 0);
+ if ((this->animIndex == ENIG_ANIM_2) || (this->animIndex == ENIG_ANIM_3)) {
+ EnIg_ChangeAnim(this, ENIG_ANIM_0);
}
if ((temp == 0x28B0) || (temp == 0x28B7)) {
@@ -484,7 +506,10 @@ s32 func_80BF1B40(EnIg* this, PlayState* play) {
} else if (this->unk_3D0 & 0x400) {
this->unk_3D2 = 0;
this->unk_3D0 &= ~0x400;
+
+ //! FAKE:
if (1) {}
+
func_80BF1AE0(this, play);
}
@@ -529,7 +554,7 @@ s32 func_80BF1D78(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) {
s32 sp2C = 0;
if (func_80BF1C44(this, play, scheduleOutput, ACTORCAT_NPC, ACTOR_EN_AN)) {
- func_80BF1284(this, 0);
+ EnIg_ChangeAnim(this, ENIG_ANIM_0);
SubS_SetOfferMode(&this->unk_3D0, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK);
this->unk_3D0 |= 0x20;
this->unk_3D0 |= 0x100;
@@ -575,7 +600,7 @@ s32 func_80BF1DF4(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) {
this->unk_3E2 = sp56 - scheduleOutput->time0;
this->actor.flags &= ~ACTOR_FLAG_TARGETABLE;
this->unk_3D0 |= 0x100;
- func_80BF1284(this, 3);
+ EnIg_ChangeAnim(this, ENIG_ANIM_3);
this->actor.gravity = 0.0f;
ret = true;
}
@@ -626,7 +651,7 @@ s32 func_80BF1FA8(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) {
this->unk_3D0 &= ~0x10;
SubS_SetOfferMode(&this->unk_3D0, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK);
this->unk_3D0 |= 0x100;
- func_80BF1284(this, 2);
+ EnIg_ChangeAnim(this, ENIG_ANIM_2);
this->actor.gravity = -1.0f;
ret = true;
}
@@ -662,7 +687,7 @@ s32 func_80BF219C(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) {
this->actor.home.rot.y += 0x8000;
SubS_SetOfferMode(&this->unk_3D0, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK);
this->unk_3D0 |= 0x100;
- func_80BF1284(this, 1);
+ EnIg_ChangeAnim(this, ENIG_ANIM_1);
break;
case 4:
@@ -670,7 +695,10 @@ s32 func_80BF219C(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) {
this->actor.shape.rot.y = this->actor.world.rot.y;
SubS_SetOfferMode(&this->unk_3D0, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK);
this->unk_3D0 |= 0x100;
- func_80BF1284(this, 8);
+ EnIg_ChangeAnim(this, ENIG_ANIM_8);
+ break;
+
+ default:
break;
}
ret = true;
@@ -710,6 +738,9 @@ s32 func_80BF2368(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) {
case 3:
ret = func_80BF1D78(this, play, scheduleOutput);
break;
+
+ default:
+ break;
}
return ret;
}
@@ -765,6 +796,7 @@ s32 func_80BF25E8(EnIg* this, PlayState* play) {
s32 pad;
SubS_TimePathing_FillKnots(knots, SUBS_TIME_PATHING_ORDER, this->timePath->count + SUBS_TIME_PATHING_ORDER);
+
if (!(this->unk_3D0 & 8)) {
timePathTargetPos = gZeroVec3f;
SubS_TimePathing_Update(this->timePath, &this->timePathProgress, &this->timePathElapsedTime,
@@ -830,11 +862,11 @@ s32 func_80BF293C(EnIg* this, PlayState* play) {
Math_ApproachS(&this->actor.world.rot.y, this->actor.home.rot.y, 3, 0x2AA8);
} else {
this->actor.world.rot.y = this->actor.home.rot.y;
- func_80BF1284(this, 7);
+ EnIg_ChangeAnim(this, ENIG_ANIM_7);
}
- } else if ((this->unk_3FC == 7) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ } else if ((this->animIndex == ENIG_ANIM_7) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
SubS_SetOfferMode(&this->unk_3D0, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK);
- func_80BF1284(this, 9);
+ EnIg_ChangeAnim(this, ENIG_ANIM_9);
}
return true;
}
@@ -868,6 +900,9 @@ void func_80BF2A50(EnIg* this, PlayState* play) {
case 4:
func_80BF2890(this, play);
break;
+
+ default:
+ break;
}
Math_ApproachS(&this->actor.shape.rot.y, this->actor.world.rot.y, 3, 0x2AA8);
}
@@ -916,9 +951,10 @@ void EnIg_Init(Actor* thisx, PlayState* play) {
EnIg* this = THIS;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 28.0f);
- SkelAnime_InitFlex(play, &this->skelAnime, &object_dai_Skel_0130D0, NULL, this->jointTable, this->morphTable, 19);
- this->unk_3FC = -1;
- func_80BF1284(this, 0);
+ SkelAnime_InitFlex(play, &this->skelAnime, &object_dai_Skel_0130D0, NULL, this->jointTable, this->morphTable,
+ OBJECT_DAI_LIMB_MAX);
+ this->animIndex = ENIG_ANIM_NONE;
+ EnIg_ChangeAnim(this, ENIG_ANIM_0);
Collider_InitAndSetCylinder(play, &this->collider1, &this->actor, &sCylinderInit);
Collider_InitAndSetSphere(play, &this->collider2, &this->actor, &sSphereInit);
CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit);
@@ -946,7 +982,7 @@ void EnIg_Update(Actor* thisx, PlayState* play) {
func_80BF1B40(this, play);
if (this->scheduleResult != 0) {
- func_80BF1258(this);
+ EnIg_UpdateSkelAnime(this);
func_80BF13E4(this);
func_80BF15EC(this);
SubS_Offer(&this->actor, play, 60.0f, 30.0f, PLAYER_IA_NONE, this->unk_3D0 & SUBS_OFFER_MODE_MASK);
@@ -960,7 +996,7 @@ s32 EnIg_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po
Gfx** gfx) {
EnIg* this = THIS;
- if (limbIndex == 10) {
+ if (limbIndex == OBJECT_DAI_LIMB_0A) {
*dList = NULL;
}
return false;
@@ -973,7 +1009,7 @@ void EnIg_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
EnIg* this = THIS;
Vec3f sp2C;
- if (limbIndex == 11) {
+ if (limbIndex == OBJECT_DAI_LIMB_0B) {
Matrix_MultVec3f(&D_80BF3528, &this->actor.focus.pos);
Math_Vec3s_Copy(&this->actor.focus.rot, &this->actor.world.rot);
@@ -981,17 +1017,17 @@ void EnIg_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
gSPDisplayList((*gfx)++, object_dai_DL_0087B8);
}
- if (limbIndex == 12) {
+ if (limbIndex == OBJECT_DAI_LIMB_0C) {
gSPDisplayList((*gfx)++, object_dai_DL_0089D8);
}
- if (limbIndex == 9) {
+ if (limbIndex == OBJECT_DAI_LIMB_09) {
gSPDisplayList((*gfx)++, object_dai_DL_008B00);
Matrix_MultVec3f(&D_80BF351C, &sp2C);
Math_Vec3f_ToVec3s(&this->collider2.dim.worldSphere.center, &sp2C);
}
- if (limbIndex == 10) {
+ if (limbIndex == OBJECT_DAI_LIMB_0A) {
Matrix_Get(&this->unk_190);
}
}
@@ -1013,7 +1049,7 @@ void EnIg_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx, Gfx**
stepRot = false;
}
- if (limbIndex == 9) {
+ if (limbIndex == OBJECT_DAI_LIMB_09) {
SubS_UpdateLimb(this->unk_3E8 + 0x4000, this->unk_3EA + this->actor.shape.rot.y + 0x4000, &this->unk_2D4,
&this->unk_2E6, stepRot, overrideRot);
Matrix_Pop();
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 274338a11..71c7c509d 100644
--- a/src/overlays/actors/ovl_En_Ig/z_en_ig.h
+++ b/src/overlays/actors/ovl_En_Ig/z_en_ig.h
@@ -2,6 +2,7 @@
#define Z_EN_IG_H
#include "global.h"
+#include "objects/object_dai/object_dai.h"
struct EnIg;
@@ -38,11 +39,11 @@ typedef struct EnIg {
/* 0x2D4 */ Vec3f unk_2D4;
/* 0x2E0 */ UNK_TYPE1 unk2E0[0x6];
/* 0x2E6 */ Vec3s unk_2E6;
- /* 0x2EC */ Vec3s jointTable[19];
- /* 0x35E */ Vec3s morphTable[19];
+ /* 0x2EC */ Vec3s jointTable[OBJECT_DAI_LIMB_MAX];
+ /* 0x35E */ Vec3s morphTable[OBJECT_DAI_LIMB_MAX];
/* 0x3D0 */ u16 unk_3D0;
/* 0x3D2 */ u16 unk_3D2;
- /* 0x3D4 */ f32 unk_3D4;
+ /* 0x3D4 */ f32 animPlaySpeed;
/* 0x3D8 */ UNK_TYPE1 unk3D8[0x8];
/* 0x3E0 */ s16 unk_3E0;
/* 0x3E2 */ s16 unk_3E2;
@@ -57,7 +58,7 @@ typedef struct EnIg {
/* 0x3F4 */ s16 unk_3F4;
/* 0x3F6 */ s16 unk_3F6;
/* 0x3F8 */ EnIgUnkFunc unk_3F8;
- /* 0x3FC */ s32 unk_3FC;
+ /* 0x3FC */ s32 animIndex;
/* 0x400 */ UNK_TYPE1 unk400[0x8];
/* 0x408 */ s32 unk_408;
} EnIg; // size = 0x40C
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 96ce3db8c..7f3ed6de4 100644
--- a/src/overlays/actors/ovl_En_Ik/z_en_ik.c
+++ b/src/overlays/actors/ovl_En_Ik/z_en_ik.c
@@ -365,15 +365,15 @@ void EnIk_CheckActions(EnIk* this, PlayState* play) {
}
void EnIk_SetupIdle(EnIk* this) {
- f32 frameCount = Animation_GetLastFrame(&gIronKnuckleHorizontalAttackAnim);
+ f32 endFrame = Animation_GetLastFrame(&gIronKnuckleHorizontalAttackAnim);
if (this->drawArmorFlags != 0) {
this->timer = 10;
} else {
this->timer = 0;
}
- Animation_Change(&this->skelAnime, &gIronKnuckleEndHorizontalAttackAnim, 1.0f, frameCount, frameCount,
- ANIMMODE_ONCE, this->timer);
+ Animation_Change(&this->skelAnime, &gIronKnuckleEndHorizontalAttackAnim, 1.0f, endFrame, endFrame, ANIMMODE_ONCE,
+ this->timer);
this->actionFunc = EnIk_Idle;
this->actor.speed = 0.0f;
}
@@ -461,7 +461,7 @@ void EnIk_SetupVerticalAttack(EnIk* this) {
playbackSpeed = 1.2f;
}
Animation_Change(&this->skelAnime, &gIronKnuckleVerticalAttackAnim, playbackSpeed, 0.0f,
- Animation_GetLastFrame(&gIronKnuckleVerticalAttackAnim.common), 3, -4.0f);
+ Animation_GetLastFrame(&gIronKnuckleVerticalAttackAnim.common), ANIMMODE_ONCE_INTERP, -4.0f);
this->timer = 0;
this->blurEffectSpawnLock = -1;
this->actionFunc = EnIk_VerticalAttack;
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 1c0fc091d..54b21b7ba 100644
--- a/src/overlays/actors/ovl_En_In/z_en_in.c
+++ b/src/overlays/actors/ovl_En_In/z_en_in.c
@@ -118,25 +118,25 @@ static DamageTable sDamageTable = {
/* Powder Keg */ DMG_ENTRY(0, 0x0),
};
-static AnimationInfoS sAnimationInfo[] = {
- { &object_in_Anim_001D10, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_in_Anim_001D10, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_in_Anim_014F8C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_in_Anim_014F8C, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_in_Anim_000CB0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_in_Anim_0003B4, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_in_Anim_001BE0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_in_Anim_015918, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_in_Anim_01C0B0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_in_Anim_01C0B0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_in_Anim_01A140, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_in_Anim_01A140, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_in_Anim_01B904, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_in_Anim_01B904, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_in_Anim_01B3C4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_in_Anim_01B3C4, 0.0f, 0, -1, ANIMMODE_ONCE, 0 },
- { &object_in_Anim_01B3C4, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_in_Anim_019EB4, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
+static AnimationInfoS sAnimationInfo[ENIN_ANIM_MAX] = {
+ { &object_in_Anim_001D10, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENIN_ANIM_0
+ { &object_in_Anim_001D10, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIN_ANIM_1
+ { &object_in_Anim_014F8C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENIN_ANIM_2
+ { &object_in_Anim_014F8C, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIN_ANIM_3
+ { &object_in_Anim_000CB0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIN_ANIM_4
+ { &object_in_Anim_0003B4, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIN_ANIM_5
+ { &object_in_Anim_001BE0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIN_ANIM_6
+ { &object_in_Anim_015918, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIN_ANIM_7
+ { &object_in_Anim_01C0B0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENIN_ANIM_8
+ { &object_in_Anim_01C0B0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIN_ANIM_9
+ { &object_in_Anim_01A140, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENIN_ANIM_10
+ { &object_in_Anim_01A140, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIN_ANIM_11
+ { &object_in_Anim_01B904, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENIN_ANIM_12
+ { &object_in_Anim_01B904, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIN_ANIM_13
+ { &object_in_Anim_01B3C4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENIN_ANIM_14
+ { &object_in_Anim_01B3C4, 0.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENIN_ANIM_15
+ { &object_in_Anim_01B3C4, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIN_ANIM_16
+ { &object_in_Anim_019EB4, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENIN_ANIM_17
};
static TrackOptionsSet sTrackOptions = {
@@ -147,20 +147,20 @@ static TrackOptionsSet sTrackOptions = {
};
s32 EnIn_ChangeAnim(SkelAnime* skelAnime, s16 animIndex) {
- s16 frameCount;
- s32 ret = false;
+ s16 endFrame;
+ s32 didAnimChange = false;
- if ((animIndex >= 0) && (animIndex < 18)) {
- ret = true;
- frameCount = sAnimationInfo[animIndex].frameCount;
- if (frameCount < 0) {
- frameCount = Animation_GetLastFrame(sAnimationInfo[animIndex].animation);
+ if ((animIndex > ENIN_ANIM_NONE) && (animIndex < ENIN_ANIM_MAX)) {
+ didAnimChange = true;
+ endFrame = sAnimationInfo[animIndex].frameCount;
+ if (endFrame < 0) {
+ endFrame = Animation_GetLastFrame(sAnimationInfo[animIndex].animation);
}
Animation_Change(skelAnime, sAnimationInfo[animIndex].animation, sAnimationInfo[animIndex].playSpeed,
- sAnimationInfo[animIndex].startFrame, frameCount, sAnimationInfo[animIndex].mode,
+ sAnimationInfo[animIndex].startFrame, endFrame, sAnimationInfo[animIndex].mode,
sAnimationInfo[animIndex].morphFrames);
}
- return ret;
+ return didAnimChange;
}
s32 func_808F3178(EnIn* this, PlayState* play) {
@@ -298,12 +298,19 @@ void func_808F3690(EnIn* this, PlayState* play) {
}
void func_808F374C(EnIn* this, PlayState* play) {
- AnimationHeader* sAnimations[] = {
- &object_in_Anim_015E38, &object_in_Anim_016A60, &object_in_Anim_0177AC, &object_in_Anim_016484,
- &object_in_Anim_0170DC, &object_in_Anim_018240, &object_in_Anim_0187C8, &object_in_Anim_0198A8,
+ AnimationHeader* sAnimations[ENIN_ANIM2_MAX] = {
+ &object_in_Anim_015E38, // ENIN_ANIM2_0
+ &object_in_Anim_016A60, // ENIN_ANIM2_1
+ &object_in_Anim_0177AC, // ENIN_ANIM2_2
+ &object_in_Anim_016484, // ENIN_ANIM2_3
+ &object_in_Anim_0170DC, // ENIN_ANIM2_4
+ &object_in_Anim_018240, // ENIN_ANIM2_5
+ &object_in_Anim_0187C8, // ENIN_ANIM2_6
+ &object_in_Anim_0198A8, // ENIN_ANIM2_7
};
- if (this->skelAnime.animation == &object_in_Anim_016484 || this->skelAnime.animation == &object_in_Anim_0170DC) {
+ if ((this->skelAnime.animation == &object_in_Anim_016484) ||
+ (this->skelAnime.animation == &object_in_Anim_0170DC)) {
if (Animation_OnFrame(&this->skelAnime, 8.0f)) {
Audio_PlaySfx_Randomized(&this->actor.projectedPos, NA_SE_VO_IN_LASH_0, 2);
if (Rand_ZeroOne() < 0.3f) {
@@ -312,14 +319,16 @@ void func_808F374C(EnIn* this, PlayState* play) {
Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_IT_LASH);
}
}
- if (this->skelAnime.animation == &object_in_Anim_0198A8 && Animation_OnFrame(&this->skelAnime, 20.0f)) {
+
+ if ((this->skelAnime.animation == &object_in_Anim_0198A8) && Animation_OnFrame(&this->skelAnime, 20.0f)) {
Actor_PlaySfx(&this->actor, NA_SE_VO_IN_CRY_0);
}
+
if (SkelAnime_Update(&this->skelAnime)) {
- this->unk488 %= ARRAY_COUNT(sAnimations);
- this->unk486 = this->unk488;
- Animation_Change(&this->skelAnime, sAnimations[this->unk488], 1.0f, 0.0f,
- Animation_GetLastFrame(sAnimations[this->unk488]), ANIMMODE_ONCE, -10.0f);
+ this->animIndex2 %= ENIN_ANIM2_MAX;
+ this->unk486 = this->animIndex2;
+ Animation_Change(&this->skelAnime, sAnimations[this->animIndex2], 1.0f, 0.0f,
+ Animation_GetLastFrame(sAnimations[this->animIndex2]), ANIMMODE_ONCE, -10.0f);
}
}
@@ -407,7 +416,7 @@ void func_808F3B40(EnIn* this, PlayState* play) {
this->actor.parent = NULL;
this->actor.flags |= ACTOR_FLAG_10000;
this->actionFunc = func_808F3AD4;
- textId = gSaveContext.save.day != 3 ? 0x3481 : 0x34A4;
+ textId = (gSaveContext.save.day != 3) ? 0x3481 : 0x34A4;
this->actor.textId = textId;
} else {
Actor_OfferGetItem(&this->actor, play, GI_MILK, 500.0f, 100.0f);
@@ -870,7 +879,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
case 0x3475:
SET_WEEKEVENTREG_HORSE_RACE_STATE(WEEKEVENTREG_HORSE_RACE_STATE_START);
- func_800FD750(NA_BGM_HORSE);
+ Environment_ForcePlaySequence(NA_BGM_HORSE);
play->nextEntrance = ENTRANCE(GORMAN_TRACK, 5);
play->transitionType = TRANS_TYPE_FADE_WHITE_FAST;
play->transitionTrigger = TRANS_TRIGGER_START;
@@ -958,6 +967,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
ret = false;
}
break;
+
case 0x347E:
func_808F35D8(this, play);
if (Inventory_HasEmptyBottle()) {
@@ -1166,7 +1176,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
case 0x3475:
SET_WEEKEVENTREG_HORSE_RACE_STATE(WEEKEVENTREG_HORSE_RACE_STATE_START);
- func_800FD750(NA_BGM_HORSE);
+ Environment_ForcePlaySequence(NA_BGM_HORSE);
play->nextEntrance = ENTRANCE(GORMAN_TRACK, 5);
play->transitionType = TRANS_TYPE_FADE_WHITE_FAST;
play->transitionTrigger = TRANS_TRIGGER_START;
@@ -1430,7 +1440,7 @@ void func_808F5A94(EnIn* this, PlayState* play) {
void func_808F5B58(EnIn* this, PlayState* play) {
if (Horse_IsActive(play, &play->actorCtx)) {
- if ((Player_GetMask(play) == PLAYER_MASK_CIRCUS_LEADER && CHECK_WEEKEVENTREG(WEEKEVENTREG_63_40)) ||
+ 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);
@@ -1438,8 +1448,8 @@ void func_808F5B58(EnIn* this, PlayState* play) {
func_808F5728(play, this, 2, &this->unk48C);
}
}
- } else if (Player_GetMask(play) != PLAYER_MASK_CIRCUS_LEADER ||
- (Player_GetMask(play) == PLAYER_MASK_CIRCUS_LEADER && CHECK_WEEKEVENTREG(WEEKEVENTREG_63_40))) {
+ } else if ((Player_GetMask(play) != PLAYER_MASK_CIRCUS_LEADER) ||
+ ((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 {
@@ -1452,7 +1462,7 @@ void func_808F5C98(EnIn* this, PlayState* play) {
if (this->unk4B0 == WEEKEVENTREG_HORSE_RACE_STATE_END) {
this->actionFunc = func_808F5B58;
}
- if ((Player_GetMask(play) == PLAYER_MASK_CIRCUS_LEADER && CHECK_WEEKEVENTREG(WEEKEVENTREG_63_40)) ||
+ 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);
@@ -1484,7 +1494,8 @@ void EnIn_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->actor, sInitChain);
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 30.0f);
- SkelAnime_InitFlex(play, &this->skelAnime, &object_in_Skel_014EA8, NULL, this->jointTable, this->morphTable, 20);
+ SkelAnime_InitFlex(play, &this->skelAnime, &object_in_Skel_014EA8, NULL, this->jointTable, this->morphTable,
+ OBJECT_IN_LIMB_MAX);
EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_0);
Collider_InitCylinder(play, &this->colliderCylinder);
Collider_SetCylinder(play, &this->colliderCylinder, &this->actor, &sCylinderInit);
@@ -1499,7 +1510,7 @@ void EnIn_Init(Actor* thisx, PlayState* play) {
}
if ((type == ENIN_HORSE_RIDER_YELLOW_SHIRT) || (type == ENIN_HORSE_RIDER_BLUE_SHIRT)) {
ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.0f);
- this->unk488 = 1;
+ this->animIndex2 = ENIN_ANIM2_1;
Animation_Change(&this->skelAnime, &object_in_Anim_016A60, 1.0f, 0.0f,
Animation_GetLastFrame(&object_in_Anim_016A60), ANIMMODE_ONCE, 0.0f);
Actor_SetScale(&this->actor, 0.01f);
@@ -1623,41 +1634,41 @@ void func_808F6334(EnIn* this, PlayState* play) {
s32 EnIn_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
EnIn* this = THIS;
s32 pad;
- Gfx* sp50[] = {
- NULL,
- NULL,
- object_in_DL_0149A8,
- object_in_DL_014AE0,
- object_in_DL_014C30,
- object_in_DL_0145D8,
- object_in_DL_014710,
- object_in_DL_014860,
- object_in_DL_014420,
- object_in_DL_012A78,
- object_in_DL_013DE0,
- object_in_DL_013F10,
- object_in_DL_014040,
- object_in_DL_0137A0,
- object_in_DL_0138D0,
- object_in_DL_013A00,
- object_in_DL_012DF8,
- object_in_DL_013670,
- object_in_DL_013540,
- object_in_DL_013440,
+ Gfx* sp50[OBJECT_IN_LIMB_MAX] = {
+ NULL, // OBJECT_IN_LIMB_NONE
+ NULL, // OBJECT_IN_LIMB_01
+ object_in_DL_0149A8, // OBJECT_IN_LIMB_02
+ object_in_DL_014AE0, // OBJECT_IN_LIMB_03
+ object_in_DL_014C30, // OBJECT_IN_LIMB_04
+ object_in_DL_0145D8, // OBJECT_IN_LIMB_05
+ object_in_DL_014710, // OBJECT_IN_LIMB_06
+ object_in_DL_014860, // OBJECT_IN_LIMB_07
+ object_in_DL_014420, // OBJECT_IN_LIMB_08
+ object_in_DL_012A78, // OBJECT_IN_LIMB_09
+ object_in_DL_013DE0, // OBJECT_IN_LIMB_0A
+ object_in_DL_013F10, // OBJECT_IN_LIMB_0B
+ object_in_DL_014040, // OBJECT_IN_LIMB_0C
+ object_in_DL_0137A0, // OBJECT_IN_LIMB_0D
+ object_in_DL_0138D0, // OBJECT_IN_LIMB_0E
+ object_in_DL_013A00, // OBJECT_IN_LIMB_0F
+ object_in_DL_012DF8, // OBJECT_IN_LIMB_10
+ object_in_DL_013670, // OBJECT_IN_LIMB_11
+ object_in_DL_013540, // OBJECT_IN_LIMB_12
+ object_in_DL_013440, // OBJECT_IN_LIMB_13
};
- if ((this->unk23C != 0) && (limbIndex != 16)) {
+ if ((this->unk23C != 0) && (limbIndex != OBJECT_IN_LIMB_10)) {
if (sp50[limbIndex] != NULL) {
*dList = sp50[limbIndex];
}
}
- if ((this->unk4AC & 4) && (limbIndex == 16)) {
+ if ((this->unk4AC & 4) && (limbIndex == OBJECT_IN_LIMB_10)) {
*dList = object_in_DL_01C528;
}
OPEN_DISPS(play->state.gfxCtx);
- if (limbIndex == 16) {
+ if (limbIndex == OBJECT_IN_LIMB_10) {
TexturePtr sp38[] = { object_in_Tex_0035E0, object_in_Tex_004820, object_in_Tex_004C20, object_in_Tex_0043E0 };
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sp38[this->unk482]));
@@ -1668,31 +1679,34 @@ s32 EnIn_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po
CLOSE_DISPS(play->state.gfxCtx);
- if (limbIndex == 16) {
+ if (limbIndex == OBJECT_IN_LIMB_10) {
Matrix_Translate(1500.0f, 0.0f, 0.0f, MTXMODE_APPLY);
Matrix_RotateXS(this->headRot.y, MTXMODE_APPLY);
Matrix_RotateZS(-this->headRot.x, MTXMODE_APPLY);
Matrix_Translate(-1500.0f, 0.0f, 0.0f, MTXMODE_APPLY);
func_808F6334(this, play);
}
- if (limbIndex == 9) {
+
+ if (limbIndex == OBJECT_IN_LIMB_09) {
Matrix_RotateYS(this->torsoRot.y, MTXMODE_APPLY);
Matrix_RotateXS(this->torsoRot.x, MTXMODE_APPLY);
}
- if ((limbIndex == 9) || (limbIndex == 10) || (limbIndex == 13)) {
+
+ if ((limbIndex == OBJECT_IN_LIMB_09) || (limbIndex == OBJECT_IN_LIMB_0A) || (limbIndex == OBJECT_IN_LIMB_0D)) {
rot->y += (s16)(Math_SinS(this->fidgetTableY[limbIndex]) * 200.0f);
rot->z += (s16)(Math_CosS(this->fidgetTableZ[limbIndex]) * 200.0f);
}
+
if (this->unk4AC & 0x40) {
- if (limbIndex == 18) {
+ if (limbIndex == OBJECT_IN_LIMB_12) {
rot->x = 0x1F40;
rot->y = -0x3E8;
rot->z = 0x1D4C;
- } else if (limbIndex == 17) {
+ } else if (limbIndex == OBJECT_IN_LIMB_11) {
rot->x = -0x1F40;
rot->y = 0x3E8;
rot->z = 0x1D4C;
- } else if (limbIndex == 19) {
+ } else if (limbIndex == OBJECT_IN_LIMB_13) {
rot->x = 0;
rot->y = 0x7FFF;
rot->z = -0x2328;
@@ -1706,26 +1720,26 @@ void EnIn_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
Vec3f sp50 = { 1600.0f, 0.0f, 0.0f };
Vec3f sp44 = { 0.0f, 0.0f, 0.0f };
- if (limbIndex == 16) {
+ if (limbIndex == OBJECT_IN_LIMB_10) {
Matrix_MultVec3f(&sp50, &this->unk4B4);
Math_Vec3f_Copy(&this->actor.focus.pos, &this->unk4B4);
}
if (this->unk23D == 0) {
Collider_UpdateSpheres(limbIndex, &this->colliderJntSph);
- if (limbIndex == 4) {
+ if (limbIndex == OBJECT_IN_LIMB_04) {
Matrix_MultVec3f(&sp44, &this->unk248);
}
- if (limbIndex == 7) {
+ if (limbIndex == OBJECT_IN_LIMB_07) {
Matrix_MultVec3f(&sp44, &this->unk254);
}
if (this->unk23C == 0) {
if (!(this->unk4AC & 8)) {
OPEN_DISPS(play->state.gfxCtx);
- if (limbIndex == 12) {
+ if (limbIndex == OBJECT_IN_LIMB_0C) {
gSPDisplayList(POLY_OPA_DISP++, object_in_DL_007A70);
}
- if (limbIndex == 15) {
+ if (limbIndex == OBJECT_IN_LIMB_0F) {
gSPDisplayList(POLY_OPA_DISP++, object_in_DL_007C48);
}
@@ -1736,7 +1750,7 @@ void EnIn_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
if (this->unk4AC & 0x20) {
OPEN_DISPS(play->state.gfxCtx);
- if (limbIndex == 12) {
+ if (limbIndex == OBJECT_IN_LIMB_0C) {
gSPDisplayList(POLY_OPA_DISP++, object_in_DL_007C48);
}
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 c4833568c..ab774606a 100644
--- a/src/overlays/actors/ovl_En_In/z_en_in.h
+++ b/src/overlays/actors/ovl_En_In/z_en_in.h
@@ -16,7 +16,13 @@ typedef enum {
/* 4 */ ENIN_BLUE_SHIRT
} EnInType;
-typedef enum {
+#define ENIN_GET_TYPE(thisx) ((thisx)->params & 0x1FF)
+#define ENIN_GET_PATH_INDEX(thisx) (((thisx)->params & 0x7E00) >> 9) // Only used with ENIN_UNK_TYPE
+
+#define ENIN_PATH_INDEX_NONE 0x3F
+
+typedef enum EnInAnimation {
+ /* -1 */ ENIN_ANIM_NONE = -1,
/* 0 */ ENIN_ANIM_0,
/* 1 */ ENIN_ANIM_1,
/* 2 */ ENIN_ANIM_2,
@@ -34,13 +40,22 @@ typedef enum {
/* 14 */ ENIN_ANIM_14,
/* 15 */ ENIN_ANIM_15,
/* 16 */ ENIN_ANIM_16,
- /* 17 */ ENIN_ANIM_17
+ /* 17 */ ENIN_ANIM_17,
+ /* 18 */ ENIN_ANIM_MAX
} EnInAnimation;
-#define ENIN_GET_TYPE(thisx) ((thisx)->params & 0x1FF)
-#define ENIN_GET_PATH_INDEX(thisx) (((thisx)->params & 0x7E00) >> 9) // Only used with ENIN_UNK_TYPE
-
-#define ENIN_PATH_INDEX_NONE 0x3F
+typedef enum EnInAnimation2 {
+ /* -1 */ ENIN_ANIM2_NONE = -1,
+ /* 0 */ ENIN_ANIM2_0,
+ /* 1 */ ENIN_ANIM2_1,
+ /* 2 */ ENIN_ANIM2_2,
+ /* 3 */ ENIN_ANIM2_3,
+ /* 4 */ ENIN_ANIM2_4,
+ /* 5 */ ENIN_ANIM2_5,
+ /* 6 */ ENIN_ANIM2_6,
+ /* 7 */ ENIN_ANIM2_7,
+ /* 8 */ ENIN_ANIM2_MAX
+} EnInAnimation2;
typedef struct EnIn {
/* 0x000 */ Actor actor;
@@ -70,7 +85,7 @@ typedef struct EnIn {
/* 0x482 */ s16 unk482;
/* 0x484 */ s16 unk484;
/* 0x486 */ s16 unk486;
- /* 0x488 */ s16 unk488;
+ /* 0x488 */ s16 animIndex2;
/* 0x48A */ u16 unk48A;
/* 0x48C */ s32 unk48C;
/* 0x490 */ UNK_TYPE1 unk490[0x4];
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 6a51e9486..9d8667f0a 100644
--- a/src/overlays/actors/ovl_En_Insect/z_en_insect.c
+++ b/src/overlays/actors/ovl_En_Insect/z_en_insect.c
@@ -5,7 +5,6 @@
*/
#include "z_en_insect.h"
-#include "objects/gameplay_keep/gameplay_keep.h"
#define FLAGS 0x00000000
@@ -132,7 +131,7 @@ void EnInsect_Init(Actor* thisx, PlayState* play) {
func_8091A8A0(this);
SkelAnime_Init(play, &this->skelAnime, &gameplay_keep_Skel_0527A0, &gameplay_keep_Anim_05140C, this->jointTable,
- this->morphTable, 24);
+ this->morphTable, BUG_LIMB_MAX);
Animation_Change(&this->skelAnime, &gameplay_keep_Anim_05140C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP_INTERP, 0.0f);
Collider_InitJntSph(play, &this->collider);
Collider_SetJntSph(play, &this->collider, &this->actor, &sJntSphInit, this->colliderElements);
@@ -278,7 +277,9 @@ void func_8091B07C(EnInsect* this, PlayState* play) {
yaw -= 0x2000;
}
+ //! FAKE:
if (play) {}
+
Math_ScaledStepToS(&this->actor.world.rot.y, yaw, 0x7D0);
}
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 4e1f5b762..4fd2985f1 100644
--- a/src/overlays/actors/ovl_En_Insect/z_en_insect.h
+++ b/src/overlays/actors/ovl_En_Insect/z_en_insect.h
@@ -2,6 +2,7 @@
#define Z_EN_INSECT_H
#include "global.h"
+#include "objects/gameplay_keep/gameplay_keep.h"
struct EnInsect;
@@ -16,8 +17,8 @@ typedef struct EnInsect {
/* 0x144 */ ColliderJntSph collider;
/* 0x164 */ ColliderJntSphElement colliderElements[1];
/* 0x1A4 */ SkelAnime skelAnime;
- /* 0x1E8 */ Vec3s jointTable[24];
- /* 0x278 */ Vec3s morphTable[24];
+ /* 0x1E8 */ Vec3s jointTable[BUG_LIMB_MAX];
+ /* 0x278 */ Vec3s morphTable[BUG_LIMB_MAX];
/* 0x308 */ EnInsectActionFunc actionFunc;
/* 0x30C */ u16 unk_30C;
/* 0x30E */ s16 unk_30E;
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 cb5d73093..8efc69c14 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
@@ -209,8 +209,8 @@ void EnInvadepohDemo_DoNothing(EnInvadepohDemo* this, PlayState* play) {
void EnInvadepohDemo_Alien_Init(EnInvadepohDemo* this, PlayState* play) {
Actor_ProcessInitChain(&this->actor, sAlienInitChain);
this->actor.flags = ACTOR_FLAG_10 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_80000000;
- this->objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_UCH);
- if (this->objectIndex < 0) {
+ this->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_UCH);
+ if (this->objectSlot <= OBJECT_SLOT_NONE) {
Actor_Kill(&this->actor);
return;
}
@@ -220,8 +220,8 @@ void EnInvadepohDemo_Alien_Init(EnInvadepohDemo* this, PlayState* play) {
void EnInvadepohDemo_Romani_Init(EnInvadepohDemo* this, PlayState* play) {
Actor_ProcessInitChain(&this->actor, sRomaniInitChain);
- this->objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_MA1);
- if (this->objectIndex < 0) {
+ this->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_MA1);
+ if (this->objectSlot <= OBJECT_SLOT_NONE) {
Actor_Kill(&this->actor);
return;
}
@@ -233,8 +233,8 @@ void EnInvadepohDemo_Cow_Init(EnInvadepohDemo* this, PlayState* play) {
Actor_ProcessInitChain(&this->actor, sCowInitChain);
Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_INVADEPOH_DEMO, 0.0f, 0.0f, 0.0f, 0, 0, 0,
EN_INVADEPOH_DEMO_TYPE_COW_TAIL);
- this->objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_COW);
- if (this->objectIndex < 0) {
+ this->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_COW);
+ if (this->objectSlot <= OBJECT_SLOT_NONE) {
Actor_Kill(&this->actor);
return;
}
@@ -250,8 +250,8 @@ void EnInvadepohDemo_Ufo_Init(EnInvadepohDemo* this, PlayState* play) {
void EnInvadepohDemo_CowTail_Init(EnInvadepohDemo* this, PlayState* play) {
Actor_ProcessInitChain(&this->actor, sCowTailInitChain);
- this->objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_COW);
- if (this->objectIndex < 0) {
+ this->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_COW);
+ if (this->objectSlot <= OBJECT_SLOT_NONE) {
Actor_Kill(&this->actor);
return;
}
@@ -503,8 +503,8 @@ void EnInvadepohDemo_CowTail_Idle(EnInvadepohDemo* this, PlayState* play) {
void EnInvadepohDemo_Alien_WaitForObject(EnInvadepohDemo* this, PlayState* play) {
s32 pad[2];
- if (Object_IsLoaded(&play->objectCtx, this->objectIndex)) {
- this->actor.objBankIndex = this->objectIndex;
+ if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) {
+ this->actor.objectSlot = this->objectSlot;
Actor_SetObjectDependency(play, &this->actor);
this->drawFlags |= DRAW_FLAG_SHOULD_DRAW;
this->actionFunc = EnInvadepohDemo_SelectCueAction;
@@ -517,8 +517,8 @@ void EnInvadepohDemo_Alien_WaitForObject(EnInvadepohDemo* this, PlayState* play)
void EnInvadepohDemo_Romani_WaitForObject(EnInvadepohDemo* this, PlayState* play) {
s32 pad[2];
- if (Object_IsLoaded(&play->objectCtx, this->objectIndex)) {
- this->actor.objBankIndex = this->objectIndex;
+ if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) {
+ this->actor.objectSlot = this->objectSlot;
Actor_SetObjectDependency(play, &this->actor);
this->drawFlags |= DRAW_FLAG_SHOULD_DRAW;
this->actionFunc = EnInvadepohDemo_SelectCueAction;
@@ -531,8 +531,8 @@ void EnInvadepohDemo_Romani_WaitForObject(EnInvadepohDemo* this, PlayState* play
void EnInvadepohDemo_Cow_WaitForObject(EnInvadepohDemo* this, PlayState* play) {
s32 pad[2];
- if (Object_IsLoaded(&play->objectCtx, this->objectIndex)) {
- this->actor.objBankIndex = this->objectIndex;
+ if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) {
+ this->actor.objectSlot = this->objectSlot;
Actor_SetObjectDependency(play, &this->actor);
this->drawFlags |= DRAW_FLAG_SHOULD_DRAW;
this->actionFunc = EnInvadepohDemo_SelectCueAction;
@@ -545,8 +545,8 @@ void EnInvadepohDemo_Cow_WaitForObject(EnInvadepohDemo* this, PlayState* play) {
void EnInvadepohDemo_CowTail_WaitForObject(EnInvadepohDemo* this, PlayState* play) {
s32 pad[2];
- if (Object_IsLoaded(&play->objectCtx, this->objectIndex)) {
- this->actor.objBankIndex = this->objectIndex;
+ if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) {
+ this->actor.objectSlot = this->objectSlot;
Actor_SetObjectDependency(play, &this->actor);
this->drawFlags |= DRAW_FLAG_SHOULD_DRAW;
this->actionFunc = EnInvadepohDemo_CowTail_Idle;
@@ -750,7 +750,7 @@ void EnInvadepohDemo_Ufo_Draw(EnInvadepohDemo* this, PlayState* play) {
CLOSE_DISPS(play->state.gfxCtx);
if (EnInvadepohDemo_Ufo_ShouldDrawLensFlare(play, &flashPos)) {
- func_800F9824(play, &play->envCtx, &play->view, play->state.gfxCtx, flashPos, 20.0f, 9.0f, 0, 0);
+ Environment_DrawLensFlare(play, &play->envCtx, &play->view, play->state.gfxCtx, flashPos, 20.0f, 9.0f, 0, 0);
}
}
@@ -786,7 +786,7 @@ void EnInvadepohDemo_Init(Actor* thisx, PlayState* play) {
this->ufoRotZ = 0;
this->pathIndex = EN_INVADEPOH_DEMO_GET_PATH_INDEX(&this->actor);
this->pointIndex = 0;
- this->objectIndex = -1;
+ this->objectSlot = OBJECT_SLOT_NONE;
sInitFuncs[this->type](this, play);
}
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 ac93078ec..92e35b39f 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
@@ -43,7 +43,7 @@ typedef struct EnInvadepohDemo {
/* 0x154 */ s32 cueId; // "demo_mode"
/* 0x158 */ s32 pathIndex;
/* 0x15C */ s32 pointIndex;
- /* 0x160 */ s32 objectIndex;
+ /* 0x160 */ s32 objectSlot;
/* 0x164 */ s32 drawFlags; // Only has one flag to control whether or not to draw
/* 0x168 */ s32 cueIdOffset;
/* 0x16C */ s16 ufoRotZ;
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 ef64e3954..dcecdac43 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
@@ -75,10 +75,13 @@ void func_80C2590C(EnInvisibleRuppe* this, PlayState* play) {
Audio_PlaySfx(NA_SE_SY_GET_RUPY);
Item_DropCollectible(play, &this->actor.world.pos, 0x8000 | ITEM00_RUPEE_RED);
break;
+
+ default:
+ break;
}
- if (this->unk_190 >= 0) {
- Flags_SetSwitch(play, this->unk_190);
+ if (this->switchFlag >= 0) {
+ Flags_SetSwitch(play, this->switchFlag);
}
this->actionFunc = func_80C259E8;
@@ -93,13 +96,13 @@ void EnInvisibleRuppe_Init(Actor* thisx, PlayState* play) {
s32 pad;
EnInvisibleRuppe* this = THIS;
- this->unk_190 = INVISIBLERUPPE_GET_1FC(&this->actor);
+ this->switchFlag = INVISIBLERUPPE_GET_SWITCH_FLAG(&this->actor);
- if (this->unk_190 == 0x7F) {
- this->unk_190 = -1;
+ if (this->switchFlag == 0x7F) {
+ this->switchFlag = -1;
}
- if ((this->unk_190 >= 0) && Flags_GetSwitch(play, this->unk_190)) {
+ if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) {
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 d703a3511..2257a649a 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
@@ -8,12 +8,12 @@ struct EnInvisibleRuppe;
typedef void (*EnInvisibleRuppeActionFunc)(struct EnInvisibleRuppe*, PlayState*);
#define INVISIBLERUPPE_GET_3(thisx) ((thisx)->params & 3)
-#define INVISIBLERUPPE_GET_1FC(thisx) (((thisx)->params & 0x1FC) >> 2)
+#define INVISIBLERUPPE_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0x1FC) >> 2)
typedef struct EnInvisibleRuppe {
/* 0x000 */ Actor actor;
/* 0x144 */ ColliderCylinder collider;
- /* 0x190 */ s16 unk_190;
+ /* 0x190 */ s16 switchFlag;
/* 0x192 */ s16 unk_192;
/* 0x194 */ EnInvisibleRuppeActionFunc actionFunc;
} EnInvisibleRuppe; // size = 0x198
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 23e19bba2..44967e4bd 100644
--- a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c
+++ b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c
@@ -71,7 +71,7 @@ static EnIshiUnkFunc2 D_8095F6D8[] = { func_8095D804, func_8095DABC };
static EnIshiUnkFunc D_8095F6E0[] = { func_8095DDA8, func_8095DE9C };
-static s16 D_8095F6E8[] = { GAMEPLAY_FIELD_KEEP, OBJECT_ISHI };
+static s16 sObjectIds[] = { GAMEPLAY_FIELD_KEEP, OBJECT_ISHI };
static ColliderCylinderInit sCylinderInit[] = {
{
@@ -173,7 +173,7 @@ s32 func_8095D758(EnIshi* this, PlayState* play, f32 arg2) {
void func_8095D804(Actor* thisx, PlayState* play) {
EnIshi* this = THIS;
s32 i;
- s16 temp;
+ s16 objectId;
Gfx* phi_s4;
Vec3f spC4;
Vec3f spB8;
@@ -184,7 +184,7 @@ void func_8095D804(Actor* thisx, PlayState* play) {
phi_s4 = gSmallRockDL;
}
- temp = D_8095F6E8[ENISHI_GET_8(&this->actor)];
+ objectId = sObjectIds[ENISHI_GET_8(&this->actor)];
for (i = 0; i < ARRAY_COUNT(D_8095F74C); i++) {
spB8.x = ((Rand_ZeroOne() - 0.5f) * 8.0f) + this->actor.world.pos.x;
@@ -207,7 +207,7 @@ void func_8095D804(Actor* thisx, PlayState* play) {
spC4.z += (Rand_ZeroOne() - 0.5f) * 11.0f;
EffectSsKakera_Spawn(play, &spB8, &spC4, &spB8, -420, ((s32)Rand_Next() > 0) ? 65 : 33, 30, 5, 0, D_8095F74C[i],
- 3, 10, 40, -1, temp, phi_s4);
+ 3, 10, 40, -1, objectId, phi_s4);
}
}
@@ -310,7 +310,7 @@ void func_8095DFF0(EnIshi* this, PlayState* play) {
s16 temp_v1_2;
if (temp >= 0) {
- sp3C = Item_DropCollectible(play, &this->actor.world.pos, temp | (ENISHI_GET_FE00(&this->actor) << 8));
+ sp3C = Item_DropCollectible(play, &this->actor.world.pos, temp | (ENISHI_GET_FLAG(&this->actor) << 8));
if (sp3C != NULL) {
Matrix_Push();
Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_NEW);
@@ -399,7 +399,7 @@ void EnIshi_Init(Actor* thisx, PlayState* play) {
Actor_SetScale(&this->actor, D_8095F6B8[sp34]);
func_8095D6E0(&this->actor, play);
- if ((sp34 == 1) && Flags_GetSwitch(play, ENISHI_GET_FE00(&this->actor))) {
+ if ((sp34 == 1) && Flags_GetSwitch(play, ENISHI_GET_FLAG(&this->actor))) {
Actor_Kill(&this->actor);
return;
}
@@ -425,8 +425,8 @@ void EnIshi_Init(Actor* thisx, PlayState* play) {
this->unk_197 |= 1;
}
- this->unk_196 = Object_GetIndex(&play->objectCtx, D_8095F6E8[ENISHI_GET_8(&this->actor)]);
- if (this->unk_196 < 0) {
+ this->objectSlot = Object_GetSlot(&play->objectCtx, sObjectIds[ENISHI_GET_8(&this->actor)]);
+ if (this->objectSlot <= OBJECT_SLOT_NONE) {
Actor_Kill(&this->actor);
return;
}
@@ -446,8 +446,8 @@ void func_8095E5AC(EnIshi* this) {
}
void func_8095E5C0(EnIshi* this, PlayState* play) {
- if (Object_IsLoaded(&play->objectCtx, this->unk_196)) {
- this->actor.objBankIndex = this->unk_196;
+ if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) {
+ this->actor.objectSlot = this->objectSlot;
this->actor.flags &= ~ACTOR_FLAG_10;
if (!ENISHI_GET_8(&this->actor)) {
this->actor.draw = func_8095F61C;
@@ -537,7 +537,7 @@ void func_8095E95C(EnIshi* this, PlayState* play) {
if (Actor_HasNoParent(&this->actor, play)) {
this->actor.room = play->roomCtx.curRoom.num;
if (ENISHI_GET_1(&this->actor) == 1) {
- Flags_SetSwitch(play, ENISHI_GET_FE00(&this->actor));
+ Flags_SetSwitch(play, ENISHI_GET_FLAG(&this->actor));
}
func_8095EA70(this);
func_8095E14C(this);
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 65381f638..fe1898c13 100644
--- a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.h
+++ b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.h
@@ -16,7 +16,7 @@ typedef void (*EnIshiUnkFunc2)(Actor*, PlayState*);
#define ENISHI_GET_70(thisx) (((thisx)->params >> 4) & 7)
#define ENISHI_GET_F0(thisx) (((thisx)->params >> 4) & 0xF)
#define ENISHI_GET_100(thisx) (((thisx)->params >> 8) & 1)
-#define ENISHI_GET_FE00(thisx) (((thisx)->params >> 9) & 0x7F)
+#define ENISHI_GET_FLAG(thisx) (((thisx)->params >> 9) & 0x7F)
typedef struct EnIshi {
/* 0x000 */ Actor actor;
@@ -24,7 +24,7 @@ typedef struct EnIshi {
/* 0x190 */ EnIshiActionFunc actionFunc;
/* 0x194 */ s8 unk_194;
/* 0x195 */ s8 unk_195;
- /* 0x196 */ s8 unk_196;
+ /* 0x196 */ s8 objectSlot;
/* 0x197 */ u8 unk_197;
} EnIshi; // size = 0x198
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 8cf9ce0e9..6bf6b4434 100644
--- a/src/overlays/actors/ovl_En_Ja/z_en_ja.c
+++ b/src/overlays/actors/ovl_En_Ja/z_en_ja.c
@@ -5,7 +5,6 @@
*/
#include "z_en_ja.h"
-#include "objects/object_boj/object_boj.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10)
@@ -89,27 +88,41 @@ static ColliderCylinderInit sCylinderInit = {
static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE };
-static AnimationInfoS sAnimationInfo[] = {
- { &object_boj_Anim_002734, 1.0f, 0, -1, 0, 0 }, { &object_boj_Anim_0033B0, 1.0f, 0, -1, 0, 0 },
- { &object_boj_Anim_002734, 1.0f, 0, -1, 0, -4 }, { &object_boj_Anim_0033B0, 1.0f, 0, -1, 0, -4 },
- { &object_boj_Anim_004078, 1.0f, 0, -1, 0, 0 }, { &object_boj_Anim_005CE4, 1.0f, 0, -1, 0, 0 },
+typedef enum EnJaAnimation {
+ /* -1 */ ENJA_ANIM_NONE = -1,
+ /* 0 */ ENJA_ANIM_0,
+ /* 1 */ ENJA_ANIM_1,
+ /* 2 */ ENJA_ANIM_2,
+ /* 3 */ ENJA_ANIM_3,
+ /* 4 */ ENJA_ANIM_4,
+ /* 5 */ ENJA_ANIM_5,
+ /* 6 */ ENJA_ANIM_MAX
+} EnJaAnimation;
+
+static AnimationInfoS sAnimationInfo[ENJA_ANIM_MAX] = {
+ { &object_boj_Anim_002734, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENJA_ANIM_0
+ { &object_boj_Anim_0033B0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENJA_ANIM_1
+ { &object_boj_Anim_002734, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENJA_ANIM_2
+ { &object_boj_Anim_0033B0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENJA_ANIM_3
+ { &object_boj_Anim_004078, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENJA_ANIM_4
+ { &object_boj_Anim_005CE4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENJA_ANIM_5
};
-void func_80BC1900(EnJa* this) {
- this->skelAnime.playSpeed = this->unk_344;
+void EnJa_UpdateSkelAnime(EnJa* this) {
+ this->skelAnime.playSpeed = this->animPlaySpeed;
SkelAnime_Update(&this->skelAnime);
}
-s32 func_80BC192C(EnJa* this, s32 arg1) {
- s32 ret = false;
+s32 EnJa_ChangeAnim(EnJa* this, s32 animIndex) {
+ s32 didAnimChange = false;
- if (arg1 != this->unk_36C) {
- this->unk_36C = arg1;
- ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, arg1);
- this->unk_344 = this->skelAnime.playSpeed;
+ if (this->animIndex != animIndex) {
+ this->animIndex = animIndex;
+ didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex);
+ this->animPlaySpeed = this->skelAnime.playSpeed;
}
- return ret;
+ return didAnimChange;
}
void func_80BC1984(EnJa* this, PlayState* play) {
@@ -246,7 +259,7 @@ s32 func_80BC1FC8(EnJa* this, PlayState* play, ScheduleOutput* scheduleOutput) {
if (func_80BC1AE0(this, play)) {
SubS_SetOfferMode(&this->unk_340, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK);
this->unk_340 |= 0x10;
- func_80BC192C(this, 5);
+ EnJa_ChangeAnim(this, ENJA_ANIM_5);
func_80BC2EA4(this);
ret = true;
}
@@ -258,9 +271,9 @@ s32 func_80BC203C(EnJa* this, PlayState* play, ScheduleOutput* scheduleOutput) {
if (func_80BC1AE0(this, play)) {
if (ENJA_GET_3(&this->actor) == 0) {
- func_80BC192C(this, 1);
+ EnJa_ChangeAnim(this, ENJA_ANIM_1);
} else {
- func_80BC192C(this, 4);
+ EnJa_ChangeAnim(this, ENJA_ANIM_4);
}
SubS_SetOfferMode(&this->unk_340, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK);
this->actor.shape.shadowDraw = NULL;
@@ -284,6 +297,9 @@ s32 func_80BC20D0(EnJa* this, PlayState* play, ScheduleOutput* scheduleOutput) {
case 2:
ret = func_80BC203C(this, play, scheduleOutput);
break;
+
+ default:
+ break;
}
return ret;
}
@@ -329,8 +345,10 @@ s32* func_80BC2274(EnJa* this, PlayState* play) {
return D_80BC362C;
}
return D_80BC366C;
+
+ default:
+ return D_80BC360C;
}
- return D_80BC360C;
}
void func_80BC22F4(EnJa* this, PlayState* play) {
@@ -348,9 +366,10 @@ void EnJa_Init(Actor* thisx, PlayState* play) {
EnJa* this = THIS;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 18.0f);
- SkelAnime_InitFlex(play, &this->skelAnime, &object_boj_Skel_00C240, NULL, this->jointTable, this->morphTable, 16);
- this->unk_36C = -1;
- func_80BC192C(this, 0);
+ SkelAnime_InitFlex(play, &this->skelAnime, &object_boj_Skel_00C240, NULL, this->jointTable, this->morphTable,
+ OBJECT_BOJ_LIMB_MAX);
+ this->animIndex = ENJA_ANIM_NONE;
+ EnJa_ChangeAnim(this, ENJA_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);
@@ -380,7 +399,7 @@ void EnJa_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
if (this->unk_1D8.unk_00 != 0) {
- func_80BC1900(this);
+ EnJa_UpdateSkelAnime(this);
func_80BC1A68(this);
func_80BC1D70(this, play);
@@ -403,7 +422,7 @@ void EnJa_Update(Actor* thisx, PlayState* play) {
s32 EnJa_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
EnJa* this = THIS;
- if (limbIndex == 15) {
+ if (limbIndex == OBJECT_BOJ_LIMB_0F) {
func_80BC1E40(this, play);
}
return false;
@@ -419,10 +438,10 @@ void EnJa_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
EnJa* this = THIS;
s32 pad2;
- if (limbIndex == 15) {
+ if (limbIndex == OBJECT_BOJ_LIMB_0F) {
Matrix_MultVec3f(&D_80BC3780, &this->actor.focus.pos);
Math_Vec3s_Copy(&this->actor.focus.rot, &this->actor.world.rot);
- } else if ((this->unk_340 & 0x40) && (limbIndex == 11)) {
+ } else if ((this->unk_340 & 0x40) && (limbIndex == OBJECT_BOJ_LIMB_0B)) {
OPEN_DISPS(play->state.gfxCtx);
Matrix_Push();
@@ -437,8 +456,9 @@ void EnJa_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
}
if (this->unk_1D8.unk_00 == 1) {
- if ((limbIndex == 11) && (((this->skelAnime.curFrame >= 0.0f) && (this->skelAnime.curFrame <= 6.0f)) ||
- ((this->skelAnime.curFrame >= 35.0f) && (this->skelAnime.curFrame <= 47.0f)))) {
+ if ((limbIndex == OBJECT_BOJ_LIMB_0B) &&
+ (((this->skelAnime.curFrame >= 0.0f) && (this->skelAnime.curFrame <= 6.0f)) ||
+ ((this->skelAnime.curFrame >= 35.0f) && (this->skelAnime.curFrame <= 47.0f)))) {
OPEN_DISPS(play->state.gfxCtx);
Matrix_Push();
@@ -475,7 +495,7 @@ void EnJa_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
Matrix_Pop();
CLOSE_DISPS(play->state.gfxCtx);
- } else if (limbIndex == 14) {
+ } else if (limbIndex == OBJECT_BOJ_LIMB_0E) {
if ((this->skelAnime.curFrame >= 0.0f) && (this->skelAnime.curFrame <= 18.0f)) {
OPEN_DISPS(play->state.gfxCtx);
@@ -541,8 +561,8 @@ void EnJa_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) {
overrideRot = false;
}
- if (limbIndex != 8) {
- if (limbIndex == 15) {
+ switch (limbIndex) {
+ case OBJECT_BOJ_LIMB_0F:
SubS_UpdateLimb(this->unk_354 + this->unk_358 + 0x4000,
this->unk_356 + this->unk_35A + this->actor.shape.rot.y + 0x4000, &this->unk_1EC,
&this->unk_274, stepRot, overrideRot);
@@ -553,17 +573,22 @@ void EnJa_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) {
Matrix_RotateXS(this->unk_274.x, MTXMODE_APPLY);
Matrix_RotateZS(this->unk_274.z, MTXMODE_APPLY);
Matrix_Push();
- }
- } else {
- SubS_UpdateLimb(this->unk_358 + 0x4000, this->unk_35A + this->actor.shape.rot.y + 0x4000, &this->unk_1F8,
- &this->unk_27A, stepRot, overrideRot);
- Matrix_Pop();
- Matrix_Translate(this->unk_1F8.x, this->unk_1F8.y, this->unk_1F8.z, MTXMODE_NEW);
- Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY);
- Matrix_RotateYS(this->unk_27A.y, MTXMODE_APPLY);
- Matrix_RotateXS(this->unk_27A.x, MTXMODE_APPLY);
- Matrix_RotateZS(this->unk_27A.z, MTXMODE_APPLY);
- Matrix_Push();
+ break;
+
+ case OBJECT_BOJ_LIMB_08:
+ SubS_UpdateLimb(this->unk_358 + 0x4000, this->unk_35A + this->actor.shape.rot.y + 0x4000, &this->unk_1F8,
+ &this->unk_27A, stepRot, overrideRot);
+ Matrix_Pop();
+ Matrix_Translate(this->unk_1F8.x, this->unk_1F8.y, this->unk_1F8.z, MTXMODE_NEW);
+ Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY);
+ Matrix_RotateYS(this->unk_27A.y, MTXMODE_APPLY);
+ Matrix_RotateXS(this->unk_27A.x, MTXMODE_APPLY);
+ Matrix_RotateZS(this->unk_27A.z, MTXMODE_APPLY);
+ Matrix_Push();
+ break;
+
+ default:
+ break;
}
}
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 00746ec63..fcbbf485f 100644
--- a/src/overlays/actors/ovl_En_Ja/z_en_ja.h
+++ b/src/overlays/actors/ovl_En_Ja/z_en_ja.h
@@ -2,6 +2,7 @@
#define Z_EN_JA_H
#include "global.h"
+#include "objects/object_boj/object_boj.h"
struct EnJa;
@@ -37,10 +38,10 @@ typedef struct EnJa {
/* 0x234 */ EnJaStruct unk_234[4];
/* 0x274 */ Vec3s unk_274;
/* 0x27A */ Vec3s unk_27A;
- /* 0x280 */ Vec3s jointTable[16];
- /* 0x2E0 */ Vec3s morphTable[16];
+ /* 0x280 */ Vec3s jointTable[OBJECT_BOJ_LIMB_MAX];
+ /* 0x2E0 */ Vec3s morphTable[OBJECT_BOJ_LIMB_MAX];
/* 0x340 */ u16 unk_340;
- /* 0x344 */ f32 unk_344;
+ /* 0x344 */ f32 animPlaySpeed;
/* 0x348 */ f32 unk_348;
/* 0x34C */ f32 unk_34C;
/* 0x350 */ UNK_TYPE1 unk350[0x4];
@@ -55,7 +56,7 @@ typedef struct EnJa {
/* 0x364 */ s16 unk_364;
/* 0x366 */ s16 unk_366;
/* 0x368 */ void* unk_368;
- /* 0x36C */ s32 unk_36C;
+ /* 0x36C */ s32 animIndex;
/* 0x370 */ UNK_TYPE1 unk_370[4];
/* 0x374 */ s32 prevTalkState;
} EnJa; // size = 0x378
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 314e94d1b..c66c9a355 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
@@ -122,7 +122,7 @@ void EnJcMato_Init(Actor* thisx, PlayState* play) {
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f);
Collider_InitSphere(play, &this->collider);
Collider_SetSphere(play, &this->collider, &this->actor, &sSphereInit);
- this->collider.dim.worldSphere.radius = 0xF;
+ this->collider.dim.worldSphere.radius = 15;
this->actor.colChkInfo.damageTable = &sDamageTable;
Actor_SetScale(&this->actor, 0.008f);
this->hitFlag = false;
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 20be1b6c8..4573bdcf5 100644
--- a/src/overlays/actors/ovl_En_Jg/z_en_jg.c
+++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.c
@@ -34,29 +34,6 @@ s32 EnJg_GetNextTextId(EnJg* this);
s32 EnJg_GetStartingConversationTextId(EnJg* this, PlayState* play);
void EnJg_CheckIfTalkingToPlayerAndHandleFreezeTimer(EnJg* this, PlayState* play);
-typedef enum {
- /* 0 */ EN_JG_ANIM_IDLE,
- /* 1 */ EN_JG_ANIM_WALK,
- /* 2 */ EN_JG_ANIM_WAVING,
- /* 3 */ EN_JG_ANIM_SHAKING_HEAD,
- /* 4 */ EN_JG_ANIM_SURPRISE_START,
- /* 5 */ EN_JG_ANIM_SURPRISE_LOOP,
- /* 6 */ EN_JG_ANIM_ANGRY,
- /* 7 */ EN_JG_ANIM_FROZEN_START,
- /* 8 */ EN_JG_ANIM_FROZEN_LOOP,
- /* 9 */ EN_JG_ANIM_WALK_2,
- /* 10 */ EN_JG_ANIM_TAKING_OUT_DRUM,
- /* 11 */ EN_JG_ANIM_DRUM_IDLE,
- /* 12 */ EN_JG_ANIM_PLAYING_DRUM,
- /* 13 */ EN_JG_ANIM_THINKING,
- /* 14 */ EN_JG_ANIM_REMEMBERING,
- /* 15 */ EN_JG_ANIM_STRONG_REMEMBERING,
- /* 16 */ EN_JG_ANIM_DEPRESSED,
- /* 17 */ EN_JG_ANIM_CUTSCENE_IDLE,
- /* 18 */ EN_JG_ANIM_CRADLE,
- /* 19 */ EN_JG_ANIM_MAX
-} EnJgAnimation;
-
typedef enum {
/* 0 */ EN_JG_ACTION_FIRST_THAW,
/* 1 */ EN_JG_ACTION_SPAWNING,
@@ -133,26 +110,49 @@ static DamageTable sDamageTable = {
/* Powder Keg */ DMG_ENTRY(0, 0x0),
};
-static AnimationInfoS sAnimationInfo[] = {
- { &gGoronElderIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 },
- { &gGoronElderWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 },
- { &gGoronElderWavingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 },
- { &gGoronElderHeadShakeAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 },
- { &gGoronElderSurpriseStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -10 },
- { &gGoronElderSurpriseLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 },
- { &gGoronElderAngryAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 },
- { &gGoronElderSurpriseStartAnim, 2.0f, 0, -1, ANIMMODE_ONCE, 0 },
- { &gGoronElderSurpriseStartAnim, -2.0f, 0, -1, ANIMMODE_ONCE, 0 },
- { &gGoronElderWalkAnim, -1.0f, 0, -1, ANIMMODE_LOOP, -10 },
- { &gGoronElderTakeOutDrumAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
- { &gGoronElderDrumIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &gGoronElderPlayingDrumAnim, 1.0f, 1, 44, ANIMMODE_ONCE, 0 },
- { &gGoronElderThinkingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &gGoronElderRememberingAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
- { &gGoronElderStrongRememberingAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
- { &gGoronElderDepressedAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &gGoronElderIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &gGoronElderCradleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
+typedef enum EnJgAnimation {
+ /* 0 */ EN_JG_ANIM_IDLE,
+ /* 1 */ EN_JG_ANIM_WALK,
+ /* 2 */ EN_JG_ANIM_WAVING,
+ /* 3 */ EN_JG_ANIM_SHAKING_HEAD,
+ /* 4 */ EN_JG_ANIM_SURPRISE_START,
+ /* 5 */ EN_JG_ANIM_SURPRISE_LOOP,
+ /* 6 */ EN_JG_ANIM_ANGRY,
+ /* 7 */ EN_JG_ANIM_FROZEN_START,
+ /* 8 */ EN_JG_ANIM_FROZEN_LOOP,
+ /* 9 */ EN_JG_ANIM_WALK_2,
+ /* 10 */ EN_JG_ANIM_TAKING_OUT_DRUM,
+ /* 11 */ EN_JG_ANIM_DRUM_IDLE,
+ /* 12 */ EN_JG_ANIM_PLAYING_DRUM,
+ /* 13 */ EN_JG_ANIM_THINKING,
+ /* 14 */ EN_JG_ANIM_REMEMBERING,
+ /* 15 */ EN_JG_ANIM_STRONG_REMEMBERING,
+ /* 16 */ EN_JG_ANIM_DEPRESSED,
+ /* 17 */ EN_JG_ANIM_CUTSCENE_IDLE,
+ /* 18 */ EN_JG_ANIM_CRADLE,
+ /* 19 */ EN_JG_ANIM_MAX
+} EnJgAnimation;
+
+static AnimationInfoS sAnimationInfo[EN_JG_ANIM_MAX] = {
+ { &gGoronElderIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 }, // EN_JG_ANIM_IDLE
+ { &gGoronElderWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 }, // EN_JG_ANIM_WALK
+ { &gGoronElderWavingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 }, // EN_JG_ANIM_WAVING
+ { &gGoronElderHeadShakeAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 }, // EN_JG_ANIM_SHAKING_HEAD
+ { &gGoronElderSurpriseStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -10 }, // EN_JG_ANIM_SURPRISE_START
+ { &gGoronElderSurpriseLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 }, // EN_JG_ANIM_SURPRISE_LOOP
+ { &gGoronElderAngryAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 }, // EN_JG_ANIM_ANGRY
+ { &gGoronElderSurpriseStartAnim, 2.0f, 0, -1, ANIMMODE_ONCE, 0 }, // EN_JG_ANIM_FROZEN_START
+ { &gGoronElderSurpriseStartAnim, -2.0f, 0, -1, ANIMMODE_ONCE, 0 }, // EN_JG_ANIM_FROZEN_LOOP
+ { &gGoronElderWalkAnim, -1.0f, 0, -1, ANIMMODE_LOOP, -10 }, // EN_JG_ANIM_WALK_2
+ { &gGoronElderTakeOutDrumAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // EN_JG_ANIM_TAKING_OUT_DRUM
+ { &gGoronElderDrumIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // EN_JG_ANIM_DRUM_IDLE
+ { &gGoronElderPlayingDrumAnim, 1.0f, 1, 44, ANIMMODE_ONCE, 0 }, // EN_JG_ANIM_PLAYING_DRUM
+ { &gGoronElderThinkingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // EN_JG_ANIM_THINKING
+ { &gGoronElderRememberingAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // EN_JG_ANIM_REMEMBERING
+ { &gGoronElderStrongRememberingAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // EN_JG_ANIM_STRONG_REMEMBERING
+ { &gGoronElderDepressedAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // EN_JG_ANIM_DEPRESSED
+ { &gGoronElderIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // EN_JG_ANIM_CUTSCENE_IDLE
+ { &gGoronElderCradleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // EN_JG_ANIM_CRADLE
};
static Vec3f sSfxPos = { 0.0f, 0.0f, 0.0f };
@@ -340,6 +340,9 @@ void EnJg_SetupTalk(EnJg* this, PlayState* play) {
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex);
this->actionFunc = EnJg_Talk;
break;
+
+ default:
+ break;
}
}
@@ -362,7 +365,7 @@ void EnJg_GoronShrineTalk(EnJg* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
if ((this->textId == 0xDCC) || (this->textId == 0xDDD) || (this->textId == 0xDE0)) {
// There is nothing more to say after these lines, so end the current conversation.
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->flags &= ~FLAG_LOOKING_AT_PLAYER;
this->actionFunc = EnJg_GoronShrineIdle;
@@ -417,17 +420,17 @@ void EnJg_GoronShrineCheer(EnJg* this, PlayState* play) {
*/
void EnJg_AlternateTalkOrWalkInPlace(EnJg* this, PlayState* play) {
u8 talkState = Message_GetState(&play->msgCtx);
- s16 currentFrame = this->skelAnime.curFrame;
- s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation);
+ s16 curFrame = this->skelAnime.curFrame;
+ s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation);
if (this->animIndex == EN_JG_ANIM_SURPRISE_START) {
- if (currentFrame == lastFrame) {
+ if (curFrame == endFrame) {
this->animIndex = EN_JG_ANIM_SURPRISE_LOOP;
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex);
}
} else if (this->animIndex == EN_JG_ANIM_SURPRISE_LOOP) {
if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->flags &= ~FLAG_LOOKING_AT_PLAYER;
this->animIndex = EN_JG_ANIM_WALK;
@@ -472,11 +475,11 @@ void EnJg_Walk(EnJg* this, PlayState* play) {
void EnJg_Talk(EnJg* this, PlayState* play) {
u8 talkState = Message_GetState(&play->msgCtx);
- s16 currentFrame = this->skelAnime.curFrame;
- s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation);
+ s16 curFrame = this->skelAnime.curFrame;
+ s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation);
u16 temp;
- if ((this->animIndex == EN_JG_ANIM_SURPRISE_START) && (currentFrame == lastFrame)) {
+ if ((this->animIndex == EN_JG_ANIM_SURPRISE_START) && (curFrame == endFrame)) {
this->animIndex = EN_JG_ANIM_SURPRISE_LOOP;
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex);
}
@@ -485,7 +488,7 @@ void EnJg_Talk(EnJg* this, PlayState* play) {
temp = this->textId;
if ((temp == 0xDB4) || (temp == 0xDB5) || (temp == 0xDC4) || (temp == 0xDC6)) {
// There is nothing more to say after these lines, so end the current conversation.
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->flags &= ~FLAG_LOOKING_AT_PLAYER;
this->actionFunc = EnJg_SetupWalk;
@@ -497,7 +500,7 @@ void EnJg_Talk(EnJg* this, PlayState* play) {
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.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->flags &= ~FLAG_LOOKING_AT_PLAYER;
this->actionFunc = EnJg_SetupWalk;
@@ -511,7 +514,7 @@ void EnJg_Talk(EnJg* this, PlayState* play) {
// To get to this point, the player *has* talked to the Goron Child, but doesn't
// already have the Lullaby or Lullaby Intro. End the current conversation and
// start the cutscene that teaches the Lullaby Intro.
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->flags &= ~FLAG_LOOKING_AT_PLAYER;
this->csId = EnJg_GetCsIdForTeachingLullabyIntro(this);
@@ -542,13 +545,13 @@ void EnJg_SetupWalk(EnJg* this, PlayState* play) {
}
void EnJg_Freeze(EnJg* this, PlayState* play) {
- s16 currentFrame = this->skelAnime.curFrame;
- s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation);
+ s16 curFrame = this->skelAnime.curFrame;
+ s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation);
if (this->action == EN_JG_ACTION_SPAWNING) {
this->action = EN_JG_ACTION_FROZEN_OR_NON_FIRST_THAW;
this->freezeTimer = 1000;
- this->skelAnime.curFrame = lastFrame;
+ this->skelAnime.curFrame = endFrame;
this->icePoly = Actor_Spawn(&play->actorCtx, play, ACTOR_OBJ_ICE_POLY, this->actor.world.pos.x,
this->actor.world.pos.y, this->actor.world.pos.z, this->actor.world.rot.x,
this->actor.world.rot.y, this->actor.world.rot.z, 0xFF50);
@@ -557,7 +560,7 @@ void EnJg_Freeze(EnJg* this, PlayState* play) {
this->actionFunc = EnJg_FrozenIdle;
} else if (this->animIndex == EN_JG_ANIM_FROZEN_START) {
this->action = EN_JG_ACTION_FROZEN_OR_NON_FIRST_THAW;
- if (currentFrame == lastFrame) {
+ if (curFrame == endFrame) {
this->freezeTimer = 1000;
this->icePoly = Actor_Spawn(&play->actorCtx, play, ACTOR_OBJ_ICE_POLY, this->actor.world.pos.x,
this->actor.world.pos.y, this->actor.world.pos.z, this->actor.world.rot.x,
@@ -602,7 +605,7 @@ void EnJg_FrozenIdle(EnJg* this, PlayState* play) {
void EnJg_EndFrozenInteraction(EnJg* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) {
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->actionFunc = EnJg_FrozenIdle;
}
@@ -631,7 +634,7 @@ void EnJg_LullabyIntroCutsceneAction(EnJg* this, PlayState* play) {
switch (play->csCtx.actorCues[cueChannel]->id) {
case 1:
- this->cutsceneAnimIndex = EN_JG_ANIM_CUTSCENE_IDLE;
+ this->csAnimIndex = EN_JG_ANIM_CUTSCENE_IDLE;
if (this->drum != NULL) {
Actor_Kill(this->drum);
this->drum = NULL;
@@ -639,50 +642,49 @@ void EnJg_LullabyIntroCutsceneAction(EnJg* this, PlayState* play) {
break;
case 2:
- this->cutsceneAnimIndex = EN_JG_ANIM_TAKING_OUT_DRUM;
+ this->csAnimIndex = EN_JG_ANIM_TAKING_OUT_DRUM;
break;
case 3:
- this->cutsceneAnimIndex = EN_JG_ANIM_DRUM_IDLE;
+ this->csAnimIndex = EN_JG_ANIM_DRUM_IDLE;
break;
case 4:
- this->cutsceneAnimIndex = EN_JG_ANIM_PLAYING_DRUM;
+ this->csAnimIndex = EN_JG_ANIM_PLAYING_DRUM;
break;
case 5:
- this->cutsceneAnimIndex = EN_JG_ANIM_THINKING;
+ this->csAnimIndex = EN_JG_ANIM_THINKING;
break;
case 6:
- this->cutsceneAnimIndex = EN_JG_ANIM_REMEMBERING;
+ this->csAnimIndex = EN_JG_ANIM_REMEMBERING;
break;
case 7:
- this->cutsceneAnimIndex = EN_JG_ANIM_STRONG_REMEMBERING;
+ this->csAnimIndex = EN_JG_ANIM_STRONG_REMEMBERING;
break;
case 8:
- this->cutsceneAnimIndex = EN_JG_ANIM_DEPRESSED;
+ this->csAnimIndex = EN_JG_ANIM_DEPRESSED;
break;
case 9:
- this->cutsceneAnimIndex = EN_JG_ANIM_CRADLE;
+ this->csAnimIndex = EN_JG_ANIM_CRADLE;
break;
default:
- this->cutsceneAnimIndex = EN_JG_ANIM_IDLE;
+ this->csAnimIndex = EN_JG_ANIM_IDLE;
break;
}
- SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->cutsceneAnimIndex);
+ SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->csAnimIndex);
}
if (!(this->flags & FLAG_DRUM_SPAWNED) &&
- (((this->cutsceneAnimIndex == EN_JG_ANIM_TAKING_OUT_DRUM) && Animation_OnFrame(&this->skelAnime, 14.0f) &&
+ (((this->csAnimIndex == EN_JG_ANIM_TAKING_OUT_DRUM) && Animation_OnFrame(&this->skelAnime, 14.0f) &&
(this->action != EN_JG_ACTION_LULLABY_INTRO_CS)) ||
- (((this->cutsceneAnimIndex == EN_JG_ANIM_DRUM_IDLE) ||
- (this->cutsceneAnimIndex == EN_JG_ANIM_PLAYING_DRUM)) &&
+ (((this->csAnimIndex == EN_JG_ANIM_DRUM_IDLE) || (this->csAnimIndex == EN_JG_ANIM_PLAYING_DRUM)) &&
(this->action == EN_JG_ACTION_LULLABY_INTRO_CS)))) {
this->flags |= FLAG_DRUM_SPAWNED;
this->drum = Actor_SpawnAsChildAndCutscene(
@@ -691,7 +693,7 @@ void EnJg_LullabyIntroCutsceneAction(EnJg* this, PlayState* play) {
this->actor.params, this->actor.csId, this->actor.halfDaysBits, NULL);
}
- if (this->cutsceneAnimIndex == EN_JG_ANIM_TAKING_OUT_DRUM) {
+ if (this->csAnimIndex == EN_JG_ANIM_TAKING_OUT_DRUM) {
if (Animation_OnFrame(&this->skelAnime, 23.0f)) {
Audio_PlaySfx_AtPos(&sSfxPos, NA_SE_EV_WOOD_BOUND_S);
} else if (Animation_OnFrame(&this->skelAnime, 38.0f)) {
@@ -899,8 +901,8 @@ void EnJg_SpawnBreath(EnJg* this, PlayState* play) {
* handing it off to EnJg_Freeze.
*/
void EnJg_CheckIfTalkingToPlayerAndHandleFreezeTimer(EnJg* this, PlayState* play) {
- s16 currentFrame = this->skelAnime.curFrame;
- s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation);
+ s16 curFrame = this->skelAnime.curFrame;
+ s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation);
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->flags |= FLAG_LOOKING_AT_PLAYER;
@@ -925,7 +927,7 @@ void EnJg_CheckIfTalkingToPlayerAndHandleFreezeTimer(EnJg* this, PlayState* play
}
this->freezeTimer--;
- if ((this->freezeTimer <= 0) && (currentFrame == lastFrame)) {
+ if ((this->freezeTimer <= 0) && (curFrame == endFrame)) {
this->animIndex = EN_JG_ANIM_FROZEN_START;
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex);
Audio_PlaySfx_AtPos(&sSfxPos, NA_SE_EV_FREEZE_S);
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 b63f34dce..30c84973c 100644
--- a/src/overlays/actors/ovl_En_Jg/z_en_jg.h
+++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.h
@@ -35,7 +35,7 @@ typedef struct EnJg {
/* 0x3B0 */ Vec3f breathVelocity;
/* 0x3BC */ Vec3f breathAccel;
/* 0x3C8 */ s16 csId;
- /* 0x3CA */ u8 cutsceneAnimIndex;
+ /* 0x3CA */ u8 csAnimIndex;
/* 0x3CB */ u8 cueId;
/* 0x3CC */ u16 flags;
/* 0x3CE */ u16 textId;
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 013fb5050..aba7cdeeb 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
@@ -48,10 +48,18 @@ ActorInit En_Jgame_Tsn_InitVars = {
(ActorFunc)EnJgameTsn_Draw,
};
-static AnimationInfo sAnimationInfo[] = {
- { &object_tsn_Anim_0092FC, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -6.0f },
- { &object_tsn_Anim_000964, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -6.0f },
- { &object_tsn_Anim_001198, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -6.0f },
+typedef enum EnJgameTsnAnimation {
+ /* -1 */ ENJGAMETSN_ANIM_NONE = -1,
+ /* 0 */ ENJGAMETSN_ANIM_0,
+ /* 1 */ ENJGAMETSN_ANIM_1,
+ /* 2 */ ENJGAMETSN_ANIM_2,
+ /* 3 */ ENJGAMETSN_ANIM_MAX
+} EnJgameTsnAnimation;
+
+static AnimationInfo sAnimationInfo[ENJGAMETSN_ANIM_MAX] = {
+ { &object_tsn_Anim_0092FC, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -6.0f }, // ENJGAMETSN_ANIM_0
+ { &object_tsn_Anim_000964, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -6.0f }, // ENJGAMETSN_ANIM_1
+ { &object_tsn_Anim_001198, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -6.0f }, // ENJGAMETSN_ANIM_2
};
static ColliderCylinderInit sCylinderInit = {
@@ -145,7 +153,7 @@ void EnJgameTsn_Destroy(Actor* thisx, PlayState* play) {
}
void func_80C13B74(EnJgameTsn* this) {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_0);
this->actionFunc = func_80C13BB8;
}
@@ -156,15 +164,15 @@ void func_80C13BB8(EnJgameTsn* this, PlayState* play) {
if (this->actor.flags & ACTOR_FLAG_10000) {
this->actor.flags &= ~ACTOR_FLAG_10000;
if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] > SECONDS_TO_TIMER(0)) {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_1);
Message_StartTextbox(play, 0x10A2, &this->actor);
this->unk_300 = 0x10A2;
} else if (gSaveContext.minigameScore < 20) {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_1);
Message_StartTextbox(play, 0x10A2, &this->actor);
this->unk_300 = 0x10A2;
} else {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_2);
Message_StartTextbox(play, 0x10A3, &this->actor);
this->unk_300 = 0x10A3;
}
@@ -174,11 +182,11 @@ void func_80C13BB8(EnJgameTsn* this, PlayState* play) {
this->unk_300 = 0x1094;
} else if (this->unk_2F8 == 0) {
this->unk_2F8 = 1;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_1);
Message_StartTextbox(play, 0x1095, &this->actor);
this->unk_300 = 0x1095;
} else {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_1);
Message_StartTextbox(play, 0x1096, &this->actor);
this->unk_300 = 0x1096;
}
@@ -211,11 +219,11 @@ void func_80C13E90(EnJgameTsn* this, PlayState* play) {
this->actor.flags &= ~ACTOR_FLAG_10000;
if (((gSaveContext.save.time > CLOCK_TIME(4, 0)) && (gSaveContext.save.time < CLOCK_TIME(7, 0))) ||
((gSaveContext.save.time > CLOCK_TIME(16, 0)) && (gSaveContext.save.time < CLOCK_TIME(19, 0)))) {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_2);
Message_StartTextbox(play, 0x1094, &this->actor);
this->unk_300 = 0x1094;
} else {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_1);
Message_StartTextbox(play, 0x1098, &this->actor);
this->unk_300 = 0x1098;
}
@@ -273,6 +281,9 @@ void func_80C14044(EnJgameTsn* this, PlayState* play) {
func_80C13B74(this);
}
break;
+
+ default:
+ break;
}
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 5, 0x71C, 0xB6);
@@ -335,7 +346,7 @@ void func_80C14230(EnJgameTsn* this, PlayState* play) {
this->unk_2FC++;
if ((player->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) && func_80C149B0(play, &this->unk_200)) {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_2);
Message_StartTextbox(play, 0x109F, &this->actor);
this->unk_300 = 0x109F;
player->stateFlags1 |= PLAYER_STATE1_20;
@@ -344,7 +355,7 @@ void func_80C14230(EnJgameTsn* this, PlayState* play) {
func_80C14030(this);
} else if ((player->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) ||
(player->actor.bgCheckFlags & BGCHECKFLAG_WATER)) {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_2);
Message_StartTextbox(play, 0x10A0, &this->actor);
this->unk_300 = 0x10A0;
player->stateFlags1 |= PLAYER_STATE1_20;
@@ -413,12 +424,12 @@ void func_80C14684(EnJgameTsn* this, PlayState* play) {
this->unk_300 = 0x109E;
Rupees_ChangeBy(-20);
} else {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_2);
Message_StartTextbox(play, 0x109D, &this->actor);
this->unk_300 = 0x109D;
}
} else {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_2);
Message_StartTextbox(play, 0x109C, &this->actor);
this->unk_300 = 0x109C;
}
@@ -461,7 +472,7 @@ void func_80C147B4(EnJgameTsn* this, PlayState* play) {
break;
case 0x109A:
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_0);
Message_StartTextbox(play, 0x109B, &this->actor);
this->unk_300 = 0x109B;
break;
@@ -490,6 +501,9 @@ void func_80C147B4(EnJgameTsn* this, PlayState* play) {
func_80C14540(this);
func_80C14554(this, play);
break;
+
+ default:
+ break;
}
}
}
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 c0f5bc3fd..7d5185935 100644
--- a/src/overlays/actors/ovl_En_Js/z_en_js.c
+++ b/src/overlays/actors/ovl_En_Js/z_en_js.c
@@ -117,6 +117,7 @@ void EnJs_Init(Actor* thisx, PlayState* play) {
CLEAR_WEEKEVENTREG(WEEKEVENTREG_84_20);
}
break;
+
case 1:
case 2:
case 3:
@@ -130,6 +131,7 @@ void EnJs_Init(Actor* thisx, PlayState* play) {
return;
}
break;
+
case 5:
case 6:
case 7:
@@ -137,6 +139,7 @@ void EnJs_Init(Actor* thisx, PlayState* play) {
this->maskType = ENJS_GET_TYPE(&this->actor) - 4;
this->actionFunc = func_8096A104;
break;
+
default:
break;
}
@@ -153,6 +156,7 @@ void EnJs_Destroy(Actor* thisx, PlayState* play) {
case 0:
Play_DisableMotionBlur();
break;
+
case 5:
case 6:
case 7:
@@ -161,6 +165,7 @@ void EnJs_Destroy(Actor* thisx, PlayState* play) {
func_80969400(ENJS_GET_TYPE(&this->actor));
}
break;
+
default:
break;
}
@@ -414,6 +419,7 @@ s32 func_809692A8(s32 arg0) {
return false;
}
return true;
+
case 5:
case 6:
case 7:
@@ -422,6 +428,7 @@ s32 func_809692A8(s32 arg0) {
return false;
}
return true;
+
default:
return false;
}
@@ -441,6 +448,7 @@ s32 func_8096933C(s32 arg0) {
} else {
return true;
}
+
case 5:
case 6:
case 7:
@@ -451,6 +459,7 @@ s32 func_8096933C(s32 arg0) {
} else {
return true;
}
+
default:
return false;
}
@@ -579,13 +588,18 @@ void func_80969898(EnJs* this, PlayState* play) {
Audio_PlaySfx_MessageDecide();
Message_ContinueTextbox(play, 0x2217);
break;
+
case 1:
Audio_PlaySfx_MessageCancel();
Message_ContinueTextbox(play, 0x2216);
break;
+
+ default:
+ break;
}
}
break;
+
case TEXT_STATE_5:
if (Message_ShouldAdvance(play)) {
switch (play->msgCtx.currentTextId) {
@@ -593,18 +607,21 @@ void func_80969898(EnJs* this, PlayState* play) {
this->unk_2B8 |= 1;
if (!func_8096933C(ENJS_GET_TYPE(&this->actor))) {
Message_ContinueTextbox(play, 0x220F);
- break;
+ } else {
+ Message_ContinueTextbox(play, 0x220D);
}
- Message_ContinueTextbox(play, 0x220D);
break;
+
case 0x220D:
case 0x2213:
Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
+
case 0x220E:
Message_ContinueTextbox(play, 0xFF);
this->actionFunc = func_80969748;
break;
+
case 0x2210:
case 0x2211:
case 0x2212:
@@ -612,19 +629,23 @@ void func_80969898(EnJs* this, PlayState* play) {
Message_ContinueTextbox(play, 0xFF);
this->actionFunc = func_80969748;
break;
+
case 0x2214:
case 0x2217:
if (!func_809695FC(this, play)) {
func_80969494(this, play);
- break;
}
break;
+
default:
func_80969494(this, play);
break;
}
}
break;
+
+ default:
+ break;
}
}
@@ -729,13 +750,16 @@ void func_80969DA4(EnJs* this, PlayState* play) {
Audio_PlaySfx_MessageDecide();
if (!func_809695FC(this, play)) {
func_809694E8(this, play);
- break;
}
break;
+
case 1:
Audio_PlaySfx_MessageCancel();
Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
+
+ default:
+ break;
}
}
break;
@@ -745,49 +769,60 @@ void func_80969DA4(EnJs* this, PlayState* play) {
case 0x221B:
if (!func_8096933C(ENJS_GET_TYPE(&this->actor))) {
Message_ContinueTextbox(play, 0x2219);
- break;
+ } else {
+ Message_ContinueTextbox(play, 0x221C);
}
- Message_ContinueTextbox(play, 0x221C);
break;
+
case 0x2224:
case 0x2226:
case 0x2228:
case 0x222A:
Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
+
case 0x2225:
case 0x2227:
case 0x2229:
case 0x222B:
if (!func_809695FC(this, play)) {
func_809694E8(this, play);
- break;
}
break;
+
case 0x2222:
player->exchangeItemAction = PLAYER_IA_NONE;
Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
+
case 0x2223:
switch (ENJS_GET_TYPE(&this->actor)) {
case 5:
Message_ContinueTextbox(play, 0x2224);
break;
+
case 6:
Message_ContinueTextbox(play, 0x2226);
break;
+
case 7:
Message_ContinueTextbox(play, 0x2228);
break;
+
case 8:
Message_ContinueTextbox(play, 0x222A);
break;
+
+ default:
+ break;
}
break;
+
case 0x221C:
Message_ContinueTextbox(play, 0xFF);
this->actionFunc = func_80969C54;
break;
+
case 0x221D:
case 0x2220:
case 0x2221:
@@ -795,12 +830,16 @@ void func_80969DA4(EnJs* this, PlayState* play) {
Message_ContinueTextbox(play, 0xFF);
this->actionFunc = func_80969C54;
break;
+
default:
func_809694E8(this, play);
break;
}
}
break;
+
+ default:
+ break;
}
}
@@ -892,6 +931,9 @@ void func_8096A38C(EnJs* this, PlayState* play) {
case 1:
Audio_PlaySfx_MessageCancel();
break;
+
+ default:
+ break;
}
switch (play->msgCtx.currentTextId) {
@@ -902,9 +944,13 @@ void func_8096A38C(EnJs* this, PlayState* play) {
Animation_MorphToPlayOnce(&this->skelAnime, &gMoonChildGettingUpAnim, -5.0f);
this->unk_2B8 |= 0x10;
break;
+
case 1:
Message_ContinueTextbox(play, 0x21FD);
break;
+
+ default:
+ break;
}
break;
@@ -914,9 +960,13 @@ void func_8096A38C(EnJs* this, PlayState* play) {
Message_ContinueTextbox(play, 0x2200);
func_809696EC(this, 0);
break;
+
case 1:
Message_ContinueTextbox(play, 0x21FF);
break;
+
+ default:
+ break;
}
break;
@@ -927,13 +977,21 @@ void func_8096A38C(EnJs* this, PlayState* play) {
Animation_MorphToPlayOnce(&this->skelAnime, &gMoonChildGettingUpAnim, -5.0f);
this->unk_2B8 |= 0x10;
break;
+
case 1:
Message_ContinueTextbox(play, 0x2204);
break;
+
+ default:
+ break;
}
+
+ default:
+ break;
}
}
break;
+
case TEXT_STATE_5:
if (Message_ShouldAdvance(play)) {
switch (play->msgCtx.currentTextId) {
@@ -962,7 +1020,6 @@ void func_8096A38C(EnJs* this, PlayState* play) {
break;
case 0x2201:
-
case 0x220A:
if (!func_809695FC(this, play)) {
func_80969530(this, play);
@@ -975,6 +1032,9 @@ void func_8096A38C(EnJs* this, PlayState* play) {
}
}
break;
+
+ default:
+ break;
}
}
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 cee6b38fa..abba3efac 100644
--- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c
+++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c
@@ -259,7 +259,7 @@ void EnKaizoku_Init(Actor* thisx, PlayState* play) {
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);
+ this->switchFlag = KAIZOKU_GET_SWITCH_FLAG(&this->picto.actor);
if (this->unk_2CA >= 2) {
this->unk_2CA = 0;
@@ -442,8 +442,8 @@ s32 func_80B85A00(EnKaizoku* this, PlayState* play, s16 arg2) {
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,
+ this->animEndFrame = Animation_GetLastFrame(sAnimations[this->animIndex]);
+ Animation_Change(&this->skelAnime, sAnimations[this->animIndex], 1.0f, 0.0f, this->animEndFrame,
sAnimationModes[this->animIndex], 0.0f);
}
@@ -553,7 +553,7 @@ void func_80B85FA8(EnKaizoku* this, PlayState* play) {
break;
case 3:
- if (this->frameCount <= curFrame) {
+ if (curFrame >= this->animEndFrame) {
sp54 = this->unk_2CA * 4 + this->unk_2C8;
if (Player_GetMask(play) == PLAYER_MASK_STONE) {
if (D_80B8A8D0[sp54] == 0x11A5) {
@@ -595,7 +595,7 @@ void func_80B85FA8(EnKaizoku* this, PlayState* play) {
case 6:
Math_ApproachF(&this->unk_5E0, 5.0f, 0.3f, 1.0f);
- if (this->frameCount <= curFrame) {
+ if (curFrame >= this->animEndFrame) {
this->unk_598 = 7;
this->unk_2F8.x = 1.0f;
this->unk_59C++;
@@ -700,7 +700,7 @@ void func_80B868B8(EnKaizoku* this, PlayState* play) {
switch (this->unk_59C) {
case 0:
- if (this->frameCount <= curFrame) {
+ if (curFrame >= this->animEndFrame) {
EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_14);
this->unk_2C8 = 3;
this->unk_598 = 0;
@@ -709,7 +709,7 @@ void func_80B868B8(EnKaizoku* this, PlayState* play) {
break;
case 1:
- if (this->frameCount <= curFrame) {
+ if (curFrame >= this->animEndFrame) {
s32 textId;
EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_15);
@@ -787,7 +787,7 @@ void func_80B86B74(EnKaizoku* this, PlayState* play) {
break;
case 1:
- if (this->frameCount <= curFrame) {
+ if (curFrame >= this->animEndFrame) {
if (this->unk_2D9 == 0) {
Actor_PlaySfx(&this->picto.actor, NA_SE_EN_PIRATE_DAMM_BREATH);
this->unk_2D9 = 1;
@@ -843,7 +843,7 @@ void func_80B86B74(EnKaizoku* this, PlayState* play) {
255;
}
- if ((this->frameCount <= curFrame) && (this->unk_5A0 >= 0x28)) {
+ if ((curFrame >= this->animEndFrame) && (this->unk_5A0 >= 0x28)) {
this->picto.actor.draw = NULL;
this->unk_598 = 10;
Math_Vec3f_Copy(&this->unk_2F8, &gZeroVec3f);
@@ -1127,7 +1127,7 @@ void func_80B87D3C(EnKaizoku* this, PlayState* play) {
}
this->unk_2D8 = 0;
- if ((this->frameCount <= curFrame) &&
+ if ((curFrame >= this->animEndFrame) &&
(this->picto.actor.bgCheckFlags & (BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH))) {
this->bodyCollider.info.elemType = ELEMTYPE_UNK1;
this->bodyCollider.base.colType = COLTYPE_HIT3;
@@ -1157,7 +1157,7 @@ void func_80B87E9C(EnKaizoku* this, PlayState* play) {
f32 curFrame = this->skelAnime.curFrame;
this->unk_2D8 = 0;
- if (this->frameCount <= curFrame) {
+ if (curFrame >= this->animEndFrame) {
if ((this->picto.actor.xzDistToPlayer < 170.0f) && (this->picto.actor.xzDistToPlayer > 140.0f) &&
(Rand_ZeroOne() < 0.2f)) {
func_80B88910(this);
@@ -1207,7 +1207,7 @@ void func_80B87FDC(EnKaizoku* this, PlayState* play2) {
}
this->unk_2D8 = 0;
- if (this->frameCount <= curFrame) {
+ if (curFrame >= this->animEndFrame) {
if (!Actor_IsFacingPlayer(&this->picto.actor, 0x1554)) {
func_80B872A4(this);
@@ -1252,7 +1252,7 @@ void func_80B88278(EnKaizoku* this, PlayState* play) {
f32 curFrame = this->skelAnime.curFrame;
this->unk_2D8 = 0;
- if (this->frameCount <= curFrame) {
+ if (curFrame >= this->animEndFrame) {
this->picto.actor.speed = 0.0f;
if (!Actor_IsFacingPlayer(&this->picto.actor, 0x1554)) {
func_80B872A4(this);
@@ -1404,22 +1404,20 @@ void func_80B88964(EnKaizoku* this, PlayState* play) {
if (this->skelAnime.curFrame <= 8.0f) {
this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer;
- } else {
- if (Animation_OnFrame(&this->skelAnime, 13.0f)) {
- Actor_SpawnFloorDustRing(play, &this->picto.actor, &this->leftFootPos, 3.0f, 2, 2.0f, 0, 0, 0);
- Actor_SpawnFloorDustRing(play, &this->picto.actor, &this->rightFootPos, 3.0f, 2, 2.0f, 0, 0, 0);
- this->swordState = 1;
- this->picto.actor.speed = 10.0f;
- Actor_PlaySfx(&this->picto.actor, NA_SE_EN_PIRATE_ATTACK);
- } else if (Animation_OnFrame(&this->skelAnime, 21.0f)) {
- this->picto.actor.speed = 0.0f;
- } else if (Animation_OnFrame(&this->skelAnime, 24.0f)) {
- this->swordState = -1;
- }
+ } else if (Animation_OnFrame(&this->skelAnime, 13.0f)) {
+ Actor_SpawnFloorDustRing(play, &this->picto.actor, &this->leftFootPos, 3.0f, 2, 2.0f, 0, 0, 0);
+ Actor_SpawnFloorDustRing(play, &this->picto.actor, &this->rightFootPos, 3.0f, 2, 2.0f, 0, 0, 0);
+ this->swordState = 1;
+ this->picto.actor.speed = 10.0f;
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_PIRATE_ATTACK);
+ } else if (Animation_OnFrame(&this->skelAnime, 21.0f)) {
+ this->picto.actor.speed = 0.0f;
+ } else if (Animation_OnFrame(&this->skelAnime, 24.0f)) {
+ this->swordState = -1;
}
this->unk_2D8 = 0;
- if ((this->frameCount <= curFrame) && (this->unk_2D0 < 2)) {
+ if ((curFrame >= this->animEndFrame) && (this->unk_2D0 < 2)) {
if (!Actor_IsFacingPlayer(&this->picto.actor, 0x1554)) {
func_80B872A4(this);
this->unk_2B2 = Rand_ZeroOne() * 5.0f + 5.0f;
@@ -1755,7 +1753,7 @@ void func_80B8971C(EnKaizoku* this, PlayState* play) {
Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 1, 0xFA0, 1);
SkelAnime_Update(&this->skelAnime);
- if (this->frameCount <= curFrame) {
+ if (curFrame >= this->animEndFrame) {
this->unk_2D8 = 0;
func_80B86B58(this);
} else if (Animation_OnFrame(&this->skelAnime, 10.0f)) {
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 e2c53d34b..423819eb3 100644
--- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h
+++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h
@@ -6,7 +6,7 @@
#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)
+#define KAIZOKU_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 6) & 0x7F)
struct EnKaizoku;
@@ -80,7 +80,7 @@ typedef struct EnKaizoku {
/* 0x2D6 */ s16 csId;
/* 0x2D8 */ u8 unk_2D8;
/* 0x2D9 */ u8 unk_2D9;
- /* 0x2DC */ f32 frameCount;
+ /* 0x2DC */ f32 animEndFrame;
/* 0x2E0 */ f32 unk_2E0;
/* 0x2E4 */ EnKaizokuAnimation animIndex;
/* 0x2E8 */ s32 bodyPartIndex;
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 06409d524..a3d0e4608 100644
--- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c
+++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c
@@ -121,18 +121,32 @@ typedef enum {
/* 5 */ ENKAKASI_ANIM_ARMS_CROSSED_STILL, // arms crossed but still, also some noise sfx
/* 6 */ ENKAKASI_ANIM_WAVE, // "wave" short sideways shake, stops early, partial? unused?
/* 7 */ ENKAKASI_ANIM_SLOWROLL, // partial bounch, ends looking left, OFFER anim takes over
- /* 8 */ ENKAKASI_ANIM_IDLE // slow stretching wiggle, ends in regular position
+ /* 8 */ ENKAKASI_ANIM_IDLE, // slow stretching wiggle, ends in regular position
+ /* 9 */ ENKAKASI_ANIM_MAX
} EnKakasiAnimation;
-static AnimationHeader* sAnimations[] = {
- &object_ka_Anim_007444, &object_ka_Anim_00686C, &object_ka_Anim_0081A4,
- &object_ka_Anim_007B90, &object_ka_Anim_0071EC, &object_ka_Anim_007444,
- &object_ka_Anim_00686C, &object_ka_Anim_0081A4, &object_ka_Anim_000214,
+static AnimationHeader* sAnimations[ENKAKASI_ANIM_MAX] = {
+ &object_ka_Anim_007444, // ENKAKASI_ANIM_ARMS_CROSSED_ROCKING
+ &object_ka_Anim_00686C, // ENKAKASI_ANIM_SIDEWAYS_SHAKING
+ &object_ka_Anim_0081A4, // ENKAKASI_ANIM_HOPPING_REGULAR
+ &object_ka_Anim_007B90, // ENKAKASI_ANIM_SPIN_REACH_OFFER
+ &object_ka_Anim_0071EC, // ENKAKASI_ANIM_TWIRL
+ &object_ka_Anim_007444, // ENKAKASI_ANIM_ARMS_CROSSED_STILL
+ &object_ka_Anim_00686C, // ENKAKASI_ANIM_WAVE
+ &object_ka_Anim_0081A4, // ENKAKASI_ANIM_SLOWROLL
+ &object_ka_Anim_000214, // ENKAKASI_ANIM_IDLE
};
-static u8 sAnimationModes[] = {
- ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_ONCE,
- ANIMMODE_ONCE, ANIMMODE_ONCE, ANIMMODE_ONCE, ANIMMODE_ONCE,
+static u8 sAnimationModes[ENKAKASI_ANIM_MAX] = {
+ ANIMMODE_LOOP, // ENKAKASI_ANIM_ARMS_CROSSED_ROCKING
+ ANIMMODE_LOOP, // ENKAKASI_ANIM_SIDEWAYS_SHAKING
+ ANIMMODE_LOOP, // ENKAKASI_ANIM_HOPPING_REGULAR
+ ANIMMODE_ONCE, // ENKAKASI_ANIM_SPIN_REACH_OFFER
+ ANIMMODE_ONCE, // ENKAKASI_ANIM_TWIRL
+ ANIMMODE_ONCE, // ENKAKASI_ANIM_ARMS_CROSSED_STILL
+ ANIMMODE_ONCE, // ENKAKASI_ANIM_WAVE
+ ANIMMODE_ONCE, // ENKAKASI_ANIM_SLOWROLL
+ ANIMMODE_ONCE, // ENKAKASI_ANIM_IDLE
};
void EnKakasi_Destroy(Actor* thisx, PlayState* play) {
@@ -147,7 +161,7 @@ void EnKakasi_Init(Actor* thisx, PlayState* play) {
s32 i;
Collider_InitAndSetCylinder(play, &this->collider, &this->picto.actor, &D_80971D80);
- SkelAnime_InitFlex(play, &this->skelAnime, &object_ka_Skel_0065B0, &object_ka_Anim_000214, 0, 0, 0);
+ SkelAnime_InitFlex(play, &this->skelAnime, &object_ka_Skel_0065B0, &object_ka_Anim_000214, NULL, NULL, 0);
this->songSummonDist = KAKASI_GET_SUMMON_DISTANCE(&this->picto.actor) * 20.0f;
if (this->songSummonDist < 40.0f) {
@@ -274,9 +288,10 @@ void func_8096FAAC(EnKakasi* this, PlayState* play) {
* goes off every frame of song teach, but... doing what?
*/
void func_8096FBB8(EnKakasi* this, PlayState* play) {
- if ((play->msgCtx.unk12048 == 0) || (play->msgCtx.unk12048 == 1) || (play->msgCtx.unk12048 == 2) ||
- (play->msgCtx.unk12048 == 3) || (play->msgCtx.unk12048 == 4)) {
- // why not 0 < x < 4? fewer branches
+ if ((play->msgCtx.ocarinaButtonIndex == OCARINA_BTN_A) || (play->msgCtx.ocarinaButtonIndex == OCARINA_BTN_C_DOWN) ||
+ (play->msgCtx.ocarinaButtonIndex == OCARINA_BTN_C_RIGHT) ||
+ (play->msgCtx.ocarinaButtonIndex == OCARINA_BTN_C_LEFT) ||
+ (play->msgCtx.ocarinaButtonIndex == OCARINA_BTN_C_UP)) {
this->unk190++;
}
if ((this->unk190 != 0) && (this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING)) {
@@ -362,7 +377,7 @@ void EnKakasi_IdleStanding(EnKakasi* this, PlayState* play) {
} else if ((day == 3) && gSaveContext.save.isNight) {
this->skelAnime.playSpeed = 1.0f;
if (this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING) {
- EnKakasi_ChangeAnim(this, 1);
+ EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SIDEWAYS_SHAKING);
}
} else if (this->animIndex != ENKAKASI_ANIM_IDLE) {
EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_IDLE);
@@ -401,7 +416,8 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) {
// if dialogue: oh sorry come back again
if ((this->picto.actor.textId == 0x1651) || (this->picto.actor.textId == 0x1659)) {
if ((curFrame >= this->animEndFrame) && (this->animIndex != ENKAKASI_ANIM_SPIN_REACH_OFFER)) {
- if (++this->unkCounter1A4 >= 2) {
+ this->unkCounter1A4++;
+ if (this->unkCounter1A4 >= 2) {
this->unkCounter1A4 = 0;
EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SPIN_REACH_OFFER);
}
@@ -559,7 +575,7 @@ void EnKakasi_SetupSongTeach(EnKakasi* this, PlayState* play) {
*/
void EnKakasi_OcarinaRemark(EnKakasi* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- func_80152434(play, 0x35);
+ Message_DisplayOcarinaStaff(play, OCARINA_ACTION_SCARECROW_SPAWN_RECORDING);
this->unkState1A8 = 0;
if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
@@ -616,7 +632,7 @@ void EnKakasi_TeachingSong(EnKakasi* this, PlayState* play) {
func_8096FAAC(this, play);
func_8096FBB8(this, play);
- if (play->msgCtx.ocarinaMode == 4) { // song failed
+ if (play->msgCtx.ocarinaMode == OCARINA_MODE_END) { // song failed
this->unk190 = 0;
this->unkCounter1A4 = 0;
CutsceneManager_Stop(this->csIdList[0]);
@@ -629,7 +645,7 @@ void EnKakasi_TeachingSong(EnKakasi* this, PlayState* play) {
EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_ARMS_CROSSED_ROCKING);
this->actionFunc = EnKakasi_RegularDialogue;
- } else if (play->msgCtx.ocarinaMode == 3) { // song success
+ } else if (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) { // song success
this->postTeachTimer = 30;
this->skelAnime.playSpeed = 2.0f;
EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_HOPPING_REGULAR);
@@ -652,7 +668,7 @@ void EnKakasi_PostSongLearnTwirl(EnKakasi* this, PlayState* play) {
void EnKakasi_SetupPostSongLearnDialogue(EnKakasi* this, PlayState* play) {
CutsceneManager_Stop(this->csIdList[0]);
- play->msgCtx.ocarinaMode = 4;
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
this->unk190 = 0;
this->unkCounter1A4 = 0;
EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_HOPPING_REGULAR);
@@ -1038,9 +1054,9 @@ void EnKakasi_SetupIdleUnderground(EnKakasi* this) {
void EnKakasi_IdleUnderground(EnKakasi* this, PlayState* play) {
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_08) && (this->picto.actor.xzDistToPlayer < this->songSummonDist) &&
- ((BREG(1) != 0) || (play->msgCtx.ocarinaMode == 0xD))) {
+ ((BREG(1) != 0) || (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_SCARECROW_SPAWN))) {
this->picto.actor.flags &= ~ACTOR_FLAG_CANT_LOCK_ON;
- play->msgCtx.ocarinaMode = 4;
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
this->actionFunc = EnKakasi_SetupRiseOutOfGround;
}
}
@@ -1152,7 +1168,7 @@ void EnKakasi_Update(Actor* thisx, PlayState* play) {
void EnKakasi_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
EnKakasi* this = THIS;
- if (limbIndex == 4) {
+ if (limbIndex == OBJECT_KA_LIMB_04) {
Matrix_MultVec3f(&gZeroVec3f, &this->unk1BC);
}
}
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 51f44abec..8171e56b4 100644
--- a/src/overlays/actors/ovl_En_Kame/z_en_kame.c
+++ b/src/overlays/actors/ovl_En_Kame/z_en_kame.c
@@ -1,7 +1,7 @@
/*
* File: z_en_kame.c
* Overlay: ovl_En_Kame
- * Description: Snapper Turtle
+ * Description: Snapper
*/
#include "z_en_kame.h"
@@ -16,30 +16,46 @@ void EnKame_Destroy(Actor* thisx, PlayState* play);
void EnKame_Update(Actor* thisx, PlayState* play);
void EnKame_Draw(Actor* thisx, PlayState* play);
-void func_80AD70A0(EnKame* this);
-void func_80AD70EC(EnKame* this, PlayState* play);
-void func_80AD71B4(EnKame* this);
-void func_80AD7254(EnKame* this, PlayState* play);
-void func_80AD73A8(EnKame* this);
-void func_80AD7424(EnKame* this, PlayState* play);
-void func_80AD76CC(EnKame* this);
-void func_80AD7798(EnKame* this, PlayState* play);
-void func_80AD792C(EnKame* this);
-void func_80AD7948(EnKame* this, PlayState* play);
-void func_80AD7B18(EnKame* this);
-void func_80AD7B90(EnKame* this, PlayState* play);
-void func_80AD7D40(EnKame* this, PlayState* play);
-void func_80AD7DA4(EnKame* this);
-void func_80AD7E0C(EnKame* this, PlayState* play);
-void func_80AD7EC0(EnKame* this);
-void func_80AD7F10(EnKame* this, PlayState* play);
-void func_80AD7FF8(EnKame* this, PlayState* play);
-void func_80AD810C(EnKame* this, PlayState* play);
-void func_80AD8148(EnKame* this, PlayState* play);
-void func_80AD825C(EnKame* this, PlayState* play);
-void func_80AD8364(EnKame* this);
-void func_80AD8388(EnKame* this, PlayState* play);
-void func_80AD8D64(Actor* thisx, PlayState* play);
+void EnKame_SetupIdle(EnKame* this);
+void EnKame_Idle(EnKame* this, PlayState* play);
+void EnKame_SetupWalk(EnKame* this);
+void EnKame_Walk(EnKame* this, PlayState* play);
+void EnKame_SetupRetreatIntoShell(EnKame* this);
+void EnKame_RetreatIntoShell(EnKame* this, PlayState* play);
+void EnKame_SetupPrepareToAttack(EnKame* this);
+void EnKame_PrepareToAttack(EnKame* this, PlayState* play);
+void EnKame_SetupAttack(EnKame* this);
+void EnKame_Attack(EnKame* this, PlayState* play);
+void EnKame_SetupEmergeFromShell(EnKame* this);
+void EnKame_EmergeFromShell(EnKame* this, PlayState* play);
+void EnKame_Flip(EnKame* this, PlayState* play);
+void EnKame_SetupStruggle(EnKame* this);
+void EnKame_Struggle(EnKame* this, PlayState* play);
+void EnKame_SetupFlipUpright(EnKame* this);
+void EnKame_FlipUpright(EnKame* this, PlayState* play);
+void EnKame_Stunned(EnKame* this, PlayState* play);
+void EnKame_Damaged(EnKame* this, PlayState* play);
+void EnKame_SetupDead(EnKame* this, PlayState* play);
+void EnKame_Dead(EnKame* this, PlayState* play);
+void EnKame_SetupBurstIntoFlames(EnKame* this);
+void EnKame_BurstIntoFlames(EnKame* this, PlayState* play);
+void EnKame_DrawSpikedSnapper(Actor* thisx, PlayState* play);
+
+// This enum is used for when the Snapper is forcibly flipped
+// by one of the player's attacks. It is *not* used for when
+// the Snapper flips itself upright.
+typedef enum {
+ /* 0 */ EN_KAME_FLIP_TYPE_UPSIDE_DOWN,
+ /* 1 */ EN_KAME_FLIP_TYPE_RIGHTSIDE_UP
+} EnKameFlipType;
+
+typedef enum {
+ /* 0 */ EN_KAME_EYE_OPEN,
+ /* 1 */ EN_KAME_EYE_HALF_CLOSING,
+ /* 2 */ EN_KAME_EYE_CLOSED,
+ /* 3 */ EN_KAME_EYE_HALF_OPENING,
+ /* 4 */ EN_KAME_EYE_MAX
+} EnKameEyeTexture;
ActorInit En_Kame_InitVars = {
ACTOR_EN_KAME,
@@ -75,42 +91,54 @@ static ColliderCylinderInit sCylinderInit = {
static CollisionCheckInfoInit sColChkInfoInit = { 3, 15, 30, 80 };
+typedef enum {
+ /* 0x0 */ EN_KAME_DMGEFF_NONE, // Has no special effect
+ /* 0x1 */ EN_KAME_DMGEFF_STUN, // Cannot damage the Snapper, but stuns it for 40 frames
+ /* 0x2 */ EN_KAME_DMGEFF_FIRE, // Sets the Snapper on fire
+ /* 0x3 */ EN_KAME_DMGEFF_FREEZE, // Stuns the Snapper for 80 frames and surrounds it with ice
+ /* 0x4 */ EN_KAME_DMGEFF_LIGHT_ORB, // Surrounds the snapper with light orbs
+ /* 0x5 */ EN_KAME_DMGEFF_ELECTRIC_STUN, // Similar to EN_KAME_DMGEFF_STUN, but also applies an electric effect
+ /* 0xD */ EN_KAME_DMGEFF_HOOKSHOT = 0xD, // Cannot damage the Snapper, but pulls the player towards it
+ /* 0xE */ EN_KAME_DMGEFF_INSTANT_KILL, // Instantly kills the Snapper if it hits, even when it is rightside-up
+ /* 0xF */ EN_KAME_DMGEFF_FLIP_OVER // Flips over Snappers if they are rightside-up
+} EnKameDamageEffect;
+
static DamageTable sDamageTable = {
- /* Deku Nut */ DMG_ENTRY(0, 0x1),
- /* Deku Stick */ DMG_ENTRY(1, 0x0),
- /* Horse trample */ DMG_ENTRY(1, 0x0),
- /* Explosives */ DMG_ENTRY(1, 0xF),
- /* Zora boomerang */ DMG_ENTRY(1, 0x0),
- /* Normal arrow */ DMG_ENTRY(1, 0x0),
- /* UNK_DMG_0x06 */ DMG_ENTRY(0, 0x0),
- /* Hookshot */ DMG_ENTRY(0, 0xD),
- /* Goron punch */ DMG_ENTRY(1, 0x0),
- /* Sword */ DMG_ENTRY(1, 0x0),
- /* Goron pound */ DMG_ENTRY(0, 0xF),
- /* Fire arrow */ DMG_ENTRY(2, 0x2),
- /* Ice arrow */ DMG_ENTRY(2, 0x3),
- /* Light arrow */ DMG_ENTRY(2, 0x4),
- /* Goron spikes */ DMG_ENTRY(1, 0x0),
- /* Deku spin */ DMG_ENTRY(0, 0x1),
- /* Deku bubble */ DMG_ENTRY(1, 0x0),
- /* 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, 0x0),
- /* Zora punch */ DMG_ENTRY(1, 0x0),
- /* Spin attack */ DMG_ENTRY(1, 0x0),
- /* Sword beam */ DMG_ENTRY(0, 0x0),
- /* Normal Roll */ DMG_ENTRY(0, 0x0),
- /* UNK_DMG_0x1B */ DMG_ENTRY(0, 0x0),
- /* UNK_DMG_0x1C */ DMG_ENTRY(0, 0x0),
- /* Unblockable */ DMG_ENTRY(0, 0x0),
- /* UNK_DMG_0x1E */ DMG_ENTRY(0, 0x0),
- /* Powder Keg */ DMG_ENTRY(1, 0xF),
+ /* Deku Nut */ DMG_ENTRY(0, EN_KAME_DMGEFF_STUN),
+ /* Deku Stick */ DMG_ENTRY(1, EN_KAME_DMGEFF_NONE),
+ /* Horse trample */ DMG_ENTRY(1, EN_KAME_DMGEFF_NONE),
+ /* Explosives */ DMG_ENTRY(1, EN_KAME_DMGEFF_FLIP_OVER),
+ /* Zora boomerang */ DMG_ENTRY(1, EN_KAME_DMGEFF_NONE),
+ /* Normal arrow */ DMG_ENTRY(1, EN_KAME_DMGEFF_NONE),
+ /* UNK_DMG_0x06 */ DMG_ENTRY(0, EN_KAME_DMGEFF_NONE),
+ /* Hookshot */ DMG_ENTRY(0, EN_KAME_DMGEFF_HOOKSHOT),
+ /* Goron punch */ DMG_ENTRY(1, EN_KAME_DMGEFF_NONE),
+ /* Sword */ DMG_ENTRY(1, EN_KAME_DMGEFF_NONE),
+ /* Goron pound */ DMG_ENTRY(0, EN_KAME_DMGEFF_FLIP_OVER),
+ /* Fire arrow */ DMG_ENTRY(2, EN_KAME_DMGEFF_FIRE),
+ /* Ice arrow */ DMG_ENTRY(2, EN_KAME_DMGEFF_FREEZE),
+ /* Light arrow */ DMG_ENTRY(2, EN_KAME_DMGEFF_LIGHT_ORB),
+ /* Goron spikes */ DMG_ENTRY(1, EN_KAME_DMGEFF_NONE),
+ /* Deku spin */ DMG_ENTRY(0, EN_KAME_DMGEFF_STUN),
+ /* Deku bubble */ DMG_ENTRY(1, EN_KAME_DMGEFF_NONE),
+ /* Deku launch */ DMG_ENTRY(2, EN_KAME_DMGEFF_INSTANT_KILL),
+ /* UNK_DMG_0x12 */ DMG_ENTRY(0, EN_KAME_DMGEFF_STUN),
+ /* Zora barrier */ DMG_ENTRY(0, EN_KAME_DMGEFF_ELECTRIC_STUN),
+ /* Normal shield */ DMG_ENTRY(0, EN_KAME_DMGEFF_NONE),
+ /* Light ray */ DMG_ENTRY(0, EN_KAME_DMGEFF_NONE),
+ /* Thrown object */ DMG_ENTRY(1, EN_KAME_DMGEFF_NONE),
+ /* Zora punch */ DMG_ENTRY(1, EN_KAME_DMGEFF_NONE),
+ /* Spin attack */ DMG_ENTRY(1, EN_KAME_DMGEFF_NONE),
+ /* Sword beam */ DMG_ENTRY(0, EN_KAME_DMGEFF_NONE),
+ /* Normal Roll */ DMG_ENTRY(0, EN_KAME_DMGEFF_NONE),
+ /* UNK_DMG_0x1B */ DMG_ENTRY(0, EN_KAME_DMGEFF_NONE),
+ /* UNK_DMG_0x1C */ DMG_ENTRY(0, EN_KAME_DMGEFF_NONE),
+ /* Unblockable */ DMG_ENTRY(0, EN_KAME_DMGEFF_NONE),
+ /* UNK_DMG_0x1E */ DMG_ENTRY(0, EN_KAME_DMGEFF_NONE),
+ /* Powder Keg */ DMG_ENTRY(1, EN_KAME_DMGEFF_FLIP_OVER),
};
-static TexturePtr D_80AD8E34[] = { gSnapperEyeOpenTex, gSnapperEyeHalfTex, gSnapperEyeClosedTex, gSnapperEyeHalfTex };
+static TexturePtr sEyeTextures[] = { gSnapperEyeOpenTex, gSnapperEyeHalfTex, gSnapperEyeClosedTex, gSnapperEyeHalfTex };
static InitChainEntry sInitChain[] = {
ICHAIN_S8(hintId, TATL_HINT_ID_SNAPPER, ICHAIN_CONTINUE),
@@ -118,7 +146,7 @@ static InitChainEntry sInitChain[] = {
ICHAIN_F32(targetArrowOffset, 3500, ICHAIN_STOP),
};
-static s32 D_80AD8E50 = false;
+static s32 sTexturesDesegmented = false;
void EnKame_Init(Actor* thisx, PlayState* play) {
EnKame* this = THIS;
@@ -132,16 +160,17 @@ void EnKame_Init(Actor* thisx, PlayState* play) {
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
- if (!D_80AD8E50) {
+ if (!sTexturesDesegmented) {
s32 i;
- for (i = 0; i < ARRAY_COUNT(D_80AD8E34); i++) {
- D_80AD8E34[i] = Lib_SegmentedToVirtual(D_80AD8E34[i]);
+ for (i = 0; i < ARRAY_COUNT(sEyeTextures); i++) {
+ sEyeTextures[i] = Lib_SegmentedToVirtual(sEyeTextures[i]);
}
- D_80AD8E50 = true;
+
+ sTexturesDesegmented = true;
}
- func_80AD70A0(this);
+ EnKame_SetupIdle(this);
}
void EnKame_Destroy(Actor* thisx, PlayState* play) {
@@ -150,29 +179,29 @@ void EnKame_Destroy(Actor* thisx, PlayState* play) {
Collider_DestroyCylinder(play, &this->collider);
}
-void func_80AD6F34(EnKame* this) {
- if (this->unk_29C != 0) {
- this->unk_29C++;
- if (this->unk_29C == 4) {
- this->unk_29C = 0;
+void EnKame_Blink(EnKame* this) {
+ if (this->eyeIndex != EN_KAME_EYE_OPEN) {
+ this->eyeIndex++;
+ if (this->eyeIndex == EN_KAME_EYE_MAX) {
+ this->eyeIndex = EN_KAME_EYE_OPEN;
}
} else if (Rand_ZeroOne() < 0.05f) {
- this->unk_29C = 1;
+ this->eyeIndex = EN_KAME_EYE_HALF_CLOSING;
}
}
-void func_80AD6F9C(EnKame* this) {
+void EnKame_Freeze(EnKame* this) {
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX;
this->drawDmgEffScale = 0.6f;
- this->drawDmgEffFrozenSteamScale = 0.90000004f;
+ this->drawDmgEffFrozenSteamScale = 900.0f * 0.001f;
this->drawDmgEffAlpha = 1.0f;
this->collider.base.colType = COLTYPE_HIT3;
- this->unk_2A2 = 80;
+ this->stunTimer = 80;
this->actor.flags &= ~ACTOR_FLAG_400;
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 80);
}
-void func_80AD7018(EnKame* this, PlayState* play) {
+void EnKame_Thaw(EnKame* this, PlayState* play) {
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
this->collider.base.colType = COLTYPE_HIT6;
@@ -182,109 +211,138 @@ void func_80AD7018(EnKame* this, PlayState* play) {
}
}
-void func_80AD70A0(EnKame* this) {
+void EnKame_SetupIdle(EnKame* this) {
Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperIdleAnim, -5.0f);
this->actor.speed = 0.0f;
- this->actionFunc = func_80AD70EC;
+ this->actionFunc = EnKame_Idle;
}
-void func_80AD70EC(EnKame* this, PlayState* play) {
+/**
+ * Plays the idle animation, then starts walking once the animation is over. If the player gets close enough to
+ * the Snapper without the Stone Mask equipped, it will retreat into its shell to begin attacking them.
+ */
+void EnKame_Idle(EnKame* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (Animation_OnFrame(&this->snapperSkelAnime, 10.0f)) {
Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_VOICE);
- this->unk_2A0 = 40;
+ this->voiceTimer = 40;
}
if ((Player_GetMask(play) != PLAYER_MASK_STONE) && !(player->stateFlags1 & PLAYER_STATE1_800000) &&
(this->actor.xzDistToPlayer < 240.0f)) {
- func_80AD73A8(this);
+ EnKame_SetupRetreatIntoShell(this);
} else if (SkelAnime_Update(&this->snapperSkelAnime)) {
- func_80AD71B4(this);
+ EnKame_SetupWalk(this);
}
}
-void func_80AD71B4(EnKame* this) {
+void EnKame_SetupWalk(EnKame* this) {
Animation_MorphToLoop(&this->snapperSkelAnime, &gSnapperWalkAnim, -5.0f);
this->actor.speed = 0.5f;
- this->unk_29E = Animation_GetLastFrame(&gSnapperWalkAnim) * ((s32)Rand_ZeroFloat(5.0f) + 3);
- this->unk_2A4 = this->actor.shape.rot.y;
+ this->timer = Animation_GetLastFrame(&gSnapperWalkAnim) * ((s32)Rand_ZeroFloat(5.0f) + 3);
+ this->targetRotY = this->actor.shape.rot.y;
this->collider.base.acFlags |= (AC_HARD | AC_ON);
this->collider.base.colType = COLTYPE_HARD;
- this->actionFunc = func_80AD7254;
+ this->actionFunc = EnKame_Walk;
}
-void func_80AD7254(EnKame* this, PlayState* play) {
+/**
+ * Walk semi-randomly around the Snapper's home until the timer reaches 0, then transition back to being idle.
+ * If the player gets close enough to the Snapper without the Stone Mask equipped, it will retreat into its
+ * shell to begin attacking them.
+ */
+void EnKame_Walk(EnKame* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if ((Player_GetMask(play) != PLAYER_MASK_STONE) && !(player->stateFlags1 & PLAYER_STATE1_800000) &&
(this->actor.xzDistToPlayer < 240.0f)) {
- func_80AD73A8(this);
+ EnKame_SetupRetreatIntoShell(this);
return;
}
SkelAnime_Update(&this->snapperSkelAnime);
- if (this->unk_2A4 != this->actor.shape.rot.y) {
- Math_ScaledStepToS(&this->actor.shape.rot.y, this->unk_2A4, 0x100);
+ if (this->targetRotY != this->actor.shape.rot.y) {
+ Math_ScaledStepToS(&this->actor.shape.rot.y, this->targetRotY, 0x100);
this->actor.world.rot.y = this->actor.shape.rot.y;
} else if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > 40.0f) {
- this->unk_2A4 = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos) + ((s32)Rand_Next() >> 0x14);
+ this->targetRotY = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos) + ((s32)Rand_Next() >> 0x14);
}
- this->unk_29E--;
- if (this->unk_29E == 0) {
- func_80AD70A0(this);
+ this->timer--;
+ if (this->timer == 0) {
+ EnKame_SetupIdle(this);
} else if (Animation_OnFrame(&this->snapperSkelAnime, 0.0f) || Animation_OnFrame(&this->snapperSkelAnime, 15.0f)) {
Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_WALK);
}
}
-void func_80AD73A8(EnKame* this) {
+void EnKame_SetupRetreatIntoShell(EnKame* this) {
Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperRetreatIntoShellAnim, -3.0f);
- this->unk_29E = 0;
- this->unk_2AC = 1.0f;
- this->unk_2A8 = 1.0f;
+ this->timer = 0;
+ this->limbScaleY = 1.0f;
+ this->limbScaleXZ = 1.0f;
this->actor.speed = 0.0f;
- if (this->unk_2A0 == 0) {
+
+ // If the Snapper recently played this same sound effect while it was idle, don't play it again.
+ if (this->voiceTimer == 0) {
Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_VOICE);
}
- this->actionFunc = func_80AD7424;
+
+ this->actionFunc = EnKame_RetreatIntoShell;
}
-void func_80AD7424(EnKame* this, PlayState* play) {
+/**
+ * Plays the animation of the Snapper retreating its shell, and scales its limbs appropriately to
+ * make it appear like its head and legs are going into the shell. Once the animation is over, the
+ * Snapper will either prepare for an attack (if the player is close enough and not wearing the
+ * Stone Mask), or it will emerge from its shell.
+ */
+void EnKame_RetreatIntoShell(EnKame* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (SkelAnime_Update(&this->snapperSkelAnime)) {
if ((Player_GetMask(play) != PLAYER_MASK_STONE) && !(player->stateFlags1 & PLAYER_STATE1_800000) &&
- ((this->unk_29E == 0) || (this->actor.xzDistToPlayer < 120.0f))) {
- func_80AD76CC(this);
+ ((this->timer == 0) || (this->actor.xzDistToPlayer < 120.0f))) {
+ EnKame_SetupPrepareToAttack(this);
} else {
- this->unk_29E--;
- if (this->unk_29E == 0) {
- func_80AD7B18(this);
+ this->timer--;
+ if (this->timer == 0) {
+ EnKame_SetupEmergeFromShell(this);
}
}
} else if (this->snapperSkelAnime.curFrame > 2.0f) {
- this->unk_2AC = 1.5f - ((this->snapperSkelAnime.curFrame - 2.0f) * (7.0f / 30));
- this->unk_2A8 = 1.5f - ((this->snapperSkelAnime.curFrame - 2.0f) * (1.0f / 12));
+ this->limbScaleY = 1.5f - ((this->snapperSkelAnime.curFrame - 2.0f) * (7.0f / 30));
+ this->limbScaleXZ = 1.5f - ((this->snapperSkelAnime.curFrame - 2.0f) * (1.0f / 12));
} else {
- f32 frame = this->snapperSkelAnime.curFrame;
+ f32 curFrame = this->snapperSkelAnime.curFrame;
- this->unk_2AC = (0.25f * frame) + 1.0f;
- this->unk_2A8 = (0.25f * frame) + 1.0f;
+ this->limbScaleY = (0.25f * curFrame) + 1.0f;
+ this->limbScaleXZ = (0.25f * curFrame) + 1.0f;
}
}
-void func_80AD7568(EnKame* this) {
- this->actor.speed = this->unk_2A6 * (5.0f / 7552);
- this->actor.shape.rot.z = this->unk_2A6 * 0.11016949f;
+/**
+ * Sets the Snapper's speed and z-rotation based on its angular velocity. When the Snapper is done with the first
+ * part of its attack, it will slowly "wind up" before moving back to its home; by setting the speed to be a multiple
+ * of its angular velocity, the Snapper will smootly ramp up its speed during the "wind up". As for the z-rotation,
+ * setting it in this manner gives the Snapper a subtle, almost-imperceptible tilt as it spins.
+ */
+void EnKame_SetAttackSpeed(EnKame* this) {
+ this->actor.speed = this->angularVelocityY * (5.0f / 0x1D80);
+ this->actor.shape.rot.z = this->angularVelocityY * (13.0f / 118.0f);
}
-void func_80AD75A8(EnKame* this, PlayState* play) {
- static Color_RGBA8 D_80AD8E54 = { 250, 250, 250, 255 };
- static Color_RGBA8 D_80AD8E58 = { 180, 180, 180, 255 };
- static Vec3f D_80AD8E5C = { 0.0f, 0.75f, 0.0f };
+/**
+ * If the Snapper is moving quickly enough over certain surface materials, this function will spawn dirt or snow-colored
+ * dust on even-numbered frames. Additionally, this function is also responsible for playing the Snapper's spinning
+ * sound effect if its angular velocity is large enough.
+ */
+void EnKame_ProcessAttackEffects(EnKame* this, PlayState* play) {
+ static Color_RGBA8 sSnowPrimColor = { 250, 250, 250, 255 };
+ static Color_RGBA8 sSnowEnvColor = { 180, 180, 180, 255 };
+ static Vec3f sVelocity = { 0.0f, 0.75f, 0.0f };
if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.speed >= 3.0f)) {
if ((play->gameplayFrames % 2) == 0) {
@@ -292,144 +350,190 @@ void func_80AD75A8(EnKame* this, PlayState* play) {
SurfaceType_GetMaterial(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId);
if ((surfaceMaterial == SURFACE_MATERIAL_DIRT) || (surfaceMaterial == SURFACE_MATERIAL_SAND)) {
- func_800B1210(play, &this->actor.world.pos, &D_80AD8E5C, &gZeroVec3f, 550, 100);
+ func_800B1210(play, &this->actor.world.pos, &sVelocity, &gZeroVec3f, 550, 100);
} else if (surfaceMaterial == SURFACE_MATERIAL_SNOW) {
- func_800B0DE0(play, &this->actor.world.pos, &D_80AD8E5C, &gZeroVec3f, &D_80AD8E54, &D_80AD8E58, 550,
- 100);
+ func_800B0DE0(play, &this->actor.world.pos, &sVelocity, &gZeroVec3f, &sSnowPrimColor, &sSnowEnvColor,
+ 550, 100);
}
}
}
- if (this->unk_2A6 > 0x1200) {
+ if (this->angularVelocityY > 0x1200) {
Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_PAMET_ROLL - SFX_FLAG);
}
}
-void func_80AD76CC(EnKame* this) {
+void EnKame_SetupPrepareToAttack(EnKame* this) {
+ // The Snapper's attack can be divided into roughly two phases:
+ // - Charging towards the player
+ // - Going back to their home
+ // This if-statement is checking which of the two is the current phase. If the Snapper is in the first
+ // phase of the attack, then it just finished retreating into its shell, and it hasn't switched to its
+ // "spiked" form yet. Thus, we check the draw function here to determine which phase the Snapper is in.
if (this->actor.draw == EnKame_Draw) {
- this->actor.draw = func_80AD8D64;
- this->unk_2A6 = 0x3B00;
- this->unk_2AC = 0.5f;
- func_80AD7568(this);
- this->unk_29E = 15;
+ this->actor.draw = EnKame_DrawSpikedSnapper;
+ this->angularVelocityY = 0x3B00;
+ this->spikesScale = 0.5f;
+ EnKame_SetAttackSpeed(this);
+ this->timer = 15;
this->actor.speed = 0.0f;
Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_CUTTER_ON);
- this->unk_2BC.y = this->actor.home.pos.y - 100.0f;
+ // As stated above, we could tell this was the first phase of the Snapper's attack because it hadn't
+ // changed its draw function to the "spiked" version yet. However, we won't be able to check the draw
+ // function in the future, because we just changed it; we need some other way to tell which phase of
+ // the attack the Snapper is in. Setting the targetPos's y-position here to something less than the
+ // home's y-position will be used as a signal in future functions to indicate this is the first phase
+ // of the attack. Nothing looks at the y-position of the targetPos, so we can use it however we want,
+ // and during the second phase of the attack, the Snapper's home position is copied into targetPos,
+ // including the y-position; the targetPos's y-position will *only* differ from the home's y-position
+ // during the first phase of the attack due to the code below.
+ this->targetPos.y = this->actor.home.pos.y - 100.0f;
} else {
this->actor.world.rot.y = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos);
- Math_Vec3f_Copy(&this->unk_2BC, &this->actor.home.pos);
- this->unk_29E = 0;
+ Math_Vec3f_Copy(&this->targetPos, &this->actor.home.pos);
+ this->timer = 0;
}
+
this->actor.flags |= ACTOR_FLAG_10;
- this->actionFunc = func_80AD7798;
+ this->actionFunc = EnKame_PrepareToAttack;
}
-void func_80AD7798(EnKame* this, PlayState* play) {
- if (this->unk_29E == 15) {
- this->unk_2AC += 0.2f;
- if (this->unk_2AC > 1.1f) {
- this->unk_29E--;
+/**
+ * This function gradually increases the angular velocity to 0x3B00 and does a few other miscellaneous tasks (e.g.,
+ * scaling the spikes up and making the Snapper face the player for the first phase of the attack) before attacking.
+ */
+void EnKame_PrepareToAttack(EnKame* this, PlayState* play) {
+ // In EnKame_SetupPrepareToAttack, the timer is set to 15 if it was the first phase of the attack, so this is yet
+ // another way of checking the current phase. Gradually scale the spikes up, and once they reach their full size,
+ // enable AT collisions so the Snapper can damage the player.
+ if (this->timer == 15) {
+ this->spikesScale += 0.2f;
+ if (this->spikesScale > 1.1f) {
+ this->timer--;
this->collider.base.atFlags |= AT_ON;
- this->unk_2AC = 1.0f;
+ this->spikesScale = 1.0f;
}
- } else if (this->unk_29E > 0) {
- this->unk_29E--;
- } else if (Math_ScaledStepToS(&this->unk_2A6, 0x3B00, (s32)(this->unk_2A6 * 0.09f) + 45)) {
- if (this->unk_2BC.y < this->actor.home.pos.y) {
+ } else if (this->timer > 0) {
+ this->timer--;
+ } else if (Math_ScaledStepToS(&this->angularVelocityY, 0x3B00, (s32)(this->angularVelocityY * 0.09f) + 45)) {
+ // If it's the first phase of the attack, rotate the Snapper to face the player and set the targetPos to a
+ // fixed position in that direction. This will make them charge towards the player once they start moving.
+ if (this->targetPos.y < this->actor.home.pos.y) {
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
- this->unk_2BC.x = (Math_SinS(this->actor.world.rot.y) * 360.0f) + this->actor.world.pos.x;
- this->unk_2BC.z = (Math_CosS(this->actor.world.rot.y) * 360.0f) + this->actor.world.pos.z;
+ this->targetPos.x = (Math_SinS(this->actor.world.rot.y) * 360.0f) + this->actor.world.pos.x;
+ this->targetPos.z = (Math_CosS(this->actor.world.rot.y) * 360.0f) + this->actor.world.pos.z;
}
- func_80AD792C(this);
+
+ EnKame_SetupAttack(this);
}
- this->actor.shape.rot.y += this->unk_2A6;
+ this->actor.shape.rot.y += this->angularVelocityY;
- if (!(this->unk_2BC.y < this->actor.home.pos.y) || (this->actionFunc != func_80AD7798)) {
- func_80AD7568(this);
+ // Calling EnKame_SetAttackSpeed will set the Snapper's speed based on its current angular velocity; since we are
+ // gradually scaling up the angular velocity, this would gradually scale up the speed as well. However, during the
+ // first phase of the attack, the Snapper should wait in place until it reaches its maximum angular velocity. This
+ // check will prevent us from changing the Snapper's speed during the first phase until we're just about to attack.
+ if (!(this->targetPos.y < this->actor.home.pos.y) || (this->actionFunc != EnKame_PrepareToAttack)) {
+ EnKame_SetAttackSpeed(this);
}
- func_80AD75A8(this, play);
+
+ EnKame_ProcessAttackEffects(this, play);
}
-void func_80AD792C(EnKame* this) {
- this->unk_29E = -1;
- this->actionFunc = func_80AD7948;
+void EnKame_SetupAttack(EnKame* this) {
+ this->targetAngularVelocityY = -1;
+ this->actionFunc = EnKame_Attack;
}
-void func_80AD7948(EnKame* this, PlayState* play) {
- s32 temp_v1;
+/**
+ * Moves the Snapper towards its target while spinning until it hits a wall or reaches the target. Once that happens,
+ * the Snapper will either reduce its angular velocity to 0x300 and prepare for the second phase of the attack (if the
+ * Snapper is currently in the first phase), or it will reduce its angular velocity to 0 and emerge from its shell (if
+ * the Snapper is currently in the second phase).
+ */
+void EnKame_Attack(EnKame* this, PlayState* play) {
+ this->actor.shape.rot.y += this->angularVelocityY;
+ EnKame_ProcessAttackEffects(this, play);
- this->actor.shape.rot.y += this->unk_2A6;
- func_80AD75A8(this, play);
+ if (this->targetAngularVelocityY == -1) {
+ s32 absYawToTarget;
+ s16 yawToTarget = Actor_WorldYawTowardPoint(&this->actor, &this->targetPos) - this->actor.world.rot.y;
- if (this->unk_29E == -1) {
- s16 temp_v0 = Actor_WorldYawTowardPoint(&this->actor, &this->unk_2BC) - this->actor.world.rot.y;
+ absYawToTarget = ABS_ALT(yawToTarget);
- temp_v1 = ABS_ALT(temp_v0);
-
- if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) || (temp_v1 > 0x3000) ||
- (Actor_WorldDistXZToPoint(&this->actor, &this->unk_2BC) < 50.0f)) {
+ // If the yaw toward the targetPos is too large, that indicates the Snapper probably moved
+ // beyond its target (in other words, the target is now "behind" the Snapper).
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) || (absYawToTarget > 0x3000) ||
+ (Actor_WorldDistXZToPoint(&this->actor, &this->targetPos) < 50.0f)) {
s8 pad;
- if (this->unk_2BC.y < this->actor.home.pos.y) {
- this->unk_29E = 0x300;
+ if (this->targetPos.y < this->actor.home.pos.y) {
+ this->targetAngularVelocityY = 0x300;
} else {
- this->unk_29E = 0;
+ this->targetAngularVelocityY = 0;
}
}
return;
}
- if (Math_ScaledStepToS(&this->unk_2A6, this->unk_29E, (s32)(this->unk_2A6 * 0.09f) + 45)) {
- if (this->unk_29E == 0) {
- if (this->unk_2AC >= 1.0f) {
+ if (Math_ScaledStepToS(&this->angularVelocityY, this->targetAngularVelocityY,
+ (s32)(this->angularVelocityY * 0.09f) + 45)) {
+ if (this->targetAngularVelocityY == 0) {
+ if (this->spikesScale >= 1.0f) {
Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_CUTTER_OFF);
}
- this->unk_2AC -= 0.1f;
+
+ this->spikesScale -= 0.1f;
this->collider.base.atFlags &= ~AT_ON;
- if (this->unk_2AC < 0.5f) {
+ if (this->spikesScale < 0.5f) {
this->actor.flags &= ~ACTOR_FLAG_10;
- func_80AD7B18(this);
+ EnKame_SetupEmergeFromShell(this);
}
} else {
- func_80AD76CC(this);
+ EnKame_SetupPrepareToAttack(this);
}
}
- func_80AD7568(this);
+
+ EnKame_SetAttackSpeed(this);
}
-void func_80AD7B18(EnKame* this) {
+void EnKame_SetupEmergeFromShell(EnKame* this) {
this->actor.draw = EnKame_Draw;
Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperEmergeFromShellAnim, -3.0f);
this->actor.speed = 0.0f;
- this->unk_2AC = 0.1f;
- this->unk_2A8 = 1.0f;
+ this->limbScaleY = 0.1f;
+ this->limbScaleXZ = 1.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
- this->actionFunc = func_80AD7B90;
+ this->actionFunc = EnKame_EmergeFromShell;
}
-void func_80AD7B90(EnKame* this, PlayState* play) {
+/**
+ * Plays the animation of the Snapper emerging from its shell, and scales its limbs appropriately to
+ * make it appear like its head and legs are coming out of the shell. Once the animation is over, this
+ * will make the Snapper start walking again.
+ */
+void EnKame_EmergeFromShell(EnKame* this, PlayState* play) {
if (SkelAnime_Update(&this->snapperSkelAnime)) {
- func_80AD71B4(this);
+ EnKame_SetupWalk(this);
} else if (this->snapperSkelAnime.curFrame > 7.0f) {
- this->unk_2AC = 1.5f - ((this->snapperSkelAnime.curFrame - 7.0f) * (1.0f / 6));
- this->unk_2A8 = 1.5f - ((this->snapperSkelAnime.curFrame - 7.0f) * (1.0f / 6));
+ this->limbScaleY = 1.5f - ((this->snapperSkelAnime.curFrame - 7.0f) * (1.0f / 6));
+ this->limbScaleXZ = 1.5f - ((this->snapperSkelAnime.curFrame - 7.0f) * (1.0f / 6));
} else {
- f32 frame = this->snapperSkelAnime.curFrame;
+ f32 curFrame = this->snapperSkelAnime.curFrame;
- this->unk_2AC = (0.2f * frame) + 0.1f;
- this->unk_2A8 = ((1.0f / 14) * frame) + 1.0f;
+ this->limbScaleY = (0.2f * curFrame) + 0.1f;
+ this->limbScaleXZ = ((1.0f / 14) * curFrame) + 1.0f;
}
}
-void func_80AD7C54(EnKame* this) {
- if (this->actionFunc == func_80AD7E0C) {
+void EnKame_SetupFlip(EnKame* this) {
+ if (this->actionFunc == EnKame_Struggle) {
Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperBouncedUprightAnim, -3.0f);
- this->unk_29E = 1;
+ this->flipType = EN_KAME_FLIP_TYPE_RIGHTSIDE_UP;
this->collider.info.bumper.dmgFlags &= ~0x8000;
} else {
Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperFlipOverAnim, -3.0f);
- this->unk_29E = 0;
+ this->flipType = EN_KAME_FLIP_TYPE_UPSIDE_DOWN;
this->collider.info.bumper.dmgFlags |= 0x8000;
}
@@ -441,32 +545,39 @@ void func_80AD7C54(EnKame* this) {
this->actor.flags &= ~ACTOR_FLAG_10;
this->actor.shape.rot.z = 0;
Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_REVERSE);
- this->actionFunc = func_80AD7D40;
+ this->actionFunc = EnKame_Flip;
}
-void func_80AD7D40(EnKame* this, PlayState* play) {
+/**
+ * If the Snapper is flipped upside-down, this will make it struggle for 200 frames once the flip animation ends.
+ * If the Snapper is flipped rightside-up, this will make it start walking once the flip animation ends.
+ */
+void EnKame_Flip(EnKame* this, PlayState* play) {
if (SkelAnime_Update(&this->snapperSkelAnime)) {
- if (this->unk_29E == 1) {
- func_80AD71B4(this);
+ if (this->flipType == EN_KAME_FLIP_TYPE_RIGHTSIDE_UP) {
+ EnKame_SetupWalk(this);
} else {
- this->unk_29E = 200;
- func_80AD7DA4(this);
+ this->timer = 200;
+ EnKame_SetupStruggle(this);
}
}
}
-void func_80AD7DA4(EnKame* this) {
+void EnKame_SetupStruggle(EnKame* this) {
Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperWiggleLegsAnim, -3.0f);
this->collider.base.acFlags |= AC_ON;
this->collider.base.acFlags &= ~AC_HARD;
this->collider.base.colType = COLTYPE_HIT6;
this->actor.speed = 0.0f;
- this->actionFunc = func_80AD7E0C;
+ this->actionFunc = EnKame_Struggle;
}
-void func_80AD7E0C(EnKame* this, PlayState* play) {
- if (this->unk_29E > 0) {
- this->unk_29E--;
+/**
+ * Plays various struggling animations until the timer reaches 0, then it flips itself upright.
+ */
+void EnKame_Struggle(EnKame* this, PlayState* play) {
+ if (this->timer > 0) {
+ this->timer--;
if (SkelAnime_Update(&this->snapperSkelAnime)) {
if (Rand_ZeroOne() > 0.5f) {
Animation_PlayOnce(&this->snapperSkelAnime, &gSnapperWiggleLegsAnim);
@@ -476,69 +587,85 @@ void func_80AD7E0C(EnKame* this, PlayState* play) {
}
}
} else {
- func_80AD7EC0(this);
+ EnKame_SetupFlipUpright(this);
}
}
-void func_80AD7EC0(EnKame* this) {
+void EnKame_SetupFlipUpright(EnKame* this) {
Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperFlipUprightAnim, -3.0f);
Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_WAKEUP);
- this->actionFunc = func_80AD7F10;
+ this->actionFunc = EnKame_FlipUpright;
}
-void func_80AD7F10(EnKame* this, PlayState* play) {
+/**
+ * Plays the animation of the Snapper flipping itself upright, then transitions back to walking.
+ */
+void EnKame_FlipUpright(EnKame* this, PlayState* play) {
if (SkelAnime_Update(&this->snapperSkelAnime)) {
this->actor.shape.shadowDraw = ActorShadow_DrawCircle;
- func_80AD71B4(this);
+ EnKame_SetupWalk(this);
} else if (this->snapperSkelAnime.curFrame >= 10.0f) {
+ // This is the part of the animation where the Snapper starts to flip itself
+ // upright. During this flip, this actor needs to manually control when
+ // ActorShadow_DrawCircle is called, so the shadowDraw pointer is set to NULL.
+ // See EnKame_PostLimbDraw and EnKame_Draw for more information.
this->actor.shape.shadowDraw = NULL;
this->collider.base.acFlags &= ~AC_ON;
this->collider.info.bumper.dmgFlags &= ~0x8000;
}
}
-void func_80AD7FA4(EnKame* this) {
+void EnKame_SetupStunned(EnKame* this) {
this->actor.speed = 0.0f;
if (this->actor.velocity.y > 0.0f) {
this->actor.velocity.y = 0.0f;
}
+
func_800BE504(&this->actor, &this->collider);
- this->actionFunc = func_80AD7FF8;
+ this->actionFunc = EnKame_Stunned;
}
-void func_80AD7FF8(EnKame* this, PlayState* play) {
- if (this->unk_2A2 != 0) {
- this->unk_2A2--;
+/**
+ * Stops the Snapper's animation and locks it in place until the stun timer reaches zero. After that, the
+ * Snapper either dies (if the attack that stunned it reduced its health to 0) or goes back to struggling.
+ * If the Snapper dies in this state, it skips the "finishing blow" screen flash and game freeze.
+ */
+void EnKame_Stunned(EnKame* this, PlayState* play) {
+ if (this->stunTimer != 0) {
+ this->stunTimer--;
}
- if (this->unk_2A2 == 0) {
- func_80AD7018(this, play);
+ if (this->stunTimer == 0) {
+ EnKame_Thaw(this, play);
if (this->actor.colChkInfo.health == 0) {
- func_80AD8148(this, NULL);
+ EnKame_SetupDead(this, NULL);
} else {
this->actor.world.rot.y = this->actor.shape.rot.y;
- func_80AD7DA4(this);
+ EnKame_SetupStruggle(this);
}
}
}
-void func_80AD8060(EnKame* this) {
- s16 lastFrame = Animation_GetLastFrame(&gSnapperDamageAnim);
+void EnKame_SetupDamaged(EnKame* this) {
+ s16 endFrame = Animation_GetLastFrame(&gSnapperDamageAnim);
- Animation_Change(&this->snapperSkelAnime, &gSnapperDamageAnim, 1.0f, 0.0f, lastFrame, ANIMMODE_ONCE, -3.0f);
- Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, lastFrame);
+ Animation_Change(&this->snapperSkelAnime, &gSnapperDamageAnim, 1.0f, 0.0f, endFrame, ANIMMODE_ONCE, -3.0f);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, endFrame);
Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_DAMAGE);
this->collider.base.acFlags &= ~AC_ON;
- this->actionFunc = func_80AD810C;
+ this->actionFunc = EnKame_Damaged;
}
-void func_80AD810C(EnKame* this, PlayState* play) {
+/**
+ * Plays the damaged animation, then goes back to struggling to flip itself upright.
+ */
+void EnKame_Damaged(EnKame* this, PlayState* play) {
if (SkelAnime_Update(&this->snapperSkelAnime)) {
- func_80AD7DA4(this);
+ EnKame_SetupStruggle(this);
}
}
-void func_80AD8148(EnKame* this, PlayState* play) {
+void EnKame_SetupDead(EnKame* this, PlayState* play) {
Animation_PlayLoop(&this->snapperSkelAnime, &gSnapperDeathAnim);
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 20);
this->collider.base.acFlags &= ~AC_ON;
@@ -546,53 +673,71 @@ void func_80AD8148(EnKame* this, PlayState* play) {
this->collider.base.atFlags &= ~(AC_HARD | AC_HIT);
this->actor.velocity.y = 15.0f;
this->actor.speed = 1.5f;
+
+ // This allows callers of this function to skip the "finishing blow" screen flash and game freeze as well
+ // as the rotation that happens if the Snapper is killed by a projectile. Only EnKame_Stunned calls this
+ // while passing NULL instead of play; in practice, this means that the only way to skip this code is to
+ // kill the Snapper with an Ice Arrow, since that's the only attack that both stuns it and deals damage.
if (play != NULL) {
Enemy_StartFinishingBlow(play, &this->actor);
- if (this->actor.draw == func_80AD8D64) {
+ if (this->actor.draw == EnKame_DrawSpikedSnapper) {
this->actor.draw = EnKame_Draw;
} else {
func_800BE504(&this->actor, &this->collider);
}
}
+
this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
this->actor.flags &= ~ACTOR_FLAG_TARGETABLE;
this->actor.flags |= ACTOR_FLAG_10;
Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_DEAD);
- this->unk_29E = 0;
- this->actionFunc = func_80AD825C;
+ this->timer = 0;
+ this->actionFunc = EnKame_Dead;
}
-void func_80AD825C(EnKame* this, PlayState* play) {
+/**
+ * Launches the Snapper into the air and spins it around wildly. Makes the Snapper
+ * burst into flames once it touches the ground.
+ */
+void EnKame_Dead(EnKame* this, PlayState* play) {
SkelAnime_Update(&this->snapperSkelAnime);
if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.velocity.y < 0.0f)) {
Actor_PlaySfx(&this->actor, NA_SE_EN_HIPLOOP_LAND);
- func_80AD8364(this);
+ EnKame_SetupBurstIntoFlames(this);
} else {
- if (this->unk_29E == 1) {
+ //! @bug unreachable code: EnKame_SetupDead sets this variable to 0, and no other code that runs
+ //! while the Snapper is in this state will change it to anything else.
+ if (this->timer == 1) {
this->actor.colorFilterTimer = 100;
} else if (this->actor.colorFilterTimer == 0) {
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_NONE, 255, COLORFILTER_BUFFLAG_OPA, 100);
}
+
this->actor.shape.rot.x += Rand_S16Offset(0x700, 0x1400);
this->actor.shape.rot.y += (s16)Rand_ZeroFloat(5120.0f);
this->actor.shape.rot.z += Rand_S16Offset(0x700, 0x1400);
}
}
-void func_80AD8364(EnKame* this) {
- this->unk_29E = 20;
+void EnKame_SetupBurstIntoFlames(EnKame* this) {
+ this->timer = 20;
this->actor.speed = 0.0f;
- this->actionFunc = func_80AD8388;
+ this->actionFunc = EnKame_BurstIntoFlames;
}
-void func_80AD8388(EnKame* this, PlayState* play) {
- Vec3f sp34;
+/**
+ * After waiting for the timer to reach 0, this function gradually shrinks the actor
+ * and spawns blue flames around it. Once the Snapper shrinks enough, this drops a
+ * random item and kills the actor.
+ */
+void EnKame_BurstIntoFlames(EnKame* this, PlayState* play) {
+ Vec3f flamePos;
SkelAnime_Update(&this->snapperSkelAnime);
this->actor.colorFilterTimer = 100;
- if (this->unk_29E > 0) {
- this->unk_29E--;
- if (this->unk_29E == 0) {
+ if (this->timer > 0) {
+ this->timer--;
+ if (this->timer == 0) {
SoundSource_PlaySfxEachFrameAtFixedWorldPos(play, &this->actor.world.pos, 21,
NA_SE_EN_COMMON_EXTINCT_LEV - SFX_FLAG);
}
@@ -605,14 +750,15 @@ void func_80AD8388(EnKame* this, PlayState* play) {
this->actor.scale.y = this->actor.scale.x;
this->actor.scale.z = this->actor.scale.x;
}
- sp34.x = Rand_CenteredFloat(40.0f) + this->actor.world.pos.x;
- sp34.y = this->actor.world.pos.y + 15.0f;
- sp34.z = Rand_CenteredFloat(40.0f) + this->actor.world.pos.z;
- func_800B3030(play, &sp34, &gZeroVec3f, &gZeroVec3f, 100, 0, 2);
+
+ flamePos.x = Rand_CenteredFloat(40.0f) + this->actor.world.pos.x;
+ flamePos.y = this->actor.world.pos.y + 15.0f;
+ flamePos.z = Rand_CenteredFloat(40.0f) + this->actor.world.pos.z;
+ func_800B3030(play, &flamePos, &gZeroVec3f, &gZeroVec3f, 100, 0, 2);
}
}
-void func_80AD84C0(EnKame* this, PlayState* play) {
+void EnKame_UpdateDamage(EnKame* this, PlayState* play) {
if (this->collider.base.acFlags & AC_HIT) {
this->collider.base.acFlags &= ~AC_HIT;
@@ -622,51 +768,52 @@ void func_80AD84C0(EnKame* this, PlayState* play) {
return;
}
- func_80AD7018(this, play);
- if (this->actor.colChkInfo.damageEffect == 13) {
+ EnKame_Thaw(this, play);
+ if (this->actor.colChkInfo.damageEffect == EN_KAME_DMGEFF_HOOKSHOT) {
return;
}
- if (this->actor.colChkInfo.damageEffect == 14) {
- func_80AD8148(this, play);
- } else if (this->actor.colChkInfo.damageEffect == 15) {
+ if (this->actor.colChkInfo.damageEffect == EN_KAME_DMGEFF_INSTANT_KILL) {
+ EnKame_SetupDead(this, play);
+ } else if (this->actor.colChkInfo.damageEffect == EN_KAME_DMGEFF_FLIP_OVER) {
if (this->collider.base.acFlags & AC_HARD) {
- func_80AD7C54(this);
+ EnKame_SetupFlip(this);
} else if (!Actor_ApplyDamage(&this->actor)) {
- func_80AD8148(this, play);
+ EnKame_SetupDead(this, play);
} else {
- func_80AD8060(this);
+ EnKame_SetupDamaged(this);
}
- } else if ((this->actionFunc == func_80AD70EC) || (this->actionFunc == func_80AD7254)) {
- func_80AD73A8(this);
- this->unk_29E = 21;
+ } else if ((this->actionFunc == EnKame_Idle) || (this->actionFunc == EnKame_Walk)) {
+ EnKame_SetupRetreatIntoShell(this);
+ this->timer = 21;
} else if (!(this->collider.base.acFlags & AC_HARD)) {
- if (this->actor.colChkInfo.damageEffect == 5) {
- this->unk_2A2 = 40;
+ if (this->actor.colChkInfo.damageEffect == EN_KAME_DMGEFF_ELECTRIC_STUN) {
+ this->stunTimer = 40;
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, 40);
Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
this->drawDmgEffScale = 0.6f;
this->drawDmgEffAlpha = 2.0f;
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL;
- func_80AD7FA4(this);
- } else if (this->actor.colChkInfo.damageEffect == 1) {
- this->unk_2A2 = 40;
+ EnKame_SetupStunned(this);
+ } else if (this->actor.colChkInfo.damageEffect == EN_KAME_DMGEFF_STUN) {
+ this->stunTimer = 40;
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, 40);
Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
- func_80AD7FA4(this);
- } else if (this->actor.colChkInfo.damageEffect == 3) {
- func_80AD6F9C(this);
+ EnKame_SetupStunned(this);
+ } else if (this->actor.colChkInfo.damageEffect == EN_KAME_DMGEFF_FREEZE) {
+ EnKame_Freeze(this);
if (!Actor_ApplyDamage(&this->actor)) {
- this->unk_2A2 = 3;
+ this->stunTimer = 3;
this->collider.base.acFlags &= ~AC_ON;
}
- func_80AD7FA4(this);
+
+ EnKame_SetupStunned(this);
} else {
- if (this->actor.colChkInfo.damageEffect == 2) {
+ if (this->actor.colChkInfo.damageEffect == EN_KAME_DMGEFF_FIRE) {
this->drawDmgEffScale = 0.6f;
this->drawDmgEffAlpha = 4.0f;
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
- } else if (this->actor.colChkInfo.damageEffect == 4) {
+ } else if (this->actor.colChkInfo.damageEffect == EN_KAME_DMGEFF_LIGHT_ORB) {
this->drawDmgEffScale = 0.6f;
this->drawDmgEffAlpha = 4.0f;
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
@@ -676,9 +823,9 @@ void func_80AD84C0(EnKame* this, PlayState* play) {
}
if (!Actor_ApplyDamage(&this->actor)) {
- func_80AD8148(this, play);
+ EnKame_SetupDead(this, play);
} else {
- func_80AD8060(this);
+ EnKame_SetupDamaged(this);
}
}
}
@@ -686,8 +833,8 @@ void func_80AD84C0(EnKame* this, PlayState* play) {
if ((play->actorCtx.unk2 != 0) && (this->actor.xyzDistToPlayerSq < SQ(200.0f)) &&
(this->collider.base.acFlags & AC_ON)) {
- func_80AD7018(this, play);
- func_80AD7C54(this);
+ EnKame_Thaw(this, play);
+ EnKame_SetupFlip(this);
}
}
@@ -695,22 +842,21 @@ void EnKame_Update(Actor* thisx, PlayState* play) {
s32 pad;
EnKame* this = THIS;
- func_80AD6F34(this);
+ EnKame_Blink(this);
- if (this->unk_2A0 != 0) {
- this->unk_2A0--;
- }
+ DECR(this->voiceTimer);
- func_80AD84C0(this, play);
+ EnKame_UpdateDamage(this, play);
if ((this->collider.base.atFlags & AT_HIT) && (this->collider.base.atFlags & AT_BOUNCED)) {
this->collider.base.atFlags &= ~(AT_BOUNCED | AT_HIT);
- func_80AD76CC(this);
- if (Actor_WorldDistXZToPoint(&this->actor, &this->unk_2BC) < 50.0f) {
+ EnKame_SetupPrepareToAttack(this);
+ if (Actor_WorldDistXZToPoint(&this->actor, &this->targetPos) < 50.0f) {
this->collider.base.atFlags &= ~AT_ON;
}
- this->unk_2A6 = 0x3B00;
- func_80AD7568(this);
+
+ this->angularVelocityY = 0x3B00;
+ EnKame_SetAttackSpeed(this);
}
this->actionFunc(this, play);
@@ -720,6 +866,8 @@ void EnKame_Update(Actor* thisx, PlayState* play) {
UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 |
UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10);
+ // When the Snapper is in the middle of the animation where it's flipping upright,
+ // setting the focus and updating the collider is handled in EnKame_Draw instead.
if (this->actor.shape.shadowDraw != NULL) {
Actor_SetFocus(&this->actor, 25.0f);
Collider_UpdateCylinder(&this->actor, &this->collider);
@@ -744,32 +892,38 @@ void EnKame_Update(Actor* thisx, PlayState* play) {
} else {
this->drawDmgEffScale = this->drawDmgEffScale;
}
- } else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.6f, 0.015000001f)) {
+ } else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.6f, 15.0f * 0.001f)) {
Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
}
}
}
-s32 func_80AD8A48(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
+s32 EnKame_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
EnKame* this = THIS;
- if ((this->actionFunc == func_80AD7424) || (this->actionFunc == func_80AD7B90)) {
+ if ((this->actionFunc == EnKame_RetreatIntoShell) || (this->actionFunc == EnKame_EmergeFromShell)) {
if (limbIndex == SNAPPER_LIMB_HEAD) {
- Matrix_Scale(this->unk_2A8, this->unk_2AC, this->unk_2A8, MTXMODE_APPLY);
+ Matrix_Scale(this->limbScaleXZ, this->limbScaleY, this->limbScaleXZ, MTXMODE_APPLY);
} else if ((limbIndex == SNAPPER_LIMB_BACK_RIGHT_LEG) || (limbIndex == SNAPPER_LIMB_BACK_LEFT_LEG) ||
(limbIndex == SNAPPER_LIMB_FRONT_RIGHT_LEG) || (limbIndex == SNAPPER_LIMB_FRONT_LEFT_LEG)) {
- Matrix_Scale(this->unk_2A8, this->unk_2AC, this->unk_2AC, MTXMODE_APPLY);
+ Matrix_Scale(this->limbScaleXZ, this->limbScaleY, this->limbScaleY, MTXMODE_APPLY);
}
}
+
return false;
}
-static Vec3f D_80AD8E68[] = {
- { 1500.0f, 0.0f, -2000.0f }, // SNAPPER_BODYPART_5
- { 1500.0f, 0.0f, 2000.0f }, // SNAPPER_BODYPART_6
- { 1500.0f, 2000.0f, 0.0f }, // SNAPPER_BODYPART_7
- { 1500.0f, -2000.0f, 0.0f }, // SNAPPER_BODYPART_8
- { 2500.0f, 0.0f, 0.0f }, // SNAPPER_BODYPART_9
+/**
+ * Five of the entries in the body parts array are used for rendering
+ * multiple effects on the Snapper's body limb. The positions of these
+ * effects are offset from the body limb using the values in this array.
+ */
+static Vec3f sBodyLimbBodyPartOffsets[] = {
+ { 1500.0f, 0.0f, -2000.0f }, // SNAPPER_BODYPART_BODY_1
+ { 1500.0f, 0.0f, 2000.0f }, // SNAPPER_BODYPART_BODY_2
+ { 1500.0f, 2000.0f, 0.0f }, // SNAPPER_BODYPART_BODY_3
+ { 1500.0f, -2000.0f, 0.0f }, // SNAPPER_BODYPART_BODY_4
+ { 2500.0f, 0.0f, 0.0f }, // SNAPPER_BODYPART_BODY_5
};
static s8 sLimbToBodyParts[SNAPPER_LIMB_MAX] = {
@@ -788,7 +942,7 @@ static s8 sLimbToBodyParts[SNAPPER_LIMB_MAX] = {
SNAPPER_BODYPART_BACK_RIGHT_FOOT, // SNAPPER_LIMB_BACK_RIGHT_FOOT
};
-void func_80AD8AF8(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
+void EnKame_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
EnKame* this = THIS;
if (sLimbToBodyParts[limbIndex] != BODYPART_NONE) {
@@ -797,69 +951,90 @@ void func_80AD8AF8(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Acto
if (limbIndex == SNAPPER_LIMB_BODY) {
s32 i;
- Vec3f* ptr;
- Vec3f* ptr2;
+ Vec3f* bodyPartsPosPtr;
+ Vec3f* bodyLimbOffsetsPtr;
+ // When the Snapper is flipping itself upright, the animation will make it appear
+ // as if it is jumping off the ground. This is purely visual, though, so if we do
+ // nothing, the actor's position won't actually change during this apparent "jump",
+ // which causes certain things like the circle shadow and the actor's focus to look
+ // incorrect. To fix this, we temporarily adjust the actor's position during this
+ // animation so that everything looks correct. This position change is overridden
+ // at the end of EnKame_Draw, so from the perspective of most other functions,
+ // nothing really changes.
if (this->actor.shape.shadowDraw == NULL) {
Matrix_MultZero(&this->actor.world.pos);
}
- ptr2 = D_80AD8E68;
- ptr = &this->bodyPartsPos[SNAPPER_BODYPART_5];
- for (i = 0; i < ARRAY_COUNT(D_80AD8E68); i++) {
- Matrix_MultVec3f(ptr2, ptr);
- ptr2++;
- ptr++;
+ bodyLimbOffsetsPtr = sBodyLimbBodyPartOffsets;
+ bodyPartsPosPtr = &this->bodyPartsPos[SNAPPER_BODYPART_BODY_1];
+ for (i = 0; i < ARRAY_COUNT(sBodyLimbBodyPartOffsets); i++) {
+ Matrix_MultVec3f(bodyLimbOffsetsPtr, bodyPartsPosPtr);
+ bodyLimbOffsetsPtr++;
+ bodyPartsPosPtr++;
}
}
}
void EnKame_Draw(Actor* thisx, PlayState* play) {
EnKame* this = THIS;
- Vec3f sp40;
+ Vec3f originalPos;
- if (this->actor.shape.shadowDraw == 0) {
- Math_Vec3f_Copy(&sp40, &this->actor.world.pos);
+ // If the Snapper is flipping itself upright, we'll update its position inside EnKame_PostLimbDraw
+ // to make it better match the "jump" that it does in the animation. We want to make sure that its
+ // original position is restored before we exit this function, however, so we save it here before
+ // we ever call EnKame_PostLimbDraw.
+ if (this->actor.shape.shadowDraw == NULL) {
+ Math_Vec3f_Copy(&originalPos, &this->actor.world.pos);
}
OPEN_DISPS(play->state.gfxCtx);
Gfx_SetupDL25_Opa(play->state.gfxCtx);
- gSPSegment(POLY_OPA_DISP++, 0x08, D_80AD8E34[this->unk_29C]);
+ gSPSegment(POLY_OPA_DISP++, 0x08, sEyeTextures[this->eyeIndex]);
SkelAnime_DrawFlexOpa(play, this->snapperSkelAnime.skeleton, this->snapperSkelAnime.jointTable,
- this->snapperSkelAnime.dListCount, func_80AD8A48, func_80AD8AF8, &this->actor);
+ this->snapperSkelAnime.dListCount, EnKame_OverrideLimbDraw, EnKame_PostLimbDraw,
+ &this->actor);
Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, SNAPPER_BODYPART_MAX, this->drawDmgEffScale,
this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType);
+ // The Snapper is in the middle of the animation where it's flipping upright, and we updated its position
+ // in EnKame_PostLimbDraw as explained earlier. We draw the circle shadow, set the focus, and update its
+ // collider; all of these rely on the Snapper's position being updated earlier to match the "jump" that it
+ // does in its animation. Once we're done, we restore the Snappper's position back to what it was before
+ // because we want other functions to act like the position never changed.
if (this->actor.shape.shadowDraw == NULL) {
ActorShadow_DrawCircle(&this->actor, NULL, play);
Actor_SetFocus(&this->actor, 25.0f);
Collider_UpdateCylinder(&this->actor, &this->collider);
- Math_Vec3f_Copy(&this->actor.world.pos, &sp40);
+ Math_Vec3f_Copy(&this->actor.world.pos, &originalPos);
}
CLOSE_DISPS(play->state.gfxCtx);
}
-s32 Enkame_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
+s32 EnKame_SpikedSnapperOverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot,
+ Actor* thisx) {
EnKame* this = THIS;
if (limbIndex == SPIKED_SNAPPER_LIMB_BODY) {
pos->y -= 700.0f;
}
- if ((this->unk_2AC != 1.0f) && (limbIndex == SPIKED_SNAPPER_LIMB_SPIKES)) {
- Matrix_Scale(1.0f, this->unk_2AC, this->unk_2AC, MTXMODE_APPLY);
+ if ((this->spikesScale != 1.0f) && (limbIndex == SPIKED_SNAPPER_LIMB_SPIKES)) {
+ Matrix_Scale(1.0f, this->spikesScale, this->spikesScale, MTXMODE_APPLY);
}
+
return false;
}
-void func_80AD8D64(Actor* thisx, PlayState* play) {
+void EnKame_DrawSpikedSnapper(Actor* thisx, PlayState* play) {
EnKame* this = THIS;
Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->spikedSnapperSkelAnime.skeleton, this->spikedSnapperSkelAnime.jointTable,
- this->spikedSnapperSkelAnime.dListCount, Enkame_OverrideLimbDraw, NULL, &this->actor);
+ this->spikedSnapperSkelAnime.dListCount, EnKame_SpikedSnapperOverrideLimbDraw, NULL,
+ &this->actor);
}
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 31095bf22..2ca2f4047 100644
--- a/src/overlays/actors/ovl_En_Kame/z_en_kame.h
+++ b/src/overlays/actors/ovl_En_Kame/z_en_kame.h
@@ -14,11 +14,11 @@ typedef enum SnapperBodyPart {
/* 2 */ SNAPPER_BODYPART_FRONT_RIGHT_FOOT,
/* 3 */ SNAPPER_BODYPART_BACK_LEFT_FOOT,
/* 4 */ SNAPPER_BODYPART_BACK_RIGHT_FOOT,
- /* 5 */ SNAPPER_BODYPART_5,
- /* 6 */ SNAPPER_BODYPART_6,
- /* 7 */ SNAPPER_BODYPART_7,
- /* 8 */ SNAPPER_BODYPART_8,
- /* 9 */ SNAPPER_BODYPART_9,
+ /* 5 */ SNAPPER_BODYPART_BODY_1,
+ /* 6 */ SNAPPER_BODYPART_BODY_2,
+ /* 7 */ SNAPPER_BODYPART_BODY_3,
+ /* 8 */ SNAPPER_BODYPART_BODY_4,
+ /* 9 */ SNAPPER_BODYPART_BODY_5,
/* 10 */ SNAPPER_BODYPART_MAX
} SnapperBodyPart;
@@ -31,19 +31,26 @@ typedef struct EnKame {
/* 0x268 */ Vec3s spikedSnapperJointTable[SPIKED_SNAPPER_LIMB_MAX];
/* 0x280 */ Vec3s spikedSnapperMorphTable[SPIKED_SNAPPER_LIMB_MAX];
/* 0x298 */ EnKameActionFunc actionFunc;
- /* 0x29C */ u8 unk_29C;
+ /* 0x29C */ u8 eyeIndex;
/* 0x29D */ u8 drawDmgEffType;
- /* 0x29E */ s16 unk_29E;
- /* 0x2A0 */ s16 unk_2A0;
- /* 0x2A2 */ s16 unk_2A2;
- /* 0x2A4 */ s16 unk_2A4;
- /* 0x2A6 */ s16 unk_2A6;
- /* 0x2A8 */ f32 unk_2A8;
- /* 0x2AC */ f32 unk_2AC;
+ /* 0x29E */ union {
+ s16 timer;
+ s16 targetAngularVelocityY;
+ s16 flipType;
+ };
+ /* 0x2A0 */ s16 voiceTimer;
+ /* 0x2A2 */ s16 stunTimer;
+ /* 0x2A4 */ s16 targetRotY;
+ /* 0x2A6 */ s16 angularVelocityY;
+ /* 0x2A8 */ f32 limbScaleXZ;
+ /* 0x2AC */ union {
+ f32 limbScaleY; // used the Snapper's regular form (i.e., when it's walking around on its legs)
+ f32 spikesScale; // used for the Snapper's "spiked" form
+ };
/* 0x2B0 */ f32 drawDmgEffAlpha;
/* 0x2B4 */ f32 drawDmgEffScale;
/* 0x2B8 */ f32 drawDmgEffFrozenSteamScale;
- /* 0x2BC */ Vec3f unk_2BC;
+ /* 0x2BC */ Vec3f targetPos; // this actor relies on the y-position of this variable to be set in a specific way, see EnKame_SetupPrepareToAttack
/* 0x2C8 */ Vec3f bodyPartsPos[SNAPPER_BODYPART_MAX];
/* 0x340 */ ColliderCylinder collider;
} EnKame; // size = 0x38C
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 8e5aa5802..cd34383be 100644
--- a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c
+++ b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c
@@ -50,8 +50,9 @@ static ColliderCylinderInit sCylinderInit = {
};
static u16 sPartFlags[] = {
- PART_UPPER_LEFT, PART_LEFT_UPPER, PART_LEFT_LOWER, PART_RIGHT_UPPER, PART_RIGHT_LOWER, PART_LOWER_LEFT,
- PART_UPPER_RIGHT, PART_LOWER_RIGHT, PART_POST_UPPER, PART_POST_LOWER, PART_POST_STAND,
+ PART_UPPER_SIDE_LEFT, PART_LEFT_SIDE_UPPER, PART_LEFT_SIDE_LOWER, PART_RIGHT_SIDE_UPPER,
+ PART_RIGHT_SIDE_LOWER, PART_LOWER_SIDE_LEFT, PART_UPPER_SIDE_RIGHT, PART_LOWER_SIDE_RIGHT,
+ PART_POST_UPPER, PART_POST_LOWER, PART_POST_STAND,
};
static Vec3f sPieceOffsets[] = {
@@ -289,40 +290,48 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
this->zTargetTimer = 10;
}
- if ((piece->partFlags & PART_UPPER_LEFT) && (piece->partFlags & PART_LOWER_RIGHT)) {
+ if ((piece->partFlags & PART_UPPER_SIDE_LEFT) && (piece->partFlags & PART_LOWER_SIDE_RIGHT)) {
piece->pieceType = PIECE_WHOLE_SIGN;
- } else if ((piece->partFlags & PART_LEFT_UPPER) && (piece->partFlags & PART_RIGHT_UPPER)) {
+ } else if ((piece->partFlags & PART_LEFT_SIDE_UPPER) &&
+ (piece->partFlags & PART_RIGHT_SIDE_UPPER)) {
piece->pieceType = PIECE_UPPER_HALF;
- } else if ((piece->partFlags & PART_LEFT_LOWER) && (piece->partFlags & PART_RIGHT_LOWER)) {
+ } else if ((piece->partFlags & PART_LEFT_SIDE_LOWER) &&
+ (piece->partFlags & PART_RIGHT_SIDE_LOWER)) {
piece->pieceType = PIECE_LOWER_HALF;
- } else if ((piece->partFlags & PART_UPPER_RIGHT) && (piece->partFlags & PART_LOWER_RIGHT)) {
+ } else if ((piece->partFlags & PART_UPPER_SIDE_RIGHT) &&
+ (piece->partFlags & PART_LOWER_SIDE_RIGHT)) {
piece->pieceType = PIECE_RIGHT_HALF;
- } else if ((piece->partFlags & PART_UPPER_LEFT) && (piece->partFlags & PART_LOWER_LEFT)) {
+ } else if ((piece->partFlags & PART_UPPER_SIDE_LEFT) &&
+ (piece->partFlags & PART_LOWER_SIDE_LEFT)) {
piece->pieceType = PIECE_LEFT_HALF;
- } else if ((piece->partFlags & PART_UPPER_LEFT) && (piece->partFlags & PART_LEFT_UPPER)) {
+ } else if ((piece->partFlags & PART_UPPER_SIDE_LEFT) &&
+ (piece->partFlags & PART_LEFT_SIDE_UPPER)) {
piece->pieceType = PIECE_2ND_QUAD;
- } else if ((piece->partFlags & PART_UPPER_RIGHT) && (piece->partFlags & PART_RIGHT_UPPER)) {
+ } else if ((piece->partFlags & PART_UPPER_SIDE_RIGHT) &&
+ (piece->partFlags & PART_RIGHT_SIDE_UPPER)) {
piece->pieceType = PIECE_1ST_QUAD;
- } else if ((piece->partFlags & PART_LEFT_LOWER) && (piece->partFlags & PART_LOWER_LEFT)) {
+ } else if ((piece->partFlags & PART_LEFT_SIDE_LOWER) &&
+ (piece->partFlags & PART_LOWER_SIDE_LEFT)) {
piece->pieceType = PIECE_3RD_QUAD;
- } else if ((piece->partFlags & PART_RIGHT_LOWER) && (piece->partFlags & PART_LOWER_RIGHT)) {
+ } else if ((piece->partFlags & PART_RIGHT_SIDE_LOWER) &&
+ (piece->partFlags & PART_LOWER_SIDE_RIGHT)) {
piece->pieceType = PIECE_4TH_QUAD;
- } else if (piece->partFlags & PART_UPPER_LEFT) {
- piece->pieceType = PIECE_UPPER_LEFT;
- } else if (piece->partFlags & PART_LEFT_UPPER) {
- piece->pieceType = PIECE_LEFT_UPPER;
- } else if (piece->partFlags & PART_LEFT_LOWER) {
- piece->pieceType = PIECE_LEFT_LOWER;
- } else if (piece->partFlags & PART_LOWER_LEFT) {
- piece->pieceType = PIECE_LOWER_LEFT;
- } else if (piece->partFlags & PART_UPPER_RIGHT) {
- piece->pieceType = PIECE_UPPER_RIGHT;
- } else if (piece->partFlags & PART_RIGHT_UPPER) {
- piece->pieceType = PIECE_RIGHT_UPPER;
- } else if (piece->partFlags & PART_RIGHT_LOWER) {
- piece->pieceType = PIECE_RIGHT_LOWER;
- } else if (piece->partFlags & PART_LOWER_RIGHT) {
- piece->pieceType = PIECE_LOWER_RIGHT;
+ } else if (piece->partFlags & PART_UPPER_SIDE_LEFT) {
+ piece->pieceType = PIECE_UPPER_SIDE_LEFT;
+ } else if (piece->partFlags & PART_LEFT_SIDE_UPPER) {
+ piece->pieceType = PIECE_LEFT_SIDE_UPPER;
+ } else if (piece->partFlags & PART_LEFT_SIDE_LOWER) {
+ piece->pieceType = PIECE_LEFT_SIDE_LOWER;
+ } else if (piece->partFlags & PART_LOWER_SIDE_LEFT) {
+ piece->pieceType = PIECE_LOWER_SIDE_LEFT;
+ } else if (piece->partFlags & PART_UPPER_SIDE_RIGHT) {
+ piece->pieceType = PIECE_UPPER_SIDE_RIGHT;
+ } else if (piece->partFlags & PART_RIGHT_SIDE_UPPER) {
+ piece->pieceType = PIECE_RIGHT_SIDE_UPPER;
+ } else if (piece->partFlags & PART_RIGHT_SIDE_LOWER) {
+ piece->pieceType = PIECE_RIGHT_SIDE_LOWER;
+ } else if (piece->partFlags & PART_LOWER_SIDE_RIGHT) {
+ piece->pieceType = PIECE_LOWER_SIDE_RIGHT;
} else if (piece->partFlags & PART_POST_UPPER) {
piece->pieceType = PIECE_POST_UPPER;
} else if (piece->partFlags & PART_POST_LOWER) {
@@ -824,13 +833,14 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
switch (this->ocarinaFlag) {
case 0:
- if (play->msgCtx.ocarinaMode == 1) {
+ if (play->msgCtx.ocarinaMode == OCARINA_MODE_ACTIVE) {
this->ocarinaFlag = 1;
}
break;
case 1:
- if ((play->msgCtx.ocarinaMode == 4) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING)) {
+ if ((play->msgCtx.ocarinaMode == OCARINA_MODE_END) &&
+ (play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING)) {
this->actionState = ENKANBAN_REPAIR;
this->bounceX = 1;
Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR);
@@ -890,9 +900,9 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
}
static Gfx* sDisplayLists[] = {
- object_kanban_DL_000CB0, object_kanban_DL_000DB8, object_kanban_DL_000E78, object_kanban_DL_000F38,
- object_kanban_DL_000FF8, object_kanban_DL_0010B8, object_kanban_DL_0011C0, object_kanban_DL_0012C8,
- object_kanban_DL_0013D0, object_kanban_DL_001488, object_kanban_DL_001540,
+ gSignUpperSideLeftModelDL, gSignLeftSideUpperModelDL, gSignLeftSideLowerModelDL, gSignRightSideUpperModelDL,
+ gSignRightSideLowerModelDL, gSignLowerSideLeftModelDL, gSignUpperSideRightModelDL, gSignLowerSideRightModelDL,
+ gSignPostUpperModelDL, gSignPostLowerModelDL, gSignPostStandModelDL,
};
#include "z_en_kanban_gfx.c"
@@ -923,7 +933,7 @@ void EnKanban_Draw(Actor* thisx, PlayState* play) {
Gfx_SetupDL25_Opa(play->state.gfxCtx);
Gfx_SetupDL25_Xlu(play->state.gfxCtx);
- gSPDisplayList(POLY_OPA_DISP++, object_kanban_DL_000C30);
+ gSPDisplayList(POLY_OPA_DISP++, gSignMaterialDL);
if (this->actionState != ENKANBAN_SIGN) {
Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, MTXMODE_NEW);
@@ -982,7 +992,7 @@ void EnKanban_Draw(Actor* thisx, PlayState* play) {
gDPSetPrimColor(POLY_XLU_DISP++, 0x00, 0x00, 255, 255, 255, this->cutMarkAlpha);
gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 150, 0);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_XLU_DISP++, object_kanban_DL_001630);
+ gSPDisplayList(POLY_XLU_DISP++, gSignParticleDL);
}
}
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 e54bb3fad..43b3b61fb 100644
--- a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.h
+++ b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.h
@@ -5,22 +5,22 @@
struct EnKanban;
-#define PART_UPPER_LEFT (1 << 0)
-#define PART_LEFT_UPPER (1 << 1)
-#define PART_LEFT_LOWER (1 << 2)
-#define PART_RIGHT_UPPER (1 << 3)
-#define PART_RIGHT_LOWER (1 << 4)
-#define PART_LOWER_LEFT (1 << 5)
-#define PART_UPPER_RIGHT (1 << 6)
-#define PART_LOWER_RIGHT (1 << 7)
+#define PART_UPPER_SIDE_LEFT (1 << 0)
+#define PART_LEFT_SIDE_UPPER (1 << 1)
+#define PART_LEFT_SIDE_LOWER (1 << 2)
+#define PART_RIGHT_SIDE_UPPER (1 << 3)
+#define PART_RIGHT_SIDE_LOWER (1 << 4)
+#define PART_LOWER_SIDE_LEFT (1 << 5)
+#define PART_UPPER_SIDE_RIGHT (1 << 6)
+#define PART_LOWER_SIDE_RIGHT (1 << 7)
#define PART_POST_UPPER (1 << 8)
#define PART_POST_LOWER (1 << 9)
#define PART_POST_STAND (1 << 10)
-#define LEFT_HALF (PART_UPPER_LEFT | PART_LEFT_UPPER | PART_LEFT_LOWER | PART_LOWER_LEFT)
-#define RIGHT_HALF (PART_UPPER_RIGHT | PART_RIGHT_UPPER | PART_RIGHT_LOWER | PART_LOWER_RIGHT)
-#define UPPER_HALF (PART_POST_UPPER | PART_UPPER_RIGHT | PART_RIGHT_UPPER | PART_UPPER_LEFT | PART_LEFT_UPPER)
-#define UPPERLEFT_HALF (PART_POST_UPPER | PART_UPPER_RIGHT | PART_LEFT_LOWER | PART_UPPER_LEFT | PART_LEFT_UPPER)
-#define UPPERRIGHT_HALF (PART_POST_UPPER | PART_UPPER_RIGHT | PART_RIGHT_UPPER | PART_UPPER_LEFT | PART_RIGHT_LOWER)
+#define LEFT_HALF (PART_UPPER_SIDE_LEFT | PART_LEFT_SIDE_UPPER | PART_LEFT_SIDE_LOWER | PART_LOWER_SIDE_LEFT)
+#define RIGHT_HALF (PART_UPPER_SIDE_RIGHT | PART_RIGHT_SIDE_UPPER | PART_RIGHT_SIDE_LOWER | PART_LOWER_SIDE_RIGHT)
+#define UPPER_HALF (PART_POST_UPPER | PART_UPPER_SIDE_RIGHT | PART_RIGHT_SIDE_UPPER | PART_UPPER_SIDE_LEFT | PART_LEFT_SIDE_UPPER)
+#define UPPERLEFT_HALF (PART_POST_UPPER | PART_UPPER_SIDE_RIGHT | PART_LEFT_SIDE_LOWER | PART_UPPER_SIDE_LEFT | PART_LEFT_SIDE_UPPER)
+#define UPPERRIGHT_HALF (PART_POST_UPPER | PART_UPPER_SIDE_RIGHT | PART_RIGHT_SIDE_UPPER | PART_UPPER_SIDE_LEFT | PART_RIGHT_SIDE_LOWER)
#define ALL_PARTS (LEFT_HALF | RIGHT_HALF | PART_POST_UPPER | PART_POST_LOWER)
typedef enum {
@@ -42,14 +42,14 @@ typedef enum {
/* 6 */ PIECE_1ST_QUAD,
/* 7 */ PIECE_3RD_QUAD,
/* 8 */ PIECE_4TH_QUAD,
- /* 9 */ PIECE_UPPER_LEFT,
- /* 10 */ PIECE_LEFT_UPPER,
- /* 11 */ PIECE_LEFT_LOWER,
- /* 12 */ PIECE_LOWER_LEFT,
- /* 13 */ PIECE_UPPER_RIGHT,
- /* 14 */ PIECE_RIGHT_UPPER,
- /* 15 */ PIECE_RIGHT_LOWER,
- /* 16 */ PIECE_LOWER_RIGHT,
+ /* 9 */ PIECE_UPPER_SIDE_LEFT,
+ /* 10 */ PIECE_LEFT_SIDE_UPPER,
+ /* 11 */ PIECE_LEFT_SIDE_LOWER,
+ /* 12 */ PIECE_LOWER_SIDE_LEFT,
+ /* 13 */ PIECE_UPPER_SIDE_RIGHT,
+ /* 14 */ PIECE_RIGHT_SIDE_UPPER,
+ /* 15 */ PIECE_RIGHT_SIDE_LOWER,
+ /* 16 */ PIECE_LOWER_SIDE_RIGHT,
/* 17 */ PIECE_POST_UPPER,
/* 18 */ PIECE_POST_LOWER,
/* 100 */ PIECE_OTHER = 100
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 76d88fa94..01e781ecb 100644
--- a/src/overlays/actors/ovl_En_Kbt/z_en_kbt.c
+++ b/src/overlays/actors/ovl_En_Kbt/z_en_kbt.c
@@ -17,11 +17,28 @@ void EnKbt_Draw(Actor* thisx, PlayState* play);
s32 func_80B33E64(PlayState* play);
s32 func_80B33E8C(PlayState* play);
-void func_80B33EF0(EnKbt* this, s16 arg1);
+void EnKbt_ChangeAnim(EnKbt* this, s16 animIndex);
Actor* func_80B3403C(PlayState* play);
void func_80B34314(EnKbt* this, PlayState* play);
void func_80B34598(EnKbt* this, PlayState* play);
+typedef enum EnKbtAnimation {
+ /* 0 */ ENKBT_ANIM_0,
+ /* 1 */ ENKBT_ANIM_1,
+ /* 2 */ ENKBT_ANIM_2,
+ /* 3 */ ENKBT_ANIM_3,
+ /* 4 */ ENKBT_ANIM_4,
+ /* 5 */ ENKBT_ANIM_5,
+ /* 6 */ ENKBT_ANIM_6,
+ /* 7 */ ENKBT_ANIM_7,
+ /* 8 */ ENKBT_ANIM_8,
+ /* 9 */ ENKBT_ANIM_9,
+ /* 10 */ ENKBT_ANIM_10,
+ /* 11 */ ENKBT_ANIM_11,
+ /* 12 */ ENKBT_ANIM_12,
+ /* 13 */ ENKBT_ANIM_MAX
+} EnKbtAnimation;
+
ActorInit En_Kbt_InitVars = {
ACTOR_EN_KBT,
ACTORCAT_NPC,
@@ -44,13 +61,13 @@ void EnKbt_Init(Actor* thisx, PlayState* play) {
this->actor.home.rot.z = 0;
this->unk_27E = 4;
this->unk_27F = 0;
- this->unk_280 = 13;
+ this->animIndex = ENKBT_ANIM_MAX;
this->unk_282 = 13;
this->unk_278 = func_80B3403C(play);
this->unk_284 = 0;
this->actor.textId = 0;
if (func_80B33E64(play)) {
- func_80B33EF0(this, 6);
+ EnKbt_ChangeAnim(this, ENKBT_ANIM_6);
this->unk_282 = 11;
if (func_80B33E8C(play)) {
this->actor.textId = 0xC50;
@@ -60,7 +77,7 @@ void EnKbt_Init(Actor* thisx, PlayState* play) {
}
this->actionFunc = func_80B34314;
} else {
- func_80B33EF0(this, 0);
+ EnKbt_ChangeAnim(this, ENKBT_ANIM_0);
this->unk_282 = 0;
this->actionFunc = func_80B34598;
}
@@ -82,27 +99,48 @@ s32 func_80B33E8C(PlayState* play) {
return false;
}
-void func_80B33EF0(EnKbt* this, s16 arg1) {
- static AnimationHeader* sAnimations[] = {
- &object_kbt_Anim_000670, &object_kbt_Anim_001674, &object_kbt_Anim_002084, &object_kbt_Anim_000FE8,
- &object_kbt_Anim_001940, &object_kbt_Anim_00E7BC, &object_kbt_Anim_00F0C8, &object_kbt_Anim_002710,
- &object_kbt_Anim_002DE0, &object_kbt_Anim_003414, &object_kbt_Anim_003D24, &object_kbt_Anim_001BF4,
- &object_kbt_Anim_002084,
+void EnKbt_ChangeAnim(EnKbt* this, s16 animIndex) {
+ static AnimationHeader* sAnimations[ENKBT_ANIM_MAX] = {
+ &object_kbt_Anim_000670, // ENKBT_ANIM_0
+ &object_kbt_Anim_001674, // ENKBT_ANIM_1
+ &object_kbt_Anim_002084, // ENKBT_ANIM_2
+ &object_kbt_Anim_000FE8, // ENKBT_ANIM_3
+ &object_kbt_Anim_001940, // ENKBT_ANIM_4
+ &object_kbt_Anim_00E7BC, // ENKBT_ANIM_5
+ &object_kbt_Anim_00F0C8, // ENKBT_ANIM_6
+ &object_kbt_Anim_002710, // ENKBT_ANIM_7
+ &object_kbt_Anim_002DE0, // ENKBT_ANIM_8
+ &object_kbt_Anim_003414, // ENKBT_ANIM_9
+ &object_kbt_Anim_003D24, // ENKBT_ANIM_10
+ &object_kbt_Anim_001BF4, // ENKBT_ANIM_11
+ &object_kbt_Anim_002084, // ENKBT_ANIM_12
};
- u8 sp38[] = {
- ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_LOOP, ANIMMODE_LOOP,
- ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_ONCE,
+ u8 animationModes[ENKBT_ANIM_MAX] = {
+ ANIMMODE_LOOP, // ENKBT_ANIM_0
+ ANIMMODE_LOOP, // ENKBT_ANIM_1
+ ANIMMODE_ONCE, // ENKBT_ANIM_2
+ ANIMMODE_LOOP, // ENKBT_ANIM_3
+ ANIMMODE_ONCE, // ENKBT_ANIM_4
+ ANIMMODE_LOOP, // ENKBT_ANIM_5
+ ANIMMODE_LOOP, // ENKBT_ANIM_6
+ ANIMMODE_LOOP, // ENKBT_ANIM_7
+ ANIMMODE_LOOP, // ENKBT_ANIM_8
+ ANIMMODE_LOOP, // ENKBT_ANIM_9
+ ANIMMODE_LOOP, // ENKBT_ANIM_10
+ ANIMMODE_ONCE, // ENKBT_ANIM_11
+ ANIMMODE_ONCE, // ENKBT_ANIM_12
};
- if (arg1 != this->unk_280) {
- if (arg1 >= 12) {
- Animation_Change(&this->skelAnime, sAnimations[arg1], -1.0f,
- Animation_GetLastFrame(sAnimations[arg1]) - 1.0f, 0.0f, sp38[arg1], -5.0f);
+ if (this->animIndex != animIndex) {
+ if (animIndex >= ENKBT_ANIM_12) {
+ Animation_Change(&this->skelAnime, sAnimations[animIndex], -1.0f,
+ Animation_GetLastFrame(sAnimations[animIndex]) - 1.0f, 0.0f, animationModes[animIndex],
+ -5.0f);
} else {
- Animation_Change(&this->skelAnime, sAnimations[arg1], 1.0f, 0.0f, Animation_GetLastFrame(sAnimations[arg1]),
- sp38[arg1], -5.0f);
+ Animation_Change(&this->skelAnime, sAnimations[animIndex], 1.0f, 0.0f,
+ Animation_GetLastFrame(sAnimations[animIndex]), animationModes[animIndex], -5.0f);
}
- this->unk_280 = arg1;
+ this->animIndex = animIndex;
}
}
@@ -124,11 +162,11 @@ void func_80B34078(EnKbt* this) {
if (this->unk_284 > 0) {
this->unk_284--;
} else {
- switch (this->unk_280) {
- case 2:
+ switch (this->animIndex) {
+ case ENKBT_ANIM_2:
switch (this->unk_282) {
case 0:
- func_80B33EF0(this, 12);
+ EnKbt_ChangeAnim(this, ENKBT_ANIM_12);
break;
case 5:
@@ -136,21 +174,24 @@ void func_80B34078(EnKbt* this) {
break;
default:
- func_80B33EF0(this, 5);
+ EnKbt_ChangeAnim(this, ENKBT_ANIM_5);
break;
}
break;
- case 12:
- func_80B33EF0(this, 0);
+ case ENKBT_ANIM_12:
+ EnKbt_ChangeAnim(this, ENKBT_ANIM_0);
this->actor.home.rot.z = 0;
break;
- case 4:
- func_80B33EF0(this, 1);
+ case ENKBT_ANIM_4:
+ EnKbt_ChangeAnim(this, ENKBT_ANIM_1);
this->unk_27E = 2;
this->actor.home.rot.z = 0;
break;
+
+ default:
+ break;
}
}
}
@@ -169,67 +210,70 @@ void func_80B3415C(EnKbt* this) {
switch (this->unk_282) {
case 0:
- if ((this->unk_280 != 2) && (this->unk_280 != 12)) {
- func_80B33EF0(this, 0);
+ if ((this->animIndex != ENKBT_ANIM_2) && (this->animIndex != ENKBT_ANIM_12)) {
+ EnKbt_ChangeAnim(this, ENKBT_ANIM_0);
}
break;
case 1:
- func_80B33EF0(this, 2);
+ EnKbt_ChangeAnim(this, ENKBT_ANIM_2);
this->unk_282 = 0;
break;
case 2:
- if (this->unk_280 != 12) {
- func_80B33EF0(this, 3);
+ if (this->animIndex != ENKBT_ANIM_12) {
+ EnKbt_ChangeAnim(this, ENKBT_ANIM_3);
}
break;
case 3:
- if (this->unk_280 != 1) {
- func_80B33EF0(this, 4);
+ if (this->animIndex != ENKBT_ANIM_1) {
+ EnKbt_ChangeAnim(this, ENKBT_ANIM_4);
}
break;
case 10:
- func_80B33EF0(this, 11);
+ EnKbt_ChangeAnim(this, ENKBT_ANIM_11);
break;
case 4:
- func_80B33EF0(this, 2);
+ EnKbt_ChangeAnim(this, ENKBT_ANIM_2);
this->unk_282 = 6;
break;
case 6:
- if (this->unk_280 != 2) {
- func_80B33EF0(this, 5);
+ if (this->animIndex != ENKBT_ANIM_2) {
+ EnKbt_ChangeAnim(this, ENKBT_ANIM_5);
}
break;
case 11:
- func_80B33EF0(this, 6);
+ EnKbt_ChangeAnim(this, ENKBT_ANIM_6);
break;
case 7:
- if (this->unk_280 != 2) {
- func_80B33EF0(this, 7);
+ if (this->animIndex != ENKBT_ANIM_2) {
+ EnKbt_ChangeAnim(this, ENKBT_ANIM_7);
}
break;
case 8:
- if (this->unk_280 != 2) {
- func_80B33EF0(this, 8);
+ if (this->animIndex != ENKBT_ANIM_2) {
+ EnKbt_ChangeAnim(this, ENKBT_ANIM_8);
}
break;
case 9:
- if (this->unk_280 != 2) {
- func_80B33EF0(this, 9);
+ if (this->animIndex != ENKBT_ANIM_2) {
+ EnKbt_ChangeAnim(this, ENKBT_ANIM_9);
}
break;
case 12:
- func_80B33EF0(this, 10);
+ EnKbt_ChangeAnim(this, ENKBT_ANIM_10);
+ break;
+
+ default:
break;
}
}
@@ -327,7 +371,7 @@ void func_80B34598(EnKbt* this, PlayState* play) {
this->unk_27E = 4;
this->unk_27F = 0;
this->unk_282 = 0;
- func_80B33EF0(this, 12);
+ EnKbt_ChangeAnim(this, ENKBT_ANIM_12);
break;
case 0x6:
@@ -411,26 +455,26 @@ void func_80B34598(EnKbt* this, PlayState* play) {
case 0xC35:
this->unk_27E = 4;
this->unk_27F = 0;
- func_80B33EF0(this, 2);
+ EnKbt_ChangeAnim(this, ENKBT_ANIM_2);
this->unk_282 = 5;
break;
case 0xC36:
this->unk_27E = 1;
this->unk_27F = 1;
- func_80B33EF0(this, 7);
+ EnKbt_ChangeAnim(this, ENKBT_ANIM_7);
this->unk_282 = 7;
break;
case 0xC37:
- func_80B33EF0(this, 10);
+ EnKbt_ChangeAnim(this, ENKBT_ANIM_10);
this->unk_27E = 0;
this->unk_27F = 1;
break;
case 0xC38:
case 0xC39:
- func_80B33EF0(this, 7);
+ EnKbt_ChangeAnim(this, ENKBT_ANIM_7);
this->unk_27E = 0;
this->unk_27F = 1;
break;
@@ -517,6 +561,9 @@ void func_80B34598(EnKbt* this, PlayState* play) {
this->unk_27F = 1;
this->unk_282 = 12;
break;
+
+ default:
+ break;
}
this->actor.textId = 0;
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 eb491bf28..9a7a5cdf0 100644
--- a/src/overlays/actors/ovl_En_Kbt/z_en_kbt.h
+++ b/src/overlays/actors/ovl_En_Kbt/z_en_kbt.h
@@ -17,7 +17,7 @@ typedef struct EnKbt {
/* 0x27C */ u16 unk_27C;
/* 0x27E */ u8 unk_27E;
/* 0x27F */ u8 unk_27F;
- /* 0x280 */ s16 unk_280;
+ /* 0x280 */ s16 animIndex;
/* 0x282 */ s16 unk_282;
/* 0x284 */ s16 unk_284;
/* 0x288 */ EnKbtActionFunc actionFunc;
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 ce3011e6d..31d98abf0 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
@@ -6,7 +6,6 @@
#include "z_en_kendo_js.h"
#include "overlays/actors/ovl_En_Maruta/z_en_maruta.h"
-#include "objects/object_js/object_js.h"
#define FLAGS \
(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_2000000 | ACTOR_FLAG_CANT_LOCK_ON)
@@ -72,12 +71,21 @@ static ColliderCylinderInit sCylinderInit = {
static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE };
-static AnimationInfo sAnimationInfo[] = {
- { &object_js_Anim_000C7C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
- { &object_js_Anim_000F4C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
- { &object_js_Anim_00016C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
- { &object_js_Anim_0003DC, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f },
- { &object_js_Anim_000AD4, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
+typedef enum EnKendoJsAnimation {
+ /* 0 */ ENKENDOJS_ANIM_0,
+ /* 1 */ ENKENDOJS_ANIM_1,
+ /* 2 */ ENKENDOJS_ANIM_2,
+ /* 3 */ ENKENDOJS_ANIM_3,
+ /* 4 */ ENKENDOJS_ANIM_4,
+ /* 5 */ ENKENDOJS_ANIM_MAX
+} EnKendoJsAnimation;
+
+static AnimationInfo sAnimationInfo[ENKENDOJS_ANIM_MAX] = {
+ { &object_js_Anim_000C7C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // ENKENDOJS_ANIM_0
+ { &object_js_Anim_000F4C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // ENKENDOJS_ANIM_1
+ { &object_js_Anim_00016C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // ENKENDOJS_ANIM_2
+ { &object_js_Anim_0003DC, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // ENKENDOJS_ANIM_3
+ { &object_js_Anim_000AD4, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // ENKENDOJS_ANIM_4
};
s16 D_80B27CE0[][3] = {
@@ -110,7 +118,7 @@ void EnKendoJs_Init(Actor* thisx, PlayState* play) {
CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit);
SkelAnime_InitFlex(play, &this->skelAnime, &object_js_Skel_006990, &object_js_Anim_000F4C, this->jointTable,
- this->morphTable, 13);
+ this->morphTable, OBJECT_JS_LIMB_MAX);
if ((CURRENT_DAY == 3) &&
!((gSaveContext.save.time <= CLOCK_TIME(23, 0)) && (gSaveContext.save.time >= CLOCK_TIME(6, 0)))) {
@@ -120,7 +128,7 @@ void EnKendoJs_Init(Actor* thisx, PlayState* play) {
this->actor.home.rot.z, 0x10);
Actor_Kill(&this->actor);
} else {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 4);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_4);
}
} else if (ENKENDOJS_GET_FF(&this->actor) == ENKENDOJS_FF_1) {
Actor_Kill(&this->actor);
@@ -224,7 +232,7 @@ void func_80B26758(EnKendoJs* this, PlayState* play) {
Audio_PlaySfx(NA_SE_SY_ERROR);
Message_StartTextbox(play, 0x272C, &this->actor);
this->unk_288 = 0x272C;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_2);
} else if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) {
Audio_PlaySfx(NA_SE_SY_ERROR);
Message_StartTextbox(play, 0x2718, &this->actor);
@@ -242,7 +250,7 @@ void func_80B26758(EnKendoJs* this, PlayState* play) {
Audio_PlaySfx(NA_SE_SY_ERROR);
Message_StartTextbox(play, 0x272C, &this->actor);
this->unk_288 = 0x272C;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_2);
} else if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk12070) {
Audio_PlaySfx(NA_SE_SY_ERROR);
Message_StartTextbox(play, 0x2718, &this->actor);
@@ -259,6 +267,9 @@ void func_80B26758(EnKendoJs* this, PlayState* play) {
Audio_PlaySfx_MessageCancel();
Message_StartTextbox(play, 0x2717, &this->actor);
this->unk_288 = 0x2717;
+
+ default:
+ break;
}
}
}
@@ -310,6 +321,9 @@ void func_80B269A4(EnKendoJs* this, PlayState* play) {
func_80B276C4(this);
func_80B276D8(this, play);
break;
+
+ default:
+ break;
}
}
@@ -332,7 +346,7 @@ void func_80B26AFC(EnKendoJs* this, PlayState* play) {
case TEXT_STATE_DONE:
if (Message_ShouldAdvance(play)) {
if (this->unk_288 == 0x272C) {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_3);
}
if ((this->unk_288 == 0x272E) || (this->unk_288 == 0x272F) || (this->unk_288 == 0x2730)) {
@@ -347,6 +361,7 @@ void func_80B26AFC(EnKendoJs* this, PlayState* play) {
case TEXT_STATE_1:
case TEXT_STATE_CLOSING:
case TEXT_STATE_3:
+ default:
break;
}
}
@@ -443,6 +458,9 @@ s32 func_80B26BF8(EnKendoJs* this, PlayState* play) {
return 1;
}
break;
+
+ default:
+ break;
}
return 2;
}
@@ -477,6 +495,9 @@ s32 func_80B26F6C(EnKendoJs* this, PlayState* play) {
return true;
}
break;
+
+ default:
+ break;
}
return false;
}
@@ -523,7 +544,7 @@ void func_80B27188(EnKendoJs* this, PlayState* play) {
func_80B26F14(this, play);
} else if (!func_80B26F6C(this, play)) {
if (this->skelAnime.animation == &object_js_Anim_00016C) {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_3);
}
this->unk_286 = 2;
Message_CloseTextbox(play);
@@ -548,7 +569,7 @@ void func_80B27188(EnKendoJs* this, PlayState* play) {
player->stateFlags1 |= PLAYER_STATE1_20;
Message_StartTextbox(play, 0x2729, &this->actor);
this->unk_288 = 0x2729;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_2);
break;
default:
@@ -564,7 +585,7 @@ void func_80B27188(EnKendoJs* this, PlayState* play) {
if ((this->skelAnime.animation == &object_js_Anim_0003DC) &&
Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_1);
}
if (this->unk_284 == 7) {
@@ -764,7 +785,7 @@ void EnKendoJs_Update(Actor* thisx, PlayState* play) {
s32 EnKendoJs_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
EnKendoJs* this = THIS;
- if (limbIndex == 12) {
+ if (limbIndex == OBJECT_JS_LIMB_0C) {
rot->y -= this->unk_278.y;
}
return false;
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 1992f7234..8602550e0 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
@@ -2,6 +2,7 @@
#define Z_EN_KENDO_JS_H
#include "global.h"
+#include "objects/object_js/object_js.h"
struct EnKendoJs;
@@ -17,8 +18,8 @@ typedef struct EnKendoJs {
/* 0x144 */ ColliderCylinder collider;
/* 0x190 */ SkelAnime skelAnime;
/* 0x1D4 */ EnKendoJsActionFunc actionFunc;
- /* 0x1D8 */ Vec3s jointTable[13];
- /* 0x226 */ Vec3s morphTable[13];
+ /* 0x1D8 */ Vec3s jointTable[OBJECT_JS_LIMB_MAX];
+ /* 0x226 */ Vec3s morphTable[OBJECT_JS_LIMB_MAX];
/* 0x274 */ Vec3s* unk_274;
/* 0x278 */ Vec3s unk_278;
/* 0x27E */ Vec3s unk_27E;
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 694b9271d..5f180a285 100644
--- a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c
+++ b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c
@@ -5,7 +5,6 @@
*/
#include "z_en_kgy.h"
-#include "objects/object_kgy/object_kgy.h"
#include "objects/gameplay_keep/gameplay_keep.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY)
@@ -17,7 +16,7 @@ void EnKgy_Destroy(Actor* thisx, PlayState* play);
void EnKgy_Update(Actor* thisx, PlayState* play);
void EnKgy_Draw(Actor* thisx, PlayState* play);
-void EnKgy_ChangeAnim(EnKgy* this, s16 animIndex, u8 mode, f32 morphFrames);
+void EnKgy_ChangeAnim(EnKgy* this, s16 animIndex, u8 animMode, f32 morphFrames);
EnKbt* EnKgy_FindZubora(PlayState* play);
ObjIcePoly* EnKgy_FindIceBlock(PlayState* play);
void func_80B40D30(PlayState* play);
@@ -31,6 +30,21 @@ void func_80B425A0(EnKgy* this, PlayState* play);
void func_80B42714(EnKgy* this, PlayState* play);
void func_80B42D28(EnKgy* this, PlayState* play);
+typedef enum EnKgyAnimation {
+ /* -1 */ ENKGY_ANIM_NONE = -1,
+ /* 0 */ ENKGY_ANIM_0,
+ /* 1 */ ENKGY_ANIM_1,
+ /* 2 */ ENKGY_ANIM_2,
+ /* 3 */ ENKGY_ANIM_3,
+ /* 4 */ ENKGY_ANIM_4,
+ /* 5 */ ENKGY_ANIM_5,
+ /* 6 */ ENKGY_ANIM_6,
+ /* 7 */ ENKGY_ANIM_7,
+ /* 8 */ ENKGY_ANIM_8,
+ /* 9 */ ENKGY_ANIM_9,
+ /* 10 */ ENKGY_ANIM_MAX
+} EnKgyAnimation;
+
ActorInit En_Kgy_InitVars = {
ACTOR_EN_KGY,
ACTORCAT_NPC,
@@ -50,39 +64,39 @@ void EnKgy_Init(Actor* thisx, PlayState* play) {
Actor_SetScale(&this->actor, 0.01f);
SkelAnime_InitFlex(play, &this->skelAnime, &object_kgy_Skel_00F910, &object_kgy_Anim_004B98, this->jointTable,
- this->morphTable, 23);
- this->unk_2D2 = -1;
+ this->morphTable, OBJECT_KGY_LIMB_MAX);
+ this->animIndex = ENKGY_ANIM_NONE;
this->unk_29C = 0;
this->unk_2E4 = 0;
- this->unk_2E2 = -1;
+ this->animIndex2 = ENKGY_ANIM_NONE;
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)) ||
+ Flags_UnsetSwitch(play, ENKGY_GET_SWITCH_FLAG(&this->actor) + 1);
+ if (Flags_GetSwitch(play, ENKGY_GET_SWITCH_FLAG(&this->actor)) ||
CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) {
- Flags_SetSwitch(play, ENKGY_GET_FE00(&this->actor) + 1);
+ Flags_SetSwitch(play, ENKGY_GET_SWITCH_FLAG(&this->actor) + 1);
play->envCtx.lightSettingOverride = 1;
SET_WEEKEVENTREG(WEEKEVENTREG_21_01);
if (!func_80B40D64(play)) {
- EnKgy_ChangeAnim(this, 4, ANIMMODE_LOOP, 0);
+ EnKgy_ChangeAnim(this, ENKGY_ANIM_4, ANIMMODE_LOOP, 0);
this->actionFunc = func_80B425A0;
this->actor.textId = 0xC35;
} else if (!func_80B40DB4(play)) {
- EnKgy_ChangeAnim(this, 6, ANIMMODE_ONCE, 0);
+ EnKgy_ChangeAnim(this, ENKGY_ANIM_6, ANIMMODE_ONCE, 0);
this->actionFunc = func_80B419B0;
this->actor.textId = 0xC4E;
this->unk_29C |= 1;
this->getItemId = GI_RUPEE_10;
} else {
- EnKgy_ChangeAnim(this, 4, ANIMMODE_LOOP, 0);
+ EnKgy_ChangeAnim(this, ENKGY_ANIM_4, ANIMMODE_LOOP, 0);
this->actionFunc = func_80B42714;
this->actor.textId = 0xC50;
}
} else {
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_80)) {
- EnKgy_ChangeAnim(this, 4, ANIMMODE_LOOP, 0);
+ EnKgy_ChangeAnim(this, ENKGY_ANIM_4, ANIMMODE_LOOP, 0);
} else {
- EnKgy_ChangeAnim(this, 0, ANIMMODE_LOOP, 0);
+ EnKgy_ChangeAnim(this, ENKGY_ANIM_0, ANIMMODE_LOOP, 0);
}
this->actionFunc = func_80B42D28;
}
@@ -109,21 +123,28 @@ void EnKgy_Destroy(Actor* thisx, PlayState* play) {
LightContext_RemoveLight(play, &play->lightCtx, this->lightNode);
}
-void EnKgy_ChangeAnim(EnKgy* this, s16 animIndex, u8 mode, f32 morphFrames) {
- static AnimationHeader* sAnimations[] = {
- &object_kgy_Anim_004B98, &object_kgy_Anim_0008FC, &object_kgy_Anim_00292C, &object_kgy_Anim_0042E4,
- &object_kgy_Anim_0101F0, &object_kgy_Anim_001764, &object_kgy_Anim_003334, &object_kgy_Anim_010B84,
- &object_kgy_Anim_001EA4, &object_kgy_Anim_003D88,
- };
+static AnimationHeader* sAnimations[ENKGY_ANIM_MAX] = {
+ &object_kgy_Anim_004B98, // ENKGY_ANIM_0
+ &object_kgy_Anim_0008FC, // ENKGY_ANIM_1
+ &object_kgy_Anim_00292C, // ENKGY_ANIM_2
+ &object_kgy_Anim_0042E4, // ENKGY_ANIM_3
+ &object_kgy_Anim_0101F0, // ENKGY_ANIM_4
+ &object_kgy_Anim_001764, // ENKGY_ANIM_5
+ &object_kgy_Anim_003334, // ENKGY_ANIM_6
+ &object_kgy_Anim_010B84, // ENKGY_ANIM_7
+ &object_kgy_Anim_001EA4, // ENKGY_ANIM_8
+ &object_kgy_Anim_003D88, // ENKGY_ANIM_9
+};
+void EnKgy_ChangeAnim(EnKgy* this, s16 animIndex, u8 animMode, f32 morphFrames) {
Animation_Change(&this->skelAnime, sAnimations[animIndex], 1.0f, 0.0f,
- Animation_GetLastFrame(sAnimations[animIndex]), mode, morphFrames);
- this->unk_2D2 = animIndex;
+ Animation_GetLastFrame(sAnimations[animIndex]), animMode, morphFrames);
+ this->animIndex = animIndex;
}
-void func_80B40BC0(EnKgy* this, s16 arg1) {
- if (arg1 != this->unk_2D2) {
- EnKgy_ChangeAnim(this, arg1, ANIMMODE_LOOP, -5.0f);
+void EnKgy_ChangeAnimLoopMorph(EnKgy* this, s16 animIndex) {
+ if (this->animIndex != animIndex) {
+ EnKgy_ChangeAnim(this, animIndex, ANIMMODE_LOOP, -5.0f);
}
}
@@ -218,13 +239,13 @@ void func_80B40EE8(EnKgy* this, PlayState* play) {
if (this->unk_2E4 > 0) {
this->unk_2E4--;
- if ((this->unk_2E4 == 0) && (this->unk_2E2 >= 0)) {
- if (this->unk_2E2 == 3) {
- EnKgy_ChangeAnim(this, 3, ANIMMODE_ONCE, -5.0f);
+ if ((this->unk_2E4 == 0) && (this->animIndex2 > ENKGY_ANIM_NONE)) {
+ if (this->animIndex2 == ENKGY_ANIM_3) {
+ EnKgy_ChangeAnim(this, ENKGY_ANIM_3, ANIMMODE_ONCE, -5.0f);
} else {
- func_80B40BC0(this, this->unk_2E2);
+ EnKgy_ChangeAnimLoopMorph(this, this->animIndex2);
}
- this->unk_2E2 = -1;
+ this->animIndex2 = ENKGY_ANIM_NONE;
}
}
@@ -258,14 +279,14 @@ void func_80B40EE8(EnKgy* this, PlayState* play) {
switch (this->actor.textId) {
case 0xC22:
this->unk_2E4 = 20;
- this->unk_2E2 = 3;
+ this->animIndex2 = ENKGY_ANIM_3;
break;
case 0xC43:
if (func_80B40D64(play)) {
- func_80B40BC0(this, 7);
+ EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_7);
} else {
- func_80B40BC0(this, 1);
+ EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_1);
}
this->unk_2E4 = 30;
this->actionFunc = func_80B41A48;
@@ -273,7 +294,10 @@ void func_80B40EE8(EnKgy* this, PlayState* play) {
case 0xC52:
case 0xC54:
- func_80B40BC0(this, 1);
+ EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_1);
+ break;
+
+ default:
break;
}
}
@@ -288,7 +312,7 @@ void func_80B40EE8(EnKgy* this, PlayState* play) {
if (this->unk_2E8 == 0) {
if ((this->actor.textId == 0xC1D) || (this->actor.textId == 0xC2D)) {
this->unk_2E4 = 20;
- this->unk_2E2 = 3;
+ this->animIndex2 = ENKGY_ANIM_3;
func_80B40EBC(this, play, this->actor.textId);
} else {
func_80B40EBC(this, play, this->actor.textId);
@@ -339,6 +363,9 @@ void func_80B411DC(EnKgy* this, PlayState* play, s32 arg2) {
}
this->csIdIndex = 4;
break;
+
+ default:
+ break;
}
}
@@ -419,16 +446,16 @@ void func_80B4163C(EnKgy* this, PlayState* play) {
this->actor.focus.pos = this->unk_2A8;
if (SkelAnime_Update(&this->skelAnime)) {
- if (this->unk_2D2 == 6) {
+ if (this->animIndex == ENKGY_ANIM_6) {
if (this->getItemId > GI_NONE) {
- EnKgy_ChangeAnim(this, 6, ANIMMODE_ONCE, 0.0f);
+ EnKgy_ChangeAnim(this, ENKGY_ANIM_6, ANIMMODE_ONCE, 0.0f);
this->getItemId--;
} else {
- EnKgy_ChangeAnim(this, 9, ANIMMODE_ONCE, -5.0f);
+ EnKgy_ChangeAnim(this, ENKGY_ANIM_9, ANIMMODE_ONCE, -5.0f);
this->getItemId = (s32)Rand_ZeroFloat(GI_RUPEE_PURPLE - GI_RUPEE_BLUE) + GI_RUPEE_BLUE;
}
} else {
- EnKgy_ChangeAnim(this, 6, ANIMMODE_ONCE, -5.0f);
+ EnKgy_ChangeAnim(this, ENKGY_ANIM_6, ANIMMODE_ONCE, -5.0f);
}
SkelAnime_Update(&this->skelAnime);
}
@@ -446,6 +473,9 @@ void func_80B4163C(EnKgy* this, PlayState* play) {
this->unk_300 = 200;
Actor_PlaySfx(&this->actor, NA_SE_EV_SWORD_FORGE);
break;
+
+ default:
+ break;
}
this->lightInfo.params.point.radius = this->unk_300;
@@ -608,11 +638,11 @@ void func_80B41E18(EnKgy* this, PlayState* play) {
s32 pad;
Player* player = GET_PLAYER(play);
- if (SkelAnime_Update(&this->skelAnime) && (this->unk_2D2 == 3)) {
- func_80B40BC0(this, 4);
+ if (SkelAnime_Update(&this->skelAnime) && (this->animIndex == ENKGY_ANIM_3)) {
+ EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_4);
}
- if ((this->unk_2E4 <= 0) && !(this->unk_29C & 2) && func_80B40E54(this) == 0) {
+ if ((this->unk_2E4 <= 0) && !(this->unk_29C & 2) && (func_80B40E54(this) == 0)) {
switch (Message_GetState(&play->msgCtx)) {
case TEXT_STATE_CHOICE:
if (Message_ShouldAdvance(play)) {
@@ -636,6 +666,9 @@ void func_80B41E18(EnKgy* this, PlayState* play) {
Audio_PlaySfx_MessageCancel();
func_80B40EBC(this, play, textId);
break;
+
+ default:
+ break;
}
break;
@@ -650,8 +683,14 @@ void func_80B41E18(EnKgy* this, PlayState* play) {
Audio_PlaySfx_MessageCancel();
func_80B40E74(this, play, 0xC3C);
break;
+
+ default:
+ break;
}
break;
+
+ default:
+ break;
}
}
break;
@@ -683,13 +722,13 @@ void func_80B41E18(EnKgy* this, PlayState* play) {
this->actionFunc = func_80B425A0;
func_80B413C8(this);
func_80B40E18(this, 5);
- func_80B40BC0(this, 4);
+ EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_4);
this->actor.textId = 0xC35;
break;
case 0xC3A:
func_80B40E74(this, play, func_80B41528(play));
- func_80B40BC0(this, 4);
+ EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_4);
break;
case 0xC3C:
@@ -758,7 +797,7 @@ void func_80B41E18(EnKgy* this, PlayState* play) {
break;
case 0xC47:
- func_80B40BC0(this, 1);
+ EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_1);
if (this->unk_29C & 8) {
player->exchangeItemAction = PLAYER_IA_NONE;
this->unk_29C &= ~8;
@@ -780,7 +819,7 @@ void func_80B41E18(EnKgy* this, PlayState* play) {
case 0xC4A:
case 0xC4B:
- func_80B40BC0(this, 4);
+ EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_4);
Message_CloseTextbox(play);
this->actionFunc = func_80B41C54;
this->actor.textId = 0xC4B;
@@ -817,9 +856,15 @@ void func_80B41E18(EnKgy* this, PlayState* play) {
func_80B413C8(this);
func_80B40E18(this, 8);
break;
+
+ default:
+ break;
}
}
break;
+
+ default:
+ break;
}
}
@@ -844,7 +889,7 @@ void func_80B425A0(EnKgy* this, PlayState* play) {
this->actor.focus.pos = this->unk_2A8;
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->actionFunc = func_80B41E18;
- func_80B40BC0(this, 1);
+ EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_1);
func_80B411DC(this, play, 0);
func_80B40E18(this, this->actor.textId);
} else if (this->actor.xzDistToPlayer < 200.0f) {
@@ -887,11 +932,11 @@ void func_80B427C8(EnKgy* this, PlayState* play) {
u16 textId;
if (SkelAnime_Update(&this->skelAnime)) {
- if (this->unk_2D2 == 5) {
- func_80B40BC0(this, 7);
+ if (this->animIndex == ENKGY_ANIM_5) {
+ EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_7);
}
- if (this->unk_2D2 == 3) {
- func_80B40BC0(this, 4);
+ if (this->animIndex == ENKGY_ANIM_3) {
+ EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_4);
}
}
@@ -923,26 +968,29 @@ void func_80B427C8(EnKgy* this, PlayState* play) {
this->actionFunc = func_80B41C54;
func_80B413C8(this);
func_80B40E18(this, 6);
- func_80B40BC0(this, 4);
+ EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_4);
this->actor.textId = 0xC3A;
break;
+
+ default:
+ break;
}
}
func_80B40EE8(this, play);
}
void func_80B4296C(EnKgy* this, PlayState* play) {
- if (SkelAnime_Update(&this->skelAnime) && (this->unk_2D2 == 8)) {
- func_80B40BC0(this, 2);
+ if (SkelAnime_Update(&this->skelAnime) && (this->animIndex == ENKGY_ANIM_8)) {
+ EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_2);
}
this->actor.focus.pos = this->unk_2A8;
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->actionFunc = func_80B427C8;
- if (this->unk_2D2 == 4) {
- func_80B40BC0(this, 7);
+ if (this->animIndex == ENKGY_ANIM_4) {
+ EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_7);
} else {
- EnKgy_ChangeAnim(this, 5, ANIMMODE_ONCE, -5.0f);
+ EnKgy_ChangeAnim(this, ENKGY_ANIM_5, ANIMMODE_ONCE, -5.0f);
}
func_80B411DC(this, play, 0);
func_80B40E18(this, this->actor.textId);
@@ -958,12 +1006,12 @@ void func_80B42A8C(EnKgy* this, PlayState* play) {
s32 pad;
if (SkelAnime_Update(&this->skelAnime)) {
- if (this->unk_2D2 == 5) {
- func_80B40BC0(this, 1);
+ if (this->animIndex == ENKGY_ANIM_5) {
+ EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_1);
}
- if (this->unk_2D2 == 3) {
- func_80B40BC0(this, 4);
+ if (this->animIndex == ENKGY_ANIM_3) {
+ EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_4);
}
}
@@ -995,7 +1043,7 @@ void func_80B42A8C(EnKgy* this, PlayState* play) {
case 0xC20:
case 0xC28:
- func_80B40BC0(this, 1);
+ EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_1);
play->msgCtx.msgLength = 0;
this->unk_29C |= 4;
this->unk_2E8 = 3;
@@ -1027,7 +1075,7 @@ void func_80B42A8C(EnKgy* this, PlayState* play) {
case 0xC2A:
this->unk_2E4 = 20;
- this->unk_2E2 = 3;
+ this->animIndex2 = ENKGY_ANIM_3;
func_80B40EBC(this, play, this->actor.textId);
break;
@@ -1038,34 +1086,37 @@ void func_80B42A8C(EnKgy* this, PlayState* play) {
func_80B413C8(this);
func_80B40E18(this, 1);
break;
+
+ default:
+ break;
}
}
func_80B40EE8(this, play);
}
void func_80B42D28(EnKgy* this, PlayState* play) {
- if (SkelAnime_Update(&this->skelAnime) && (this->unk_2D2 == 8)) {
- func_80B40BC0(this, 2);
+ if (SkelAnime_Update(&this->skelAnime) && (this->animIndex == ENKGY_ANIM_8)) {
+ EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_2);
}
this->actor.focus.pos = this->unk_2A8;
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->actionFunc = func_80B42A8C;
if (this->actor.textId == 0xC2D) {
- func_80B40BC0(this, 1);
+ EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_1);
} else {
- EnKgy_ChangeAnim(this, 5, ANIMMODE_ONCE, -5.0f);
+ EnKgy_ChangeAnim(this, ENKGY_ANIM_5, ANIMMODE_ONCE, -5.0f);
SET_WEEKEVENTREG(WEEKEVENTREG_20_80);
}
func_80B411DC(this, play, 0);
func_80B40E18(this, this->actor.textId);
} else {
- if (Flags_GetSwitch(play, ENKGY_GET_FE00(&this->actor))) {
+ if (Flags_GetSwitch(play, ENKGY_GET_SWITCH_FLAG(&this->actor))) {
this->actor.textId = 0xC30;
this->actionFunc = func_80B4296C;
SET_WEEKEVENTREG(WEEKEVENTREG_21_01);
} else if (this->actor.xzDistToPlayer < 200.0f) {
- if (this->unk_2D2 == 4) {
+ if (this->animIndex == ENKGY_ANIM_4) {
this->actor.textId = 0xC2D;
} else {
this->actor.textId = 0xC1D;
@@ -1073,8 +1124,8 @@ void func_80B42D28(EnKgy* this, PlayState* play) {
Actor_OfferTalk(&this->actor, play, 210.0f);
}
- if ((this->unk_2D2 == 0) && (this->actor.xzDistToPlayer < 200.0f)) {
- EnKgy_ChangeAnim(this, 8, ANIMMODE_ONCE, 5.0f);
+ if ((this->animIndex == ENKGY_ANIM_0) && (this->actor.xzDistToPlayer < 200.0f)) {
+ EnKgy_ChangeAnim(this, ENKGY_ANIM_8, ANIMMODE_ONCE, 5.0f);
}
}
}
@@ -1085,7 +1136,7 @@ void EnKgy_Update(Actor* thisx, PlayState* play) {
Vec3s sp30;
this->actionFunc(this, play);
- if (this->unk_2D2 == 2) {
+ if (this->animIndex == ENKGY_ANIM_2) {
sp30.z = 0;
sp30.y = 0;
sp30.x = 0;
@@ -1100,14 +1151,14 @@ s32 EnKgy_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p
EnKgy* this = THIS;
if (!(this->unk_29C & 1)) {
- if (limbIndex == 17) {
+ if (limbIndex == OBJECT_KGY_LIMB_11) {
*dList = NULL;
}
- } else if (limbIndex == 16) {
+ } else if (limbIndex == OBJECT_KGY_LIMB_10) {
*dList = NULL;
}
- if (limbIndex == 11) {
+ if (limbIndex == OBJECT_KGY_LIMB_0B) {
rot->x += this->unk_2CC.y;
}
@@ -1119,11 +1170,11 @@ void EnKgy_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
static Vec3f D_80B432E4 = { 3000.0f, 4000.0f, 300.0f };
EnKgy* this = THIS;
- if (limbIndex == 11) {
+ if (limbIndex == OBJECT_KGY_LIMB_0B) {
Matrix_MultVec3f(&D_80B432D8, &this->unk_2A8);
}
- if (limbIndex == 16) {
+ if (limbIndex == OBJECT_KGY_LIMB_10) {
Matrix_MultVec3f(&D_80B432E4, &this->unk_2C0);
}
}
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 94f2aabd5..9cd6f6848 100644
--- a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.h
+++ b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.h
@@ -2,6 +2,7 @@
#define Z_EN_KGY_H
#include "global.h"
+#include "objects/object_kgy/object_kgy.h"
#include "overlays/actors/ovl_En_Kbt/z_en_kbt.h"
#include "overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.h"
@@ -10,13 +11,13 @@ struct EnKgy;
typedef void (*EnKgyActionFunc)(struct EnKgy*, PlayState*);
#define ENKGY_GET_1F(thisx) ((thisx)->params & 0x1F)
-#define ENKGY_GET_FE00(thisx) (((thisx)->params & 0xFE00) >> 9)
+#define ENKGY_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0xFE00) >> 9)
typedef struct EnKgy {
/* 0x000 */ Actor actor;
/* 0x144 */ SkelAnime skelAnime;
- /* 0x188 */ Vec3s jointTable[23];
- /* 0x212 */ Vec3s morphTable[23];
+ /* 0x188 */ Vec3s jointTable[OBJECT_KGY_LIMB_MAX];
+ /* 0x212 */ Vec3s morphTable[OBJECT_KGY_LIMB_MAX];
/* 0x29C */ u16 unk_29C;
/* 0x2A0 */ EnKbt* zubora;
/* 0x2A4 */ ObjIcePoly* iceBlock;
@@ -24,10 +25,10 @@ typedef struct EnKgy {
/* 0x2B4 */ Vec3f unk_2B4;
/* 0x2C0 */ Vec3f unk_2C0;
/* 0x2CC */ Vec3s unk_2CC;
- /* 0x2D2 */ s16 unk_2D2;
+ /* 0x2D2 */ s16 animIndex;
/* 0x2D4 */ s16 csIdList[6];
/* 0x2E0 */ s16 csIdIndex;
- /* 0x2E2 */ s16 unk_2E2;
+ /* 0x2E2 */ s16 animIndex2;
/* 0x2E4 */ s16 unk_2E4;
/* 0x2E6 */ s16 unk_2E6;
/* 0x2E8 */ s16 unk_2E8;
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 ca2dfac2b..24fa855c5 100644
--- a/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c
+++ b/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c
@@ -46,13 +46,13 @@ ActorInit En_Kujiya_InitVars = {
(ActorFunc)EnKujiya_Draw,
};
-#define CHECK_LOTTERY_NUMBERS \
- (((u32)((void)0, gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][0]) == \
- ((((void)0, gSaveContext.save.saveInfo.lotteryCodeGuess & 0xFFFF) & 0xF00) >> 8)) && \
- ((u32)((void)0, gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][1]) == \
- ((((void)0, gSaveContext.save.saveInfo.lotteryCodeGuess & 0xFFFF) & 0xF0) >> 4)) && \
- ((u32)((void)0, gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][2]) == \
- (((void)0, gSaveContext.save.saveInfo.lotteryCodeGuess & 0xFFFF) & 0xF)))
+#define CHECK_LOTTERY_NUMBERS() \
+ (((u32)((void)0, gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][0]) == \
+ ((HS_GET_LOTTERY_CODE_GUESS() & 0xF00) >> 8)) && \
+ ((u32)((void)0, gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][1]) == \
+ ((HS_GET_LOTTERY_CODE_GUESS() & 0xF0) >> 4)) && \
+ ((u32)((void)0, gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][2]) == \
+ (HS_GET_LOTTERY_CODE_GUESS() & 0xF)))
void EnKujiya_Init(Actor* thisx, PlayState* play) {
EnKujiya* this = THIS;
@@ -159,7 +159,7 @@ void EnKujiya_ChooseNextDialogue(EnKujiya* this, PlayState* play) {
break;
case 0x2B65:
- if (CHECK_LOTTERY_NUMBERS) {
+ if (CHECK_LOTTERY_NUMBERS()) {
Message_StartTextbox(play, 0x2B66, &this->actor);
this->textId = 0x2B66; // Won 50 Rupees
} else {
@@ -173,6 +173,9 @@ void EnKujiya_ChooseNextDialogue(EnKujiya* this, PlayState* play) {
EnKujiya_SetupGivePrize(this);
EnKujiya_GivePrize(this, play);
break;
+
+ default:
+ break;
}
}
}
@@ -207,6 +210,9 @@ void EnKujiya_Talk(EnKujiya* this, PlayState* play) {
this->textId = 0x2B60; // Will announce winning numbers after 6
}
break;
+
+ default:
+ break;
}
}
@@ -251,6 +257,9 @@ s32 EnKujiya_CheckBoughtTicket(void) {
return true;
}
break;
+
+ default:
+ break;
}
return false;
}
@@ -268,6 +277,9 @@ void EnKujiya_SetBoughtTicket(void) {
case 3:
SET_WEEKEVENTREG(WEEKEVENTREG_33_40);
break;
+
+ default:
+ break;
}
}
@@ -287,6 +299,9 @@ void EnKujiya_UnsetBoughtTicket(void) {
case 3:
CLEAR_WEEKEVENTREG(WEEKEVENTREG_33_40);
break;
+
+ default:
+ break;
}
}
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 8bbbaca14..dafd131ee 100644
--- a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c
+++ b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c
@@ -70,7 +70,7 @@ ActorInit En_Kusa_InitVars = {
(ActorFunc)NULL,
};
-static s16 objectIds[] = { GAMEPLAY_FIELD_KEEP, OBJECT_KUSA, OBJECT_KUSA, OBJECT_KUSA };
+static s16 sObjectIds[] = { GAMEPLAY_FIELD_KEEP, OBJECT_KUSA, OBJECT_KUSA, OBJECT_KUSA };
static ColliderCylinderInit sCylinderInit = {
{
@@ -307,7 +307,7 @@ void EnKusa_SpawnFragments(EnKusa* this, PlayState* play) {
scaleIndex = (s32)(Rand_ZeroOne() * 111.1f) & 7;
EffectSsKakera_Spawn(play, &pos, &velocity, &pos, -100, 64, 40, 3, 0, sFragmentScales[scaleIndex], 0, 0, 0x50,
- -1, 1, gKakeraLeafMiddle);
+ -1, 1, gKakeraLeafMiddleDL);
pos.x = this->actor.world.pos.x + (directon->x * this->actor.scale.x * 40.0f);
pos.y = this->actor.world.pos.y + (directon->y * this->actor.scale.y * 40.0f) + 10.0f;
@@ -319,7 +319,7 @@ void EnKusa_SpawnFragments(EnKusa* this, PlayState* play) {
scaleIndex = (s32)(Rand_ZeroOne() * 111.1f) % 7;
EffectSsKakera_Spawn(play, &pos, &velocity, &pos, -100, 64, 40, 3, 0, sFragmentScales[scaleIndex], 0, 0, 0x50,
- -1, 1, gKakeraLeafTip);
+ -1, 1, gKakeraLeafTipDL);
}
}
@@ -393,8 +393,8 @@ void EnKusa_Init(Actor* thisx, PlayState* play) {
this->isInWater |= 1;
}
- this->objIndex = Object_GetIndex(&play->objectCtx, objectIds[(KUSA_GET_TYPE(&this->actor))]);
- if (this->objIndex < 0) {
+ this->objectSlot = Object_GetSlot(&play->objectCtx, sObjectIds[(KUSA_GET_TYPE(&this->actor))]);
+ if (this->objectSlot <= OBJECT_SLOT_NONE) {
Actor_Kill(&this->actor);
return;
}
@@ -428,7 +428,7 @@ void EnKusa_SetupWaitObject(EnKusa* this) {
void EnKusa_WaitObject(EnKusa* this, PlayState* play) {
s32 pad;
- if (Object_IsLoaded(&play->objectCtx, this->objIndex)) {
+ if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) {
s32 kusaType = KUSA_GET_TYPE(&this->actor);
if (this->isCut) {
@@ -441,7 +441,7 @@ void EnKusa_WaitObject(EnKusa* this, PlayState* play) {
} else {
this->actor.draw = EnKusa_DrawGrass;
}
- this->actor.objBankIndex = this->objIndex;
+ this->actor.objectSlot = this->objectSlot;
this->actor.flags &= ~ACTOR_FLAG_10;
}
}
@@ -571,6 +571,9 @@ void EnKusa_Fall(EnKusa* this, PlayState* play) {
EnKusa_SetupUprootedWaitRegrow(this);
this->actor.shape.shadowDraw = NULL;
break;
+
+ default:
+ break;
}
} else {
@@ -621,9 +624,13 @@ void EnKusa_SetupCut(EnKusa* this) {
case ENKUSA_TYPE_GRASS_2:
this->actionFunc = EnKusa_DoNothing;
break;
+
case ENKUSA_TYPE_REGROWING_GRASS:
this->actionFunc = EnKusa_CutWaitRegrow;
break;
+
+ default:
+ break;
}
this->timer = 0;
}
@@ -729,7 +736,7 @@ void EnKusa_DrawGrass(Actor* thisx, PlayState* play) {
EnKusa* this = THIS;
if (this->isCut) {
- Gfx_DrawDListOpa(play, gKusaStump);
+ Gfx_DrawDListOpa(play, gKusaStumpDL);
} else {
if ((play->roomCtx.curRoom.behaviorType1 == ROOM_BEHAVIOR_TYPE1_0) &&
(this->actionFunc == EnKusa_WaitForInteract)) {
@@ -737,6 +744,6 @@ void EnKusa_DrawGrass(Actor* thisx, PlayState* play) {
EnKusa_ApplySway(&D_80936AD8[this->kusaMtxIdx]);
}
}
- Gfx_DrawDListOpa(play, gKusaSprout);
+ Gfx_DrawDListOpa(play, gKusaSproutDL);
}
}
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 1871b1dbe..9e46f8b22 100644
--- a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.h
+++ b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.h
@@ -45,7 +45,7 @@ typedef struct EnKusa {
/* 0x144 */ EnKusaActionFunc actionFunc;
/* 0x148 */ ColliderCylinder collider;
/* 0x194 */ u8 timer;
- /* 0x195 */ s8 objIndex;
+ /* 0x195 */ s8 objectSlot;
/* 0x196 */ s8 kusaMtxIdx;
/* 0x197 */ u8 isCut;
/* 0x198 */ u8 isInWater;
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 53e203330..e471eb8f7 100644
--- a/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c
+++ b/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c
@@ -1315,8 +1315,8 @@ void EnKusa2_Update(Actor* thisx, PlayState* play) {
void func_80A5E6F0(Actor* thisx, PlayState* play) {
static Gfx* D_80A5EB68[] = {
- gKakeraLeafTip,
- gKakeraLeafMiddle,
+ gKakeraLeafTipDL,
+ gKakeraLeafMiddleDL,
};
EnKusa2* this = THIS;
s32 i;
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 f3c3f4705..065a58cf5 100644
--- a/src/overlays/actors/ovl_En_Light/z_en_light.c
+++ b/src/overlays/actors/ovl_En_Light/z_en_light.c
@@ -70,7 +70,7 @@ void EnLight_Init(Actor* thisx, PlayState* play) {
if (ENLIGHT_GET_800(&this->actor)) {
this->actor.update = func_80865F38;
- if (ENLIGHT_GET_1000(&this->actor) && Flags_GetSwitch(play, ENLIGHT_SWITCHFLAG(&this->actor))) {
+ if (ENLIGHT_GET_1000(&this->actor) && Flags_GetSwitch(play, ENLIGHT_SWITCH_FLAG(&this->actor))) {
Actor_SetScale(&this->actor, 0.0f);
}
} else if (ENLIGHT_GET_2000(&this->actor)) {
@@ -124,7 +124,7 @@ void func_80865F38(Actor* thisx, PlayState* play) {
s32 sp2C = false;
if (ENLIGHT_GET_1000(&this->actor)) {
- if (Flags_GetSwitch(play, ENLIGHT_SWITCHFLAG(&this->actor))) {
+ if (Flags_GetSwitch(play, ENLIGHT_SWITCH_FLAG(&this->actor))) {
Math_StepToF(&sp30, 1.0f, 0.05f);
sp2C = true;
} else {
@@ -134,7 +134,7 @@ void func_80865F38(Actor* thisx, PlayState* play) {
}
Math_StepToF(&sp30, 0.0f, 0.05f);
}
- } else if (Flags_GetSwitch(play, ENLIGHT_SWITCHFLAG(&this->actor))) {
+ } else if (Flags_GetSwitch(play, ENLIGHT_SWITCH_FLAG(&this->actor))) {
if (sp30 < 0.1f) {
Actor_SetScale(&this->actor, 0.0f);
sp30 = 0.0f;
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 17762d7fa..25e1b5851 100644
--- a/src/overlays/actors/ovl_En_Light/z_en_light.h
+++ b/src/overlays/actors/ovl_En_Light/z_en_light.h
@@ -8,7 +8,7 @@ struct EnLight;
#define ENLIGHT_GET_1(thisx) ((thisx)->params & 1)
#define ENLIGHT_GET_F(thisx) ((thisx)->params & 0xF)
#define ENLIGHT_GET_800(thisx) ((thisx)->params & 0x800)
-#define ENLIGHT_SWITCHFLAG(thisx) (((thisx)->params & 0x7F0) >> 4)
+#define ENLIGHT_SWITCH_FLAG(thisx) (((thisx)->params & 0x7F0) >> 4)
#define ENLIGHT_GET_1000(thisx) ((thisx)->params & 0x1000)
#define ENLIGHT_GET_2000(thisx) ((thisx)->params & 0x2000)
#define ENLIGHT_GET_4000(thisx) ((thisx)->params & 0x4000)
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 d6f34a256..89b9fcfff 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
@@ -143,7 +143,7 @@ void EnMThunder_Init(Actor* thisx, PlayState* play) {
player->stateFlags2 &= ~PLAYER_STATE2_20000;
this->isCharging = false;
- if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_02)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_OBTAINED_GREAT_SPIN_ATTACK)) {
player->unk_B08 = 1.0f;
this->collider.info.toucher.damage = sDamages[this->type + ENMTHUNDER_TYPE_MAX];
this->subtype = ENMTHUNDER_SUBTYPE_SPIN_GREAT;
@@ -203,7 +203,7 @@ void EnMThunder_Destroy(Actor* thisx, PlayState* play) {
}
void EnMThunder_AdjustLights(PlayState* play, f32 arg1) {
- func_800FD2B4(play, arg1, 850.0f, 0.2f, 0.0f);
+ Environment_AdjustLights(play, arg1, 850.0f, 0.2f, 0.0f);
}
void EnMThunder_Spin_AttackNoMagic(EnMThunder* this, PlayState* play) {
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 241260524..516112d3d 100644
--- a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c
+++ b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c
@@ -916,9 +916,9 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) {
this->textId = 0x336D;
} else {
time = gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2];
- if ((s32)time < (s32)gSaveContext.save.saveInfo.horseBackBalloonHighScore) {
+ if ((s32)time < HS_GET_HORSE_BACK_BALLOON_TIME()) {
// [Score] New record!
- gSaveContext.save.saveInfo.horseBackBalloonHighScore = time;
+ HS_SET_HORSE_BACK_BALLOON_TIME(time);
EnMa4_SetFaceExpression(this, 0, 3);
Message_StartTextbox(play, 0x3350, &this->actor);
this->textId = 0x3350;
@@ -960,8 +960,8 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) {
this->textId = 0x3356;
} else {
time = gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2];
- if ((s32)time < (s32)gSaveContext.save.saveInfo.horseBackBalloonHighScore) {
- gSaveContext.save.saveInfo.horseBackBalloonHighScore = time;
+ if ((s32)time < HS_GET_HORSE_BACK_BALLOON_TIME()) {
+ HS_SET_HORSE_BACK_BALLOON_TIME(time);
EnMa4_SetFaceExpression(this, 0, 3);
Message_StartTextbox(play, 0x3350, &this->actor);
this->textId = 0x3350;
@@ -987,9 +987,9 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) {
this->textId = 0x3356;
} else {
time = gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2];
- if ((s32)time < (s32)gSaveContext.save.saveInfo.horseBackBalloonHighScore) {
+ if ((s32)time < HS_GET_HORSE_BACK_BALLOON_TIME()) {
// New record
- gSaveContext.save.saveInfo.horseBackBalloonHighScore = time;
+ HS_SET_HORSE_BACK_BALLOON_TIME(time);
Message_StartTextbox(play, 0x335D, &this->actor);
this->textId = 0x335D;
} else {
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 215c2146c..f9ad697ce 100644
--- a/src/overlays/actors/ovl_En_Mag/z_en_mag.c
+++ b/src/overlays/actors/ovl_En_Mag/z_en_mag.c
@@ -707,7 +707,7 @@ void EnMag_DrawInner(Actor* thisx, PlayState* play, Gfx** gfxp) {
s16 step;
// Set segment 6 to the object, since this will be read by OVERLAY_DISP where it is not set by default.
- gSPSegment(gfx++, 0x06, play->objectCtx.status[this->actor.objBankIndex].segment);
+ gSPSegment(gfx++, 0x06, play->objectCtx.slots[this->actor.objectSlot].segment);
Gfx_SetupDL39_Ptr(&gfx);
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 ac816517c..0c9f545f1 100644
--- a/src/overlays/actors/ovl_En_Mk/z_en_mk.c
+++ b/src/overlays/actors/ovl_En_Mk/z_en_mk.c
@@ -57,8 +57,8 @@ static ColliderCylinderInit sCylinderInit = {
s32 func_809592E0(EnMk* this, s16 index) {
AnimationHeader* sAnimations[] = {
- &object_mk_Anim_001C38, &object_mk_Anim_000438, &object_mk_Anim_0007D8,
- &object_mk_Anim_0010F4, &object_mk_Anim_001964,
+ &gMarineResearcherIdleAnim, &gMarineResearcherHeadWaggleAnim, &gMarineResearcherYellAnim,
+ &gMarineResearcherShakeInFearAnim, &gMarineResearcherStrokeChinAnim,
};
if (index == this->unk_27C) {
@@ -82,8 +82,8 @@ void EnMk_Init(Actor* thisx, PlayState* play) {
this->actor.terminalVelocity = -4.0f;
this->actor.gravity = -1.0f;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 36.0f);
- SkelAnime_InitFlex(play, &this->skelAnime, &object_mk_Skel_006CA0, &object_mk_Anim_001C38, this->jointTable,
- this->morphTable, OBJECT_MK_LIMB_MAX);
+ SkelAnime_InitFlex(play, &this->skelAnime, &gMarineResearcherSkel, &gMarineResearcherIdleAnim, this->jointTable,
+ this->morphTable, MARINE_RESEARCHER_LIMB_MAX);
this->unk_27C = -1;
func_809592E0(this, 0);
@@ -412,7 +412,7 @@ void func_80959E18(EnMk* this, PlayState* play) {
}
if (func_800B8718(&this->actor, &play->state)) {
- play->msgCtx.ocarinaMode = 4;
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
this->actionFunc = func_80959D28;
if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) {
this->actor.csId = this->csIdList[0];
@@ -463,7 +463,7 @@ void EnMk_Update(Actor* thisx, PlayState* play) {
s32 EnMk_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
EnMk* this = THIS;
- if (limbIndex == OBJECT_MK_LIMB_0B) {
+ if (limbIndex == MARINE_RESEARCHER_LIMB_HEAD) {
rot->y -= this->unk_270.y;
rot->z += this->unk_270.x;
}
@@ -475,7 +475,7 @@ Vec3f D_8095A2A0 = { 1000.0f, -100.0f, 0.0f };
void EnMk_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
EnMk* this = THIS;
- if (limbIndex == OBJECT_MK_LIMB_0B) {
+ if (limbIndex == MARINE_RESEARCHER_LIMB_HEAD) {
Matrix_MultVec3f(&D_8095A2A0, &this->actor.focus.pos);
}
}
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 518b0406d..9d32e9374 100644
--- a/src/overlays/actors/ovl_En_Mk/z_en_mk.h
+++ b/src/overlays/actors/ovl_En_Mk/z_en_mk.h
@@ -12,8 +12,8 @@ typedef struct EnMk {
/* 0x000 */ Actor actor;
/* 0x144 */ ColliderCylinder collider;
/* 0x190 */ SkelAnime skelAnime;
- /* 0x1D4 */ Vec3s jointTable[OBJECT_MK_LIMB_MAX];
- /* 0x222 */ Vec3s morphTable[OBJECT_MK_LIMB_MAX];
+ /* 0x1D4 */ Vec3s jointTable[MARINE_RESEARCHER_LIMB_MAX];
+ /* 0x222 */ Vec3s morphTable[MARINE_RESEARCHER_LIMB_MAX];
/* 0x270 */ Vec3s unk_270;
/* 0x276 */ s16 csIdList[2];
/* 0x27A */ u16 unk_27A;
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 04b5b73b8..82e25a95d 100644
--- a/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c
+++ b/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c
@@ -147,11 +147,11 @@ TexturePtr sMonkeyFaceTextures[] = {
object_mnk_Tex_017120, object_mnk_Tex_017920, object_mnk_Tex_018120,
};
-void EnMnk_MonkeyTiedUp_ChangeAnim(EnMnk* this, s32 animIndex, u8 mode, f32 morphFrames) {
+void EnMnk_MonkeyTiedUp_ChangeAnim(EnMnk* this, s32 animIndex, u8 animMode, f32 morphFrames) {
Animation_Change(&this->skelAnime, sMonkeyTiedUpAnimations[animIndex], 1.0f, 0.0f,
- Animation_GetLastFrame(&sMonkeyTiedUpAnimations[animIndex]->common), mode, morphFrames);
+ Animation_GetLastFrame(&sMonkeyTiedUpAnimations[animIndex]->common), animMode, morphFrames);
Animation_Change(&this->propSkelAnime, sMonkeyTiedUpPoleAnimations[animIndex], 1.0f, 0.0f,
- Animation_GetLastFrame(&sMonkeyTiedUpPoleAnimations[animIndex]->common), mode, morphFrames);
+ Animation_GetLastFrame(&sMonkeyTiedUpPoleAnimations[animIndex]->common), animMode, morphFrames);
switch (animIndex) {
case MONKEY_TIEDUP_ANIM_KICKAROUND:
@@ -184,11 +184,11 @@ void EnMnk_MonkeyTiedUp_SetNewAnim(EnMnk* this, s32 animIndex) {
}
}
-void EnMnk_MonkeyHanging_ChangeAnim(EnMnk* this, s32 animIndex, u8 mode, f32 morphFrames) {
+void EnMnk_MonkeyHanging_ChangeAnim(EnMnk* this, s32 animIndex, u8 animMode, f32 morphFrames) {
Animation_Change(&this->skelAnime, sMonkeyHangingAnimations[animIndex], 1.0f, 0.0f,
- Animation_GetLastFrame(&sMonkeyHangingAnimations[animIndex]->common), mode, morphFrames);
+ Animation_GetLastFrame(&sMonkeyHangingAnimations[animIndex]->common), animMode, morphFrames);
Animation_Change(&this->propSkelAnime, sMonkeyHangingRopeAnimations[animIndex], 1.0f, 0.0f,
- Animation_GetLastFrame(&sMonkeyHangingRopeAnimations[animIndex]->common), mode, morphFrames);
+ Animation_GetLastFrame(&sMonkeyHangingRopeAnimations[animIndex]->common), animMode, morphFrames);
this->animIndex = animIndex;
}
@@ -196,7 +196,7 @@ void EnMnk_MonkeyHanging_SetAnim(EnMnk* this, s32 animIndex) {
EnMnk_MonkeyHanging_ChangeAnim(this, animIndex, ANIMMODE_LOOP, -5.0f);
}
-void EnMnk_Monkey_ChangeAnim(EnMnk* this, s32 animIndex, u8 mode, f32 morphFrames) {
+void EnMnk_Monkey_ChangeAnim(EnMnk* this, s32 animIndex, u8 animMode, f32 morphFrames) {
s32 pad;
if (animIndex == 100) {
@@ -204,10 +204,10 @@ void EnMnk_Monkey_ChangeAnim(EnMnk* this, s32 animIndex, u8 mode, f32 morphFrame
}
if ((animIndex == 4) || (animIndex == 6)) {
Animation_Change(&this->skelAnime, sMonkeyAnimations[animIndex], -1.0f,
- Animation_GetLastFrame(&sMonkeyAnimations[animIndex]->common), 0.0f, mode, morphFrames);
+ Animation_GetLastFrame(&sMonkeyAnimations[animIndex]->common), 0.0f, animMode, morphFrames);
} else {
Animation_Change(&this->skelAnime, sMonkeyAnimations[animIndex], 1.0f, 0.0f,
- Animation_GetLastFrame(&sMonkeyAnimations[animIndex]->common), mode, morphFrames);
+ Animation_GetLastFrame(&sMonkeyAnimations[animIndex]->common), animMode, morphFrames);
}
this->unk_3E0 = 0;
this->animIndex = animIndex;
@@ -249,7 +249,7 @@ void EnMnk_MonkeyTiedUp_Init(Actor* thisx, PlayState* play) {
this->actionFunc = EnMnk_MonkeyTiedUp_Wait;
this->picto.actor.flags |= ACTOR_FLAG_2000000;
- SkelAnime_InitFlex(play, &this->propSkelAnime, &gMonkeyTiedUpPoleSkeleton, &object_mnk_Anim_003584,
+ SkelAnime_InitFlex(play, &this->propSkelAnime, &gMonkeyTiedUpPoleSkel, &object_mnk_Anim_003584,
this->propJointTable, this->propMorphTable, OBJECT_MNK_1_LIMB_MAX);
this->cueId = 4;
this->animIndex = MONKEY_TIEDUP_ANIM_NONE;
@@ -277,7 +277,7 @@ void EnMnk_MonkeyHanging_Init(Actor* thisx, PlayState* play) {
func_800BC154(play, &play->actorCtx, &this->picto.actor, ACTORCAT_PROP);
this->actionFunc = EnMnk_MonkeyHanging_StruggleBeforeDunk;
this->picto.actor.textId = 0x8E8;
- SkelAnime_InitFlex(play, &this->propSkelAnime, &gMonkeyHangingRopeSkeleton, &gMonkeyHangingStruggleAnim,
+ SkelAnime_InitFlex(play, &this->propSkelAnime, &gMonkeyHangingRopeSkel, &gMonkeyHangingStruggleAnim,
this->propJointTable, this->propMorphTable, OBJECT_MNK_3_LIMB_MAX);
EnMnk_MonkeyHanging_ChangeAnim(this, MONKEY_HANGING_ANIM_STRUGGLE, ANIMMODE_LOOP, 0.0f);
this->unk_3E0 = 5;
@@ -297,7 +297,7 @@ void EnMnk_Init(Actor* thisx, PlayState* play) {
Actor_SetScale(&this->picto.actor, 0.012f);
ActorShape_Init(&this->picto.actor.shape, 0.0f, ActorShadow_DrawCircle, 12.0f);
this->actionFunc = EnMnk_DoNothing;
- SkelAnime_InitFlex(play, &this->skelAnime, &gMonkeySkeleton, &object_mnk_Anim_0105DC, this->jointTable,
+ SkelAnime_InitFlex(play, &this->skelAnime, &gMonkeySkel, &object_mnk_Anim_0105DC, this->jointTable,
this->morphTable, OBJECT_MNK_2_LIMB_MAX);
Animation_PlayLoop(&this->skelAnime, &object_mnk_Anim_0105DC);
this->flags = 0;
@@ -1318,7 +1318,7 @@ void EnMnk_MonkeyTiedUp_ReactToWrongInstrument(EnMnk* this, PlayState* play) {
case 0x8DB:
Message_CloseTextbox(play);
this->actionFunc = EnMnk_MonkeyTiedUp_WaitForInstrument;
- play->msgCtx.ocarinaMode = 4;
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
EnMnk_MonkeyTiedUp_SetAnim(this, MONKEY_TIEDUP_ANIM_WAIT);
if (this->csId != CS_ID_NONE) {
CutsceneManager_Stop(this->csId);
@@ -1489,7 +1489,7 @@ void EnMnk_MonkeyTiedUp_WaitForInstrument(EnMnk* this, PlayState* play) {
this->csId = 2;
SET_EVENTINF(EVENTINF_24);
this->picto.actor.csId = this->csIdList[2];
- play->msgCtx.ocarinaMode = 4;
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
CutsceneManager_Queue(this->csIdList[2]);
return;
@@ -1577,7 +1577,7 @@ void EnMnk_MonkeyTiedUp_Wait(EnMnk* this, PlayState* play) {
this->csId = 2;
SET_EVENTINF(EVENTINF_24);
this->picto.actor.csId = this->csIdList[2];
- play->msgCtx.ocarinaMode = 4;
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
CutsceneManager_Queue(this->csIdList[2]);
} else if (Actor_ProcessTalkRequest(&this->picto.actor, &play->state)) {
if (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) {
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 49d10a518..016f779e9 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
@@ -318,7 +318,7 @@ void EnMttag_RaceStart(EnMttag* this, PlayState* play) {
Interface_StartTimer(TIMER_ID_MINIGAME_2, 0);
play->interfaceCtx.minigameState = MINIGAME_STATE_COUNTDOWN_SETUP_3;
SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_GORON_RACE | SEQ_FLAG_ASYNC);
- play->envCtx.unk_E4 = 0xFE;
+ play->envCtx.timeSeqState = TIMESEQ_REQUEST;
player->stateFlags1 &= ~PLAYER_STATE1_20;
} else if ((this->timer < 60) && (play->interfaceCtx.minigameState == MINIGAME_STATE_COUNTDOWN_GO)) {
this->timer = 0;
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 1720954a2..7ac6a3b58 100644
--- a/src/overlays/actors/ovl_En_Nb/z_en_nb.c
+++ b/src/overlays/actors/ovl_En_Nb/z_en_nb.c
@@ -366,7 +366,7 @@ s32 func_80BC01DC(Actor* thisx, PlayState* play) {
gSaveContext.save.time = CLOCK_TIME(8, 0);
Sram_IncrementDay();
} else {
- func_800FE658(120.0f);
+ Environment_SetTimeJump(120.0f);
}
this->behaviour++;
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 fa93cfb26..fa8771862 100644
--- a/src/overlays/actors/ovl_En_Niw/z_en_niw.c
+++ b/src/overlays/actors/ovl_En_Niw/z_en_niw.c
@@ -108,7 +108,7 @@ void EnNiw_Init(Actor* thisx, PlayState* play) {
ActorShape_Init(&thisx->shape, 0.0f, ActorShadow_DrawCircle, 25.0f);
- SkelAnime_InitFlex(play, &this->skelAnime, &gNiwSkeleton, &gNiwIdleAnim, this->jointTable, this->morphTable,
+ SkelAnime_InitFlex(play, &this->skelAnime, &gNiwSkel, &gNiwIdleAnim, this->jointTable, this->morphTable,
NIW_LIMB_MAX);
Math_Vec3f_Copy(&this->unk2A4, &this->actor.world.pos);
Math_Vec3f_Copy(&this->unk2B0, &this->actor.world.pos);
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 2a6a7ea1b..83a8be394 100644
--- a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c
+++ b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c
@@ -58,11 +58,11 @@ Color_RGBA8 sPrimColor = { 255, 255, 255, 255 };
Color_RGBA8 sEnvColor = { 80, 80, 80, 255 };
void EnNwc_Init(Actor* thisx, PlayState* play) {
- s32 niwObjectIndex;
+ s32 niwObjectSlot;
EnNwc* this = THIS;
- niwObjectIndex = Object_GetIndex(&play->objectCtx, OBJECT_NIW);
- if (niwObjectIndex < 0) {
+ niwObjectSlot = Object_GetSlot(&play->objectCtx, OBJECT_NIW);
+ if (niwObjectSlot <= OBJECT_SLOT_NONE) {
// niw object does not exist, we need it for tranformation, despawn
Actor_Kill(&this->actor);
return;
@@ -75,8 +75,8 @@ void EnNwc_Init(Actor* thisx, PlayState* play) {
return;
}
- this->niwObjectIndex = niwObjectIndex;
- this->nwcObjectIndex = this->actor.objBankIndex;
+ this->niwObjectSlot = niwObjectSlot;
+ this->nwcObjectIndex = this->actor.objectSlot;
this->grog = EnNwc_FindGrog(play);
this->footRotY = this->footRotZ = 0;
@@ -247,15 +247,15 @@ void EnNwc_CheckFound(EnNwc* this, PlayState* play) {
}
void EnNwc_LoadNiwSkeleton(EnNwc* this, PlayState* play) {
- if (Object_IsLoaded(&play->objectCtx, this->niwObjectIndex)) {
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->niwObjectIndex].segment);
+ if (Object_IsLoaded(&play->objectCtx, this->niwObjectSlot)) {
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->niwObjectSlot].segment);
- SkelAnime_InitFlex(play, &this->niwSkeleton, &gNiwSkeleton, &gNiwIdleAnim, this->jointTable, this->morphTable,
+ SkelAnime_InitFlex(play, &this->niwSkeleton, &gNiwSkel, &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] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->nwcObjectIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->nwcObjectIndex].segment);
this->state = NWC_STATE_NIW_LOADED;
EnNwc_ToggleState(this);
}
@@ -468,11 +468,11 @@ void EnNwc_Update(Actor* thisx, PlayState* play) {
Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
this->actionFunc(this, play);
if (this->hasGrownUp & 1) {
- this->actor.objBankIndex = this->niwObjectIndex;
+ this->actor.objectSlot = this->niwObjectSlot;
this->actor.draw = EnNwc_DrawAdultBody;
this->actor.shape.shadowScale = 15.0f;
} else {
- this->actor.objBankIndex = this->nwcObjectIndex;
+ this->actor.objectSlot = this->nwcObjectIndex;
this->actor.draw = EnNwc_Draw;
this->actor.shape.shadowScale = 6.0f;
}
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 51c017dff..9ce3ab60e 100644
--- a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.h
+++ b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.h
@@ -15,7 +15,7 @@ typedef struct EnNwc {
/* 0x144 */ SkelAnime niwSkeleton; // this skeleton is for when the chicks grow up into adults during the breman march
/* 0x188 */ Vec3s jointTable[NIW_LIMB_MAX];
/* 0x1E8 */ Vec3s morphTable[NIW_LIMB_MAX];
- /* 0x248 */ s8 niwObjectIndex;
+ /* 0x248 */ s8 niwObjectSlot;
/* 0x249 */ s8 nwcObjectIndex;
/* 0x24A */ s16 blinkState;
/* 0x24C */ s16 blinkTimer;
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 df778f1a7..780e3b300 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
@@ -41,7 +41,7 @@ void EnOkarinaEffect_Destroy(Actor* thisx, PlayState* play) {
void EnOkarinaEffect_Init(Actor* thisx, PlayState* play) {
EnOkarinaEffect* this = THIS;
- if (play->envCtx.unk_F2[1]) {
+ if (play->envCtx.precipitation[PRECIP_RAIN_CUR] != 0) {
Actor_Kill(&this->actor);
}
EnOkarinaEffect_SetupAction(this, func_8096B104);
@@ -49,10 +49,10 @@ void EnOkarinaEffect_Init(Actor* thisx, PlayState* play) {
void func_8096B104(EnOkarinaEffect* this, PlayState* play) {
this->unk144 = 0x50;
- play->envCtx.unk_F2[4] = 0x3C;
- D_801F4E70 = 501.0f;
- play->envCtx.unk_E3 = 2;
- func_800FD78C(play);
+ play->envCtx.precipitation[PRECIP_SOS_MAX] = 60;
+ gLightningStrike.delayTimer = 501.0f;
+ play->envCtx.lightningState = LIGHTNING_LAST;
+ Environment_PlayStormNatureAmbience(play);
EnOkarinaEffect_SetupAction(this, func_8096B174);
}
@@ -65,11 +65,11 @@ void func_8096B174(EnOkarinaEffect* this, PlayState* play) {
}
void func_8096B1FC(EnOkarinaEffect* this, PlayState* play) {
- if (play->envCtx.unk_F2[4]) {
+ if (play->envCtx.precipitation[PRECIP_SOS_MAX] != 0) {
if ((play->state.frames & 3) == 0) {
- play->envCtx.unk_F2[4]--;
- if (play->envCtx.unk_F2[4] == 8) {
- func_800FD858(play);
+ play->envCtx.precipitation[PRECIP_SOS_MAX]--;
+ if (play->envCtx.precipitation[PRECIP_SOS_MAX] == 8) {
+ Environment_StopStormNatureAmbience(play);
}
}
} else {
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 c65ca03ba..9119e0609 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
@@ -40,7 +40,7 @@ void EnOkarinaTag_Init(Actor* thisx, PlayState* play) {
this->actor.flags &= ~ACTOR_FLAG_TARGETABLE;
this->unk148 = ENOKARINATAG_GET_F800(thisx);
this->unk14A = ENOKARINATAG_GET_780(thisx);
- this->switchFlags = ENOKARINATAG_GET_SWITCHFLAGS(thisx);
+ this->switchFlag = ENOKARINATAG_GET_SWITCH_FLAG(thisx);
if (this->actor.world.rot.z > 0) {
zRot = this->actor.world.rot.z;
while (zRot > 10.0f) {
@@ -50,8 +50,8 @@ void EnOkarinaTag_Init(Actor* thisx, PlayState* play) {
}
this->unk154 = zRot * 50.0f;
this->unk158 = i * 50.0f;
- if (this->switchFlags == 0x7F) {
- this->switchFlags = -1;
+ if (this->switchFlag == 0x7F) {
+ this->switchFlag = -1;
}
if (this->unk14A == 0xF) {
this->unk14A = -1;
@@ -66,14 +66,14 @@ void func_8093E518(EnOkarinaTag* this, PlayState* play) {
s16 yDiff;
u16 var_v1;
- if (this->switchFlags >= 0) {
+ if (this->switchFlag >= 0) {
if (this->unk148 == 0) {
- if (Flags_GetSwitch(play, this->switchFlags)) {
+ if (Flags_GetSwitch(play, this->switchFlag)) {
return;
}
}
if (this->unk148 == 1) {
- if (!Flags_GetSwitch(play, this->switchFlags)) {
+ if (!Flags_GetSwitch(play, this->switchFlag)) {
return;
}
}
@@ -81,7 +81,7 @@ void func_8093E518(EnOkarinaTag* this, PlayState* play) {
var_v1 = this->unk14A;
if (var_v1 == 6) {
var_v1 = 0xA;
- if (gSaveContext.save.saveInfo.unk_F41 == 0) {
+ if (!gSaveContext.save.saveInfo.scarecrowSpawnSongSet) {
return;
}
}
@@ -89,7 +89,7 @@ void func_8093E518(EnOkarinaTag* this, PlayState* play) {
var_v1 = 0;
}
if (func_800B8718(&this->actor, &play->state)) {
- func_80152434(play, var_v1 + 0x29);
+ Message_DisplayOcarinaStaff(play, OCARINA_ACTION_CHECK_HEALING + var_v1);
this->actionFunc = func_8093E68C;
} else {
yDiff = ABS_ALT((s16)(this->actor.yawTowardsPlayer - this->actor.world.rot.y));
@@ -111,32 +111,35 @@ void func_8093E518(EnOkarinaTag* this, PlayState* play) {
}
void func_8093E68C(EnOkarinaTag* this, PlayState* play) {
- if (play->msgCtx.ocarinaMode == 4) {
+ if (play->msgCtx.ocarinaMode == OCARINA_MODE_END) {
this->actionFunc = func_8093E518;
} else {
- if ((play->msgCtx.ocarinaMode == 3) ||
- ((this->unk14A == -1) &&
- ((play->msgCtx.ocarinaMode == 5) || (play->msgCtx.ocarinaMode == 6) || (play->msgCtx.ocarinaMode == 7) ||
- (play->msgCtx.ocarinaMode == 8) || (play->msgCtx.ocarinaMode == 0xA) || (play->msgCtx.ocarinaMode == 9) ||
- (play->msgCtx.ocarinaMode == 0xF)))) {
- if (this->switchFlags >= 0) {
+ if ((play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) ||
+ ((this->unk14A == -1) && ((play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_TIME) ||
+ (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_HEALING) ||
+ (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_EPONAS) ||
+ (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_SOARING) ||
+ (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_SUNS) ||
+ (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_STORMS) ||
+ (play->msgCtx.ocarinaMode == OCARINA_MODE_F)))) {
+ if (this->switchFlag >= 0) {
switch (this->unk148) {
case 0:
- Flags_SetSwitch(play, this->switchFlags);
+ Flags_SetSwitch(play, this->switchFlag);
break;
case 1:
- Flags_UnsetSwitch(play, this->switchFlags);
+ Flags_UnsetSwitch(play, this->switchFlag);
break;
case 2:
- if (Flags_GetSwitch(play, this->switchFlags)) {
- Flags_UnsetSwitch(play, this->switchFlags);
+ if (Flags_GetSwitch(play, this->switchFlag)) {
+ Flags_UnsetSwitch(play, this->switchFlag);
} else {
- Flags_SetSwitch(play, this->switchFlags);
+ Flags_SetSwitch(play, this->switchFlag);
}
break;
}
}
- play->msgCtx.ocarinaMode = 4;
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
Audio_PlaySfx(NA_SE_SY_CORRECT_CHIME);
this->actionFunc = func_8093E518;
}
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 0dd15c1c9..4c968b362 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
@@ -7,7 +7,7 @@ struct EnOkarinaTag;
typedef void (*EnOkarinaTagActionFunc)(struct EnOkarinaTag*, PlayState*);
-#define ENOKARINATAG_GET_SWITCHFLAGS(thisx) (((thisx)->params & 0x7F))
+#define ENOKARINATAG_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0x7F))
#define ENOKARINATAG_GET_780(thisx) (((thisx)->params >> 0x7) & 0xF)
#define ENOKARINATAG_GET_F800(thisx) (((thisx)->params >> 0xB) & 0x1F)
@@ -16,7 +16,7 @@ typedef struct EnOkarinaTag {
/* 0x144 */ EnOkarinaTagActionFunc actionFunc;
/* 0x148 */ s16 unk148;
/* 0x14A */ s16 unk14A;
- /* 0x14C */ s32 switchFlags;
+ /* 0x14C */ s32 switchFlag;
/* 0x150 */ s8 unk150;
/* 0x154 */ f32 unk154;
/* 0x158 */ f32 unk158;
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 4bac34933..4e666ed5c 100644
--- a/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.c
+++ b/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.c
@@ -84,14 +84,14 @@ Actor* func_80B11F44(PlayState* play) {
}
void func_80B11F78(EnOnpuman* this, PlayState* play) {
- if (play->msgCtx.ocarinaMode == 4) {
+ if (play->msgCtx.ocarinaMode == OCARINA_MODE_END) {
this->actionFunc = func_80B121D8;
if (this->actor.csId != CS_ID_NONE) {
CutsceneManager_Stop(this->actor.csId);
}
- } else if (play->msgCtx.ocarinaMode == 3) {
+ } else if (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) {
Audio_PlaySfx(NA_SE_SY_CORRECT_CHIME);
- play->msgCtx.ocarinaMode = 4;
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
if (this->actor.csId != CS_ID_NONE) {
CutsceneManager_Stop(this->actor.csId);
}
@@ -118,7 +118,7 @@ void func_80B1202C(EnOnpuman* this, PlayState* play2) {
case 0x8D6:
this->actionFunc = func_80B11F78;
- func_80152434(play, 0x3A);
+ Message_DisplayOcarinaStaff(play, OCARINA_ACTION_3A);
if (this->unk_2A0 != NULL) {
this->unk_2A0->home.rot.x = 0;
}
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 9046f613a..29361e80f 100644
--- a/src/overlays/actors/ovl_En_Osn/z_en_osn.c
+++ b/src/overlays/actors/ovl_En_Osn/z_en_osn.c
@@ -705,12 +705,12 @@ void EnOsn_InitCutscene(EnOsn* this) {
}
void EnOsn_ChooseAction(EnOsn* this, PlayState* play) {
- u32 isFlagSet = Flags_GetSwitch(play, 0);
+ u32 isSwitchFlagSet = Flags_GetSwitch(play, 0);
this->csId = this->actor.csId;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, OSN_ANIM_IDLE);
- if (!isFlagSet) {
+ if (!isSwitchFlagSet) {
this->actionFunc = EnOsn_HandleCsAction;
} else {
this->actionFunc = EnOsn_Idle;
@@ -888,7 +888,7 @@ void EnOsn_Talk(EnOsn* this, PlayState* play) {
if (((talkState == TEXT_STATE_DONE) || (talkState == TEXT_STATE_5)) && Message_ShouldAdvance(play)) {
if (this->stateFlags & OSN_STATE_END_CONVERSATION) {
this->stateFlags &= ~OSN_STATE_END_CONVERSATION;
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->actionFunc = EnOsn_Idle;
} else {
@@ -968,14 +968,14 @@ void EnOsn_Destroy(Actor* thisx, PlayState* play) {
void EnOsn_Update(Actor* thisx, PlayState* play) {
s32 pad;
EnOsn* this = THIS;
- u32 isFlagSet = Flags_GetSwitch(play, 0);
+ u32 isSwitchFlagSet = Flags_GetSwitch(play, 0);
this->actionFunc(this, play);
Actor_MoveWithGravity(&this->actor);
SkelAnime_Update(&this->skelAnime);
if (ENOSN_GET_TYPE(&this->actor) == OSN_TYPE_CHOOSE) {
- if (isFlagSet) {
+ if (isSwitchFlagSet) {
this->actor.flags |= ACTOR_FLAG_TARGETABLE;
EnOsn_UpdateCollider(this, play);
this->actor.draw = EnOsn_Draw;
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 15648514e..bcdd2934e 100644
--- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c
+++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c
@@ -198,7 +198,7 @@ void EnOssan_SetupAction(EnOssan* this, EnOssanActionFunc action) {
s32 EnOssan_TestItemSelected(PlayState* play) {
MessageContext* msgCtx = &play->msgCtx;
- if ((msgCtx->unk12020 == 0x10) || (msgCtx->unk12020 == 0x11)) {
+ if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_11)) {
return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A);
}
return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) ||
@@ -267,16 +267,16 @@ void EnOssan_SpawnShopItems(EnOssan* this, PlayState* play, ShopItem* shop) {
void EnOssan_Init(Actor* thisx, PlayState* play) {
EnOssan* this = THIS;
- s16 id;
+ s16 objectId;
if ((this->actor.params > ENOSSAN_PART_TIME_WORKER) && (this->actor.params < ENOSSAN_CURIOSITY_SHOP_MAN)) {
//! @bug: Impossible to reach, && should be an ||
Actor_Kill(&this->actor);
return;
}
- id = sObjectIds[this->actor.params];
- this->objIndex = Object_GetIndex(&play->objectCtx, id);
- if (this->objIndex < 0) {
+ objectId = sObjectIds[this->actor.params];
+ this->objectSlot = Object_GetSlot(&play->objectCtx, objectId);
+ if (this->objectSlot <= OBJECT_SLOT_NONE) {
Actor_Kill(&this->actor);
return;
}
@@ -304,7 +304,7 @@ void EnOssan_EndInteraction(PlayState* play, EnOssan* this) {
Player* player = GET_PLAYER(play);
Actor_ProcessTalkRequest(&this->actor, &play->state);
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
this->drawCursor = 0;
@@ -994,7 +994,7 @@ void EnOssan_SetupBuyItemWithFanfare(PlayState* play, EnOssan* this) {
Player* player = GET_PLAYER(play);
Actor_OfferGetItem(&this->actor, play, this->items[this->cursorIndex]->getItemId, 300.0f, 300.0f);
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
player->stateFlags2 &= ~PLAYER_STATE2_20000000;
Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
@@ -1124,7 +1124,7 @@ void EnOssan_BuyItemWithFanfare(EnOssan* this, PlayState* play) {
void EnOssan_SetupItemPurchased(EnOssan* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) {
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
EnOssan_SetupAction(this, EnOssan_ItemPurchased);
if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_STOPPED) {
@@ -1395,8 +1395,8 @@ void EnOssan_CuriosityShopMan_Init(EnOssan* this, PlayState* play) {
}
void EnOssan_PartTimer_Init(EnOssan* this, PlayState* play) {
- SkelAnime_InitFlex(play, &this->skelAnime, &gAniSkeleton, &gAniStandingNormalAnim, this->jointTable,
- this->morphTable, 16);
+ SkelAnime_InitFlex(play, &this->skelAnime, &gAniSkel, &gAniStandingNormalAnim, this->jointTable, this->morphTable,
+ ANI_LIMB_MAX);
this->actor.draw = EnOssan_PartTimer_Draw;
}
@@ -1506,9 +1506,9 @@ void EnOssan_InitShop(EnOssan* this, PlayState* play) {
static EnOssanActionFunc sInitFuncs[] = { EnOssan_CuriosityShopMan_Init, EnOssan_PartTimer_Init };
ShopItem* shopItems;
- if (Object_IsLoaded(&play->objectCtx, this->objIndex)) {
+ if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) {
this->actor.flags &= ~ACTOR_FLAG_10;
- this->actor.objBankIndex = this->objIndex;
+ this->actor.objectSlot = this->objectSlot;
Actor_SetObjectDependency(play, &this->actor);
shopItems = sShops[this->actor.params];
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 20.0f);
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 da256322a..02c44818f 100644
--- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.h
+++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.h
@@ -21,7 +21,7 @@ typedef struct EnOssan {
/* 0x18C */ EnOssanActionFunc prevActionFunc; // Used to restore back to correct browsing function
/* 0x190 */ ColliderCylinder collider;
/* 0x1DC */ s16 delayTimer;
- /* 0x1DE */ s8 objIndex;
+ /* 0x1DE */ s8 objectSlot;
/* 0x1E0 */ s16 eyeTexIndex;
/* 0x1E2 */ s16 blinkTimer;
/* 0x1E4 */ EnOssanBlinkFunc blinkFunc;
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 4e9b7a162..fa7e72acc 100644
--- a/src/overlays/actors/ovl_En_Ot/z_en_ot.c
+++ b/src/overlays/actors/ovl_En_Ot/z_en_ot.c
@@ -4,6 +4,7 @@
* Description: Seahorse
*/
+#include "prevent_bss_reordering.h"
#include "z_en_ot.h"
#include "objects/object_ot/object_ot.h"
#include "objects/gameplay_keep/gameplay_keep.h"
@@ -458,8 +459,8 @@ void func_80B5C3D8(EnOt* this, PlayState* play) {
this->unk_360->actor.shape.rot.y = BINANG_ROT180(temp);
if (this->unk_740 < 1.0f) {
- Lib_LerpRGB(&D_80B5E408, &D_80B5E40C, this->unk_740, &this->unk_744);
- Lib_LerpRGB(&D_80B5E408, &D_80B5E40C, this->unk_740, &this->unk_360->unk_744);
+ Color_RGB8_Lerp(&D_80B5E408, &D_80B5E40C, this->unk_740, &this->unk_744);
+ Color_RGB8_Lerp(&D_80B5E408, &D_80B5E40C, this->unk_740, &this->unk_360->unk_744);
Math_StepToF(&this->unk_740, 1.0f, 0.05f);
}
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 011738668..db4d9386b 100644
--- a/src/overlays/actors/ovl_En_Owl/z_en_owl.c
+++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.c
@@ -146,7 +146,7 @@ void EnOwl_Init(Actor* thisx, PlayState* play) {
this->unk_40C = 4;
this->csIdIndex = -1;
owlType = ENOWL_GET_TYPE(&this->actor);
- switchFlag = ENOWL_GET_SWITCHFLAG(&this->actor);
+ switchFlag = ENOWL_GET_SWITCH_FLAG(&this->actor);
switch (owlType) {
case ENOWL_GET_TYPE_1:
@@ -258,7 +258,7 @@ void func_8095AA70(EnOwl* this) {
}
void func_8095AAD0(EnOwl* this, PlayState* play) {
- s32 switchFlag = ENOWL_GET_SWITCHFLAG(&this->actor);
+ s32 switchFlag = ENOWL_GET_SWITCH_FLAG(&this->actor);
if (switchFlag < 0x7F) {
Flags_SetSwitch(play, switchFlag);
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 095434fa0..3dfadc7d7 100644
--- a/src/overlays/actors/ovl_En_Owl/z_en_owl.h
+++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.h
@@ -10,7 +10,7 @@ typedef void (*EnOwlFunc)(struct EnOwl*);
#define ENOWL_GET_F000(thisx) (((thisx)->params & 0xF000) >> 0xC)
#define ENOWL_GET_TYPE(thisx) (((thisx)->params & 0xF80) >> 7)
-#define ENOWL_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F)
+#define ENOWL_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
typedef enum {
/* 0x001 */ ENOWL_GET_TYPE_1 = 1,
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 77d33673b..e2557b1c3 100644
--- a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c
+++ b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c
@@ -231,7 +231,7 @@ void EnPeehat_Destroy(Actor* thisx, PlayState* play) {
void func_80897170(EnPeehat* this) {
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX;
this->drawDmgEffScale = 1.1f;
- this->drawDmgEffFrozenSteamScale = 1.6500001f;
+ this->drawDmgEffFrozenSteamScale = 1650.0f * 0.001f;
this->drawDmgEffAlpha = 1.0f;
this->colliderSphere.base.colType = COLTYPE_HIT3;
this->unk_2B0 = 80;
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 73f1111a5..5ebdcd43f 100644
--- a/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c
+++ b/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c
@@ -115,7 +115,7 @@ void EnPr2_Init(Actor* thisx, PlayState* play) {
this->actor.colChkInfo.damageTable = &sDamageTable;
SkelAnime_InitFlex(play, &this->skelAnime, &object_pr_Skel_004188, &object_pr_Anim_004340, this->jointTable,
- this->morphtable, 5);
+ this->morphTable, 5);
this->unk_1E0 = ENPR2_GET_F(&this->actor);
this->actor.colChkInfo.mass = 10;
Math_Vec3f_Copy(&this->unk_228, &this->actor.home.pos);
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 94fb7e033..7d462b639 100644
--- a/src/overlays/actors/ovl_En_Pr2/z_en_pr2.h
+++ b/src/overlays/actors/ovl_En_Pr2/z_en_pr2.h
@@ -17,7 +17,7 @@ typedef struct EnPr2 {
/* 0x000 */ Actor actor;
/* 0x144 */ SkelAnime skelAnime;
/* 0x188 */ Vec3s jointTable[5];
- /* 0x1A6 */ Vec3s morphtable[5];
+ /* 0x1A6 */ Vec3s morphTable[5];
/* 0x1C4 */ EnPr2ActionFunc actionFunc;
/* 0x1C8 */ s16 pathIndex;
/* 0x1CC */ Path* path;
diff --git a/src/overlays/actors/ovl_En_Raf/z_en_raf.c b/src/overlays/actors/ovl_En_Raf/z_en_raf.c
index cb9449b32..1c6a669a2 100644
--- a/src/overlays/actors/ovl_En_Raf/z_en_raf.c
+++ b/src/overlays/actors/ovl_En_Raf/z_en_raf.c
@@ -319,7 +319,7 @@ void EnRaf_Idle(EnRaf* this, PlayState* play) {
if (player->transformation == PLAYER_FORM_GORON) {
this->grabTarget = EN_RAF_GRAB_TARGET_GORON_PLAYER;
} else {
- player->unk_AE8 = 50;
+ player->actionVar2 = 50;
}
this->playerRotYWhenGrabbed = player->actor.world.rot.y;
@@ -455,7 +455,7 @@ void EnRaf_Chew(EnRaf* this, PlayState* play) {
case EN_RAF_GRAB_TARGET_GORON_PLAYER:
if (this->chewCount > (BREG(54) + 4)) {
player->actor.parent = NULL;
- player->unk_AE8 = 1000;
+ player->actionVar2 = 1000;
EnRaf_Explode(this, play);
}
break;
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 e6d37cfe4..226aec92b 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
@@ -63,19 +63,19 @@ ActorInit En_Rail_Skb_InitVars = {
};
static AnimationInfo sAnimationInfo[] = {
- { &object_skb_Anim_0064E0, 0.96f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
- { &object_skb_Anim_003584, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f },
- { &object_skb_Anim_002190, 0.6f, 0.0f, 0.0f, ANIMMODE_ONCE_INTERP, 4.0f },
- { &object_skb_Anim_002AC8, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f },
- { &object_skb_Anim_00270C, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f },
- { &object_skb_Anim_00697C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
- { &object_skb_Anim_006D90, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
- { &object_skb_Anim_001D1C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
- { &object_skb_Anim_003584, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f },
- { &object_skb_Anim_003584, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -16.0f },
- { &object_skb_Anim_002AC8, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f },
- { &object_skb_Anim_0015EC, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f },
- { &object_skb_Anim_0009E4, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
+ { &gStalchildWalkAnim, 0.96f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ { &gStalchildStandUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f },
+ { &gStalchildAttackAnim, 0.6f, 0.0f, 0.0f, ANIMMODE_ONCE_INTERP, 4.0f },
+ { &gStalchildStaggerAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f },
+ { &gStalchildCollapseAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f },
+ { &gStalchildSitLaughAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ { &gStalchildSitTapToesAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ { &gStalchildSwingOnBranchAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ { &gStalchildStandUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f },
+ { &gStalchildStandUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -16.0f },
+ { &gStalchildStaggerAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f },
+ { &gStalchildSaluteAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f },
+ { &gStalchildIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
};
static ColliderJntSphElementInit sJntSphElementsInit[2] = {
@@ -247,7 +247,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)) {
+ if (Flags_GetSwitch(play, OBJHAKAISI_GET_SWITCH_FLAG(actor))) {
Actor_Kill(&this->actor);
return;
}
@@ -270,13 +270,13 @@ void EnRailSkb_Init(Actor* thisx, PlayState* play) {
func_80B708C0(this, play);
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 36.0f);
- SkelAnime_Init(play, &this->skelAnime, &object_skb_Skel_005EF8, &object_skb_Anim_0064E0, this->jointTable,
- this->morphTable, 20);
+ SkelAnime_Init(play, &this->skelAnime, &gStalchildSkel, &gStalchildWalkAnim, this->jointTable, this->morphTable,
+ STALCHILD_LIMB_MAX);
Collider_InitJntSph(play, &this->collider);
Collider_SetJntSph(play, &this->collider, &this->actor, &sJntSphInit, this->colliderElements);
CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
- if (Flags_GetSwitch(play, ENRAILSKB_GET_FF(&this->actor))) {
+ if (Flags_GetSwitch(play, ENRAILSKB_GET_SWITCH_FLAG(&this->actor))) {
Actor_Kill(&this->actor);
}
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 593279931..8feff7d5d 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
@@ -10,7 +10,7 @@ typedef void (*EnRailSkbActionFunc)(struct EnRailSkb*, PlayState*);
typedef void (*EnRailSkbUnkFunc)(struct EnRailSkb*);
#define ENRAILSKB_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF)
-#define ENRAILSKB_GET_FF(thisx) ((thisx)->params & 0xFF)
+#define ENRAILSKB_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0xFF)
typedef enum EnRailSkbBodyPart {
/* 0 */ ENRAILSKB_BODYPART_0,
diff --git a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c
index d4a1eaa1c..9aa218e2f 100644
--- a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c
+++ b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c
@@ -463,7 +463,7 @@ void EnRailgibud_Grab(EnRailgibud* this, PlayState* play) {
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;
+ player->actionVar2 = 100;
}
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_GRAB_END);
@@ -1182,37 +1182,40 @@ s32 EnRailgibud_PerformCutsceneActions(EnRailgibud* this, PlayState* play) {
this->cueId = play->csCtx.actorCues[cueChannel]->id;
switch (play->csCtx.actorCues[cueChannel]->id) {
case 1:
- this->cutsceneAnimIndex = EN_RAILGIBUD_ANIM_IDLE;
+ this->csAnimIndex = EN_RAILGIBUD_ANIM_IDLE;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_IDLE);
break;
case 2:
- this->cutsceneAnimIndex = EN_RAILGIBUD_ANIM_SLUMP_START;
+ this->csAnimIndex = EN_RAILGIBUD_ANIM_SLUMP_START;
Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_WEAKENED2);
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_SLUMP_START);
break;
case 3:
- this->cutsceneAnimIndex = EN_RAILGIBUD_ANIM_CONVULSION;
+ this->csAnimIndex = EN_RAILGIBUD_ANIM_CONVULSION;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_CONVULSION);
break;
case 4:
- this->cutsceneAnimIndex = EN_RAILGIBUD_ANIM_ARMS_UP_START;
+ this->csAnimIndex = EN_RAILGIBUD_ANIM_ARMS_UP_START;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_ARMS_UP_START);
break;
case 5:
- this->cutsceneAnimIndex = EN_RAILGIBUD_ANIM_WALK;
+ this->csAnimIndex = EN_RAILGIBUD_ANIM_WALK;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_WALK);
break;
+
+ default:
+ break;
}
} else if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- if (this->cutsceneAnimIndex == EN_RAILGIBUD_ANIM_SLUMP_START) {
- this->cutsceneAnimIndex = EN_RAILGIBUD_ANIM_SLUMP_LOOP;
+ if (this->csAnimIndex == EN_RAILGIBUD_ANIM_SLUMP_START) {
+ this->csAnimIndex = EN_RAILGIBUD_ANIM_SLUMP_LOOP;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_SLUMP_LOOP);
- } else if (this->cutsceneAnimIndex == EN_RAILGIBUD_ANIM_ARMS_UP_START) {
- this->cutsceneAnimIndex = EN_RAILGIBUD_ANIM_ARMS_UP_LOOP;
+ } else if (this->csAnimIndex == EN_RAILGIBUD_ANIM_ARMS_UP_START) {
+ this->csAnimIndex = EN_RAILGIBUD_ANIM_ARMS_UP_LOOP;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_ARMS_UP_LOOP);
EnRailgibud_SetupSinkIntoGround(this);
}
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 42b41ed8a..c9536d235 100644
--- a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.h
+++ b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.h
@@ -52,7 +52,7 @@ typedef struct EnRailgibud {
/* 0x3EE */ s16 shouldWalkForwardNextFrame; // Only used by the "main" Gibdo
/* 0x3F0 */ union {
s16 grabState;
- s16 cutsceneAnimIndex;
+ s16 csAnimIndex;
};
/* 0x3F2 */ union {
s16 playerStunWaitTimer; // Cannot stun the player if this is non-zero
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 1cd0a7861..276ff8db7 100644
--- a/src/overlays/actors/ovl_En_Rd/z_en_rd.c
+++ b/src/overlays/actors/ovl_En_Rd/z_en_rd.c
@@ -842,7 +842,7 @@ void EnRd_Grab(EnRd* this, PlayState* play) {
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;
+ player->actionVar2 = 100;
}
Animation_Change(&this->skelAnime, &gGibdoRedeadGrabEndAnim, 0.5f, 0.0f,
Animation_GetLastFrame(&gGibdoRedeadGrabEndAnim), ANIMMODE_ONCE_INTERP, 0.0f);
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 6ac728a31..b9ea1f142 100644
--- a/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c
+++ b/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c
@@ -61,7 +61,7 @@ void EnRecepgirl_Init(Actor* thisx, PlayState* play) {
this->eyeTexIndex = 2;
- if (Flags_GetSwitch(play, this->actor.params)) {
+ if (Flags_GetSwitch(play, ENRECEPGIRL_GET_SWITCH_FLAG(&this->actor))) {
this->actor.textId = 0x2ADC; // hear directions again?
} else {
this->actor.textId = 0x2AD9; // "Welcome..."
@@ -105,11 +105,11 @@ void EnRecepgirl_Wait(EnRecepgirl* this, PlayState* play) {
} else if (Actor_IsFacingPlayer(&this->actor, 0x2000)) {
Actor_OfferTalk(&this->actor, play, 60.0f);
if (Player_GetMask(play) == PLAYER_MASK_KAFEIS_MASK) {
- this->actor.textId = 0x2367; // "... doesn't Kafei want to break off his engagement ... ?"
- } else if (Flags_GetSwitch(play, this->actor.params)) {
+ this->actor.textId = 0x2367;
+ } else if (Flags_GetSwitch(play, ENRECEPGIRL_GET_SWITCH_FLAG(&this->actor))) {
this->actor.textId = 0x2ADC; // hear directions again?
} else {
- this->actor.textId = 0x2AD9; // "Welcome..."
+ this->actor.textId = 0x2AD9;
}
}
}
@@ -145,8 +145,8 @@ void EnRecepgirl_Talk(EnRecepgirl* this, PlayState* play) {
this->actor.textId = 0x2ADC; // hear directions again?
EnRecepgirl_SetupWait(this);
} else if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- if (this->actor.textId == 0x2AD9) { // "Welcome..."
- Flags_SetSwitch(play, this->actor.params);
+ if (this->actor.textId == 0x2AD9) {
+ Flags_SetSwitch(play, ENRECEPGIRL_GET_SWITCH_FLAG(&this->actor));
Animation_MorphToPlayOnce(&this->skelAnime, &object_bg_Anim_00AD98, 10.0f);
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_80)) {
@@ -156,11 +156,11 @@ void EnRecepgirl_Talk(EnRecepgirl* this, PlayState* play) {
}
} else if (this->actor.textId == 0x2ADC) { // hear directions again?
Animation_MorphToPlayOnce(&this->skelAnime, &object_bg_Anim_00AD98, 10.0f);
- this->actor.textId = 0x2ADD; // "So..."
+ this->actor.textId = 0x2ADD;
} else {
Animation_MorphToPlayOnce(&this->skelAnime, &object_bg_Anim_000968, 10.0f);
- if (this->actor.textId == 0x2ADD) { // "So..."
+ if (this->actor.textId == 0x2ADD) {
this->actor.textId = 0x2ADE; // Mayor's office is on the left, drawing room on the right
} else if (this->actor.textId == 0x2ADA) { // Mayor's office is on the left (meeting ongoing)
this->actor.textId = 0x2ADB; // drawing room on the right
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 a0fba9fdc..96ad7522a 100644
--- a/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.h
+++ b/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.h
@@ -7,6 +7,8 @@ struct EnRecepgirl;
typedef void (*EnRecepgirlActionFunc)(struct EnRecepgirl*, PlayState*);
+#define ENRECEPGIRL_GET_SWITCH_FLAG(thisx) ((thisx)->params)
+
typedef struct EnRecepgirl {
/* 0x000 */ Actor actor;
/* 0x144 */ SkelAnime skelAnime;
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 43b60256b..24fc306cf 100644
--- a/src/overlays/actors/ovl_En_Rr/z_en_rr.c
+++ b/src/overlays/actors/ovl_En_Rr/z_en_rr.c
@@ -195,7 +195,7 @@ void func_808FA11C(EnRr* this) {
this->collider1.info.elemType = ELEMTYPE_UNK0;
this->unk_1EE = 80;
this->drawDmgEffScale = 0.85f;
- this->drawDmgEffFrozenSteamScale = 1.2750001f;
+ this->drawDmgEffFrozenSteamScale = 1275.0f * 0.001f;
this->drawDmgEffAlpha = 1.0f;
this->actor.flags &= ~ACTOR_FLAG_400;
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 80);
@@ -299,7 +299,7 @@ void func_808FA4F4(EnRr* this, PlayState* play) {
if (player->stateFlags2 & PLAYER_STATE2_80) {
player->actor.parent = NULL;
- player->unk_AE8 = 100;
+ player->actionVar2 = 100;
this->actor.flags |= ACTOR_FLAG_TARGETABLE;
this->unk_1F0 = 110;
this->unk_1F6 = 2500;
@@ -636,7 +636,7 @@ void func_808FB1C0(EnRr* this, PlayState* play) {
Actor_PlaySfx(&this->actor, NA_SE_EN_EYEGOLE_DEMO_EYE);
}
- player->unk_AE8 = 0;
+ player->actionVar2 = 0;
this->unk_1F0 = 8;
this->unk_1EA--;
@@ -654,7 +654,7 @@ void func_808FB2C0(EnRr* this, PlayState* play) {
Player* player = GET_PLAYER(play);
this->unk_1E6--;
- player->unk_AE8 = 0;
+ player->actionVar2 = 0;
Math_StepToF(&player->actor.world.pos.x, this->unk_228.x, 30.0f);
Math_StepToF(&player->actor.world.pos.y, this->unk_228.y + this->unk_218, 30.0f);
Math_StepToF(&player->actor.world.pos.z, this->unk_228.z, 30.0f);
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 f22a78ec2..27f95af01 100644
--- a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c
+++ b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c
@@ -368,7 +368,7 @@ void EnRuppecrow_UpdatePosition(EnRuppecrow* this, PlayState* play) {
s32 EnRuppecrow_CheckPlayedMatchingSong(PlayState* play) {
Player* player = GET_PLAYER(play);
- if (play->msgCtx.ocarinaMode == 0x3) {
+ if (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) {
switch (player->transformation) {
case PLAYER_FORM_DEKU:
if (play->msgCtx.lastPlayedSong == OCARINA_SONG_SONATA) {
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 6b2e06f0b..f7ec8f509 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
@@ -264,7 +264,7 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) {
}
} else {
// Scene flag - Checks whether the chandelier has been lit
- if (!Flags_GetSwitch(play, EN_S_GORO_SCENEFLAG_INDEX(&this->actor))) {
+ if (!Flags_GetSwitch(play, EN_S_GORO_GET_SWITCH_FLAG(&this->actor))) {
if (player->transformation == PLAYER_FORM_GORON) {
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_36_08)) {
if (this->textId == 0xD02) {
@@ -786,18 +786,18 @@ void EnSGoro_UpdateSleeping(EnSGoro* this, PlayState* play) {
s32 EnSGoro_UpdateCheerAnimation(EnSGoro* this, PlayState* play) {
if (this->animInfoIndex == EN_S_GORO_ANIM_IDLE_STAND) {
if (((EnJg*)this->otherGoron)->flags & 1) {
- this->loadedObjIndex = Object_GetIndex(&play->objectCtx, OBJECT_TAISOU);
- if (this->loadedObjIndex >= 0) {
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->loadedObjIndex].segment);
+ this->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_TAISOU);
+ if (this->objectSlot > OBJECT_SLOT_NONE) {
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->objectSlot].segment);
this->animInfoIndex = EN_S_GORO_ANIM_TAISOU_CHEER;
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animInfoIndex);
return true;
}
}
} 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] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->loadedObjIndex].segment);
+ this->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_OF1D_MAP);
+ if (this->objectSlot > OBJECT_SLOT_NONE) {
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->objectSlot].segment);
this->animInfoIndex = EN_S_GORO_ANIM_IDLE_STAND;
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animInfoIndex);
this->skelAnime.curFrame = this->skelAnime.endFrame;
@@ -811,7 +811,7 @@ s32 EnSGoro_CheckLullaby(EnSGoro* this, PlayState* play) {
s32 actorType;
Player* player = GET_PLAYER(play);
- if ((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == 3)) {
+ if ((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT)) {
if (play->msgCtx.lastPlayedSong == OCARINA_SONG_GORON_LULLABY) {
this->animInfoIndex = EN_S_GORO_ANIM_ROLLUP;
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animInfoIndex);
@@ -1023,7 +1023,7 @@ s32 EnSGoro_UpdateAttentionTarget(EnSGoro* this, PlayState* play) {
}
void EnSGoro_SetupAction(EnSGoro* this, PlayState* play) {
- if (Object_IsLoaded(&play->objectCtx, this->loadedObjIndex)) {
+ if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) {
this->actionFlags = 0;
if (EN_S_GORO_OFTYPE_WSHRINE) {
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) {
@@ -1157,7 +1157,7 @@ void EnSGoro_SpringShrineGoron_Talk(EnSGoro* this, PlayState* play) {
if (this->actionFlags & EN_S_GORO_ACTIONFLAG_LASTMESSAGE) {
this->actionFlags &= ~EN_S_GORO_ACTIONFLAG_LASTMESSAGE;
this->actionFlags &= ~EN_S_GORO_ACTIONFLAG_ENGAGED;
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->actionFunc = EnSGoro_SpringShrineGoron_Idle;
return;
@@ -1243,7 +1243,7 @@ void EnSGoro_ShopGoron_Talk(EnSGoro* this, PlayState* play) {
this->textId = EnSGoro_BombshopGoron_NextTextId(this, play);
if ((this->textId == 0x675) || (this->textId == 0x676)) {
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
Actor_OfferGetItem(&this->actor, play, GI_POWDER_KEG, 300.0f, 300.0f);
this->actionFunc = EnSGoro_ShopGoron_TakePayment;
@@ -1288,7 +1288,7 @@ void EnSGoro_Sleep(EnSGoro* this, PlayState* play) {
void EnSGoro_SleepTalk(EnSGoro* this, PlayState* play) {
if (Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) {
if (Message_ShouldAdvance(play)) {
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->actionFunc = EnSGoro_Sleep;
}
@@ -1307,10 +1307,10 @@ void EnSGoro_Init(Actor* thisx, PlayState* play) {
Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
if (this->actor.update != NULL) {
- s32 objIndex = Object_GetIndex(&play->objectCtx, OBJECT_OF1D_MAP);
+ s32 objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_OF1D_MAP);
- this->loadedObjIndex = objIndex;
- if (objIndex < 0) {
+ this->objectSlot = objectSlot;
+ if (objectSlot <= OBJECT_SLOT_NONE) {
Actor_Kill(&this->actor);
}
}
@@ -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, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->loadedObjIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->objectSlot].segment);
SkelAnime_Update(&this->skelAnime);
if (this->animInfoIndex != EN_S_GORO_ANIM_SLEEPY) {
EnSGoro_UpdateAttentionTarget(this, play);
@@ -1381,53 +1381,62 @@ void EnSGoro_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) {
s32 overrideRot;
EnSGoro* this = THIS;
- if (limbIndex != GORON_LIMB_BODY) {
- if ((limbIndex == GORON_LIMB_HEAD) && (this->animInfoIndex != EN_S_GORO_ANIM_SLEEPY)) {
- if (this->actionFlags & EN_S_GORO_ACTIONFLAG_FACEPLAYER) {
- overrideRot = true;
- } else {
- overrideRot = false;
+ switch (limbIndex) {
+ case GORON_LIMB_HEAD:
+ if (this->animInfoIndex != EN_S_GORO_ANIM_SLEEPY) {
+ if (this->actionFlags & EN_S_GORO_ACTIONFLAG_FACEPLAYER) {
+ overrideRot = true;
+ } else {
+ overrideRot = false;
+ }
+ if (this->loseAttentionTimer != 0) {
+ stepRot = true;
+ } else {
+ stepRot = false;
+ }
+
+ EnSGoro_UpdateLimb(this->headRotZ + this->bodyRotZ + 0x4000,
+ this->headRotY + this->bodyRotY + this->actor.shape.rot.y + 0x4000,
+ &this->headTranslate, &this->headRotate, stepRot, overrideRot);
+
+ Matrix_Pop();
+ Matrix_Translate(this->headTranslate.x, this->headTranslate.y, this->headTranslate.z, MTXMODE_NEW);
+ Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY);
+ Matrix_RotateYS(this->headRotate.y, MTXMODE_APPLY);
+ Matrix_RotateXS(this->headRotate.x, MTXMODE_APPLY);
+ Matrix_RotateZS(this->headRotate.z, MTXMODE_APPLY);
+ Matrix_Push();
}
- if (this->loseAttentionTimer != 0) {
- stepRot = true;
- } else {
- stepRot = false;
+ break;
+
+ case GORON_LIMB_BODY:
+ if (this->animInfoIndex != EN_S_GORO_ANIM_SLEEPY) {
+ if (this->actionFlags & EN_S_GORO_ACTIONFLAG_FACEPLAYER) {
+ overrideRot = true;
+ } else {
+ overrideRot = false;
+ }
+ if (this->loseAttentionTimer != 0) {
+ stepRot = true;
+ } else {
+ stepRot = false;
+ }
+
+ EnSGoro_UpdateLimb(this->bodyRotZ + 0x4000, this->bodyRotY + this->actor.shape.rot.y + 0x4000,
+ &this->bodyTranslate, &this->bodyRotate, stepRot, overrideRot);
+
+ Matrix_Pop();
+ Matrix_Translate(this->bodyTranslate.x, this->bodyTranslate.y, this->bodyTranslate.z, MTXMODE_NEW);
+ Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY);
+ Matrix_RotateYS(this->bodyRotate.y, MTXMODE_APPLY);
+ Matrix_RotateXS(this->bodyRotate.x, MTXMODE_APPLY);
+ Matrix_RotateZS(this->bodyRotate.z, MTXMODE_APPLY);
+ Matrix_Push();
}
+ break;
- EnSGoro_UpdateLimb(this->headRotZ + this->bodyRotZ + 0x4000,
- this->headRotY + this->bodyRotY + this->actor.shape.rot.y + 0x4000, &this->headTranslate,
- &this->headRotate, stepRot, overrideRot);
-
- Matrix_Pop();
- Matrix_Translate(this->headTranslate.x, this->headTranslate.y, this->headTranslate.z, MTXMODE_NEW);
- Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY);
- Matrix_RotateYS(this->headRotate.y, MTXMODE_APPLY);
- Matrix_RotateXS(this->headRotate.x, MTXMODE_APPLY);
- Matrix_RotateZS(this->headRotate.z, MTXMODE_APPLY);
- Matrix_Push();
- }
- } else if (this->animInfoIndex != EN_S_GORO_ANIM_SLEEPY) {
- if (this->actionFlags & EN_S_GORO_ACTIONFLAG_FACEPLAYER) {
- overrideRot = true;
- } else {
- overrideRot = false;
- }
- if (this->loseAttentionTimer != 0) {
- stepRot = true;
- } else {
- stepRot = false;
- }
-
- EnSGoro_UpdateLimb(this->bodyRotZ + 0x4000, this->bodyRotY + this->actor.shape.rot.y + 0x4000,
- &this->bodyTranslate, &this->bodyRotate, stepRot, overrideRot);
-
- Matrix_Pop();
- Matrix_Translate(this->bodyTranslate.x, this->bodyTranslate.y, this->bodyTranslate.z, MTXMODE_NEW);
- Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY);
- Matrix_RotateYS(this->bodyRotate.y, MTXMODE_APPLY);
- Matrix_RotateXS(this->bodyRotate.x, MTXMODE_APPLY);
- Matrix_RotateZS(this->bodyRotate.z, MTXMODE_APPLY);
- Matrix_Push();
+ default:
+ break;
}
}
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 5777af17b..35b71bfdd 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
@@ -5,7 +5,7 @@
#include "objects/object_oF1d_map/object_oF1d_map.h"
#define EN_S_GORO_GET_MAIN_TYPE(thisx) ((thisx)->params & 0xF)
-#define EN_S_GORO_SCENEFLAG_INDEX(thisx) (((thisx)->params & 0x7F0) >> 4)
+#define EN_S_GORO_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0x7F0) >> 4)
struct EnSGoro;
@@ -23,7 +23,7 @@ typedef struct EnSGoro {
/* 0x1EC */ s16 eyeTexIndex;
/* 0x1EE */ s16 eyeTimer;
/* 0x1F0 */ s16 loseAttentionTimer;
- /* 0x1F4 */ s32 loadedObjIndex;
+ /* 0x1F4 */ s32 objectSlot;
/* 0x1F8 */ Vec3s jointTable[GORON_LIMB_MAX];
/* 0x264 */ Vec3s morphTable[GORON_LIMB_MAX];
/* 0x2D0 */ f32 scaleFactor;
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 c8bc7d660..80fbff4b1 100644
--- a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c
+++ b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c
@@ -90,7 +90,7 @@ static AnimationInfoS sAnimationInfo[] = {
{ &gBusinessScrubFlyEndAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
};
-Gfx* D_80BCCCDC[] = { gKakeraLeafMiddle, gKakeraLeafTip };
+Gfx* D_80BCCCDC[] = { gKakeraLeafMiddleDL, gKakeraLeafTipDL };
Vec3f D_80BCCCE4 = { 0.0f, -0.5f, 0.0f };
@@ -318,7 +318,7 @@ void func_80BCB6D0(EnScopenuts* this, PlayState* play) {
if (Message_ShouldAdvance(play)) {
if (this->unk_328 & 1) {
this->unk_328 &= ~1;
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->actor.flags &= ~ACTOR_FLAG_TARGETABLE;
this->unk_328 &= ~4;
@@ -341,7 +341,7 @@ void func_80BCB6D0(EnScopenuts* this, PlayState* play) {
Message_StartTextbox(play, this->unk_33C, &this->actor);
} else {
Audio_PlaySfx_MessageDecide();
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
Rupees_ChangeBy(-this->unk_358);
this->actionFunc = func_80BCB90C;
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 2e05f0f57..0b22f3d9c 100644
--- a/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c
+++ b/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c
@@ -55,7 +55,7 @@ static u16 sTextIds[] = { 0, 0, 0, 0, 0x1018 };
void EnSekihi_Init(Actor* thisx, PlayState* play) {
EnSekihi* this = THIS;
s32 type = ENSIKIHI_GET_TYPE(thisx);
- s32 objectIndex;
+ s32 objectSlot;
s32 pad;
if (((type < SEKIHI_TYPE_0) || (type >= SEKIHI_TYPE_MAX)) || (sOpaDLists[type] == NULL)) {
@@ -69,9 +69,9 @@ void EnSekihi_Init(Actor* thisx, PlayState* play) {
SET_WEEKEVENTREG(WEEKEVENTREG_OCEANSIDE_SPIDER_HOUSE_BUYER_MOVED_IN);
}
- objectIndex = Object_GetIndex(&play->objectCtx, sObjectIds[type]);
- if (objectIndex >= 0) {
- this->objectIndex = objectIndex;
+ objectSlot = Object_GetSlot(&play->objectCtx, sObjectIds[type]);
+ if (objectSlot > OBJECT_SLOT_NONE) {
+ this->objectSlot = objectSlot;
}
this->actionFunc = func_80A44DE8;
this->opaDList = sOpaDLists[type];
@@ -96,8 +96,8 @@ void func_80A44DE8(EnSekihi* this, PlayState* play) {
};
type = ENSIKIHI_GET_TYPE(&this->dyna.actor);
- if (Object_IsLoaded(&play->objectCtx, this->objectIndex)) {
- this->dyna.actor.objBankIndex = this->objectIndex;
+ if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) {
+ this->dyna.actor.objectSlot = this->objectSlot;
this->dyna.actor.draw = EnSekihi_Draw;
if (type == SEKIHI_TYPE_4) {
this->actionFunc = func_80A450B0;
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 0c26dab71..60e7c47ba 100644
--- a/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.h
+++ b/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.h
@@ -15,7 +15,7 @@ typedef struct EnSekihi {
/* 0x000 */ DynaPolyActor dyna;
/* 0x15C */ Gfx* opaDList;
/* 0x160 */ Gfx* xluDList;
- /* 0x164 */ s8 objectIndex;
+ /* 0x164 */ s8 objectSlot;
/* 0x168 */ EnSekihiActionFunc actionFunc;
} EnSekihi; // size = 0x16C
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 fbd757bd5..597c2c392 100644
--- a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c
+++ b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c
@@ -470,7 +470,7 @@ void func_80ADBAB8(EnSellnuts* this, PlayState* play) {
}
if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->actionFunc = func_80ADBBEC;
func_800B7298(play, NULL, PLAYER_CSMODE_19);
@@ -516,7 +516,7 @@ void func_80ADBD64(EnSellnuts* this, PlayState* play) {
}
if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->unk_338 &= ~2;
this->actor.flags &= ~ACTOR_FLAG_TARGETABLE;
@@ -558,7 +558,7 @@ void func_80ADBE80(EnSellnuts* this, PlayState* play) {
void func_80ADBFA0(EnSellnuts* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
if (this->unk_34C == 0) {
this->actionFunc = func_80ADB544;
@@ -721,7 +721,7 @@ void func_80ADC6D0(EnSellnuts* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
if (player->transformation == PLAYER_FORM_DEKU) {
if (gSaveContext.save.day == 3) {
@@ -751,7 +751,7 @@ void func_80ADC7B4(EnSellnuts* this, PlayState* play) {
CutsceneManager_Queue(this->csId);
}
} else if ((this->unk_366 == 1) && (talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->unk_366 = 0;
CutsceneManager_Stop(this->csId);
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 9d57b9638..98223faea 100644
--- a/src/overlays/actors/ovl_En_Skb/z_en_skb.c
+++ b/src/overlays/actors/ovl_En_Skb/z_en_skb.c
@@ -50,19 +50,19 @@ s32 func_80996594(EnSkb* this, PlayState* play);
void func_80996BEC(EnSkb* this, PlayState* play);
static AnimationInfo sAnimationInfo[] = {
- { &object_skb_Anim_0064E0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0 },
- { &object_skb_Anim_003584, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f },
- { &object_skb_Anim_002190, 0.6f, 0.0f, 0.0f, ANIMMODE_ONCE_INTERP, 4.0f },
- { &object_skb_Anim_002AC8, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0 },
- { &object_skb_Anim_00270C, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0 },
- { &object_skb_Anim_00697C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0 },
- { &object_skb_Anim_006D90, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0 },
- { &object_skb_Anim_001D1C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0 },
- { &object_skb_Anim_003584, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f },
- { &object_skb_Anim_003584, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -16.0f },
- { &object_skb_Anim_002AC8, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f },
- { &object_skb_Anim_0015EC, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0 },
- { &object_skb_Anim_0009E4, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0 },
+ { &gStalchildWalkAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0 },
+ { &gStalchildStandUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f },
+ { &gStalchildAttackAnim, 0.6f, 0.0f, 0.0f, ANIMMODE_ONCE_INTERP, 4.0f },
+ { &gStalchildStaggerAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0 },
+ { &gStalchildCollapseAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0 },
+ { &gStalchildSitLaughAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0 },
+ { &gStalchildSitTapToesAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0 },
+ { &gStalchildSwingOnBranchAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0 },
+ { &gStalchildStandUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f },
+ { &gStalchildStandUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -16.0f },
+ { &gStalchildStaggerAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f },
+ { &gStalchildSaluteAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0 },
+ { &gStalchildIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0 },
};
static Vec3f D_80997468[] = {
@@ -176,29 +176,29 @@ void func_809947B0(PlayState* play, EnSkb* this, Vec3f* inPos) {
}
void func_8099495C(EnSkb* this, PlayState* play) {
- SkelAnime_Init(play, &this->skelAnime, &object_skb_Skel_005EF8, &object_skb_Anim_003584, this->jointTable,
- this->morphTable, 20);
+ SkelAnime_Init(play, &this->skelAnime, &gStalchildSkel, &gStalchildStandUpAnim, this->jointTable, this->morphTable,
+ STALCHILD_LIMB_MAX);
this->unk_3DC = 0;
func_80994E2C(this);
}
void func_809949C4(EnSkb* this, PlayState* play) {
- SkelAnime_Init(play, &this->skelAnime, &object_skb_Skel_005EF8, &object_skb_Anim_00697C, this->jointTable,
- this->morphTable, 20);
+ SkelAnime_Init(play, &this->skelAnime, &gStalchildSkel, &gStalchildSitLaughAnim, this->jointTable, this->morphTable,
+ STALCHILD_LIMB_MAX);
this->unk_3DC = 1;
func_809952D8(this);
}
void func_80994A30(EnSkb* this, PlayState* play) {
- SkelAnime_Init(play, &this->skelAnime, &object_skb_Skel_005EF8, &object_skb_Anim_006D90, this->jointTable,
- this->morphTable, 20);
+ SkelAnime_Init(play, &this->skelAnime, &gStalchildSkel, &gStalchildSitTapToesAnim, this->jointTable,
+ this->morphTable, STALCHILD_LIMB_MAX);
this->unk_3DC = 1;
func_809953E8(this);
}
void func_80994A9C(EnSkb* this, PlayState* play) {
- SkelAnime_Init(play, &this->skelAnime, &object_skb_Skel_005EF8, &object_skb_Anim_001D1C, this->jointTable,
- this->morphTable, 20);
+ SkelAnime_Init(play, &this->skelAnime, &gStalchildSkel, &gStalchildSwingOnBranchAnim, this->jointTable,
+ this->morphTable, STALCHILD_LIMB_MAX);
this->unk_3DC = 1;
func_809954F8(this);
}
@@ -535,7 +535,7 @@ void func_80995818(EnSkb* this, PlayState* play) {
}
void func_809958F4(EnSkb* this) {
- Animation_Change(&this->skelAnime, &object_skb_Anim_003584, -1.0f, Animation_GetLastFrame(&object_skb_Anim_003584),
+ Animation_Change(&this->skelAnime, &gStalchildStandUpAnim, -1.0f, Animation_GetLastFrame(&gStalchildStandUpAnim),
0.0f, ANIMMODE_ONCE, -4.0f);
this->unk_3E4 = 0;
this->actor.flags &= ~ACTOR_FLAG_TARGETABLE;
@@ -620,7 +620,7 @@ void func_80995C84(EnSkb* this, PlayState* play) {
}
void func_80995D3C(EnSkb* this) {
- Animation_Change(&this->skelAnime, &object_skb_Anim_002190, -0.4f, this->skelAnime.curFrame - 1.0f, 0.0f,
+ Animation_Change(&this->skelAnime, &gStalchildAttackAnim, -0.4f, this->skelAnime.curFrame - 1.0f, 0.0f,
ANIMMODE_ONCE_INTERP, 0.0f);
this->collider.base.atFlags &= ~AT_BOUNCED;
this->unk_3DE = 4;
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 5823e728f..b99673197 100644
--- a/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.c
+++ b/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.c
@@ -16,7 +16,7 @@ void EnSnowwd_Destroy(Actor* thisx, PlayState* play);
void EnSnowwd_Update(Actor* thisx, PlayState* play);
void EnSnowwd_Draw(Actor* thisx, PlayState* play);
-void func_80AF76F0(EnSnowwd* this, PlayState* play);
+void EnSnowwd_Idle(EnSnowwd* this, PlayState* play);
ActorInit En_Snowwd_InitVars = {
ACTOR_EN_SNOWWD,
@@ -50,26 +50,18 @@ static ColliderCylinderInit sCylinderInit = {
{ 18, 60, 0, { 0, 0, 0 } },
};
-Vec3f D_80AF7ABC = { 0.0f, 0.0f, 0.0f };
-
-Vec3f D_80AF7AC8 = { 0.0f, -4.0f, 0.0f };
-
-Color_RGBA8 D_80AF7AD4 = { 255, 255, 255, 255 };
-
-Color_RGBA8 D_80AF7AD8 = { 200, 200, 220, 0 };
-
void EnSnowwd_Init(Actor* thisx, PlayState* play) {
EnSnowwd* this = THIS;
- this->actor.home.rot.z = 0;
+ SNOWWD_DROPPED_COLLECTIBLE(thisx) = false;
this->actor.home.rot.y = 0;
- this->unk190 = 0;
+ this->timer = 0;
this->actor.uncullZoneForward = 4000.0f;
this->actor.uncullZoneScale = 2000.0f;
this->actor.uncullZoneDownward = 2400.0f;
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
Actor_SetScale(&this->actor, 1.0f);
- this->actionFunc = func_80AF76F0;
+ this->actionFunc = EnSnowwd_Idle;
}
void EnSnowwd_Destroy(Actor* thisx, PlayState* play) {
@@ -78,26 +70,30 @@ void EnSnowwd_Destroy(Actor* thisx, PlayState* play) {
Collider_DestroyCylinder(play, &this->collider);
}
-void func_80AF76F0(EnSnowwd* this, PlayState* play) {
+void EnSnowwd_Idle(EnSnowwd* this, PlayState* play) {
+ static Vec3f sAccel = { 0.0f, 0.0f, 0.0f };
+ static Vec3f sVelocity = { 0.0f, -4.0f, 0.0f };
+ static Color_RGBA8 sPrimColor = { 255, 255, 255, 255 };
+ static Color_RGBA8 sEnvColor = { 200, 200, 220, 0 };
s32 pad;
Actor* thisx = &this->actor;
- f32 sp54;
- Vec3f sp48;
+ f32 wobbleAmplitude;
+ Vec3f pos;
if (this->collider.base.acFlags & AC_HIT) {
this->collider.base.acFlags &= ~AC_HIT;
Actor_PlaySfx(thisx, NA_SE_IT_REFLECTION_WOOD);
}
if (thisx->home.rot.y != 0) {
- this->unk190 = 0x15;
+ this->timer = 21;
thisx->home.rot.y = 0;
- if (thisx->home.rot.z == 0) {
- if (SNOWWD_GET_PARAM_F80(&this->actor) < 0x10) {
- sp48 = thisx->world.pos;
- sp48.y += 200.0f;
- Item_DropCollectibleRandom(play, NULL, &sp48, SNOWWD_GET_PARAM_F80(&this->actor) * 0x10);
+ if (!SNOWWD_DROPPED_COLLECTIBLE(&this->actor)) {
+ if (SNOWWD_GET_DROP_TABLE(&this->actor) < 16) {
+ pos = thisx->world.pos;
+ pos.y += 200.0f;
+ Item_DropCollectibleRandom(play, NULL, &pos, SNOWWD_GET_DROP_TABLE(&this->actor) * DROP_TABLE_SIZE);
}
- thisx->home.rot.z = 1;
+ SNOWWD_DROPPED_COLLECTIBLE(&this->actor) = true;
}
}
if (thisx->xzDistToPlayer < 600.0f) {
@@ -105,16 +101,18 @@ void func_80AF76F0(EnSnowwd* this, PlayState* play) {
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
}
- if (this->unk190 > 0) {
- this->unk190--;
- sp54 = Math_SinS((s16)((this->unk190 ^ 0xFFFF) * 0x3332)) * 250.0f;
- thisx->shape.rot.x = (s16)(Math_CosS(thisx->yawTowardsPlayer - thisx->shape.rot.y) * sp54);
- thisx->shape.rot.z = (s16)(Math_SinS(thisx->yawTowardsPlayer - thisx->shape.rot.y) * sp54);
- sp48 = thisx->world.pos;
- sp48.x += Rand_CenteredFloat(80.0f);
- sp48.y += 100.0f + Rand_ZeroFloat(30.0f);
- sp48.z += Rand_CenteredFloat(80.0f);
- func_800B0EB0(play, &sp48, &D_80AF7AC8, &D_80AF7ABC, &D_80AF7AD4, &D_80AF7AD8, 200, 10, 20);
+
+ // Wobble from impact and dust particles
+ if (this->timer > 0) {
+ this->timer--;
+ wobbleAmplitude = Math_SinS((this->timer ^ 0xFFFF) * 0x3332) * 250.0f;
+ thisx->shape.rot.x = Math_CosS(thisx->yawTowardsPlayer - thisx->shape.rot.y) * wobbleAmplitude;
+ thisx->shape.rot.z = Math_SinS(thisx->yawTowardsPlayer - thisx->shape.rot.y) * wobbleAmplitude;
+ pos = thisx->world.pos;
+ pos.x += Rand_CenteredFloat(80.0f);
+ pos.y += 100.0f + Rand_ZeroFloat(30.0f);
+ pos.z += Rand_CenteredFloat(80.0f);
+ func_800B0EB0(play, &pos, &sVelocity, &sAccel, &sPrimColor, &sEnvColor, 200, 10, 20);
}
}
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 d336cb252..8adb7fcda 100644
--- a/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.h
+++ b/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.h
@@ -3,7 +3,8 @@
#include "global.h"
-#define SNOWWD_GET_PARAM_F80(thisx) (((thisx)->params & 0xF80) >> 7)
+#define SNOWWD_GET_DROP_TABLE(thisx) (((thisx)->params & 0xF80) >> 7)
+#define SNOWWD_DROPPED_COLLECTIBLE(thisx) ((thisx)->home.rot.z)
struct EnSnowwd;
@@ -12,7 +13,7 @@ typedef void (*EnSnowwdActionFunc)(struct EnSnowwd*, PlayState*);
typedef struct EnSnowwd {
/* 0x000 */ Actor actor;
/* 0x144 */ ColliderCylinder collider;
- /* 0x190 */ s16 unk190;
+ /* 0x190 */ s16 timer;
/* 0x194 */ EnSnowwdActionFunc actionFunc;
} EnSnowwd; // size = 0x198
diff --git a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c
index 9c197223c..901e49126 100644
--- a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c
+++ b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c
@@ -176,7 +176,7 @@ void EnSob1_SetupAction(EnSob1* this, EnSob1ActionFunc action) {
s32 EnSob1_TestItemSelected(PlayState* play) {
MessageContext* msgCtx = &play->msgCtx;
- if ((msgCtx->unk12020 == 0x10) || (msgCtx->unk12020 == 0x11)) {
+ if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_11)) {
return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A);
}
return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) ||
@@ -379,22 +379,22 @@ void EnSob1_SpawnShopItems(EnSob1* this, PlayState* play, ShopItem* shopItem) {
}
}
-s32 EnSob1_GetObjIndices(EnSob1* this, PlayState* play, s16* objIds) {
- if (objIds[1] != OBJECT_ID_MAX) {
- this->unusedObjIndex = Object_GetIndex(&play->objectCtx, objIds[1]);
- if (this->unusedObjIndex < 0) {
+s32 EnSob1_GetObjectIndices(EnSob1* this, PlayState* play, s16* objectIds) {
+ if (objectIds[1] != OBJECT_ID_MAX) {
+ this->unusedObjectSlot = Object_GetSlot(&play->objectCtx, objectIds[1]);
+ if (this->unusedObjectSlot <= OBJECT_SLOT_NONE) {
return false;
}
} else {
- this->unusedObjIndex = -1;
+ this->unusedObjectSlot = OBJECT_SLOT_NONE;
}
- if (objIds[2] != OBJECT_ID_MAX) {
- this->shopkeeperAnimObjIndex = Object_GetIndex(&play->objectCtx, objIds[2]);
- if (this->shopkeeperAnimObjIndex < 0) {
+ if (objectIds[2] != OBJECT_ID_MAX) {
+ this->shopkeeperAnimObjectSlot = Object_GetSlot(&play->objectCtx, objectIds[2]);
+ if (this->shopkeeperAnimObjectSlot <= OBJECT_SLOT_NONE) {
return false;
}
} else {
- this->shopkeeperAnimObjIndex = -1;
+ this->shopkeeperAnimObjectSlot = OBJECT_SLOT_NONE;
}
return true;
}
@@ -402,7 +402,7 @@ s32 EnSob1_GetObjIndices(EnSob1* this, PlayState* play, s16* objIds) {
void EnSob1_Init(Actor* thisx, PlayState* play) {
EnSob1* this = THIS;
s32 pad;
- s16* objIds;
+ s16* objectIds;
switch (ENSOB1_GET_SHOPTYPE(thisx)) {
case ZORA_SHOP:
@@ -426,13 +426,13 @@ void EnSob1_Init(Actor* thisx, PlayState* play) {
return;
}
- objIds = sObjectIds[this->shopType];
- this->mainObjIndex = Object_GetIndex(&play->objectCtx, objIds[0]);
- if (this->mainObjIndex < 0) {
+ objectIds = sObjectIds[this->shopType];
+ this->mainObjectSlot = Object_GetSlot(&play->objectCtx, objectIds[0]);
+ if (this->mainObjectSlot <= OBJECT_SLOT_NONE) {
Actor_Kill(&this->actor);
return;
}
- if (!EnSob1_GetObjIndices(this, play, objIds)) {
+ if (!EnSob1_GetObjectIndices(this, play, objectIds)) {
Actor_Kill(&this->actor);
return;
}
@@ -466,7 +466,7 @@ void EnSob1_EndInteraction(PlayState* play, EnSob1* this) {
this->cutsceneState = ENSOB1_CUTSCENESTATE_STOPPED;
}
Actor_ProcessTalkRequest(&this->actor, &play->state);
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
this->drawCursor = 0;
@@ -957,7 +957,7 @@ void EnSob1_SetupBuyItemWithFanfare(PlayState* play, EnSob1* this) {
Player* player = GET_PLAYER(play);
Actor_OfferGetItem(&this->actor, play, this->items[this->cursorIndex]->getItemId, 300.0f, 300.0f);
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
player->stateFlags2 &= ~PLAYER_STATE2_20000000;
Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
@@ -1110,7 +1110,7 @@ void EnSob1_BuyItemWithFanfare(EnSob1* this, PlayState* play) {
void EnSob1_SetupItemPurchased(EnSob1* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) {
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
EnSob1_SetupAction(this, EnSob1_ItemPurchased);
if (this->cutsceneState == ENSOB1_CUTSCENESTATE_STOPPED) {
@@ -1345,15 +1345,16 @@ void EnSob1_Blink(EnSob1* this) {
}
void EnSob1_ChangeObject(EnSob1* this, PlayState* play) {
- gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->shopkeeperAnimObjIndex].segment);
+ gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->shopkeeperAnimObjectSlot].segment);
}
s32 EnSob1_AreObjectsLoaded(EnSob1* this, PlayState* play) {
- if (Object_IsLoaded(&play->objectCtx, this->mainObjIndex)) {
- if ((this->unusedObjIndex >= 0) && !Object_IsLoaded(&play->objectCtx, this->unusedObjIndex)) {
+ if (Object_IsLoaded(&play->objectCtx, this->mainObjectSlot)) {
+ if ((this->unusedObjectSlot > OBJECT_SLOT_NONE) && !Object_IsLoaded(&play->objectCtx, this->unusedObjectSlot)) {
return false;
}
- if ((this->shopkeeperAnimObjIndex >= 0) && !Object_IsLoaded(&play->objectCtx, this->shopkeeperAnimObjIndex)) {
+ if ((this->shopkeeperAnimObjectSlot > OBJECT_SLOT_NONE) &&
+ !Object_IsLoaded(&play->objectCtx, this->shopkeeperAnimObjectSlot)) {
return false;
}
return true;
@@ -1363,7 +1364,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] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->shopkeeperAnimObjIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->shopkeeperAnimObjectSlot].segment);
Animation_Change(&this->skelAnime, &gZoraShopkeeperAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gZoraShopkeeperAnim),
ANIMMODE_LOOP, 0.0f);
this->actor.draw = EnSob1_ZoraShopkeeper_Draw;
@@ -1372,7 +1373,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] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->shopkeeperAnimObjIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->shopkeeperAnimObjectSlot].segment);
Animation_Change(&this->skelAnime, &gGoronShopkeeperAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gGoronShopkeeperAnim),
ANIMMODE_LOOP, 0.0f);
this->actor.draw = EnSob1_GoronShopkeeper_Draw;
@@ -1394,7 +1395,7 @@ void EnSob1_InitShop(EnSob1* this, PlayState* play) {
if (EnSob1_AreObjectsLoaded(this, play)) {
this->actor.flags &= ~ACTOR_FLAG_10;
- this->actor.objBankIndex = this->mainObjIndex;
+ this->actor.objectSlot = this->mainObjectSlot;
Actor_SetObjectDependency(play, &this->actor);
posOffset = &sPosOffset[this->shopType];
this->actor.world.pos.x += posOffset->x;
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 12c14301b..2ae018ce4 100644
--- a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.h
+++ b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.h
@@ -36,9 +36,9 @@ typedef struct EnSob1 {
/* 0x1E0 */ Path* path;
/* 0x1E4 */ s32 waypoint;
/* 0x1E8 */ s16 delayTimer;
- /* 0x1EA */ s8 mainObjIndex;
- /* 0x1EB */ s8 unusedObjIndex;
- /* 0x1EC */ s8 shopkeeperAnimObjIndex;
+ /* 0x1EA */ s8 mainObjectSlot;
+ /* 0x1EB */ s8 unusedObjectSlot;
+ /* 0x1EC */ s8 shopkeeperAnimObjectSlot;
/* 0x1EE */ s16 headRot;
/* 0x1F0 */ s16 headRotTarget;
/* 0x1F2 */ Vec3s jointTable[ENSOB1_LIMB_MAX];
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 605761711..c7006f087 100644
--- a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c
+++ b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c
@@ -636,7 +636,7 @@ void EnSsh_Init(Actor* thisx, PlayState* play) {
EnSsh* this = THIS;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 30.0f);
- SkelAnime_Init(play, &this->skelAnime, &object_ssh_Skel_006470, NULL, this->jointTable, this->morphtable, 30);
+ SkelAnime_Init(play, &this->skelAnime, &object_ssh_Skel_006470, NULL, this->jointTable, this->morphTable, 30);
Animation_Change(&this->skelAnime, &object_ssh_Anim_001494, 1.0f, 0.0f, frameCount, ANIMMODE_LOOP_INTERP, 0.0f);
this->blureIdx = EnSsh_CreateBlureEffect(play);
EnSsh_InitColliders(this, play);
diff --git a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.h b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.h
index 6f19a5e51..8c95ea628 100644
--- a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.h
+++ b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.h
@@ -31,7 +31,7 @@ typedef struct EnSsh {
/* 0x000 */ Actor actor;
/* 0x144 */ SkelAnime skelAnime;
/* 0x188 */ Vec3s jointTable[30];
- /* 0x23C */ Vec3s morphtable[30];
+ /* 0x23C */ Vec3s morphTable[30];
/* 0x2F0 */ EnSshActionFunc actionFunc;
/* 0x2F4 */ ColliderCylinder collider1[6];
/* 0x4BC */ ColliderJntSph collider2;
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 2491ec4ed..ba1828067 100644
--- a/src/overlays/actors/ovl_En_St/z_en_st.c
+++ b/src/overlays/actors/ovl_En_St/z_en_st.c
@@ -245,9 +245,9 @@ void func_808A54B0(EnSt* this, PlayState* play) {
if ((this->unk_18C & 1) && (this->actor.colChkInfo.health != 0)) {
OPEN_DISPS(play->state.gfxCtx);
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->unk_2C0].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->objectSlot].segment);
- gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.status[this->unk_2C0].segment);
+ gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.slots[this->objectSlot].segment);
Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, MTXMODE_NEW);
@@ -617,8 +617,8 @@ s32 func_808A6580(EnSt* this, PlayState* play) {
break;
}
} else {
- if (ENST_GET_3F(&this->actor) != ENST_3F_63) {
- Flags_SetSwitch(play, ENST_GET_3F(&this->actor));
+ if (ENST_GET_SWITCH_FLAG(&this->actor) != 0x3F) {
+ Flags_SetSwitch(play, ENST_GET_SWITCH_FLAG(&this->actor));
}
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EN_STALTU_DEAD);
Enemy_StartFinishingBlow(play, &this->actor);
@@ -693,7 +693,7 @@ s32 func_808A6A3C(EnSt* this) {
void func_808A6A78(EnSt* this, PlayState* play) {
s32 pad[2];
- if (Object_IsLoaded(&play->objectCtx, this->unk_2C0)) {
+ if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) {
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 8.0f);
SkelAnime_Init(play, &this->skelAnime, &object_st_Skel_005298, NULL, this->jointTable, this->morphTable, 30);
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 0);
@@ -842,9 +842,9 @@ void func_808A701C(EnSt* this, PlayState* play) {
void EnSt_Init(Actor* thisx, PlayState* play) {
EnSt* this = THIS;
- 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)) {
+ this->objectSlot = Object_GetSlot(&play->objectCtx, GAMEPLAY_KEEP);
+ if (((ENST_GET_SWITCH_FLAG(&this->actor) != 0x3F) && Flags_GetSwitch(play, ENST_GET_SWITCH_FLAG(&this->actor))) ||
+ (this->objectSlot <= OBJECT_SLOT_NONE)) {
Actor_Kill(&this->actor);
return;
}
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 0dcfb3d00..dd40a3450 100644
--- a/src/overlays/actors/ovl_En_St/z_en_st.h
+++ b/src/overlays/actors/ovl_En_St/z_en_st.h
@@ -7,10 +7,9 @@ struct EnSt;
typedef void (*EnStActionFunc)(struct EnSt*, PlayState*);
-#define ENST_GET_3F(thisx) (((thisx)->params & 0x3F) & 0xFF)
+#define ENST_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0x3F) & 0xFF)
#define ENST_GET_1C0(thisx) ((((thisx)->params & 0x1C0) >> 6) & 0xFF)
-#define ENST_3F_63 63
#define ENST_1C0_1 1
typedef enum EnStBodyPart {
@@ -39,7 +38,7 @@ typedef struct EnSt {
/* 0x1DC */ ColliderCylinder collider2;
/* 0x228 */ ColliderCylinder collider3;
/* 0x274 */ ColliderCylinder collider4;
- /* 0x2C0 */ s8 unk_2C0;
+ /* 0x2C0 */ s8 objectSlot;
/* 0x2C4 */ f32 unk_2C4;
/* 0x2C8 */ f32 unk_2C8;
/* 0x2CC */ f32 unk_2CC;
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 97aa3ed7b..c80aaed0b 100644
--- a/src/overlays/actors/ovl_En_Sth/z_en_sth.c
+++ b/src/overlays/actors/ovl_En_Sth/z_en_sth.c
@@ -108,16 +108,16 @@ static Color_RGB8 sShirtColors[] = {
void EnSth_Init(Actor* thisx, PlayState* play) {
s32 pad;
EnSth* this = THIS;
- s32 objectId;
+ s32 objectSlot;
// this actor can draw two separate bodies that use different objects
if (STH_GET_SWAMP_BODY(&this->actor)) {
- objectId = Object_GetIndex(&play->objectCtx, OBJECT_AHG);
+ objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_AHG);
} else {
- objectId = Object_GetIndex(&play->objectCtx, OBJECT_STH);
+ objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_STH);
}
- this->mainObjectId = objectId;
- this->maskOfTruthObjectId = Object_GetIndex(&play->objectCtx, OBJECT_MASK_TRUTH);
+ this->mainObjectSlot = objectSlot;
+ this->maskOfTruthObjectSlot = Object_GetSlot(&play->objectCtx, OBJECT_MASK_TRUTH);
Actor_SetScale(&this->actor, 0.01f);
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
@@ -619,8 +619,8 @@ void EnSth_UpdateWaitForObject(Actor* thisx, PlayState* play) {
s32 pad;
EnSth* this = THIS;
- if (Object_IsLoaded(&play->objectCtx, this->mainObjectId)) {
- this->actor.objBankIndex = this->mainObjectId;
+ if (Object_IsLoaded(&play->objectCtx, this->mainObjectSlot)) {
+ this->actor.objectSlot = this->mainObjectSlot;
Actor_SetObjectDependency(play, &this->actor);
if (STH_GET_SWAMP_BODY(&this->actor)) {
@@ -733,14 +733,14 @@ void EnSth_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
OPEN_DISPS(play->state.gfxCtx);
if (this->sthFlags & STH_FLAG_DRAW_MASK_OF_TRUTH) {
- if (Object_IsLoaded(&play->objectCtx, this->maskOfTruthObjectId)) {
+ if (Object_IsLoaded(&play->objectCtx, this->maskOfTruthObjectSlot)) {
Matrix_Push();
Matrix_RotateZS(0x3A98, MTXMODE_APPLY);
Matrix_Translate(0.0f, 190.0f, 0.0f, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPSegment(POLY_OPA_DISP++, 0x0A, play->objectCtx.status[this->maskOfTruthObjectId].segment);
+ gSPSegment(POLY_OPA_DISP++, 0x0A, play->objectCtx.slots[this->maskOfTruthObjectSlot].segment);
gSPDisplayList(POLY_OPA_DISP++, object_mask_truth_DL_0001A0);
Matrix_Pop();
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 dbc459ce1..059ae8c76 100644
--- a/src/overlays/actors/ovl_En_Sth/z_en_sth.h
+++ b/src/overlays/actors/ovl_En_Sth/z_en_sth.h
@@ -42,8 +42,8 @@ typedef struct EnSth {
/* 0x294 */ Vec3s headRot;
/* 0x29A */ s16 animIndex;
/* 0x29C */ u16 sthFlags;
- /* 0x29E */ u8 mainObjectId;
- /* 0x29F */ u8 maskOfTruthObjectId;
+ /* 0x29E */ u8 mainObjectSlot;
+ /* 0x29F */ u8 maskOfTruthObjectSlot;
/* 0x2A0 */ EnSthActionFunc actionFunc;
} EnSth; // size = 0x2A4
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 66b87c998..e45dd1394 100644
--- a/src/overlays/actors/ovl_En_Sth2/z_en_sth2.c
+++ b/src/overlays/actors/ovl_En_Sth2/z_en_sth2.c
@@ -35,7 +35,7 @@ ActorInit En_Sth2_InitVars = {
void EnSth2_Init(Actor* thisx, PlayState* play) {
EnSth2* this = THIS;
- this->objIndex = Object_GetIndex(&play->objectCtx, OBJECT_STH);
+ this->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_STH);
Actor_SetScale(&this->actor, 0.01f);
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 36.0f);
this->unused = 0;
@@ -60,8 +60,8 @@ void EnSth2_Update(Actor* thisx, PlayState* play) {
s32 pad;
EnSth2* this = THIS;
- if (Object_IsLoaded(&play->objectCtx, this->objIndex)) {
- this->actor.objBankIndex = this->objIndex;
+ if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) {
+ this->actor.objectSlot = this->objectSlot;
Actor_SetObjectDependency(play, &this->actor);
SkelAnime_InitFlex(play, &this->skelAnime, &gSthSkel, &gEnSth2WavingHandAnim, this->jointTable,
this->morphTable, STH_LIMB_MAX);
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 d8ecc9cdb..9375532b4 100644
--- a/src/overlays/actors/ovl_En_Sth2/z_en_sth2.h
+++ b/src/overlays/actors/ovl_En_Sth2/z_en_sth2.h
@@ -14,7 +14,7 @@ typedef struct EnSth2 {
/* 0x188 */ Vec3s jointTable[STH_LIMB_MAX];
/* 0x1E8 */ Vec3s morphTable[STH_LIMB_MAX];
/* 0x248 */ s16 unused;
- /* 0x24A */ u8 objIndex;
+ /* 0x24A */ u8 objectSlot;
/* 0x24C */ EnSth2ActionFunc actionFunc;
} EnSth2; // size = 0x250
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 c0d9e1197..581962d60 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
@@ -62,8 +62,8 @@ static ColliderCylinderInit sCylinderInit = {
static u16 sEnStoneHeishiTextIds[] = { 0x1473, 0x1474, 0x1475, 0x1476, 0x1477, 0x1478, 0x1479, 0x147A, 0x1472 };
static AnimationHeader* sAnimations[] = {
- &gSoldierStandHandOnHip, &gSoldierDrink, &gSoldierCheerWithSpear, &gSoldierWave,
- &gSoldierSitAndReach, &gSoldierDrink, &gSoldierStandUp,
+ &gSoldierStandHandOnHipAnim, &gSoldierDrinkAnim, &gSoldierCheerWithSpearAnim, &gSoldierWaveAnim,
+ &gSoldierSitAndReachAnim, &gSoldierDrinkAnim, &gSoldierStandUpAnim,
};
static u8 sAnimationModes[] = {
@@ -107,7 +107,7 @@ void EnStoneheishi_Init(Actor* thisx, PlayState* play) {
EnStoneheishi* this = THIS;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 25.0f);
- SkelAnime_InitFlex(play, &this->skelAnime, &gSoldierSkel, &gSoldierWave, this->jointTable, this->morphTable,
+ SkelAnime_InitFlex(play, &this->skelAnime, &gSoldierSkel, &gSoldierWaveAnim, this->jointTable, this->morphTable,
SOLDIER_LIMB_MAX);
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
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 8be9f715a..6a1b68bbc 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
@@ -85,21 +85,21 @@ static u16 sThirdDayLeaveMessages[] = {
};
static AnimationHeader* sAnimations[SOLDIER_ANIM_MAX] = {
- &gSoldierLookDown, // SOLDIER_ANIM_LOOK_DOWN
- &gSoldierComeUpHere, // SOLDIER_ANIM_COME_UP_HERE
- &gSoldierStandHandOnHip, // SOLDIER_ANIM_STAND_HAND_ON_HIP
- &gSoldierStandAndLookDown, // SOLDIER_ANIM_STAND_LOOK_DOWN
- &object_sdn_Anim_0057BC, // SOLDIER_ANIM_4
- &object_sdn_Anim_005D28, // SOLDIER_ANIM_5
- &object_sdn_Anim_0064C0, // SOLDIER_ANIM_6
- &gSoldierStandWithHandOnChest, // SOLDIER_ANIM_STAND_HAND_ON_CHEST
+ &gSoldierLookDownAnim, // SOLDIER_ANIM_LOOK_DOWN
+ &gSoldierComeUpHereAnim, // SOLDIER_ANIM_COME_UP_HERE
+ &gSoldierStandHandOnHipAnim, // SOLDIER_ANIM_STAND_HAND_ON_HIP
+ &gSoldierStandAndLookDownAnim, // SOLDIER_ANIM_STAND_LOOK_DOWN
+ &object_sdn_Anim_0057BC, // SOLDIER_ANIM_4
+ &object_sdn_Anim_005D28, // SOLDIER_ANIM_5
+ &object_sdn_Anim_0064C0, // SOLDIER_ANIM_6
+ &gSoldierStandWithHandOnChestAnim, // SOLDIER_ANIM_STAND_HAND_ON_CHEST
};
void EnStopheishi_Init(Actor* thisx, PlayState* play) {
EnStopheishi* this = THIS;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 25.0f);
- SkelAnime_InitFlex(play, &this->skelAnime, &gSoldierSkel, &gSoldierStandHandOnHip, this->jointTable,
+ SkelAnime_InitFlex(play, &this->skelAnime, &gSoldierSkel, &gSoldierStandHandOnHipAnim, this->jointTable,
this->morphTable, SOLDIER_LIMB_MAX);
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
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 29f53ae7c..bc0099298 100644
--- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c
+++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c
@@ -1201,7 +1201,7 @@ void func_80BAD130(EnSuttari* this, PlayState* play) {
u8 talkState = Message_GetState(&play->msgCtx);
if (((talkState == TEXT_STATE_5) || (talkState == TEXT_STATE_DONE)) && Message_ShouldAdvance(play)) {
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
if (this->flags1 & 8) {
this->actionFunc = func_80BAD004;
@@ -1238,7 +1238,7 @@ void func_80BAD2B4(EnSuttari* this, PlayState* play) {
this->actionFunc = func_80BAD230;
} else {
CutsceneManager_Stop(this->csIdList[1]);
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->flags1 |= 0x40;
this->actionFunc = func_80BAD380;
@@ -1262,7 +1262,7 @@ void func_80BAD380(EnSuttari* this, PlayState* play) {
player->stateFlags1 &= ~PLAYER_STATE1_10000000;
this->flags1 &= ~0x4000;
CutsceneManager_Stop(this->csIdList[1]);
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->flags1 |= 0x40;
}
@@ -1403,7 +1403,7 @@ void func_80BADA9C(EnSuttari* this, PlayState* play) {
((EnElf*)GET_PLAYER(play)->tatlActor)->unk_264 |= 0x10;
this->flags2 &= ~1;
}
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->textId = 0;
if (this->flags1 & 1) {
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 d3b88bb2d..28eeafc09 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
@@ -362,7 +362,7 @@ void EnSyatekiMan_Swamp_HandleChoice(EnSyatekiMan* this, PlayState* play) {
Rupees_ChangeBy(-20);
SET_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT);
CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED);
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->shootingGameState = SG_GAME_STATE_MOVING_PLAYER;
player->stateFlags1 |= PLAYER_STATE1_20;
@@ -415,7 +415,7 @@ void EnSyatekiMan_Swamp_HandleNormalMessage(EnSyatekiMan* this, PlayState* play)
case 0xA2B: // The rules of the game are a piece of cake!
case 0xA2C: // I keep saying - you have to aim with [Control Stick]!
case 0xA35: // You almost had it! Well...just this once...here you go!
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
player->actor.freezeTimer = 0;
Interface_InitMinigame(play);
@@ -450,7 +450,7 @@ void EnSyatekiMan_Swamp_HandleNormalMessage(EnSyatekiMan* this, PlayState* play)
break;
case 0xA34: // Perfect! Take this!
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
player->actor.freezeTimer = 0;
gSaveContext.minigameStatus = MINIGAME_STATUS_END;
@@ -485,7 +485,7 @@ void EnSyatekiMan_Swamp_Talk(EnSyatekiMan* this, PlayState* play) {
case TEXT_STATE_DONE:
if (Message_ShouldAdvance(play)) {
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
player->stateFlags1 &= ~PLAYER_STATE1_20;
CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT);
@@ -764,7 +764,7 @@ void EnSyatekiMan_Town_HandleNormalMessage(EnSyatekiMan* this, PlayState* play)
this->prevTextId = 0x400;
}
} else {
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
player->actor.freezeTimer = 0;
this->shootingGameState = SG_GAME_STATE_MOVING_PLAYER;
@@ -777,7 +777,7 @@ void EnSyatekiMan_Town_HandleNormalMessage(EnSyatekiMan* this, PlayState* play)
case 0x3FE: // Our highest score is [score]. If you break the record, you'll win a prize!
case 0x400: // Our highest score is [score]. Good luck!
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
player->actor.freezeTimer = 0;
this->flagsIndex = 0;
@@ -827,7 +827,7 @@ void EnSyatekiMan_Town_HandleNormalMessage(EnSyatekiMan* this, PlayState* play)
case 0x405: // No way! That was perfect!
case 0x406: // That was perfect!
case 0x407: // You got a new record!
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
player->actor.freezeTimer = 0;
gSaveContext.minigameStatus = MINIGAME_STATUS_END;
@@ -1140,8 +1140,8 @@ void EnSyatekiMan_Swamp_EndGame(EnSyatekiMan* this, PlayState* play) {
this->guayFlags = 0;
this->wolfosFlags = 0;
if (this->talkWaitTimer <= 0) {
- if (GET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE() < this->score) {
- SET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE(this->score);
+ if (HS_GET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE() < this->score) {
+ HS_SET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE(this->score);
}
this->talkWaitTimer = 15;
@@ -1409,8 +1409,8 @@ void EnSyatekiMan_Town_EndGame(EnSyatekiMan* this, PlayState* play) {
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 ((HS_GET_TOWN_SHOOTING_GALLERY_HIGH_SCORE() < this->score) || (this->score == 50)) {
+ if (HS_GET_TOWN_SHOOTING_GALLERY_HIGH_SCORE() < this->score) {
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_TOWN_SHOOTING_GALLERY_QUIVER_UPGRADE)) {
// You got a new record!
Message_StartTextbox(play, 0x407, &this->actor);
@@ -1430,7 +1430,7 @@ void EnSyatekiMan_Town_EndGame(EnSyatekiMan* this, PlayState* play) {
this->prevTextId = 0x406;
}
- SET_TOWN_SHOOTING_GALLERY_HIGH_SCORE(this->score);
+ HS_SET_TOWN_SHOOTING_GALLERY_HIGH_SCORE(this->score);
this->shootingGameState = SG_GAME_STATE_ENDED;
} else {
if (CURRENT_DAY != 3) {
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 a2c39f16b..692651860 100644
--- a/src/overlays/actors/ovl_En_Takaraya/z_en_takaraya.c
+++ b/src/overlays/actors/ovl_En_Takaraya/z_en_takaraya.c
@@ -15,7 +15,25 @@ void EnTakaraya_Destroy(Actor* thisx, PlayState* play);
void EnTakaraya_Update(Actor* thisx, PlayState* play);
void EnTakaraya_Draw(Actor* thisx, PlayState* play);
-#if 0
+void EnTakaraya_Blink(EnTakaraya* this);
+void EnTakaraya_SetupWait(EnTakaraya* this);
+void EnTakaraya_Wait(EnTakaraya* this, PlayState* play);
+void EnTakaraya_SpawnWalls(EnTakaraya* this, PlayState* play);
+void EnTakaraya_SetupTalk(EnTakaraya* this);
+void EnTakaraya_Talk(EnTakaraya* this, PlayState* play);
+void func_80ADF2D4(EnTakaraya* this);
+void func_80ADF338(EnTakaraya* this, PlayState* play);
+void func_80ADF4E0(EnTakaraya* this);
+void func_80ADF520(EnTakaraya* this, PlayState* play);
+void func_80ADF608(EnTakaraya* this, PlayState* play);
+void func_80ADF654(EnTakaraya* this, PlayState* play);
+void func_80ADF6DC(EnTakaraya* this);
+void func_80ADF730(EnTakaraya* this, PlayState* play);
+void func_80ADF7B8(EnTakaraya* this);
+void func_80ADF7CC(EnTakaraya* this, PlayState* play);
+s32 EnTakaraya_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx);
+void EnTakaraya_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx);
+
ActorInit En_Takaraya_InitVars = {
ACTOR_EN_TAKARAYA,
ACTORCAT_NPC,
@@ -28,61 +46,391 @@ ActorInit En_Takaraya_InitVars = {
(ActorFunc)EnTakaraya_Draw,
};
-// static InitChainEntry sInitChain[] = {
-static InitChainEntry D_80ADFB20[] = {
+TexturePtr sEyesUpTextures[] = {
+ gTreasureChestShopGalEyeOpenUpTex,
+ gTreasureChestShopGalEyeHalfUpTex,
+ gTreasureChestShopGalEyeClosedTex,
+ gTreasureChestShopGalEyeHalfUpTex,
+};
+
+TexturePtr sEyesDownTextures[] = {
+ gTreasureChestShopGalEyeOpenDownTex,
+ gTreasureChestShopGalEyeHalfDownTex,
+ gTreasureChestShopGalEyeClosedTex,
+ gTreasureChestShopGalEyeHalfDownTex,
+};
+
+static InitChainEntry sInitChain[] = {
ICHAIN_U8(targetMode, TARGET_MODE_6, ICHAIN_CONTINUE),
ICHAIN_F32(targetArrowOffset, 1000, ICHAIN_STOP),
};
-#endif
+u32 sTexturesDesegmented = false;
-extern InitChainEntry D_80ADFB20[];
+u16 D_80ADFB2C[PLAYER_FORM_MAX] = {
+ 0x76D, // PLAYER_FORM_FIERCE_DEITY
+ 0x76E, // PLAYER_FORM_GORON
+ 0x76F, // PLAYER_FORM_ZORA
+ 0x76C, // PLAYER_FORM_DEKU
+ 0x76D, // PLAYER_FORM_HUMAN
+};
-extern UNK_TYPE D_06001384;
-extern UNK_TYPE D_06009890;
-extern UNK_TYPE D_0600A280;
-extern UNK_TYPE D_0600AD98;
+u8 D_80ADFB38[PLAYER_FORM_MAX][2] = {
+ { 5, 5 }, // PLAYER_FORM_FIERCE_DEITY
+ { 12, 5 }, // PLAYER_FORM_GORON
+ { 4, 4 }, // PLAYER_FORM_ZORA
+ { 42, 41 }, // PLAYER_FORM_DEKU
+ { 5, 5 }, // PLAYER_FORM_HUMAN
+};
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/EnTakaraya_Init.s")
+u16 D_80ADFB44[PLAYER_FORM_MAX] = {
+ 0x775, // PLAYER_FORM_FIERCE_DEITY
+ 0x776, // PLAYER_FORM_GORON
+ 0x777, // PLAYER_FORM_ZORA
+ 0x774, // PLAYER_FORM_DEKU
+ 0x775, // PLAYER_FORM_HUMAN
+};
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/EnTakaraya_Destroy.s")
+u16 D_80ADFB50[PLAYER_FORM_MAX] = {
+ 0x771, // PLAYER_FORM_FIERCE_DEITY
+ 0x772, // PLAYER_FORM_GORON
+ 0x773, // PLAYER_FORM_ZORA
+ 0x770, // PLAYER_FORM_DEKU
+ 0x771, // PLAYER_FORM_HUMAN
+};
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADED8C.s")
+void EnTakaraya_Init(Actor* thisx, PlayState* play) {
+ EnTakaraya* this = THIS;
+ s32 i;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADEDF8.s")
+ Actor_ProcessInitChain(&this->actor, sInitChain);
+ ActorShape_Init(&this->actor.shape, -60.0f, NULL, 0.0f);
+ SkelAnime_InitFlex(play, &this->skelAnime, &gTreasureChestShopGalSkel, &object_bg_Anim_009890, this->jointTable,
+ this->morphTable, TREASURE_CHEST_SHOP_GAL_LIMB_MAX);
+ this->switchFlag = EN_TAKARAYA_GET_SWITCH_FLAG(thisx);
+ thisx->params &= 0xFF;
+ if (!sTexturesDesegmented) {
+ for (i = 0; i < ARRAY_COUNT(sEyesDownTextures); i++) {
+ sEyesUpTextures[i] = Lib_SegmentedToVirtual(sEyesUpTextures[i]);
+ sEyesDownTextures[i] = Lib_SegmentedToVirtual(sEyesDownTextures[i]);
+ }
+ sTexturesDesegmented = true;
+ }
+ this->eyeTexIndex = 2;
+ if (gSaveContext.save.entrance == ENTRANCE(TREASURE_CHEST_SHOP, 1)) {
+ Audio_StopSubBgm();
+ if (gSaveContext.timerStates[TIMER_ID_MINIGAME_2] == TIMER_STATE_6) {
+ this->actor.textId = 0x77A;
+ gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_STOP;
+ func_80ADF6DC(this);
+ } else {
+ this->actor.textId = 0x77C;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED)) {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED);
+ EnTakaraya_SetupWait(this);
+ } else {
+ func_80ADF6DC(this);
+ }
+ }
+ } else {
+ EnTakaraya_SetupWait(this);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADEE4C.s")
+void EnTakaraya_Destroy(Actor* thisx, PlayState* play) {
+ EnTakaraya* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADEF74.s")
+ Flags_UnsetSwitch(play, 5);
+ if (!this->unk2AD) {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT);
+ gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_STOP;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADF03C.s")
+void EnTakaraya_Blink(EnTakaraya* this) {
+ if (this->eyeTexIndex != 0) {
+ this->eyeTexIndex++;
+ if (this->eyeTexIndex == 4) {
+ this->eyeTexIndex = 0;
+ }
+ } else if (Rand_ZeroOne() < 0.02f) {
+ this->eyeTexIndex++;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADF050.s")
+void EnTakaraya_SetupWait(EnTakaraya* this) {
+ if (this->skelAnime.animation == &object_bg_Anim_001384) {
+ Animation_MorphToPlayOnce(&this->skelAnime, &object_bg_Anim_00AD98, 5.0f);
+ }
+ this->actionFunc = EnTakaraya_Wait;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADF2D4.s")
+void EnTakaraya_Wait(EnTakaraya* this, PlayState* play) {
+ if (SkelAnime_Update(&this->skelAnime)) {
+ if (this->skelAnime.animation == &object_bg_Anim_00A280) {
+ Animation_MorphToPlayOnce(&this->skelAnime, &object_bg_Anim_00AD98, 5.0f);
+ } else {
+ Animation_MorphToLoop(&this->skelAnime, &object_bg_Anim_009890, -4.0f);
+ }
+ }
+ if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
+ if (Text_GetFaceReaction(play, FACE_REACTION_SET_TREASURE_CHEST_SHOP_GAL) == 0) {
+ Animation_MorphToPlayOnce(&this->skelAnime, &object_bg_Anim_00A280, -4.0f);
+ }
+ EnTakaraya_SetupTalk(this);
+ } else if (Actor_IsFacingPlayer(&this->actor, 0x2000)) {
+ this->actor.textId = Text_GetFaceReaction(play, FACE_REACTION_SET_TREASURE_CHEST_SHOP_GAL);
+ if (this->actor.textId == 0) {
+ this->actor.textId = D_80ADFB2C[GET_PLAYER_FORM];
+ }
+ this->formSwitchFlag = GET_PLAYER_FORM + this->switchFlag;
+ Actor_OfferTalk(&this->actor, play, 120.0f);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADF338.s")
+void EnTakaraya_SpawnWalls(EnTakaraya* this, PlayState* play) {
+ u8 var_v1;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADF4E0.s")
+ if (Flags_GetSwitch(play, this->formSwitchFlag)) {
+ var_v1 = D_80ADFB38[GET_PLAYER_FORM][1];
+ } else {
+ var_v1 = D_80ADFB38[GET_PLAYER_FORM][0];
+ }
+ Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_OBJ_TAKARAYA_WALL, 0.0f, 0.0f, 0.0f, 0, 0, 5,
+ ((var_v1 << 5) + this->actor.params) + 0xB000, this->actor.csId, HALFDAYBIT_ALL,
+ NULL);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADF520.s")
+void EnTakaraya_SetupTalk(EnTakaraya* this) {
+ this->actionFunc = EnTakaraya_Talk;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADF608.s")
+void EnTakaraya_Talk(EnTakaraya* this, PlayState* play) {
+ u8 talkState;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADF654.s")
+ if (SkelAnime_Update(&this->skelAnime)) {
+ if (this->skelAnime.animation == &object_bg_Anim_00AD98) {
+ Animation_PlayOnce(&this->skelAnime, &object_bg_Anim_000968);
+ } else if (this->skelAnime.animation == &object_bg_Anim_00A280) {
+ Animation_PlayLoop(&this->skelAnime, &object_bg_Anim_001384);
+ } else {
+ Animation_PlayLoop(&this->skelAnime, &object_bg_Anim_009890);
+ }
+ }
+ talkState = Message_GetState(&play->msgCtx);
+ if ((talkState == TEXT_STATE_CLOSING) || (talkState == TEXT_STATE_DONE)) {
+ if (this->actor.textId == 0x778) {
+ func_80ADF2D4(this);
+ } else {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED);
+ EnTakaraya_SetupWait(this);
+ }
+ } else if ((talkState == TEXT_STATE_1) && (this->actor.textId != 0x778)) {
+ if (Message_ShouldAdvance(play)) {
+ Animation_MorphToPlayOnce(&this->skelAnime, &object_bg_Anim_00AD98, 5.0f);
+ }
+ } else if ((talkState == TEXT_STATE_CHOICE) && Message_ShouldAdvance(play)) {
+ if (play->msgCtx.choiceIndex == 0) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) {
+ this->actor.textId = 0x77B;
+ if (this->skelAnime.animation == &object_bg_Anim_009890) {
+ Animation_MorphToPlayOnce(&this->skelAnime, &object_bg_Anim_000968, 5.0f);
+ }
+ Audio_PlaySfx(NA_SE_SY_ERROR);
+ } else {
+ Audio_PlaySfx_MessageDecide();
+ Rupees_ChangeBy(-play->msgCtx.unk1206C);
+ EnTakaraya_SpawnWalls(this, play);
+ this->actor.textId = 0x778;
+ if (this->skelAnime.animation != &object_bg_Anim_009890) {
+ Animation_MorphToLoop(&this->skelAnime, &object_bg_Anim_009890, 5.0f);
+ }
+ }
+ } else {
+ Audio_PlaySfx_MessageCancel();
+ this->actor.textId = D_80ADFB44[GET_PLAYER_FORM];
+ if (this->skelAnime.animation == &object_bg_Anim_009890) {
+ Animation_MorphToPlayOnce(&this->skelAnime, &object_bg_Anim_000968, 5.0f);
+ }
+ }
+ Message_ContinueTextbox(play, this->actor.textId);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADF6DC.s")
+void func_80ADF2D4(EnTakaraya* this) {
+ Actor_PlaySfx_FlaggedCentered2(&this->actor, NA_SE_SY_FOUND);
+ Audio_PlaySubBgm(NA_BGM_TIMED_MINI_GAME);
+ this->timer = 145;
+ SET_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED);
+ this->actionFunc = func_80ADF338;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADF730.s")
+void func_80ADF338(EnTakaraya* this, PlayState* play) {
+ Actor* chest = play->actorCtx.actorLists[ACTORCAT_CHEST].first;
+ Player* player = GET_PLAYER(play);
+ Vec3f subCamEye;
+ Vec3f subCamAt;
+ f32 sp2C;
+ s16 subCamId;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADF7B8.s")
+ SkelAnime_Update(&this->skelAnime);
+ if ((CutsceneManager_GetCurrentCsId() == this->actor.csId) && (chest != NULL)) {
+ this->timer--;
+ subCamId = CutsceneManager_GetCurrentSubCamId(this->actor.csId);
+ if (this->timer >= 26) {
+ sp2C = 250.0f;
+ } else {
+ sp2C = ((chest->xzDistToPlayer - 250.0f) * (25 - this->timer) * 0.04f) + 250.0f;
+ }
+ subCamEye.x = (Math_SinS(chest->yawTowardsPlayer) * sp2C) + chest->world.pos.x;
+ subCamEye.y = player->actor.world.pos.y + 120.0f;
+ subCamEye.z = (Math_CosS(chest->yawTowardsPlayer) * sp2C) + chest->world.pos.z;
+ subCamAt.x = subCamEye.x - (Math_SinS(chest->yawTowardsPlayer) * 250.0f);
+ subCamAt.y = subCamEye.y - 90.0f;
+ subCamAt.z = subCamEye.z - (Math_CosS(chest->yawTowardsPlayer) * 250.0f);
+ Play_SetCameraAtEye(play, subCamId, &subCamAt, &subCamEye);
+ } else if (this->timer < 145) {
+ func_80ADF4E0(this);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADF7CC.s")
+void func_80ADF4E0(EnTakaraya* this) {
+ Interface_StartTimer(TIMER_ID_MINIGAME_2, 45);
+ this->timer = 1;
+ this->actionFunc = func_80ADF520;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/EnTakaraya_Update.s")
+void func_80ADF520(EnTakaraya* this, PlayState* play) {
+ SkelAnime_Update(&this->skelAnime);
+ if (!Play_InCsMode(play)) {
+ if (Flags_GetTreasure(play, this->actor.params)) {
+ Flags_SetSwitch(play, this->formSwitchFlag);
+ play->actorCtx.sceneFlags.chest &= ~TAKARAYA_GET_TREASURE_FLAG(&this->actor);
+ this->timer = 0;
+ gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_6;
+ func_80ADF608(this, play);
+ } else if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] == TIMER_STATE_OFF) {
+ this->timer = 50;
+ Message_StartTextbox(play, 0x77D, &this->actor);
+ gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_STOP;
+ func_80ADF608(this, play);
+ }
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADF94C.s")
+void func_80ADF608(EnTakaraya* this, PlayState* play) {
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT);
+ this->unk2AD = true;
+ this->actionFunc = func_80ADF654;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADF984.s")
+void func_80ADF654(EnTakaraya* this, PlayState* play) {
+ if (this->timer > 0) {
+ this->timer--;
+ } else {
+ if (gSaveContext.timerStates[TIMER_ID_MINIGAME_2] == TIMER_STATE_6) {
+ play->transitionType = TRANS_TYPE_80;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
+ } else {
+ play->transitionType = TRANS_TYPE_64;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK;
+ }
+ gSaveContext.nextCutsceneIndex = 0;
+ play->nextEntrance = ENTRANCE(TREASURE_CHEST_SHOP, 1);
+ play->transitionTrigger = TRANS_TRIGGER_START;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/EnTakaraya_Draw.s")
+void func_80ADF6DC(EnTakaraya* this) {
+ Animation_PlayLoop(&this->skelAnime, &object_bg_Anim_001384);
+ this->eyeTexIndex = 0;
+ this->actor.flags |= ACTOR_FLAG_10000;
+ this->actionFunc = func_80ADF730;
+}
+
+void func_80ADF730(EnTakaraya* this, PlayState* play) {
+ SkelAnime_Update(&this->skelAnime);
+ if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
+ this->actor.flags &= ~ACTOR_FLAG_10000;
+ func_80ADF7B8(this);
+ } else {
+ this->formSwitchFlag = GET_PLAYER_FORM + this->switchFlag;
+ Actor_OfferTalk(&this->actor, play, 120.0f);
+ }
+}
+
+void func_80ADF7B8(EnTakaraya* this) {
+ this->actionFunc = func_80ADF7CC;
+}
+
+void func_80ADF7CC(EnTakaraya* this, PlayState* play) {
+ SkelAnime_Update(&this->skelAnime);
+
+ if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
+ if (this->actor.textId == 0x77A) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED)) {
+ Message_CloseTextbox(play);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED);
+ EnTakaraya_SetupWait(this);
+ } else {
+ this->actor.textId = 0x77C;
+ Message_ContinueTextbox(play, this->actor.textId);
+ }
+ } else {
+ this->actor.textId = D_80ADFB50[GET_PLAYER_FORM];
+ Message_ContinueTextbox(play, this->actor.textId);
+ Animation_MorphToPlayOnce(&this->skelAnime, &object_bg_Anim_00AD98, 5.0f);
+ EnTakaraya_SetupTalk(this);
+ }
+ }
+}
+
+void EnTakaraya_Update(Actor* thisx, PlayState* play) {
+ EnTakaraya* this = THIS;
+ s32 pad;
+ Vec3s torsoRot;
+
+ this->actionFunc(this, play);
+ Actor_TrackPlayer(play, &this->actor, &this->headRot, &torsoRot, this->actor.focus.pos);
+ EnTakaraya_Blink(this);
+}
+
+s32 EnTakaraya_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
+ EnTakaraya* this = THIS;
+
+ if (limbIndex == TREASURE_CHEST_SHOP_GAL_LIMB_HEAD) {
+ rot->x += this->headRot.y;
+ }
+ return false;
+}
+
+void EnTakaraya_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) {
+ EnTakaraya* this = THIS;
+
+ if (limbIndex == TREASURE_CHEST_SHOP_GAL_LIMB_HEAD) {
+ Matrix_RotateYS(0x400 - this->headRot.x, MTXMODE_APPLY);
+ Matrix_MultVecX(500.0f, &thisx->focus.pos);
+ }
+}
+
+void EnTakaraya_Draw(Actor* thisx, PlayState* play) {
+ EnTakaraya* this = THIS;
+
+ OPEN_DISPS(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+
+ if ((GET_PLAYER_FORM == PLAYER_FORM_DEKU) || (GET_PLAYER_FORM == PLAYER_FORM_HUMAN)) {
+ gSPSegment(POLY_OPA_DISP++, 0x08, sEyesDownTextures[this->eyeTexIndex]);
+ } else {
+ gSPSegment(POLY_OPA_DISP++, 0x08, sEyesUpTextures[this->eyeTexIndex]);
+ }
+ SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
+ this->skelAnime.dListCount, EnTakaraya_OverrideLimbDraw, NULL,
+ EnTakaraya_TransformLimbDraw, &this->actor);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
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 cfa37125e..3124097de 100644
--- a/src/overlays/actors/ovl_En_Takaraya/z_en_takaraya.h
+++ b/src/overlays/actors/ovl_En_Takaraya/z_en_takaraya.h
@@ -2,16 +2,27 @@
#define Z_EN_TAKARAYA_H
#include "global.h"
+#include "objects/object_bg/object_bg.h"
struct EnTakaraya;
typedef void (*EnTakarayaActionFunc)(struct EnTakaraya*, PlayState*);
+#define EN_TAKARAYA_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 0x8) & 0xFF)
+#define TAKARAYA_GET_TREASURE_FLAG(thisx) (1 << (thisx)->params)
+
typedef struct EnTakaraya {
/* 0x000 */ Actor actor;
- /* 0x144 */ char unk_144[0x164];
+ /* 0x144 */ SkelAnime skelAnime;
+ /* 0x188 */ Vec3s jointTable[TREASURE_CHEST_SHOP_GAL_LIMB_MAX];
+ /* 0x218 */ Vec3s morphTable[TREASURE_CHEST_SHOP_GAL_LIMB_MAX];
/* 0x2A8 */ EnTakarayaActionFunc actionFunc;
- /* 0x2AC */ char unk_2AC[0x10];
+ /* 0x2AC */ u8 eyeTexIndex;
+ /* 0x2AD */ u8 unk2AD;
+ /* 0x2AE */ s16 timer;
+ /* 0x2B0 */ s16 formSwitchFlag;
+ /* 0x2B2 */ s16 switchFlag;
+ /* 0x2B4 */ Vec3s headRot;
} EnTakaraya; // size = 0x2BC
#endif // Z_EN_TAKARAYA_H
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 9faa6664a..34ebe1d80 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
@@ -248,7 +248,7 @@ void EnTalkGibud_Init(Actor* thisx, PlayState* play) {
this->isTalking = false;
this->type = EN_TALK_GIBUD_TYPE_GIBDO;
this->requestedItemIndex = EN_TALK_GIBUD_REQUESTED_ITEM_INDEX(thisx);
- this->switchFlag = EN_TALK_GIBUD_SWITCH_FLAG(thisx);
+ this->switchFlag = EN_TALK_GIBUD_GET_SWITCH_FLAG(thisx);
this->drawDmgEffAlpha = 0.0f;
this->drawDmgEffScale = 0.0f;
@@ -421,7 +421,7 @@ void EnTalkGibud_Grab(EnTalkGibud* this, PlayState* play) {
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;
+ player->actionVar2 = 100;
}
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_TALK_GIBUD_ANIM_GRAB_END);
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 0819cd893..06ccd3914 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
@@ -5,7 +5,7 @@
#include "objects/object_rd/object_rd.h"
#define EN_TALK_GIBUD_REQUESTED_ITEM_INDEX(thisx) ((thisx)->params & 0xF)
-#define EN_TALK_GIBUD_SWITCH_FLAG(thisx) (((thisx)->params & 0xFF0) >> 4)
+#define EN_TALK_GIBUD_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0xFF0) >> 4)
struct EnTalkGibud;
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 e853570f4..7a9e45bc2 100644
--- a/src/overlays/actors/ovl_En_Test2/z_en_test2.c
+++ b/src/overlays/actors/ovl_En_Test2/z_en_test2.c
@@ -79,18 +79,18 @@ void EnTest2_Init(Actor* thisx, PlayState* play) {
void EnTest2_Update(Actor* thisx, PlayState* play) {
s32 pad;
- s32 objectIndex;
+ s32 objectSlot;
EnTest2ModelInfo* modelInfo;
EnTest2* this = THIS;
- objectIndex = Object_GetIndex(&play->objectCtx, sObjectIds[this->actor.params]);
- if (objectIndex < 0) {
+ objectSlot = Object_GetSlot(&play->objectCtx, sObjectIds[this->actor.params]);
+ if (objectSlot <= OBJECT_SLOT_NONE) {
Actor_Kill(&this->actor);
return;
}
- if (Object_IsLoaded(&play->objectCtx, objectIndex)) {
+ if (Object_IsLoaded(&play->objectCtx, objectSlot)) {
modelInfo = &sModelInfo[this->actor.params];
- this->actor.objBankIndex = objectIndex;
+ this->actor.objectSlot = objectSlot;
this->actor.draw = EnTest2_Draw;
if (modelInfo->animMat != NULL) {
Actor_SetObjectDependency(play, &this->actor);
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 e897ffefb..90ea18d05 100644
--- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c
+++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c
@@ -359,7 +359,7 @@ s32 func_80A3EA30(EnTest3* this, PlayState* play) {
if (this->unk_D78->unk_1 != 0) {
CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
CutsceneManager_Queue(this->csId);
- play->msgCtx.msgMode = 0x44;
+ play->msgCtx.msgMode = MSGMODE_PAUSED;
}
return false;
}
@@ -391,7 +391,7 @@ s32 func_80A3EB8C(EnTest3* this, PlayState* play) {
if (hideoutObject != NULL) {
this->player.lockOnActor = hideoutObject;
}
- play->msgCtx.msgMode = 0x44;
+ play->msgCtx.msgMode = MSGMODE_PAUSED;
return 1;
}
return 0;
@@ -782,7 +782,7 @@ s32 func_80A3FBE8(EnTest3* this, PlayState* play) {
CutsceneManager_SetReturnCamera(CAM_ID_MAIN);
Environment_StartTime();
if (((void)0, gSaveContext.save.time) > CLOCK_TIME(6, 0)) {
- func_800FE658(TIME_TO_MINUTES_ALT_F(fabsf((s16) - ((void)0, gSaveContext.save.time))));
+ Environment_SetTimeJump(TIME_TO_MINUTES_ALT_F(fabsf((s16) - ((void)0, gSaveContext.save.time))));
}
if (play->actorCtx.flags & ACTORCTX_FLAG_6) {
SET_WEEKEVENTREG(WEEKEVENTREG_ESCAPED_SAKONS_HIDEOUT);
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 3c1a5958d..8816ceb64 100644
--- a/src/overlays/actors/ovl_En_Test4/z_en_test4.c
+++ b/src/overlays/actors/ovl_En_Test4/z_en_test4.c
@@ -48,20 +48,20 @@ static s16 sCurCsId;
void func_80A41D70(EnTest4* this, PlayState* play) {
if (this->csIdIndex != 0) {
- func_80151A68(play, sNightMessages1[CURRENT_DAY - 1]);
+ Message_DisplaySceneTitleCard(play, sNightMessages1[CURRENT_DAY - 1]);
} else if ((sCsIdList[this->csIdIndex] < 0) || (play->actorCtx.flags & ACTORCTX_FLAG_1)) {
if (play->actorCtx.flags & ACTORCTX_FLAG_1) {
Sram_IncrementDay();
gSaveContext.save.time = CLOCK_TIME(6, 0);
- func_80151A68(play, sDayMessages1[CURRENT_DAY - 1]);
+ Message_DisplaySceneTitleCard(play, sDayMessages1[CURRENT_DAY - 1]);
} else {
this->csIdIndex = 0;
this->unk_146 = gSaveContext.save.time += CLOCK_TIME_MINUTE;
}
Interface_NewDay(play, CURRENT_DAY);
- D_801BDBC8 = 0xFE;
- func_800FB758(play);
+ gSceneSeqState = SCENESEQ_MORNING;
+ Environment_PlaySceneSequence(play);
func_800FEAF4(&play->envCtx);
this->actionFunc = func_80A42AB8;
}
@@ -91,14 +91,14 @@ void func_80A41D70(EnTest4* this, PlayState* play) {
void func_80A41FA4(EnTest4* this, PlayState* play) {
if (this->csIdIndex != 0) {
- func_80151A68(play, sNightMessages2[CURRENT_DAY - 1]);
+ Message_DisplaySceneTitleCard(play, sNightMessages2[CURRENT_DAY - 1]);
} else if ((sCsIdList[this->csIdIndex] < 0) || (play->actorCtx.flags & ACTORCTX_FLAG_1)) {
Sram_IncrementDay();
gSaveContext.save.time = CLOCK_TIME(6, 0);
Interface_NewDay(play, CURRENT_DAY);
- func_80151A68(play, sDayMessages2[CURRENT_DAY - 1]);
- D_801BDBC8 = 0xFE;
- func_800FB758(play);
+ Message_DisplaySceneTitleCard(play, sDayMessages2[CURRENT_DAY - 1]);
+ gSceneSeqState = SCENESEQ_MORNING;
+ Environment_PlaySceneSequence(play);
func_800FEAF4(&play->envCtx);
this->actionFunc = func_80A42AB8;
}
@@ -324,7 +324,7 @@ void EnTest4_Init(Actor* thisx, PlayState* play) {
} else {
gSaveContext.save.day = 1;
dayTemp = gSaveContext.save.day;
- gSaveContext.save.daysElapsed = dayTemp;
+ gSaveContext.save.eventDayCount = dayTemp;
this->csIdIndex = 1;
this->unk_146 = gSaveContext.save.time;
this->actionFunc = func_80A42AB8;
@@ -517,38 +517,38 @@ void func_80A42F20(EnTest4* this, PlayState* play) {
void func_80A430C8(EnTest4* this, PlayState* play) {
if ((CURRENT_DAY == 2) && (gSaveContext.save.time >= CLOCK_TIME(7, 0)) &&
- (gSaveContext.save.time < CLOCK_TIME(17, 30)) && (play->envCtx.unk_F2[2] == 0)) {
+ (gSaveContext.save.time < CLOCK_TIME(17, 30)) && (play->envCtx.precipitation[PRECIP_SNOW_CUR] == 0)) {
// rain?
- gWeatherMode = 1;
- func_800FD78C(play);
- play->envCtx.unk_E3 = 1;
- play->envCtx.unk_F2[0] = 0x3C;
+ gWeatherMode = WEATHER_MODE_1;
+ Environment_PlayStormNatureAmbience(play);
+ play->envCtx.lightningState = LIGHTNING_ON;
+ play->envCtx.precipitation[PRECIP_RAIN_MAX] = 60;
} else {
- if (play->envCtx.unk_F2[0] != 0) {
+ if (play->envCtx.precipitation[PRECIP_RAIN_MAX] != 0) {
if ((play->state.frames % 4) == 0) {
- play->envCtx.unk_F2[0]--;
- if ((play->envCtx.unk_F2[0]) == 8) {
- func_800FD858(play);
+ play->envCtx.precipitation[PRECIP_RAIN_MAX]--;
+ if ((play->envCtx.precipitation[PRECIP_RAIN_MAX]) == 8) {
+ Environment_StopStormNatureAmbience(play);
}
}
}
}
- if (gWeatherMode == 1) {
+ if (gWeatherMode == WEATHER_MODE_1) {
this->state = TEST4_STATE_1;
}
}
void func_80A431C8(EnTest4* this, PlayState* play) {
if (((gSaveContext.save.time >= CLOCK_TIME(17, 30)) && (gSaveContext.save.time < CLOCK_TIME(23, 0)) &&
- (play->envCtx.unk_F2[0] != 0)) ||
- (play->envCtx.unk_F2[2] != 0)) {
- gWeatherMode = 0;
- play->envCtx.unk_E3 = 2;
+ (play->envCtx.precipitation[PRECIP_RAIN_MAX] != 0)) ||
+ (play->envCtx.precipitation[PRECIP_SNOW_CUR] != 0)) {
+ gWeatherMode = WEATHER_MODE_CLEAR;
+ play->envCtx.lightningState = LIGHTNING_LAST;
}
- if (gWeatherMode == 0) {
+ if (gWeatherMode == WEATHER_MODE_CLEAR) {
this->state = TEST4_STATE_0;
}
}
@@ -557,7 +557,7 @@ void func_80A4323C(EnTest4* this, PlayState* play) {
s32 temp_v0 = (this->actor.params >> 0xA) * 0x64;
if (temp_v0 > 0) {
- D_801F4E7A = temp_v0;
+ gSkyboxNumStars = temp_v0;
}
}
@@ -568,7 +568,7 @@ void EnTest4_Update(Actor* thisx, PlayState* play) {
if (!(player->stateFlags1 & PLAYER_STATE1_2)) {
this->actionFunc(this, play);
- if (func_800FE4B8(play) != 0) {
+ if (Environment_GetStormState(play) != STORM_STATE_OFF) {
switch (this->state) {
case TEST4_STATE_0:
func_80A430C8(this, play);
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 462e1e784..9657f1b1e 100644
--- a/src/overlays/actors/ovl_En_Test6/z_en_test6.c
+++ b/src/overlays/actors/ovl_En_Test6/z_en_test6.c
@@ -375,24 +375,24 @@ void EnTest6_Destroy(Actor* thisx, PlayState* play2) {
EnTest6* this = THIS;
s32 i;
- play->envCtx.lightSettings.ambientColor[0] = 0;
- play->envCtx.lightSettings.ambientColor[1] = 0;
- play->envCtx.lightSettings.ambientColor[2] = 0;
+ play->envCtx.adjLightSettings.ambientColor[0] = 0;
+ play->envCtx.adjLightSettings.ambientColor[1] = 0;
+ play->envCtx.adjLightSettings.ambientColor[2] = 0;
- play->envCtx.lightSettings.diffuseColor1[0] = 0;
- play->envCtx.lightSettings.diffuseColor1[1] = 0;
- play->envCtx.lightSettings.diffuseColor1[2] = 0;
+ play->envCtx.adjLightSettings.light1Color[0] = 0;
+ play->envCtx.adjLightSettings.light1Color[1] = 0;
+ play->envCtx.adjLightSettings.light1Color[2] = 0;
- play->envCtx.lightSettings.diffuseColor2[0] = 0;
- play->envCtx.lightSettings.diffuseColor2[1] = 0;
- play->envCtx.lightSettings.diffuseColor2[2] = 0;
+ play->envCtx.adjLightSettings.light2Color[0] = 0;
+ play->envCtx.adjLightSettings.light2Color[1] = 0;
+ play->envCtx.adjLightSettings.light2Color[2] = 0;
- play->envCtx.lightSettings.fogColor[0] = 0;
- play->envCtx.lightSettings.fogColor[1] = 0;
- play->envCtx.lightSettings.fogColor[2] = 0;
+ play->envCtx.adjLightSettings.fogColor[0] = 0;
+ play->envCtx.adjLightSettings.fogColor[1] = 0;
+ play->envCtx.adjLightSettings.fogColor[2] = 0;
- play->envCtx.lightSettings.fogNear = 0;
- play->envCtx.lightSettings.zFar = 0;
+ play->envCtx.adjLightSettings.fogNear = 0;
+ play->envCtx.adjLightSettings.zFar = 0;
play->envCtx.fillScreen = false;
@@ -425,7 +425,7 @@ void EnTest6_StartCutscene(EnTest6* this, PlayState* play) {
break;
default:
- gSaveContext.save.daysElapsed = 0;
+ gSaveContext.save.eventDayCount = 0;
gSaveContext.save.day = 0;
gSaveContext.save.time = CLOCK_TIME(6, 0) - 1;
EnTest6_SetupAction(this, EnTest6_SharedSoTCutscene);
@@ -685,7 +685,7 @@ void EnTest6_InvertedSoTCutscene(EnTest6* this, PlayState* play) {
if (DECR(this->timer) == 0) {
EnTest6_StopInvertedSoTCutscene(this, play);
- play->msgCtx.ocarinaMode = 4;
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
}
}
@@ -1091,7 +1091,7 @@ void EnTest6_SharedSoTCutscene(EnTest6* this, PlayState* play) {
} else {
gSaveContext.respawnFlag = 2;
}
- play->msgCtx.ocarinaMode = 4;
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
return;
}
} else {
@@ -1168,7 +1168,7 @@ void EnTest6_SharedSoTCutscene(EnTest6* this, PlayState* play) {
play->nextEntrance = gSaveContext.respawn[RESPAWN_MODE_RETURN].entrance;
play->transitionType = TRANS_TYPE_FADE_BLACK;
gSaveContext.respawnFlag = 2;
- play->msgCtx.ocarinaMode = 4;
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
}
return;
}
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 df0e829d4..417176d96 100644
--- a/src/overlays/actors/ovl_En_Test7/z_en_test7.c
+++ b/src/overlays/actors/ovl_En_Test7/z_en_test7.c
@@ -987,6 +987,7 @@ void EnTest7_Draw(Actor* thisx, PlayState* play) {
func_80AF14FC(play, this->unk_15C);
if (this->unk_144 & 4) {
- func_800F9824(play, &play->envCtx, &play->view, play->state.gfxCtx, this->actor.world.pos, 70.0f, 5.0f, 0, 0);
+ Environment_DrawLensFlare(play, &play->envCtx, &play->view, play->state.gfxCtx, this->actor.world.pos, 70.0f,
+ 5.0f, 0, 0);
}
}
diff --git a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c
index ded290262..d99ee0bce 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
@@ -116,13 +116,13 @@ void EnTimeTag_RooftopOath_Cutscene(EnTimeTag* this, PlayState* play) {
void EnTimeTag_RooftopOath_Wait(EnTimeTag* this, PlayState* play) {
Actor* thisx = &this->actor;
- if ((play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_OATH)) {
- if (thisx->csId != CS_ID_NONE) {
+ if ((play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_OATH)) {
+ if (this->actor.csId != CS_ID_NONE) {
this->actionFunc = EnTimeTag_RooftopOath_Cutscene;
CutsceneManager_Queue(thisx->csId);
gSaveContext.timerStates[TIMER_ID_MOON_CRASH] = TIMER_STATE_OFF;
}
- play->msgCtx.ocarinaMode = 4;
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
}
}
@@ -161,7 +161,7 @@ void EnTimeTag_SoaringEngraving_Wait(EnTimeTag* this, PlayState* play) {
this->actionFunc = EnTimeTag_SoaringEngraving_SubsequentInteraction;
}
} else if ((this->actor.xzDistToPlayer < 100.0f) && Player_IsFacingActor(&this->actor, 0x3000, play) &&
- (Flags_GetSwitch(play, TIMETAG_SOARING_GET_SWITCHFLAG(&this->actor)) ||
+ (Flags_GetSwitch(play, TIMETAG_SOARING_GET_SWITCH_FLAG(&this->actor)) ||
CHECK_QUEST_ITEM(QUEST_SONG_SOARING))) {
this->actor.flags |= ACTOR_FLAG_TARGETABLE;
Actor_OfferTalk(&this->actor, play, 110.0f);
@@ -186,11 +186,11 @@ void EnTimeTag_Diary_AfterOcarina(EnTimeTag* this, PlayState* play) {
}
void EnTimeTag_Diary_TeachEvanSongSnippets(EnTimeTag* this, PlayState* play) {
- if ((play->msgCtx.ocarinaStaff->state == 0) && (play->msgCtx.msgMode == 0x1B)) {
+ if ((play->msgCtx.ocarinaStaff->state == 0) && (play->msgCtx.msgMode == MSGMODE_SONG_DEMONSTRATION_DONE)) {
TIMETAG_DIARY_TIMER(&this->actor) = 5;
this->actionFunc = EnTimeTag_Diary_AfterOcarina;
play->msgCtx.msgLength = 0;
- play->msgCtx.msgMode = 0;
+ play->msgCtx.msgMode = MSGMODE_NONE;
}
}
@@ -217,13 +217,13 @@ void EnTimeTag_Diary_Cutscene(EnTimeTag* this, PlayState* play) {
break;
case 0x122B: // Mikau diary part 1
- func_80152434(play, 0x3F);
+ Message_DisplayOcarinaStaff(play, OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_SECOND_HALF);
this->actionFunc = EnTimeTag_Diary_TeachEvanSongSnippets;
TIMETAG_DIARY_SONG(&this->actor) = TIMETAG_DIARY_SONG_EVAN_PART1;
break;
case 0x122E: // Mikau diary part 3
- func_80152434(play, 0x40);
+ Message_DisplayOcarinaStaff(play, OCARINA_ACTION_DEMONSTRATE_EVAN_PART2_SECOND_HALF);
this->actionFunc = EnTimeTag_Diary_TeachEvanSongSnippets;
TIMETAG_DIARY_SONG(&this->actor) = TIMETAG_DIARY_SONG_EVAN_PART2;
break;
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 c022ca122..33f6d414e 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
@@ -14,7 +14,7 @@ typedef void (*EnTimeTagActionFunc)(struct EnTimeTag*, PlayState*);
#define TIMETAG_KICKOUT_HOUR(thisx) ((thisx)->home.rot.x)
#define TIMETAG_KICKOUT_MINUTE(thisx) ((thisx)->home.rot.y)
-#define TIMETAG_SOARING_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F)
+#define TIMETAG_SOARING_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
#define TIMETAG_DIARY_GET_TYPE(thisx) ((thisx)->params & 0x7F)
#define TIMETAG_DIARY_TIMER(thisx) ((thisx)->home.rot.x)
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 61540eec0..7b88159f1 100644
--- a/src/overlays/actors/ovl_En_Tk/z_en_tk.c
+++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.c
@@ -204,10 +204,10 @@ void EnTk_Init(Actor* thisx, PlayState* play) {
EnTk* this = THIS;
this->unk_2B0 = ENTK_GET_F(&this->actor);
- this->unk_2B1 = ENTK_GET_7F0(&this->actor);
+ this->switchFlag = ENTK_GET_SWITCH_FLAG(&this->actor);
Collider_InitCylinder(play, &this->collider);
- if (Flags_GetSwitch(play, this->unk_2B1)) {
+ if (Flags_GetSwitch(play, this->switchFlag)) {
if (this->unk_2B0 == 0) {
Actor_Kill(&this->actor);
return;
@@ -290,7 +290,7 @@ void func_80AECA3C(EnTk* this, PlayState* play) {
void func_80AECA90(EnTk* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- play->msgCtx.msgMode = 0;
+ play->msgCtx.msgMode = MSGMODE_NONE;
play->msgCtx.msgLength = 0;
func_80AEDE10(this, play);
} else if (this->actor.xzDistToPlayer < 100.0f) {
@@ -317,14 +317,14 @@ void func_80AECB6C(EnTk* this, PlayState* play) {
this->actor.textId = 0;
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- play->msgCtx.msgMode = 0;
+ play->msgCtx.msgMode = MSGMODE_NONE;
play->msgCtx.msgLength = 0;
func_80AED4F8(this, play);
return;
}
if (R_TIME_SPEED != 0.0f) {
- this->skelAnime.playSpeed = (f32)func_800FE620(play) / R_TIME_SPEED;
+ this->skelAnime.playSpeed = (f32)Environment_GetTimeSpeed(play) / R_TIME_SPEED;
} else {
this->skelAnime.playSpeed = 0.0f;
}
@@ -562,7 +562,7 @@ void func_80AED610(EnTk* this, PlayState* play) {
Message_StartTextbox(play, 0x13FD, &this->actor);
} else if (CURRENT_DAY != 2) {
func_80AED544(this, play);
- } else if (!Flags_GetSwitch(play, ENTK_GET_7F0(&this->actor))) {
+ } else if (!Flags_GetSwitch(play, ENTK_GET_SWITCH_FLAG(&this->actor))) {
Message_StartTextbox(play, 0x1403, &this->actor);
} else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_60_02)) {
func_80AED544(this, play);
@@ -691,7 +691,7 @@ void func_80AED940(EnTk* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->unk_2CA &= ~0x80;
this->actor.flags &= ~ACTOR_FLAG_10000;
- play->msgCtx.msgMode = 0;
+ play->msgCtx.msgMode = MSGMODE_NONE;
play->msgCtx.msgLength = 0;
func_80AEDE10(this, play);
} else if (!(this->unk_2CA & 0x80)) {
@@ -874,7 +874,7 @@ void func_80AEDF5C(EnTk* this, PlayState* play) {
this->unk_2CA |= 2;
if (play->msgCtx.choiceIndex == 0) {
Audio_PlaySfx_MessageDecide();
- play->msgCtx.msgMode = 0x44;
+ play->msgCtx.msgMode = MSGMODE_PAUSED;
func_80AEE2A8(this, play);
} else {
Audio_PlaySfx_MessageCancel();
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 aa15c6fc6..46e9b0b96 100644
--- a/src/overlays/actors/ovl_En_Tk/z_en_tk.h
+++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.h
@@ -9,7 +9,7 @@ typedef void (*EnTkActionFunc)(struct EnTk*, PlayState*);
typedef void (*EnTkUnkFunc)(struct EnTk*, PlayState*);
#define ENTK_GET_F(thisx) ((thisx)->params & 0xF)
-#define ENTK_GET_7F0(thisx) (((thisx)->params >> 4) & 0x7F)
+#define ENTK_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 4) & 0x7F)
#define ENTK_GET_PATH_INDEX(thisx) (((thisx)->params >> 0xB) & 0x1F)
typedef struct EnTk {
@@ -20,7 +20,7 @@ typedef struct EnTk {
/* 0x1D8 */ Vec3s jointTable[18];
/* 0x244 */ Vec3s morphTable[18];
/* 0x2B0 */ s8 unk_2B0;
- /* 0x2B1 */ s8 unk_2B1;
+ /* 0x2B1 */ s8 switchFlag;
/* 0x2B4 */ Vec3f unk_2B4;
/* 0x2C0 */ s16 unk_2C0;
/* 0x2C2 */ s16 unk_2C2;
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 c5fdf30af..12aaa808f 100644
--- a/src/overlays/actors/ovl_En_Toto/z_en_toto.c
+++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.c
@@ -151,7 +151,12 @@ static Vec3s D_80BA510C[] = {
{ 0xFF64, 0x0016, 0xFE7E },
};
-static u16 D_80BA5120[] = { 67, 68, 69, 70 };
+static u16 sOcarinaActionWindFishPrompts[] = {
+ OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN,
+ OCARINA_ACTION_PROMPT_WIND_FISH_GORON,
+ OCARINA_ACTION_PROMPT_WIND_FISH_ZORA,
+ OCARINA_ACTION_PROMPT_WIND_FISH_DEKU,
+};
static u8 D_80BA5128[] = { 8, 4, 2, 1 };
@@ -243,9 +248,9 @@ void func_80BA39C8(EnToto* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
func_80BA36C0(this, play, 1);
if (play->sceneId != SCENE_SONCHONOIE) {
- Flags_SetSwitch(play, this->actor.params & 0x7F);
+ Flags_SetSwitch(play, ENTOTO_GET_SWITCH_FLAG_1(&this->actor));
} else if (player->transformation == PLAYER_FORM_DEKU) {
- Flags_SetSwitch(play, this->actor.home.rot.x);
+ Flags_SetSwitch(play, ENTOTO_GET_SWITCH_FLAG_3(&this->actor));
}
this->unk2B6 = 0;
return;
@@ -263,7 +268,7 @@ void func_80BA39C8(EnToto* this, PlayState* play) {
Actor_OfferTalk(&this->actor, play, 50.0f);
if (play->sceneId == SCENE_SONCHONOIE) {
if (player->transformation == PLAYER_FORM_DEKU) {
- if (!Flags_GetSwitch(play, this->actor.home.rot.x)) {
+ if (!Flags_GetSwitch(play, ENTOTO_GET_SWITCH_FLAG_3(&this->actor))) {
this->text = D_80BA5068;
} else {
this->text = D_80BA5074;
@@ -273,7 +278,7 @@ void func_80BA39C8(EnToto* this, PlayState* play) {
}
} else if (ENTOTO_WEEK_EVENT_FLAGS) {
this->text = D_80BA502C;
- } else if (!Flags_GetSwitch(play, this->actor.params & 0x7F)) {
+ } else if (!Flags_GetSwitch(play, ENTOTO_GET_SWITCH_FLAG_1(&this->actor))) {
this->text = D_80BA5034;
} else {
this->text = D_80BA5038;
@@ -332,7 +337,7 @@ void func_80BA3DBC(EnToto* this, PlayState* play) {
}
} else {
player = GET_PLAYER(play);
- if ((player->stateFlags1 & PLAYER_STATE1_400) && player->unk_AE7 != 0) {
+ if ((player->stateFlags1 & PLAYER_STATE1_400) && (player->actionVar1 != 0)) {
Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_CIRCUS_LEADERS_MASK);
Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_TOTO);
Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN);
@@ -542,12 +547,12 @@ s32 func_80BA4530(EnToto* this, PlayState* play) {
s32 func_80BA46D8(EnToto* this, PlayState* play) {
func_800B7298(play, NULL, PLAYER_CSMODE_68);
- func_80152434(play, D_80BA5120[CUR_FORM]);
+ Message_DisplayOcarinaStaff(play, sOcarinaActionWindFishPrompts[CUR_FORM]);
return 0;
}
s32 func_80BA4740(EnToto* this, PlayState* play) {
- if (play->msgCtx.ocarinaMode == 4) {
+ if (play->msgCtx.ocarinaMode == OCARINA_MODE_END) {
if (GET_PLAYER_FORM == PLAYER_FORM_HUMAN) {
SET_WEEKEVENTREG(WEEKEVENTREG_56_10);
}
@@ -641,15 +646,15 @@ s32 func_80BA4B24(EnToto* this, PlayState* play) {
player = GET_PLAYER(play);
Animation_MorphToPlayOnce(&this->skelAnime, &object_zm_Anim_0028B8, -4.0f);
if (player->transformation == PLAYER_FORM_ZORA) {
- if (!Flags_GetSwitch(play, this->actor.params & 0x7F)) {
- Flags_SetSwitch(play, this->actor.params & 0x7F);
+ if (!Flags_GetSwitch(play, ENTOTO_GET_SWITCH_FLAG_1(&this->actor))) {
+ Flags_SetSwitch(play, ENTOTO_GET_SWITCH_FLAG_1(&this->actor));
return 1;
} else {
return 3;
}
} else {
- if (!Flags_GetSwitch(play, (this->actor.params >> 7) & 0x7F)) {
- Flags_SetSwitch(play, (this->actor.params >> 7) & 0x7F);
+ if (!Flags_GetSwitch(play, ENTOTO_GET_SWITCH_FLAG_2(&this->actor))) {
+ Flags_SetSwitch(play, ENTOTO_GET_SWITCH_FLAG_2(&this->actor));
return 4;
} else {
return 7;
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 dc2b0947e..7a742d84a 100644
--- a/src/overlays/actors/ovl_En_Toto/z_en_toto.h
+++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.h
@@ -8,6 +8,10 @@ struct EnToto;
typedef void (*EnTotoActionFunc)(struct EnToto*, PlayState*);
typedef s32 (*EnTotoUnkFunc)(struct EnToto*, PlayState*);
+#define ENTOTO_GET_SWITCH_FLAG_1(thisx) ((thisx)->params & 0x7F)
+#define ENTOTO_GET_SWITCH_FLAG_2(thisx) (((thisx)->params >> 7) & 0x7F)
+#define ENTOTO_GET_SWITCH_FLAG_3(thisx) ((thisx)->home.rot.x)
+
typedef struct EnTotoText {
/* 0x0 */ u8 unk0;
/* 0x1 */ u8 unk1;
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 bf5a0900a..499a3a748 100644
--- a/src/overlays/actors/ovl_En_Trt/z_en_trt.c
+++ b/src/overlays/actors/ovl_En_Trt/z_en_trt.c
@@ -126,7 +126,7 @@ void EnTrt_ChangeAnim(SkelAnime* skelAnime, AnimationInfoS* animationInfo, s32 a
s32 EnTrt_TestItemSelected(PlayState* play) {
MessageContext* msgCtx = &play->msgCtx;
- if ((msgCtx->unk12020 == 0x10) || (msgCtx->unk12020 == 0x11)) {
+ if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_11)) {
return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A);
}
return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) ||
@@ -217,7 +217,7 @@ void EnTrt_EndInteraction(PlayState* play, EnTrt* this) {
this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED;
}
Actor_ProcessTalkRequest(&this->actor, &play->state);
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
this->drawCursor = 0;
@@ -362,7 +362,7 @@ void EnTrt_GetMushroom(EnTrt* this, PlayState* play) {
CutsceneManager_Stop(this->csId);
this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED;
}
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->actionFunc = EnTrt_PayForMushroom;
break;
@@ -412,7 +412,7 @@ void EnTrt_StartRedPotionConversation(EnTrt* this, PlayState* play) {
CutsceneManager_Stop(this->csId);
this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED;
}
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->actionFunc = EnTrt_GiveRedPotionForKoume;
} else {
@@ -660,7 +660,7 @@ void EnTrt_SetupBuyItemWithFanfare(PlayState* play, EnTrt* this) {
Player* player = GET_PLAYER(play);
Actor_OfferGetItem(&this->actor, play, this->items[this->cursorIndex]->getItemId, 300.0f, 300.0f);
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
player->stateFlags2 &= ~PLAYER_STATE2_20000000;
Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
@@ -999,7 +999,7 @@ void EnTrt_TryToGiveRedPotion(EnTrt* this, PlayState* play) {
CutsceneManager_Stop(this->csId);
this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED;
}
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->actionFunc = EnTrt_GiveRedPotionForKoume;
} else {
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 40d1946fc..8bc8e2541 100644
--- a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c
+++ b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c
@@ -347,7 +347,7 @@ void func_80AD3CEC(EnTrt2* this, PlayState* play) {
Message_StartTextbox(play, this->unk_3A8, &this->actor);
this->unk_3D8 = false;
} else if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
EnTrt2_ChangeAnim(&this->skelAnime, sAnimationInfo, TRT2_ANIM_HOVER);
this->unk_3B2 = 4;
@@ -375,7 +375,7 @@ void func_80AD3DA4(EnTrt2* this, PlayState* play) {
void func_80AD3E34(EnTrt2* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
if (Inventory_HasEmptyBottle()) {
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->unk_3B2 = 12;
} else {
@@ -403,7 +403,7 @@ void func_80AD3EF0(EnTrt2* this, PlayState* play) {
}
}
} else if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
this->unk_3B2 = 12;
}
@@ -447,7 +447,7 @@ void func_80AD417C(EnTrt2* this, PlayState* play) {
func_80AD349C(this);
func_80AD3DA4(this, play);
} else {
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
if (this->unk_3A8 == 0x84C) {
EnTrt2_ChangeAnim(&this->skelAnime, sAnimationInfo, TRT2_ANIM_HOVER);
@@ -529,7 +529,7 @@ void func_80AD4550(EnTrt2* this, PlayState* play) {
}
if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
}
}
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 0297339d9..8ca8857db 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
@@ -350,11 +350,8 @@ void func_80B76980(EnTruMt* this, PlayState* play) {
this->actor.speed = 0.0f;
this->actionFunc = func_80B76BB8;
} else if (CHECK_EVENTINF(EVENTINF_40)) {
- u32 score = gSaveContext.minigameScore;
-
- if (((gSaveContext.save.saveInfo.unk_EC4 & 0xFFFF0000) >> 0x10) < score) {
- gSaveContext.save.saveInfo.unk_EC4 =
- ((gSaveContext.minigameScore & 0xFFFF) << 0x10) | (gSaveContext.save.saveInfo.unk_EC4 & 0xFFFF);
+ if (((void)0, gSaveContext.minigameScore) > HS_GET_BOAT_ARCHERY_HIGH_SCORE()) {
+ HS_SET_BOAT_ARCHERY_HIGH_SCORE((u32)((void)0, gSaveContext.minigameScore));
SET_EVENTINF(EVENTINF_37);
}
}
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 551d7d774..3221878e3 100644
--- a/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c
+++ b/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c
@@ -77,7 +77,7 @@ void func_8089F014(EnViewer* this, PlayState* play, f32 arg2) {
arg2 = 0.0f;
}
play->envCtx.lightSettingOverride = 0;
- play->envCtx.unk_E0 = 2;
+ play->envCtx.lightBlendOverride = LIGHT_BLEND_OVERRIDE_FULL_CONTROL;
play->envCtx.lightSetting = this->actor.world.rot.x;
play->envCtx.prevLightSetting = this->actor.world.rot.z;
play->envCtx.lightBlend = arg2;
@@ -87,11 +87,11 @@ void func_8089F0A0(EnViewer* this, PlayState* play) {
Player* player = GET_PLAYER(play);
D_8089F3E4++;
- if ((D_8089F3E4 == D_8089F3E0) && (play->envCtx.lightSettingOverride != 255)) {
- play->envCtx.lightSettingOverride = 255;
- play->envCtx.unk_E0 = 0;
+ if ((D_8089F3E4 == D_8089F3E0) && (play->envCtx.lightSettingOverride != LIGHT_SETTING_OVERRIDE_NONE)) {
+ play->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE;
+ play->envCtx.lightBlendOverride = LIGHT_BLEND_OVERRIDE_NONE;
play->envCtx.lightBlend = 1.0f;
- func_800FAAB4(
+ Environment_ChangeLightSetting(
play, SurfaceType_GetLightSettingIndex(&play->colCtx, player->actor.floorPoly, player->actor.floorBgId));
play->envCtx.lightBlend = 1.0f;
play->envCtx.prevLightSetting = play->envCtx.lightSetting;
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 29f5793d2..ca614643f 100644
--- a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c
+++ b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c
@@ -198,7 +198,7 @@ void EnWallmas_Destroy(Actor* thisx, PlayState* play) {
void EnWallmas_Freeze(EnWallmas* this) {
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX;
this->drawDmgEffScale = 0.55f;
- this->drawDmgEffFrozenSteamScale = 0.82500005f;
+ this->drawDmgEffFrozenSteamScale = 825.0f * 0.001f;
this->drawDmgEffAlpha = 1.0f;
this->collider.base.colType = 3;
this->timer = 80;
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 cbb095279..fcac1e837 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
@@ -37,8 +37,10 @@ ActorInit En_Warp_tag_InitVars = {
};
// this appears to be unused, as the code never accesses it in known vanilla cases
-// these unknown values get passed to a unknown z_message function
-u8 D_809C1000[] = { 0x28, 0x29, 0x2A, 0x2B, 0x2D, 0x2C, 0, 0 };
+u8 D_809C1000[] = {
+ OCARINA_ACTION_CHECK_TIME, OCARINA_ACTION_CHECK_HEALING, OCARINA_ACTION_CHECK_EPONAS,
+ OCARINA_ACTION_CHECK_SOARING, OCARINA_ACTION_CHECK_SUNS, OCARINA_ACTION_CHECK_STORMS,
+};
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F(scale, 1, ICHAIN_CONTINUE),
@@ -58,7 +60,8 @@ void EnWarptag_Init(Actor* thisx, PlayState* play) {
this->actionFunc = EnWarpTag_WaitForPlayer;
} else {
- if ((this->dangeonKeepObject = Object_GetIndex(&play->objectCtx, GAMEPLAY_DANGEON_KEEP)) < 0) {
+ if ((this->dangeonKeepObjectSlot = Object_GetSlot(&play->objectCtx, GAMEPLAY_DANGEON_KEEP)) <=
+ OBJECT_SLOT_NONE) {
Actor_Kill(&this->dyna.actor);
}
@@ -81,11 +84,11 @@ void EnWarptag_Destroy(Actor* thisx, PlayState* play) {
* Loads DynaPoly from GAMEPLAY_DANGEON_KEEP.
*/
void EnWarpTag_CheckDungeonKeepObject(EnWarptag* this, PlayState* play) {
- if (Object_IsLoaded(&play->objectCtx, this->dangeonKeepObject)) {
+ if (Object_IsLoaded(&play->objectCtx, this->dangeonKeepObjectSlot)) {
this->actionFunc = EnWarpTag_WaitForPlayer;
DynaPolyActor_Init(&this->dyna, 0x1);
DynaPolyActor_LoadMesh(play, &this->dyna, &gWarpTagGoronTrialBaseCol);
- this->dyna.actor.objBankIndex = this->dangeonKeepObject;
+ this->dyna.actor.objectSlot = this->dangeonKeepObjectSlot;
this->dyna.actor.draw = EnWarpTag_Draw;
}
}
@@ -113,7 +116,7 @@ void EnWarpTag_Unused809C09A0(EnWarptag* this, PlayState* play) {
// and I doubt its set externally by another actor, so I believe this is unused
// might be a bug, they might have meant to set actor flag (0x2000 0000) up above but mistyped (0x200 0000)
// also WARPTAG_GET_3C0 should always return 2C0 -> 0xF for all known in-game uses, which is OOB
- func_80152434(play, D_809C1000[WARPTAG_GET_3C0(&this->dyna.actor)]); // unk message function
+ Message_DisplayOcarinaStaff(play, D_809C1000[WARPTAG_GET_3C0(&this->dyna.actor)]);
this->actionFunc = EnWarpTag_Unused809C0A20;
} else {
@@ -125,13 +128,13 @@ void EnWarpTag_Unused809C09A0(EnWarptag* this, PlayState* play) {
* Unused ActionFunc: assigned by EnWarpTag_Unused809C09A0, no known variants use.
*/
void EnWarpTag_Unused809C0A20(EnWarptag* this, PlayState* play) {
- if (play->msgCtx.ocarinaMode == 9) {
+ if (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_STORMS) {
func_800B7298(play, NULL, PLAYER_CSMODE_WAIT);
this->actionFunc = EnWarpTag_RespawnPlayer;
CutsceneManager_Stop(CutsceneManager_GetCurrentCsId());
- } else if (play->msgCtx.ocarinaMode >= 2) {
- play->msgCtx.ocarinaMode = 4;
+ } else if (play->msgCtx.ocarinaMode >= OCARINA_MODE_WARP) {
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
this->actionFunc = EnWarpTag_Unused809C09A0;
}
}
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 ac76ccb67..840cf8a0f 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
@@ -9,7 +9,7 @@ typedef void (*EnWarptagActionFunc)(struct EnWarptag*, PlayState*);
typedef struct EnWarptag {
/* 0x000 */ DynaPolyActor dyna;
- /* 0x15C */ s8 dangeonKeepObject;
+ /* 0x15C */ s8 dangeonKeepObjectSlot;
/* 0x15E */ union {
s16 reusedValue; // default name
s16 unkValue15E; // passed to unk play func, mods player rotation, stepped to 0x2710
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 6901fbffd..bc960b96b 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
@@ -13,6 +13,7 @@
*/
#include "z_en_water_effect.h"
+#include "overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.h"
#include "objects/object_water_effect/object_water_effect.h"
#include "objects/gameplay_keep/gameplay_keep.h"
@@ -414,7 +415,7 @@ void func_80A59C04(Actor* thisx, PlayState* play2) {
this->unk_DC6--;
}
- if ((rotaryRoom != NULL) && Flags_GetSwitch(play, (rotaryRoom->params >> 1) & 0x7F)) {
+ if ((rotaryRoom != NULL) && Flags_GetSwitch(play, BGIKANAROTARYROOM_GET_SWITCH_FLAG_1(rotaryRoom))) {
this->unk_DC6 = Rand_ZeroFloat(150.0f) + 100.0f;
} else if (!Play_InCsMode(play)) {
this->unk_DC4++;
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 97c381beb..3aa4360f9 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
@@ -47,12 +47,6 @@ ActorInit En_Weather_Tag_InitVars = {
(ActorFunc)EnWeatherTag_Draw,
};
-extern f32 D_801F4E74;
-extern u8 D_801BDBB8;
-extern u8 D_801BDBB4;
-extern u8 D_801F4E30;
-extern s16 D_801F4E7A;
-
void EnWeatherTag_SetupAction(EnWeatherTag* this, EnWeatherTagActionFunc func) {
this->actionFunc = func;
}
@@ -131,17 +125,17 @@ u8 func_80966608(EnWeatherTag* this, PlayState* play, UNK_TYPE a3, UNK_TYPE a4,
if (WEATHER_TAG_RANGE100(&this->actor) > Actor_WorldDistXZToActor(&player->actor, &this->actor)) {
if (play->envCtx.lightConfig == play->envCtx.changeLightNextConfig) {
- D_801BDBB8 = 1;
- if (!(play->envCtx.lightMode == 0) ||
+ gInterruptSongOfStorms = true;
+ if (!(play->envCtx.lightMode == LIGHT_MODE_TIME) ||
((play->envCtx.lightConfig != 1) && !play->envCtx.changeLightEnabled)) {
- D_801BDBB8 = 0;
+ gInterruptSongOfStorms = false;
if (gWeatherMode != weatherMode) {
gWeatherMode = weatherMode;
play->envCtx.changeLightEnabled = true;
play->envCtx.lightConfig = lightConfig;
play->envCtx.changeLightNextConfig = changeLightNextConfig;
- D_801BDBB4 = changeLightNextConfig;
+ gLightConfigAfterUnderwater = changeLightNextConfig;
play->envCtx.changeDuration = changeDuration;
play->envCtx.changeLightTimer = play->envCtx.changeDuration;
}
@@ -161,16 +155,16 @@ u8 func_80966758(EnWeatherTag* this, PlayState* play, UNK_TYPE a3, UNK_TYPE a4,
if (WEATHER_TAG_RANGE100(&this->actor) < Actor_WorldDistXZToActor(&player->actor, &this->actor)) {
if (play->envCtx.lightConfig == play->envCtx.changeLightNextConfig) {
- D_801BDBB8 = 1;
- if (!(play->envCtx.lightMode == 0) ||
+ gInterruptSongOfStorms = true;
+ if (!(play->envCtx.lightMode == LIGHT_MODE_TIME) ||
((play->envCtx.lightConfig != 1) && !play->envCtx.changeLightEnabled)) {
- D_801BDBB8 = 0;
- gWeatherMode = 0;
+ gInterruptSongOfStorms = false;
+ gWeatherMode = WEATHER_MODE_CLEAR;
play->envCtx.changeLightEnabled = true;
play->envCtx.lightConfig = lightConfig;
play->envCtx.changeLightNextConfig = changeLightNextConfig;
- D_801BDBB4 = changeLightNextConfig;
+ gLightConfigAfterUnderwater = changeLightNextConfig;
play->envCtx.changeDuration = changeDuration;
play->envCtx.changeLightTimer = play->envCtx.changeDuration;
returnVal = 1;
@@ -201,11 +195,11 @@ void func_8096689C(EnWeatherTag* this, PlayState* play) {
play->envCtx.windSpeed = (this->actor.world.rot.z * partialResult) + 30.0f;
if (partialResult > 0.01f) {
- play->envCtx.sandstormState = 8;
+ play->envCtx.sandstormState = SANDSTORM_8;
D_801F4E30 = 0x9B;
- } else if (play->envCtx.sandstormState == 8) {
+ } else if (play->envCtx.sandstormState == SANDSTORM_8) {
D_801F4E30 = 0;
- play->envCtx.sandstormState = 9;
+ play->envCtx.sandstormState = SANDSTORM_9;
}
}
@@ -243,7 +237,7 @@ void EnWeatherTag_Die(EnWeatherTag* this, PlayState* play) {
// poisoned swamp: placed behind the water fall from ikana
// this tag stops spawning after STT cleared?
void func_80966B08(EnWeatherTag* this, PlayState* play) {
- if (func_80966608(this, play, 0, 0, play->envCtx.lightConfig, 5, 100, 2) || (gWeatherMode == 2)) {
+ if (func_80966608(this, play, 0, 0, play->envCtx.lightConfig, 5, 100, 2) || (gWeatherMode == WEATHER_MODE_2)) {
play->skyboxId = SKYBOX_3;
EnWeatherTag_SetupAction(this, func_80966D20);
} else if (D_801F4E74 <= 0.01f) {
@@ -315,7 +309,7 @@ void func_80966D20(EnWeatherTag* this, PlayState* play) {
EnWeatherTag_SetupAction(this, func_80966B08);
}
- if (gWeatherMode != 2) {
+ if (gWeatherMode != WEATHER_MODE_2) {
EnWeatherTag_SetupAction(this, func_80966B08);
}
}
@@ -325,7 +319,7 @@ void func_80966D20(EnWeatherTag* this, PlayState* play) {
// path to goron village winter, winter mountain village
void func_80966E0C(EnWeatherTag* this, PlayState* play) {
if (func_80966608(this, play, 0, 1, 0, 2, 60, 3)) {
- play->envCtx.unk_F2[3] = 0x80;
+ play->envCtx.precipitation[PRECIP_SNOW_MAX] = 128;
EnWeatherTag_SetupAction(this, func_80966E84);
}
}
@@ -333,7 +327,7 @@ void func_80966E0C(EnWeatherTag* this, PlayState* play) {
// WEATHERTAG_TYPE_WINTERFOG 2
void func_80966E84(EnWeatherTag* this, PlayState* play) {
if (func_80966758(this, play, 1, 0, 2, 0, 60)) {
- play->envCtx.unk_F2[3] = 0;
+ play->envCtx.precipitation[PRECIP_SNOW_MAX] = 0;
EnWeatherTag_SetupAction(this, func_80966E0C);
}
}
@@ -343,8 +337,8 @@ void func_80966E84(EnWeatherTag* this, PlayState* play) {
// wait if you enter the scene through a room instead of fog you get a flash rain shower
void func_80966EF0(EnWeatherTag* this, PlayState* play) {
if (func_80966608(this, play, 0, 1, 0, 2, 100, 4)) {
- func_800FD78C(play);
- play->envCtx.unk_F2[0] = 60;
+ Environment_PlayStormNatureAmbience(play);
+ play->envCtx.precipitation[PRECIP_RAIN_MAX] = 60;
EnWeatherTag_SetupAction(this, func_80966F74);
}
}
@@ -352,8 +346,8 @@ void func_80966EF0(EnWeatherTag* this, PlayState* play) {
// WEATHERTAG_TYPE_UNK3 2
void func_80966F74(EnWeatherTag* this, PlayState* play) {
if (func_80966758(this, play, 1, 0, 2, 0, 100)) {
- func_800FD858(play);
- play->envCtx.unk_F2[0] = 0;
+ Environment_StopStormNatureAmbience(play);
+ play->envCtx.precipitation[PRECIP_RAIN_MAX] = 0;
EnWeatherTag_SetupAction(this, func_80966EF0);
}
}
@@ -365,7 +359,7 @@ void func_80966FEC(EnWeatherTag* this, PlayState* play) {
// weirdly, not the same as the other param lookup used in the rest of the file, which is float
s32 distance = WEATHER_TAG_RANGE100INT(&this->actor);
if (distance > 0) {
- D_801F4E7A = distance;
+ gSkyboxNumStars = distance;
}
if ((play->sceneId == SCENE_KAIZOKU) && (play->actorCtx.flags & ACTORCTX_FLAG_1)) {
@@ -410,9 +404,9 @@ void EnWeatherTag_DoNothing(EnWeatherTag* this, PlayState* play) {
// these two are isolated, they call themselves but nothing calls them?
void EnWeatherTag_Unused_809671B8(EnWeatherTag* this, PlayState* play) {
if (func_80966608(this, play, 0, 1, 0, 4, 100, 5)) {
- func_800FD78C(play);
- play->envCtx.unk_E3 = 1;
- play->envCtx.unk_F2[0] = 60;
+ Environment_PlayStormNatureAmbience(play);
+ play->envCtx.lightningState = LIGHTNING_ON;
+ play->envCtx.precipitation[PRECIP_RAIN_MAX] = 60;
EnWeatherTag_SetupAction(this, EnWeatherTag_Unused_80967250);
}
}
@@ -420,9 +414,9 @@ void EnWeatherTag_Unused_809671B8(EnWeatherTag* this, PlayState* play) {
// these two are isolated, they call themselves but nothing calls them
void EnWeatherTag_Unused_80967250(EnWeatherTag* this, PlayState* play) {
if (func_80966758(this, play, 1, 0, 4, 0, 100)) {
- func_800FD858(play);
- play->envCtx.unk_E3 = 2;
- play->envCtx.unk_F2[0] = 0;
+ Environment_StopStormNatureAmbience(play);
+ play->envCtx.lightningState = LIGHTNING_LAST;
+ play->envCtx.precipitation[PRECIP_RAIN_MAX] = 0;
EnWeatherTag_SetupAction(this, EnWeatherTag_Unused_809671B8);
}
}
@@ -442,20 +436,20 @@ void func_809672DC(EnWeatherTag* this, PlayState* play) {
range = WEATHER_TAG_RANGE100(&this->actor);
if (distance < range) {
- play->envCtx.sandstormState = 6;
+ play->envCtx.sandstormState = SANDSTORM_6;
strength = 1.0f - (distance / range);
if (0.8f < strength) {
strength = 1.0f;
}
D_801F4E30 = (200.0f * strength);
} else {
- if (play->envCtx.sandstormState == 6) {
+ if (play->envCtx.sandstormState == SANDSTORM_6) {
D_801F4E30 = 0;
- play->envCtx.sandstormState = 7;
+ play->envCtx.sandstormState = SANDSTORM_7;
}
}
- Math_SmoothStepToS(&play->envCtx.lightSettings.fogNear, (s16)(-40.0f * strength), 1, 1, 1);
+ Math_SmoothStepToS(&play->envCtx.adjLightSettings.fogNear, -40.0f * strength, 1, 1, 1);
}
// WEATHERTAG_TYPE_LOCALDAY2RAIN: rain proximity as approaching rainy scene
@@ -466,19 +460,19 @@ void func_809674C8(EnWeatherTag* this, PlayState* play) {
if (Actor_WorldDistXZToActor(&player->actor, &this->actor) < WEATHER_TAG_RANGE100(&this->actor)) {
if (CURRENT_DAY == 2) {
if ((gSaveContext.save.time >= CLOCK_TIME(7, 0)) && (gSaveContext.save.time < CLOCK_TIME(17, 30)) &&
- (play->envCtx.unk_F2[2] == 0)) {
+ (play->envCtx.precipitation[PRECIP_SNOW_CUR] == 0)) {
- gWeatherMode = 1;
- func_800FD78C(play);
- play->envCtx.unk_F2[4] = 0x20;
+ gWeatherMode = WEATHER_MODE_1;
+ Environment_PlayStormNatureAmbience(play);
+ play->envCtx.precipitation[PRECIP_SOS_MAX] = 32;
EnWeatherTag_SetupAction(this, func_80967608);
}
}
} else {
- if ((play->envCtx.unk_F2[4] != 0) && !(play->state.frames & 3)) {
- play->envCtx.unk_F2[4]--;
- if ((play->envCtx.unk_F2[4]) == 8) {
- func_800FD858(play);
+ if ((play->envCtx.precipitation[PRECIP_SOS_MAX] != 0) && !(play->state.frames & 3)) {
+ play->envCtx.precipitation[PRECIP_SOS_MAX]--;
+ if ((play->envCtx.precipitation[PRECIP_SOS_MAX]) == 8) {
+ Environment_StopStormNatureAmbience(play);
}
}
}
@@ -488,7 +482,7 @@ void func_809674C8(EnWeatherTag* this, PlayState* play) {
void func_80967608(EnWeatherTag* this, PlayState* play) {
if ((WEATHER_TAG_RANGE100(&this->actor) + 10.0f) <
Actor_WorldDistXZToActor(&GET_PLAYER(play)->actor, &this->actor)) {
- gWeatherMode = 0;
+ gWeatherMode = WEATHER_MODE_CLEAR;
EnWeatherTag_SetupAction(this, func_809674C8);
}
}
@@ -497,7 +491,7 @@ void EnWeatherTag_Update(Actor* thisx, PlayState* play) {
EnWeatherTag* this = THIS;
this->actionFunc(this, play);
- if ((play->actorCtx.flags & ACTORCTX_FLAG_1) && (play->msgCtx.msgMode != 0) &&
+ if ((play->actorCtx.flags & ACTORCTX_FLAG_1) && (play->msgCtx.msgMode != MSGMODE_NONE) &&
(play->msgCtx.currentTextId == 0x5E6) && !FrameAdvance_IsEnabled(&play->state) &&
(play->transitionTrigger == TRANS_TRIGGER_OFF) && (CutsceneManager_GetCurrentCsId() == CS_ID_NONE) &&
(play->csCtx.state == CS_STATE_IDLE)) {
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 226382f8d..8ae7b0de4 100644
--- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c
+++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c
@@ -336,7 +336,7 @@ void EnWiz_Init(Actor* thisx, PlayState* play) {
Collider_InitAndSetJntSph(play, &this->ghostColliders, &this->actor, &sJntSphInit, this->ghostColliderElements);
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
this->staffFlameScroll = Rand_S16Offset(0, 7);
- this->switchFlag = EN_WIZ_GET_SWITCHFLAG(&this->actor);
+ this->switchFlag = EN_WIZ_GET_SWITCH_FLAG(&this->actor);
this->type = EN_WIZ_GET_TYPE(&this->actor);
if (this->switchFlag == 0x7F) {
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 c0f1c7cfb..fa7156fc5 100644
--- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h
+++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h
@@ -4,7 +4,7 @@
#include "global.h"
#include "objects/object_wiz/object_wiz.h"
-#define EN_WIZ_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F)
+#define EN_WIZ_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
#define EN_WIZ_GET_TYPE(thisx) (((thisx)->params >> 8) & 0xFF)
typedef enum {
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 02aa83ab8..a3df9a7a2 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
@@ -119,19 +119,19 @@ void EnWizFire_Destroy(Actor* thisx, PlayState* play) {
EnWizFire* this = THIS;
if (this->type == EN_WIZ_FIRE_TYPE_MAGIC_PROJECTILE) {
- play->envCtx.lightSettings.fogColor[2] = 0;
- play->envCtx.lightSettings.fogColor[1] = play->envCtx.lightSettings.fogColor[2];
- play->envCtx.lightSettings.fogColor[0] = play->envCtx.lightSettings.fogColor[2];
- play->envCtx.lightSettings.diffuseColor2[2] = play->envCtx.lightSettings.fogColor[2];
- play->envCtx.lightSettings.diffuseColor2[1] = play->envCtx.lightSettings.fogColor[2];
- play->envCtx.lightSettings.diffuseColor2[0] = play->envCtx.lightSettings.fogColor[2];
- play->envCtx.lightSettings.diffuseColor1[2] = play->envCtx.lightSettings.fogColor[2];
- play->envCtx.lightSettings.diffuseColor1[1] = play->envCtx.lightSettings.fogColor[2];
- play->envCtx.lightSettings.diffuseColor1[0] = play->envCtx.lightSettings.fogColor[2];
- play->envCtx.lightSettings.ambientColor[2] = play->envCtx.lightSettings.fogColor[2];
- play->envCtx.lightSettings.ambientColor[1] = play->envCtx.lightSettings.fogColor[2];
- play->envCtx.lightSettings.ambientColor[0] = play->envCtx.lightSettings.fogColor[2];
- play->envCtx.lightSettings.fogNear = play->envCtx.lightSettings.fogColor[2];
+ play->envCtx.adjLightSettings.fogColor[2] = 0;
+ play->envCtx.adjLightSettings.fogColor[1] = play->envCtx.adjLightSettings.fogColor[2];
+ play->envCtx.adjLightSettings.fogColor[0] = play->envCtx.adjLightSettings.fogColor[2];
+ play->envCtx.adjLightSettings.light2Color[2] = play->envCtx.adjLightSettings.fogColor[2];
+ play->envCtx.adjLightSettings.light2Color[1] = play->envCtx.adjLightSettings.fogColor[2];
+ play->envCtx.adjLightSettings.light2Color[0] = play->envCtx.adjLightSettings.fogColor[2];
+ play->envCtx.adjLightSettings.light1Color[2] = play->envCtx.adjLightSettings.fogColor[2];
+ play->envCtx.adjLightSettings.light1Color[1] = play->envCtx.adjLightSettings.fogColor[2];
+ play->envCtx.adjLightSettings.light1Color[0] = play->envCtx.adjLightSettings.fogColor[2];
+ play->envCtx.adjLightSettings.ambientColor[2] = play->envCtx.adjLightSettings.fogColor[2];
+ play->envCtx.adjLightSettings.ambientColor[1] = play->envCtx.adjLightSettings.fogColor[2];
+ play->envCtx.adjLightSettings.ambientColor[0] = play->envCtx.adjLightSettings.fogColor[2];
+ play->envCtx.adjLightSettings.fogNear = play->envCtx.adjLightSettings.fogColor[2];
}
Collider_DestroyCylinder(play, &this->collider);
@@ -518,38 +518,39 @@ void EnWizFire_Update(Actor* thisx, PlayState* play2) {
fogNear = 968.0f;
}
- play->envCtx.lightSettings.fogNear = (fogNear - (s16)play->envCtx.unk_C4.fogNear) * this->blendScaleFrac;
+ play->envCtx.adjLightSettings.fogNear =
+ (fogNear - (s16)play->envCtx.lightSettings.fogNear) * this->blendScaleFrac;
- play->envCtx.lightSettings.ambientColor[0] =
- ((f32)lightSettingsColors[index].r - play->envCtx.unk_C4.ambientColor[0]) * this->blendScaleFrac;
- play->envCtx.lightSettings.ambientColor[1] =
- ((f32)lightSettingsColors[index].g - play->envCtx.unk_C4.ambientColor[1]) * this->blendScaleFrac;
- play->envCtx.lightSettings.ambientColor[2] =
- ((f32)lightSettingsColors[index].b - play->envCtx.unk_C4.ambientColor[2]) * this->blendScaleFrac;
+ play->envCtx.adjLightSettings.ambientColor[0] =
+ ((f32)lightSettingsColors[index].r - play->envCtx.lightSettings.ambientColor[0]) * this->blendScaleFrac;
+ play->envCtx.adjLightSettings.ambientColor[1] =
+ ((f32)lightSettingsColors[index].g - play->envCtx.lightSettings.ambientColor[1]) * this->blendScaleFrac;
+ play->envCtx.adjLightSettings.ambientColor[2] =
+ ((f32)lightSettingsColors[index].b - play->envCtx.lightSettings.ambientColor[2]) * this->blendScaleFrac;
index++;
- play->envCtx.lightSettings.diffuseColor1[0] =
- ((f32)lightSettingsColors[index].r - play->envCtx.unk_C4.diffuseColor1[0]) * this->blendScaleFrac;
- play->envCtx.lightSettings.diffuseColor1[1] =
- ((f32)lightSettingsColors[index].g - play->envCtx.unk_C4.diffuseColor1[1]) * this->blendScaleFrac;
- play->envCtx.lightSettings.diffuseColor1[2] =
- ((f32)lightSettingsColors[index].b - play->envCtx.unk_C4.diffuseColor1[2]) * this->blendScaleFrac;
+ play->envCtx.adjLightSettings.light1Color[0] =
+ ((f32)lightSettingsColors[index].r - play->envCtx.lightSettings.light1Color[0]) * this->blendScaleFrac;
+ play->envCtx.adjLightSettings.light1Color[1] =
+ ((f32)lightSettingsColors[index].g - play->envCtx.lightSettings.light1Color[1]) * this->blendScaleFrac;
+ play->envCtx.adjLightSettings.light1Color[2] =
+ ((f32)lightSettingsColors[index].b - play->envCtx.lightSettings.light1Color[2]) * this->blendScaleFrac;
index++;
- play->envCtx.lightSettings.diffuseColor2[0] =
- ((f32)lightSettingsColors[index].r - play->envCtx.unk_C4.diffuseColor[0]) * this->blendScaleFrac;
- play->envCtx.lightSettings.diffuseColor2[1] =
- ((f32)lightSettingsColors[index].g - play->envCtx.unk_C4.diffuseColor[1]) * this->blendScaleFrac;
- play->envCtx.lightSettings.diffuseColor2[2] =
- ((f32)lightSettingsColors[index].b - play->envCtx.unk_C4.diffuseColor[2]) * this->blendScaleFrac;
+ play->envCtx.adjLightSettings.light2Color[0] =
+ ((f32)lightSettingsColors[index].r - play->envCtx.lightSettings.light2Color[0]) * this->blendScaleFrac;
+ play->envCtx.adjLightSettings.light2Color[1] =
+ ((f32)lightSettingsColors[index].g - play->envCtx.lightSettings.light2Color[1]) * this->blendScaleFrac;
+ play->envCtx.adjLightSettings.light2Color[2] =
+ ((f32)lightSettingsColors[index].b - play->envCtx.lightSettings.light2Color[2]) * this->blendScaleFrac;
index++;
- play->envCtx.lightSettings.fogColor[0] =
- ((f32)lightSettingsColors[index].r - play->envCtx.unk_C4.fogColor[0]) * this->blendScaleFrac;
- play->envCtx.lightSettings.fogColor[1] =
- ((f32)lightSettingsColors[index].g - play->envCtx.unk_C4.fogColor[1]) * this->blendScaleFrac;
- play->envCtx.lightSettings.fogColor[2] =
- ((f32)lightSettingsColors[index].b - play->envCtx.unk_C4.fogColor[2]) * this->blendScaleFrac;
+ play->envCtx.adjLightSettings.fogColor[0] =
+ ((f32)lightSettingsColors[index].r - play->envCtx.lightSettings.fogColor[0]) * this->blendScaleFrac;
+ play->envCtx.adjLightSettings.fogColor[1] =
+ ((f32)lightSettingsColors[index].g - play->envCtx.lightSettings.fogColor[1]) * this->blendScaleFrac;
+ play->envCtx.adjLightSettings.fogColor[2] =
+ ((f32)lightSettingsColors[index].b - play->envCtx.lightSettings.fogColor[2]) * this->blendScaleFrac;
}
}
@@ -638,8 +639,8 @@ void EnWizFire_Update(Actor* thisx, PlayState* play2) {
}
}
- if ((player->stateFlags2 & PLAYER_STATE2_4000) && (player->unk_AE8 < 90)) {
- player->unk_AE8 = 90;
+ if ((player->stateFlags2 & PLAYER_STATE2_4000) && (player->actionVar2 < 90)) {
+ player->actionVar2 = 90;
}
if (!this->hitByIceArrow && !sPoolHitByIceArrow &&
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 c9881a5e0..b39a77408 100644
--- a/src/overlays/actors/ovl_En_Yb/z_en_yb.c
+++ b/src/overlays/actors/ovl_En_Yb/z_en_yb.c
@@ -88,7 +88,7 @@ void EnYb_Init(Actor* thisx, PlayState* play) {
ActorShape_Init(&this->actor.shape, 0.0f, EnYb_ActorShadowFunc, 20.0f);
// @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,
+ SkelAnime_InitFlex(play, &this->skelAnime, &gYbSkel, &object_yb_Anim_000200, (uintptr_t)this->jointTable & ~0xF,
(uintptr_t)this->morphTable & ~0xF, YB_LIMB_MAX);
Animation_PlayLoop(&this->skelAnime, &object_yb_Anim_000200);
@@ -358,7 +358,7 @@ void EnYb_Idle(EnYb* this, PlayState* play) {
EnYb_UpdateAnimation(this, play);
if ((this->actor.xzDistToPlayer < 180.0f) && (fabsf(this->actor.playerHeightRel) < 50.0f) &&
- (play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING) &&
+ (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING) &&
(GET_PLAYER_FORM == PLAYER_FORM_HUMAN)) {
this->actionFunc = EnYb_TeachingDance;
this->teachingCutsceneTimer = 200;
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 b54986829..9e6310a71 100644
--- a/src/overlays/actors/ovl_En_Zob/z_en_zob.c
+++ b/src/overlays/actors/ovl_En_Zob/z_en_zob.c
@@ -268,7 +268,7 @@ void func_80B9FC70(EnZob* this, s16 csIdIndex) {
void func_80B9FCA0(EnZob* this, PlayState* play) {
Message_CloseTextbox(play);
- play->msgCtx.ocarinaMode = 4;
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
func_80B9FC0C(this);
this->unk_2F4 &= ~1;
this->actionFunc = func_80BA0728;
@@ -315,7 +315,7 @@ void func_80B9FE1C(EnZob* this, PlayState* play) {
void func_80B9FE5C(EnZob* this, PlayState* play) {
func_80B9F86C(this);
- if (play->msgCtx.ocarinaMode == 3) {
+ if (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) {
play->msgCtx.msgLength = 0;
this->actionFunc = func_80B9FDDC;
func_80B9FC70(this, 0);
@@ -331,7 +331,7 @@ void func_80B9FE5C(EnZob* this, PlayState* play) {
void func_80B9FF20(EnZob* this, PlayState* play) {
func_80B9F86C(this);
if (Message_GetState(&play->msgCtx) == TEXT_STATE_7) {
- func_80152434(play, 0x42);
+ Message_DisplayOcarinaStaff(play, OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF);
this->actionFunc = func_80B9FE5C;
func_80B9FC70(this, 2);
}
@@ -339,11 +339,11 @@ void func_80B9FF20(EnZob* this, PlayState* play) {
void func_80B9FF80(EnZob* this, PlayState* play) {
func_80B9F86C(this);
- if (play->msgCtx.ocarinaMode == 3) {
+ if (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) {
this->actionFunc = func_80B9FF20;
this->unk_304 = 6;
func_80B9F7E4(this, 1, ANIMMODE_LOOP);
- func_80152434(play, 0x3E);
+ Message_DisplayOcarinaStaff(play, OCARINA_ACTION_DEMONSTRATE_EVAN_PART2_FIRST_HALF);
func_80B9FC70(this, 1);
} else if (Message_GetState(&play->msgCtx) == TEXT_STATE_11) {
play->msgCtx.msgLength = 0;
@@ -357,7 +357,7 @@ void func_80B9FF80(EnZob* this, PlayState* play) {
void func_80BA005C(EnZob* this, PlayState* play) {
func_80B9F86C(this);
if (Message_GetState(&play->msgCtx) == TEXT_STATE_7) {
- func_80152434(play, 0x41);
+ Message_DisplayOcarinaStaff(play, OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF);
this->actionFunc = func_80B9FF80;
func_80B9FC70(this, 2);
}
@@ -426,7 +426,7 @@ void func_80BA00BC(EnZob* this, PlayState* play) {
break;
case 0x1209:
- func_80152434(play, 0x3D);
+ Message_DisplayOcarinaStaff(play, OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_FIRST_HALF);
this->unk_304 = 4;
func_80B9F7E4(this, 0, ANIMMODE_LOOP);
this->actionFunc = func_80BA005C;
@@ -439,7 +439,7 @@ void func_80BA00BC(EnZob* this, PlayState* play) {
}
void func_80BA0318(EnZob* this, PlayState* play) {
- func_80152434(play, 0x3D);
+ Message_DisplayOcarinaStaff(play, OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_FIRST_HALF);
this->unk_304 = 4;
func_80B9F7E4(this, 0, ANIMMODE_LOOP);
this->actionFunc = func_80BA005C;
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 5d352e734..ab1f940ce 100644
--- a/src/overlays/actors/ovl_En_Zod/z_en_zod.c
+++ b/src/overlays/actors/ovl_En_Zod/z_en_zod.c
@@ -622,7 +622,7 @@ void EnZod_DrawDrums(EnZod* this, PlayState* play) {
}
void EnZod_Draw(Actor* thisx, PlayState* play) {
- static TexturePtr sTijoEyesTextures[] = { &gTijoEyesOpen, &gTijoEyesHalfOpen, &gTijoEyesClosed };
+ static TexturePtr sTijoEyesTextures[] = { &gTijoEyesOpenTex, &gTijoEyesHalfOpenTex, &gTijoEyesClosedTex };
EnZod* this = THIS;
Gfx* gfx;
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 2e99ccb7b..92fa313a6 100644
--- a/src/overlays/actors/ovl_En_Zog/z_en_zog.c
+++ b/src/overlays/actors/ovl_En_Zog/z_en_zog.c
@@ -627,7 +627,7 @@ void func_80B9451C(EnZog* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->unk_300 = 2;
this->actionFunc = func_80B94470;
- } else if ((play->msgCtx.ocarinaMode == 3) && (this->actor.xzDistToPlayer < 120.0f)) {
+ } else if ((play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && (this->actor.xzDistToPlayer < 120.0f)) {
if ((play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING) && (GET_PLAYER_FORM == PLAYER_FORM_HUMAN)) {
func_80B93BA8(this, 2);
this->actionFunc = func_80B943C0;
@@ -715,7 +715,7 @@ void func_80B948A8(EnZog* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->unk_300 = 2;
this->actionFunc = func_80B946FC;
- } else if ((play->msgCtx.ocarinaMode == 3) && (this->actor.xzDistToPlayer < 120.0f)) {
+ } else if ((play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && (this->actor.xzDistToPlayer < 120.0f)) {
if ((play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING) && (GET_PLAYER_FORM == PLAYER_FORM_HUMAN)) {
func_80B93BA8(this, 2);
this->actionFunc = func_80B943C0;
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 0e3262869..8a942ce17 100644
--- a/src/overlays/actors/ovl_En_Zos/z_en_zos.c
+++ b/src/overlays/actors/ovl_En_Zos/z_en_zos.c
@@ -555,8 +555,8 @@ void func_80BBBDE0(EnZos* this, PlayState* play) {
func_80BBB0D4(this, play);
- if (play->msgCtx.ocarinaMode == 0x2A) {
- play->msgCtx.ocarinaMode = 4;
+ if (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_FULL_EVAN_SONG) {
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
this->actionFunc = func_80BBBB84;
this->actor.flags |= ACTOR_FLAG_10000;
Actor_OfferTalk(&this->actor, play, 120.0f);
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 e9e86668a..57689ebd8 100644
--- a/src/overlays/actors/ovl_En_Zot/z_en_zot.c
+++ b/src/overlays/actors/ovl_En_Zot/z_en_zot.c
@@ -864,7 +864,7 @@ void func_80B98178(EnZot* this, PlayState* play) {
textId = 0x12A6;
SET_WEEKEVENTREG(WEEKEVENTREG_39_04);
}
- } else if (Flags_GetSwitch(play, this->actor.home.rot.z & 0x7F)) {
+ } else if (Flags_GetSwitch(play, ENZOT_GET_SWITCH_FLAG(&this->actor))) {
textId = 0x12A0;
} else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_39_02)) {
textId = 0x12A5;
@@ -1146,7 +1146,7 @@ void func_80B98BF4(EnZot* this, PlayState* play) {
void func_80B98CA8(EnZot* this, PlayState* play) {
if (func_800B8718(&this->actor, &play->state)) {
- play->msgCtx.ocarinaMode = 4;
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
AudioOcarina_StartDefault(0xFFFF);
this->actionFunc = func_80B98BF4;
this->actor.flags |= ACTOR_FLAG_10000;
@@ -1173,7 +1173,7 @@ void func_80B98E10(EnZot* this, PlayState* play) {
u16 textId;
if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) {
- if (Flags_GetSwitch(play, this->actor.home.rot.z & 0x7F)) {
+ if (Flags_GetSwitch(play, ENZOT_GET_SWITCH_FLAG(&this->actor))) {
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_40_04)) {
textId = 0x12C5;
} else {
@@ -1187,7 +1187,7 @@ void func_80B98E10(EnZot* this, PlayState* play) {
SET_WEEKEVENTREG(WEEKEVENTREG_40_02);
}
} else {
- if (Flags_GetSwitch(play, this->actor.home.rot.z & 0x7F)) {
+ if (Flags_GetSwitch(play, ENZOT_GET_SWITCH_FLAG(&this->actor))) {
if (this->unk_2F2 & 0x10) {
textId = 0x12BF;
} else {
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 e2c43baa3..b6b67abb4 100644
--- a/src/overlays/actors/ovl_En_Zot/z_en_zot.h
+++ b/src/overlays/actors/ovl_En_Zot/z_en_zot.h
@@ -9,6 +9,7 @@ typedef void (*EnZotActionFunc)(struct EnZot*, PlayState*);
#define ENZOT_GET_1F(thisx) ((thisx)->params & 0x1F)
#define ENZOT_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 0xA)
+#define ENZOT_GET_SWITCH_FLAG(thisx) (((thisx)->home.rot.z) & 0x7F)
#define ENZOT_PATH_INDEX_NONE 0x3F
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 c5b218815..e7308c10d 100644
--- a/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c
+++ b/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c
@@ -55,12 +55,12 @@ void ItemEtcetera_Init(Actor* thisx, PlayState* play) {
s32 pad;
ItemEtcetera* this = THIS;
s32 type = ITEMETCETERA_GET_FF(&this->actor);
- s32 objBankIndex = Object_GetIndex(&play->objectCtx, sObjectIds[type]);
+ s32 objectSlot = Object_GetSlot(&play->objectCtx, sObjectIds[type]);
- if (objBankIndex < 0) {
+ if (objectSlot <= OBJECT_SLOT_NONE) {
// assert on debug
} else {
- this->objIndex = objBankIndex;
+ this->objectSlot = objectSlot;
}
this->getItemDrawId = sGetItemDrawIds[type];
this->getItemId = sGetItemIds[type];
@@ -93,8 +93,8 @@ void ItemEtcetera_Destroy(Actor* thisx, PlayState* play) {
}
void ItemEtcetera_WaitForObject(ItemEtcetera* this, PlayState* play) {
- if (Object_IsLoaded(&play->objectCtx, this->objIndex)) {
- this->actor.objBankIndex = this->objIndex;
+ if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) {
+ this->actor.objectSlot = this->objectSlot;
this->actor.draw = this->drawFunc;
this->actionFunc = this->futureActionFunc;
}
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 4ac893ba5..92cda8710 100644
--- a/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.h
+++ b/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.h
@@ -32,7 +32,7 @@ typedef struct ItemEtcetera {
/* 0x144 */ ItemEtceteraActionFunc futureActionFunc;
/* 0x148 */ s16 getItemDrawId;
/* 0x14A */ s16 getItemId;
- /* 0x14C */ u8 objIndex;
+ /* 0x14C */ u8 objectSlot;
/* 0x150 */ ActorFunc drawFunc;
/* 0x154 */ ItemEtceteraActionFunc actionFunc;
} ItemEtcetera; // size = 0x158
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 c4e861ff6..d475a263e 100644
--- a/src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.c
+++ b/src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.c
@@ -92,7 +92,7 @@ void MirRay2_Init(Actor* thisx, PlayState* play) {
this->actor.shape.rot.x = 0;
this->actor.world.rot.x = this->actor.shape.rot.x;
if (MIRRAY2_GET_F(thisx) != 1) {
- if ((MIRRAY2_GET_SWITCH_FLAGS(thisx) != 0x7F) && !Flags_GetSwitch(play, MIRRAY2_GET_SWITCH_FLAGS(thisx))) {
+ if ((MIRRAY2_GET_SWITCH_FLAG(thisx) != 0x7F) && !Flags_GetSwitch(play, MIRRAY2_GET_SWITCH_FLAG(thisx))) {
this->unk1A4 |= 1;
}
}
@@ -109,7 +109,7 @@ void MirRay2_Update(Actor* thisx, PlayState* play) {
MirRay2* this = THIS;
if (this->unk1A4 & 1) {
- if (Flags_GetSwitch(play, MIRRAY2_GET_SWITCH_FLAGS(thisx))) {
+ if (Flags_GetSwitch(play, MIRRAY2_GET_SWITCH_FLAG(thisx))) {
this->unk1A4 &= ~1;
}
} else {
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 4bb40d40d..7325ba2cf 100644
--- a/src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.h
+++ b/src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.h
@@ -6,7 +6,7 @@
struct MirRay2;
#define MIRRAY2_GET_F(thisx) ((thisx)->params & 0xF)
-#define MIRRAY2_GET_SWITCH_FLAGS(thisx) (((thisx)->params & 0xFE00) >> 9)
+#define MIRRAY2_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0xFE00) >> 9)
typedef struct MirRay2 {
/* 0x000 */ Actor actor;
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 cec65a32c..d713c9d04 100644
--- a/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c
+++ b/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c
@@ -198,7 +198,7 @@ void ObjArmos_Init(Actor* thisx, PlayState* play) {
if (sp40 == 0) {
func_809A57D8(this);
- } else if (Flags_GetSwitch(play, OBJARMOS_GET_7F(&this->dyna.actor))) {
+ } else if (Flags_GetSwitch(play, OBJARMOS_GET_SWITCH_FLAG(&this->dyna.actor))) {
if (sp44 == OBJARMOS_ROT_7_0) {
this->dyna.actor.world.pos.x = this->dyna.actor.home.pos.x + (sp40 * 60);
func_809A57D8(this);
@@ -285,7 +285,7 @@ void func_809A562C(ObjArmos* this, PlayState* play) {
}
} else {
Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND);
- Flags_SetSwitch(play, OBJARMOS_GET_7F(&this->dyna.actor));
+ Flags_SetSwitch(play, OBJARMOS_GET_SWITCH_FLAG(&this->dyna.actor));
sp20 = true;
}
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 4ac83cc9d..af3b31338 100644
--- a/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.h
+++ b/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.h
@@ -8,7 +8,7 @@ struct ObjArmos;
typedef void (*ObjArmosActionFunc)(struct ObjArmos*, PlayState*);
-#define OBJARMOS_GET_7F(thisx) ((thisx)->params & 0x7F)
+#define OBJARMOS_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
#define OBJARMOS_GET_ROTZ_7(thisx) ((thisx)->home.rot.z & 7)
#define OBJARMOS_GET_ROTX_F(thisx) ((thisx)->home.rot.x & 0xF)
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 0ad12d3f3..d5ec2917a 100644
--- a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c
+++ b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c
@@ -275,14 +275,14 @@ s32 func_80937468(ObjBean* this, PlayState* play) {
ObjBean* func_809374F8(ObjBean* this, PlayState* play) {
Actor* bgActor = play->actorCtx.actorLists[ACTORCAT_BG].first;
- s32 params = OBJBEAN_GET_3F80(&this->dyna.actor, 0);
+ s32 switchFlag = OBJBEAN_GET_SWITCH_FLAG_2(&this->dyna.actor, 0);
while (bgActor != NULL) {
if (bgActor->id == ACTOR_OBJ_BEAN) {
s32 params2 = OBJBEAN_GET_C000(bgActor);
if (!params2 && (bgActor->room == this->dyna.actor.room) && !OBJBEAN_GET_80(bgActor) &&
- (params == OBJBEAN_GET_7F(bgActor, 0)) &&
+ (switchFlag == OBJBEAN_GET_SWITCH_FLAG_1(bgActor, 0)) &&
(Math3D_Vec3fDistSq(&bgActor->world.pos, &this->dyna.actor.world.pos) < SQ(10.0f))) {
break;
}
@@ -303,8 +303,8 @@ void func_809375C8(ObjBean* this, PlayState* play) {
void func_809375F4(ObjBean* this, PlayState* play) {
static Gfx* D_80939024[] = {
- gKakeraLeafMiddle,
- gKakeraLeafTip,
+ gKakeraLeafMiddleDL,
+ gKakeraLeafTipDL,
};
Vec3f spC4;
Vec3f spB8;
@@ -406,12 +406,14 @@ void ObjBean_Init(Actor* thisx, PlayState* play) {
ActorShape_Init(&this->dyna.actor.shape, 0.0f, ActorShadow_DrawCircle, 8.8f);
func_80936CF0(this, play);
- if (!OBJBEAN_GET_80(&this->dyna.actor) && Flags_GetSwitch(play, OBJBEAN_GET_7F(&this->dyna.actor, 0)) &&
- !Flags_GetSwitch(play, OBJBEAN_GET_7F(&this->dyna.actor, 1)) && func_800FE9B4(play)) {
- Flags_SetSwitch(play, OBJBEAN_GET_7F(&this->dyna.actor, 1));
+ if (!OBJBEAN_GET_80(&this->dyna.actor) &&
+ Flags_GetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_1(&this->dyna.actor, 0)) &&
+ !Flags_GetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_1(&this->dyna.actor, 1)) && func_800FE9B4(play)) {
+ Flags_SetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_1(&this->dyna.actor, 1));
}
- if (OBJBEAN_GET_80(&this->dyna.actor) || Flags_GetSwitch(play, OBJBEAN_GET_7F(&this->dyna.actor, 1))) {
+ if (OBJBEAN_GET_80(&this->dyna.actor) ||
+ Flags_GetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_1(&this->dyna.actor, 1))) {
func_80938804(this);
} else {
DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
@@ -504,12 +506,12 @@ void func_80937DEC(ObjBean* this, PlayState* play) {
this->unk_1FF = false;
}
- if (this->unk_1FF && !Flags_GetSwitch(play, OBJBEAN_GET_3F80(&this->dyna.actor, 1)) &&
- Flags_GetSwitch(play, OBJBEAN_GET_3F80(&this->dyna.actor, 0)) && func_800FE9B4(play)) {
- Flags_SetSwitch(play, OBJBEAN_GET_3F80(&this->dyna.actor, 1));
+ if (this->unk_1FF && !Flags_GetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_2(&this->dyna.actor, 1)) &&
+ Flags_GetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_2(&this->dyna.actor, 0)) && func_800FE9B4(play)) {
+ Flags_SetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_2(&this->dyna.actor, 1));
}
- if (this->unk_1FF && Flags_GetSwitch(play, OBJBEAN_GET_3F80(&this->dyna.actor, 1))) {
+ if (this->unk_1FF && Flags_GetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_2(&this->dyna.actor, 1))) {
Actor_Kill(&this->dyna.actor);
return;
}
@@ -520,7 +522,7 @@ void func_80937DEC(ObjBean* this, PlayState* play) {
this->dyna.actor.draw = func_80938E00;
}
- if (this->unk_1FF && Flags_GetSwitch(play, OBJBEAN_GET_3F80(&this->dyna.actor, 0))) {
+ if (this->unk_1FF && Flags_GetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_2(&this->dyna.actor, 0))) {
this->unk_1FE |= 5;
func_80937C30(this);
} else {
@@ -528,7 +530,7 @@ void func_80937DEC(ObjBean* this, PlayState* play) {
func_80937C10(this);
}
- if (Flags_GetSwitch(play, OBJBEAN_GET_7F(&this->dyna.actor, 0))) {
+ if (Flags_GetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_1(&this->dyna.actor, 0))) {
this->unk_1E4 = 5;
} else {
this->unk_1E4 = 0;
@@ -548,10 +550,10 @@ void func_80937FC8(ObjBean* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->dyna.actor, &play->state)) {
if (Player_GetExchangeItemAction(play) == PLAYER_IA_MAGIC_BEANS) {
func_809383B4(this);
- Flags_SetSwitch(play, OBJBEAN_GET_3F80(&this->dyna.actor, 0));
+ Flags_SetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_2(&this->dyna.actor, 0));
}
- if (Flags_GetSwitch(play, OBJBEAN_GET_7F(&this->dyna.actor, 0))) {
+ if (Flags_GetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_1(&this->dyna.actor, 0))) {
this->unk_1E4 = 5;
} else {
s32 pad;
@@ -566,7 +568,7 @@ void func_80937FC8(ObjBean* this, PlayState* play) {
((this->unk_1FF != 0) && (this->unk_1FE & 4) && (this->dyna.actor.xzDistToPlayer < 300.0f) &&
func_800FE9B4(play))) {
func_809375C8(this, play);
- Flags_SetSwitch(play, OBJBEAN_GET_3F80(&this->dyna.actor, 1));
+ Flags_SetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_2(&this->dyna.actor, 1));
this->unk_1E4 = 6;
func_80938670(this);
} else if (this->unk_1FF != 0) {
@@ -614,7 +616,7 @@ void func_80938298(ObjBean* this, PlayState* play) {
if (this->unk_1E0 >= 3) {
this->unk_1E4 = 3;
- Flags_SetSwitch(play, OBJBEAN_GET_7F(&this->dyna.actor, 0));
+ Flags_SetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_1(&this->dyna.actor, 0));
this->unk_1E4 = 5;
func_8093833C(this);
} else if (this->unk_1E4 == 4) {
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 1a22de390..f21610891 100644
--- a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.h
+++ b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.h
@@ -8,10 +8,10 @@ struct ObjBean;
typedef void (*ObjBeanActionFunc)(struct ObjBean*, PlayState*);
typedef void (*ObjBeanUnkFunc)(struct ObjBean*);
-#define OBJBEAN_GET_7F(thisx, x) (((thisx)->params + (x)) & 0x7F)
+#define OBJBEAN_GET_SWITCH_FLAG_1(thisx, offset) (((thisx)->params + (offset)) & 0x7F)
#define OBJBEAN_GET_80(thisx) (((thisx)->params >> 7) & 1)
#define OBJBEAN_GET_3F00(thisx) (((thisx)->params >> 8) & 0x3F)
-#define OBJBEAN_GET_3F80(thisx, x) ((((thisx)->params >> 7) + (x)) & 0x7F)
+#define OBJBEAN_GET_SWITCH_FLAG_2(thisx, offset) ((((thisx)->params >> 7) + (offset)) & 0x7F)
#define OBJBEAN_GET_C000(thisx) (((thisx)->params >> 0xE) & 3)
#define OBJBEAN_GET_3(thisx) ((thisx)->home.rot.z & 3)
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 61805fd49..afcf7aaa0 100644
--- a/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.c
+++ b/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.c
@@ -111,7 +111,7 @@ void ObjBigicicle_Init(Actor* thisx, PlayState* play) {
}
Actor_SetScale(&this->actor, sp28 * 0.001f);
- this->actor.params &= 0xFF;
+ this->actor.params = OBJBIGICLE_GET_SWITCH_FLAG_MASK(&this->actor);
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
sp30 = sp28 * (1.0f / 60.0f);
@@ -125,7 +125,7 @@ void ObjBigicicle_Init(Actor* thisx, PlayState* play) {
this->collider2.dim.height = this->collider2.dim.height * sp30;
this->collider2.dim.yShift = this->collider2.dim.yShift * sp30;
- if (Flags_GetSwitch(play, this->actor.params)) {
+ if (Flags_GetSwitch(play, OBJBIGICLE_GET_SWITCH_FLAG(&this->actor))) {
Actor_Kill(&this->actor);
return;
}
@@ -248,7 +248,7 @@ void func_80AE9258(ObjBigicicle* this, PlayState* play) {
temp_f0 = this->actor.world.pos.y - icePoly->actor.world.pos.y;
if ((temp_f0 < icePoly->colliders1[0].dim.height) && (temp_f0 > 0.0f) &&
(Actor_WorldDistXZToActor(&this->actor, &icePoly->actor) < icePoly->colliders1[0].dim.radius)) {
- Flags_SetSwitch(play, this->actor.params);
+ Flags_SetSwitch(play, OBJBIGICLE_GET_SWITCH_FLAG(&this->actor));
this->actionFunc = func_80AE939C;
return;
}
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 2eb5a00bd..fc506e62b 100644
--- a/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.h
+++ b/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.h
@@ -7,6 +7,8 @@ struct ObjBigicicle;
typedef void (*ObjBigicicleActionFunc)(struct ObjBigicicle*, PlayState*);
+#define OBJBIGICLE_GET_SWITCH_FLAG_MASK(thisx) ((thisx)->params & 0xFF)
+#define OBJBIGICLE_GET_SWITCH_FLAG(thisx) ((thisx)->params)
#define OBJBIGICLE_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF)
typedef struct ObjBigicicle {
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 a4f44973f..f21ebff2b 100644
--- a/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.c
+++ b/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.c
@@ -32,7 +32,7 @@ ActorInit Obj_Blockstop_InitVars = {
void ObjBlockstop_Init(Actor* thisx, PlayState* play) {
ObjBlockstop* this = THIS;
- if (Flags_GetSwitch(play, this->actor.params)) {
+ if (Flags_GetSwitch(play, OBJBLOCKSTOP_GET_SWITCH_FLAG(&this->actor))) {
Actor_Kill(&this->actor);
}
this->actionFunc = ObjBlockstop_CheckForBlock;
@@ -58,7 +58,7 @@ void ObjBlockstop_CheckForBlock(ObjBlockstop* this, PlayState* play) {
void ObjBlockstop_TryPlayCutscene(ObjBlockstop* this, PlayState* play) {
if (CutsceneManager_IsNext(this->actor.csId)) {
- Flags_SetSwitch(play, this->actor.params);
+ Flags_SetSwitch(play, OBJBLOCKSTOP_GET_SWITCH_FLAG(&this->actor));
if (CutsceneManager_GetLength(this->actor.csId) != -1) {
CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
}
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 15d45a90b..e6ad9f696 100644
--- a/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.h
+++ b/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.h
@@ -7,6 +7,8 @@ struct ObjBlockstop;
typedef void (*ObjBlockstopActionFunc)(struct ObjBlockstop*, PlayState*);
+#define OBJBLOCKSTOP_GET_SWITCH_FLAG(thisx) ((thisx)->params)
+
typedef struct ObjBlockstop {
/* 0x000 */ Actor actor;
/* 0x144 */ ObjBlockstopActionFunc actionFunc;
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 a2ecc448e..95ff47db2 100644
--- a/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c
+++ b/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c
@@ -182,7 +182,7 @@ void ObjBombiwa_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->actor, sInitChain);
Collider_InitCylinder(play, &this->collider);
- if (Flags_GetSwitch(play, OBJBOMBIWA_GET_7F(&this->actor))) {
+ if (Flags_GetSwitch(play, OBJBOMBIWA_GET_SWITCH_FLAG(&this->actor))) {
Actor_Kill(&this->actor);
return;
}
@@ -342,7 +342,7 @@ void func_80939EF4(ObjBombiwa* this, PlayState* play) {
}
if (sp28->unk_0C(&this->actor)) {
- Flags_SetSwitch(play, OBJBOMBIWA_GET_7F(&this->actor));
+ Flags_SetSwitch(play, OBJBOMBIWA_GET_SWITCH_FLAG(&this->actor));
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 80, NA_SE_EV_WALL_BROKEN);
if (OBJBOMBIWA_GET_8000(&this->actor)) {
Audio_PlaySfx(NA_SE_SY_CORRECT_CHIME);
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 b49a89323..911d804fc 100644
--- a/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.h
+++ b/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.h
@@ -7,7 +7,7 @@ struct ObjBombiwa;
typedef void (*ObjBombiwaActionFunc)(struct ObjBombiwa*, PlayState*);
-#define OBJBOMBIWA_GET_7F(thisx) ((thisx)->params & 0x7F)
+#define OBJBOMBIWA_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
#define OBJBOMBIWA_GET_100(thisx) (((thisx)->params >> 8) & 1)
#define OBJBOMBIWA_GET_8000(thisx) (((thisx)->params >> 0xF) & 1)
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 fde4fa4b3..8f326af48 100644
--- a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c
+++ b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c
@@ -191,7 +191,7 @@ void ObjChan_InitChandelier(ObjChan* this, PlayState* play) {
}
}
- if (Flags_GetSwitch(play, thisx->params & 0x7F)) {
+ if (Flags_GetSwitch(play, OBJCHAN_GET_SWITCH_FLAG(thisx))) {
this->stateFlags |= OBJCHAN_STATE_FIRE_DELAY;
this->stateFlags |= OBJCHAN_STATE_ON_FIRE;
@@ -261,9 +261,9 @@ void ObjChan_ChandelierAction(ObjChan* this, PlayState* play) {
}
}
if ((this->collider.base.acFlags & AC_HIT) && (this->collider.info.acHitInfo->toucher.dmgFlags & 0x800)) {
- Flags_SetSwitch(play, thisx->params & 0x7F);
+ Flags_SetSwitch(play, OBJCHAN_GET_SWITCH_FLAG(thisx));
}
- if (Flags_GetSwitch(play, thisx->params & 0x7F)) {
+ if (Flags_GetSwitch(play, OBJCHAN_GET_SWITCH_FLAG(thisx))) {
if (!(this->stateFlags & OBJCHAN_STATE_FIRE_DELAY)) {
this->rotationSpeed = 0;
this->flameSize = 0.0f;
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 0e6fbca86..f97ecccda 100644
--- a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.h
+++ b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.h
@@ -5,6 +5,8 @@
struct ObjChan;
+#define OBJCHAN_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
+
#define OBJCHAN_SUBTYPE(thisx) (((thisx)->params >> 12) & 0xF)
#define OBJCHAN_SUBTYPE_CHANDELIER 0
#define OBJCHAN_SUBTYPE_POT 1
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 be3d243e0..4227178e2 100644
--- a/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c
+++ b/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c
@@ -127,7 +127,7 @@ void func_8098CEAC(ObjComb* this, PlayState* play) {
phi_v0 = 0x20;
}
EffectSsKakera_Spawn(play, &spD0, &spC4, &spD0, phi_s0, phi_v0, phi_s1, 4, 0, temp_f10, 0, 0, 60, -1,
- OBJECT_COMB, object_comb_DL_001040);
+ OBJECT_COMB, gBeehiveFragmentDL);
}
spD0.x = this->actor.world.pos.x;
@@ -185,7 +185,7 @@ void func_8098D19C(ObjComb* this, PlayState* play) {
}
EffectSsKakera_Spawn(play, &spD0, &spC4, &spD0, phi_s0, phi_v0, phi_s1, 4, 0, temp_f8, 0, 0, 60, -1,
- OBJECT_COMB, object_comb_DL_001040);
+ OBJECT_COMB, gBeehiveFragmentDL);
}
spD0.x = this->actor.world.pos.x;
@@ -236,7 +236,7 @@ void func_8098D47C(ObjComb* this, PlayState* play) {
}
EffectSsKakera_Spawn(play, &spC8, &spBC, &spC8, phi_s0, phi_v0, 40, 0, 0, temp_f10, 0, 0, 80, -1, OBJECT_COMB,
- object_comb_DL_001040);
+ gBeehiveFragmentDL);
}
}
@@ -566,7 +566,7 @@ void ObjComb_Draw(Actor* thisx, PlayState* play) {
Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_OPA_DISP++, object_comb_DL_000CB0);
+ gSPDisplayList(POLY_OPA_DISP++, gBeehiveDL);
Collider_UpdateSpheres(0, &this->collider);
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 ee76dd9d4..a809da57a 100644
--- a/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.c
+++ b/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.c
@@ -32,8 +32,8 @@ ActorInit Obj_Demo_InitVars = {
void ObjDemo_Init(Actor* thisx, PlayState* play) {
ObjDemo* this = THIS;
- thisx->params = OBJDEMO_GET_FF(thisx);
- if ((thisx->params != OBJDEMO_FF_FF) && (Flags_GetSwitch(play, thisx->params))) {
+ thisx->params = OBJDEMO_GET_SWITCH_FLAG_MASK(thisx);
+ if ((OBJDEMO_GET_SWITCH_FLAG(thisx) != 0xFF) && (Flags_GetSwitch(play, OBJDEMO_GET_SWITCH_FLAG(thisx)))) {
Actor_Kill(&this->actor);
return;
}
@@ -93,8 +93,8 @@ void func_80983704(ObjDemo* this, PlayState* play) {
}
this->actor.csId = CutsceneManager_GetAdditionalCsId(this->actor.csId);
if (this->actor.csId == CS_ID_NONE) {
- if (this->actor.params != 0xFF) {
- Flags_SetSwitch(play, this->actor.params);
+ if (OBJDEMO_GET_SWITCH_FLAG(&this->actor) != 0xFF) {
+ Flags_SetSwitch(play, OBJDEMO_GET_SWITCH_FLAG(&this->actor));
}
Actor_Kill(&this->actor);
}
@@ -108,7 +108,8 @@ void func_80983704(ObjDemo* this, PlayState* play) {
void ObjDemo_Update(Actor* thisx, PlayState* play) {
ObjDemo* this = THIS;
- if ((this->actor.params != 0xFF) && Flags_GetSwitch(play, this->actor.params)) {
+ if ((OBJDEMO_GET_SWITCH_FLAG(&this->actor) != 0xFF) &&
+ Flags_GetSwitch(play, OBJDEMO_GET_SWITCH_FLAG(&this->actor))) {
Actor_Kill(&this->actor);
return;
}
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 065a21fe9..6b9d39db3 100644
--- a/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.h
+++ b/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.h
@@ -3,12 +3,13 @@
#include "global.h"
-#define OBJDEMO_GET_FF(thisx) ((thisx)->params & 0xFF)
-#define OBJDEMO_FF_FF 0xFF
struct ObjDemo;
typedef void (*ObjDemoActionFunc)(struct ObjDemo*, PlayState*);
+#define OBJDEMO_GET_SWITCH_FLAG_MASK(thisx) ((thisx)->params & 0xFF)
+#define OBJDEMO_GET_SWITCH_FLAG(thisx) ((thisx)->params)
+
typedef struct ObjDemo {
/* 0x000 */ Actor actor;
/* 0x144 */ ObjDemoActionFunc actionFunc;
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 c1b46fce7..ac31cbc64 100644
--- a/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.c
+++ b/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.c
@@ -131,7 +131,7 @@ void ObjDhouse_Init(Actor* thisx, PlayState* play) {
DynaPolyActor_Init(&this->dyna, 0);
- if (Flags_GetSwitch(play, OBJDHOUSE_GET_7F(&this->dyna.actor))) {
+ if (Flags_GetSwitch(play, OBJDHOUSE_GET_SWITCH_FLAG(&this->dyna.actor))) {
this->dyna.actor.draw = func_80B13E40;
func_80B13908(this);
} else {
@@ -434,7 +434,7 @@ void func_80B13940(ObjDhouse* this, PlayState* play2) {
PlayState* play = play2;
s32 sp20 = false;
- if (Flags_GetSwitch(play, OBJDHOUSE_GET_7F(&this->dyna.actor))) {
+ if (Flags_GetSwitch(play, OBJDHOUSE_GET_SWITCH_FLAG(&this->dyna.actor))) {
sp20 = true;
Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_EXPLSION_LONG);
}
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 c03dbed7d..46f1af83b 100644
--- a/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.h
+++ b/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.h
@@ -7,7 +7,7 @@ struct ObjDhouse;
typedef void (*ObjDhouseActionFunc)(struct ObjDhouse*, PlayState*);
-#define OBJDHOUSE_GET_7F(thisx) ((thisx)->params & 0x7F)
+#define OBJDHOUSE_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
typedef struct {
/* 0x00 */ Vec3f unk_00;
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 12afce508..57bfa823c 100644
--- a/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c
+++ b/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c
@@ -52,7 +52,7 @@ static ColliderCylinderInit sCylinderInit = {
{ 20, 14, 0, { 0, 0, 0 } },
};
-static s16 objectIds[] = {
+static s16 sObjectIds[] = {
GAMEPLAY_KEEP,
GAMEPLAY_KEEP,
GAMEPLAY_KEEP,
@@ -71,7 +71,7 @@ static f32 oscillationTable[] = {
void ObjEtcetera_Init(Actor* thisx, PlayState* play) {
s32 pad;
ObjEtcetera* this = THIS;
- s32 objectIndex;
+ s32 objectSlot;
s32 type = DEKU_FLOWER_TYPE(&this->dyna.actor);
s32 floorBgId;
Vec3f pos;
@@ -80,9 +80,9 @@ void ObjEtcetera_Init(Actor* thisx, PlayState* play) {
type = DEKU_FLOWER_TYPE_PINK;
}
- objectIndex = Object_GetIndex(&play->objectCtx, objectIds[type]);
- if (objectIndex >= 0) {
- this->objIndex = objectIndex;
+ objectSlot = Object_GetSlot(&play->objectCtx, sObjectIds[type]);
+ if (objectSlot > OBJECT_SLOT_NONE) {
+ this->objectSlot = objectSlot;
}
pos.x = this->dyna.actor.world.pos.x;
@@ -257,8 +257,8 @@ void ObjEtcetera_Setup(ObjEtcetera* this, PlayState* play) {
type = DEKU_FLOWER_TYPE_PINK;
}
- if (Object_IsLoaded(&play->objectCtx, this->objIndex)) {
- this->dyna.actor.objBankIndex = this->objIndex;
+ if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) {
+ this->dyna.actor.objectSlot = this->objectSlot;
Actor_SetObjectDependency(play, &this->dyna.actor);
DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
thisCollisionHeader = collisionHeaders[type];
@@ -328,7 +328,7 @@ void ObjEtcetera_Update(Actor* thisx, PlayState* play) {
if (floorBgId == BGCHECK_SCENE) {
floorPoly = this->dyna.actor.floorPoly;
if ((floorPoly != NULL) && (this->burrowFlag & 1)) {
- func_800FAAB4(play, SurfaceType_GetLightSettingIndex(&play->colCtx, floorPoly, floorBgId));
+ Environment_ChangeLightSetting(play, SurfaceType_GetLightSettingIndex(&play->colCtx, floorPoly, floorBgId));
}
}
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 454e3f674..6c8734c85 100644
--- a/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.h
+++ b/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.h
@@ -28,7 +28,7 @@ typedef struct ObjEtcetera {
/* 0x270 */ f32 bounceOscillationScale;
/* 0x274 */ s16 oscillationTimer;
/* 0x276 */ u16 burrowFlag;
- /* 0x278 */ s8 objIndex;
+ /* 0x278 */ s8 objectSlot;
/* 0x27C */ Gfx* dList;
/* 0x280 */ ObjEtceteraActionFunc actionFunc;
} ObjEtcetera; // size = 0x284
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 771833c58..9933b36f2 100644
--- a/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c
+++ b/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c
@@ -88,7 +88,7 @@ void func_80A4CABC(ObjFireshield* this) {
s32 pad;
if (CutsceneManager_IsNext(this->actor.csId)) {
- s32 sp18 = OBJFIRESHIELD_GET_7F(&this->actor);
+ s32 sp18 = OBJFIRESHIELD_GET_FLAGS(&this->actor);
s32 temp_a0 = (sp18 & ~0x1F) >> 5;
CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
@@ -103,7 +103,7 @@ void func_80A4CABC(ObjFireshield* this) {
void func_80A4CB7C(ObjFireshield* this) {
s32 pad;
- s32 sp18 = OBJFIRESHIELD_GET_7F(&this->actor);
+ s32 sp18 = OBJFIRESHIELD_GET_FLAGS(&this->actor);
if (this->unk_194 > 0) {
if (this->unk_194 == 20) {
@@ -119,7 +119,7 @@ void func_80A4CB7C(ObjFireshield* this) {
}
void func_80A4CC54(ObjFireshield* this) {
- s32 temp_v0 = OBJFIRESHIELD_GET_7F(&this->actor);
+ s32 temp_v0 = OBJFIRESHIELD_GET_FLAGS(&this->actor);
s32 temp_v1 = 1 << (temp_v0 & 0x1F);
this->actionFunc = func_80A4CCBC;
@@ -128,7 +128,7 @@ void func_80A4CC54(ObjFireshield* this) {
}
void func_80A4CCBC(ObjFireshield* this) {
- s32 temp_v0 = OBJFIRESHIELD_GET_7F(&this->actor);
+ s32 temp_v0 = OBJFIRESHIELD_GET_FLAGS(&this->actor);
this->actionFunc = func_80A4CD28;
D_80A4D884[(temp_v0 & ~0x1F) >> 5] &= ~(1 << (temp_v0 & 0x1F));
@@ -141,7 +141,7 @@ void func_80A4CD28(ObjFireshield* this) {
void func_80A4CD34(Actor* thisx, PlayState* play) {
s32 pad;
ObjFireshield* this = THIS;
- s32 sp24 = Flags_GetSwitch(play, OBJFIRESHIELD_GET_7F(&this->actor));
+ s32 isSwitchFlagSet = Flags_GetSwitch(play, OBJFIRESHIELD_GET_FLAGS(&this->actor));
s32 phi_v1;
s32 phi_a0;
@@ -154,13 +154,13 @@ void func_80A4CD34(Actor* thisx, PlayState* play) {
phi_a0 = false;
}
} else {
- phi_a0 = Flags_GetSwitch(play, OBJFIRESHIELD_GET_3F80(&this->actor));
+ phi_a0 = Flags_GetSwitch(play, OBJFIRESHIELD_GET_SWITCH_FLAG(&this->actor));
phi_v1 = false;
}
if (phi_v1 || phi_a0) {
this->unk_19C = 0;
- } else if (sp24) {
+ } else if (isSwitchFlagSet) {
this->unk_19C = 0;
} else {
this->unk_19C = 1;
@@ -175,7 +175,7 @@ void func_80A4CD34(Actor* thisx, PlayState* play) {
void func_80A4CE28(ObjFireshield* this, PlayState* play) {
s32 pad;
- s32 sp30 = OBJFIRESHIELD_GET_7F(&this->actor);
+ s32 sp30 = OBJFIRESHIELD_GET_FLAGS(&this->actor);
s32 pad2[2];
s32 sp24;
s32 sp20;
@@ -189,7 +189,7 @@ void func_80A4CE28(ObjFireshield* this, PlayState* play) {
sp20 = false;
}
} else {
- sp20 = Flags_GetSwitch(play, OBJFIRESHIELD_GET_3F80(&this->actor));
+ sp20 = Flags_GetSwitch(play, OBJFIRESHIELD_GET_SWITCH_FLAG(&this->actor));
sp24 = false;
}
@@ -251,7 +251,7 @@ void func_80A4CE28(ObjFireshield* this, PlayState* play) {
}
void func_80A4D174(ObjFireshield* this) {
- s32 temp_v0 = OBJFIRESHIELD_GET_7F(&this->actor);
+ s32 temp_v0 = OBJFIRESHIELD_GET_FLAGS(&this->actor);
s32 temp_v1 = 1 << (temp_v0 & 0x1F);
if (!(D_80A4D864[(temp_v0 & ~0x1F) >> 5] & temp_v1)) {
@@ -318,7 +318,7 @@ void ObjFireshield_Update(Actor* thisx, PlayState* play) {
s32 pad;
ObjFireshield* this = THIS;
s32 sp44 = OBJFIRESHIELD_GET_ROTX(&this->actor);
- s32 sp40 = OBJFIRESHIELD_GET_7F(&this->actor);
+ s32 sp40 = OBJFIRESHIELD_GET_FLAGS(&this->actor);
s32 temp_a0;
s32 temp_v1;
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 ffe1d7a35..772f839bb 100644
--- a/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.h
+++ b/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.h
@@ -7,10 +7,10 @@ struct ObjFireshield;
typedef void (*ObjFireshieldActionFunc)(struct ObjFireshield*);
-#define OBJFIRESHIELD_GET_7F(thisx) ((thisx)->params & 0x7F)
+#define OBJFIRESHIELD_GET_FLAGS(thisx) ((thisx)->params & 0x7F)
#define OBJFIRESHIELD_GET_1F00(thisx) (((thisx)->params >> 8) & 0x1F)
#define OBJFIRESHIELD_GET_2000(thisx) (((thisx)->params >> 0xD) & 1)
-#define OBJFIRESHIELD_GET_3F80(thisx) (((thisx)->params >> 7) & 0x7F)
+#define OBJFIRESHIELD_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 7) & 0x7F)
#define OBJFIRESHIELD_GET_C000(thisx) (((thisx)->params >> 0xE) & 3)
#define OBJFIRESHIELD_GET_ROTX(thisx) ((thisx)->home.rot.x & 1)
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 aca30fe92..cd8632659 100644
--- a/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c
+++ b/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c
@@ -255,7 +255,7 @@ void func_80A1BA44(ObjFlowerpot* this, PlayState* play) {
}
EffectSsKakera_Spawn(play, &spC4, &spB8, &spC4, -600, phi_s0, 30, 0, 0, (Rand_ZeroOne() * 12.0f) + 16.6f,
- phi_s1, 0, 35, -1, ACTOR_DEMO_GETITEM, object_flowerpot_DL_0015B0);
+ phi_s1, 0, 35, -1, OBJECT_FLOWERPOT, object_flowerpot_DL_0015B0);
}
spD0.y += 20.0f;
@@ -298,7 +298,7 @@ void func_80A1BD80(ObjFlowerpot* this, PlayState* play) {
}
EffectSsKakera_Spawn(play, &spBC, &spB0, &spBC, -240, phi_s0, 40, 0, 0, (Rand_ZeroOne() * 20.0f) + 10.6f, 0, 0,
- 42, -1, ACTOR_DEMO_GETITEM, object_flowerpot_DL_0015B0);
+ 42, -1, OBJECT_FLOWERPOT, object_flowerpot_DL_0015B0);
}
spBC.y = this->actor.world.pos.y + this->actor.depthInWater;
@@ -338,7 +338,7 @@ void func_80A1C0FC(ObjFlowerpot* this, PlayState* play) {
Math_Vec3f_Sum(&spB8, &spC4, &spB8);
EffectSsKakera_Spawn(play, &spB8, &spAC, &spB8, -100, 64, 40, 0, 0, (Rand_ZeroOne() * 16.0f) + 14.0f, 0, 0, 80,
- -1, ACTOR_DEMO_GETITEM, object_flowerpot_DL_0014F0);
+ -1, OBJECT_FLOWERPOT, object_flowerpot_DL_0014F0);
}
}
@@ -365,7 +365,7 @@ void func_80A1C328(ObjFlowerpot* this, PlayState* play) {
Math_Vec3f_Sum(&spB8, &spC4, &spB8);
EffectSsKakera_Spawn(play, &spB8, &spAC, &spB8, -80, 64, 44, 0, 0, (Rand_ZeroOne() * 16.0f) + 14.0f, 0, 0, 80,
- -1, ACTOR_DEMO_GETITEM, object_flowerpot_DL_0014F0);
+ -1, OBJECT_FLOWERPOT, object_flowerpot_DL_0014F0);
}
}
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 5668021e3..92479cc4a 100644
--- a/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c
+++ b/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c
@@ -99,7 +99,7 @@ void func_80B3C4E0(ObjGhaka* this, PlayState* play) {
if (talkState == TEXT_STATE_5) {
if (Message_ShouldAdvance(play)) {
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
func_80B3C260(this);
}
@@ -120,7 +120,7 @@ void func_80B3C4E0(ObjGhaka* this, PlayState* play) {
case 2:
Audio_PlaySfx_MessageCancel();
- play->msgCtx.msgMode = 0x43;
+ play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
play->msgCtx.stateTimer = 4;
func_80B3C260(this);
break;
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 a17f853df..e95f971c9 100644
--- a/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c
+++ b/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c
@@ -120,7 +120,7 @@ void func_809A9314(ObjGrassStruct1_1* ptr, PlayState* play) {
spBC.z = (Rand_ZeroOne() - 0.5f) * 8.0f;
EffectSsKakera_Spawn(play, &spB0, &spBC, &spB0, -100, 64, 40, 3, 0,
- D_809AAB7C[(s32)(Rand_ZeroOne() * 111.1f) & 7], 0, 0, 80, -1, 1, gKakeraLeafMiddle);
+ D_809AAB7C[(s32)(Rand_ZeroOne() * 111.1f) & 7], 0, 0, 80, -1, 1, gKakeraLeafMiddleDL);
spB0.x = ptr->unk_00.x + (ptr2->x * 16.0f);
spB0.y = (ptr->unk_00.y + (ptr2->y * 16.0f)) + 10.0f;
@@ -131,7 +131,7 @@ void func_809A9314(ObjGrassStruct1_1* ptr, PlayState* play) {
spBC.z = (Rand_ZeroOne() - 0.5f) * 6.0f;
EffectSsKakera_Spawn(play, &spB0, &spBC, &spB0, -100, 64, 40, 3, 0,
- D_809AAB7C[(s32)(Rand_ZeroOne() * 111.1f) % 7], 0, 0, 80, -1, 1, gKakeraLeafTip);
+ D_809AAB7C[(s32)(Rand_ZeroOne() * 111.1f) % 7], 0, 0, 80, -1, 1, gKakeraLeafTipDL);
}
}
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 795d740f1..1554a2403 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
@@ -132,7 +132,7 @@ void func_809AAFE8(Vec3f* arg0, PlayState* play) {
spBC.z = (Rand_ZeroOne() - 0.5f) * 8.0f;
EffectSsKakera_Spawn(play, &spB0, &spBC, &spB0, -100, 64, 40, 3, 0,
- D_809ABC3C[(s32)(Rand_ZeroOne() * 111.1f) & 7], 0, 0, 80, -1, 1, gKakeraLeafMiddle);
+ D_809ABC3C[(s32)(Rand_ZeroOne() * 111.1f) & 7], 0, 0, 80, -1, 1, gKakeraLeafMiddleDL);
spB0.x = arg0->x + (ptr->x * 16.0f);
spB0.y = arg0->y + (ptr->y * 16.0f) + 10.0f;
@@ -143,7 +143,7 @@ void func_809AAFE8(Vec3f* arg0, PlayState* play) {
spBC.z = (Rand_ZeroOne() - 0.5f) * 6.0f;
EffectSsKakera_Spawn(play, &spB0, &spBC, &spB0, -100, 64, 40, 3, 0,
- D_809ABC3C[(s32)(Rand_ZeroOne() * 111.1f) % 7], 0, 0, 80, -1, 1, gKakeraLeafTip);
+ D_809ABC3C[(s32)(Rand_ZeroOne() * 111.1f) % 7], 0, 0, 80, -1, 1, gKakeraLeafTipDL);
}
}
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 6db03e1ca..8802a257d 100644
--- a/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c
+++ b/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c
@@ -112,7 +112,7 @@ void ObjHakaisi_Init(Actor* thisx, PlayState* play) {
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, sp7C);
this->unk_19A = 0;
this->unk_198 = 0;
- this->switchFlag = OBJHAKAISI_GET_SWITCHFLAG(thisx);
+ this->switchFlag = OBJHAKAISI_GET_SWITCH_FLAG(thisx);
this->csId = this->dyna.actor.csId;
if (this->switchFlag == 0xFF) {
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 1454181dd..7ee84768a 100644
--- a/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.h
+++ b/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.h
@@ -8,7 +8,7 @@ struct ObjHakaisi;
typedef void (*ObjHakaisiActionFunc)(struct ObjHakaisi*, PlayState*);
#define OBJHAKAISI_GET_FF(thisx) ((thisx)->params & 0xFF)
-#define OBJHAKAISI_GET_SWITCHFLAG(thisx) (((thisx)->params & 0xFF00) >> 8)
+#define OBJHAKAISI_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0xFF00) >> 8)
typedef struct ObjHakaisi {
/* 0x000 */ DynaPolyActor dyna;
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 f9d1f0252..5ccbf3d50 100644
--- a/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.c
+++ b/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.c
@@ -180,7 +180,7 @@ void ObjHamishi_Init(Actor* thisx, PlayState* play) {
func_809A13A0(this, play);
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 2.3f);
- if (Flags_GetSwitch(play, OBJHAMISHI_GET_SWITCHFLAG(&this->actor))) {
+ if (Flags_GetSwitch(play, OBJHAMISHI_GET_SWITCH_FLAG(&this->actor))) {
Actor_Kill(&this->actor);
return;
}
@@ -232,7 +232,7 @@ void ObjHamishi_Update(Actor* thisx, PlayState* play) {
} else {
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));
+ Flags_SetSwitch(play, OBJHAMISHI_GET_SWITCH_FLAG(&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 962a59612..48ea889d5 100644
--- a/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.h
+++ b/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.h
@@ -5,7 +5,7 @@
struct ObjHamishi;
-#define OBJHAMISHI_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F)
+#define OBJHAMISHI_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
typedef struct ObjHamishi {
/* 0x000 */ Actor actor;
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 5c63e0561..3dde506b9 100644
--- a/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.c
+++ b/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.c
@@ -44,7 +44,7 @@ void ObjHsStump_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
this->isHidden = OBJHSSTUMP_GET_ISHIDDEN(thisx);
- this->switchFlag = OBJHSSTUMP_GET_SWITCHFLAG(thisx);
+ this->switchFlag = OBJHSSTUMP_GET_SWITCH_FLAG(thisx);
DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
DynaPolyActor_LoadMesh(play, &this->dyna, &object_hsstump_Colheader_0011B0);
switch (this->isHidden) {
@@ -71,7 +71,7 @@ void ObjHsStump_SetupIdle(ObjHsStump* this, PlayState* play) {
}
void ObjHsStump_Idle(ObjHsStump* this, PlayState* play) {
- if (this->isHidden == true && Flags_GetSwitch(play, this->switchFlag)) {
+ if ((this->isHidden == true) && Flags_GetSwitch(play, this->switchFlag)) {
ObjHsStump_SetupAppear(this, play);
}
}
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 0f06fdfaf..479e17207 100644
--- a/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.h
+++ b/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.h
@@ -3,7 +3,7 @@
#include "global.h"
-#define OBJHSSTUMP_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F)
+#define OBJHSSTUMP_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
#define OBJHSSTUMP_GET_ISHIDDEN(thisx) (((thisx)->params >> 12) & 0xF)
struct ObjHsStump;
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 40e8b9323..5cced7f48 100644
--- a/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.c
+++ b/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.c
@@ -78,7 +78,7 @@ void ObjHsblock_Init(Actor* thisx, PlayState* play) {
func_8093E03C(this);
break;
case 1:
- if (Flags_GetSwitch(play, OBJHSBLOCK_GET_SWITCH(thisx))) {
+ if (Flags_GetSwitch(play, OBJHSBLOCK_GET_SWITCH_FLAG(thisx))) {
func_8093E03C(this);
} else {
func_8093E05C(this);
@@ -106,7 +106,7 @@ void func_8093E05C(ObjHsblock* this) {
}
void func_8093E0A0(ObjHsblock* this, PlayState* play) {
- if (Flags_GetSwitch(play, OBJHSBLOCK_GET_SWITCH(&this->dyna.actor))) {
+ if (Flags_GetSwitch(play, OBJHSBLOCK_GET_SWITCH_FLAG(&this->dyna.actor))) {
func_8093E0E8(this);
}
}
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 f91926409..ca2d81c63 100644
--- a/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.h
+++ b/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.h
@@ -3,7 +3,7 @@
#include "global.h"
-#define OBJHSBLOCK_GET_SWITCH(thisx) (((thisx)->params >> 8) & 0x7F)
+#define OBJHSBLOCK_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0x7F)
#define OBJHSBLOCK_GET_3(thisx) ((thisx)->params & 3)
#define OBJHSBLOCK_GET_5(thisx) (((thisx)->params >> 5) & 1)
#define OBJHSBLOCK_GET_6(thisx) (((thisx)->params >> 6) & 3)
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 b04dff8a0..a2b376a28 100644
--- a/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c
+++ b/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c
@@ -340,7 +340,7 @@ void ObjHugebombiwa_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->actor, sInitChain);
Collider_InitCylinder(play, &this->collider);
- if (Flags_GetSwitch(play, ENHUGEBOMBIWA_GET_7F(&this->actor))) {
+ if (Flags_GetSwitch(play, ENHUGEBOMBIWA_GET_SWITCH_FLAG(&this->actor))) {
Actor_Kill(&this->actor);
return;
}
@@ -409,19 +409,19 @@ void func_80A54CEC(ObjHugebombiwa* this, PlayState* play) {
if (CutsceneManager_IsNext(this->actor.csId)) {
CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
- Flags_SetSwitch(play, ENHUGEBOMBIWA_GET_7F(&this->actor));
- if (!(ENHUGEBOMBIWA_GET_100(&this->actor)) &&
+ Flags_SetSwitch(play, ENHUGEBOMBIWA_GET_SWITCH_FLAG(&this->actor));
+ if (!ENHUGEBOMBIWA_GET_100(&this->actor) &&
((play->sceneId == SCENE_17SETUGEN) || (play->sceneId == SCENE_17SETUGEN2))) {
SET_WEEKEVENTREG(WEEKEVENTREG_19_02);
}
- if (!(ENHUGEBOMBIWA_GET_100(&this->actor))) {
+ if (!ENHUGEBOMBIWA_GET_100(&this->actor)) {
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 80, NA_SE_EV_WALL_BROKEN);
} else {
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 80, NA_SE_EV_SNOWBALL_BROKEN);
}
- if (!(ENHUGEBOMBIWA_GET_100(&this->actor))) {
+ if (!ENHUGEBOMBIWA_GET_100(&this->actor)) {
func_80A53BE0(play, &this->actor.world.pos);
func_80A54E10(this);
} else {
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 932a61c3d..bb34c5013 100644
--- a/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.h
+++ b/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.h
@@ -7,7 +7,7 @@ struct ObjHugebombiwa;
typedef void (*ObjHugebombiwaActionFunc)(struct ObjHugebombiwa*, PlayState*);
-#define ENHUGEBOMBIWA_GET_7F(thisx) ((thisx)->params & 0x7F)
+#define ENHUGEBOMBIWA_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
#define ENHUGEBOMBIWA_GET_100(thisx) (((thisx)->params >> 8) & 1)
typedef struct {
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 f44033861..8ee8520ed 100644
--- a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c
+++ b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c
@@ -65,20 +65,20 @@ static InitChainEntry sInitChain[] = {
ICHAIN_F32(uncullZoneDownward, 400, ICHAIN_STOP),
};
-s32 func_80B9C450(PlayState* play, s32 arg1, s32 arg2) {
+s32 func_80B9C450(PlayState* play, s32 switchFlagBase, s32 arg2) {
s32 sp2C = 1;
if (arg2 < ARRAY_COUNT(D_80B9DC70)) {
- s32 val = D_80B9DC70[arg2].unk_00;
+ s32 switchFlagOffset = D_80B9DC70[arg2].unk_00;
s32 val3 = D_80B9DC70[arg2].unk_01;
- while (val--) {
- if ((1 << val) & val3) {
- if (!Flags_GetSwitch(play, arg1 + val)) {
+ while (switchFlagOffset--) {
+ if ((1 << switchFlagOffset) & val3) {
+ if (!Flags_GetSwitch(play, switchFlagBase + switchFlagOffset)) {
sp2C = 0;
break;
}
- } else if (Flags_GetSwitch(play, arg1 + val)) {
+ } else if (Flags_GetSwitch(play, switchFlagBase + switchFlagOffset)) {
sp2C = 0;
break;
}
@@ -87,23 +87,26 @@ s32 func_80B9C450(PlayState* play, s32 arg1, s32 arg2) {
sp2C = 0;
switch (arg2) {
case 14:
- if (!Flags_GetSwitch(play, arg1)) {
+ if (!Flags_GetSwitch(play, switchFlagBase)) {
sp2C = 1;
}
- if (Flags_GetSwitch(play, arg1 + 1) && Flags_GetSwitch(play, arg1 + 2) &&
- Flags_GetSwitch(play, arg1 + 3)) {
+ if (Flags_GetSwitch(play, switchFlagBase + 1) && Flags_GetSwitch(play, switchFlagBase + 2) &&
+ Flags_GetSwitch(play, switchFlagBase + 3)) {
sp2C += 2;
}
break;
case 15:
- if (!Flags_GetSwitch(play, arg1) ||
- (Flags_GetSwitch(play, arg1 + 1) && Flags_GetSwitch(play, arg1 + 2) &&
- Flags_GetSwitch(play, arg1 + 3))) {
+ if (!Flags_GetSwitch(play, switchFlagBase) ||
+ (Flags_GetSwitch(play, switchFlagBase + 1) && Flags_GetSwitch(play, switchFlagBase + 2) &&
+ Flags_GetSwitch(play, switchFlagBase + 3))) {
sp2C = 1;
}
break;
+
+ default:
+ break;
}
}
return sp2C;
@@ -204,7 +207,7 @@ void ObjHunsui_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
this->unk_160 = OBJHUNSUI_GET_F000(thisx);
this->unk_164 = OBJHUNSUI_GET_F80(thisx);
- this->unk_168 = OBJHUNSUI_GET_7F(thisx);
+ this->switchFlag = OBJHUNSUI_GET_SWITCH_FLAG(thisx);
DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
if ((this->unk_160 != OBJHUNSUI_F000_5) && (this->unk_160 != OBJHUNSUI_F000_6)) {
@@ -279,7 +282,7 @@ void ObjHunsui_Init(Actor* thisx, PlayState* play) {
case OBJHUNSUI_F000_1:
this->dyna.actor.draw = func_80B9DA60;
- if ((this->unk_172 & 1) && func_80B9C450(play, this->unk_168, this->unk_164)) {
+ if ((this->unk_172 & 1) && func_80B9C450(play, this->switchFlag, this->unk_164)) {
this->unk_174 = 240.0f;
this->unk_172 |= 4;
this->unk_184 = 0xFF0;
@@ -289,7 +292,7 @@ void ObjHunsui_Init(Actor* thisx, PlayState* play) {
this->unk_184 = 0;
}
this->unk_178 = this->unk_174;
- this->unk_180 = func_80B9C450(play, this->unk_168, this->unk_164);
+ this->unk_180 = func_80B9C450(play, this->switchFlag, this->unk_164);
this->actionFunc = func_80B9CE64;
break;
@@ -304,7 +307,7 @@ void ObjHunsui_Init(Actor* thisx, PlayState* play) {
func_80B9D2BC(this, play);
this->unk_178 = this->unk_174;
} else {
- if ((this->unk_172 & 1) || func_80B9C450(play, this->unk_168, this->unk_164)) {
+ if ((this->unk_172 & 1) || func_80B9C450(play, this->switchFlag, this->unk_164)) {
func_80B9D4D0(this, play);
} else {
func_80B9D0FC(this, play);
@@ -351,7 +354,7 @@ void func_80B9CE64(ObjHunsui* this, PlayState* play) {
this->unk_18A += 0x71C;
Math_SmoothStepToF(&this->unk_190, this->unk_194, 1.0f, 0.2f, 0.01f);
- sp2C = func_80B9C450(play, this->unk_168, this->unk_164);
+ sp2C = func_80B9C450(play, this->switchFlag, this->unk_164);
if (!(this->unk_172 & 1)) {
if (sp2C != this->unk_180) {
@@ -446,7 +449,7 @@ void func_80B9D120(ObjHunsui* this, PlayState* play) {
this->unk_172 |= 2;
}
- if (func_80B9C450(play, this->unk_168, this->unk_164)) {
+ if (func_80B9C450(play, this->switchFlag, this->unk_164)) {
this->csId = this->csIdList[0];
this->unk_172 |= 0x40;
func_80B9D4D0(this, play);
@@ -463,7 +466,7 @@ s32 func_80B9D288(PlayState* play, Actor* thisx, Actor* iter, void* verifyData)
}
void func_80B9D2BC(ObjHunsui* this, PlayState* play) {
- if ((this->unk_172 & 1) || func_80B9C450(play, this->unk_168, this->unk_164)) {
+ if ((this->unk_172 & 1) || func_80B9C450(play, this->switchFlag, this->unk_164)) {
func_80B9D4D0(this, play);
} else {
this->unk_172 |= 2;
@@ -559,7 +562,7 @@ void func_80B9D508(ObjHunsui* this, PlayState* play) {
this->unk_1B0 += -8.0f + (0.9f * (this->dyna.actor.world.pos.y - this->dyna.actor.prevPos.y));
}
- if (!(this->unk_172 & 1) && !func_80B9C450(play, this->unk_168, this->unk_164)) {
+ if (!(this->unk_172 & 1) && !func_80B9C450(play, this->switchFlag, this->unk_164)) {
this->csId = this->csIdList[0];
this->unk_172 |= 0x40;
func_80B9D0FC(this, play);
@@ -576,7 +579,7 @@ void func_80B9D714(ObjHunsui* this, PlayState* play) {
(this->unk_16D != play->roomCtx.curRoom.num) && (this->unk_16D != play->roomCtx.prevRoom.num)) {
Actor_Kill(&this->dyna.actor);
} else {
- if (Flags_GetSwitch(play, this->unk_168)) {
+ if (Flags_GetSwitch(play, this->switchFlag)) {
this->unk_172 &= ~2;
this->unk_172 |= 0x10;
csId = this->dyna.actor.csId;
@@ -600,7 +603,7 @@ void func_80B9D714(ObjHunsui* this, PlayState* play) {
if (Math_SmoothStepToF(&this->dyna.actor.world.pos.y, this->dyna.actor.home.pos.y + 800.0f, 0.1f, 8.0f,
1.0f) < 0.5f) {
if (DECR(this->unk_16E) == 0) {
- Flags_UnsetSwitch(play, this->unk_168);
+ Flags_UnsetSwitch(play, this->switchFlag);
}
}
this->dyna.actor.velocity.y = this->dyna.actor.world.pos.y - this->dyna.actor.prevPos.y;
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 1f0450b28..a0b42a648 100644
--- a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.h
+++ b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.h
@@ -8,7 +8,7 @@ struct ObjHunsui;
typedef void (*ObjHunsuiActionFunc)(struct ObjHunsui*, PlayState*);
-#define OBJHUNSUI_GET_7F(thisx) ((thisx)->params & 0x7F)
+#define OBJHUNSUI_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
#define OBJHUNSUI_GET_F80(thisx) (((thisx)->params >> 7) & 0x1F)
#define OBJHUNSUI_GET_F000(thisx) (((thisx)->params >> 0xC) & 0xF)
@@ -27,7 +27,7 @@ typedef struct ObjHunsui {
/* 0x15C */ ObjHunsuiActionFunc actionFunc;
/* 0x160 */ s16 unk_160;
/* 0x164 */ s32 unk_164;
- /* 0x168 */ s32 unk_168;
+ /* 0x168 */ s32 switchFlag;
/* 0x16C */ s8 unk_16C;
/* 0x16D */ s8 unk_16D;
/* 0x16E */ s8 unk_16E;
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 9b3a08bda..8df527f37 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
@@ -81,7 +81,7 @@ void ObjIcePoly_Init(Actor* thisx, PlayState* play) {
ObjIcePoly* this = THIS;
s32 i;
- this->unk_149 = OBJICEPOLY_GET_FF00(thisx);
+ this->switchFlag = OBJICEPOLY_GET_SWITCH_FLAG(thisx);
thisx->params &= 0xFF;
thisx->uncullZoneForward = 5600.0f;
@@ -115,7 +115,7 @@ void ObjIcePoly_Init(Actor* thisx, PlayState* play) {
thisx->shape.rot.x = 0x500;
thisx->shape.rot.z = -0x500;
- if (((this->unk_149 != OBJICEPOLY_FF_FF) && Flags_GetSwitch(play, this->unk_149)) ||
+ if (((this->switchFlag != 0xFF) && Flags_GetSwitch(play, this->switchFlag)) ||
((play->sceneId == SCENE_KAJIYA) && CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE))) {
Actor_Kill(thisx);
return;
@@ -219,7 +219,7 @@ void func_80931A38(ObjIcePoly* this, PlayState* play) {
}
} while (actor != NULL);
}
- } else if ((this->unk_149 != OBJICEPOLY_FF_FF) && Flags_GetSwitch(play, this->unk_149)) {
+ } else if ((this->switchFlag != 0xFF) && Flags_GetSwitch(play, this->switchFlag)) {
CutsceneManager_Queue(this->actor.csId);
this->unk_14A = 1;
this->actionFunc = func_80931E58;
@@ -328,8 +328,8 @@ void func_80931EEC(ObjIcePoly* this, PlayState* play) {
if (this->unk_14A == 0) {
CutsceneManager_Stop(this->actor.csId);
- if (this->unk_149 != OBJICEPOLY_FF_FF) {
- Flags_SetSwitch(play, this->unk_149);
+ if (this->switchFlag != 0xFF) {
+ Flags_SetSwitch(play, this->switchFlag);
}
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 b081a7250..3e59cd92e 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
@@ -7,15 +7,13 @@ struct ObjIcePoly;
typedef void (*ObjIcePolyActionFunc)(struct ObjIcePoly*, PlayState*);
-#define OBJICEPOLY_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF)
-
-#define OBJICEPOLY_FF_FF 0xFF
+#define OBJICEPOLY_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0xFF)
typedef struct ObjIcePoly {
/* 0x000 */ Actor actor;
/* 0x144 */ ObjIcePolyActionFunc actionFunc;
/* 0x148 */ u8 unk_148;
- /* 0x149 */ u8 unk_149;
+ /* 0x149 */ u8 switchFlag;
/* 0x14A */ s16 unk_14A;
/* 0x14C */ ColliderCylinder colliders1[2];
/* 0x1E4 */ ColliderCylinder colliders2[2];
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 e33f62f8b..3885041fd 100644
--- a/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c
+++ b/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c
@@ -68,7 +68,7 @@ static ColliderCylinderInit sCylinderInit = {
{ 15, 30, 0, { 0, 0, 0 } },
};
-static s16 sObjectIdList[] = { GAMEPLAY_DANGEON_KEEP, OBJECT_KIBAKO };
+static s16 sObjectIds[] = { GAMEPLAY_DANGEON_KEEP, OBJECT_KIBAKO };
static Gfx* sKakeraDisplayLists[] = { gameplay_dangeon_keep_DL_007980, gSmallCrateFragmentDL };
@@ -135,12 +135,12 @@ void func_80926394(ObjKibako* this, PlayState* play) {
void ObjKibako_Init(Actor* thisx, PlayState* play2) {
PlayState* play = play2;
ObjKibako* this = THIS;
- s32 whichBankIndex;
+ s32 objectIndex;
- whichBankIndex = KIBAKO_BANK_INDEX(thisx);
+ objectIndex = KIBAKO_BANK_INDEX(thisx);
Actor_ProcessInitChain(&this->actor, sInitChain);
Actor_SetScale(&this->actor, 0.15f);
- if (whichBankIndex == 0) {
+ if (objectIndex == 0) {
this->actor.uncullZoneForward = 4000.0f;
} else {
this->actor.uncullZoneForward = 800.0f;
@@ -149,8 +149,8 @@ void ObjKibako_Init(Actor* thisx, PlayState* play2) {
Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
Collider_UpdateCylinder(&this->actor, &this->collider);
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
- this->bankIndex = Object_GetIndex(&play->objectCtx, sObjectIdList[whichBankIndex]);
- if (this->bankIndex < 0) {
+ this->objectSlot = Object_GetSlot(&play->objectCtx, sObjectIds[objectIndex]);
+ if (this->objectSlot <= OBJECT_SLOT_NONE) {
Actor_Kill(&this->actor);
return;
}
@@ -197,7 +197,7 @@ void ObjKibako_AirBreak(ObjKibako* this, PlayState* play) {
}
EffectSsKakera_Spawn(play, &pos, &velocity, worldPos, -200, phi_s0, 20, 0, 0, (Rand_ZeroOne() * 38.0f) + 10.0f,
- 0, 0, 60, -1, sObjectIdList[KIBAKO_BANK_INDEX(&this->actor)],
+ 0, 0, 60, -1, sObjectIds[KIBAKO_BANK_INDEX(&this->actor)],
sKakeraDisplayLists[KIBAKO_BANK_INDEX(&this->actor)]);
}
@@ -241,7 +241,7 @@ void ObjKibako_WaterBreak(ObjKibako* this, PlayState* play) {
phi_s0 = (temp_rand < 0.2f) ? 0x40 : 0x20;
EffectSsKakera_Spawn(play, &pos, &velocity, worldPos, -180, phi_s0, 50, 5, 0, (Rand_ZeroOne() * 35.0f) + 10.0f,
- 0, 0, 70, -1, sObjectIdList[KIBAKO_BANK_INDEX(&this->actor)],
+ 0, 0, 70, -1, sObjectIds[KIBAKO_BANK_INDEX(&this->actor)],
sKakeraDisplayLists[KIBAKO_BANK_INDEX(&this->actor)]);
}
}
@@ -254,9 +254,9 @@ void func_80926B54(ObjKibako* this, PlayState* play) {
Actor_MoveWithGravity(&this->actor);
Actor_UpdateBgCheckInfo(play, &this->actor, 18.0f, 15.0f, 0.0f,
UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40);
- if (Object_IsLoaded(&play->objectCtx, this->bankIndex)) {
+ if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) {
this->actor.draw = ObjKibako_Draw;
- this->actor.objBankIndex = this->bankIndex;
+ this->actor.objectSlot = this->objectSlot;
ObjKibako_SetupIdle(this);
}
}
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 102dd1e1b..274a335d4 100644
--- a/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.h
+++ b/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.h
@@ -17,7 +17,7 @@ typedef struct ObjKibako {
/* 0x144 */ ObjKibakoActionFunc actionFunc;
/* 0x148 */ ColliderCylinder collider;
/* 0x194 */ s16 timer;
- /* 0x196 */ s16 bankIndex;
+ /* 0x196 */ s16 objectSlot;
/* 0x198 */ s8 isDropCollected;
/* 0x199 */ s8 unk199; /* room? */
} ObjKibako; // size = 0x19C
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 1ca298f79..94937b164 100644
--- a/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c
+++ b/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c
@@ -42,11 +42,11 @@ void ObjKzsaku_Init(Actor* thisx, PlayState* play) {
Actor_SetScale(&this->dyna.actor, 1.0f);
DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
- CollisionHeader_GetVirtual(&object_kzsaku_Colheader_001118, &col);
+ CollisionHeader_GetVirtual(&gUnderwaterGrateCol, &col);
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, thisx, col);
- this->switchFlag = KZSAKU_GET_SWITCHFLAG(thisx);
+ this->switchFlag = KZSAKU_GET_SWITCH_FLAG(thisx);
this->raisedAmount = 0.0f;
if (Flags_GetSwitch(play, this->switchFlag)) {
@@ -124,7 +124,7 @@ void ObjKzsaku_Draw(Actor* thisx, PlayState* play) {
Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_OPA_DISP++, object_kzsaku_DL_000040);
+ gSPDisplayList(POLY_OPA_DISP++, gUnderwaterGrateDL);
CLOSE_DISPS(play->state.gfxCtx);
}
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 0a6f00187..2af2db8ab 100644
--- a/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.h
+++ b/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.h
@@ -3,7 +3,7 @@
#include "global.h"
-#define KZSAKU_GET_SWITCHFLAG(thisx) (((thisx)->params & 0x7F00) >> 8)
+#define KZSAKU_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0x7F00) >> 8)
struct ObjKzsaku;
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 88d04b780..9e92dcb11 100644
--- a/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.c
+++ b/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.c
@@ -101,7 +101,7 @@ void ObjLift_Init(Actor* thisx, PlayState* play) {
this->unk_178 = this->dyna.actor.home.rot.z;
this->dyna.actor.home.rot.z = this->dyna.actor.world.rot.z = this->dyna.actor.shape.rot.z;
DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
- if ((this->unk_178 <= 0) && (Flags_GetSwitch(play, OBJLIFT_GET_7F(&this->dyna.actor)))) {
+ if ((this->unk_178 <= 0) && (Flags_GetSwitch(play, OBJLIFT_GET_SWITCH_FLAG(&this->dyna.actor)))) {
Actor_Kill(&this->dyna.actor);
return;
}
@@ -196,7 +196,7 @@ void func_8093DA48(ObjLift* this, PlayState* play) {
func_8093DB70(this);
DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
} else {
- Flags_SetSwitch(play, OBJLIFT_GET_7F(&this->dyna.actor));
+ Flags_SetSwitch(play, OBJLIFT_GET_SWITCH_FLAG(&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 b7f2af050..ae973ecbf 100644
--- a/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.h
+++ b/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.h
@@ -5,7 +5,7 @@
#define OBJLIFT_GET_1(thisx) ((thisx)->params & 1)
#define OBJLIFT_GET_7(thisx) (((thisx)->params >> 8) & 7)
-#define OBJLIFT_GET_7F(thisx) (((thisx)->params >> 1) & 0x7F)
+#define OBJLIFT_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 1) & 0x7F)
struct ObjLift;
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 6a6937e7e..28ead0679 100644
--- a/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c
+++ b/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c
@@ -5,6 +5,7 @@
*/
#include "z_obj_lightblock.h"
+#include "overlays/actors/ovl_Demo_Effect/z_demo_effect.h"
#include "objects/object_lightblock/object_lightblock.h"
#define FLAGS 0x00000000
@@ -15,12 +16,12 @@ void ObjLightblock_Init(Actor* thisx, PlayState* play);
void ObjLightblock_Destroy(Actor* thisx, PlayState* play);
void ObjLightblock_Update(Actor* thisx, PlayState* play);
void ObjLightblock_Draw(Actor* thisx, PlayState* play);
-void func_80AF3AC8(ObjLightblock* this);
-void func_80AF3ADC(ObjLightblock* this, PlayState* play);
-void func_80AF3B8C(ObjLightblock* this);
-void func_80AF3BA0(ObjLightblock* this, PlayState* play);
-void func_80AF3C18(ObjLightblock* this);
-void func_80AF3C34(ObjLightblock* this, PlayState* play);
+void ObjLightblock_SetupWait(ObjLightblock* this);
+void ObjLightblock_Wait(ObjLightblock* this, PlayState* play);
+void ObjLightblock_SetupPlayCutscene(ObjLightblock* this);
+void ObjLightblock_PlayCutscene(ObjLightblock* this, PlayState* play);
+void ObjLightblock_SetupFadeAway(ObjLightblock* this);
+void ObjLightblock_FadeAway(ObjLightblock* this, PlayState* play);
ActorInit Obj_Lightblock_InitVars = {
ACTOR_OBJ_LIGHTBLOCK,
@@ -54,17 +55,17 @@ static ColliderCylinderInit sCylinderInit = {
{ 84, 120, 0, { 0, 0, 0 } },
};
-typedef struct {
+typedef struct LightblockTypeVars {
/* 0x0 */ f32 scale;
/* 0x4 */ s16 radius;
/* 0x6 */ s16 height;
/* 0x8 */ s16 yShift;
- /* 0xC */ s32 params;
+ /* 0xC */ s32 effectParams;
} LightblockTypeVars; // size = 0x10
static LightblockTypeVars sLightblockTypeVars[] = {
- { 0.1f, 76, 80, 19, 2 },
- { (1.0f / 6), 126, 144, 19, 3 },
+ { 0.1f, 76, 80, 19, DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_LARGE },
+ { (1.0f / 6.0f), 126, 144, 19, DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_VERY_LARGE },
};
static InitChainEntry sInitChain[] = {
@@ -76,11 +77,11 @@ static InitChainEntry sInitChain[] = {
extern Gfx D_801AEF88[];
extern Gfx D_801AEFA0[];
-void func_80AF3910(ObjLightblock* this, PlayState* play) {
+void ObjLightblock_SpawnEffect(ObjLightblock* this, PlayState* play) {
LightblockTypeVars* typeVars = &sLightblockTypeVars[LIGHTBLOCK_TYPE(&this->dyna.actor)];
Actor_Spawn(&play->actorCtx, play, ACTOR_DEMO_EFFECT, this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y,
- this->dyna.actor.world.pos.z, 0, 0, 0, typeVars->params);
+ this->dyna.actor.world.pos.z, 0, 0, 0, typeVars->effectParams);
}
void ObjLightblock_Init(Actor* thisx, PlayState* play) {
@@ -92,19 +93,19 @@ void ObjLightblock_Init(Actor* thisx, PlayState* play) {
Actor_SetScale(&this->dyna.actor, typeVars->scale);
DynaPolyActor_Init(&this->dyna, 0);
Collider_InitCylinder(play, &this->collider);
- if (Flags_GetSwitch(play, LIGHTBLOCK_DESTROYED(&this->dyna.actor))) {
+ if (Flags_GetSwitch(play, LIGHTBLOCK_GET_DESTROYED_SWITCH_FLAG(&this->dyna.actor))) {
Actor_Kill(&this->dyna.actor);
return;
}
- DynaPolyActor_LoadMesh(play, &this->dyna, &object_lightblock_Colheader_000B80);
+ DynaPolyActor_LoadMesh(play, &this->dyna, &gSunBlockCol);
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);
+ ObjLightblock_SetupWait(this);
}
void ObjLightblock_Destroy(Actor* thisx, PlayState* play) {
@@ -114,11 +115,14 @@ void ObjLightblock_Destroy(Actor* thisx, PlayState* play) {
Collider_DestroyCylinder(play, &this->collider);
}
-void func_80AF3AC8(ObjLightblock* this) {
- this->actionFunc = func_80AF3ADC;
+void ObjLightblock_SetupWait(ObjLightblock* this) {
+ this->actionFunc = ObjLightblock_Wait;
}
-void func_80AF3ADC(ObjLightblock* this, PlayState* play) {
+/**
+ * Wait for a single collision from a Light Arrow or 8 frames of Mirror Shield ray collision.
+ */
+void ObjLightblock_Wait(ObjLightblock* this, PlayState* play) {
if (this->collider.base.acFlags & AC_HIT) {
this->collider.base.acFlags &= ~AC_HIT;
// light arrows
@@ -135,39 +139,36 @@ void func_80AF3ADC(ObjLightblock* this, PlayState* play) {
if (this->collisionCounter >= 8) {
CutsceneManager_Queue(this->dyna.actor.csId);
- func_80AF3B8C(this);
+ ObjLightblock_SetupPlayCutscene(this);
} else {
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
}
}
-void func_80AF3B8C(ObjLightblock* this) {
- this->actionFunc = func_80AF3BA0;
+void ObjLightblock_SetupPlayCutscene(ObjLightblock* this) {
+ this->actionFunc = ObjLightblock_PlayCutscene;
}
-void func_80AF3BA0(ObjLightblock* this, PlayState* play) {
+void ObjLightblock_PlayCutscene(ObjLightblock* this, PlayState* play) {
if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
- Flags_SetSwitch(play, LIGHTBLOCK_DESTROYED(&this->dyna.actor));
- func_80AF3910(this, play);
- func_80AF3C18(this);
+ Flags_SetSwitch(play, LIGHTBLOCK_GET_DESTROYED_SWITCH_FLAG(&this->dyna.actor));
+ ObjLightblock_SpawnEffect(this, play);
+ ObjLightblock_SetupFadeAway(this);
} else {
CutsceneManager_Queue(this->dyna.actor.csId);
}
}
-void func_80AF3C18(ObjLightblock* this) {
+void ObjLightblock_SetupFadeAway(ObjLightblock* this) {
this->timer = 80;
- this->actionFunc = func_80AF3C34;
+ this->actionFunc = ObjLightblock_FadeAway;
}
-void func_80AF3C34(ObjLightblock* this, PlayState* play) {
- s8 csId;
-
+void ObjLightblock_FadeAway(ObjLightblock* this, PlayState* play) {
this->timer--;
if (this->timer <= 0) {
- csId = this->dyna.actor.csId;
- CutsceneManager_Stop(csId);
+ CutsceneManager_Stop(this->dyna.actor.csId);
Actor_Kill(&this->dyna.actor);
return;
}
@@ -199,13 +200,13 @@ void ObjLightblock_Draw(Actor* thisx, PlayState* play) {
gSPSegment(POLY_XLU_DISP++, 0x08, D_801AEF88);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, this->alpha);
- gSPDisplayList(POLY_XLU_DISP++, object_lightblock_DL_000178);
+ gSPDisplayList(POLY_XLU_DISP++, gSunBlockDL);
} else {
Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, D_801AEFA0);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x80, 255, 255, 255, 255);
- gSPDisplayList(POLY_OPA_DISP++, object_lightblock_DL_000178);
+ gSPDisplayList(POLY_OPA_DISP++, gSunBlockDL);
}
CLOSE_DISPS(play->state.gfxCtx);
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 63a106dac..c1c1bcbb7 100644
--- a/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.h
+++ b/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.h
@@ -4,7 +4,7 @@
#include "global.h"
#define LIGHTBLOCK_TYPE(thisx) ((thisx)->params & 1)
-#define LIGHTBLOCK_DESTROYED(thisx) (((thisx)->params >> 8) & 0x7F)
+#define LIGHTBLOCK_GET_DESTROYED_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0x7F)
struct ObjLightblock;
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 39cb3abd2..1acb015ea 100644
--- a/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c
+++ b/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c
@@ -100,9 +100,9 @@ void ObjLightswitch_UpdateSwitchFlags(ObjLightswitch* this, PlayState* play, s32
if (this) {}
if (set) {
- Flags_SetSwitch(play, LIGHTSWITCH_GET_SWITCHFLAG(&this->actor));
+ Flags_SetSwitch(play, LIGHTSWITCH_GET_SWITCH_FLAG(&this->actor));
} else {
- Flags_UnsetSwitch(play, LIGHTSWITCH_GET_SWITCHFLAG(&this->actor));
+ Flags_UnsetSwitch(play, LIGHTSWITCH_GET_SWITCH_FLAG(&this->actor));
}
}
@@ -150,7 +150,7 @@ void ObjLightswitch_Init(Actor* thisx, PlayState* play) {
u32 isSwitchActivated;
s32 isTriggered;
- isSwitchActivated = Flags_GetSwitch(play, LIGHTSWITCH_GET_SWITCHFLAG(&this->actor));
+ isSwitchActivated = Flags_GetSwitch(play, LIGHTSWITCH_GET_SWITCH_FLAG(&this->actor));
isTriggered = false;
Actor_ProcessInitChain(&this->actor, sInitChain);
Actor_SetFocus(&this->actor, 0.0f);
@@ -264,7 +264,7 @@ void ObjLightSwitch_Enabled(ObjLightswitch* this, PlayState* play) {
if (actorType == LIGHTSWITCH_TYPE_REGULAR) {
// switch can be disabled outside of this actor by flag
- if (!Flags_GetSwitch(play, LIGHTSWITCH_GET_SWITCHFLAG(&this->actor))) {
+ if (!Flags_GetSwitch(play, LIGHTSWITCH_GET_SWITCH_FLAG(&this->actor))) {
ObjLightSwitch_SetupDisabled(this);
}
} else if (actorType == LIGHTSWITCH_TYPE_FLIP) {
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 c26dab262..c81a87057 100644
--- a/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.h
+++ b/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.h
@@ -40,6 +40,6 @@ typedef struct ObjLightswitch {
#define LIGHTSWITCH_GET_TYPE(thisx) (((thisx)->params >> 4) & 0x3)
#define LIGHTSWITCH_GET_INVISIBLE(thisx) (((thisx)->params >> 3) & 1)
-#define LIGHTSWITCH_GET_SWITCHFLAG(thisx) (((thisx)->params >> 8) & 0x7F)
+#define LIGHTSWITCH_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0x7F)
#endif // Z_OBJ_LIGHTSWITCH_H
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 da16d938f..c7605c825 100644
--- a/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.c
+++ b/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.c
@@ -53,7 +53,7 @@ void ObjMakekinsuta_Init(Actor* thisx, PlayState* play) {
if (!func_8099FA40(this, play)) {
this->unk144 = -1;
}
- if (Flags_GetSwitch(play, OBJMAKEKINSUTA_GET_SWITCH_FLAGS(thisx))) {
+ if (Flags_GetSwitch(play, OBJMAKEKINSUTA_GET_SWITCH_FLAG(thisx))) {
Actor_Kill(&this->actor);
}
}
@@ -62,7 +62,7 @@ void ObjMakekinsuta_Destroy(Actor* thisx, PlayState* play) {
ObjMakekinsuta* this = THIS;
if (func_8099FA40(this, play)) {
- Flags_UnsetSwitch(play, OBJMAKEKINSUTA_GET_SWITCH_FLAGS(thisx));
+ Flags_UnsetSwitch(play, OBJMAKEKINSUTA_GET_SWITCH_FLAG(thisx));
}
}
@@ -107,7 +107,7 @@ void func_8099FB64(Actor* thisx, PlayState* play) {
void ObjMakekinsuta_Update(Actor* thisx, PlayState* play) {
ObjMakekinsuta* this = THIS;
- if (Flags_GetSwitch(play, OBJMAKEKINSUTA_GET_SWITCH_FLAGS(thisx))) {
+ if (Flags_GetSwitch(play, OBJMAKEKINSUTA_GET_SWITCH_FLAG(thisx))) {
this->actor.update = func_8099FD7C;
CutsceneManager_Queue(this->actor.csId);
} else {
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 17c9220e2..6afe50e1a 100644
--- a/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.h
+++ b/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.h
@@ -8,7 +8,7 @@ struct ObjMakekinsuta;
#define OBJMAKEKINSUTA_GET_1F(thisx) (((thisx)->params >> 8) & 0x1F)
#define OBJMAKEKINSUTA_GETS_3(params) ((params & 3) & 0xFF)
#define OBJMAKEKINSUTA_GETS_3FC(params) (((params & 0x3FC) >> 2) & 0xFF)
-#define OBJMAKEKINSUTA_GET_SWITCH_FLAGS(thisx) ((thisx)->params & 0x7F)
+#define OBJMAKEKINSUTA_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
typedef struct ObjMakekinsuta {
/* 0x000 */ Actor actor;
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 bcef92843..76ccba1b1 100644
--- a/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c
+++ b/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c
@@ -27,8 +27,8 @@ ActorInit Obj_Makeoshihiki_InitVars = {
s32 ObjMakeoshihiki_GetChildSpawnPointIndex(ObjMakeoshihiki* this, PlayState* play) {
s32 pad;
- s32 pathIndexOffset1 = Flags_GetSwitch(play, OBJMAKEOSHIHIKI_GET_SWITCHFLAG_1(&this->actor)) ? 1 : 0;
- s32 pathIndexOffset2 = Flags_GetSwitch(play, OBJMAKEOSHIHIKI_GET_SWITCHFLAG_2(&this->actor)) ? 2 : 0;
+ s32 pathIndexOffset1 = Flags_GetSwitch(play, OBJMAKEOSHIHIKI_GET_SWITCH_FLAG_1(&this->actor)) ? 1 : 0;
+ s32 pathIndexOffset2 = Flags_GetSwitch(play, OBJMAKEOSHIHIKI_GET_SWITCH_FLAG_2(&this->actor)) ? 2 : 0;
return pathIndexOffset1 + pathIndexOffset2;
}
@@ -39,8 +39,8 @@ void ObjMakeoshihiki_SetSwitchFlags(ObjMakeoshihiki* this, PlayState* play, s32
s32 switchFlag1;
s32 switchFlag2;
- switchFlag2 = OBJMAKEOSHIHIKI_GET_SWITCHFLAG_2(&this->actor);
- switchFlag1 = OBJMAKEOSHIHIKI_GET_SWITCHFLAG_1(&this->actor);
+ switchFlag2 = OBJMAKEOSHIHIKI_GET_SWITCH_FLAG_2(&this->actor);
+ switchFlag1 = OBJMAKEOSHIHIKI_GET_SWITCH_FLAG_1(&this->actor);
if (pathIndex & 2) {
Flags_SetSwitch(play, switchFlag2);
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 fbe8c1283..c9ae90921 100644
--- a/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.h
+++ b/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.h
@@ -6,8 +6,8 @@
struct ObjMakeoshihiki;
#define OBJMAKEOSHIHIKI_GET_PATH_INDEX(thisx) (((thisx)->params >> 7) & 0x7F)
-#define OBJMAKEOSHIHIKI_GET_SWITCHFLAG_1(thisx) ((thisx)->home.rot.z & 0x7F)
-#define OBJMAKEOSHIHIKI_GET_SWITCHFLAG_2(thisx) ((thisx)->params & 0x7F)
+#define OBJMAKEOSHIHIKI_GET_SWITCH_FLAG_1(thisx) ((thisx)->home.rot.z & 0x7F)
+#define OBJMAKEOSHIHIKI_GET_SWITCH_FLAG_2(thisx) ((thisx)->params & 0x7F)
typedef struct ObjMakeoshihiki {
/* 0x000 */ Actor actor;
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 10f12c64a..d894c64a6 100644
--- a/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c
+++ b/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c
@@ -134,7 +134,7 @@ void func_8098F438(ObjMure3* this, PlayState* play) {
if ((*collectible != NULL) && !((this->unk164 >> i) & 1)) {
if ((*collectible)->unk1A4 != 0) {
- Flags_SetSwitch(play, OBJMURE3_PARAM_7F(&this->actor));
+ Flags_SetSwitch(play, OBJMURE3_GET_SWITCH_FLAG(&this->actor));
}
if ((*collectible)->actor.update == NULL) {
this->unk164 |= (1 << i);
@@ -147,7 +147,7 @@ void func_8098F438(ObjMure3* this, PlayState* play) {
void ObjMure3_Init(Actor* thisx, PlayState* play) {
ObjMure3* this = THIS;
- if (Flags_GetSwitch(play, OBJMURE3_PARAM_7F(&this->actor))) {
+ if (Flags_GetSwitch(play, OBJMURE3_GET_SWITCH_FLAG(&this->actor))) {
Actor_Kill(&this->actor);
return;
}
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 336a092b4..fb79e3440 100644
--- a/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.h
+++ b/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.h
@@ -3,7 +3,7 @@
#include "global.h"
-#define OBJMURE3_PARAM_7F(thisx) ((thisx)->params & 0x7F)
+#define OBJMURE3_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
#define OBJMURE3_PARAM_RUPEEINDEX(thisx) (((thisx)->params >> 13) & 7)
struct ObjMure3;
diff --git a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c
index d783c88e8..a4259857a 100644
--- a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c
+++ b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c
@@ -49,7 +49,7 @@ static InitChainEntry sInitChain[] = {
ICHAIN_U8(targetMode, TARGET_MODE_0, ICHAIN_STOP),
};
-s16 D_80BA34B8[] = { OBJECT_SECOM_OBJ, OBJECT_GI_MSSA, OBJECT_SECOM_OBJ, OBJECT_SECOM_OBJ };
+static s16 sObjectIds[] = { OBJECT_SECOM_OBJ, OBJECT_GI_MSSA, OBJECT_SECOM_OBJ, OBJECT_SECOM_OBJ };
Vec3f D_80BA34C0 = { 0.0f, 0.0f, -1110.0f };
@@ -93,15 +93,15 @@ void ObjNozoki_Destroy(Actor* thisx, PlayState* play) {
}
void func_80BA2514(ObjNozoki* this, PlayState* play) {
- s32 sp24 = Object_GetIndex(&play->objectCtx, D_80BA34B8[this->unk_15C]);
+ s32 objectSlot = Object_GetSlot(&play->objectCtx, sObjectIds[this->unk_15C]);
- if (sp24 < 0) {
+ if (objectSlot <= OBJECT_SLOT_NONE) {
Actor_Kill(&this->dyna.actor);
return;
}
- if (Object_IsLoaded(&play->objectCtx, sp24)) {
- this->dyna.actor.objBankIndex = sp24;
+ if (Object_IsLoaded(&play->objectCtx, objectSlot)) {
+ this->dyna.actor.objectSlot = objectSlot;
this->dyna.actor.draw = ObjNozoki_Draw;
if (this->unk_15C == 0) {
@@ -174,7 +174,7 @@ void func_80BA27C4(ObjNozoki* this, PlayState* play) {
play->actorCtx.flags |= ACTORCTX_FLAG_7;
}
- if (!Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCHFLAG1(&this->dyna.actor))) {
+ if (!Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCH_FLAG1(&this->dyna.actor))) {
return;
}
}
@@ -209,10 +209,10 @@ void func_80BA28DC(ObjNozoki* this, PlayState* play) {
Math_StepToF(&this->dyna.actor.world.pos.y, this->dyna.actor.home.pos.y + 200.0f, this->dyna.actor.velocity.y);
if (OBJNOZOKI_GET_200(&this->dyna.actor)) {
- if (!Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCHFLAG1(&this->dyna.actor))) {
+ if (!Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCH_FLAG1(&this->dyna.actor))) {
return;
}
- } else if (Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCHFLAG1(&this->dyna.actor))) {
+ } else if (Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCH_FLAG1(&this->dyna.actor))) {
s32 csId = this->dyna.actor.csId;
if (csId == this->csId) {
@@ -252,20 +252,20 @@ void func_80BA2AB4(ObjNozoki* this, PlayState* play) {
if (!(play->actorCtx.flags & ACTORCTX_FLAG_5)) {
if (!(OBJNOZOKI_GET_200(&this->dyna.actor)) &&
- Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCHFLAG1(&this->dyna.actor))) {
+ Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCH_FLAG1(&this->dyna.actor))) {
func_80BA2790(this);
}
}
}
-void func_80BA2B64(ObjNozoki* this, PlayState* play, s32 arg2, s32 arg3) {
+void func_80BA2B64(ObjNozoki* this, PlayState* play, s32 arg2, s32 switchFlag) {
this->unk_15D = arg2;
this->unk_15E = 80;
- Flags_UnsetSwitch(play, arg3);
+ Flags_UnsetSwitch(play, switchFlag);
}
void func_80BA2BA4(ObjNozoki* this, PlayState* play) {
- if (!Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCHFLAG1(&this->dyna.actor))) {
+ if (!Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCH_FLAG1(&this->dyna.actor))) {
this->dyna.actor.shape.rot.x = -0x1F40;
this->unk_15E = 80;
} else if (DECR(this->unk_15E) == 0) {
@@ -331,7 +331,7 @@ void func_80BA2C94(ObjNozoki* this, PlayState* play) {
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)) {
+ Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCH_FLAG2(&this->dyna.actor)) && (sp38 < 20.0f)) {
static Vec3f D_80BA34F0 = { 0.0f, 0.0f, 50.0f };
play->actorCtx.flags |= ACTORCTX_FLAG_6;
@@ -374,7 +374,7 @@ void func_80BA3044(ObjNozoki* this, PlayState* play) {
this->unk_15E = 20;
Math_Vec3f_Copy(&this->dyna.actor.world.pos, sp1C);
} else if (!(play->actorCtx.flags & ACTORCTX_FLAG_5) &&
- Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCHFLAG1(&this->dyna.actor))) {
+ Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCH_FLAG1(&this->dyna.actor))) {
sp1C = &this->dyna.actor.home.pos;
}
} else if (DECR(this->unk_15E) == 0) {
@@ -386,7 +386,7 @@ void func_80BA3044(ObjNozoki* this, PlayState* play) {
void func_80BA311C(ObjNozoki* this, PlayState* play) {
if (this->unk_15D == 0) {
- if (Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCHFLAG1(&this->dyna.actor))) {
+ if (Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCH_FLAG1(&this->dyna.actor))) {
this->unk_15D = 1;
this->unk_15E = 70;
}
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 8bfc9818e..33c97db69 100644
--- a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.h
+++ b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.h
@@ -7,11 +7,11 @@ struct ObjNozoki;
typedef void (*ObjNozokiActionFunc)(struct ObjNozoki*, PlayState*);
-#define OBJNOZOKI_GET_SWITCHFLAG1(thisx) ((thisx)->params & 0x7F)
+#define OBJNOZOKI_GET_SWITCH_FLAG1(thisx) ((thisx)->params & 0x7F)
#define OBJNOZOKI_GET_180(thisx) (((thisx)->params >> 7) & 3)
#define OBJNOZOKI_GET_200(thisx) ((thisx)->params & 0x200)
#define OBJNOZOKI_GET_400(thisx) ((thisx)->params & 0x400)
-#define OBJNOZOKI_GET_SWITCHFLAG2(thisx) (((thisx)->params >> 9) & 0x7F)
+#define OBJNOZOKI_GET_SWITCH_FLAG2(thisx) (((thisx)->params >> 9) & 0x7F)
#define OBJNOZOKI_400 0x400
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 17a277e82..b5ba51418 100644
--- a/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c
+++ b/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c
@@ -203,7 +203,7 @@ void func_80AC9AB8(ObjOcarinalift* this) {
void func_80AC9AE0(ObjOcarinalift* this, PlayState* play) {
if (func_800B8718(&this->dyna.actor, &play->state)) {
- func_80152434(play, 1);
+ Message_DisplayOcarinaStaff(play, OCARINA_ACTION_FREE_PLAY);
func_80AC9B48(this);
} else if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) {
func_800B8804(&this->dyna.actor, play, 40.0f);
@@ -216,7 +216,7 @@ void func_80AC9B48(ObjOcarinalift* this) {
void func_80AC9B5C(ObjOcarinalift* this, PlayState* play) {
if (func_800B886C(&this->dyna.actor, play)) {
- if (play->msgCtx.ocarinaMode == 4) {
+ if (play->msgCtx.ocarinaMode == OCARINA_MODE_END) {
if (play->msgCtx.lastPlayedSong == 0) {
if (OBJOCARINALIFT_GET_C(&this->dyna.actor) != OBJOCARINALIFT_PARAM_1) {
Flags_SetSwitch(play, OBJOCARINALIFT_GET_SWITCH_FLAG(&this->dyna.actor));
@@ -225,8 +225,8 @@ void func_80AC9B5C(ObjOcarinalift* this, PlayState* play) {
func_80AC9C20(this);
}
} else {
- if (play->msgCtx.ocarinaMode >= 2) {
- play->msgCtx.ocarinaMode = 4;
+ if (play->msgCtx.ocarinaMode >= OCARINA_MODE_WARP) {
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
}
func_80AC9AB8(this);
}
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 736d80d10..9d49067fe 100644
--- a/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c
+++ b/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c
@@ -134,26 +134,26 @@ void ObjOshihiki_UpdateInitPos(ObjOshihiki* this) {
}
s32 ObjOshihiki_NoSwitchPress(ObjOshihiki* this, DynaPolyActor* dyna, PlayState* play) {
- s16 dynaSwitchFlag;
+ s16 switchFlag;
if (dyna == NULL) {
return true;
}
if (dyna->actor.id == ACTOR_OBJ_SWITCH) {
- dynaSwitchFlag = OBJSWITCH_GET_7F00(&dyna->actor);
+ switchFlag = OBJSWITCH_GET_7F00(&dyna->actor);
switch (OBJSWITCH_GET_33(&dyna->actor)) {
case OBJSWITCH_NORMAL_BLUE:
- if ((dynaSwitchFlag == OBJOSHIHIKI_GET_7F00(&this->dyna.actor)) &&
- Flags_GetSwitch(play, dynaSwitchFlag)) {
+ if ((switchFlag == OBJOSHIHIKI_GET_SWITCH_FLAG(&this->dyna.actor)) &&
+ Flags_GetSwitch(play, switchFlag)) {
return false;
}
break;
case OBJSWITCH_INVERSE_BLUE:
- if ((dynaSwitchFlag == OBJOSHIHIKI_GET_7F00(&this->dyna.actor)) &&
- !Flags_GetSwitch(play, dynaSwitchFlag)) {
+ if ((switchFlag == OBJOSHIHIKI_GET_SWITCH_FLAG(&this->dyna.actor)) &&
+ !Flags_GetSwitch(play, switchFlag)) {
return false;
}
break;
@@ -200,13 +200,16 @@ void ObjOshihiki_Init(Actor* thisx, PlayState* play) {
if ((OBJOSHIHIKI_GET_FF00(&this->dyna.actor) >= OBJOSHIHIKI_FF00_0) &&
(OBJOSHIHIKI_GET_FF00(&this->dyna.actor) < OBJOSHIHIKI_FF00_80)) {
- if (Flags_GetSwitch(play, OBJOSHIHIKI_GET_7F00(&this->dyna.actor))) {
+ if (Flags_GetSwitch(play, OBJOSHIHIKI_GET_SWITCH_FLAG(&this->dyna.actor))) {
switch (OBJOSHIHIKI_GET_F(&this->dyna.actor)) {
case OBJOSHIHIKI_F_0:
case OBJOSHIHIKI_F_1:
case OBJOSHIHIKI_F_2:
Actor_Kill(&this->dyna.actor);
return;
+
+ default:
+ break;
}
} else {
switch (OBJOSHIHIKI_GET_F(&this->dyna.actor)) {
@@ -215,6 +218,9 @@ void ObjOshihiki_Init(Actor* thisx, PlayState* play) {
case OBJOSHIHIKI_F_5:
Actor_Kill(&this->dyna.actor);
return;
+
+ default:
+ break;
}
}
}
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 4740b907a..6a400f2dc 100644
--- a/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.h
+++ b/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.h
@@ -9,7 +9,7 @@ typedef void (*ObjOshihikiActionFunc)(struct ObjOshihiki*, PlayState*);
#define OBJOSHIHIKI_GET_F(thisx) ((thisx)->params & 0xF)
#define OBJOSHIHIKI_GET_F0(thisx) (((thisx)->params >> 4) & 0xF)
-#define OBJOSHIHIKI_GET_7F00(thisx) (((thisx)->params >> 8) & 0x7F)
+#define OBJOSHIHIKI_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0x7F)
#define OBJOSHIHIKI_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF)
typedef enum {
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 649343554..9be9106d6 100644
--- a/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.c
+++ b/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.c
@@ -130,8 +130,8 @@ void ObjPurify_Init(Actor* thisx, PlayState* play) {
if (sp20 == 1) {
DynaPolyActor_Init(&this->dyna, 0);
}
- this->objIndex = Object_GetIndex(&play->objectCtx, info->objectId);
- if (this->objIndex < 0) {
+ this->objectSlot = Object_GetSlot(&play->objectCtx, info->objectId);
+ if (this->objectSlot <= OBJECT_SLOT_NONE) {
Actor_Kill(&this->dyna.actor);
} else if (sp20 == 0) {
func_80A84EAC(this);
@@ -158,10 +158,10 @@ void func_80A84EC0(ObjPurify* this, PlayState* play) {
s32 sp28;
s32 index;
- if (Object_IsLoaded(&play->objectCtx, this->objIndex)) {
+ if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) {
sp28 = OBJPURIFY_GET_UNK_FLAG(&this->dyna.actor);
index = OBJPURIFY_GET_INFO_INDEX(&this->dyna.actor);
- this->dyna.actor.objBankIndex = this->objIndex;
+ this->dyna.actor.objectSlot = this->objectSlot;
Actor_SetObjectDependency(play, &this->dyna.actor);
if (sp28 == 1) {
DynaPolyActor_LoadMesh(play, &this->dyna, sObjPurifyInfo[index].colHeader);
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 2651bf049..cea8c6e9a 100644
--- a/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.h
+++ b/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.h
@@ -12,7 +12,7 @@ typedef struct ObjPurify {
/* 0x15C */ ObjPurifyActionFunc actionFunc;
/* 0x160 */ s32 gfxIndex;
/* 0x164 */ s16 timer;
- /* 0x166 */ s16 objIndex;
+ /* 0x166 */ s16 objectSlot;
/* 0x168 */ f32 unk168[2];
} ObjPurify; // size = 0x170
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 3bedc3ea4..478991a86 100644
--- a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c
+++ b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c
@@ -41,7 +41,7 @@ s16 D_809A4050[] = { 1, -1, 0, 0 };
s16 D_809A4058[] = { 0, 0, 1, -1 };
typedef struct {
- /* 0x0 */ s16 unk_00;
+ /* 0x0 */ s16 objectId;
/* 0x4 */ CollisionHeader* unk_04;
/* 0x8 */ Gfx* unk_08;
} ObjPzlblockStruct; // size = 0xC
@@ -207,11 +207,11 @@ void ObjPzlblock_Init(Actor* thisx, PlayState* play) {
DynaPolyActor_Init(&this->dyna, 0);
- this->unk_17A = Object_GetIndex(&play->objectCtx, sp24->unk_00);
+ this->objectSlot = Object_GetSlot(&play->objectCtx, sp24->objectId);
if (sp28 == 0) {
func_809A3D1C(this);
- } else if (Flags_GetSwitch(play, OBJPZLBLOCK_GET_7F(&this->dyna.actor))) {
+ } else if (Flags_GetSwitch(play, OBJPZLBLOCK_GET_SWITCH_FLAG(&this->dyna.actor))) {
if (sp2C == 0) {
this->dyna.actor.world.pos.x = this->dyna.actor.home.pos.x + (sp28 * 60);
func_809A3D1C(this);
@@ -295,7 +295,7 @@ void func_809A3BC0(ObjPzlblock* this, PlayState* play) {
}
} else {
Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND);
- Flags_SetSwitch(play, OBJPZLBLOCK_GET_7F(&this->dyna.actor));
+ Flags_SetSwitch(play, OBJPZLBLOCK_GET_SWITCH_FLAG(&this->dyna.actor));
sp20 = 1;
}
@@ -330,10 +330,10 @@ void ObjPzlblock_Update(Actor* thisx, PlayState* play) {
this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y;
Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 15.0f, 30.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
- if (Object_IsLoaded(&play->objectCtx, this->unk_17A)) {
+ if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) {
ObjPzlblockStruct* sp2C = &D_809A4060[OBJPZLBLOCK_GET_1000(&this->dyna.actor)];
- this->dyna.actor.objBankIndex = this->unk_17A;
+ this->dyna.actor.objectSlot = this->objectSlot;
Actor_SetObjectDependency(play, &this->dyna.actor);
DynaPolyActor_LoadMesh(play, &this->dyna, sp2C->unk_04);
this->dyna.actor.update = func_809A3E58;
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 5cf67efcc..9f235ced1 100644
--- a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.h
+++ b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.h
@@ -7,7 +7,7 @@ struct ObjPzlblock;
typedef void (*ObjPzlblockActionFunc)(struct ObjPzlblock*, PlayState*);
-#define OBJPZLBLOCK_GET_7F(thisx) ((thisx)->params & 0x7F)
+#define OBJPZLBLOCK_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
#define OBJPZLBLOCK_GET_700(thisx) (((thisx)->params >> 8) & 7)
#define OBJPZLBLOCK_GET_1000(thisx) (((thisx)->params >> 0xC) & 1)
#define OBJPZLBLOCK_GET_ROTZ(thisx) ((thisx)->home.rot.z & 7)
@@ -22,7 +22,7 @@ typedef struct ObjPzlblock {
/* 0x16E */ s16 unk_16E[4];
/* 0x176 */ s16 unk_176;
/* 0x178 */ s16 unk_178;
- /* 0x17A */ s8 unk_17A;
+ /* 0x17A */ s8 objectSlot;
} ObjPzlblock; // size = 0x17C
#endif // Z_OBJ_PZLBLOCK_H
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 93845b55e..dc5e9e315 100644
--- a/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c
+++ b/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c
@@ -92,7 +92,7 @@ void ObjRaillift_Init(Actor* thisx, PlayState* play) {
this->direction = 1;
this->points = Lib_SegmentedToVirtual(path->points);
ObjRaillift_UpdatePosition(this, this->curPoint);
- if (OBJRAILLIFT_HAS_FLAG(thisx) && !Flags_GetSwitch(play, OBJRAILLIFT_GET_FLAG(thisx))) {
+ if (OBJRAILLIFT_HAS_FLAG(thisx) && !Flags_GetSwitch(play, OBJRAILLIFT_GET_SWITCH_FLAG(thisx))) {
this->actionFunc = ObjRaillift_Idle;
} else {
this->actionFunc = ObjRaillift_Move;
@@ -120,7 +120,7 @@ void ObjRaillift_Move(ObjRaillift* this, PlayState* play) {
Vec3s* endPoint;
if (OBJRAILLIFT_HAS_FLAG(thisx)) {
- if (!Flags_GetSwitch(play, OBJRAILLIFT_GET_FLAG(thisx))) {
+ if (!Flags_GetSwitch(play, OBJRAILLIFT_GET_SWITCH_FLAG(thisx))) {
this->actionFunc = ObjRaillift_Idle;
return;
}
@@ -196,7 +196,7 @@ void ObjRaillift_Wait(ObjRaillift* this, PlayState* play) {
}
void ObjRaillift_Idle(ObjRaillift* this, PlayState* play) {
- if (Flags_GetSwitch(play, OBJRAILLIFT_GET_FLAG(&this->dyna.actor))) {
+ if (Flags_GetSwitch(play, OBJRAILLIFT_GET_SWITCH_FLAG(&this->dyna.actor))) {
this->dyna.actor.speed = 0.0f;
CutsceneManager_Queue(this->dyna.actor.csId);
this->actionFunc = ObjRaillift_StartCutscene;
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 dc197432f..64aa01130 100644
--- a/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.h
+++ b/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.h
@@ -9,7 +9,7 @@ typedef void (*ObjRailliftActionFunc)(struct ObjRaillift*, PlayState*);
#define OBJRAILLIFT_GET_TYPE(thisx) (((thisx)->params >> 0xF) & 1)
#define OBJRAILLIFT_HAS_FLAG(thisx) (((thisx)->params >> 0xD) & 1)
-#define OBJRAILLIFT_GET_FLAG(thisx) ((thisx)->home.rot.x & 0x7F)
+#define OBJRAILLIFT_GET_SWITCH_FLAG(thisx) ((thisx)->home.rot.x & 0x7F)
#define OBJRAILLIFT_GET_PATH_INDEX(thisx) ((thisx)->params & 0x7F)
#define OBJRAILLIFT_GET_STARTING_POINT(thisx) (((thisx)->params >> 7) & 0x1F)
#define OBJRAILLIFT_GET_SPEED(thisx) ((thisx)->home.rot.z * 0.1f)
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 158d8f874..1fe208ba8 100644
--- a/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c
+++ b/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c
@@ -33,7 +33,7 @@ ActorInit Obj_Roomtimer_InitVars = {
void ObjRoomtimer_Init(Actor* thisx, PlayState* play) {
ObjRoomtimer* this = THIS;
- this->switchFlag = ROOMTIMER_GET_SWITCHFLAG(thisx);
+ this->switchFlag = ROOMTIMER_GET_SWITCH_FLAG(thisx);
this->actor.params &= 0x1FF;
if (this->actor.params != 0x1FF) {
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 5ce7d13d4..d976de5e3 100644
--- a/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.h
+++ b/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.h
@@ -3,7 +3,7 @@
#include "global.h"
-#define ROOMTIMER_GET_SWITCHFLAG(thisx) (((thisx)->params >> 9) & 0x7F)
+#define ROOMTIMER_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 9) & 0x7F)
struct ObjRoomtimer;
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 edc780007..06de02581 100644
--- a/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c
+++ b/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c
@@ -110,7 +110,7 @@ void func_80B02CD0(ObjSnowball* this, PlayState* play) {
}
void func_80B02D58(ObjSnowball* this, PlayState* play) {
- s32 temp_v0 = func_800A8150(OBJSNOWBALL_GET_3F(&this->actor));
+ s32 temp_v0 = func_800A8150(OBJSNOWBALL_GET_SWITCH_FLAG(&this->actor));
if (temp_v0 >= 0) {
Item_DropCollectible(play, &this->actor.home.pos, (OBJSNOWBALL_GET_7F00(&this->actor) << 8) | temp_v0);
@@ -443,7 +443,7 @@ void func_80B03FF8(ObjSnowball* this, PlayState* play) {
Actor_PlaySfx(&this->actor, NA_SE_EV_SNOWBALL_BROKEN);
if (rotY == 5) {
- Flags_SetSwitch(play, OBJSNOWBALL_GET_3F(&this->actor));
+ Flags_SetSwitch(play, OBJSNOWBALL_GET_SWITCH_FLAG(&this->actor));
}
}
@@ -509,7 +509,7 @@ void ObjSnowball_Init(Actor* thisx, PlayState* play) {
func_80B04338(this, play);
- if ((sp40 == 5) && Flags_GetSwitch(play, OBJSNOWBALL_GET_3F(&this->actor))) {
+ if ((sp40 == 5) && Flags_GetSwitch(play, OBJSNOWBALL_GET_SWITCH_FLAG(&this->actor))) {
Actor_Kill(&this->actor);
}
}
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 804c2596c..16ce58f91 100644
--- a/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.h
+++ b/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.h
@@ -7,7 +7,7 @@ struct ObjSnowball;
typedef void (*ObjSnowballActionFunc)(struct ObjSnowball*, PlayState*);
-#define OBJSNOWBALL_GET_3F(thisx) ((thisx)->params & 0x3F)
+#define OBJSNOWBALL_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x3F)
#define OBJSNOWBALL_GET_7F00(thisx) (((thisx)->params >> 8) & 0x7F)
typedef struct {
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 ff308a478..785a3ea5a 100644
--- a/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c
+++ b/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c
@@ -564,7 +564,7 @@ void ObjSpidertent_Init(Actor* thisx, PlayState* play) {
DynaPolyActor_Init(&this->dyna, 0);
Collider_InitTris(play, &this->collider);
- if (Flags_GetSwitch(play, OBJSPIDERTENT_GET_7F00(&this->dyna.actor))) {
+ if (Flags_GetSwitch(play, OBJSPIDERTENT_GET_SWITCH_FLAG(&this->dyna.actor))) {
Actor_Kill(&this->dyna.actor);
return;
}
@@ -681,7 +681,7 @@ void func_80B30A4C(ObjSpidertent* this, PlayState* play) {
if (this->dyna.actor.csId >= 0) {
func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_1);
}
- Flags_SetSwitch(play, OBJSPIDERTENT_GET_7F00(&this->dyna.actor));
+ Flags_SetSwitch(play, OBJSPIDERTENT_GET_SWITCH_FLAG(&this->dyna.actor));
func_80B30AD4(this);
} else {
CutsceneManager_Queue(this->dyna.actor.csId);
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 881a816a7..880921535 100644
--- a/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.h
+++ b/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.h
@@ -8,7 +8,7 @@ struct ObjSpidertent;
typedef void (*ObjSpidertentActionFunc)(struct ObjSpidertent*, PlayState*);
#define OBJSPIDERTENT_GET_1(thisx) ((thisx)->params & 1)
-#define OBJSPIDERTENT_GET_7F00(thisx) (((thisx)->params >> 8) & 0x7F)
+#define OBJSPIDERTENT_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0x7F)
typedef struct ObjSpidertent {
/* 0x000 */ DynaPolyActor dyna;
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 295181b8d..52652c8bb 100644
--- a/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c
+++ b/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c
@@ -250,13 +250,13 @@ Actor* ObjSwitch_SpawnIce(ObjSwitch* this, PlayState* play) {
void ObjSwitch_SetSwitchFlagState(ObjSwitch* this, PlayState* play, s32 setFlag) {
if (setFlag) {
- s32 flag = OBJ_SWITCH_GET_SWITCH_FLAG(&this->dyna.actor);
+ s32 switchFlag = OBJ_SWITCH_GET_SWITCH_FLAG(&this->dyna.actor);
- Flags_SetSwitch(play, flag);
+ Flags_SetSwitch(play, switchFlag);
} else {
- s32 flag = OBJ_SWITCH_GET_SWITCH_FLAG(&this->dyna.actor);
+ s32 switchFlag = OBJ_SWITCH_GET_SWITCH_FLAG(&this->dyna.actor);
- Flags_UnsetSwitch(play, flag);
+ Flags_UnsetSwitch(play, switchFlag);
}
}
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 5dc86c745..cbd94d808 100644
--- a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c
+++ b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c
@@ -248,7 +248,8 @@ void ObjSyokudai_Update(Actor* thisx, PlayState* play2) {
this->snuffTimer = OBJ_SYOKUDAI_SNUFF_NEVER;
}
} else {
- if (++sNumLitTorchesInGroup >= groupSize) {
+ sNumLitTorchesInGroup++;
+ if (sNumLitTorchesInGroup >= groupSize) {
this->pendingAction = OBJ_SYOKUDAI_PENDING_ACTION_CUTSCENE_AND_SWITCH;
} else {
this->snuffTimer =
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 6eac0ddbc..e8389e91f 100644
--- a/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.c
+++ b/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.c
@@ -203,7 +203,7 @@ void ObjTaru_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
if (OBJ_TARU_GET_80(thisx)) {
- if (Flags_GetSwitch(play, OBJ_TARU_GET_7F(thisx))) {
+ if (Flags_GetSwitch(play, OBJ_TARU_GET_SWITCH_FLAG(thisx))) {
Actor_Kill(&this->dyna.actor);
} else {
DynaPolyActor_LoadMesh(play, &this->dyna, &object_taru_Colheader_001CB0);
@@ -298,7 +298,7 @@ void func_80B9C174(ObjTaru* this, PlayState* play) {
void func_80B9C1A0(ObjTaru* this, PlayState* play) {
if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
- Flags_SetSwitch(play, OBJ_TARU_GET_7F(&this->dyna.actor));
+ Flags_SetSwitch(play, OBJ_TARU_GET_SWITCH_FLAG(&this->dyna.actor));
Actor_Kill(&this->dyna.actor);
return;
}
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 629bc57a5..e7620f458 100644
--- a/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.h
+++ b/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.h
@@ -6,7 +6,7 @@
#define OBJ_TARU_GET_100(thisx) ((thisx)->params & 0x100)
#define OBJ_TARU_GET_1F(thisx) ((thisx)->params & 0x1F)
#define OBJ_TARU_GET_3F(thisx) ((thisx)->params & 0x3F)
-#define OBJ_TARU_GET_7F(thisx) ((thisx)->params & 0x7F)
+#define OBJ_TARU_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
#define OBJ_TARU_GET_7F00(thisx) (((thisx)->params >> 8) & 0x7F)
#define OBJ_TARU_GET_80(thisx) ((thisx)->params & 0x80)
#define OBJ_TARU_GET_8000(thisx) (((thisx)->params >> 0xF) & 1)
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 70a4e7022..7f8d87ca4 100644
--- a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c
+++ b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c
@@ -835,9 +835,9 @@ void ObjTokeidai_Clock_Draw(Actor* thisx, PlayState* play) {
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
if (OBJ_TOKEIDAI_TYPE(&this->actor) == OBJ_TOKEIDAI_TYPE_WALL_CLOCK ||
OBJ_TOKEIDAI_TYPE(&this->actor) == OBJ_TOKEIDAI_TYPE_SMALL_WALL_CLOCK) {
- gSPDisplayList(POLY_OPA_DISP++, gWallClockClockFace);
+ gSPDisplayList(POLY_OPA_DISP++, gWallClockClockFaceDL);
} else {
- gSPDisplayList(POLY_OPA_DISP++, gClockTowerClockFace);
+ gSPDisplayList(POLY_OPA_DISP++, gClockTowerClockFaceDL);
}
Matrix_Translate(0.0f, -1112.0f, -19.6f, MTXMODE_APPLY);
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 d6f8b468b..bdfc48aa8 100644
--- a/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c
+++ b/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c
@@ -54,7 +54,7 @@ ActorInit Obj_Tsubo_InitVars = {
};
typedef struct {
- /* 0x00 */ s16 objId;
+ /* 0x00 */ s16 objectId;
/* 0x04 */ f32 scale;
/* 0x08 */ Gfx* modelDL;
/* 0x0C */ Gfx* shardDL;
@@ -186,8 +186,8 @@ void ObjTsubo_Init(Actor* thisx, PlayState* play) {
this->cylinderCollider.dim.radius = sPotTypeData[type].radius;
this->cylinderCollider.dim.height = sPotTypeData[type].height;
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
- this->objBankIndex = Object_GetIndex(&play->objectCtx, sPotTypeData[type].objId);
- if (this->objBankIndex < 0) {
+ this->objectSlot = Object_GetSlot(&play->objectCtx, sPotTypeData[type].objectId);
+ if (this->objectSlot <= OBJECT_SLOT_NONE) {
Actor_Kill(&this->actor);
return;
}
@@ -246,7 +246,7 @@ void ObjTsubo_PotBreak1(ObjTsubo* this, PlayState* play) {
}
scale = Rand_ZeroOne() * 110.0f + 15.0f;
EffectSsKakera_Spawn(play, &pos, &vel, &this->actor.world.pos, -260, phi_s0, 20, 0, 0, scale, 0, 0, 50, -1,
- typeData->objId, typeData->shardDL);
+ typeData->objectId, typeData->shardDL);
}
func_800BBFB0(play, &this->actor.world.pos, 30.0f, 2, 20, 50, true);
func_800BBFB0(play, &this->actor.world.pos, 30.0f, 2, 10, 80, true);
@@ -285,7 +285,7 @@ void ObjTsubo_MagicPotBreak1(ObjTsubo* this, PlayState* play) {
}
scale = Rand_ZeroOne() * 160.0f + 15.0f;
EffectSsKakera_Spawn(play, &pos, &vel, &this->actor.world.pos, -340, phi_s0, 20, 0, 0, scale, 0, 0, 50, -1,
- typeData->objId, typeData->shardDL);
+ typeData->objectId, typeData->shardDL);
}
func_800BBFB0(play, &this->actor.world.pos, 50.0f, 2, 40, 50, true);
func_800BBFB0(play, &this->actor.world.pos, 50.0f, 2, 20, 80, true);
@@ -330,8 +330,8 @@ void ObjTsubo_PotBreak2(ObjTsubo* this, PlayState* play2) {
phi_s0 = 0x20;
}
scale = Rand_ZeroOne() * 105.0f + 10.0f;
- EffectSsKakera_Spawn(play, &pos, &vel, worldPos, -170, phi_s0, 50, 5, 0, scale, 0, 0, 70, -1, typeData->objId,
- typeData->shardDL);
+ EffectSsKakera_Spawn(play, &pos, &vel, worldPos, -170, phi_s0, 50, 5, 0, scale, 0, 0, 70, -1,
+ typeData->objectId, typeData->shardDL);
}
}
@@ -375,8 +375,8 @@ void ObjTsubo_MagicPotBreak2(ObjTsubo* this, PlayState* play2) {
phi_s0 = 0xA0;
}
scale = (Rand_ZeroOne() * 150.0f) + 10.0f;
- EffectSsKakera_Spawn(play, &pos, &vel, worldPos, -170, phi_s0, 50, 5, 0, scale, 0, 0, 70, -1, typeData->objId,
- typeData->shardDL);
+ EffectSsKakera_Spawn(play, &pos, &vel, worldPos, -170, phi_s0, 50, 5, 0, scale, 0, 0, 70, -1,
+ typeData->objectId, typeData->shardDL);
}
}
@@ -412,7 +412,7 @@ void ObjTsubo_PotBreak3(ObjTsubo* this, PlayState* play2) {
phi_s0 = 0x20;
}
EffectSsKakera_Spawn(play, &pos, &vel, &this->actor.world.pos, -170, phi_s0, 50, 3, 0,
- (Rand_ZeroOne() * 105.0f) + 10.0f, 0, 0, 70, -1, typeData->objId, typeData->shardDL);
+ (Rand_ZeroOne() * 105.0f) + 10.0f, 0, 0, 70, -1, typeData->objectId, typeData->shardDL);
}
for (i = 0; i < 7; i++) {
EffectSsBubble_Spawn(play, &this->actor.world.pos, 20.0f, 30.0f, 40.0f, (Rand_ZeroOne() * 0.06f) + 0.09f);
@@ -430,8 +430,8 @@ void func_80928914(ObjTsubo* this) {
void func_80928928(ObjTsubo* this, PlayState* play) {
Actor_MoveWithGravity(&this->actor);
Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 15.0f, 0.0f, UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40);
- if (Object_IsLoaded(&play->objectCtx, this->objBankIndex)) {
- this->actor.objBankIndex = this->objBankIndex;
+ if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) {
+ this->actor.objectSlot = this->objectSlot;
func_809289B4(this);
}
}
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 2b3d1537f..b78f5ec0f 100644
--- a/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.h
+++ b/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.h
@@ -26,7 +26,7 @@ typedef struct ObjTsubo {
/* 0x196 */ s8 homeRoom;
/* 0x197 */ s8 unk_197;
/* 0x198 */ s8 unk_198;
- /* 0x199 */ s8 objBankIndex;
+ /* 0x199 */ s8 objectSlot;
/* 0x19A */ s8 unk_19A;
/* 0x19B */ u8 unk_19B;
} ObjTsubo; // size = 0x19C
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 09b95d3a0..3f556d640 100644
--- a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c
+++ b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c
@@ -897,7 +897,7 @@ s32 func_80B79734(PlayState* play, ObjUm* this, s32 arg2) {
case TEXT_STATE_CHOICE:
case TEXT_STATE_5:
if (Message_ShouldAdvance(play) && func_80B795A0(play, this, arg2)) {
- msgCtx->msgMode = 0x43;
+ msgCtx->msgMode = MSGMODE_TEXT_CLOSING;
ret = true;
}
break;
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 e3d11f2fc..62ec8f0f7 100644
--- a/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c
+++ b/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c
@@ -141,7 +141,7 @@ void ObjWarpstone_Update(Actor* thisx, PlayState* play) {
} else if ((Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE) && Message_ShouldAdvance(play)) {
if (play->msgCtx.choiceIndex != 0) {
Audio_PlaySfx_MessageDecide();
- play->msgCtx.msgMode = 0x4D;
+ play->msgCtx.msgMode = MSGMODE_OWL_SAVE_0;
play->msgCtx.unk120D6 = 0;
play->msgCtx.unk120D4 = 0;
gSaveContext.save.owlSaveLocation = OBJ_WARPSTONE_GET_ID(&this->dyna.actor);
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 6f361294e..a44f2cbb1 100644
--- a/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.c
+++ b/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.c
@@ -39,14 +39,15 @@ 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);
+ if ((play->msgCtx.ocarinaMode >= OCARINA_MODE_WARP_TO_GREAT_BAY_COAST) &&
+ (play->msgCtx.ocarinaMode <= OCARINA_MODE_WARP_TO_ENTRANCE)) {
+ Flags_UnsetSwitch(play, OBJWTURN_GET_SWITCH_FLAG(&this->actor));
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))) {
+ if ((Flags_GetSwitch(play, OBJWTURN_GET_SWITCH_FLAG(&this->actor)) && (play->sceneId == SCENE_F40)) ||
+ (!Flags_GetSwitch(play, OBJWTURN_GET_SWITCH_FLAG(&this->actor)) && (play->sceneId == SCENE_F41))) {
func_808A7A24(this);
}
}
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 2e2963d0e..9aee7e2ad 100644
--- a/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.h
+++ b/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.h
@@ -7,6 +7,8 @@ struct ObjWturn;
typedef void (*ObjWturnActionFunc)(struct ObjWturn*, PlayState*);
+#define OBJWTURN_GET_SWITCH_FLAG(thisx) ((thisx)->params)
+
typedef struct ObjWturn {
/* 0x000 */ Actor actor;
/* 0x144 */ ObjWturnActionFunc actionFunc;
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 f2085694a..d1b39bb24 100644
--- a/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.c
+++ b/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.c
@@ -96,15 +96,15 @@ void ObjY2shutter_Update(Actor* thisx, PlayState* play) {
DREG(87) = 0;
}
- if (Flags_GetSwitch(play, OBJY2SHUTTER_GET_SWITCHFLAG(&this->dyna.actor))) {
- Flags_UnsetSwitch(play, OBJY2SHUTTER_GET_SWITCHFLAG(&this->dyna.actor));
+ if (Flags_GetSwitch(play, OBJY2SHUTTER_GET_SWITCH_FLAG(&this->dyna.actor))) {
+ Flags_UnsetSwitch(play, OBJY2SHUTTER_GET_SWITCH_FLAG(&this->dyna.actor));
} else {
- Flags_SetSwitch(play, OBJY2SHUTTER_GET_SWITCHFLAG(&this->dyna.actor));
+ Flags_SetSwitch(play, OBJY2SHUTTER_GET_SWITCH_FLAG(&this->dyna.actor));
}
}
if (this->settleTimer == 0) {
- if (Flags_GetSwitch(play, OBJY2SHUTTER_GET_SWITCHFLAG(&this->dyna.actor))) {
+ if (Flags_GetSwitch(play, OBJY2SHUTTER_GET_SWITCH_FLAG(&this->dyna.actor))) {
s16 csId = this->dyna.actor.csId;
if (this->openTimer == 0) {
@@ -125,7 +125,7 @@ void ObjY2shutter_Update(Actor* thisx, PlayState* play) {
targetVelocityY = info->openVelocity;
accelY = info->openAccel;
if (this->openTimer < 2) {
- Flags_UnsetSwitch(play, OBJY2SHUTTER_GET_SWITCHFLAG(&this->dyna.actor));
+ Flags_UnsetSwitch(play, OBJY2SHUTTER_GET_SWITCH_FLAG(&this->dyna.actor));
} else {
this->openTimer--;
}
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 a1b32bbe9..8ff346f74 100644
--- a/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.h
+++ b/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.h
@@ -18,6 +18,6 @@ typedef enum {
} ShutterType;
#define OBJY2SHUTTER_GET_TYPE(thisx) (((thisx)->params >> 7) & 1)
-#define OBJY2SHUTTER_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F)
+#define OBJY2SHUTTER_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
#endif // Z_OBJ_Y2SHUTTER_H
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 2661b9cc5..dbefd93b9 100644
--- a/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c
+++ b/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c
@@ -55,11 +55,11 @@ void func_808DBEB0(ObjectKankyo* this, PlayState* play) {
D_808DE5B0 = 0.0f;
this->unk_144 = Rand_ZeroOne() * 360.0f;
this->unk_148 = Rand_ZeroOne() * 360.0f;
- if (play->envCtx.unk_F2[2] == 128) {
+ if (play->envCtx.precipitation[PRECIP_SNOW_CUR] == 128) {
D_808DE5B0 = 1.0f;
this->unk_114E = 1;
- for (i = 0; i < play->envCtx.unk_F2[2]; i++) {
+ for (i = 0; i < play->envCtx.precipitation[PRECIP_SNOW_CUR]; i++) {
this->unk_14C[i].unk_10 = Rand_ZeroOne() * -200.0f;
}
} else {
@@ -107,7 +107,7 @@ void ObjectKankyo_Init(Actor* thisx, PlayState* play) {
break;
case 2:
- play->envCtx.unk_F2[2] = 0x80;
+ play->envCtx.precipitation[PRECIP_SNOW_CUR] = 128;
func_808DBFB0(this, play);
break;
@@ -180,16 +180,16 @@ void func_808DC18C(ObjectKankyo* this, PlayState* play) {
magnitude = play->envCtx.windSpeed / 60.0f;
magnitude = CLAMP(magnitude, 0.0f, 1.0f);
- sp30.x = play->envCtx.windDir.x * magnitude;
- sp30.y = play->envCtx.windDir.y + 100.0f;
- sp30.z = play->envCtx.windDir.z * magnitude;
+ sp30.x = play->envCtx.windDirection.x * magnitude;
+ sp30.y = play->envCtx.windDirection.y + 100.0f;
+ sp30.z = play->envCtx.windDirection.z * magnitude;
this->unk_14C[2].unk_00 = 0x4000 - Math_Vec3f_Pitch(&gZeroVec3f, &sp30);
this->unk_14C[2].unk_04 = Math_Vec3f_Yaw(&gZeroVec3f, &sp30) + 0x8000;
}
void func_808DC454(ObjectKankyo* this, PlayState* play) {
s16 i;
- u32 tempI;
+ s32 pad1;
f32 phi_f20;
f32 spD0;
f32 spCC;
@@ -214,7 +214,7 @@ void func_808DC454(ObjectKankyo* this, PlayState* play) {
spCC = y / magnitude;
spC8 = z / magnitude;
- for (i = 0; i < play->envCtx.unk_F2[2]; i++) {
+ for (i = 0; i < play->envCtx.precipitation[PRECIP_SNOW_CUR]; i++) {
switch (this->unk_14C[i].unk_1C) {
case 0:
this->unk_14C[i].unk_00 = play->view.eye.x + (spD0 * 120.0f);
@@ -231,14 +231,13 @@ void func_808DC454(ObjectKankyo* this, PlayState* play) {
this->unk_14C[i].unk_10 = temp_f22;
} else {
this->unk_14C[i].unk_10 += temp_f22;
- tempI = i;
- if (play->envCtx.unk_F2[2] == (tempI + 1)) {
+ if (play->envCtx.precipitation[PRECIP_SNOW_CUR] == ((u32)i + 1)) {
this->unk_114E = 0;
}
}
this->unk_14C[i].unk_14 = (Rand_ZeroOne() - 0.5f) * (2.0f * temp_120);
- if (play->envCtx.unk_F2[4] == 0) {
+ if (play->envCtx.precipitation[PRECIP_SOS_MAX] == 0) {
this->unk_14C[i].unk_18 = (Rand_ZeroOne() * 3.0f) + 1.0f;
} else {
this->unk_14C[i].unk_18 = (Rand_ZeroOne() * 3.0f) + 8.0f;
@@ -251,14 +250,14 @@ void func_808DC454(ObjectKankyo* this, PlayState* play) {
temp_f28 = play->view.eye.y + (spCC * 120.0f);
temp_f30 = play->view.eye.z + (spC8 * 120.0f);
- magnitude =
- sqrtf((f32)SQ(play->envCtx.windDir.x) + SQ(play->envCtx.windDir.y) + SQ(play->envCtx.windDir.z));
+ magnitude = sqrtf((f32)SQ(play->envCtx.windDirection.x) + SQ(play->envCtx.windDirection.y) +
+ SQ(play->envCtx.windDirection.z));
if (magnitude == 0.0f) {
magnitude = 0.001f;
}
- spC4 = -play->envCtx.windDir.x / magnitude;
- spC0 = -play->envCtx.windDir.y / magnitude;
- spBC = -play->envCtx.windDir.z / magnitude;
+ spC4 = -play->envCtx.windDirection.x / magnitude;
+ spC0 = -play->envCtx.windDirection.y / magnitude;
+ spBC = -play->envCtx.windDirection.z / magnitude;
if (i == 0) {
this->unk_144 += 0.049999997f * Rand_ZeroOne();
@@ -318,13 +317,13 @@ void func_808DC454(ObjectKankyo* this, PlayState* play) {
}
void func_808DCB7C(ObjectKankyo* this, PlayState* play) {
- if (play->envCtx.unk_F2[2] < play->envCtx.unk_F2[3]) {
+ if (play->envCtx.precipitation[PRECIP_SNOW_CUR] < play->envCtx.precipitation[PRECIP_SNOW_MAX]) {
if ((play->state.frames % 16) == 0) {
- play->envCtx.unk_F2[2] += 2;
+ play->envCtx.precipitation[PRECIP_SNOW_CUR] += 2;
}
- } else if (play->envCtx.unk_F2[3] < play->envCtx.unk_F2[2]) {
+ } else if (play->envCtx.precipitation[PRECIP_SNOW_MAX] < play->envCtx.precipitation[PRECIP_SNOW_CUR]) {
if ((play->state.frames % 16) == 0) {
- play->envCtx.unk_F2[2] -= 2;
+ play->envCtx.precipitation[PRECIP_SNOW_CUR] -= 2;
}
}
func_808DC454(this, play);
@@ -333,24 +332,24 @@ void func_808DCB7C(ObjectKankyo* this, PlayState* play) {
void func_808DCBF8(ObjectKankyo* this, PlayState* play) {
f32 temp_f0;
- if ((play->envCtx.unk_F2[2] > 0) && (this->unk_114C == 0)) {
+ if ((play->envCtx.precipitation[PRECIP_SNOW_CUR] > 0) && (this->unk_114C == 0)) {
if ((play->state.frames % 16) == 0) {
- play->envCtx.unk_F2[2] -= 9;
- if ((s8)play->envCtx.unk_F2[2] < 0) {
- play->envCtx.unk_F2[2] = 0;
+ play->envCtx.precipitation[PRECIP_SNOW_CUR] -= 9;
+ if ((s8)play->envCtx.precipitation[PRECIP_SNOW_CUR] < 0) {
+ play->envCtx.precipitation[PRECIP_SNOW_CUR] = 0;
}
}
}
- temp_f0 = (f32)play->envCtx.unk_F2[2] / 128;
+ temp_f0 = (f32)play->envCtx.precipitation[PRECIP_SNOW_CUR] / 128;
temp_f0 = CLAMP(temp_f0, 0.0f, 1.0f);
if (temp_f0 > 0.01f) {
D_801F4E30 = 155.0f * temp_f0;
- play->envCtx.sandstormState = 10;
+ play->envCtx.sandstormState = SANDSTORM_A;
} else {
D_801F4E30 = 0;
- play->envCtx.sandstormState = 10;
+ play->envCtx.sandstormState = SANDSTORM_A;
}
func_808DC454(this, play);
}
@@ -413,14 +412,14 @@ void func_808DCDB4(ObjectKankyo* this, PlayState* play) {
temp_f28 = play->view.eye.y + (spA8 * 120.0f);
temp_f18 = play->view.eye.z + (spA4 * 120.0f);
- magnitude =
- sqrtf((f32)SQ(play->envCtx.windDir.x) + SQ(play->envCtx.windDir.y) + SQ(play->envCtx.windDir.z));
+ magnitude = sqrtf((f32)SQ(play->envCtx.windDirection.x) + SQ(play->envCtx.windDirection.y) +
+ SQ(play->envCtx.windDirection.z));
if (magnitude == 0.0f) {
magnitude = 0.001f;
}
- spA0 = -play->envCtx.windDir.x / magnitude;
- sp9C = -play->envCtx.windDir.z / magnitude;
+ spA0 = -play->envCtx.windDirection.x / magnitude;
+ sp9C = -play->envCtx.windDirection.z / magnitude;
if (i == 0) {
this->unk_144 += 0.049999997f * Rand_ZeroOne();
@@ -512,7 +511,7 @@ void func_808DD3C8(Actor* thisx, PlayState* play2) {
f32 temp_f2;
f32 tempf;
- if ((play->cameraPtrs[CAM_ID_MAIN]->stateFlags & CAM_STATE_UNDERWATER) || ((u8)play->envCtx.unk_E2 == 0)) {
+ if ((play->cameraPtrs[CAM_ID_MAIN]->stateFlags & CAM_STATE_UNDERWATER) || ((u8)play->envCtx.stormState == 0)) {
return;
}
@@ -525,14 +524,14 @@ void func_808DD3C8(Actor* thisx, PlayState* play2) {
temp_f0 = CLAMP(temp_f0, 0.0f, 1.0f);
Math_SmoothStepToF(&D_808DE5B0, temp_f0, 0.2f, 0.1f, 0.001f);
- sp68 = play->envCtx.unk_F2[2];
+ sp68 = play->envCtx.precipitation[PRECIP_SNOW_CUR];
sp68 *= D_808DE5B0;
- if ((play->envCtx.unk_F2[2] >= 32) && (sp68 < 32)) {
+ if ((play->envCtx.precipitation[PRECIP_SNOW_CUR] >= 32) && (sp68 < 32)) {
sp68 = 32;
}
} else {
- sp68 = play->envCtx.unk_F2[2];
+ sp68 = play->envCtx.precipitation[PRECIP_SNOW_CUR];
}
for (i = 0; i < sp68; i++) {
@@ -654,7 +653,7 @@ void func_808DDE9C(Actor* thisx, PlayState* play2) {
Player* player = GET_PLAYER(play);
s32 i;
u8 phi_s5;
- u16 end = play->envCtx.unk_F2[1];
+ u16 end = play->envCtx.precipitation[PRECIP_RAIN_CUR];
f32 temp_f12;
f32 temp_f20;
f32 temp_f22;
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 015f1d8ae..2dbfecfdf 100644
--- a/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c
+++ b/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c
@@ -80,12 +80,13 @@ void OceffSpot_End(OceffSpot* this, PlayState* play) {
this->unk16C -= 0.05f;
} else {
Actor_Kill(&this->actor);
- if ((R_TIME_SPEED != 400) && (play->msgCtx.unk12046 == 0)) {
- if ((play->msgCtx.ocarinaAction != 0x39) || (play->msgCtx.ocarinaMode != 0xA)) {
+ if ((R_TIME_SPEED != 400) && !play->msgCtx.blockSunsSong) {
+ if ((play->msgCtx.ocarinaAction != OCARINA_ACTION_CHECK_NOTIME_DONE) ||
+ (play->msgCtx.ocarinaMode != OCARINA_MODE_PLAYED_SUNS)) {
gSaveContext.sunsSongState = SUNSSONG_START;
}
} else {
- play->msgCtx.ocarinaMode = 4;
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
}
}
}
@@ -143,7 +144,7 @@ void OceffSpot_Update(Actor* thisx, PlayState* play) {
temp = (2.0f - this->unk16C) * this->unk16C;
- func_800FD2B4(play, temp * 0.5f, 880.0f, 0.2f, 0.9f);
+ Environment_AdjustLights(play, temp * 0.5f, 880.0f, 0.2f, 0.9f);
Lights_PointNoGlowSetInfo(&this->lightInfo1, this->actor.world.pos.x, this->actor.world.pos.y + 55.0f,
this->actor.world.pos.z, (s32)(255.0f * temp), (s32)(255.0f * temp), (s32)(200.0f * temp),
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 c73e67a1d..59cd120cf 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.c
+++ b/src/overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.c
@@ -41,7 +41,7 @@ void OceffWipe_Destroy(Actor* thisx, PlayState* play) {
OceffWipe* this = THIS;
Magic_Reset(play);
- play->msgCtx.unk120B0 = 0;
+ play->msgCtx.ocarinaSongEffectActive = false;
}
void OceffWipe_Update(Actor* thisx, PlayState* play) {
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 641d49f49..6dbea9128 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c
+++ b/src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c
@@ -43,7 +43,7 @@ void OceffWipe2_Destroy(Actor* thisx, PlayState* play) {
OceffWipe2* this = THIS;
Magic_Reset(play);
- play->msgCtx.unk120B0 = 0;
+ play->msgCtx.ocarinaSongEffectActive = false;
}
void OceffWipe2_Update(Actor* thisx, PlayState* play) {
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 f7156878c..f0ab978c8 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.c
+++ b/src/overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.c
@@ -44,7 +44,7 @@ void OceffWipe3_Destroy(Actor* thisx, PlayState* play) {
OceffWipe3* this = THIS;
Magic_Reset(play);
- play->msgCtx.unk120B0 = 0;
+ play->msgCtx.ocarinaSongEffectActive = false;
}
void OceffWipe3_Update(Actor* thisx, PlayState* play) {
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 d82c117e9..0bda6d1b9 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.c
+++ b/src/overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.c
@@ -43,7 +43,7 @@ void OceffWipe4_Destroy(Actor* thisx, PlayState* play) {
OceffWipe4* this = THIS;
Magic_Reset(play);
- play->msgCtx.unk120B0 = 0;
+ play->msgCtx.ocarinaSongEffectActive = false;
}
void OceffWipe4_Update(Actor* thisx, PlayState* play) {
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 3dcb06d5d..272d0fb88 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe5/z_oceff_wipe5.c
+++ b/src/overlays/actors/ovl_Oceff_Wipe5/z_oceff_wipe5.c
@@ -41,7 +41,7 @@ void OceffWipe5_Destroy(Actor* thisx, PlayState* play) {
OceffWipe5* this = THIS;
Magic_Reset(play);
- play->msgCtx.unk120B0 = 0;
+ play->msgCtx.ocarinaSongEffectActive = false;
}
void OceffWipe5_Update(Actor* thisx, PlayState* play) {
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 244870f9d..28a5dfb04 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe6/z_oceff_wipe6.c
+++ b/src/overlays/actors/ovl_Oceff_Wipe6/z_oceff_wipe6.c
@@ -39,7 +39,7 @@ void OceffWipe6_Init(Actor* thisx, PlayState* play) {
void OceffWipe6_Destroy(Actor* thisx, PlayState* play) {
Magic_Reset(play);
- play->msgCtx.unk120B0 = 0;
+ play->msgCtx.ocarinaSongEffectActive = false;
}
void OceffWipe6_Update(Actor* thisx, PlayState* play) {
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 fb8011c60..49f9fc0dd 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe7/z_oceff_wipe7.c
+++ b/src/overlays/actors/ovl_Oceff_Wipe7/z_oceff_wipe7.c
@@ -43,7 +43,7 @@ void OceffWipe7_Destroy(Actor* thisx, PlayState* play) {
OceffWipe7* this = THIS;
Magic_Reset(play);
- play->msgCtx.unk120B0 = 0;
+ play->msgCtx.ocarinaSongEffectActive = false;
}
void OceffWipe7_Update(Actor* thisx, PlayState* play) {
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 4130dcb74..7a5cc209d 100644
--- a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c
+++ b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c
@@ -129,18 +129,18 @@ void ShotSun_TriggerFairy(ShotSun* this, PlayState* play) {
void ShotSun_UpdateForOcarina(ShotSun* this, PlayState* play) {
s32 type = SHOTSUN_GET_TYPE(&this->actor);
- if (play->msgCtx.ocarinaMode == 3) {
+ if (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) {
switch (play->msgCtx.lastPlayedSong) {
case OCARINA_SONG_STORMS:
if (type == SHOTSUN_FAIRY_SPAWNER_STORMS) {
this->actionFunc = ShotSun_TriggerFairy;
- play->msgCtx.ocarinaMode = 4;
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
}
break;
case OCARINA_SONG_SUNS:
if (type == SHOTSUN_FAIRY_SPAWNER_SUNS) {
this->actionFunc = ShotSun_TriggerFairy;
- play->msgCtx.ocarinaMode = 4;
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
}
break;
}
diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c
index 6462c3665..6e19ae832 100644
--- a/src/overlays/actors/ovl_player_actor/z_player.c
+++ b/src/overlays/actors/ovl_player_actor/z_player.c
@@ -64,9 +64,9 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input);
s32 Player_StartFishing(PlayState* play);
void func_8085B170(PlayState* play, Player* this);
s32 func_8083A658(PlayState* play, Player* this);
-void func_8082F8BC(PlayState* play, Player* this, PlayerItemAction itemAction);
+void Player_InitItemAction(PlayState* play, Player* this, PlayerItemAction itemAction);
-void func_80831990(PlayState* play, Player* this, ItemId item);
+void Player_UseItem(PlayState* play, Player* this, ItemId item);
void func_80836988(Player* this, PlayState* play);
@@ -210,7 +210,7 @@ void Player_Action_97(Player* this, PlayState* play);
s32 Player_UpperAction_0(Player* this, PlayState* play);
s32 Player_UpperAction_1(Player* this, PlayState* play);
-s32 Player_UpperAction_2(Player* this, PlayState* play);
+s32 Player_UpperAction_ChangeHeldItem(Player* this, PlayState* play);
s32 Player_UpperAction_3(Player* this, PlayState* play);
s32 Player_UpperAction_4(Player* this, PlayState* play);
s32 Player_UpperAction_5(Player* this, PlayState* play);
@@ -233,21 +233,21 @@ void Player_InitItemAction_SpawnExplosive(PlayState* play, Player* this);
void Player_InitItemAction_SpawnHookshot(PlayState* play, Player* this);
void Player_InitItemAction_5(PlayState* play, Player* this);
-s32 func_80839518(Player* this, PlayState* play);
-s32 func_808365DC(Player* this, PlayState* play);
-s32 func_8083D23C(Player* this, PlayState* play);
-s32 func_8083CCB4(Player* this, PlayState* play);
-s32 func_808391D8(Player* this, PlayState* play);
-s32 func_8083DFC4(Player* this, PlayState* play);
-s32 func_8083A114(Player* this, PlayState* play);
-s32 func_80848570(Player* this, PlayState* play);
-s32 func_8083A580(Player* this, PlayState* play);
-s32 func_8083D78C(Player* this, PlayState* play);
-s32 func_80839B18(Player* this, PlayState* play);
-s32 func_8083A274(Player* this, PlayState* play);
-s32 func_80834DFC(Player* this, PlayState* play);
-s32 func_80838A90(Player* this, PlayState* play);
-s32 func_8083A0CC(Player* this, PlayState* play);
+s32 Player_ActionChange_0(Player* this, PlayState* play);
+s32 Player_ActionChange_1(Player* this, PlayState* play);
+s32 Player_ActionChange_2(Player* this, PlayState* play);
+s32 Player_ActionChange_3(Player* this, PlayState* play);
+s32 Player_ActionChange_4(Player* this, PlayState* play);
+s32 Player_ActionChange_5(Player* this, PlayState* play);
+s32 Player_ActionChange_6(Player* this, PlayState* play);
+s32 Player_ActionChange_7(Player* this, PlayState* play);
+s32 Player_ActionChange_8(Player* this, PlayState* play);
+s32 Player_ActionChange_9(Player* this, PlayState* play);
+s32 Player_ActionChange_10(Player* this, PlayState* play);
+s32 Player_ActionChange_11(Player* this, PlayState* play);
+s32 Player_ActionChange_12(Player* this, PlayState* play);
+s32 Player_ActionChange_13(Player* this, PlayState* play);
+s32 Player_ActionChange_14(Player* this, PlayState* play);
/* Init Mode functions */
void Player_InitMode_0(PlayState* play, Player* this);
@@ -468,10 +468,10 @@ typedef struct MeleeWeaponDamageInfo {
/* 0x7 */ u8 dmgHumanStrong;
} MeleeWeaponDamageInfo; // size = 0x8
-typedef struct struct_8085CC88 {
+typedef struct ItemChangeInfo {
/* 0x0 */ PlayerAnimationHeader* anim;
- /* 0x4 */ u8 frame;
-} struct_8085CC88; // size = 0x8
+ /* 0x4 */ u8 changeFrame;
+} ItemChangeInfo; // size = 0x8
typedef struct {
/* 0x0 */ u8 itemId;
@@ -504,7 +504,7 @@ typedef struct struct_8085D200 {
f32 sPlayerControlStickMagnitude;
s16 sPlayerControlStickAngle;
s16 D_80862B02; // analog stick yaw + camera yaw
-s32 D_80862B04; // boolean, set to the return value of func_8083216C
+s32 D_80862B04; // boolean, set to the return value of Player_UpdateUpperBody
FloorType sPlayerFloorType;
u32 sPlayerTouchedWallFlags;
ConveyorSpeed sPlayerConveyorSpeedIndex;
@@ -520,10 +520,10 @@ Vec3f sPlayerInteractWallCheckResult;
f32 D_80862B3C;
FloorEffect sPlayerFloorEffect;
Input* sPlayerControlInput;
-s32 D_80862B48;
-s32 D_80862B4C;
-EnvLightSettings D_80862B50; // backup of play->envCtx.lightSettings
-s32 D_80862B6C; // this->skelAnime.moveFlags // sPlayerSkelMoveFlags?
+s32 sPlayerUseHeldItem; // When true, the current held item is used. Is reset to false every frame.
+s32 sPlayerHeldItemButtonIsHeldDown; // Indicates if the button for the current held item is held down.
+AdjLightSettings D_80862B50; // backup of lay->envCtx.adjLightSettings
+s32 D_80862B6C; // this->skelAnime.moveFlags // sPlayerSkelMoveFlags?
s32 func_8082DA90(PlayState* play) {
return (play->transitionTrigger != TRANS_TRIGGER_OFF) || (play->transitionMode != TRANS_MODE_OFF);
@@ -586,7 +586,7 @@ void func_8082DC64(PlayState* play, Player* this) {
this->stateFlags2 &= ~(PLAYER_STATE2_400 | PLAYER_STATE2_800);
}
-void func_8082DCA0(PlayState* play, Player* this) {
+void Player_DetachHeldActor(PlayState* play, Player* this) {
Actor* heldActor = this->heldActor;
if ((heldActor != NULL) && !Player_IsHoldingHookshot(this)) {
@@ -598,7 +598,7 @@ void func_8082DCA0(PlayState* play, Player* this) {
}
if (Player_GetExplosiveHeld(this) > PLAYER_EXPLOSIVE_NONE) {
- func_8082F8BC(play, this, PLAYER_IA_NONE);
+ Player_InitItemAction(play, this, PLAYER_IA_NONE);
this->heldItemId = ITEM_FE;
}
}
@@ -632,7 +632,7 @@ void func_8082DD2C(PlayState* play, Player* this) {
s32 func_8082DE14(PlayState* play, Player* this) {
if (this->heldItemAction > PLAYER_IA_LAST_USED) {
- func_80831990(play, this, ITEM_NONE);
+ Player_UseItem(play, this, ITEM_NONE);
return true;
} else {
return false;
@@ -641,20 +641,20 @@ s32 func_8082DE14(PlayState* play, Player* this) {
void func_8082DE50(PlayState* play, Player* this) {
func_8082DD2C(play, this);
- func_8082DCA0(play, this);
+ Player_DetachHeldActor(play, this);
}
s32 func_8082DE88(Player* this, s32 arg1, s32 arg2) {
s16 controlStickAngleDiff = this->prevControlStickAngle - sPlayerControlStickAngle;
- this->unk_AE8 +=
+ this->actionVar2 +=
arg1 + TRUNCF_BINANG(ABS_ALT(controlStickAngleDiff) * fabsf(sPlayerControlStickMagnitude) * (1.0f / 0x600F0));
if (CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_B | BTN_A)) {
- this->unk_AE8 += 5;
+ this->actionVar2 += 5;
}
- return this->unk_AE8 >= arg2;
+ return this->actionVar2 >= arg2;
}
void func_8082DF2C(PlayState* play) {
@@ -663,7 +663,7 @@ void func_8082DF2C(PlayState* play) {
}
}
-u8 D_8085B9F0[PLAYER_LIMB_MAX] = {
+u8 sPlayerUpperBodyLimbCopyMap[PLAYER_LIMB_MAX] = {
false, // PLAYER_LIMB_NONE
false, // PLAYER_LIMB_ROOT
false, // PLAYER_LIMB_WAIST
@@ -2863,30 +2863,30 @@ void func_8082F1AC(PlayState* play, Player* this) {
void Player_SetUpperAction(PlayState* play, Player* this, PlayerUpperActionFunc upperActionFunc) {
this->upperActionFunc = upperActionFunc;
this->unk_ACE = 0;
- this->unk_AC8 = 0.0f;
+ this->skelAnimeUpperBlendWeight = 0.0f;
func_8082E00C(this);
}
#define GET_PLAYER_ANIM(group, type) ((PlayerAnimationHeader**)D_8085BE84)[group * PLAYER_ANIMTYPE_MAX + type]
-void func_8082F470(PlayState* play, Player* this, PlayerItemAction itemAction) {
+void Player_InitItemActionWithAnim(PlayState* play, Player* this, PlayerItemAction itemAction) {
PlayerAnimationHeader* curAnim = this->skelAnime.animation;
PlayerAnimationHeader*(*iter)[PLAYER_ANIMTYPE_MAX] = (void*)&D_8085BE84[0][this->modelAnimType];
- s32 i;
+ s32 animGroup;
this->stateFlags1 &= ~(PLAYER_STATE1_8 | PLAYER_STATE1_1000000);
- for (i = 0; i < PLAYER_ANIMGROUP_MAX; i++) {
+ for (animGroup = 0; animGroup < PLAYER_ANIMGROUP_MAX; animGroup++) {
if (curAnim == **iter) {
break;
}
iter++;
}
- func_8082F8BC(play, this, itemAction);
+ Player_InitItemAction(play, this, itemAction);
- if (i < PLAYER_ANIMGROUP_MAX) {
- this->skelAnime.animation = GET_PLAYER_ANIM(i, this->modelAnimType);
+ if (animGroup < PLAYER_ANIMGROUP_MAX) {
+ this->skelAnime.animation = GET_PLAYER_ANIM(animGroup, this->modelAnimType);
}
}
@@ -2988,7 +2988,7 @@ PlayerItemAction Player_ItemToItemAction(Player* this, ItemId item) {
}
}
-PlayerUpperActionFunc D_8085C9F0[PLAYER_IA_MAX] = {
+PlayerUpperActionFunc sPlayerUpperActionUpdateFuncs[PLAYER_IA_MAX] = {
Player_UpperAction_0, // PLAYER_IA_NONE
Player_UpperAction_0, // PLAYER_IA_LAST_USED
Player_UpperAction_0, // PLAYER_IA_FISHING_ROD
@@ -3076,7 +3076,7 @@ PlayerUpperActionFunc D_8085C9F0[PLAYER_IA_MAX] = {
typedef void (*PlayerInitItemActionFunc)(PlayState*, Player*);
-PlayerInitItemActionFunc sPlayerInitItemActionFuncs[PLAYER_IA_MAX] = {
+PlayerInitItemActionFunc sPlayerItemActionInitFuncs[PLAYER_IA_MAX] = {
Player_InitItemAction_DoNothing, // PLAYER_IA_NONE
Player_InitItemAction_DoNothing, // PLAYER_IA_LAST_USED
Player_InitItemAction_DoNothing, // PLAYER_IA_FISHING_ROD
@@ -3189,27 +3189,94 @@ void func_8082F5FC(Player* this, Actor* actor) {
this->stateFlags1 |= PLAYER_STATE1_800;
}
-struct_8085CC88 D_8085CC88[] = {
- { &gPlayerAnim_link_normal_free2free, 12 },
- { &gPlayerAnim_link_normal_normal2fighter, 6 },
- { &gPlayerAnim_link_hammer_normal2long, 8 },
- { &gPlayerAnim_link_normal_normal2free, 8 },
- { &gPlayerAnim_link_fighter_fighter2long, 8 },
- { &gPlayerAnim_link_normal_fighter2free, 10 },
- { &gPlayerAnim_link_hammer_long2free, 7 },
- { &gPlayerAnim_link_hammer_long2long, 11 },
- { &gPlayerAnim_link_normal_free2free, 12 },
- { &gPlayerAnim_link_normal_normal2bom, 4 },
- { &gPlayerAnim_link_normal_long2bom, 4 },
- { &gPlayerAnim_link_normal_free2bom, 4 },
- { &gPlayerAnim_link_anchor_anchor2fighter, 5 },
- { &gPlayerAnim_link_normal_free2freeB, 13 },
- { &gPlayerAnim_pz_bladeon, 4 },
+typedef enum ItemChangeType {
+ /* 0 */ PLAYER_ITEM_CHG_0,
+ /* 1 */ PLAYER_ITEM_CHG_1,
+ /* 2 */ PLAYER_ITEM_CHG_2,
+ /* 3 */ PLAYER_ITEM_CHG_3,
+ /* 4 */ PLAYER_ITEM_CHG_4,
+ /* 5 */ PLAYER_ITEM_CHG_5,
+ /* 6 */ PLAYER_ITEM_CHG_6,
+ /* 7 */ PLAYER_ITEM_CHG_7,
+ /* 8 */ PLAYER_ITEM_CHG_8,
+ /* 9 */ PLAYER_ITEM_CHG_9,
+ /* 10 */ PLAYER_ITEM_CHG_10,
+ /* 11 */ PLAYER_ITEM_CHG_11,
+ /* 12 */ PLAYER_ITEM_CHG_12,
+ /* 13 */ PLAYER_ITEM_CHG_13,
+ /* 14 */ PLAYER_ITEM_CHG_14,
+ /* 15 */ PLAYER_ITEM_CHG_MAX
+} ItemChangeType;
+
+ItemChangeInfo sPlayerItemChangeInfo[PLAYER_ITEM_CHG_MAX] = {
+ { &gPlayerAnim_link_normal_free2free, 12 }, // PLAYER_ITEM_CHG_0
+ { &gPlayerAnim_link_normal_normal2fighter, 6 }, // PLAYER_ITEM_CHG_1
+ { &gPlayerAnim_link_hammer_normal2long, 8 }, // PLAYER_ITEM_CHG_2
+ { &gPlayerAnim_link_normal_normal2free, 8 }, // PLAYER_ITEM_CHG_3
+ { &gPlayerAnim_link_fighter_fighter2long, 8 }, // PLAYER_ITEM_CHG_4
+ { &gPlayerAnim_link_normal_fighter2free, 10 }, // PLAYER_ITEM_CHG_5
+ { &gPlayerAnim_link_hammer_long2free, 7 }, // PLAYER_ITEM_CHG_6
+ { &gPlayerAnim_link_hammer_long2long, 11 }, // PLAYER_ITEM_CHG_7
+ { &gPlayerAnim_link_normal_free2free, 12 }, // PLAYER_ITEM_CHG_8
+ { &gPlayerAnim_link_normal_normal2bom, 4 }, // PLAYER_ITEM_CHG_9
+ { &gPlayerAnim_link_normal_long2bom, 4 }, // PLAYER_ITEM_CHG_10
+ { &gPlayerAnim_link_normal_free2bom, 4 }, // PLAYER_ITEM_CHG_11
+ { &gPlayerAnim_link_anchor_anchor2fighter, 5 }, // PLAYER_ITEM_CHG_12
+ { &gPlayerAnim_link_normal_free2freeB, 13 }, // PLAYER_ITEM_CHG_13
+ { &gPlayerAnim_pz_bladeon, 4 }, // PLAYER_ITEM_CHG_14
};
-s8 D_8085CD00[PLAYER_ANIMTYPE_MAX][PLAYER_ANIMTYPE_MAX] = {
- { 8, -5, -3, -6, 8, 0xB }, { 5, 0, -1, 4, 5, 9 }, { 3, 1, 0, 2, 3, 9 },
- { 6, -4, -2, 7, 6, 0xA }, { 8, -5, -3, -6, 8, 0xB }, { 8, -5, -3, -6, 8, 0xB },
+// Maps the appropriate ItemChangeType based on current and next animtype.
+// A negative type value means the corresponding animation should be played in reverse.
+s8 sPlayerItemChangeTypes[PLAYER_ANIMTYPE_MAX][PLAYER_ANIMTYPE_MAX] = {
+ {
+ PLAYER_ITEM_CHG_8, // PLAYER_ANIMTYPE_DEFAULT -> PLAYER_ANIMTYPE_DEFAULT
+ -PLAYER_ITEM_CHG_5, // PLAYER_ANIMTYPE_DEFAULT -> PLAYER_ANIMTYPE_1
+ -PLAYER_ITEM_CHG_3, // PLAYER_ANIMTYPE_DEFAULT -> PLAYER_ANIMTYPE_2
+ -PLAYER_ITEM_CHG_6, // PLAYER_ANIMTYPE_DEFAULT -> PLAYER_ANIMTYPE_3
+ PLAYER_ITEM_CHG_8, // PLAYER_ANIMTYPE_DEFAULT -> PLAYER_ANIMTYPE_4
+ PLAYER_ITEM_CHG_11, // PLAYER_ANIMTYPE_DEFAULT -> PLAYER_ANIMTYPE_5
+ },
+ {
+ PLAYER_ITEM_CHG_5, // PLAYER_ANIMTYPE_1 -> PLAYER_ANIMTYPE_DEFAULT
+ PLAYER_ITEM_CHG_0, // PLAYER_ANIMTYPE_1 -> PLAYER_ANIMTYPE_1
+ -PLAYER_ITEM_CHG_1, // PLAYER_ANIMTYPE_1 -> PLAYER_ANIMTYPE_2
+ PLAYER_ITEM_CHG_4, // PLAYER_ANIMTYPE_1 -> PLAYER_ANIMTYPE_3
+ PLAYER_ITEM_CHG_5, // PLAYER_ANIMTYPE_1 -> PLAYER_ANIMTYPE_4
+ PLAYER_ITEM_CHG_9, // PLAYER_ANIMTYPE_1 -> PLAYER_ANIMTYPE_5
+ },
+ {
+ PLAYER_ITEM_CHG_3, // PLAYER_ANIMTYPE_2 -> PLAYER_ANIMTYPE_DEFAULT
+ PLAYER_ITEM_CHG_1, // PLAYER_ANIMTYPE_2 -> PLAYER_ANIMTYPE_1
+ PLAYER_ITEM_CHG_0, // PLAYER_ANIMTYPE_2 -> PLAYER_ANIMTYPE_2
+ PLAYER_ITEM_CHG_2, // PLAYER_ANIMTYPE_2 -> PLAYER_ANIMTYPE_3
+ PLAYER_ITEM_CHG_3, // PLAYER_ANIMTYPE_2 -> PLAYER_ANIMTYPE_4
+ PLAYER_ITEM_CHG_9, // PLAYER_ANIMTYPE_2 -> PLAYER_ANIMTYPE_5
+ },
+ {
+ PLAYER_ITEM_CHG_6, // PLAYER_ANIMTYPE_3 -> PLAYER_ANIMTYPE_DEFAULT
+ -PLAYER_ITEM_CHG_4, // PLAYER_ANIMTYPE_3 -> PLAYER_ANIMTYPE_1
+ -PLAYER_ITEM_CHG_2, // PLAYER_ANIMTYPE_3 -> PLAYER_ANIMTYPE_2
+ PLAYER_ITEM_CHG_7, // PLAYER_ANIMTYPE_3 -> PLAYER_ANIMTYPE_3
+ PLAYER_ITEM_CHG_6, // PLAYER_ANIMTYPE_3 -> PLAYER_ANIMTYPE_4
+ PLAYER_ITEM_CHG_10, // PLAYER_ANIMTYPE_3 -> PLAYER_ANIMTYPE_5
+ },
+ {
+ PLAYER_ITEM_CHG_8, // PLAYER_ANIMTYPE_4 -> PLAYER_ANIMTYPE_DEFAULT
+ -PLAYER_ITEM_CHG_5, // PLAYER_ANIMTYPE_4 -> PLAYER_ANIMTYPE_1
+ -PLAYER_ITEM_CHG_3, // PLAYER_ANIMTYPE_4 -> PLAYER_ANIMTYPE_2
+ -PLAYER_ITEM_CHG_6, // PLAYER_ANIMTYPE_4 -> PLAYER_ANIMTYPE_3
+ PLAYER_ITEM_CHG_8, // PLAYER_ANIMTYPE_4 -> PLAYER_ANIMTYPE_4
+ PLAYER_ITEM_CHG_11, // PLAYER_ANIMTYPE_4 -> PLAYER_ANIMTYPE_5
+ },
+ {
+ PLAYER_ITEM_CHG_8, // PLAYER_ANIMTYPE_5 -> PLAYER_ANIMTYPE_DEFAULT
+ -PLAYER_ITEM_CHG_5, // PLAYER_ANIMTYPE_5 -> PLAYER_ANIMTYPE_1
+ -PLAYER_ITEM_CHG_3, // PLAYER_ANIMTYPE_5 -> PLAYER_ANIMTYPE_2
+ -PLAYER_ITEM_CHG_6, // PLAYER_ANIMTYPE_5 -> PLAYER_ANIMTYPE_3
+ PLAYER_ITEM_CHG_8, // PLAYER_ANIMTYPE_5 -> PLAYER_ANIMTYPE_4
+ PLAYER_ITEM_CHG_11, // PLAYER_ANIMTYPE_5 -> PLAYER_ANIMTYPE_5
+ },
};
ExplosiveInfo sPlayerExplosiveInfo[PLAYER_EXPLOSIVE_MAX] = {
@@ -3271,11 +3338,11 @@ void Player_InitItemAction_SpawnHookshot(PlayState* play, Player* this) {
this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0, 0);
if (this->heldActor == NULL) {
- func_80831990(play, this, ITEM_NONE);
+ Player_UseItem(play, this, ITEM_NONE);
return;
}
armsHook = (ArmsHook*)this->heldActor;
- armsHook->actor.objBankIndex = this->actor.objBankIndex;
+ armsHook->actor.objectSlot = this->actor.objectSlot;
armsHook->unk_208 = this->transformation;
}
@@ -3283,7 +3350,7 @@ void Player_InitItemAction_5(PlayState* play, Player* this) {
this->stateFlags1 |= PLAYER_STATE1_1000000;
}
-void func_8082F8BC(PlayState* play, Player* this, PlayerItemAction itemAction) {
+void Player_InitItemAction(PlayState* play, Player* this, PlayerItemAction itemAction) {
this->itemAction = this->heldItemAction = itemAction;
this->modelGroup = this->nextModelGroup;
@@ -3293,7 +3360,7 @@ void func_8082F8BC(PlayState* play, Player* this, PlayerItemAction itemAction) {
this->unk_B0C = 0.0f;
this->unk_B28 = 0;
- sPlayerInitItemActionFuncs[itemAction](play, this);
+ sPlayerItemActionInitFuncs[itemAction](play, this);
Player_SetModelGroup(this, this->modelGroup);
}
@@ -3528,7 +3595,7 @@ void func_8082FC60(Player* this) {
this->unk_B40 = 0.0f;
}
-s32 func_8082FC78(Player* this, ItemId item) {
+s32 Player_ItemIsInUse(Player* this, ItemId item) {
if ((item < ITEM_FD) && (Player_ItemToItemAction(this, item) == this->itemAction)) {
return true;
} else {
@@ -3536,7 +3603,7 @@ s32 func_8082FC78(Player* this, ItemId item) {
}
}
-s32 func_8082FCC4(Player* this, ItemId item, PlayerItemAction itemAction) {
+s32 Player_ItemIsItemAction(Player* this, ItemId item, PlayerItemAction itemAction) {
if ((item < ITEM_FD) && (Player_ItemToItemAction(this, item) == itemAction)) {
return true;
} else {
@@ -3548,7 +3615,7 @@ EquipSlot func_8082FD0C(Player* this, PlayerItemAction itemAction) {
s32 btn;
for (btn = EQUIP_SLOT_C_LEFT; btn <= EQUIP_SLOT_C_RIGHT; btn++) {
- if (func_8082FCC4(this, GET_CUR_FORM_BTN_ITEM(btn), itemAction)) {
+ if (Player_ItemIsItemAction(this, GET_CUR_FORM_BTN_ITEM(btn), itemAction)) {
return btn;
}
}
@@ -3556,7 +3623,7 @@ EquipSlot func_8082FD0C(Player* this, PlayerItemAction itemAction) {
return EQUIP_SLOT_NONE;
}
-u16 D_8085CFA8[] = {
+u16 sPlayerItemButtons[] = {
BTN_B,
BTN_CLEFT,
BTN_CDOWN,
@@ -3567,8 +3634,8 @@ u16 D_8085CFA8[] = {
EquipSlot func_8082FDC4(void) {
EquipSlot i;
- for (i = 0; i < ARRAY_COUNT(D_8085CFA8); i++) {
- if (CHECK_BTN_ALL(sPlayerControlInput->press.button, D_8085CFA8[i])) {
+ for (i = 0; i < ARRAY_COUNT(sPlayerItemButtons); i++) {
+ if (CHECK_BTN_ALL(sPlayerControlInput->press.button, sPlayerItemButtons[i])) {
break;
}
}
@@ -3576,7 +3643,10 @@ EquipSlot func_8082FDC4(void) {
return i;
}
-void func_8082FE0C(Player* this, PlayState* play) {
+/**
+ * Handles the high level item usage and changing process based on the B and C buttons.
+ */
+void Player_ProcessItemButtons(Player* this, PlayState* play) {
if (this->stateFlags1 & (PLAYER_STATE1_800 | PLAYER_STATE1_20000000)) {
return;
}
@@ -3602,7 +3672,7 @@ void func_8082FE0C(Player* this, PlayState* play) {
if ((maskIdMinusOne < PLAYER_MASK_TRUTH - 1) || (maskIdMinusOne >= PLAYER_MASK_MAX - 1)) {
maskIdMinusOne = this->currentMask - 1;
}
- func_80831990(play, this, Player_MaskIdToItemId(maskIdMinusOne));
+ Player_UseItem(play, this, Player_MaskIdToItemId(maskIdMinusOne));
return;
}
@@ -3616,10 +3686,11 @@ void func_8082FE0C(Player* this, PlayState* play) {
if (((this->actor.id == ACTOR_PLAYER) && (this->itemAction >= PLAYER_IA_FISHING_ROD)) &&
!(((Player_GetHeldBButtonSword(this) == PLAYER_B_SWORD_NONE) || (gSaveContext.jinxTimer == 0)) &&
- (func_8082FC78(this, (IREG(1) != 0) ? ITEM_FISHING_ROD : Inventory_GetBtnBItem(play)) ||
- func_8082FC78(this, C_BTN_ITEM(EQUIP_SLOT_C_LEFT)) || func_8082FC78(this, C_BTN_ITEM(EQUIP_SLOT_C_DOWN)) ||
- func_8082FC78(this, C_BTN_ITEM(EQUIP_SLOT_C_RIGHT))))) {
- func_80831990(play, this, ITEM_NONE);
+ (Player_ItemIsInUse(this, (IREG(1) != 0) ? ITEM_FISHING_ROD : Inventory_GetBtnBItem(play)) ||
+ Player_ItemIsInUse(this, C_BTN_ITEM(EQUIP_SLOT_C_LEFT)) ||
+ Player_ItemIsInUse(this, C_BTN_ITEM(EQUIP_SLOT_C_DOWN)) ||
+ Player_ItemIsInUse(this, C_BTN_ITEM(EQUIP_SLOT_C_RIGHT))))) {
+ Player_UseItem(play, this, ITEM_NONE);
} else {
s32 pad;
ItemId item;
@@ -3630,17 +3701,18 @@ void func_8082FE0C(Player* this, PlayState* play) {
? EQUIP_SLOT_B
: i;
- item = func_8012364C(play, this, i);
+ item = Player_GetItemOnButton(play, this, i);
+
if (item >= ITEM_FD) {
- for (i = 0; i < ARRAY_COUNT(D_8085CFA8); i++) {
- if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, D_8085CFA8[i])) {
+ for (i = 0; i < ARRAY_COUNT(sPlayerItemButtons); i++) {
+ if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, sPlayerItemButtons[i])) {
break;
}
}
- item = func_8012364C(play, this, i);
+ item = Player_GetItemOnButton(play, this, i);
if ((item < ITEM_FD) && (Player_ItemToItemAction(this, item) == this->heldItemAction)) {
- D_80862B4C = 1;
+ sPlayerHeldItemButtonIsHeldDown = true;
}
} else if (item == ITEM_F0) {
if (this->blastMaskTimer == 0) {
@@ -3664,44 +3736,45 @@ void func_8082FE0C(Player* this, PlayState* play) {
}
} else {
this->heldItemButton = i;
- func_80831990(play, this, item);
+ Player_UseItem(play, this, item);
}
}
}
-void func_808302CC(Player* this, PlayState* play) {
+void Player_StartChangingHeldItem(Player* this, PlayState* play) {
PlayerAnimationHeader* anim;
s32 pad[3];
u8 nextModelAnimType;
- s32 var_v1;
- s8 itemAction = Player_ItemToItemAction(this, this->heldItemId);
+ s32 itemChangeType;
+ s8 heldItemAction = Player_ItemToItemAction(this, this->heldItemId);
s32 pad3;
f32 startFrame;
f32 endFrame;
f32 frameSpeed;
- Player_SetUpperAction(play, this, Player_UpperAction_2);
+ Player_SetUpperAction(play, this, Player_UpperAction_ChangeHeldItem);
nextModelAnimType = gPlayerModelTypes[this->nextModelGroup].modelAnimType;
- var_v1 = D_8085CD00[gPlayerModelTypes[this->modelGroup].modelAnimType][nextModelAnimType];
+ itemChangeType = sPlayerItemChangeTypes[gPlayerModelTypes[this->modelGroup].modelAnimType][nextModelAnimType];
- if ((itemAction == PLAYER_IA_ZORA_FINS) || (this->heldItemAction == PLAYER_IA_ZORA_FINS)) {
- var_v1 = (itemAction == PLAYER_IA_NONE) ? -14 : 14;
- } else if ((itemAction == PLAYER_IA_BOTTLE_EMPTY) || (itemAction == PLAYER_IA_11) ||
- ((itemAction == PLAYER_IA_NONE) &&
+ if ((heldItemAction == PLAYER_IA_ZORA_FINS) || (this->heldItemAction == PLAYER_IA_ZORA_FINS)) {
+ itemChangeType = (heldItemAction == PLAYER_IA_NONE) ? -PLAYER_ITEM_CHG_14 : PLAYER_ITEM_CHG_14;
+ } else if ((heldItemAction == PLAYER_IA_BOTTLE_EMPTY) || (heldItemAction == PLAYER_IA_11) ||
+ ((heldItemAction == PLAYER_IA_NONE) &&
((this->heldItemAction == PLAYER_IA_BOTTLE_EMPTY) || (this->heldItemAction == PLAYER_IA_11)))) {
- var_v1 = (itemAction == PLAYER_IA_NONE) ? -13 : 13;
+ itemChangeType = (heldItemAction == PLAYER_IA_NONE) ? -PLAYER_ITEM_CHG_13 : PLAYER_ITEM_CHG_13;
}
- this->unk_14E = ABS_ALT(var_v1);
- anim = D_8085CC88[this->unk_14E].anim;
+ this->itemChangeType = ABS_ALT(itemChangeType);
+ anim = sPlayerItemChangeInfo[this->itemChangeType].anim;
+
if ((anim == &gPlayerAnim_link_normal_fighter2free) && (this->currentShield == PLAYER_SHIELD_NONE)) {
anim = &gPlayerAnim_link_normal_free2fighter_free;
}
endFrame = Animation_GetLastFrame(anim);
- if (var_v1 >= 0) {
+ if (itemChangeType >= 0) {
frameSpeed = 1.2f;
startFrame = 0.0f;
} else {
@@ -3710,30 +3783,31 @@ void func_808302CC(Player* this, PlayState* play) {
endFrame = 0.0f;
}
- if (itemAction != PLAYER_IA_NONE) {
+ if (heldItemAction != PLAYER_IA_NONE) {
frameSpeed *= 2.0f;
}
- PlayerAnimation_Change(play, &this->unk_284, anim, frameSpeed, startFrame, endFrame, ANIMMODE_ONCE, 0.0f);
- this->stateFlags3 &= ~PLAYER_STATE3_40000000;
+ PlayerAnimation_Change(play, &this->skelAnimeUpper, anim, frameSpeed, startFrame, endFrame, ANIMMODE_ONCE, 0.0f);
+
+ this->stateFlags3 &= ~PLAYER_STATE3_START_CHANGING_HELD_ITEM;
}
-void func_808304BC(Player* this, PlayState* play) {
- if ((this->actor.id == ACTOR_PLAYER) && !(this->stateFlags3 & PLAYER_STATE3_40000000)) {
+void Player_UpdateItems(Player* this, PlayState* play) {
+ if ((this->actor.id == ACTOR_PLAYER) && !(this->stateFlags3 & PLAYER_STATE3_START_CHANGING_HELD_ITEM)) {
if ((this->heldItemAction == this->itemAction) || (this->stateFlags1 & PLAYER_STATE1_400000)) {
if ((gSaveContext.save.saveInfo.playerData.health != 0) && (play->csCtx.state == CS_STATE_IDLE)) {
if ((this->csMode == PLAYER_CSMODE_NONE) && (play->unk_1887C == 0) &&
(play->activeCamId == CAM_ID_MAIN)) {
if (!func_8082DA90(play) && (gSaveContext.timerStates[TIMER_ID_MINIGAME_2] != TIMER_STATE_STOP)) {
- func_8082FE0C(this, play);
+ Player_ProcessItemButtons(this, play);
}
}
}
}
}
- if (this->stateFlags3 & PLAYER_STATE3_40000000) {
- func_808302CC(this, play);
+ if (this->stateFlags3 & PLAYER_STATE3_START_CHANGING_HELD_ITEM) {
+ Player_StartChangingHeldItem(this, play);
}
}
@@ -3836,8 +3910,7 @@ s32 func_808306F8(Player* this, PlayState* play) {
return false;
}
-// Take out / put away sounds?
-void func_808308DC(PlayState* play, Player* this) {
+void Player_FinishItemChange(PlayState* play, Player* this) {
s32 isGoronOrDeku = (this->transformation == PLAYER_FORM_GORON) || (this->transformation == PLAYER_FORM_DEKU);
if ((this->heldItemAction != PLAYER_IA_NONE) && !isGoronOrDeku) {
@@ -3848,7 +3921,7 @@ void func_808308DC(PlayState* play, Player* this) {
}
}
- func_80831990(play, this, this->heldItemId);
+ Player_UseItem(play, this, this->heldItemId);
if (!isGoronOrDeku) {
if (Player_SwordFromIA(this, this->heldItemAction) > PLAYER_SWORD_NONE) {
@@ -3860,15 +3933,15 @@ void func_808308DC(PlayState* play, Player* this) {
}
void func_808309CC(PlayState* play, Player* this) {
- if (Player_UpperAction_2 == this->upperActionFunc) {
- func_808308DC(play, this);
+ if (Player_UpperAction_ChangeHeldItem == this->upperActionFunc) {
+ Player_FinishItemChange(play, this);
}
- Player_SetUpperAction(play, this, D_8085C9F0[this->heldItemAction]);
+ Player_SetUpperAction(play, this, sPlayerUpperActionUpdateFuncs[this->heldItemAction]);
this->unk_ACC = 0;
this->unk_AA4 = 0;
- func_8082DCA0(play, this);
- this->stateFlags3 &= ~PLAYER_STATE3_40000000;
+ Player_DetachHeldActor(play, this);
+ this->stateFlags3 &= ~PLAYER_STATE3_START_CHANGING_HELD_ITEM;
}
PlayerAnimationHeader* D_8085CFBC[2] = {
@@ -3894,7 +3967,7 @@ PlayerAnimationHeader* D_8085CFDC[2] = {
PlayerAnimationHeader* func_80830A58(PlayState* play, Player* this) {
Player_SetUpperAction(play, this, Player_UpperAction_3);
- func_8082DCA0(play, this);
+ Player_DetachHeldActor(play, this);
if (this->unk_B40 < 0.5f) {
return D_8085CFBC[Player_IsHoldingTwoHandedWeapon(this)];
@@ -3933,9 +4006,9 @@ s32 func_80830B88(PlayState* play, Player* this) {
(this->currentShield != PLAYER_SHIELD_NONE))) &&
func_8082FBE8(this))) {
PlayerAnimationHeader* anim = func_80830A58(play, this);
- f32 lastFrame = Animation_GetLastFrame(anim);
+ f32 endFrame = Animation_GetLastFrame(anim);
- PlayerAnimation_Change(play, &this->unk_284, anim, 3.0f / 3.0f, lastFrame, lastFrame,
+ PlayerAnimation_Change(play, &this->skelAnimeUpper, anim, 3.0f / 3.0f, endFrame, endFrame,
ANIMMODE_ONCE, 0.0f);
func_80830AE8(this);
return true;
@@ -3955,26 +4028,28 @@ void func_80830CE8(PlayState* play, Player* this) {
func_80123C58(this);
}
- Animation_Reverse(&this->unk_284);
+ Animation_Reverse(&this->skelAnimeUpper);
func_80830B38(this);
}
-void func_80830D40(PlayState* play, Player* this) {
- struct_8085CC88* entry = &D_8085CC88[this->unk_14E];
- f32 frame = entry->frame;
+void Player_WaitToFinishItemChange(PlayState* play, Player* this) {
+ ItemChangeInfo* itemChangeEntry = &sPlayerItemChangeInfo[this->itemChangeType];
+ f32 changeFrame = itemChangeEntry->changeFrame;
- if (this->unk_284.playSpeed < 0.0f) {
- frame -= 1.0f;
+ if (this->skelAnimeUpper.playSpeed < 0.0f) {
+ changeFrame -= 1.0f;
}
- if (PlayerAnimation_OnFrame(&this->unk_284, frame)) {
- func_808308DC(play, this);
+
+ if (PlayerAnimation_OnFrame(&this->skelAnimeUpper, changeFrame)) {
+ Player_FinishItemChange(play, this);
}
+
func_8082FB68(this);
}
s32 func_80830DF0(Player* this, PlayState* play) {
- if (this->stateFlags3 & PLAYER_STATE3_40000000) {
- func_808302CC(this, play);
+ if (this->stateFlags3 & PLAYER_STATE3_START_CHANGING_HELD_ITEM) {
+ Player_StartChangingHeldItem(this, play);
} else {
return false;
}
@@ -3985,7 +4060,7 @@ s32 func_80830E30(Player* this, PlayState* play) {
if ((this->heldItemAction == PLAYER_IA_11) || (this->transformation == PLAYER_FORM_ZORA)) {
Player_SetUpperAction(play, this, Player_UpperAction_12);
- PlayerAnimation_PlayOnce(play, &this->unk_284,
+ PlayerAnimation_PlayOnce(play, &this->skelAnimeUpper,
(this->meleeWeaponAnimation == PLAYER_MWA_ZORA_PUNCH_LEFT)
? &gPlayerAnim_pz_cutterwaitA
: ((this->meleeWeaponAnimation == PLAYER_MWA_ZORA_PUNCH_COMBO)
@@ -3997,7 +4072,7 @@ s32 func_80830E30(Player* this, PlayState* play) {
return false;
}
- PlayerAnimation_PlayOnce(play, &this->unk_284,
+ PlayerAnimation_PlayOnce(play, &this->skelAnimeUpper,
(Player_IsHoldingHookshot(this))
? &gPlayerAnim_link_hook_shot_ready
: ((this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_tamahakidf
@@ -4036,7 +4111,7 @@ s32 func_80831010(Player* this, PlayState* play) {
s32 func_80831094(Player* this, PlayState* play) {
if ((this->doorType == PLAYER_DOORTYPE_NONE) && !(this->stateFlags1 & PLAYER_STATE1_2000000)) {
- if ((D_80862B48 != 0) || func_80830F9C(play)) {
+ if (sPlayerUseHeldItem || func_80830F9C(play)) {
if (func_80830E30(this, play)) {
return func_80831010(this, play);
}
@@ -4122,7 +4197,7 @@ s32 func_808313A8(PlayState* play, Player* this, Actor* actor) {
void func_808313F0(Player* this, PlayState* play) {
if (!func_808313A8(play, this, this->heldActor)) {
Player_SetUpperAction(play, this, Player_UpperAction_10);
- PlayerAnimation_PlayLoop(play, &this->unk_284, &gPlayerAnim_link_normal_carryB_wait);
+ PlayerAnimation_PlayLoop(play, &this->skelAnimeUpper, &gPlayerAnim_link_normal_carryB_wait);
}
}
@@ -4163,7 +4238,7 @@ s32 Player_SetAction(PlayState* play, Player* this, PlayerActionFunc actionFunc,
}
} else if ((this->transformation == PLAYER_FORM_GORON) &&
(Player_GetMeleeWeaponHeld(this) != PLAYER_MELEEWEAPON_NONE)) {
- func_80831990(play, this, ITEM_NONE);
+ Player_UseItem(play, this, ITEM_NONE);
}
func_800AEF44(Effect_GetByIndex(this->meleeWeaponEffectIndex[2]));
@@ -4175,7 +4250,7 @@ s32 Player_SetAction(PlayState* play, Player* this, PlayerActionFunc actionFunc,
if (!(arg3 & 1) && !(this->stateFlags1 & PLAYER_STATE1_800)) {
func_808309CC(play, this);
- PlayerAnimation_PlayLoop(play, &this->unk_284, func_8082ED20(this));
+ PlayerAnimation_PlayLoop(play, &this->skelAnimeUpper, func_8082ED20(this));
this->stateFlags1 &= ~PLAYER_STATE1_400000;
}
@@ -4191,8 +4266,8 @@ s32 Player_SetAction(PlayState* play, Player* this, PlayerActionFunc actionFunc,
PLAYER_STATE3_8000 | PLAYER_STATE3_10000 | PLAYER_STATE3_20000 | PLAYER_STATE3_40000 | PLAYER_STATE3_80000 |
PLAYER_STATE3_200000 | PLAYER_STATE3_1000000 | PLAYER_STATE3_20000000);
- this->unk_AE7 = 0;
- this->unk_AE8 = 0;
+ this->actionVar1 = 0;
+ this->actionVar2 = 0;
this->unk_AA4 = 0;
this->unk_B86[0] = 0;
this->unk_B86[1] = 0;
@@ -4237,7 +4312,7 @@ void Player_SetAction_PreserveItemAction(PlayState* play, Player* this, PlayerAc
}
}
-void func_808317C4(Player* this) {
+void Player_DestroyHookshot(Player* this) {
if (Player_IsHoldingHookshot(this)) {
if (this->heldActor != NULL) {
Actor_Kill(this->heldActor);
@@ -4277,13 +4352,12 @@ void func_808318C0(PlayState* play) {
// Toggle Lens from a button press
void func_80831944(PlayState* play, Player* this) {
- if (func_8012364C(play, this, func_8082FDC4()) == ITEM_LENS_OF_TRUTH) {
+ if (Player_GetItemOnButton(play, this, func_8082FDC4()) == ITEM_LENS_OF_TRUTH) {
func_808318C0(play);
}
}
-// Proposed name: Player_UseItem
-void func_80831990(PlayState* play, Player* this, ItemId item) {
+void Player_UseItem(PlayState* play, Player* this, ItemId item) {
PlayerItemAction itemAction = Player_ItemToItemAction(this, item);
if ((((this->heldItemAction == this->itemAction) &&
@@ -4336,15 +4410,20 @@ void func_80831990(PlayState* play, Player* this, ItemId item) {
((explosiveType = Player_ExplosiveFromIA(this, itemAction)) > PLAYER_EXPLOSIVE_NONE) &&
((AMMO(sPlayerExplosiveInfo[explosiveType].itemId) == 0) ||
(play->actorCtx.actorLists[ACTORCAT_EXPLOSIVES].length >= 3)))) {
+ // Prevent some items from being used if player is out of ammo.
+ // Also prevent explosives from being used if too many are active
Audio_PlaySfx(NA_SE_SY_ERROR);
} else if (itemAction == PLAYER_IA_LENS_OF_TRUTH) {
+ // Handle Lens of Truth
func_808318C0(play);
} else if (itemAction == PLAYER_IA_PICTOGRAPH_BOX) {
+ // Handle Pictograph Box
if (!func_80831814(this, play, PLAYER_UNKAA5_2)) {
Audio_PlaySfx(NA_SE_SY_ERROR);
}
} else if ((itemAction == PLAYER_IA_DEKU_NUT) &&
((this->transformation != PLAYER_FORM_DEKU) || (this->heldItemButton != 0))) {
+ // Handle Deku Nuts
if (AMMO(ITEM_DEKU_NUT) != 0) {
func_8083A658(play, this);
} else {
@@ -4354,6 +4433,7 @@ void func_80831990(PlayState* play, Player* this, ItemId item) {
(itemAction < PLAYER_IA_MASK_GIANT)) {
PlayerMask maskId = GET_MASK_FROM_IA(itemAction);
+ // Handle wearable masks
this->prevMask = this->currentMask;
if (maskId == this->currentMask) {
this->currentMask = PLAYER_MASK_NONE;
@@ -4367,26 +4447,30 @@ void func_80831990(PlayState* play, Player* this, ItemId item) {
((this->heldActor == NULL) && (Player_ExplosiveFromIA(this, itemAction) > PLAYER_EXPLOSIVE_NONE))) {
u8 nextAnimType;
+ // Handle using a new held item
this->nextModelGroup = Player_ActionToModelGroup(this, itemAction);
nextAnimType = gPlayerModelTypes[this->nextModelGroup].modelAnimType;
var_v1 = ((this->transformation != PLAYER_FORM_GORON) || (itemAction == PLAYER_IA_POWDER_KEG));
if (var_v1 && (this->heldItemAction >= 0) && (item != this->heldItemId) &&
- (D_8085CD00[gPlayerModelTypes[this->modelGroup].modelAnimType][nextAnimType] != 0)) {
+ (sPlayerItemChangeTypes[gPlayerModelTypes[this->modelGroup].modelAnimType][nextAnimType] !=
+ PLAYER_ITEM_CHG_0)) {
+ // Start the held item change process
this->heldItemId = item;
- this->stateFlags3 |= PLAYER_STATE3_40000000;
+ this->stateFlags3 |= PLAYER_STATE3_START_CHANGING_HELD_ITEM;
} else {
- func_808317C4(this);
- func_8082DCA0(play, this);
- func_8082F470(play, this, itemAction);
+ // Init new held item for use
+ Player_DestroyHookshot(this);
+ Player_DetachHeldActor(play, this);
+ Player_InitItemActionWithAnim(play, this, itemAction);
if (!var_v1) {
- D_80862B48 = 1;
- D_80862B4C = 1;
+ sPlayerUseHeldItem = true;
+ sPlayerHeldItemButtonIsHeldDown = true;
}
}
} else {
- D_80862B48 = 1;
- D_80862B4C = 1;
+ sPlayerUseHeldItem = true;
+ sPlayerHeldItemButtonIsHeldDown = true;
}
}
}
@@ -4416,7 +4500,7 @@ void func_80831F34(PlayState* play, Player* this, PlayerAnimationHeader* anim) {
if (Inventory_ConsumeFairy(play)) {
play->gameOverCtx.state = GAMEOVER_REVIVE_START;
- this->unk_AE7 = 1;
+ this->actionVar1 = 1;
} else {
play->gameOverCtx.state = GAMEOVER_DEATH_START;
func_801A41F8(0);
@@ -4429,11 +4513,11 @@ void func_80831F34(PlayState* play, Player* this, PlayerAnimationHeader* anim) {
}
}
-s32 func_80832090(Player* this) {
+s32 Player_CanUpdateItems(Player* this) {
return (!(Player_Action_34 == this->actionFunc) ||
- (((this->stateFlags3 & PLAYER_STATE3_40000000)) &&
+ ((this->stateFlags3 & PLAYER_STATE3_START_CHANGING_HELD_ITEM) &&
((this->heldItemId == ITEM_FC) || (this->heldItemId == ITEM_NONE)))) &&
- (!(Player_UpperAction_2 == this->upperActionFunc) ||
+ (!(Player_UpperAction_ChangeHeldItem == this->upperActionFunc) ||
Player_ItemToItemAction(this, this->heldItemId) == this->heldItemAction);
}
@@ -4442,7 +4526,7 @@ s32 func_8083213C(Player* this) {
return (Player_Action_11 == this->actionFunc) || (Player_Action_12 == this->actionFunc);
}
-s32 func_8083216C(Player* this, PlayState* play) {
+s32 Player_UpdateUpperBody(Player* this, PlayState* play) {
if (!(this->stateFlags1 & PLAYER_STATE1_800000) && (this->actor.parent != NULL) && Player_IsHoldingHookshot(this)) {
Player_SetAction(play, this, Player_Action_92, 1);
this->stateFlags3 |= PLAYER_STATE3_80;
@@ -4456,8 +4540,8 @@ s32 func_8083216C(Player* this, PlayState* play) {
return true;
}
- if (func_80832090(this)) {
- func_808304BC(this, play);
+ if (Player_CanUpdateItems(this)) {
+ Player_UpdateItems(this, play);
if (Player_Action_64 == this->actionFunc) {
return true;
}
@@ -4467,23 +4551,23 @@ s32 func_8083216C(Player* this, PlayState* play) {
return false;
}
- if (this->unk_AC8 != 0.0f) {
+ if (this->skelAnimeUpperBlendWeight != 0.0f) {
if ((func_8082ED94(this) == 0) || (this->linearVelocity != 0.0f)) {
- AnimationContext_SetCopyFalse(play, this->skelAnime.limbCount, this->unk_284.jointTable,
- this->skelAnime.jointTable, D_8085B9F0);
+ AnimationContext_SetCopyFalse(play, this->skelAnime.limbCount, this->skelAnimeUpper.jointTable,
+ this->skelAnime.jointTable, sPlayerUpperBodyLimbCopyMap);
}
if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && !(this->skelAnime.moveFlags & ANIM_FLAG_8)) {
- Math_StepToF(&this->unk_AC8, 0.0f, 0.25f);
+ Math_StepToF(&this->skelAnimeUpperBlendWeight, 0.0f, 0.25f);
AnimationContext_SetInterp(play, this->skelAnime.limbCount, this->skelAnime.jointTable,
- this->unk_284.jointTable, 1.0f - this->unk_AC8);
+ this->skelAnimeUpper.jointTable, 1.0f - this->skelAnimeUpperBlendWeight);
}
} else if ((func_8082ED94(this) == 0) || (this->linearVelocity != 0.0f) ||
(this->skelAnime.moveFlags & ANIM_FLAG_8)) {
AnimationContext_SetCopyTrue(play, this->skelAnime.limbCount, this->skelAnime.jointTable,
- this->unk_284.jointTable, D_8085B9F0);
+ this->skelAnimeUpper.jointTable, sPlayerUpperBodyLimbCopyMap);
} else {
AnimationContext_SetCopyAll(play, this->skelAnime.limbCount, this->skelAnime.jointTable,
- this->unk_284.jointTable);
+ this->skelAnimeUpper.jointTable);
}
return true;
@@ -4817,38 +4901,204 @@ s32 Player_GetMovementSpeedAndYaw(Player* this, f32* outSpeedTarget, s16* outYaw
return false;
}
- *outYawTarget += Camera_GetInputDirYaw(play->cameraPtrs[play->activeCamId]);
+ *outYawTarget += Camera_GetInputDirYaw(GET_ACTIVE_CAM(play));
return true;
}
+typedef enum ActionChangeIndex {
+ /* 0x0 */ PLAYER_ACTION_CHG_0,
+ /* 0x1 */ PLAYER_ACTION_CHG_1,
+ /* 0x2 */ PLAYER_ACTION_CHG_2,
+ /* 0x3 */ PLAYER_ACTION_CHG_3,
+ /* 0x4 */ PLAYER_ACTION_CHG_4,
+ /* 0x5 */ PLAYER_ACTION_CHG_5,
+ /* 0x6 */ PLAYER_ACTION_CHG_6,
+ /* 0x7 */ PLAYER_ACTION_CHG_7,
+ /* 0x8 */ PLAYER_ACTION_CHG_8,
+ /* 0x9 */ PLAYER_ACTION_CHG_9,
+ /* 0xA */ PLAYER_ACTION_CHG_10,
+ /* 0xB */ PLAYER_ACTION_CHG_11,
+ /* 0xC */ PLAYER_ACTION_CHG_12,
+ /* 0xD */ PLAYER_ACTION_CHG_13,
+ /* 0xE */ PLAYER_ACTION_CHG_14,
+ /* 0xF */ PLAYER_ACTION_CHG_MAX
+} ActionChangeIndex;
+
/**
- * The values of following arrays are used as indices for the `D_8085D054` array.
+ * The values of following arrays are used as indices for the `sPlayerActionChangeFuncs` array.
* Each index correspond to a function which will be called sequentially until any of them return `true`.
* Negative marks the end of the array.
*/
-s8 D_8085CFE4[] = { 13, 2, 4, 9, 10, 11, 8, -7 };
-s8 D_8085CFEC[] = { 13, 1, 2, 5, 3, 4, 9, 10, 11, 7, 8, -6 };
-s8 D_8085CFF8[] = { 13, 1, 2, 3, 4, 9, 10, 11, 8, 7, -6 };
-s8 D_8085D004[] = { 13, 2, 4, 9, 10, 11, 8, -7 };
-s8 D_8085D00C[] = { 13, 2, 4, 9, 10, 11, 12, 8, -7 };
-s8 D_8085D018[] = { -7 };
-s8 D_8085D01C[] = { 0, 11, 1, 2, 3, 5, 4, 9, 8, 7, -6 };
-s8 D_8085D028[] = { 0, 11, 1, 2, 3, 12, 5, 4, 9, 8, 7, -6 };
-s8 D_8085D034[] = { 13, 1, 2, 3, 12, 5, 4, 9, 10, 11, 8, 7, -6 };
-s8 D_8085D044[] = { 10, 8, -7 };
-s8 D_8085D048[] = { 0, 12, 5, 4, -14 };
-s8 D_8085D050[] = { 13, 2, -4 };
-
-s32 (*D_8085D054[])(Player*, PlayState*) = {
- func_80839518, func_808365DC, func_8083D23C, func_8083CCB4, func_808391D8,
- func_8083DFC4, func_8083A114, func_80848570, func_8083A580, func_8083D78C,
- func_80839B18, func_8083A274, func_80834DFC, func_80838A90, func_8083A0CC,
+s8 sPlayerActionChangeList1[] = {
+ /* 0 */ PLAYER_ACTION_CHG_13,
+ /* 1 */ PLAYER_ACTION_CHG_2,
+ /* 2 */ PLAYER_ACTION_CHG_4,
+ /* 3 */ PLAYER_ACTION_CHG_9,
+ /* 4 */ PLAYER_ACTION_CHG_10,
+ /* 5 */ PLAYER_ACTION_CHG_11,
+ /* 6 */ PLAYER_ACTION_CHG_8,
+ /* 7 */ -PLAYER_ACTION_CHG_7,
};
-s32 func_80833058(PlayState* play, Player* this, s8* arg2, s32 arg3) {
+s8 sPlayerActionChangeList2[] = {
+ /* 0 */ PLAYER_ACTION_CHG_13,
+ /* 1 */ PLAYER_ACTION_CHG_1,
+ /* 2 */ PLAYER_ACTION_CHG_2,
+ /* 3 */ PLAYER_ACTION_CHG_5,
+ /* 4 */ PLAYER_ACTION_CHG_3,
+ /* 5 */ PLAYER_ACTION_CHG_4,
+ /* 6 */ PLAYER_ACTION_CHG_9,
+ /* 7 */ PLAYER_ACTION_CHG_10,
+ /* 8 */ PLAYER_ACTION_CHG_11,
+ /* 9 */ PLAYER_ACTION_CHG_7,
+ /* 10 */ PLAYER_ACTION_CHG_8,
+ /* 11 */ -PLAYER_ACTION_CHG_6,
+};
+
+s8 sPlayerActionChangeList3[] = {
+ /* 0 */ PLAYER_ACTION_CHG_13,
+ /* 1 */ PLAYER_ACTION_CHG_1,
+ /* 2 */ PLAYER_ACTION_CHG_2,
+ /* 3 */ PLAYER_ACTION_CHG_3,
+ /* 4 */ PLAYER_ACTION_CHG_4,
+ /* 5 */ PLAYER_ACTION_CHG_9,
+ /* 6 */ PLAYER_ACTION_CHG_10,
+ /* 7 */ PLAYER_ACTION_CHG_11,
+ /* 8 */ PLAYER_ACTION_CHG_8,
+ /* 9 */ PLAYER_ACTION_CHG_7,
+ /* 10 */ -PLAYER_ACTION_CHG_6,
+};
+
+s8 sPlayerActionChangeList4[] = {
+ /* 0 */ PLAYER_ACTION_CHG_13,
+ /* 1 */ PLAYER_ACTION_CHG_2,
+ /* 2 */ PLAYER_ACTION_CHG_4,
+ /* 3 */ PLAYER_ACTION_CHG_9,
+ /* 4 */ PLAYER_ACTION_CHG_10,
+ /* 5 */ PLAYER_ACTION_CHG_11,
+ /* 6 */ PLAYER_ACTION_CHG_8,
+ /* 7 */ -PLAYER_ACTION_CHG_7,
+};
+
+s8 sPlayerActionChangeList5[] = {
+ /* 0 */ PLAYER_ACTION_CHG_13,
+ /* 1 */ PLAYER_ACTION_CHG_2,
+ /* 2 */ PLAYER_ACTION_CHG_4,
+ /* 3 */ PLAYER_ACTION_CHG_9,
+ /* 4 */ PLAYER_ACTION_CHG_10,
+ /* 5 */ PLAYER_ACTION_CHG_11,
+ /* 6 */ PLAYER_ACTION_CHG_12,
+ /* 7 */ PLAYER_ACTION_CHG_8,
+ /* 8 */ -PLAYER_ACTION_CHG_7,
+};
+
+s8 sPlayerActionChangeList6[] = {
+ /* 0 */ -PLAYER_ACTION_CHG_7,
+};
+
+s8 sPlayerActionChangeList7[] = {
+ /* 0 */ PLAYER_ACTION_CHG_0,
+ /* 1 */ PLAYER_ACTION_CHG_11,
+ /* 2 */ PLAYER_ACTION_CHG_1,
+ /* 3 */ PLAYER_ACTION_CHG_2,
+ /* 4 */ PLAYER_ACTION_CHG_3,
+ /* 5 */ PLAYER_ACTION_CHG_5,
+ /* 6 */ PLAYER_ACTION_CHG_4,
+ /* 7 */ PLAYER_ACTION_CHG_9,
+ /* 8 */ PLAYER_ACTION_CHG_8,
+ /* 9 */ PLAYER_ACTION_CHG_7,
+ /* 10 */ -PLAYER_ACTION_CHG_6,
+};
+
+s8 sPlayerActionChangeList8[] = {
+ /* 0 */ PLAYER_ACTION_CHG_0,
+ /* 1 */ PLAYER_ACTION_CHG_11,
+ /* 2 */ PLAYER_ACTION_CHG_1,
+ /* 3 */ PLAYER_ACTION_CHG_2,
+ /* 4 */ PLAYER_ACTION_CHG_3,
+ /* 5 */ PLAYER_ACTION_CHG_12,
+ /* 6 */ PLAYER_ACTION_CHG_5,
+ /* 7 */ PLAYER_ACTION_CHG_4,
+ /* 8 */ PLAYER_ACTION_CHG_9,
+ /* 9 */ PLAYER_ACTION_CHG_8,
+ /* 10 */ PLAYER_ACTION_CHG_7,
+ /* 11 */ -PLAYER_ACTION_CHG_6,
+};
+
+s8 sPlayerActionChangeList9[] = {
+ /* 0 */ PLAYER_ACTION_CHG_13,
+ /* 1 */ PLAYER_ACTION_CHG_1,
+ /* 2 */ PLAYER_ACTION_CHG_2,
+ /* 3 */ PLAYER_ACTION_CHG_3,
+ /* 4 */ PLAYER_ACTION_CHG_12,
+ /* 5 */ PLAYER_ACTION_CHG_5,
+ /* 6 */ PLAYER_ACTION_CHG_4,
+ /* 7 */ PLAYER_ACTION_CHG_9,
+ /* 8 */ PLAYER_ACTION_CHG_10,
+ /* 9 */ PLAYER_ACTION_CHG_11,
+ /* 10 */ PLAYER_ACTION_CHG_8,
+ /* 11 */ PLAYER_ACTION_CHG_7,
+ /* 12 */ -PLAYER_ACTION_CHG_6,
+};
+
+s8 sPlayerActionChangeList10[] = {
+ /* 0 */ PLAYER_ACTION_CHG_10,
+ /* 1 */ PLAYER_ACTION_CHG_8,
+ /* 2 */ -PLAYER_ACTION_CHG_7,
+};
+
+s8 sPlayerActionChangeList11[] = {
+ /* 0 */ PLAYER_ACTION_CHG_0,
+ /* 1 */ PLAYER_ACTION_CHG_12,
+ /* 2 */ PLAYER_ACTION_CHG_5,
+ /* 3 */ PLAYER_ACTION_CHG_4,
+ /* 4 */ -PLAYER_ACTION_CHG_14,
+};
+
+s8 sPlayerActionChangeList12[] = {
+ /* 0 */ PLAYER_ACTION_CHG_13,
+ /* 1 */ PLAYER_ACTION_CHG_2,
+ /* 2 */ -PLAYER_ACTION_CHG_4,
+};
+
+s32 (*sPlayerActionChangeFuncs[PLAYER_ACTION_CHG_MAX])(Player*, PlayState*) = {
+ Player_ActionChange_0, // PLAYER_ACTION_CHG_0
+ Player_ActionChange_1, // PLAYER_ACTION_CHG_1
+ Player_ActionChange_2, // PLAYER_ACTION_CHG_2
+ Player_ActionChange_3, // PLAYER_ACTION_CHG_3
+ Player_ActionChange_4, // PLAYER_ACTION_CHG_4
+ Player_ActionChange_5, // PLAYER_ACTION_CHG_5
+ Player_ActionChange_6, // PLAYER_ACTION_CHG_6
+ Player_ActionChange_7, // PLAYER_ACTION_CHG_7
+ Player_ActionChange_8, // PLAYER_ACTION_CHG_8
+ Player_ActionChange_9, // PLAYER_ACTION_CHG_9
+ Player_ActionChange_10, // PLAYER_ACTION_CHG_10
+ Player_ActionChange_11, // PLAYER_ACTION_CHG_11
+ Player_ActionChange_12, // PLAYER_ACTION_CHG_12
+ Player_ActionChange_13, // PLAYER_ACTION_CHG_13
+ Player_ActionChange_14, // PLAYER_ACTION_CHG_14
+};
+
+/**
+ * This function processes "Action Change Lists", which run various functions that
+ * check if it is appropriate to change to a new action.
+ *
+ * Action Change Lists are a list of indices for the `sPlayerActionChangeFuncs` array.
+ * The functions are ran in order until one of them returns true, or the end of the list is reached.
+ * An Action Change index having a negative value indicates that it is the last member in the list.
+ *
+ * Because these lists are processed sequentially, the order of the indices in the list determines its priority.
+ *
+ * If the `updateUpperBody` argument is true, Player's upper body will update before the Action Change List
+ * is processed. This allows for Upper Action functions to run.
+ *
+ * @return true if a new action has been chosen
+ *
+ */
+s32 Player_TryActionChangeList(PlayState* play, Player* this, s8* actionChangeList, s32 updateUpperBody) {
if (!(this->stateFlags1 & (PLAYER_STATE1_1 | PLAYER_STATE1_80 | PLAYER_STATE1_20000000)) && !func_8082DA90(play)) {
- if (arg3) {
- D_80862B04 = func_8083216C(this, play);
+ if (updateUpperBody) {
+ D_80862B04 = Player_UpdateUpperBody(this, play);
if (Player_Action_64 == this->actionFunc) {
return true;
}
@@ -4859,15 +5109,18 @@ s32 func_80833058(PlayState* play, Player* this, s8* arg2, s32 arg3) {
return true;
}
- if (!(this->stateFlags3 & PLAYER_STATE3_40000000) && (Player_UpperAction_2 != this->upperActionFunc)) {
- while (*arg2 >= 0) {
- if (D_8085D054[*arg2](this, play)) {
+ if (!(this->stateFlags3 & PLAYER_STATE3_START_CHANGING_HELD_ITEM) &&
+ (Player_UpperAction_ChangeHeldItem != this->upperActionFunc)) {
+ // Process all entries in the Action Change List with a positive index
+ while (*actionChangeList >= 0) {
+ if (sPlayerActionChangeFuncs[*actionChangeList](this, play)) {
return true;
}
- arg2++;
+ actionChangeList++;
}
- if (D_8085D054[-*arg2](this, play)) {
+ // Try the last entry in the list. Negate the index to make it positive again.
+ if (sPlayerActionChangeFuncs[-*actionChangeList](this, play)) {
return true;
}
}
@@ -4876,7 +5129,7 @@ s32 func_80833058(PlayState* play, Player* this, s8* arg2, s32 arg3) {
return true;
}
} else if (this->stateFlags1 & PLAYER_STATE1_800) {
- func_8083216C(this, play);
+ Player_UpdateUpperBody(this, play);
}
return false;
@@ -4887,7 +5140,7 @@ s32 func_808331FC(PlayState* play, Player* this, SkelAnime* skelAnime, f32 frame
f32 speedTarget;
s16 yawTarget;
- if (func_80833058(play, this, D_8085D01C, 1)) {
+ if (Player_TryActionChangeList(play, this, sPlayerActionChangeList7, true)) {
return 0;
}
@@ -5098,7 +5351,7 @@ void func_8083375C(Player* this, PlayerMeleeWeaponAnimation meleeWeaponAnim) {
void func_80833864(PlayState* play, Player* this, PlayerMeleeWeaponAnimation meleeWeaponAnim) {
func_8083375C(this, meleeWeaponAnim);
Player_SetAction(play, this, Player_Action_84, 0);
- this->unk_AE8 = 0;
+ this->actionVar2 = 0;
if ((meleeWeaponAnim < PLAYER_MWA_FLIPSLASH_FINISH) || (meleeWeaponAnim > PLAYER_MWA_ZORA_JUMPKICK_FINISH)) {
func_8082DC38(this);
@@ -5165,7 +5418,7 @@ void func_80833A64(Player* this) {
void func_80833AA0(Player* this, PlayState* play) {
if (Player_SetAction(play, this, Player_Action_25, 0)) {
Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_normal_landing_wait);
- this->unk_AE8 = 1;
+ this->actionVar2 = 1;
}
if (this->unk_AA5 != PLAYER_UNKAA5_4) {
this->unk_AA5 = PLAYER_UNKAA5_0;
@@ -5228,7 +5481,7 @@ void func_80833B18(PlayState* play, Player* this, s32 arg2, f32 speed, f32 veloc
func_8082DB60(play, this, &gPlayerAnim_link_normal_electric_shock);
func_8082DAD4(this);
- this->unk_AE8 = 20;
+ this->actionVar2 = 20;
this->actor.velocity.y = 0.0f;
Player_RequestRumble(play, this, 255, 80, 150, SQ(0));
@@ -5260,7 +5513,7 @@ void func_80833B18(PlayState* play, Player* this, s32 arg2, f32 speed, f32 veloc
func_8082DAD4(this);
if (arg2 == 2) {
- this->unk_AE8 = 4;
+ this->actionVar2 = 4;
this->actor.speed = 3.0f;
this->linearVelocity = 3.0f;
@@ -5355,11 +5608,11 @@ void func_80834140(PlayState* play, Player* this, PlayerAnimationHeader* anim) {
if (!(this->stateFlags1 & PLAYER_STATE1_80)) {
func_80834104(play, this);
if (func_8082DA90(play)) {
- this->unk_AE8 = -30;
+ this->actionVar2 = -30;
}
this->stateFlags1 |= PLAYER_STATE1_80;
PlayerAnimation_Change(play, &this->skelAnime, anim, 1.0f, 0.0f, 84.0f, ANIMMODE_ONCE, -6.0f);
- this->unk_AE7 = 1;
+ this->actionVar1 = 1;
this->linearVelocity = 0.0f;
}
}
@@ -5519,12 +5772,12 @@ s32 func_80834600(Player* this, PlayState* play) {
Player_SetAction(play, this, Player_Action_19, 0);
}
- this->unk_AE7 = sp64;
+ this->actionVar1 = sp64;
if ((s8)sp64 == 0) {
Player_SetUpperAction(play, this, Player_UpperAction_4);
var_a2 = (this->unk_B40 < 0.5f) ? D_8085CFD4[Player_IsHoldingTwoHandedWeapon(this)]
: D_8085CFCC[Player_IsHoldingTwoHandedWeapon(this)];
- PlayerAnimation_PlayOnce(play, &this->unk_284, var_a2);
+ PlayerAnimation_PlayOnce(play, &this->skelAnimeUpper, var_a2);
} else {
Player_AnimationPlayOnce(play, this, D_8085CFDC[Player_IsHoldingTwoHandedWeapon(this)]);
}
@@ -5637,7 +5890,7 @@ void func_80834DB8(Player* this, PlayerAnimationHeader* anim, f32 speed, PlaySta
func_80834D50(play, this, anim, speed, NA_SE_VO_LI_SWORD_N);
}
-s32 func_80834DFC(Player* this, PlayState* play) {
+s32 Player_ActionChange_12(Player* this, PlayState* play) {
if ((this->transformation != PLAYER_FORM_GORON) &&
((this->transformation != PLAYER_FORM_DEKU) || func_801242B4(this) ||
(this->ledgeClimbType <= PLAYER_LEDGE_CLIMB_3)) &&
@@ -5748,8 +6001,8 @@ void func_80835324(PlayState* play, Player* this, f32 arg2, s16 arg3) {
func_8082DD2C(play, this);
this->csId = CS_ID_NONE;
- this->unk_AE7 = 1;
- this->unk_AE8 = 1;
+ this->actionVar1 = 1;
+ this->actionVar2 = 1;
this->unk_3A0.x = Math_SinS(arg3) * arg2 + this->actor.world.pos.x;
this->unk_3A0.z = Math_CosS(arg3) * arg2 + this->actor.world.pos.z;
@@ -5828,7 +6081,7 @@ void func_808354A4(PlayState* play, s32 exitIndex, s32 arg2) {
void func_808355D8(PlayState* play, Player* this, PlayerAnimationHeader* anim) {
func_80833AA0(this, play);
- this->unk_AE8 = -2;
+ this->actionVar2 = -2;
func_8082E5EC(play, this, anim);
func_8082E1F0(this, NA_SE_IT_DEKUNUTS_FLOWER_CLOSE);
}
@@ -5949,11 +6202,11 @@ s32 Player_HandleExitsAndVoids(PlayState* play, Player* this, CollisionPoly* pol
this->stateFlags1 |= PLAYER_STATE1_20000000;
} else {
func_80834104(play, this);
- this->unk_AE8 = 9999;
+ this->actionVar2 = 9999;
if (this->floorProperty == FLOOR_PROPERTY_5) {
- this->unk_AE7 = -1;
+ this->actionVar1 = -1;
} else {
- this->unk_AE7 = 1;
+ this->actionVar1 = 1;
}
}
}
@@ -6031,7 +6284,7 @@ s32 func_80835DF8(PlayState* play, Player* this, CollisionPoly** outPoly, s32* o
f32 yIntersect = func_80835CD8(play, this, &D_8085D100, &pos, outPoly, outBgId);
if ((*outBgId == BGCHECK_SCENE) && (fabsf(this->actor.world.pos.y - yIntersect) < 10.0f)) {
- func_800FAAB4(play, SurfaceType_GetLightSettingIndex(&play->colCtx, *outPoly, *outBgId));
+ Environment_ChangeLightSetting(play, SurfaceType_GetLightSettingIndex(&play->colCtx, *outPoly, *outBgId));
return true;
}
return false;
@@ -6052,7 +6305,7 @@ void Player_Door_Staircase(PlayState* play, Player* this, Actor* door) {
func_80835324(play, this, 50.0f, this->actor.shape.rot.y);
this->unk_397 = this->doorType;
- this->unk_AE7 = 0;
+ this->actionVar1 = 0;
this->stateFlags1 |= PLAYER_STATE1_20000000;
func_80835BF8(&doorStaircase->actor.world.pos, doorStaircase->actor.shape.rot.y, -140.0f, &this->unk_3A0);
@@ -6065,7 +6318,7 @@ void Player_Door_Staircase(PlayState* play, Player* this, Actor* door) {
func_8082DAD4(this);
if (this->doorTimer != 0) {
- this->unk_AE8 = 0;
+ this->actionVar2 = 0;
func_8082E438(play, this, func_8082ED20(this));
this->skelAnime.endFrame = 0.0f;
} else {
@@ -6096,7 +6349,7 @@ void Player_Door_Sliding(PlayState* play, Player* this, Actor* door) {
}
func_80835324(play, this, 50.0f, this->actor.shape.rot.y);
- this->unk_AE7 = 0;
+ this->actionVar1 = 0;
this->unk_397 = this->doorType;
this->stateFlags1 |= PLAYER_STATE1_20000000;
Actor_OffsetOfPointInActorCoords(&doorSliding->dyna.actor, &sp38, &this->actor.world.pos);
@@ -6112,7 +6365,7 @@ void Player_Door_Sliding(PlayState* play, Player* this, Actor* door) {
func_8082DAD4(this);
if (this->doorTimer != 0) {
- this->unk_AE8 = 0;
+ this->actionVar2 = 0;
func_8082E438(play, this, func_8082ED20(this));
this->skelAnime.endFrame = 0.0f;
} else {
@@ -6215,21 +6468,21 @@ void Player_Door_Knob(PlayState* play, Player* this, Actor* door) {
} else if (enDoorType != ENDOOR_TYPE_7) {
Camera* mainCam;
- this->unk_AE7 = 38.0f * D_8085C3E8;
+ this->actionVar1 = 38.0f * D_8085C3E8;
mainCam = Play_GetCamera(play, CAM_ID_MAIN);
Camera_ChangeDoorCam(mainCam, &knobDoor->dyna.actor,
play->doorCtx.transitionActorList[DOOR_GET_TRANSITION_ID(&knobDoor->dyna.actor)]
.sides[(this->doorDirection > 0) ? 0 : 1]
.bgCamIndex,
- 0.0f, this->unk_AE7, 26.0f * D_8085C3E8, 10.0f * D_8085C3E8);
+ 0.0f, this->actionVar1, 26.0f * D_8085C3E8, 10.0f * D_8085C3E8);
}
}
}
}
// door stuff
-s32 func_808365DC(Player* this, PlayState* play) {
+s32 Player_ActionChange_1(Player* this, PlayState* play) {
if ((gSaveContext.save.saveInfo.playerData.health != 0) && (this->doorType != PLAYER_DOORTYPE_NONE)) {
if ((this->actor.category != ACTORCAT_PLAYER) ||
((((this->doorType <= PLAYER_DOORTYPE_TALKING) && CutsceneManager_IsNext(CS_ID_GLOBAL_TALK)) ||
@@ -6337,7 +6590,7 @@ void func_808369F4(Player* this, PlayState* play) {
void func_80836A5C(Player* this, PlayState* play) {
func_808369F4(this, play);
if (func_80123420(this)) {
- this->unk_AE8 = 1;
+ this->actionVar2 = 1;
}
}
@@ -6533,9 +6786,9 @@ void func_80837134(PlayState* play, Player* this) {
}
} else if (this->stateFlags2 & PLAYER_STATE2_80000) {
if (func_80123420(this)) {
- anim = D_8085C2A4[this->unk_AE7].unk_8;
+ anim = D_8085C2A4[this->actionVar1].unk_8;
} else {
- anim = D_8085C2A4[this->unk_AE7].unk_4;
+ anim = D_8085C2A4[this->actionVar1].unk_4;
}
} else if (this->skelAnime.animation == &gPlayerAnim_link_normal_run_jump) {
anim = &gPlayerAnim_link_normal_run_jump_end;
@@ -6554,9 +6807,9 @@ void func_80837134(PlayState* play, Player* this) {
this->skelAnime.endFrame = 8.0f;
if (temp_v0_2 == 1) {
- this->unk_AE8 = 0xA;
+ this->actionVar2 = 0xA;
} else {
- this->unk_AE8 = 0x14;
+ this->actionVar2 = 0x14;
}
} else if (temp_v0_2 == 0) {
func_80836A98(this, anim, play);
@@ -6601,9 +6854,9 @@ s32 func_808373F8(PlayState* play, Player* this, u16 sfxId) {
}
func_80834D50(play, this, D_8085C2A4[var_v1].unk_0, speed, ((var_v1 == 4) ? NA_SE_VO_LI_SWORD_N : sfxId));
- this->unk_AE8 = -1;
+ this->actionVar2 = -1;
this->stateFlags2 |= PLAYER_STATE2_80000;
- this->unk_AE7 = var_v1;
+ this->actionVar1 = var_v1;
return true;
}
anim = &gPlayerAnim_link_normal_run_jump;
@@ -6619,7 +6872,7 @@ s32 func_808373F8(PlayState* play, Player* this, u16 sfxId) {
if ((this->actor.depthInWater > 0.0f) && (this->remainingHopsCounter != 0)) {
this->actor.world.pos.y += this->actor.depthInWater;
func_80834D50(play, this, anim, speed, NA_SE_NONE);
- this->unk_AE8 = 1;
+ this->actionVar2 = 1;
this->stateFlags3 |= PLAYER_STATE3_200000;
Player_PlaySfx(this, (NA_SE_PL_DEKUNUTS_JUMP5 + 1 - this->remainingHopsCounter));
Player_AnimSfx_PlayVoice(this, sfxId);
@@ -6638,7 +6891,7 @@ s32 func_808373F8(PlayState* play, Player* this, u16 sfxId) {
}
func_80834D50(play, this, anim, speed, sfxId);
- this->unk_AE8 = 1;
+ this->actionVar2 = 1;
return true;
}
@@ -6749,14 +7002,14 @@ void func_80837BF8(PlayState* play, Player* this) {
}
void func_80837C20(PlayState* play, Player* this) {
- s32 sp1C = this->unk_AE8;
- s32 sp18 = this->unk_AE7;
+ s32 sp1C = this->actionVar2;
+ s32 sp18 = this->actionVar1;
Player_SetAction_PreserveMoveFlags(play, this, Player_Action_50, 0);
this->actor.velocity.y = 0.0f;
- this->unk_AE8 = sp1C;
- this->unk_AE7 = sp18;
+ this->actionVar2 = sp1C;
+ this->actionVar1 = sp18;
}
void func_80837C78(PlayState* play, Player* this) {
@@ -6764,9 +7017,9 @@ void func_80837C78(PlayState* play, Player* this) {
this->stateFlags1 |= (PLAYER_STATE1_400 | PLAYER_STATE1_20000000);
if (this->getItemId == GI_HEART_CONTAINER) {
- this->unk_AE8 = 20;
+ this->actionVar2 = 20;
} else if (this->getItemId >= GI_NONE) {
- this->unk_AE8 = 1;
+ this->actionVar2 = 1;
} else {
this->getItemId = -this->getItemId;
}
@@ -6862,8 +7115,8 @@ s32 func_80837DEC(Player* this, PlayState* play) {
func_8082E920(play, this,
ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_4 | ANIM_FLAG_8 |
ANIM_FLAG_NOMOVE | ANIM_FLAG_80);
- this->unk_AE8 = -1;
- this->unk_AE7 = var_v1_2;
+ this->actionVar2 = -1;
+ this->actionVar1 = var_v1_2;
} else {
this->stateFlags1 |= PLAYER_STATE1_2000;
this->stateFlags1 &= ~PLAYER_STATE1_20000;
@@ -7070,7 +7323,7 @@ void func_808388B8(PlayState* play, Player* this, PlayerTransformation playerFor
gSaveContext.save.playerForm = playerForm;
this->stateFlags1 |= PLAYER_STATE1_2;
- D_80862B50 = play->envCtx.lightSettings;
+ D_80862B50 = play->envCtx.adjLightSettings;
this->actor.velocity.y = 0.0f;
Actor_DeactivateLens(play);
}
@@ -7205,7 +7458,7 @@ PlayerAnimationHeader* D_8085D1F8[] = {
&gPlayerAnim_link_normal_take_out, // Hold up cutscene item; "this item doesn't work here"
};
-s32 func_80838A90(Player* this, PlayState* play) {
+s32 Player_ActionChange_13(Player* this, PlayState* play) {
PlayerBottle bottleAction;
if (this->unk_AA5 != PLAYER_UNKAA5_0) {
@@ -7284,8 +7537,8 @@ s32 func_80838A90(Player* this, PlayState* play) {
func_8082E438(play, this, D_8085BE84[31][this->modelAnimType]);
}
this->stateFlags1 |= PLAYER_STATE1_20000000;
- this->unk_AE8 = 80;
- this->unk_AE7 = -1;
+ this->actionVar2 = 80;
+ this->actionVar1 = -1;
this->lockOnActor = this->talkActor;
} else {
this->csId = CS_ID_GLOBAL_TALK;
@@ -7297,13 +7550,13 @@ s32 func_80838A90(Player* this, PlayState* play) {
} else {
this->stateFlags1 |= (PLAYER_STATE1_20000000 | PLAYER_STATE1_10000000 | PLAYER_STATE1_40);
this->csId = play->playerCsIds[PLAYER_CS_ID_ITEM_SHOW];
- this->unk_AE7 = 1;
+ this->actionVar1 = 1;
this->actor.textId = 0xFE;
}
this->actor.flags |= ACTOR_FLAG_TALK_REQUESTED;
this->exchangeItemAction = this->itemAction;
- if (this->unk_AE7 >= 0) {
- Player_AnimationPlayOnce(play, this, D_8085D1F8[this->unk_AE7]);
+ if (this->actionVar1 >= 0) {
+ Player_AnimationPlayOnce(play, this, D_8085D1F8[this->actionVar1]);
}
func_8082DAD4(this);
return true;
@@ -7359,7 +7612,7 @@ s32 func_80838A90(Player* this, PlayState* play) {
Player_StopCutscene(this);
if (!(this->stateFlags1 & PLAYER_STATE1_800000)) {
Player_SetAction(play, this, Player_Action_43, 1);
- this->unk_AE8 = 13;
+ this->actionVar2 = 13;
func_80836D8C(this);
if (this->unk_AA5 == PLAYER_UNKAA5_2) {
play->actorCtx.flags |= ACTORCTX_FLAG_PICTO_BOX_ON;
@@ -7382,7 +7635,7 @@ s32 func_80838A90(Player* this, PlayState* play) {
return false;
}
-s32 func_808391D8(Player* this, PlayState* play) {
+s32 Player_ActionChange_4(Player* this, PlayState* play) {
if (gSaveContext.save.saveInfo.playerData.health != 0) {
Actor* talkActor = this->talkActor;
Actor* lockOnActor = this->lockOnActor;
@@ -7468,9 +7721,9 @@ s32 func_808391D8(Player* this, PlayState* play) {
return false;
}
-s32 func_80839518(Player* this, PlayState* play) {
+s32 Player_ActionChange_0(Player* this, PlayState* play) {
if (this->unk_AA5 != PLAYER_UNKAA5_0) {
- func_80838A90(this, play);
+ Player_ActionChange_13(this, play);
return true;
} else if ((this->lockOnActor != NULL) &&
(CHECK_FLAG_ALL(this->lockOnActor->flags, ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_40000) ||
@@ -7510,7 +7763,7 @@ s32 func_808396B8(PlayState* play, Player* this) {
((Player_GetMeleeWeaponHeld(this) != PLAYER_MELEEWEAPON_NONE) &&
((this->transformation != PLAYER_FORM_GORON) || (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) &&
((this->transformation != PLAYER_FORM_ZORA) || !(this->stateFlags1 & PLAYER_STATE1_2000000)) &&
- (D_80862B48 != 0)))) {
+ sPlayerUseHeldItem))) {
return true;
}
@@ -7551,8 +7804,8 @@ void func_80839860(Player* this, PlayState* play, s32 arg2) {
func_80834D50(play, this, D_8085C2A4[arg2].unk_0, speed, NA_SE_VO_LI_SWORD_N);
- this->unk_AE8 = 1;
- this->unk_AE7 = arg2;
+ this->actionVar2 = 1;
+ this->actionVar1 = arg2;
this->currentYaw = this->actor.shape.rot.y + (arg2 << 0xE);
this->linearVelocity = !(arg2 & 1) ? 6.0f : 8.5f;
@@ -7599,7 +7852,7 @@ s32 func_80839A84(PlayState* play, Player* this) {
return true;
}
-s32 func_80839B18(Player* this, PlayState* play) {
+s32 Player_ActionChange_10(Player* this, PlayState* play) {
if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A) &&
(play->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_2) && (sPlayerFloorType != FLOOR_TYPE_7) &&
(sPlayerFloorEffect != FLOOR_EFFECT_1)) {
@@ -7614,8 +7867,8 @@ s32 func_80839B18(Player* this, PlayState* play) {
func_80836B3C(play, this, 0.0f);
}
} else if (!(this->stateFlags1 & PLAYER_STATE1_8000000) &&
- (Player_GetMeleeWeaponHeld(this) != PLAYER_MELEEWEAPON_NONE) && func_80832090(this) &&
- (this->transformation != PLAYER_FORM_GORON)) {
+ (Player_GetMeleeWeaponHeld(this) != PLAYER_MELEEWEAPON_NONE) &&
+ Player_CanUpdateItems(this) && (this->transformation != PLAYER_FORM_GORON)) {
func_808395F0(play, this, PLAYER_MWA_JUMPSLASH_START, 5.0f, 5.0f);
} else if (!func_80839A84(play, this)) {
func_80836B3C(play, this, 0.0f);
@@ -7710,7 +7963,7 @@ void func_8083A04C(Player* this) {
this->currentBoots = PLAYER_BOOTS_ZORA_LAND;
}
if (Player_Action_54 == this->actionFunc) {
- this->unk_AE8 = 20;
+ this->actionVar2 = 20;
}
} else {
if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B)) {
@@ -7719,14 +7972,14 @@ void func_8083A04C(Player* this) {
}
}
-s32 func_8083A0CC(Player* this, PlayState* play) {
+s32 Player_ActionChange_14(Player* this, PlayState* play) {
if (!D_80862B04 && (this->transformation == PLAYER_FORM_ZORA)) {
func_8083A04C(this);
}
return false;
}
-s32 func_8083A114(Player* this, PlayState* play) {
+s32 Player_ActionChange_6(Player* this, PlayState* play) {
if (!D_80862B04 && !(this->stateFlags1 & PLAYER_STATE1_800000) && !func_8082FB68(this)) {
if ((this->transformation == PLAYER_FORM_ZORA) && (this->stateFlags1 & PLAYER_STATE1_8000000)) {
func_8083A04C(this);
@@ -7741,7 +7994,7 @@ s32 func_8083A114(Player* this, PlayState* play) {
if ((this->putAwayCountdown == 0) && (this->heldItemAction >= PLAYER_IA_SWORD_KOKIRI) &&
(this->transformation != PLAYER_FORM_FIERCE_DEITY)) {
- func_80831990(play, this, ITEM_NONE);
+ Player_UseItem(play, this, ITEM_NONE);
} else {
this->stateFlags2 ^= PLAYER_STATE2_100000;
}
@@ -7751,7 +8004,7 @@ s32 func_8083A114(Player* this, PlayState* play) {
return false;
}
-s32 func_8083A274(Player* this, PlayState* play) {
+s32 Player_ActionChange_11(Player* this, PlayState* play) {
if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_R) && (this->unk_AA5 == PLAYER_UNKAA5_0) &&
(play->unk_1887C == 0)) {
if (Player_IsGoronOrDeku(this) ||
@@ -7759,7 +8012,7 @@ s32 func_8083A274(Player* this, PlayState* play) {
((this->transformation == PLAYER_FORM_HUMAN) && (this->currentShield != PLAYER_SHIELD_NONE))) &&
!func_80123434(this) && (this->lockOnActor == NULL))) {
func_8082DC38(this);
- func_8082DCA0(play, this);
+ Player_DetachHeldActor(play, this);
if (Player_SetAction(play, this, Player_Action_18, 0)) {
this->stateFlags1 |= PLAYER_STATE1_400000;
if (this->transformation != PLAYER_FORM_GORON) {
@@ -7821,7 +8074,7 @@ void func_8083A548(Player* this) {
}
}
-s32 func_8083A580(Player* this, PlayState* play) {
+s32 Player_ActionChange_8(Player* this, PlayState* play) {
if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_B)) {
if (!(this->stateFlags1 & PLAYER_STATE1_400000) &&
(Player_GetMeleeWeaponHeld(this) != PLAYER_MELEEWEAPON_NONE)) {
@@ -7857,13 +8110,13 @@ struct_8085D200 D_8085D200[] = {
};
s32 func_8083A6C0(PlayState* play, Player* this) {
- if (D_80862B48 != 0) {
+ if (sPlayerUseHeldItem) {
if (Player_GetBottleHeld(this) > PLAYER_BOTTLE_NONE) {
Player_SetAction(play, this, Player_Action_68, 0);
if (this->actor.depthInWater > 12.0f) {
- this->unk_AE8 = 1;
+ this->actionVar2 = 1;
}
- func_8082DB90(play, this, D_8085D200[this->unk_AE8].unk_0);
+ func_8082DB90(play, this, D_8085D200[this->actionVar2].unk_0);
Player_PlaySfx(this, NA_SE_IT_SWORD_SWING);
Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_AUTO_JUMP);
return true;
@@ -7901,7 +8154,7 @@ s32 func_8083A878(PlayState* play, Player* this, f32 arg2) {
Player_SetAction(play, this, Player_Action_55, 0);
func_8082E634(play, this, &gPlayerAnim_link_swimer_swim);
this->stateFlags1 |= (PLAYER_STATE1_8000000 | PLAYER_STATE1_20000000);
- this->unk_AE8 = 20;
+ this->actionVar2 = 20;
this->linearVelocity = 2.0f;
func_80123140(play, this);
return false;
@@ -7930,11 +8183,11 @@ void func_8083A98C(Actor* thisx, PlayState* play2) {
return;
}
- if (DECR(this->unk_AE8) != 0) {
+ if (DECR(this->actionVar2) != 0) {
camMode = (play->sceneId != SCENE_AYASHIISHOP) ? CAM_MODE_FIRSTPERSON : CAM_MODE_DEKUHIDE;
// Show controls overlay. SCENE_AYASHIISHOP does not have Zoom, so has a different one.
- if (this->unk_AE8 == 1) {
+ if (this->actionVar2 == 1) {
Message_StartTextbox(play, (play->sceneId == SCENE_AYASHIISHOP) ? 0x2A00 : 0x5E6, NULL);
}
} else {
@@ -8014,15 +8267,15 @@ void Player_InitMode_Telescope(PlayState* play, Player* this) {
if (play->sceneId == SCENE_00KEIKOKU) {
this->actor.focus.rot.x = 0xBD8;
this->actor.focus.rot.y = -0x4D74;
- this->unk_AE8 = 20;
+ this->actionVar2 = 20;
} else if (play->sceneId == SCENE_AYASHIISHOP) {
this->actor.focus.rot.x = 0x9A6;
this->actor.focus.rot.y = 0x2102;
- this->unk_AE8 = 2;
+ this->actionVar2 = 2;
} else {
this->actor.focus.rot.x = 0x9A6;
this->actor.focus.rot.y = 0x2102;
- this->unk_AE8 = 20;
+ this->actionVar2 = 20;
}
play->actorCtx.flags |= ACTORCTX_FLAG_1;
}
@@ -8033,7 +8286,7 @@ void Player_InitMode_B(PlayState* play, Player* this) {
void Player_InitMode_D(PlayState* play, Player* this) {
if (func_8083A878(play, this, 180.0f)) {
- this->unk_AE8 = -20;
+ this->actionVar2 = -20;
}
}
@@ -8043,7 +8296,7 @@ void func_8083ADF0(PlayState* play, Player* this) {
gSaveContext.entranceSpeed = 2.0f;
if (func_8083A878(play, this, 120.0f)) {
- this->unk_AE8 = -15;
+ this->actionVar2 = -15;
}
}
@@ -8054,9 +8307,9 @@ void Player_InitMode_F(PlayState* play, Player* this) {
this->linearVelocity = gSaveContext.entranceSpeed;
if (func_8083A878(play, this, 800.0f)) {
- this->unk_AE8 = -80.0f / this->linearVelocity;
- if (this->unk_AE8 < -20) {
- this->unk_AE8 = -20;
+ this->actionVar2 = -80.0f / this->linearVelocity;
+ if (this->actionVar2 < -20) {
+ this->actionVar2 = -20;
}
}
}
@@ -8118,7 +8371,7 @@ void func_8083B1A0(Player* this, PlayState* play) {
void func_8083B23C(Player* this, PlayState* play) {
Player_SetAction(play, this, Player_Action_2, 1);
func_8082E438(play, this, D_8085BE84[PLAYER_ANIMGROUP_6][this->modelAnimType]);
- this->unk_AE8 = 1;
+ this->actionVar2 = 1;
}
void func_8083B29C(Player* this, PlayState* play) {
@@ -8211,7 +8464,7 @@ s32 func_8083B3B4(PlayState* play, Player* this, Input* input) {
if (this->stateFlags1 & PLAYER_STATE1_400) {
this->stateFlags1 |= (PLAYER_STATE1_400 | PLAYER_STATE1_800 | PLAYER_STATE1_20000000);
}
- this->unk_AE8 = 2;
+ this->actionVar2 = 2;
}
func_8082E438(play, this,
@@ -8238,7 +8491,7 @@ void func_8083B798(PlayState* play, Player* this) {
this->unk_B48 = 2.0f;
} else {
Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_swimer_swim);
- this->unk_AE8 = 1;
+ this->actionVar2 = 1;
}
this->unk_AAA = 0x3E80;
@@ -8280,7 +8533,7 @@ void func_8083B930(PlayState* play, Player* this) {
} else if ((this->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER) && (this->stateFlags2 & PLAYER_STATE2_400)) {
this->stateFlags2 &= ~PLAYER_STATE2_400;
func_8083B3B4(play, this, NULL);
- this->unk_AE7 = 1;
+ this->actionVar1 = 1;
} else if (Player_Action_27 == this->actionFunc) {
Player_SetAction(play, this, Player_Action_59, 0);
func_8083B798(play, this);
@@ -8656,7 +8909,7 @@ u16 D_8085D25C[] = {
};
// Player_MountHorse
-s32 func_8083CCB4(Player* this, PlayState* play) {
+s32 Player_ActionChange_3(Player* this, PlayState* play) {
EnHorse* rideActor = (EnHorse*)this->rideActor;
if (rideActor != NULL) {
@@ -8764,11 +9017,11 @@ s32 Player_HandleSlopes(PlayState* play, Player* this) {
} else {
Player_SetAction(play, this, Player_Action_73, 0);
func_8082DE50(play, this);
- func_8082E514(play, this, sPlayerSlopeSlipAnims[this->unk_AE7]);
+ func_8082E514(play, this, sPlayerSlopeSlipAnims[this->actionVar1]);
this->linearVelocity = sqrtf(SQXZ(this->actor.velocity));
this->currentYaw = downwardSlopeYaw;
if (sPlayerFloorPitchShape >= 0) {
- this->unk_AE7 = 1;
+ this->actionVar1 = 1;
Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_HANG);
}
@@ -8797,7 +9050,7 @@ void func_8083D168(PlayState* play, Player* this, GetItemEntry* giEntry) {
Audio_PlaySfx((this->getItemId < GI_NONE) ? NA_SE_SY_GET_BOXITEM : NA_SE_SY_GET_ITEM);
}
-s32 func_8083D23C(Player* this, PlayState* play) {
+s32 Player_ActionChange_2(Player* this, PlayState* play) {
if (gSaveContext.save.saveInfo.playerData.health != 0) {
Actor* interactRangeActor = this->interactRangeActor;
@@ -8809,7 +9062,7 @@ s32 func_8083D23C(Player* this, PlayState* play) {
interactRangeActor->parent = &this->actor;
if ((Item_CheckObtainability(giEntry->itemId) == ITEM_NONE) ||
((s16)giEntry->objectId == OBJECT_GI_BOMB_2)) {
- func_8082DCA0(play, this);
+ Player_DetachHeldActor(play, this);
func_80838830(this, giEntry->objectId);
if (!(this->stateFlags2 & PLAYER_STATE2_400) ||
@@ -8923,7 +9176,7 @@ s32 func_8083D738(Player* this, Actor* heldActor) {
return true;
}
-s32 func_8083D78C(Player* this, PlayState* play) {
+s32 Player_ActionChange_9(Player* this, PlayState* play) {
if (this->stateFlags1 & PLAYER_STATE1_800) {
if ((this->heldActor != NULL) &&
CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_B | BTN_A)) {
@@ -9016,7 +9269,7 @@ s32 func_8083D860(Player* this, PlayState* play) {
this->stateFlags1 &= ~PLAYER_STATE1_8000000;
if ((var_t0 != 0) || temp_t2) {
- if ((this->unk_AE7 = var_t0) != 0) {
+ if ((this->actionVar1 = var_t0) != 0) {
if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
anim = &gPlayerAnim_link_normal_Fclimb_startA;
@@ -9029,14 +9282,14 @@ s32 func_8083D860(Player* this, PlayState* play) {
distToInteractWall = 20.5f;
}
- this->unk_AE8 = -2;
+ this->actionVar2 = -2;
this->actor.world.pos.y += yOut;
this->actor.shape.rot.y = this->currentYaw = this->actor.wallYaw + 0x8000;
} else {
anim = this->ageProperties->unk_B0;
distToInteractWall = (this->ageProperties->wallCheckRadius - this->ageProperties->unk_3C) + 17.0f;
- this->unk_AE8 = -4;
+ this->actionVar2 = -4;
this->actor.shape.rot.y = this->currentYaw = i = this->actor.wallYaw; //! FAKE
}
@@ -9120,7 +9373,7 @@ void func_8083DF38(Player* this, PlayerAnimationHeader* anim, PlayState* play) {
this->actor.shape.rot.y = this->currentYaw = this->actor.wallYaw + 0x8000;
}
-s32 func_8083DFC4(Player* this, PlayState* play) {
+s32 Player_ActionChange_5(Player* this, PlayState* play) {
if (!(this->stateFlags1 & PLAYER_STATE1_800) && (this->actor.bgCheckFlags & BGCHECKFLAG_PLAYER_WALL_INTERACT) &&
(sPlayerShapeYawToTouchedWall < 0x3000)) {
if ((this->linearVelocity > 0.0f) && func_8083D860(this, play)) {
@@ -9290,7 +9543,7 @@ s32 func_8083E7F8(Player* this, f32* arg1, s16* arg2, PlayState* play) {
func_8083C6E8(this, play);
if ((*arg1 != 0.0f) || (ABS_ALT(this->unk_B4C) > 0x190)) {
- s16 temp_a0 = *arg2 - (u16)Camera_GetInputDirYaw(play->cameraPtrs[play->activeCamId]);
+ s16 temp_a0 = *arg2 - (u16)Camera_GetInputDirYaw(GET_ACTIVE_CAM(play));
u16 temp;
temp = (ABS_ALT(temp_a0) - 0x2000);
@@ -9371,7 +9624,7 @@ void Player_ChooseIdleAnim(PlayState* play, Player* this) {
s32 animIndex;
s32 rand;
f32 morphFrames;
- s16 lastFrame;
+ s16 endFrame;
if (((this->actor.id != ACTOR_PLAYER) && !(healthIsCritical = (this->actor.colChkInfo.health < 0x64))) ||
((this->actor.id == ACTOR_PLAYER) &&
@@ -9418,7 +9671,7 @@ void Player_ChooseIdleAnim(PlayState* play, Player* this) {
}
}
- lastFrame = Animation_GetLastFrame(anim);
+ endFrame = Animation_GetLastFrame(anim);
if ((this->skelAnime.animation == anim) || (this->skelAnime.animation == &gPlayerAnim_pz_attackAend) ||
(this->skelAnime.animation == &gPlayerAnim_pz_attackBend) ||
(this->skelAnime.animation == &gPlayerAnim_pz_attackCend)) {
@@ -9427,7 +9680,7 @@ void Player_ChooseIdleAnim(PlayState* play, Player* this) {
morphFrames = -6.0f;
}
- PlayerAnimation_Change(play, &this->skelAnime, anim, (2.0f / 3.0f) * D_8085C3E4, 0.0f, lastFrame, ANIMMODE_ONCE,
+ PlayerAnimation_Change(play, &this->skelAnime, anim, (2.0f / 3.0f) * D_8085C3E4, 0.0f, endFrame, ANIMMODE_ONCE,
morphFrames);
}
@@ -9664,7 +9917,7 @@ s32 func_8083F8A8(PlayState* play, Player* this, f32 radius, s32 countMax, f32 r
velocity.y = Rand_ZeroFloat(2.0f);
velocity.z = Rand_CenteredFloat(3.0f);
D_8085D288.y = -0.1f;
- EffectSsHahen_Spawn(play, &pos, &velocity, &D_8085D288, 0, 0x96, 1, 0x10, gKakeraLeafTip);
+ EffectSsHahen_Spawn(play, &pos, &velocity, &D_8085D288, 0, 0x96, 1, 0x10, gKakeraLeafTipDL);
}
}
@@ -9716,11 +9969,11 @@ s32 func_8083FCF0(PlayState* play, Player* this, f32 arg2, f32 arg3, f32 arg4) {
// Crouch-stabbing
s32 func_8083FD80(Player* this, PlayState* play) {
if (!Player_IsGoronOrDeku(this) && (Player_GetMeleeWeaponHeld(this) != PLAYER_MELEEWEAPON_NONE) &&
- (this->transformation != PLAYER_FORM_ZORA) && (D_80862B48 != 0)) {
+ (this->transformation != PLAYER_FORM_ZORA) && sPlayerUseHeldItem) {
//! Calling this function sets the meleeWeaponQuads' damage properties correctly, patching "Power Crouch Stab".
func_8083375C(this, PLAYER_MWA_STAB_1H);
Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_defense_kiru);
- this->unk_AE7 = 1;
+ this->actionVar1 = 1;
this->meleeWeaponAnimation = PLAYER_MWA_STAB_1H;
this->currentYaw = this->actor.shape.rot.y + this->upperLimbRot.y;
this->unk_ADD = 0;
@@ -9730,7 +9983,7 @@ s32 func_8083FD80(Player* this, PlayState* play) {
}
s32 func_8083FE38(Player* this, PlayState* play) {
- return func_80838A90(this, play) || func_808391D8(this, play) || func_8083D23C(this, play);
+ return Player_ActionChange_13(this, play) || Player_ActionChange_4(this, play) || Player_ActionChange_2(this, play);
}
void Player_RequestQuakeAndRumble(PlayState* play, Player* this, u16 sfxId) {
@@ -9741,7 +9994,7 @@ void Player_RequestQuakeAndRumble(PlayState* play, Player* this, u16 sfxId) {
void func_8083FEF4(PlayState* play, Player* this) {
Inventory_ChangeAmmo(ITEM_DEKU_STICK, -1);
- func_80831990(play, this, ITEM_NONE);
+ Player_UseItem(play, this, ITEM_NONE);
}
s32 func_8083FF30(PlayState* play, Player* this) {
@@ -9766,7 +10019,7 @@ s32 func_8083FFEC(PlayState* play, Player* this) {
gSaveContext.save.saveInfo.playerData.swordHealth--;
if (gSaveContext.save.saveInfo.playerData.swordHealth <= 0) {
Item_Give(play, ITEM_SWORD_KOKIRI);
- func_80831990(play, this, ITEM_SWORD_KOKIRI);
+ Player_UseItem(play, this, ITEM_SWORD_KOKIRI);
Player_PlaySfx(this, NA_SE_IT_MAJIN_SWORD_BROKEN);
if (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) {
Message_StartTextbox(play, 0xF9, NULL);
@@ -9952,10 +10205,10 @@ s32 func_808401F4(PlayState* play, Player* this) {
Vec3f D_8085D2A4 = { 0.0f, 0.0f, 5.0f };
void func_80840770(PlayState* play, Player* this) {
- if (this->unk_AE8 != 0) {
- if (this->unk_AE8 > 0) {
- this->unk_AE8--;
- if (this->unk_AE8 == 0) {
+ if (this->actionVar2 != 0) {
+ if (this->actionVar2 > 0) {
+ this->actionVar2--;
+ if (this->actionVar2 == 0) {
if (this->stateFlags1 & PLAYER_STATE1_8000000) {
PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_swimer_swim_wait, 1.0f, 0.0f,
Animation_GetLastFrame(&gPlayerAnim_link_swimer_swim_wait), ANIMMODE_ONCE,
@@ -9966,7 +10219,7 @@ void func_80840770(PlayState* play, Player* this) {
0.0f);
}
gSaveContext.healthAccumulator = 0xA0;
- this->unk_AE8 = -1;
+ this->actionVar2 = -1;
}
} else if (gSaveContext.healthAccumulator == 0) {
Player_StopCutscene(this);
@@ -9982,10 +10235,10 @@ void func_80840770(PlayState* play, Player* this) {
func_808339B4(this, -20);
Audio_SetBgmVolumeOn();
}
- } else if (this->unk_AE7 != 0) {
+ } else if (this->actionVar1 != 0) {
Player_StopCutscene(this);
this->csId = play->playerCsIds[PLAYER_CS_ID_REVIVE];
- this->unk_AE8 = 60;
+ this->actionVar2 = 60;
Player_SpawnFairy(play, this, &this->actor.world.pos, &D_8085D2A4, FAIRY_PARAMS(FAIRY_TYPE_5, false, 0));
Player_PlaySfx(this, NA_SE_EV_FIATY_HEAL - SFX_FLAG);
} else if (play->gameOverCtx.state == GAMEOVER_DEATH_WAIT_GROUND) {
@@ -10056,7 +10309,7 @@ s32 func_80840A30(PlayState* play, Player* this, f32* arg2, f32 arg3) {
} else {
Player_SetAction(play, this, Player_Action_26, 0);
Player_AnimationPlayOnce(play, this, D_8085BE84[PLAYER_ANIMGROUP_16][this->modelAnimType]);
- this->unk_AE8 = 1;
+ this->actionVar2 = 1;
}
}
@@ -10115,13 +10368,13 @@ void func_80840E5C(Player* this, PlayState* play) {
void func_80840EC0(Player* this, PlayState* play) {
Player_SetAction(play, this, Player_Action_30, 1);
Player_AnimationPlayLoop(play, this, D_8085CF60[Player_IsHoldingTwoHandedWeapon(this)]);
- this->unk_AE8 = 1;
+ this->actionVar2 = 1;
this->unk_B38 = 0.0f;
}
// Spin attack size
void func_80840F34(Player* this) {
- Math_StepToF(&this->unk_B08, (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_02)) ? 1.0f : 0.5f, 0.02f);
+ Math_StepToF(&this->unk_B08, CHECK_WEEKEVENTREG(WEEKEVENTREG_OBTAINED_GREAT_SPIN_ATTACK) ? 1.0f : 0.5f, 0.02f);
}
s32 func_80840F90(PlayState* play, Player* this, CsCmdActorCue* cue, f32 arg3, s16 arg4, s32 arg5) {
@@ -10209,11 +10462,11 @@ void func_80841358(PlayState* play, Player* this, s32 arg2) {
//! @bug OoB read if player is goron, deku or human
item = D_8085D2B0[this->transformation];
itemAction = sItemItemActions[item];
- func_808317C4(this);
- func_8082DCA0(play, this);
+ Player_DestroyHookshot(this);
+ Player_DetachHeldActor(play, this);
this->heldItemId = item;
this->nextModelGroup = Player_ActionToModelGroup(this, itemAction);
- func_8082F8BC(play, this, itemAction);
+ Player_InitItemAction(play, this, itemAction);
func_808309CC(play, this);
if (arg2) {
Player_PlaySfx(this, NA_SE_IT_SWORD_PICKOUT);
@@ -10234,7 +10487,7 @@ void Player_InitMode_1(PlayState* play, Player* this) {
if (this->transformation == PLAYER_FORM_FIERCE_DEITY) {
func_80841358(play, this, false);
}
- this->unk_AE8 = 20;
+ this->actionVar2 = 20;
}
void Player_InitMode_3(PlayState* play, Player* this) {
@@ -10264,7 +10517,7 @@ void Player_InitMode_6(PlayState* play, Player* this) {
Player_SetAction(play, this, Player_Action_0, 0);
func_8082E514(play, this, D_8085BE84[PLAYER_ANIMGROUP_43][this->modelAnimType]);
this->stateFlags1 |= PLAYER_STATE1_20000000;
- this->unk_AE8 = 0x28;
+ this->actionVar2 = 0x28;
gSaveContext.save.isOwlSave = false;
} else {
Player_SetAction(play, this, Player_Action_4, 0);
@@ -10288,7 +10541,7 @@ void func_80841744(PlayState* play, Player* this) {
}
this->stateFlags1 |= PLAYER_STATE1_20000000;
this->unk_ABC = -10000.0f;
- this->unk_AE8 = 0x2710;
+ this->actionVar2 = 0x2710;
this->unk_B10[5] = 8.0f;
}
@@ -10296,7 +10549,7 @@ static InitChainEntry sInitChain[] = {
ICHAIN_F32(targetArrowOffset, 500, ICHAIN_STOP),
};
-Vec3s D_8085D2C4 = { -57, 3377, 0 };
+Vec3s sPlayerSkeletonBaseTransl = { -57, 3377, 0 };
void Player_InitCommon(Player* this, PlayState* play, FlexSkeletonHeader* skelHeader) {
Actor_ProcessInitChain(&this->actor, sInitChain);
@@ -10308,11 +10561,11 @@ void Player_InitCommon(Player* this, PlayState* play, FlexSkeletonHeader* skelHe
func_808309CC(play, this);
SkelAnime_InitPlayer(play, &this->skelAnime, skelHeader, D_8085BE84[PLAYER_ANIMGROUP_0][this->modelAnimType],
1 | 8, this->jointTableBuffer, this->morphTableBuffer, PLAYER_LIMB_MAX);
- this->skelAnime.baseTransl = D_8085D2C4;
+ this->skelAnime.baseTransl = sPlayerSkeletonBaseTransl;
- SkelAnime_InitPlayer(play, &this->unk_284, skelHeader, func_8082ED20(this), 1 | 8, this->unk_929, this->unk_9C8,
- PLAYER_LIMB_MAX);
- this->unk_284.baseTransl = D_8085D2C4;
+ SkelAnime_InitPlayer(play, &this->skelAnimeUpper, skelHeader, func_8082ED20(this), 1 | 8,
+ this->jointTableUpperBuffer, this->morphTableUpperBuffer, PLAYER_LIMB_MAX);
+ this->skelAnimeUpper.baseTransl = sPlayerSkeletonBaseTransl;
if (this->transformation == PLAYER_FORM_GORON) {
SkelAnime_InitFlex(play, &this->unk_2C8, &gLinkGoronShieldingSkel, &gLinkGoronShieldingAnim,
@@ -10381,7 +10634,7 @@ Vec3f D_8085D340 = { 0.0f, 50.0f, 0.0f };
void Player_Init(Actor* thisx, PlayState* play) {
s32 pad;
Player* this = THIS;
- s8 objBankIndex;
+ s8 objectSlot;
s32 respawnFlag;
s32 var_a1;
PlayerInitMode initMode;
@@ -10408,9 +10661,9 @@ void Player_Init(Actor* thisx, PlayState* play) {
if (this->actor.shape.rot.x != 0) {
this->transformation = this->actor.shape.rot.x - 1;
- objBankIndex = Object_GetIndex(&play->objectCtx, gPlayerFormObjectIndices[this->transformation]);
- this->actor.objBankIndex = objBankIndex;
- if (objBankIndex < 0) {
+ objectSlot = Object_GetSlot(&play->objectCtx, gPlayerFormObjectIds[this->transformation]);
+ this->actor.objectSlot = objectSlot;
+ if (objectSlot <= OBJECT_SLOT_NONE) {
Actor_Kill(&this->actor);
return;
}
@@ -10468,7 +10721,7 @@ void Player_Init(Actor* thisx, PlayState* play) {
this->heldItemAction = PLAYER_IA_NONE;
this->heldItemId = ITEM_NONE;
- func_80831990(play, this, ITEM_NONE);
+ Player_UseItem(play, this, ITEM_NONE);
Player_SetEquipmentData(play, this);
this->prevBoots = this->currentBoots;
Player_InitCommon(this, play, gPlayerSkeletons[this->transformation]);
@@ -10613,7 +10866,7 @@ void Player_Init(Actor* thisx, PlayState* play) {
if (gSaveContext.powderKegTimer != 0) {
this->nextModelGroup = Player_ActionToModelGroup(this, PLAYER_IA_POWDER_KEG);
this->heldItemId = ITEM_POWDER_KEG;
- func_8082F8BC(play, this, PLAYER_IA_POWDER_KEG);
+ Player_InitItemAction(play, this, PLAYER_IA_POWDER_KEG);
func_808313F0(this, play);
} else if (gSaveContext.unk_1014 != 0) {
func_8082F5FC(this, Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_MM,
@@ -10990,7 +11243,8 @@ void Player_ProcessSceneCollision(PlayState* play, Player* this) {
func_801A3CF4(SurfaceType_GetEcho(&play->colCtx, floorPoly, this->actor.floorBgId));
if (this->actor.floorBgId == BGCHECK_SCENE) {
- func_800FAAB4(play, SurfaceType_GetLightSettingIndex(&play->colCtx, floorPoly, this->actor.floorBgId));
+ Environment_ChangeLightSetting(
+ play, SurfaceType_GetLightSettingIndex(&play->colCtx, floorPoly, this->actor.floorBgId));
} else {
DynaPoly_SetPlayerAbove(&play->colCtx, this->actor.floorBgId);
}
@@ -11296,7 +11550,7 @@ void Player_UpdateCamAndSeqModes(PlayState* play, Player* this) {
(this->meleeWeaponAnimation >= PLAYER_MWA_FORWARD_SLASH_1H) &&
(this->meleeWeaponAnimation <= PLAYER_MWA_ZORA_PUNCH_KICK)) ||
(this->stateFlags3 & PLAYER_STATE3_8) ||
- ((Player_Action_52 == this->actionFunc) && (this->unk_AE8 == 0)) ||
+ ((Player_Action_52 == this->actionFunc) && (this->actionVar2 == 0)) ||
(Player_Action_53 == this->actionFunc)) {
camMode = CAM_MODE_STILL;
} else {
@@ -11329,7 +11583,7 @@ void func_808442D8(PlayState* play, Player* this) {
f32 temp_fv1;
if (this->unk_B0C == 0.0f) {
- func_80831990(play, this, ITEM_NONE);
+ Player_UseItem(play, this, ITEM_NONE);
return;
}
@@ -11580,14 +11834,14 @@ void func_80844784(PlayState* play, Player* this) {
Audio_SetSfxTimerLerpInterval(4, 2);
}
- this->unk_AE8 = 0x270F;
+ this->actionVar2 = 0x270F;
Math_Vec3f_Copy(this->unk_AF0, &this->actor.world.pos);
}
if (play->envCtx.windSpeed >= 50.0f) {
- temp_fa0 = play->envCtx.windDir.x;
- temp_fa1 = play->envCtx.windDir.y;
- temp_ft4 = play->envCtx.windDir.z;
+ temp_fa0 = play->envCtx.windDirection.x;
+ temp_fa1 = play->envCtx.windDirection.y;
+ temp_ft4 = play->envCtx.windDirection.z;
temp_fv0_2 = sqrtf(SQ(temp_fa0) + SQ(temp_fa1) + SQ(temp_ft4));
if (temp_fv0_2 != 0.0f) {
@@ -11770,7 +12024,7 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) {
func_8083B930(play, this);
this->stateFlags2 &= ~PLAYER_STATE2_400;
if (Player_Action_54 == this->actionFunc) {
- this->unk_AE8 = 20;
+ this->actionVar2 = 20;
}
}
this->prevBoots = this->currentBoots;
@@ -11778,7 +12032,7 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) {
if ((this->actor.parent == NULL) && (this->stateFlags1 & PLAYER_STATE1_800000)) {
this->actor.parent = this->rideActor;
func_80837BD0(play, this);
- this->unk_AE8 = -1;
+ this->actionVar2 = -1;
Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_uma_wait_1);
func_8082E920(play, this, ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE | ANIM_FLAG_80);
}
@@ -11944,7 +12198,7 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) {
D_8085C3E4 = (this->stateFlags1 & PLAYER_STATE1_8000000) ? 0.5f : 1.0f;
D_8085C3E8 = 1.0f / D_8085C3E4;
- D_80862B48 = D_80862B4C = 0;
+ sPlayerUseHeldItem = sPlayerHeldItemButtonIsHeldDown = false;
var_v1 = Play_InCsMode(play);
D_80862B2C = this->currentMask;
@@ -12076,7 +12330,7 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) {
}
if (!(this->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_4000000)) && (this->invincibilityTimer <= 0)) {
if ((Player_Action_93 != this->actionFunc) &&
- ((Player_Action_96 != this->actionFunc) || (this->unk_AE7 != 1))) {
+ ((Player_Action_96 != this->actionFunc) || (this->actionVar1 != 1))) {
if (this->cylinder.base.atFlags != AT_NONE) {
CollisionCheck_SetAT(play, &play->colChkCtx, &this->cylinder.base);
}
@@ -12127,7 +12381,7 @@ void Player_Update(Actor* thisx, PlayState* play) {
// This block is a leftover dog-following mechanic from OoT
if (gSaveContext.dogParams < 0) {
- if (Object_GetIndex(&play->objectCtx, OBJECT_DOG) < 0) {
+ if (Object_GetSlot(&play->objectCtx, OBJECT_DOG) < 0) {
gSaveContext.dogParams = 0;
} else {
Actor* dog;
@@ -12150,7 +12404,7 @@ void Player_Update(Actor* thisx, PlayState* play) {
}
if ((this->heldActor != NULL) && (this->heldActor->update == NULL)) {
- func_8082DCA0(play, this);
+ Player_DetachHeldActor(play, this);
}
if ((play->actorCtx.unk268 != 0) && (this == GET_PLAYER(play))) {
@@ -12305,7 +12559,7 @@ void Player_Draw(Actor* thisx, PlayState* play) {
spE0 = 0.0f;
} else {
Matrix_Translate(0.0f, -this->unk_ABC, 0.0f, MTXMODE_APPLY);
- spE0 = this->unk_AE8 - 6;
+ spE0 = this->actionVar2 - 6;
if (spE0 < 0.0f) {
spE8 = D_8085D55C;
spE0 = this->unk_B86[0];
@@ -12364,7 +12618,7 @@ void Player_Draw(Actor* thisx, PlayState* play) {
CLAMP_MIN(spB8, spB4) * this->actor.scale.z * 1.15f, MTXMODE_APPLY);
Matrix_RotateXS(this->actor.shape.rot.x, MTXMODE_APPLY);
Scene_SetRenderModeXlu(play, 0, 1);
- Lib_LerpRGB(&D_8085D580, &D_8085D584, this->unk_B10[0], &spBC);
+ Color_RGB8_Lerp(&D_8085D580, &D_8085D584, this->unk_B10[0], &spBC);
gDPSetEnvColor(POLY_OPA_DISP++, spBC.r, spBC.g, spBC.b, 255);
@@ -12386,11 +12640,11 @@ void Player_Draw(Actor* thisx, PlayState* play) {
func_80122BA4(play, &this->unk_3D0, 2, 255);
if (this->unk_B86[1] < 3) {
- if (this->unk_AE7 >= 5) {
+ if (this->actionVar1 >= 5) {
f32 var_fa1;
u8 sp9B;
- var_fa1 = (this->unk_AE7 - 4) * 0.02f;
+ var_fa1 = (this->actionVar1 - 4) * 0.02f;
if (this->unk_B86[1] != 0) {
sp9B = (-this->unk_B86[1] * 0x55) + 0xFF;
@@ -12644,7 +12898,7 @@ s32 func_80847880(PlayState* play, Player* this) {
func_8082DE50(play, this);
Player_SetAction(play, this, Player_Action_81, 0);
if (!func_800B7118(this) || Player_IsHoldingHookshot(this)) {
- func_80831990(play, this, ITEM_BOW);
+ Player_UseItem(play, this, ITEM_BOW);
}
Player_AnimationPlayOnce(play, this, func_8082ED20(this));
this->csMode = PLAYER_CSMODE_NONE;
@@ -12662,7 +12916,7 @@ s32 func_80847994(PlayState* play, Player* this) {
this->stateFlags3 &= ~PLAYER_STATE3_20;
this->itemAction = PLAYER_IA_OCARINA;
this->unk_AA5 = PLAYER_UNKAA5_5;
- func_80838A90(this, play);
+ Player_ActionChange_13(this, play);
return true;
}
return false;
@@ -12679,7 +12933,7 @@ void func_808479F4(PlayState* play, Player* this, f32 arg2) {
}
void func_80847A50(Player* this) {
- Player_PlaySfx(this, ((this->unk_AE7 != 0) ? NA_SE_PL_WALK_METAL1 : NA_SE_PL_WALK_LADDER) +
+ Player_PlaySfx(this, ((this->actionVar1 != 0) ? NA_SE_PL_WALK_METAL1 : NA_SE_PL_WALK_LADDER) +
this->ageProperties->surfaceSfxIdOffset);
}
@@ -12731,8 +12985,8 @@ s32 func_80847BF0(Player* this, PlayState* play) {
s32 var_a2;
f32 sp34;
- if (this->unk_AE8 < 0) {
- this->unk_AE8 = 0x63;
+ if (this->actionVar2 < 0) {
+ this->actionVar2 = 0x63;
} else {
var_a2 = (this->mountSide < 0) ? 0 : 1;
@@ -12896,10 +13150,10 @@ s32 func_808482E0(PlayState* play, Player* this) {
return true;
}
- if (this->unk_AE7 == 0) {
+ if (this->actionVar1 == 0) {
GetItemEntry* giEntry = &sGetItemTable[this->getItemId - 1];
- this->unk_AE7 = 1;
+ this->actionVar1 = 1;
Message_StartTextbox(play, giEntry->textId, &this->actor);
Item_Give(play, giEntry->itemId);
@@ -12966,7 +13220,7 @@ void func_808484F0(Player* this) {
}
}
-s32 func_80848570(Player* this, PlayState* play) {
+s32 Player_ActionChange_7(Player* this, PlayState* play) {
if (!func_8083A6C0(play, this)) {
if (func_808396B8(play, this)) {
PlayerMeleeWeaponAnimation meleeWeaponAnim = func_808335F4(this);
@@ -13030,30 +13284,32 @@ s32 Player_UpperAction_1(Player* this, PlayState* play) {
return false;
}
-s32 Player_UpperAction_2(Player* this, PlayState* play) {
- if (PlayerAnimation_Update(play, &this->unk_284) ||
+s32 Player_UpperAction_ChangeHeldItem(Player* this, PlayState* play) {
+ if (PlayerAnimation_Update(play, &this->skelAnimeUpper) ||
((Player_ItemToItemAction(this, this->heldItemId) == this->heldItemAction) &&
- (D_80862B48 = D_80862B48 || ((this->modelAnimType != PLAYER_ANIMTYPE_3) &&
- (this->heldItemAction != PLAYER_IA_DEKU_STICK) && (play->unk_1887C == 0))))) {
- Player_SetUpperAction(play, this, D_8085C9F0[this->heldItemAction]);
+ (sPlayerUseHeldItem =
+ (sPlayerUseHeldItem || ((this->modelAnimType != PLAYER_ANIMTYPE_3) &&
+ (this->heldItemAction != PLAYER_IA_DEKU_STICK) && (play->unk_1887C == 0)))))) {
+ Player_SetUpperAction(play, this, sPlayerUpperActionUpdateFuncs[this->heldItemAction]);
this->unk_ACC = 0;
this->unk_AA4 = 0;
- D_80862B4C = D_80862B48;
+ sPlayerHeldItemButtonIsHeldDown = sPlayerUseHeldItem;
return this->upperActionFunc(this, play);
}
if (func_8082ED94(this) != 0) {
- func_80830D40(play, this);
+ Player_WaitToFinishItemChange(play, this);
Player_AnimationPlayOnce(play, this, func_8082ED20(this));
this->unk_AA4 = 0;
} else {
- func_80830D40(play, this);
+ Player_WaitToFinishItemChange(play, this);
}
+
return true;
}
s32 Player_UpperAction_3(Player* this, PlayState* play) {
- PlayerAnimation_Update(play, &this->unk_284);
+ PlayerAnimation_Update(play, &this->skelAnimeUpper);
if (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_R)) {
func_80830CE8(play, this);
} else {
@@ -13067,13 +13323,13 @@ s32 Player_UpperAction_3(Player* this, PlayState* play) {
}
s32 Player_UpperAction_4(Player* this, PlayState* play) {
- if (PlayerAnimation_Update(play, &this->unk_284)) {
+ if (PlayerAnimation_Update(play, &this->skelAnimeUpper)) {
PlayerAnimationHeader* anim;
- f32 lastFrame;
+ f32 endFrame;
anim = func_80830A58(play, this);
- lastFrame = Animation_GetLastFrame(anim);
- PlayerAnimation_Change(play, &this->unk_284, anim, 1.0f, lastFrame, lastFrame, ANIMMODE_ONCE, 0.0f);
+ endFrame = Animation_GetLastFrame(anim);
+ PlayerAnimation_Change(play, &this->skelAnimeUpper, anim, 1.0f, endFrame, endFrame, ANIMMODE_ONCE, 0.0f);
}
this->stateFlags1 |= PLAYER_STATE1_400000;
@@ -13082,11 +13338,10 @@ s32 Player_UpperAction_4(Player* this, PlayState* play) {
}
s32 Player_UpperAction_5(Player* this, PlayState* play) {
- // possibly a case of if ((D_80862B48 = D_80862B4C) || PlayerAnimation_Update(play, &this->unk_284))
- D_80862B48 = D_80862B4C;
- if ((D_80862B48 != 0) || PlayerAnimation_Update(play, &this->unk_284)) {
- Player_SetUpperAction(play, this, D_8085C9F0[this->heldItemAction]);
- PlayerAnimation_PlayLoop(play, &this->unk_284, D_8085BE84[PLAYER_ANIMGROUP_0][this->modelAnimType]);
+ sPlayerUseHeldItem = sPlayerHeldItemButtonIsHeldDown;
+ if (sPlayerUseHeldItem || PlayerAnimation_Update(play, &this->skelAnimeUpper)) {
+ Player_SetUpperAction(play, this, sPlayerUpperActionUpdateFuncs[this->heldItemAction]);
+ PlayerAnimation_PlayLoop(play, &this->skelAnimeUpper, D_8085BE84[PLAYER_ANIMGROUP_0][this->modelAnimType]);
this->unk_AA4 = 0;
this->upperActionFunc(this, play);
return false;
@@ -13144,10 +13399,10 @@ s32 Player_UpperAction_7(Player* this, PlayState* play) {
if ((this->unk_ACE == 0) && (func_8082ED94(this) == 0) &&
(this->skelAnime.animation == &gPlayerAnim_link_bow_side_walk)) {
- PlayerAnimation_PlayOnce(play, &this->unk_284, D_8085D5E4[index]);
+ PlayerAnimation_PlayOnce(play, &this->skelAnimeUpper, D_8085D5E4[index]);
this->unk_ACE = -1;
- } else if (PlayerAnimation_Update(play, &this->unk_284)) {
- PlayerAnimation_PlayLoop(play, &this->unk_284, D_8085D5F0[index]);
+ } else if (PlayerAnimation_Update(play, &this->skelAnimeUpper)) {
+ PlayerAnimation_PlayLoop(play, &this->skelAnimeUpper, D_8085D5F0[index]);
this->unk_ACE = 1;
} else if (this->unk_ACE == 1) {
this->unk_ACE = 2;
@@ -13158,7 +13413,7 @@ s32 Player_UpperAction_7(Player* this, PlayState* play) {
}
func_80831010(this, play);
- if ((this->unk_ACE > 0) && ((this->unk_B28 < 0) || ((D_80862B4C == 0) && !func_80830FD4(play)))) {
+ if ((this->unk_ACE > 0) && ((this->unk_B28 < 0) || (!sPlayerHeldItemButtonIsHeldDown && !func_80830FD4(play)))) {
Player_SetUpperAction(play, this, Player_UpperAction_8);
if (this->unk_B28 >= 0) {
if (index != 0) {
@@ -13167,7 +13422,8 @@ s32 Player_UpperAction_7(Player* this, PlayState* play) {
}
if (this->transformation == PLAYER_FORM_DEKU) {
- PlayerAnimation_PlayOnceSetSpeed(play, &this->unk_284, &gPlayerAnim_pn_tamahaki, 2.0f / 3.0f);
+ PlayerAnimation_PlayOnceSetSpeed(play, &this->skelAnimeUpper, &gPlayerAnim_pn_tamahaki,
+ 2.0f / 3.0f);
}
} else if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
func_80831194(play, this);
@@ -13183,15 +13439,15 @@ s32 Player_UpperAction_7(Player* this, PlayState* play) {
}
s32 Player_UpperAction_8(Player* this, PlayState* play) {
- s32 animFinished = PlayerAnimation_Update(play, &this->unk_284);
+ s32 animFinished = PlayerAnimation_Update(play, &this->skelAnimeUpper);
if (Player_IsHoldingHookshot(this) && !func_80831124(play, this)) {
return true;
}
if (!func_80830B88(play, this) &&
- ((((this->unk_B28 < 0) && (D_80862B4C != 0)) ||
- ((animFinished || (this->transformation != PLAYER_FORM_DEKU)) && (D_80862B48 != 0))) ||
+ ((((this->unk_B28 < 0) && sPlayerHeldItemButtonIsHeldDown) ||
+ ((animFinished || (this->transformation != PLAYER_FORM_DEKU)) && sPlayerUseHeldItem)) ||
func_80830F9C(play))) {
this->unk_B28 = ABS_ALT(this->unk_B28);
@@ -13199,7 +13455,7 @@ s32 Player_UpperAction_8(Player* this, PlayState* play) {
if (Player_IsHoldingHookshot(this)) {
this->unk_ACE = 1;
} else {
- PlayerAnimation_PlayOnce(play, &this->unk_284,
+ PlayerAnimation_PlayOnce(play, &this->skelAnimeUpper,
(this->transformation == PLAYER_FORM_DEKU)
? &gPlayerAnim_pn_tamahakidf
: &gPlayerAnim_link_bow_bow_shoot_next);
@@ -13221,7 +13477,7 @@ s32 Player_UpperAction_8(Player* this, PlayState* play) {
Player_SetUpperAction(play, this, Player_UpperAction_6);
} else {
Player_SetUpperAction(play, this, Player_UpperAction_9);
- PlayerAnimation_PlayOnce(play, &this->unk_284,
+ PlayerAnimation_PlayOnce(play, &this->skelAnimeUpper,
(this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_tamahakidf
: &gPlayerAnim_link_bow_bow_shoot_end);
}
@@ -13232,7 +13488,7 @@ s32 Player_UpperAction_8(Player* this, PlayState* play) {
}
s32 Player_UpperAction_9(Player* this, PlayState* play) {
- if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || PlayerAnimation_Update(play, &this->unk_284)) {
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || PlayerAnimation_Update(play, &this->skelAnimeUpper)) {
Player_SetUpperAction(play, this, Player_UpperAction_6);
}
return true;
@@ -13250,8 +13506,8 @@ s32 Player_UpperAction_10(Player* this, PlayState* play) {
}
if (this->stateFlags1 & PLAYER_STATE1_800) {
- if (PlayerAnimation_Update(play, &this->unk_284)) {
- PlayerAnimation_PlayLoop(play, &this->unk_284, &gPlayerAnim_link_normal_carryB_wait);
+ if (PlayerAnimation_Update(play, &this->skelAnimeUpper)) {
+ PlayerAnimation_PlayLoop(play, &this->skelAnimeUpper, &gPlayerAnim_link_normal_carryB_wait);
}
if ((heldActor->id == ACTOR_EN_NIW) && (this->actor.velocity.y <= 0.0f)) {
@@ -13279,31 +13535,31 @@ s32 Player_UpperAction_11(Player* this, PlayState* play) {
}
s32 Player_UpperAction_12(Player* this, PlayState* play) {
- if (PlayerAnimation_Update(play, &this->unk_284)) {
+ if (PlayerAnimation_Update(play, &this->skelAnimeUpper)) {
Player_SetUpperAction(play, this, Player_UpperAction_13);
- PlayerAnimation_PlayLoop(play, &this->unk_284, &gPlayerAnim_pz_cutterwaitanim);
+ PlayerAnimation_PlayLoop(play, &this->skelAnimeUpper, &gPlayerAnim_pz_cutterwaitanim);
}
- if (this->unk_284.animation == &gPlayerAnim_pz_cutterwaitanim) {
+ if (this->skelAnimeUpper.animation == &gPlayerAnim_pz_cutterwaitanim) {
func_80831010(this, play);
}
return true;
}
s32 Player_UpperAction_13(Player* this, PlayState* play) {
- PlayerAnimation_Update(play, &this->unk_284);
+ PlayerAnimation_Update(play, &this->skelAnimeUpper);
func_80831010(this, play);
- if (D_80862B4C == 0) {
+ if (!sPlayerHeldItemButtonIsHeldDown) {
Player_SetUpperAction(play, this, Player_UpperAction_14);
- PlayerAnimation_PlayOnce(play, &this->unk_284, &gPlayerAnim_pz_cutterattack);
+ PlayerAnimation_PlayOnce(play, &this->skelAnimeUpper, &gPlayerAnim_pz_cutterattack);
}
return true;
}
s32 Player_UpperAction_14(Player* this, PlayState* play) {
- if (PlayerAnimation_Update(play, &this->unk_284)) {
+ if (PlayerAnimation_Update(play, &this->skelAnimeUpper)) {
Player_SetUpperAction(play, this, Player_UpperAction_15);
this->unk_ACC = 0;
- } else if (PlayerAnimation_OnFrame(&this->unk_284, 6.0f)) {
+ } else if (PlayerAnimation_OnFrame(&this->skelAnimeUpper, 6.0f)) {
Vec3f pos;
s16 untargetedRotY;
@@ -13367,7 +13623,7 @@ s32 Player_UpperAction_15(Player* this, PlayState* play) {
if (this->stateFlags3 & PLAYER_STATE3_800000) {
Player_SetUpperAction(play, this, Player_UpperAction_16);
- PlayerAnimation_PlayOnce(play, &this->unk_284, &gPlayerAnim_pz_cuttercatch);
+ PlayerAnimation_PlayOnce(play, &this->skelAnimeUpper, &gPlayerAnim_pz_cuttercatch);
this->stateFlags3 &= ~PLAYER_STATE3_800000;
Player_PlaySfx(this, NA_SE_PL_CATCH_BOOMERANG);
Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_SWORD_N);
@@ -13378,7 +13634,7 @@ s32 Player_UpperAction_15(Player* this, PlayState* play) {
}
s32 Player_UpperAction_16(Player* this, PlayState* play) {
- if (!Player_UpperAction_11(this, play) && PlayerAnimation_Update(play, &this->unk_284)) {
+ if (!Player_UpperAction_11(this, play) && PlayerAnimation_Update(play, &this->skelAnimeUpper)) {
if (this->stateFlags1 & PLAYER_STATE1_2000000) {
Player_SetUpperAction(play, this, Player_UpperAction_15);
this->unk_ACC = 0;
@@ -13393,15 +13649,15 @@ void Player_Action_0(Player* this, PlayState* play) {
PlayerAnimation_Update(play, &this->skelAnime);
func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_ITEM_BOTTLE]);
- if (DECR(this->unk_AE8) == 0) {
+ if (DECR(this->actionVar2) == 0) {
if (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) {
Player_StopCutscene(this);
Player_SetAction(play, this, Player_Action_4, 0);
this->stateFlags1 &= ~PLAYER_STATE1_20000000;
}
- } else if (this->unk_AE8 == 30) {
+ } else if (this->actionVar2 == 30) {
if (Message_GetState(&play->msgCtx) != TEXT_STATE_NONE) {
- this->unk_AE8++;
+ this->actionVar2++;
} else {
Message_StartTextbox(play, 0xC03, NULL);
}
@@ -13411,7 +13667,7 @@ void Player_Action_0(Player* this, PlayState* play) {
void Player_Action_1(Player* this, PlayState* play) {
this->stateFlags3 |= PLAYER_STATE3_10000000;
PlayerAnimation_Update(play, &this->skelAnime);
- func_8083216C(this, play);
+ Player_UpdateUpperBody(this, play);
if (R_PLAY_FILL_SCREEN_ON == 0) {
R_PLAY_FILL_SCREEN_ON = 20;
@@ -13447,7 +13703,7 @@ void Player_Action_1(Player* this, PlayState* play) {
Player_AnimationPlayOnce(play, this, func_8082ED20(this));
if ((play->roomCtx.curRoom.num == this->unk_3CE) && (play->roomCtx.prevRoom.num < 0)) {
- this->unk_AE8 = 5;
+ this->actionVar2 = 5;
} else {
play->roomCtx.curRoom.num = -1;
play->roomCtx.prevRoom.num = -1;
@@ -13455,19 +13711,19 @@ void Player_Action_1(Player* this, PlayState* play) {
play->roomCtx.prevRoom.segment = NULL;
func_8012EBF8(play, &play->roomCtx);
- this->unk_AE8 = -1;
- this->unk_AE7 = this->unk_3CE;
+ this->actionVar2 = -1;
+ this->actionVar1 = this->unk_3CE;
}
}
}
- } else if (this->unk_AE8 < 0) {
- if (Room_StartRoomTransition(play, &play->roomCtx, this->unk_AE7)) {
+ } else if (this->actionVar2 < 0) {
+ if (Room_StartRoomTransition(play, &play->roomCtx, this->actionVar1)) {
Map_InitRoomData(play, play->roomCtx.curRoom.num);
Minimap_SavePlayerRoomInitInfo(play);
- this->unk_AE8 = 5;
+ this->actionVar2 = 5;
}
- } else if (this->unk_AE8 > 0) {
- this->unk_AE8--;
+ } else if (this->actionVar2 > 0) {
+ this->actionVar2--;
} else {
R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON;
if (R_PLAY_FILL_SCREEN_ALPHA < 0) {
@@ -13485,11 +13741,11 @@ void Player_Action_2(Player* this, PlayState* play) {
s16 yawTarget;
s32 temp_v0;
- if (this->unk_AE8 != 0) {
+ if (this->actionVar2 != 0) {
if (PlayerAnimation_Update(play, &this->skelAnime)) {
func_8082E794(this);
Player_AnimationPlayLoop(play, this, func_8082EF54(this));
- this->unk_AE8 = 0;
+ this->actionVar2 = 0;
this->stateFlags3 &= ~PLAYER_STATE3_8;
}
func_8082FC60(this);
@@ -13498,7 +13754,7 @@ void Player_Action_2(Player* this, PlayState* play) {
}
func_80832F24(this);
- if (func_80833058(play, this, D_8085CFE4, 1)) {
+ if (Player_TryActionChangeList(play, this, sPlayerActionChangeList1, true)) {
return;
}
@@ -13553,7 +13809,7 @@ void Player_Action_3(Player* this, PlayState* play) {
}
func_80832F24(this);
- if (func_80833058(play, this, D_8085CFEC, 1)) {
+ if (Player_TryActionChangeList(play, this, sPlayerActionChangeList2, true)) {
return;
}
@@ -13607,13 +13863,13 @@ void Player_Action_4(Player* this, PlayState* play) {
if (animFinished ||
((this->currentMask == PLAYER_MASK_SCENTS) && (this->skelAnime.animation != &gPlayerAnim_cl_msbowait)) ||
((this->currentMask != PLAYER_MASK_SCENTS) && (this->skelAnime.animation == &gPlayerAnim_cl_msbowait))) {
- if (this->unk_AE8 != 0) {
- if (DECR(this->unk_AE8) == 0) {
+ if (this->actionVar2 != 0) {
+ if (DECR(this->actionVar2) == 0) {
this->skelAnime.endFrame = this->skelAnime.animLength - 1.0f;
}
this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].y =
- (this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].y + ((this->unk_AE8 & 1) * 0x50)) - 0x28;
+ (this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].y + ((this->actionVar2 & 1) * 0x50)) - 0x28;
} else {
func_8082E794(this);
Player_ChooseIdleAnim(play, this);
@@ -13622,7 +13878,8 @@ void Player_Action_4(Player* this, PlayState* play) {
}
func_80832F24(this);
- if ((this->unk_AE8 == 0) && !func_80847880(play, this) && !func_80833058(play, this, D_8085D01C, 1)) {
+ if ((this->actionVar2 == 0) && !func_80847880(play, this) &&
+ !Player_TryActionChangeList(play, this, sPlayerActionChangeList7, true)) {
if (func_8082FB68(this)) {
func_8083B23C(this, play);
return;
@@ -13689,7 +13946,7 @@ void Player_Action_5(Player* this, PlayState* play) {
Player_AnimSfx_PlayFloorWalk(this, this->linearVelocity);
}
- if (func_80833058(play, this, D_8085CFF8, 1)) {
+ if (Player_TryActionChangeList(play, this, sPlayerActionChangeList3, true)) {
return;
}
@@ -13741,7 +13998,7 @@ void Player_Action_6(Player* this, PlayState* play) {
s32 sp2C;
func_8083EE60(this, play);
- if (func_80833058(play, this, D_8085D004, 1)) {
+ if (Player_TryActionChangeList(play, this, sPlayerActionChangeList4, true)) {
return;
}
@@ -13781,7 +14038,7 @@ void Player_Action_7(Player* this, PlayState* play) {
func_80832F24(this);
- if (func_80833058(play, this, D_8085D004, 1)) {
+ if (Player_TryActionChangeList(play, this, sPlayerActionChangeList4, true)) {
return;
}
@@ -13802,7 +14059,7 @@ void Player_Action_7(Player* this, PlayState* play) {
void Player_Action_8(Player* this, PlayState* play) {
s32 animFinished = PlayerAnimation_Update(play, &this->skelAnime);
- if (func_80833058(play, this, D_8085D004, 1)) {
+ if (Player_TryActionChangeList(play, this, sPlayerActionChangeList4, true)) {
return;
}
@@ -13817,7 +14074,7 @@ void Player_Action_9(Player* this, PlayState* play) {
s32 var_v0;
func_8083F27C(play, this);
- if (func_80833058(play, this, D_8085D00C, 1)) {
+ if (Player_TryActionChangeList(play, this, sPlayerActionChangeList5, true)) {
return;
}
@@ -13878,7 +14135,7 @@ void Player_Action_10(Player* this, PlayState* play) {
AnimationContext_SetLoadFrame(play, func_8082ED20(this), 0, this->skelAnime.limbCount,
this->skelAnime.morphTable);
AnimationContext_SetCopyTrue(play, this->skelAnime.limbCount, this->skelAnime.jointTable,
- this->skelAnime.morphTable, D_8085B9F0);
+ this->skelAnime.morphTable, sPlayerUpperBodyLimbCopyMap);
}
Player_GetMovementSpeedAndYaw(this, &speedTarget, &yawTarget, SPEED_MODE_CURVED, play);
@@ -13887,7 +14144,7 @@ void Player_Action_10(Player* this, PlayState* play) {
yawTarget = this->actor.home.rot.y;
}
- if (func_80833058(play, this, D_8085D018, 1)) {
+ if (Player_TryActionChangeList(play, this, sPlayerActionChangeList6, true)) {
return;
}
@@ -13910,8 +14167,8 @@ void Player_Action_11(Player* this, PlayState* play) {
}
PlayerAnimation_Update(play, &this->skelAnime);
- if (!func_80847880(play, this) &&
- (!func_80833058(play, this, D_8085D01C, 1) || (Player_Action_11 == this->actionFunc))) {
+ if (!func_80847880(play, this) && (!Player_TryActionChangeList(play, this, sPlayerActionChangeList7, true) ||
+ (Player_Action_11 == this->actionFunc))) {
f32 speedTarget;
f32 temp_fv0;
f32 temp_fv1;
@@ -13951,7 +14208,8 @@ void Player_Action_12(Player* this, PlayState* play) {
PlayerAnimation_Update(play, &this->skelAnime);
func_80832F24(this);
if (!func_80847880(play, this)) {
- if (!func_80833058(play, this, D_8085D01C, 0) || (Player_Action_12 == this->actionFunc)) {
+ if (!Player_TryActionChangeList(play, this, sPlayerActionChangeList7, false) ||
+ (Player_Action_12 == this->actionFunc)) {
if (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_B)) {
func_80839E74(this, play);
}
@@ -13965,7 +14223,7 @@ void Player_Action_13(Player* this, PlayState* play) {
this->stateFlags2 |= PLAYER_STATE2_20;
func_8083F57C(this, play);
- if (func_80833058(play, this, D_8085D028, 1)) {
+ if (Player_TryActionChangeList(play, this, sPlayerActionChangeList8, true)) {
return;
}
@@ -13996,7 +14254,7 @@ void Player_Action_14(Player* this, PlayState* play) {
this->stateFlags2 |= PLAYER_STATE2_20;
func_8083F57C(this, play);
- if (func_80833058(play, this, D_8085D034, 1)) {
+ if (Player_TryActionChangeList(play, this, sPlayerActionChangeList9, true)) {
return;
}
@@ -14026,7 +14284,7 @@ void Player_Action_15(Player* this, PlayState* play) {
f32 speedTarget;
s16 yawTarget;
- if (func_80833058(play, this, D_8085D00C, 1)) {
+ if (Player_TryActionChangeList(play, this, sPlayerActionChangeList5, true)) {
return;
}
@@ -14053,7 +14311,7 @@ void Player_Action_16(Player* this, PlayState* play) {
s16 yawTarget;
func_80832F24(this);
- if (func_80833058(play, this, D_8085D044, 1)) {
+ if (Player_TryActionChangeList(play, this, sPlayerActionChangeList10, true)) {
return;
}
@@ -14079,8 +14337,8 @@ void Player_Action_17(Player* this, PlayState* play) {
func_8082E67C(play, this, D_8085BE84[PLAYER_ANIMGROUP_32][this->modelAnimType]);
}
- if (DECR(this->unk_AE8) == 0) {
- if (!func_80838A90(this, play)) {
+ if (DECR(this->actionVar2) == 0) {
+ if (!Player_ActionChange_13(this, play)) {
func_80836A98(this, D_8085BE84[PLAYER_ANIMGROUP_33][this->modelAnimType], play);
}
this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED;
@@ -14096,7 +14354,7 @@ void Player_Action_18(Player* this, PlayState* play) {
SkelAnime_Update(&this->unk_2C8);
if (!func_8083FE38(this, play)) {
- if (!func_8083A274(this, play)) {
+ if (!Player_ActionChange_11(this, play)) {
this->stateFlags1 &= ~PLAYER_STATE1_400000;
if (this->itemAction <= PLAYER_IA_MINUS1) {
@@ -14118,23 +14376,23 @@ void Player_Action_18(Player* this, PlayState* play) {
Player_AnimationPlayLoop(play, this, D_8085BE84[PLAYER_ANIMGROUP_20][this->modelAnimType]);
}
- this->unk_AE8 = 1;
- this->unk_AE7 = 0;
+ this->actionVar2 = 1;
+ this->actionVar1 = 0;
}
if (!Player_IsGoronOrDeku(this)) {
this->stateFlags1 |= PLAYER_STATE1_400000;
- func_8083216C(this, play);
+ Player_UpdateUpperBody(this, play);
this->stateFlags1 &= ~PLAYER_STATE1_400000;
if (this->transformation == PLAYER_FORM_ZORA) {
func_8082F164(this, BTN_R | BTN_B);
}
}
- if (this->unk_AE8 != 0) {
+ if (this->actionVar2 != 0) {
f32 yStick = sPlayerControlInput->rel.stick_y * 180;
f32 xStick = sPlayerControlInput->rel.stick_x * -120;
- s16 temp_a0 = this->actor.shape.rot.y - Camera_GetInputDirYaw(play->cameraPtrs[play->activeCamId]);
+ s16 temp_a0 = this->actor.shape.rot.y - Camera_GetInputDirYaw(GET_ACTIVE_CAM(play));
s16 var_a1;
s16 temp_ft5;
s16 var_a2;
@@ -14154,17 +14412,17 @@ void Player_Action_18(Player* this, PlayState* play) {
this->upperLimbRot.x = this->actor.focus.rot.x;
Math_ScaledStepToS(&this->upperLimbRot.y, temp_ft5, var_a3);
- if (this->unk_AE7 != 0) {
+ if (this->actionVar1 != 0) {
if (!func_808401F4(play, this)) {
if (this->skelAnime.curFrame < 2.0f) {
func_8082FA5C(play, this, PLAYER_MELEE_WEAPON_STATE_1);
}
} else {
- this->unk_AE8 = 1;
- this->unk_AE7 = 0;
+ this->actionVar2 = 1;
+ this->actionVar1 = 0;
}
} else if (!func_8083FE38(this, play)) {
- if (func_8083A274(this, play)) {
+ if (Player_ActionChange_11(this, play)) {
func_8083FD80(this, play);
} else {
this->stateFlags1 &= ~PLAYER_STATE1_400000;
@@ -14197,9 +14455,10 @@ void Player_Action_18(Player* this, PlayState* play) {
void Player_Action_19(Player* this, PlayState* play) {
func_80832F24(this);
- if (this->unk_AE7 == 0) {
- D_80862B04 = func_8083216C(this, play);
- if ((Player_UpperAction_3 == this->upperActionFunc) || (func_808331FC(play, this, &this->unk_284, 4.0f) > 0)) {
+ if (this->actionVar1 == 0) {
+ D_80862B04 = Player_UpdateUpperBody(this, play);
+ if ((Player_UpperAction_3 == this->upperActionFunc) ||
+ (func_808331FC(play, this, &this->skelAnimeUpper, 4.0f) > 0)) {
Player_SetAction(play, this, Player_Action_2, 1);
}
} else {
@@ -14209,13 +14468,13 @@ void Player_Action_19(Player* this, PlayState* play) {
temp_v0 = func_808331FC(play, this, &this->skelAnime, 4.0f);
if ((temp_v0 != 0) && ((temp_v0 > 0) || PlayerAnimation_Update(play, &this->skelAnime))) {
PlayerAnimationHeader* anim;
- f32 lastFrame;
+ f32 endFrame;
Player_SetAction(play, this, Player_Action_18, 1);
Player_SetModelsForHoldingShield(this);
anim = D_8085BE84[PLAYER_ANIMGROUP_19][this->modelAnimType];
- lastFrame = Animation_GetLastFrame(anim);
- PlayerAnimation_Change(play, &this->skelAnime, anim, 1.0f, lastFrame, lastFrame, ANIMMODE_ONCE, 0.0f);
+ endFrame = Animation_GetLastFrame(anim);
+ PlayerAnimation_Change(play, &this->skelAnime, anim, 1.0f, endFrame, endFrame, ANIMMODE_ONCE, 0.0f);
}
}
}
@@ -14236,7 +14495,7 @@ void Player_Action_21(Player* this, PlayState* play) {
this->stateFlags2 |= PLAYER_STATE2_20 | PLAYER_STATE2_40;
func_808345A8(this);
- if (!(this->stateFlags1 & PLAYER_STATE1_20000000) && (this->unk_AE8 == 0) && (this->unk_B75 != 0)) {
+ if (!(this->stateFlags1 & PLAYER_STATE1_20000000) && (this->actionVar2 == 0) && (this->unk_B75 != 0)) {
s16 temp_v0 = this->unk_B76;
s16 temp_v1 = this->actor.shape.rot.y - temp_v0;
@@ -14255,15 +14514,15 @@ void Player_Action_21(Player* this, PlayState* play) {
}
if (PlayerAnimation_Update(play, &this->skelAnime) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
- if (this->unk_AE8 != 0) {
- this->unk_AE8--;
- if (this->unk_AE8 == 0) {
+ if (this->actionVar2 != 0) {
+ this->actionVar2--;
+ if (this->actionVar2 == 0) {
func_8085B384(this, play);
}
} else if ((this->stateFlags1 & PLAYER_STATE1_20000000) ||
(!(this->cylinder.base.acFlags & AC_HIT) && (this->unk_B75 == 0))) {
if (this->stateFlags1 & PLAYER_STATE1_20000000) {
- this->unk_AE8++;
+ this->actionVar2++;
} else {
Player_SetAction(play, this, Player_Action_22, 0);
this->stateFlags1 |= PLAYER_STATE1_4000000;
@@ -14288,7 +14547,7 @@ void Player_Action_22(Player* this, PlayState* play) {
func_80832F24(this);
if (PlayerAnimation_Update(play, &this->skelAnime) && (this->linearVelocity == 0.0f)) {
if (this->stateFlags1 & PLAYER_STATE1_20000000) {
- this->unk_AE8++;
+ this->actionVar2++;
} else {
Player_SetAction(play, this, Player_Action_23, 0);
this->stateFlags1 |= PLAYER_STATE1_4000000;
@@ -14405,23 +14664,24 @@ void Player_Action_25(Player* this, PlayState* play) {
func_8083CBC4(this, speedTarget, yawTarget, 1.0f, 0.05f, 0.1f, 0xC8);
}
- func_8083216C(this, play);
- if ((((this->stateFlags2 & PLAYER_STATE2_80000) && ((this->unk_AE7 == 2) || (this->unk_AE7 >= 4))) ||
+ Player_UpdateUpperBody(this, play);
+ if ((((this->stateFlags2 & PLAYER_STATE2_80000) && ((this->actionVar1 == 2) || (this->actionVar1 >= 4))) ||
!func_80839770(this, play)) &&
(this->actor.velocity.y < 0.0f)) {
- if (this->unk_AE8 >= 0) {
- if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) || (this->unk_AE8 == 0) || (this->fallDistance > 0)) {
+ if (this->actionVar2 >= 0) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) || (this->actionVar2 == 0) ||
+ (this->fallDistance > 0)) {
if ((sPlayerYDistToFloor > 800.0f) || (this->stateFlags3 & PLAYER_STATE3_10000)) {
func_80840980(this, NA_SE_VO_LI_FALL_S);
this->stateFlags3 &= ~PLAYER_STATE3_10000;
}
PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_normal_landing, 1.0f, 0.0f, 0.0f,
ANIMMODE_ONCE, 8.0f);
- this->unk_AE8 = -1;
+ this->actionVar2 = -1;
}
} else {
- if ((this->unk_AE8 == -1) && (this->fallDistance > 120) && (sPlayerYDistToFloor > 280.0f)) {
- this->unk_AE8 = -2;
+ if ((this->actionVar2 == -1) && (this->fallDistance > 120) && (sPlayerYDistToFloor > 280.0f)) {
+ this->actionVar2 = -2;
func_80840980(this, NA_SE_VO_LI_FALL_L);
}
@@ -14460,10 +14720,10 @@ void Player_Action_25(Player* this, PlayState* play) {
}
} else {
func_80837134(play, this);
- func_8083216C(this, play);
+ Player_UpdateUpperBody(this, play);
}
- func_80838A90(this, play);
+ Player_ActionChange_13(this, play);
}
// sPlayerRollingAnimSfx
@@ -14498,7 +14758,7 @@ void Player_Action_26(Player* this, PlayState* play) {
return;
}
- if (this->unk_AE8 != 0) {
+ if (this->actionVar2 != 0) {
s32 temp_v0;
Math_StepToF(&this->linearVelocity, 0.0f, 2.0f);
@@ -14509,7 +14769,7 @@ void Player_Action_26(Player* this, PlayState* play) {
}
}
} else if (!func_80840A30(play, this, &this->linearVelocity, 6.0f)) {
- if ((this->skelAnime.curFrame < 15.0f) || !func_80848570(this, play)) {
+ if ((this->skelAnime.curFrame < 15.0f) || !Player_ActionChange_7(this, play)) {
f32 speedTarget;
s16 yawTarget;
@@ -14620,16 +14880,16 @@ void Player_Action_30(Player* this, PlayState* play) {
func_8083133C(this);
this->stateFlags1 &= ~PLAYER_STATE1_20000;
Player_AnimationPlayLoop(play, this, D_8085CF60[Player_IsHoldingTwoHandedWeapon(this)]);
- this->unk_AE8 = -1;
+ this->actionVar2 = -1;
}
func_80832F24(this);
- if (!func_8083FE38(this, play) && (this->unk_AE8 != 0)) {
+ if (!func_8083FE38(this, play) && (this->actionVar2 != 0)) {
func_80840F34(this);
- if (this->unk_AE8 < 0) {
+ if (this->actionVar2 < 0) {
if (this->unk_B08 >= 0.1f) {
this->unk_ADD = 0;
- this->unk_AE8 = 1;
+ this->actionVar2 = 1;
} else if (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_B)) {
func_80840E5C(this, play);
}
@@ -14789,7 +15049,7 @@ void Player_Action_33(Player* this, PlayState* play) {
}
func_80834D50(play, this, NULL, speed, NA_SE_VO_LI_AUTO_JUMP);
- this->unk_AE8 = -1;
+ this->actionVar2 = -1;
}
} else {
temp_v0 = func_808331FC(play, this, &this->skelAnime, 4.0f);
@@ -14822,9 +15082,9 @@ void Player_Action_33(Player* this, PlayState* play) {
}
if ((this->skelAnime.animation == &gPlayerAnim_link_normal_100step_up) || (this->skelAnime.curFrame > 5.0f)) {
- if (this->unk_AE8 == 0) {
+ if (this->actionVar2 == 0) {
Player_AnimSfx_PlayFloorJump(this);
- this->unk_AE8 = 1;
+ this->actionVar2 = 1;
}
Math_SmoothStepToF(&this->unk_ABC, 0.0f, 0.1f, 400.0f, 150.0f);
}
@@ -14842,25 +15102,25 @@ void Player_Action_34(Player* this, PlayState* play) {
PlayerAnimation_Update(play, &this->skelAnime);
func_8083249C(this);
- temp_v0 = func_8083216C(this, play);
+ temp_v0 = Player_UpdateUpperBody(this, play);
if (((this->stateFlags1 & PLAYER_STATE1_800) && (this->heldActor != NULL) && (this->getItemId == GI_NONE)) ||
- (temp_v0 == 0)) {
+ !temp_v0) {
this->unk_D58(play, this);
}
}
void Player_Action_35(Player* this, PlayState* play) {
- if (func_80838A90(this, play) == 0) {
+ if (!Player_ActionChange_13(this, play)) {
if ((this->stateFlags3 & PLAYER_STATE3_10) && !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
func_80833AA0(this, play);
this->stateFlags1 |= PLAYER_STATE1_20000000;
- } else if (this->unk_AE8 == 0) {
+ } else if (this->actionVar2 == 0) {
PlayerAnimation_Update(play, &this->skelAnime);
if (DECR(this->doorTimer) == 0) {
this->linearVelocity = 0.1f;
- this->unk_AE8 = 1;
+ this->actionVar2 = 1;
}
- } else if (this->unk_AE7 == 0) {
+ } else if (this->actionVar1 == 0) {
f32 sp6C = 5.0f * D_8085C3E4;
s32 var_t0 = func_808411D4(play, this, &sp6C, -1);
@@ -14887,7 +15147,7 @@ void Player_Action_35(Player* this, PlayState* play) {
}
if (var_t0 < 0x1E) {
- this->unk_AE7 = 1;
+ this->actionVar1 = 1;
this->stateFlags1 |= PLAYER_STATE1_20000000;
this->unk_3A0.x = this->unk_3AC.x;
this->unk_3A0.z = this->unk_3AC.z;
@@ -14904,8 +15164,8 @@ void Player_Action_35(Player* this, PlayState* play) {
this->unk_3A0.z = (Math_CosS(sPlayerConveyorYaw) * 400.0f) + this->actor.world.pos.z;
}
} else {
- if (this->unk_AE8 < 0) {
- this->unk_AE8++;
+ if (this->actionVar2 < 0) {
+ this->actionVar2++;
sp5C = gSaveContext.entranceSpeed;
sp58 = -1;
} else if (this->unk_397 == 4) {
@@ -14971,7 +15231,7 @@ void Player_Action_35(Player* this, PlayState* play) {
Player_TranslateAndRotateY(this, &this->unk_3A0, &D_8085D644, &this->unk_3AC);
this->actor.shape.rot.y += (this->doorDirection != 0) ? 0x4000 : -0x4000;
- this->unk_AE7 = 0;
+ this->actionVar1 = 0;
this->actor.world.rot.y = this->currentYaw = this->actor.shape.rot.y;
}
@@ -14984,8 +15244,8 @@ void Player_Action_35(Player* this, PlayState* play) {
}
temp_v0_8 = func_808411D4(play, this, &sp5C, sp58);
- if ((this->unk_AE8 == 0) || ((temp_v0_8 == 0) && (this->linearVelocity == 0.0f) &&
- (Play_GetCamera(play, CAM_ID_MAIN)->stateFlags & CAM_STATE_4))) {
+ if ((this->actionVar2 == 0) || ((temp_v0_8 == 0) && (this->linearVelocity == 0.0f) &&
+ (Play_GetCamera(play, CAM_ID_MAIN)->stateFlags & CAM_STATE_4))) {
if (this->unk_397 == 4) {
Map_InitRoomData(play, play->roomCtx.curRoom.num);
Minimap_SavePlayerRoomInitInfo(play);
@@ -15004,7 +15264,7 @@ void Player_Action_35(Player* this, PlayState* play) {
if (play->sceneId == SCENE_20SICHITAI) {
play->unk_1887C = 0;
}
- } else if (!func_808391D8(this, play)) {
+ } else if (!Player_ActionChange_4(this, play)) {
func_8083B2E4(this, play);
}
}
@@ -15012,7 +15272,7 @@ void Player_Action_35(Player* this, PlayState* play) {
}
if (this->stateFlags1 & PLAYER_STATE1_800) {
- func_8083216C(this, play);
+ Player_UpdateUpperBody(this, play);
}
}
@@ -15026,17 +15286,17 @@ void Player_Action_36(Player* this, PlayState* play) {
this->stateFlags2 |= PLAYER_STATE2_20;
- if (DECR(this->unk_AE7) == 0) {
+ if (DECR(this->actionVar1) == 0) {
func_80835DF8(play, this, &poly, &bgId);
}
animFinished = PlayerAnimation_Update(play, &this->skelAnime);
- func_8083216C(this, play);
+ Player_UpdateUpperBody(this, play);
if (animFinished) {
- if (this->unk_AE8 == 0) {
+ if (this->actionVar2 == 0) {
if (DECR(this->doorTimer) == 0) {
- this->unk_AE8 = 1;
+ this->actionVar2 = 1;
this->skelAnime.endFrame = this->skelAnime.animLength - 1.0f;
}
} else {
@@ -15095,8 +15355,8 @@ void Player_Action_38(Player* this, PlayState* play) {
if (PlayerAnimation_Update(play, &this->skelAnime)) {
Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_silver_wait);
- this->unk_AE8 = 1;
- } else if (this->unk_AE8 == 0) {
+ this->actionVar2 = 1;
+ } else if (this->actionVar2 == 0) {
if (PlayerAnimation_OnFrame(&this->skelAnime, 27.0f)) {
Actor* interactRangeActor = this->interactRangeActor;
@@ -15131,10 +15391,10 @@ void Player_Action_39(Player* this, PlayState* play) {
void Player_Action_40(Player* this, PlayState* play) {
if (PlayerAnimation_Update(play, &this->skelAnime)) {
Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_normal_nocarry_free_wait);
- this->unk_AE8 = 15;
- } else if (this->unk_AE8 != 0) {
- this->unk_AE8--;
- if (this->unk_AE8 == 0) {
+ this->actionVar2 = 15;
+ } else if (this->actionVar2 != 0) {
+ this->actionVar2--;
+ if (this->actionVar2 == 0) {
func_80836A98(this, &gPlayerAnim_link_normal_nocarry_free_end, play);
this->stateFlags1 &= ~PLAYER_STATE1_800;
Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_DAMAGE_S);
@@ -15188,7 +15448,7 @@ void Player_Action_43(Player* this, PlayState* play) {
if (this->unk_AA5 == PLAYER_UNKAA5_3) {
if (func_800B7118(this) || func_8082ECCC(this)) {
- func_8083216C(this, play);
+ Player_UpdateUpperBody(this, play);
}
}
@@ -15205,10 +15465,10 @@ void Player_Action_43(Player* this, PlayState* play) {
((this->unk_AA5 == PLAYER_UNKAA5_1) &&
CHECK_BTN_ANY(sPlayerControlInput->press.button,
BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_CUP | BTN_R | BTN_B | BTN_A))) ||
- func_808391D8(this, play)))) {
+ Player_ActionChange_4(this, play)))) {
func_80839ED0(this, play);
Audio_PlaySfx(NA_SE_SY_CAMERA_ZOOM_UP);
- } else if ((DECR(this->unk_AE8) == 0) || (this->unk_AA5 != PLAYER_UNKAA5_3)) {
+ } else if ((DECR(this->actionVar2) == 0) || (this->unk_AA5 != PLAYER_UNKAA5_3)) {
if (func_801240DC(this)) {
this->unk_AA6 |= 0x43;
} else {
@@ -15223,7 +15483,7 @@ void Player_Action_44(Player* this, PlayState* play) {
this->stateFlags2 |= PLAYER_STATE2_20;
func_8083249C(this);
- func_8083216C(this, play);
+ Player_UpdateUpperBody(this, play);
if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) {
this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED;
if (!CHECK_FLAG_ALL(this->talkActor->flags, ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY)) {
@@ -15233,12 +15493,12 @@ void Player_Action_44(Player* this, PlayState* play) {
func_800E0238(Play_GetCamera(play, CAM_ID_MAIN));
CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
if (this->stateFlags1 & PLAYER_STATE1_800000) {
- s32 sp44 = this->unk_AE8;
+ s32 sp44 = this->actionVar2;
func_80837BD0(play, this);
- this->unk_AE8 = sp44;
+ this->actionVar2 = sp44;
} else if (!func_80847994(play, this) && !func_80847880(play, this) && !func_808387A0(play, this) &&
- ((this->talkActor != this->interactRangeActor) || !func_8083D23C(this, play))) {
+ ((this->talkActor != this->interactRangeActor) || !Player_ActionChange_2(this, play))) {
if (func_801242B4(this)) {
func_808353DC(play, this);
} else {
@@ -15274,28 +15534,28 @@ void Player_Action_44(Player* this, PlayState* play) {
if (this->lockOnActor != NULL) {
this->currentYaw = func_8083C62C(this, false);
this->actor.shape.rot.y = this->currentYaw;
- if (this->unk_AE7 != 0) {
+ if (this->actionVar1 != 0) {
if (!(this->stateFlags1 & PLAYER_STATE1_800)) {
- if (PlayerAnimation_Update(play, &this->unk_284)) {
- this->unk_AE7--;
- if (this->unk_AE7 != 0) {
- PlayerAnimation_Change(play, &this->unk_284, &gPlayerAnim_link_normal_talk_free, 1.0f, 0.0f,
- Animation_GetLastFrame(&gPlayerAnim_link_normal_talk_free),
+ if (PlayerAnimation_Update(play, &this->skelAnimeUpper)) {
+ this->actionVar1--;
+ if (this->actionVar1 != 0) {
+ PlayerAnimation_Change(play, &this->skelAnimeUpper, &gPlayerAnim_link_normal_talk_free, 1.0f,
+ 0.0f, Animation_GetLastFrame(&gPlayerAnim_link_normal_talk_free),
ANIMMODE_ONCE, -6.0f);
}
}
}
AnimationContext_SetCopyFalse(play, this->skelAnime.limbCount, this->skelAnime.jointTable,
- this->unk_284.jointTable, D_8085B9F0);
+ this->skelAnimeUpper.jointTable, sPlayerUpperBodyLimbCopyMap);
} else if (!(this->stateFlags1 & PLAYER_STATE1_800) &&
(this->skelAnime.animation == &gPlayerAnim_link_normal_talk_free_wait)) {
s32 temp_v0 = this->actor.focus.rot.y - this->actor.shape.rot.y;
if (ABS_ALT(temp_v0) > 0xFA0) {
PlayerAnimation_Change(
- play, &this->unk_284, D_8085BE84[PLAYER_ANIMGROUP_25][this->modelAnimType], 0.4f, 0.0f,
+ play, &this->skelAnimeUpper, D_8085BE84[PLAYER_ANIMGROUP_25][this->modelAnimType], 0.4f, 0.0f,
Animation_GetLastFrame(D_8085BE84[PLAYER_ANIMGROUP_25][this->modelAnimType]), ANIMMODE_ONCE, -6.0f);
- this->unk_AE7 = 2;
+ this->actionVar1 = 2;
}
}
}
@@ -15329,8 +15589,8 @@ void Player_Action_46(Player* this, PlayState* play) {
this->stateFlags2 |= (PLAYER_STATE2_1 | PLAYER_STATE2_40 | PLAYER_STATE2_100);
if (func_8082E67C(play, this, &gPlayerAnim_link_normal_pushing)) {
- this->unk_AE8 = 1;
- } else if ((this->unk_AE8 == 0) && PlayerAnimation_OnFrame(&this->skelAnime, 11.0f)) {
+ this->actionVar2 = 1;
+ } else if ((this->actionVar2 == 0) && PlayerAnimation_OnFrame(&this->skelAnime, 11.0f)) {
Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_PUSH);
}
@@ -15372,8 +15632,8 @@ void Player_Action_47(Player* this, PlayState* play) {
this->stateFlags2 |= (PLAYER_STATE2_1 | PLAYER_STATE2_40 | PLAYER_STATE2_100);
if (func_8082E67C(play, this, anim)) {
- this->unk_AE8 = 1;
- } else if (this->unk_AE8 == 0) {
+ this->actionVar2 = 1;
+ } else if (this->actionVar2 == 0) {
if (PlayerAnimation_OnFrame(&this->skelAnime, 11.0f)) {
Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_PUSH);
}
@@ -15432,9 +15692,9 @@ void Player_Action_48(Player* this, PlayState* play) {
if (PlayerAnimation_Update(play, &this->skelAnime)) {
Player_AnimationPlayLoop(play, this,
- (this->unk_AE7 > 0) ? &gPlayerAnim_link_normal_fall_wait
- : D_8085BE84[PLAYER_ANIMGROUP_39][this->modelAnimType]);
- } else if (this->unk_AE7 == 0) {
+ (this->actionVar1 > 0) ? &gPlayerAnim_link_normal_fall_wait
+ : D_8085BE84[PLAYER_ANIMGROUP_39][this->modelAnimType]);
+ } else if (this->actionVar1 == 0) {
f32 frame;
if (this->skelAnime.animation == &gPlayerAnim_link_normal_fall) {
@@ -15446,25 +15706,25 @@ void Player_Action_48(Player* this, PlayState* play) {
if (PlayerAnimation_OnFrame(&this->skelAnime, frame)) {
Player_AnimSfx_PlayFloor(this, NA_SE_PL_WALK_GROUND);
if (this->skelAnime.animation == &gPlayerAnim_link_normal_fall) {
- this->unk_AE7 = 1;
+ this->actionVar1 = 1;
} else {
- this->unk_AE7 = -1;
+ this->actionVar1 = -1;
}
}
}
Math_ScaledStepToS(&this->actor.shape.rot.y, this->currentYaw, 0x800);
- if (this->unk_AE7 != 0) {
+ if (this->actionVar1 != 0) {
Player_GetMovementSpeedAndYaw(this, &speedTarget, &yawTarget, SPEED_MODE_LINEAR, play);
if (this->unk_ADF[this->unk_ADE] >= 0) {
func_808381A0(this,
- (this->unk_AE7 > 0) ? D_8085BE84[PLAYER_ANIMGROUP_37][this->modelAnimType]
- : D_8085BE84[PLAYER_ANIMGROUP_40][this->modelAnimType],
+ (this->actionVar1 > 0) ? D_8085BE84[PLAYER_ANIMGROUP_37][this->modelAnimType]
+ : D_8085BE84[PLAYER_ANIMGROUP_40][this->modelAnimType],
play);
} else if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A) || (this->actor.shape.feetFloorFlags != 0)) {
func_80833A64(this);
- if (this->unk_AE7 < 0) {
+ if (this->actionVar1 < 0) {
this->linearVelocity = -0.8f;
} else {
this->linearVelocity = 0.8f;
@@ -15512,7 +15772,7 @@ void Player_Action_50(Player* this, PlayState* play) {
this->stateFlags2 |= PLAYER_STATE2_40;
- if ((this->unk_AE7 != 0) && (ABS_ALT(yStick) < ABS_ALT(xStick))) {
+ if ((this->actionVar1 != 0) && (ABS_ALT(yStick) < ABS_ALT(xStick))) {
var_fv0 = ABS_ALT(xStick) * 0.0325f;
yStick = 0;
} else {
@@ -15534,7 +15794,7 @@ void Player_Action_50(Player* this, PlayState* play) {
this->skelAnime.playSpeed = var_fv1 * var_fv0;
- if (this->unk_AE8 >= 0) {
+ if (this->actionVar2 >= 0) {
if ((this->actor.wallPoly != NULL) && (this->actor.wallBgId != BGCHECK_SCENE)) {
dyna = DynaPoly_GetActor(&play->colCtx, this->actor.wallBgId);
@@ -15551,14 +15811,14 @@ void Player_Action_50(Player* this, PlayState* play) {
func_80831944(play, this);
- if ((this->unk_AE8 < 0) || !func_8083E354(this, play)) {
+ if ((this->actionVar2 < 0) || !func_8083E354(this, play)) {
if (PlayerAnimation_Update(play, &this->skelAnime)) {
- if (this->unk_AE8 < 0) {
- this->unk_AE8 = ABS_ALT(this->unk_AE8) & 1;
+ if (this->actionVar2 < 0) {
+ this->actionVar2 = ABS_ALT(this->actionVar2) & 1;
} else if (yStick != 0) {
f32 yIntersect;
- sp78 = this->unk_AE7 + this->unk_AE8;
+ sp78 = this->actionVar1 + this->actionVar2;
if (yStick > 0) {
sp6C.x = 0.0f;
@@ -15568,7 +15828,7 @@ void Player_Action_50(Player* this, PlayState* play) {
yIntersect = func_80835D2C(play, this, &sp6C, &sp60);
if (this->actor.world.pos.y < yIntersect) {
- if (this->unk_AE7 != 0) {
+ if (this->actionVar1 != 0) {
this->actor.world.pos.y = yIntersect;
this->stateFlags1 &= ~PLAYER_STATE1_200000;
func_80837CEC(play, this, this->actor.wallPoly, this->ageProperties->unk_3C,
@@ -15578,22 +15838,22 @@ void Player_Action_50(Player* this, PlayState* play) {
func_808381A0(this, &gPlayerAnim_link_normal_jump_climb_up_free, play);
this->stateFlags1 |= PLAYER_STATE1_4000;
} else {
- func_8083DCC4(this, this->ageProperties->unk_D4[this->unk_AE8], play);
+ func_8083DCC4(this, this->ageProperties->unk_D4[this->actionVar2], play);
}
} else {
this->skelAnime.prevTransl = this->ageProperties->unk_4A[sp78];
Player_AnimationPlayOnce(play, this, this->ageProperties->unk_B4[sp78]);
}
} else if ((this->actor.world.pos.y - this->actor.floorHeight) < 15.0f) {
- if (this->unk_AE7 != 0) {
+ if (this->actionVar1 != 0) {
func_8083E2F4(this, play);
} else {
- if (this->unk_AE8 != 0) {
+ if (this->actionVar2 != 0) {
this->skelAnime.prevTransl = this->ageProperties->unk_44;
}
- func_8083DCC4(this, this->ageProperties->unk_CC[this->unk_AE8], play);
- this->unk_AE8 = 1;
+ func_8083DCC4(this, this->ageProperties->unk_CC[this->actionVar2], play);
+ this->actionVar2 = 1;
}
} else {
sp78 ^= 1;
@@ -15603,15 +15863,15 @@ void Player_Action_50(Player* this, PlayState* play) {
0.0f);
}
- this->unk_AE8 ^= 1;
- } else if ((this->unk_AE7 != 0) && (xStick != 0)) {
- anim2 = this->ageProperties->unk_C4[this->unk_AE8];
+ this->actionVar2 ^= 1;
+ } else if ((this->actionVar1 != 0) && (xStick != 0)) {
+ anim2 = this->ageProperties->unk_C4[this->actionVar2];
if (xStick > 0) {
- this->skelAnime.prevTransl = this->ageProperties->unk_7A[this->unk_AE8];
+ this->skelAnime.prevTransl = this->ageProperties->unk_7A[this->actionVar2];
Player_AnimationPlayOnce(play, this, anim2);
} else {
- this->skelAnime.prevTransl = this->ageProperties->unk_7A[this->unk_AE8 + 2];
+ this->skelAnime.prevTransl = this->ageProperties->unk_7A[this->actionVar2 + 2];
PlayerAnimation_Change(play, &this->skelAnime, anim2, -1.0f, Animation_GetLastFrame(anim2), 0.0f, 2,
0.0f);
}
@@ -15623,10 +15883,10 @@ void Player_Action_50(Player* this, PlayState* play) {
}
}
- if (this->unk_AE8 < 0) {
- if (((this->unk_AE8 == -2) &&
+ if (this->actionVar2 < 0) {
+ if (((this->actionVar2 == -2) &&
(PlayerAnimation_OnFrame(&this->skelAnime, 14.0f) || PlayerAnimation_OnFrame(&this->skelAnime, 29.0f))) ||
- ((this->unk_AE8 == -4) &&
+ ((this->actionVar2 == -4) &&
(PlayerAnimation_OnFrame(&this->skelAnime, 22.0f) || PlayerAnimation_OnFrame(&this->skelAnime, 35.0f) ||
PlayerAnimation_OnFrame(&this->skelAnime, 49.0f) || PlayerAnimation_OnFrame(&this->skelAnime, 55.0f)))) {
func_80847A50(this);
@@ -15659,7 +15919,7 @@ void Player_Action_51(Player* this, PlayState* play) {
} else {
f32* var_v1 = D_8085D66C;
- if (this->unk_AE8 != 0) {
+ if (this->actionVar2 != 0) {
Player_PlayAnimSfx(this, D_8085D67C);
var_v1 = D_8085D674;
}
@@ -15756,10 +16016,10 @@ void Player_Action_52(Player* this, PlayState* play) {
this->stateFlags2 |= PLAYER_STATE2_40;
func_80847E2C(this, 1.0f, 10.0f);
- if (this->unk_AE8 == 0) {
+ if (this->actionVar2 == 0) {
if (PlayerAnimation_Update(play, &this->skelAnime)) {
this->skelAnime.animation = &gPlayerAnim_link_uma_wait_1;
- this->unk_AE8 = 0x63;
+ this->actionVar2 = 0x63;
} else {
s32 var_v0 = (this->mountSide < 0) ? 0 : 1;
@@ -15779,8 +16039,8 @@ void Player_Action_52(Player* this, PlayState* play) {
this->skelAnime.prevTransl = D_8085D6E0;
- if ((this->unk_AE8 < 0) || ((rideActor->animIndex != (this->unk_AE8 & 0xFFFF)) &&
- ((rideActor->animIndex >= ENHORSE_ANIM_STOPPING) || (this->unk_AE8 >= 2)))) {
+ if ((this->actionVar2 < 0) || ((rideActor->animIndex != (this->actionVar2 & 0xFFFF)) &&
+ ((rideActor->animIndex >= ENHORSE_ANIM_STOPPING) || (this->actionVar2 >= 2)))) {
s32 animIndex = rideActor->animIndex;
if (animIndex < ENHORSE_ANIM_STOPPING) {
@@ -15797,24 +16057,24 @@ void Player_Action_52(Player* this, PlayState* play) {
Player_AnimationPlayOnce(play, this, D_8085D6D0[index]);
} else {
this->skelAnime.animation = D_8085D688[animIndex - 2];
- if (this->unk_AE8 >= 0) {
+ if (this->actionVar2 >= 0) {
Animation_SetMorph(play, &this->skelAnime, 8.0f);
}
if (animIndex < ENHORSE_ANIM_WALK) {
func_808309CC(play, this);
- this->unk_AE7 = 0;
+ this->actionVar1 = 0;
}
}
- this->unk_AE8 = animIndex;
+ this->actionVar2 = animIndex;
}
- if (this->unk_AE8 == 1) {
+ if (this->actionVar2 == 1) {
if (D_80862B04 || func_8082DAFC(play)) {
Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_uma_wait_3);
} else if (PlayerAnimation_Update(play, &this->skelAnime)) {
- this->unk_AE8 = 0x63;
+ this->actionVar2 = 0x63;
} else if (this->skelAnime.animation == &gPlayerAnim_link_uma_wait_1) {
Player_PlayAnimSfx(this, D_8085D6E8);
}
@@ -15828,11 +16088,11 @@ void Player_Action_52(Player* this, PlayState* play) {
if ((play->csCtx.state != CS_STATE_IDLE) || (this->csMode != PLAYER_CSMODE_NONE)) {
this->unk_AA5 = PLAYER_UNKAA5_0;
- this->unk_AE7 = 0;
- } else if ((this->unk_AE8 < 2) || (this->unk_AE8 >= 4)) {
- D_80862B04 = func_8083216C(this, play);
+ this->actionVar1 = 0;
+ } else if ((this->actionVar2 < 2) || (this->actionVar2 >= 4)) {
+ D_80862B04 = Player_UpdateUpperBody(this, play);
if (D_80862B04) {
- this->unk_AE7 = 0;
+ this->actionVar1 = 0;
}
}
@@ -15843,28 +16103,28 @@ void Player_Action_52(Player* this, PlayState* play) {
this->currentYaw = this->actor.shape.rot.y = rideActor->actor.shape.rot.y;
if (!D_80862B04) {
- if (this->unk_AE7 != 0) {
- if (PlayerAnimation_Update(play, &this->unk_284)) {
+ if (this->actionVar1 != 0) {
+ if (PlayerAnimation_Update(play, &this->skelAnimeUpper)) {
rideActor->stateFlags &= ~ENHORSE_FLAG_8;
- this->unk_AE7 = 0;
+ this->actionVar1 = 0;
}
- if (this->unk_284.animation == &gPlayerAnim_link_uma_stop_muti) {
- if (PlayerAnimation_OnFrame(&this->unk_284, 23.0f)) {
+ if (this->skelAnimeUpper.animation == &gPlayerAnim_link_uma_stop_muti) {
+ if (PlayerAnimation_OnFrame(&this->skelAnimeUpper, 23.0f)) {
Player_PlaySfx(this, NA_SE_IT_LASH);
Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_LASH);
}
AnimationContext_SetCopyAll(play, this->skelAnime.limbCount, this->skelAnime.jointTable,
- this->unk_284.jointTable);
+ this->skelAnimeUpper.jointTable);
} else {
- if (PlayerAnimation_OnFrame(&this->unk_284, 10.0f)) {
+ if (PlayerAnimation_OnFrame(&this->skelAnimeUpper, 10.0f)) {
Player_PlaySfx(this, NA_SE_IT_LASH);
Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_LASH);
}
AnimationContext_SetCopyTrue(play, this->skelAnime.limbCount, this->skelAnime.jointTable,
- this->unk_284.jointTable, D_8085B9F0);
+ this->skelAnimeUpper.jointTable, sPlayerUpperBodyLimbCopyMap);
}
} else if (!CHECK_FLAG_ALL(this->actor.flags, 0x100)) {
PlayerAnimationHeader* anim = NULL;
@@ -15872,14 +16132,14 @@ void Player_Action_52(Player* this, PlayState* play) {
if (EN_HORSE_CHECK_3(rideActor)) {
anim = &gPlayerAnim_link_uma_stop_muti;
} else if (EN_HORSE_CHECK_2(rideActor)) {
- if ((this->unk_AE8 >= 2) && (this->unk_AE8 != 0x63)) {
- anim = D_8085D6A4[this->unk_AE8];
+ if ((this->actionVar2 >= 2) && (this->actionVar2 != 0x63)) {
+ anim = D_8085D6A4[this->actionVar2];
}
}
if (anim != NULL) {
- PlayerAnimation_PlayOnce(play, &this->unk_284, anim);
- this->unk_AE7 = 1;
+ PlayerAnimation_PlayOnce(play, &this->skelAnimeUpper, anim);
+ this->actionVar1 = 1;
}
}
}
@@ -15892,8 +16152,8 @@ void Player_Action_52(Player* this, PlayState* play) {
func_8084FD7C(play, this, &rideActor->actor);
}
} else if ((this->csMode != PLAYER_CSMODE_NONE) ||
- (!func_8082DAFC(play) && ((rideActor->actor.speed != 0.0f) || !func_808391D8(this, play)) &&
- !func_80847BF0(this, play) && !func_80838A90(this, play))) {
+ (!func_8082DAFC(play) && ((rideActor->actor.speed != 0.0f) || !Player_ActionChange_4(this, play)) &&
+ !func_80847BF0(this, play) && !Player_ActionChange_13(this, play))) {
if (this->lockOnActor != NULL) {
if (func_800B7128(this)) {
this->upperLimbRot.y = func_8083C62C(this, true) - this->actor.shape.rot.y;
@@ -15968,7 +16228,7 @@ s32 func_80850734(PlayState* play, Player* this) {
this->stateFlags2 |= PLAYER_STATE2_400;
PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_pz_waterroll, 2.0f / 3.0f, 4.0f,
Animation_GetLastFrame(&gPlayerAnim_pz_waterroll), ANIMMODE_ONCE, -6.0f);
- this->unk_AE8 = 5;
+ this->actionVar2 = 5;
this->unk_B86[0] = 0;
this->unk_B48 = this->linearVelocity;
this->actor.velocity.y = 0.0f;
@@ -15996,18 +16256,18 @@ void Player_Action_54(Player* this, PlayState* play) {
func_8082E67C(play, this, &gPlayerAnim_link_swimer_swim_wait);
func_808475B4(this);
- if (this->unk_AE8 != 0) {
- this->unk_AE8--;
+ if (this->actionVar2 != 0) {
+ this->actionVar2--;
}
func_8082F164(this, BTN_R);
if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) {
- this->unk_AE8 = 0;
+ this->actionVar2 = 0;
}
- if (!func_8082DAFC(play) && !func_80833058(play, this, D_8085D048, 1) &&
- !func_8083B3B4(play, this, sPlayerControlInput) && ((this->unk_AE8 != 0) || !func_80850734(play, this))) {
+ if (!func_8082DAFC(play) && !Player_TryActionChangeList(play, this, sPlayerActionChangeList11, true) &&
+ !func_8083B3B4(play, this, sPlayerControlInput) && ((this->actionVar2 != 0) || !func_80850734(play, this))) {
speedTarget = 0.0f;
yawTarget = this->actor.shape.rot.y;
@@ -16043,12 +16303,12 @@ void Player_Action_54(Player* this, PlayState* play) {
}
void Player_Action_55(Player* this, PlayState* play) {
- if (!func_80838A90(this, play)) {
+ if (!Player_ActionChange_13(this, play)) {
this->stateFlags2 |= PLAYER_STATE2_20;
func_808477D0(play, this, NULL, this->linearVelocity);
func_808475B4(this);
- if (DECR(this->unk_AE8) == 0) {
+ if (DECR(this->actionVar2) == 0) {
func_808353DC(play, this);
}
}
@@ -16089,7 +16349,7 @@ void Player_Action_56(Player* this, PlayState* play) {
func_808475B4(this);
func_8082F164(this, BTN_R);
- if (func_80833058(play, this, D_8085D048, false)) {
+ if (Player_TryActionChangeList(play, this, sPlayerActionChangeList11, false)) {
return;
}
@@ -16103,13 +16363,13 @@ void Player_Action_56(Player* this, PlayState* play) {
speedTarget = 0.0f;
- if (this->unk_AE8 != 0) {
+ if (this->actionVar2 != 0) {
if ((!func_8082DA90(play) && !CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A)) ||
(this->currentBoots != PLAYER_BOOTS_ZORA_LAND)) {
this->unk_B86[0] = 1;
}
- if (PlayerAnimation_Update(play, &this->skelAnime) && (DECR(this->unk_AE8) == 0)) {
+ if (PlayerAnimation_Update(play, &this->skelAnime) && (DECR(this->actionVar2) == 0)) {
if (this->unk_B86[0] != 0) {
this->stateFlags3 &= ~PLAYER_STATE3_8000;
func_8082DB90(play, this, &gPlayerAnim_pz_swimtowait);
@@ -16216,8 +16476,8 @@ void Player_Action_57(Player* this, PlayState* play) {
this->stateFlags2 |= PLAYER_STATE2_20;
func_808475B4(this);
func_8082F164(this, BTN_R);
- if (!func_80833058(play, this, D_8085D048, 1) && !func_8083B3B4(play, this, sPlayerControlInput) &&
- !func_80850854(play, this)) {
+ if (!Player_TryActionChangeList(play, this, sPlayerActionChangeList11, true) &&
+ !func_8083B3B4(play, this, sPlayerControlInput) && !func_80850854(play, this)) {
func_808477D0(play, this, sPlayerControlInput, this->linearVelocity);
if (func_8082DA90(play)) {
speedTarget = this->linearVelocity;
@@ -16248,7 +16508,8 @@ void Player_Action_58(Player* this, PlayState* play) {
func_808475B4(this);
func_8082F164(this, BTN_R);
- if (!func_80833058(play, this, D_8085D048, 1) && !func_8083B3B4(play, this, sPlayerControlInput)) {
+ if (!Player_TryActionChangeList(play, this, sPlayerActionChangeList11, true) &&
+ !func_8083B3B4(play, this, sPlayerControlInput)) {
Player_GetMovementSpeedAndYaw(this, &speedTarget, &yawTarget, SPEED_MODE_LINEAR, play);
if (speedTarget == 0.0f) {
@@ -16267,19 +16528,19 @@ void Player_Action_59(Player* this, PlayState* play) {
this->stateFlags2 |= PLAYER_STATE2_20;
this->actor.gravity = 0.0f;
- func_8083216C(this, play);
+ Player_UpdateUpperBody(this, play);
func_8082F164(this, BTN_R);
- if (func_80838A90(this, play)) {
+ if (Player_ActionChange_13(this, play)) {
return;
}
if (this->currentBoots >= PLAYER_BOOTS_ZORA_UNDERWATER) {
func_808353DC(play, this);
- } else if (this->unk_AE7 == 0) {
+ } else if (this->actionVar1 == 0) {
f32 temp_fv0;
- if (this->unk_AE8 == 0) {
+ if (this->actionVar2 == 0) {
if (PlayerAnimation_Update(play, &this->skelAnime) ||
((this->skelAnime.curFrame >= 22.0f) && !CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A))) {
func_8083B798(play, this);
@@ -16291,11 +16552,11 @@ void Player_Action_59(Player* this, PlayState* play) {
func_808477D0(play, this, sPlayerControlInput, this->actor.velocity.y);
this->unk_AAA = 0x3E80;
- if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A) && !func_8083D23C(this, play) &&
+ if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A) && !Player_ActionChange_2(this, play) &&
!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.depthInWater < 120.0f)) {
func_808481CC(play, this, -2.0f);
} else {
- this->unk_AE7++;
+ this->actionVar1++;
func_8082E634(play, this, &gPlayerAnim_link_swimer_swim_wait);
}
}
@@ -16304,16 +16565,16 @@ void Player_Action_59(Player* this, PlayState* play) {
if (temp_fv0 < this->actor.velocity.y) {
this->actor.velocity.y = temp_fv0;
}
- } else if (this->unk_AE7 == 1) {
+ } else if (this->actionVar1 == 1) {
PlayerAnimation_Update(play, &this->skelAnime);
func_808475B4(this);
if (this->unk_AAA < 0x2710) {
- this->unk_AE7++;
- this->unk_AE8 = this->actor.depthInWater;
+ this->actionVar1++;
+ this->actionVar2 = this->actor.depthInWater;
func_8082E634(play, this, &gPlayerAnim_link_swimer_swim);
}
} else if (!func_8083B3B4(play, this, sPlayerControlInput)) {
- f32 var_fv1 = (this->unk_AE8 * 0.018f) + 4.0f;
+ f32 var_fv1 = (this->actionVar2 * 0.018f) + 4.0f;
if (this->stateFlags1 & PLAYER_STATE1_800) {
sPlayerControlInput = NULL;
@@ -16370,10 +16631,12 @@ void Player_Action_62(Player* this, PlayState* play) {
s32 func_80851C40(PlayState* play, Player* this) {
return ((play->sceneId == SCENE_MILK_BAR) && Audio_IsSequencePlaying(NA_BGM_BALLAD_OF_THE_WIND_FISH)) ||
(((play->sceneId != SCENE_MILK_BAR) && (this->csMode == PLAYER_CSMODE_68)) ||
- ((play->msgCtx.msgMode == 0x12) || (play->msgCtx.msgMode == 0x13) || (play->msgCtx.msgMode == 0x14) ||
- ((play->msgCtx.ocarinaMode != 1) &&
- ((this->csMode == PLAYER_CSMODE_5) || (play->msgCtx.ocarinaMode == 3) ||
- play->msgCtx.ocarinaAction == 0x32))));
+ ((play->msgCtx.msgMode == MSGMODE_SONG_PLAYED) ||
+ (play->msgCtx.msgMode == MSGMODE_SETUP_DISPLAY_SONG_PLAYED) ||
+ (play->msgCtx.msgMode == MSGMODE_DISPLAY_SONG_PLAYED) ||
+ ((play->msgCtx.ocarinaMode != OCARINA_MODE_ACTIVE) &&
+ ((this->csMode == PLAYER_CSMODE_5) || (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) ||
+ play->msgCtx.ocarinaAction == OCARINA_ACTION_FREE_PLAY_DONE))));
}
// Deku playing the pipes? The loops both overwrite unk_AF0[0].y,z and unk_AF0[1].x,y,z
@@ -16393,9 +16656,9 @@ void func_80851D30(PlayState* play, Player* this) {
*var_s0 = sp50.x;
var_s0++;
}
- } else if (play->msgCtx.ocarinaMode == 1) {
- if (play->msgCtx.unk12048 != 0xFF) {
- var_s0[play->msgCtx.unk12048] = 1.2f;
+ } else if (play->msgCtx.ocarinaMode == OCARINA_MODE_ACTIVE) {
+ if (play->msgCtx.ocarinaButtonIndex != OCARINA_BTN_INVALID) {
+ var_s0[play->msgCtx.ocarinaButtonIndex] = 1.2f;
func_8082DB90(play, this, D_8085D190[this->transformation]);
} else {
s32 i;
@@ -16419,11 +16682,11 @@ struct_8085D714 D_8085D714[] = {
};
void func_80851EC8(PlayState* play, Player* this) {
- struct_8085D714* temp3 = &D_8085D714[play->msgCtx.unk12048];
- f32* temp2 = &this->unk_B10[play->msgCtx.unk12048];
+ struct_8085D714* temp3 = &D_8085D714[play->msgCtx.ocarinaButtonIndex];
+ f32* temp2 = &this->unk_B10[play->msgCtx.ocarinaButtonIndex];
s16* temp_a3 = &this->unk_B86[temp3->unk_0];
- temp_a3[0] = play->msgCtx.unk12048;
+ temp_a3[0] = play->msgCtx.ocarinaButtonIndex;
temp2[0] = 3.0f;
}
@@ -16478,8 +16741,8 @@ void func_808521E0(PlayState* play, Player* this) {
}
func_80124618(D_801C0490, this->skelAnime.curFrame, &this->unk_AF0[1]);
- } else if (play->msgCtx.ocarinaMode == 1) {
- if (play->msgCtx.unk12048 != 0xFF) {
+ } else if (play->msgCtx.ocarinaMode == OCARINA_MODE_ACTIVE) {
+ if (play->msgCtx.ocarinaButtonIndex != OCARINA_BTN_INVALID) {
func_80851EC8(play, this);
}
@@ -16500,7 +16763,8 @@ void func_80852290(PlayState* play, Player* this) {
s16 var_a1_3;
s16 sp38;
- if ((play->msgCtx.ocarinaMode == 1) && (play->msgCtx.unk12048 != 0xFF)) {
+ if ((play->msgCtx.ocarinaMode == OCARINA_MODE_ACTIVE) &&
+ (play->msgCtx.ocarinaButtonIndex != OCARINA_BTN_INVALID)) {
if ((this->unk_A90 != NULL) && (this->unk_A94 < 0.0f)) {
this->unk_A90->flags |= ACTOR_FLAG_20000000;
this->unk_A94 = 0.0f;
@@ -16561,7 +16825,7 @@ void func_8085255C(PlayState* play, Player* this) {
}
void func_808525C4(PlayState* play, Player* this) {
- if (this->unk_AE8++ >= 3) {
+ if (this->actionVar2++ >= 3) {
if ((this->transformation == PLAYER_FORM_ZORA) || (this->transformation == PLAYER_FORM_DEKU)) {
func_8082E5A8(play, this, D_8085D190[this->transformation]);
} else if (this->transformation == PLAYER_FORM_GORON) {
@@ -16578,13 +16842,13 @@ void func_808525C4(PlayState* play, Player* this) {
void Player_Action_63(Player* this, PlayState* play) {
if ((this->unk_AA5 != PLAYER_UNKAA5_4) && ((PlayerAnimation_Update(play, &this->skelAnime) &&
(this->skelAnime.animation == D_8085D17C[this->transformation])) ||
- ((this->skelAnime.mode == 0) && (this->unk_AE8 == 0)))) {
+ ((this->skelAnime.mode == 0) && (this->actionVar2 == 0)))) {
func_808525C4(play, this);
if (!(this->actor.flags & ACTOR_FLAG_20000000) || (this->unk_A90->id == ACTOR_EN_ZOT)) {
- func_80152434(play, 1);
+ Message_DisplayOcarinaStaff(play, OCARINA_ACTION_FREE_PLAY);
}
- } else if (this->unk_AE8 != 0) {
- if (play->msgCtx.ocarinaMode == 4) {
+ } else if (this->actionVar2 != 0) {
+ if (play->msgCtx.ocarinaMode == OCARINA_MODE_END) {
play->interfaceCtx.unk_222 = 0;
CutsceneManager_Stop(play->playerCsIds[PLAYER_CS_ID_ITEM_OCARINA]);
this->actor.flags &= ~ACTOR_FLAG_20000000;
@@ -16595,17 +16859,20 @@ void Player_Action_63(Player* this, PlayState* play) {
this->talkActor = this->tatlActor;
this->tatlActor->textId = -this->tatlTextId;
Player_TalkWithPlayer(play, this->talkActor);
- } else if (!func_80838A90(this, play)) {
+ } else if (!Player_ActionChange_13(this, play)) {
func_80836A5C(this, play);
Player_AnimationPlayOnceReverse(play, this, D_8085D17C[this->transformation]);
}
} else {
- s32 var_v1 = (play->msgCtx.ocarinaMode >= 0x1C) && (play->msgCtx.ocarinaMode < 0x27);
+ s32 var_v1 = (play->msgCtx.ocarinaMode >= OCARINA_MODE_WARP_TO_GREAT_BAY_COAST) &&
+ (play->msgCtx.ocarinaMode <= OCARINA_MODE_WARP_TO_ENTRANCE);
s32 pad[2];
- if (var_v1 || (play->msgCtx.ocarinaMode == 0x16) || (play->msgCtx.ocarinaMode == 0x1A) ||
- (play->msgCtx.ocarinaMode == 0x18) || (play->msgCtx.ocarinaMode == 0x19)) {
- if (play->msgCtx.ocarinaMode == 0x16) {
+ if (var_v1 || (play->msgCtx.ocarinaMode == OCARINA_MODE_APPLY_SOT) ||
+ (play->msgCtx.ocarinaMode == OCARINA_MODE_APPLY_DOUBLE_SOT) ||
+ (play->msgCtx.ocarinaMode == OCARINA_MODE_APPLY_INV_SOT_FAST) ||
+ (play->msgCtx.ocarinaMode == OCARINA_MODE_APPLY_INV_SOT_SLOW)) {
+ if (play->msgCtx.ocarinaMode == OCARINA_MODE_APPLY_SOT) {
if (!func_8082DA90(play)) {
if (gSaveContext.save.saveInfo.playerData.threeDayResetCount == 1) {
play->nextEntrance = ENTRANCE(CUTSCENE, 1);
@@ -16636,7 +16903,8 @@ void Player_Action_63(Player* this, PlayState* play) {
Player_AnimationPlayOnceReverse(play, this, D_8085D17C[this->transformation]);
}
}
- } else if ((play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_ELEGY)) {
+ } else if ((play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) &&
+ (play->msgCtx.lastPlayedSong == OCARINA_SONG_ELEGY)) {
play->interfaceCtx.unk_222 = 0;
CutsceneManager_Stop(play->playerCsIds[PLAYER_CS_ID_ITEM_OCARINA]);
@@ -16699,12 +16967,12 @@ void Player_Action_65(Player* this, PlayState* play) {
func_8083249C(this);
if (PlayerAnimation_Update(play, &this->skelAnime)) {
- if (this->unk_AE8 != 0) {
- if (this->unk_AE8 > 1) {
- this->unk_AE8--;
+ if (this->actionVar2 != 0) {
+ if (this->actionVar2 > 1) {
+ this->actionVar2--;
}
- if (func_808482E0(play, this) && (this->unk_AE8 == 1)) {
+ if (func_808482E0(play, this) && (this->actionVar2 == 1)) {
Player_SetModels(this, Player_ActionToModelGroup(this, this->itemAction));
if ((this->getItemDrawIdPlusOne == GID_REMAINS_ODOLWA + 1) ||
@@ -16762,10 +17030,10 @@ void Player_Action_65(Player* this, PlayState* play) {
ANIM_FLAG_80);
Player_StopCutscene(this);
this->csId = play->playerCsIds[PLAYER_CS_ID_ITEM_GET];
- this->unk_AE8 = 2;
+ this->actionVar2 = 2;
}
}
- } else if (this->unk_AE8 == 0) {
+ } else if (this->actionVar2 == 0) {
if (this->transformation == PLAYER_FORM_HUMAN) {
Player_PlayAnimSfx(this, D_8085D73C);
} else if (this->transformation == PLAYER_FORM_DEKU) {
@@ -16774,8 +17042,8 @@ void Player_Action_65(Player* this, PlayState* play) {
} else {
if ((this->skelAnime.animation == &gPlayerAnim_link_demo_get_itemB) ||
(this->skelAnime.animation == &gPlayerAnim_pn_getB)) {
- Math_ScaledStepToS(&this->actor.shape.rot.y,
- BINANG_ADD(Camera_GetCamDirYaw(play->cameraPtrs[play->activeCamId]), 0x8000), 0xFA0);
+ Math_ScaledStepToS(&this->actor.shape.rot.y, BINANG_ADD(Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)), 0x8000),
+ 0xFA0);
} else if ((this->skelAnime.animation == &gPlayerAnim_pn_getA) &&
PlayerAnimation_OnFrame(&this->skelAnime, 10.0f)) {
Player_AnimSfx_PlayFloorLand(this);
@@ -16794,9 +17062,9 @@ AnimSfxEntry D_8085D75C[] = {
void Player_Action_66(Player* this, PlayState* play) {
if (PlayerAnimation_Update(play, &this->skelAnime)) {
- if (this->unk_AE7 == 0) {
- if (DECR(this->unk_AE8) == 0) {
- this->unk_AE7 = 1;
+ if (this->actionVar1 == 0) {
+ if (DECR(this->actionVar2) == 0) {
+ this->actionVar1 = 1;
this->skelAnime.endFrame = this->skelAnime.animLength - 1.0f;
}
} else {
@@ -16843,7 +17111,7 @@ void Player_Action_67(Player* this, PlayState* play) {
func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_ITEM_BOTTLE]);
if (PlayerAnimation_Update(play, &this->skelAnime)) {
- if (this->unk_AE8 == 0) {
+ if (this->actionVar2 == 0) {
if (this->itemAction == PLAYER_IA_BOTTLE_POE) {
s32 health = Rand_S16Offset(-1, 3);
@@ -16882,31 +17150,31 @@ void Player_Action_67(Player* this, PlayState* play) {
func_8082DB60(play, this,
(this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_drink
: &gPlayerAnim_link_bottle_drink_demo_wait);
- this->unk_AE8 = 1;
+ this->actionVar2 = 1;
//! FAKE
dummy_label_235515:;
- } else if (this->unk_AE8 < 0) {
- this->unk_AE8++;
- if (this->unk_AE8 == 0) {
- this->unk_AE8 = 3;
+ } else if (this->actionVar2 < 0) {
+ this->actionVar2++;
+ if (this->actionVar2 == 0) {
+ this->actionVar2 = 3;
this->skelAnime.endFrame = this->skelAnime.animLength - 1.0f;
- } else if (this->unk_AE8 == -6) {
+ } else if (this->actionVar2 == -6) {
func_808530E0(play, this);
}
} else {
Player_StopCutscene(this);
func_80839E74(this, play);
}
- } else if (this->unk_AE8 == 1) {
+ } else if (this->actionVar2 == 1) {
if ((gSaveContext.healthAccumulator == 0) && (gSaveContext.magicState != MAGIC_STATE_FILL)) {
if (this->transformation == PLAYER_FORM_DEKU) {
PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_pn_drinkend, 2.0f / 3.0f, 0.0f, 5.0f, 2,
-6.0f);
- this->unk_AE8 = -7;
+ this->actionVar2 = -7;
} else {
func_8082E4A4(play, this, &gPlayerAnim_link_bottle_drink_demo_end);
- this->unk_AE8 = 2;
+ this->actionVar2 = 2;
}
Player_UpdateBottleHeld(play, this,
@@ -16915,7 +17183,7 @@ void Player_Action_67(Player* this, PlayState* play) {
}
Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_DRINK - SFX_FLAG);
- } else if ((this->unk_AE8 == 2) && PlayerAnimation_OnFrame(&this->skelAnime, 29.0f)) {
+ } else if ((this->actionVar2 == 2) && PlayerAnimation_OnFrame(&this->skelAnime, 29.0f)) {
Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_BREATH_DRINK);
}
}
@@ -16940,23 +17208,23 @@ struct_8085D798 D_8085D798[] = {
};
void Player_Action_68(Player* this, PlayState* play) {
- struct_8085D200* sp24 = &D_8085D200[this->unk_AE8];
+ struct_8085D200* sp24 = &D_8085D200[this->actionVar2];
func_80832F24(this);
if (PlayerAnimation_Update(play, &this->skelAnime)) {
- if (this->unk_AE7 != 0) {
+ if (this->actionVar1 != 0) {
func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_ITEM_SHOW]);
- if (this->unk_AE8 == 0) {
- Message_StartTextbox(play, D_8085D798[this->unk_AE7 - 1].textId, &this->actor);
+ if (this->actionVar2 == 0) {
+ Message_StartTextbox(play, D_8085D798[this->actionVar1 - 1].textId, &this->actor);
Audio_PlayFanfare(NA_BGM_GET_ITEM | 0x900);
- this->unk_AE8 = 1;
+ this->actionVar2 = 1;
} else if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) {
Actor* talkActor;
- this->unk_AE7 = 0;
+ this->actionVar1 = 0;
Player_StopCutscene(this);
func_800E0238(Play_GetCamera(play, CAM_ID_MAIN));
@@ -16969,15 +17237,15 @@ void Player_Action_68(Player* this, PlayState* play) {
func_80839E74(this, play);
}
} else {
- if (this->unk_AE7 == 0) {
+ if (this->actionVar1 == 0) {
s32 temp_ft5 = this->skelAnime.curFrame - sp24->unk_8;
if ((temp_ft5 >= 0) && (sp24->unk_9 >= temp_ft5)) {
- if ((this->unk_AE8 != 0) && (temp_ft5 == 0)) {
+ if ((this->actionVar2 != 0) && (temp_ft5 == 0)) {
Player_PlaySfx(this, NA_SE_IT_SCOOP_UP_WATER);
}
- if (func_8012364C(play, this, this->heldItemButton) == ITEM_BOTTLE) {
+ if (Player_GetItemOnButton(play, this, this->heldItemButton) == ITEM_BOTTLE) {
Actor* interactRangeActor = this->interactRangeActor;
if (interactRangeActor != NULL) {
@@ -16994,8 +17262,8 @@ void Player_Action_68(Player* this, PlayState* play) {
}
if (i < ARRAY_COUNT(D_8085D798)) {
- this->unk_AE7 = i + 1;
- this->unk_AE8 = 0;
+ this->actionVar1 = i + 1;
+ this->actionVar2 = 0;
this->stateFlags1 |= PLAYER_STATE1_10000000 | PLAYER_STATE1_20000000;
interactRangeActor->parent = &this->actor;
Player_UpdateBottleHeld(play, this, entry->itemId, entry->itemAction);
@@ -17089,7 +17357,7 @@ void Player_Action_70(Player* this, PlayState* play) {
if (PlayerAnimation_Update(play, &this->skelAnime)) {
Player_StopCutscene(this);
- if (!func_80838A90(this, play)) {
+ if (!Player_ActionChange_13(this, play)) {
func_80839E74(this, play);
}
} else if (PlayerAnimation_OnFrame(&this->skelAnime, 76.0f)) {
@@ -17133,12 +17401,12 @@ void Player_Action_71(Player* this, PlayState* play) {
this->getItemDrawIdPlusOne = ABS_ALT(giEntry->gid);
}
- if (this->unk_AE8 == 0) {
+ if (this->actionVar2 == 0) {
if ((this->actor.textId != 0) && (this->actor.textId != 0xFFFF)) {
Message_StartTextbox(play, this->actor.textId, &this->actor);
}
- this->unk_AE8 = 1;
+ this->actionVar2 = 1;
} else if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) {
Player_StopCutscene(this);
this->getItemDrawIdPlusOne = GID_NONE + 1;
@@ -17147,7 +17415,7 @@ void Player_Action_71(Player* this, PlayState* play) {
this->unk_B5E = 0xA;
}
}
- } else if (this->unk_AE8 >= 0) {
+ } else if (this->actionVar2 >= 0) {
if ((Player_BottleFromIA(this, this->itemAction) > PLAYER_BOTTLE_NONE) &&
PlayerAnimation_OnFrame(&this->skelAnime, 36.0f)) {
Player_SetModels(this, PLAYER_MODELGROUP_BOTTLE);
@@ -17159,7 +17427,7 @@ void Player_Action_71(Player* this, PlayState* play) {
Player_PlayAnimSfx(this, D_8085D840);
}
- if ((this->unk_AE7 == 0) && (this->lockOnActor != NULL)) {
+ if ((this->actionVar1 == 0) && (this->lockOnActor != NULL)) {
this->currentYaw = func_8083C62C(this, 0);
this->actor.shape.rot.y = this->currentYaw;
}
@@ -17197,11 +17465,11 @@ void Player_Action_73(Player* this, PlayState* play) {
Audio_PlaySfx_AtPosWithSyncedFreqAndVolume(
&this->actor.projectedPos, Player_GetFloorSfx(this, NA_SE_PL_SLIP_LEVEL - SFX_FLAG), this->actor.speed);
- if (func_80838A90(this, play)) {
+ if (Player_ActionChange_13(this, play)) {
return;
}
- if ((this->transformation == PLAYER_FORM_GORON) && func_8083A114(this, play)) {
+ if ((this->transformation == PLAYER_FORM_GORON) && Player_ActionChange_6(this, play)) {
return;
}
@@ -17213,7 +17481,7 @@ void Player_Action_73(Player* this, PlayState* play) {
Actor_GetSlopeDirection(floorPoly, &slopeNormal, &downwardSlopeYaw);
var_v0 = downwardSlopeYaw;
- if (this->unk_AE7 != 0) {
+ if (this->actionVar1 != 0) {
var_v0 = downwardSlopeYaw + 0x8000;
}
if (this->linearVelocity < 0.0f) {
@@ -17233,8 +17501,8 @@ void Player_Action_73(Player* this, PlayState* play) {
if (Math_AsymStepToF(&this->linearVelocity, var_fv0, temp_fv1, var_fa0) && (var_fv0 == 0.0f)) {
func_80836A98(this,
- (this->unk_AE7 == 0) ? D_8085BE84[PLAYER_ANIMGROUP_41][this->modelAnimType]
- : D_8085BE84[PLAYER_ANIMGROUP_42][this->modelAnimType],
+ (this->actionVar1 == 0) ? D_8085BE84[PLAYER_ANIMGROUP_41][this->modelAnimType]
+ : D_8085BE84[PLAYER_ANIMGROUP_42][this->modelAnimType],
play);
}
@@ -17245,7 +17513,7 @@ void Player_Action_73(Player* this, PlayState* play) {
void func_80859CE0(PlayState* play, Player* this, s32 arg2);
void Player_Action_74(Player* this, PlayState* play) {
- if ((DECR(this->unk_AE8) == 0) && func_808387A0(play, this)) {
+ if ((DECR(this->actionVar2) == 0) && func_808387A0(play, this)) {
func_80859CE0(play, this, 0);
Player_SetAction(play, this, Player_Action_97, 0);
Player_Action_97(this, play);
@@ -17254,7 +17522,7 @@ void Player_Action_74(Player* this, PlayState* play) {
void Player_Action_75(Player* this, PlayState* play) {
Player_SetAction(play, this, Player_Action_74, 0);
- this->unk_AE8 = 0x28;
+ this->actionVar2 = 0x28;
Actor_Spawn(&play->actorCtx, play, ACTOR_DEMO_KANKYO, 0.0f, 0.0f, 0.0f, 0, 0, 0, 0x10);
}
@@ -17263,11 +17531,11 @@ void Player_Cutscene_SetPosAndYawToStart(Player* this, CsCmdActorCue* cue);
void Player_Action_76(Player* this, PlayState* play) {
if (sPlayerYDistToFloor < 150.0f) {
if (PlayerAnimation_Update(play, &this->skelAnime)) {
- if (this->unk_AE8 == 0) {
+ if (this->actionVar2 == 0) {
if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
this->skelAnime.endFrame = this->skelAnime.animLength - 1.0f;
Player_AnimSfx_PlayFloorLand(this);
- this->unk_AE8 = 1;
+ this->actionVar2 = 1;
}
} else {
func_8085B384(this, play);
@@ -17300,9 +17568,9 @@ void Player_Action_77(Player* this, PlayState* play) {
}
}
- if ((this->unk_AE8++ >= 9) && !func_8082DA90(play)) {
- if (this->unk_AE7 != 0) {
- if (this->unk_AE7 < 0) {
+ if ((this->actionVar2++ >= 9) && !func_8082DA90(play)) {
+ if (this->actionVar1 != 0) {
+ if (this->actionVar1 < 0) {
func_80169FDC(&play->state);
} else {
func_80169EFC(&play->state);
@@ -17325,7 +17593,7 @@ void Player_Action_77(Player* this, PlayState* play) {
}
void Player_Action_78(Player* this, PlayState* play) {
- func_808365DC(this, play);
+ Player_ActionChange_1(this, play);
}
void Player_Action_79(Player* this, PlayState* play) {
@@ -17343,12 +17611,12 @@ void Player_Action_80(Player* this, PlayState* play) {
if (play->unk_1887C < 0) {
play->unk_1887C = 0;
func_80839ED0(this, play);
- } else if (this->unk_AE7 == 0) {
+ } else if (this->actionVar1 == 0) {
if ((play->sceneId != SCENE_20SICHITAI) && CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B)) {
play->unk_1887C = 10;
func_80847880(play, this);
Player_SetAction(play, this, Player_Action_80, 1);
- this->unk_AE7 = 1;
+ this->actionVar1 = 1;
} else {
play->unk_1887C = 0;
func_80847190(play, this, 0);
@@ -17359,7 +17627,7 @@ void Player_Action_80(Player* this, PlayState* play) {
} else {
this->stateFlags1 &= ~PLAYER_STATE1_100000;
if ((play->sceneId == SCENE_20SICHITAI) &&
- (func_8012364C(play, this, func_8082FDC4()) == ITEM_PICTOGRAPH_BOX)) {
+ (Player_GetItemOnButton(play, this, func_8082FDC4()) == ITEM_PICTOGRAPH_BOX)) {
s32 requiredScopeTemp;
play->actorCtx.flags |= ACTORCTX_FLAG_PICTO_BOX_ON;
@@ -17371,7 +17639,7 @@ void Player_Action_80(Player* this, PlayState* play) {
play->unk_1887C = -1;
Player_Action_81(this, play);
Player_SetAction(play, this, Player_Action_80, 0);
- this->unk_AE7 = 0;
+ this->actionVar1 = 0;
} else {
play->unk_1887C = 10;
Player_Action_81(this, play);
@@ -17382,7 +17650,7 @@ void Player_Action_81(Player* this, PlayState* play) {
this->unk_AA5 = PLAYER_UNKAA5_3;
func_8083868C(play, this);
PlayerAnimation_Update(play, &this->skelAnime);
- func_8083216C(this, play);
+ Player_UpdateUpperBody(this, play);
this->upperLimbRot.y = func_80847190(play, this, 1) - this->actor.shape.rot.y;
this->unk_AA6 |= 0x80;
@@ -17395,13 +17663,13 @@ void Player_Action_81(Player* this, PlayState* play) {
}
void Player_Action_82(Player* this, PlayState* play) {
- if (this->unk_AE7 >= 0) {
- if (this->unk_AE7 < 6) {
- this->unk_AE7++;
+ if (this->actionVar1 >= 0) {
+ if (this->actionVar1 < 6) {
+ this->actionVar1++;
} else {
- this->unk_B48 = (this->unk_AE7 >> 1) * 22.0f;
+ this->unk_B48 = (this->actionVar1 >> 1) * 22.0f;
if (func_8082DE88(this, 1, 0x64)) {
- this->unk_AE7 = -1;
+ this->actionVar1 = -1;
EffectSsIcePiece_SpawnBurst(play, &this->actor.world.pos, this->actor.scale.x);
Player_PlaySfx(this, NA_SE_PL_ICE_BROKEN);
}
@@ -17409,8 +17677,8 @@ void Player_Action_82(Player* this, PlayState* play) {
if (this->transformation == PLAYER_FORM_ZORA) {
func_80834104(play, this);
this->skelAnime.animation = NULL;
- this->unk_AE8 = -0x28;
- this->unk_AE7 = 1;
+ this->actionVar2 = -0x28;
+ this->actionVar1 = 1;
this->linearVelocity = 0.0f;
} else if (play->gameplayFrames % 4 == 0) {
Player_InflictDamage(play, -1);
@@ -17428,8 +17696,8 @@ void Player_Action_83(Player* this, PlayState* play) {
PlayerAnimation_Update(play, &this->skelAnime);
func_808345A8(this);
- if (((this->unk_AE8 % 25) != 0) || (func_808339D4(play, this, -1) != 0)) {
- if (DECR(this->unk_AE8) == 0) {
+ if (((this->actionVar2 % 25) != 0) || (func_808339D4(play, this, -1) != 0)) {
+ if (DECR(this->actionVar2) == 0) {
func_80836988(this, play);
}
}
@@ -17479,9 +17747,9 @@ void Player_Action_84(Player* this, PlayState* play) {
((this->meleeWeaponAnimation >= PLAYER_MWA_FLIPSLASH_FINISH) &&
(this->meleeWeaponAnimation <= PLAYER_MWA_ZORA_JUMPKICK_FINISH) && (this->skelAnime.curFrame > 2.0f) &&
func_808333CC(this))) {
- D_80862B48 = this->unk_AE8;
+ sPlayerUseHeldItem = this->actionVar2;
- if (!func_80848570(this, play)) {
+ if (!Player_ActionChange_7(this, play)) {
PlayerAnimationHeader* anim = func_80123420(this) ? attackInfoEntry->unk_8 : attackInfoEntry->unk_4;
func_8082DC38(this);
@@ -17493,8 +17761,8 @@ void Player_Action_84(Player* this, PlayState* play) {
u8 moveFlags = this->skelAnime.moveFlags;
if (this->transformation == PLAYER_FORM_ZORA) {
- if (func_8083A580(this, play)) {
- anim = this->unk_284.animation;
+ if (Player_ActionChange_8(this, play)) {
+ anim = this->skelAnimeUpper.animation;
}
this->unk_ADC = 0;
} else if ((anim == &gPlayerAnim_link_fighter_Lpower_jump_kiru_end) &&
@@ -17515,7 +17783,7 @@ void Player_Action_84(Player* this, PlayState* play) {
(this->meleeWeaponAnimation != PLAYER_MWA_ZORA_JUMPKICK_FINISH)) ||
((this->transformation == PLAYER_FORM_GORON) &&
(this->meleeWeaponAnimation != PLAYER_MWA_GORON_PUNCH_BUTT))) {
- this->unk_AE8 |= CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B) ? 1 : 0;
+ this->actionVar2 |= CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B) ? 1 : 0;
}
}
@@ -17571,14 +17839,14 @@ void func_80854EFC(PlayState* play, f32 arg1, struct_8085D848_unk_00* arg2) {
u8* new_var;
s32 pad[4];
- new_var = play->envCtx.unk_C4.diffuseColor1;
- sp70.fogNear = play->envCtx.unk_C4.fogNear;
- sp70.fogColor[0] = play->envCtx.unk_C4.fogColor[0];
- sp70.fogColor[1] = play->envCtx.unk_C4.fogColor[1];
- sp70.fogColor[2] = play->envCtx.unk_C4.fogColor[2];
- sp70.ambientColor[0] = play->envCtx.unk_C4.ambientColor[0];
- sp70.ambientColor[1] = play->envCtx.unk_C4.ambientColor[1];
- sp70.ambientColor[2] = play->envCtx.unk_C4.ambientColor[2];
+ new_var = play->envCtx.lightSettings.light1Color;
+ sp70.fogNear = play->envCtx.lightSettings.fogNear;
+ sp70.fogColor[0] = play->envCtx.lightSettings.fogColor[0];
+ sp70.fogColor[1] = play->envCtx.lightSettings.fogColor[1];
+ sp70.fogColor[2] = play->envCtx.lightSettings.fogColor[2];
+ sp70.ambientColor[0] = play->envCtx.lightSettings.ambientColor[0];
+ sp70.ambientColor[1] = play->envCtx.lightSettings.ambientColor[1];
+ sp70.ambientColor[2] = play->envCtx.lightSettings.ambientColor[2];
if (arg1 <= 1.0f) {
arg1 -= 0.0f;
@@ -17609,13 +17877,13 @@ void func_80854EFC(PlayState* play, f32 arg1, struct_8085D848_unk_00* arg2) {
var_t4 = D_8085D844;
}
- play->envCtx.lightSettings.fogNear =
- ((s16)((var_v1->fogNear - var_t0->fogNear) * arg1) + var_t0->fogNear) - play->envCtx.unk_C4.fogNear;
+ play->envCtx.adjLightSettings.fogNear =
+ ((s16)((var_v1->fogNear - var_t0->fogNear) * arg1) + var_t0->fogNear) - play->envCtx.lightSettings.fogNear;
- func_80854CD0(arg1, play->envCtx.lightSettings.fogColor, var_v1->fogColor, var_t0->fogColor,
- play->envCtx.unk_C4.fogColor, play->envCtx.lightSettings.ambientColor, var_v1->ambientColor,
- var_t0->ambientColor, play->envCtx.unk_C4.ambientColor, play->envCtx.lightSettings.diffuseColor1,
- var_t3, var_t4, new_var);
+ func_80854CD0(arg1, play->envCtx.adjLightSettings.fogColor, var_v1->fogColor, var_t0->fogColor,
+ play->envCtx.lightSettings.fogColor, play->envCtx.adjLightSettings.ambientColor, var_v1->ambientColor,
+ var_t0->ambientColor, play->envCtx.lightSettings.ambientColor,
+ play->envCtx.adjLightSettings.light1Color, var_t3, var_t4, new_var);
}
struct_8085D848 D_8085D848[] = {
@@ -17685,19 +17953,19 @@ void func_80855218(PlayState* play, Player* this, struct_8085D910** arg2) {
func_8082DB60(play, this, &gPlayerAnim_cl_setmaskend);
} else if ((this->skelAnime.animation == &gPlayerAnim_cl_setmask) ||
(this->skelAnime.animation == &gPlayerAnim_cl_setmaskend)) {
- if (this->unk_AE7 >= 58) {
- Math_StepToS(&this->unk_AE8, 255, 50);
+ if (this->actionVar1 >= 58) {
+ Math_StepToS(&this->actionVar2, 255, 50);
}
- if (this->unk_AE7 >= 64) {
+ if (this->actionVar1 >= 64) {
Math_StepToF(&this->unk_B10[2], 0.0f, 0.015f);
- } else if (this->unk_AE7 >= 0xE) {
+ } else if (this->actionVar1 >= 0xE) {
Math_StepToF(&this->unk_B10[2], 0.3f, 0.3f);
}
- if (this->unk_AE7 > 65) {
+ if (this->actionVar1 > 65) {
Math_StepToF(&this->unk_B10[3], 0.0f, 0.02f);
- } else if (this->unk_AE7 >= 0x10) {
+ } else if (this->actionVar1 >= 0x10) {
Math_StepToF(&this->unk_B10[3], -0.1f, 0.1f);
}
@@ -17705,13 +17973,13 @@ void func_80855218(PlayState* play, Player* this, struct_8085D910** arg2) {
Player_PlayAnimSfx(this, D_8085D8F0);
}
} else {
- if (this->unk_AE7 >= 20) {
- Math_StepToS(&this->unk_AE8, 255, 20);
+ if (this->actionVar1 >= 20) {
+ Math_StepToS(&this->actionVar2, 255, 20);
}
if (R_PLAY_FILL_SCREEN_ON == 0) {
Player_PlayAnimSfx(this, D_8085D904);
- if (this->unk_AE7 == 15) {
+ if (this->actionVar1 == 15) {
Player_PlaySfx(this, NA_SE_PL_FACE_CHANGE);
}
}
@@ -17736,14 +18004,14 @@ void Player_Action_86(Player* this, PlayState* play) {
func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_MASK_TRANSFORMATION]);
sPlayerControlInput = play->state.input;
- Camera_ChangeMode(play->cameraPtrs[play->activeCamId],
+ Camera_ChangeMode(GET_ACTIVE_CAM(play),
(this->transformation == PLAYER_FORM_HUMAN) ? CAM_MODE_NORMAL : CAM_MODE_JUMP);
this->stateFlags2 |= PLAYER_STATE2_40;
- this->actor.shape.rot.y = Camera_GetCamDirYaw(play->cameraPtrs[play->activeCamId]) + 0x8000;
+ this->actor.shape.rot.y = Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) + 0x8000;
func_80855218(play, this, &sp4C);
- if (this->unk_AE7 == 0x14) {
+ if (this->actionVar1 == 0x14) {
Play_EnableMotionBlurPriority(100);
}
@@ -17753,12 +18021,12 @@ void Player_Action_86(Player* this, PlayState* play) {
R_PLAY_FILL_SCREEN_ALPHA = 255;
this->actor.update = func_8012301C;
this->actor.draw = NULL;
- this->unk_AE7 = 0;
+ this->actionVar1 = 0;
Play_DisableMotionBlurPriority();
SET_WEEKEVENTREG(D_8085D908[GET_PLAYER_FORM]);
}
- } else if ((this->unk_AE7++ > ((this->transformation == PLAYER_FORM_HUMAN) ? 0x53 : 0x37)) ||
- ((this->unk_AE7 >= 5) &&
+ } else if ((this->actionVar1++ > ((this->transformation == PLAYER_FORM_HUMAN) ? 0x53 : 0x37)) ||
+ ((this->actionVar1 >= 5) &&
(sp48 =
((this->transformation != PLAYER_FORM_HUMAN) || CHECK_WEEKEVENTREG(D_8085D908[GET_PLAYER_FORM])) &&
CHECK_BTN_ANY(sPlayerControlInput->press.button,
@@ -17785,11 +18053,11 @@ void Player_Action_86(Player* this, PlayState* play) {
Player_PlaySfx(this, NA_SE_SY_TRANSFORM_MASK_FLASH);
}
- if (this->unk_AE7 >= sp4C->unk_0) {
- if (this->unk_AE7 < sp4C->unk_2) {
+ if (this->actionVar1 >= sp4C->unk_0) {
+ if (this->actionVar1 < sp4C->unk_2) {
Math_StepToF(&this->unk_B10[4], 1.0f, sp4C->unk_1 / 100.0f);
- } else if (this->unk_AE7 < sp4C->unk_3) {
- if (this->unk_AE7 == sp4C->unk_2) {
+ } else if (this->actionVar1 < sp4C->unk_3) {
+ if (this->actionVar1 == sp4C->unk_2) {
Lib_PlaySfx_2(NA_SE_EV_LIGHTNING_HARD);
}
@@ -17799,10 +18067,10 @@ void Player_Action_86(Player* this, PlayState* play) {
}
}
- if (this->unk_AE7 >= 0x10) {
- if (this->unk_AE7 < 0x40) {
+ if (this->actionVar1 >= 0x10) {
+ if (this->actionVar1 < 0x40) {
Math_StepToF(&this->unk_B10[5], 1.0f, 0.2f);
- } else if (this->unk_AE7 < 0x37) {
+ } else if (this->actionVar1 < 0x37) {
Math_StepToF(&this->unk_B10[5], 2.0f, 1.0f);
} else {
Math_StepToF(&this->unk_B10[5], 3.0f, 0.55f);
@@ -17813,8 +18081,7 @@ void Player_Action_86(Player* this, PlayState* play) {
}
void Player_Action_87(Player* this, PlayState* play) {
- Camera_ChangeMode(play->cameraPtrs[play->activeCamId],
- (this->prevMask == PLAYER_MASK_NONE) ? CAM_MODE_NORMAL : CAM_MODE_JUMP);
+ Camera_ChangeMode(GET_ACTIVE_CAM(play), (this->prevMask == PLAYER_MASK_NONE) ? CAM_MODE_NORMAL : CAM_MODE_JUMP);
if (R_PLAY_FILL_SCREEN_ON != 0) {
R_PLAY_FILL_SCREEN_ALPHA -= R_PLAY_FILL_SCREEN_ON;
@@ -17824,8 +18091,8 @@ void Player_Action_87(Player* this, PlayState* play) {
}
}
- if (this->unk_AE7++ < 4) {
- if ((this->prevMask == PLAYER_MASK_NONE) && (this->unk_AE7 == 4)) {
+ if (this->actionVar1++ < 4) {
+ if ((this->prevMask == PLAYER_MASK_NONE) && (this->actionVar1 == 4)) {
PlayerAnimation_Change(play, &this->skelAnime, func_8082ED20(this), 1.0f, 0.0f, 20.0f, ANIMMODE_ONCE,
20.0f);
}
@@ -17835,13 +18102,13 @@ void Player_Action_87(Player* this, PlayState* play) {
s16 angle;
Lib_GetControlStickData(&dist, &angle, play->state.input);
- if (PlayerAnimation_Update(play, &this->skelAnime) || ((this->unk_AE7 > 10) && (dist != 0.0f))) {
+ if (PlayerAnimation_Update(play, &this->skelAnime) || ((this->actionVar1 > 10) && (dist != 0.0f))) {
if (R_PLAY_FILL_SCREEN_ON == 0) {
this->stateFlags1 &= ~PLAYER_STATE1_2;
this->prevMask = this->currentMask;
this->csId = play->playerCsIds[PLAYER_CS_ID_MASK_TRANSFORMATION];
Player_StopCutscene(this);
- play->envCtx.lightSettings = D_80862B50;
+ play->envCtx.adjLightSettings = D_80862B50;
func_8085B384(this, play);
return;
}
@@ -17854,10 +18121,10 @@ void Player_Action_87(Player* this, PlayState* play) {
}
void Player_Action_88(Player* this, PlayState* play) {
- if (this->unk_AE8++ > 90) {
- play->msgCtx.ocarinaMode = 4;
+ if (this->actionVar2++ > 90) {
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
func_8085B384(this, play);
- } else if (this->unk_AE8 == 10) {
+ } else if (this->actionVar2 == 10) {
func_80848640(play, this);
}
}
@@ -17867,7 +18134,7 @@ void Player_Action_89(Player* this, PlayState* play) {
this->stateFlags2 |= PLAYER_STATE2_40;
func_80855218(play, this, NULL);
- this->unk_AE7++;
+ this->actionVar1++;
if (!(this->stateFlags1 & PLAYER_STATE1_100)) {
this->prevMask = this->currentMask;
@@ -17909,10 +18176,10 @@ void Player_Action_91(Player* this, PlayState* play) {
var_a0 = 0;
if ((this->actor.floorHeight - this->actor.world.pos.y) < 60.0f) {
Math_StepToF(&this->unk_B10[5], 200.0f, 150.0f);
- var_a0 = Math_StepToS(&this->unk_AE8, 0xFA0, 0x15E);
+ var_a0 = Math_StepToS(&this->actionVar2, 0xFA0, 0x15E);
}
- this->actor.shape.rot.y += this->unk_AE8;
+ this->actor.shape.rot.y += this->actionVar2;
this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].x = 0;
this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].z = 0;
this->unk_ABC += this->unk_B10[5];
@@ -17933,9 +18200,9 @@ void Player_Action_91(Player* this, PlayState* play) {
}
}
}
- } else if (this->unk_AE7 == 0) {
+ } else if (this->actionVar1 == 0) {
Player_PlaySfx(this, NA_SE_PL_WARP_PLATE_OUT);
- this->unk_AE7 = 1;
+ this->actionVar1 = 1;
}
}
@@ -18026,19 +18293,19 @@ void Player_Action_93(Player* this, PlayState* play) {
PlayerAnimation_Update(play, &this->skelAnime);
- if (func_80838A90(this, play)) {
+ if (Player_ActionChange_13(this, play)) {
return;
}
- if (this->unk_AE7 == 0) {
+ if (this->actionVar1 == 0) {
this->unk_ABC += this->unk_B48;
if (this->unk_ABC < -1000.0f) {
this->unk_ABC = -1000.0f;
- this->unk_AE7 = 1;
+ this->actionVar1 = 1;
this->unk_B48 = 0.0f;
}
func_80856074(play, this);
- } else if (this->unk_AE7 == 1) {
+ } else if (this->actionVar1 == 1) {
this->unk_B48 += -22.0f;
if (this->unk_B48 < -170.0f) {
this->unk_B48 = -170.0f;
@@ -18046,8 +18313,8 @@ void Player_Action_93(Player* this, PlayState* play) {
this->unk_ABC += this->unk_B48;
if (this->unk_ABC < -3900.0f) {
this->unk_ABC = -3900.0f;
- this->unk_AE7 = 2;
- this->actor.shape.rot.y = Camera_GetInputDirYaw(play->cameraPtrs[play->activeCamId]);
+ this->actionVar1 = 2;
+ this->actor.shape.rot.y = Camera_GetInputDirYaw(GET_ACTIVE_CAM(play));
this->actor.scale.y = 0.01f;
this->currentYaw = this->actor.world.rot.y = this->actor.shape.rot.y;
} else {
@@ -18066,22 +18333,22 @@ void Player_Action_93(Player* this, PlayState* play) {
}
func_80856074(play, this);
- } else if (this->unk_AE7 == 2) {
+ } else if (this->actionVar1 == 2) {
if (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A)) {
if (func_80856000(play, this)) {
- this->unk_AE8 = 0;
+ this->actionVar2 = 0;
} else {
- this->unk_AE7 = 3;
- if (this->unk_AE8 >= 10) {
+ this->actionVar1 = 3;
+ if (this->actionVar2 >= 10) {
this->unk_B48 = 2700.0f;
} else {
this->unk_B48 = 1450.0f;
}
func_8082E1F0(this, NA_SE_PL_DEKUNUTS_OUT_GRD);
}
- } else if (this->unk_AE8 < 15) {
- this->unk_AE8++;
- if (this->unk_AE8 == 10) {
+ } else if (this->actionVar2 < 15) {
+ this->actionVar2++;
+ if (this->actionVar2 == 10) {
func_80856110(play, this, 20.0f, 3.8f, -0.1f, 140, 23, 15);
}
}
@@ -18093,7 +18360,7 @@ void Player_Action_93(Player* this, PlayState* play) {
if (temp_fv0_2 >= 0.0f) {
f32 speed;
- sp38 = (this->unk_AE8 >= 10);
+ sp38 = (this->actionVar2 >= 10);
var_v1 = -1;
speed = this->unk_B48 * this->actor.scale.y;
if (this->actor.floorBgId != BGCHECK_SCENE) {
@@ -18120,8 +18387,8 @@ void Player_Action_93(Player* this, PlayState* play) {
this->stateFlags3 |= PLAYER_STATE3_40000;
}
- this->unk_AE7 = var_v1;
- this->unk_AE8 = 9999;
+ this->actionVar1 = var_v1;
+ this->actionVar2 = 9999;
Player_SetCylinderForAttack(this, DMG_DEKU_LAUNCH, 2, 20);
} else if (this->unk_ABC < 0.0f) {
func_80856074(play, this);
@@ -18210,7 +18477,7 @@ void Player_Action_94(Player* this, PlayState* play) {
this->boomerangActor = NULL;
}
- if (func_80838A90(this, play)) {
+ if (Player_ActionChange_13(this, play)) {
return;
}
@@ -18232,7 +18499,7 @@ void Player_Action_94(Player* this, PlayState* play) {
func_80833AA0(this, play);
} else if (this->stateFlags3 & PLAYER_STATE3_200) {
if (this->actor.velocity.y < 0.0f) {
- if (this->unk_AE7 < 0) {
+ if (this->actionVar1 < 0) {
func_80833AA0(this, play);
} else {
PlayerAnimation_Update(play, &this->skelAnime);
@@ -18282,14 +18549,14 @@ void Player_Action_94(Player* this, PlayState* play) {
func_8085687C(this);
- if (this->unk_AE8 != 0) {
- this->unk_AE8--;
+ if (this->actionVar2 != 0) {
+ this->actionVar2--;
}
- temp_fv1 = D_8085D958[this->unk_AE7] - Math_Vec3f_DistXZ(&this->actor.world.pos, this->unk_AF0);
+ temp_fv1 = D_8085D958[this->actionVar1] - Math_Vec3f_DistXZ(&this->actor.world.pos, this->unk_AF0);
PlayerAnimation_Update(play, &this->skelAnime);
- if ((this->unk_AE8 != 0) && (temp_fv1 > 300.0f)) {
+ if ((this->actionVar2 != 0) && (temp_fv1 > 300.0f)) {
sp76 = 0x1770;
if (this->skelAnime.animation != &gPlayerAnim_pn_kakku) {
func_8082E5EC(play, this, &gPlayerAnim_pn_kakkufinish);
@@ -18306,7 +18573,7 @@ void Player_Action_94(Player* this, PlayState* play) {
func_808566C0(play, this, PLAYER_BODYPART_RIGHT_HAND, 0.6f, 1.0f, 0.8f, 17);
}
}
- } else if ((this->unk_AE8 == 0) || (temp_fv1 < 0.0f)) {
+ } else if ((this->actionVar2 == 0) || (temp_fv1 < 0.0f)) {
sp76 = 0;
func_808355D8(play, this, &gPlayerAnim_pn_rakkafinish);
} else {
@@ -18403,7 +18670,7 @@ void Player_Action_95(Player* this, PlayState* play) {
PlayerAnimation_Update(play, &this->skelAnime);
Player_SetCylinderForAttack(this, DMG_DEKU_SPIN, 1, 30);
- if (!func_80838A90(this, play)) {
+ if (!Player_ActionChange_13(this, play)) {
s16 prevYaw = this->currentYaw;
f32 speedTarget;
s16 yawTarget;
@@ -18445,10 +18712,10 @@ void func_80857640(Player* this, f32 arg1, s32 arg2) {
func_80834CD0(this, arg1, NA_SE_VO_LI_SWORD_N);
Player_PlaySfx(this, NA_SE_PL_GORON_BALLJUMP);
Player_StopHorizontalMovement(this);
- if (this->unk_AE8 < arg2) {
- this->unk_AE8 = arg2;
+ if (this->actionVar2 < arg2) {
+ this->actionVar2 = arg2;
}
- this->unk_AE7 = 1;
+ this->actionVar1 = 1;
this->unk_B48 = 1.0f;
}
@@ -18457,7 +18724,7 @@ void func_808576BC(PlayState* play, Player* this) {
(this->actor.velocity.x * Math_SinS(this->currentYaw))) *
800.0f;
- var_v0 -= this->unk_AE8;
+ var_v0 -= this->actionVar2;
var_v0 = ABS_ALT(var_v0);
if (var_v0 <= 0x7D0) {
@@ -18476,7 +18743,7 @@ void func_808576BC(PlayState* play, Player* this) {
}
void func_808577E0(Player* this) {
- f32 temp_fa1 = ABS_ALT(this->unk_AE8) * 0.00004f;
+ f32 temp_fa1 = ABS_ALT(this->actionVar2) * 0.00004f;
if (this->unk_ABC < temp_fa1) {
this->unk_B48 += 0.08f;
@@ -18497,7 +18764,7 @@ void func_808577E0(Player* this) {
s32 func_80857950(PlayState* play, Player* this) {
if (((this->unk_B86[1] == 0) && !CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A)) ||
- ((this->unk_AE7 == 3) && (this->actor.velocity.y < 0.0f))) {
+ ((this->actionVar1 == 3) && (this->actor.velocity.y < 0.0f))) {
Player_SetAction(play, this, Player_Action_4, 1);
Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.prevPos);
PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_pg_maru_change, -2.0f / 3.0f, 7.0f, 0.0f,
@@ -18515,9 +18782,9 @@ s32 func_80857A44(PlayState* play, Player* this) {
this->actor.shape.shadowDraw = ActorShadow_DrawCircle;
this->actor.bgCheckFlags |= BGCHECKFLAG_PLAYER_800;
- this->unk_AE7 = 4;
+ this->actionVar1 = 4;
this->actor.shape.shadowScale = 30.0f;
- this->unk_AE8 = this->linearVelocity * 500.0f;
+ this->actionVar2 = this->linearVelocity * 500.0f;
this->unk_B08 = this->linearVelocity;
this->unk_B0C = 0.0f;
this->actor.home.rot.y = this->currentYaw;
@@ -18533,17 +18800,17 @@ void func_80857AEC(PlayState* play, Player* this) {
this->unk_B0C += this->unk_B08 * 0.05f;
if (this->unk_B86[1] == 0) {
- if (this->unk_AE7 == 1) {
- this->unk_AE7 = 2;
+ if (this->actionVar1 == 1) {
+ this->actionVar1 = 2;
Player_RequestQuakeAndRumble(play, this, NA_SE_PL_GORON_PUNCH);
play->actorCtx.unk2 = 4;
EffectSsBlast_SpawnWhiteShockwave(play, &this->actor.world.pos, &gZeroVec3f, &gZeroVec3f);
- this->unk_AE8 = 0;
+ this->actionVar2 = 0;
this->unk_B08 = 0.0f;
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_TEST, this->actor.world.pos.x, this->actor.world.pos.y,
this->actor.world.pos.z, 0, 0, 0, 0);
} else {
- this->unk_AE7 = 4;
+ this->actionVar1 = 4;
}
}
@@ -18553,11 +18820,11 @@ void func_80857AEC(PlayState* play, Player* this) {
// Goron rolling related
void Player_Action_96(Player* this, PlayState* play) {
- if (func_80833058(play, this, D_8085D050, 0)) {
+ if (Player_TryActionChangeList(play, this, sPlayerActionChangeList12, false)) {
return;
}
- if ((this->unk_AE7 == 0) && !func_80857A44(play, this)) {
+ if ((this->actionVar1 == 0) && !func_80857A44(play, this)) {
return;
}
@@ -18580,7 +18847,7 @@ void Player_Action_96(Player* this, PlayState* play) {
func_80834CD0(this, 10.0f, 0);
if (this->unk_B86[1] != 0) {
this->unk_B86[1] = 0;
- this->unk_AE7 = 3;
+ this->actionVar1 = 3;
}
} else if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) && (this->unk_B08 >= 12.0f)) {
s16 temp_v0 = this->currentYaw - BINANG_ADD(this->actor.wallYaw, 0x8000);
@@ -18613,17 +18880,17 @@ void Player_Action_96(Player* this, PlayState* play) {
if (this->unk_B86[1] != 0) {
speedTarget = 18.0f;
- Math_StepToC(&this->unk_AE7, 4, 1);
+ Math_StepToC(&this->actionVar1, 4, 1);
if ((this->stateFlags3 & PLAYER_STATE3_80000) && (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A) ||
(gSaveContext.save.saveInfo.playerData.magic == 0) ||
- ((this->unk_AE7 == 4) && (this->unk_B08 < 12.0f)))) {
+ ((this->actionVar1 == 4) && (this->unk_B08 < 12.0f)))) {
if (Math_StepToS(&this->unk_B86[1], 0, 1)) {
this->stateFlags3 &= ~PLAYER_STATE3_80000;
Magic_Reset(play);
Player_PlaySfx(this, NA_SE_PL_GORON_BALL_CHARGE_FAILED);
}
- this->unk_AE7 = 4;
+ this->actionVar1 = 4;
} else if (this->unk_B86[1] < 7) {
if (!(this->stateFlags3 & PLAYER_STATE3_80000)) {
this->unk_3D0.unk_00 = 2;
@@ -18637,9 +18904,9 @@ void Player_Action_96(Player* this, PlayState* play) {
Math_AsymStepToF(&this->unk_B10[0], (this->unk_B8A != 0) ? 1.0f : 0.0f, 0.8f, 0.05f);
if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
func_80857AEC(play, this);
- if (this->unk_AE7 == 2) {
+ if (this->actionVar1 == 2) {
if (this->unk_B8A == 0) {
- this->unk_AE7 = 4;
+ this->actionVar1 = 4;
} else {
this->unk_B8A--;
this->unk_ABC = 0.0f;
@@ -18670,7 +18937,7 @@ void Player_Action_96(Player* this, PlayState* play) {
if (this->unk_B86[1] == 0) {
this->unk_B0C = 0.0f;
- if (this->unk_AE7 >= 0x36) {
+ if (this->actionVar1 >= 0x36) {
Magic_Consume(play, 2, MAGIC_CONSUME_GORON_ZORA);
this->unk_B08 = 18.0f;
this->unk_B86[1] = 1;
@@ -18707,12 +18974,12 @@ void Player_Action_96(Player* this, PlayState* play) {
spCC = speedTarget;
spCA = yawTarget;
- if (func_8083A4A4(this, &spCC, &spCA, (this->unk_AE7 >= 5) ? 0.0f : 1.0f)) {
+ if (func_8083A4A4(this, &spCC, &spCA, (this->actionVar1 >= 5) ? 0.0f : 1.0f)) {
if (this->unk_B86[1] == 0) {
- this->unk_AE7 = 4;
+ this->actionVar1 = 4;
}
- if (this->unk_AE7 == 4) {
+ if (this->actionVar1 == 4) {
spDC = -0xFA0;
}
} else {
@@ -18724,7 +18991,7 @@ void Player_Action_96(Player* this, PlayState* play) {
(sPlayerFloorType == FLOOR_TYPE_5)) &&
(spC0 >= 0x7D0))
? 0.08f
- : this->unk_AE8 * 0.0003f;
+ : this->actionVar2 * 0.0003f;
f32 sp80 = (Math_SinS(this->floorPitch) * 8.0f) + 0.6f;
s16 var_a3;
s16 sp7C;
@@ -18734,11 +19001,11 @@ void Player_Action_96(Player* this, PlayState* play) {
if (this->unk_B86[1] == 0) {
if ((gSaveContext.magicState == MAGIC_STATE_IDLE) &&
- (gSaveContext.save.saveInfo.playerData.magic >= 2) && (this->unk_AE8 >= 0x36B0)) {
- this->unk_AE7++;
+ (gSaveContext.save.saveInfo.playerData.magic >= 2) && (this->actionVar2 >= 0x36B0)) {
+ this->actionVar1++;
Actor_PlaySfx_FlaggedCentered1(&this->actor, NA_SE_PL_GORON_BALL_CHARGE - SFX_FLAG);
} else {
- this->unk_AE7 = 4;
+ this->actionVar1 = 4;
}
}
@@ -18780,9 +19047,9 @@ void Player_Action_96(Player* this, PlayState* play) {
if (this->unk_B86[1] != 0) {
if ((ABS_ALT(sp8E) + ABS_ALT(this->floorPitch)) > 0x3A98) {
this->unk_B86[1] = 0;
- this->unk_AE7 = 4;
+ this->actionVar1 = 4;
this->unk_B8E = 0x14;
- this->unk_AE8 = 0;
+ this->actionVar2 = 0;
this->stateFlags3 &= ~PLAYER_STATE3_80000;
Magic_Reset(play);
}
@@ -18813,7 +19080,7 @@ void Player_Action_96(Player* this, PlayState* play) {
this->unk_B28 = Math_Atan2S_XY(spA0, spA4);
}
- if (this->unk_AE8 == 0) {
+ if (this->actionVar2 == 0) {
s32 temp_v0_10 = this->unk_B86[0];
s32 temp_ft3_2 = sp54 * 800.0f;
@@ -18840,7 +19107,7 @@ void Player_Action_96(Player* this, PlayState* play) {
func_808576BC(play, this);
- if (ABS_ALT(this->unk_AE8) > 0xFA0) {
+ if (ABS_ALT(this->actionVar2) > 0xFA0) {
this->stateFlags2 |= PLAYER_STATE2_8;
}
@@ -18870,7 +19137,7 @@ void Player_Action_96(Player* this, PlayState* play) {
this->unk_B08 = CLAMP_MAX(this->unk_B08, 18.0f);
} else {
this->unk_B48 += this->actor.velocity.y * 0.005f;
- if (this->unk_AE7 == 1) {
+ if (this->actionVar1 == 1) {
if (this->actor.velocity.y > 0.0f) {
if ((this->actor.velocity.y + this->actor.gravity) < 0.0f) {
this->actor.velocity.y = -this->actor.gravity;
@@ -18893,21 +19160,21 @@ void Player_Action_96(Player* this, PlayState* play) {
Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 0x7D0);
- Math_AsymStepToS(&this->unk_AE8, spDC, (spDC >= 0) ? 0x7D0 : 0x3E8, 0x4B0);
+ Math_AsymStepToS(&this->actionVar2, spDC, (spDC >= 0) ? 0x7D0 : 0x3E8, 0x4B0);
- if (this->unk_AE8 != 0) {
+ if (this->actionVar2 != 0) {
spD8 = this->actor.shape.rot.x;
- this->actor.shape.rot.x += this->unk_AE8;
+ this->actor.shape.rot.x += this->actionVar2;
- Math_ScaledStepToS(&this->unk_B86[0], 0, ABS_ALT(this->unk_AE8));
- if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (((this->unk_AE8 + spD8) * spD8) <= 0)) {
+ Math_ScaledStepToS(&this->unk_B86[0], 0, ABS_ALT(this->actionVar2));
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (((this->actionVar2 + spD8) * spD8) <= 0)) {
spE0 =
Player_GetFloorSfx(this, (this->unk_B86[1] != 0) ? NA_SE_PL_GORON_CHG_ROLL : NA_SE_PL_GORON_ROLL);
Audio_PlaySfx_AtPosWithSyncedFreqAndVolume(&this->actor.projectedPos, spE0, this->unk_B08);
}
}
- if (this->unk_AE7 == 2) {
+ if (this->actionVar1 == 2) {
Player_SetCylinderForAttack(this, DMG_GORON_POUND, 4, 60);
Actor_SetPlayerImpact(play, PLAYER_IMPACT_GORON_GROUND_POUND, 2, 100.0f, &this->actor.world.pos);
} else if (this->unk_B86[1] != 0) {
@@ -19124,7 +19391,7 @@ AnimSfxEntry D_8085DA90[] = {
void Player_CsAnim_12(PlayState* play, Player* this, void* anim) {
if (PlayerAnimation_Update(play, &this->skelAnime)) {
func_80858D48(play, this, anim);
- this->unk_AE8 = 1;
+ this->actionVar2 = 1;
}
if (this->skelAnime.animation == &gPlayerAnim_okiagaru_tatu) {
@@ -19154,7 +19421,7 @@ void Player_CsAnim_17(PlayState* play, Player* this, void* anim) {
void Player_CsAnim_13(PlayState* play, Player* this, void* anim) {
if (PlayerAnimation_Update(play, &this->skelAnime)) {
func_8082EB18(play, this, anim);
- this->unk_AE8 = 1;
+ this->actionVar2 = 1;
}
}
@@ -19184,9 +19451,9 @@ void func_8085929C(PlayState* play, Player* this, UNK_TYPE arg2) {
void func_80859300(PlayState* play, Player* this, UNK_TYPE arg2) {
this->actor.gravity = 0.0f;
- if (this->unk_AE7 == 0) {
+ if (this->actionVar1 == 0) {
if ((this->transformation == PLAYER_FORM_DEKU) || func_8083B3B4(play, this, NULL)) {
- this->unk_AE7 = 1;
+ this->actionVar1 = 1;
} else {
func_808477D0(play, this, NULL, fabsf(this->actor.velocity.y));
Math_ScaledStepToS(&this->unk_AAA, -0x2710, 0x320);
@@ -19194,7 +19461,7 @@ void func_80859300(PlayState* play, Player* this, UNK_TYPE arg2) {
}
} else {
if (PlayerAnimation_Update(play, &this->skelAnime)) {
- if (this->unk_AE7 == 1) {
+ if (this->actionVar1 == 1) {
func_8082E634(play, this, &gPlayerAnim_link_swimer_swim_wait);
} else {
Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_swimer_swim_wait);
@@ -19499,9 +19766,9 @@ void Player_CsAction_0(PlayState* play, Player* this, CsCmdActorCue* cue) {
} else {
PlayerAnimation_Update(play, &this->skelAnime);
if (func_801240DC(this) || (this->stateFlags1 & PLAYER_STATE1_800)) {
- func_8083216C(this, play);
+ Player_UpdateUpperBody(this, play);
} else if ((this->interactRangeActor != NULL) && (this->interactRangeActor->textId == 0xFFFF)) {
- func_8083D23C(this, play);
+ Player_ActionChange_2(this, play);
}
}
}
@@ -19536,7 +19803,7 @@ void Player_CsAction_2(PlayState* play, Player* this, CsCmdActorCue* cue) {
} else {
PlayerAnimation_Update(play, &this->skelAnime);
if (func_801240DC(this) || (this->stateFlags1 & PLAYER_STATE1_800)) {
- func_8083216C(this, play);
+ Player_UpdateUpperBody(this, play);
}
}
}
@@ -19555,7 +19822,7 @@ void Player_CsAction_4(PlayState* play, Player* this, CsCmdActorCue* cue) {
PlayerAnimation_Update(play, &this->skelAnime);
if ((this->actor.id == ACTOR_EN_TEST3) && Animation_OnFrame(&this->skelAnime, 20.0f)) {
this->getItemDrawIdPlusOne = GID_MASK_SUN + 1;
- Message_BombersNotebookQueueEvent(play, 0x1B);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_ESCAPED_SAKONS_HIDEOUT);
Audio_PlayFanfare(NA_BGM_GET_NEW_MASK);
}
}
@@ -19598,7 +19865,7 @@ void Player_CsAction_6(PlayState* play, Player* this, CsCmdActorCue* cue) {
gSaveContext.save.playerForm = PLAYER_FORM_HUMAN;
this->actor.update = func_8012301C;
this->actor.draw = NULL;
- this->unk_AE7 = 0;
+ this->actionVar1 = 0;
}
} else if (R_PLAY_FILL_SCREEN_ON < 0) {
R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON;
@@ -19609,8 +19876,8 @@ void Player_CsAction_6(PlayState* play, Player* this, CsCmdActorCue* cue) {
} else {
sp24 = 2.5f;
func_808411D4(play, this, &sp24, 0xA);
- this->unk_AE8++;
- if (this->unk_AE8 >= 0x15) {
+ this->actionVar2++;
+ if (this->actionVar2 >= 0x15) {
this->csMode = PLAYER_CSMODE_10;
}
}
@@ -19633,10 +19900,10 @@ void Player_CsAction_9(PlayState* play, Player* this, CsCmdActorCue* cue) {
void Player_CsAction_10(PlayState* play, Player* this, CsCmdActorCue* cue) {
func_80859248(this);
- if (this->unk_AE8 != 0) {
+ if (this->actionVar2 != 0) {
if (PlayerAnimation_Update(play, &this->skelAnime)) {
Player_AnimationPlayLoop(play, this, func_8082EF54(this));
- this->unk_AE8 = 0;
+ this->actionVar2 = 0;
}
func_8082FC60(this);
} else {
@@ -19744,7 +20011,7 @@ void Player_CsAction_19(PlayState* play, Player* this, CsCmdActorCue* cue) {
void Player_CsAction_20(PlayState* play, Player* this, CsCmdActorCue* cue) {
if (PlayerAnimation_Update(play, &this->skelAnime)) {
Player_CsAction_End(play, this, cue);
- } else if (this->unk_AE8 == 0) {
+ } else if (this->actionVar2 == 0) {
Item_Give(play, ITEM_SWORD_RAZOR);
func_80841358(play, this, false);
} else {
@@ -19841,7 +20108,7 @@ void Player_CsAction_30(PlayState* play, Player* this, CsCmdActorCue* cue) {
func_808525C4(play, this);
return;
}
- if (this->unk_AE8 != 0) {
+ if (this->actionVar2 != 0) {
func_8085255C(play, this);
}
}
@@ -19876,12 +20143,12 @@ void Player_CsAction_33(PlayState* play, Player* this, CsCmdActorCue* cue) {
}
void Player_CsAction_34(PlayState* play, Player* this, CsCmdActorCue* cue) {
- if (PlayerAnimation_Update(play, &this->skelAnime) && (this->unk_AE8 == 0) &&
+ if (PlayerAnimation_Update(play, &this->skelAnime) && (this->actionVar2 == 0) &&
(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_back_downB);
- this->unk_AE8 = 1;
+ this->actionVar2 = 1;
}
- if (this->unk_AE8 != 0) {
+ if (this->actionVar2 != 0) {
func_80832F24(this);
}
}
@@ -19894,7 +20161,7 @@ void Player_CsAction_35(PlayState* play, Player* this, CsCmdActorCue* cue) {
void Player_CsAction_36(PlayState* play, Player* this, CsCmdActorCue* cue) {
if (PlayerAnimation_Update(play, &this->skelAnime)) {
- if (this->unk_AE8++ >= 0x15) {
+ if (this->actionVar2++ >= 0x15) {
PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_pz_wait, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP,
-16.0f);
}
@@ -19919,7 +20186,7 @@ void Player_CsAction_38(PlayState* play, Player* this, CsCmdActorCue* cue) {
void Player_CsAction_39(PlayState* play, Player* this, CsCmdActorCue* cue) {
Player_CsAnim_11(play, this, cue);
- if (func_8083D23C(this, play)) {
+ if (Player_ActionChange_2(this, play)) {
play->csCtx.state = CS_STATE_STOP;
CutsceneManager_Stop(CutsceneManager_GetCurrentCsId());
}
@@ -19933,18 +20200,18 @@ void Player_CsAction_40(PlayState* play, Player* this, CsCmdActorCue* cue) {
void Player_CsAction_41(PlayState* play, Player* this, CsCmdActorCue* cue) {
if (PlayerAnimation_Update(play, &this->skelAnime)) {
- if (this->unk_AE8 == 0) {
+ if (this->actionVar2 == 0) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) ||
(Message_GetState(&play->msgCtx) == TEXT_STATE_NONE)) {
this->getItemDrawIdPlusOne = GID_NONE + 1;
- this->unk_AE8 = -1;
+ this->actionVar2 = -1;
} else {
this->getItemDrawIdPlusOne = GID_PENDANT_OF_MEMORIES + 1;
}
- } else if (this->unk_AE8 < 0) {
+ } else if (this->actionVar2 < 0) {
if (Actor_HasParent(&this->actor, play)) {
this->actor.parent = NULL;
- this->unk_AE8 = 1;
+ this->actionVar2 = 1;
} else {
Actor_OfferGetItem(&this->actor, play, GI_PENDANT_OF_MEMORIES, 9999.9f, 9999.9f);
}
@@ -19974,7 +20241,7 @@ void Player_CsAction_43(PlayState* play, Player* this, CsCmdActorCue* cue) {
gSaveContext.save.playerForm = PLAYER_FORM_HUMAN;
this->actor.update = func_8012301C;
this->actor.draw = NULL;
- this->unk_AE7 = 0;
+ this->actionVar1 = 0;
}
} else if (R_PLAY_FILL_SCREEN_ON < 0) {
R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON;
@@ -20009,8 +20276,8 @@ void Player_CsAction_End(PlayState* play, Player* this, CsCmdActorCue* cue) {
func_8082DC64(play, this);
} else {
func_80839ED0(this, play);
- if (!func_808391D8(this, play)) {
- func_8083D23C(this, play);
+ if (!Player_ActionChange_4(this, play)) {
+ Player_ActionChange_2(this, play);
}
}
@@ -20061,7 +20328,7 @@ void func_8085AC9C(PlayState* play, Player* this, CsCmdActorCue* cue, PlayerCsMo
void func_8085AD5C(PlayState* play, Player* this, PlayerCsMode csMode) {
if ((csMode != PLAYER_CSMODE_1) && (csMode != PLAYER_CSMODE_WAIT) && (csMode != PLAYER_CSMODE_20) &&
(csMode != PLAYER_CSMODE_END)) {
- func_8082DCA0(play, this);
+ Player_DetachHeldActor(play, this);
}
}
@@ -20078,7 +20345,7 @@ void Player_CsAction_48(PlayState* play, Player* this, CsCmdActorCue* cue) {
if ((sPlayerCsModes[this->cueId] == PLAYER_CSMODE_68) && (play->sceneId == SCENE_OKUJOU)) {
this->unk_AA5 = PLAYER_UNKAA5_5;
- if (func_80838A90(this, play)) {
+ if (Player_ActionChange_13(this, play)) {
this->csMode = PLAYER_CSMODE_NONE;
}
return;
@@ -20124,8 +20391,8 @@ void Player_CsAction_48(PlayState* play, Player* this, CsCmdActorCue* cue) {
func_8085AD5C(play, this, ABS_ALT(csMode));
func_8085AC9C(play, this, playerCue, &sPlayerCsModeInitFuncs[ABS_ALT(csMode)]);
- this->unk_AE8 = 0;
- this->unk_AE7 = 0;
+ this->actionVar2 = 0;
+ this->actionVar1 = 0;
this->cueId = playerCue->id;
}
@@ -20155,7 +20422,7 @@ s32 Player_StartFishing(PlayState* play) {
Player* player = GET_PLAYER(play);
func_8082DE50(play, player);
- func_80831990(play, player, ITEM_FISHING_ROD);
+ Player_UseItem(play, player, ITEM_FISHING_ROD);
return 1;
}
@@ -20264,11 +20531,11 @@ void Player_TalkWithPlayer(PlayState* play, Actor* actor) {
}
if (player->stateFlags1 & PLAYER_STATE1_800000) {
- s32 sp24 = player->unk_AE8;
+ s32 sp24 = player->actionVar2;
func_8082DE14(play, player);
func_80837B60(play, player);
- player->unk_AE8 = sp24;
+ player->actionVar2 = sp24;
} else {
if (func_801242B4(player)) {
func_80832558(play, player, func_80837B60);
diff --git a/src/overlays/effects/ovl_Effect_En_Ice_Block/z_eff_en_ice_block.c b/src/overlays/effects/ovl_Effect_En_Ice_Block/z_eff_en_ice_block.c
index e63d414d9..fffd5b1d9 100644
--- a/src/overlays/effects/ovl_Effect_En_Ice_Block/z_eff_en_ice_block.c
+++ b/src/overlays/effects/ovl_Effect_En_Ice_Block/z_eff_en_ice_block.c
@@ -19,14 +19,14 @@ EffectSsInit Effect_En_Ice_Block_InitVars = {
EffectEnIceBlock_Init,
};
-#define rObjId regs[0]
+#define rObjectSlot regs[0]
#define rScale regs[1]
#define rRot regs[2]
#define rRotVel regs[3]
u32 EffectEnIceBlock_CheckIceBlockObject(EffectSs* this, PlayState* play) {
- if (((this->rObjId = Object_GetIndex(&play->objectCtx, OBJECT_ICE_BLOCK)) < 0) ||
- (!Object_IsLoaded(&play->objectCtx, this->rObjId))) {
+ if (((this->rObjectSlot = Object_GetSlot(&play->objectCtx, OBJECT_ICE_BLOCK)) <= OBJECT_SLOT_NONE) ||
+ (!Object_IsLoaded(&play->objectCtx, this->rObjectSlot))) {
this->life = -1;
this->draw = NULL;
return false;
@@ -63,7 +63,7 @@ void EffectEnIceBlock_Draw(PlayState* play, u32 index, EffectSs* this) {
OPEN_DISPS(gfxCtx);
gSPSegment(POLY_XLU_DISP++, 0x06,
- play->objectCtx.status[this->rObjId].segment); // object: OBJECT_ICE_BLOCK
+ play->objectCtx.slots[this->rObjectSlot].segment); // object: OBJECT_ICE_BLOCK
Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_Translate(this->pos.x, this->pos.y, this->pos.z, MTXMODE_NEW);
diff --git a/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c b/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c
index 87e50fb5f..0cc62b42d 100644
--- a/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c
+++ b/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c
@@ -13,7 +13,7 @@
#define rAlphaStep regs[6]
#define rFadeDelay regs[7]
#define rScaleStep regs[8]
-#define rObjectIndex regs[9]
+#define rObjectSlot regs[9]
#define PARAMS ((EffectSsDFireInitParams*)initParamsx)
@@ -29,8 +29,8 @@ EffectSsInit Effect_Ss_D_Fire_InitVars = {
static TexturePtr sFireTextures[] = { gDodongoFire0Tex, gDodongoFire1Tex, gDodongoFire2Tex, gDodongoFire3Tex };
s32 EffectSsDFire_CheckForObject(EffectSs* this, PlayState* play) {
- if (((this->rObjectIndex = Object_GetIndex(&play->objectCtx, OBJECT_DODONGO)) < 0) ||
- !Object_IsLoaded(&play->objectCtx, this->rObjectIndex)) {
+ if (((this->rObjectSlot = Object_GetSlot(&play->objectCtx, OBJECT_DODONGO)) <= OBJECT_SLOT_NONE) ||
+ !Object_IsLoaded(&play->objectCtx, this->rObjectSlot)) {
this->life = -1;
this->draw = NULL;
return false;
@@ -65,16 +65,16 @@ u32 EffectSsDFire_Init(PlayState* play, u32 index, EffectSs* this, void* initPar
void EffectSsDFire_Draw(PlayState* play, u32 index, EffectSs* this) {
GraphicsContext* gfxCtx = play->state.gfxCtx;
s32 pad;
- void* object;
+ void* objectPtr;
f32 scale;
if (EffectSsDFire_CheckForObject(this, play)) {
- object = play->objectCtx.status[this->rObjectIndex].segment;
+ objectPtr = play->objectCtx.slots[this->rObjectSlot].segment;
OPEN_DISPS(gfxCtx);
- gSegments[6] = VIRTUAL_TO_PHYSICAL(object);
- gSPSegment(POLY_XLU_DISP++, 0x06, object);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(objectPtr);
+ gSPSegment(POLY_XLU_DISP++, 0x06, objectPtr);
scale = this->rScale / 100.0f;
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 e3daa2530..f8b20175b 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
@@ -23,7 +23,7 @@ EffectSsInit Effect_Ss_Extra_InitVars = {
static TexturePtr sPointTextures[] = { gYabusamePoint30Tex, gYabusamePoint60Tex, gYabusamePoint100Tex };
-#define rObjId regs[0]
+#define rObjectSlot regs[0]
#define rTimer regs[1]
#define rScoreIndex regs[2]
#define rScale regs[3]
@@ -31,13 +31,13 @@ static TexturePtr sPointTextures[] = { gYabusamePoint30Tex, gYabusamePoint60Tex,
u32 EffectSsExtra_Init(PlayState* play, u32 index, EffectSs* this, void* initParamsx) {
s32 pad;
EffectSsExtraInitParams* params = PARAMS;
- s32 objIndex;
+ s32 objectSlot;
- objIndex = Object_GetIndex(&play->objectCtx, OBJECT_YABUSAME_POINT);
- if ((objIndex >= 0) && (Object_IsLoaded(&play->objectCtx, objIndex))) {
+ objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_YABUSAME_POINT);
+ if ((objectSlot > OBJECT_SLOT_NONE) && (Object_IsLoaded(&play->objectCtx, objectSlot))) {
void* segBackup = gSegments[6];
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectSlot].segment);
this->pos = params->pos;
this->velocity = params->velocity;
@@ -48,7 +48,7 @@ u32 EffectSsExtra_Init(PlayState* play, u32 index, EffectSs* this, void* initPar
this->rScoreIndex = params->scoreIndex;
this->rScale = params->scale;
this->rTimer = 5;
- this->rObjId = objIndex;
+ this->rObjectSlot = objectSlot;
gSegments[6] = segBackup;
return 1;
@@ -59,16 +59,16 @@ u32 EffectSsExtra_Init(PlayState* play, u32 index, EffectSs* this, void* initPar
void EffectSsExtra_Draw(PlayState* play, u32 index, EffectSs* this) {
s32 pad;
f32 scale;
- void* storedSegment;
+ void* objectPtr;
scale = this->rScale / 100.0f;
- storedSegment = play->objectCtx.status[this->rObjId].segment;
+ objectPtr = play->objectCtx.slots[this->rObjectSlot].segment;
OPEN_DISPS(play->state.gfxCtx);
- gSegments[6] = VIRTUAL_TO_PHYSICAL(storedSegment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(objectPtr);
- gSPSegment(POLY_XLU_DISP++, 0x06, storedSegment);
+ gSPSegment(POLY_XLU_DISP++, 0x06, objectPtr);
Matrix_Translate(this->pos.x, this->pos.y, this->pos.z, MTXMODE_NEW);
Matrix_Scale(scale, scale, scale, MTXMODE_APPLY);
diff --git a/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.c b/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.c
index 15444ad47..521b6db54 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.c
@@ -11,8 +11,8 @@
#define rYaw regs[1]
#define rFlags regs[2]
#define rScale regs[3]
-#define rObjId regs[4]
-#define rObjBankIndex regs[5]
+#define rObjectId regs[4]
+#define rObjectSlot regs[5]
#define rMinLife regs[6]
#define PARAMS ((EffectSsHahenInitParams*)initParamsx)
@@ -27,8 +27,8 @@ EffectSsInit Effect_Ss_Hahen_InitVars = {
};
void EffectSsHahen_CheckForObject(EffectSs* this, PlayState* play) {
- if (((this->rObjBankIndex = Object_GetIndex(&play->objectCtx, this->rObjId)) < 0) ||
- !Object_IsLoaded(&play->objectCtx, this->rObjBankIndex)) {
+ if (((this->rObjectSlot = Object_GetSlot(&play->objectCtx, this->rObjectId)) <= OBJECT_SLOT_NONE) ||
+ !Object_IsLoaded(&play->objectCtx, this->rObjectSlot)) {
this->life = -1;
this->draw = NULL;
}
@@ -44,11 +44,11 @@ u32 EffectSsHahen_Init(PlayState* play, u32 index, EffectSs* this, void* initPar
if (initParams->dList != NULL) {
this->gfx = initParams->dList;
- this->rObjId = initParams->objId;
+ this->rObjectId = initParams->objectId;
EffectSsHahen_CheckForObject(this, play);
} else {
this->gfx = gEffFragments1DL;
- this->rObjId = HAHEN_OBJECT_DEFAULT;
+ this->rObjectId = HAHEN_OBJECT_DEFAULT;
}
this->draw = EffectSsHahen_Draw;
@@ -68,8 +68,8 @@ void EffectSsHahen_DrawOpa(PlayState* play, EffectSs* this) {
OPEN_DISPS(gfxCtx);
- if (this->rObjId != HAHEN_OBJECT_DEFAULT) {
- gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->rObjBankIndex].segment);
+ if (this->rObjectId != HAHEN_OBJECT_DEFAULT) {
+ gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->rObjectSlot].segment);
}
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
Gfx_SetupDL25_Opa(play->state.gfxCtx);
@@ -84,8 +84,8 @@ void EffectSsHahen_DrawXlu(PlayState* play, EffectSs* this) {
OPEN_DISPS(gfxCtx);
- if (this->rObjId != -1) {
- gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.status[this->rObjBankIndex].segment);
+ if (this->rObjectId != -1) {
+ gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.slots[this->rObjectSlot].segment);
}
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
Gfx_SetupDL25_Xlu(play->state.gfxCtx);
@@ -125,7 +125,7 @@ void EffectSsHahen_Update(PlayState* play, u32 index, EffectSs* this) {
this->life = 0;
}
- if (this->rObjId != HAHEN_OBJECT_DEFAULT) {
+ if (this->rObjectId != HAHEN_OBJECT_DEFAULT) {
EffectSsHahen_CheckForObject(this, play);
}
}
diff --git a/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h b/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h
index d962bf55f..5fc6303d4 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h
+++ b/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h
@@ -15,7 +15,7 @@ typedef struct {
/* 0x24 */ Gfx* dList;
/* 0x28 */ s16 flags;
/* 0x2A */ s16 scale;
- /* 0x2C */ s16 objId;
+ /* 0x2C */ s16 objectId;
/* 0x2C */ s16 life;
} EffectSsHahenInitParams; // size = 0x30
diff --git a/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c b/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c
index c552e7c50..7c3bcd0ad 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c
@@ -17,8 +17,8 @@
#define rScale regs[7]
#define rReg8 regs[8]
#define rReg9 regs[9]
-#define rObjId regs[10]
-#define rObjBankIndex regs[11]
+#define rObjectId regs[10]
+#define rObjectSlot regs[11]
#define rColorIndex regs[12]
#define PARAMS ((EffectSsKakeraInitParams*)initParamsx)
@@ -51,14 +51,14 @@ u32 EffectSsKakera_Init(PlayState* play, u32 index, EffectSs* this, void* initPa
this->priority = 101;
if (initParams->dList != NULL) {
this->gfx = initParams->dList;
- switch (initParams->objId) {
+ switch (initParams->objectId) {
case GAMEPLAY_KEEP:
case GAMEPLAY_FIELD_KEEP:
case GAMEPLAY_DANGEON_KEEP:
- this->rObjId = KAKERA_OBJECT_DEFAULT;
+ this->rObjectId = KAKERA_OBJECT_DEFAULT;
break;
default:
- this->rObjId = initParams->objId;
+ this->rObjectId = initParams->objectId;
EffectSsKakera_CheckForObject(this, play);
break;
}
@@ -93,11 +93,11 @@ void EffectSsKakera_Draw(PlayState* play, u32 index, EffectSs* this) {
s32 colorIndex = this->rColorIndex;
OPEN_DISPS(gfxCtx);
- if (this->rObjId != KAKERA_OBJECT_DEFAULT) {
+ if (this->rObjectId != KAKERA_OBJECT_DEFAULT) {
if ((((this->rReg4 >> 7) & 1) << 7) == 0x80) {
- gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.status[this->rObjBankIndex].segment);
+ gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.slots[this->rObjectSlot].segment);
} else {
- gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->rObjBankIndex].segment);
+ gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->rObjectSlot].segment);
}
}
@@ -127,8 +127,8 @@ void EffectSsKakera_Draw(PlayState* play, u32 index, EffectSs* this) {
}
void EffectSsKakera_CheckForObject(EffectSs* this, PlayState* play) {
- this->rObjBankIndex = Object_GetIndex(&play->objectCtx, this->rObjId);
- if ((this->rObjBankIndex < 0) || (!Object_IsLoaded(&play->objectCtx, this->rObjBankIndex))) {
+ this->rObjectSlot = Object_GetSlot(&play->objectCtx, this->rObjectId);
+ if ((this->rObjectSlot <= OBJECT_SLOT_NONE) || (!Object_IsLoaded(&play->objectCtx, this->rObjectSlot))) {
this->life = 0;
this->draw = NULL;
}
@@ -369,7 +369,7 @@ void EffectSsKakera_Update(PlayState* play, u32 index, EffectSs* this) {
this->life = 0;
}
func_8097E7E0(this, play);
- if (this->rObjId != KAKERA_OBJECT_DEFAULT) {
+ if (this->rObjectId != KAKERA_OBJECT_DEFAULT) {
EffectSsKakera_CheckForObject(this, play);
}
}
diff --git a/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.h b/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.h
index d55a683cd..f2e5a609c 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.h
+++ b/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.h
@@ -30,7 +30,7 @@ typedef struct {
/* 0x32 */ s16 unk_32;
/* 0x34 */ s32 life;
/* 0x38 */ s16 colorIdx;
- /* 0x3A */ s16 objId;
+ /* 0x3A */ s16 objectId;
/* 0x3C */ Gfx* dList;
} EffectSsKakeraInitParams; // size = 0x40
diff --git a/src/overlays/effects/ovl_Effect_Ss_Lightning/z_eff_ss_lightning.c b/src/overlays/effects/ovl_Effect_Ss_Lightning/z_eff_ss_lightning.c
index 61eb3aebd..139568f3b 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Lightning/z_eff_ss_lightning.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Lightning/z_eff_ss_lightning.c
@@ -26,7 +26,7 @@ u32 EffectSsLightning_Init(PlayState* play, u32 index, EffectSs* this, void* ini
void EffectSsLightning_Update(PlayState* play, u32 index, EffectSs* this);
void EffectSsLightning_Draw(PlayState* play, u32 index, EffectSs* this);
-TexturePtr sLightningTextures[] = {
+static TexturePtr sLightningTextures[] = {
gEffLightning1Tex, gEffLightning2Tex, gEffLightning3Tex, gEffLightning4Tex,
gEffLightning5Tex, gEffLightning6Tex, gEffLightning7Tex, gEffLightning8Tex,
};
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 c1615e2bf..f3de09474 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
@@ -7,7 +7,7 @@
#include "z_eff_ss_stick.h"
#include "objects/gameplay_keep/gameplay_keep.h"
-#define rObjBankIndex regs[0]
+#define rObjectSlot regs[0]
#define rYaw regs[1]
#define PARAMS ((EffectSsStickInitParams*)initParamsx)
@@ -25,7 +25,7 @@ u32 EffectSsStick_Init(PlayState* play, u32 index, EffectSs* this, void* initPar
EffectSsStickInitParams* initParams = PARAMS;
Vec3f pos;
- this->rObjBankIndex = Object_GetIndex(&play->objectCtx, GAMEPLAY_KEEP);
+ this->rObjectSlot = Object_GetSlot(&play->objectCtx, GAMEPLAY_KEEP);
pos = initParams->pos;
this->pos = pos;
this->vec = pos;
@@ -51,7 +51,7 @@ void EffectSsStick_Draw(PlayState* play, u32 index, EffectSs* this) {
Matrix_RotateZYX(0, this->rYaw, 0, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
Gfx_SetupDL25_Opa(gfxCtx);
- gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->rObjBankIndex].segment);
+ gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->rObjectSlot].segment);
gSPSegment(POLY_OPA_DISP++, 0x0C, gCullBackDList);
gSPDisplayList(POLY_OPA_DISP++, gDekuStickDL);
diff --git a/src/overlays/gamestates/ovl_daytelop/z_daytelop.c b/src/overlays/gamestates/ovl_daytelop/z_daytelop.c
index 1b68e0b14..2c2e9a6b1 100644
--- a/src/overlays/gamestates/ovl_daytelop/z_daytelop.c
+++ b/src/overlays/gamestates/ovl_daytelop/z_daytelop.c
@@ -84,7 +84,7 @@ void DayTelop_Update(DayTelopState* this, GameState* thisx) {
SET_NEXT_GAMESTATE(&this->state, Play_Init, sizeof(PlayState));
gSaveContext.save.time = CLOCK_TIME(6, 0);
- D_801BDBC8 = 0xFE;
+ gSceneSeqState = SCENESEQ_MORNING;
} else if (this->transitionCountdown == 90) {
this->fadeInState = DAYTELOP_HOURSTEXT_FADEIN;
this->alpha = 0;
@@ -215,11 +215,11 @@ void DayTelop_Noop(DayTelopState* this) {
void DayTelop_LoadGraphics(DayTelopState* this) {
size_t segmentSize = SEGMENT_ROM_SIZE(daytelop_static);
- this->daytelopStaticFile = THA_AllocTailAlign16(&this->state.heap, segmentSize);
+ this->daytelopStaticFile = THA_AllocTailAlign16(&this->state.tha, segmentSize);
DmaMgr_SendRequest0(this->daytelopStaticFile, SEGMENT_ROM_START(daytelop_static), segmentSize);
segmentSize = SEGMENT_ROM_SIZE(icon_item_gameover_static);
- this->gameoverStaticFile = THA_AllocTailAlign16(&this->state.heap, segmentSize);
+ this->gameoverStaticFile = THA_AllocTailAlign16(&this->state.tha, segmentSize);
DmaMgr_SendRequest0(this->gameoverStaticFile, SEGMENT_ROM_START(icon_item_gameover_static), segmentSize);
}
diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c b/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c
index 4d3e172d9..65d26a97e 100644
--- a/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c
+++ b/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c
@@ -2197,7 +2197,7 @@ void FileSelect_LoadGame(GameState* thisx) {
gSaveContext.nextTransitionType = TRANS_NEXT_TYPE_DEFAULT;
gSaveContext.cutsceneTrigger = 0;
gSaveContext.chamberCutsceneNum = 0;
- gSaveContext.nextDayTime = 0xFFFF;
+ gSaveContext.nextDayTime = NEXT_TIME_NONE;
gSaveContext.retainWeatherMode = false;
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED;
@@ -2489,7 +2489,7 @@ void FileSelect_InitContext(GameState* thisx) {
Skybox_Init(&this->state, &this->skyboxCtx, 1);
R_TIME_SPEED = 10;
- envCtx->changeSkyboxState = 0;
+ envCtx->changeSkyboxState = CHANGE_SKYBOX_INACTIVE;
envCtx->changeSkyboxTimer = 0;
envCtx->changeLightEnabled = false;
envCtx->changeLightTimer = 0;
@@ -2531,15 +2531,15 @@ void FileSelect_Init(GameState* thisx) {
Font_LoadOrderedFont(&this->font);
size = SEGMENT_ROM_SIZE(title_static);
- this->staticSegment = THA_AllocTailAlign16(&this->state.heap, size);
+ this->staticSegment = THA_AllocTailAlign16(&this->state.tha, size);
DmaMgr_SendRequest0(this->staticSegment, SEGMENT_ROM_START(title_static), size);
size = SEGMENT_ROM_SIZE(parameter_static);
- this->parameterSegment = THA_AllocTailAlign16(&this->state.heap, size);
+ this->parameterSegment = THA_AllocTailAlign16(&this->state.tha, size);
DmaMgr_SendRequest0(this->parameterSegment, SEGMENT_ROM_START(parameter_static), size);
size = gObjectTable[OBJECT_MAG].vromEnd - gObjectTable[OBJECT_MAG].vromStart;
- this->titleSegment = THA_AllocTailAlign16(&this->state.heap, size);
+ this->titleSegment = THA_AllocTailAlign16(&this->state.tha, size);
DmaMgr_SendRequest0(this->titleSegment, gObjectTable[OBJECT_MAG].vromStart, size);
Audio_SetSpec(0xA);
diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_nameset_NES.c b/src/overlays/gamestates/ovl_file_choose/z_file_nameset_NES.c
index 2011d10fd..f8f228eaa 100644
--- a/src/overlays/gamestates/ovl_file_choose/z_file_nameset_NES.c
+++ b/src/overlays/gamestates/ovl_file_choose/z_file_nameset_NES.c
@@ -4,7 +4,6 @@
* Description: Entering name on a new file, selecting options from the options menu
*/
-#include "prevent_bss_reordering.h"
#include "z_file_select.h"
#include "z64rumble.h"
#include "misc/title_static/title_static.h"
diff --git a/src/overlays/gamestates/ovl_select/z_select.c b/src/overlays/gamestates/ovl_select/z_select.c
index 06775bf6e..7a79da010 100644
--- a/src/overlays/gamestates/ovl_select/z_select.c
+++ b/src/overlays/gamestates/ovl_select/z_select.c
@@ -51,7 +51,7 @@ void MapSelect_LoadGame(MapSelectState* this, u32 entrance, s32 spawn) {
gSaveContext.respawn[RESPAWN_MODE_ZORA].entrance = 0xFF;
gSaveContext.respawn[RESPAWN_MODE_DEKU].entrance = 0xFF;
gSaveContext.respawn[RESPAWN_MODE_HUMAN].entrance = 0xFF;
- gWeatherMode = 0;
+ gWeatherMode = WEATHER_MODE_CLEAR;
STOP_GAMESTATE(&this->state);
SET_NEXT_GAMESTATE(&this->state, Play_Init, sizeof(PlayState));
diff --git a/src/overlays/gamestates/ovl_title/z_title.c b/src/overlays/gamestates/ovl_title/z_title.c
index 21f034e12..5cebc2fca 100644
--- a/src/overlays/gamestates/ovl_title/z_title.c
+++ b/src/overlays/gamestates/ovl_title/z_title.c
@@ -7,6 +7,7 @@
#include "z_title.h"
#include "z64shrink_window.h"
#include "z64view.h"
+#include "CIC6105.h"
#include "overlays/gamestates/ovl_opening/z_opening.h"
#include "misc/nintendo_rogo_static/nintendo_rogo_static.h"
@@ -146,14 +147,14 @@ void ConsoleLogo_Destroy(GameState* thisx) {
Sram_InitSram(&this->state, &this->sramCtx);
ShrinkWindow_Destroy();
- CIC6105_Nop80081828();
+ CIC6105_Noop2();
}
void ConsoleLogo_Init(GameState* thisx) {
ConsoleLogoState* this = (ConsoleLogoState*)thisx;
uintptr_t segmentSize = SEGMENT_ROM_SIZE(nintendo_rogo_static);
- this->staticSegment = THA_AllocTailAlign16(&this->state.heap, segmentSize);
+ this->staticSegment = THA_AllocTailAlign16(&this->state.tha, segmentSize);
DmaMgr_SendRequest0(this->staticSegment, SEGMENT_ROM_START(nintendo_rogo_static), segmentSize);
GameState_SetFramerateDivisor(&this->state, 1);
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 b4ed531f8..ec1ca83ec 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
@@ -19,7 +19,7 @@ void KaleidoScope_DrawDungeonStrayFairyCount(PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
// Get digits for max number of stray fairies
- counterDigits[1] = 15;
+ counterDigits[1] = STRAY_FAIRY_SCATTERED_TOTAL;
counterDigits[0] = counterDigits[1] / 10;
counterDigits[1] -= (s16)(counterDigits[0] * 10);
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 6b451b506..c99e6d718 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
@@ -2799,10 +2799,14 @@ void KaleidoScope_UpdateOpening(PlayState* play) {
}
}
+u16 sCursorPointsToOcarinaModes[] = {
+ OCARINA_MODE_WARP_TO_GREAT_BAY_COAST, OCARINA_MODE_WARP_TO_ZORA_CAPE, OCARINA_MODE_WARP_TO_SNOWHEAD,
+ OCARINA_MODE_WARP_TO_MOUNTAIN_VILLAGE, OCARINA_MODE_WARP_TO_SOUTH_CLOCK_TOWN, OCARINA_MODE_WARP_TO_MILK_ROAD,
+ OCARINA_MODE_WARP_TO_WOODFALL, OCARINA_MODE_WARP_TO_SOUTHERN_SWAMP, OCARINA_MODE_WARP_TO_IKANA_CANYON,
+ OCARINA_MODE_WARP_TO_STONE_TOWER,
+};
+
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;
@@ -3484,7 +3488,7 @@ void KaleidoScope_Update(PlayState* play) {
pauseCtx->state = PAUSE_STATE_OWLWARP_6;
sPauseMenuVerticalOffset = -6240.0f;
Audio_PlaySfx_PauseMenuOpenOrClose(SFX_PAUSE_MENU_CLOSE);
- play->msgCtx.ocarinaMode = 4;
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
gSaveContext.prevHudVisibility = HUD_VISIBILITY_ALL;
} else if (CHECK_BTN_ALL(input->press.button, BTN_A)) {
Audio_PlaySfx(NA_SE_SY_DECIDE);
@@ -3498,7 +3502,7 @@ void KaleidoScope_Update(PlayState* play) {
case PAUSE_STATE_OWLWARP_CONFIRM:
if (CHECK_BTN_ALL(input->press.button, BTN_A)) {
msgCtx->msgLength = 0;
- msgCtx->msgMode = 0;
+ msgCtx->msgMode = MSGMODE_NONE;
if (msgCtx->choiceIndex == 0) {
func_8011552C(play, DO_ACTION_NONE);
pauseCtx->state = PAUSE_STATE_OWLWARP_6;
@@ -3513,17 +3517,17 @@ void KaleidoScope_Update(PlayState* play) {
}
} else if (CHECK_BTN_ALL(input->press.button, BTN_B)) {
msgCtx->msgLength = 0;
- msgCtx->msgMode = 0;
+ msgCtx->msgMode = MSGMODE_NONE;
pauseCtx->state = PAUSE_STATE_OWLWARP_SELECT;
Audio_PlaySfx(NA_SE_SY_MESSAGE_PASS);
} else if (CHECK_BTN_ALL(input->press.button, BTN_START)) {
msgCtx->msgLength = 0;
- msgCtx->msgMode = 0;
+ msgCtx->msgMode = MSGMODE_NONE;
func_8011552C(play, DO_ACTION_NONE);
pauseCtx->state = PAUSE_STATE_OWLWARP_6;
sPauseMenuVerticalOffset = -6240.0f;
Audio_PlaySfx_PauseMenuOpenOrClose(SFX_PAUSE_MENU_CLOSE);
- play->msgCtx.ocarinaMode = 4;
+ play->msgCtx.ocarinaMode = OCARINA_MODE_END;
gSaveContext.prevHudVisibility = HUD_VISIBILITY_ALL;
}
break;
@@ -3598,7 +3602,7 @@ void KaleidoScope_Update(PlayState* play) {
MsgEvent_SendNullTask();
func_80143324(play, &play->skyboxCtx, play->skyboxId);
- if ((msgCtx->msgMode != 0) && (msgCtx->currentTextId == 0xFF)) {
+ if ((msgCtx->msgMode != MSGMODE_NONE) && (msgCtx->currentTextId == 0xFF)) {
func_80115844(play, DO_ACTION_STOP);
func_8011552C(play, DO_ACTION_STOP);
Interface_SetHudVisibility(HUD_VISIBILITY_A_B_C);
diff --git a/tools/disasm/files.txt b/tools/disasm/files.txt
index e2d456ee6..56d6477ca 100644
--- a/tools/disasm/files.txt
+++ b/tools/disasm/files.txt
@@ -566,6 +566,7 @@
0x801C5FC0 : "z_sram_NES",
0x801C6A70 : "z_message",
0x801D0470 : "z_message_nes",
+ 0x801D0910 : "z_message_staff",
0x801D0B50 : "z_player_call",
0x801D0B70 : "z_kaleido_manager",
0x801D0BB0 : "",
diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt
index 0037daae5..3ba975791 100644
--- a/tools/disasm/functions.txt
+++ b/tools/disasm/functions.txt
@@ -40,12 +40,12 @@
0x800815CC:("IrqMgr_HandleRetrace",),
0x80081684:("IrqMgr_ThreadEntry",),
0x80081754:("IrqMgr_Init",),
- 0x80081820:("CIC6105_Nop80081820",),
- 0x80081828:("CIC6105_Nop80081828",),
+ 0x80081820:("CIC6105_Noop1",),
+ 0x80081828:("CIC6105_Noop2",),
0x80081830:("CIC6105_PrintRomInfo",),
0x8008189C:("CIC6105_AddRomInfoFaultPage",),
- 0x800818D0:("CIC6105_RemoveRomInfoFaultPage",),
- 0x800818F4:("func_800818F4",),
+ 0x800818D0:("CIC6105_Destroy",),
+ 0x800818F4:("CIC6105_Init",),
0x80081920:("osSyncPrintfUnused",),
0x8008193C:("osSyncPrintf",),
0x80081958:("rmonPrintf",),
@@ -1706,86 +1706,86 @@
0x800F4F54:("Font_LoadCharNES",),
0x800F4FC0:("Font_LoadMessageBoxEndIcon",),
0x800F5004:("Font_LoadOrderedFont",),
- 0x800F5090:("func_800F5090",),
+ 0x800F5090:("Environment_GraphCallback",),
0x800F50D4:("Environment_ZBufValToFixedPoint",),
0x800F510C:("Environment_Init",),
- 0x800F5954:("func_800F5954",),
+ 0x800F5954:("Environment_SmoothStepToU8",),
0x800F5A8C:("Environment_LerpWeight",),
- 0x800F5B10:("func_800F5B10",),
+ 0x800F5B10:("Environment_LerpWeightAccelDecel",),
0x800F5CD0:("Environment_UpdateSkybox",),
- 0x800F6834:("func_800F6834",),
- 0x800F694C:("func_800F694C",),
- 0x800F6A04:("func_800F6A04",),
- 0x800F6A40:("func_800F6A40",),
- 0x800F6AB8:("func_800F6AB8",),
- 0x800F6B44:("func_800F6B44",),
+ 0x800F6834:("Environment_EnableUnderwaterLights",),
+ 0x800F694C:("Environment_DisableUnderwaterLights",),
+ 0x800F6A04:("Environment_WipeRumbleRequests",),
+ 0x800F6A40:("Environment_UpdateSkyboxRotY",),
+ 0x800F6AB8:("Environment_UpdateNextDayTime",),
+ 0x800F6B44:("Environment_UpdateTime",),
0x800F6CEC:("func_800F6CEC",),
0x800F6EA4:("func_800F6EA4",),
- 0x800F6FCC:("Kankyo_IsSceneUpsideDown",),
- 0x800F6FF8:("func_800F6FF8",),
- 0x800F8554:("func_800F8554",),
+ 0x800F6FCC:("Environment_IsSceneUpsideDown",),
+ 0x800F6FF8:("Environment_UpdateLights",),
+ 0x800F8554:("Environment_UpdateSun",),
0x800F88C4:("func_800F88C4",),
0x800F8970:("func_800F8970",),
- 0x800F8A9C:("func_800F8A9C",),
+ 0x800F8A9C:("Environment_UpdatePostmanEvents",),
0x800F8CD4:("Environment_Update",),
- 0x800F8D84:("func_800F8D84",),
+ 0x800F8D84:("Environment_DrawSun",),
0x800F9728:("Environment_DrawSunLensFlare",),
- 0x800F9824:("func_800F9824",),
- 0x800FA39C:("func_800FA39C",),
- 0x800FA3C4:("func_800FA3C4",),
+ 0x800F9824:("Environment_DrawLensFlare",),
+ 0x800FA39C:("Environment_RandCentered",),
+ 0x800FA3C4:("Environment_DrawRainImpl",),
0x800FA9FC:("Environment_DrawRain",),
- 0x800FAAB4:("func_800FAAB4",),
- 0x800FAC20:("func_800FAC20",),
- 0x800FAF74:("func_800FAF74",),
- 0x800FB010:("func_800FB010",),
+ 0x800FAAB4:("Environment_ChangeLightSetting",),
+ 0x800FAC20:("Environment_DrawSkyboxFilters",),
+ 0x800FAF74:("Environment_DrawLightningFlash",),
+ 0x800FB010:("Environment_UpdateLightningStrike",),
0x800FB320:("Environment_AddLightningBolts",),
- 0x800FB388:("func_800FB388",),
- 0x800FB758:("func_800FB758",),
- 0x800FB9B4:("func_800FB9B4",),
+ 0x800FB388:("Environment_DrawLightning",),
+ 0x800FB758:("Environment_PlaySceneSequence",),
+ 0x800FB9B4:("Environment_UpdateTimeBasedSequence",),
0x800FBCBC:("Environment_DrawCustomLensFlare",),
- 0x800FBDEC:("Kankyo_InitGameOverLights",),
- 0x800FBF3C:("Kankyo_FadeInGameOverLights",),
- 0x800FC158:("Kankyo_FadeOutGameOverLights",),
- 0x800FC3DC:("func_800FC3DC",),
+ 0x800FBDEC:("Environment_InitGameOverLights",),
+ 0x800FBF3C:("Environment_FadeInGameOverLights",),
+ 0x800FC158:("Environment_FadeOutGameOverLights",),
+ 0x800FC3DC:("Environment_UpdateRain",),
0x800FC444:("Environment_FillScreen",),
0x800FC64C:("Environment_DrawSandstorm",),
- 0x800FD2B4:("func_800FD2B4",),
- 0x800FD538:("func_800FD538",),
+ 0x800FD2B4:("Environment_AdjustLights",),
+ 0x800FD538:("Environment_LerpRGB8",),
0x800FD59C:("Environment_LerpAmbientColor",),
0x800FD5E0:("Environment_LerpDiffuseColor",),
0x800FD654:("Environment_LerpFogColor",),
0x800FD698:("Environment_LerpFog",),
- 0x800FD720:("get_days_elapsed",),
- 0x800FD730:("reset_days_elapsed",),
- 0x800FD740:("get_current_day",),
- 0x800FD750:("func_800FD750",),
- 0x800FD768:("func_800FD768",),
- 0x800FD78C:("func_800FD78C",),
- 0x800FD858:("func_800FD858",),
- 0x800FD928:("func_800FD928",),
- 0x800FD980:("func_800FD980",),
- 0x800FDAF8:("func_800FDAF8",),
- 0x800FDC94:("func_800FDC94",),
- 0x800FE390:("func_800FE390",),
- 0x800FE3E0:("func_800FE3E0",),
+ 0x800FD720:("Environment_GetEventDayCount",),
+ 0x800FD730:("Environment_ClearEventDayCount",),
+ 0x800FD740:("Environment_GetTotalDays",),
+ 0x800FD750:("Environment_ForcePlaySequence",),
+ 0x800FD768:("Environment_IsForcedSequenceDisabled",),
+ 0x800FD78C:("Environment_PlayStormNatureAmbience",),
+ 0x800FD858:("Environment_StopStormNatureAmbience",),
+ 0x800FD928:("Environment_WarpSongLeave",),
+ 0x800FD980:("Environment_SetupSkyboxStars",),
+ 0x800FDAF8:("Environment_DrawSkyboxStar",),
+ 0x800FDC94:("Environment_DrawSkyboxStarsImpl",),
+ 0x800FE390:("Environment_Draw",),
+ 0x800FE3E0:("Environment_DrawSkyboxStars",),
0x800FE484:("Environment_StopTime",),
0x800FE498:("Environment_StartTime",),
0x800FE4A8:("Environment_IsTimeStopped",),
- 0x800FE4B8:("func_800FE4B8",),
- 0x800FE590:("func_800FE590",),
+ 0x800FE4B8:("Environment_GetStormState",),
+ 0x800FE590:("Environment_IsFinalHours",),
0x800FE5D0:("func_800FE5D0",),
0x800FE610:("func_800FE610",),
- 0x800FE620:("func_800FE620",),
- 0x800FE658:("func_800FE658",),
+ 0x800FE620:("Environment_GetTimeSpeed",),
+ 0x800FE658:("Environment_SetTimeJump",),
0x800FE6F8:("func_800FE6F8",),
- 0x800FE778:("func_800FE778",),
- 0x800FE788:("func_800FE788",),
- 0x800FE798:("func_800FE798",),
- 0x800FE7A8:("func_800FE7A8",),
+ 0x800FE778:("Environment_GetSandstormColorIndex",),
+ 0x800FE788:("Environment_GetNextSandstormColorIndex",),
+ 0x800FE798:("Environment_GetSandstormLerpScale",),
+ 0x800FE7A8:("Environment_LerpSandstormColors",),
0x800FE9B4:("func_800FE9B4",),
0x800FEA50:("func_800FEA50",),
0x800FEAB0:("func_800FEAB0",),
- 0x800FEAC0:("func_800FEAC0",),
+ 0x800FEAC0:("Environment_JumpForwardInTime",),
0x800FEAF4:("func_800FEAF4",),
0x800FEC90:("Lib_MemCpy",),
0x800FECC0:("Lib_MemSet",),
@@ -1849,7 +1849,7 @@
0x801000CC:("Lib_PlaySfx_2",),
0x801000F4:("Lib_PlaySfx_AtPos",),
0x8010011C:("Lib_Vec3f_TranslateAndRotateY",),
- 0x801001B8:("Lib_LerpRGB",),
+ 0x801001B8:("Color_RGB8_Lerp",),
0x80100448:("Math_Vec3f_StepTo",),
0x801004FC:("Lib_Nop801004FC",),
0x80100504:("Lib_SegmentedToVirtual",),
@@ -2199,7 +2199,7 @@
0x801234D4:("func_801234D4",),
0x80123590:("func_80123590",),
0x801235DC:("func_801235DC",),
- 0x8012364C:("func_8012364C",),
+ 0x8012364C:("Player_GetItemOnButton",),
0x80123810:("func_80123810",),
0x80123960:("Player_ActionToModelGroup",),
0x801239AC:("Player_SetModelsForHoldingShield",),
@@ -2415,10 +2415,10 @@
0x8012F1BC:("Inventory_IncrementSkullTokenCount",),
0x8012F22C:("Inventory_GetSkullTokenCount",),
0x8012F278:("Inventory_SaveLotteryCodeGuess",),
- 0x8012F2E0:("Object_Spawn",),
- 0x8012F3D0:("Object_InitBank",),
- 0x8012F4FC:("Object_UpdateBank",),
- 0x8012F608:("Object_GetIndex",),
+ 0x8012F2E0:("Object_SpawnPersistent",),
+ 0x8012F3D0:("Object_InitContext",),
+ 0x8012F4FC:("Object_UpdateEntries",),
+ 0x8012F608:("Object_GetSlot",),
0x8012F668:("Object_IsLoaded",),
0x8012F698:("Object_LoadAll",),
0x8012F73C:("func_8012F73C",),
@@ -2688,7 +2688,7 @@
0x8013D768:("SubS_MoveActorToPoint",),
0x8013D83C:("SubS_GetDistSqAndOrientPath",),
0x8013D8DC:("SubS_IsObjectLoaded",),
- 0x8013D924:("SubS_GetObjectIndex",),
+ 0x8013D924:("SubS_GetObjectSlot",),
0x8013D960:("SubS_FindActor",),
0x8013D9C8:("SubS_UpdateFidgetTables",),
0x8013DB90:("SubS_IsFloorAbove",),
@@ -2820,59 +2820,59 @@
0x80147314:("func_80147314",),
0x80147414:("func_80147414",),
0x8014750C:("Sram_nop8014750C",),
- 0x80147520:("func_80147520",),
- 0x80147564:("func_80147564",),
+ 0x80147520:("Message_ResetOcarinaButtonAlphas",),
+ 0x80147564:("Message_ResetOcarinaButtonState",),
0x80147624:("Message_ShouldAdvance",),
0x80147734:("Message_ShouldAdvanceSilent",),
0x801477B4:("Message_CloseTextbox",),
- 0x80147818:("func_80147818",),
+ 0x80147818:("Message_DrawTextboxIcon",),
0x80147F18:("func_80147F18",),
0x80148558:("func_80148558",),
- 0x80148B98:("func_80148B98",),
+ 0x80148B98:("Message_HandleChoiceSelection",),
0x80148CBC:("func_80148CBC",),
0x80148D64:("func_80148D64",),
0x80149048:("func_80149048",),
0x801491DC:("func_801491DC",),
0x80149454:("func_80149454",),
0x801496C8:("func_801496C8",),
- 0x8014995C:("func_8014995C",),
- 0x80149C18:("func_80149C18",),
+ 0x8014995C:("Message_DrawTextChar",),
+ 0x80149C18:("Message_GrowTextbox",),
0x80149EBC:("Message_FindMessage",),
- 0x80149F74:("func_80149F74",),
- 0x8014AAD0:("func_8014AAD0",),
- 0x8014ADBC:("func_8014ADBC",),
- 0x8014C70C:("func_8014C70C",),
+ 0x80149F74:("Message_DrawItemIcon",),
+ 0x8014AAD0:("Message_HandleOcarina",),
+ 0x8014ADBC:("Message_DrawTextDefault",),
+ 0x8014C70C:("Message_LoadItemIcon",),
0x8014CC14:("Message_LoadChar",),
0x8014CCB4:("func_8014CCB4",),
- 0x8014CDF0:("func_8014CDF0",),
- 0x8014CFDC:("func_8014CFDC",),
- 0x8014D304:("func_8014D304",),
- 0x8014D62C:("func_8014D62C",),
- 0x8014D7B4:("func_8014D7B4",),
+ 0x8014CDF0:("Message_GetTimerDigits",),
+ 0x8014CFDC:("Message_SetupLoadItemIcon",),
+ 0x8014D304:("Message_LoadTime",),
+ 0x8014D62C:("Message_LoadOwlWarpText",),
+ 0x8014D7B4:("Message_Decode",),
0x80150A84:("func_80150A84",),
- 0x80150D08:("func_80150D08",),
+ 0x80150D08:("Message_OpenText",),
0x801514B0:("func_801514B0",),
0x801518B0:("Message_StartTextbox",),
0x80151938:("Message_ContinueTextbox",),
- 0x80151A68:("func_80151A68",),
+ 0x80151A68:("Message_DisplaySceneTitleCard",),
0x80151BB4:("Message_BombersNotebookQueueEvent",),
- 0x80151C9C:("func_80151C9C",),
- 0x80151DA4:("func_80151DA4",),
- 0x80152434:("func_80152434",),
- 0x80152464:("func_80152464",),
+ 0x80151C9C:("Message_BombersNotebookProcessEventQueue",),
+ 0x80151DA4:("Message_DisplayOcarinaStaffImpl",),
+ 0x80152434:("Message_DisplayOcarinaStaff",),
+ 0x80152464:("Message_DisplayOcarinaStaffBlockSunsSong",),
0x80152498:("Message_GetState",),
- 0x8015268C:("func_8015268C",),
- 0x80152C64:("func_80152C64",),
+ 0x8015268C:("Message_DrawTextBox",),
+ 0x80152C64:("Message_SetView",),
0x80152CAC:("func_80152CAC",),
- 0x80152EC0:("func_80152EC0",),
- 0x80152FB8:("func_80152FB8",),
- 0x80153750:("func_80153750",),
- 0x80153E7C:("func_80153E7C",),
- 0x80153EF0:("func_80153EF0",),
- 0x801541D4:("func_801541D4",),
+ 0x80152EC0:("Message_SpawnSongEffect",),
+ 0x80152FB8:("Message_FlashOcarinaButtons",),
+ 0x80153750:("Message_DrawOcarinaButtons",),
+ 0x80153E7C:("Message_DrawText",),
+ 0x80153EF0:("Message_DrawSceneTitleCard",),
+ 0x801541D4:("Message_DrawMain",),
0x80156758:("Message_Draw",),
0x8015680C:("Message_Update",),
- 0x801586A4:("func_801586A4",),
+ 0x801586A4:("Message_SetTables",),
0x801586D4:("Message_Init",),
0x801588D0:("Message_FindMessageNES",),
0x80158988:("Message_LoadCharNES",),
@@ -2881,12 +2881,12 @@
0x80158D98:("Message_LoadRupeesNES",),
0x80158FB0:("Message_LoadTimeNES",),
0x8015926C:("Message_LoadOwlWarpTextNES",),
- 0x80159438:("func_80159438",),
- 0x8015966C:("func_8015966C",),
- 0x8015B198:("func_8015B198",),
+ 0x80159438:("Message_GetTimerDigitsNES",),
+ 0x8015966C:("Message_DrawTextNES",),
+ 0x8015B198:("Message_DecodeNES",),
0x8015E750:("Message_FindCreditsMessage",),
- 0x8015E7EC:("func_8015E7EC",),
- 0x8015F8A8:("func_8015F8A8",),
+ 0x8015E7EC:("Message_DrawTextCredits",),
+ 0x8015F8A8:("Message_DecodeCredits",),
0x80160A90:("PlayerCall_InitFuncPtrs",),
0x80160AF8:("PlayerCall_Init",),
0x80160B40:("PlayerCall_Destroy",),
@@ -3215,12 +3215,12 @@
0x80177084:("Sched_FaultClient",),
0x8017715C:("Sched_ThreadEntry",),
0x801772A0:("Sched_Init",),
- 0x80177390:("func_80177390",),
+ 0x80177390:("SpeedMeter_InitImpl",),
0x801773A0:("SpeedMeter_Init",),
0x801773C4:("SpeedMeter_Destroy",),
0x801773D0:("SpeedMeter_DrawTimeEntries",),
- 0x80177A84:("func_80177A84",),
- 0x80177AC8:("func_80177AC8",),
+ 0x80177A84:("SpeedMeter_InitAllocEntry",),
+ 0x80177AC8:("SpeedMeter_DrawAllocEntry",),
0x80177E58:("SpeedMeter_DrawAllocEntries",),
0x801780F0:("Mtx_SetTranslateScaleMtx",),
0x801781EC:("Mtx_SetRotationMtx",),
@@ -4256,7 +4256,7 @@
0x8082DC28:("func_8082DC28",),
0x8082DC38:("func_8082DC38",),
0x8082DC64:("func_8082DC64",),
- 0x8082DCA0:("func_8082DCA0",),
+ 0x8082DCA0:("Player_DetachHeldActor",),
0x8082DD2C:("func_8082DD2C",),
0x8082DE14:("func_8082DE14",),
0x8082DE50:("func_8082DE50",),
@@ -4314,7 +4314,7 @@
0x8082F164:("func_8082F164",),
0x8082F1AC:("func_8082F1AC",),
0x8082F43C:("Player_SetUpperAction",),
- 0x8082F470:("func_8082F470",),
+ 0x8082F470:("Player_InitItemActionWithAnim",),
0x8082F524:("Player_ItemToItemAction",),
0x8082F594:("Player_InitItemAction_DoNothing",),
0x8082F5A4:("Player_InitItemAction_DekuStick",),
@@ -4323,30 +4323,30 @@
0x8082F62C:("Player_InitItemAction_SpawnExplosive",),
0x8082F7F4:("Player_InitItemAction_SpawnHookshot",),
0x8082F8A0:("Player_InitItemAction_5",),
- 0x8082F8BC:("func_8082F8BC",),
+ 0x8082F8BC:("Player_InitItemAction",),
0x8082F938:("Player_OverrideBlureColors",),
0x8082FA5C:("func_8082FA5C",),
0x8082FB68:("func_8082FB68",),
0x8082FBE8:("func_8082FBE8",),
0x8082FC24:("func_8082FC24",),
0x8082FC60:("func_8082FC60",),
- 0x8082FC78:("func_8082FC78",),
- 0x8082FCC4:("func_8082FCC4",),
+ 0x8082FC78:("Player_ItemIsInUse",),
+ 0x8082FCC4:("Player_ItemIsItemAction",),
0x8082FD0C:("func_8082FD0C",),
0x8082FDC4:("func_8082FDC4",),
- 0x8082FE0C:("func_8082FE0C",),
- 0x808302CC:("func_808302CC",),
- 0x808304BC:("func_808304BC",),
+ 0x8082FE0C:("Player_ProcessItemButtons",),
+ 0x808302CC:("Player_StartChangingHeldItem",),
+ 0x808304BC:("Player_UpdateItems",),
0x808305BC:("func_808305BC",),
0x808306F8:("func_808306F8",),
- 0x808308DC:("func_808308DC",),
+ 0x808308DC:("Player_FinishItemChange",),
0x808309CC:("func_808309CC",),
0x80830A58:("func_80830A58",),
0x80830AE8:("func_80830AE8",),
0x80830B38:("func_80830B38",),
0x80830B88:("func_80830B88",),
0x80830CE8:("func_80830CE8",),
- 0x80830D40:("func_80830D40",),
+ 0x80830D40:("Player_WaitToFinishItemChange",),
0x80830DF0:("func_80830DF0",),
0x80830E30:("func_80830E30",),
0x80830F9C:("func_80830F9C",),
@@ -4362,15 +4362,15 @@
0x80831494:("Player_SetAction",),
0x8083172C:("Player_SetAction_PreserveMoveFlags",),
0x80831760:("Player_SetAction_PreserveItemAction",),
- 0x808317C4:("func_808317C4",),
+ 0x808317C4:("Player_DestroyHookshot",),
0x80831814:("func_80831814",),
0x808318C0:("func_808318C0",),
0x80831944:("func_80831944",),
- 0x80831990:("func_80831990",),
+ 0x80831990:("Player_UseItem",),
0x80831F34:("func_80831F34",),
- 0x80832090:("func_80832090",),
+ 0x80832090:("Player_CanUpdateItems",),
0x8083213C:("func_8083213C",),
- 0x8083216C:("func_8083216C",),
+ 0x8083216C:("Player_UpdateUpperBody",),
0x808323C0:("func_808323C0",),
0x80832444:("func_80832444",),
0x8083249C:("func_8083249C",),
@@ -4383,7 +4383,7 @@
0x80832CAC:("Player_CalcSpeedAndYawFromControlStick",),
0x80832F24:("func_80832F24",),
0x80832F78:("Player_GetMovementSpeedAndYaw",),
- 0x80833058:("func_80833058",),
+ 0x80833058:("Player_TryActionChangeList",),
0x808331FC:("func_808331FC",),
0x808332A0:("func_808332A0",),
0x808333CC:("func_808333CC",),
@@ -4413,7 +4413,7 @@
0x80834CD0:("func_80834CD0",),
0x80834D50:("func_80834D50",),
0x80834DB8:("func_80834DB8",),
- 0x80834DFC:("func_80834DFC",),
+ 0x80834DFC:("Player_ActionChange_12",),
0x80835324:("func_80835324",),
0x808353DC:("func_808353DC",),
0x80835428:("func_80835428",),
@@ -4430,7 +4430,7 @@
0x80835EAC:("Player_Door_Staircase",),
0x8083604C:("Player_Door_Sliding",),
0x80836258:("Player_Door_Knob",),
- 0x808365DC:("func_808365DC",),
+ 0x808365DC:("Player_ActionChange_1",),
0x80836888:("func_80836888",),
0x8083692C:("func_8083692C",),
0x80836988:("func_80836988",),
@@ -4470,9 +4470,9 @@
0x808388B8:("func_808388B8",),
0x808389BC:("func_808389BC",),
0x80838A20:("func_80838A20",),
- 0x80838A90:("func_80838A90",),
- 0x808391D8:("func_808391D8",),
- 0x80839518:("func_80839518",),
+ 0x80838A90:("Player_ActionChange_13",),
+ 0x808391D8:("Player_ActionChange_4",),
+ 0x80839518:("Player_ActionChange_0",),
0x808395F0:("func_808395F0",),
0x808396B8:("func_808396B8",),
0x80839770:("func_80839770",),
@@ -4481,19 +4481,19 @@
0x80839978:("func_80839978",),
0x80839A10:("func_80839A10",),
0x80839A84:("func_80839A84",),
- 0x80839B18:("func_80839B18",),
+ 0x80839B18:("Player_ActionChange_10",),
0x80839CD8:("func_80839CD8",),
0x80839E3C:("func_80839E3C",),
0x80839E74:("func_80839E74",),
0x80839ED0:("func_80839ED0",),
0x80839F98:("func_80839F98",),
0x8083A04C:("func_8083A04C",),
- 0x8083A0CC:("func_8083A0CC",),
- 0x8083A114:("func_8083A114",),
- 0x8083A274:("func_8083A274",),
+ 0x8083A0CC:("Player_ActionChange_14",),
+ 0x8083A114:("Player_ActionChange_6",),
+ 0x8083A274:("Player_ActionChange_11",),
0x8083A4A4:("func_8083A4A4",),
0x8083A548:("func_8083A548",),
- 0x8083A580:("func_8083A580",),
+ 0x8083A580:("Player_ActionChange_8",),
0x8083A658:("func_8083A658",),
0x8083A6C0:("func_8083A6C0",),
0x8083A794:("func_8083A794",),
@@ -4531,19 +4531,19 @@
0x8083CB04:("func_8083CB04",),
0x8083CB58:("func_8083CB58",),
0x8083CBC4:("func_8083CBC4",),
- 0x8083CCB4:("func_8083CCB4",),
+ 0x8083CCB4:("Player_ActionChange_3",),
0x8083CF68:("Player_HandleSlopes",),
0x8083D168:("func_8083D168",),
- 0x8083D23C:("func_8083D23C",),
+ 0x8083D23C:("Player_ActionChange_2",),
0x8083D6DC:("func_8083D6DC",),
0x8083D738:("func_8083D738",),
- 0x8083D78C:("func_8083D78C",),
+ 0x8083D78C:("Player_ActionChange_9",),
0x8083D860:("func_8083D860",),
0x8083DCC4:("func_8083DCC4",),
0x8083DD1C:("func_8083DD1C",),
0x8083DEE4:("func_8083DEE4",),
0x8083DF38:("func_8083DF38",),
- 0x8083DFC4:("func_8083DFC4",),
+ 0x8083DFC4:("Player_ActionChange_5",),
0x8083E14C:("func_8083E14C",),
0x8083E234:("func_8083E234",),
0x8083E28C:("func_8083E28C",),
@@ -4642,11 +4642,11 @@
0x808482E0:("func_808482E0",),
0x808484CC:("func_808484CC",),
0x808484F0:("func_808484F0",),
- 0x80848570:("func_80848570",),
+ 0x80848570:("Player_ActionChange_7",),
0x80848640:("func_80848640",),
0x80848780:("Player_UpperAction_0",),
0x808487B8:("Player_UpperAction_1",),
- 0x80848808:("Player_UpperAction_2",),
+ 0x80848808:("Player_UpperAction_ChangeHeldItem",),
0x8084894C:("Player_UpperAction_3",),
0x80848A0C:("Player_UpperAction_4",),
0x80848AB0:("Player_UpperAction_5",),
@@ -6263,17 +6263,17 @@
0x808CD238:("EnVm_Draw",),
0x808CD740:("DemoEffect_Init",),
0x808CD8E8:("DemoEffect_Destroy",),
- 0x808CD940:("func_808CD940",),
- 0x808CD998:("func_808CD998",),
- 0x808CDAD0:("func_808CDAD0",),
- 0x808CDBDC:("func_808CDBDC",),
- 0x808CDCEC:("func_808CDCEC",),
- 0x808CDD70:("func_808CDD70",),
- 0x808CDDE0:("func_808CDDE0",),
+ 0x808CD940:("DemoEffect_WaitForObject",),
+ 0x808CD998:("DemoEffect_SetupTimewarp",),
+ 0x808CDAD0:("DemoEffect_SetPerVertexAlpha",),
+ 0x808CDBDC:("DemoEffect_FinishTimewarp",),
+ 0x808CDCEC:("DemoEffect_StartTimewarp",),
+ 0x808CDD70:("DemoEffect_ShrinkLight",),
+ 0x808CDDE0:("DemoEffect_ExpandLight",),
0x808CDE54:("DemoEffect_Update",),
- 0x808CDE78:("func_808CDE78",),
- 0x808CDFF8:("func_808CDFF8",),
- 0x808CE078:("func_808CE078",),
+ 0x808CDE78:("DemoEffect_OverrideLimbDrawTimewarp",),
+ 0x808CDFF8:("DemoEffect_DrawTimewarp",),
+ 0x808CE078:("DemoEffect_DrawLight",),
0x808CE450:("DemoKankyo_SetupAction",),
0x808CE45C:("func_808CE45C",),
0x808CF06C:("func_808CF06C",),
@@ -7580,8 +7580,8 @@
0x80949BD4:("EnClearTag_DrawEffects",),
0x8094DEE0:("func_8094DEE0",),
0x8094DF90:("func_8094DF90",),
- 0x8094DFF8:("func_8094DFF8",),
- 0x8094E054:("func_8094E054",),
+ 0x8094DFF8:("EnGm_UpdateSkelAnime",),
+ 0x8094E054:("EnGm_ChangeAnim",),
0x8094E0F8:("func_8094E0F8",),
0x8094E1DC:("func_8094E1DC",),
0x8094E278:("func_8094E278",),
@@ -8641,20 +8641,20 @@
0x8099FD7C:("func_8099FD7C",),
0x8099FEB0:("EnGe3_Init",),
0x809A0044:("EnGe3_Destroy",),
- 0x809A0070:("func_809A0070",),
- 0x809A00F8:("func_809A00F8",),
- 0x809A020C:("func_809A020C",),
- 0x809A024C:("func_809A024C",),
- 0x809A0350:("func_809A0350",),
- 0x809A03AC:("func_809A03AC",),
- 0x809A03FC:("func_809A03FC",),
- 0x809A04D0:("func_809A04D0",),
- 0x809A0820:("func_809A0820",),
- 0x809A08A4:("func_809A08A4",),
+ 0x809A0070:("EnGe3_ChangeAnim",),
+ 0x809A00F8:("EnGe3_LookAtPlayer",),
+ 0x809A020C:("EnGe3_SetupPath",),
+ 0x809A024C:("EnGe3_FollowPath",),
+ 0x809A0350:("EnGe3_Scream",),
+ 0x809A03AC:("EnGe3_Idle",),
+ 0x809A03FC:("EnGe3_ThrowPlayerOut",),
+ 0x809A04D0:("EnGe3_AveilsChamberIdle",),
+ 0x809A0820:("EnGe3_UpdateColliderAndMove",),
+ 0x809A08A4:("EnGe3_Blink",),
0x809A0920:("EnGe3_Update",),
- 0x809A096C:("func_809A096C",),
- 0x809A0A14:("func_809A0A14",),
- 0x809A0C60:("func_809A0C60",),
+ 0x809A096C:("EnGe3_ValidatePictograph",),
+ 0x809A0A14:("EnGe3_OverrideLimbDraw",),
+ 0x809A0C60:("EnGe3_PostLimbDraw",),
0x809A0CBC:("EnGe3_Draw",),
0x809A0F20:("func_809A0F20",),
0x809A0F78:("func_809A0F78",),
@@ -9573,9 +9573,9 @@
0x80A07740:("func_80A07740",),
0x80A0A8A0:("BgDyYoseizo_Init",),
0x80A0A95C:("BgDyYoseizo_Destroy",),
- 0x80A0A96C:("func_80A0A96C",),
- 0x80A0A9E4:("func_80A0A9E4",),
- 0x80A0AA40:("func_80A0AA40",),
+ 0x80A0A96C:("BgDyYoseizo_UpdateEyes",),
+ 0x80A0A9E4:("BgDyYoseizo_Bob",),
+ 0x80A0AA40:("BgDyYoseizo_SpawnEffects",),
0x80A0AD50:("func_80A0AD50",),
0x80A0AE1C:("func_80A0AE1C",),
0x80A0AFDC:("func_80A0AFDC",),
@@ -9587,14 +9587,14 @@
0x80A0B5F0:("func_80A0B5F0",),
0x80A0B75C:("func_80A0B75C",),
0x80A0B834:("func_80A0B834",),
- 0x80A0B8CC:("func_80A0B8CC",),
+ 0x80A0B8CC:("BgDyYoseizo_TrainPlayer",),
0x80A0BB08:("func_80A0BB08",),
0x80A0BC84:("BgDyYoseizo_Update",),
- 0x80A0BCD8:("func_80A0BCD8",),
- 0x80A0BD40:("func_80A0BD40",),
- 0x80A0BE60:("func_80A0BE60",),
- 0x80A0BF70:("func_80A0BF70",),
- 0x80A0C270:("func_80A0C270",),
+ 0x80A0BCD8:("BgDyYoseizo_OverrideLimbDraw",),
+ 0x80A0BD40:("BgDyYoseizo_Draw",),
+ 0x80A0BE60:("BgDyYoseizo_SpawnEffect",),
+ 0x80A0BF70:("BgDyYoseizo_UpdateEffects",),
+ 0x80A0C270:("BgDyYoseizo_DrawEffects",),
0x80A0C780:("EnBoj05_Init",),
0x80A0C790:("EnBoj05_Destroy",),
0x80A0C7A0:("EnBoj05_Update",),
@@ -9607,7 +9607,7 @@
0x80A0CC88:("EnSob1_GetGoodbye",),
0x80A0CCEC:("EnSob1_BombShopkeeper_EndInteraction",),
0x80A0CD48:("EnSob1_SpawnShopItems",),
- 0x80A0CE10:("EnSob1_GetObjIndices",),
+ 0x80A0CE10:("EnSob1_GetObjectIndices",),
0x80A0CED4:("EnSob1_Init",),
0x80A0D008:("EnSob1_Destroy",),
0x80A0D034:("EnSob1_UpdateCursorPos",),
@@ -9696,7 +9696,7 @@
0x80A12774:("EnGo_UpdateTalking",),
0x80A12868:("EnGo_DetectCollisions",),
0x80A12954:("EnGo_UpdateSpringArrivalCutscene",),
- 0x80A12A64:("EnGo_UpdateAnimationToCurrent",),
+ 0x80A12A64:("EnGo_UpdateSkelAnime",),
0x80A12B78:("EnGo_UpdateSfx",),
0x80A12C48:("EnGo_ChangeAnim",),
0x80A12D6C:("EnGo_UpdateEyes",),
@@ -10266,16 +10266,16 @@
0x80A38FB4:("EnRu_OverrideLimbdraw",),
0x80A390F8:("EnRu_PostLimbdraw",),
0x80A39204:("EnRu_Draw",),
- 0x80A396B0:("func_80A396B0",),
+ 0x80A396B0:("EnElfgrp_SetCutscene",),
0x80A3970C:("EnElfgrp_Init",),
0x80A39BC0:("EnElfgrp_Destroy",),
- 0x80A39BD0:("func_80A39BD0",),
- 0x80A39C1C:("func_80A39C1C",),
- 0x80A39CD4:("func_80A39CD4",),
- 0x80A39DC8:("func_80A39DC8",),
- 0x80A39F50:("func_80A39F50",),
- 0x80A39FBC:("func_80A39FBC",),
- 0x80A3A044:("func_80A3A044",),
+ 0x80A39BD0:("EnElfgrp_GetHeldFairiesCount",),
+ 0x80A39C1C:("EnElfgrp_GetFountainFairiesCount",),
+ 0x80A39CD4:("EnElfgrp_SetFountainFairiesCount",),
+ 0x80A39DC8:("EnElfgrp_SpawnStrayFairies",),
+ 0x80A39F50:("EnElfgrp_SummonStrayFairies",),
+ 0x80A39FBC:("EnElfgrp_SpinStrayFairies",),
+ 0x80A3A044:("EnElfgrp_VanishStrayFairies",),
0x80A3A0AC:("func_80A3A0AC",),
0x80A3A0F4:("func_80A3A0F4",),
0x80A3A210:("func_80A3A210",),
@@ -10284,8 +10284,8 @@
0x80A3A484:("func_80A3A484",),
0x80A3A4AC:("func_80A3A4AC",),
0x80A3A520:("func_80A3A520",),
- 0x80A3A600:("func_80A3A600",),
- 0x80A3A610:("func_80A3A610",),
+ 0x80A3A600:("EnElfgrp_DoNothing",),
+ 0x80A3A610:("EnElfgrp_HealPlayer",),
0x80A3A6F4:("func_80A3A6F4",),
0x80A3A77C:("func_80A3A77C",),
0x80A3A7FC:("func_80A3A7FC",),
@@ -10546,8 +10546,8 @@
0x80A4F4C8:("func_80A4F4C8",),
0x80A4FA40:("DemoGetitem_Init",),
0x80A4FB00:("DemoGetitem_Destroy",),
- 0x80A4FB10:("func_80A4FB10",),
- 0x80A4FB68:("func_80A4FB68",),
+ 0x80A4FB10:("DemoGetitem_Wait",),
+ 0x80A4FB68:("DemoGetitem_PerformCutsceneActions",),
0x80A4FCCC:("DemoGetitem_Update",),
0x80A4FCF0:("DemoGetitem_Draw",),
0x80A4FDD0:("func_80A4FDD0",),
@@ -10752,8 +10752,8 @@
0x80A61040:("BgSpoutFire_Draw",),
0x80A612B0:("EnDyExtra_Destroy",),
0x80A612C0:("EnDyExtra_Init",),
- 0x80A61334:("func_80A61334",),
- 0x80A613C8:("func_80A613C8",),
+ 0x80A61334:("EnDyExtra_WaitForTrigger",),
+ 0x80A613C8:("EnDyExtra_Fall",),
0x80A61470:("EnDyExtra_Update",),
0x80A614C4:("EnDyExtra_Draw",),
0x80A61810:("EnBal_Init",),
@@ -12240,44 +12240,44 @@
0x80AD6CBC:("BgLotus_Draw",),
0x80AD6DD0:("EnKame_Init",),
0x80AD6F08:("EnKame_Destroy",),
- 0x80AD6F34:("func_80AD6F34",),
- 0x80AD6F9C:("func_80AD6F9C",),
- 0x80AD7018:("func_80AD7018",),
- 0x80AD70A0:("func_80AD70A0",),
- 0x80AD70EC:("func_80AD70EC",),
- 0x80AD71B4:("func_80AD71B4",),
- 0x80AD7254:("func_80AD7254",),
- 0x80AD73A8:("func_80AD73A8",),
- 0x80AD7424:("func_80AD7424",),
- 0x80AD7568:("func_80AD7568",),
- 0x80AD75A8:("func_80AD75A8",),
- 0x80AD76CC:("func_80AD76CC",),
- 0x80AD7798:("func_80AD7798",),
- 0x80AD792C:("func_80AD792C",),
- 0x80AD7948:("func_80AD7948",),
- 0x80AD7B18:("func_80AD7B18",),
- 0x80AD7B90:("func_80AD7B90",),
- 0x80AD7C54:("func_80AD7C54",),
- 0x80AD7D40:("func_80AD7D40",),
- 0x80AD7DA4:("func_80AD7DA4",),
- 0x80AD7E0C:("func_80AD7E0C",),
- 0x80AD7EC0:("func_80AD7EC0",),
- 0x80AD7F10:("func_80AD7F10",),
- 0x80AD7FA4:("func_80AD7FA4",),
- 0x80AD7FF8:("func_80AD7FF8",),
- 0x80AD8060:("func_80AD8060",),
- 0x80AD810C:("func_80AD810C",),
- 0x80AD8148:("func_80AD8148",),
- 0x80AD825C:("func_80AD825C",),
- 0x80AD8364:("func_80AD8364",),
- 0x80AD8388:("func_80AD8388",),
- 0x80AD84C0:("func_80AD84C0",),
+ 0x80AD6F34:("EnKame_Blink",),
+ 0x80AD6F9C:("EnKame_Freeze",),
+ 0x80AD7018:("EnKame_Thaw",),
+ 0x80AD70A0:("EnKame_SetupIdle",),
+ 0x80AD70EC:("EnKame_Idle",),
+ 0x80AD71B4:("EnKame_SetupWalk",),
+ 0x80AD7254:("EnKame_Walk",),
+ 0x80AD73A8:("EnKame_SetupRetreatIntoShell",),
+ 0x80AD7424:("EnKame_RetreatIntoShell",),
+ 0x80AD7568:("EnKame_SetAttackSpeed",),
+ 0x80AD75A8:("EnKame_ProcessAttackEffects",),
+ 0x80AD76CC:("EnKame_SetupPrepareToAttack",),
+ 0x80AD7798:("EnKame_PrepareToAttack",),
+ 0x80AD792C:("EnKame_SetupAttack",),
+ 0x80AD7948:("EnKame_Attack",),
+ 0x80AD7B18:("EnKame_SetupEmergeFromShell",),
+ 0x80AD7B90:("EnKame_EmergeFromShell",),
+ 0x80AD7C54:("EnKame_SetupFlip",),
+ 0x80AD7D40:("EnKame_Flip",),
+ 0x80AD7DA4:("EnKame_SetupStruggle",),
+ 0x80AD7E0C:("EnKame_Struggle",),
+ 0x80AD7EC0:("EnKame_SetupFlipUpright",),
+ 0x80AD7F10:("EnKame_FlipUpright",),
+ 0x80AD7FA4:("EnKame_SetupStunned",),
+ 0x80AD7FF8:("EnKame_Stunned",),
+ 0x80AD8060:("EnKame_SetupDamaged",),
+ 0x80AD810C:("EnKame_Damaged",),
+ 0x80AD8148:("EnKame_SetupDead",),
+ 0x80AD825C:("EnKame_Dead",),
+ 0x80AD8364:("EnKame_SetupBurstIntoFlames",),
+ 0x80AD8388:("EnKame_BurstIntoFlames",),
+ 0x80AD84C0:("EnKame_UpdateDamage",),
0x80AD881C:("EnKame_Update",),
- 0x80AD8A48:("func_80AD8A48",),
- 0x80AD8AF8:("func_80AD8AF8",),
+ 0x80AD8A48:("EnKame_OverrideLimbDraw",),
+ 0x80AD8AF8:("EnKame_PostLimbDraw",),
0x80AD8BC0:("EnKame_Draw",),
- 0x80AD8CEC:("Enkame_OverrideLimbDraw",),
- 0x80AD8D64:("func_80AD8D64",),
+ 0x80AD8CEC:("EnKame_SpikedSnapperOverrideLimbDraw",),
+ 0x80AD8D64:("EnKame_DrawSpikedSnapper",),
0x80AD9240:("func_80AD9240",),
0x80AD92FC:("func_80AD92FC",),
0x80AD9358:("func_80AD9358",),
@@ -12656,15 +12656,15 @@
0x80AF3144:("EnTest7_Update",),
0x80AF31D0:("func_80AF31D0",),
0x80AF3248:("EnTest7_Draw",),
- 0x80AF3910:("func_80AF3910",),
+ 0x80AF3910:("ObjLightblock_SpawnEffect",),
0x80AF397C:("ObjLightblock_Init",),
0x80AF3A80:("ObjLightblock_Destroy",),
- 0x80AF3AC8:("func_80AF3AC8",),
- 0x80AF3ADC:("func_80AF3ADC",),
- 0x80AF3B8C:("func_80AF3B8C",),
- 0x80AF3BA0:("func_80AF3BA0",),
- 0x80AF3C18:("func_80AF3C18",),
- 0x80AF3C34:("func_80AF3C34",),
+ 0x80AF3AC8:("ObjLightblock_SetupWait",),
+ 0x80AF3ADC:("ObjLightblock_Wait",),
+ 0x80AF3B8C:("ObjLightblock_SetupPlayCutscene",),
+ 0x80AF3BA0:("ObjLightblock_PlayCutscene",),
+ 0x80AF3C18:("ObjLightblock_SetupFadeAway",),
+ 0x80AF3C34:("ObjLightblock_FadeAway",),
0x80AF3CC0:("ObjLightblock_Update",),
0x80AF3CE4:("ObjLightblock_Draw",),
0x80AF3F70:("func_80AF3F70",),
@@ -13493,7 +13493,7 @@
0x80B33E54:("EnKbt_Destroy",),
0x80B33E64:("func_80B33E64",),
0x80B33E8C:("func_80B33E8C",),
- 0x80B33EF0:("func_80B33EF0",),
+ 0x80B33EF0:("EnKbt_ChangeAnim",),
0x80B3403C:("func_80B3403C",),
0x80B34078:("func_80B34078",),
0x80B3415C:("func_80B3415C",),
@@ -13678,7 +13678,7 @@
0x80B40800:("EnKgy_Init",),
0x80B40B04:("EnKgy_Destroy",),
0x80B40B38:("func_80B40B38",),
- 0x80B40BC0:("func_80B40BC0",),
+ 0x80B40BC0:("EnKgy_ChangeAnimLoopMorph",),
0x80B40BFC:("func_80B40BFC",),
0x80B40C38:("func_80B40C38",),
0x80B40C74:("func_80B40C74",),
@@ -15302,8 +15302,8 @@
0x80BB1C8C:("func_80BB1C8C",),
0x80BB1D04:("func_80BB1D04",),
0x80BB1D64:("func_80BB1D64",),
- 0x80BB1FCC:("func_80BB1FCC",),
- 0x80BB2020:("func_80BB2020",),
+ 0x80BB1FCC:("EnGeg_UpdateSkelAnime",),
+ 0x80BB2020:("EnGeg_ChangeAnim",),
0x80BB2088:("func_80BB2088",),
0x80BB217C:("func_80BB217C",),
0x80BB221C:("func_80BB221C",),
@@ -15482,8 +15482,8 @@
0x80BC11B4:("EnNb_PostLimbDraw",),
0x80BC1278:("EnNb_TransformLimbDraw",),
0x80BC1374:("EnNb_Draw",),
- 0x80BC1900:("func_80BC1900",),
- 0x80BC192C:("func_80BC192C",),
+ 0x80BC1900:("EnJa_UpdateSkelAnime",),
+ 0x80BC192C:("EnJa_ChangeAnim",),
0x80BC1984:("func_80BC1984",),
0x80BC19FC:("func_80BC19FC",),
0x80BC1A68:("func_80BC1A68",),
@@ -15951,7 +15951,7 @@
0x80BDAF24:("ObjHsStump_Draw",),
0x80BDB040:("EnHiddenNuts_Init",),
0x80BDB188:("EnHiddenNuts_Destroy",),
- 0x80BDB1B4:("func_80BDB1B4",),
+ 0x80BDB1B4:("EnHiddenNuts_ChangeAnim",),
0x80BDB268:("func_80BDB268",),
0x80BDB2B8:("func_80BDB2B8",),
0x80BDB580:("func_80BDB580",),
@@ -16283,8 +16283,8 @@
0x80BF0F10:("EffStk_Draw",),
0x80BF1150:("func_80BF1150",),
0x80BF1200:("func_80BF1200",),
- 0x80BF1258:("func_80BF1258",),
- 0x80BF1284:("func_80BF1284",),
+ 0x80BF1258:("EnIg_UpdateSkelAnime",),
+ 0x80BF1284:("EnIg_ChangeAnim",),
0x80BF1354:("func_80BF1354",),
0x80BF13E4:("func_80BF13E4",),
0x80BF146C:("func_80BF146C",),
diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt
index cde420f3f..d5a869f12 100644
--- a/tools/disasm/variables.txt
+++ b/tools/disasm/variables.txt
@@ -21,7 +21,7 @@
0x80096B50:("gDmaMgrDmaBuffSize","u32","",0x4),
0x80096B60:("gIrqMgrResetStatus","vs32","",0x4),
0x80096B68:("sIrqMgrResetTime","volatile OSTime","",0x8),
- 0x80096B70:("sIrqMgrRetraceTime","volatile OSTime","",0x8),
+ 0x80096B70:("gIrqMgrRetraceTime","volatile OSTime","",0x8),
0x80096B78:("sIrqMgrRetraceCount","s32","",0x4),
0x80096B80:("sCpuExceptions","char*","[18]",0x48),
0x80096BC8:("sFpuExceptions","char*","[6]",0x18),
@@ -310,9 +310,9 @@
0x8009BE18:("sYaz0CurSize","u32","",0x4),
0x8009BE1C:("sYaz0MaxPtr","u8*","",0x4),
0x8009BE20:("gYaz0DecompressDstEnd","void*","",0x4),
- 0x8009BE30:("D_8009BE30","UNK_TYPE4","",0x4),
- 0x8009BE34:("D_8009BE34","UNK_TYPE4","",0x4),
- 0x8009BE38:("romInfoFaultClient","FaultClient","",0x10),
+ 0x8009BE30:("gCICAddr1Val","UNK_TYPE4","",0x4),
+ 0x8009BE34:("gCICAddr2Val","UNK_TYPE4","",0x4),
+ 0x8009BE38:("sRomInfoFaultClient","FaultClient","",0x10),
0x8009BE50:("sFaultInstance","FaultMgr*","",0x4),
0x8009BE54:("sFaultTimeTotal","f32","",0x4),
0x8009BE58:("faultCustomOptions","u32","",0x4),
@@ -946,36 +946,33 @@
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),
- 0x801BDB98:("D_801BDB98","UNK_TYPE4","",0x4),
- 0x801BDB9C:("D_801BDB9C","UNK_TYPE2","",0x2),
- 0x801BDBA0:("D_801BDBA0","UNK_TYPE1","",0x1),
- 0x801BDBA4:("D_801BDBA4","UNK_TYPE1","",0x1),
+ 0x801BDB90:("sSandstormLerpScale","f32","",0x4),
+ 0x801BDB94:("sSunScreenDepth","UNK_TYPE4","",0x4),
+ 0x801BDB98:("sEnvSkyboxNumStars","UNK_TYPE4","",0x4),
+ 0x801BDB9C:("sTimeJump","UNK_TYPE2","",0x2),
+ 0x801BDBA0:("sSandstormColorIndex","UNK_TYPE1","",0x1),
+ 0x801BDBA4:("sNextSandstormColorIndex","UNK_TYPE1","",0x1),
0x801BDBA8:("D_801BDBA8","UNK_TYPE1","",0x1),
0x801BDBB0:("gWeatherMode","u8","",0x1),
- 0x801BDBB4:("D_801BDBB4","UNK_TYPE1","",0x1),
- 0x801BDBB8:("D_801BDBB8","UNK_TYPE1","",0x1),
- 0x801BDBBC:("D_801BDBBC","UNK_TYPE1","",0x1),
+ 0x801BDBB4:("gLightConfigAfterUnderwater","UNK_TYPE1","",0x1),
+ 0x801BDBB8:("gInterruptSongOfStorms","UNK_TYPE1","",0x1),
+ 0x801BDBBC:("sSkyboxIsChanging","UNK_TYPE1","",0x1),
0x801BDBC0:("D_801BDBC0","UNK_TYPE1","",0x1),
0x801BDBC4:("D_801BDBC4","UNK_TYPE1","",0x1),
- 0x801BDBC8:("D_801BDBC8","u8","",0x1),
- 0x801BDBCC:("D_801BDBCC","UNK_TYPE1","",0x1),
- 0x801BDCF4:("D_801BDCF4","UNK_TYPE1","",0x1),
- 0x801BE38E:("D_801BE38E","UNK_TYPE1","",0x1),
- 0x801BE38F:("D_801BE38F","UNK_TYPE1","",0x1),
- 0x801BE390:("D_801BE390","UNK_TYPE1","",0x1),
- 0x801BE4D4:("D_801BE4D4","UNK_TYPE1","",0x1),
- 0x801BE4F4:("D_801BE4F4","UNK_TYPE1","",0x1),
- 0x801BE534:("D_801BE534","UNK_TYPE1","",0x1),
- 0x801BE6D4:("D_801BE6D4","UNK_TYPE1","",0x1),
- 0x801BE874:("D_801BE874","UNK_TYPE1","",0x1),
- 0x801BE894:("D_801BE894","UNK_TYPE4","",0x4),
- 0x801BE8BC:("D_801BE8BC","UNK_TYPE4","",0x4),
- 0x801BE8E4:("D_801BE8E4","UNK_TYPE4","",0x4),
- 0x801BE90C:("D_801BE90C","UNK_TYPE1","",0x1),
- 0x801BE92C:("D_801BE92C","UNK_TYPE1","",0x1),
- 0x801BE944:("D_801BE944","UNK_TYPE1","",0x1),
+ 0x801BDBC8:("gSceneSeqState","u8","",0x1),
+ 0x801BDBCC:("sTimeBasedLightConfigs","UNK_TYPE1","",0x1),
+ 0x801BDCF4:("sTimeBasedSkyboxConfigs","TimeBasedSkyboxEntry","[28][9]",0x7E0),
+ 0x801BE4D4:("sNormalSkyFiles","UNK_TYPE1","",0x1),
+ 0x801BE4F4:("sZBufValConversionTable","UNK_TYPE1","",0x1),
+ 0x801BE534:("sSkyboxPrimColors","UNK_TYPE1","",0x1),
+ 0x801BE6D4:("sSkyboxEnvColors","UNK_TYPE1","",0x1),
+ 0x801BE874:("sLensFlareColors","UNK_TYPE1","",0x1),
+ 0x801BE894:("sLensFlareScales","UNK_TYPE4","",0x4),
+ 0x801BE8BC:("sLensFlareAlphas","UNK_TYPE4","",0x4),
+ 0x801BE8E4:("sLensFlareTypes","UNK_TYPE4","",0x4),
+ 0x801BE90C:("sLightningTextures","UNK_TYPE1","",0x1),
+ 0x801BE92C:("sSandstormPrimColors","UNK_TYPE1","",0x1),
+ 0x801BE944:("sSandstormEnvColors","UNK_TYPE1","",0x1),
0x801BE960:("sInitChainHandlers","actor_init_var_func","[11]",0x2c),
0x801BE990:("sHeartsPrimColors","s16","[3][3]",0x12),
0x801BE9A4:("sHeartsEnvColors","s16","[3][3]",0x12),
@@ -1326,7 +1323,7 @@
0x801C2650:("naviQuestHintFiles","RomFile","[2]",0x10),
0x801C2660:("sceneTextureFiles","RomFile","[9]",0x48),
0x801C26A8:("sSceneCmdHandlers","scene_header_func","[31]",0x7c),
- 0x801C2730:("gPlayerFormObjectIndices","s16","[5]",0xA),
+ 0x801C2730:("gPlayerFormObjectIds","s16","[5]",0xA),
0x801C273C:("gObjectTableSize","ObjectId","",0x4),
0x801C2740:("gObjectTable","RomFile","[643]",0x1418),
0x801C3B60:("sSceneDrawDefaultDL","Gfx","[11]",0x58),
@@ -1941,44 +1938,34 @@
0x801C6A50:("D_801C6A50","UNK_TYPE1","",0x1),
0x801C6A58:("D_801C6A58","UNK_TYPE1","",0x1),
0x801C6A70:("D_801C6A70","UNK_TYPE1","",0x1),
- 0x801C6A74:("D_801C6A74","UNK_TYPE2","",0x2),
- 0x801C6A78:("D_801C6A78","UNK_TYPE2","",0x2),
- 0x801C6A7C:("D_801C6A7C","UNK_TYPE2","",0x2),
- 0x801C6A80:("D_801C6A80","UNK_TYPE2","",0x2),
- 0x801C6A84:("D_801C6A84","UNK_TYPE2","",0x2),
- 0x801C6A88:("D_801C6A88","UNK_TYPE2","",0x2),
- 0x801C6A8C:("D_801C6A8C","UNK_TYPE2","",0x2),
- 0x801C6A90:("D_801C6A90","UNK_TYPE2","",0x2),
+ 0x801C6A74:("sOcarinaButtonIndexBufPos","UNK_TYPE2","",0x2),
+ 0x801C6A78:("sOcarinaButtonIndexBufLen","UNK_TYPE2","",0x2),
+ 0x801C6A7C:("sLastPlayedSong","UNK_TYPE2","",0x2),
+ 0x801C6A80:("sOcarinaButtonStepR","UNK_TYPE2","",0x2),
+ 0x801C6A84:("sOcarinaButtonStepG","UNK_TYPE2","",0x2),
+ 0x801C6A88:("sOcarinaButtonStepB","UNK_TYPE2","",0x2),
+ 0x801C6A8C:("sOcarinaButtonFlashTimer","UNK_TYPE2","",0x2),
+ 0x801C6A90:("sOcarinaButtonFlashColorIndex","UNK_TYPE2","",0x2),
0x801C6A94:("D_801C6A94","UNK_TYPE2","",0x2),
0x801C6A98:("gPageSwitchNextButtonStatus","UNK_TYPE1","",0x1),
0x801C6AB8:("sBombersNotebookEventMessages","UNK_TYPE1","",0x1),
0x801C6B28:("gBombersNotebookWeekEventFlags","UNK_TYPE1","",0x1),
0x801C6B98:("D_801C6B98","UNK_TYPE1","",0x1),
- 0x801CED40:("D_801CED40","UNK_TYPE1","",0x1),
0x801CFB08:("D_801CFB08","UNK_TYPE1","",0x1),
- 0x801CFC78:("D_801CFC78","UNK_TYPE2","",0x2),
- 0x801CFC7A:("D_801CFC7A","UNK_TYPE1","",0x1),
- 0x801CFC7C:("D_801CFC7C","UNK_TYPE1","",0x1),
- 0x801CFC7E:("D_801CFC7E","UNK_TYPE1","",0x1),
- 0x801CFC84:("D_801CFC84","UNK_TYPE1","",0x1),
- 0x801CFC88:("D_801CFC88","UNK_TYPE1","",0x1),
- 0x801CFC8C:("D_801CFC8C","UNK_TYPE1","",0x1),
- 0x801CFC8E:("D_801CFC8E","UNK_TYPE1","",0x1),
- 0x801CFC92:("D_801CFC92","UNK_TYPE1","",0x1),
- 0x801CFC98:("D_801CFC98","UNK_TYPE1","",0x1),
- 0x801CFCA4:("D_801CFCA4","UNK_TYPE2","",0x2),
- 0x801CFCAC:("D_801CFCAC","UNK_TYPE2","",0x2),
+ 0x801CFC78:("D_801CFC78","s16","[15]",0x1E),
+ 0x801CFC98:("sOcarinaButtonIndexBuf","UNK_TYPE1","",0x1),
+ 0x801CFCA4:("sOcarinaButtonAlphaValues","UNK_TYPE2","",0x2),
0x801CFCB8:("gOcarinaSongItemMap","UNK_TYPE1","",0x1),
- 0x801CFCD8:("D_801CFCD8","UNK_TYPE2","",0x2),
- 0x801CFCE4:("D_801CFCE4","UNK_TYPE2","",0x2),
- 0x801CFCF0:("D_801CFCF0","UNK_TYPE2","",0x2),
- 0x801CFCF4:("D_801CFCF4","UNK_TYPE2","",0x2),
- 0x801CFCF8:("D_801CFCF8","UNK_TYPE2","",0x2),
- 0x801CFCFC:("D_801CFCFC","UNK_TYPE2","",0x2),
- 0x801CFD00:("D_801CFD00","UNK_TYPE2","",0x2),
- 0x801CFD04:("D_801CFD04","UNK_TYPE2","",0x2),
- 0x801CFD08:("D_801CFD08","UNK_TYPE2","",0x2),
- 0x801CFD0C:("D_801CFD0C","UNK_TYPE2","",0x2),
+ 0x801CFCD8:("sIconPrimColors","UNK_TYPE2","",0x2),
+ 0x801CFCE4:("sIconEnvColors","UNK_TYPE2","",0x2),
+ 0x801CFCF0:("sIconPrimR","UNK_TYPE2","",0x2),
+ 0x801CFCF4:("sIconPrimG","UNK_TYPE2","",0x2),
+ 0x801CFCF8:("sIconPrimB","UNK_TYPE2","",0x2),
+ 0x801CFCFC:("sIconFlashTimer","UNK_TYPE2","",0x2),
+ 0x801CFD00:("sIconFlashColorIndex","UNK_TYPE2","",0x2),
+ 0x801CFD04:("sIconEnvR","UNK_TYPE2","",0x2),
+ 0x801CFD08:("sIconEnvG","UNK_TYPE2","",0x2),
+ 0x801CFD0C:("sIconEnvB","UNK_TYPE2","",0x2),
0x801CFD10:("D_801CFD10","UNK_TYPE2","",0x2),
0x801CFD1C:("D_801CFD1C","UNK_TYPE2","",0x2),
0x801CFD28:("D_801CFD28","UNK_TYPE2","",0x2),
@@ -1999,24 +1986,24 @@
0x801CFD74:("D_801CFD74","UNK_TYPE2","",0x2),
0x801CFD78:("D_801CFD78","UNK_TYPE2","",0x2),
0x801CFD7C:("D_801CFD7C","UNK_TYPE2","",0x2),
- 0x801CFD80:("D_801CFD80","UNK_TYPE2","",0x2),
- 0x801CFD84:("D_801CFD84","UNK_TYPE2","",0x2),
- 0x801CFD88:("D_801CFD88","UNK_TYPE2","",0x2),
- 0x801CFD8C:("D_801CFD8C","UNK_TYPE2","",0x2),
- 0x801CFD90:("D_801CFD90","UNK_TYPE2","",0x2),
- 0x801CFD94:("D_801CFD94","UNK_PTR","",0x4),
- 0x801CFD98:("D_801CFD98","UNK_TYPE2","",0x2),
- 0x801CFD9C:("D_801CFD9C","UNK_TYPE2","",0x2),
- 0x801CFDA0:("D_801CFDA0","UNK_TYPE2","",0x2),
+ 0x801CFD80:("sAnalogStickHeld","UNK_TYPE2","",0x2),
+ 0x801CFD84:("sAnalogStickHeld","UNK_TYPE2","",0x2),
+ 0x801CFD88:("sAnalogStickHeld","UNK_TYPE2","",0x2),
+ 0x801CFD8C:("sAnalogStickHeld","UNK_TYPE2","",0x2),
+ 0x801CFD90:("sAnalogStickHeld","UNK_TYPE2","",0x2),
+ 0x801CFD94:("sTextboxWidth","UNK_PTR","",0x4),
+ 0x801CFD98:("sTextboxHeight","UNK_TYPE2","",0x2),
+ 0x801CFD9C:("sTextboxTexWidth","UNK_TYPE2","",0x2),
+ 0x801CFDA0:("sTextboxTexHeight","UNK_TYPE2","",0x2),
0x801CFDA4:("D_801CFDA4","UNK_TYPE1","",0x1),
0x801CFDC8:("D_801CFDC8","UNK_TYPE1","",0x1),
0x801CFDEC:("D_801CFDEC","UNK_TYPE1","",0x1),
0x801CFE04:("D_801CFE04","UNK_TYPE1","",0x1),
0x801CFE1C:("D_801CFE1C","UNK_TYPE1","",0x1),
0x801CFE34:("D_801CFE34","UNK_TYPE1","",0x1),
- 0x801CFE4C:("D_801CFE4C","UNK_TYPE1","",0x1),
- 0x801CFE5C:("D_801CFE5C","UNK_TYPE1","",0x1),
- 0x801CFE68:("D_801CFE68","UNK_TYPE1","",0x1),
+ 0x801CFE4C:("sStrayFairyIconTextures","UNK_TYPE1","",0x1),
+ 0x801CFE5C:("sStrayFairyIconPrimColors","UNK_TYPE1","",0x1),
+ 0x801CFE68:("sStrayFairyIconEnvColors","UNK_TYPE1","",0x1),
0x801CFE74:("D_801CFE74","UNK_TYPE1","",0x1),
0x801CFEA4:("D_801CFEA4","UNK_TYPE1","",0x1),
0x801CFED4:("D_801CFED4","UNK_TYPE1","",0x1),
@@ -2027,70 +2014,49 @@
0x801CFF7C:("D_801CFF7C","UNK_TYPE1","",0x1),
0x801CFF88:("D_801CFF88","UNK_TYPE1","",0x1),
0x801CFF94:("D_801CFF94","UNK_TYPE1","",0x1),
- 0x801D0000:("D_801D0000","UNK_TYPE1","",0x1),
- 0x801D0001:("D_801D0001","UNK_TYPE1","",0x1),
- 0x801D001F:("D_801D001F","UNK_TYPE1","",0x1),
- 0x801D0188:("D_801D0188","UNK_TYPE1","",0x1),
- 0x801D023A:("D_801D023A","UNK_TYPE1","",0x1),
- 0x801D0250:("D_801D0250","UNK_TYPE1","",0x1),
+ 0x801D0188:("sOwlWarpTextJPN","UNK_TYPE1","",0x1),
+ 0x801D0250:("sOwlWarpTextLengthJPN","UNK_TYPE1","",0x1),
0x801D0268:("D_801D0268","UNK_TYPE2","",0x2),
0x801D027C:("D_801D027C","UNK_TYPE1","",0x1),
0x801D0284:("D_801D0284","UNK_TYPE1","",0x1),
0x801D028C:("D_801D028C","UNK_TYPE1","",0x1),
- 0x801D02C0:("D_801D02C0","UNK_TYPE1","",0x1),
- 0x801D02D8:("D_801D02D8","UNK_TYPE1","",0x1),
- 0x801D02F8:("D_801D02F8","UNK_TYPE1","",0x1),
+ 0x801D02C0:("sOcarinaSongFlagsMap","UNK_TYPE1","",0x1),
+ 0x801D02D8:("sOcarinaEffectActorIds","UNK_TYPE1","",0x1),
+ 0x801D02F8:("sOcarinaEffectActorParams","UNK_TYPE1","",0x1),
0x801D0330:("D_801D0330","UNK_TYPE1","",0x1),
- 0x801D0334:("D_801D0334","UNK_TYPE1","",0x1),
- 0x801D0340:("D_801D0340","UNK_TYPE1","",0x1),
- 0x801D034C:("D_801D034C","UNK_TYPE1","",0x1),
- 0x801D0358:("D_801D0358","UNK_TYPE1","",0x1),
- 0x801D0364:("D_801D0364","UNK_TYPE1","",0x1),
- 0x801D0378:("D_801D0378","UNK_TYPE1","",0x1),
- 0x801D039C:("D_801D039C","UNK_TYPE1","",0x8),
- 0x801D03A4:("D_801D03A4","UNK_TYPE1","",0x1),
+ 0x801D0334:("sOcarinaButtonAPrimColors","UNK_TYPE1","",0x1),
+ 0x801D0340:("sOcarinaButtonAEnvColors","UNK_TYPE1","",0x1),
+ 0x801D034C:("sOcarinaButtonCPrimColors","UNK_TYPE1","",0x1),
+ 0x801D0358:("sOcarinaButtonCEnvColors","UNK_TYPE1","",0x1),
+ 0x801D0364:("sOcarinaButtonTextures","UNK_TYPE1","",0x1),
+ 0x801D0378:("sOcarinaSongFanfares","UNK_TYPE1","",0x1),
+ 0x801D039C:("sOcarinaSongFanfareIoData","UNK_TYPE1","",0x8),
+ 0x801D03A4:("sPlayerFormOcarinaInstruments","UNK_TYPE1","",0x1),
0x801D03A8:("D_801D03A8","UNK_TYPE1","",0x1),
- 0x801D03C8:("D_801D03C8","UNK_TYPE1","",0x1),
- 0x801D03E8:("D_801D03E8","UNK_TYPE1","",0x1),
- 0x801D03F0:("D_801D03F0","UNK_TYPE1","",0x1),
- 0x801D0408:("D_801D0408","UNK_TYPE1","",0x1),
- 0x801D0428:("D_801D0428","UNK_TYPE1","",0x1),
- 0x801D045A:("D_801D045A","UNK_TYPE1","",0x1),
- 0x801D0462:("D_801D0462","UNK_TYPE1","",0x1),
+ 0x801D03C8:("sTextboxXPositions","UNK_TYPE1","",0x20),
+ 0x801D03E8:("sTextboxLowerYPositions","UNK_TYPE1","",0x20),
+ 0x801D0408:("sTextboxUpperYPositions","UNK_TYPE1","",0x1),
+ 0x801D0428:("sTextboxMidYPositions","UNK_TYPE1","",0x1),
+ 0x801D0448:("D_801D0448","s16","[10]",0x14),
+ 0x801D045C:("D_801D045C","s16","[3]",0x8),
+ 0x801D0464:("D_801D0464","s16","[2]",0x4),
0x801D0468:("D_801D0468","UNK_TYPE1","",0x1),
- 0x801D0470:("D_801D0470","UNK_TYPE1","",0x1),
- 0x801D06F0:("D_801D06F0","char","[]",0x18),
- 0x801D0708:("D_801D0708","char","[]",1),
- 0x801D0710:("D_801D0710","UNK_TYPE1","",0x1),
- 0x801D0714:("D_801D0714","char","[]",0x1),
- 0x801D0724:("D_801D0724","char","[]",0x1),
- 0x801D0730:("D_801D0730","char","[]",0x1),
- 0x801D0734:("D_801D0734","char","[]",0x1),
- 0x801D0740:("D_801D0740","char","[]",0x1),
- 0x801D0744:("D_801D0744","char","[]",0x1),
- 0x801D0760:("D_801D0760","char","[]",0x1),
- 0x801D0764:("D_801D0764","char","[]",0x1),
- 0x801D0770:("D_801D0770","char","[]",0x1),
- 0x801D0774:("D_801D0774","char","[]",0x1),
- 0x801D0780:("D_801D0780","char","[]",0x1),
- 0x801D0784:("D_801D0784","char","[]",0x1),
- 0x801D0794:("D_801D0794","char","[]",0x1),
- 0x801D07A4:("D_801D07A4","char","[]",0x1),
- 0x801D07B0:("D_801D07B0","char","[]",0x1),
- 0x801D07B4:("D_801D07B4","char","[]",0x1),
- 0x801D07C0:("D_801D07C0","char","[]",0x1),
- 0x801D07C4:("D_801D07C4","UNK_TYPE1","",0x1),
+ 0x801D0470:("sNESFontWidths","UNK_TYPE1","",0x1),
+ 0x801D06F0:("sRupeesTextLocalization","char","[]",0x18),
+ 0x801D0710:("sRupeesTextLength","UNK_TYPE1","",0x1),
+ 0x801D0714:("sOwlWarpTextENG","char","[]",0xB0),
+ 0x801D07C4:("sOwlWarpTextLengthENG","UNK_TYPE1","",0x16),
0x801D07DC:("D_801D07DC","UNK_TYPE1","",0x1),
0x801D080C:("D_801D080C","UNK_TYPE1","",0x1),
0x801D083C:("D_801D083C","UNK_TYPE1","",0x1),
- 0x801D086C:("D_801D086C","UNK_TYPE1","",0x1),
- 0x801D0890:("D_801D0890","UNK_TYPE1","",0x1),
+ 0x801D086C:("D_801D086C","UNK_TYPE1","",0x30),
0x801D089C:("D_801D089C","UNK_TYPE1","",0x1),
0x801D08CC:("D_801D08CC","UNK_TYPE1","",0x1),
0x801D08D8:("D_801D08D8","UNK_TYPE1","",0x1),
0x801D08E4:("D_801D08E4","UNK_TYPE1","",0x1),
- 0x801D08E8:("D_801D08E8","UNK_TYPE1","",0x1),
- 0x801D0900:("D_801D0900","UNK_TYPE1","",0x1),
+ 0x801D08E8:("sMaskCodeTextENG","UNK_TYPE1","",0x1),
+ 0x801D0900:("sMaskCodeTextLengthENG","UNK_TYPE1","",0x1),
+ 0x801D0910:("sCreditsFontWidths","f32","[]",0x1),
0x801D0B50:("Player_InitVars","ActorInit","",0x20),
0x801D0B70:("gKaleidoMgrOverlayTable","KaleidoMgrOverlay","",0x38),
0x801D0BA8:("sKaleidoAreaPtr","void*","",0x4),
@@ -2160,7 +2126,7 @@
0x801D1530:("sPadMgrInstance","PadMgr*","",0x4),
0x801D1534:("sPadMgrRetraceCount","UNK_TYPE4","",0x4),
0x801D1538:("sVoiceInitStatus","UNK_TYPE4","",0x4),
- 0x801D1540:("D_801D1540","UNK_PTR","",0x4),
+ 0x801D1540:("sSpeedMeterTimeEntryArray","UNK_PTR","",0x4),
0x801D1570:("D_801D1570","f32","[13]",0x34),
0x801D15B0:("gZeroVec3f","Vec3f","",0xC),
0x801D15BC:("gZeroVec3s","Vec3s","",0x6),
@@ -3901,45 +3867,45 @@
0x801F4E20:("D_801F4E20","UNK_TYPE1","",0x1),
0x801F4E30:("D_801F4E30","UNK_TYPE1","",0x1),
0x801F4E31:("D_801F4E31","UNK_TYPE1","",0x1),
- 0x801F4E32:("D_801F4E32","UNK_TYPE1","",0x1),
- 0x801F4E38:("D_801F4E38","UNK_TYPE1","",0x1),
+ 0x801F4E32:("gCustomLensFlare1On","UNK_TYPE1","",0x1),
+ 0x801F4E38:("gCustomLensFlare1Pos","UNK_TYPE1","",0x1),
0x801F4E3C:("D_801F4E3C","UNK_TYPE1","",0x1),
0x801F4E40:("D_801F4E40","UNK_TYPE1","",0x1),
0x801F4E44:("D_801F4E44","UNK_TYPE1","",0x1),
0x801F4E48:("D_801F4E48","UNK_TYPE1","",0x1),
0x801F4E4C:("D_801F4E4C","UNK_TYPE1","",0x1),
- 0x801F4E4E:("D_801F4E4E","UNK_TYPE1","",0x1),
- 0x801F4E50:("D_801F4E50","UNK_TYPE1","",0x1),
+ 0x801F4E4E:("gCustomLensFlare2On","UNK_TYPE1","",0x1),
+ 0x801F4E50:("gCustomLensFlare2Pos","UNK_TYPE1","",0x1),
0x801F4E54:("D_801F4E54","UNK_TYPE1","",0x1),
0x801F4E58:("D_801F4E58","UNK_TYPE1","",0x1),
0x801F4E5C:("D_801F4E5C","UNK_TYPE1","",0x1),
0x801F4E60:("D_801F4E60","UNK_TYPE1","",0x1),
0x801F4E64:("D_801F4E64","UNK_TYPE1","",0x1),
- 0x801F4E68:("D_801F4E68","UNK_TYPE1","",0x1),
+ 0x801F4E68:("gLightningStrike","UNK_TYPE1","",0x1),
0x801F4E70:("D_801F4E70","UNK_TYPE1","",0x1),
0x801F4E74:("D_801F4E74","UNK_TYPE1","",0x1),
0x801F4E78:("D_801F4E78","UNK_TYPE1","",0x1),
- 0x801F4E7A:("D_801F4E7A","s16","",0x2),
- 0x801F4E80:("D_801F4E80","UNK_TYPE1","",0x1),
- 0x801F4EE0:("D_801F4EE0","UNK_TYPE1","",0x1),
- 0x801F4EE8:("D_801F4EE8","UNK_TYPE1","",0x1),
- 0x801F4EF8:("D_801F4EF8","UNK_TYPE1","",0x1),
- 0x801F4F00:("D_801F4F00","UNK_TYPE1","",0x1),
- 0x801F4F10:("D_801F4F10","UNK_TYPE1","",0x1),
- 0x801F4F14:("D_801F4F14","UNK_TYPE1","",0x1),
- 0x801F4F18:("D_801F4F18","UNK_TYPE1","",0x1),
- 0x801F4F1C:("D_801F4F1C","UNK_TYPE1","",0x1),
- 0x801F4F20:("D_801F4F20","UNK_TYPE1","",0x1),
- 0x801F4F24:("D_801F4F24","UNK_TYPE1","",0x1),
+ 0x801F4E7A:("gSkyboxNumStars","s16","",0x2),
+ 0x801F4E80:("sLightningBolts","UNK_TYPE1","",0x1),
+ 0x801F4EE0:("sNGameOverLightNode","UNK_TYPE1","",0x1),
+ 0x801F4EE8:("sNGameOverLightInfo","UNK_TYPE1","",0x1),
+ 0x801F4EF8:("sSGameOverLightNode","UNK_TYPE1","",0x1),
+ 0x801F4F00:("sSGameOverLightInfo","UNK_TYPE1","",0x1),
+ 0x801F4F10:("sSunEnvAlpha","UNK_TYPE1","",0x1),
+ 0x801F4F14:("sSunColor","UNK_TYPE1","",0x1),
+ 0x801F4F18:("sSunScale","UNK_TYPE1","",0x1),
+ 0x801F4F1C:("sSunPrimAlpha","UNK_TYPE1","",0x1),
+ 0x801F4F20:("sSunDepthTestX","UNK_TYPE1","",0x1),
+ 0x801F4F24:("sSunDepthTestY","UNK_TYPE1","",0x1),
0x801F4F28:("D_801F4F28","UNK_TYPE1","",0x1),
- 0x801F4F2C:("D_801F4F2C","UNK_TYPE1","",0x1),
- 0x801F4F2E:("D_801F4F2E","UNK_TYPE1","",0x1),
+ 0x801F4F2C:("sLightningFlashAlpha","UNK_TYPE1","",0x1),
+ 0x801F4F2E:("sSandstormScroll","UNK_TYPE1","",0x1),
0x801F4F30:("D_801F4F30","UNK_TYPE1","",0x1),
0x801F4F31:("D_801F4F31","UNK_TYPE1","",0x1),
- 0x801F4F32:("D_801F4F32","UNK_TYPE1","",0x1),
+ 0x801F4F32:("sEnvIsTimeStopped","UNK_TYPE1","",0x1),
0x801F4F33:("D_801F4F33","UNK_TYPE1","",0x1),
- 0x801F4F34:("D_801F4F34","UNK_TYPE1","",0x1),
- 0x801F4F38:("D_801F4F38","UNK_TYPE1","",0x1),
+ 0x801F4F34:("sGameOverLightsIntensity","UNK_TYPE1","",0x1),
+ 0x801F4F38:("sSkyboxStarsDList","UNK_TYPE1","",0x1),
0x801F4F40:("sBeatingHeartsDDPrim","s32","[3]",0x6),
0x801F4F48:("sBeatingHeartsDDEnv","s32","[3]",0x6),
0x801F4F50:("sHeartsDDPrim","s32","[2][3]",0xC),
@@ -3983,21 +3949,21 @@
0x801F6AE0:("sSkyboxDrawMatrix","Mtx*","",0x4),
0x801F6AF0:("D_801F6AF0","UNK_TYPE1","",0x1),
0x801F6AF2:("D_801F6AF2","UNK_TYPE1","",0x1),
- 0x801F6B00:("D_801F6B00","UNK_TYPE4","",0x4),
- 0x801F6B04:("D_801F6B04","UNK_TYPE4","",0x4),
+ 0x801F6B00:("sCharTexSize","UNK_TYPE4","",0x4),
+ 0x801F6B04:("sCharTexScale","UNK_TYPE4","",0x4),
0x801F6B08:("D_801F6B08","UNK_TYPE4","",0x4),
- 0x801F6B0C:("D_801F6B0C","UNK_TYPE1","",0x1),
- 0x801F6B0E:("D_801F6B0E","UNK_TYPE1","",0x1),
- 0x801F6B10:("D_801F6B10","UNK_TYPE1","",0x1),
- 0x801F6B12:("D_801F6B12","UNK_TYPE1","",0x1),
- 0x801F6B14:("D_801F6B14","UNK_TYPE1","",0x1),
- 0x801F6B16:("D_801F6B16","UNK_TYPE1","",0x1),
- 0x801F6B18:("D_801F6B18","UNK_TYPE1","",0x1),
- 0x801F6B1A:("D_801F6B1A","UNK_TYPE1","",0x1),
- 0x801F6B1C:("D_801F6B1C","UNK_TYPE1","",0x1),
- 0x801F6B1E:("D_801F6B1E","UNK_TYPE1","",0x1),
- 0x801F6B20:("D_801F6B20","UNK_TYPE1","",0x1),
- 0x801F6B22:("D_801F6B22","UNK_TYPE1","",0x1),
+ 0x801F6B0C:("sOcarinaButtonAPrimR","UNK_TYPE1","",0x1),
+ 0x801F6B0E:("sOcarinaButtonAPrimB","UNK_TYPE1","",0x1),
+ 0x801F6B10:("sOcarinaButtonAPrimG","UNK_TYPE1","",0x1),
+ 0x801F6B12:("sOcarinaButtonAEnvR","UNK_TYPE1","",0x1),
+ 0x801F6B14:("sOcarinaButtonAEnvB","UNK_TYPE1","",0x1),
+ 0x801F6B16:("sOcarinaButtonAEnvG","UNK_TYPE1","",0x1),
+ 0x801F6B18:("sOcarinaButtonCPrimR","UNK_TYPE1","",0x1),
+ 0x801F6B1A:("sOcarinaButtonCPrimB","UNK_TYPE1","",0x1),
+ 0x801F6B1C:("sOcarinaButtonCPrimG","UNK_TYPE1","",0x1),
+ 0x801F6B1E:("sOcarinaButtonCEnvR","UNK_TYPE1","",0x1),
+ 0x801F6B20:("sOcarinaButtonCEnvB","UNK_TYPE1","",0x1),
+ 0x801F6B22:("sOcarinaButtonCEnvG","UNK_TYPE1","",0x1),
0x801F6B30:("sPlayerCallInitFunc","UNK_TYPE1","",0x1),
0x801F6B34:("sPlayerCallDestroyFunc","UNK_TYPE1","",0x1),
0x801F6B38:("sPlayerCallUpdateFunc","UNK_TYPE1","",0x1),
@@ -4033,7 +3999,7 @@
0x801F80E0:("sGraphFaultClient","FaultClient","",0x10),
0x801F80F0:("gGfxMasterDL","Gfx*","",0x4),
0x801F80F8:("sGraphCfbInfos","UNK_TYPE1","",0x1),
- 0x801F8150:("sGraphTaskStartTime","u64","",0x8),
+ 0x801F8150:("sGraphPrevUpdateEndTime","u64","",0x8),
0x801F8160:("sSerialEventQueue","OSMesgQueue","",0x18),
0x801F8178:("sSerialMsgBuf","OSMesg","[1]",0x4),
0x801F8180:("gSegments","u32","[16]",0x40),
@@ -4053,24 +4019,22 @@
0x801FB338:("sAudioMgr","AudioMgr","",0x2e0),
0x801FB620:("gPadMgr","PadMgr","",0x480),
0x801FBAA0:("sSchedFaultClient","UNK_TYPE1","",0x1),
- 0x801FBAB0:("sRSPGFXStartTime","OSTime","",0x8),
- 0x801FBAB8:("sRSPAudioStartTime","OSTime","",0x8),
- 0x801FBAC0:("sRSPOtherStartTime","OSTime","",0x8),
+ 0x801FBAB0:("sRSPGfxTimeStart","OSTime","",0x8),
+ 0x801FBAB8:("sRSPAudioTimeStart","OSTime","",0x8),
+ 0x801FBAC0:("sRSPOtherTimeStart","OSTime","",0x8),
0x801FBAC8:("sRDPStartTime","OSTime","",0x8),
0x801FBAD0:("gAudioSPDataPtr","u64*","",0x4),
0x801FBAD4:("gAudioSPDataSize","u32","",0x4),
- 0x801FBAE0:("D_801FBAE0","UNK_TYPE1","",0x1),
- 0x801FBAE8:("D_801FBAE8","UNK_TYPE1","",0x1),
+ 0x801FBAE0:("gRSPAudioTimeTotal","volatile OSTime","",0x8),
+ 0x801FBAE8:("gRSPGfxTimeTotal","volatile OSTime","",0x8),
0x801FBAF0:("gRDPTimeTotal","volatile OSTime","",0x8),
- 0x801FBAF8:("lastRenderFrameDuration","volatile OSTime","",0x8),
- 0x801FBB00:("gRSPAudioTotalTime","UNK_TYPE1","",0x1),
- 0x801FBB04:("D_801FBB04","UNK_TYPE1","",0x1),
- 0x801FBB08:("sRSPGFXTotalTime","UNK_TYPE1","",0x1),
- 0x801FBB0C:("D_801FBB0C","UNK_TYPE1","",0x1),
- 0x801FBB10:("sRSPOtherTotalTime","UNK_TYPE1","",0x1),
- 0x801FBB14:("D_801FBB14","UNK_TYPE1","",0x1),
- 0x801FBB20:("gRDPTimeAcc","UNK_TYPE1","",0x1),
- 0x801FBB28:("D_801FBB28","UNK_TYPE1","",0x1),
+ 0x801FBAF8:("gGraphUpdatePeriod","volatile OSTime","",0x8),
+ 0x801FBB00:("gRSPAudioTimeAcc","volatile OSTime","",0x8),
+ 0x801FBB08:("gRSPGfxTimeAcc","volatile OSTime","",0x8),
+ 0x801FBB10:("gRSPOtherTimeAcc","volatile OSTime","",0x8),
+ 0x801FBB18:("gUnkTimeAcc","volatile OSTime","",0x8),
+ 0x801FBB20:("gRDPTimeAcc","volatile OSTime","",0x8),
+ 0x801FBB28:("sSpeedMeterTimeEntryPtr","UNK_TYPE1","",0x1),
0x801FBB30:("sNotebookViMode","OSViMode","",0x50),
0x801FBB80:("gFramebuffers","u32*","[2]",0x8),
0x801FBB88:("gActiveViMode","OSViMode*","",0x4),
@@ -4915,7 +4879,7 @@
0x8082DA82:("sPauseZRCursorGreen","UNK_TYPE1","",0x1),
0x8082DA84:("sPauseZRCursorBlue","UNK_TYPE1","",0x1),
0x8082DA86:("sPauseZRCursorAlpha","UNK_TYPE1","",0x1),
- 0x8085B9F0:("D_8085B9F0","UNK_TYPE1","",0x1),
+ 0x8085B9F0:("sPlayerUpperBodyLimbCopyMap","UNK_TYPE1","",0x1),
0x8085BA08:("D_8085BA08","UNK_TYPE1","",0x1),
0x8085BA20:("D_8085BA20","UNK_TYPE1","",0x1),
0x8085BA38:("sPlayerAgeProperties","UNK_TYPE1","",0x1),
@@ -4945,10 +4909,10 @@
0x8085C96C:("D_8085C96C","UNK_TYPE1","",0x1),
0x8085C98C:("sZoraBarrierEnvLighting","UNK_TYPE1","",0x1),
0x8085C99C:("sItemActionParams","UNK_TYPE1","",0x1),
- 0x8085C9F0:("D_8085C9F0","UNK_PTR","",0x4),
- 0x8085CB3C:("sPlayerInitItemActionFuncs","UNK_PTR","",0x4),
- 0x8085CC88:("D_8085CC88","UNK_TYPE1","",0x1),
- 0x8085CD00:("D_8085CD00","s8","[36]",0x24),
+ 0x8085C9F0:("sPlayerUpperActionUpdateFuncs","UNK_PTR","",0x4),
+ 0x8085CB3C:("sPlayerItemActionInitFuncs","UNK_PTR","",0x4),
+ 0x8085CC88:("sPlayerItemChangeInfo","UNK_TYPE1","",0x1),
+ 0x8085CD00:("sPlayerItemChangeTypes","s8","[36]",0x24),
0x8085CD24:("sPlayerExplosiveInfo","UNK_TYPE1","",0x1),
0x8085CD30:("sMeleeAttackAnimInfo","UNK_TYPE1","",0x220),
0x8085CF50:("D_8085CF50","UNK_TYPE1","",0x1),
@@ -4960,7 +4924,7 @@
0x8085CF80:("D_8085CF80","UNK_TYPE1","",0x1),
0x8085CF84:("D_8085CF84","UNK_TYPE1","",0x1),
0x8085CF88:("D_8085CF88","BlureColors","[2]",0x20),
- 0x8085CFA8:("D_8085CFA8","u16","[4]",0x8),
+ 0x8085CFA8:("sPlayerItemButtons","u16","[4]",0x8),
0x8085CFB0:("D_8085CFB0","UNK_TYPE1","",0x1),
0x8085CFB8:("sMagicArrowCosts","u8","[4]",0x4),
0x8085CFBC:("D_8085CFBC","UNK_TYPE1","",0x1),
@@ -4968,19 +4932,19 @@
0x8085CFCC:("D_8085CFCC","UNK_TYPE1","",0x1),
0x8085CFD4:("D_8085CFD4","UNK_TYPE1","",0x1),
0x8085CFDC:("D_8085CFDC","UNK_TYPE1","",0x1),
- 0x8085CFE4:("D_8085CFE4","UNK_TYPE1","",0x1),
- 0x8085CFEC:("D_8085CFEC","UNK_TYPE1","",0x1),
- 0x8085CFF8:("D_8085CFF8","UNK_TYPE1","",0x1),
- 0x8085D004:("D_8085D004","UNK_TYPE1","",0x1),
- 0x8085D00C:("D_8085D00C","UNK_TYPE1","",0x1),
- 0x8085D018:("D_8085D018","UNK_TYPE1","",0x1),
- 0x8085D01C:("D_8085D01C","UNK_TYPE1","",0x1),
- 0x8085D028:("D_8085D028","UNK_TYPE1","",0x1),
- 0x8085D034:("D_8085D034","UNK_TYPE1","",0x1),
- 0x8085D044:("D_8085D044","UNK_TYPE1","",0x1),
- 0x8085D048:("D_8085D048","UNK_TYPE1","",0x1),
- 0x8085D050:("D_8085D050","UNK_TYPE1","",0x1),
- 0x8085D054:("D_8085D054","UNK_PTR","",0x4),
+ 0x8085CFE4:("sPlayerActionChangeList1","UNK_TYPE1","",0x1),
+ 0x8085CFEC:("sPlayerActionChangeList2","UNK_TYPE1","",0x1),
+ 0x8085CFF8:("sPlayerActionChangeList3","UNK_TYPE1","",0x1),
+ 0x8085D004:("sPlayerActionChangeList4","UNK_TYPE1","",0x1),
+ 0x8085D00C:("sPlayerActionChangeList5","UNK_TYPE1","",0x1),
+ 0x8085D018:("sPlayerActionChangeList6","UNK_TYPE1","",0x1),
+ 0x8085D01C:("sPlayerActionChangeList7","UNK_TYPE1","",0x1),
+ 0x8085D028:("sPlayerActionChangeList8","UNK_TYPE1","",0x1),
+ 0x8085D034:("sPlayerActionChangeList9","UNK_TYPE1","",0x1),
+ 0x8085D044:("sPlayerActionChangeList10","UNK_TYPE1","",0x1),
+ 0x8085D048:("sPlayerActionChangeList11","UNK_TYPE1","",0x1),
+ 0x8085D050:("sPlayerActionChangeList12","UNK_TYPE1","",0x1),
+ 0x8085D054:("sPlayerActionChangeFuncs","UNK_PTR","",0x4),
0x8085D090:("D_8085D090","UNK_TYPE1","",0x1),
0x8085D094:("D_8085D094","UNK_TYPE1","",0x6),
0x8085D09C:("D_8085D09C","UNK_TYPE4","",0x4),
@@ -5018,7 +4982,7 @@
0x8085D2B0:("D_8085D2B0","UNK_TYPE1","",0x1),
0x8085D2B4:("D_8085D2B4","UNK_TYPE1","",0x1),
0x8085D2C0:("sInitChain","ActorInitVar","",0x4),
- 0x8085D2C4:("D_8085D2C4","UNK_TYPE4","",0x4),
+ 0x8085D2C4:("sPlayerSkeletonBaseTransl","UNK_TYPE4","",0x4),
0x8085D2CC:("D_8085D2CC","UNK_PTR","",0x4),
0x8085D30C:("D_8085D30C","EffectBlureInit2","",0x24),
0x8085D330:("D_8085D330","EffectTireMarkInit","",0x8),
@@ -5378,8 +5342,8 @@
0x80862B3C:("D_80862B3C","f32","",0x4),
0x80862B40:("sPlayerFloorEffect","UNK_TYPE1","",0x1),
0x80862B44:("sPlayerControlInput","UNK_TYPE1","",0x1),
- 0x80862B48:("D_80862B48","UNK_TYPE1","",0x1),
- 0x80862B4C:("D_80862B4C","UNK_TYPE1","",0x1),
+ 0x80862B48:("sPlayerUseHeldItem","UNK_TYPE1","",0x1),
+ 0x80862B4C:("sPlayerHeldItemButtonIsHeldDown","UNK_TYPE1","",0x1),
0x80862B50:("D_80862B50","UNK_TYPE1","",0x1),
0x80862B6C:("D_80862B6C","UNK_TYPE1","",0x1),
0x808637B0:("En_Test_InitVars","ActorInit","",0x20),
@@ -5443,7 +5407,7 @@
0x80867784:("D_80867784","UNK_TYPE1","",0x1),
0x8086778C:("D_8086778C","UNK_PTR","",0x4),
0x8086780C:("En_Door_InitVars","UNK_TYPE1","",0x1),
- 0x8086782C:("sObjInfo","UNK_TYPE2","",0x126),
+ 0x8086782C:("sObjectInfo","UNK_TYPE2","",0x126),
0x80867954:("sInitChain","UNK_TYPE1","",0x1),
0x80867964:("sAnimations","AnimationHeader","[10]",0x28),
0x8086798C:("sAnimOpenFrames","u8","[10]",0x10),
@@ -6655,7 +6619,7 @@
0x808CD5E8:("D_808CD5E8","f32","",0x4),
0x808CE290:("Demo_Effect_InitVars","UNK_TYPE1","",0x1),
0x808CE2B0:("D_808CE2B0","UNK_TYPE4","",0x4),
- 0x808CE2C0:("sEffectTypeObjects","s16","",0x12),
+ 0x808CE2C0:("sEffectTypeObjectIds","s16","",0x12),
0x808CE2D4:("sAlphaTypes","u8","",0x15),
0x808CE2F0:("jtbl_808CE2F0","UNK_PTR","",0x4),
0x808CE314:("D_808CE314","f32","",0x4),
@@ -9342,10 +9306,10 @@
0x8099FE3C:("D_8099FE3C","UNK_TYPE1","",0x1),
0x8099FE50:("D_8099FE50","UNK_TYPE1","",0x1),
0x809A0D80:("En_Ge3_InitVars","UNK_TYPE1","",0x1),
- 0x809A0DA0:("D_809A0DA0","UNK_TYPE1","",0x1),
- 0x809A0DCC:("D_809A0DCC","UNK_TYPE1","",0x1),
- 0x809A0DF0:("D_809A0DF0","UNK_TYPE4","",0x4),
- 0x809A0DFC:("D_809A0DFC","UNK_TYPE1","",0x1),
+ 0x809A0DA0:("sCylinderInit","ColliderCylinderInit","",0x2C),
+ 0x809A0DCC:("sAnimations","AnimationHeader*","[9]",0x24),
+ 0x809A0DF0:("sFocusOffset","Vec3f","",0xC),
+ 0x809A0DFC:("sEyeTextures","TexturePtr","[3]",0xC),
0x809A0E10:("jtbl_809A0E10","UNK_PTR","",0x4),
0x809A1A80:("Obj_Hamishi_InitVars","UNK_TYPE1","",0x1),
0x809A1AA0:("D_809A1AA0","UNK_TYPE1","",0x1),
@@ -10577,27 +10541,11 @@
0x80A0A88C:("D_80A0A88C","UNK_TYPE4","",0x4),
0x80A0A890:("D_80A0A890","UNK_TYPE4","",0x4),
0x80A0C4A0:("Bg_Dy_Yoseizo_InitVars","UNK_TYPE1","",0x1),
- 0x80A0C4C0:("D_80A0C4C0","UNK_TYPE4","",0x4),
- 0x80A0C4C4:("D_80A0C4C4","UNK_TYPE4","",0x4),
- 0x80A0C4C8:("D_80A0C4C8","UNK_TYPE4","",0x4),
- 0x80A0C4CC:("D_80A0C4CC","UNK_TYPE4","",0x4),
- 0x80A0C4D0:("D_80A0C4D0","UNK_TYPE4","",0x4),
- 0x80A0C4D8:("D_80A0C4D8","UNK_TYPE4","",0x4),
- 0x80A0C4DC:("D_80A0C4DC","UNK_TYPE4","",0x4),
- 0x80A0C4E0:("D_80A0C4E0","UNK_TYPE4","",0x4),
- 0x80A0C4E4:("D_80A0C4E4","UNK_TYPE1","",0x1),
- 0x80A0C4F8:("D_80A0C4F8","UNK_TYPE1","",0x1),
- 0x80A0C50C:("D_80A0C50C","UNK_TYPE1","",0x1),
- 0x80A0C514:("D_80A0C514","UNK_TYPE1","",0x1),
- 0x80A0C540:("D_80A0C540","f32","",0x4),
- 0x80A0C544:("D_80A0C544","f32","",0x4),
- 0x80A0C548:("D_80A0C548","f32","",0x4),
- 0x80A0C54C:("D_80A0C54C","f32","",0x4),
- 0x80A0C550:("D_80A0C550","f32","",0x4),
- 0x80A0C554:("D_80A0C554","f32","",0x4),
- 0x80A0C558:("D_80A0C558","f32","",0x4),
- 0x80A0C55C:("D_80A0C55C","f32","",0x4),
- 0x80A0C560:("D_80A0C560","f32","",0x4),
+ 0x80A0C4C0:("sAnimations","AnimationHeader*","9",0x24),
+ 0x80A0C4E4:("sEffectPrimColors","Color_RGB8","6",0x12),
+ 0x80A0C4F8:("sEffectEnvColors","Color_RGB8","6",0x12),
+ 0x80A0C50C:("sMouthTextures","UNK_TYPE1","2",0x8),
+ 0x80A0C514:("sStretchFactors","f32","8",0x20),
0x80A0C7C0:("En_Boj_05_InitVars","UNK_TYPE1","",0x1),
0x80A10860:("sAnimationsBombShopkeeper","UNK_PTR","",0x4),
0x80A10890:("En_Sob1_InitVars","UNK_TYPE1","",0x1),
@@ -12753,7 +12701,7 @@
0x80AC1E04:("D_80AC1E04","f32","",0x4),
0x80AC2580:("En_Door_Etc_InitVars","UNK_TYPE1","",0x1),
0x80AC25A0:("sCylinderInit","UNK_TYPE1","",0x1),
- 0x80AC25CC:("sObjInfo","UNK_TYPE2","",0x2),
+ 0x80AC25CC:("sObjectInfo","UNK_TYPE2","",0x2),
0x80AC2634:("sInitChain","UNK_TYPE1","",0x1),
0x80AC2650:("D_80AC2650","f32","",0x4),
0x80AC4510:("En_Bigokuta_InitVars","UNK_TYPE1","",0x1),
@@ -12992,14 +12940,14 @@
0x80AD8DE0:("D_80AD8DE0","UNK_TYPE1","",0x1),
0x80AD8E0C:("D_80AD8E0C","UNK_TYPE1","",0x1),
0x80AD8E14:("D_80AD8E14","UNK_TYPE1","",0x1),
- 0x80AD8E34:("D_80AD8E34","UNK_TYPE4","",0x4),
+ 0x80AD8E34:("sEyeTextures","UNK_TYPE4","",0x4),
0x80AD8E44:("D_80AD8E44","UNK_TYPE1","",0x1),
- 0x80AD8E50:("D_80AD8E50","UNK_TYPE4","",0x4),
- 0x80AD8E54:("D_80AD8E54","UNK_TYPE1","",0x1),
- 0x80AD8E58:("D_80AD8E58","UNK_TYPE1","",0x1),
- 0x80AD8E5C:("D_80AD8E5C","UNK_TYPE1","",0x1),
- 0x80AD8E68:("D_80AD8E68","UNK_TYPE1","",0x1),
- 0x80AD8EA4:("sLimbToBodyParts","UNK_TYPE1","",0x1),
+ 0x80AD8E50:("sTexturesDesegmented","UNK_TYPE4","",0x4),
+ 0x80AD8E54:("sSnowPrimColor","UNK_TYPE1","",0x1),
+ 0x80AD8E58:("sSnowEnvColor","UNK_TYPE1","",0x1),
+ 0x80AD8E5C:("sVelocity","UNK_TYPE1","",0x1),
+ 0x80AD8E68:("sBodyLimbBodyPartOffsets","Vec3f","[5]",0x3C),
+ 0x80AD8EA4:("sLimbToBodyParts","s8","[13]",0xD),
0x80AD8EA5:("D_80AD8EA5","UNK_TYPE1","",0x1),
0x80AD8EC0:("D_80AD8EC0","f32","",0x4),
0x80AD8EC4:("D_80AD8EC4","f32","",0x4),
@@ -14139,7 +14087,7 @@
0x80B3A9E4:("D_80B3A9E4","f32","",0x4),
0x80B3A9E8:("D_80B3A9E8","f32","",0x4),
0x80B3BEE0:("En_Gg2_InitVars","UNK_TYPE1","",0x1),
- 0x80B3BF00:("D_80B3BF00","UNK_TYPE4","",0x4),
+ 0x80B3BF00:("sAnimationInfo","UNK_TYPE4","",0x4),
0x80B3C080:("D_80B3C080","UNK_TYPE4","",0x4),
0x80B3C084:("D_80B3C084","UNK_TYPE4","",0x4),
0x80B3C088:("D_80B3C088","UNK_TYPE1","",0x1),
@@ -15310,7 +15258,7 @@
0x80BA50BC:("D_80BA50BC","UNK_TYPE1","",0x1),
0x80BA50DC:("D_80BA50DC","UNK_TYPE1","",0x1),
0x80BA510C:("D_80BA510C","UNK_TYPE1","",0x1),
- 0x80BA5120:("D_80BA5120","UNK_TYPE2","",0x2),
+ 0x80BA5120:("sOcarinaActionWindFishPrompts","UNK_TYPE2","",0x2),
0x80BA5128:("D_80BA5128","UNK_TYPE1","",0x1),
0x80BA512C:("D_80BA512C","UNK_PTR","",0x4),
0x80BA5174:("D_80BA5174","UNK_PTR","",0x4),
@@ -15811,8 +15759,8 @@
0x80BDAFA0:("D_80BDAFA0","f32","",0x4),
0x80BDC0B0:("En_Hidden_Nuts_InitVars","UNK_TYPE1","",0x1),
0x80BDC0D0:("D_80BDC0D0","UNK_TYPE1","",0x1),
- 0x80BDC0FC:("D_80BDC0FC","UNK_TYPE1","",0x1),
- 0x80BDC120:("D_80BDC120","UNK_TYPE1","",0x1),
+ 0x80BDC0FC:("sAnimations","UNK_TYPE1","",0x1),
+ 0x80BDC120:("sAnimationModes","UNK_TYPE1","",0x1),
0x80BDC12C:("D_80BDC12C","UNK_TYPE1","",0x1),
0x80BDC138:("D_80BDC138","UNK_TYPE1","",0x1),
0x80BDC144:("D_80BDC144","UNK_TYPE1","",0x1),
diff --git a/tools/namefixer.py b/tools/namefixer.py
index fa4efc6d3..ea6d5e19e 100755
--- a/tools/namefixer.py
+++ b/tools/namefixer.py
@@ -649,10 +649,64 @@ 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_800FD2B4": "Environment_AdjustLights",
+ "func_800FAAB4": "Environment_ChangeLightSetting",
+ "func_800FD78C": "Environment_PlayStormNatureAmbience",
+ "func_800FD858": "Environment_StopStormNatureAmbience",
+ "func_800F6834": "Environment_EnableUnderwaterLights",
+ "func_800F9824": "Environment_DrawLensFlare",
+ "func_800FE658": "Environment_SetTimeJump",
+ "func_800FE620": "Environment_GetTimeSpeed",
+ "func_800FD750": "Environment_ForcePlaySequence",
+ "func_800FE7A8": "Environment_LerpSandstormColors",
+ "func_800FB758": "Environment_PlaySceneSequence",
+ "func_800FE4B8": "Environment_GetStormState",
+ "Kankyo_FadeInGameOverLights": "Environment_FadeInGameOverLights",
+ "Kankyo_InitGameOverLights": "Environment_InitGameOverLights",
+ "Kankyo_FadeOutGameOverLights": "Environment_FadeOutGameOverLights",
+ "func_800F5090": "Environment_GraphCallback",
+ "func_800F5954": "Environment_SmoothStepToU8",
+ "func_800F5B10": "Environment_LerpWeightAccelDecel",
+ "func_800F694C": "Environment_DisableUnderwaterLights",
+ "func_800F6A40": "Environment_UpdateSkyboxRotY",
+ "func_800F6AB8": "Environment_UpdateNextDayTime",
+ "func_800F6B44": "Environment_UpdateTime",
+ "Kankyo_IsSceneUpsideDown": "Environment_IsSceneUpsideDown",
+ "func_800F6FF8": "Environment_UpdateLights",
+ "func_800F8554": "Environment_UpdateSun",
+ "func_800F8A9C": "Environment_UpdatePostmanEvents",
+ "func_800F8D84": "Environment_DrawSun",
+ "func_800FA39C": "Environment_RandCentered",
+ "func_800FA3C4": "Environment_DrawRainImpl",
+ "func_800FAC20": "Environment_DrawSkyboxFilters",
+ "func_800FAF74": "Environment_DrawLightningFlash",
+ "func_800FB010": "Environment_UpdateLightningStrike",
+ "func_800FB388": "Environment_DrawLightning",
+ "func_800FB9B4": "Environment_UpdateTimeBasedSequence",
+ "func_800FC3DC": "Environment_UpdateRain",
+ "func_800FD538": "Environment_LerpRGB8",
+ "get_days_elapsed": "Environment_GetEventDayCount",
+ "reset_days_elapsed": "Environment_ClearEventDayCount",
+ "get_current_day": "Environment_GetTotalDays",
+ "func_800FD768": "Environment_IsForcedSequenceDisabled",
+ "func_800FD928": "Environment_WarpSongLeave",
+ "func_800FD980": "Environment_SetupSkyboxStars",
+ "func_800FDAF8": "Environment_DrawSkyboxStar",
+ "func_800FDC94": "Environment_DrawSkyboxStarsImpl",
+ "func_800FE390": "Environment_Draw",
+ "func_800FE3E0": "Environment_DrawSkyboxStars",
+ "func_800FE590": "Environment_IsFinalHours",
+ "func_800FE778": "Environment_GetSandstormColorIndex",
+ "func_800FE788": "Environment_GetNextSandstormColorIndex",
+ "func_800FE798": "Environment_GetSandstormLerpScale",
+ "func_800FE7A8": "Environment_LerpSandstormColors",
+ "func_800FEAC0": "Environment_JumpForwardInTime",
+
"func_801A3F54": "Audio_SetCutsceneFlag",
"func_800EA0D4": "Cutscene_StartManual",
@@ -727,7 +781,8 @@ wordReplace = {
"func_8013AED4": "SubS_SetOfferMode",
"SubS_UpdateFlags": "SubS_SetOfferMode",
"func_8013D8DC": "SubS_IsObjectLoaded",
- "func_8013D924": "SubS_GetObjectIndex",
+ "func_8013D924": "SubS_GetObjectSlot",
+ "SubS_GetObjectIndex": "SubS_GetObjectSlot",
"func_8013D5E8": "SubS_AngleDiffLessEqual",
"func_8013DCE0": "SubS_ActorPathing_Init",
"func_8013DE04": "SubS_ActorPathing_Update",
@@ -767,8 +822,16 @@ wordReplace = {
"func_8015926C": "Message_LoadOwlWarpTextNES",
"func_8015E750": "Message_FindCreditsMessage",
"func_80151BB4": "Message_BombersNotebookQueueEvent",
+ "func_8014995C": "Message_DrawTextChar",
+ "func_8014AAD0": "Message_HandleOcarina",
+ "func_8014C70C": "Message_LoadItemIcon",
+ "func_8015E7EC": "Message_DrawTextCredits",
+
"func_80133038": "Schedule_RunScript",
+ "Object_GetIndex": "Object_GetSlot",
+ "Object_Spawn": "Object_SpawnPersistent",
+
"EffectSsKiraKira_SpawnSmallYellow": "EffectSsKirakira_SpawnSmallYellow",
"EffectSsKiraKira_SpawnSmall": "EffectSsKirakira_SpawnSmall",
"EffectSsKiraKira_SpawnDispersed": "EffectSsKirakira_SpawnDispersed",
@@ -1023,6 +1086,8 @@ wordReplace = {
"gSaveContext.save.horseData": "gSaveContext.save.saveInfo.horseData",
"gSaveContext.save.checksum": "gSaveContext.save.saveInfo.checksum",
+ "gSaveContext.save.daysElapsed": "gSaveContext.save.eventDayCount",
+
"player->unk_A87": "player->exchangeItemAction",
"player->exchangeItemId": "player->exchangeItemAction",
"player->leftHandActor": "player->heldActor",
@@ -1044,6 +1109,8 @@ wordReplace = {
"player->unk_AA0": "player->closestSecretDistSq",
"player->unk_AAC": "player->headLimbRot",
"player->unk_AB2": "player->upperLimbRot",
+ "player->unk_AE7": "player->actionVar1",
+ "player->unk_AE8": "player->actionVar2",
"player->unk_B2A": "player->getItemDrawIdPlusOne",
"player->getItemDrawId": "player->getItemDrawIdPlusOne",
"player->unk_B68": "player->fallStartHeight",
@@ -1075,7 +1142,7 @@ wordReplace = {
"globalCtx->mf_187FC": "play->billboardMtxF",
"globalCtx->projectionMatrix": "play->viewProjectionMtxF",
"globalCtx->actorCtx.actorList[": "play->actorCtx.actorLists[",
- "globalCtx->envCtx.unk_8C": "play->envCtx.lightSettings",
+ "globalCtx->envCtx.unk_8C": "play->envCtx.adjLightSettings",
"globalCtx->envCtx.unk_E5": "play->envCtx.fillScreen",
"globalCtx->envCtx.unk_E6": "play->envCtx.screenFillColor",
"globalCtx->envCtx.unk_C3": "play->envCtx.lightSettingOverride",
@@ -1097,7 +1164,36 @@ wordReplace = {
"play->msgCtx.unk12023": "play->msgCtx.stateTimer",
"play->msgCtx.unk1202A": "play->msgCtx.ocarinaMode",
"play->msgCtx.unk1202C": "play->msgCtx.ocarinaAction",
- "play->msgCtx.unk11F04": "play->msgCtx.currentTextId",
+ "play->msgCtx.unk12048": "play->msgCtx.ocarinaButtonIndex",
+ "play->msgCtx.unk120B0": "play->msgCtx.ocarinaSongEffectActive",
+ "play->msgCtx.unk12046": "play->msgCtx.blockSunsSong",
+ "play->msgCtx.unk12090": "play->msgCtx.textIsCredits",
+ "play->msgCtx.unk_120BC": "play->msgCtx.hudVisibility",
+
+ "msgCtx->unk11EF8": "msgCtx->textboxSegment",
+ "msgCtx->unk11F14": "msgCtx->nextTextId",
+ "msgCtx->unk11FF2": "msgCtx->textUnskippable",
+ "msgCtx->unk11FF4": "msgCtx->textPosX",
+ "msgCtx->unk11FF6": "msgCtx->textPosY",
+ "msgCtx->unk12004": "msgCtx->textboxXTarget",
+ "msgCtx->unk12006": "msgCtx->textboxYTarget",
+ "msgCtx->unk1201E": "msgCtx->textColorAlpha",
+ "msgCtx->unk12020": "msgCtx->textboxEndType",
+ "msgCtx->unk12024": "msgCtx->textDelayTimer",
+ "msgCtx->unk1203A": "msgCtx->textboxColorAlphaTarget",
+ "msgCtx->unk1203C": "msgCtx->textboxColorAlphaCurrent",
+ "msgCtx->unk1204A": "msgCtx->ocarinaButtonsPosY",
+ "msgCtx->unk12068": "msgCtx->textboxX",
+ "msgCtx->unk1206A": "msgCtx->textboxY",
+ "msgCtx->unk12090": "msgCtx->textIsCredits",
+ "msgCtx->unk12092": "msgCtx->messageHasSetSfx",
+ "msgCtx->unk12094": "msgCtx->textboxSkipped",
+ "msgCtx->unk12098": "msgCtx->textCharScale",
+ "msgCtx->unk1209C": "msgCtx->textFade",
+ "msgCtx->unk120A0": "msgCtx->ocarinaAvailableSongs",
+ "msgCtx->unk120B0": "msgCtx->ocarinaSongEffectActive",
+ "msgCtx->unkActor": "msgCtx->talkActor",
+
"play->actorCtx.unk3": "play->actorCtx.lensActive",
"play->actorCtx.unk4": "play->actorCtx.lensMaskSize",
"play->actorCtx.targetContext": "play->actorCtx.targetCtx",
@@ -1120,6 +1216,16 @@ wordReplace = {
"play->roomCtx.curRoom.unk3": "play->roomCtx.curRoom.behaviorType1",
"play->roomCtx.curRoom.unk2": "play->roomCtx.curRoom.behaviorType2",
"play->roomCtx.unk31": "play->roomCtx.status",
+ "play->objectCtx.status": "play->objectCtx.slots",
+
+ "play->envCtx.unk_E0": "play->envCtx.lightBlendOverride",
+ "play->envCtx.unk_E1": "play->envCtx.stormRequest",
+ "play->envCtx.unk_E2": "play->envCtx.stormState",
+ "play->envCtx.unk_E3": "play->envCtx.lightningState",
+ "play->envCtx.unk_E4": "play->envCtx.timeSeqState",
+ "play->envCtx.unk_F2": "play->envCtx.precipitation",
+ "play->envCtx.windDir": "play->envCtx.windDirection",
+ "play->envCtx.sunMoonDisabled": "play->envCtx.sunDisabled",
"actorCtx.unkC": "actorCtx.halfDaysBit",
"actorCtx.unk1F4": "actorCtx.playerImpact.type",
@@ -1158,6 +1264,16 @@ wordReplace = {
"D_801BDA9C": "gHorseIsMounted",
"D_801BDAA4": "gHorsePlayedEponasSong",
+ "D_801BDBC8": "gSceneSeqState",
+ "D_801F4E32": "gCustomLensFlare1On",
+ "D_801F4E38": "gCustomLensFlare1Pos",
+ "D_801F4E4E": "gCustomLensFlare2On",
+ "D_801F4E50": "gCustomLensFlare2Pos",
+ "D_801F4E7A": "gSkyboxNumStars",
+ "D_801BDBB8": "gInterruptSongOfStorms",
+ "D_801BDBB4": "gLightConfigAfterUnderwater",
+ "D_801F4E68": "gLightningStrike",
+
# Macros
"CUR_EQUIP_VALUE_VOID": "GET_CUR_EQUIP_VALUE",
"CUR_UPG_VALUE_VOID": "GET_CUR_UPG_VALUE",
diff --git a/tools/permuter_settings.toml b/tools/permuter_settings.toml
index efa3bc2fe..0aa806f2a 100644
--- a/tools/permuter_settings.toml
+++ b/tools/permuter_settings.toml
@@ -34,6 +34,8 @@ CLEAR_EVENTINF = "int"
CLEAR_EVENTINF_ALT = "int"
"EVENTINF_.*" = "int"
".+REG" = "int"
+SET_FULLSCREEN_VIEWPORT_DYNAMIC = "void"
+gDrawRect = "void"
[decompme.compilers]
"tools/ido_recomp/linux/7.1/cc" = "ido7.1"
diff --git a/tools/sizes/boot_functions.csv b/tools/sizes/boot_functions.csv
index 61a69fe7f..47bc17b62 100644
--- a/tools/sizes/boot_functions.csv
+++ b/tools/sizes/boot_functions.csv
@@ -37,12 +37,12 @@ asm/non_matchings/boot/irqmgr/IrqMgr_HandlePRENMI500.s,IrqMgr_HandlePRENMI500,0x
asm/non_matchings/boot/irqmgr/IrqMgr_HandleRetrace.s,IrqMgr_HandleRetrace,0x800815CC,0x2E
asm/non_matchings/boot/irqmgr/IrqMgr_ThreadEntry.s,IrqMgr_ThreadEntry,0x80081684,0x34
asm/non_matchings/boot/irqmgr/IrqMgr_Init.s,IrqMgr_Init,0x80081754,0x33
-asm/non_matchings/boot/CIC6105/CIC6105_Nop80081820.s,CIC6105_Nop80081820,0x80081820,0x2
-asm/non_matchings/boot/CIC6105/CIC6105_Nop80081828.s,CIC6105_Nop80081828,0x80081828,0x2
+asm/non_matchings/boot/CIC6105/CIC6105_Noop1.s,CIC6105_Noop1,0x80081820,0x2
+asm/non_matchings/boot/CIC6105/CIC6105_Noop2.s,CIC6105_Noop2,0x80081828,0x2
asm/non_matchings/boot/CIC6105/CIC6105_PrintRomInfo.s,CIC6105_PrintRomInfo,0x80081830,0x1B
asm/non_matchings/boot/CIC6105/CIC6105_AddRomInfoFaultPage.s,CIC6105_AddRomInfoFaultPage,0x8008189C,0xD
-asm/non_matchings/boot/CIC6105/CIC6105_RemoveRomInfoFaultPage.s,CIC6105_RemoveRomInfoFaultPage,0x800818D0,0x9
-asm/non_matchings/boot/CIC6105/func_800818F4.s,func_800818F4,0x800818F4,0xB
+asm/non_matchings/boot/CIC6105/CIC6105_Destroy.s,CIC6105_Destroy,0x800818D0,0x9
+asm/non_matchings/boot/CIC6105/CIC6105_Init.s,CIC6105_Init,0x800818F4,0xB
asm/non_matchings/boot/syncprintf/osSyncPrintfUnused.s,osSyncPrintfUnused,0x80081920,0x7
asm/non_matchings/boot/syncprintf/osSyncPrintf.s,osSyncPrintf,0x8008193C,0x7
asm/non_matchings/boot/syncprintf/rmonPrintf.s,rmonPrintf,0x80081958,0xA
diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv
index 767d81514..240f6a0b1 100644
--- a/tools/sizes/code_functions.csv
+++ b/tools/sizes/code_functions.csv
@@ -1220,86 +1220,86 @@ asm/non_matchings/code/z_kanfont/Font_LoadChar.s,Font_LoadChar,0x800F4F40,0x5
asm/non_matchings/code/z_kanfont/Font_LoadCharNES.s,Font_LoadCharNES,0x800F4F54,0x1B
asm/non_matchings/code/z_kanfont/Font_LoadMessageBoxEndIcon.s,Font_LoadMessageBoxEndIcon,0x800F4FC0,0x11
asm/non_matchings/code/z_kanfont/Font_LoadOrderedFont.s,Font_LoadOrderedFont,0x800F5004,0x23
-asm/non_matchings/code/z_kankyo/func_800F5090.s,func_800F5090,0x800F5090,0x11
+asm/non_matchings/code/z_kankyo/Environment_GraphCallback.s,Environment_GraphCallback,0x800F5090,0x11
asm/non_matchings/code/z_kankyo/Environment_ZBufValToFixedPoint.s,Environment_ZBufValToFixedPoint,0x800F50D4,0xE
asm/non_matchings/code/z_kankyo/Environment_Init.s,Environment_Init,0x800F510C,0x212
-asm/non_matchings/code/z_kankyo/func_800F5954.s,func_800F5954,0x800F5954,0x4E
+asm/non_matchings/code/z_kankyo/Environment_SmoothStepToU8.s,Environment_SmoothStepToU8,0x800F5954,0x4E
asm/non_matchings/code/z_kankyo/Environment_LerpWeight.s,Environment_LerpWeight,0x800F5A8C,0x21
-asm/non_matchings/code/z_kankyo/func_800F5B10.s,func_800F5B10,0x800F5B10,0x70
+asm/non_matchings/code/z_kankyo/Environment_LerpWeightAccelDecel.s,Environment_LerpWeightAccelDecel,0x800F5B10,0x70
asm/non_matchings/code/z_kankyo/Environment_UpdateSkybox.s,Environment_UpdateSkybox,0x800F5CD0,0x2D9
-asm/non_matchings/code/z_kankyo/func_800F6834.s,func_800F6834,0x800F6834,0x46
-asm/non_matchings/code/z_kankyo/func_800F694C.s,func_800F694C,0x800F694C,0x2E
+asm/non_matchings/code/z_kankyo/Environment_EnableUnderwaterLights.s,Environment_EnableUnderwaterLights,0x800F6834,0x46
+asm/non_matchings/code/z_kankyo/Environment_DisableUnderwaterLights.s,Environment_DisableUnderwaterLights,0x800F694C,0x2E
asm/non_matchings/code/z_kankyo/func_800F6A04.s,func_800F6A04,0x800F6A04,0xF
-asm/non_matchings/code/z_kankyo/func_800F6A40.s,func_800F6A40,0x800F6A40,0x1E
-asm/non_matchings/code/z_kankyo/func_800F6AB8.s,func_800F6AB8,0x800F6AB8,0x23
-asm/non_matchings/code/z_kankyo/func_800F6B44.s,func_800F6B44,0x800F6B44,0x6A
+asm/non_matchings/code/z_kankyo/Environment_UpdateSkyboxRotY.s,Environment_UpdateSkyboxRotY,0x800F6A40,0x1E
+asm/non_matchings/code/z_kankyo/Environment_UpdateNextDayTime.s,Environment_UpdateNextDayTime,0x800F6AB8,0x23
+asm/non_matchings/code/z_kankyo/Environment_UpdateTime.s,Environment_UpdateTime,0x800F6B44,0x6A
asm/non_matchings/code/z_kankyo/func_800F6CEC.s,func_800F6CEC,0x800F6CEC,0x6E
asm/non_matchings/code/z_kankyo/func_800F6EA4.s,func_800F6EA4,0x800F6EA4,0x4A
-asm/non_matchings/code/z_kankyo/Kankyo_IsSceneUpsideDown.s,Kankyo_IsSceneUpsideDown,0x800F6FCC,0xB
-asm/non_matchings/code/z_kankyo/func_800F6FF8.s,func_800F6FF8,0x800F6FF8,0x557
-asm/non_matchings/code/z_kankyo/func_800F8554.s,func_800F8554,0x800F8554,0xDC
+asm/non_matchings/code/z_kankyo/Environment_IsSceneUpsideDown.s,Environment_IsSceneUpsideDown,0x800F6FCC,0xB
+asm/non_matchings/code/z_kankyo/Environment_UpdateLights.s,Environment_UpdateLights,0x800F6FF8,0x557
+asm/non_matchings/code/z_kankyo/Environment_UpdateSun.s,Environment_UpdateSun,0x800F8554,0xDC
asm/non_matchings/code/z_kankyo/func_800F88C4.s,func_800F88C4,0x800F88C4,0x2B
asm/non_matchings/code/z_kankyo/func_800F8970.s,func_800F8970,0x800F8970,0x4B
-asm/non_matchings/code/z_kankyo/func_800F8A9C.s,func_800F8A9C,0x800F8A9C,0x8E
+asm/non_matchings/code/z_kankyo/Environment_UpdatePostmanEvents.s,Environment_UpdatePostmanEvents,0x800F8A9C,0x8E
asm/non_matchings/code/z_kankyo/Environment_Update.s,Environment_Update,0x800F8CD4,0x2C
-asm/non_matchings/code/z_kankyo/func_800F8D84.s,func_800F8D84,0x800F8D84,0x269
+asm/non_matchings/code/z_kankyo/Environment_DrawSun.s,Environment_DrawSun,0x800F8D84,0x269
asm/non_matchings/code/z_kankyo/Environment_DrawSunLensFlare.s,Environment_DrawSunLensFlare,0x800F9728,0x3F
-asm/non_matchings/code/z_kankyo/func_800F9824.s,func_800F9824,0x800F9824,0x2DE
-asm/non_matchings/code/z_kankyo/func_800FA39C.s,func_800FA39C,0x800FA39C,0xA
-asm/non_matchings/code/z_kankyo/func_800FA3C4.s,func_800FA3C4,0x800FA3C4,0x18E
+asm/non_matchings/code/z_kankyo/Environment_DrawLensFlare.s,Environment_DrawLensFlare,0x800F9824,0x2DE
+asm/non_matchings/code/z_kankyo/Environment_RandCentered.s,Environment_RandCentered,0x800FA39C,0xA
+asm/non_matchings/code/z_kankyo/Environment_DrawRainImpl.s,Environment_DrawRainImpl,0x800FA3C4,0x18E
asm/non_matchings/code/z_kankyo/Environment_DrawRain.s,Environment_DrawRain,0x800FA9FC,0x2E
-asm/non_matchings/code/z_kankyo/func_800FAAB4.s,func_800FAAB4,0x800FAAB4,0x5B
-asm/non_matchings/code/z_kankyo/func_800FAC20.s,func_800FAC20,0x800FAC20,0xD5
-asm/non_matchings/code/z_kankyo/func_800FAF74.s,func_800FAF74,0x800FAF74,0x27
-asm/non_matchings/code/z_kankyo/func_800FB010.s,func_800FB010,0x800FB010,0xC4
+asm/non_matchings/code/z_kankyo/Environment_ChangeLightSetting.s,Environment_ChangeLightSetting,0x800FAAB4,0x5B
+asm/non_matchings/code/z_kankyo/Environment_DrawSkyboxFilters.s,Environment_DrawSkyboxFilters,0x800FAC20,0xD5
+asm/non_matchings/code/z_kankyo/Environment_DrawLightningFlash.s,Environment_DrawLightningFlash,0x800FAF74,0x27
+asm/non_matchings/code/z_kankyo/Environment_UpdateLightningStrike.s,Environment_UpdateLightningStrike,0x800FB010,0xC4
asm/non_matchings/code/z_kankyo/Environment_AddLightningBolts.s,Environment_AddLightningBolts,0x800FB320,0x1A
-asm/non_matchings/code/z_kankyo/func_800FB388.s,func_800FB388,0x800FB388,0xF4
-asm/non_matchings/code/z_kankyo/func_800FB758.s,func_800FB758,0x800FB758,0x97
-asm/non_matchings/code/z_kankyo/func_800FB9B4.s,func_800FB9B4,0x800FB9B4,0xC2
+asm/non_matchings/code/z_kankyo/Environment_DrawLightning.s,Environment_DrawLightning,0x800FB388,0xF4
+asm/non_matchings/code/z_kankyo/Environment_PlaySceneSequence.s,Environment_PlaySceneSequence,0x800FB758,0x97
+asm/non_matchings/code/z_kankyo/Environment_UpdateTimeBasedSequence.s,Environment_UpdateTimeBasedSequence,0x800FB9B4,0xC2
asm/non_matchings/code/z_kankyo/Environment_DrawCustomLensFlare.s,Environment_DrawCustomLensFlare,0x800FBCBC,0x4C
-asm/non_matchings/code/z_kankyo/Kankyo_InitGameOverLights.s,Kankyo_InitGameOverLights,0x800FBDEC,0x54
-asm/non_matchings/code/z_kankyo/Kankyo_FadeInGameOverLights.s,Kankyo_FadeInGameOverLights,0x800FBF3C,0x87
-asm/non_matchings/code/z_kankyo/Kankyo_FadeOutGameOverLights.s,Kankyo_FadeOutGameOverLights,0x800FC158,0xA1
-asm/non_matchings/code/z_kankyo/func_800FC3DC.s,func_800FC3DC,0x800FC3DC,0x1A
+asm/non_matchings/code/z_kankyo/Environment_InitGameOverLights.s,Environment_InitGameOverLights,0x800FBDEC,0x54
+asm/non_matchings/code/z_kankyo/Environment_FadeInGameOverLights.s,Environment_FadeInGameOverLights,0x800FBF3C,0x87
+asm/non_matchings/code/z_kankyo/Environment_FadeOutGameOverLights.s,Environment_FadeOutGameOverLights,0x800FC158,0xA1
+asm/non_matchings/code/z_kankyo/Environment_UpdateRain.s,Environment_UpdateRain,0x800FC3DC,0x1A
asm/non_matchings/code/z_kankyo/Environment_FillScreen.s,Environment_FillScreen,0x800FC444,0x82
asm/non_matchings/code/z_kankyo/Environment_DrawSandstorm.s,Environment_DrawSandstorm,0x800FC64C,0x31A
-asm/non_matchings/code/z_kankyo/func_800FD2B4.s,func_800FD2B4,0x800FD2B4,0xA1
-asm/non_matchings/code/z_kankyo/func_800FD538.s,func_800FD538,0x800FD538,0x19
+asm/non_matchings/code/z_kankyo/Environment_AdjustLights.s,Environment_AdjustLights,0x800FD2B4,0xA1
+asm/non_matchings/code/z_kankyo/Environment_LerpRGB8.s,Environment_LerpRGB8,0x800FD538,0x19
asm/non_matchings/code/z_kankyo/Environment_LerpAmbientColor.s,Environment_LerpAmbientColor,0x800FD59C,0x11
asm/non_matchings/code/z_kankyo/Environment_LerpDiffuseColor.s,Environment_LerpDiffuseColor,0x800FD5E0,0x1D
asm/non_matchings/code/z_kankyo/Environment_LerpFogColor.s,Environment_LerpFogColor,0x800FD654,0x11
asm/non_matchings/code/z_kankyo/Environment_LerpFog.s,Environment_LerpFog,0x800FD698,0x22
-asm/non_matchings/code/z_kankyo/get_days_elapsed.s,get_days_elapsed,0x800FD720,0x4
-asm/non_matchings/code/z_kankyo/reset_days_elapsed.s,reset_days_elapsed,0x800FD730,0x4
-asm/non_matchings/code/z_kankyo/get_current_day.s,get_current_day,0x800FD740,0x4
-asm/non_matchings/code/z_kankyo/func_800FD750.s,func_800FD750,0x800FD750,0x6
-asm/non_matchings/code/z_kankyo/func_800FD768.s,func_800FD768,0x800FD768,0x9
-asm/non_matchings/code/z_kankyo/func_800FD78C.s,func_800FD78C,0x800FD78C,0x33
-asm/non_matchings/code/z_kankyo/func_800FD858.s,func_800FD858,0x800FD858,0x34
-asm/non_matchings/code/z_kankyo/func_800FD928.s,func_800FD928,0x800FD928,0x16
-asm/non_matchings/code/z_kankyo/func_800FD980.s,func_800FD980,0x800FD980,0x5E
-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/Environment_GetEventDayCount.s,Environment_GetEventDayCount,0x800FD720,0x4
+asm/non_matchings/code/z_kankyo/Environment_ClearEventDayCount.s,Environment_ClearEventDayCount,0x800FD730,0x4
+asm/non_matchings/code/z_kankyo/Environment_GetTotalDays.s,Environment_GetTotalDays,0x800FD740,0x4
+asm/non_matchings/code/z_kankyo/Environment_ForcePlaySequence.s,Environment_ForcePlaySequence,0x800FD750,0x6
+asm/non_matchings/code/z_kankyo/Environment_IsForcedSequenceDisabled.s,Environment_IsForcedSequenceDisabled,0x800FD768,0x9
+asm/non_matchings/code/z_kankyo/Environment_PlayStormNatureAmbience.s,Environment_PlayStormNatureAmbience,0x800FD78C,0x33
+asm/non_matchings/code/z_kankyo/Environment_StopStormNatureAmbience.s,Environment_StopStormNatureAmbience,0x800FD858,0x34
+asm/non_matchings/code/z_kankyo/Environment_WarpSongLeave.s,Environment_WarpSongLeave,0x800FD928,0x16
+asm/non_matchings/code/z_kankyo/Environment_SetupSkyboxStars.s,Environment_SetupSkyboxStars,0x800FD980,0x5E
+asm/non_matchings/code/z_kankyo/Environment_DrawSkyboxStar.s,Environment_DrawSkyboxStar,0x800FDAF8,0x67
+asm/non_matchings/code/z_kankyo/Environment_DrawSkyboxStarsImpl.s,Environment_DrawSkyboxStarsImpl,0x800FDC94,0x1BF
+asm/non_matchings/code/z_kankyo/Environment_Draw.s,Environment_Draw,0x800FE390,0x14
+asm/non_matchings/code/z_kankyo/Environment_DrawSkyboxStars.s,Environment_DrawSkyboxStars,0x800FE3E0,0x29
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/Environment_GetStormState.s,Environment_GetStormState,0x800FE4B8,0x36
+asm/non_matchings/code/z_kankyo/Environment_IsFinalHours.s,Environment_IsFinalHours,0x800FE590,0x10
asm/non_matchings/code/z_kankyo/func_800FE5D0.s,func_800FE5D0,0x800FE5D0,0x10
asm/non_matchings/code/z_kankyo/func_800FE610.s,func_800FE610,0x800FE610,0x4
-asm/non_matchings/code/z_kankyo/func_800FE620.s,func_800FE620,0x800FE620,0xE
-asm/non_matchings/code/z_kankyo/func_800FE658.s,func_800FE658,0x800FE658,0x28
+asm/non_matchings/code/z_kankyo/Environment_GetTimeSpeed.s,Environment_GetTimeSpeed,0x800FE620,0xE
+asm/non_matchings/code/z_kankyo/Environment_SetTimeJump.s,Environment_SetTimeJump,0x800FE658,0x28
asm/non_matchings/code/z_kankyo/func_800FE6F8.s,func_800FE6F8,0x800FE6F8,0x20
-asm/non_matchings/code/z_kankyo/func_800FE778.s,func_800FE778,0x800FE778,0x4
-asm/non_matchings/code/z_kankyo/func_800FE788.s,func_800FE788,0x800FE788,0x4
-asm/non_matchings/code/z_kankyo/func_800FE798.s,func_800FE798,0x800FE798,0x4
-asm/non_matchings/code/z_kankyo/func_800FE7A8.s,func_800FE7A8,0x800FE7A8,0x83
+asm/non_matchings/code/z_kankyo/Environment_GetSandstormColorIndex.s,Environment_GetSandstormColorIndex,0x800FE778,0x4
+asm/non_matchings/code/z_kankyo/Environment_GetNextSandstormColorIndex.s,Environment_GetNextSandstormColorIndex,0x800FE788,0x4
+asm/non_matchings/code/z_kankyo/Environment_GetSandstormLerpScale.s,Environment_GetSandstormLerpScale,0x800FE798,0x4
+asm/non_matchings/code/z_kankyo/Environment_LerpSandstormColors.s,Environment_LerpSandstormColors,0x800FE7A8,0x83
asm/non_matchings/code/z_kankyo/func_800FE9B4.s,func_800FE9B4,0x800FE9B4,0x27
asm/non_matchings/code/z_kankyo/func_800FEA50.s,func_800FEA50,0x800FEA50,0x18
asm/non_matchings/code/z_kankyo/func_800FEAB0.s,func_800FEAB0,0x800FEAB0,0x4
-asm/non_matchings/code/z_kankyo/func_800FEAC0.s,func_800FEAC0,0x800FEAC0,0xD
+asm/non_matchings/code/z_kankyo/Environment_JumpForwardInTime.s,Environment_JumpForwardInTime,0x800FEAC0,0xD
asm/non_matchings/code/z_kankyo/func_800FEAF4.s,func_800FEAF4,0x800FEAF4,0x67
asm/non_matchings/code/z_lib/Lib_MemCpy.s,Lib_MemCpy,0x800FEC90,0xC
asm/non_matchings/code/z_lib/Lib_MemSet.s,Lib_MemSet,0x800FECC0,0x21
@@ -1363,7 +1363,7 @@ asm/non_matchings/code/z_lib/Lib_PlaySfx.s,Lib_PlaySfx,0x801000A4,0xA
asm/non_matchings/code/z_lib/Lib_PlaySfx_2.s,Lib_PlaySfx_2,0x801000CC,0xA
asm/non_matchings/code/z_lib/Lib_PlaySfx_AtPos.s,Lib_PlaySfx_AtPos,0x801000F4,0xA
asm/non_matchings/code/z_lib/Lib_Vec3f_TranslateAndRotateY.s,Lib_Vec3f_TranslateAndRotateY,0x8010011C,0x27
-asm/non_matchings/code/z_lib/Lib_LerpRGB.s,Lib_LerpRGB,0x801001B8,0xA4
+asm/non_matchings/code/z_lib/Color_RGB8_Lerp.s,Color_RGB8_Lerp,0x801001B8,0xA4
asm/non_matchings/code/z_lib/Math_Vec3f_StepTo.s,Math_Vec3f_StepTo,0x80100448,0x2D
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
@@ -1713,7 +1713,7 @@ asm/non_matchings/code/z_player_lib/Player_IsGoronOrDeku.s,Player_IsGoronOrDeku,
asm/non_matchings/code/z_player_lib/func_801234D4.s,func_801234D4,0x801234D4,0x2F
asm/non_matchings/code/z_player_lib/func_80123590.s,func_80123590,0x80123590,0x13
asm/non_matchings/code/z_player_lib/func_801235DC.s,func_801235DC,0x801235DC,0x1C
-asm/non_matchings/code/z_player_lib/func_8012364C.s,func_8012364C,0x8012364C,0x71
+asm/non_matchings/code/z_player_lib/Player_GetItemOnButton.s,Player_GetItemOnButton,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/Player_SetModelsForHoldingShield.s,Player_SetModelsForHoldingShield,0x801239AC,0x3E
@@ -1929,10 +1929,10 @@ asm/non_matchings/code/code_8012EC80/Inventory_SaveDekuPlaygroundHighScore.s,Inv
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
asm/non_matchings/code/code_8012EC80/Inventory_SaveLotteryCodeGuess.s,Inventory_SaveLotteryCodeGuess,0x8012F278,0x16
-asm/non_matchings/code/z_scene/Object_Spawn.s,Object_Spawn,0x8012F2E0,0x3C
-asm/non_matchings/code/z_scene/Object_InitBank.s,Object_InitBank,0x8012F3D0,0x4B
-asm/non_matchings/code/z_scene/Object_UpdateBank.s,Object_UpdateBank,0x8012F4FC,0x43
-asm/non_matchings/code/z_scene/Object_GetIndex.s,Object_GetIndex,0x8012F608,0x18
+asm/non_matchings/code/z_scene/Object_SpawnPersistent.s,Object_SpawnPersistent,0x8012F2E0,0x3C
+asm/non_matchings/code/z_scene/Object_InitContext.s,Object_InitContext,0x8012F3D0,0x4B
+asm/non_matchings/code/z_scene/Object_UpdateEntries.s,Object_UpdateEntries,0x8012F4FC,0x43
+asm/non_matchings/code/z_scene/Object_GetSlot.s,Object_GetSlot,0x8012F608,0x18
asm/non_matchings/code/z_scene/Object_IsLoaded.s,Object_IsLoaded,0x8012F668,0xC
asm/non_matchings/code/z_scene/Object_LoadAll.s,Object_LoadAll,0x8012F698,0x29
asm/non_matchings/code/z_scene/func_8012F73C.s,func_8012F73C,0x8012F73C,0x18
@@ -2202,7 +2202,7 @@ asm/non_matchings/code/z_sub_s/SubS_GetDistSqAndOrientPoints.s,SubS_GetDistSqAnd
asm/non_matchings/code/z_sub_s/SubS_MoveActorToPoint.s,SubS_MoveActorToPoint,0x8013D768,0x35
asm/non_matchings/code/z_sub_s/SubS_GetDistSqAndOrientPath.s,SubS_GetDistSqAndOrientPath,0x8013D83C,0x28
asm/non_matchings/code/z_sub_s/SubS_IsObjectLoaded.s,SubS_IsObjectLoaded,0x8013D8DC,0x12
-asm/non_matchings/code/z_sub_s/SubS_GetObjectIndex.s,SubS_GetObjectIndex,0x8013D924,0xF
+asm/non_matchings/code/z_sub_s/SubS_GetObjectSlot.s,SubS_GetObjectSlot,0x8013D924,0xF
asm/non_matchings/code/z_sub_s/SubS_FindActor.s,SubS_FindActor,0x8013D960,0x1A
asm/non_matchings/code/z_sub_s/SubS_UpdateFidgetTables.s,SubS_UpdateFidgetTables,0x8013D9C8,0x72
asm/non_matchings/code/z_sub_s/SubS_IsFloorAbove.s,SubS_IsFloorAbove,0x8013DB90,0x2C
@@ -2334,59 +2334,59 @@ asm/non_matchings/code/z_sram_NES/Sram_UpdateWriteToFlashOwlSave.s,Sram_UpdateWr
asm/non_matchings/code/z_sram_NES/func_80147314.s,func_80147314,0x80147314,0x40
asm/non_matchings/code/z_sram_NES/func_80147414.s,func_80147414,0x80147414,0x3E
asm/non_matchings/code/z_sram_NES/Sram_nop8014750C.s,Sram_nop8014750C,0x8014750C,0x5
-asm/non_matchings/code/z_message/func_80147520.s,func_80147520,0x80147520,0x11
-asm/non_matchings/code/z_message/func_80147564.s,func_80147564,0x80147564,0x30
+asm/non_matchings/code/z_message/Message_ResetOcarinaButtonAlphas.s,Message_ResetOcarinaButtonAlphas,0x80147520,0x11
+asm/non_matchings/code/z_message/Message_ResetOcarinaButtonState.s,Message_ResetOcarinaButtonState,0x80147564,0x30
asm/non_matchings/code/z_message/Message_ShouldAdvance.s,Message_ShouldAdvance,0x80147624,0x44
asm/non_matchings/code/z_message/Message_ShouldAdvanceSilent.s,Message_ShouldAdvanceSilent,0x80147734,0x20
asm/non_matchings/code/z_message/Message_CloseTextbox.s,Message_CloseTextbox,0x801477B4,0x19
-asm/non_matchings/code/z_message/func_80147818.s,func_80147818,0x80147818,0x1C0
+asm/non_matchings/code/z_message/Message_DrawTextboxIcon.s,Message_DrawTextboxIcon,0x80147818,0x1C0
asm/non_matchings/code/z_message/func_80147F18.s,func_80147F18,0x80147F18,0x190
asm/non_matchings/code/z_message/func_80148558.s,func_80148558,0x80148558,0x190
-asm/non_matchings/code/z_message/func_80148B98.s,func_80148B98,0x80148B98,0x49
+asm/non_matchings/code/z_message/Message_HandleChoiceSelection.s,Message_HandleChoiceSelection,0x80148B98,0x49
asm/non_matchings/code/z_message/func_80148CBC.s,func_80148CBC,0x80148CBC,0x2A
asm/non_matchings/code/z_message/func_80148D64.s,func_80148D64,0x80148D64,0xB9
asm/non_matchings/code/z_message/func_80149048.s,func_80149048,0x80149048,0x65
asm/non_matchings/code/z_message/func_801491DC.s,func_801491DC,0x801491DC,0x9E
asm/non_matchings/code/z_message/func_80149454.s,func_80149454,0x80149454,0x9D
asm/non_matchings/code/z_message/func_801496C8.s,func_801496C8,0x801496C8,0xA5
-asm/non_matchings/code/z_message/func_8014995C.s,func_8014995C,0x8014995C,0xAF
-asm/non_matchings/code/z_message/func_80149C18.s,func_80149C18,0x80149C18,0xA9
+asm/non_matchings/code/z_message/Message_DrawTextChar.s,Message_DrawTextChar,0x8014995C,0xAF
+asm/non_matchings/code/z_message/Message_GrowTextbox.s,Message_GrowTextbox,0x80149C18,0xA9
asm/non_matchings/code/z_message/Message_FindMessage.s,Message_FindMessage,0x80149EBC,0x2E
-asm/non_matchings/code/z_message/func_80149F74.s,func_80149F74,0x80149F74,0x2D7
-asm/non_matchings/code/z_message/func_8014AAD0.s,func_8014AAD0,0x8014AAD0,0xBB
-asm/non_matchings/code/z_message/func_8014ADBC.s,func_8014ADBC,0x8014ADBC,0x654
-asm/non_matchings/code/z_message/func_8014C70C.s,func_8014C70C,0x8014C70C,0x142
+asm/non_matchings/code/z_message/Message_DrawItemIcon.s,Message_DrawItemIcon,0x80149F74,0x2D7
+asm/non_matchings/code/z_message/Message_HandleOcarina.s,Message_HandleOcarina,0x8014AAD0,0xBB
+asm/non_matchings/code/z_message/Message_DrawTextDefault.s,Message_DrawTextDefault,0x8014ADBC,0x654
+asm/non_matchings/code/z_message/Message_LoadItemIcon.s,Message_LoadItemIcon,0x8014C70C,0x142
asm/non_matchings/code/z_message/Message_LoadChar.s,Message_LoadChar,0x8014CC14,0x28
asm/non_matchings/code/z_message/func_8014CCB4.s,func_8014CCB4,0x8014CCB4,0x4F
-asm/non_matchings/code/z_message/func_8014CDF0.s,func_8014CDF0,0x8014CDF0,0x7B
-asm/non_matchings/code/z_message/func_8014CFDC.s,func_8014CFDC,0x8014CFDC,0xCA
-asm/non_matchings/code/z_message/func_8014D304.s,func_8014D304,0x8014D304,0xCA
-asm/non_matchings/code/z_message/func_8014D62C.s,func_8014D62C,0x8014D62C,0x62
-asm/non_matchings/code/z_message/func_8014D7B4.s,func_8014D7B4,0x8014D7B4,0xCB4
+asm/non_matchings/code/z_message/Message_GetTimerDigits.s,Message_GetTimerDigits,0x8014CDF0,0x7B
+asm/non_matchings/code/z_message/Message_SetupLoadItemIcon.s,Message_SetupLoadItemIcon,0x8014CFDC,0xCA
+asm/non_matchings/code/z_message/Message_LoadTime.s,Message_LoadTime,0x8014D304,0xCA
+asm/non_matchings/code/z_message/Message_LoadOwlWarpText.s,Message_LoadOwlWarpText,0x8014D62C,0x62
+asm/non_matchings/code/z_message/Message_Decode.s,Message_Decode,0x8014D7B4,0xCB4
asm/non_matchings/code/z_message/func_80150A84.s,func_80150A84,0x80150A84,0xA1
-asm/non_matchings/code/z_message/func_80150D08.s,func_80150D08,0x80150D08,0x1EA
+asm/non_matchings/code/z_message/Message_OpenText.s,Message_OpenText,0x80150D08,0x1EA
asm/non_matchings/code/z_message/func_801514B0.s,func_801514B0,0x801514B0,0x100
asm/non_matchings/code/z_message/Message_StartTextbox.s,Message_StartTextbox,0x801518B0,0x22
asm/non_matchings/code/z_message/Message_ContinueTextbox.s,Message_ContinueTextbox,0x80151938,0x4C
-asm/non_matchings/code/z_message/func_80151A68.s,func_80151A68,0x80151A68,0x53
+asm/non_matchings/code/z_message/Message_DisplaySceneTitleCard.s,Message_DisplaySceneTitleCard,0x80151A68,0x53
asm/non_matchings/code/z_message/Message_BombersNotebookQueueEvent.s,Message_BombersNotebookQueueEvent,0x80151BB4,0x3A
-asm/non_matchings/code/z_message/func_80151C9C.s,func_80151C9C,0x80151C9C,0x42
-asm/non_matchings/code/z_message/func_80151DA4.s,func_80151DA4,0x80151DA4,0x1A4
-asm/non_matchings/code/z_message/func_80152434.s,func_80152434,0x80152434,0xC
-asm/non_matchings/code/z_message/func_80152464.s,func_80152464,0x80152464,0xD
+asm/non_matchings/code/z_message/Message_BombersNotebookProcessEventQueue.s,func_80151C9C,0x80151C9C,0x42
+asm/non_matchings/code/z_message/Message_DisplayOcarinaStaffImpl.s,Message_DisplayOcarinaStaffImpl,0x80151DA4,0x1A4
+asm/non_matchings/code/z_message/Message_DisplayOcarinaStaff.s,Message_DisplayOcarinaStaff,0x80152434,0xC
+asm/non_matchings/code/z_message/Message_DisplayOcarinaStaffBlockSunsSong.s,Message_DisplayOcarinaStaffBlockSunsSong,0x80152464,0xD
asm/non_matchings/code/z_message/Message_GetState.s,Message_GetState,0x80152498,0x7D
-asm/non_matchings/code/z_message/func_8015268C.s,func_8015268C,0x8015268C,0x176
-asm/non_matchings/code/z_message/func_80152C64.s,func_80152C64,0x80152C64,0x12
+asm/non_matchings/code/z_message/Message_DrawTextBox.s,Message_DrawTextBox,0x8015268C,0x176
+asm/non_matchings/code/z_message/Message_SetView.s,Message_SetView,0x80152C64,0x12
asm/non_matchings/code/z_message/func_80152CAC.s,func_80152CAC,0x80152CAC,0x85
-asm/non_matchings/code/z_message/func_80152EC0.s,func_80152EC0,0x80152EC0,0x3E
-asm/non_matchings/code/z_message/func_80152FB8.s,func_80152FB8,0x80152FB8,0x1E6
-asm/non_matchings/code/z_message/func_80153750.s,func_80153750,0x80153750,0x1CB
-asm/non_matchings/code/z_message/func_80153E7C.s,func_80153E7C,0x80153E7C,0x1D
-asm/non_matchings/code/z_message/func_80153EF0.s,func_80153EF0,0x80153EF0,0xB9
-asm/non_matchings/code/z_message/func_801541D4.s,func_801541D4,0x801541D4,0x961
+asm/non_matchings/code/z_message/Message_SpawnSongEffect.s,Message_SpawnSongEffect,0x80152EC0,0x3E
+asm/non_matchings/code/z_message/Message_FlashOcarinaButtons.s,Message_FlashOcarinaButtons,0x80152FB8,0x1E6
+asm/non_matchings/code/z_message/Message_DrawOcarinaButtons.s,Message_DrawOcarinaButtons,0x80153750,0x1CB
+asm/non_matchings/code/z_message/Message_DrawText.s,Message_DrawText,0x80153E7C,0x1D
+asm/non_matchings/code/z_message/Message_DrawSceneTitleCard.s,Message_DrawSceneTitleCard,0x80153EF0,0xB9
+asm/non_matchings/code/z_message/Message_DrawMain.s,Message_DrawMain,0x801541D4,0x961
asm/non_matchings/code/z_message/Message_Draw.s,Message_Draw,0x80156758,0x2D
asm/non_matchings/code/z_message/Message_Update.s,Message_Update,0x8015680C,0x7A6
-asm/non_matchings/code/z_message/func_801586A4.s,func_801586A4,0x801586A4,0xC
+asm/non_matchings/code/z_message/Message_SetTables.s,Message_SetTables,0x801586A4,0xC
asm/non_matchings/code/z_message/Message_Init.s,Message_Init,0x801586D4,0x7F
asm/non_matchings/code/z_message_nes/Message_FindMessageNES.s,Message_FindMessageNES,0x801588D0,0x2E
asm/non_matchings/code/z_message_nes/Message_LoadCharNES.s,Message_LoadCharNES,0x80158988,0x27
@@ -2395,12 +2395,12 @@ asm/non_matchings/code/z_message_nes/Message_LoadLocalizedRupeesNES.s,Message_Lo
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_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
+asm/non_matchings/code/z_message_nes/Message_GetTimerDigitsNES.s,Message_GetTimerDigitsNES,0x80159438,0x8D
+asm/non_matchings/code/z_message_nes/Message_DrawTextNES.s,Message_DrawTextNES,0x8015966C,0x6CB
+asm/non_matchings/code/z_message_nes/Message_DecodeNES.s,Message_DecodeNES,0x8015B198,0xD6E
asm/non_matchings/code/z_message_staff/Message_FindCreditsMessage.s,Message_FindCreditsMessage,0x8015E750,0x27
-asm/non_matchings/code/z_message_staff/func_8015E7EC.s,func_8015E7EC,0x8015E7EC,0x42F
-asm/non_matchings/code/z_message_staff/func_8015F8A8.s,func_8015F8A8,0x8015F8A8,0x47A
+asm/non_matchings/code/z_message_staff/Message_DrawTextCredits.s,Message_DrawTextCredits,0x8015E7EC,0x42F
+asm/non_matchings/code/z_message_staff/Message_DecodeCredits.s,Message_DecodeCredits,0x8015F8A8,0x47A
asm/non_matchings/code/z_player_call/PlayerCall_InitFuncPtrs.s,PlayerCall_InitFuncPtrs,0x80160A90,0x1A
asm/non_matchings/code/z_player_call/PlayerCall_Init.s,PlayerCall_Init,0x80160AF8,0x12
asm/non_matchings/code/z_player_call/PlayerCall_Destroy.s,PlayerCall_Destroy,0x80160B40,0x10
@@ -2729,12 +2729,12 @@ asm/non_matchings/code/sched/Sched_SendGfxCancelMsg.s,Sched_SendGfxCancelMsg,0x8
asm/non_matchings/code/sched/Sched_FaultClient.s,Sched_FaultClient,0x80177084,0x36
asm/non_matchings/code/sched/Sched_ThreadEntry.s,Sched_ThreadEntry,0x8017715C,0x51
asm/non_matchings/code/sched/Sched_Init.s,Sched_Init,0x801772A0,0x3C
-asm/non_matchings/code/speed_meter/func_80177390.s,func_80177390,0x80177390,0x4
+asm/non_matchings/code/speed_meter/SpeedMeter_InitImpl.s,SpeedMeter_InitImpl,0x80177390,0x4
asm/non_matchings/code/speed_meter/SpeedMeter_Init.s,SpeedMeter_Init,0x801773A0,0x9
asm/non_matchings/code/speed_meter/SpeedMeter_Destroy.s,SpeedMeter_Destroy,0x801773C4,0x3
asm/non_matchings/code/speed_meter/SpeedMeter_DrawTimeEntries.s,SpeedMeter_DrawTimeEntries,0x801773D0,0x1AD
-asm/non_matchings/code/speed_meter/func_80177A84.s,func_80177A84,0x80177A84,0x11
-asm/non_matchings/code/speed_meter/func_80177AC8.s,func_80177AC8,0x80177AC8,0xE4
+asm/non_matchings/code/speed_meter/SpeedMeter_InitAllocEntry.s,SpeedMeter_InitAllocEntry,0x80177A84,0x11
+asm/non_matchings/code/speed_meter/SpeedMeter_DrawAllocEntry.s,SpeedMeter_DrawAllocEntry,0x80177AC8,0xE4
asm/non_matchings/code/speed_meter/SpeedMeter_DrawAllocEntries.s,SpeedMeter_DrawAllocEntries,0x80177E58,0xA6
asm/non_matchings/code/speed_meter/func_801780F0.s,func_801780F0,0x801780F0,0x3F
asm/non_matchings/code/speed_meter/func_801781EC.s,func_801781EC,0x801781EC,0x90
diff --git a/tools/weekeventregconvert.py b/tools/weekeventregconvert.py
index 0bde4a5ce..35757a022 100755
--- a/tools/weekeventregconvert.py
+++ b/tools/weekeventregconvert.py
@@ -189,7 +189,7 @@ weekEventReg = {
(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) | 0x02: "WEEKEVENTREG_OBTAINED_GREAT_SPIN_ATTACK",
(23 << 8) | 0x04: "WEEKEVENTREG_23_04",
(23 << 8) | 0x08: "WEEKEVENTREG_23_08",
(23 << 8) | 0x10: "WEEKEVENTREG_23_10",
diff --git a/undefined_syms.txt b/undefined_syms.txt
index 3e74e0409..cd89ee677 100644
--- a/undefined_syms.txt
+++ b/undefined_syms.txt
@@ -191,14 +191,6 @@ D_050089D0 = 0x050089D0;
D_060002C8 = 0x060002C8;
D_060005C4 = 0x060005C4;
-// ovl_Bg_Dy_Yoseizo
-
-D_06008090 = 0x06008090;
-D_0600D1B0 = 0x0600D1B0;
-D_0600D228 = 0x0600D228;
-D_0601C6F4 = 0x0601C6F4;
-D_0601C8B4 = 0x0601C8B4;
-
// ovl_Bg_Lotus
D_06000A20 = 0x06000A20;