diff --git a/assets/objects/gameplay_keep/arrow_skel.c b/assets/objects/gameplay_keep/arrow_skel.c
new file mode 100644
index 0000000000..493728e9c4
--- /dev/null
+++ b/assets/objects/gameplay_keep/arrow_skel.c
@@ -0,0 +1,52 @@
+#include "arrow_skel.h"
+#include "hilite_textures.h"
+#include "array_count.h"
+#include "gfx.h"
+
+u64 gArrowShaftTex[TEX_LEN(u64, gArrowShaftTex_WIDTH, gArrowShaftTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gArrowShaftTex.rgba16.inc.c"
+};
+
+u64 gArrowFletchingTex[TEX_LEN(u64, gArrowFletchingTex_WIDTH, gArrowFletchingTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gArrowFletchingTex.rgba16.inc.c"
+};
+
+Vtx gArrowNearVtx[] = {
+#include "assets/objects/gameplay_keep/gArrowNearVtx.inc.c"
+};
+
+Gfx gArrowNearDL[60] = {
+#include "assets/objects/gameplay_keep/gArrowNearDL.inc.c"
+};
+
+Vtx gArrowFarVtx[] = {
+#include "assets/objects/gameplay_keep/gArrowFarVtx.inc.c"
+};
+
+Gfx gArrowFarDL[52] = {
+#include "assets/objects/gameplay_keep/gArrowFarDL.inc.c"
+};
+
+LodLimb gArrowSkelLimb_0 = {
+#include "assets/objects/gameplay_keep/gArrowSkelLimb_0.inc.c"
+};
+
+LodLimb gArrowSkelLimb_1 = {
+#include "assets/objects/gameplay_keep/gArrowSkelLimb_1.inc.c"
+};
+
+LodLimb gArrowSkelLimb_2 = {
+#include "assets/objects/gameplay_keep/gArrowSkelLimb_2.inc.c"
+};
+
+LodLimb gArrowSkelLimb_3 = {
+#include "assets/objects/gameplay_keep/gArrowSkelLimb_3.inc.c"
+};
+
+void* gArrowLimbs[] = {
+#include "assets/objects/gameplay_keep/gArrowLimbs.inc.c"
+};
+
+SkeletonHeader gArrowSkel = {
+#include "assets/objects/gameplay_keep/gArrowSkel.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/arrow_skel.h b/assets/objects/gameplay_keep/arrow_skel.h
new file mode 100644
index 0000000000..f695bffaf6
--- /dev/null
+++ b/assets/objects/gameplay_keep/arrow_skel.h
@@ -0,0 +1,32 @@
+#ifndef GAMEPLAY_KEEP_ARROW_SKEL_H
+#define GAMEPLAY_KEEP_ARROW_SKEL_H
+
+#include "tex_len.h"
+#include "animation.h"
+
+#define gArrowShaftTex_WIDTH 16
+#define gArrowShaftTex_HEIGHT 128
+extern u64 gArrowShaftTex[TEX_LEN(u64, gArrowShaftTex_WIDTH, gArrowShaftTex_HEIGHT, 16)];
+#define gArrowFletchingTex_WIDTH 32
+#define gArrowFletchingTex_HEIGHT 16
+extern u64 gArrowFletchingTex[TEX_LEN(u64, gArrowFletchingTex_WIDTH, gArrowFletchingTex_HEIGHT, 16)];
+extern Vtx gArrowNearVtx[];
+extern Gfx gArrowNearDL[60];
+extern Vtx gArrowFarVtx[];
+extern Gfx gArrowFarDL[52];
+extern LodLimb gArrowSkelLimb_0;
+extern LodLimb gArrowSkelLimb_1;
+extern LodLimb gArrowSkelLimb_2;
+extern LodLimb gArrowSkelLimb_3;
+extern void* gArrowLimbs[];
+typedef enum ArrowSkelLimb {
+ /* 0 */ ARROW_LIMB_NONE,
+ /* 1 */ ARROW_LIMB_0,
+ /* 2 */ ARROW_LIMB_1,
+ /* 3 */ ARROW_LIMB_2,
+ /* 4 */ ARROW_LIMB_3,
+ /* 5 */ ARROW_LIMB_MAX
+} ArrowSkelLimb;
+extern SkeletonHeader gArrowSkel;
+
+#endif
diff --git a/assets/objects/gameplay_keep/bomb_body.c b/assets/objects/gameplay_keep/bomb_body.c
new file mode 100644
index 0000000000..ad3a24b9c2
--- /dev/null
+++ b/assets/objects/gameplay_keep/bomb_body.c
@@ -0,0 +1,14 @@
+#include "bomb_body.h"
+#include "gfx.h"
+
+u64 gBombBodyTex[TEX_LEN(u64, gBombBodyTex_WIDTH, gBombBodyTex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gBombBodyTex.ia8.inc.c"
+};
+
+Vtx gBombBodyVtx[] = {
+#include "assets/objects/gameplay_keep/gBombBodyVtx.inc.c"
+};
+
+Gfx gBombBodyDL[17] = {
+#include "assets/objects/gameplay_keep/gBombBodyDL.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/bomb_body.h b/assets/objects/gameplay_keep/bomb_body.h
new file mode 100644
index 0000000000..e7e91cc486
--- /dev/null
+++ b/assets/objects/gameplay_keep/bomb_body.h
@@ -0,0 +1,13 @@
+#ifndef GAMEPLAY_KEEP_BOMB_BODY_H
+#define GAMEPLAY_KEEP_BOMB_BODY_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gBombBodyTex_WIDTH 64
+#define gBombBodyTex_HEIGHT 64
+extern u64 gBombBodyTex[TEX_LEN(u64, gBombBodyTex_WIDTH, gBombBodyTex_HEIGHT, 8)];
+extern Vtx gBombBodyVtx[];
+extern Gfx gBombBodyDL[17];
+
+#endif
diff --git a/assets/objects/gameplay_keep/bomb_cap.c b/assets/objects/gameplay_keep/bomb_cap.c
new file mode 100644
index 0000000000..965a39b870
--- /dev/null
+++ b/assets/objects/gameplay_keep/bomb_cap.c
@@ -0,0 +1,14 @@
+#include "bomb_cap.h"
+#include "gfx.h"
+
+u64 gBombCapTex[TEX_LEN(u64, gBombCapTex_WIDTH, gBombCapTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gBombCapTex.rgba16.inc.c"
+};
+
+Vtx gBombCapVtx[] = {
+#include "assets/objects/gameplay_keep/gBombCapVtx.inc.c"
+};
+
+Gfx gBombCapDL[24] = {
+#include "assets/objects/gameplay_keep/gBombCapDL.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/bomb_cap.h b/assets/objects/gameplay_keep/bomb_cap.h
new file mode 100644
index 0000000000..e0c59b12e8
--- /dev/null
+++ b/assets/objects/gameplay_keep/bomb_cap.h
@@ -0,0 +1,13 @@
+#ifndef GAMEPLAY_KEEP_BOMB_CAP_H
+#define GAMEPLAY_KEEP_BOMB_CAP_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gBombCapTex_WIDTH 8
+#define gBombCapTex_HEIGHT 8
+extern u64 gBombCapTex[TEX_LEN(u64, gBombCapTex_WIDTH, gBombCapTex_HEIGHT, 16)];
+extern Vtx gBombCapVtx[];
+extern Gfx gBombCapDL[24];
+
+#endif
diff --git a/assets/objects/gameplay_keep/bombchu_body.c b/assets/objects/gameplay_keep/bombchu_body.c
new file mode 100644
index 0000000000..f0517de9e1
--- /dev/null
+++ b/assets/objects/gameplay_keep/bombchu_body.c
@@ -0,0 +1,14 @@
+#include "bombchu_body.h"
+#include "gfx.h"
+
+u64 gBombchuBodyTex[TEX_LEN(u64, gBombchuBodyTex_WIDTH, gBombchuBodyTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gBombchuBodyTex.rgba16.inc.c"
+};
+
+Vtx gBombchuVtx[] = {
+#include "assets/objects/gameplay_keep/gBombchuVtx.inc.c"
+};
+
+Gfx gBombchuDL[45] = {
+#include "assets/objects/gameplay_keep/gBombchuDL.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/bombchu_body.h b/assets/objects/gameplay_keep/bombchu_body.h
new file mode 100644
index 0000000000..ebd4b6a26d
--- /dev/null
+++ b/assets/objects/gameplay_keep/bombchu_body.h
@@ -0,0 +1,13 @@
+#ifndef GAMEPLAY_KEEP_BOMBCHU_BODY_H
+#define GAMEPLAY_KEEP_BOMBCHU_BODY_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gBombchuBodyTex_WIDTH 8
+#define gBombchuBodyTex_HEIGHT 8
+extern u64 gBombchuBodyTex[TEX_LEN(u64, gBombchuBodyTex_WIDTH, gBombchuBodyTex_HEIGHT, 16)];
+extern Vtx gBombchuVtx[];
+extern Gfx gBombchuDL[45];
+
+#endif
diff --git a/assets/objects/gameplay_keep/boomerang.c b/assets/objects/gameplay_keep/boomerang.c
new file mode 100644
index 0000000000..ccc4243e10
--- /dev/null
+++ b/assets/objects/gameplay_keep/boomerang.c
@@ -0,0 +1,20 @@
+#include "boomerang.h"
+#include "gameplay_keep_0x16A50.h"
+#include "hilite_textures.h"
+#include "gfx.h"
+
+Vtx gBoomerangVtx[] = {
+#include "assets/objects/gameplay_keep/gBoomerangVtx.inc.c"
+};
+
+Gfx gUnknownBlankDL[1] = {
+#include "assets/objects/gameplay_keep/gUnknownBlankDL.inc.c"
+};
+
+Gfx gBoomerangDL[46] = {
+#include "assets/objects/gameplay_keep/gBoomerangDL.inc.c"
+};
+
+Gfx gBoomerangRefDL[2] = {
+#include "assets/objects/gameplay_keep/gBoomerangRefDL.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/boomerang.h b/assets/objects/gameplay_keep/boomerang.h
new file mode 100644
index 0000000000..d288b7986c
--- /dev/null
+++ b/assets/objects/gameplay_keep/boomerang.h
@@ -0,0 +1,11 @@
+#ifndef GAMEPLAY_KEEP_BOOMERANG_H
+#define GAMEPLAY_KEEP_BOOMERANG_H
+
+#include "ultra64.h"
+
+extern Vtx gBoomerangVtx[];
+extern Gfx gUnknownBlankDL[1];
+extern Gfx gBoomerangDL[46];
+extern Gfx gBoomerangRefDL[2];
+
+#endif
diff --git a/assets/objects/gameplay_keep/bug_skel.c b/assets/objects/gameplay_keep/bug_skel.c
new file mode 100644
index 0000000000..25bb27e0aa
--- /dev/null
+++ b/assets/objects/gameplay_keep/bug_skel.c
@@ -0,0 +1,255 @@
+#include "bug_skel.h"
+#include "array_count.h"
+#include "gfx.h"
+
+Gfx gBugLimb_1DL[20] = {
+#include "assets/objects/gameplay_keep/gBugLimb_1DL.inc.c"
+};
+
+Gfx gBugLimb_1WrapperDL[2] = {
+#include "assets/objects/gameplay_keep/gBugLimb_1WrapperDL.inc.c"
+};
+
+Gfx gBugLimb_1WrapperWrapperDL[2] = {
+#include "assets/objects/gameplay_keep/gBugLimb_1WrapperWrapperDL.inc.c"
+};
+
+Vtx gBugLimb_1Vtx[] = {
+#include "assets/objects/gameplay_keep/gBugLimb_1Vtx.inc.c"
+};
+
+Gfx gBugLimb_2DL[20] = {
+#include "assets/objects/gameplay_keep/gBugLimb_2DL.inc.c"
+};
+
+Gfx gBugLimb_2WrapperDL[2] = {
+#include "assets/objects/gameplay_keep/gBugLimb_2WrapperDL.inc.c"
+};
+
+Gfx gBugLimb_2WrapperWrapperDL[2] = {
+#include "assets/objects/gameplay_keep/gBugLimb_2WrapperWrapperDL.inc.c"
+};
+
+Vtx gBugLimb_2Vtx[] = {
+#include "assets/objects/gameplay_keep/gBugLimb_2Vtx.inc.c"
+};
+
+Gfx gBugLimb_3DL[20] = {
+#include "assets/objects/gameplay_keep/gBugLimb_3DL.inc.c"
+};
+
+Gfx gBugLimb_3WrapperDL[2] = {
+#include "assets/objects/gameplay_keep/gBugLimb_3WrapperDL.inc.c"
+};
+
+Gfx gBugLimb_3WrapperWrapperDL[2] = {
+#include "assets/objects/gameplay_keep/gBugLimb_3WrapperWrapperDL.inc.c"
+};
+
+Vtx gBugLimb_3Vtx[] = {
+#include "assets/objects/gameplay_keep/gBugLimb_3Vtx.inc.c"
+};
+
+Gfx gBugLimb_4DL[20] = {
+#include "assets/objects/gameplay_keep/gBugLimb_4DL.inc.c"
+};
+
+Gfx gBugLimb_4WrapperDL[2] = {
+#include "assets/objects/gameplay_keep/gBugLimb_4WrapperDL.inc.c"
+};
+
+Gfx gBugLimb_4WrapperWrapperDL[2] = {
+#include "assets/objects/gameplay_keep/gBugLimb_4WrapperWrapperDL.inc.c"
+};
+
+Vtx gBugLimb_4Vtx[] = {
+#include "assets/objects/gameplay_keep/gBugLimb_4Vtx.inc.c"
+};
+
+Gfx gBugLimb_5DL[20] = {
+#include "assets/objects/gameplay_keep/gBugLimb_5DL.inc.c"
+};
+
+Gfx gBugLimb_5WrapperDL[2] = {
+#include "assets/objects/gameplay_keep/gBugLimb_5WrapperDL.inc.c"
+};
+
+Gfx gBugLimb_5WrapperWrapperDL[2] = {
+#include "assets/objects/gameplay_keep/gBugLimb_5WrapperWrapperDL.inc.c"
+};
+
+Vtx gBugLimb_5Vtx[] = {
+#include "assets/objects/gameplay_keep/gBugLimb_5Vtx.inc.c"
+};
+
+Gfx gBugLimb_6DL[20] = {
+#include "assets/objects/gameplay_keep/gBugLimb_6DL.inc.c"
+};
+
+Gfx gBugLimb_6WrapperDL[2] = {
+#include "assets/objects/gameplay_keep/gBugLimb_6WrapperDL.inc.c"
+};
+
+Gfx gBugLimb_6WrapperWrapperDL[2] = {
+#include "assets/objects/gameplay_keep/gBugLimb_6WrapperWrapperDL.inc.c"
+};
+
+Vtx gBugLimb_6Vtx[] = {
+#include "assets/objects/gameplay_keep/gBugLimb_6Vtx.inc.c"
+};
+
+Gfx gBugLimb_7DL[20] = {
+#include "assets/objects/gameplay_keep/gBugLimb_7DL.inc.c"
+};
+
+Gfx gBugLimb_7WrapperDL[2] = {
+#include "assets/objects/gameplay_keep/gBugLimb_7WrapperDL.inc.c"
+};
+
+Gfx gBugLimb_7WrapperWrapperDL[2] = {
+#include "assets/objects/gameplay_keep/gBugLimb_7WrapperWrapperDL.inc.c"
+};
+
+Vtx gBugLimb_7Vtx[] = {
+#include "assets/objects/gameplay_keep/gBugLimb_7Vtx.inc.c"
+};
+
+Gfx gBugLimb_8DL[20] = {
+#include "assets/objects/gameplay_keep/gBugLimb_8DL.inc.c"
+};
+
+Gfx gBugLimb_8WrapperDL[2] = {
+#include "assets/objects/gameplay_keep/gBugLimb_8WrapperDL.inc.c"
+};
+
+Gfx gBugLimb_8WrapperWrapperDL[2] = {
+#include "assets/objects/gameplay_keep/gBugLimb_8WrapperWrapperDL.inc.c"
+};
+
+Vtx gBugLimb_8Vtx[] = {
+#include "assets/objects/gameplay_keep/gBugLimb_8Vtx.inc.c"
+};
+
+Gfx gBugLimb_9DL[22] = {
+#include "assets/objects/gameplay_keep/gBugLimb_9DL.inc.c"
+};
+
+Gfx gBugLimb_9WrapperDL[2] = {
+#include "assets/objects/gameplay_keep/gBugLimb_9WrapperDL.inc.c"
+};
+
+Gfx gBugLimb_9WrapperWrapperDL[2] = {
+#include "assets/objects/gameplay_keep/gBugLimb_9WrapperWrapperDL.inc.c"
+};
+
+Vtx gBugLimb_9Vtx[] = {
+#include "assets/objects/gameplay_keep/gBugLimb_9Vtx.inc.c"
+};
+
+u64 gBugBodyTex[TEX_LEN(u64, gBugBodyTex_WIDTH, gBugBodyTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gBugBodyTex.rgba16.inc.c"
+};
+
+u64 gBugLegTex[TEX_LEN(u64, gBugLegTex_WIDTH, gBugLegTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gBugLegTex.rgba16.inc.c"
+};
+
+StandardLimb gBugSkelLimb_0 = {
+#include "assets/objects/gameplay_keep/gBugSkelLimb_0.inc.c"
+};
+
+StandardLimb gBugSkelLimb_1 = {
+#include "assets/objects/gameplay_keep/gBugSkelLimb_1.inc.c"
+};
+
+StandardLimb gBugSkelLimb_2 = {
+#include "assets/objects/gameplay_keep/gBugSkelLimb_2.inc.c"
+};
+
+StandardLimb gBugSkelLimb_3 = {
+#include "assets/objects/gameplay_keep/gBugSkelLimb_3.inc.c"
+};
+
+StandardLimb gBugSkelLimb_4 = {
+#include "assets/objects/gameplay_keep/gBugSkelLimb_4.inc.c"
+};
+
+StandardLimb gBugSkelLimb_5 = {
+#include "assets/objects/gameplay_keep/gBugSkelLimb_5.inc.c"
+};
+
+StandardLimb gBugSkelLimb_6 = {
+#include "assets/objects/gameplay_keep/gBugSkelLimb_6.inc.c"
+};
+
+StandardLimb gBugSkelLimb_7 = {
+#include "assets/objects/gameplay_keep/gBugSkelLimb_7.inc.c"
+};
+
+StandardLimb gBugSkelLimb_8 = {
+#include "assets/objects/gameplay_keep/gBugSkelLimb_8.inc.c"
+};
+
+StandardLimb gBugSkelLimb_9 = {
+#include "assets/objects/gameplay_keep/gBugSkelLimb_9.inc.c"
+};
+
+StandardLimb gBugSkelLimb_10 = {
+#include "assets/objects/gameplay_keep/gBugSkelLimb_10.inc.c"
+};
+
+StandardLimb gBugSkelLimb_11 = {
+#include "assets/objects/gameplay_keep/gBugSkelLimb_11.inc.c"
+};
+
+StandardLimb gBugSkelLimb_12 = {
+#include "assets/objects/gameplay_keep/gBugSkelLimb_12.inc.c"
+};
+
+StandardLimb gBugSkelLimb_13 = {
+#include "assets/objects/gameplay_keep/gBugSkelLimb_13.inc.c"
+};
+
+StandardLimb gBugSkelLimb_14 = {
+#include "assets/objects/gameplay_keep/gBugSkelLimb_14.inc.c"
+};
+
+StandardLimb gBugSkelLimb_15 = {
+#include "assets/objects/gameplay_keep/gBugSkelLimb_15.inc.c"
+};
+
+StandardLimb gBugSkelLimb_16 = {
+#include "assets/objects/gameplay_keep/gBugSkelLimb_16.inc.c"
+};
+
+StandardLimb gBugSkelLimb_17 = {
+#include "assets/objects/gameplay_keep/gBugSkelLimb_17.inc.c"
+};
+
+StandardLimb gBugSkelLimb_18 = {
+#include "assets/objects/gameplay_keep/gBugSkelLimb_18.inc.c"
+};
+
+StandardLimb gBugSkelLimb_19 = {
+#include "assets/objects/gameplay_keep/gBugSkelLimb_19.inc.c"
+};
+
+StandardLimb gBugSkelLimb_20 = {
+#include "assets/objects/gameplay_keep/gBugSkelLimb_20.inc.c"
+};
+
+StandardLimb gBugSkelLimb_21 = {
+#include "assets/objects/gameplay_keep/gBugSkelLimb_21.inc.c"
+};
+
+StandardLimb gBugSkelLimb_22 = {
+#include "assets/objects/gameplay_keep/gBugSkelLimb_22.inc.c"
+};
+
+void* gBugLimbs[] = {
+#include "assets/objects/gameplay_keep/gBugLimbs.inc.c"
+};
+
+SkeletonHeader gBugSkel = {
+#include "assets/objects/gameplay_keep/gBugSkel.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/bug_skel.h b/assets/objects/gameplay_keep/bug_skel.h
new file mode 100644
index 0000000000..d742254c94
--- /dev/null
+++ b/assets/objects/gameplay_keep/bug_skel.h
@@ -0,0 +1,103 @@
+#ifndef GAMEPLAY_KEEP_BUG_SKEL_H
+#define GAMEPLAY_KEEP_BUG_SKEL_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+#include "animation.h"
+
+extern Gfx gBugLimb_1DL[20];
+extern Gfx gBugLimb_1WrapperDL[2];
+extern Gfx gBugLimb_1WrapperWrapperDL[2];
+extern Vtx gBugLimb_1Vtx[];
+extern Gfx gBugLimb_2DL[20];
+extern Gfx gBugLimb_2WrapperDL[2];
+extern Gfx gBugLimb_2WrapperWrapperDL[2];
+extern Vtx gBugLimb_2Vtx[];
+extern Gfx gBugLimb_3DL[20];
+extern Gfx gBugLimb_3WrapperDL[2];
+extern Gfx gBugLimb_3WrapperWrapperDL[2];
+extern Vtx gBugLimb_3Vtx[];
+extern Gfx gBugLimb_4DL[20];
+extern Gfx gBugLimb_4WrapperDL[2];
+extern Gfx gBugLimb_4WrapperWrapperDL[2];
+extern Vtx gBugLimb_4Vtx[];
+extern Gfx gBugLimb_5DL[20];
+extern Gfx gBugLimb_5WrapperDL[2];
+extern Gfx gBugLimb_5WrapperWrapperDL[2];
+extern Vtx gBugLimb_5Vtx[];
+extern Gfx gBugLimb_6DL[20];
+extern Gfx gBugLimb_6WrapperDL[2];
+extern Gfx gBugLimb_6WrapperWrapperDL[2];
+extern Vtx gBugLimb_6Vtx[];
+extern Gfx gBugLimb_7DL[20];
+extern Gfx gBugLimb_7WrapperDL[2];
+extern Gfx gBugLimb_7WrapperWrapperDL[2];
+extern Vtx gBugLimb_7Vtx[];
+extern Gfx gBugLimb_8DL[20];
+extern Gfx gBugLimb_8WrapperDL[2];
+extern Gfx gBugLimb_8WrapperWrapperDL[2];
+extern Vtx gBugLimb_8Vtx[];
+extern Gfx gBugLimb_9DL[22];
+extern Gfx gBugLimb_9WrapperDL[2];
+extern Gfx gBugLimb_9WrapperWrapperDL[2];
+extern Vtx gBugLimb_9Vtx[];
+#define gBugBodyTex_WIDTH 16
+#define gBugBodyTex_HEIGHT 64
+extern u64 gBugBodyTex[TEX_LEN(u64, gBugBodyTex_WIDTH, gBugBodyTex_HEIGHT, 16)];
+#define gBugLegTex_WIDTH 8
+#define gBugLegTex_HEIGHT 16
+extern u64 gBugLegTex[TEX_LEN(u64, gBugLegTex_WIDTH, gBugLegTex_HEIGHT, 16)];
+extern StandardLimb gBugSkelLimb_0;
+extern StandardLimb gBugSkelLimb_1;
+extern StandardLimb gBugSkelLimb_2;
+extern StandardLimb gBugSkelLimb_3;
+extern StandardLimb gBugSkelLimb_4;
+extern StandardLimb gBugSkelLimb_5;
+extern StandardLimb gBugSkelLimb_6;
+extern StandardLimb gBugSkelLimb_7;
+extern StandardLimb gBugSkelLimb_8;
+extern StandardLimb gBugSkelLimb_9;
+extern StandardLimb gBugSkelLimb_10;
+extern StandardLimb gBugSkelLimb_11;
+extern StandardLimb gBugSkelLimb_12;
+extern StandardLimb gBugSkelLimb_13;
+extern StandardLimb gBugSkelLimb_14;
+extern StandardLimb gBugSkelLimb_15;
+extern StandardLimb gBugSkelLimb_16;
+extern StandardLimb gBugSkelLimb_17;
+extern StandardLimb gBugSkelLimb_18;
+extern StandardLimb gBugSkelLimb_19;
+extern StandardLimb gBugSkelLimb_20;
+extern StandardLimb gBugSkelLimb_21;
+extern StandardLimb gBugSkelLimb_22;
+extern void* gBugLimbs[];
+typedef enum BugSkelLimb {
+ /* 0 */ BUG_LIMB_NONE,
+ /* 1 */ BUG_LIMB_0,
+ /* 2 */ BUG_LIMB_1,
+ /* 3 */ BUG_LIMB_2,
+ /* 4 */ BUG_LIMB_3,
+ /* 5 */ BUG_LIMB_4,
+ /* 6 */ BUG_LIMB_5,
+ /* 7 */ BUG_LIMB_6,
+ /* 8 */ BUG_LIMB_7,
+ /* 9 */ BUG_LIMB_8,
+ /* 10 */ BUG_LIMB_9,
+ /* 11 */ BUG_LIMB_10,
+ /* 12 */ BUG_LIMB_11,
+ /* 13 */ BUG_LIMB_12,
+ /* 14 */ BUG_LIMB_13,
+ /* 15 */ BUG_LIMB_14,
+ /* 16 */ BUG_LIMB_15,
+ /* 17 */ BUG_LIMB_16,
+ /* 18 */ BUG_LIMB_17,
+ /* 19 */ BUG_LIMB_18,
+ /* 20 */ BUG_LIMB_19,
+ /* 21 */ BUG_LIMB_20,
+ /* 22 */ BUG_LIMB_21,
+ /* 23 */ BUG_LIMB_22,
+ /* 24 */ BUG_LIMB_MAX
+} BugSkelLimb;
+extern SkeletonHeader gBugSkel;
+
+#endif
diff --git a/assets/objects/gameplay_keep/circle_glow_textures.c b/assets/objects/gameplay_keep/circle_glow_textures.c
new file mode 100644
index 0000000000..0914f13e0e
--- /dev/null
+++ b/assets/objects/gameplay_keep/circle_glow_textures.c
@@ -0,0 +1,17 @@
+#include "circle_glow_textures.h"
+
+u64 gCircleGlowLTex[TEX_LEN(u64, gCircleGlowLTex_WIDTH, gCircleGlowLTex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gCircleGlowLTex.i8.inc.c"
+};
+
+u64 gCircleGlowRTex[TEX_LEN(u64, gCircleGlowRTex_WIDTH, gCircleGlowRTex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gCircleGlowRTex.i8.inc.c"
+};
+
+u64 gCircleGlowSLTex[TEX_LEN(u64, gCircleGlowSLTex_WIDTH, gCircleGlowSLTex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gCircleGlowSLTex.i8.inc.c"
+};
+
+u64 gCircleGlowSRTex[TEX_LEN(u64, gCircleGlowSRTex_WIDTH, gCircleGlowSRTex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gCircleGlowSRTex.i8.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/circle_glow_textures.h b/assets/objects/gameplay_keep/circle_glow_textures.h
new file mode 100644
index 0000000000..d326d1b456
--- /dev/null
+++ b/assets/objects/gameplay_keep/circle_glow_textures.h
@@ -0,0 +1,20 @@
+#ifndef GAMEPLAY_KEEP_CIRCLE_GLOW_TEXTURES_H
+#define GAMEPLAY_KEEP_CIRCLE_GLOW_TEXTURES_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gCircleGlowLTex_WIDTH 32
+#define gCircleGlowLTex_HEIGHT 64
+extern u64 gCircleGlowLTex[TEX_LEN(u64, gCircleGlowLTex_WIDTH, gCircleGlowLTex_HEIGHT, 8)];
+#define gCircleGlowRTex_WIDTH 32
+#define gCircleGlowRTex_HEIGHT 64
+extern u64 gCircleGlowRTex[TEX_LEN(u64, gCircleGlowRTex_WIDTH, gCircleGlowRTex_HEIGHT, 8)];
+#define gCircleGlowSLTex_WIDTH 32
+#define gCircleGlowSLTex_HEIGHT 64
+extern u64 gCircleGlowSLTex[TEX_LEN(u64, gCircleGlowSLTex_WIDTH, gCircleGlowSLTex_HEIGHT, 8)];
+#define gCircleGlowSRTex_WIDTH 32
+#define gCircleGlowSRTex_HEIGHT 64
+extern u64 gCircleGlowSRTex[TEX_LEN(u64, gCircleGlowSRTex_WIDTH, gCircleGlowSRTex_HEIGHT, 8)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/compass_arrow.c b/assets/objects/gameplay_keep/compass_arrow.c
new file mode 100644
index 0000000000..b41eb184e9
--- /dev/null
+++ b/assets/objects/gameplay_keep/compass_arrow.c
@@ -0,0 +1,10 @@
+#include "compass_arrow.h"
+#include "gfx.h"
+
+Gfx gCompassArrowDL[5] = {
+#include "assets/objects/gameplay_keep/gCompassArrowDL.inc.c"
+};
+
+Vtx gCompassArrowVtx[] = {
+#include "assets/objects/gameplay_keep/gCompassArrowVtx.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/compass_arrow.h b/assets/objects/gameplay_keep/compass_arrow.h
new file mode 100644
index 0000000000..4d3b5f3d4a
--- /dev/null
+++ b/assets/objects/gameplay_keep/compass_arrow.h
@@ -0,0 +1,9 @@
+#ifndef GAMEPLAY_KEEP_COMPASS_ARROW_H
+#define GAMEPLAY_KEEP_COMPASS_ARROW_H
+
+#include "ultra64.h"
+
+extern Gfx gCompassArrowDL[5];
+extern Vtx gCompassArrowVtx[];
+
+#endif
diff --git a/assets/objects/gameplay_keep/cuttable_shrub.c b/assets/objects/gameplay_keep/cuttable_shrub.c
new file mode 100644
index 0000000000..4d25fba68d
--- /dev/null
+++ b/assets/objects/gameplay_keep/cuttable_shrub.c
@@ -0,0 +1,27 @@
+#include "cuttable_shrub.h"
+#include "gfx.h"
+
+Vtx gCuttableShrubStalkVtx[] = {
+#include "assets/objects/gameplay_keep/gCuttableShrubStalkVtx.inc.c"
+};
+
+Gfx gCuttableShrubStalkDL[18] = {
+#include "assets/objects/gameplay_keep/gCuttableShrubStalkDL.inc.c"
+};
+
+Vtx gCuttableShrubTipVtx[] = {
+#include "assets/objects/gameplay_keep/gCuttableShrubTipVtx.inc.c"
+};
+
+Gfx gCuttableShrubTipDL[18] = {
+#include "assets/objects/gameplay_keep/gCuttableShrubTipDL.inc.c"
+};
+
+u64 gCuttableShrubLeafTFragmentTex[TEX_LEN(u64, gCuttableShrubLeafTFragmentTex_WIDTH,
+ gCuttableShrubLeafTFragmentTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gCuttableShrubLeafTFragmentTex.rgba16.inc.c"
+};
+
+u64 gCuttableShrubTex[TEX_LEN(u64, gCuttableShrubTex_WIDTH, gCuttableShrubTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gCuttableShrubTex.rgba16.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/cuttable_shrub.h b/assets/objects/gameplay_keep/cuttable_shrub.h
new file mode 100644
index 0000000000..977fa363c6
--- /dev/null
+++ b/assets/objects/gameplay_keep/cuttable_shrub.h
@@ -0,0 +1,18 @@
+#ifndef GAMEPLAY_KEEP_CUTTABLE_SHRUB_H
+#define GAMEPLAY_KEEP_CUTTABLE_SHRUB_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+extern Vtx gCuttableShrubStalkVtx[];
+extern Gfx gCuttableShrubStalkDL[18];
+extern Vtx gCuttableShrubTipVtx[];
+extern Gfx gCuttableShrubTipDL[18];
+#define gCuttableShrubLeafTFragmentTex_WIDTH 32
+#define gCuttableShrubLeafTFragmentTex_HEIGHT 32
+extern u64 gCuttableShrubLeafTFragmentTex[TEX_LEN(u64, gCuttableShrubLeafTFragmentTex_WIDTH, gCuttableShrubLeafTFragmentTex_HEIGHT, 16)];
+#define gCuttableShrubTex_WIDTH 32
+#define gCuttableShrubTex_HEIGHT 32
+extern u64 gCuttableShrubTex[TEX_LEN(u64, gCuttableShrubTex_WIDTH, gCuttableShrubTex_HEIGHT, 16)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/debug_models.c b/assets/objects/gameplay_keep/debug_models.c
new file mode 100644
index 0000000000..fb718214ab
--- /dev/null
+++ b/assets/objects/gameplay_keep/debug_models.c
@@ -0,0 +1,62 @@
+#include "debug_models.h"
+#include "gfx.h"
+
+Vtx gDebugPyramidVtx[] = {
+#include "assets/objects/gameplay_keep/gDebugPyramidVtx.inc.c"
+};
+
+Gfx gDebugPyramidDL[6] = {
+#include "assets/objects/gameplay_keep/gDebugPyramidDL.inc.c"
+};
+
+u64 gDebugCircleTex[TEX_LEN(u64, gDebugCircleTex_WIDTH, gDebugCircleTex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gDebugCircleTex.i8.inc.c"
+};
+
+u64 gDebugBallTex[TEX_LEN(u64, gDebugBallTex_WIDTH, gDebugBallTex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gDebugBallTex.i8.inc.c"
+};
+
+u64 gDebugCursorTex[TEX_LEN(u64, gDebugCursorTex_WIDTH, gDebugCursorTex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gDebugCursorTex.i8.inc.c"
+};
+
+u64 gDebugCrossTex[TEX_LEN(u64, gDebugCrossTex_WIDTH, gDebugCrossTex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gDebugCrossTex.i8.inc.c"
+};
+
+Gfx gDebugArrowDL[12] = {
+#include "assets/objects/gameplay_keep/gDebugArrowDL.inc.c"
+};
+
+Vtx gDebugArrowVtx[] = {
+#include "assets/objects/gameplay_keep/gDebugArrowVtx.inc.c"
+};
+
+Gfx gDebugCameraDL[15] = {
+#include "assets/objects/gameplay_keep/gDebugCameraDL.inc.c"
+};
+
+Vtx gDebugCameraVtx[] = {
+#include "assets/objects/gameplay_keep/gDebugCameraVtx.inc.c"
+};
+
+Vtx gDebugCheckeredFloorVtx[] = {
+#include "assets/objects/gameplay_keep/gDebugCheckeredFloorVtx.inc.c"
+};
+
+Gfx gDebugCheckeredFloorDL[18] = {
+#include "assets/objects/gameplay_keep/gDebugCheckeredFloorDL.inc.c"
+};
+
+u64 gDebugCheckeredFloorTex[TEX_LEN(u64, gDebugCheckeredFloorTex_WIDTH, gDebugCheckeredFloorTex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gDebugCheckeredFloorTex.ia4.inc.c"
+};
+
+Vtx gDebugSpriteVtx[] = {
+#include "assets/objects/gameplay_keep/gDebugSpriteVtx.inc.c"
+};
+
+Gfx gDebugSpriteDL[3] = {
+#include "assets/objects/gameplay_keep/gDebugSpriteDL.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/debug_models.h b/assets/objects/gameplay_keep/debug_models.h
new file mode 100644
index 0000000000..52da352443
--- /dev/null
+++ b/assets/objects/gameplay_keep/debug_models.h
@@ -0,0 +1,33 @@
+#ifndef GAMEPLAY_KEEP_DEBUG_MODELS_H
+#define GAMEPLAY_KEEP_DEBUG_MODELS_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+extern Vtx gDebugPyramidVtx[];
+extern Gfx gDebugPyramidDL[6];
+#define gDebugCircleTex_WIDTH 16
+#define gDebugCircleTex_HEIGHT 16
+extern u64 gDebugCircleTex[TEX_LEN(u64, gDebugCircleTex_WIDTH, gDebugCircleTex_HEIGHT, 8)];
+#define gDebugBallTex_WIDTH 16
+#define gDebugBallTex_HEIGHT 16
+extern u64 gDebugBallTex[TEX_LEN(u64, gDebugBallTex_WIDTH, gDebugBallTex_HEIGHT, 8)];
+#define gDebugCursorTex_WIDTH 16
+#define gDebugCursorTex_HEIGHT 16
+extern u64 gDebugCursorTex[TEX_LEN(u64, gDebugCursorTex_WIDTH, gDebugCursorTex_HEIGHT, 8)];
+#define gDebugCrossTex_WIDTH 16
+#define gDebugCrossTex_HEIGHT 16
+extern u64 gDebugCrossTex[TEX_LEN(u64, gDebugCrossTex_WIDTH, gDebugCrossTex_HEIGHT, 8)];
+extern Gfx gDebugArrowDL[12];
+extern Vtx gDebugArrowVtx[];
+extern Gfx gDebugCameraDL[15];
+extern Vtx gDebugCameraVtx[];
+extern Vtx gDebugCheckeredFloorVtx[];
+extern Gfx gDebugCheckeredFloorDL[18];
+#define gDebugCheckeredFloorTex_WIDTH 32
+#define gDebugCheckeredFloorTex_HEIGHT 32
+extern u64 gDebugCheckeredFloorTex[TEX_LEN(u64, gDebugCheckeredFloorTex_WIDTH, gDebugCheckeredFloorTex_HEIGHT, 4)];
+extern Vtx gDebugSpriteVtx[];
+extern Gfx gDebugSpriteDL[3];
+
+#endif
diff --git a/assets/objects/gameplay_keep/directional_sign_model.c b/assets/objects/gameplay_keep/directional_sign_model.c
new file mode 100644
index 0000000000..716ad861ec
--- /dev/null
+++ b/assets/objects/gameplay_keep/directional_sign_model.c
@@ -0,0 +1,11 @@
+#include "directional_sign_model.h"
+#include "sign_textures.h"
+#include "gfx.h"
+
+Vtx gSignDirectionalVtx[] = {
+#include "assets/objects/gameplay_keep/gSignDirectionalVtx.inc.c"
+};
+
+Gfx gSignDirectionalDL[88] = {
+#include "assets/objects/gameplay_keep/gSignDirectionalDL.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/directional_sign_model.h b/assets/objects/gameplay_keep/directional_sign_model.h
new file mode 100644
index 0000000000..9ba0dc8600
--- /dev/null
+++ b/assets/objects/gameplay_keep/directional_sign_model.h
@@ -0,0 +1,9 @@
+#ifndef GAMEPLAY_KEEP_DIRECTIONAL_SIGN_MODEL_H
+#define GAMEPLAY_KEEP_DIRECTIONAL_SIGN_MODEL_H
+
+#include "ultra64.h"
+
+extern Vtx gSignDirectionalVtx[];
+extern Gfx gSignDirectionalDL[88];
+
+#endif
diff --git a/assets/objects/gameplay_keep/door_skel.c b/assets/objects/gameplay_keep/door_skel.c
new file mode 100644
index 0000000000..ab71076772
--- /dev/null
+++ b/assets/objects/gameplay_keep/door_skel.c
@@ -0,0 +1,55 @@
+#include "door_skel.h"
+#include "array_count.h"
+#include "gfx.h"
+
+Vtx gDoorLeftVtx[] = {
+#include "assets/objects/gameplay_keep/gDoorLeftVtx.inc.c"
+};
+
+Vtx gDoorRightVtx[] = {
+#include "assets/objects/gameplay_keep/gDoorRightVtx.inc.c"
+};
+
+Vtx gDoorFrameVtx[] = {
+#include "assets/objects/gameplay_keep/gDoorFrameVtx.inc.c"
+};
+
+Gfx gDoorFrameDL[17] = {
+#include "assets/objects/gameplay_keep/gDoorFrameDL.inc.c"
+};
+
+Gfx gDoorLeftDL[41] = {
+#include "assets/objects/gameplay_keep/gDoorLeftDL.inc.c"
+};
+
+Gfx gDoorRightDL[39] = {
+#include "assets/objects/gameplay_keep/gDoorRightDL.inc.c"
+};
+
+u64 gWoodenDoorTex[TEX_LEN(u64, gWoodenDoorTex_WIDTH, gWoodenDoorTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gWoodenDoorTex.rgba16.inc.c"
+};
+
+StandardLimb gDoorSkelLimb_0 = {
+#include "assets/objects/gameplay_keep/gDoorSkelLimb_0.inc.c"
+};
+
+StandardLimb gDoorSkelLimb_1 = {
+#include "assets/objects/gameplay_keep/gDoorSkelLimb_1.inc.c"
+};
+
+StandardLimb gDoorSkelLimb_2 = {
+#include "assets/objects/gameplay_keep/gDoorSkelLimb_2.inc.c"
+};
+
+StandardLimb gDoorSkelLimb_3 = {
+#include "assets/objects/gameplay_keep/gDoorSkelLimb_3.inc.c"
+};
+
+void* gDoorLimbs[] = {
+#include "assets/objects/gameplay_keep/gDoorLimbs.inc.c"
+};
+
+SkeletonHeader gDoorSkel = {
+#include "assets/objects/gameplay_keep/gDoorSkel.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/door_skel.h b/assets/objects/gameplay_keep/door_skel.h
new file mode 100644
index 0000000000..9319ffad76
--- /dev/null
+++ b/assets/objects/gameplay_keep/door_skel.h
@@ -0,0 +1,32 @@
+#ifndef GAMEPLAY_KEEP_DOOR_SKEL_H
+#define GAMEPLAY_KEEP_DOOR_SKEL_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+#include "animation.h"
+
+extern Vtx gDoorLeftVtx[];
+extern Vtx gDoorRightVtx[];
+extern Vtx gDoorFrameVtx[];
+extern Gfx gDoorFrameDL[17];
+extern Gfx gDoorLeftDL[41];
+extern Gfx gDoorRightDL[39];
+#define gWoodenDoorTex_WIDTH 32
+#define gWoodenDoorTex_HEIGHT 64
+extern u64 gWoodenDoorTex[TEX_LEN(u64, gWoodenDoorTex_WIDTH, gWoodenDoorTex_HEIGHT, 16)];
+extern StandardLimb gDoorSkelLimb_0;
+extern StandardLimb gDoorSkelLimb_1;
+extern StandardLimb gDoorSkelLimb_2;
+extern StandardLimb gDoorSkelLimb_3;
+extern void* gDoorLimbs[];
+typedef enum DoorSkelLimb {
+ /* 0 */ DOOR_LIMB_NONE,
+ /* 1 */ DOOR_LIMB_0,
+ /* 2 */ DOOR_LIMB_1,
+ /* 3 */ DOOR_LIMB_2,
+ /* 4 */ DOOR_LIMB_3,
+ /* 5 */ DOOR_LIMB_MAX
+} DoorSkelLimb;
+extern SkeletonHeader gDoorSkel;
+
+#endif
diff --git a/assets/objects/gameplay_keep/drop_recovery_heart_tex.c b/assets/objects/gameplay_keep/drop_recovery_heart_tex.c
new file mode 100644
index 0000000000..347a7714fb
--- /dev/null
+++ b/assets/objects/gameplay_keep/drop_recovery_heart_tex.c
@@ -0,0 +1,5 @@
+#include "drop_recovery_heart_tex.h"
+
+u64 gDropRecoveryHeartTex[TEX_LEN(u64, gDropRecoveryHeartTex_WIDTH, gDropRecoveryHeartTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gDropRecoveryHeartTex.rgba16.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/drop_recovery_heart_tex.h b/assets/objects/gameplay_keep/drop_recovery_heart_tex.h
new file mode 100644
index 0000000000..ecaba29d26
--- /dev/null
+++ b/assets/objects/gameplay_keep/drop_recovery_heart_tex.h
@@ -0,0 +1,11 @@
+#ifndef GAMEPLAY_KEEP_DROP_RECOVERY_HEART_TEX_H
+#define GAMEPLAY_KEEP_DROP_RECOVERY_HEART_TEX_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gDropRecoveryHeartTex_WIDTH 32
+#define gDropRecoveryHeartTex_HEIGHT 32
+extern u64 gDropRecoveryHeartTex[TEX_LEN(u64, gDropRecoveryHeartTex_WIDTH, gDropRecoveryHeartTex_HEIGHT, 16)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/dust_textures.c b/assets/objects/gameplay_keep/dust_textures.c
new file mode 100644
index 0000000000..2dccdd6668
--- /dev/null
+++ b/assets/objects/gameplay_keep/dust_textures.c
@@ -0,0 +1,33 @@
+#include "dust_textures.h"
+
+u64 gDust1Tex[TEX_LEN(u64, gDust1Tex_WIDTH, gDust1Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gDust1Tex.i8.inc.c"
+};
+
+u64 gDust2Tex[TEX_LEN(u64, gDust2Tex_WIDTH, gDust2Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gDust2Tex.i8.inc.c"
+};
+
+u64 gDust3Tex[TEX_LEN(u64, gDust3Tex_WIDTH, gDust3Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gDust3Tex.i8.inc.c"
+};
+
+u64 gDust4Tex[TEX_LEN(u64, gDust4Tex_WIDTH, gDust4Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gDust4Tex.i8.inc.c"
+};
+
+u64 gDust5Tex[TEX_LEN(u64, gDust5Tex_WIDTH, gDust5Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gDust5Tex.i8.inc.c"
+};
+
+u64 gDust6Tex[TEX_LEN(u64, gDust6Tex_WIDTH, gDust6Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gDust6Tex.i8.inc.c"
+};
+
+u64 gDust7Tex[TEX_LEN(u64, gDust7Tex_WIDTH, gDust7Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gDust7Tex.i8.inc.c"
+};
+
+u64 gDust8Tex[TEX_LEN(u64, gDust8Tex_WIDTH, gDust8Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gDust8Tex.i8.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/dust_textures.h b/assets/objects/gameplay_keep/dust_textures.h
new file mode 100644
index 0000000000..b771929189
--- /dev/null
+++ b/assets/objects/gameplay_keep/dust_textures.h
@@ -0,0 +1,32 @@
+#ifndef GAMEPLAY_KEEP_DUST_TEXTURES_H
+#define GAMEPLAY_KEEP_DUST_TEXTURES_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gDust1Tex_WIDTH 32
+#define gDust1Tex_HEIGHT 32
+extern u64 gDust1Tex[TEX_LEN(u64, gDust1Tex_WIDTH, gDust1Tex_HEIGHT, 8)];
+#define gDust2Tex_WIDTH 32
+#define gDust2Tex_HEIGHT 32
+extern u64 gDust2Tex[TEX_LEN(u64, gDust2Tex_WIDTH, gDust2Tex_HEIGHT, 8)];
+#define gDust3Tex_WIDTH 32
+#define gDust3Tex_HEIGHT 32
+extern u64 gDust3Tex[TEX_LEN(u64, gDust3Tex_WIDTH, gDust3Tex_HEIGHT, 8)];
+#define gDust4Tex_WIDTH 32
+#define gDust4Tex_HEIGHT 32
+extern u64 gDust4Tex[TEX_LEN(u64, gDust4Tex_WIDTH, gDust4Tex_HEIGHT, 8)];
+#define gDust5Tex_WIDTH 32
+#define gDust5Tex_HEIGHT 32
+extern u64 gDust5Tex[TEX_LEN(u64, gDust5Tex_WIDTH, gDust5Tex_HEIGHT, 8)];
+#define gDust6Tex_WIDTH 32
+#define gDust6Tex_HEIGHT 32
+extern u64 gDust6Tex[TEX_LEN(u64, gDust6Tex_WIDTH, gDust6Tex_HEIGHT, 8)];
+#define gDust7Tex_WIDTH 32
+#define gDust7Tex_HEIGHT 32
+extern u64 gDust7Tex[TEX_LEN(u64, gDust7Tex_WIDTH, gDust7Tex_HEIGHT, 8)];
+#define gDust8Tex_WIDTH 32
+#define gDust8Tex_HEIGHT 32
+extern u64 gDust8Tex[TEX_LEN(u64, gDust8Tex_WIDTH, gDust8Tex_HEIGHT, 8)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/eff_bomb_explosion.c b/assets/objects/gameplay_keep/eff_bomb_explosion.c
new file mode 100644
index 0000000000..cb17bb5af3
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_bomb_explosion.c
@@ -0,0 +1,50 @@
+#include "eff_bomb_explosion.h"
+#include "gfx.h"
+
+u64 gEffBombExplosion1Tex[TEX_LEN(u64, gEffBombExplosion1Tex_WIDTH, gEffBombExplosion1Tex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gEffBombExplosion1Tex.ia16.inc.c"
+};
+
+u64 gEffBombExplosion2Tex[TEX_LEN(u64, gEffBombExplosion2Tex_WIDTH, gEffBombExplosion2Tex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gEffBombExplosion2Tex.ia16.inc.c"
+};
+
+u64 gEffBombExplosion3Tex[TEX_LEN(u64, gEffBombExplosion3Tex_WIDTH, gEffBombExplosion3Tex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gEffBombExplosion3Tex.ia16.inc.c"
+};
+
+u64 gEffBombExplosion4Tex[TEX_LEN(u64, gEffBombExplosion4Tex_WIDTH, gEffBombExplosion4Tex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gEffBombExplosion4Tex.ia16.inc.c"
+};
+
+u64 gEffBombExplosion5Tex[TEX_LEN(u64, gEffBombExplosion5Tex_WIDTH, gEffBombExplosion5Tex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gEffBombExplosion5Tex.ia16.inc.c"
+};
+
+u64 gEffBombExplosion6Tex[TEX_LEN(u64, gEffBombExplosion6Tex_WIDTH, gEffBombExplosion6Tex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gEffBombExplosion6Tex.ia16.inc.c"
+};
+
+u64 gEffBombExplosion7Tex[TEX_LEN(u64, gEffBombExplosion7Tex_WIDTH, gEffBombExplosion7Tex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gEffBombExplosion7Tex.ia16.inc.c"
+};
+
+u64 gEffBombExplosion8Tex[TEX_LEN(u64, gEffBombExplosion8Tex_WIDTH, gEffBombExplosion8Tex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gEffBombExplosion8Tex.ia16.inc.c"
+};
+
+Gfx gEffBombExplosion1DL[13] = {
+#include "assets/objects/gameplay_keep/gEffBombExplosion1DL.inc.c"
+};
+
+Gfx gEffBombExplosion2DL[11] = {
+#include "assets/objects/gameplay_keep/gEffBombExplosion2DL.inc.c"
+};
+
+Gfx gEffBombExplosion3DL[3] = {
+#include "assets/objects/gameplay_keep/gEffBombExplosion3DL.inc.c"
+};
+
+Vtx gEffBombExplosionVtx[] = {
+#include "assets/objects/gameplay_keep/gEffBombExplosionVtx.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/eff_bomb_explosion.h b/assets/objects/gameplay_keep/eff_bomb_explosion.h
new file mode 100644
index 0000000000..46d8957426
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_bomb_explosion.h
@@ -0,0 +1,36 @@
+#ifndef GAMEPLAY_KEEP_EFF_BOMB_EXPLOSION_H
+#define GAMEPLAY_KEEP_EFF_BOMB_EXPLOSION_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gEffBombExplosion1Tex_WIDTH 32
+#define gEffBombExplosion1Tex_HEIGHT 32
+extern u64 gEffBombExplosion1Tex[TEX_LEN(u64, gEffBombExplosion1Tex_WIDTH, gEffBombExplosion1Tex_HEIGHT, 16)];
+#define gEffBombExplosion2Tex_WIDTH 32
+#define gEffBombExplosion2Tex_HEIGHT 32
+extern u64 gEffBombExplosion2Tex[TEX_LEN(u64, gEffBombExplosion2Tex_WIDTH, gEffBombExplosion2Tex_HEIGHT, 16)];
+#define gEffBombExplosion3Tex_WIDTH 32
+#define gEffBombExplosion3Tex_HEIGHT 32
+extern u64 gEffBombExplosion3Tex[TEX_LEN(u64, gEffBombExplosion3Tex_WIDTH, gEffBombExplosion3Tex_HEIGHT, 16)];
+#define gEffBombExplosion4Tex_WIDTH 32
+#define gEffBombExplosion4Tex_HEIGHT 32
+extern u64 gEffBombExplosion4Tex[TEX_LEN(u64, gEffBombExplosion4Tex_WIDTH, gEffBombExplosion4Tex_HEIGHT, 16)];
+#define gEffBombExplosion5Tex_WIDTH 32
+#define gEffBombExplosion5Tex_HEIGHT 32
+extern u64 gEffBombExplosion5Tex[TEX_LEN(u64, gEffBombExplosion5Tex_WIDTH, gEffBombExplosion5Tex_HEIGHT, 16)];
+#define gEffBombExplosion6Tex_WIDTH 32
+#define gEffBombExplosion6Tex_HEIGHT 32
+extern u64 gEffBombExplosion6Tex[TEX_LEN(u64, gEffBombExplosion6Tex_WIDTH, gEffBombExplosion6Tex_HEIGHT, 16)];
+#define gEffBombExplosion7Tex_WIDTH 32
+#define gEffBombExplosion7Tex_HEIGHT 32
+extern u64 gEffBombExplosion7Tex[TEX_LEN(u64, gEffBombExplosion7Tex_WIDTH, gEffBombExplosion7Tex_HEIGHT, 16)];
+#define gEffBombExplosion8Tex_WIDTH 32
+#define gEffBombExplosion8Tex_HEIGHT 32
+extern u64 gEffBombExplosion8Tex[TEX_LEN(u64, gEffBombExplosion8Tex_WIDTH, gEffBombExplosion8Tex_HEIGHT, 16)];
+extern Gfx gEffBombExplosion1DL[13];
+extern Gfx gEffBombExplosion2DL[11];
+extern Gfx gEffBombExplosion3DL[3];
+extern Vtx gEffBombExplosionVtx[];
+
+#endif
diff --git a/assets/objects/gameplay_keep/eff_bubble.c b/assets/objects/gameplay_keep/eff_bubble.c
new file mode 100644
index 0000000000..b21219d869
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_bubble.c
@@ -0,0 +1,10 @@
+#include "eff_bubble.h"
+#include "gfx.h"
+
+Gfx gEffBubbleDL[15] = {
+#include "assets/objects/gameplay_keep/gEffBubbleDL.inc.c"
+};
+
+Vtx gEffBubbleVtx[] = {
+#include "assets/objects/gameplay_keep/gEffBubbleVtx.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/eff_bubble.h b/assets/objects/gameplay_keep/eff_bubble.h
new file mode 100644
index 0000000000..1994b91d2d
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_bubble.h
@@ -0,0 +1,9 @@
+#ifndef GAMEPLAY_KEEP_EFF_BUBBLE_H
+#define GAMEPLAY_KEEP_EFF_BUBBLE_H
+
+#include "ultra64.h"
+
+extern Gfx gEffBubbleDL[15];
+extern Vtx gEffBubbleVtx[];
+
+#endif
diff --git a/assets/objects/gameplay_keep/eff_dust.c b/assets/objects/gameplay_keep/eff_dust.c
new file mode 100644
index 0000000000..ca78eeca3f
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_dust.c
@@ -0,0 +1,10 @@
+#include "eff_dust.h"
+#include "gfx.h"
+
+Gfx gEffDustDL[11] = {
+#include "assets/objects/gameplay_keep/gEffDustDL.inc.c"
+};
+
+Vtx gEffDustVtx[] = {
+#include "assets/objects/gameplay_keep/gEffDustVtx.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/eff_dust.h b/assets/objects/gameplay_keep/eff_dust.h
new file mode 100644
index 0000000000..6d314e8221
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_dust.h
@@ -0,0 +1,9 @@
+#ifndef GAMEPLAY_KEEP_EFF_DUST_H
+#define GAMEPLAY_KEEP_EFF_DUST_H
+
+#include "ultra64.h"
+
+extern Gfx gEffDustDL[11];
+extern Vtx gEffDustVtx[];
+
+#endif
diff --git a/assets/objects/gameplay_keep/eff_enemy_death_flame.c b/assets/objects/gameplay_keep/eff_enemy_death_flame.c
new file mode 100644
index 0000000000..3ee36d87ce
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_enemy_death_flame.c
@@ -0,0 +1,50 @@
+#include "eff_enemy_death_flame.h"
+#include "gfx.h"
+
+u64 gEffEnemyDeathFlame1Tex[TEX_LEN(u64, gEffEnemyDeathFlame1Tex_WIDTH, gEffEnemyDeathFlame1Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffEnemyDeathFlame1Tex.i8.inc.c"
+};
+
+u64 gEffEnemyDeathFlame2Tex[TEX_LEN(u64, gEffEnemyDeathFlame2Tex_WIDTH, gEffEnemyDeathFlame2Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffEnemyDeathFlame2Tex.i8.inc.c"
+};
+
+u64 gEffEnemyDeathFlame3Tex[TEX_LEN(u64, gEffEnemyDeathFlame3Tex_WIDTH, gEffEnemyDeathFlame3Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffEnemyDeathFlame3Tex.i8.inc.c"
+};
+
+u64 gEffEnemyDeathFlame4Tex[TEX_LEN(u64, gEffEnemyDeathFlame4Tex_WIDTH, gEffEnemyDeathFlame4Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffEnemyDeathFlame4Tex.i8.inc.c"
+};
+
+u64 gEffEnemyDeathFlame5Tex[TEX_LEN(u64, gEffEnemyDeathFlame5Tex_WIDTH, gEffEnemyDeathFlame5Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffEnemyDeathFlame5Tex.i8.inc.c"
+};
+
+u64 gEffEnemyDeathFlame6Tex[TEX_LEN(u64, gEffEnemyDeathFlame6Tex_WIDTH, gEffEnemyDeathFlame6Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffEnemyDeathFlame6Tex.i8.inc.c"
+};
+
+u64 gEffEnemyDeathFlame7Tex[TEX_LEN(u64, gEffEnemyDeathFlame7Tex_WIDTH, gEffEnemyDeathFlame7Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffEnemyDeathFlame7Tex.i8.inc.c"
+};
+
+u64 gEffEnemyDeathFlame8Tex[TEX_LEN(u64, gEffEnemyDeathFlame8Tex_WIDTH, gEffEnemyDeathFlame8Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffEnemyDeathFlame8Tex.i8.inc.c"
+};
+
+u64 gEffEnemyDeathFlame9Tex[TEX_LEN(u64, gEffEnemyDeathFlame9Tex_WIDTH, gEffEnemyDeathFlame9Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffEnemyDeathFlame9Tex.i8.inc.c"
+};
+
+u64 gEffEnemyDeathFlame10Tex[TEX_LEN(u64, gEffEnemyDeathFlame10Tex_WIDTH, gEffEnemyDeathFlame10Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffEnemyDeathFlame10Tex.i8.inc.c"
+};
+
+Gfx gEffEnemyDeathFlameDL[13] = {
+#include "assets/objects/gameplay_keep/gEffEnemyDeathFlameDL.inc.c"
+};
+
+Vtx gEffEnemyDeathFlameVtx[] = {
+#include "assets/objects/gameplay_keep/gEffEnemyDeathFlameVtx.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/eff_enemy_death_flame.h b/assets/objects/gameplay_keep/eff_enemy_death_flame.h
new file mode 100644
index 0000000000..4b731c34cf
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_enemy_death_flame.h
@@ -0,0 +1,40 @@
+#ifndef GAMEPLAY_KEEP_EFF_ENEMY_DEATH_FLAME_H
+#define GAMEPLAY_KEEP_EFF_ENEMY_DEATH_FLAME_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gEffEnemyDeathFlame1Tex_WIDTH 32
+#define gEffEnemyDeathFlame1Tex_HEIGHT 64
+extern u64 gEffEnemyDeathFlame1Tex[TEX_LEN(u64, gEffEnemyDeathFlame1Tex_WIDTH, gEffEnemyDeathFlame1Tex_HEIGHT, 8)];
+#define gEffEnemyDeathFlame2Tex_WIDTH 32
+#define gEffEnemyDeathFlame2Tex_HEIGHT 64
+extern u64 gEffEnemyDeathFlame2Tex[TEX_LEN(u64, gEffEnemyDeathFlame2Tex_WIDTH, gEffEnemyDeathFlame2Tex_HEIGHT, 8)];
+#define gEffEnemyDeathFlame3Tex_WIDTH 32
+#define gEffEnemyDeathFlame3Tex_HEIGHT 64
+extern u64 gEffEnemyDeathFlame3Tex[TEX_LEN(u64, gEffEnemyDeathFlame3Tex_WIDTH, gEffEnemyDeathFlame3Tex_HEIGHT, 8)];
+#define gEffEnemyDeathFlame4Tex_WIDTH 32
+#define gEffEnemyDeathFlame4Tex_HEIGHT 64
+extern u64 gEffEnemyDeathFlame4Tex[TEX_LEN(u64, gEffEnemyDeathFlame4Tex_WIDTH, gEffEnemyDeathFlame4Tex_HEIGHT, 8)];
+#define gEffEnemyDeathFlame5Tex_WIDTH 32
+#define gEffEnemyDeathFlame5Tex_HEIGHT 64
+extern u64 gEffEnemyDeathFlame5Tex[TEX_LEN(u64, gEffEnemyDeathFlame5Tex_WIDTH, gEffEnemyDeathFlame5Tex_HEIGHT, 8)];
+#define gEffEnemyDeathFlame6Tex_WIDTH 32
+#define gEffEnemyDeathFlame6Tex_HEIGHT 64
+extern u64 gEffEnemyDeathFlame6Tex[TEX_LEN(u64, gEffEnemyDeathFlame6Tex_WIDTH, gEffEnemyDeathFlame6Tex_HEIGHT, 8)];
+#define gEffEnemyDeathFlame7Tex_WIDTH 32
+#define gEffEnemyDeathFlame7Tex_HEIGHT 64
+extern u64 gEffEnemyDeathFlame7Tex[TEX_LEN(u64, gEffEnemyDeathFlame7Tex_WIDTH, gEffEnemyDeathFlame7Tex_HEIGHT, 8)];
+#define gEffEnemyDeathFlame8Tex_WIDTH 32
+#define gEffEnemyDeathFlame8Tex_HEIGHT 64
+extern u64 gEffEnemyDeathFlame8Tex[TEX_LEN(u64, gEffEnemyDeathFlame8Tex_WIDTH, gEffEnemyDeathFlame8Tex_HEIGHT, 8)];
+#define gEffEnemyDeathFlame9Tex_WIDTH 32
+#define gEffEnemyDeathFlame9Tex_HEIGHT 64
+extern u64 gEffEnemyDeathFlame9Tex[TEX_LEN(u64, gEffEnemyDeathFlame9Tex_WIDTH, gEffEnemyDeathFlame9Tex_HEIGHT, 8)];
+#define gEffEnemyDeathFlame10Tex_WIDTH 32
+#define gEffEnemyDeathFlame10Tex_HEIGHT 64
+extern u64 gEffEnemyDeathFlame10Tex[TEX_LEN(u64, gEffEnemyDeathFlame10Tex_WIDTH, gEffEnemyDeathFlame10Tex_HEIGHT, 8)];
+extern Gfx gEffEnemyDeathFlameDL[13];
+extern Vtx gEffEnemyDeathFlameVtx[];
+
+#endif
diff --git a/assets/objects/gameplay_keep/eff_fire.c b/assets/objects/gameplay_keep/eff_fire.c
new file mode 100644
index 0000000000..7d95baaae4
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_fire.c
@@ -0,0 +1,22 @@
+#include "eff_fire.h"
+#include "gfx.h"
+
+Vtx gEffFireVtx[] = {
+#include "assets/objects/gameplay_keep/gEffFireVtx.inc.c"
+};
+
+Gfx gEffFire1DL[24] = {
+#include "assets/objects/gameplay_keep/gEffFire1DL.inc.c"
+};
+
+Gfx gEffFire2DL[24] = {
+#include "assets/objects/gameplay_keep/gEffFire2DL.inc.c"
+};
+
+u64 gDecorativeFlameMaskTex[TEX_LEN(u64, gDecorativeFlameMaskTex_WIDTH, gDecorativeFlameMaskTex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gDecorativeFlameMaskTex.i4.inc.c"
+};
+
+u64 gDecorativeFlameTex[TEX_LEN(u64, gDecorativeFlameTex_WIDTH, gDecorativeFlameTex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gDecorativeFlameTex.i8.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/eff_fire.h b/assets/objects/gameplay_keep/eff_fire.h
new file mode 100644
index 0000000000..cf3aee7eb5
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_fire.h
@@ -0,0 +1,17 @@
+#ifndef GAMEPLAY_KEEP_EFF_FIRE_H
+#define GAMEPLAY_KEEP_EFF_FIRE_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+extern Vtx gEffFireVtx[];
+extern Gfx gEffFire1DL[24];
+extern Gfx gEffFire2DL[24];
+#define gDecorativeFlameMaskTex_WIDTH 32
+#define gDecorativeFlameMaskTex_HEIGHT 128
+extern u64 gDecorativeFlameMaskTex[TEX_LEN(u64, gDecorativeFlameMaskTex_WIDTH, gDecorativeFlameMaskTex_HEIGHT, 4)];
+#define gDecorativeFlameTex_WIDTH 32
+#define gDecorativeFlameTex_HEIGHT 64
+extern u64 gDecorativeFlameTex[TEX_LEN(u64, gDecorativeFlameTex_WIDTH, gDecorativeFlameTex_HEIGHT, 8)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/eff_fire_footprint.c b/assets/objects/gameplay_keep/eff_fire_footprint.c
new file mode 100644
index 0000000000..10d8a2ca98
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_fire_footprint.c
@@ -0,0 +1,42 @@
+#include "eff_fire_footprint.h"
+#include "gfx.h"
+
+u64 gEffFireFootprint1Tex[TEX_LEN(u64, gEffFireFootprint1Tex_WIDTH, gEffFireFootprint1Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffFireFootprint1Tex.ia8.inc.c"
+};
+
+u64 gEffFireFootprint2Tex[TEX_LEN(u64, gEffFireFootprint2Tex_WIDTH, gEffFireFootprint2Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffFireFootprint2Tex.ia8.inc.c"
+};
+
+u64 gEffFireFootprint3Tex[TEX_LEN(u64, gEffFireFootprint3Tex_WIDTH, gEffFireFootprint3Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffFireFootprint3Tex.ia8.inc.c"
+};
+
+u64 gEffFireFootprint4Tex[TEX_LEN(u64, gEffFireFootprint4Tex_WIDTH, gEffFireFootprint4Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffFireFootprint4Tex.ia8.inc.c"
+};
+
+u64 gEffFireFootprint5Tex[TEX_LEN(u64, gEffFireFootprint5Tex_WIDTH, gEffFireFootprint5Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffFireFootprint5Tex.ia8.inc.c"
+};
+
+u64 gEffFireFootprint6Tex[TEX_LEN(u64, gEffFireFootprint6Tex_WIDTH, gEffFireFootprint6Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffFireFootprint6Tex.ia8.inc.c"
+};
+
+u64 gEffFireFootprint7Tex[TEX_LEN(u64, gEffFireFootprint7Tex_WIDTH, gEffFireFootprint7Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffFireFootprint7Tex.ia8.inc.c"
+};
+
+u64 gEffFireFootprint8Tex[TEX_LEN(u64, gEffFireFootprint8Tex_WIDTH, gEffFireFootprint8Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffFireFootprint8Tex.ia8.inc.c"
+};
+
+Gfx gEffFireFootprintDL[12] = {
+#include "assets/objects/gameplay_keep/gEffFireFootprintDL.inc.c"
+};
+
+Vtx gEffFireFootprintVtx[] = {
+#include "assets/objects/gameplay_keep/gEffFireFootprintVtx.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/eff_fire_footprint.h b/assets/objects/gameplay_keep/eff_fire_footprint.h
new file mode 100644
index 0000000000..9a19d0ceae
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_fire_footprint.h
@@ -0,0 +1,34 @@
+#ifndef GAMEPLAY_KEEP_EFF_FIRE_FOOTPRINT_H
+#define GAMEPLAY_KEEP_EFF_FIRE_FOOTPRINT_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gEffFireFootprint1Tex_WIDTH 32
+#define gEffFireFootprint1Tex_HEIGHT 32
+extern u64 gEffFireFootprint1Tex[TEX_LEN(u64, gEffFireFootprint1Tex_WIDTH, gEffFireFootprint1Tex_HEIGHT, 8)];
+#define gEffFireFootprint2Tex_WIDTH 32
+#define gEffFireFootprint2Tex_HEIGHT 32
+extern u64 gEffFireFootprint2Tex[TEX_LEN(u64, gEffFireFootprint2Tex_WIDTH, gEffFireFootprint2Tex_HEIGHT, 8)];
+#define gEffFireFootprint3Tex_WIDTH 32
+#define gEffFireFootprint3Tex_HEIGHT 32
+extern u64 gEffFireFootprint3Tex[TEX_LEN(u64, gEffFireFootprint3Tex_WIDTH, gEffFireFootprint3Tex_HEIGHT, 8)];
+#define gEffFireFootprint4Tex_WIDTH 32
+#define gEffFireFootprint4Tex_HEIGHT 32
+extern u64 gEffFireFootprint4Tex[TEX_LEN(u64, gEffFireFootprint4Tex_WIDTH, gEffFireFootprint4Tex_HEIGHT, 8)];
+#define gEffFireFootprint5Tex_WIDTH 32
+#define gEffFireFootprint5Tex_HEIGHT 32
+extern u64 gEffFireFootprint5Tex[TEX_LEN(u64, gEffFireFootprint5Tex_WIDTH, gEffFireFootprint5Tex_HEIGHT, 8)];
+#define gEffFireFootprint6Tex_WIDTH 32
+#define gEffFireFootprint6Tex_HEIGHT 32
+extern u64 gEffFireFootprint6Tex[TEX_LEN(u64, gEffFireFootprint6Tex_WIDTH, gEffFireFootprint6Tex_HEIGHT, 8)];
+#define gEffFireFootprint7Tex_WIDTH 32
+#define gEffFireFootprint7Tex_HEIGHT 32
+extern u64 gEffFireFootprint7Tex[TEX_LEN(u64, gEffFireFootprint7Tex_WIDTH, gEffFireFootprint7Tex_HEIGHT, 8)];
+#define gEffFireFootprint8Tex_WIDTH 32
+#define gEffFireFootprint8Tex_HEIGHT 32
+extern u64 gEffFireFootprint8Tex[TEX_LEN(u64, gEffFireFootprint8Tex_WIDTH, gEffFireFootprint8Tex_HEIGHT, 8)];
+extern Gfx gEffFireFootprintDL[12];
+extern Vtx gEffFireFootprintVtx[];
+
+#endif
diff --git a/assets/objects/gameplay_keep/eff_flash.c b/assets/objects/gameplay_keep/eff_flash.c
new file mode 100644
index 0000000000..6100286e5a
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_flash.c
@@ -0,0 +1,18 @@
+#include "eff_flash.h"
+#include "gfx.h"
+
+Vtx gEffFlashVtx[] = {
+#include "assets/objects/gameplay_keep/gEffFlashVtx.inc.c"
+};
+
+Gfx gEffFlash1DL[15] = {
+#include "assets/objects/gameplay_keep/gEffFlash1DL.inc.c"
+};
+
+Gfx gEffFlash2DL[16] = {
+#include "assets/objects/gameplay_keep/gEffFlash2DL.inc.c"
+};
+
+u64 gFlashTex[TEX_LEN(u64, gFlashTex_WIDTH, gFlashTex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gFlashTex.i8.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/eff_flash.h b/assets/objects/gameplay_keep/eff_flash.h
new file mode 100644
index 0000000000..a9b2db8c2a
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_flash.h
@@ -0,0 +1,14 @@
+#ifndef GAMEPLAY_KEEP_EFF_FLASH_H
+#define GAMEPLAY_KEEP_EFF_FLASH_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+extern Vtx gEffFlashVtx[];
+extern Gfx gEffFlash1DL[15];
+extern Gfx gEffFlash2DL[16];
+#define gFlashTex_WIDTH 64
+#define gFlashTex_HEIGHT 64
+extern u64 gFlashTex[TEX_LEN(u64, gFlashTex_WIDTH, gFlashTex_HEIGHT, 8)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/eff_fragments_1.c b/assets/objects/gameplay_keep/eff_fragments_1.c
new file mode 100644
index 0000000000..784e363ef9
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_fragments_1.c
@@ -0,0 +1,14 @@
+#include "eff_fragments_1.h"
+#include "gfx.h"
+
+Vtx gEffFragments1Vtx[] = {
+#include "assets/objects/gameplay_keep/gEffFragments1Vtx.inc.c"
+};
+
+Gfx gEffFragments1DL[18] = {
+#include "assets/objects/gameplay_keep/gEffFragments1DL.inc.c"
+};
+
+u64 gWitheredLeafTex[TEX_LEN(u64, gWitheredLeafTex_WIDTH, gWitheredLeafTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gWitheredLeafTex.rgba16.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/eff_fragments_1.h b/assets/objects/gameplay_keep/eff_fragments_1.h
new file mode 100644
index 0000000000..74a1e61870
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_fragments_1.h
@@ -0,0 +1,13 @@
+#ifndef GAMEPLAY_KEEP_EFF_FRAGMENTS_1_H
+#define GAMEPLAY_KEEP_EFF_FRAGMENTS_1_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+extern Vtx gEffFragments1Vtx[];
+extern Gfx gEffFragments1DL[18];
+#define gWitheredLeafTex_WIDTH 16
+#define gWitheredLeafTex_HEIGHT 16
+extern u64 gWitheredLeafTex[TEX_LEN(u64, gWitheredLeafTex_WIDTH, gWitheredLeafTex_HEIGHT, 16)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/eff_fragments_2_model.c b/assets/objects/gameplay_keep/eff_fragments_2_model.c
new file mode 100644
index 0000000000..f0104dbb6b
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_fragments_2_model.c
@@ -0,0 +1,10 @@
+#include "eff_fragments_2_model.h"
+#include "gfx.h"
+
+Vtx gEffFragments2Vtx[] = {
+#include "assets/objects/gameplay_keep/gEffFragments2Vtx.inc.c"
+};
+
+Gfx gEffFragments2DL[7] = {
+#include "assets/objects/gameplay_keep/gEffFragments2DL.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/eff_fragments_2_model.h b/assets/objects/gameplay_keep/eff_fragments_2_model.h
new file mode 100644
index 0000000000..7ebe54340c
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_fragments_2_model.h
@@ -0,0 +1,9 @@
+#ifndef GAMEPLAY_KEEP_EFF_FRAGMENTS_2_MODEL_H
+#define GAMEPLAY_KEEP_EFF_FRAGMENTS_2_MODEL_H
+
+#include "ultra64.h"
+
+extern Vtx gEffFragments2Vtx[];
+extern Gfx gEffFragments2DL[7];
+
+#endif
diff --git a/assets/objects/gameplay_keep/eff_hitmark.c b/assets/objects/gameplay_keep/eff_hitmark.c
new file mode 100644
index 0000000000..09b18b726a
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_hitmark.c
@@ -0,0 +1,106 @@
+#include "eff_hitmark.h"
+#include "gfx.h"
+
+u64 gEffHitMark1Tex[TEX_LEN(u64, gEffHitMark1Tex_WIDTH, gEffHitMark1Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gEffHitMark1Tex.i4.inc.c"
+};
+
+u64 gEffHitMark2Tex[TEX_LEN(u64, gEffHitMark2Tex_WIDTH, gEffHitMark2Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gEffHitMark2Tex.i4.inc.c"
+};
+
+u64 gEffHitMark3Tex[TEX_LEN(u64, gEffHitMark3Tex_WIDTH, gEffHitMark3Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gEffHitMark3Tex.i4.inc.c"
+};
+
+u64 gEffHitMark4Tex[TEX_LEN(u64, gEffHitMark4Tex_WIDTH, gEffHitMark4Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gEffHitMark4Tex.i4.inc.c"
+};
+
+u64 gEffHitMark5Tex[TEX_LEN(u64, gEffHitMark5Tex_WIDTH, gEffHitMark5Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gEffHitMark5Tex.i4.inc.c"
+};
+
+u64 gEffHitMark6Tex[TEX_LEN(u64, gEffHitMark6Tex_WIDTH, gEffHitMark6Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gEffHitMark6Tex.i4.inc.c"
+};
+
+u64 gEffHitMark7Tex[TEX_LEN(u64, gEffHitMark7Tex_WIDTH, gEffHitMark7Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gEffHitMark7Tex.i4.inc.c"
+};
+
+u64 gEffHitMark8Tex[TEX_LEN(u64, gEffHitMark8Tex_WIDTH, gEffHitMark8Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gEffHitMark8Tex.i4.inc.c"
+};
+
+u64 gEffHitMark9Tex[TEX_LEN(u64, gEffHitMark9Tex_WIDTH, gEffHitMark9Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gEffHitMark9Tex.i4.inc.c"
+};
+
+u64 gEffHitMark10Tex[TEX_LEN(u64, gEffHitMark10Tex_WIDTH, gEffHitMark10Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gEffHitMark10Tex.i4.inc.c"
+};
+
+u64 gEffHitMark11Tex[TEX_LEN(u64, gEffHitMark11Tex_WIDTH, gEffHitMark11Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gEffHitMark11Tex.i4.inc.c"
+};
+
+u64 gEffHitMark12Tex[TEX_LEN(u64, gEffHitMark12Tex_WIDTH, gEffHitMark12Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gEffHitMark12Tex.i4.inc.c"
+};
+
+u64 gEffHitMark13Tex[TEX_LEN(u64, gEffHitMark13Tex_WIDTH, gEffHitMark13Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gEffHitMark13Tex.i4.inc.c"
+};
+
+u64 gEffHitMark14Tex[TEX_LEN(u64, gEffHitMark14Tex_WIDTH, gEffHitMark14Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gEffHitMark14Tex.i4.inc.c"
+};
+
+u64 gEffHitMark15Tex[TEX_LEN(u64, gEffHitMark15Tex_WIDTH, gEffHitMark15Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gEffHitMark15Tex.i4.inc.c"
+};
+
+u64 gEffHitMark16Tex[TEX_LEN(u64, gEffHitMark16Tex_WIDTH, gEffHitMark16Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gEffHitMark16Tex.i4.inc.c"
+};
+
+u64 gEffHitMark17Tex[TEX_LEN(u64, gEffHitMark17Tex_WIDTH, gEffHitMark17Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gEffHitMark17Tex.i4.inc.c"
+};
+
+u64 gEffHitMark18Tex[TEX_LEN(u64, gEffHitMark18Tex_WIDTH, gEffHitMark18Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gEffHitMark18Tex.i4.inc.c"
+};
+
+u64 gEffHitMark19Tex[TEX_LEN(u64, gEffHitMark19Tex_WIDTH, gEffHitMark19Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gEffHitMark19Tex.i4.inc.c"
+};
+
+u64 gEffHitMark20Tex[TEX_LEN(u64, gEffHitMark20Tex_WIDTH, gEffHitMark20Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gEffHitMark20Tex.i4.inc.c"
+};
+
+u64 gEffHitMark21Tex[TEX_LEN(u64, gEffHitMark21Tex_WIDTH, gEffHitMark21Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gEffHitMark21Tex.i4.inc.c"
+};
+
+u64 gEffHitMark22Tex[TEX_LEN(u64, gEffHitMark22Tex_WIDTH, gEffHitMark22Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gEffHitMark22Tex.i4.inc.c"
+};
+
+u64 gEffHitMark23Tex[TEX_LEN(u64, gEffHitMark23Tex_WIDTH, gEffHitMark23Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gEffHitMark23Tex.i4.inc.c"
+};
+
+u64 gEffHitMark24Tex[TEX_LEN(u64, gEffHitMark24Tex_WIDTH, gEffHitMark24Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gEffHitMark24Tex.i4.inc.c"
+};
+
+Gfx gEffHitMarkDL[11] = {
+#include "assets/objects/gameplay_keep/gEffHitMarkDL.inc.c"
+};
+
+Vtx gEffHitMarkVtx[] = {
+#include "assets/objects/gameplay_keep/gEffHitMarkVtx.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/eff_hitmark.h b/assets/objects/gameplay_keep/eff_hitmark.h
new file mode 100644
index 0000000000..7a5e072053
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_hitmark.h
@@ -0,0 +1,82 @@
+#ifndef GAMEPLAY_KEEP_EFF_HITMARK_H
+#define GAMEPLAY_KEEP_EFF_HITMARK_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gEffHitMark1Tex_WIDTH 32
+#define gEffHitMark1Tex_HEIGHT 24
+extern u64 gEffHitMark1Tex[TEX_LEN(u64, gEffHitMark1Tex_WIDTH, gEffHitMark1Tex_HEIGHT, 4)];
+#define gEffHitMark2Tex_WIDTH 32
+#define gEffHitMark2Tex_HEIGHT 24
+extern u64 gEffHitMark2Tex[TEX_LEN(u64, gEffHitMark2Tex_WIDTH, gEffHitMark2Tex_HEIGHT, 4)];
+#define gEffHitMark3Tex_WIDTH 32
+#define gEffHitMark3Tex_HEIGHT 24
+extern u64 gEffHitMark3Tex[TEX_LEN(u64, gEffHitMark3Tex_WIDTH, gEffHitMark3Tex_HEIGHT, 4)];
+#define gEffHitMark4Tex_WIDTH 32
+#define gEffHitMark4Tex_HEIGHT 24
+extern u64 gEffHitMark4Tex[TEX_LEN(u64, gEffHitMark4Tex_WIDTH, gEffHitMark4Tex_HEIGHT, 4)];
+#define gEffHitMark5Tex_WIDTH 32
+#define gEffHitMark5Tex_HEIGHT 24
+extern u64 gEffHitMark5Tex[TEX_LEN(u64, gEffHitMark5Tex_WIDTH, gEffHitMark5Tex_HEIGHT, 4)];
+#define gEffHitMark6Tex_WIDTH 32
+#define gEffHitMark6Tex_HEIGHT 24
+extern u64 gEffHitMark6Tex[TEX_LEN(u64, gEffHitMark6Tex_WIDTH, gEffHitMark6Tex_HEIGHT, 4)];
+#define gEffHitMark7Tex_WIDTH 32
+#define gEffHitMark7Tex_HEIGHT 24
+extern u64 gEffHitMark7Tex[TEX_LEN(u64, gEffHitMark7Tex_WIDTH, gEffHitMark7Tex_HEIGHT, 4)];
+#define gEffHitMark8Tex_WIDTH 32
+#define gEffHitMark8Tex_HEIGHT 24
+extern u64 gEffHitMark8Tex[TEX_LEN(u64, gEffHitMark8Tex_WIDTH, gEffHitMark8Tex_HEIGHT, 4)];
+#define gEffHitMark9Tex_WIDTH 32
+#define gEffHitMark9Tex_HEIGHT 24
+extern u64 gEffHitMark9Tex[TEX_LEN(u64, gEffHitMark9Tex_WIDTH, gEffHitMark9Tex_HEIGHT, 4)];
+#define gEffHitMark10Tex_WIDTH 32
+#define gEffHitMark10Tex_HEIGHT 24
+extern u64 gEffHitMark10Tex[TEX_LEN(u64, gEffHitMark10Tex_WIDTH, gEffHitMark10Tex_HEIGHT, 4)];
+#define gEffHitMark11Tex_WIDTH 32
+#define gEffHitMark11Tex_HEIGHT 24
+extern u64 gEffHitMark11Tex[TEX_LEN(u64, gEffHitMark11Tex_WIDTH, gEffHitMark11Tex_HEIGHT, 4)];
+#define gEffHitMark12Tex_WIDTH 32
+#define gEffHitMark12Tex_HEIGHT 24
+extern u64 gEffHitMark12Tex[TEX_LEN(u64, gEffHitMark12Tex_WIDTH, gEffHitMark12Tex_HEIGHT, 4)];
+#define gEffHitMark13Tex_WIDTH 32
+#define gEffHitMark13Tex_HEIGHT 24
+extern u64 gEffHitMark13Tex[TEX_LEN(u64, gEffHitMark13Tex_WIDTH, gEffHitMark13Tex_HEIGHT, 4)];
+#define gEffHitMark14Tex_WIDTH 32
+#define gEffHitMark14Tex_HEIGHT 24
+extern u64 gEffHitMark14Tex[TEX_LEN(u64, gEffHitMark14Tex_WIDTH, gEffHitMark14Tex_HEIGHT, 4)];
+#define gEffHitMark15Tex_WIDTH 32
+#define gEffHitMark15Tex_HEIGHT 24
+extern u64 gEffHitMark15Tex[TEX_LEN(u64, gEffHitMark15Tex_WIDTH, gEffHitMark15Tex_HEIGHT, 4)];
+#define gEffHitMark16Tex_WIDTH 32
+#define gEffHitMark16Tex_HEIGHT 24
+extern u64 gEffHitMark16Tex[TEX_LEN(u64, gEffHitMark16Tex_WIDTH, gEffHitMark16Tex_HEIGHT, 4)];
+#define gEffHitMark17Tex_WIDTH 32
+#define gEffHitMark17Tex_HEIGHT 24
+extern u64 gEffHitMark17Tex[TEX_LEN(u64, gEffHitMark17Tex_WIDTH, gEffHitMark17Tex_HEIGHT, 4)];
+#define gEffHitMark18Tex_WIDTH 32
+#define gEffHitMark18Tex_HEIGHT 24
+extern u64 gEffHitMark18Tex[TEX_LEN(u64, gEffHitMark18Tex_WIDTH, gEffHitMark18Tex_HEIGHT, 4)];
+#define gEffHitMark19Tex_WIDTH 32
+#define gEffHitMark19Tex_HEIGHT 24
+extern u64 gEffHitMark19Tex[TEX_LEN(u64, gEffHitMark19Tex_WIDTH, gEffHitMark19Tex_HEIGHT, 4)];
+#define gEffHitMark20Tex_WIDTH 32
+#define gEffHitMark20Tex_HEIGHT 24
+extern u64 gEffHitMark20Tex[TEX_LEN(u64, gEffHitMark20Tex_WIDTH, gEffHitMark20Tex_HEIGHT, 4)];
+#define gEffHitMark21Tex_WIDTH 32
+#define gEffHitMark21Tex_HEIGHT 24
+extern u64 gEffHitMark21Tex[TEX_LEN(u64, gEffHitMark21Tex_WIDTH, gEffHitMark21Tex_HEIGHT, 4)];
+#define gEffHitMark22Tex_WIDTH 32
+#define gEffHitMark22Tex_HEIGHT 24
+extern u64 gEffHitMark22Tex[TEX_LEN(u64, gEffHitMark22Tex_WIDTH, gEffHitMark22Tex_HEIGHT, 4)];
+#define gEffHitMark23Tex_WIDTH 32
+#define gEffHitMark23Tex_HEIGHT 24
+extern u64 gEffHitMark23Tex[TEX_LEN(u64, gEffHitMark23Tex_WIDTH, gEffHitMark23Tex_HEIGHT, 4)];
+#define gEffHitMark24Tex_WIDTH 32
+#define gEffHitMark24Tex_HEIGHT 24
+extern u64 gEffHitMark24Tex[TEX_LEN(u64, gEffHitMark24Tex_WIDTH, gEffHitMark24Tex_HEIGHT, 4)];
+extern Gfx gEffHitMarkDL[11];
+extern Vtx gEffHitMarkVtx[];
+
+#endif
diff --git a/assets/objects/gameplay_keep/eff_ice_fragments.c b/assets/objects/gameplay_keep/eff_ice_fragments.c
new file mode 100644
index 0000000000..d852fda39b
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_ice_fragments.c
@@ -0,0 +1,15 @@
+#include "eff_ice_fragments.h"
+#include "gameplay_keep_0x32090.h"
+#include "gfx.h"
+
+Vtx gEffIceFragmentVtx[] = {
+#include "assets/objects/gameplay_keep/gEffIceFragmentVtx.inc.c"
+};
+
+Gfx gEffIceFragment1DL[31] = {
+#include "assets/objects/gameplay_keep/gEffIceFragment1DL.inc.c"
+};
+
+Gfx gEffIceFragment2DL[30] = {
+#include "assets/objects/gameplay_keep/gEffIceFragment2DL.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/eff_ice_fragments.h b/assets/objects/gameplay_keep/eff_ice_fragments.h
new file mode 100644
index 0000000000..856769aca5
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_ice_fragments.h
@@ -0,0 +1,10 @@
+#ifndef GAMEPLAY_KEEP_EFF_ICE_FRAGMENTS_H
+#define GAMEPLAY_KEEP_EFF_ICE_FRAGMENTS_H
+
+#include "ultra64.h"
+
+extern Vtx gEffIceFragmentVtx[];
+extern Gfx gEffIceFragment1DL[31];
+extern Gfx gEffIceFragment2DL[30];
+
+#endif
diff --git a/assets/objects/gameplay_keep/eff_lightning.c b/assets/objects/gameplay_keep/eff_lightning.c
new file mode 100644
index 0000000000..a9a41f6be2
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_lightning.c
@@ -0,0 +1,42 @@
+#include "eff_lightning.h"
+#include "gfx.h"
+
+u64 gEffLightning1Tex[TEX_LEN(u64, gEffLightning1Tex_WIDTH, gEffLightning1Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffLightning1Tex.i8.inc.c"
+};
+
+u64 gEffLightning2Tex[TEX_LEN(u64, gEffLightning2Tex_WIDTH, gEffLightning2Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffLightning2Tex.i8.inc.c"
+};
+
+u64 gEffLightning3Tex[TEX_LEN(u64, gEffLightning3Tex_WIDTH, gEffLightning3Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffLightning3Tex.i8.inc.c"
+};
+
+u64 gEffLightning4Tex[TEX_LEN(u64, gEffLightning4Tex_WIDTH, gEffLightning4Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffLightning4Tex.i8.inc.c"
+};
+
+u64 gEffLightning5Tex[TEX_LEN(u64, gEffLightning5Tex_WIDTH, gEffLightning5Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffLightning5Tex.i8.inc.c"
+};
+
+u64 gEffLightning6Tex[TEX_LEN(u64, gEffLightning6Tex_WIDTH, gEffLightning6Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffLightning6Tex.i8.inc.c"
+};
+
+u64 gEffLightning7Tex[TEX_LEN(u64, gEffLightning7Tex_WIDTH, gEffLightning7Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffLightning7Tex.i8.inc.c"
+};
+
+u64 gEffLightning8Tex[TEX_LEN(u64, gEffLightning8Tex_WIDTH, gEffLightning8Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffLightning8Tex.i8.inc.c"
+};
+
+Gfx gEffLightningDL[13] = {
+#include "assets/objects/gameplay_keep/gEffLightningDL.inc.c"
+};
+
+Vtx gEffLightningVtx[] = {
+#include "assets/objects/gameplay_keep/gEffLightningVtx.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/eff_lightning.h b/assets/objects/gameplay_keep/eff_lightning.h
new file mode 100644
index 0000000000..4fb96dce75
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_lightning.h
@@ -0,0 +1,34 @@
+#ifndef GAMEPLAY_KEEP_EFF_LIGHTNING_H
+#define GAMEPLAY_KEEP_EFF_LIGHTNING_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gEffLightning1Tex_WIDTH 16
+#define gEffLightning1Tex_HEIGHT 96
+extern u64 gEffLightning1Tex[TEX_LEN(u64, gEffLightning1Tex_WIDTH, gEffLightning1Tex_HEIGHT, 8)];
+#define gEffLightning2Tex_WIDTH 16
+#define gEffLightning2Tex_HEIGHT 96
+extern u64 gEffLightning2Tex[TEX_LEN(u64, gEffLightning2Tex_WIDTH, gEffLightning2Tex_HEIGHT, 8)];
+#define gEffLightning3Tex_WIDTH 16
+#define gEffLightning3Tex_HEIGHT 96
+extern u64 gEffLightning3Tex[TEX_LEN(u64, gEffLightning3Tex_WIDTH, gEffLightning3Tex_HEIGHT, 8)];
+#define gEffLightning4Tex_WIDTH 16
+#define gEffLightning4Tex_HEIGHT 96
+extern u64 gEffLightning4Tex[TEX_LEN(u64, gEffLightning4Tex_WIDTH, gEffLightning4Tex_HEIGHT, 8)];
+#define gEffLightning5Tex_WIDTH 16
+#define gEffLightning5Tex_HEIGHT 96
+extern u64 gEffLightning5Tex[TEX_LEN(u64, gEffLightning5Tex_WIDTH, gEffLightning5Tex_HEIGHT, 8)];
+#define gEffLightning6Tex_WIDTH 16
+#define gEffLightning6Tex_HEIGHT 96
+extern u64 gEffLightning6Tex[TEX_LEN(u64, gEffLightning6Tex_WIDTH, gEffLightning6Tex_HEIGHT, 8)];
+#define gEffLightning7Tex_WIDTH 16
+#define gEffLightning7Tex_HEIGHT 96
+extern u64 gEffLightning7Tex[TEX_LEN(u64, gEffLightning7Tex_WIDTH, gEffLightning7Tex_HEIGHT, 8)];
+#define gEffLightning8Tex_WIDTH 16
+#define gEffLightning8Tex_HEIGHT 96
+extern u64 gEffLightning8Tex[TEX_LEN(u64, gEffLightning8Tex_WIDTH, gEffLightning8Tex_HEIGHT, 8)];
+extern Gfx gEffLightningDL[13];
+extern Vtx gEffLightningVtx[];
+
+#endif
diff --git a/assets/objects/gameplay_keep/eff_magma_bubble.c b/assets/objects/gameplay_keep/eff_magma_bubble.c
new file mode 100644
index 0000000000..da8c144251
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_magma_bubble.c
@@ -0,0 +1,42 @@
+#include "eff_magma_bubble.h"
+#include "gfx.h"
+
+u64 gEffMagmaBubble1Tex[TEX_LEN(u64, gEffMagmaBubble1Tex_WIDTH, gEffMagmaBubble1Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffMagmaBubble1Tex.ia8.inc.c"
+};
+
+u64 gEffMagmaBubble2Tex[TEX_LEN(u64, gEffMagmaBubble2Tex_WIDTH, gEffMagmaBubble2Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffMagmaBubble2Tex.ia8.inc.c"
+};
+
+u64 gEffMagmaBubble3Tex[TEX_LEN(u64, gEffMagmaBubble3Tex_WIDTH, gEffMagmaBubble3Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffMagmaBubble3Tex.ia8.inc.c"
+};
+
+u64 gEffMagmaBubble4Tex[TEX_LEN(u64, gEffMagmaBubble4Tex_WIDTH, gEffMagmaBubble4Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffMagmaBubble4Tex.ia8.inc.c"
+};
+
+u64 gEffMagmaBubble5Tex[TEX_LEN(u64, gEffMagmaBubble5Tex_WIDTH, gEffMagmaBubble5Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffMagmaBubble5Tex.ia8.inc.c"
+};
+
+u64 gEffMagmaBubble6Tex[TEX_LEN(u64, gEffMagmaBubble6Tex_WIDTH, gEffMagmaBubble6Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffMagmaBubble6Tex.ia8.inc.c"
+};
+
+u64 gEffMagmaBubble7Tex[TEX_LEN(u64, gEffMagmaBubble7Tex_WIDTH, gEffMagmaBubble7Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffMagmaBubble7Tex.ia8.inc.c"
+};
+
+u64 gEffMagmaBubble8Tex[TEX_LEN(u64, gEffMagmaBubble8Tex_WIDTH, gEffMagmaBubble8Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffMagmaBubble8Tex.ia8.inc.c"
+};
+
+Gfx gEffMagmaBubbleDL[12] = {
+#include "assets/objects/gameplay_keep/gEffMagmaBubbleDL.inc.c"
+};
+
+Vtx gEffMagmaBubbleVtx[] = {
+#include "assets/objects/gameplay_keep/gEffMagmaBubbleVtx.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/eff_magma_bubble.h b/assets/objects/gameplay_keep/eff_magma_bubble.h
new file mode 100644
index 0000000000..0752bcbb2d
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_magma_bubble.h
@@ -0,0 +1,34 @@
+#ifndef GAMEPLAY_KEEP_EFF_MAGMA_BUBBLE_H
+#define GAMEPLAY_KEEP_EFF_MAGMA_BUBBLE_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gEffMagmaBubble1Tex_WIDTH 16
+#define gEffMagmaBubble1Tex_HEIGHT 24
+extern u64 gEffMagmaBubble1Tex[TEX_LEN(u64, gEffMagmaBubble1Tex_WIDTH, gEffMagmaBubble1Tex_HEIGHT, 8)];
+#define gEffMagmaBubble2Tex_WIDTH 16
+#define gEffMagmaBubble2Tex_HEIGHT 24
+extern u64 gEffMagmaBubble2Tex[TEX_LEN(u64, gEffMagmaBubble2Tex_WIDTH, gEffMagmaBubble2Tex_HEIGHT, 8)];
+#define gEffMagmaBubble3Tex_WIDTH 16
+#define gEffMagmaBubble3Tex_HEIGHT 24
+extern u64 gEffMagmaBubble3Tex[TEX_LEN(u64, gEffMagmaBubble3Tex_WIDTH, gEffMagmaBubble3Tex_HEIGHT, 8)];
+#define gEffMagmaBubble4Tex_WIDTH 16
+#define gEffMagmaBubble4Tex_HEIGHT 24
+extern u64 gEffMagmaBubble4Tex[TEX_LEN(u64, gEffMagmaBubble4Tex_WIDTH, gEffMagmaBubble4Tex_HEIGHT, 8)];
+#define gEffMagmaBubble5Tex_WIDTH 16
+#define gEffMagmaBubble5Tex_HEIGHT 24
+extern u64 gEffMagmaBubble5Tex[TEX_LEN(u64, gEffMagmaBubble5Tex_WIDTH, gEffMagmaBubble5Tex_HEIGHT, 8)];
+#define gEffMagmaBubble6Tex_WIDTH 16
+#define gEffMagmaBubble6Tex_HEIGHT 24
+extern u64 gEffMagmaBubble6Tex[TEX_LEN(u64, gEffMagmaBubble6Tex_WIDTH, gEffMagmaBubble6Tex_HEIGHT, 8)];
+#define gEffMagmaBubble7Tex_WIDTH 16
+#define gEffMagmaBubble7Tex_HEIGHT 24
+extern u64 gEffMagmaBubble7Tex[TEX_LEN(u64, gEffMagmaBubble7Tex_WIDTH, gEffMagmaBubble7Tex_HEIGHT, 8)];
+#define gEffMagmaBubble8Tex_WIDTH 16
+#define gEffMagmaBubble8Tex_HEIGHT 24
+extern u64 gEffMagmaBubble8Tex[TEX_LEN(u64, gEffMagmaBubble8Tex_WIDTH, gEffMagmaBubble8Tex_HEIGHT, 8)];
+extern Gfx gEffMagmaBubbleDL[12];
+extern Vtx gEffMagmaBubbleVtx[];
+
+#endif
diff --git a/assets/objects/gameplay_keep/eff_shockwave.c b/assets/objects/gameplay_keep/eff_shockwave.c
new file mode 100644
index 0000000000..e6ab55b7c3
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_shockwave.c
@@ -0,0 +1,14 @@
+#include "eff_shockwave.h"
+#include "gfx.h"
+
+u64 gEffShockwaveTex[TEX_LEN(u64, gEffShockwaveTex_WIDTH, gEffShockwaveTex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffShockwaveTex.i8.inc.c"
+};
+
+Gfx gEffShockwaveDL[14] = {
+#include "assets/objects/gameplay_keep/gEffShockwaveDL.inc.c"
+};
+
+Vtx gGameplayKeepVtx_01A120[] = {
+#include "assets/objects/gameplay_keep/gGameplayKeepVtx_01A120.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/eff_shockwave.h b/assets/objects/gameplay_keep/eff_shockwave.h
new file mode 100644
index 0000000000..4aaaa64b68
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_shockwave.h
@@ -0,0 +1,13 @@
+#ifndef GAMEPLAY_KEEP_EFF_SHOCKWAVE_H
+#define GAMEPLAY_KEEP_EFF_SHOCKWAVE_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gEffShockwaveTex_WIDTH 64
+#define gEffShockwaveTex_HEIGHT 64
+extern u64 gEffShockwaveTex[TEX_LEN(u64, gEffShockwaveTex_WIDTH, gEffShockwaveTex_HEIGHT, 8)];
+extern Gfx gEffShockwaveDL[14];
+extern Vtx gGameplayKeepVtx_01A120[];
+
+#endif
diff --git a/assets/objects/gameplay_keep/eff_spark_model.c b/assets/objects/gameplay_keep/eff_spark_model.c
new file mode 100644
index 0000000000..cc11ec3f9b
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_spark_model.c
@@ -0,0 +1,10 @@
+#include "eff_spark_model.h"
+#include "gfx.h"
+
+Gfx gEffSparkDL[12] = {
+#include "assets/objects/gameplay_keep/gEffSparkDL.inc.c"
+};
+
+Vtx gEffSparkVtx[] = {
+#include "assets/objects/gameplay_keep/gEffSparkVtx.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/eff_spark_model.h b/assets/objects/gameplay_keep/eff_spark_model.h
new file mode 100644
index 0000000000..6b86819a89
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_spark_model.h
@@ -0,0 +1,9 @@
+#ifndef GAMEPLAY_KEEP_EFF_SPARK_MODEL_H
+#define GAMEPLAY_KEEP_EFF_SPARK_MODEL_H
+
+#include "ultra64.h"
+
+extern Gfx gEffSparkDL[12];
+extern Vtx gEffSparkVtx[];
+
+#endif
diff --git a/assets/objects/gameplay_keep/eff_spark_textures.c b/assets/objects/gameplay_keep/eff_spark_textures.c
new file mode 100644
index 0000000000..251f900ab9
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_spark_textures.c
@@ -0,0 +1,17 @@
+#include "eff_spark_textures.h"
+
+u64 gEffSpark1Tex[TEX_LEN(u64, gEffSpark1Tex_WIDTH, gEffSpark1Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gEffSpark1Tex.i4.inc.c"
+};
+
+u64 gEffSpark2Tex[TEX_LEN(u64, gEffSpark2Tex_WIDTH, gEffSpark2Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gEffSpark2Tex.i4.inc.c"
+};
+
+u64 gEffSpark3Tex[TEX_LEN(u64, gEffSpark3Tex_WIDTH, gEffSpark3Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gEffSpark3Tex.i4.inc.c"
+};
+
+u64 gEffSpark4Tex[TEX_LEN(u64, gEffSpark4Tex_WIDTH, gEffSpark4Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gEffSpark4Tex.i4.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/eff_spark_textures.h b/assets/objects/gameplay_keep/eff_spark_textures.h
new file mode 100644
index 0000000000..1b1f0528d3
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_spark_textures.h
@@ -0,0 +1,20 @@
+#ifndef GAMEPLAY_KEEP_EFF_SPARK_TEXTURES_H
+#define GAMEPLAY_KEEP_EFF_SPARK_TEXTURES_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gEffSpark1Tex_WIDTH 32
+#define gEffSpark1Tex_HEIGHT 32
+extern u64 gEffSpark1Tex[TEX_LEN(u64, gEffSpark1Tex_WIDTH, gEffSpark1Tex_HEIGHT, 4)];
+#define gEffSpark2Tex_WIDTH 32
+#define gEffSpark2Tex_HEIGHT 32
+extern u64 gEffSpark2Tex[TEX_LEN(u64, gEffSpark2Tex_WIDTH, gEffSpark2Tex_HEIGHT, 4)];
+#define gEffSpark3Tex_WIDTH 32
+#define gEffSpark3Tex_HEIGHT 32
+extern u64 gEffSpark3Tex[TEX_LEN(u64, gEffSpark3Tex_WIDTH, gEffSpark3Tex_HEIGHT, 4)];
+#define gEffSpark4Tex_WIDTH 32
+#define gEffSpark4Tex_HEIGHT 32
+extern u64 gEffSpark4Tex[TEX_LEN(u64, gEffSpark4Tex_WIDTH, gEffSpark4Tex_HEIGHT, 4)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/eff_sparkles.c b/assets/objects/gameplay_keep/eff_sparkles.c
new file mode 100644
index 0000000000..9f5751498b
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_sparkles.c
@@ -0,0 +1,14 @@
+#include "eff_sparkles.h"
+#include "gfx.h"
+
+Vtx gEffSparklesVtx[] = {
+#include "assets/objects/gameplay_keep/gEffSparklesVtx.inc.c"
+};
+
+Gfx gEffSparklesDL[12] = {
+#include "assets/objects/gameplay_keep/gEffSparklesDL.inc.c"
+};
+
+u64 gEffSparklesTex[TEX_LEN(u64, gEffSparklesTex_WIDTH, gEffSparklesTex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gEffSparklesTex.i4.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/eff_sparkles.h b/assets/objects/gameplay_keep/eff_sparkles.h
new file mode 100644
index 0000000000..b112b24e82
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_sparkles.h
@@ -0,0 +1,13 @@
+#ifndef GAMEPLAY_KEEP_EFF_SPARKLES_H
+#define GAMEPLAY_KEEP_EFF_SPARKLES_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+extern Vtx gEffSparklesVtx[];
+extern Gfx gEffSparklesDL[12];
+#define gEffSparklesTex_WIDTH 16
+#define gEffSparklesTex_HEIGHT 16
+extern u64 gEffSparklesTex[TEX_LEN(u64, gEffSparklesTex_WIDTH, gEffSparklesTex_HEIGHT, 4)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/eff_water_ripple.c b/assets/objects/gameplay_keep/eff_water_ripple.c
new file mode 100644
index 0000000000..da79dd9158
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_water_ripple.c
@@ -0,0 +1,14 @@
+#include "eff_water_ripple.h"
+#include "gfx.h"
+
+u64 gEffWaterRippleTex[TEX_LEN(u64, gEffWaterRippleTex_WIDTH, gEffWaterRippleTex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffWaterRippleTex.i8.inc.c"
+};
+
+Gfx gEffWaterRippleDL[12] = {
+#include "assets/objects/gameplay_keep/gEffWaterRippleDL.inc.c"
+};
+
+Vtx gEffWaterRippleVtx[] = {
+#include "assets/objects/gameplay_keep/gEffWaterRippleVtx.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/eff_water_ripple.h b/assets/objects/gameplay_keep/eff_water_ripple.h
new file mode 100644
index 0000000000..50c5342481
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_water_ripple.h
@@ -0,0 +1,13 @@
+#ifndef GAMEPLAY_KEEP_EFF_WATER_RIPPLE_H
+#define GAMEPLAY_KEEP_EFF_WATER_RIPPLE_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gEffWaterRippleTex_WIDTH 64
+#define gEffWaterRippleTex_HEIGHT 64
+extern u64 gEffWaterRippleTex[TEX_LEN(u64, gEffWaterRippleTex_WIDTH, gEffWaterRippleTex_HEIGHT, 8)];
+extern Gfx gEffWaterRippleDL[12];
+extern Vtx gEffWaterRippleVtx[];
+
+#endif
diff --git a/assets/objects/gameplay_keep/eff_water_splash.c b/assets/objects/gameplay_keep/eff_water_splash.c
new file mode 100644
index 0000000000..5fddbc952b
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_water_splash.c
@@ -0,0 +1,42 @@
+#include "eff_water_splash.h"
+#include "gfx.h"
+
+u64 gEffWaterSplash1Tex[TEX_LEN(u64, gEffWaterSplash1Tex_WIDTH, gEffWaterSplash1Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffWaterSplash1Tex.i8.inc.c"
+};
+
+u64 gEffWaterSplash2Tex[TEX_LEN(u64, gEffWaterSplash2Tex_WIDTH, gEffWaterSplash2Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffWaterSplash2Tex.i8.inc.c"
+};
+
+u64 gEffWaterSplash3Tex[TEX_LEN(u64, gEffWaterSplash3Tex_WIDTH, gEffWaterSplash3Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffWaterSplash3Tex.i8.inc.c"
+};
+
+u64 gEffWaterSplash4Tex[TEX_LEN(u64, gEffWaterSplash4Tex_WIDTH, gEffWaterSplash4Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffWaterSplash4Tex.i8.inc.c"
+};
+
+u64 gEffWaterSplash5Tex[TEX_LEN(u64, gEffWaterSplash5Tex_WIDTH, gEffWaterSplash5Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffWaterSplash5Tex.i8.inc.c"
+};
+
+u64 gEffWaterSplash6Tex[TEX_LEN(u64, gEffWaterSplash6Tex_WIDTH, gEffWaterSplash6Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffWaterSplash6Tex.i8.inc.c"
+};
+
+u64 gEffWaterSplash7Tex[TEX_LEN(u64, gEffWaterSplash7Tex_WIDTH, gEffWaterSplash7Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffWaterSplash7Tex.i8.inc.c"
+};
+
+u64 gEffWaterSplash8Tex[TEX_LEN(u64, gEffWaterSplash8Tex_WIDTH, gEffWaterSplash8Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffWaterSplash8Tex.i8.inc.c"
+};
+
+Gfx gEffWaterSplashDL[12] = {
+#include "assets/objects/gameplay_keep/gEffWaterSplashDL.inc.c"
+};
+
+Vtx gEffWaterSplashVtx[] = {
+#include "assets/objects/gameplay_keep/gEffWaterSplashVtx.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/eff_water_splash.h b/assets/objects/gameplay_keep/eff_water_splash.h
new file mode 100644
index 0000000000..4d058c8de0
--- /dev/null
+++ b/assets/objects/gameplay_keep/eff_water_splash.h
@@ -0,0 +1,34 @@
+#ifndef GAMEPLAY_KEEP_EFF_WATER_SPLASH_H
+#define GAMEPLAY_KEEP_EFF_WATER_SPLASH_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gEffWaterSplash1Tex_WIDTH 32
+#define gEffWaterSplash1Tex_HEIGHT 40
+extern u64 gEffWaterSplash1Tex[TEX_LEN(u64, gEffWaterSplash1Tex_WIDTH, gEffWaterSplash1Tex_HEIGHT, 8)];
+#define gEffWaterSplash2Tex_WIDTH 32
+#define gEffWaterSplash2Tex_HEIGHT 40
+extern u64 gEffWaterSplash2Tex[TEX_LEN(u64, gEffWaterSplash2Tex_WIDTH, gEffWaterSplash2Tex_HEIGHT, 8)];
+#define gEffWaterSplash3Tex_WIDTH 32
+#define gEffWaterSplash3Tex_HEIGHT 40
+extern u64 gEffWaterSplash3Tex[TEX_LEN(u64, gEffWaterSplash3Tex_WIDTH, gEffWaterSplash3Tex_HEIGHT, 8)];
+#define gEffWaterSplash4Tex_WIDTH 32
+#define gEffWaterSplash4Tex_HEIGHT 40
+extern u64 gEffWaterSplash4Tex[TEX_LEN(u64, gEffWaterSplash4Tex_WIDTH, gEffWaterSplash4Tex_HEIGHT, 8)];
+#define gEffWaterSplash5Tex_WIDTH 32
+#define gEffWaterSplash5Tex_HEIGHT 40
+extern u64 gEffWaterSplash5Tex[TEX_LEN(u64, gEffWaterSplash5Tex_WIDTH, gEffWaterSplash5Tex_HEIGHT, 8)];
+#define gEffWaterSplash6Tex_WIDTH 32
+#define gEffWaterSplash6Tex_HEIGHT 40
+extern u64 gEffWaterSplash6Tex[TEX_LEN(u64, gEffWaterSplash6Tex_WIDTH, gEffWaterSplash6Tex_HEIGHT, 8)];
+#define gEffWaterSplash7Tex_WIDTH 32
+#define gEffWaterSplash7Tex_HEIGHT 40
+extern u64 gEffWaterSplash7Tex[TEX_LEN(u64, gEffWaterSplash7Tex_WIDTH, gEffWaterSplash7Tex_HEIGHT, 8)];
+#define gEffWaterSplash8Tex_WIDTH 32
+#define gEffWaterSplash8Tex_HEIGHT 40
+extern u64 gEffWaterSplash8Tex[TEX_LEN(u64, gEffWaterSplash8Tex_WIDTH, gEffWaterSplash8Tex_HEIGHT, 8)];
+extern Gfx gEffWaterSplashDL[12];
+extern Vtx gEffWaterSplashVtx[];
+
+#endif
diff --git a/assets/objects/gameplay_keep/fairy_anim.c b/assets/objects/gameplay_keep/fairy_anim.c
new file mode 100644
index 0000000000..9c95ce50dc
--- /dev/null
+++ b/assets/objects/gameplay_keep/fairy_anim.c
@@ -0,0 +1,13 @@
+#include "fairy_anim.h"
+
+s16 gFairyFrameData[] = {
+#include "assets/objects/gameplay_keep/gFairyFrameData.inc.c"
+};
+
+JointIndex gFairyJointIndices[] = {
+#include "assets/objects/gameplay_keep/gFairyJointIndices.inc.c"
+};
+
+AnimationHeader gFairyAnim = {
+#include "assets/objects/gameplay_keep/gFairyAnim.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/fairy_anim.h b/assets/objects/gameplay_keep/fairy_anim.h
new file mode 100644
index 0000000000..b12979445c
--- /dev/null
+++ b/assets/objects/gameplay_keep/fairy_anim.h
@@ -0,0 +1,10 @@
+#ifndef GAMEPLAY_KEEP_FAIRY_ANIM_H
+#define GAMEPLAY_KEEP_FAIRY_ANIM_H
+
+#include "animation.h"
+
+extern s16 gFairyFrameData[];
+extern JointIndex gFairyJointIndices[];
+extern AnimationHeader gFairyAnim;
+
+#endif
diff --git a/assets/objects/gameplay_keep/fairy_skel.c b/assets/objects/gameplay_keep/fairy_skel.c
new file mode 100644
index 0000000000..cb39f8a715
--- /dev/null
+++ b/assets/objects/gameplay_keep/fairy_skel.c
@@ -0,0 +1,129 @@
+#include "fairy_skel.h"
+#include "circle_glow_textures.h"
+#include "animation.h"
+#include "array_count.h"
+#include "gfx.h"
+
+u64 gFairyWingTex[TEX_LEN(u64, gFairyWingTex_WIDTH, gFairyWingTex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gFairyWingTex.i8.inc.c"
+};
+
+Vtx gFairyWing1Vtx[] = {
+#include "assets/objects/gameplay_keep/gFairyWing1Vtx.inc.c"
+};
+
+Gfx gFairyWing1DL[17] = {
+#include "assets/objects/gameplay_keep/gFairyWing1DL.inc.c"
+};
+
+Vtx gFairyWing2Vtx[] = {
+#include "assets/objects/gameplay_keep/gFairyWing2Vtx.inc.c"
+};
+
+Gfx gFairyWing2DL[17] = {
+#include "assets/objects/gameplay_keep/gFairyWing2DL.inc.c"
+};
+
+Vtx gFairyWing3Vtx[] = {
+#include "assets/objects/gameplay_keep/gFairyWing3Vtx.inc.c"
+};
+
+Gfx gFairyWing3DL[17] = {
+#include "assets/objects/gameplay_keep/gFairyWing3DL.inc.c"
+};
+
+Vtx gFairyWing4Vtx[] = {
+#include "assets/objects/gameplay_keep/gFairyWing4Vtx.inc.c"
+};
+
+Gfx gFairyWing4DL[17] = {
+#include "assets/objects/gameplay_keep/gFairyWing4DL.inc.c"
+};
+
+Vtx gGlowCircleVtx[] = {
+#include "assets/objects/gameplay_keep/gGlowCircleVtx.inc.c"
+};
+
+Gfx gGlowCircleTextureLoadDL[8] = {
+#include "assets/objects/gameplay_keep/gGlowCircleTextureLoadDL.inc.c"
+};
+
+Gfx gGlowCircleDL[4] = {
+#include "assets/objects/gameplay_keep/gGlowCircleDL.inc.c"
+};
+
+Gfx gGlowCircleSmallDL[45] = {
+#include "assets/objects/gameplay_keep/gGlowCircleSmallDL.inc.c"
+};
+
+Vtx gGlowCircleSmallVtx[] = {
+#include "assets/objects/gameplay_keep/gGlowCircleSmallVtx.inc.c"
+};
+
+u64 gUnusedFairyWingTex[TEX_LEN(u64, gUnusedFairyWingTex_WIDTH, gUnusedFairyWingTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gUnusedFairyWingTex.rgba16.inc.c"
+};
+
+StandardLimb gFairySkelLimb_0 = {
+#include "assets/objects/gameplay_keep/gFairySkelLimb_0.inc.c"
+};
+
+StandardLimb gFairySkelLimb_1 = {
+#include "assets/objects/gameplay_keep/gFairySkelLimb_1.inc.c"
+};
+
+StandardLimb gFairySkelLimb_2 = {
+#include "assets/objects/gameplay_keep/gFairySkelLimb_2.inc.c"
+};
+
+StandardLimb gFairySkelLimb_3 = {
+#include "assets/objects/gameplay_keep/gFairySkelLimb_3.inc.c"
+};
+
+StandardLimb gFairySkelLimb_4 = {
+#include "assets/objects/gameplay_keep/gFairySkelLimb_4.inc.c"
+};
+
+StandardLimb gFairySkelLimb_5 = {
+#include "assets/objects/gameplay_keep/gFairySkelLimb_5.inc.c"
+};
+
+StandardLimb gFairySkelLimb_6 = {
+#include "assets/objects/gameplay_keep/gFairySkelLimb_6.inc.c"
+};
+
+StandardLimb gFairySkelLimb_7 = {
+#include "assets/objects/gameplay_keep/gFairySkelLimb_7.inc.c"
+};
+
+StandardLimb gFairySkelLimb_8 = {
+#include "assets/objects/gameplay_keep/gFairySkelLimb_8.inc.c"
+};
+
+StandardLimb gFairySkelLimb_9 = {
+#include "assets/objects/gameplay_keep/gFairySkelLimb_9.inc.c"
+};
+
+StandardLimb gFairySkelLimb_10 = {
+#include "assets/objects/gameplay_keep/gFairySkelLimb_10.inc.c"
+};
+
+StandardLimb gFairySkelLimb_11 = {
+#include "assets/objects/gameplay_keep/gFairySkelLimb_11.inc.c"
+};
+
+StandardLimb gFairySkelLimb_12 = {
+#include "assets/objects/gameplay_keep/gFairySkelLimb_12.inc.c"
+};
+
+StandardLimb gFairySkelLimb_13 = {
+#include "assets/objects/gameplay_keep/gFairySkelLimb_13.inc.c"
+};
+
+void* gFairyLimbs[] = {
+#include "assets/objects/gameplay_keep/gFairyLimbs.inc.c"
+};
+
+SkeletonHeader gFairySkel = {
+#include "assets/objects/gameplay_keep/gFairySkel.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/fairy_skel.h b/assets/objects/gameplay_keep/fairy_skel.h
new file mode 100644
index 0000000000..6b5816eeca
--- /dev/null
+++ b/assets/objects/gameplay_keep/fairy_skel.h
@@ -0,0 +1,62 @@
+#ifndef GAMEPLAY_KEEP_FAIRY_SKEL_H
+#define GAMEPLAY_KEEP_FAIRY_SKEL_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+#include "animation.h"
+
+#define gFairyWingTex_WIDTH 32
+#define gFairyWingTex_HEIGHT 64
+extern u64 gFairyWingTex[TEX_LEN(u64, gFairyWingTex_WIDTH, gFairyWingTex_HEIGHT, 8)];
+extern Vtx gFairyWing1Vtx[];
+extern Gfx gFairyWing1DL[17];
+extern Vtx gFairyWing2Vtx[];
+extern Gfx gFairyWing2DL[17];
+extern Vtx gFairyWing3Vtx[];
+extern Gfx gFairyWing3DL[17];
+extern Vtx gFairyWing4Vtx[];
+extern Gfx gFairyWing4DL[17];
+extern Vtx gGlowCircleVtx[];
+extern Gfx gGlowCircleTextureLoadDL[8];
+extern Gfx gGlowCircleDL[4];
+extern Gfx gGlowCircleSmallDL[45];
+extern Vtx gGlowCircleSmallVtx[];
+#define gUnusedFairyWingTex_WIDTH 32
+#define gUnusedFairyWingTex_HEIGHT 64
+extern u64 gUnusedFairyWingTex[TEX_LEN(u64, gUnusedFairyWingTex_WIDTH, gUnusedFairyWingTex_HEIGHT, 16)];
+extern StandardLimb gFairySkelLimb_0;
+extern StandardLimb gFairySkelLimb_1;
+extern StandardLimb gFairySkelLimb_2;
+extern StandardLimb gFairySkelLimb_3;
+extern StandardLimb gFairySkelLimb_4;
+extern StandardLimb gFairySkelLimb_5;
+extern StandardLimb gFairySkelLimb_6;
+extern StandardLimb gFairySkelLimb_7;
+extern StandardLimb gFairySkelLimb_8;
+extern StandardLimb gFairySkelLimb_9;
+extern StandardLimb gFairySkelLimb_10;
+extern StandardLimb gFairySkelLimb_11;
+extern StandardLimb gFairySkelLimb_12;
+extern StandardLimb gFairySkelLimb_13;
+extern void* gFairyLimbs[];
+typedef enum FairySkelLimb {
+ /* 0 */ FAIRY_LIMB_NONE,
+ /* 1 */ FAIRY_LIMB_0,
+ /* 2 */ FAIRY_LIMB_1,
+ /* 3 */ FAIRY_LIMB_2,
+ /* 4 */ FAIRY_LIMB_3,
+ /* 5 */ FAIRY_LIMB_4,
+ /* 6 */ FAIRY_LIMB_5,
+ /* 7 */ FAIRY_LIMB_6,
+ /* 8 */ FAIRY_LIMB_7,
+ /* 9 */ FAIRY_LIMB_8,
+ /* 10 */ FAIRY_LIMB_9,
+ /* 11 */ FAIRY_LIMB_10,
+ /* 12 */ FAIRY_LIMB_11,
+ /* 13 */ FAIRY_LIMB_12,
+ /* 14 */ FAIRY_LIMB_13,
+ /* 15 */ FAIRY_LIMB_MAX
+} FairySkelLimb;
+extern SkeletonHeader gFairySkel;
+
+#endif
diff --git a/assets/objects/gameplay_keep/flat_block_model.c b/assets/objects/gameplay_keep/flat_block_model.c
new file mode 100644
index 0000000000..e85f66b5cb
--- /dev/null
+++ b/assets/objects/gameplay_keep/flat_block_model.c
@@ -0,0 +1,11 @@
+#include "flat_block_model.h"
+#include "gameplay_keep_0x42530.h"
+#include "gfx.h"
+
+Vtx gFlatBlockVtx[] = {
+#include "assets/objects/gameplay_keep/gFlatBlockVtx.inc.c"
+};
+
+Gfx gFlatBlockDL[23] = {
+#include "assets/objects/gameplay_keep/gFlatBlockDL.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/flat_block_model.h b/assets/objects/gameplay_keep/flat_block_model.h
new file mode 100644
index 0000000000..4673479aab
--- /dev/null
+++ b/assets/objects/gameplay_keep/flat_block_model.h
@@ -0,0 +1,9 @@
+#ifndef GAMEPLAY_KEEP_FLAT_BLOCK_MODEL_H
+#define GAMEPLAY_KEEP_FLAT_BLOCK_MODEL_H
+
+#include "ultra64.h"
+
+extern Vtx gFlatBlockVtx[];
+extern Gfx gFlatBlockDL[23];
+
+#endif
diff --git a/assets/objects/gameplay_keep/flat_rot_block_model.c b/assets/objects/gameplay_keep/flat_rot_block_model.c
new file mode 100644
index 0000000000..4b561aefe2
--- /dev/null
+++ b/assets/objects/gameplay_keep/flat_rot_block_model.c
@@ -0,0 +1,11 @@
+#include "flat_rot_block_model.h"
+#include "gameplay_keep_0x42530.h"
+#include "gfx.h"
+
+Vtx gFlatRotBlockVtx[] = {
+#include "assets/objects/gameplay_keep/gFlatRotBlockVtx.inc.c"
+};
+
+Gfx gFlatRotBlockDL[22] = {
+#include "assets/objects/gameplay_keep/gFlatRotBlockDL.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/flat_rot_block_model.h b/assets/objects/gameplay_keep/flat_rot_block_model.h
new file mode 100644
index 0000000000..bae717a341
--- /dev/null
+++ b/assets/objects/gameplay_keep/flat_rot_block_model.h
@@ -0,0 +1,9 @@
+#ifndef GAMEPLAY_KEEP_FLAT_ROT_BLOCK_MODEL_H
+#define GAMEPLAY_KEEP_FLAT_ROT_BLOCK_MODEL_H
+
+#include "ultra64.h"
+
+extern Vtx gFlatRotBlockVtx[];
+extern Gfx gFlatRotBlockDL[22];
+
+#endif
diff --git a/assets/objects/gameplay_keep/gArrow1_Anim.c b/assets/objects/gameplay_keep/gArrow1_Anim.c
new file mode 100644
index 0000000000..1d501954a4
--- /dev/null
+++ b/assets/objects/gameplay_keep/gArrow1_Anim.c
@@ -0,0 +1,13 @@
+#include "gArrow1_Anim.h"
+
+s16 gArrow1_FrameData[] = {
+#include "assets/objects/gameplay_keep/gArrow1_FrameData.inc.c"
+};
+
+JointIndex gArrow1_JointIndices[] = {
+#include "assets/objects/gameplay_keep/gArrow1_JointIndices.inc.c"
+};
+
+AnimationHeader gArrow1_Anim = {
+#include "assets/objects/gameplay_keep/gArrow1_Anim.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gArrow1_Anim.h b/assets/objects/gameplay_keep/gArrow1_Anim.h
new file mode 100644
index 0000000000..2d9577baf5
--- /dev/null
+++ b/assets/objects/gameplay_keep/gArrow1_Anim.h
@@ -0,0 +1,10 @@
+#ifndef GAMEPLAY_KEEP_GARROW1_ANIM_H
+#define GAMEPLAY_KEEP_GARROW1_ANIM_H
+
+#include "animation.h"
+
+extern s16 gArrow1_FrameData[];
+extern JointIndex gArrow1_JointIndices[];
+extern AnimationHeader gArrow1_Anim;
+
+#endif
diff --git a/assets/objects/gameplay_keep/gArrow2_Anim.c b/assets/objects/gameplay_keep/gArrow2_Anim.c
new file mode 100644
index 0000000000..bb341136db
--- /dev/null
+++ b/assets/objects/gameplay_keep/gArrow2_Anim.c
@@ -0,0 +1,13 @@
+#include "gArrow2_Anim.h"
+
+s16 gArrow2_FrameData[] = {
+#include "assets/objects/gameplay_keep/gArrow2_FrameData.inc.c"
+};
+
+JointIndex gArrow2_JointIndices[] = {
+#include "assets/objects/gameplay_keep/gArrow2_JointIndices.inc.c"
+};
+
+AnimationHeader gArrow2_Anim = {
+#include "assets/objects/gameplay_keep/gArrow2_Anim.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gArrow2_Anim.h b/assets/objects/gameplay_keep/gArrow2_Anim.h
new file mode 100644
index 0000000000..ab0442ce39
--- /dev/null
+++ b/assets/objects/gameplay_keep/gArrow2_Anim.h
@@ -0,0 +1,10 @@
+#ifndef GAMEPLAY_KEEP_GARROW2_ANIM_H
+#define GAMEPLAY_KEEP_GARROW2_ANIM_H
+
+#include "animation.h"
+
+extern s16 gArrow2_FrameData[];
+extern JointIndex gArrow2_JointIndices[];
+extern AnimationHeader gArrow2_Anim;
+
+#endif
diff --git a/assets/objects/gameplay_keep/gBugCrawlAnim.c b/assets/objects/gameplay_keep/gBugCrawlAnim.c
new file mode 100644
index 0000000000..1c34abcd9f
--- /dev/null
+++ b/assets/objects/gameplay_keep/gBugCrawlAnim.c
@@ -0,0 +1,13 @@
+#include "gBugCrawlAnim.h"
+
+s16 gBugCrawlFrameData[] = {
+#include "assets/objects/gameplay_keep/gBugCrawlFrameData.inc.c"
+};
+
+JointIndex gBugCrawlJointIndices[] = {
+#include "assets/objects/gameplay_keep/gBugCrawlJointIndices.inc.c"
+};
+
+AnimationHeader gBugCrawlAnim = {
+#include "assets/objects/gameplay_keep/gBugCrawlAnim.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gBugCrawlAnim.h b/assets/objects/gameplay_keep/gBugCrawlAnim.h
new file mode 100644
index 0000000000..554e80178a
--- /dev/null
+++ b/assets/objects/gameplay_keep/gBugCrawlAnim.h
@@ -0,0 +1,11 @@
+#ifndef GAMEPLAY_KEEP_GBUGCRAWLANIM_H
+#define GAMEPLAY_KEEP_GBUGCRAWLANIM_H
+
+#include "ultra64.h"
+#include "animation.h"
+
+extern s16 gBugCrawlFrameData[];
+extern JointIndex gBugCrawlJointIndices[];
+extern AnimationHeader gBugCrawlAnim;
+
+#endif
diff --git a/assets/objects/gameplay_keep/gDoorAdultOpeningLeftAnim.c b/assets/objects/gameplay_keep/gDoorAdultOpeningLeftAnim.c
new file mode 100644
index 0000000000..4d5db4d36c
--- /dev/null
+++ b/assets/objects/gameplay_keep/gDoorAdultOpeningLeftAnim.c
@@ -0,0 +1,13 @@
+#include "gDoorAdultOpeningLeftAnim.h"
+
+s16 gDoorAdultOpeningLeftFrameData[] = {
+#include "assets/objects/gameplay_keep/gDoorAdultOpeningLeftFrameData.inc.c"
+};
+
+JointIndex gDoorAdultOpeningLeftJointIndices[] = {
+#include "assets/objects/gameplay_keep/gDoorAdultOpeningLeftJointIndices.inc.c"
+};
+
+AnimationHeader gDoorAdultOpeningLeftAnim = {
+#include "assets/objects/gameplay_keep/gDoorAdultOpeningLeftAnim.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gDoorAdultOpeningLeftAnim.h b/assets/objects/gameplay_keep/gDoorAdultOpeningLeftAnim.h
new file mode 100644
index 0000000000..8bab724e4e
--- /dev/null
+++ b/assets/objects/gameplay_keep/gDoorAdultOpeningLeftAnim.h
@@ -0,0 +1,10 @@
+#ifndef GAMEPLAY_KEEP_GDOORADULTOPENINGLEFTANIM_H
+#define GAMEPLAY_KEEP_GDOORADULTOPENINGLEFTANIM_H
+
+#include "animation.h"
+
+extern s16 gDoorAdultOpeningLeftFrameData[];
+extern JointIndex gDoorAdultOpeningLeftJointIndices[];
+extern AnimationHeader gDoorAdultOpeningLeftAnim;
+
+#endif
diff --git a/assets/objects/gameplay_keep/gDoorAdultOpeningRightAnim.c b/assets/objects/gameplay_keep/gDoorAdultOpeningRightAnim.c
new file mode 100644
index 0000000000..c5e171b86a
--- /dev/null
+++ b/assets/objects/gameplay_keep/gDoorAdultOpeningRightAnim.c
@@ -0,0 +1,13 @@
+#include "gDoorAdultOpeningRightAnim.h"
+
+s16 gDoorAdultOpeningRightFrameData[] = {
+#include "assets/objects/gameplay_keep/gDoorAdultOpeningRightFrameData.inc.c"
+};
+
+JointIndex gDoorAdultOpeningRightJointIndices[] = {
+#include "assets/objects/gameplay_keep/gDoorAdultOpeningRightJointIndices.inc.c"
+};
+
+AnimationHeader gDoorAdultOpeningRightAnim = {
+#include "assets/objects/gameplay_keep/gDoorAdultOpeningRightAnim.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gDoorAdultOpeningRightAnim.h b/assets/objects/gameplay_keep/gDoorAdultOpeningRightAnim.h
new file mode 100644
index 0000000000..b444b93ff0
--- /dev/null
+++ b/assets/objects/gameplay_keep/gDoorAdultOpeningRightAnim.h
@@ -0,0 +1,10 @@
+#ifndef GAMEPLAY_KEEP_DOOR_ADULT_OPENING_RIGHT_ANIM_H
+#define GAMEPLAY_KEEP_DOOR_ADULT_OPENING_RIGHT_ANIM_H
+
+#include "animation.h"
+
+extern s16 gDoorAdultOpeningRightFrameData[];
+extern JointIndex gDoorAdultOpeningRightJointIndices[];
+extern AnimationHeader gDoorAdultOpeningRightAnim;
+
+#endif
diff --git a/assets/objects/gameplay_keep/gDoorChildOpeningLeftAnim.c b/assets/objects/gameplay_keep/gDoorChildOpeningLeftAnim.c
new file mode 100644
index 0000000000..e2b340858a
--- /dev/null
+++ b/assets/objects/gameplay_keep/gDoorChildOpeningLeftAnim.c
@@ -0,0 +1,13 @@
+#include "gDoorChildOpeningLeftAnim.h"
+
+s16 gDoorChildOpeningLeftFrameData[] = {
+#include "assets/objects/gameplay_keep/gDoorChildOpeningLeftFrameData.inc.c"
+};
+
+JointIndex gDoorChildOpeningLeftJointIndices[] = {
+#include "assets/objects/gameplay_keep/gDoorChildOpeningLeftJointIndices.inc.c"
+};
+
+AnimationHeader gDoorChildOpeningLeftAnim = {
+#include "assets/objects/gameplay_keep/gDoorChildOpeningLeftAnim.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gDoorChildOpeningLeftAnim.h b/assets/objects/gameplay_keep/gDoorChildOpeningLeftAnim.h
new file mode 100644
index 0000000000..295b87edd1
--- /dev/null
+++ b/assets/objects/gameplay_keep/gDoorChildOpeningLeftAnim.h
@@ -0,0 +1,10 @@
+#ifndef GAMEPLAY_KEEP_DOOR_CHILD_OPENING_LEFT_ANIM_H
+#define GAMEPLAY_KEEP_DOOR_CHILD_OPENING_LEFT_ANIM_H
+
+#include "animation.h"
+
+extern s16 gDoorChildOpeningLeftFrameData[];
+extern JointIndex gDoorChildOpeningLeftJointIndices[];
+extern AnimationHeader gDoorChildOpeningLeftAnim;
+
+#endif
diff --git a/assets/objects/gameplay_keep/gDoorChildOpeningRightAnim.c b/assets/objects/gameplay_keep/gDoorChildOpeningRightAnim.c
new file mode 100644
index 0000000000..79af410047
--- /dev/null
+++ b/assets/objects/gameplay_keep/gDoorChildOpeningRightAnim.c
@@ -0,0 +1,13 @@
+#include "gDoorChildOpeningRightAnim.h"
+
+s16 gDoorChildOpeningRightFrameData[] = {
+#include "assets/objects/gameplay_keep/gDoorChildOpeningRightFrameData.inc.c"
+};
+
+JointIndex gDoorChildOpeningRightJointIndices[] = {
+#include "assets/objects/gameplay_keep/gDoorChildOpeningRightJointIndices.inc.c"
+};
+
+AnimationHeader gDoorChildOpeningRightAnim = {
+#include "assets/objects/gameplay_keep/gDoorChildOpeningRightAnim.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gDoorChildOpeningRightAnim.h b/assets/objects/gameplay_keep/gDoorChildOpeningRightAnim.h
new file mode 100644
index 0000000000..6476396339
--- /dev/null
+++ b/assets/objects/gameplay_keep/gDoorChildOpeningRightAnim.h
@@ -0,0 +1,10 @@
+#ifndef GAMEPLAY_KEEP_GDOORCHILDOPENINGRIGHTANIM_H
+#define GAMEPLAY_KEEP_GDOORCHILDOPENINGRIGHTANIM_H
+
+#include "animation.h"
+
+extern s16 gDoorChildOpeningRightFrameData[];
+extern JointIndex gDoorChildOpeningRightJointIndices[];
+extern AnimationHeader gDoorChildOpeningRightAnim;
+
+#endif
diff --git a/assets/objects/gameplay_keep/gFishInWaterAnim.c b/assets/objects/gameplay_keep/gFishInWaterAnim.c
new file mode 100644
index 0000000000..10c6afb9f1
--- /dev/null
+++ b/assets/objects/gameplay_keep/gFishInWaterAnim.c
@@ -0,0 +1,13 @@
+#include "gFishInWaterAnim.h"
+
+s16 gFishInWaterFrameData[] = {
+#include "assets/objects/gameplay_keep/gFishInWaterFrameData.inc.c"
+};
+
+JointIndex gFishInWaterJointIndices[] = {
+#include "assets/objects/gameplay_keep/gFishInWaterJointIndices.inc.c"
+};
+
+AnimationHeader gFishInWaterAnim = {
+#include "assets/objects/gameplay_keep/gFishInWaterAnim.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gFishInWaterAnim.h b/assets/objects/gameplay_keep/gFishInWaterAnim.h
new file mode 100644
index 0000000000..956d54c2ba
--- /dev/null
+++ b/assets/objects/gameplay_keep/gFishInWaterAnim.h
@@ -0,0 +1,10 @@
+#ifndef GAMEPLAY_KEEP_GFISHINWATERANIM_H
+#define GAMEPLAY_KEEP_GFISHINWATERANIM_H
+
+#include "animation.h"
+
+extern s16 gFishInWaterFrameData[];
+extern JointIndex gFishInWaterJointIndices[];
+extern AnimationHeader gFishInWaterAnim;
+
+#endif
diff --git a/assets/objects/gameplay_keep/gFishOutOfWaterAnim.c b/assets/objects/gameplay_keep/gFishOutOfWaterAnim.c
new file mode 100644
index 0000000000..7579f0ca93
--- /dev/null
+++ b/assets/objects/gameplay_keep/gFishOutOfWaterAnim.c
@@ -0,0 +1,13 @@
+#include "gFishOutOfWaterAnim.h"
+
+s16 gFishOutOfWaterFrameData[] = {
+#include "assets/objects/gameplay_keep/gFishOutOfWaterFrameData.inc.c"
+};
+
+JointIndex gFishOutOfWaterJointIndices[] = {
+#include "assets/objects/gameplay_keep/gFishOutOfWaterJointIndices.inc.c"
+};
+
+AnimationHeader gFishOutOfWaterAnim = {
+#include "assets/objects/gameplay_keep/gFishOutOfWaterAnim.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gFishOutOfWaterAnim.h b/assets/objects/gameplay_keep/gFishOutOfWaterAnim.h
new file mode 100644
index 0000000000..e96f710391
--- /dev/null
+++ b/assets/objects/gameplay_keep/gFishOutOfWaterAnim.h
@@ -0,0 +1,10 @@
+#ifndef GAMEPLAY_KEEP_GFISHOUTOFWATERANIM_H
+#define GAMEPLAY_KEEP_GFISHOUTOFWATERANIM_H
+
+#include "animation.h"
+
+extern s16 gFishOutOfWaterFrameData[];
+extern JointIndex gFishOutOfWaterJointIndices[];
+extern AnimationHeader gFishOutOfWaterAnim;
+
+#endif
diff --git a/assets/objects/gameplay_keep/gLargerCubeCol.c b/assets/objects/gameplay_keep/gLargerCubeCol.c
new file mode 100644
index 0000000000..24477a8607
--- /dev/null
+++ b/assets/objects/gameplay_keep/gLargerCubeCol.c
@@ -0,0 +1,24 @@
+#include "gLargerCubeCol.h"
+#include "array_count.h"
+#include "camera.h"
+#include "bgcheck.h"
+
+BgCamInfo gLargerCubeBgCamList[] = {
+#include "assets/objects/gameplay_keep/gLargerCubeBgCamList.inc.c"
+};
+
+SurfaceType gLargerCubeSurfaceTypes[] = {
+#include "assets/objects/gameplay_keep/gLargerCubeSurfaceTypes.inc.c"
+};
+
+CollisionPoly gLargerCubePolyList[] = {
+#include "assets/objects/gameplay_keep/gLargerCubePolyList.inc.c"
+};
+
+Vec3s gLargerCubeVtxList[] = {
+#include "assets/objects/gameplay_keep/gLargerCubeVtxList.inc.c"
+};
+
+CollisionHeader gLargerCubeCol = {
+#include "assets/objects/gameplay_keep/gLargerCubeCol.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gLargerCubeCol.h b/assets/objects/gameplay_keep/gLargerCubeCol.h
new file mode 100644
index 0000000000..765f5be9f1
--- /dev/null
+++ b/assets/objects/gameplay_keep/gLargerCubeCol.h
@@ -0,0 +1,12 @@
+#ifndef GAMEPLAY_KEEP_GLARGERCUBECOL_H
+#define GAMEPLAY_KEEP_GLARGERCUBECOL_H
+
+#include "bgcheck.h"
+
+extern BgCamInfo gLargerCubeBgCamList[];
+extern SurfaceType gLargerCubeSurfaceTypes[];
+extern CollisionPoly gLargerCubePolyList[];
+extern Vec3s gLargerCubeVtxList[];
+extern CollisionHeader gLargerCubeCol;
+
+#endif
diff --git a/assets/objects/gameplay_keep/gLargerFlatBlockCol.c b/assets/objects/gameplay_keep/gLargerFlatBlockCol.c
new file mode 100644
index 0000000000..e154764934
--- /dev/null
+++ b/assets/objects/gameplay_keep/gLargerFlatBlockCol.c
@@ -0,0 +1,23 @@
+#include "gLargerFlatBlockCol.h"
+#include "array_count.h"
+#include "camera.h"
+
+BgCamInfo gLargerFlatBlockBgCamList[] = {
+#include "assets/objects/gameplay_keep/gLargerFlatBlockBgCamList.inc.c"
+};
+
+SurfaceType gLargerFlatBlockSurfaceTypes[] = {
+#include "assets/objects/gameplay_keep/gLargerFlatBlockSurfaceTypes.inc.c"
+};
+
+CollisionPoly gLargerFlatBlockPolyList[] = {
+#include "assets/objects/gameplay_keep/gLargerFlatBlockPolyList.inc.c"
+};
+
+Vec3s gLargerFlatBlockVtxList[] = {
+#include "assets/objects/gameplay_keep/gLargerFlatBlockVtxList.inc.c"
+};
+
+CollisionHeader gLargerFlatBlockCol = {
+#include "assets/objects/gameplay_keep/gLargerFlatBlockCol.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gLargerFlatBlockCol.h b/assets/objects/gameplay_keep/gLargerFlatBlockCol.h
new file mode 100644
index 0000000000..c03b2084fa
--- /dev/null
+++ b/assets/objects/gameplay_keep/gLargerFlatBlockCol.h
@@ -0,0 +1,12 @@
+#ifndef GAMEPLAY_KEEP_GLARGERFLATBLOCKCOL_H
+#define GAMEPLAY_KEEP_GLARGERFLATBLOCKCOL_H
+
+#include "bgcheck.h"
+
+extern BgCamInfo gLargerFlatBlockBgCamList[];
+extern SurfaceType gLargerFlatBlockSurfaceTypes[];
+extern CollisionPoly gLargerFlatBlockPolyList[];
+extern Vec3s gLargerFlatBlockVtxList[];
+extern CollisionHeader gLargerFlatBlockCol;
+
+#endif
diff --git a/assets/objects/gameplay_keep/gTallBlockCol.c b/assets/objects/gameplay_keep/gTallBlockCol.c
new file mode 100644
index 0000000000..2ba1f5f92c
--- /dev/null
+++ b/assets/objects/gameplay_keep/gTallBlockCol.c
@@ -0,0 +1,24 @@
+#include "gTallBlockCol.h"
+#include "bgcheck.h"
+#include "array_count.h"
+#include "camera.h"
+
+BgCamInfo gTallBlockBgCamList[] = {
+#include "assets/objects/gameplay_keep/gTallBlockBgCamList.inc.c"
+};
+
+SurfaceType gTallBlockSurfaceTypes[] = {
+#include "assets/objects/gameplay_keep/gTallBlockSurfaceTypes.inc.c"
+};
+
+CollisionPoly gTallBlockPolyList[] = {
+#include "assets/objects/gameplay_keep/gTallBlockPolyList.inc.c"
+};
+
+Vec3s gTallBlockVtxList[] = {
+#include "assets/objects/gameplay_keep/gTallBlockVtxList.inc.c"
+};
+
+CollisionHeader gTallBlockCol = {
+#include "assets/objects/gameplay_keep/gTallBlockCol.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gTallBlockCol.h b/assets/objects/gameplay_keep/gTallBlockCol.h
new file mode 100644
index 0000000000..ca3b6031d2
--- /dev/null
+++ b/assets/objects/gameplay_keep/gTallBlockCol.h
@@ -0,0 +1,12 @@
+#ifndef GAMEPLAY_KEEP_GTALLBLOCKCOL_H
+#define GAMEPLAY_KEEP_GTALLBLOCKCOL_H
+
+#include "bgcheck.h"
+
+extern BgCamInfo gTallBlockBgCamList[];
+extern SurfaceType gTallBlockSurfaceTypes[];
+extern CollisionPoly gTallBlockPolyList[];
+extern Vec3s gTallBlockVtxList[];
+extern CollisionHeader gTallBlockCol;
+
+#endif
diff --git a/assets/objects/gameplay_keep/gWideTallBlockCol.c b/assets/objects/gameplay_keep/gWideTallBlockCol.c
new file mode 100644
index 0000000000..4176c4c4fb
--- /dev/null
+++ b/assets/objects/gameplay_keep/gWideTallBlockCol.c
@@ -0,0 +1,24 @@
+#include "gWideTallBlockCol.h"
+#include "array_count.h"
+#include "camera.h"
+#include "bgcheck.h"
+
+BgCamInfo gWideTallBlockBgCamList[] = {
+#include "assets/objects/gameplay_keep/gWideTallBlockBgCamList.inc.c"
+};
+
+SurfaceType gWideTallBlockSurfaceTypes[] = {
+#include "assets/objects/gameplay_keep/gWideTallBlockSurfaceTypes.inc.c"
+};
+
+CollisionPoly gWideTallBlockPolyList[] = {
+#include "assets/objects/gameplay_keep/gWideTallBlockPolyList.inc.c"
+};
+
+Vec3s gWideTallBlockVtxList[] = {
+#include "assets/objects/gameplay_keep/gWideTallBlockVtxList.inc.c"
+};
+
+CollisionHeader gWideTallBlockCol = {
+#include "assets/objects/gameplay_keep/gWideTallBlockCol.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gWideTallBlockCol.h b/assets/objects/gameplay_keep/gWideTallBlockCol.h
new file mode 100644
index 0000000000..b272034885
--- /dev/null
+++ b/assets/objects/gameplay_keep/gWideTallBlockCol.h
@@ -0,0 +1,12 @@
+#ifndef GAMEPLAY_KEEP_GWIDETALLBLOCKCOL_H
+#define GAMEPLAY_KEEP_GWIDETALLBLOCKCOL_H
+
+#include "bgcheck.h"
+
+extern BgCamInfo gWideTallBlockBgCamList[];
+extern SurfaceType gWideTallBlockSurfaceTypes[];
+extern CollisionPoly gWideTallBlockPolyList[];
+extern Vec3s gWideTallBlockVtxList[];
+extern CollisionHeader gWideTallBlockCol;
+
+#endif
diff --git a/assets/objects/gameplay_keep/gameplay_keep.h b/assets/objects/gameplay_keep/gameplay_keep.h
new file mode 100644
index 0000000000..b3cd325f0c
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep.h
@@ -0,0 +1,145 @@
+#ifndef GAMEPLAY_KEEP_H
+#define GAMEPLAY_KEEP_H
+
+#include "hilite_textures.h"
+#include "link_textures.h"
+#include "player_pause_joint_tables.h"
+#include "player_anim_headers.h"
+#include "debug_models.h"
+#include "gArrow1_Anim.h"
+#include "gArrow2_Anim.h"
+#include "arrow_skel.h"
+#include "unk_eff_blure_tex.h"
+#include "bomb_body.h"
+#include "bomb_cap.h"
+#include "bombchu_body.h"
+#include "eff_bomb_explosion.h"
+#include "eff_fragments_1.h"
+#include "boomerang.h"
+#include "compass_arrow.h"
+#if OOT_REGION != REGION_EU
+#include "gameplay_keep_ntsc_0xC880.h"
+#endif
+#include "lock_on_arrow.h"
+#include "hilite3_tex.h"
+#include "eff_fragments_2_model.h"
+#if OOT_REGION != REGION_EU
+#include "gameplay_keep_ntsc_0xCE60.h"
+#endif
+#include "shopkeeper_controls_tex.h"
+#include "rock_fragments_model.h"
+#include "rock_fragments_tex.h"
+#include "gDoorChildOpeningLeftAnim.h"
+#include "gDoorChildOpeningRightAnim.h"
+#include "door_skel.h"
+#include "gDoorAdultOpeningRightAnim.h"
+#include "eff_dust.h"
+#include "eff_flash.h"
+#include "spin_attack.h"
+#include "gameplay_keep_0x13700.h"
+#include "fairy_anim.h"
+#include "fairy_skel.h"
+#include "gameplay_keep_0x16A50.h"
+#include "hilite4_tex.h"
+#include "gameplay_keep_0x173D0.h"
+#include "gFishOutOfWaterAnim.h"
+#include "gameplay_keep_0x18610.h"
+#include "gFishInWaterAnim.h"
+#include "eff_shockwave.h"
+#include "eff_bubble.h"
+#include "eff_fire_footprint.h"
+#include "unused_bubbles.h"
+#include "lens_mask_tex.h"
+#include "eff_hitmark.h"
+#include "gameplay_keep_0x21810.h"
+#include "eff_magma_bubble.h"
+#include "eff_water_ripple.h"
+#include "eff_spark_model.h"
+#include "eff_water_splash.h"
+#include "unknown_eff_stone.h"
+#include "eff_lightning.h"
+#include "eff_enemy_death_flame.h"
+#include "gameplay_keep_0x32090.h"
+#include "gameplay_keep_0x33090.h"
+#include "eff_ice_fragments.h"
+#include "gameplay_keep_0x33910.h"
+#include "gBugCrawlAnim.h"
+#include "bug_skel.h"
+#include "cuttable_shrub.h"
+#include "lens_flare.h"
+#include "eff_sparkles.h"
+#include "hover_boots_circle.h"
+#include "moon.h"
+#include "gameplay_keep_0x38FB0.h"
+#if OOT_REGION != REGION_EU
+#include "gameplay_keep_ntsc_0x39850.h"
+#include "unused_bomb_icon_model_ntsc.h"
+#include "unused_heart_icon_model_ntsc.h"
+#include "unused_arrow_icon_model_ntsc.h"
+#endif
+#include "gLargerCubeCol.h"
+#include "liftable_rock_model.h"
+#include "gameplay_keep_0x39710.h"
+#include "gWideTallBlockCol.h"
+#include "flat_block_model.h"
+#include "gTallBlockCol.h"
+#include "gameplay_keep_0x39DF0.h"
+#include "small_flat_block_col.h"
+#include "flat_rot_block_model.h"
+#include "gLargerFlatBlockCol.h"
+#include "small_cube_model.h"
+#include "small_cube_col.h"
+#include "tree_stump_model.h"
+#include "grass_blades_model.h"
+#include "gameplay_keep_0x3AC30.h"
+#include "heart_piece_interior_model.h"
+#include "gameplay_keep_0x3B1E0.h"
+#if OOT_REGION != REGION_EU
+#include "gameplay_keep_ntsc_0x3C610.h"
+#include "unused_heart_container_icon_model_ntsc.h"
+#endif
+#include "rectangular_sign_model.h"
+#include "directional_sign_model.h"
+#include "gameplay_keep_0x3C870.h"
+#if OOT_REGION != REGION_EU
+#include "gameplay_keep_ntsc_0x3FD80.h"
+#endif
+#include "drop_recovery_heart_tex.h"
+#if OOT_REGION != REGION_EU
+#include "unused_heart_piece_icon_tex_ntsc.h"
+#endif
+#include "item_drop_dl.h"
+#include "gameplay_keep_0x3F140.h"
+#include "rupee.h"
+#if OOT_REGION != REGION_EU
+#include "item_drops_ntsc.h"
+#endif
+#include "rupee_light_red_tex.h"
+#if OOT_REGION != REGION_EU
+#include "gameplay_keep_ntsc_0x46A40.h"
+#endif
+#include "gameplay_keep_0x42530.h"
+#include "gameplay_keep_0x43530.h"
+#include "gameplay_keep_0x44530.h"
+#include "gameplay_keep_0x45530.h"
+#include "gameplay_keep_0x45D30.h"
+#include "sign_textures.h"
+#include "raindrop_model.h"
+#include "shadow_foot.h"
+#include "shadow_circle.h"
+#include "shadow_horse.h"
+#include "gameplay_keep_0x49F20.h"
+#include "gameplay_keep_0x4A090.h"
+#include "sun_textures.h"
+#include "sun_evening_textures.h"
+#include "gameplay_keep_0x4D160.h"
+#include "lock_on_reticle.h"
+#include "eff_fire.h"
+#include "gameplay_keep_0x4E660.h"
+#include "gameplay_keep_0x515B0.h"
+#include "dust_textures.h"
+#include "circle_glow_textures.h"
+#include "gameplay_keep_0x55DB0.h"
+#include "eff_spark_textures.h"
+
+#endif
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x13700.c b/assets/objects/gameplay_keep/gameplay_keep_0x13700.c
new file mode 100644
index 0000000000..ce20bdb126
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x13700.c
@@ -0,0 +1,18 @@
+#include "gameplay_keep_0x13700.h"
+#include "gfx.h"
+
+u64 gEffUnknown2Tex[TEX_LEN(u64, gEffUnknown2Tex_WIDTH, gEffUnknown2Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffUnknown2Tex.i8.inc.c"
+};
+
+u64 gEffUnknown3Tex[TEX_LEN(u64, gEffUnknown3Tex_WIDTH, gEffUnknown3Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffUnknown3Tex.i8.inc.c"
+};
+
+Vtx gUnusedBeamBladeVtx[] = {
+#include "assets/objects/gameplay_keep/gUnusedBeamBladeVtx.inc.c"
+};
+
+Gfx gUnusedBeamBladeDL[37] = {
+#include "assets/objects/gameplay_keep/gUnusedBeamBladeDL.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x13700.h b/assets/objects/gameplay_keep/gameplay_keep_0x13700.h
new file mode 100644
index 0000000000..0be46d522f
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x13700.h
@@ -0,0 +1,16 @@
+#ifndef GAMEPLAY_KEEP_0x13700_H
+#define GAMEPLAY_KEEP_0x13700_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gEffUnknown2Tex_WIDTH 32
+#define gEffUnknown2Tex_HEIGHT 64
+extern u64 gEffUnknown2Tex[TEX_LEN(u64, gEffUnknown2Tex_WIDTH, gEffUnknown2Tex_HEIGHT, 8)];
+#define gEffUnknown3Tex_WIDTH 32
+#define gEffUnknown3Tex_HEIGHT 64
+extern u64 gEffUnknown3Tex[TEX_LEN(u64, gEffUnknown3Tex_WIDTH, gEffUnknown3Tex_HEIGHT, 8)];
+extern Vtx gUnusedBeamBladeVtx[];
+extern Gfx gUnusedBeamBladeDL[37];
+
+#endif
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x16A50.c b/assets/objects/gameplay_keep/gameplay_keep_0x16A50.c
new file mode 100644
index 0000000000..97a2ab7565
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x16A50.c
@@ -0,0 +1,9 @@
+#include "gameplay_keep_0x16A50.h"
+
+u64 gUnknownCircle3Tex[TEX_LEN(u64, gUnknownCircle3Tex_WIDTH, gUnknownCircle3Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gUnknownCircle3Tex.i4.inc.c"
+};
+
+u64 gUnknownCircle4Tex[TEX_LEN(u64, gUnknownCircle4Tex_WIDTH, gUnknownCircle4Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gUnknownCircle4Tex.i8.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x16A50.h b/assets/objects/gameplay_keep/gameplay_keep_0x16A50.h
new file mode 100644
index 0000000000..f776aa9415
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x16A50.h
@@ -0,0 +1,14 @@
+#ifndef GAMEPLAY_KEEP_0x16A50_H
+#define GAMEPLAY_KEEP_0x16A50_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gUnknownCircle3Tex_WIDTH 16
+#define gUnknownCircle3Tex_HEIGHT 16
+extern u64 gUnknownCircle3Tex[TEX_LEN(u64, gUnknownCircle3Tex_WIDTH, gUnknownCircle3Tex_HEIGHT, 4)];
+#define gUnknownCircle4Tex_WIDTH 16
+#define gUnknownCircle4Tex_HEIGHT 16
+extern u64 gUnknownCircle4Tex[TEX_LEN(u64, gUnknownCircle4Tex_WIDTH, gUnknownCircle4Tex_HEIGHT, 8)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x173D0.c b/assets/objects/gameplay_keep/gameplay_keep_0x173D0.c
new file mode 100644
index 0000000000..6d4fe6f8c6
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x173D0.c
@@ -0,0 +1,18 @@
+#include "gameplay_keep_0x173D0.h"
+#include "gfx.h"
+
+u64 gEffUnknown4Tex[TEX_LEN(u64, gEffUnknown4Tex_WIDTH, gEffUnknown4Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffUnknown4Tex.i8.inc.c"
+};
+
+u64 gEffUnknown5Tex[TEX_LEN(u64, gEffUnknown5Tex_WIDTH, gEffUnknown5Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffUnknown5Tex.i8.inc.c"
+};
+
+Vtx gEffFireCircleVtx[] = {
+#include "assets/objects/gameplay_keep/gEffFireCircleVtx.inc.c"
+};
+
+Gfx gEffFireCircleDL[30] = {
+#include "assets/objects/gameplay_keep/gEffFireCircleDL.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x173D0.h b/assets/objects/gameplay_keep/gameplay_keep_0x173D0.h
new file mode 100644
index 0000000000..b619eceaba
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x173D0.h
@@ -0,0 +1,16 @@
+#ifndef GAMEPLAY_KEEP_0x173D0_H
+#define GAMEPLAY_KEEP_0x173D0_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gEffUnknown4Tex_WIDTH 32
+#define gEffUnknown4Tex_HEIGHT 64
+extern u64 gEffUnknown4Tex[TEX_LEN(u64, gEffUnknown4Tex_WIDTH, gEffUnknown4Tex_HEIGHT, 8)];
+#define gEffUnknown5Tex_WIDTH 32
+#define gEffUnknown5Tex_HEIGHT 64
+extern u64 gEffUnknown5Tex[TEX_LEN(u64, gEffUnknown5Tex_WIDTH, gEffUnknown5Tex_HEIGHT, 8)];
+extern Vtx gEffFireCircleVtx[];
+extern Gfx gEffFireCircleDL[30];
+
+#endif
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x18610.c b/assets/objects/gameplay_keep/gameplay_keep_0x18610.c
new file mode 100644
index 0000000000..07aad27e6c
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x18610.c
@@ -0,0 +1,67 @@
+#include "gameplay_keep_0x18610.h"
+#include "array_count.h"
+#include "gfx.h"
+
+Vtx gameplay_keep_Vtx_018610[] = {
+#include "assets/objects/gameplay_keep/gameplay_keep_Vtx_018610.inc.c"
+};
+
+Vtx gameplay_keep_Vtx_018650[] = {
+#include "assets/objects/gameplay_keep/gameplay_keep_Vtx_018650.inc.c"
+};
+
+Vtx gameplay_keep_Vtx_018750[] = {
+#include "assets/objects/gameplay_keep/gameplay_keep_Vtx_018750.inc.c"
+};
+
+Gfx gameplay_keep_0188B0_DL[20] = {
+#include "assets/objects/gameplay_keep/gameplay_keep_0188B0_DL.inc.c"
+};
+
+Gfx gameplay_keep_018950_DL[35] = {
+#include "assets/objects/gameplay_keep/gameplay_keep_018950_DL.inc.c"
+};
+
+Gfx gameplay_keep_018A68_DL[35] = {
+#include "assets/objects/gameplay_keep/gameplay_keep_018A68_DL.inc.c"
+};
+
+u64 gFishTailTex[TEX_LEN(u64, gFishTailTex_WIDTH, gFishTailTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gFishTailTex.rgba16.inc.c"
+};
+
+u64 gFishBodyTex[TEX_LEN(u64, gFishBodyTex_WIDTH, gFishBodyTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gFishBodyTex.rgba16.inc.c"
+};
+
+StandardLimb gFishSkelLimb_0 = {
+#include "assets/objects/gameplay_keep/gFishSkelLimb_0.inc.c"
+};
+
+StandardLimb gFishSkelLimb_1 = {
+#include "assets/objects/gameplay_keep/gFishSkelLimb_1.inc.c"
+};
+
+StandardLimb gFishSkelLimb_2 = {
+#include "assets/objects/gameplay_keep/gFishSkelLimb_2.inc.c"
+};
+
+StandardLimb gFishSkelLimb_3 = {
+#include "assets/objects/gameplay_keep/gFishSkelLimb_3.inc.c"
+};
+
+StandardLimb gFishSkelLimb_4 = {
+#include "assets/objects/gameplay_keep/gFishSkelLimb_4.inc.c"
+};
+
+StandardLimb gFishSkelLimb_5 = {
+#include "assets/objects/gameplay_keep/gFishSkelLimb_5.inc.c"
+};
+
+void* gFishLimbs[] = {
+#include "assets/objects/gameplay_keep/gFishLimbs.inc.c"
+};
+
+FlexSkeletonHeader gFishSkel = {
+#include "assets/objects/gameplay_keep/gFishSkel.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x18610.h b/assets/objects/gameplay_keep/gameplay_keep_0x18610.h
new file mode 100644
index 0000000000..fe2edbc658
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x18610.h
@@ -0,0 +1,39 @@
+#ifndef GAMEPLAY_KEEP_0x18610_H
+#define GAMEPLAY_KEEP_0x18610_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+#include "animation.h"
+
+extern Vtx gameplay_keep_Vtx_018610[];
+extern Vtx gameplay_keep_Vtx_018650[];
+extern Vtx gameplay_keep_Vtx_018750[];
+extern Gfx gameplay_keep_0188B0_DL[20];
+extern Gfx gameplay_keep_018950_DL[35];
+extern Gfx gameplay_keep_018A68_DL[35];
+#define gFishTailTex_WIDTH 16
+#define gFishTailTex_HEIGHT 16
+extern u64 gFishTailTex[TEX_LEN(u64, gFishTailTex_WIDTH, gFishTailTex_HEIGHT, 16)];
+#define gFishBodyTex_WIDTH 32
+#define gFishBodyTex_HEIGHT 8
+extern u64 gFishBodyTex[TEX_LEN(u64, gFishBodyTex_WIDTH, gFishBodyTex_HEIGHT, 16)];
+extern StandardLimb gFishSkelLimb_0;
+extern StandardLimb gFishSkelLimb_1;
+extern StandardLimb gFishSkelLimb_2;
+extern StandardLimb gFishSkelLimb_3;
+extern StandardLimb gFishSkelLimb_4;
+extern StandardLimb gFishSkelLimb_5;
+extern void* gFishLimbs[];
+typedef enum FishSkelLimb {
+ /* 0 */ FISH_LIMB_NONE,
+ /* 1 */ FISH_LIMB_0,
+ /* 2 */ FISH_LIMB_1,
+ /* 3 */ FISH_LIMB_2,
+ /* 4 */ FISH_LIMB_3,
+ /* 5 */ FISH_LIMB_4,
+ /* 6 */ FISH_LIMB_5,
+ /* 7 */ FISH_LIMB_MAX
+} FishSkelLimb;
+extern FlexSkeletonHeader gFishSkel;
+
+#endif
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x21810.c b/assets/objects/gameplay_keep/gameplay_keep_0x21810.c
new file mode 100644
index 0000000000..104dc63ce1
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x21810.c
@@ -0,0 +1,13 @@
+#include "gameplay_keep_0x21810.h"
+
+u64 gEffUnknown6Tex[TEX_LEN(u64, gEffUnknown6Tex_WIDTH, gEffUnknown6Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffUnknown6Tex.i8.inc.c"
+};
+
+u64 gEffFleckTex[TEX_LEN(u64, gEffFleckTex_WIDTH, gEffFleckTex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gEffFleckTex.i4.inc.c"
+};
+
+u64 gEffUnknown8Tex[TEX_LEN(u64, gEffUnknown8Tex_WIDTH, gEffUnknown8Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffUnknown8Tex.i8.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x21810.h b/assets/objects/gameplay_keep/gameplay_keep_0x21810.h
new file mode 100644
index 0000000000..f105776ebd
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x21810.h
@@ -0,0 +1,17 @@
+#ifndef GAMEPLAY_KEEP_0x21810_H
+#define GAMEPLAY_KEEP_0x21810_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gEffUnknown6Tex_WIDTH 32
+#define gEffUnknown6Tex_HEIGHT 64
+extern u64 gEffUnknown6Tex[TEX_LEN(u64, gEffUnknown6Tex_WIDTH, gEffUnknown6Tex_HEIGHT, 8)];
+#define gEffFleckTex_WIDTH 64
+#define gEffFleckTex_HEIGHT 64
+extern u64 gEffFleckTex[TEX_LEN(u64, gEffFleckTex_WIDTH, gEffFleckTex_HEIGHT, 4)];
+#define gEffUnknown8Tex_WIDTH 64
+#define gEffUnknown8Tex_HEIGHT 64
+extern u64 gEffUnknown8Tex[TEX_LEN(u64, gEffUnknown8Tex_WIDTH, gEffUnknown8Tex_HEIGHT, 8)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x32090.c b/assets/objects/gameplay_keep/gameplay_keep_0x32090.c
new file mode 100644
index 0000000000..532d5b3f22
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x32090.c
@@ -0,0 +1,17 @@
+#include "gameplay_keep_0x32090.h"
+
+u64 gEffUnknown9Tex[TEX_LEN(u64, gEffUnknown9Tex_WIDTH, gEffUnknown9Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffUnknown9Tex.i8.inc.c"
+};
+
+u64 gEffUnknown10Tex[TEX_LEN(u64, gEffUnknown10Tex_WIDTH, gEffUnknown10Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffUnknown10Tex.i8.inc.c"
+};
+
+u64 gEffUnknown11Tex[TEX_LEN(u64, gEffUnknown11Tex_WIDTH, gEffUnknown11Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffUnknown11Tex.i8.inc.c"
+};
+
+u64 gEffUnknown12Tex[TEX_LEN(u64, gEffUnknown12Tex_WIDTH, gEffUnknown12Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffUnknown12Tex.i8.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x32090.h b/assets/objects/gameplay_keep/gameplay_keep_0x32090.h
new file mode 100644
index 0000000000..d3b6472e8e
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x32090.h
@@ -0,0 +1,20 @@
+#ifndef GAMEPLAY_KEEP_0x32090_H
+#define GAMEPLAY_KEEP_0x32090_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gEffUnknown9Tex_WIDTH 32
+#define gEffUnknown9Tex_HEIGHT 32
+extern u64 gEffUnknown9Tex[TEX_LEN(u64, gEffUnknown9Tex_WIDTH, gEffUnknown9Tex_HEIGHT, 8)];
+#define gEffUnknown10Tex_WIDTH 32
+#define gEffUnknown10Tex_HEIGHT 32
+extern u64 gEffUnknown10Tex[TEX_LEN(u64, gEffUnknown10Tex_WIDTH, gEffUnknown10Tex_HEIGHT, 8)];
+#define gEffUnknown11Tex_WIDTH 32
+#define gEffUnknown11Tex_HEIGHT 32
+extern u64 gEffUnknown11Tex[TEX_LEN(u64, gEffUnknown11Tex_WIDTH, gEffUnknown11Tex_HEIGHT, 8)];
+#define gEffUnknown12Tex_WIDTH 32
+#define gEffUnknown12Tex_HEIGHT 32
+extern u64 gEffUnknown12Tex[TEX_LEN(u64, gEffUnknown12Tex_WIDTH, gEffUnknown12Tex_HEIGHT, 8)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x33090.c b/assets/objects/gameplay_keep/gameplay_keep_0x33090.c
new file mode 100644
index 0000000000..637fb4e8c7
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x33090.c
@@ -0,0 +1,5 @@
+#include "gameplay_keep_0x33090.h"
+
+u64 gUnknownWoodBoardTex[TEX_LEN(u64, gUnknownWoodBoardTex_WIDTH, gUnknownWoodBoardTex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gUnknownWoodBoardTex.i8.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x33090.h b/assets/objects/gameplay_keep/gameplay_keep_0x33090.h
new file mode 100644
index 0000000000..9057495b6d
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x33090.h
@@ -0,0 +1,11 @@
+#ifndef GAMEPLAY_KEEP_0x33090_H
+#define GAMEPLAY_KEEP_0x33090_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gUnknownWoodBoardTex_WIDTH 32
+#define gUnknownWoodBoardTex_HEIGHT 32
+extern u64 gUnknownWoodBoardTex[TEX_LEN(u64, gUnknownWoodBoardTex_WIDTH, gUnknownWoodBoardTex_HEIGHT, 8)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x33910.c b/assets/objects/gameplay_keep/gameplay_keep_0x33910.c
new file mode 100644
index 0000000000..6600ba78b1
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x33910.c
@@ -0,0 +1,11 @@
+#include "gameplay_keep_0x33910.h"
+#include "gameplay_keep_0x32090.h"
+#include "gfx.h"
+
+Vtx gEffIceFragment3Vtx[] = {
+#include "assets/objects/gameplay_keep/gEffIceFragment3Vtx.inc.c"
+};
+
+Gfx gEffIceFragment3DL[46] = {
+#include "assets/objects/gameplay_keep/gEffIceFragment3DL.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x33910.h b/assets/objects/gameplay_keep/gameplay_keep_0x33910.h
new file mode 100644
index 0000000000..f72f68ce8e
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x33910.h
@@ -0,0 +1,9 @@
+#ifndef GAMEPLAY_KEEP_0x33910_H
+#define GAMEPLAY_KEEP_0x33910_H
+
+#include "ultra64.h"
+
+extern Vtx gEffIceFragment3Vtx[];
+extern Gfx gEffIceFragment3DL[46];
+
+#endif
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x38FB0.c b/assets/objects/gameplay_keep/gameplay_keep_0x38FB0.c
new file mode 100644
index 0000000000..eaa26e0fa4
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x38FB0.c
@@ -0,0 +1,5 @@
+#include "gameplay_keep_0x38FB0.h"
+
+u64 gUnknownCircle6Tex[TEX_LEN(u64, gUnknownCircle6Tex_WIDTH, gUnknownCircle6Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gUnknownCircle6Tex.i8.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x38FB0.h b/assets/objects/gameplay_keep/gameplay_keep_0x38FB0.h
new file mode 100644
index 0000000000..4b5e741557
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x38FB0.h
@@ -0,0 +1,11 @@
+#ifndef GAMEPLAY_KEEP_0x38FB0_H
+#define GAMEPLAY_KEEP_0x38FB0_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gUnknownCircle6Tex_WIDTH 32
+#define gUnknownCircle6Tex_HEIGHT 32
+extern u64 gUnknownCircle6Tex[TEX_LEN(u64, gUnknownCircle6Tex_WIDTH, gUnknownCircle6Tex_HEIGHT, 8)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x39710.c b/assets/objects/gameplay_keep/gameplay_keep_0x39710.c
new file mode 100644
index 0000000000..d24bda1fe3
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x39710.c
@@ -0,0 +1,11 @@
+#include "gameplay_keep_0x39710.h"
+#include "gameplay_keep_0x42530.h"
+#include "gfx.h"
+
+Vtx gUnusedRockRectangularPrism1Vtx[] = {
+#include "assets/objects/gameplay_keep/gUnusedRockRectangularPrism1Vtx.inc.c"
+};
+
+Gfx gUnusedRockRectangularPrism1DL[22] = {
+#include "assets/objects/gameplay_keep/gUnusedRockRectangularPrism1DL.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x39710.h b/assets/objects/gameplay_keep/gameplay_keep_0x39710.h
new file mode 100644
index 0000000000..86d446b897
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x39710.h
@@ -0,0 +1,9 @@
+#ifndef GAMEPLAY_KEEP_0x39710_H
+#define GAMEPLAY_KEEP_0x39710_H
+
+#include "ultra64.h"
+
+extern Vtx gUnusedRockRectangularPrism1Vtx[];
+extern Gfx gUnusedRockRectangularPrism1DL[22];
+
+#endif
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x39DF0.c b/assets/objects/gameplay_keep/gameplay_keep_0x39DF0.c
new file mode 100644
index 0000000000..2feba37bf0
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x39DF0.c
@@ -0,0 +1,11 @@
+#include "gameplay_keep_0x39DF0.h"
+#include "gameplay_keep_0x42530.h"
+#include "gfx.h"
+
+Vtx gUnusedRockRectangularPrism3Vtx[] = {
+#include "assets/objects/gameplay_keep/gUnusedRockRectangularPrism3Vtx.inc.c"
+};
+
+Gfx gUnusedRockRectangularPrism3DL[22] = {
+#include "assets/objects/gameplay_keep/gUnusedRockRectangularPrism3DL.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x39DF0.h b/assets/objects/gameplay_keep/gameplay_keep_0x39DF0.h
new file mode 100644
index 0000000000..6838727fe6
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x39DF0.h
@@ -0,0 +1,9 @@
+#ifndef GAMEPLAY_KEEP_0x39DF0_H
+#define GAMEPLAY_KEEP_0x39DF0_H
+
+#include "ultra64.h"
+
+extern Vtx gUnusedRockRectangularPrism3Vtx[];
+extern Gfx gUnusedRockRectangularPrism3DL[22];
+
+#endif
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x3AC30.c b/assets/objects/gameplay_keep/gameplay_keep_0x3AC30.c
new file mode 100644
index 0000000000..9efe6e3c21
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x3AC30.c
@@ -0,0 +1,5 @@
+#include "gameplay_keep_0x3AC30.h"
+
+u64 gHeartShapeTex[TEX_LEN(u64, gHeartShapeTex_WIDTH, gHeartShapeTex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gHeartShapeTex.i8.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x3AC30.h b/assets/objects/gameplay_keep/gameplay_keep_0x3AC30.h
new file mode 100644
index 0000000000..e9311fb9cb
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x3AC30.h
@@ -0,0 +1,11 @@
+#ifndef GAMEPLAY_KEEP_0x3AC30_H
+#define GAMEPLAY_KEEP_0x3AC30_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gHeartShapeTex_WIDTH 16
+#define gHeartShapeTex_HEIGHT 16
+extern u64 gHeartShapeTex[TEX_LEN(u64, gHeartShapeTex_WIDTH, gHeartShapeTex_HEIGHT, 8)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x3B1E0.c b/assets/objects/gameplay_keep/gameplay_keep_0x3B1E0.c
new file mode 100644
index 0000000000..cba3fbd614
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x3B1E0.c
@@ -0,0 +1,21 @@
+#include "gameplay_keep_0x3B1E0.h"
+#include "rupee.h"
+#include "rupee_light_red_tex.h"
+#include "hilite_textures.h"
+#include "gfx.h"
+
+Vtx gHeartPieceExteriorVtx[] = {
+#include "assets/objects/gameplay_keep/gHeartPieceExteriorVtx.inc.c"
+};
+
+Vtx gHeartContainerInteriorVtx[] = {
+#include "assets/objects/gameplay_keep/gHeartContainerInteriorVtx.inc.c"
+};
+
+Gfx gHeartPieceExteriorDL[39] = {
+#include "assets/objects/gameplay_keep/gHeartPieceExteriorDL.inc.c"
+};
+
+Gfx gHeartContainerInteriorDL[33] = {
+#include "assets/objects/gameplay_keep/gHeartContainerInteriorDL.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x3B1E0.h b/assets/objects/gameplay_keep/gameplay_keep_0x3B1E0.h
new file mode 100644
index 0000000000..4ab9f3d1e1
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x3B1E0.h
@@ -0,0 +1,11 @@
+#ifndef GAMEPLAY_KEEP_0x3B1E0_H
+#define GAMEPLAY_KEEP_0x3B1E0_H
+
+#include "ultra64.h"
+
+extern Vtx gHeartPieceExteriorVtx[];
+extern Vtx gHeartContainerInteriorVtx[];
+extern Gfx gHeartPieceExteriorDL[39];
+extern Gfx gHeartContainerInteriorDL[33];
+
+#endif
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x3C870.c b/assets/objects/gameplay_keep/gameplay_keep_0x3C870.c
new file mode 100644
index 0000000000..b50544a93b
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x3C870.c
@@ -0,0 +1,17 @@
+#include "gameplay_keep_0x3C870.h"
+
+u64 gDropArrows2Tex[TEX_LEN(u64, gDropArrows2Tex_WIDTH, gDropArrows2Tex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gDropArrows2Tex.rgba16.inc.c"
+};
+
+u64 gDropArrows1Tex[TEX_LEN(u64, gDropArrows1Tex_WIDTH, gDropArrows1Tex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gDropArrows1Tex.rgba16.inc.c"
+};
+
+u64 gDropArrows3Tex[TEX_LEN(u64, gDropArrows3Tex_WIDTH, gDropArrows3Tex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gDropArrows3Tex.rgba16.inc.c"
+};
+
+u64 gDropBombTex[TEX_LEN(u64, gDropBombTex_WIDTH, gDropBombTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gDropBombTex.rgba16.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x3C870.h b/assets/objects/gameplay_keep/gameplay_keep_0x3C870.h
new file mode 100644
index 0000000000..0a8518db03
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x3C870.h
@@ -0,0 +1,20 @@
+#ifndef GAMEPLAY_KEEP_0x3C870_H
+#define GAMEPLAY_KEEP_0x3C870_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gDropArrows2Tex_WIDTH 32
+#define gDropArrows2Tex_HEIGHT 32
+extern u64 gDropArrows2Tex[TEX_LEN(u64, gDropArrows2Tex_WIDTH, gDropArrows2Tex_HEIGHT, 16)];
+#define gDropArrows1Tex_WIDTH 32
+#define gDropArrows1Tex_HEIGHT 32
+extern u64 gDropArrows1Tex[TEX_LEN(u64, gDropArrows1Tex_WIDTH, gDropArrows1Tex_HEIGHT, 16)];
+#define gDropArrows3Tex_WIDTH 32
+#define gDropArrows3Tex_HEIGHT 32
+extern u64 gDropArrows3Tex[TEX_LEN(u64, gDropArrows3Tex_WIDTH, gDropArrows3Tex_HEIGHT, 16)];
+#define gDropBombTex_WIDTH 32
+#define gDropBombTex_HEIGHT 32
+extern u64 gDropBombTex[TEX_LEN(u64, gDropBombTex_WIDTH, gDropBombTex_HEIGHT, 16)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x3F140.c b/assets/objects/gameplay_keep/gameplay_keep_0x3F140.c
new file mode 100644
index 0000000000..a0f8b9a363
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x3F140.c
@@ -0,0 +1,26 @@
+#include "gameplay_keep_0x3F140.h"
+#include "gfx.h"
+
+u64 gDropKeySmallTex[TEX_LEN(u64, gDropKeySmallTex_WIDTH, gDropKeySmallTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gDropKeySmallTex.rgba16.inc.c"
+};
+
+u64 gDropMagicSmallTex[TEX_LEN(u64, gDropMagicSmallTex_WIDTH, gDropMagicSmallTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gDropMagicSmallTex.rgba16.inc.c"
+};
+
+u64 gDropDekuNutTex[TEX_LEN(u64, gDropDekuNutTex_WIDTH, gDropDekuNutTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gDropDekuNutTex.rgba16.inc.c"
+};
+
+u64 gDropDekuSeedsTex[TEX_LEN(u64, gDropDekuSeedsTex_WIDTH, gDropDekuSeedsTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gDropDekuSeedsTex.rgba16.inc.c"
+};
+
+u64 gDropDekuStickTex[TEX_LEN(u64, gDropDekuStickTex_WIDTH, gDropDekuStickTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gDropDekuStickTex.rgba16.inc.c"
+};
+
+u64 gDropMagicLargeTex[TEX_LEN(u64, gDropMagicLargeTex_WIDTH, gDropMagicLargeTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gDropMagicLargeTex.rgba16.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x3F140.h b/assets/objects/gameplay_keep/gameplay_keep_0x3F140.h
new file mode 100644
index 0000000000..4c991fef37
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x3F140.h
@@ -0,0 +1,26 @@
+#ifndef GAMEPLAY_KEEP_0x3F140_H
+#define GAMEPLAY_KEEP_0x3F140_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gDropKeySmallTex_WIDTH 32
+#define gDropKeySmallTex_HEIGHT 32
+extern u64 gDropKeySmallTex[TEX_LEN(u64, gDropKeySmallTex_WIDTH, gDropKeySmallTex_HEIGHT, 16)];
+#define gDropMagicSmallTex_WIDTH 32
+#define gDropMagicSmallTex_HEIGHT 32
+extern u64 gDropMagicSmallTex[TEX_LEN(u64, gDropMagicSmallTex_WIDTH, gDropMagicSmallTex_HEIGHT, 16)];
+#define gDropDekuNutTex_WIDTH 32
+#define gDropDekuNutTex_HEIGHT 32
+extern u64 gDropDekuNutTex[TEX_LEN(u64, gDropDekuNutTex_WIDTH, gDropDekuNutTex_HEIGHT, 16)];
+#define gDropDekuSeedsTex_WIDTH 32
+#define gDropDekuSeedsTex_HEIGHT 32
+extern u64 gDropDekuSeedsTex[TEX_LEN(u64, gDropDekuSeedsTex_WIDTH, gDropDekuSeedsTex_HEIGHT, 16)];
+#define gDropDekuStickTex_WIDTH 32
+#define gDropDekuStickTex_HEIGHT 32
+extern u64 gDropDekuStickTex[TEX_LEN(u64, gDropDekuStickTex_WIDTH, gDropDekuStickTex_HEIGHT, 16)];
+#define gDropMagicLargeTex_WIDTH 32
+#define gDropMagicLargeTex_HEIGHT 32
+extern u64 gDropMagicLargeTex[TEX_LEN(u64, gDropMagicLargeTex_WIDTH, gDropMagicLargeTex_HEIGHT, 16)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x42530.c b/assets/objects/gameplay_keep/gameplay_keep_0x42530.c
new file mode 100644
index 0000000000..775c03fd9b
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x42530.c
@@ -0,0 +1,9 @@
+#include "gameplay_keep_0x42530.h"
+
+u64 gUnknownStone1Tex[TEX_LEN(u64, gUnknownStone1Tex_WIDTH, gUnknownStone1Tex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gUnknownStone1Tex.rgba16.inc.c"
+};
+
+u64 gUnknownStone2Tex[TEX_LEN(u64, gUnknownStone2Tex_WIDTH, gUnknownStone2Tex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gUnknownStone2Tex.rgba16.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x42530.h b/assets/objects/gameplay_keep/gameplay_keep_0x42530.h
new file mode 100644
index 0000000000..c5148c83f7
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x42530.h
@@ -0,0 +1,14 @@
+#ifndef GAMEPLAY_KEEP_0x42530_H
+#define GAMEPLAY_KEEP_0x42530_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gUnknownStone1Tex_WIDTH 32
+#define gUnknownStone1Tex_HEIGHT 32
+extern u64 gUnknownStone1Tex[TEX_LEN(u64, gUnknownStone1Tex_WIDTH, gUnknownStone1Tex_HEIGHT, 16)];
+#define gUnknownStone2Tex_WIDTH 32
+#define gUnknownStone2Tex_HEIGHT 32
+extern u64 gUnknownStone2Tex[TEX_LEN(u64, gUnknownStone2Tex_WIDTH, gUnknownStone2Tex_HEIGHT, 16)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x43530.c b/assets/objects/gameplay_keep/gameplay_keep_0x43530.c
new file mode 100644
index 0000000000..1dbdda90ce
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x43530.c
@@ -0,0 +1,9 @@
+#include "gameplay_keep_0x43530.h"
+
+u64 gUnusedTreeStumpTopTex[TEX_LEN(u64, gUnusedTreeStumpTopTex_WIDTH, gUnusedTreeStumpTopTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gUnusedTreeStumpTopTex.rgba16.inc.c"
+};
+
+u64 gUnusedTreeStumpBarkTex[TEX_LEN(u64, gUnusedTreeStumpBarkTex_WIDTH, gUnusedTreeStumpBarkTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gUnusedTreeStumpBarkTex.rgba16.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x43530.h b/assets/objects/gameplay_keep/gameplay_keep_0x43530.h
new file mode 100644
index 0000000000..7905c51c0b
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x43530.h
@@ -0,0 +1,14 @@
+#ifndef GAMEPLAY_KEEP_0x43530_H
+#define GAMEPLAY_KEEP_0x43530_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gUnusedTreeStumpTopTex_WIDTH 32
+#define gUnusedTreeStumpTopTex_HEIGHT 32
+extern u64 gUnusedTreeStumpTopTex[TEX_LEN(u64, gUnusedTreeStumpTopTex_WIDTH, gUnusedTreeStumpTopTex_HEIGHT, 16)];
+#define gUnusedTreeStumpBarkTex_WIDTH 32
+#define gUnusedTreeStumpBarkTex_HEIGHT 32
+extern u64 gUnusedTreeStumpBarkTex[TEX_LEN(u64, gUnusedTreeStumpBarkTex_WIDTH, gUnusedTreeStumpBarkTex_HEIGHT, 16)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x44530.c b/assets/objects/gameplay_keep/gameplay_keep_0x44530.c
new file mode 100644
index 0000000000..9fdc083942
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x44530.c
@@ -0,0 +1,5 @@
+#include "gameplay_keep_0x44530.h"
+
+u64 gUnusedGrassBladesTex[TEX_LEN(u64, gUnusedGrassBladesTex_WIDTH, gUnusedGrassBladesTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gUnusedGrassBladesTex.rgba16.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x44530.h b/assets/objects/gameplay_keep/gameplay_keep_0x44530.h
new file mode 100644
index 0000000000..71c276bd0a
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x44530.h
@@ -0,0 +1,11 @@
+#ifndef GAMEPLAY_KEEP_0x44530_H
+#define GAMEPLAY_KEEP_0x44530_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gUnusedGrassBladesTex_WIDTH 64
+#define gUnusedGrassBladesTex_HEIGHT 32
+extern u64 gUnusedGrassBladesTex[TEX_LEN(u64, gUnusedGrassBladesTex_WIDTH, gUnusedGrassBladesTex_HEIGHT, 16)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x45530.c b/assets/objects/gameplay_keep/gameplay_keep_0x45530.c
new file mode 100644
index 0000000000..e63b71579f
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x45530.c
@@ -0,0 +1,6 @@
+#include "gameplay_keep_0x45530.h"
+
+u64 gUnusedStoneHookshotTargetTex[TEX_LEN(u64, gUnusedStoneHookshotTargetTex_WIDTH,
+ gUnusedStoneHookshotTargetTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gUnusedStoneHookshotTargetTex.rgba16.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x45530.h b/assets/objects/gameplay_keep/gameplay_keep_0x45530.h
new file mode 100644
index 0000000000..9c5ecb6db5
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x45530.h
@@ -0,0 +1,11 @@
+#ifndef GAMEPLAY_KEEP_0x45530_H
+#define GAMEPLAY_KEEP_0x45530_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gUnusedStoneHookshotTargetTex_WIDTH 32
+#define gUnusedStoneHookshotTargetTex_HEIGHT 32
+extern u64 gUnusedStoneHookshotTargetTex[TEX_LEN(u64, gUnusedStoneHookshotTargetTex_WIDTH, gUnusedStoneHookshotTargetTex_HEIGHT, 16)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x45D30.c b/assets/objects/gameplay_keep/gameplay_keep_0x45D30.c
new file mode 100644
index 0000000000..201bbb7bab
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x45D30.c
@@ -0,0 +1,5 @@
+#include "gameplay_keep_0x45D30.h"
+
+u64 gUnknownStone3Tex[TEX_LEN(u64, gUnknownStone3Tex_WIDTH, gUnknownStone3Tex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gUnknownStone3Tex.rgba16.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x45D30.h b/assets/objects/gameplay_keep/gameplay_keep_0x45D30.h
new file mode 100644
index 0000000000..b5bd9d9a17
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x45D30.h
@@ -0,0 +1,11 @@
+#ifndef GAMEPLAY_KEEP_0x45D30_H
+#define GAMEPLAY_KEEP_0x45D30_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gUnknownStone3Tex_WIDTH 32
+#define gUnknownStone3Tex_HEIGHT 32
+extern u64 gUnknownStone3Tex[TEX_LEN(u64, gUnknownStone3Tex_WIDTH, gUnknownStone3Tex_HEIGHT, 16)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x49F20.c b/assets/objects/gameplay_keep/gameplay_keep_0x49F20.c
new file mode 100644
index 0000000000..0da1c074a1
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x49F20.c
@@ -0,0 +1,11 @@
+#include "gameplay_keep_0x49F20.h"
+#include "gameplay_keep_0x4A090.h"
+#include "gfx.h"
+
+Vtx gDungeonDoorVtx[] = {
+#include "assets/objects/gameplay_keep/gDungeonDoorVtx.inc.c"
+};
+
+Gfx gDungeonDoorDL[21] = {
+#include "assets/objects/gameplay_keep/gDungeonDoorDL.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x49F20.h b/assets/objects/gameplay_keep/gameplay_keep_0x49F20.h
new file mode 100644
index 0000000000..4cca482c7b
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x49F20.h
@@ -0,0 +1,9 @@
+#ifndef GAMEPLAY_KEEP_0x49F20_H
+#define GAMEPLAY_KEEP_0x49F20_H
+
+#include "ultra64.h"
+
+extern Vtx gDungeonDoorVtx[];
+extern Gfx gDungeonDoorDL[21];
+
+#endif
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x4A090.c b/assets/objects/gameplay_keep/gameplay_keep_0x4A090.c
new file mode 100644
index 0000000000..719f0d5054
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x4A090.c
@@ -0,0 +1,18 @@
+#include "gameplay_keep_0x4A090.h"
+#include "gfx.h"
+
+u64 gDoorMetalBarsTex[TEX_LEN(u64, gDoorMetalBarsTex_WIDTH, gDoorMetalBarsTex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gDoorMetalBarsTex.ia8.inc.c"
+};
+
+Vtx gDoorMetalBarsVtx[] = {
+#include "assets/objects/gameplay_keep/gDoorMetalBarsVtx.inc.c"
+};
+
+Gfx gDoorMetalBarsDL[18] = {
+#include "assets/objects/gameplay_keep/gDoorMetalBarsDL.inc.c"
+};
+
+u64 gGenericDungeonDoorTex[TEX_LEN(u64, gGenericDungeonDoorTex_WIDTH, gGenericDungeonDoorTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gGenericDungeonDoorTex.rgba16.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x4A090.h b/assets/objects/gameplay_keep/gameplay_keep_0x4A090.h
new file mode 100644
index 0000000000..532ccd4089
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x4A090.h
@@ -0,0 +1,16 @@
+#ifndef GAMEPLAY_KEEP_0x4A090_H
+#define GAMEPLAY_KEEP_0x4A090_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gDoorMetalBarsTex_WIDTH 32
+#define gDoorMetalBarsTex_HEIGHT 128
+extern u64 gDoorMetalBarsTex[TEX_LEN(u64, gDoorMetalBarsTex_WIDTH, gDoorMetalBarsTex_HEIGHT, 8)];
+extern Vtx gDoorMetalBarsVtx[];
+extern Gfx gDoorMetalBarsDL[18];
+#define gGenericDungeonDoorTex_WIDTH 32
+#define gGenericDungeonDoorTex_HEIGHT 64
+extern u64 gGenericDungeonDoorTex[TEX_LEN(u64, gGenericDungeonDoorTex_WIDTH, gGenericDungeonDoorTex_HEIGHT, 16)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x4D160.c b/assets/objects/gameplay_keep/gameplay_keep_0x4D160.c
new file mode 100644
index 0000000000..24daaeefe5
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x4D160.c
@@ -0,0 +1,24 @@
+#include "gameplay_keep_0x4D160.h"
+#include "sun_textures.h"
+#include "sun_evening_textures.h"
+#include "gfx.h"
+
+Gfx gKokiriDustMoteMaterialDL[9] = {
+#include "assets/objects/gameplay_keep/gKokiriDustMoteMaterialDL.inc.c"
+};
+
+Gfx gKokiriDustMoteModelDL[3] = {
+#include "assets/objects/gameplay_keep/gKokiriDustMoteModelDL.inc.c"
+};
+
+Gfx gSunDL[49] = {
+#include "assets/objects/gameplay_keep/gSunDL.inc.c"
+};
+
+Vtx gSunVtx[] = {
+#include "assets/objects/gameplay_keep/gSunVtx.inc.c"
+};
+
+Vtx gKokiriDustMoteModelVtx[] = {
+#include "assets/objects/gameplay_keep/gKokiriDustMoteModelVtx.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x4D160.h b/assets/objects/gameplay_keep/gameplay_keep_0x4D160.h
new file mode 100644
index 0000000000..9f5c5c52de
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x4D160.h
@@ -0,0 +1,12 @@
+#ifndef GAMEPLAY_KEEP_0x4D160_H
+#define GAMEPLAY_KEEP_0x4D160_H
+
+#include "ultra64.h"
+
+extern Gfx gKokiriDustMoteMaterialDL[9];
+extern Gfx gKokiriDustMoteModelDL[3];
+extern Gfx gSunDL[49];
+extern Vtx gSunVtx[];
+extern Vtx gKokiriDustMoteModelVtx[];
+
+#endif
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x4E660.c b/assets/objects/gameplay_keep/gameplay_keep_0x4E660.c
new file mode 100644
index 0000000000..e028802748
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x4E660.c
@@ -0,0 +1,38 @@
+#include "gameplay_keep_0x4E660.h"
+#include "gfx.h"
+
+Vtx gUnusedUnknownShape1Vtx[] = {
+#include "assets/objects/gameplay_keep/gUnusedUnknownShape1Vtx.inc.c"
+};
+
+Gfx gUnusedUnknownShape1DL[112] = {
+#include "assets/objects/gameplay_keep/gUnusedUnknownShape1DL.inc.c"
+};
+
+Gfx gUnusedUnknownShape1RefDL[2] = {
+#include "assets/objects/gameplay_keep/gUnusedUnknownShape1RefDL.inc.c"
+};
+
+Vtx gUnusedUnknownShape2Vtx[] = {
+#include "assets/objects/gameplay_keep/gUnusedUnknownShape2Vtx.inc.c"
+};
+
+Gfx gUnusedUnknownShape2DL[100] = {
+#include "assets/objects/gameplay_keep/gUnusedUnknownShape2DL.inc.c"
+};
+
+Gfx gUnusedUnknownShape2RefDL[2] = {
+#include "assets/objects/gameplay_keep/gUnusedUnknownShape2RefDL.inc.c"
+};
+
+Vtx gUnusedUnknownShape3Vtx[] = {
+#include "assets/objects/gameplay_keep/gUnusedUnknownShape3Vtx.inc.c"
+};
+
+Gfx gUnusedUnknownShape3DL[99] = {
+#include "assets/objects/gameplay_keep/gUnusedUnknownShape3DL.inc.c"
+};
+
+Gfx gUnusedUnknownShape3RefDL[2] = {
+#include "assets/objects/gameplay_keep/gUnusedUnknownShape3RefDL.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x4E660.h b/assets/objects/gameplay_keep/gameplay_keep_0x4E660.h
new file mode 100644
index 0000000000..d90bbf1c00
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x4E660.h
@@ -0,0 +1,16 @@
+#ifndef GAMEPLAY_KEEP_0x4E660_H
+#define GAMEPLAY_KEEP_0x4E660_H
+
+#include "ultra64.h"
+
+extern Vtx gUnusedUnknownShape1Vtx[];
+extern Gfx gUnusedUnknownShape1DL[112];
+extern Gfx gUnusedUnknownShape1RefDL[2];
+extern Vtx gUnusedUnknownShape2Vtx[];
+extern Gfx gUnusedUnknownShape2DL[100];
+extern Gfx gUnusedUnknownShape2RefDL[2];
+extern Vtx gUnusedUnknownShape3Vtx[];
+extern Gfx gUnusedUnknownShape3DL[99];
+extern Gfx gUnusedUnknownShape3RefDL[2];
+
+#endif
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x515B0.c b/assets/objects/gameplay_keep/gameplay_keep_0x515B0.c
new file mode 100644
index 0000000000..d441d4f625
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x515B0.c
@@ -0,0 +1,5 @@
+#include "gameplay_keep_0x515B0.h"
+
+u64 gUnusedUpsideDownZeldaTex[TEX_LEN(u64, gUnusedUpsideDownZeldaTex_WIDTH, gUnusedUpsideDownZeldaTex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gUnusedUpsideDownZeldaTex.i8.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x515B0.h b/assets/objects/gameplay_keep/gameplay_keep_0x515B0.h
new file mode 100644
index 0000000000..d98229fdb2
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x515B0.h
@@ -0,0 +1,11 @@
+#ifndef GAMEPLAY_KEEP_0x515B0_H
+#define GAMEPLAY_KEEP_0x515B0_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gUnusedUpsideDownZeldaTex_WIDTH 64
+#define gUnusedUpsideDownZeldaTex_HEIGHT 32
+extern u64 gUnusedUpsideDownZeldaTex[TEX_LEN(u64, gUnusedUpsideDownZeldaTex_WIDTH, gUnusedUpsideDownZeldaTex_HEIGHT, 8)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x55DB0.c b/assets/objects/gameplay_keep/gameplay_keep_0x55DB0.c
new file mode 100644
index 0000000000..c235d0902b
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x55DB0.c
@@ -0,0 +1,9 @@
+#include "gameplay_keep_0x55DB0.h"
+
+u64 gEffBubble1Tex[TEX_LEN(u64, gEffBubble1Tex_WIDTH, gEffBubble1Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffBubble1Tex.i8.inc.c"
+};
+
+u64 gEffBubble2Tex[TEX_LEN(u64, gEffBubble2Tex_WIDTH, gEffBubble2Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffBubble2Tex.i8.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gameplay_keep_0x55DB0.h b/assets/objects/gameplay_keep/gameplay_keep_0x55DB0.h
new file mode 100644
index 0000000000..5295437347
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_0x55DB0.h
@@ -0,0 +1,14 @@
+#ifndef GAMEPLAY_KEEP_0x55DB0_H
+#define GAMEPLAY_KEEP_0x55DB0_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gEffBubble1Tex_WIDTH 16
+#define gEffBubble1Tex_HEIGHT 16
+extern u64 gEffBubble1Tex[TEX_LEN(u64, gEffBubble1Tex_WIDTH, gEffBubble1Tex_HEIGHT, 8)];
+#define gEffBubble2Tex_WIDTH 16
+#define gEffBubble2Tex_HEIGHT 16
+extern u64 gEffBubble2Tex[TEX_LEN(u64, gEffBubble2Tex_WIDTH, gEffBubble2Tex_HEIGHT, 8)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/gameplay_keep_ntsc_0x39850.c b/assets/objects/gameplay_keep/gameplay_keep_ntsc_0x39850.c
new file mode 100644
index 0000000000..05beb5200d
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_ntsc_0x39850.c
@@ -0,0 +1,12 @@
+#include "gameplay_keep_ntsc_0x39850.h"
+#include "gameplay_keep_0x32090.h"
+#include "gameplay_keep_0x38FB0.h"
+#include "gfx.h"
+
+Vtx gameplay_keep_Vtx_039850[] = {
+#include "assets/objects/gameplay_keep/gameplay_keep_Vtx_039850.inc.c"
+};
+
+Gfx gGameplayKeepDL_39890[27] = {
+#include "assets/objects/gameplay_keep/gGameplayKeepDL_39890.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gameplay_keep_ntsc_0x39850.h b/assets/objects/gameplay_keep/gameplay_keep_ntsc_0x39850.h
new file mode 100644
index 0000000000..7afb06908a
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_ntsc_0x39850.h
@@ -0,0 +1,12 @@
+#ifndef GAMEPLAY_KEEP_NTSC_0x39850_H
+#define GAMEPLAY_KEEP_NTSC_0x39850_H
+
+#include "ultra64.h"
+#include "region.h"
+
+#if OOT_REGION != REGION_EU
+extern Vtx gameplay_keep_Vtx_039850[];
+extern Gfx gGameplayKeepDL_39890[27];
+#endif
+
+#endif
diff --git a/assets/objects/gameplay_keep/gameplay_keep_ntsc_0x3C610.c b/assets/objects/gameplay_keep/gameplay_keep_ntsc_0x3C610.c
new file mode 100644
index 0000000000..e15374a1cc
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_ntsc_0x3C610.c
@@ -0,0 +1,20 @@
+#include "gameplay_keep_ntsc_0x3C610.h"
+#include "gameplay_keep_ntsc_0x46A40.h"
+#include "hilite_textures.h"
+#include "gfx.h"
+
+Vtx gameplay_keep_Vtx_03C610[] = {
+#include "assets/objects/gameplay_keep/gameplay_keep_Vtx_03C610.inc.c"
+};
+
+Vtx gameplay_keep_Vtx_03CB10[] = {
+#include "assets/objects/gameplay_keep/gameplay_keep_Vtx_03CB10.inc.c"
+};
+
+Gfx gGameplayKeepDL_3CFD0[39] = {
+#include "assets/objects/gameplay_keep/gGameplayKeepDL_3CFD0.inc.c"
+};
+
+Gfx gGameplayKeepDL_3D108[34] = {
+#include "assets/objects/gameplay_keep/gGameplayKeepDL_3D108.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gameplay_keep_ntsc_0x3C610.h b/assets/objects/gameplay_keep/gameplay_keep_ntsc_0x3C610.h
new file mode 100644
index 0000000000..51465e8b1c
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_ntsc_0x3C610.h
@@ -0,0 +1,14 @@
+#ifndef GAMEPLAY_KEEP_NTSC_0x3C610_H
+#define GAMEPLAY_KEEP_NTSC_0x3C610_H
+
+#include "ultra64.h"
+#include "region.h"
+
+#if OOT_REGION != REGION_EU
+extern Vtx gameplay_keep_Vtx_03C610[];
+extern Vtx gameplay_keep_Vtx_03CB10[];
+extern Gfx gGameplayKeepDL_3CFD0[39];
+extern Gfx gGameplayKeepDL_3D108[34];
+#endif
+
+#endif
diff --git a/assets/objects/gameplay_keep/gameplay_keep_ntsc_0x3FD80.c b/assets/objects/gameplay_keep/gameplay_keep_ntsc_0x3FD80.c
new file mode 100644
index 0000000000..0d5a5aad53
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_ntsc_0x3FD80.c
@@ -0,0 +1,9 @@
+#include "gameplay_keep_ntsc_0x3FD80.h"
+
+u64 gUnusedBombchuIconTex[TEX_LEN(u64, gUnusedBombchuIconTex_WIDTH, gUnusedBombchuIconTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gUnusedBombchuIconTex.rgba16.inc.c"
+};
+
+u64 gGameplayKeepTex_40580[TEX_LEN(u64, gGameplayKeepTex_40580_WIDTH, gGameplayKeepTex_40580_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gGameplayKeepTex_40580.rgba16.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gameplay_keep_ntsc_0x3FD80.h b/assets/objects/gameplay_keep/gameplay_keep_ntsc_0x3FD80.h
new file mode 100644
index 0000000000..d9cadcb861
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_ntsc_0x3FD80.h
@@ -0,0 +1,17 @@
+#ifndef GAMEPLAY_KEEP_NTSC_0x3FD80_H
+#define GAMEPLAY_KEEP_NTSC_0x3FD80_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+#include "region.h"
+
+#if OOT_REGION != REGION_EU
+#define gUnusedBombchuIconTex_WIDTH 32
+#define gUnusedBombchuIconTex_HEIGHT 32
+extern u64 gUnusedBombchuIconTex[TEX_LEN(u64, gUnusedBombchuIconTex_WIDTH, gUnusedBombchuIconTex_HEIGHT, 16)];
+#define gGameplayKeepTex_40580_WIDTH 32
+#define gGameplayKeepTex_40580_HEIGHT 32
+extern u64 gGameplayKeepTex_40580[TEX_LEN(u64, gGameplayKeepTex_40580_WIDTH, gGameplayKeepTex_40580_HEIGHT, 16)];
+#endif
+
+#endif
diff --git a/assets/objects/gameplay_keep/gameplay_keep_ntsc_0x46A40.c b/assets/objects/gameplay_keep/gameplay_keep_ntsc_0x46A40.c
new file mode 100644
index 0000000000..815a904ff5
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_ntsc_0x46A40.c
@@ -0,0 +1,14 @@
+#include "gameplay_keep_ntsc_0x46A40.h"
+
+u64 gGameplayKeepTex_46A40[TEX_LEN(u64, gGameplayKeepTex_46A40_WIDTH, gGameplayKeepTex_46A40_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gGameplayKeepTex_46A40.rgba16.inc.c"
+};
+
+u64 gUnusedHeartContainerIconTex[TEX_LEN(u64, gUnusedHeartContainerIconTex_WIDTH, gUnusedHeartContainerIconTex_HEIGHT,
+ 16)] = {
+#include "assets/objects/gameplay_keep/gUnusedHeartContainerIconTex.rgba16.inc.c"
+};
+
+u64 gUnusedTreeBarkTex[TEX_LEN(u64, gUnusedTreeBarkTex_WIDTH, gUnusedTreeBarkTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gUnusedTreeBarkTex.rgba16.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gameplay_keep_ntsc_0x46A40.h b/assets/objects/gameplay_keep/gameplay_keep_ntsc_0x46A40.h
new file mode 100644
index 0000000000..7b8e2d5c1e
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_ntsc_0x46A40.h
@@ -0,0 +1,17 @@
+#ifndef GAMEPLAY_KEEP_NTSC_0x46A40
+#define GAMEPLAY_KEEP_NTSC_0x46A40
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gGameplayKeepTex_46A40_WIDTH 4
+#define gGameplayKeepTex_46A40_HEIGHT 4
+extern u64 gGameplayKeepTex_46A40[TEX_LEN(u64, gGameplayKeepTex_46A40_WIDTH, gGameplayKeepTex_46A40_HEIGHT, 16)];
+#define gUnusedHeartContainerIconTex_WIDTH 32
+#define gUnusedHeartContainerIconTex_HEIGHT 32
+extern u64 gUnusedHeartContainerIconTex[TEX_LEN(u64, gUnusedHeartContainerIconTex_WIDTH, gUnusedHeartContainerIconTex_HEIGHT, 16)];
+#define gUnusedTreeBarkTex_WIDTH 32
+#define gUnusedTreeBarkTex_HEIGHT 32
+extern u64 gUnusedTreeBarkTex[TEX_LEN(u64, gUnusedTreeBarkTex_WIDTH, gUnusedTreeBarkTex_HEIGHT, 16)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/gameplay_keep_ntsc_0xC880.c b/assets/objects/gameplay_keep/gameplay_keep_ntsc_0xC880.c
new file mode 100644
index 0000000000..5c716135bf
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_ntsc_0xC880.c
@@ -0,0 +1,12 @@
+#include "gameplay_keep_ntsc_0xC880.h"
+#include "gameplay_keep_ntsc_0xCE60.h"
+#include "gfx.h"
+#include "region.h"
+
+Vtx gameplay_keep_Vtx_00C880[] = {
+#include "assets/objects/gameplay_keep/gameplay_keep_Vtx_00C880.inc.c"
+};
+
+Gfx gGameplayKeepDL_C8B0[14] = {
+#include "assets/objects/gameplay_keep/gGameplayKeepDL_C8B0.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gameplay_keep_ntsc_0xC880.h b/assets/objects/gameplay_keep/gameplay_keep_ntsc_0xC880.h
new file mode 100644
index 0000000000..1d265d2953
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_ntsc_0xC880.h
@@ -0,0 +1,12 @@
+#ifndef GAMEPLAY_KEEP_NTSC_0xC880
+#define GAMEPLAY_KEEP_NTSC_0xC880
+
+#include "ultra64.h"
+#include "region.h"
+
+#if OOT_REGION != REGION_EU
+extern Vtx gameplay_keep_Vtx_00C880[];
+extern Gfx gGameplayKeepDL_C8B0[14];
+#endif
+
+#endif
diff --git a/assets/objects/gameplay_keep/gameplay_keep_ntsc_0xCE60.c b/assets/objects/gameplay_keep/gameplay_keep_ntsc_0xCE60.c
new file mode 100644
index 0000000000..6b67fe0dba
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_ntsc_0xCE60.c
@@ -0,0 +1,5 @@
+#include "gameplay_keep_ntsc_0xCE60.h"
+
+u64 gGameplayKeepTex_CE60[TEX_LEN(u64, gGameplayKeepTex_CE60_WIDTH, gGameplayKeepTex_CE60_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gGameplayKeepTex_CE60.ia8.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/gameplay_keep_ntsc_0xCE60.h b/assets/objects/gameplay_keep/gameplay_keep_ntsc_0xCE60.h
new file mode 100644
index 0000000000..a1b1f276d4
--- /dev/null
+++ b/assets/objects/gameplay_keep/gameplay_keep_ntsc_0xCE60.h
@@ -0,0 +1,14 @@
+#ifndef GAMEPLAY_KEEP_NTSC_0xCE60
+#define GAMEPLAY_KEEP_NTSC_0xCE60
+
+#include "tex_len.h"
+#include "ultra64.h"
+#include "region.h"
+
+#if OOT_REGION != REGION_EU
+#define gGameplayKeepTex_CE60_WIDTH 32
+#define gGameplayKeepTex_CE60_HEIGHT 32
+extern u64 gGameplayKeepTex_CE60[TEX_LEN(u64, gGameplayKeepTex_CE60_WIDTH, gGameplayKeepTex_CE60_HEIGHT, 8)];
+#endif
+
+#endif
diff --git a/assets/objects/gameplay_keep/grass_blades_model.c b/assets/objects/gameplay_keep/grass_blades_model.c
new file mode 100644
index 0000000000..1109349caa
--- /dev/null
+++ b/assets/objects/gameplay_keep/grass_blades_model.c
@@ -0,0 +1,11 @@
+#include "grass_blades_model.h"
+#include "gameplay_keep_0x44530.h"
+#include "gfx.h"
+
+Vtx gGrassBladesVtx[] = {
+#include "assets/objects/gameplay_keep/gGrassBladesVtx.inc.c"
+};
+
+Gfx gGrassBladesDL[21] = {
+#include "assets/objects/gameplay_keep/gGrassBladesDL.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/grass_blades_model.h b/assets/objects/gameplay_keep/grass_blades_model.h
new file mode 100644
index 0000000000..5f3e48d26f
--- /dev/null
+++ b/assets/objects/gameplay_keep/grass_blades_model.h
@@ -0,0 +1,9 @@
+#ifndef GAMEPLAY_KEEP_GRASS_BLADES_MODEL_H
+#define GAMEPLAY_KEEP_GRASS_BLADES_MODEL_H
+
+#include "ultra64.h"
+
+extern Vtx gGrassBladesVtx[];
+extern Gfx gGrassBladesDL[21];
+
+#endif
diff --git a/assets/objects/gameplay_keep/heart_piece_interior_model.c b/assets/objects/gameplay_keep/heart_piece_interior_model.c
new file mode 100644
index 0000000000..6ecaa3145b
--- /dev/null
+++ b/assets/objects/gameplay_keep/heart_piece_interior_model.c
@@ -0,0 +1,12 @@
+#include "heart_piece_interior_model.h"
+#include "gameplay_keep_0x3AC30.h"
+#include "gameplay_keep_0x32090.h"
+#include "gfx.h"
+
+Vtx gHeartPieceInteriorVtx[] = {
+#include "assets/objects/gameplay_keep/gHeartPieceInteriorVtx.inc.c"
+};
+
+Gfx gHeartPieceInteriorDL[53] = {
+#include "assets/objects/gameplay_keep/gHeartPieceInteriorDL.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/heart_piece_interior_model.h b/assets/objects/gameplay_keep/heart_piece_interior_model.h
new file mode 100644
index 0000000000..30f8ca44b4
--- /dev/null
+++ b/assets/objects/gameplay_keep/heart_piece_interior_model.h
@@ -0,0 +1,9 @@
+#ifndef GAMEPLAY_KEEP_HEART_PIECE_INTERIOR_MODEL_H
+#define GAMEPLAY_KEEP_HEART_PIECE_INTERIOR_MODEL_H
+
+#include "ultra64.h"
+
+extern Vtx gHeartPieceInteriorVtx[];
+extern Gfx gHeartPieceInteriorDL[53];
+
+#endif
diff --git a/assets/objects/gameplay_keep/hilite3_tex.c b/assets/objects/gameplay_keep/hilite3_tex.c
new file mode 100644
index 0000000000..d2b5e6ec43
--- /dev/null
+++ b/assets/objects/gameplay_keep/hilite3_tex.c
@@ -0,0 +1,6 @@
+#include "hilite3_tex.h"
+#include "gfx.h"
+
+u64 gHilite3Tex[TEX_LEN(u64, gHilite3Tex_WIDTH, gHilite3Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gHilite3Tex.i8.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/hilite3_tex.h b/assets/objects/gameplay_keep/hilite3_tex.h
new file mode 100644
index 0000000000..959892dde4
--- /dev/null
+++ b/assets/objects/gameplay_keep/hilite3_tex.h
@@ -0,0 +1,11 @@
+#ifndef GAMEPLAY_KEEP_HILITE3_TEX_H
+#define GAMEPLAY_KEEP_HILITE3_TEX_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gHilite3Tex_WIDTH 8
+#define gHilite3Tex_HEIGHT 8
+extern u64 gHilite3Tex[TEX_LEN(u64, gHilite3Tex_WIDTH, gHilite3Tex_HEIGHT, 8)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/hilite4_tex.c b/assets/objects/gameplay_keep/hilite4_tex.c
new file mode 100644
index 0000000000..499a2b5b98
--- /dev/null
+++ b/assets/objects/gameplay_keep/hilite4_tex.c
@@ -0,0 +1,5 @@
+#include "hilite4_tex.h"
+
+u64 gHilite4Tex[TEX_LEN(u64, gHilite4Tex_WIDTH, gHilite4Tex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gHilite4Tex.rgba16.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/hilite4_tex.h b/assets/objects/gameplay_keep/hilite4_tex.h
new file mode 100644
index 0000000000..5725ada2cb
--- /dev/null
+++ b/assets/objects/gameplay_keep/hilite4_tex.h
@@ -0,0 +1,11 @@
+#ifndef GAMEPLAY_KEEP_HILITE4_TEX_H
+#define GAMEPLAY_KEEP_HILITE4_TEX_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gHilite4Tex_WIDTH 32
+#define gHilite4Tex_HEIGHT 32
+extern u64 gHilite4Tex[TEX_LEN(u64, gHilite4Tex_WIDTH, gHilite4Tex_HEIGHT, 16)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/hilite_textures.c b/assets/objects/gameplay_keep/hilite_textures.c
new file mode 100644
index 0000000000..1d047357e1
--- /dev/null
+++ b/assets/objects/gameplay_keep/hilite_textures.c
@@ -0,0 +1,9 @@
+#include "hilite_textures.h"
+
+u64 gHilite1Tex[TEX_LEN(u64, gHilite1Tex_WIDTH, gHilite1Tex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gHilite1Tex.rgba16.inc.c"
+};
+
+u64 gHilite2Tex[TEX_LEN(u64, gHilite2Tex_WIDTH, gHilite2Tex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gHilite2Tex.rgba16.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/hilite_textures.h b/assets/objects/gameplay_keep/hilite_textures.h
new file mode 100644
index 0000000000..d3f070cd7d
--- /dev/null
+++ b/assets/objects/gameplay_keep/hilite_textures.h
@@ -0,0 +1,14 @@
+#ifndef GAMEPLAY_KEEP_HILITE_TEXTURES_H
+#define GAMEPLAY_KEEP_HILITE_TEXTURES_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gHilite1Tex_WIDTH 16
+#define gHilite1Tex_HEIGHT 16
+extern u64 gHilite1Tex[TEX_LEN(u64, gHilite1Tex_WIDTH, gHilite1Tex_HEIGHT, 16)];
+#define gHilite2Tex_WIDTH 16
+#define gHilite2Tex_HEIGHT 16
+extern u64 gHilite2Tex[TEX_LEN(u64, gHilite2Tex_WIDTH, gHilite2Tex_HEIGHT, 16)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/hover_boots_circle.c b/assets/objects/gameplay_keep/hover_boots_circle.c
new file mode 100644
index 0000000000..37f68fd298
--- /dev/null
+++ b/assets/objects/gameplay_keep/hover_boots_circle.c
@@ -0,0 +1,18 @@
+#include "hover_boots_circle.h"
+#include "gfx.h"
+
+u64 gEffUnknown13Tex[TEX_LEN(u64, gEffUnknown13Tex_WIDTH, gEffUnknown13Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffUnknown13Tex.i8.inc.c"
+};
+
+u64 gEffUnknown14Tex[TEX_LEN(u64, gEffUnknown14Tex_WIDTH, gEffUnknown14Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffUnknown14Tex.i8.inc.c"
+};
+
+Vtx gHoverBootsCircleVtx[] = {
+#include "assets/objects/gameplay_keep/gHoverBootsCircleVtx.inc.c"
+};
+
+Gfx gHoverBootsCircleDL[26] = {
+#include "assets/objects/gameplay_keep/gHoverBootsCircleDL.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/hover_boots_circle.h b/assets/objects/gameplay_keep/hover_boots_circle.h
new file mode 100644
index 0000000000..16db4a2ac6
--- /dev/null
+++ b/assets/objects/gameplay_keep/hover_boots_circle.h
@@ -0,0 +1,16 @@
+#ifndef GAMEPLAY_KEEP_HOVER_BOOTS_CIRCLE_H
+#define GAMEPLAY_KEEP_HOVER_BOOTS_CIRCLE_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gEffUnknown13Tex_WIDTH 16
+#define gEffUnknown13Tex_HEIGHT 32
+extern u64 gEffUnknown13Tex[TEX_LEN(u64, gEffUnknown13Tex_WIDTH, gEffUnknown13Tex_HEIGHT, 8)];
+#define gEffUnknown14Tex_WIDTH 16
+#define gEffUnknown14Tex_HEIGHT 32
+extern u64 gEffUnknown14Tex[TEX_LEN(u64, gEffUnknown14Tex_WIDTH, gEffUnknown14Tex_HEIGHT, 8)];
+extern Vtx gHoverBootsCircleVtx[];
+extern Gfx gHoverBootsCircleDL[26];
+
+#endif
diff --git a/assets/objects/gameplay_keep/item_drop_dl.c b/assets/objects/gameplay_keep/item_drop_dl.c
new file mode 100644
index 0000000000..88808e66f1
--- /dev/null
+++ b/assets/objects/gameplay_keep/item_drop_dl.c
@@ -0,0 +1,11 @@
+#include "item_drop_dl.h"
+#include "gfx.h"
+#include "region.h"
+
+Gfx gItemDropDL[17] = {
+#include "assets/objects/gameplay_keep/gItemDropDL.inc.c"
+};
+
+Vtx gItemDropVtx[] = {
+#include "assets/objects/gameplay_keep/gItemDropVtx.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/item_drop_dl.h b/assets/objects/gameplay_keep/item_drop_dl.h
new file mode 100644
index 0000000000..6caaa6863b
--- /dev/null
+++ b/assets/objects/gameplay_keep/item_drop_dl.h
@@ -0,0 +1,9 @@
+#ifndef GAMEPLAY_KEEP_ITEM_DROP_DL_H
+#define GAMEPLAY_KEEP_ITEM_DROP_DL_H
+
+#include "ultra64.h"
+
+extern Gfx gItemDropDL[17];
+extern Vtx gItemDropVtx[];
+
+#endif
diff --git a/assets/objects/gameplay_keep/item_drops_ntsc.c b/assets/objects/gameplay_keep/item_drops_ntsc.c
new file mode 100644
index 0000000000..ad409fd0c6
--- /dev/null
+++ b/assets/objects/gameplay_keep/item_drops_ntsc.c
@@ -0,0 +1,13 @@
+#include "item_drops_ntsc.h"
+
+u64 gUnusedHeartIconTex[TEX_LEN(u64, gUnusedHeartIconTex_WIDTH, gUnusedHeartIconTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gUnusedHeartIconTex.rgba16.inc.c"
+};
+
+u64 gUnusedBombIconTex[TEX_LEN(u64, gUnusedBombIconTex_WIDTH, gUnusedBombIconTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gUnusedBombIconTex.rgba16.inc.c"
+};
+
+u64 gUnusedArrowIconTex[TEX_LEN(u64, gUnusedArrowIconTex_WIDTH, gUnusedArrowIconTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gUnusedArrowIconTex.rgba16.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/item_drops_ntsc.h b/assets/objects/gameplay_keep/item_drops_ntsc.h
new file mode 100644
index 0000000000..15e90e0809
--- /dev/null
+++ b/assets/objects/gameplay_keep/item_drops_ntsc.h
@@ -0,0 +1,20 @@
+#ifndef GAMEPLAY_KEEP_ITEM_DROPS_NTSC_H
+#define GAMEPLAY_KEEP_ITEM_DROPS_NTSC_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+#include "region.h"
+
+#if OOT_REGION != REGION_EU
+#define gUnusedHeartIconTex_WIDTH 32
+#define gUnusedHeartIconTex_HEIGHT 32
+extern u64 gUnusedHeartIconTex[TEX_LEN(u64, gUnusedHeartIconTex_WIDTH, gUnusedHeartIconTex_HEIGHT, 16)];
+#define gUnusedBombIconTex_WIDTH 32
+#define gUnusedBombIconTex_HEIGHT 32
+extern u64 gUnusedBombIconTex[TEX_LEN(u64, gUnusedBombIconTex_WIDTH, gUnusedBombIconTex_HEIGHT, 16)];
+#define gUnusedArrowIconTex_WIDTH 32
+#define gUnusedArrowIconTex_HEIGHT 32
+extern u64 gUnusedArrowIconTex[TEX_LEN(u64, gUnusedArrowIconTex_WIDTH, gUnusedArrowIconTex_HEIGHT, 16)];
+#endif
+
+#endif
diff --git a/assets/objects/gameplay_keep/lens_flare.c b/assets/objects/gameplay_keep/lens_flare.c
new file mode 100644
index 0000000000..dce719ed30
--- /dev/null
+++ b/assets/objects/gameplay_keep/lens_flare.c
@@ -0,0 +1,22 @@
+#include "lens_flare.h"
+#include "gfx.h"
+
+u64 gLensFlareCircleTex[TEX_LEN(u64, gLensFlareCircleTex_WIDTH, gLensFlareCircleTex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gLensFlareCircleTex.i4.inc.c"
+};
+
+u64 gLensFlareRingTex[TEX_LEN(u64, gLensFlareRingTex_WIDTH, gLensFlareRingTex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gLensFlareRingTex.i4.inc.c"
+};
+
+Gfx gLensFlareCircleDL[13] = {
+#include "assets/objects/gameplay_keep/gLensFlareCircleDL.inc.c"
+};
+
+Gfx gLensFlareRingDL[13] = {
+#include "assets/objects/gameplay_keep/gLensFlareRingDL.inc.c"
+};
+
+Vtx gLensFlareVtx[] = {
+#include "assets/objects/gameplay_keep/gLensFlareVtx.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/lens_flare.h b/assets/objects/gameplay_keep/lens_flare.h
new file mode 100644
index 0000000000..7c1fb6bab9
--- /dev/null
+++ b/assets/objects/gameplay_keep/lens_flare.h
@@ -0,0 +1,17 @@
+#ifndef GAMEPLAY_KEEP_LENS_FLARE_H
+#define GAMEPLAY_KEEP_LENS_FLARE_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gLensFlareCircleTex_WIDTH 64
+#define gLensFlareCircleTex_HEIGHT 64
+extern u64 gLensFlareCircleTex[TEX_LEN(u64, gLensFlareCircleTex_WIDTH, gLensFlareCircleTex_HEIGHT, 4)];
+#define gLensFlareRingTex_WIDTH 64
+#define gLensFlareRingTex_HEIGHT 64
+extern u64 gLensFlareRingTex[TEX_LEN(u64, gLensFlareRingTex_WIDTH, gLensFlareRingTex_HEIGHT, 4)];
+extern Gfx gLensFlareCircleDL[13];
+extern Gfx gLensFlareRingDL[13];
+extern Vtx gLensFlareVtx[];
+
+#endif
diff --git a/assets/objects/gameplay_keep/lens_mask_tex.c b/assets/objects/gameplay_keep/lens_mask_tex.c
new file mode 100644
index 0000000000..a59ddbbdbc
--- /dev/null
+++ b/assets/objects/gameplay_keep/lens_mask_tex.c
@@ -0,0 +1,5 @@
+#include "lens_mask_tex.h"
+
+u64 gLensOfTruthMaskTex[TEX_LEN(u64, gLensOfTruthMaskTex_WIDTH, gLensOfTruthMaskTex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gLensOfTruthMaskTex.i8.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/lens_mask_tex.h b/assets/objects/gameplay_keep/lens_mask_tex.h
new file mode 100644
index 0000000000..18a48d4b20
--- /dev/null
+++ b/assets/objects/gameplay_keep/lens_mask_tex.h
@@ -0,0 +1,11 @@
+#ifndef GAMEPLAY_KEEP_LENS_MASK_TEX_H
+#define GAMEPLAY_KEEP_LENS_MASK_TEX_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gLensOfTruthMaskTex_WIDTH 64
+#define gLensOfTruthMaskTex_HEIGHT 64
+extern u64 gLensOfTruthMaskTex[TEX_LEN(u64, gLensOfTruthMaskTex_WIDTH, gLensOfTruthMaskTex_HEIGHT, 8)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/liftable_rock_model.c b/assets/objects/gameplay_keep/liftable_rock_model.c
new file mode 100644
index 0000000000..d48dda9552
--- /dev/null
+++ b/assets/objects/gameplay_keep/liftable_rock_model.c
@@ -0,0 +1,11 @@
+#include "liftable_rock_model.h"
+#include "gameplay_keep_0x42530.h"
+#include "gfx.h"
+
+Vtx gLiftableRockVtx[] = {
+#include "assets/objects/gameplay_keep/gLiftableRockVtx.inc.c"
+};
+
+Gfx gLiftableRockDL[22] = {
+#include "assets/objects/gameplay_keep/gLiftableRockDL.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/liftable_rock_model.h b/assets/objects/gameplay_keep/liftable_rock_model.h
new file mode 100644
index 0000000000..3d7499a55a
--- /dev/null
+++ b/assets/objects/gameplay_keep/liftable_rock_model.h
@@ -0,0 +1,9 @@
+#ifndef GAMEPLAY_KEEP_LIFTABLE_ROCK_MODEL_H
+#define GAMEPLAY_KEEP_LIFTABLE_ROCK_MODEL_H
+
+#include "ultra64.h"
+
+extern Vtx gLiftableRockVtx[];
+extern Gfx gLiftableRockDL[22];
+
+#endif
diff --git a/assets/objects/gameplay_keep/link_textures.c b/assets/objects/gameplay_keep/link_textures.c
new file mode 100644
index 0000000000..3564006310
--- /dev/null
+++ b/assets/objects/gameplay_keep/link_textures.c
@@ -0,0 +1,33 @@
+#include "link_textures.h"
+
+u64 gHylianShieldDesignTex[TEX_LEN(u64, gHylianShieldDesignTex_WIDTH, gHylianShieldDesignTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gHylianShieldDesignTex.rgba16.inc.c"
+};
+
+u64 gOcarinaofTimeDesignTex[TEX_LEN(u64, gOcarinaofTimeDesignTex_WIDTH, gOcarinaofTimeDesignTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gOcarinaofTimeDesignTex.rgba16.inc.c"
+};
+
+u64 gBottleGlassTex[TEX_LEN(u64, gBottleGlassTex_WIDTH, gBottleGlassTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gBottleGlassTex.rgba16.inc.c"
+};
+
+u64 gDekuStickTex[TEX_LEN(u64, gDekuStickTex_WIDTH, gDekuStickTex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gDekuStickTex.i8.inc.c"
+};
+
+u64 gLinkHairTex[TEX_LEN(u64, gLinkHairTex_WIDTH, gLinkHairTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gLinkHairTex.rgba16.inc.c"
+};
+
+u64 gLinkTunic1Tex[TEX_LEN(u64, gLinkTunic1Tex_WIDTH, gLinkTunic1Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gLinkTunic1Tex.i8.inc.c"
+};
+
+u64 gLinkTunic2Tex[TEX_LEN(u64, gLinkTunic2Tex_WIDTH, gLinkTunic2Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gLinkTunic2Tex.i8.inc.c"
+};
+
+u64 gLinkTunic3Tex[TEX_LEN(u64, gLinkTunic3Tex_WIDTH, gLinkTunic3Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gLinkTunic3Tex.i8.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/link_textures.h b/assets/objects/gameplay_keep/link_textures.h
new file mode 100644
index 0000000000..1b69ed135c
--- /dev/null
+++ b/assets/objects/gameplay_keep/link_textures.h
@@ -0,0 +1,32 @@
+#ifndef GAMEPLAY_KEEP_LINK_TEXTURES_H
+#define GAMEPLAY_KEEP_LINK_TEXTURES_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gHylianShieldDesignTex_WIDTH 32
+#define gHylianShieldDesignTex_HEIGHT 64
+extern u64 gHylianShieldDesignTex[TEX_LEN(u64, gHylianShieldDesignTex_WIDTH, gHylianShieldDesignTex_HEIGHT, 16)];
+#define gOcarinaofTimeDesignTex_WIDTH 32
+#define gOcarinaofTimeDesignTex_HEIGHT 16
+extern u64 gOcarinaofTimeDesignTex[TEX_LEN(u64, gOcarinaofTimeDesignTex_WIDTH, gOcarinaofTimeDesignTex_HEIGHT, 16)];
+#define gBottleGlassTex_WIDTH 16
+#define gBottleGlassTex_HEIGHT 16
+extern u64 gBottleGlassTex[TEX_LEN(u64, gBottleGlassTex_WIDTH, gBottleGlassTex_HEIGHT, 16)];
+#define gDekuStickTex_WIDTH 8
+#define gDekuStickTex_HEIGHT 8
+extern u64 gDekuStickTex[TEX_LEN(u64, gDekuStickTex_WIDTH, gDekuStickTex_HEIGHT, 8)];
+#define gLinkHairTex_WIDTH 16
+#define gLinkHairTex_HEIGHT 16
+extern u64 gLinkHairTex[TEX_LEN(u64, gLinkHairTex_WIDTH, gLinkHairTex_HEIGHT, 16)];
+#define gLinkTunic1Tex_WIDTH 16
+#define gLinkTunic1Tex_HEIGHT 16
+extern u64 gLinkTunic1Tex[TEX_LEN(u64, gLinkTunic1Tex_WIDTH, gLinkTunic1Tex_HEIGHT, 8)];
+#define gLinkTunic2Tex_WIDTH 16
+#define gLinkTunic2Tex_HEIGHT 32
+extern u64 gLinkTunic2Tex[TEX_LEN(u64, gLinkTunic2Tex_WIDTH, gLinkTunic2Tex_HEIGHT, 8)];
+#define gLinkTunic3Tex_WIDTH 16
+#define gLinkTunic3Tex_HEIGHT 16
+extern u64 gLinkTunic3Tex[TEX_LEN(u64, gLinkTunic3Tex_WIDTH, gLinkTunic3Tex_HEIGHT, 8)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/lock_on_arrow.c b/assets/objects/gameplay_keep/lock_on_arrow.c
new file mode 100644
index 0000000000..32c1e1345a
--- /dev/null
+++ b/assets/objects/gameplay_keep/lock_on_arrow.c
@@ -0,0 +1,11 @@
+#include "lock_on_arrow.h"
+#include "hilite3_tex.h"
+#include "gfx.h"
+
+Vtx gLockOnArrowVtx[] = {
+#include "assets/objects/gameplay_keep/gLockOnArrowVtx.inc.c"
+};
+
+Gfx gLockOnArrowDL[34] = {
+#include "assets/objects/gameplay_keep/gLockOnArrowDL.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/lock_on_arrow.h b/assets/objects/gameplay_keep/lock_on_arrow.h
new file mode 100644
index 0000000000..2cadbdaaed
--- /dev/null
+++ b/assets/objects/gameplay_keep/lock_on_arrow.h
@@ -0,0 +1,9 @@
+#ifndef GAMEPLAY_KEEP_LOCK_ON_ARROW_H
+#define GAMEPLAY_KEEP_LOCK_ON_ARROW_H
+
+#include "ultra64.h"
+
+extern Vtx gLockOnArrowVtx[];
+extern Gfx gLockOnArrowDL[34];
+
+#endif
diff --git a/assets/objects/gameplay_keep/lock_on_reticle.c b/assets/objects/gameplay_keep/lock_on_reticle.c
new file mode 100644
index 0000000000..df6b21361b
--- /dev/null
+++ b/assets/objects/gameplay_keep/lock_on_reticle.c
@@ -0,0 +1,10 @@
+#include "lock_on_reticle.h"
+#include "gfx.h"
+
+Gfx gLockOnReticleTriangleDL[3] = {
+#include "assets/objects/gameplay_keep/gLockOnReticleTriangleDL.inc.c"
+};
+
+Vtx gLockOnReticleTriangleVtx[] = {
+#include "assets/objects/gameplay_keep/gLockOnReticleTriangleVtx.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/lock_on_reticle.h b/assets/objects/gameplay_keep/lock_on_reticle.h
new file mode 100644
index 0000000000..d4bc12a9dd
--- /dev/null
+++ b/assets/objects/gameplay_keep/lock_on_reticle.h
@@ -0,0 +1,9 @@
+#ifndef GAMEPLAY_KEEP_LOCK_ON_RETICLE_H
+#define GAMEPLAY_KEEP_LOCK_ON_RETICLE_H
+
+#include "ultra64.h"
+
+extern Gfx gLockOnReticleTriangleDL[3];
+extern Vtx gLockOnReticleTriangleVtx[];
+
+#endif
diff --git a/assets/objects/gameplay_keep/moon.c b/assets/objects/gameplay_keep/moon.c
new file mode 100644
index 0000000000..124e9733df
--- /dev/null
+++ b/assets/objects/gameplay_keep/moon.c
@@ -0,0 +1,14 @@
+#include "moon.h"
+#include "gfx.h"
+
+u64 gMoonTex[TEX_LEN(u64, gMoonTex_WIDTH, gMoonTex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gMoonTex.ia8.inc.c"
+};
+
+Gfx gMoonDL[14] = {
+#include "assets/objects/gameplay_keep/gMoonDL.inc.c"
+};
+
+Vtx gMoonVtx[] = {
+#include "assets/objects/gameplay_keep/gMoonVtx.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/moon.h b/assets/objects/gameplay_keep/moon.h
new file mode 100644
index 0000000000..5adc4755b4
--- /dev/null
+++ b/assets/objects/gameplay_keep/moon.h
@@ -0,0 +1,13 @@
+#ifndef GAMEPLAY_KEEP_MOON_H
+#define GAMEPLAY_KEEP_MOON_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gMoonTex_WIDTH 64
+#define gMoonTex_HEIGHT 64
+extern u64 gMoonTex[TEX_LEN(u64, gMoonTex_WIDTH, gMoonTex_HEIGHT, 8)];
+extern Gfx gMoonDL[14];
+extern Vtx gMoonVtx[];
+
+#endif
diff --git a/assets/objects/gameplay_keep/player_anim_headers.c b/assets/objects/gameplay_keep/player_anim_headers.c
new file mode 100644
index 0000000000..2fa2072a3d
--- /dev/null
+++ b/assets/objects/gameplay_keep/player_anim_headers.c
@@ -0,0 +1,2294 @@
+#include "player_anim_headers.h"
+#include "assets/misc/link_animetion/link_animetion.h"
+
+LinkAnimationHeader gPlayerAnim_clink_demo_DDbox_open = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_demo_DDbox_open.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_demo_Tbox_open = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_demo_Tbox_open.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_demo_atozusari = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_demo_atozusari.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_demo_bashi = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_demo_bashi.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_demo_doorA_link = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_demo_doorA_link.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_demo_doorB_link = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_demo_doorB_link.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_demo_futtobi = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_demo_futtobi.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_demo_get1 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_demo_get1.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_demo_get2 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_demo_get2.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_demo_get3 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_demo_get3.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_demo_goto_future = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_demo_goto_future.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_demo_koutai = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_demo_koutai.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_demo_koutai_kennuki = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_demo_koutai_kennuki.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_demo_koutai_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_demo_koutai_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_demo_mimawasi = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_demo_mimawasi.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_demo_mimawasi_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_demo_mimawasi_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_demo_miokuri = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_demo_miokuri.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_demo_miokuri_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_demo_miokuri_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_demo_nozoki = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_demo_nozoki.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_demo_return_to_future = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_demo_return_to_future.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_demo_standup = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_demo_standup.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_demo_standup_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_demo_standup_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_normal_climb_endAL = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_normal_climb_endAL.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_normal_climb_endAR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_normal_climb_endAR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_normal_climb_endBL = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_normal_climb_endBL.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_normal_climb_endBR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_normal_climb_endBR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_normal_climb_startA = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_normal_climb_startA.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_normal_climb_startB = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_normal_climb_startB.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_normal_climb_upL = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_normal_climb_upL.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_normal_climb_upR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_normal_climb_upR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_normal_defense_ALL = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_normal_defense_ALL.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_op3_negaeri = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_op3_negaeri.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_op3_okiagari = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_op3_okiagari.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_op3_tatiagari = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_op3_tatiagari.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_op3_wait1 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_op3_wait1.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_op3_wait2 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_op3_wait2.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_clink_op3_wait3 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_clink_op3_wait3.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_d_link_imanodare = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_d_link_imanodare.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_d_link_orooro = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_d_link_orooro.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_d_link_orowait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_d_link_orowait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_demo_link_nwait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_demo_link_nwait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_demo_link_orosuu = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_demo_link_orosuu.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_demo_link_tewatashi = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_demo_link_tewatashi.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_demo_link_twait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_demo_link_twait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_kolink_odoroki_demo = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_kolink_odoroki_demo.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_LLside_kiru_endL = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_LLside_kiru_endL.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_LLside_kiru_finsh_endR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_LLside_kiru_finsh_endR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_LRside_kiru_endR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_LRside_kiru_endR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_LRside_kiru_finsh_endL = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_LRside_kiru_finsh_endL.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_Lnormal_kiru_endR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_Lnormal_kiru_endR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_Lnormal_kiru_finsh_endR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_Lnormal_kiru_finsh_endR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_Lpierce_kiru_endL = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_Lpierce_kiru_endL.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_Lpierce_kiru_finsh_endR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_Lpierce_kiru_finsh_endR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_Lrolling_kiru_endR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_Lrolling_kiru_endR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_Lside_kiru_endR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_Lside_kiru_endR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_Lside_kiru_finsh_endR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_Lside_kiru_finsh_endR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_Rside_kiru_endR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_Rside_kiru_endR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_Rside_kiru_finsh_endR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_Rside_kiru_finsh_endR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_anchor2fighter = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_anchor2fighter.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_back_brake = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_back_brake.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_back_hitR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_back_hitR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_back_walk = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_back_walk.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_bom_side_walkL = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_bom_side_walkL.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_bom_side_walkR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_bom_side_walkR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_defense_hit = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_defense_hit.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_defense_long_hitL = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_defense_long_hitL.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_defense_long_hitR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_defense_long_hitR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_front_hitR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_front_hitR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_jump_kiru_finsh_endR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_jump_kiru_finsh_endR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_landingR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_landingR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_normal_kiru_finsh_endR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_normal_kiru_finsh_endR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_pierce_kiru_endR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_pierce_kiru_endR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_pierce_kiru_finsh_endR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_pierce_kiru_finsh_endR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_power_kiru_wait_endR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_power_kiru_wait_endR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_rolling_kiru_endR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_rolling_kiru_endR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_side_walkL = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_side_walkL.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_side_walkR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_side_walkR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_002578 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_002578.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_waitL2defense = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_waitL2defense.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_waitL2defense_long = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_waitL2defense_long.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_waitL = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_waitL.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_waitL_defense = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_waitL_defense.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_waitL_defense_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_waitL_defense_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_0025A8 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_0025A8.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_waitL_pierce_kiru = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_waitL_pierce_kiru.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_0025B8 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_0025B8.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_waitR2defense = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_waitR2defense.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_waitR2defense_long = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_waitR2defense_long.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_waitR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_waitR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_waitR_defense = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_waitR_defense.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_waitR_defense_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_waitR_defense_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_0025E8 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_0025E8.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_anchor_waitR_pierce_kiru = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_anchor_waitR_pierce_kiru.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_boom_catch = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_boom_catch.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_boom_throwL = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_boom_throwL.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_boom_throwR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_boom_throwR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_002610 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_002610.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_boom_throw_side_walkL = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_boom_throw_side_walkL.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_boom_throw_side_walkR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_boom_throw_side_walkR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_boom_throw_wait2waitR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_boom_throw_wait2waitR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_boom_throw_waitL = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_boom_throw_waitL.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_boom_throw_waitR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_boom_throw_waitR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_bottle_bug_in = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_bottle_bug_in.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_bottle_bug_miss = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_bottle_bug_miss.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_bottle_bug_out = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_bottle_bug_out.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_bottle_drink_demo = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_bottle_drink_demo.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_bottle_drink_demo_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_bottle_drink_demo_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_bottle_drink_demo_start = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_bottle_drink_demo_start.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_bottle_drink_demo_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_bottle_drink_demo_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_bottle_fish_in = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_bottle_fish_in.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_bottle_fish_miss = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_bottle_fish_miss.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_bottle_fish_out = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_bottle_fish_out.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_bottle_read = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_bottle_read.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_bottle_read_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_bottle_read_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_bow_bow_ready = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_bow_bow_ready.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_bow_bow_shoot = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_bow_bow_shoot.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_bow_bow_shoot_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_bow_bow_shoot_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_bow_bow_shoot_next = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_bow_bow_shoot_next.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_bow_bow_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_bow_bow_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_bow_defense = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_bow_defense.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_bow_defense_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_bow_defense_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_bow_side_runL = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_bow_side_runL.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_bow_side_runR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_bow_side_runR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_bow_side_walk = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_bow_side_walk.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_bow_walk2ready = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_bow_walk2ready.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_child_tunnel_door = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_child_tunnel_door.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_child_tunnel_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_child_tunnel_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_child_tunnel_start = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_child_tunnel_start.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_DDbox_open = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_DDbox_open.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_Tbox_open = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_Tbox_open.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_back_to_past = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_back_to_past.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_baru_op1 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_baru_op1.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_baru_op2 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_baru_op2.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_baru_op3 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_baru_op3.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_bikkuri = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_bikkuri.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_doorA_link = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_doorA_link.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_doorA_link_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_doorA_link_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_doorB_link = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_doorB_link.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_doorB_link_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_doorB_link_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_furimuki2 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_furimuki2.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_furimuki2_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_furimuki2_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_furimuki = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_furimuki.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_get_itemA = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_get_itemA.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_get_itemB = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_get_itemB.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_goma_furimuki = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_goma_furimuki.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_gurad = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_gurad.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_gurad_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_gurad_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_jibunmiru = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_jibunmiru.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_kakeyori = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_kakeyori.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_kakeyori_mimawasi = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_kakeyori_mimawasi.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_kakeyori_miokuri = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_kakeyori_miokuri.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_kakeyori_miokuri_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_kakeyori_miokuri_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_kakeyori_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_kakeyori_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_kaoage = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_kaoage.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_kaoage_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_kaoage_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_kenmiru1 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_kenmiru1.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_kenmiru1_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_kenmiru1_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_kenmiru2 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_kenmiru2.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_kenmiru2_modori = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_kenmiru2_modori.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_kenmiru2_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_kenmiru2_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_kousan = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_kousan.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_look_hand = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_look_hand.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_look_hand_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_look_hand_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_nozokikomi = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_nozokikomi.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_nozokikomi_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_nozokikomi_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_return_to_past = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_return_to_past.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_002840 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_002840.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_sita_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_sita_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_ue = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_ue.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_ue_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_ue_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_warp = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_warp.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_zeldamiru = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_zeldamiru.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_demo_zeldamiru_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_demo_zeldamiru_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_derth_rebirth = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_derth_rebirth.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_LLside_kiru = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_LLside_kiru.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_LLside_kiru_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_LLside_kiru_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_LLside_kiru_finsh = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_LLside_kiru_finsh.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_LLside_kiru_finsh_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_LLside_kiru_finsh_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_LRside_kiru = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_LRside_kiru.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_LRside_kiru_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_LRside_kiru_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_LRside_kiru_finsh = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_LRside_kiru_finsh.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_LRside_kiru_finsh_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_LRside_kiru_finsh_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_Lnormal_kiru = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_Lnormal_kiru.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_Lnormal_kiru_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_Lnormal_kiru_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_Lnormal_kiru_finsh = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_Lnormal_kiru_finsh.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_Lnormal_kiru_finsh_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_Lnormal_kiru_finsh_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_Lpierce_kiru = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_Lpierce_kiru.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_Lpierce_kiru_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_Lpierce_kiru_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_Lpierce_kiru_finsh = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_Lpierce_kiru_finsh.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_Lpierce_kiru_finsh_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_Lpierce_kiru_finsh_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_Lpower_jump_kiru = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_Lpower_jump_kiru.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_Lpower_jump_kiru_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_Lpower_jump_kiru_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_Lpower_jump_kiru_hit = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_Lpower_jump_kiru_hit.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_Lpower_kiru_side_walk = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_Lpower_kiru_side_walk.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_Lpower_kiru_start = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_Lpower_kiru_start.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_Lpower_kiru_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_Lpower_kiru_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_Lpower_kiru_wait_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_Lpower_kiru_wait_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_Lpower_kiru_walk = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_Lpower_kiru_walk.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_Lrolling_kiru = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_Lrolling_kiru.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_Lrolling_kiru_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_Lrolling_kiru_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_Lside_jump = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_Lside_jump.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_Lside_jump_endL = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_Lside_jump_endL.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_Lside_jump_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_Lside_jump_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_Lside_kiru = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_Lside_kiru.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_Lside_kiru_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_Lside_kiru_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_Lside_kiru_finsh = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_Lside_kiru_finsh.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_Lside_kiru_finsh_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_Lside_kiru_finsh_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_Rside_jump = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_Rside_jump.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_Rside_jump_endR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_Rside_jump_endR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_Rside_jump_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_Rside_jump_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_Rside_kiru = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_Rside_kiru.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_Rside_kiru_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_Rside_kiru_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_Rside_kiru_finsh = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_Rside_kiru_finsh.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_Rside_kiru_finsh_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_Rside_kiru_finsh_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_Wrolling_kiru = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_Wrolling_kiru.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_Wrolling_kiru_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_Wrolling_kiru_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_backturn_jump = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_backturn_jump.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_backturn_jump_endR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_backturn_jump_endR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_backturn_jump_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_backturn_jump_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_damage_run = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_damage_run.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_damage_run_long = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_damage_run_long.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_defense = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_defense.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_defense_long = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_defense_long.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_defense_long_hit = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_defense_long_hit.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_defense_long_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_defense_long_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_defense_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_defense_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_fighter2long = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_fighter2long.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_front_jump = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_front_jump.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_front_jump_endR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_front_jump_endR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_front_jump_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_front_jump_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_heavy_run_long = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_heavy_run_long.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_jump_kiru = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_jump_kiru.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_jump_kiru_finsh = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_jump_kiru_finsh.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_jump_kiru_finsh_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_jump_kiru_finsh_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_jump_rollkiru = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_jump_rollkiru.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_landing_roll_long = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_landing_roll_long.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_normal2fighter = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_normal2fighter.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_002A78 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_002A78.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_normal_kiru = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_normal_kiru.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_normal_kiru_endR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_normal_kiru_endR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_normal_kiru_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_normal_kiru_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_normal_kiru_finsh = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_normal_kiru_finsh.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_normal_kiru_finsh_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_normal_kiru_finsh_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_pierce_kiru = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_pierce_kiru.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_pierce_kiru_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_pierce_kiru_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_pierce_kiru_finsh = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_pierce_kiru_finsh.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_pierce_kiru_finsh_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_pierce_kiru_finsh_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_power_jump_kiru_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_power_jump_kiru_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_002AD0 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_002AD0.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_power_kiru_side_walk = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_power_kiru_side_walk.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_power_kiru_startL = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_power_kiru_startL.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_power_kiru_start = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_power_kiru_start.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_power_kiru_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_power_kiru_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_power_kiru_wait_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_power_kiru_wait_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_power_kiru_walk = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_power_kiru_walk.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_reboundR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_reboundR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_rebound = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_rebound.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_rebound_longR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_rebound_longR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_rebound_long = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_rebound_long.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_rolling_kiru = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_rolling_kiru.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_rolling_kiru_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_rolling_kiru_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_run = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_run.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_run_long = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_run_long.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_002B48 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_002B48.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_002B50 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_002B50.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_side_walkL_long = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_side_walkL_long.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_side_walkR_long = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_side_walkR_long.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_side_walk_long = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_side_walk_long.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_turn_kiruL = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_turn_kiruL.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_turn_kiruL_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_turn_kiruL_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_turn_kiruR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_turn_kiruR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_turn_kiruR_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_turn_kiruR_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_upper_kiruR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_upper_kiruR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_upper_pierce_kiru = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_upper_pierce_kiru.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_upper_pierce_kiru_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_upper_pierce_kiru_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_wait2waitL_long = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_wait2waitL_long.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_wait2waitR_long = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_wait2waitR_long.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_waitL2wait_long = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_waitL2wait_long.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_waitL_long = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_waitL_long.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_waitR2wait_long = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_waitR2wait_long.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_waitR_long = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_waitR_long.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_002BD8 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_002BD8.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_wait_long = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_wait_long.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_walk_endL_long = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_walk_endL_long.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_walk_endR_long = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_walk_endR_long.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fighter_walk_long = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fighter_walk_long.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fishing_fish_catch = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fishing_fish_catch.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fishing_fish_catch_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fishing_fish_catch_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fishing_reel_down = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fishing_reel_down.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fishing_reel_left = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fishing_reel_left.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fishing_reel_right = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fishing_reel_right.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fishing_reel_up = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fishing_reel_up.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fishing_throw = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fishing_throw.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_fishing_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_fishing_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_hammer_hit = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_hammer_hit.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_hammer_hit_endR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_hammer_hit_endR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_hammer_hit_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_hammer_hit_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_hammer_long2free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_hammer_long2free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_hammer_long2long = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_hammer_long2long.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_hammer_normal2long = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_hammer_normal2long.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_hammer_side_hit = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_hammer_side_hit.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_hammer_side_hit_endR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_hammer_side_hit_endR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_hammer_side_hit_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_hammer_side_hit_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_hatto_demo = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_hatto_demo.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_hook_fly_start = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_hook_fly_start.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_hook_fly_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_hook_fly_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_hook_shot_ready = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_hook_shot_ready.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_hook_side_runL = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_hook_side_runL.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_hook_side_runR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_hook_side_runR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_hook_side_walk = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_hook_side_walk.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_hook_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_hook_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_hook_walk2ready = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_hook_walk2ready.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_last_hit_motion1 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_last_hit_motion1.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_last_hit_motion2 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_last_hit_motion2.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_magic_honoo1 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_magic_honoo1.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_magic_honoo2 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_magic_honoo2.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_magic_honoo3 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_magic_honoo3.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_magic_kaze1 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_magic_kaze1.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_magic_kaze2 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_magic_kaze2.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_magic_kaze3 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_magic_kaze3.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_magic_tamashii1 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_magic_tamashii1.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_magic_tamashii2 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_magic_tamashii2.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_magic_tamashii3 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_magic_tamashii3.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_magic_tame = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_magic_tame.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_magic_tame_kaijyo = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_magic_tame_kaijyo.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_100step_up = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_100step_up.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_150step_up = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_150step_up.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_250jump_start = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_250jump_start.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_002D50 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_002D50.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_45_turn = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_45_turn.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_45_turn_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_45_turn_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_Fclimb_hold2upL = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_Fclimb_hold2upL.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_Fclimb_sideL = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_Fclimb_sideL.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_Fclimb_sideR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_Fclimb_sideR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_Fclimb_startA = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_Fclimb_startA.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_Fclimb_startB = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_Fclimb_startB.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_Fclimb_upL = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_Fclimb_upL.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_Fclimb_upR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_Fclimb_upR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_back_brake = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_back_brake.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_back_brake_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_back_brake_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_back_downA = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_back_downA.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_back_downB = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_back_downB.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_back_down_wake = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_back_down_wake.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_back_hit = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_back_hit.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_back_run = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_back_run.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_back_shitR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_back_shitR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_back_shit = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_back_shit.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_back_walk = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_back_walk.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_backspace = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_backspace.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_box_kick = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_box_kick.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_carryB = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_carryB.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_carryB_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_carryB_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_carryB_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_carryB_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_check = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_check.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_check_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_check_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_check_end_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_check_end_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_check_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_check_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_check_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_check_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_check_wait_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_check_wait_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_climb_down = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_climb_down.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_climb_endAL = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_climb_endAL.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_climb_endAR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_climb_endAR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_climb_endBL = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_climb_endBL.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_climb_endBR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_climb_endBR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_climb_startA = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_climb_startA.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_climb_startB = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_climb_startB.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_climb_upL = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_climb_upL.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_climb_upR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_climb_upR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_climb_up = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_climb_up.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_damage_run_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_damage_run_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_defense = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_defense.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_defense_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_defense_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_defense_end_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_defense_end_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_defense_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_defense_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_defense_hit = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_defense_hit.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_defense_kiru = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_defense_kiru.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_defense_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_defense_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_defense_wait_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_defense_wait_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_down_slope_slip = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_down_slope_slip.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_down_slope_slip_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_down_slope_slip_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_down_slope_slip_end_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_down_slope_slip_end_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_down_slope_slip_end_long = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_down_slope_slip_end_long.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_electric_shock = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_electric_shock.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_electric_shock_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_electric_shock_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_fall = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_fall.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_fall_up = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_fall_up.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_fall_up_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_fall_up_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_fall_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_fall_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_fighter2free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_fighter2free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_free2bom = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_free2bom.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_free2fighter_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_free2fighter_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_free2freeB = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_free2freeB.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_free2free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_free2free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_front_downA = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_front_downA.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_front_downB = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_front_downB.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_front_down_wake = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_front_down_wake.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_front_hit = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_front_hit.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_front_shitR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_front_shitR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_front_shit = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_front_shit.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_give_other = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_give_other.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_hang_up_down = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_hang_up_down.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_heavy_carry = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_heavy_carry.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_heavy_carry_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_heavy_carry_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_heavy_run = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_heavy_run.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_heavy_run_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_heavy_run_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_hip_down = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_hip_down.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_hip_down_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_hip_down_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_hip_down_long = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_hip_down_long.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_ice_down = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_ice_down.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_jump2landing = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_jump2landing.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_jump = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_jump.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_jump_climb_hold = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_jump_climb_hold.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_jump_climb_hold_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_jump_climb_hold_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_jump_climb_up = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_jump_climb_up.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_jump_climb_up_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_jump_climb_up_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_jump_climb_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_jump_climb_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_jump_climb_wait_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_jump_climb_wait_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_jump_up = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_jump_up.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_landing = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_landing.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_landing_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_landing_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_landing_roll = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_landing_roll.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_landing_roll_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_landing_roll_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_landing_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_landing_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_light_bom = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_light_bom.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_light_bom_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_light_bom_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_long2bom = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_long2bom.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_nocarry_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_nocarry_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_nocarry_free_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_nocarry_free_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_nocarry_free_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_nocarry_free_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_normal2bom = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_normal2bom.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_normal2fighter = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_normal2fighter.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_normal2fighter_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_normal2fighter_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_normal2free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_normal2free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_okarina_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_okarina_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_okarina_start = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_okarina_start.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_okarina_swing = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_okarina_swing.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_pull_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_pull_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_pull_end_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_pull_end_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_pull_start = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_pull_start.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_pull_start_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_pull_start_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_pulling = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_pulling.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_pulling_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_pulling_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_push_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_push_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_push_fall = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_push_fall.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_push_start = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_push_start.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_push_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_push_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_push_wait_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_push_wait_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_pushing = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_pushing.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_put = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_put.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_put_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_put_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_re_dead_attack = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_re_dead_attack.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_re_dead_attack_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_re_dead_attack_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_rebound = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_rebound.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_run = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_run.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_run_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_run_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_run_jump = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_run_jump.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_run_jump_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_run_jump_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_run_jump_water_fall = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_run_jump_water_fall.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_run_jump_water_fall_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_run_jump_water_fall_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_short_landing = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_short_landing.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_short_landing_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_short_landing_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_side_walkL_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_side_walkL_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_side_walkR_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_side_walkR_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_side_walk = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_side_walk.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_side_walk_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_side_walk_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_take_out = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_take_out.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_talk_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_talk_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_talk_free_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_talk_free_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_talk_navi = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_talk_navi.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_talk_navi_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_talk_navi_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_throw = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_throw.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_throw_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_throw_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_up_slope_slip = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_up_slope_slip.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_up_slope_slip_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_up_slope_slip_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_up_slope_slip_end_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_up_slope_slip_end_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_up_slope_slip_end_long = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_up_slope_slip_end_long.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_wait2waitL = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_wait2waitL.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_wait2waitR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_wait2waitR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_waitF_typeA_20f = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_waitF_typeA_20f.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_waitF_typeB_20f = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_waitF_typeB_20f.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_waitF_typeC_20f = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_waitF_typeC_20f.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_waitL2wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_waitL2wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_waitL_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_waitL_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_waitR2wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_waitR2wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_waitR_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_waitR_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_wait_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_wait_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_wait_typeA_20f = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_wait_typeA_20f.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_wait_typeB_20f = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_wait_typeB_20f.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_wait_typeC_20f = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_wait_typeC_20f.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_wakeup = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_wakeup.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_walk = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_walk.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_walk_endL = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_walk_endL.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_walk_endL_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_walk_endL_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_walk_endR = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_walk_endR.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_walk_endR_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_walk_endR_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_normal_walk_free = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_normal_walk_free.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_okarina_warp_goal = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_okarina_warp_goal.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_okiru_demo = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_okiru_demo.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_shagamu_demo = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_shagamu_demo.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_silver_carry = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_silver_carry.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_silver_throw = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_silver_throw.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_silver_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_silver_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_swimer_Lside_swim = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_swimer_Lside_swim.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_swimer_Rside_swim = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_swimer_Rside_swim.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_swimer_back_swim = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_swimer_back_swim.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_swimer_land2swim_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_swimer_land2swim_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_swimer_swim_15step_up = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_swimer_swim_15step_up.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_swimer_swim = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_swimer_swim.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_swimer_swim_dead = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_swimer_swim_dead.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_swimer_swim_deep_end = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_swimer_swim_deep_end.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_swimer_swim_deep_start = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_swimer_swim_deep_start.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_swimer_swim_down = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_swimer_swim_down.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_swimer_swim_get = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_swimer_swim_get.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_swimer_swim_hit = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_swimer_swim_hit.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_swimer_swim_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_swimer_swim_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_swimer_wait2swim_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_swimer_wait2swim_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_uma_anim_fastrun = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_uma_anim_fastrun.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_uma_anim_fastrun_muti = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_uma_anim_fastrun_muti.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_uma_anim_jump100 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_uma_anim_jump100.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_uma_anim_jump200 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_uma_anim_jump200.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_uma_anim_slowrun = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_uma_anim_slowrun.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_uma_anim_slowrun_muti = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_uma_anim_slowrun_muti.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_uma_anim_stand = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_uma_anim_stand.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_uma_anim_stop = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_uma_anim_stop.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_uma_anim_walk2 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_uma_anim_walk2.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_uma_anim_walk = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_uma_anim_walk.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_uma_anim_walk_muti = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_uma_anim_walk_muti.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_uma_left_down = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_uma_left_down.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_uma_left_up = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_uma_left_up.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_uma_right_down = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_uma_right_down.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_uma_right_up = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_uma_right_up.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_uma_stop_muti = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_uma_stop_muti.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_uma_wait_1 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_uma_wait_1.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_uma_wait_2 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_uma_wait_2.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_uma_wait_3 = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_uma_wait_3.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_waitF_heat1_20f = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_waitF_heat1_20f.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_waitF_heat2_20f = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_waitF_heat2_20f.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_waitF_itemA_20f = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_waitF_itemA_20f.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_waitF_itemB_20f = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_waitF_itemB_20f.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_waitF_typeD_20f = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_waitF_typeD_20f.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_wait_heat1_20f = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_wait_heat1_20f.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_wait_heat2_20f = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_wait_heat2_20f.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_wait_itemA_20f = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_wait_itemA_20f.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_wait_itemB_20f = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_wait_itemB_20f.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_wait_itemC_20f = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_wait_itemC_20f.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_wait_itemD1_20f = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_wait_itemD1_20f.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_wait_itemD2_20f = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_wait_itemD2_20f.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_link_wait_typeD_20f = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_link_wait_typeD_20f.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_lkt_nwait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_lkt_nwait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_nw_modoru = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_nw_modoru.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_o_get_ato = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_o_get_ato.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_o_get_mae = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_o_get_mae.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_om_get = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_om_get.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_om_get_mae = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_om_get_mae.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_sude_nwait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_sude_nwait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_L_1kyoro = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_L_1kyoro.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_L_2kyoro = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_L_2kyoro.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_L_bouzen = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_L_bouzen.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_L_hajikareru = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_L_hajikareru.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_L_kamaeru = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_L_kamaeru.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_L_ken_miru = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_L_ken_miru.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_L_kennasi_w = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_L_kennasi_w.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_L_kw = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_L_kw.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_L_mukinaoru = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_L_mukinaoru.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_L_okarina_get = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_L_okarina_get.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_L_sagaru = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_L_sagaru.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_Link_ha = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_Link_ha.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_Link_m_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_Link_m_wait.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_Link_miageru = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_Link_miageru.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_Link_muku = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_Link_muku.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_Link_otituku_w = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_Link_otituku_w.inc.c"
+};
+
+LinkAnimationHeader gPlayerAnim_Link_ue_wait = {
+#include "assets/objects/gameplay_keep/gPlayerAnim_Link_ue_wait.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/player_anim_headers.h b/assets/objects/gameplay_keep/player_anim_headers.h
new file mode 100644
index 0000000000..6ae47645fa
--- /dev/null
+++ b/assets/objects/gameplay_keep/player_anim_headers.h
@@ -0,0 +1,580 @@
+#ifndef GAMEPLAY_KEEP_PLAYER_ANIM_HEADERS_H
+#define GAMEPLAY_KEEP_PLAYER_ANIM_HEADERS_H
+
+#include "animation.h"
+
+extern LinkAnimationHeader gPlayerAnim_clink_demo_DDbox_open;
+extern LinkAnimationHeader gPlayerAnim_clink_demo_Tbox_open;
+extern LinkAnimationHeader gPlayerAnim_clink_demo_atozusari;
+extern LinkAnimationHeader gPlayerAnim_clink_demo_bashi;
+extern LinkAnimationHeader gPlayerAnim_clink_demo_doorA_link;
+extern LinkAnimationHeader gPlayerAnim_clink_demo_doorB_link;
+extern LinkAnimationHeader gPlayerAnim_clink_demo_futtobi;
+extern LinkAnimationHeader gPlayerAnim_clink_demo_get1;
+extern LinkAnimationHeader gPlayerAnim_clink_demo_get2;
+extern LinkAnimationHeader gPlayerAnim_clink_demo_get3;
+extern LinkAnimationHeader gPlayerAnim_clink_demo_goto_future;
+extern LinkAnimationHeader gPlayerAnim_clink_demo_koutai;
+extern LinkAnimationHeader gPlayerAnim_clink_demo_koutai_kennuki;
+extern LinkAnimationHeader gPlayerAnim_clink_demo_koutai_wait;
+extern LinkAnimationHeader gPlayerAnim_clink_demo_mimawasi;
+extern LinkAnimationHeader gPlayerAnim_clink_demo_mimawasi_wait;
+extern LinkAnimationHeader gPlayerAnim_clink_demo_miokuri;
+extern LinkAnimationHeader gPlayerAnim_clink_demo_miokuri_wait;
+extern LinkAnimationHeader gPlayerAnim_clink_demo_nozoki;
+extern LinkAnimationHeader gPlayerAnim_clink_demo_return_to_future;
+extern LinkAnimationHeader gPlayerAnim_clink_demo_standup;
+extern LinkAnimationHeader gPlayerAnim_clink_demo_standup_wait;
+extern LinkAnimationHeader gPlayerAnim_clink_normal_climb_endAL;
+extern LinkAnimationHeader gPlayerAnim_clink_normal_climb_endAR;
+extern LinkAnimationHeader gPlayerAnim_clink_normal_climb_endBL;
+extern LinkAnimationHeader gPlayerAnim_clink_normal_climb_endBR;
+extern LinkAnimationHeader gPlayerAnim_clink_normal_climb_startA;
+extern LinkAnimationHeader gPlayerAnim_clink_normal_climb_startB;
+extern LinkAnimationHeader gPlayerAnim_clink_normal_climb_upL;
+extern LinkAnimationHeader gPlayerAnim_clink_normal_climb_upR;
+extern LinkAnimationHeader gPlayerAnim_clink_normal_defense_ALL;
+extern LinkAnimationHeader gPlayerAnim_clink_op3_negaeri;
+extern LinkAnimationHeader gPlayerAnim_clink_op3_okiagari;
+extern LinkAnimationHeader gPlayerAnim_clink_op3_tatiagari;
+extern LinkAnimationHeader gPlayerAnim_clink_op3_wait1;
+extern LinkAnimationHeader gPlayerAnim_clink_op3_wait2;
+extern LinkAnimationHeader gPlayerAnim_clink_op3_wait3;
+extern LinkAnimationHeader gPlayerAnim_d_link_imanodare;
+extern LinkAnimationHeader gPlayerAnim_d_link_orooro;
+extern LinkAnimationHeader gPlayerAnim_d_link_orowait;
+extern LinkAnimationHeader gPlayerAnim_demo_link_nwait;
+extern LinkAnimationHeader gPlayerAnim_demo_link_orosuu;
+extern LinkAnimationHeader gPlayerAnim_demo_link_tewatashi;
+extern LinkAnimationHeader gPlayerAnim_demo_link_twait;
+extern LinkAnimationHeader gPlayerAnim_kolink_odoroki_demo;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_LLside_kiru_endL;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_LLside_kiru_finsh_endR;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_LRside_kiru_endR;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_LRside_kiru_finsh_endL;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_Lnormal_kiru_endR;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_Lnormal_kiru_finsh_endR;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_Lpierce_kiru_endL;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_Lpierce_kiru_finsh_endR;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_Lrolling_kiru_endR;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_Lside_kiru_endR;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_Lside_kiru_finsh_endR;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_Rside_kiru_endR;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_Rside_kiru_finsh_endR;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_anchor2fighter;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_back_brake;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_back_hitR;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_back_walk;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_bom_side_walkL;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_bom_side_walkR;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_defense_hit;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_defense_long_hitL;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_defense_long_hitR;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_front_hitR;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_jump_kiru_finsh_endR;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_landingR;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_normal_kiru_finsh_endR;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_pierce_kiru_endR;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_pierce_kiru_finsh_endR;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_power_kiru_wait_endR;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_rolling_kiru_endR;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_side_walkL;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_side_walkR;
+extern LinkAnimationHeader gPlayerAnim_002578;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_waitL2defense;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_waitL2defense_long;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_waitL;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_waitL_defense;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_waitL_defense_wait;
+extern LinkAnimationHeader gPlayerAnim_0025A8;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_waitL_pierce_kiru;
+extern LinkAnimationHeader gPlayerAnim_0025B8;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_waitR2defense;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_waitR2defense_long;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_waitR;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_waitR_defense;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_waitR_defense_wait;
+extern LinkAnimationHeader gPlayerAnim_0025E8;
+extern LinkAnimationHeader gPlayerAnim_link_anchor_waitR_pierce_kiru;
+extern LinkAnimationHeader gPlayerAnim_link_boom_catch;
+extern LinkAnimationHeader gPlayerAnim_link_boom_throwL;
+extern LinkAnimationHeader gPlayerAnim_link_boom_throwR;
+extern LinkAnimationHeader gPlayerAnim_002610;
+extern LinkAnimationHeader gPlayerAnim_link_boom_throw_side_walkL;
+extern LinkAnimationHeader gPlayerAnim_link_boom_throw_side_walkR;
+extern LinkAnimationHeader gPlayerAnim_link_boom_throw_wait2waitR;
+extern LinkAnimationHeader gPlayerAnim_link_boom_throw_waitL;
+extern LinkAnimationHeader gPlayerAnim_link_boom_throw_waitR;
+extern LinkAnimationHeader gPlayerAnim_link_bottle_bug_in;
+extern LinkAnimationHeader gPlayerAnim_link_bottle_bug_miss;
+extern LinkAnimationHeader gPlayerAnim_link_bottle_bug_out;
+extern LinkAnimationHeader gPlayerAnim_link_bottle_drink_demo;
+extern LinkAnimationHeader gPlayerAnim_link_bottle_drink_demo_end;
+extern LinkAnimationHeader gPlayerAnim_link_bottle_drink_demo_start;
+extern LinkAnimationHeader gPlayerAnim_link_bottle_drink_demo_wait;
+extern LinkAnimationHeader gPlayerAnim_link_bottle_fish_in;
+extern LinkAnimationHeader gPlayerAnim_link_bottle_fish_miss;
+extern LinkAnimationHeader gPlayerAnim_link_bottle_fish_out;
+extern LinkAnimationHeader gPlayerAnim_link_bottle_read;
+extern LinkAnimationHeader gPlayerAnim_link_bottle_read_end;
+extern LinkAnimationHeader gPlayerAnim_link_bow_bow_ready;
+extern LinkAnimationHeader gPlayerAnim_link_bow_bow_shoot;
+extern LinkAnimationHeader gPlayerAnim_link_bow_bow_shoot_end;
+extern LinkAnimationHeader gPlayerAnim_link_bow_bow_shoot_next;
+extern LinkAnimationHeader gPlayerAnim_link_bow_bow_wait;
+extern LinkAnimationHeader gPlayerAnim_link_bow_defense;
+extern LinkAnimationHeader gPlayerAnim_link_bow_defense_wait;
+extern LinkAnimationHeader gPlayerAnim_link_bow_side_runL;
+extern LinkAnimationHeader gPlayerAnim_link_bow_side_runR;
+extern LinkAnimationHeader gPlayerAnim_link_bow_side_walk;
+extern LinkAnimationHeader gPlayerAnim_link_bow_walk2ready;
+extern LinkAnimationHeader gPlayerAnim_link_child_tunnel_door;
+extern LinkAnimationHeader gPlayerAnim_link_child_tunnel_end;
+extern LinkAnimationHeader gPlayerAnim_link_child_tunnel_start;
+extern LinkAnimationHeader gPlayerAnim_link_demo_DDbox_open;
+extern LinkAnimationHeader gPlayerAnim_link_demo_Tbox_open;
+extern LinkAnimationHeader gPlayerAnim_link_demo_back_to_past;
+extern LinkAnimationHeader gPlayerAnim_link_demo_baru_op1;
+extern LinkAnimationHeader gPlayerAnim_link_demo_baru_op2;
+extern LinkAnimationHeader gPlayerAnim_link_demo_baru_op3;
+extern LinkAnimationHeader gPlayerAnim_link_demo_bikkuri;
+extern LinkAnimationHeader gPlayerAnim_link_demo_doorA_link;
+extern LinkAnimationHeader gPlayerAnim_link_demo_doorA_link_free;
+extern LinkAnimationHeader gPlayerAnim_link_demo_doorB_link;
+extern LinkAnimationHeader gPlayerAnim_link_demo_doorB_link_free;
+extern LinkAnimationHeader gPlayerAnim_link_demo_furimuki2;
+extern LinkAnimationHeader gPlayerAnim_link_demo_furimuki2_wait;
+extern LinkAnimationHeader gPlayerAnim_link_demo_furimuki;
+extern LinkAnimationHeader gPlayerAnim_link_demo_get_itemA;
+extern LinkAnimationHeader gPlayerAnim_link_demo_get_itemB;
+extern LinkAnimationHeader gPlayerAnim_link_demo_goma_furimuki;
+extern LinkAnimationHeader gPlayerAnim_link_demo_gurad;
+extern LinkAnimationHeader gPlayerAnim_link_demo_gurad_wait;
+extern LinkAnimationHeader gPlayerAnim_link_demo_jibunmiru;
+extern LinkAnimationHeader gPlayerAnim_link_demo_kakeyori;
+extern LinkAnimationHeader gPlayerAnim_link_demo_kakeyori_mimawasi;
+extern LinkAnimationHeader gPlayerAnim_link_demo_kakeyori_miokuri;
+extern LinkAnimationHeader gPlayerAnim_link_demo_kakeyori_miokuri_wait;
+extern LinkAnimationHeader gPlayerAnim_link_demo_kakeyori_wait;
+extern LinkAnimationHeader gPlayerAnim_link_demo_kaoage;
+extern LinkAnimationHeader gPlayerAnim_link_demo_kaoage_wait;
+extern LinkAnimationHeader gPlayerAnim_link_demo_kenmiru1;
+extern LinkAnimationHeader gPlayerAnim_link_demo_kenmiru1_wait;
+extern LinkAnimationHeader gPlayerAnim_link_demo_kenmiru2;
+extern LinkAnimationHeader gPlayerAnim_link_demo_kenmiru2_modori;
+extern LinkAnimationHeader gPlayerAnim_link_demo_kenmiru2_wait;
+extern LinkAnimationHeader gPlayerAnim_link_demo_kousan;
+extern LinkAnimationHeader gPlayerAnim_link_demo_look_hand;
+extern LinkAnimationHeader gPlayerAnim_link_demo_look_hand_wait;
+extern LinkAnimationHeader gPlayerAnim_link_demo_nozokikomi;
+extern LinkAnimationHeader gPlayerAnim_link_demo_nozokikomi_wait;
+extern LinkAnimationHeader gPlayerAnim_link_demo_return_to_past;
+extern LinkAnimationHeader gPlayerAnim_002840;
+extern LinkAnimationHeader gPlayerAnim_link_demo_sita_wait;
+extern LinkAnimationHeader gPlayerAnim_link_demo_ue;
+extern LinkAnimationHeader gPlayerAnim_link_demo_ue_wait;
+extern LinkAnimationHeader gPlayerAnim_link_demo_warp;
+extern LinkAnimationHeader gPlayerAnim_link_demo_zeldamiru;
+extern LinkAnimationHeader gPlayerAnim_link_demo_zeldamiru_wait;
+extern LinkAnimationHeader gPlayerAnim_link_derth_rebirth;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_LLside_kiru;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_LLside_kiru_end;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_LLside_kiru_finsh;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_LLside_kiru_finsh_end;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_LRside_kiru;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_LRside_kiru_end;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_LRside_kiru_finsh;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_LRside_kiru_finsh_end;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_Lnormal_kiru;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_Lnormal_kiru_end;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_Lnormal_kiru_finsh;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_Lnormal_kiru_finsh_end;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_Lpierce_kiru;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_Lpierce_kiru_end;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_Lpierce_kiru_finsh;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_Lpierce_kiru_finsh_end;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_Lpower_jump_kiru;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_Lpower_jump_kiru_end;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_Lpower_jump_kiru_hit;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_Lpower_kiru_side_walk;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_Lpower_kiru_start;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_Lpower_kiru_wait;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_Lpower_kiru_wait_end;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_Lpower_kiru_walk;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_Lrolling_kiru;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_Lrolling_kiru_end;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_Lside_jump;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_Lside_jump_endL;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_Lside_jump_end;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_Lside_kiru;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_Lside_kiru_end;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_Lside_kiru_finsh;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_Lside_kiru_finsh_end;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_Rside_jump;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_Rside_jump_endR;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_Rside_jump_end;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_Rside_kiru;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_Rside_kiru_end;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_Rside_kiru_finsh;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_Rside_kiru_finsh_end;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_Wrolling_kiru;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_Wrolling_kiru_end;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_backturn_jump;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_backturn_jump_endR;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_backturn_jump_end;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_damage_run;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_damage_run_long;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_defense;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_defense_long;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_defense_long_hit;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_defense_long_wait;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_defense_wait;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_fighter2long;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_front_jump;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_front_jump_endR;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_front_jump_end;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_heavy_run_long;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_jump_kiru;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_jump_kiru_finsh;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_jump_kiru_finsh_end;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_jump_rollkiru;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_landing_roll_long;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_normal2fighter;
+extern LinkAnimationHeader gPlayerAnim_002A78;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_normal_kiru;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_normal_kiru_endR;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_normal_kiru_end;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_normal_kiru_finsh;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_normal_kiru_finsh_end;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_pierce_kiru;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_pierce_kiru_end;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_pierce_kiru_finsh;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_pierce_kiru_finsh_end;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_power_jump_kiru_end;
+extern LinkAnimationHeader gPlayerAnim_002AD0;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_power_kiru_side_walk;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_power_kiru_startL;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_power_kiru_start;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_power_kiru_wait;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_power_kiru_wait_end;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_power_kiru_walk;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_reboundR;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_rebound;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_rebound_longR;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_rebound_long;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_rolling_kiru;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_rolling_kiru_end;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_run;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_run_long;
+extern LinkAnimationHeader gPlayerAnim_002B48;
+extern LinkAnimationHeader gPlayerAnim_002B50;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_side_walkL_long;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_side_walkR_long;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_side_walk_long;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_turn_kiruL;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_turn_kiruL_end;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_turn_kiruR;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_turn_kiruR_end;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_upper_kiruR;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_upper_pierce_kiru;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_upper_pierce_kiru_end;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_wait2waitL_long;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_wait2waitR_long;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_waitL2wait_long;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_waitL_long;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_waitR2wait_long;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_waitR_long;
+extern LinkAnimationHeader gPlayerAnim_002BD8;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_wait_long;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_walk_endL_long;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_walk_endR_long;
+extern LinkAnimationHeader gPlayerAnim_link_fighter_walk_long;
+extern LinkAnimationHeader gPlayerAnim_link_fishing_fish_catch;
+extern LinkAnimationHeader gPlayerAnim_link_fishing_fish_catch_end;
+extern LinkAnimationHeader gPlayerAnim_link_fishing_reel_down;
+extern LinkAnimationHeader gPlayerAnim_link_fishing_reel_left;
+extern LinkAnimationHeader gPlayerAnim_link_fishing_reel_right;
+extern LinkAnimationHeader gPlayerAnim_link_fishing_reel_up;
+extern LinkAnimationHeader gPlayerAnim_link_fishing_throw;
+extern LinkAnimationHeader gPlayerAnim_link_fishing_wait;
+extern LinkAnimationHeader gPlayerAnim_link_hammer_hit;
+extern LinkAnimationHeader gPlayerAnim_link_hammer_hit_endR;
+extern LinkAnimationHeader gPlayerAnim_link_hammer_hit_end;
+extern LinkAnimationHeader gPlayerAnim_link_hammer_long2free;
+extern LinkAnimationHeader gPlayerAnim_link_hammer_long2long;
+extern LinkAnimationHeader gPlayerAnim_link_hammer_normal2long;
+extern LinkAnimationHeader gPlayerAnim_link_hammer_side_hit;
+extern LinkAnimationHeader gPlayerAnim_link_hammer_side_hit_endR;
+extern LinkAnimationHeader gPlayerAnim_link_hammer_side_hit_end;
+extern LinkAnimationHeader gPlayerAnim_link_hatto_demo;
+extern LinkAnimationHeader gPlayerAnim_link_hook_fly_start;
+extern LinkAnimationHeader gPlayerAnim_link_hook_fly_wait;
+extern LinkAnimationHeader gPlayerAnim_link_hook_shot_ready;
+extern LinkAnimationHeader gPlayerAnim_link_hook_side_runL;
+extern LinkAnimationHeader gPlayerAnim_link_hook_side_runR;
+extern LinkAnimationHeader gPlayerAnim_link_hook_side_walk;
+extern LinkAnimationHeader gPlayerAnim_link_hook_wait;
+extern LinkAnimationHeader gPlayerAnim_link_hook_walk2ready;
+extern LinkAnimationHeader gPlayerAnim_link_last_hit_motion1;
+extern LinkAnimationHeader gPlayerAnim_link_last_hit_motion2;
+extern LinkAnimationHeader gPlayerAnim_link_magic_honoo1;
+extern LinkAnimationHeader gPlayerAnim_link_magic_honoo2;
+extern LinkAnimationHeader gPlayerAnim_link_magic_honoo3;
+extern LinkAnimationHeader gPlayerAnim_link_magic_kaze1;
+extern LinkAnimationHeader gPlayerAnim_link_magic_kaze2;
+extern LinkAnimationHeader gPlayerAnim_link_magic_kaze3;
+extern LinkAnimationHeader gPlayerAnim_link_magic_tamashii1;
+extern LinkAnimationHeader gPlayerAnim_link_magic_tamashii2;
+extern LinkAnimationHeader gPlayerAnim_link_magic_tamashii3;
+extern LinkAnimationHeader gPlayerAnim_link_magic_tame;
+extern LinkAnimationHeader gPlayerAnim_link_magic_tame_kaijyo;
+extern LinkAnimationHeader gPlayerAnim_link_normal_100step_up;
+extern LinkAnimationHeader gPlayerAnim_link_normal_150step_up;
+extern LinkAnimationHeader gPlayerAnim_link_normal_250jump_start;
+extern LinkAnimationHeader gPlayerAnim_002D50;
+extern LinkAnimationHeader gPlayerAnim_link_normal_45_turn;
+extern LinkAnimationHeader gPlayerAnim_link_normal_45_turn_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_Fclimb_hold2upL;
+extern LinkAnimationHeader gPlayerAnim_link_normal_Fclimb_sideL;
+extern LinkAnimationHeader gPlayerAnim_link_normal_Fclimb_sideR;
+extern LinkAnimationHeader gPlayerAnim_link_normal_Fclimb_startA;
+extern LinkAnimationHeader gPlayerAnim_link_normal_Fclimb_startB;
+extern LinkAnimationHeader gPlayerAnim_link_normal_Fclimb_upL;
+extern LinkAnimationHeader gPlayerAnim_link_normal_Fclimb_upR;
+extern LinkAnimationHeader gPlayerAnim_link_normal_back_brake;
+extern LinkAnimationHeader gPlayerAnim_link_normal_back_brake_end;
+extern LinkAnimationHeader gPlayerAnim_link_normal_back_downA;
+extern LinkAnimationHeader gPlayerAnim_link_normal_back_downB;
+extern LinkAnimationHeader gPlayerAnim_link_normal_back_down_wake;
+extern LinkAnimationHeader gPlayerAnim_link_normal_back_hit;
+extern LinkAnimationHeader gPlayerAnim_link_normal_back_run;
+extern LinkAnimationHeader gPlayerAnim_link_normal_back_shitR;
+extern LinkAnimationHeader gPlayerAnim_link_normal_back_shit;
+extern LinkAnimationHeader gPlayerAnim_link_normal_back_walk;
+extern LinkAnimationHeader gPlayerAnim_link_normal_backspace;
+extern LinkAnimationHeader gPlayerAnim_link_normal_box_kick;
+extern LinkAnimationHeader gPlayerAnim_link_normal_carryB;
+extern LinkAnimationHeader gPlayerAnim_link_normal_carryB_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_carryB_wait;
+extern LinkAnimationHeader gPlayerAnim_link_normal_check;
+extern LinkAnimationHeader gPlayerAnim_link_normal_check_end;
+extern LinkAnimationHeader gPlayerAnim_link_normal_check_end_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_check_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_check_wait;
+extern LinkAnimationHeader gPlayerAnim_link_normal_check_wait_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_climb_down;
+extern LinkAnimationHeader gPlayerAnim_link_normal_climb_endAL;
+extern LinkAnimationHeader gPlayerAnim_link_normal_climb_endAR;
+extern LinkAnimationHeader gPlayerAnim_link_normal_climb_endBL;
+extern LinkAnimationHeader gPlayerAnim_link_normal_climb_endBR;
+extern LinkAnimationHeader gPlayerAnim_link_normal_climb_startA;
+extern LinkAnimationHeader gPlayerAnim_link_normal_climb_startB;
+extern LinkAnimationHeader gPlayerAnim_link_normal_climb_upL;
+extern LinkAnimationHeader gPlayerAnim_link_normal_climb_upR;
+extern LinkAnimationHeader gPlayerAnim_link_normal_climb_up;
+extern LinkAnimationHeader gPlayerAnim_link_normal_damage_run_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_defense;
+extern LinkAnimationHeader gPlayerAnim_link_normal_defense_end;
+extern LinkAnimationHeader gPlayerAnim_link_normal_defense_end_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_defense_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_defense_hit;
+extern LinkAnimationHeader gPlayerAnim_link_normal_defense_kiru;
+extern LinkAnimationHeader gPlayerAnim_link_normal_defense_wait;
+extern LinkAnimationHeader gPlayerAnim_link_normal_defense_wait_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_down_slope_slip;
+extern LinkAnimationHeader gPlayerAnim_link_normal_down_slope_slip_end;
+extern LinkAnimationHeader gPlayerAnim_link_normal_down_slope_slip_end_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_down_slope_slip_end_long;
+extern LinkAnimationHeader gPlayerAnim_link_normal_electric_shock;
+extern LinkAnimationHeader gPlayerAnim_link_normal_electric_shock_end;
+extern LinkAnimationHeader gPlayerAnim_link_normal_fall;
+extern LinkAnimationHeader gPlayerAnim_link_normal_fall_up;
+extern LinkAnimationHeader gPlayerAnim_link_normal_fall_up_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_fall_wait;
+extern LinkAnimationHeader gPlayerAnim_link_normal_fighter2free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_free2bom;
+extern LinkAnimationHeader gPlayerAnim_link_normal_free2fighter_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_free2freeB;
+extern LinkAnimationHeader gPlayerAnim_link_normal_free2free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_front_downA;
+extern LinkAnimationHeader gPlayerAnim_link_normal_front_downB;
+extern LinkAnimationHeader gPlayerAnim_link_normal_front_down_wake;
+extern LinkAnimationHeader gPlayerAnim_link_normal_front_hit;
+extern LinkAnimationHeader gPlayerAnim_link_normal_front_shitR;
+extern LinkAnimationHeader gPlayerAnim_link_normal_front_shit;
+extern LinkAnimationHeader gPlayerAnim_link_normal_give_other;
+extern LinkAnimationHeader gPlayerAnim_link_normal_hang_up_down;
+extern LinkAnimationHeader gPlayerAnim_link_normal_heavy_carry;
+extern LinkAnimationHeader gPlayerAnim_link_normal_heavy_carry_end;
+extern LinkAnimationHeader gPlayerAnim_link_normal_heavy_run;
+extern LinkAnimationHeader gPlayerAnim_link_normal_heavy_run_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_hip_down;
+extern LinkAnimationHeader gPlayerAnim_link_normal_hip_down_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_hip_down_long;
+extern LinkAnimationHeader gPlayerAnim_link_normal_ice_down;
+extern LinkAnimationHeader gPlayerAnim_link_normal_jump2landing;
+extern LinkAnimationHeader gPlayerAnim_link_normal_jump;
+extern LinkAnimationHeader gPlayerAnim_link_normal_jump_climb_hold;
+extern LinkAnimationHeader gPlayerAnim_link_normal_jump_climb_hold_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_jump_climb_up;
+extern LinkAnimationHeader gPlayerAnim_link_normal_jump_climb_up_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_jump_climb_wait;
+extern LinkAnimationHeader gPlayerAnim_link_normal_jump_climb_wait_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_jump_up;
+extern LinkAnimationHeader gPlayerAnim_link_normal_landing;
+extern LinkAnimationHeader gPlayerAnim_link_normal_landing_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_landing_roll;
+extern LinkAnimationHeader gPlayerAnim_link_normal_landing_roll_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_landing_wait;
+extern LinkAnimationHeader gPlayerAnim_link_normal_light_bom;
+extern LinkAnimationHeader gPlayerAnim_link_normal_light_bom_end;
+extern LinkAnimationHeader gPlayerAnim_link_normal_long2bom;
+extern LinkAnimationHeader gPlayerAnim_link_normal_nocarry_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_nocarry_free_end;
+extern LinkAnimationHeader gPlayerAnim_link_normal_nocarry_free_wait;
+extern LinkAnimationHeader gPlayerAnim_link_normal_normal2bom;
+extern LinkAnimationHeader gPlayerAnim_link_normal_normal2fighter;
+extern LinkAnimationHeader gPlayerAnim_link_normal_normal2fighter_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_normal2free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_okarina_end;
+extern LinkAnimationHeader gPlayerAnim_link_normal_okarina_start;
+extern LinkAnimationHeader gPlayerAnim_link_normal_okarina_swing;
+extern LinkAnimationHeader gPlayerAnim_link_normal_pull_end;
+extern LinkAnimationHeader gPlayerAnim_link_normal_pull_end_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_pull_start;
+extern LinkAnimationHeader gPlayerAnim_link_normal_pull_start_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_pulling;
+extern LinkAnimationHeader gPlayerAnim_link_normal_pulling_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_push_end;
+extern LinkAnimationHeader gPlayerAnim_link_normal_push_fall;
+extern LinkAnimationHeader gPlayerAnim_link_normal_push_start;
+extern LinkAnimationHeader gPlayerAnim_link_normal_push_wait;
+extern LinkAnimationHeader gPlayerAnim_link_normal_push_wait_end;
+extern LinkAnimationHeader gPlayerAnim_link_normal_pushing;
+extern LinkAnimationHeader gPlayerAnim_link_normal_put;
+extern LinkAnimationHeader gPlayerAnim_link_normal_put_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_re_dead_attack;
+extern LinkAnimationHeader gPlayerAnim_link_normal_re_dead_attack_wait;
+extern LinkAnimationHeader gPlayerAnim_link_normal_rebound;
+extern LinkAnimationHeader gPlayerAnim_link_normal_run;
+extern LinkAnimationHeader gPlayerAnim_link_normal_run_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_run_jump;
+extern LinkAnimationHeader gPlayerAnim_link_normal_run_jump_end;
+extern LinkAnimationHeader gPlayerAnim_link_normal_run_jump_water_fall;
+extern LinkAnimationHeader gPlayerAnim_link_normal_run_jump_water_fall_wait;
+extern LinkAnimationHeader gPlayerAnim_link_normal_short_landing;
+extern LinkAnimationHeader gPlayerAnim_link_normal_short_landing_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_side_walkL_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_side_walkR_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_side_walk;
+extern LinkAnimationHeader gPlayerAnim_link_normal_side_walk_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_take_out;
+extern LinkAnimationHeader gPlayerAnim_link_normal_talk_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_talk_free_wait;
+extern LinkAnimationHeader gPlayerAnim_link_normal_talk_navi;
+extern LinkAnimationHeader gPlayerAnim_link_normal_talk_navi_wait;
+extern LinkAnimationHeader gPlayerAnim_link_normal_throw;
+extern LinkAnimationHeader gPlayerAnim_link_normal_throw_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_up_slope_slip;
+extern LinkAnimationHeader gPlayerAnim_link_normal_up_slope_slip_end;
+extern LinkAnimationHeader gPlayerAnim_link_normal_up_slope_slip_end_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_up_slope_slip_end_long;
+extern LinkAnimationHeader gPlayerAnim_link_normal_wait2waitL;
+extern LinkAnimationHeader gPlayerAnim_link_normal_wait2waitR;
+extern LinkAnimationHeader gPlayerAnim_link_normal_waitF_typeA_20f;
+extern LinkAnimationHeader gPlayerAnim_link_normal_waitF_typeB_20f;
+extern LinkAnimationHeader gPlayerAnim_link_normal_waitF_typeC_20f;
+extern LinkAnimationHeader gPlayerAnim_link_normal_waitL2wait;
+extern LinkAnimationHeader gPlayerAnim_link_normal_waitL_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_waitR2wait;
+extern LinkAnimationHeader gPlayerAnim_link_normal_waitR_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_wait;
+extern LinkAnimationHeader gPlayerAnim_link_normal_wait_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_wait_typeA_20f;
+extern LinkAnimationHeader gPlayerAnim_link_normal_wait_typeB_20f;
+extern LinkAnimationHeader gPlayerAnim_link_normal_wait_typeC_20f;
+extern LinkAnimationHeader gPlayerAnim_link_normal_wakeup;
+extern LinkAnimationHeader gPlayerAnim_link_normal_walk;
+extern LinkAnimationHeader gPlayerAnim_link_normal_walk_endL;
+extern LinkAnimationHeader gPlayerAnim_link_normal_walk_endL_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_walk_endR;
+extern LinkAnimationHeader gPlayerAnim_link_normal_walk_endR_free;
+extern LinkAnimationHeader gPlayerAnim_link_normal_walk_free;
+extern LinkAnimationHeader gPlayerAnim_link_okarina_warp_goal;
+extern LinkAnimationHeader gPlayerAnim_link_okiru_demo;
+extern LinkAnimationHeader gPlayerAnim_link_shagamu_demo;
+extern LinkAnimationHeader gPlayerAnim_link_silver_carry;
+extern LinkAnimationHeader gPlayerAnim_link_silver_throw;
+extern LinkAnimationHeader gPlayerAnim_link_silver_wait;
+extern LinkAnimationHeader gPlayerAnim_link_swimer_Lside_swim;
+extern LinkAnimationHeader gPlayerAnim_link_swimer_Rside_swim;
+extern LinkAnimationHeader gPlayerAnim_link_swimer_back_swim;
+extern LinkAnimationHeader gPlayerAnim_link_swimer_land2swim_wait;
+extern LinkAnimationHeader gPlayerAnim_link_swimer_swim_15step_up;
+extern LinkAnimationHeader gPlayerAnim_link_swimer_swim;
+extern LinkAnimationHeader gPlayerAnim_link_swimer_swim_dead;
+extern LinkAnimationHeader gPlayerAnim_link_swimer_swim_deep_end;
+extern LinkAnimationHeader gPlayerAnim_link_swimer_swim_deep_start;
+extern LinkAnimationHeader gPlayerAnim_link_swimer_swim_down;
+extern LinkAnimationHeader gPlayerAnim_link_swimer_swim_get;
+extern LinkAnimationHeader gPlayerAnim_link_swimer_swim_hit;
+extern LinkAnimationHeader gPlayerAnim_link_swimer_swim_wait;
+extern LinkAnimationHeader gPlayerAnim_link_swimer_wait2swim_wait;
+extern LinkAnimationHeader gPlayerAnim_link_uma_anim_fastrun;
+extern LinkAnimationHeader gPlayerAnim_link_uma_anim_fastrun_muti;
+extern LinkAnimationHeader gPlayerAnim_link_uma_anim_jump100;
+extern LinkAnimationHeader gPlayerAnim_link_uma_anim_jump200;
+extern LinkAnimationHeader gPlayerAnim_link_uma_anim_slowrun;
+extern LinkAnimationHeader gPlayerAnim_link_uma_anim_slowrun_muti;
+extern LinkAnimationHeader gPlayerAnim_link_uma_anim_stand;
+extern LinkAnimationHeader gPlayerAnim_link_uma_anim_stop;
+extern LinkAnimationHeader gPlayerAnim_link_uma_anim_walk2;
+extern LinkAnimationHeader gPlayerAnim_link_uma_anim_walk;
+extern LinkAnimationHeader gPlayerAnim_link_uma_anim_walk_muti;
+extern LinkAnimationHeader gPlayerAnim_link_uma_left_down;
+extern LinkAnimationHeader gPlayerAnim_link_uma_left_up;
+extern LinkAnimationHeader gPlayerAnim_link_uma_right_down;
+extern LinkAnimationHeader gPlayerAnim_link_uma_right_up;
+extern LinkAnimationHeader gPlayerAnim_link_uma_stop_muti;
+extern LinkAnimationHeader gPlayerAnim_link_uma_wait_1;
+extern LinkAnimationHeader gPlayerAnim_link_uma_wait_2;
+extern LinkAnimationHeader gPlayerAnim_link_uma_wait_3;
+extern LinkAnimationHeader gPlayerAnim_link_waitF_heat1_20f;
+extern LinkAnimationHeader gPlayerAnim_link_waitF_heat2_20f;
+extern LinkAnimationHeader gPlayerAnim_link_waitF_itemA_20f;
+extern LinkAnimationHeader gPlayerAnim_link_waitF_itemB_20f;
+extern LinkAnimationHeader gPlayerAnim_link_waitF_typeD_20f;
+extern LinkAnimationHeader gPlayerAnim_link_wait_heat1_20f;
+extern LinkAnimationHeader gPlayerAnim_link_wait_heat2_20f;
+extern LinkAnimationHeader gPlayerAnim_link_wait_itemA_20f;
+extern LinkAnimationHeader gPlayerAnim_link_wait_itemB_20f;
+extern LinkAnimationHeader gPlayerAnim_link_wait_itemC_20f;
+extern LinkAnimationHeader gPlayerAnim_link_wait_itemD1_20f;
+extern LinkAnimationHeader gPlayerAnim_link_wait_itemD2_20f;
+extern LinkAnimationHeader gPlayerAnim_link_wait_typeD_20f;
+extern LinkAnimationHeader gPlayerAnim_lkt_nwait;
+extern LinkAnimationHeader gPlayerAnim_nw_modoru;
+extern LinkAnimationHeader gPlayerAnim_o_get_ato;
+extern LinkAnimationHeader gPlayerAnim_o_get_mae;
+extern LinkAnimationHeader gPlayerAnim_om_get;
+extern LinkAnimationHeader gPlayerAnim_om_get_mae;
+extern LinkAnimationHeader gPlayerAnim_sude_nwait;
+extern LinkAnimationHeader gPlayerAnim_L_1kyoro;
+extern LinkAnimationHeader gPlayerAnim_L_2kyoro;
+extern LinkAnimationHeader gPlayerAnim_L_bouzen;
+extern LinkAnimationHeader gPlayerAnim_L_hajikareru;
+extern LinkAnimationHeader gPlayerAnim_L_kamaeru;
+extern LinkAnimationHeader gPlayerAnim_L_ken_miru;
+extern LinkAnimationHeader gPlayerAnim_L_kennasi_w;
+extern LinkAnimationHeader gPlayerAnim_L_kw;
+extern LinkAnimationHeader gPlayerAnim_L_mukinaoru;
+extern LinkAnimationHeader gPlayerAnim_L_okarina_get;
+extern LinkAnimationHeader gPlayerAnim_L_sagaru;
+extern LinkAnimationHeader gPlayerAnim_Link_ha;
+extern LinkAnimationHeader gPlayerAnim_Link_m_wait;
+extern LinkAnimationHeader gPlayerAnim_Link_miageru;
+extern LinkAnimationHeader gPlayerAnim_Link_muku;
+extern LinkAnimationHeader gPlayerAnim_Link_otituku_w;
+extern LinkAnimationHeader gPlayerAnim_Link_ue_wait;
+
+#endif
diff --git a/assets/objects/gameplay_keep/player_pause_joint_tables.c b/assets/objects/gameplay_keep/player_pause_joint_tables.c
new file mode 100644
index 0000000000..79873a0016
--- /dev/null
+++ b/assets/objects/gameplay_keep/player_pause_joint_tables.c
@@ -0,0 +1,21 @@
+#include "player_pause_joint_tables.h"
+
+Vec3s gLinkPauseChildJointTable[] = {
+#include "assets/objects/gameplay_keep/gLinkPauseChildJointTable.inc.c"
+};
+
+Vec3s gLinkPauseChildDekuShieldJointTable[] = {
+#include "assets/objects/gameplay_keep/gLinkPauseChildDekuShieldJointTable.inc.c"
+};
+
+Vec3s gLinkPauseAdultBgsJointTable[] = {
+#include "assets/objects/gameplay_keep/gLinkPauseAdultBgsJointTable.inc.c"
+};
+
+Vec3s gLinkPauseAdultJointTable[] = {
+#include "assets/objects/gameplay_keep/gLinkPauseAdultJointTable.inc.c"
+};
+
+Vec3s gLinkPauseAdultShieldJointTable[] = {
+#include "assets/objects/gameplay_keep/gLinkPauseAdultShieldJointTable.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/player_pause_joint_tables.h b/assets/objects/gameplay_keep/player_pause_joint_tables.h
new file mode 100644
index 0000000000..42cbb16c3e
--- /dev/null
+++ b/assets/objects/gameplay_keep/player_pause_joint_tables.h
@@ -0,0 +1,12 @@
+#ifndef GAMEPLAY_KEEP_PLAYER_PAUSE_JOINT_TABLES_H
+#define GAMEPLAY_KEEP_PLAYER_PAUSE_JOINT_TABLES_H
+
+#include "z_math.h"
+
+extern Vec3s gLinkPauseChildJointTable[];
+extern Vec3s gLinkPauseChildDekuShieldJointTable[];
+extern Vec3s gLinkPauseAdultBgsJointTable[];
+extern Vec3s gLinkPauseAdultJointTable[];
+extern Vec3s gLinkPauseAdultShieldJointTable[];
+
+#endif
diff --git a/assets/objects/gameplay_keep/raindrop_model.c b/assets/objects/gameplay_keep/raindrop_model.c
new file mode 100644
index 0000000000..5e70ebe832
--- /dev/null
+++ b/assets/objects/gameplay_keep/raindrop_model.c
@@ -0,0 +1,10 @@
+#include "raindrop_model.h"
+#include "gfx.h"
+
+Vtx gRaindropVtx[] = {
+#include "assets/objects/gameplay_keep/gRaindropVtx.inc.c"
+};
+
+Gfx gRaindropDL[4] = {
+#include "assets/objects/gameplay_keep/gRaindropDL.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/raindrop_model.h b/assets/objects/gameplay_keep/raindrop_model.h
new file mode 100644
index 0000000000..d5ef914b46
--- /dev/null
+++ b/assets/objects/gameplay_keep/raindrop_model.h
@@ -0,0 +1,9 @@
+#ifndef GAMEPLAY_KEEP_RAINDROP_MODEL_H
+#define GAMEPLAY_KEEP_RAINDROP_MODEL_H
+
+#include "ultra64.h"
+
+extern Vtx gRaindropVtx[];
+extern Gfx gRaindropDL[4];
+
+#endif
diff --git a/assets/objects/gameplay_keep/rectangular_sign_model.c b/assets/objects/gameplay_keep/rectangular_sign_model.c
new file mode 100644
index 0000000000..abcb5ff760
--- /dev/null
+++ b/assets/objects/gameplay_keep/rectangular_sign_model.c
@@ -0,0 +1,11 @@
+#include "rectangular_sign_model.h"
+#include "sign_textures.h"
+#include "gfx.h"
+
+Vtx gSignRectangularVtx[] = {
+#include "assets/objects/gameplay_keep/gSignRectangularVtx.inc.c"
+};
+
+Gfx gSignRectangularDL[81] = {
+#include "assets/objects/gameplay_keep/gSignRectangularDL.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/rectangular_sign_model.h b/assets/objects/gameplay_keep/rectangular_sign_model.h
new file mode 100644
index 0000000000..4d21377bdc
--- /dev/null
+++ b/assets/objects/gameplay_keep/rectangular_sign_model.h
@@ -0,0 +1,9 @@
+#ifndef GAMEPLAY_KEEP_RECTANGULAR_SIGN_MODEL_H
+#define GAMEPLAY_KEEP_RECTANGULAR_SIGN_MODEL_H
+
+#include "ultra64.h"
+
+extern Vtx gSignRectangularVtx[];
+extern Gfx gSignRectangularDL[81];
+
+#endif
diff --git a/assets/objects/gameplay_keep/rock_fragments_model.c b/assets/objects/gameplay_keep/rock_fragments_model.c
new file mode 100644
index 0000000000..7498e7b560
--- /dev/null
+++ b/assets/objects/gameplay_keep/rock_fragments_model.c
@@ -0,0 +1,19 @@
+#include "rock_fragments_model.h"
+#include "rock_fragments_tex.h"
+#include "gfx.h"
+
+Vtx gUnusedRockFragmentVtx[] = {
+#include "assets/objects/gameplay_keep/gUnusedRockFragmentVtx.inc.c"
+};
+
+Gfx gUnusedRockFragmentDL[32] = {
+#include "assets/objects/gameplay_keep/gUnusedRockFragmentDL.inc.c"
+};
+
+Gfx gBoulderFragmentsDL[27] = {
+#include "assets/objects/gameplay_keep/gBoulderFragmentsDL.inc.c"
+};
+
+Vtx gBoulderFragmentsVtx[] = {
+#include "assets/objects/gameplay_keep/gBoulderFragmentsVtx.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/rock_fragments_model.h b/assets/objects/gameplay_keep/rock_fragments_model.h
new file mode 100644
index 0000000000..70e1c70df8
--- /dev/null
+++ b/assets/objects/gameplay_keep/rock_fragments_model.h
@@ -0,0 +1,11 @@
+#ifndef GAMEPLAY_KEEP_ROCK_FRAGMENTS_MODEL_H
+#define GAMEPLAY_KEEP_ROCK_FRAGMENTS_MODEL_H
+
+#include "ultra64.h"
+
+extern Vtx gUnusedRockFragmentVtx[];
+extern Gfx gUnusedRockFragmentDL[32];
+extern Gfx gBoulderFragmentsDL[27];
+extern Vtx gBoulderFragmentsVtx[];
+
+#endif
diff --git a/assets/objects/gameplay_keep/rock_fragments_tex.c b/assets/objects/gameplay_keep/rock_fragments_tex.c
new file mode 100644
index 0000000000..c548202352
--- /dev/null
+++ b/assets/objects/gameplay_keep/rock_fragments_tex.c
@@ -0,0 +1,9 @@
+#include "rock_fragments_tex.h"
+
+u64 gRockFragment1Tex[TEX_LEN(u64, gRockFragment1Tex_WIDTH, gRockFragment1Tex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gRockFragment1Tex.rgba16.inc.c"
+};
+
+u64 gRockFragment2Tex[TEX_LEN(u64, gRockFragment2Tex_WIDTH, gRockFragment2Tex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gRockFragment2Tex.rgba16.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/rock_fragments_tex.h b/assets/objects/gameplay_keep/rock_fragments_tex.h
new file mode 100644
index 0000000000..3f32acc42c
--- /dev/null
+++ b/assets/objects/gameplay_keep/rock_fragments_tex.h
@@ -0,0 +1,14 @@
+#ifndef GAMEPLAY_KEEP_ROCK_FRAGMENTS_TEX_H
+#define GAMEPLAY_KEEP_ROCK_FRAGMENTS_TEX_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gRockFragment1Tex_WIDTH 32
+#define gRockFragment1Tex_HEIGHT 32
+extern u64 gRockFragment1Tex[TEX_LEN(u64, gRockFragment1Tex_WIDTH, gRockFragment1Tex_HEIGHT, 16)];
+#define gRockFragment2Tex_WIDTH 32
+#define gRockFragment2Tex_HEIGHT 32
+extern u64 gRockFragment2Tex[TEX_LEN(u64, gRockFragment2Tex_WIDTH, gRockFragment2Tex_HEIGHT, 16)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/rupee.c b/assets/objects/gameplay_keep/rupee.c
new file mode 100644
index 0000000000..12cc880d93
--- /dev/null
+++ b/assets/objects/gameplay_keep/rupee.c
@@ -0,0 +1,35 @@
+#include "rupee.h"
+#include "gfx.h"
+#include "region.h"
+
+u64 gRupeeGreenTex[TEX_LEN(u64, gRupeeGreenTex_WIDTH, gRupeeGreenTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gRupeeGreenTex.rgba16.inc.c"
+};
+
+u64 gRupeeBlueTex[TEX_LEN(u64, gRupeeBlueTex_WIDTH, gRupeeBlueTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gRupeeBlueTex.rgba16.inc.c"
+};
+
+u64 gRupeeRedTex[TEX_LEN(u64, gRupeeRedTex_WIDTH, gRupeeRedTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gRupeeRedTex.rgba16.inc.c"
+};
+
+u64 gRupeeOrangeTex[TEX_LEN(u64, gRupeeOrangeTex_WIDTH, gRupeeOrangeTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gRupeeOrangeTex.rgba16.inc.c"
+};
+
+u64 gRupeePinkTex[TEX_LEN(u64, gRupeePinkTex_WIDTH, gRupeePinkTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gRupeePinkTex.rgba16.inc.c"
+};
+
+u64 gRupeeSilverTex[TEX_LEN(u64, gRupeeSilverTex_WIDTH, gRupeeSilverTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gRupeeSilverTex.rgba16.inc.c"
+};
+
+Vtx gRupeeVtx[] = {
+#include "assets/objects/gameplay_keep/gRupeeVtx.inc.c"
+};
+
+Gfx gRupeeDL[26] = {
+#include "assets/objects/gameplay_keep/gRupeeDL.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/rupee.h b/assets/objects/gameplay_keep/rupee.h
new file mode 100644
index 0000000000..0502b50071
--- /dev/null
+++ b/assets/objects/gameplay_keep/rupee.h
@@ -0,0 +1,29 @@
+#ifndef GAMEPLAY_KEEP_RUPEE_H
+#define GAMEPLAY_KEEP_RUPEE_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+#include "region.h"
+
+#define gRupeeGreenTex_WIDTH 4
+#define gRupeeGreenTex_HEIGHT 4
+extern u64 gRupeeGreenTex[TEX_LEN(u64, gRupeeGreenTex_WIDTH, gRupeeGreenTex_HEIGHT, 16)];
+#define gRupeeBlueTex_WIDTH 4
+#define gRupeeBlueTex_HEIGHT 4
+extern u64 gRupeeBlueTex[TEX_LEN(u64, gRupeeBlueTex_WIDTH, gRupeeBlueTex_HEIGHT, 16)];
+#define gRupeeRedTex_WIDTH 4
+#define gRupeeRedTex_HEIGHT 4
+extern u64 gRupeeRedTex[TEX_LEN(u64, gRupeeRedTex_WIDTH, gRupeeRedTex_HEIGHT, 16)];
+#define gRupeeOrangeTex_WIDTH 4
+#define gRupeeOrangeTex_HEIGHT 4
+extern u64 gRupeeOrangeTex[TEX_LEN(u64, gRupeeOrangeTex_WIDTH, gRupeeOrangeTex_HEIGHT, 16)];
+#define gRupeePinkTex_WIDTH 4
+#define gRupeePinkTex_HEIGHT 4
+extern u64 gRupeePinkTex[TEX_LEN(u64, gRupeePinkTex_WIDTH, gRupeePinkTex_HEIGHT, 16)];
+#define gRupeeSilverTex_WIDTH 4
+#define gRupeeSilverTex_HEIGHT 4
+extern u64 gRupeeSilverTex[TEX_LEN(u64, gRupeeSilverTex_WIDTH, gRupeeSilverTex_HEIGHT, 16)];
+extern Vtx gRupeeVtx[];
+extern Gfx gRupeeDL[26];
+
+#endif
diff --git a/assets/objects/gameplay_keep/rupee_light_red_tex.c b/assets/objects/gameplay_keep/rupee_light_red_tex.c
new file mode 100644
index 0000000000..a3210af872
--- /dev/null
+++ b/assets/objects/gameplay_keep/rupee_light_red_tex.c
@@ -0,0 +1,5 @@
+#include "rupee_light_red_tex.h"
+
+u64 gRupeeLightRedTex[TEX_LEN(u64, gRupeeLightRedTex_WIDTH, gRupeeLightRedTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gRupeeLightRedTex.rgba16.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/rupee_light_red_tex.h b/assets/objects/gameplay_keep/rupee_light_red_tex.h
new file mode 100644
index 0000000000..e668f72e80
--- /dev/null
+++ b/assets/objects/gameplay_keep/rupee_light_red_tex.h
@@ -0,0 +1,12 @@
+#ifndef GAMEPLAY_KEEP_RUPEE_LIGHT_RED_TEX_H
+#define GAMEPLAY_KEEP_RUPEE_LIGHT_RED_TEX_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+#include "region.h"
+
+#define gRupeeLightRedTex_WIDTH 4
+#define gRupeeLightRedTex_HEIGHT 4
+extern u64 gRupeeLightRedTex[TEX_LEN(u64, gRupeeLightRedTex_WIDTH, gRupeeLightRedTex_HEIGHT, 16)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/shadow_circle.c b/assets/objects/gameplay_keep/shadow_circle.c
new file mode 100644
index 0000000000..a8bb184cd4
--- /dev/null
+++ b/assets/objects/gameplay_keep/shadow_circle.c
@@ -0,0 +1,14 @@
+#include "shadow_circle.h"
+#include "gfx.h"
+
+Gfx gCircleShadowDL[10] = {
+#include "assets/objects/gameplay_keep/gCircleShadowDL.inc.c"
+};
+
+Vtx gCircleShadowVtx[] = {
+#include "assets/objects/gameplay_keep/gCircleShadowVtx.inc.c"
+};
+
+u64 gCircleShadowTex[TEX_LEN(u64, gCircleShadowTex_WIDTH, gCircleShadowTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gCircleShadowTex.ia16.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/shadow_circle.h b/assets/objects/gameplay_keep/shadow_circle.h
new file mode 100644
index 0000000000..c7ee59b6e5
--- /dev/null
+++ b/assets/objects/gameplay_keep/shadow_circle.h
@@ -0,0 +1,13 @@
+#ifndef GAMEPLAY_KEEP_SHADOW_CIRCLE_H
+#define GAMEPLAY_KEEP_SHADOW_CIRCLE_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+extern Gfx gCircleShadowDL[10];
+extern Vtx gCircleShadowVtx[];
+#define gCircleShadowTex_WIDTH 32
+#define gCircleShadowTex_HEIGHT 32
+extern u64 gCircleShadowTex[TEX_LEN(u64, gCircleShadowTex_WIDTH, gCircleShadowTex_HEIGHT, 16)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/shadow_foot.c b/assets/objects/gameplay_keep/shadow_foot.c
new file mode 100644
index 0000000000..85209d0bf4
--- /dev/null
+++ b/assets/objects/gameplay_keep/shadow_foot.c
@@ -0,0 +1,14 @@
+#include "shadow_foot.h"
+#include "gfx.h"
+
+Gfx gFootShadowDL[12] = {
+#include "assets/objects/gameplay_keep/gFootShadowDL.inc.c"
+};
+
+Vtx gFootShadowVtx[] = {
+#include "assets/objects/gameplay_keep/gFootShadowVtx.inc.c"
+};
+
+u64 gFootShadowTex[TEX_LEN(u64, gFootShadowTex_WIDTH, gFootShadowTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gFootShadowTex.ia16.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/shadow_foot.h b/assets/objects/gameplay_keep/shadow_foot.h
new file mode 100644
index 0000000000..f6f10f3a43
--- /dev/null
+++ b/assets/objects/gameplay_keep/shadow_foot.h
@@ -0,0 +1,13 @@
+#ifndef GAMEPLAY_KEEP_SHADOW_FOOT_H
+#define GAMEPLAY_KEEP_SHADOW_FOOT_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+extern Gfx gFootShadowDL[12];
+extern Vtx gFootShadowVtx[];
+#define gFootShadowTex_WIDTH 32
+#define gFootShadowTex_HEIGHT 64
+extern u64 gFootShadowTex[TEX_LEN(u64, gFootShadowTex_WIDTH, gFootShadowTex_HEIGHT, 16)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/shadow_horse.c b/assets/objects/gameplay_keep/shadow_horse.c
new file mode 100644
index 0000000000..0b79b2c212
--- /dev/null
+++ b/assets/objects/gameplay_keep/shadow_horse.c
@@ -0,0 +1,14 @@
+#include "shadow_horse.h"
+#include "gfx.h"
+
+Vtx gHorseShadowVtx[] = {
+#include "assets/objects/gameplay_keep/gHorseShadowVtx.inc.c"
+};
+
+Gfx gHorseShadowDL[10] = {
+#include "assets/objects/gameplay_keep/gHorseShadowDL.inc.c"
+};
+
+u64 gHorseShadowTex[TEX_LEN(u64, gHorseShadowTex_WIDTH, gHorseShadowTex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gHorseShadowTex.i8.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/shadow_horse.h b/assets/objects/gameplay_keep/shadow_horse.h
new file mode 100644
index 0000000000..1bfe1416d7
--- /dev/null
+++ b/assets/objects/gameplay_keep/shadow_horse.h
@@ -0,0 +1,13 @@
+#ifndef GAMEPLAY_KEEP_SHADOW_HORSE_H
+#define GAMEPLAY_KEEP_SHADOW_HORSE_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+extern Vtx gHorseShadowVtx[];
+extern Gfx gHorseShadowDL[10];
+#define gHorseShadowTex_WIDTH 16
+#define gHorseShadowTex_HEIGHT 64
+extern u64 gHorseShadowTex[TEX_LEN(u64, gHorseShadowTex_WIDTH, gHorseShadowTex_HEIGHT, 8)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/shopkeeper_controls_tex.c b/assets/objects/gameplay_keep/shopkeeper_controls_tex.c
new file mode 100644
index 0000000000..b6a072accc
--- /dev/null
+++ b/assets/objects/gameplay_keep/shopkeeper_controls_tex.c
@@ -0,0 +1,14 @@
+#include "shopkeeper_controls_tex.h"
+#include "region.h"
+
+u64 gSelectionCursorTex[TEX_LEN(u64, gSelectionCursorTex_WIDTH, gSelectionCursorTex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gSelectionCursorTex.ia4.inc.c"
+};
+
+u64 gControlStickTex[TEX_LEN(u64, gControlStickTex_WIDTH, gControlStickTex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gControlStickTex.ia8.inc.c"
+};
+
+u64 gArrowCursorTex[TEX_LEN(u64, gArrowCursorTex_WIDTH, gArrowCursorTex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gArrowCursorTex.ia8.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/shopkeeper_controls_tex.h b/assets/objects/gameplay_keep/shopkeeper_controls_tex.h
new file mode 100644
index 0000000000..65b7403588
--- /dev/null
+++ b/assets/objects/gameplay_keep/shopkeeper_controls_tex.h
@@ -0,0 +1,17 @@
+#ifndef GAMEPLAY_KEEP_SHOPKEEPER_CONTROLS_TEX_H
+#define GAMEPLAY_KEEP_SHOPKEEPER_CONTROLS_TEX_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gSelectionCursorTex_WIDTH 16
+#define gSelectionCursorTex_HEIGHT 16
+extern u64 gSelectionCursorTex[TEX_LEN(u64, gSelectionCursorTex_WIDTH, gSelectionCursorTex_HEIGHT, 4)];
+#define gControlStickTex_WIDTH 16
+#define gControlStickTex_HEIGHT 16
+extern u64 gControlStickTex[TEX_LEN(u64, gControlStickTex_WIDTH, gControlStickTex_HEIGHT, 8)];
+#define gArrowCursorTex_WIDTH 16
+#define gArrowCursorTex_HEIGHT 24
+extern u64 gArrowCursorTex[TEX_LEN(u64, gArrowCursorTex_WIDTH, gArrowCursorTex_HEIGHT, 8)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/sign_textures.c b/assets/objects/gameplay_keep/sign_textures.c
new file mode 100644
index 0000000000..ec64664725
--- /dev/null
+++ b/assets/objects/gameplay_keep/sign_textures.c
@@ -0,0 +1,17 @@
+#include "sign_textures.h"
+
+u64 gSignRectangularSideTex[TEX_LEN(u64, gSignRectangularSideTex_WIDTH, gSignRectangularSideTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gSignRectangularSideTex.rgba16.inc.c"
+};
+
+u64 gSignRectangularFrontTex[TEX_LEN(u64, gSignRectangularFrontTex_WIDTH, gSignRectangularFrontTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gSignRectangularFrontTex.rgba16.inc.c"
+};
+
+u64 gSignPostWoodTex[TEX_LEN(u64, gSignPostWoodTex_WIDTH, gSignPostWoodTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gSignPostWoodTex.rgba16.inc.c"
+};
+
+u64 gSignLetteringTex[TEX_LEN(u64, gSignLetteringTex_WIDTH, gSignLetteringTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gSignLetteringTex.rgba16.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/sign_textures.h b/assets/objects/gameplay_keep/sign_textures.h
new file mode 100644
index 0000000000..e8137083b5
--- /dev/null
+++ b/assets/objects/gameplay_keep/sign_textures.h
@@ -0,0 +1,20 @@
+#ifndef GAMEPLAY_KEEP_SIGN_TEXTURES_H
+#define GAMEPLAY_KEEP_SIGN_TEXTURES_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gSignRectangularSideTex_WIDTH 32
+#define gSignRectangularSideTex_HEIGHT 16
+extern u64 gSignRectangularSideTex[TEX_LEN(u64, gSignRectangularSideTex_WIDTH, gSignRectangularSideTex_HEIGHT, 16)];
+#define gSignRectangularFrontTex_WIDTH 32
+#define gSignRectangularFrontTex_HEIGHT 16
+extern u64 gSignRectangularFrontTex[TEX_LEN(u64, gSignRectangularFrontTex_WIDTH, gSignRectangularFrontTex_HEIGHT, 16)];
+#define gSignPostWoodTex_WIDTH 64
+#define gSignPostWoodTex_HEIGHT 8
+extern u64 gSignPostWoodTex[TEX_LEN(u64, gSignPostWoodTex_WIDTH, gSignPostWoodTex_HEIGHT, 16)];
+#define gSignLetteringTex_WIDTH 64
+#define gSignLetteringTex_HEIGHT 32
+extern u64 gSignLetteringTex[TEX_LEN(u64, gSignLetteringTex_WIDTH, gSignLetteringTex_HEIGHT, 16)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/small_cube_col.c b/assets/objects/gameplay_keep/small_cube_col.c
new file mode 100644
index 0000000000..8f590f0037
--- /dev/null
+++ b/assets/objects/gameplay_keep/small_cube_col.c
@@ -0,0 +1,23 @@
+#include "small_cube_col.h"
+#include "array_count.h"
+#include "camera.h"
+
+BgCamInfo gSmallerCubeBgCamList[] = {
+#include "assets/objects/gameplay_keep/gSmallerCubeBgCamList.inc.c"
+};
+
+SurfaceType gSmallerCubeSurfaceTypes[] = {
+#include "assets/objects/gameplay_keep/gSmallerCubeSurfaceTypes.inc.c"
+};
+
+CollisionPoly gSmallerCubePolyList[] = {
+#include "assets/objects/gameplay_keep/gSmallerCubePolyList.inc.c"
+};
+
+Vec3s gSmallerCubeVtxList[] = {
+#include "assets/objects/gameplay_keep/gSmallerCubeVtxList.inc.c"
+};
+
+CollisionHeader gSmallerCubeCol = {
+#include "assets/objects/gameplay_keep/gSmallerCubeCol.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/small_cube_col.h b/assets/objects/gameplay_keep/small_cube_col.h
new file mode 100644
index 0000000000..2988eaa6fd
--- /dev/null
+++ b/assets/objects/gameplay_keep/small_cube_col.h
@@ -0,0 +1,12 @@
+#ifndef GAMEPLAY_KEEP_SMALL_CUBE_COL_H
+#define GAMEPLAY_KEEP_SMALL_CUBE_COL_H
+
+#include "bgcheck.h"
+
+extern BgCamInfo gSmallerCubeBgCamList[];
+extern SurfaceType gSmallerCubeSurfaceTypes[];
+extern CollisionPoly gSmallerCubePolyList[];
+extern Vec3s gSmallerCubeVtxList[];
+extern CollisionHeader gSmallerCubeCol;
+
+#endif
diff --git a/assets/objects/gameplay_keep/small_cube_model.c b/assets/objects/gameplay_keep/small_cube_model.c
new file mode 100644
index 0000000000..364c3398ef
--- /dev/null
+++ b/assets/objects/gameplay_keep/small_cube_model.c
@@ -0,0 +1,11 @@
+#include "small_cube_model.h"
+#include "gameplay_keep_0x42530.h"
+#include "gfx.h"
+
+Vtx gSmallCubeVtx[] = {
+#include "assets/objects/gameplay_keep/gSmallCubeVtx.inc.c"
+};
+
+Gfx gSmallCubeDL[23] = {
+#include "assets/objects/gameplay_keep/gSmallCubeDL.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/small_cube_model.h b/assets/objects/gameplay_keep/small_cube_model.h
new file mode 100644
index 0000000000..be45b4e476
--- /dev/null
+++ b/assets/objects/gameplay_keep/small_cube_model.h
@@ -0,0 +1,9 @@
+#ifndef GAMEPLAY_KEEP_SMALL_CUBE_MODEL_H
+#define GAMEPLAY_KEEP_SMALL_CUBE_MODEL_H
+
+#include "ultra64.h"
+
+extern Vtx gSmallCubeVtx[];
+extern Gfx gSmallCubeDL[23];
+
+#endif
diff --git a/assets/objects/gameplay_keep/small_flat_block_col.c b/assets/objects/gameplay_keep/small_flat_block_col.c
new file mode 100644
index 0000000000..63ed9b2ebb
--- /dev/null
+++ b/assets/objects/gameplay_keep/small_flat_block_col.c
@@ -0,0 +1,23 @@
+#include "small_flat_block_col.h"
+#include "array_count.h"
+#include "camera.h"
+
+BgCamInfo gSmallerFlatBlockBgCamList[] = {
+#include "assets/objects/gameplay_keep/gSmallerFlatBlockBgCamList.inc.c"
+};
+
+SurfaceType gSmallerFlatBlockSurfaceTypes[] = {
+#include "assets/objects/gameplay_keep/gSmallerFlatBlockSurfaceTypes.inc.c"
+};
+
+CollisionPoly gSmallerFlatBlockPolyList[] = {
+#include "assets/objects/gameplay_keep/gSmallerFlatBlockPolyList.inc.c"
+};
+
+Vec3s gSmallerFlatBlockVtxList[] = {
+#include "assets/objects/gameplay_keep/gSmallerFlatBlockVtxList.inc.c"
+};
+
+CollisionHeader gSmallerFlatBlockCol = {
+#include "assets/objects/gameplay_keep/gSmallerFlatBlockCol.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/small_flat_block_col.h b/assets/objects/gameplay_keep/small_flat_block_col.h
new file mode 100644
index 0000000000..6d91254950
--- /dev/null
+++ b/assets/objects/gameplay_keep/small_flat_block_col.h
@@ -0,0 +1,12 @@
+#ifndef GAMEPLAY_KEEP_SMALL_FLAT_BLOCK_COL_H
+#define GAMEPLAY_KEEP_SMALL_FLAT_BLOCK_COL_H
+
+#include "bgcheck.h"
+
+extern BgCamInfo gSmallerFlatBlockBgCamList[];
+extern SurfaceType gSmallerFlatBlockSurfaceTypes[];
+extern CollisionPoly gSmallerFlatBlockPolyList[];
+extern Vec3s gSmallerFlatBlockVtxList[];
+extern CollisionHeader gSmallerFlatBlockCol;
+
+#endif
diff --git a/assets/objects/gameplay_keep/spin_attack.c b/assets/objects/gameplay_keep/spin_attack.c
new file mode 100644
index 0000000000..0151e94750
--- /dev/null
+++ b/assets/objects/gameplay_keep/spin_attack.c
@@ -0,0 +1,58 @@
+#include "spin_attack.h"
+#include "gfx.h"
+
+u64 gSpinAttackFireTex[TEX_LEN(u64, gSpinAttackFireTex_WIDTH, gSpinAttackFireTex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gSpinAttackFireTex.i8.inc.c"
+};
+
+u64 gSpinAttackMagicTex[TEX_LEN(u64, gSpinAttackMagicTex_WIDTH, gSpinAttackMagicTex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gSpinAttackMagicTex.i8.inc.c"
+};
+
+Vtx gSpinAttack1Vtx[] = {
+#include "assets/objects/gameplay_keep/gSpinAttack1Vtx.inc.c"
+};
+
+Vtx gSpinAttack2Vtx[] = {
+#include "assets/objects/gameplay_keep/gSpinAttack2Vtx.inc.c"
+};
+
+Gfx gSpinAttack1DL[36] = {
+#include "assets/objects/gameplay_keep/gSpinAttack1DL.inc.c"
+};
+
+Gfx gSpinAttack2DL[36] = {
+#include "assets/objects/gameplay_keep/gSpinAttack2DL.inc.c"
+};
+
+Vtx gSpinAttack3Vtx[] = {
+#include "assets/objects/gameplay_keep/gSpinAttack3Vtx.inc.c"
+};
+
+Vtx gSpinAttack4Vtx[] = {
+#include "assets/objects/gameplay_keep/gSpinAttack4Vtx.inc.c"
+};
+
+Gfx gSpinAttack3DL[36] = {
+#include "assets/objects/gameplay_keep/gSpinAttack3DL.inc.c"
+};
+
+Gfx gSpinAttack4DL[36] = {
+#include "assets/objects/gameplay_keep/gSpinAttack4DL.inc.c"
+};
+
+u64 gSpinAttackCharging1Tex[TEX_LEN(u64, gSpinAttackCharging1Tex_WIDTH, gSpinAttackCharging1Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gSpinAttackCharging1Tex.i8.inc.c"
+};
+
+u64 gSpinAttackCharging2Tex[TEX_LEN(u64, gSpinAttackCharging2Tex_WIDTH, gSpinAttackCharging2Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gSpinAttackCharging2Tex.i8.inc.c"
+};
+
+Vtx gSpinAttackChargingVtx[] = {
+#include "assets/objects/gameplay_keep/gSpinAttackChargingVtx.inc.c"
+};
+
+Gfx gSpinAttackChargingDL[29] = {
+#include "assets/objects/gameplay_keep/gSpinAttackChargingDL.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/spin_attack.h b/assets/objects/gameplay_keep/spin_attack.h
new file mode 100644
index 0000000000..39fc727cd3
--- /dev/null
+++ b/assets/objects/gameplay_keep/spin_attack.h
@@ -0,0 +1,30 @@
+#ifndef GAMEPLAY_KEEP_SPIN_ATTACK_H
+#define GAMEPLAY_KEEP_SPIN_ATTACK_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gSpinAttackFireTex_WIDTH 64
+#define gSpinAttackFireTex_HEIGHT 32
+extern u64 gSpinAttackFireTex[TEX_LEN(u64, gSpinAttackFireTex_WIDTH, gSpinAttackFireTex_HEIGHT, 8)];
+#define gSpinAttackMagicTex_WIDTH 64
+#define gSpinAttackMagicTex_HEIGHT 32
+extern u64 gSpinAttackMagicTex[TEX_LEN(u64, gSpinAttackMagicTex_WIDTH, gSpinAttackMagicTex_HEIGHT, 8)];
+extern Vtx gSpinAttack1Vtx[];
+extern Vtx gSpinAttack2Vtx[];
+extern Gfx gSpinAttack1DL[36];
+extern Gfx gSpinAttack2DL[36];
+extern Vtx gSpinAttack3Vtx[];
+extern Vtx gSpinAttack4Vtx[];
+extern Gfx gSpinAttack3DL[36];
+extern Gfx gSpinAttack4DL[36];
+#define gSpinAttackCharging1Tex_WIDTH 32
+#define gSpinAttackCharging1Tex_HEIGHT 32
+extern u64 gSpinAttackCharging1Tex[TEX_LEN(u64, gSpinAttackCharging1Tex_WIDTH, gSpinAttackCharging1Tex_HEIGHT, 8)];
+#define gSpinAttackCharging2Tex_WIDTH 32
+#define gSpinAttackCharging2Tex_HEIGHT 32
+extern u64 gSpinAttackCharging2Tex[TEX_LEN(u64, gSpinAttackCharging2Tex_WIDTH, gSpinAttackCharging2Tex_HEIGHT, 8)];
+extern Vtx gSpinAttackChargingVtx[];
+extern Gfx gSpinAttackChargingDL[29];
+
+#endif
diff --git a/assets/objects/gameplay_keep/sun_evening_textures.c b/assets/objects/gameplay_keep/sun_evening_textures.c
new file mode 100644
index 0000000000..1d8791c927
--- /dev/null
+++ b/assets/objects/gameplay_keep/sun_evening_textures.c
@@ -0,0 +1,15 @@
+#include "sun_evening_textures.h"
+
+u64 gSunEvening1Tex[TEX_LEN(u64, gSunEvening1Tex_WIDTH, gSunEvening1Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gSunEvening1Tex.i4.inc.c"
+};
+
+u64 gSunEvening2Tex[TEX_LEN(u64, gSunEvening2Tex_WIDTH, gSunEvening2Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gSunEvening2Tex.i4.inc.c"
+};
+
+u64 gSunEvening3Tex[TEX_LEN(u64, gSunEvening3Tex_WIDTH, gSunEvening3Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gSunEvening3Tex.i4.inc.c"
+};
+
+u8 gameplay_keep_zeros_04D140[32] = { 0 };
diff --git a/assets/objects/gameplay_keep/sun_evening_textures.h b/assets/objects/gameplay_keep/sun_evening_textures.h
new file mode 100644
index 0000000000..bfc5525a11
--- /dev/null
+++ b/assets/objects/gameplay_keep/sun_evening_textures.h
@@ -0,0 +1,17 @@
+#ifndef GAMEPLAY_KEEP_SUN_EVENING_TEXTURES_H
+#define GAMEPLAY_KEEP_SUN_EVENING_TEXTURES_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gSunEvening1Tex_WIDTH 64
+#define gSunEvening1Tex_HEIGHT 31
+extern u64 gSunEvening1Tex[TEX_LEN(u64, gSunEvening1Tex_WIDTH, gSunEvening1Tex_HEIGHT, 4)];
+#define gSunEvening2Tex_WIDTH 64
+#define gSunEvening2Tex_HEIGHT 16
+extern u64 gSunEvening2Tex[TEX_LEN(u64, gSunEvening2Tex_WIDTH, gSunEvening2Tex_HEIGHT, 4)];
+#define gSunEvening3Tex_WIDTH 64
+#define gSunEvening3Tex_HEIGHT 16
+extern u64 gSunEvening3Tex[TEX_LEN(u64, gSunEvening3Tex_WIDTH, gSunEvening3Tex_HEIGHT, 4)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/sun_textures.c b/assets/objects/gameplay_keep/sun_textures.c
new file mode 100644
index 0000000000..3e07774fb5
--- /dev/null
+++ b/assets/objects/gameplay_keep/sun_textures.c
@@ -0,0 +1,15 @@
+#include "sun_textures.h"
+
+u64 gSun1Tex[TEX_LEN(u64, gSun1Tex_WIDTH, gSun1Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gSun1Tex.i4.inc.c"
+};
+
+u64 gSun2Tex[TEX_LEN(u64, gSun2Tex_WIDTH, gSun2Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gSun2Tex.i4.inc.c"
+};
+
+u64 gSun3Tex[TEX_LEN(u64, gSun3Tex_WIDTH, gSun3Tex_HEIGHT, 4)] = {
+#include "assets/objects/gameplay_keep/gSun3Tex.i4.inc.c"
+};
+
+u8 gameplay_keep_zeros_04C940[32] = { 0 };
diff --git a/assets/objects/gameplay_keep/sun_textures.h b/assets/objects/gameplay_keep/sun_textures.h
new file mode 100644
index 0000000000..4c4e61823d
--- /dev/null
+++ b/assets/objects/gameplay_keep/sun_textures.h
@@ -0,0 +1,17 @@
+#ifndef GAMEPLAY_KEEP_SUN_TEXTURES_H
+#define GAMEPLAY_KEEP_SUN_TEXTURES_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gSun1Tex_WIDTH 64
+#define gSun1Tex_HEIGHT 31
+extern u64 gSun1Tex[TEX_LEN(u64, gSun1Tex_WIDTH, gSun1Tex_HEIGHT, 4)];
+#define gSun2Tex_WIDTH 64
+#define gSun2Tex_HEIGHT 16
+extern u64 gSun2Tex[TEX_LEN(u64, gSun2Tex_WIDTH, gSun2Tex_HEIGHT, 4)];
+#define gSun3Tex_WIDTH 64
+#define gSun3Tex_HEIGHT 16
+extern u64 gSun3Tex[TEX_LEN(u64, gSun3Tex_WIDTH, gSun3Tex_HEIGHT, 4)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/tree_stump_model.c b/assets/objects/gameplay_keep/tree_stump_model.c
new file mode 100644
index 0000000000..a3456d62c7
--- /dev/null
+++ b/assets/objects/gameplay_keep/tree_stump_model.c
@@ -0,0 +1,11 @@
+#include "tree_stump_model.h"
+#include "gameplay_keep_0x43530.h"
+#include "gfx.h"
+
+Vtx gTreeStumpVtx[] = {
+#include "assets/objects/gameplay_keep/gTreeStumpVtx.inc.c"
+};
+
+Gfx gTreeStumpDL[34] = {
+#include "assets/objects/gameplay_keep/gTreeStumpDL.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/tree_stump_model.h b/assets/objects/gameplay_keep/tree_stump_model.h
new file mode 100644
index 0000000000..818baf4cad
--- /dev/null
+++ b/assets/objects/gameplay_keep/tree_stump_model.h
@@ -0,0 +1,9 @@
+#ifndef GAMEPLAY_KEEP_TREE_STUMP_MODEL_H
+#define GAMEPLAY_KEEP_TREE_STUMP_MODEL_H
+
+#include "ultra64.h"
+
+extern Vtx gTreeStumpVtx[];
+extern Gfx gTreeStumpDL[34];
+
+#endif
diff --git a/assets/objects/gameplay_keep/unk_eff_blure_tex.c b/assets/objects/gameplay_keep/unk_eff_blure_tex.c
new file mode 100644
index 0000000000..e6443d1bd5
--- /dev/null
+++ b/assets/objects/gameplay_keep/unk_eff_blure_tex.c
@@ -0,0 +1,5 @@
+#include "unk_eff_blure_tex.h"
+
+u64 gUnknownEffBlureTex[TEX_LEN(u64, gUnknownEffBlureTex_WIDTH, gUnknownEffBlureTex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gUnknownEffBlureTex.i8.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/unk_eff_blure_tex.h b/assets/objects/gameplay_keep/unk_eff_blure_tex.h
new file mode 100644
index 0000000000..6734cceb31
--- /dev/null
+++ b/assets/objects/gameplay_keep/unk_eff_blure_tex.h
@@ -0,0 +1,11 @@
+#ifndef GAMEPLAY_KEEP_UNK_EFF_BLURE_TEX_H
+#define GAMEPLAY_KEEP_UNK_EFF_BLURE_TEX_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gUnknownEffBlureTex_WIDTH 64
+#define gUnknownEffBlureTex_HEIGHT 32
+extern u64 gUnknownEffBlureTex[TEX_LEN(u64, gUnknownEffBlureTex_WIDTH, gUnknownEffBlureTex_HEIGHT, 8)];
+
+#endif
diff --git a/assets/objects/gameplay_keep/unknown_eff_stone.c b/assets/objects/gameplay_keep/unknown_eff_stone.c
new file mode 100644
index 0000000000..30c5487a79
--- /dev/null
+++ b/assets/objects/gameplay_keep/unknown_eff_stone.c
@@ -0,0 +1,42 @@
+#include "unknown_eff_stone.h"
+#include "gfx.h"
+
+u64 gUnknownEffStone1Tex[TEX_LEN(u64, gUnknownEffStone1Tex_WIDTH, gUnknownEffStone1Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gUnknownEffStone1Tex.ia8.inc.c"
+};
+
+u64 gUnknownEffStone2Tex[TEX_LEN(u64, gUnknownEffStone2Tex_WIDTH, gUnknownEffStone2Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gUnknownEffStone2Tex.ia8.inc.c"
+};
+
+u64 gUnknownEffStone3Tex[TEX_LEN(u64, gUnknownEffStone3Tex_WIDTH, gUnknownEffStone3Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gUnknownEffStone3Tex.ia8.inc.c"
+};
+
+u64 gUnknownEffStone4Tex[TEX_LEN(u64, gUnknownEffStone4Tex_WIDTH, gUnknownEffStone4Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gUnknownEffStone4Tex.ia8.inc.c"
+};
+
+u64 gUnknownEffStone5Tex[TEX_LEN(u64, gUnknownEffStone5Tex_WIDTH, gUnknownEffStone5Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gUnknownEffStone5Tex.ia8.inc.c"
+};
+
+u64 gUnknownEffStone6Tex[TEX_LEN(u64, gUnknownEffStone6Tex_WIDTH, gUnknownEffStone6Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gUnknownEffStone6Tex.ia8.inc.c"
+};
+
+u64 gUnknownEffStone7Tex[TEX_LEN(u64, gUnknownEffStone7Tex_WIDTH, gUnknownEffStone7Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gUnknownEffStone7Tex.ia8.inc.c"
+};
+
+u64 gUnknownEffStone8Tex[TEX_LEN(u64, gUnknownEffStone8Tex_WIDTH, gUnknownEffStone8Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gUnknownEffStone8Tex.ia8.inc.c"
+};
+
+Gfx gUnknownEffStoneDL[12] = {
+#include "assets/objects/gameplay_keep/gUnknownEffStoneDL.inc.c"
+};
+
+Vtx gUnknownEffStoneVtx[] = {
+#include "assets/objects/gameplay_keep/gUnknownEffStoneVtx.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/unknown_eff_stone.h b/assets/objects/gameplay_keep/unknown_eff_stone.h
new file mode 100644
index 0000000000..78deb0f9e8
--- /dev/null
+++ b/assets/objects/gameplay_keep/unknown_eff_stone.h
@@ -0,0 +1,34 @@
+#ifndef GAMEPLAY_KEEP_UNKNOWN_EFF_STONE_H
+#define GAMEPLAY_KEEP_UNKNOWN_EFF_STONE_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gUnknownEffStone1Tex_WIDTH 32
+#define gUnknownEffStone1Tex_HEIGHT 32
+extern u64 gUnknownEffStone1Tex[TEX_LEN(u64, gUnknownEffStone1Tex_WIDTH, gUnknownEffStone1Tex_HEIGHT, 8)];
+#define gUnknownEffStone2Tex_WIDTH 32
+#define gUnknownEffStone2Tex_HEIGHT 32
+extern u64 gUnknownEffStone2Tex[TEX_LEN(u64, gUnknownEffStone2Tex_WIDTH, gUnknownEffStone2Tex_HEIGHT, 8)];
+#define gUnknownEffStone3Tex_WIDTH 32
+#define gUnknownEffStone3Tex_HEIGHT 32
+extern u64 gUnknownEffStone3Tex[TEX_LEN(u64, gUnknownEffStone3Tex_WIDTH, gUnknownEffStone3Tex_HEIGHT, 8)];
+#define gUnknownEffStone4Tex_WIDTH 32
+#define gUnknownEffStone4Tex_HEIGHT 32
+extern u64 gUnknownEffStone4Tex[TEX_LEN(u64, gUnknownEffStone4Tex_WIDTH, gUnknownEffStone4Tex_HEIGHT, 8)];
+#define gUnknownEffStone5Tex_WIDTH 32
+#define gUnknownEffStone5Tex_HEIGHT 32
+extern u64 gUnknownEffStone5Tex[TEX_LEN(u64, gUnknownEffStone5Tex_WIDTH, gUnknownEffStone5Tex_HEIGHT, 8)];
+#define gUnknownEffStone6Tex_WIDTH 32
+#define gUnknownEffStone6Tex_HEIGHT 32
+extern u64 gUnknownEffStone6Tex[TEX_LEN(u64, gUnknownEffStone6Tex_WIDTH, gUnknownEffStone6Tex_HEIGHT, 8)];
+#define gUnknownEffStone7Tex_WIDTH 32
+#define gUnknownEffStone7Tex_HEIGHT 32
+extern u64 gUnknownEffStone7Tex[TEX_LEN(u64, gUnknownEffStone7Tex_WIDTH, gUnknownEffStone7Tex_HEIGHT, 8)];
+#define gUnknownEffStone8Tex_WIDTH 32
+#define gUnknownEffStone8Tex_HEIGHT 32
+extern u64 gUnknownEffStone8Tex[TEX_LEN(u64, gUnknownEffStone8Tex_WIDTH, gUnknownEffStone8Tex_HEIGHT, 8)];
+extern Gfx gUnknownEffStoneDL[12];
+extern Vtx gUnknownEffStoneVtx[];
+
+#endif
diff --git a/assets/objects/gameplay_keep/unused_arrow_icon_model_ntsc.c b/assets/objects/gameplay_keep/unused_arrow_icon_model_ntsc.c
new file mode 100644
index 0000000000..bf1ec33d42
--- /dev/null
+++ b/assets/objects/gameplay_keep/unused_arrow_icon_model_ntsc.c
@@ -0,0 +1,11 @@
+#include "unused_arrow_icon_model_ntsc.h"
+#include "item_drops_ntsc.h"
+#include "gfx.h"
+
+Vtx gUnusedArrowIconVtx[] = {
+#include "assets/objects/gameplay_keep/gUnusedArrowIconVtx.inc.c"
+};
+
+Gfx gUnusedArrowIconDL[17] = {
+#include "assets/objects/gameplay_keep/gUnusedArrowIconDL.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/unused_arrow_icon_model_ntsc.h b/assets/objects/gameplay_keep/unused_arrow_icon_model_ntsc.h
new file mode 100644
index 0000000000..3a98bdfc86
--- /dev/null
+++ b/assets/objects/gameplay_keep/unused_arrow_icon_model_ntsc.h
@@ -0,0 +1,12 @@
+#ifndef GAMEPLAY_KEEP_UNUSED_ARROW_ICON_MODEL_NTSC_H
+#define GAMEPLAY_KEEP_UNUSED_ARROW_ICON_MODEL_NTSC_H
+
+#include "ultra64.h"
+#include "region.h"
+
+#if OOT_REGION != REGION_EU
+extern Vtx gUnusedArrowIconVtx[];
+extern Gfx gUnusedArrowIconDL[17];
+#endif
+
+#endif
diff --git a/assets/objects/gameplay_keep/unused_bomb_icon_model_ntsc.c b/assets/objects/gameplay_keep/unused_bomb_icon_model_ntsc.c
new file mode 100644
index 0000000000..a2382e6ea6
--- /dev/null
+++ b/assets/objects/gameplay_keep/unused_bomb_icon_model_ntsc.c
@@ -0,0 +1,11 @@
+#include "unused_bomb_icon_model_ntsc.h"
+#include "item_drops_ntsc.h"
+#include "gfx.h"
+
+Vtx gUnusedBombIconVtx[] = {
+#include "assets/objects/gameplay_keep/gUnusedBombIconVtx.inc.c"
+};
+
+Gfx gUnusedBombIconDL[17] = {
+#include "assets/objects/gameplay_keep/gUnusedBombIconDL.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/unused_bomb_icon_model_ntsc.h b/assets/objects/gameplay_keep/unused_bomb_icon_model_ntsc.h
new file mode 100644
index 0000000000..c811b1c727
--- /dev/null
+++ b/assets/objects/gameplay_keep/unused_bomb_icon_model_ntsc.h
@@ -0,0 +1,12 @@
+#ifndef GAMEPLAY_KEEP_UNUSED_BOMB_ICON_MODEL_NTSC_H
+#define GAMEPLAY_KEEP_UNUSED_BOMB_ICON_MODEL_NTSC_H
+
+#include "ultra64.h"
+#include "region.h"
+
+#if OOT_REGION != REGION_EU
+extern Vtx gUnusedBombIconVtx[];
+extern Gfx gUnusedBombIconDL[17];
+#endif
+
+#endif
diff --git a/assets/objects/gameplay_keep/unused_bubbles.c b/assets/objects/gameplay_keep/unused_bubbles.c
new file mode 100644
index 0000000000..dcedf4f5e6
--- /dev/null
+++ b/assets/objects/gameplay_keep/unused_bubbles.c
@@ -0,0 +1,42 @@
+#include "unused_bubbles.h"
+#include "gfx.h"
+
+u64 gEffUnusedBubbles1Tex[TEX_LEN(u64, gEffUnusedBubbles1Tex_WIDTH, gEffUnusedBubbles1Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffUnusedBubbles1Tex.ia8.inc.c"
+};
+
+u64 gEffUnusedBubbles2Tex[TEX_LEN(u64, gEffUnusedBubbles2Tex_WIDTH, gEffUnusedBubbles2Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffUnusedBubbles2Tex.ia8.inc.c"
+};
+
+u64 gEffUnusedBubbles3Tex[TEX_LEN(u64, gEffUnusedBubbles3Tex_WIDTH, gEffUnusedBubbles3Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffUnusedBubbles3Tex.ia8.inc.c"
+};
+
+u64 gEffUnusedBubbles4Tex[TEX_LEN(u64, gEffUnusedBubbles4Tex_WIDTH, gEffUnusedBubbles4Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffUnusedBubbles4Tex.ia8.inc.c"
+};
+
+u64 gEffUnusedBubbles5Tex[TEX_LEN(u64, gEffUnusedBubbles5Tex_WIDTH, gEffUnusedBubbles5Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffUnusedBubbles5Tex.ia8.inc.c"
+};
+
+u64 gEffUnusedBubbles6Tex[TEX_LEN(u64, gEffUnusedBubbles6Tex_WIDTH, gEffUnusedBubbles6Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffUnusedBubbles6Tex.ia8.inc.c"
+};
+
+u64 gEffUnusedBubbles7Tex[TEX_LEN(u64, gEffUnusedBubbles7Tex_WIDTH, gEffUnusedBubbles7Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffUnusedBubbles7Tex.ia8.inc.c"
+};
+
+u64 gEffUnusedBubbles8Tex[TEX_LEN(u64, gEffUnusedBubbles8Tex_WIDTH, gEffUnusedBubbles8Tex_HEIGHT, 8)] = {
+#include "assets/objects/gameplay_keep/gEffUnusedBubbles8Tex.ia8.inc.c"
+};
+
+Gfx gEffUnusedBubblesDL[14] = {
+#include "assets/objects/gameplay_keep/gEffUnusedBubblesDL.inc.c"
+};
+
+Vtx gEffUnusedBubblesVtx[] = {
+#include "assets/objects/gameplay_keep/gEffUnusedBubblesVtx.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/unused_bubbles.h b/assets/objects/gameplay_keep/unused_bubbles.h
new file mode 100644
index 0000000000..6f28bc1f90
--- /dev/null
+++ b/assets/objects/gameplay_keep/unused_bubbles.h
@@ -0,0 +1,34 @@
+#ifndef GAMEPLAY_KEEP_UNUSED_BUBBLES_H
+#define GAMEPLAY_KEEP_UNUSED_BUBBLES_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+
+#define gEffUnusedBubbles1Tex_WIDTH 32
+#define gEffUnusedBubbles1Tex_HEIGHT 32
+extern u64 gEffUnusedBubbles1Tex[TEX_LEN(u64, gEffUnusedBubbles1Tex_WIDTH, gEffUnusedBubbles1Tex_HEIGHT, 8)];
+#define gEffUnusedBubbles2Tex_WIDTH 32
+#define gEffUnusedBubbles2Tex_HEIGHT 32
+extern u64 gEffUnusedBubbles2Tex[TEX_LEN(u64, gEffUnusedBubbles2Tex_WIDTH, gEffUnusedBubbles2Tex_HEIGHT, 8)];
+#define gEffUnusedBubbles3Tex_WIDTH 32
+#define gEffUnusedBubbles3Tex_HEIGHT 32
+extern u64 gEffUnusedBubbles3Tex[TEX_LEN(u64, gEffUnusedBubbles3Tex_WIDTH, gEffUnusedBubbles3Tex_HEIGHT, 8)];
+#define gEffUnusedBubbles4Tex_WIDTH 32
+#define gEffUnusedBubbles4Tex_HEIGHT 32
+extern u64 gEffUnusedBubbles4Tex[TEX_LEN(u64, gEffUnusedBubbles4Tex_WIDTH, gEffUnusedBubbles4Tex_HEIGHT, 8)];
+#define gEffUnusedBubbles5Tex_WIDTH 32
+#define gEffUnusedBubbles5Tex_HEIGHT 32
+extern u64 gEffUnusedBubbles5Tex[TEX_LEN(u64, gEffUnusedBubbles5Tex_WIDTH, gEffUnusedBubbles5Tex_HEIGHT, 8)];
+#define gEffUnusedBubbles6Tex_WIDTH 32
+#define gEffUnusedBubbles6Tex_HEIGHT 32
+extern u64 gEffUnusedBubbles6Tex[TEX_LEN(u64, gEffUnusedBubbles6Tex_WIDTH, gEffUnusedBubbles6Tex_HEIGHT, 8)];
+#define gEffUnusedBubbles7Tex_WIDTH 32
+#define gEffUnusedBubbles7Tex_HEIGHT 32
+extern u64 gEffUnusedBubbles7Tex[TEX_LEN(u64, gEffUnusedBubbles7Tex_WIDTH, gEffUnusedBubbles7Tex_HEIGHT, 8)];
+#define gEffUnusedBubbles8Tex_WIDTH 32
+#define gEffUnusedBubbles8Tex_HEIGHT 32
+extern u64 gEffUnusedBubbles8Tex[TEX_LEN(u64, gEffUnusedBubbles8Tex_WIDTH, gEffUnusedBubbles8Tex_HEIGHT, 8)];
+extern Gfx gEffUnusedBubblesDL[14];
+extern Vtx gEffUnusedBubblesVtx[];
+
+#endif
diff --git a/assets/objects/gameplay_keep/unused_heart_container_icon_model_ntsc.c b/assets/objects/gameplay_keep/unused_heart_container_icon_model_ntsc.c
new file mode 100644
index 0000000000..0299b05ca9
--- /dev/null
+++ b/assets/objects/gameplay_keep/unused_heart_container_icon_model_ntsc.c
@@ -0,0 +1,11 @@
+#include "unused_heart_container_icon_model_ntsc.h"
+#include "gameplay_keep_ntsc_0x46A40.h"
+#include "gfx.h"
+
+Vtx gUnusedHeartContainerIconVtx[] = {
+#include "assets/objects/gameplay_keep/gUnusedHeartContainerIconVtx.inc.c"
+};
+
+Gfx gUnusedHeartContainerIconDL[17] = {
+#include "assets/objects/gameplay_keep/gUnusedHeartContainerIconDL.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/unused_heart_container_icon_model_ntsc.h b/assets/objects/gameplay_keep/unused_heart_container_icon_model_ntsc.h
new file mode 100644
index 0000000000..4bc380b34a
--- /dev/null
+++ b/assets/objects/gameplay_keep/unused_heart_container_icon_model_ntsc.h
@@ -0,0 +1,12 @@
+#ifndef GAMEPLAY_KEEP_UNUSED_HEART_CONTAINER_ICON_MODEL_NTSC_H
+#define GAMEPLAY_KEEP_UNUSED_HEART_CONTAINER_ICON_MODEL_NTSC_H
+
+#include "ultra64.h"
+#include "region.h"
+
+#if OOT_REGION != REGION_EU
+extern Vtx gUnusedHeartContainerIconVtx[];
+extern Gfx gUnusedHeartContainerIconDL[17];
+#endif
+
+#endif
diff --git a/assets/objects/gameplay_keep/unused_heart_icon_model_ntsc.c b/assets/objects/gameplay_keep/unused_heart_icon_model_ntsc.c
new file mode 100644
index 0000000000..018bb9de95
--- /dev/null
+++ b/assets/objects/gameplay_keep/unused_heart_icon_model_ntsc.c
@@ -0,0 +1,11 @@
+#include "unused_heart_icon_model_ntsc.h"
+#include "item_drops_ntsc.h"
+#include "gfx.h"
+
+Vtx gUnusedHeartIconVtx[] = {
+#include "assets/objects/gameplay_keep/gUnusedHeartIconVtx.inc.c"
+};
+
+Gfx gUnusedHeartIconDL[17] = {
+#include "assets/objects/gameplay_keep/gUnusedHeartIconDL.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/unused_heart_icon_model_ntsc.h b/assets/objects/gameplay_keep/unused_heart_icon_model_ntsc.h
new file mode 100644
index 0000000000..657a8f24ba
--- /dev/null
+++ b/assets/objects/gameplay_keep/unused_heart_icon_model_ntsc.h
@@ -0,0 +1,12 @@
+#ifndef GAMEPLAY_KEEP_UNUSED_HEART_ICON_MODEL_NTSC_H
+#define GAMEPLAY_KEEP_UNUSED_HEART_ICON_MODEL_NTSC_H
+
+#include "ultra64.h"
+#include "region.h"
+
+#if OOT_REGION != REGION_EU
+extern Vtx gUnusedHeartIconVtx[];
+extern Gfx gUnusedHeartIconDL[17];
+#endif
+
+#endif
diff --git a/assets/objects/gameplay_keep/unused_heart_piece_icon_tex_ntsc.c b/assets/objects/gameplay_keep/unused_heart_piece_icon_tex_ntsc.c
new file mode 100644
index 0000000000..9b34ac2b27
--- /dev/null
+++ b/assets/objects/gameplay_keep/unused_heart_piece_icon_tex_ntsc.c
@@ -0,0 +1,5 @@
+#include "unused_heart_piece_icon_tex_ntsc.h"
+
+u64 gUnusedHeartPieceIconTex[TEX_LEN(u64, gUnusedHeartPieceIconTex_WIDTH, gUnusedHeartPieceIconTex_HEIGHT, 16)] = {
+#include "assets/objects/gameplay_keep/gUnusedHeartPieceIconTex.rgba16.inc.c"
+};
diff --git a/assets/objects/gameplay_keep/unused_heart_piece_icon_tex_ntsc.h b/assets/objects/gameplay_keep/unused_heart_piece_icon_tex_ntsc.h
new file mode 100644
index 0000000000..ed4e24f0b2
--- /dev/null
+++ b/assets/objects/gameplay_keep/unused_heart_piece_icon_tex_ntsc.h
@@ -0,0 +1,14 @@
+#ifndef GAMEPLAY_KEEP_UNUSED_HEART_PIECE_ICON_TEX_NTSC_H
+#define GAMEPLAY_KEEP_UNUSED_HEART_PIECE_ICON_TEX_NTSC_H
+
+#include "tex_len.h"
+#include "ultra64.h"
+#include "region.h"
+
+#if OOT_REGION != REGION_EU
+#define gUnusedHeartPieceIconTex_WIDTH 32
+#define gUnusedHeartPieceIconTex_HEIGHT 32
+extern u64 gUnusedHeartPieceIconTex[TEX_LEN(u64, gUnusedHeartPieceIconTex_WIDTH, gUnusedHeartPieceIconTex_HEIGHT, 16)];
+#endif
+
+#endif
diff --git a/assets/xml/objects/gameplay_keep.xml b/assets/xml/objects/gameplay_keep.xml
index ce2c7fb7d4..b8e20ab429 100644
--- a/assets/xml/objects/gameplay_keep.xml
+++ b/assets/xml/objects/gameplay_keep.xml
@@ -628,8 +628,8 @@
-
-
+
+
@@ -640,11 +640,11 @@
-
-
-
-
-
+
+
+
+
+
@@ -737,10 +737,10 @@
-
-
-
-
+
+
+
+
@@ -753,8 +753,8 @@
-
-
+
+
@@ -771,8 +771,8 @@
-
-
+
+
@@ -811,20 +811,20 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -836,26 +836,26 @@
-
+
-
+
-
+
-
-
-
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
@@ -1010,85 +1010,85 @@
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1129,18 +1129,18 @@
-
+
-
-
+
+
-
-
+
+
-
+
@@ -1205,10 +1205,10 @@
-
+
-
+
@@ -1223,12 +1223,12 @@
-
+
-
+
@@ -1251,15 +1251,15 @@
-
-
-
+
+
+
-
-
+
+
diff --git a/assets/xml/objects/gameplay_keep_pal.xml b/assets/xml/objects/gameplay_keep_pal.xml
index 9e792020bf..04387392fb 100644
--- a/assets/xml/objects/gameplay_keep_pal.xml
+++ b/assets/xml/objects/gameplay_keep_pal.xml
@@ -628,8 +628,8 @@
-
-
+
+
@@ -640,11 +640,11 @@
-
-
-
-
-
+
+
+
+
+
@@ -687,6 +687,7 @@
+
@@ -728,10 +729,10 @@
-
-
-
-
+
+
+
+
@@ -744,8 +745,8 @@
-
-
+
+
@@ -762,8 +763,8 @@
-
-
+
+
@@ -802,20 +803,20 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -841,12 +842,12 @@
-
-
-
-
-
-
+
+
+
+
+
+
@@ -1001,85 +1002,85 @@
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_haka_objects.xml b/assets/xml/objects/object_haka_objects.xml
index 2325e663a8..7e0195e148 100644
--- a/assets/xml/objects/object_haka_objects.xml
+++ b/assets/xml/objects/object_haka_objects.xml
@@ -5,52 +5,52 @@
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
@@ -60,44 +60,44 @@
-
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
+
-
-
+
+
@@ -148,7 +148,7 @@
-
+
diff --git a/assets/xml/objects/object_hakach_objects.xml b/assets/xml/objects/object_hakach_objects.xml
index 92679bc8de..73e1b8f52e 100644
--- a/assets/xml/objects/object_hakach_objects.xml
+++ b/assets/xml/objects/object_hakach_objects.xml
@@ -4,30 +4,30 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -38,9 +38,9 @@
-
-
-
+
+
+
diff --git a/docs/audio/Soundfont_XML.md b/docs/audio/Soundfont_XML.md
index c2d8a572ed..5e532c1206 100644
--- a/docs/audio/Soundfont_XML.md
+++ b/docs/audio/Soundfont_XML.md
@@ -147,6 +147,7 @@ Begins a new soundfont.
Name=""
SampleRate="[Sample Rate]"
BaseNote="[Note Name]"
+ FineTune="[Fine Tune]"
IsDD="[Bool]"
Cached="[Bool]"
/>
@@ -158,6 +159,7 @@ Begins a new soundfont.
- **Name**: The name of this sample. A sample with this name must be present in the samplebank used by the soundfont.
- [Optional] **SampleRate**: An overriding sample rate for this sample. **Default comes from the sample file.**
- [Optional] **BaseNote**: An overriding root key for this sample. **Default comes from the sample file.**
+ - [Optional] **FineTune**: An overriding fine tuning for this sample, in cents, in the range [-100, 100]. **Default comes from the sample file.**
- [Optional] **IsDD**: Whether this sample is on the Disk Drive. The sample data will come from the samplebank `SampleBankDD`. **Default is `false`.** **NOTE this is not fully implemented, it should always be `false`.**
- [Optional] **Cached**: Whether this sample should be added to the `usedSamples` cache. **Default is `false`.**
@@ -187,6 +189,7 @@ Begins a new soundfont.
Sample=""
SampleRate="[Sample Rate]"
BaseNote="[Note Name]"
+ FineTune="[Fine Tune]"
/>
```
Defines a single sound effect.
@@ -196,6 +199,7 @@ Begins a new soundfont.
- **Sample**: The name of the sample associated with this effect.
- [Optional] **SampleRate**: An overriding sample rate for this effect. **Default comes from the sample definition.**
- [Optional] **BaseNote**: An overriding root key for this effect. **Default comes from the sample definition.**
+ - [Optional] **FineTune**: An overriding fine tuning for this effect, in cents, in the range [-100, 100]. **Default comes from the sample definition.**
---
@@ -229,6 +233,7 @@ Begins a new soundfont.
Sample=""
SampleRate="[Sample Rate]"
BaseNote="[Note Name]"
+ FineTune="[Fine Tune]"
/>
```
Defines a single percussion range.
@@ -244,6 +249,7 @@ Begins a new soundfont.
- **Sample**: The name of the sample to use.
- [Optional] **SampleRate**: An overriding sample rate for this sound. **Default comes from the sample definition.**
- [Optional] **BaseNote**: An overriding root key for this sound. **Default comes from the sample definition.**
+ - [Optional] **FineTune**: An overriding fine tuning for this sound, in cents, in the range [-100, 100]. **Default comes from the sample definition.**
---
@@ -275,16 +281,19 @@ Begins a new soundfont.
Sample=""
SampleRate="[Sample Rate]"
BaseNote="[Note Name]"
+ FineTune="[Fine Tune]"
RangeLo="[Note Name]"
SampleLo="[Sample Name]"
SampleRateLo="[Sample Rate]"
BaseNoteLo="[Note Name]"
+ FineTuneLo="[Fine Tune]"
RangeHi="[Note Name]"
SampleHi="[Sample Name]"
SampleRateHi="[Sample Rate]"
BaseNoteHi="[Note Name]"
+ FineTuneHi="[Fine Tune]"
/>
```
Defines an instrument.
@@ -297,14 +306,17 @@ Begins a new soundfont.
- **Sample**: The name of the middle sample to use for this instrument.
- [Optional] **SampleRate**: Sample rate override for the middle sample. **Default is sourced from the sample properties.**
- [Optional] **BaseNote**: Base note override for the middle sample. **Default is sourced from the sample properties.**
+ - [Optional] **FineTune**: Fine tuning override for the middle sample, in cents, in the range [-100, 100]. **Default is sourced from the sample properties.**
- [Optional] **RangeLo**: The largest note for SampleLo. SampleLo will be used instead of Sample for keys in the range [0, RangeLo]. **If left unspecified, SampleLo must not be specified. If specified, SampleLo must be specified.**
- [Optional] **SampleLo**: The name of the low sample to use for this instrument.
- [Optional] **SampleRateLo**: Sample rate override for the low sample. **Default is sourced from the sample properties.**
- [Optional] **BaseNoteLo**: Base note override for the low sample. **Default is sourced from the sample properties.**
+ - [Optional] **FineTuneLo**: Fine tuning override for the low sample, in cents, in the range [-100, 100]. **Default is sourced from the sample properties.**
- [Optional] **RangeHi**: The smallest note for SampleHi. SampleHi will be used instead of Sample for keys in the range [RangeHi, 127]. **If left unspecified, SampleHi must not be specified. If specified, SampleHi must be specified.**
- [Optional] **SampleHi**: The name of the high sample to use for this instrument.
- [Optional] **SampleRateHi**: Sample rate override for the high sample. **Default is sourced from the sample properties.**
- [Optional] **BaseNoteHi**: Base note override for the high sample. **Default is sourced from the sample properties.**
+ - [Optional] **FineTuneHi**: Fine tuning override for the high sample, in cents, in the range [-100, 100]. **Default is sourced from the sample properties.**
---
diff --git a/include/environment.h b/include/environment.h
index 6c23dfb336..1c820ffebd 100644
--- a/include/environment.h
+++ b/include/environment.h
@@ -155,8 +155,10 @@ typedef struct CurrentEnvLightSettings {
// The blendRate determines how fast the current light settings fade to the next one
// (under LIGHT_MODE_SETTINGS, otherwise unused).
+#define BLEND_RATE_AND_FOG_NEAR(blendRate, fogNear) (s16)((((blendRate) / 4) << 10) | (fogNear))
+
// 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_BLEND_RATE_U8(blendRateAndFogNear) (u8)(((blendRateAndFogNear) >> 10) * 4)
#define ENV_LIGHT_SETTINGS_FOG_NEAR(blendRateAndFogNear) ((blendRateAndFogNear) & 0x3FF)
typedef struct EnvLightSettings {
diff --git a/include/n64dd.h b/include/n64dd.h
index f7a3f649ca..e5b1b7aa31 100644
--- a/include/n64dd.h
+++ b/include/n64dd.h
@@ -155,7 +155,7 @@ extern vu8 D_80121214;
extern s32 (*D_801D2E54)(struct_801E0D18*);
-extern u8 B_801DC000[];
+extern u8 gN64DDDiskReadTemporaryBuffer[];
extern s32 D_801D2E90;
extern OSMesgQueue* B_801E0D10[2];
@@ -167,7 +167,7 @@ extern s32 B_801E0F64;
extern void (*D_801D2EB4)(void*, void*, void*);
// Error messages
-extern const char* D_801D2ED0[]; // "Error Number " array
+extern const char* gN64DDLocalizedErrorNumberHeaders[]; // "Error Number " array
extern const char* D_801D2EE0[2][8][4]; // Array of error message strings
// Error textures
diff --git a/include/regs.h b/include/regs.h
index 187939cf58..a59e059ab8 100644
--- a/include/regs.h
+++ b/include/regs.h
@@ -126,6 +126,7 @@ struct PlayState;
#define R_EPONAS_SONG_PLAYED DREG(53)
#define R_MAGIC_FILL_COLOR(i) ZREG(0 + (i))
#define R_PAUSE_PAGE_SWITCH_FRAME_ADVANCE_ON ZREG(13)
+#define R_PAUSE_BUTTON_L_R_SELECTED_PRIM_TIMER ZREG(28)
#define R_C_BTN_COLOR(i) ZREG(39 + (i))
#define R_B_BTN_COLOR(i) ZREG(43 + (i))
#if OOT_NTSC
@@ -192,6 +193,7 @@ struct PlayState;
#define R_B_LABEL_DD WREG(0)
#define R_PAUSE_PAGES_Y_ORIGIN_2 WREG(2) // Complements PauseContext.pagesYOrigin1
#define R_PAUSE_DEPTH_OFFSET WREG(3) // Offset position of all pages away from the camera
+#define R_PAUSE_UI_ANIMS_DURATION WREG(6)
#if OOT_NTSC
#define R_B_LABEL_SCALE(i) WREG(8 + (i))
#define R_B_LABEL_X(i) WREG(10 + (i))
@@ -201,6 +203,8 @@ struct PlayState;
#define R_PAUSE_BUTTON_LEFT_X WREG(16)
#define R_PAUSE_BUTTON_RIGHT_X WREG(17)
#define R_PAUSE_BUTTON_LEFT_RIGHT_Y WREG(18)
+#define R_PAUSE_BUTTON_LEFT_MOVE_OFFSET_X WREG(25)
+#define R_PAUSE_BUTTON_RIGHT_MOVE_OFFSET_X WREG(26)
#define R_OW_MINIMAP_X WREG(29)
#define R_OW_MINIMAP_Y WREG(30)
#define R_MINIMAP_DISABLED WREG(31)
diff --git a/include/save.h b/include/save.h
index c69227a42e..71a1a311f0 100644
--- a/include/save.h
+++ b/include/save.h
@@ -895,8 +895,8 @@ typedef enum LinkAge {
#define INFTABLE_142 0x142
#define INFTABLE_143 0x143
#define INFTABLE_BROUGHT_RUTO_TO_SAPPHIRE_ROOM 0x144
-#define INFTABLE_145 0x145
-#define INFTABLE_146 0x146
+#define INFTABLE_RUTO_HAS_SAPPHIRE 0x145
+#define INFTABLE_RUTO_ABDUCTED 0x146
#define INFTABLE_BROUGHT_RUTO_BACK_TO_HOLES_ROOM 0x147
#define INFTABLE_160 0x160
#define INFTABLE_161 0x161
diff --git a/include/scene.h b/include/scene.h
index 8e5b1a100c..5aafc40169 100644
--- a/include/scene.h
+++ b/include/scene.h
@@ -400,13 +400,13 @@ typedef enum NaviQuestHintFileId {
// Scene commands
typedef enum SceneCommandTypeID {
- /* 0x00 */ SCENE_CMD_ID_SPAWN_LIST,
+ /* 0x00 */ SCENE_CMD_ID_PLAYER_ENTRY_LIST,
/* 0x01 */ SCENE_CMD_ID_ACTOR_LIST,
/* 0x02 */ SCENE_CMD_ID_UNUSED_2,
/* 0x03 */ SCENE_CMD_ID_COLLISION_HEADER,
/* 0x04 */ SCENE_CMD_ID_ROOM_LIST,
/* 0x05 */ SCENE_CMD_ID_WIND_SETTINGS,
- /* 0x06 */ SCENE_CMD_ID_ENTRANCE_LIST,
+ /* 0x06 */ SCENE_CMD_ID_SPAWN_LIST,
/* 0x07 */ SCENE_CMD_ID_SPECIAL_FILES,
/* 0x08 */ SCENE_CMD_ID_ROOM_BEHAVIOR,
/* 0x09 */ SCENE_CMD_ID_UNDEFINED_9,
@@ -429,8 +429,8 @@ typedef enum SceneCommandTypeID {
/* 0x1A */ SCENE_CMD_ID_MAX
} SceneCommandTypeID;
-#define SCENE_CMD_SPAWN_LIST(numSpawns, spawnList) \
- { SCENE_CMD_ID_SPAWN_LIST, numSpawns, CMD_PTR(spawnList) }
+#define SCENE_CMD_PLAYER_ENTRY_LIST(length, playerEntryList) \
+ { SCENE_CMD_ID_PLAYER_ENTRY_LIST, length, CMD_PTR(playerEntryList) }
#define SCENE_CMD_ACTOR_LIST(numActors, actorList) \
{ SCENE_CMD_ID_ACTOR_LIST, numActors, CMD_PTR(actorList) }
@@ -447,8 +447,8 @@ typedef enum SceneCommandTypeID {
#define SCENE_CMD_WIND_SETTINGS(xDir, yDir, zDir, strength) \
{ SCENE_CMD_ID_WIND_SETTINGS, 0, CMD_BBBB(xDir, yDir, zDir, strength) }
-#define SCENE_CMD_ENTRANCE_LIST(entranceList) \
- { SCENE_CMD_ID_ENTRANCE_LIST, 0, CMD_PTR(entranceList) }
+#define SCENE_CMD_SPAWN_LIST(spawnList) \
+ { SCENE_CMD_ID_SPAWN_LIST, 0, CMD_PTR(spawnList) }
#define SCENE_CMD_SPECIAL_FILES(naviQuestHintFileId, keepObjectId) \
{ SCENE_CMD_ID_SPECIAL_FILES, naviQuestHintFileId, CMD_W(keepObjectId) }
diff --git a/include/sys_freeze.h b/include/sys_freeze.h
index 0e033cacd9..6ccf6dca33 100644
--- a/include/sys_freeze.h
+++ b/include/sys_freeze.h
@@ -3,6 +3,6 @@
#include "attributes.h"
-NORETURN void func_800D31A0(void);
+NORETURN void Freeze_CurrentThread(void);
#endif
diff --git a/include/tables/sequence_table.h b/include/tables/sequence_table.h
index 70ccfcbae1..7c11c6ad81 100644
--- a/include/tables/sequence_table.h
+++ b/include/tables/sequence_table.h
@@ -114,7 +114,7 @@ DEFINE_SEQUENCE (Sequence_90, NA_BGM_OWL, MEDIUM_CART, CA
DEFINE_SEQUENCE (Sequence_91, NA_BGM_SHADOW_TEMPLE, MEDIUM_CART, CACHE_LOAD_TEMPORARY, SEQ_FLAG_ENEMY ) // shadow_temple
DEFINE_SEQUENCE (Sequence_92, NA_BGM_WATER_TEMPLE, MEDIUM_CART, CACHE_LOAD_TEMPORARY, SEQ_FLAG_ENEMY ) // water_temple
DEFINE_SEQUENCE (Sequence_93, NA_BGM_BRIDGE_TO_GANONS, MEDIUM_CART, CACHE_LOAD_PERSISTENT, SEQ_FLAG_FANFARE ) // bridge_to_ganons
-DEFINE_SEQUENCE (Sequence_94, NA_BGM_OCARINA_OF_TIME, MEDIUM_CART, CACHE_LOAD_TEMPORARY, 0 ) // ocarina_of_time
+DEFINE_SEQUENCE (Sequence_94, NA_BGM_SEAL_OF_SAGES, MEDIUM_CART, CACHE_LOAD_TEMPORARY, 0 ) // seal_of_sages
DEFINE_SEQUENCE (Sequence_95, NA_BGM_GERUDO_VALLEY, MEDIUM_CART, CACHE_LOAD_TEMPORARY, SEQ_FLAG_RESUME | SEQ_FLAG_ENEMY ) // gerudo_valley
DEFINE_SEQUENCE (Sequence_96, NA_BGM_POTION_SHOP, MEDIUM_CART, CACHE_LOAD_TEMPORARY, 0 ) // potion_shop
DEFINE_SEQUENCE (Sequence_97, NA_BGM_KOTAKE_KOUME, MEDIUM_CART, CACHE_LOAD_TEMPORARY, 0 ) // kotake_koume
@@ -122,7 +122,7 @@ DEFINE_SEQUENCE (Sequence_98, NA_BGM_ESCAPE, MEDIUM_CART, CA
DEFINE_SEQUENCE (Sequence_99, NA_BGM_UNDERGROUND, MEDIUM_CART, CACHE_LOAD_TEMPORARY, 0 ) // underground
DEFINE_SEQUENCE (Sequence_100, NA_BGM_GANONDORF_BOSS, MEDIUM_CART, CACHE_LOAD_TEMPORARY, SEQ_FLAG_NO_AMBIENCE ) // ganondorf_boss
DEFINE_SEQUENCE (Sequence_101, NA_BGM_GANON_BOSS, MEDIUM_CART, CACHE_LOAD_TEMPORARY, SEQ_FLAG_NO_AMBIENCE ) // ganon_boss
-DEFINE_SEQUENCE (Sequence_102, NA_BGM_END_DEMO, MEDIUM_CART, CACHE_LOAD_TEMPORARY, 0 ) // end_demo
+DEFINE_SEQUENCE (Sequence_102, NA_BGM_OCARINA_OF_TIME, MEDIUM_CART, CACHE_LOAD_TEMPORARY, 0 ) // ocarina_of_time
DEFINE_SEQUENCE (Sequence_103, NA_BGM_STAFF_1, MEDIUM_CART, CACHE_LOAD_TEMPORARY, 0 ) // staff_1
DEFINE_SEQUENCE (Sequence_104, NA_BGM_STAFF_2, MEDIUM_CART, CACHE_LOAD_TEMPORARY, 0 ) // staff_2
DEFINE_SEQUENCE (Sequence_105, NA_BGM_STAFF_3, MEDIUM_CART, CACHE_LOAD_TEMPORARY, 0 ) // staff_3
diff --git a/spec/spec b/spec/spec
index fafd378adc..bb90b4ef15 100644
--- a/spec/spec
+++ b/spec/spec
@@ -3,6 +3,7 @@
*/
#include "include/versions.h"
+#include "include/region.h"
beginseg
name "makerom"
@@ -996,7 +997,147 @@ beginseg
name "gameplay_keep"
compress
romalign 0x1000
- include "$(BUILD_DIR)/assets/objects/gameplay_keep/gameplay_keep.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/hilite_textures.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/link_textures.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/player_pause_joint_tables.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/player_anim_headers.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/debug_models.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gArrow1_Anim.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gArrow2_Anim.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/arrow_skel.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/unk_eff_blure_tex.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/bomb_body.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/bomb_cap.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/bombchu_body.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/eff_bomb_explosion.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/eff_fragments_1.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/boomerang.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/compass_arrow.o"
+#if OOT_REGION != REGION_EU
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gameplay_keep_ntsc_0xC880.o"
+#endif
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/lock_on_arrow.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/hilite3_tex.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/eff_fragments_2_model.o"
+#if OOT_REGION != REGION_EU
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gameplay_keep_ntsc_0xCE60.o"
+#endif
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/shopkeeper_controls_tex.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/rock_fragments_model.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/rock_fragments_tex.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gDoorChildOpeningLeftAnim.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gDoorChildOpeningRightAnim.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gDoorAdultOpeningLeftAnim.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/door_skel.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gDoorAdultOpeningRightAnim.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/eff_dust.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/eff_flash.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/spin_attack.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gameplay_keep_0x13700.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/fairy_anim.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/fairy_skel.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gameplay_keep_0x16A50.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/hilite4_tex.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gameplay_keep_0x173D0.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gFishOutOfWaterAnim.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gameplay_keep_0x18610.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gFishInWaterAnim.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/eff_shockwave.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/eff_bubble.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/eff_fire_footprint.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/unused_bubbles.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/lens_mask_tex.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/eff_hitmark.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gameplay_keep_0x21810.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/eff_magma_bubble.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/eff_water_ripple.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/eff_spark_model.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/eff_water_splash.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/unknown_eff_stone.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/eff_lightning.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/eff_enemy_death_flame.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gameplay_keep_0x32090.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gameplay_keep_0x33090.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/eff_ice_fragments.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gameplay_keep_0x33910.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gBugCrawlAnim.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/bug_skel.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/cuttable_shrub.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/lens_flare.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/eff_sparkles.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/hover_boots_circle.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/moon.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gameplay_keep_0x38FB0.o"
+#if OOT_REGION != REGION_EU
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gameplay_keep_ntsc_0x39850.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/unused_bomb_icon_model_ntsc.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/unused_heart_icon_model_ntsc.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/unused_arrow_icon_model_ntsc.o"
+#endif
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gLargerCubeCol.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/liftable_rock_model.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gameplay_keep_0x39710.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gWideTallBlockCol.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/flat_block_model.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gTallBlockCol.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gameplay_keep_0x39DF0.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/small_flat_block_col.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/flat_rot_block_model.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gLargerFlatBlockCol.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/small_cube_model.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/small_cube_col.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/tree_stump_model.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/grass_blades_model.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gameplay_keep_0x3AC30.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/heart_piece_interior_model.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gameplay_keep_0x3B1E0.o"
+#if OOT_REGION != REGION_EU
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gameplay_keep_ntsc_0x3C610.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/unused_heart_container_icon_model_ntsc.o"
+#endif
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/rectangular_sign_model.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/directional_sign_model.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gameplay_keep_0x3C870.o"
+#if OOT_REGION != REGION_EU
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gameplay_keep_ntsc_0x3FD80.o"
+#endif
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/drop_recovery_heart_tex.o"
+#if OOT_REGION != REGION_EU
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/unused_heart_piece_icon_tex_ntsc.o"
+#endif
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/item_drop_dl.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gameplay_keep_0x3F140.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/rupee.o"
+#if OOT_REGION != REGION_EU
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/item_drops_ntsc.o"
+#endif
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/rupee_light_red_tex.o"
+#if OOT_REGION != REGION_EU
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gameplay_keep_ntsc_0x46A40.o"
+#endif
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gameplay_keep_0x42530.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gameplay_keep_0x43530.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gameplay_keep_0x44530.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gameplay_keep_0x45530.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gameplay_keep_0x45D30.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/sign_textures.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/raindrop_model.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/shadow_foot.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/shadow_circle.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/shadow_horse.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gameplay_keep_0x49F20.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gameplay_keep_0x4A090.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/sun_textures.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/sun_evening_textures.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gameplay_keep_0x4D160.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/lock_on_reticle.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/eff_fire.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gameplay_keep_0x4E660.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gameplay_keep_0x515B0.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/dust_textures.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/circle_glow_textures.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/gameplay_keep_0x55DB0.o"
+ include "$(BUILD_DIR)/assets/objects/gameplay_keep/eff_spark_textures.o"
number 4
endseg
diff --git a/src/boot/boot_main.c b/src/boot/boot_main.c
index cfe011ac33..91b74cbe9f 100644
--- a/src/boot/boot_main.c
+++ b/src/boot/boot_main.c
@@ -36,7 +36,7 @@ void bootproc(void) {
gCartHandle = osCartRomInit();
osDriveRomInit();
-#if DEBUG_FEATURES
+#if DEBUG_FEATURES && !PLATFORM_IQUE
isPrintfInit();
#endif
Locale_Init();
diff --git a/src/code/graph.c b/src/code/graph.c
index 56fc7af60c..c6b5f3cb61 100644
--- a/src/code/graph.c
+++ b/src/code/graph.c
@@ -141,6 +141,13 @@ void Graph_InitTHGA(GraphicsContext* gfxCtx) {
gfxCtx->overlayBuffer = pool->overlayBuffer;
gfxCtx->workBuffer = pool->workBuffer;
+ //! @bug fbIdx is a signed integer that can overflow into the negatives. When compiled with a C99+ compiler or IDO,
+ //! the remainder operator will yield -1 for odd negative values of fbIdx.
+ //! This causes SysCfb_GetFbPtr to read beyond the bounds of an array when retrieving the framebuffer pointer, which
+ //! will likely crash the game.
+ //!
+ //! This isn't an issue in practice. In the worst case scenario with the game operating at a consistent 60 FPS,
+ //! it would take approximately 414.25 days of continuous operation for fbIdx to overflow.
gfxCtx->curFrameBuffer = SysCfb_GetFbPtr(gfxCtx->fbIdx % 2);
gfxCtx->unk_014 = 0;
}
diff --git a/src/code/sys_freeze.c b/src/code/sys_freeze.c
index 2957155559..e4e1dccd9b 100644
--- a/src/code/sys_freeze.c
+++ b/src/code/sys_freeze.c
@@ -4,7 +4,19 @@
#include "sys_freeze.h"
#include "terminal.h"
-NORETURN void func_800D31A0(void) {
+/**
+ * Halts the calling thread forever (this neither destroys it nor affects other threads).
+ * This may be used to halt execution in the event of an irrecoverable error without triggering
+ * the crash screen or otherwise halting the rest of the programs, other threads will continue
+ * to run as normal.
+ *
+ * @note In practice, use of this function is very rare, only occuring in a few N64DD-related
+ * codepaths. In most cases where one needs to halt execution due to a critical error,
+ * it is more appropriate to use Fault_AddHangupAndCrash or related functions.
+ *
+ * @see Fault_AddHungupAndCrash
+ */
+NORETURN void Freeze_CurrentThread(void) {
PRINTF(VT_FGCOL(RED) "\n**** Freeze!! ****\n" VT_RST);
for (;;) {
Sleep_Msec(1000);
diff --git a/src/code/z_actor.c b/src/code/z_actor.c
index 7501925080..4a86cf25c5 100644
--- a/src/code/z_actor.c
+++ b/src/code/z_actor.c
@@ -31,7 +31,13 @@
#include "overlays/actors/ovl_Arms_Hook/z_arms_hook.h"
#include "overlays/actors/ovl_En_Part/z_en_part.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/shadow_circle.h"
+#include "assets/objects/gameplay_keep/shadow_horse.h"
+#include "assets/objects/gameplay_keep/shadow_foot.h"
+#include "assets/objects/gameplay_keep/lock_on_reticle.h"
+#include "assets/objects/gameplay_keep/lock_on_arrow.h"
+#include "assets/objects/gameplay_keep/eff_flash.h"
+#include "assets/objects/gameplay_keep/lens_mask_tex.h"
#include "assets/objects/gameplay_dangeon_keep/gameplay_dangeon_keep.h"
#include "assets/objects/object_bdoor/object_bdoor.h"
diff --git a/src/code/z_construct.c b/src/code/z_construct.c
index 92c84de000..179012b43e 100644
--- a/src/code/z_construct.c
+++ b/src/code/z_construct.c
@@ -352,7 +352,7 @@ void Regs_InitDataImpl(void) {
ZREG(25) = 4;
ZREG(26) = 20;
ZREG(27) = 10;
- ZREG(28) = 20;
+ R_PAUSE_BUTTON_L_R_SELECTED_PRIM_TIMER = 20;
ZREG(29) = 4;
ZREG(30) = 20;
ZREG(31) = 10;
@@ -557,8 +557,8 @@ void Regs_InitDataImpl(void) {
WREG(22) = -32;
WREG(23) = -38;
WREG(24) = -36;
- WREG(25) = 40;
- WREG(26) = -40;
+ R_PAUSE_BUTTON_LEFT_MOVE_OFFSET_X = 40;
+ R_PAUSE_BUTTON_RIGHT_MOVE_OFFSET_X = -40;
WREG(27) = 0;
WREG(28) = 0;
R_OW_MINIMAP_X = 238;
diff --git a/src/code/z_debug_display.c b/src/code/z_debug_display.c
index 1481e22fe7..5f2131262e 100644
--- a/src/code/z_debug_display.c
+++ b/src/code/z_debug_display.c
@@ -4,7 +4,7 @@
#include "play_state.h"
#include "debug_display.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/debug_models.h"
typedef struct DebugDispObjectInfo {
/* 0x00 */ s16 drawType; // indicates which draw function to use when displaying the object
diff --git a/src/code/z_eff_blure.c b/src/code/z_eff_blure.c
index a5df803229..fffef14751 100644
--- a/src/code/z_eff_blure.c
+++ b/src/code/z_eff_blure.c
@@ -9,7 +9,7 @@
#include "effect.h"
#include "skin_matrix.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/unk_eff_blure_tex.h"
void EffectBlure_AddVertex(EffectBlure* this, Vec3f* p1, Vec3f* p2) {
EffectBlureElement* elem;
diff --git a/src/code/z_eff_shield_particle.c b/src/code/z_eff_shield_particle.c
index 051731fd87..f81d7d56c8 100644
--- a/src/code/z_eff_shield_particle.c
+++ b/src/code/z_eff_shield_particle.c
@@ -10,7 +10,7 @@
#include "play_state.h"
#include "skin_matrix.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/gameplay_keep_0x38FB0.h"
static Vtx sVertices[5] = {
VTX(-32, -32, 0, 0, 1024, 0xFF, 0xFF, 0xFF, 0xFF),
diff --git a/src/code/z_eff_spark.c b/src/code/z_eff_spark.c
index ae6a84c47d..9e02cbf4f8 100644
--- a/src/code/z_eff_spark.c
+++ b/src/code/z_eff_spark.c
@@ -9,7 +9,7 @@
#include "play_state.h"
#include "skin_matrix.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/gameplay_keep_0x38FB0.h"
// original name: "spark"
void EffectSpark_Init(void* thisx, void* initParamsx) {
diff --git a/src/code/z_en_a_keep.c b/src/code/z_en_a_keep.c
index 7b84c9bd38..e32c65a5b9 100644
--- a/src/code/z_en_a_keep.c
+++ b/src/code/z_en_a_keep.c
@@ -6,7 +6,18 @@
#include "z_lib.h"
#include "play_state.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/gLargerCubeCol.h"
+#include "assets/objects/gameplay_keep/small_flat_block_col.h"
+#include "assets/objects/gameplay_keep/gLargerFlatBlockCol.h"
+#include "assets/objects/gameplay_keep/small_cube_col.h"
+#include "assets/objects/gameplay_keep/flat_block_model.h"
+#include "assets/objects/gameplay_keep/flat_rot_block_model.h"
+#include "assets/objects/gameplay_keep/small_cube_model.h"
+#include "assets/objects/gameplay_keep/grass_blades_model.h"
+#include "assets/objects/gameplay_keep/tree_stump_model.h"
+#include "assets/objects/gameplay_keep/rectangular_sign_model.h"
+#include "assets/objects/gameplay_keep/directional_sign_model.h"
+#include "assets/objects/gameplay_keep/rock_fragments_model.h"
#include "assets/objects/object_d_hsblock/object_d_hsblock.h"
#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
diff --git a/src/code/z_en_item00.c b/src/code/z_en_item00.c
index 0a92bc66ce..3cddc6a9fd 100644
--- a/src/code/z_en_item00.c
+++ b/src/code/z_en_item00.c
@@ -19,7 +19,13 @@
#include "player.h"
#include "save.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/rupee.h"
+#include "assets/objects/gameplay_keep/drop_recovery_heart_tex.h"
+#include "assets/objects/gameplay_keep/item_drop_dl.h"
+#include "assets/objects/gameplay_keep/gameplay_keep_0x3C870.h"
+#include "assets/objects/gameplay_keep/gameplay_keep_0x3F140.h"
+#include "assets/objects/gameplay_keep/gameplay_keep_0x3B1E0.h"
+#include "assets/objects/gameplay_keep/heart_piece_interior_model.h"
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-eu-mq-dbg:0 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128" \
"gc-us-mq:128 ique-cn:128 ntsc-1.0:128 ntsc-1.2:128"
diff --git a/src/code/z_fbdemo_circle.c b/src/code/z_fbdemo_circle.c
index eb66a2fab8..a83e7ed45e 100644
--- a/src/code/z_fbdemo_circle.c
+++ b/src/code/z_fbdemo_circle.c
@@ -3,6 +3,7 @@
#include "color.h"
#include "gfx.h"
#include "sfx.h"
+#include "tex_len.h"
#include "transition.h"
typedef enum TransitionCircleDirection {
@@ -15,7 +16,37 @@ Gfx sTransCircleEmptyDL[] = {
gsSPEndDisplayList(),
};
-#include "assets/code/fbdemo_circle/code.c"
+#define sTransCircleNormalTex_WIDTH 16
+#define sTransCircleNormalTex_HEIGHT 64
+u64 sTransCircleNormalTex[TEX_LEN(u64, sTransCircleNormalTex_WIDTH, sTransCircleNormalTex_HEIGHT, 8)] = {
+#include "assets/code/fbdemo_circle/sTransCircleNormalTex.i8.inc.c"
+};
+
+#define sTransCircleWaveTex_WIDTH 16
+#define sTransCircleWaveTex_HEIGHT 64
+u64 sTransCircleWaveTex[TEX_LEN(u64, sTransCircleWaveTex_WIDTH, sTransCircleWaveTex_HEIGHT, 8)] = {
+#include "assets/code/fbdemo_circle/sTransCircleWaveTex.i8.inc.c"
+};
+
+#define sTransCircleRippleTex_WIDTH 16
+#define sTransCircleRippleTex_HEIGHT 64
+u64 sTransCircleRippleTex[TEX_LEN(u64, sTransCircleRippleTex_WIDTH, sTransCircleRippleTex_HEIGHT, 8)] = {
+#include "assets/code/fbdemo_circle/sTransCircleRippleTex.i8.inc.c"
+};
+
+#define sTransCircleStarburstTex_WIDTH 16
+#define sTransCircleStarburstTex_HEIGHT 64
+u64 sTransCircleStarburstTex[TEX_LEN(u64, sTransCircleStarburstTex_WIDTH, sTransCircleStarburstTex_HEIGHT, 8)] = {
+#include "assets/code/fbdemo_circle/sTransCircleStarburstTex.i8.inc.c"
+};
+
+Vtx sTransCircleVtx[34] = {
+#include "assets/code/fbdemo_circle/sTransCircleVtx.inc.c"
+};
+
+Gfx sTransCircleDL[26] = {
+#include "assets/code/fbdemo_circle/sTransCircleDL.inc.c"
+};
void TransitionCircle_Start(void* thisx) {
TransitionCircle* this = (TransitionCircle*)thisx;
diff --git a/src/code/z_fbdemo_triforce.c b/src/code/z_fbdemo_triforce.c
index b1a5b2e679..efcf214d5b 100644
--- a/src/code/z_fbdemo_triforce.c
+++ b/src/code/z_fbdemo_triforce.c
@@ -1,10 +1,17 @@
#include "transition_triforce.h"
+#include "gfx.h"
#include "printf.h"
#include "z_math.h"
#include "transition_instances.h"
-#include "assets/code/fbdemo_triforce/code.c"
+Gfx sTransTriforceDL[6] = {
+#include "assets/code/fbdemo_triforce/sTransTriforceDL.inc.c"
+};
+
+Vtx sTransTriforceVtx[10] = {
+#include "assets/code/fbdemo_triforce/sTransTriforceVtx.inc.c"
+};
void TransitionTriforce_Start(void* thisx) {
TransitionTriforce* this = (TransitionTriforce*)thisx;
diff --git a/src/code/z_fbdemo_wipe1.c b/src/code/z_fbdemo_wipe1.c
index 6a5dd62e5c..f8c38d117a 100644
--- a/src/code/z_fbdemo_wipe1.c
+++ b/src/code/z_fbdemo_wipe1.c
@@ -2,6 +2,7 @@
#include "gfx.h"
#include "save.h"
+#include "tex_len.h"
#include "transition_instances.h"
typedef enum TransitionWipeDirection {
@@ -9,7 +10,19 @@ typedef enum TransitionWipeDirection {
/* 1 */ TRANS_WIPE_DIR_OUT
} TransitionWipeDirection;
-#include "assets/code/fbdemo_wipe1/code.c"
+Vtx sTransWipeVtx[25] = {
+#include "assets/code/fbdemo_wipe1/sTransWipeVtx.inc.c"
+};
+
+#define sTransWipeTex_WIDTH 64
+#define sTransWipeTex_HEIGHT 64
+u64 sTransWipeTex[TEX_LEN(u64, sTransWipeTex_WIDTH, sTransWipeTex_HEIGHT, 4)] = {
+#include "assets/code/fbdemo_wipe1/sTransWipeTex.i4.inc.c"
+};
+
+Gfx sTransWipeDL[31] = {
+#include "assets/code/fbdemo_wipe1/sTransWipeDL.inc.c"
+};
// unused.
Gfx sTransWipeSyncDL[] = {
diff --git a/src/code/z_kankyo.c b/src/code/z_kankyo.c
index 5da43b4c22..5a944065b5 100644
--- a/src/code/z_kankyo.c
+++ b/src/code/z_kankyo.c
@@ -1,5 +1,5 @@
-#pragma increment_block_number "gc-eu:192 gc-eu-mq:192 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
- "ique-cn:128 ntsc-1.0:192 ntsc-1.1:192 ntsc-1.2:192 pal-1.0:192 pal-1.1:192"
+#pragma increment_block_number "gc-eu:224 gc-eu-mq:224 gc-jp:224 gc-jp-ce:224 gc-jp-mq:224 gc-us:224 gc-us-mq:224" \
+ "ique-cn:224 ntsc-1.0:0 ntsc-1.1:0 ntsc-1.2:0 pal-1.0:240 pal-1.1:240"
#include "libc64/qrand.h"
#include "libu64/gfxprint.h"
@@ -32,7 +32,12 @@
#include "player.h"
#include "save.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_lightning.h"
+#include "assets/objects/gameplay_keep/eff_shockwave.h"
+#include "assets/objects/gameplay_keep/raindrop_model.h"
+#include "assets/objects/gameplay_keep/lens_flare.h"
+#include "assets/objects/gameplay_keep/moon.h"
+#include "assets/objects/gameplay_keep/gameplay_keep_0x4D160.h"
#include "assets/objects/gameplay_field_keep/gameplay_field_keep.h"
typedef enum LightningBoltState {
@@ -238,8 +243,8 @@ s16 sLightningFlashAlpha;
s16 sSunDepthTestX;
s16 sSunDepthTestY;
-#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
- "ique-cn:128 ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
+#pragma increment_block_number "gc-eu:224 gc-eu-mq:224 gc-jp:224 gc-jp-ce:224 gc-jp-mq:224 gc-us:224 gc-us-mq:224" \
+ "ique-cn:224 ntsc-1.0:208 ntsc-1.1:208 ntsc-1.2:208 pal-1.0:224 pal-1.1:224"
LightNode* sNGameOverLightNode;
LightInfo sNGameOverLightInfo;
diff --git a/src/code/z_lights.c b/src/code/z_lights.c
index 4059faacaa..a2f3b39aa7 100644
--- a/src/code/z_lights.c
+++ b/src/code/z_lights.c
@@ -6,7 +6,7 @@
#include "light.h"
#include "play_state.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/fairy_skel.h"
#define LIGHTS_BUFFER_SIZE 32
diff --git a/src/code/z_map_exp.c b/src/code/z_map_exp.c
index c1bfd9e7c8..6624362288 100644
--- a/src/code/z_map_exp.c
+++ b/src/code/z_map_exp.c
@@ -17,7 +17,7 @@
#include "player.h"
#include "save.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/compass_arrow.h"
#include "assets/textures/parameter_static/parameter_static.h"
MapData* gMapData;
diff --git a/src/code/z_message.c b/src/code/z_message.c
index 08d4c7181d..48ec9fd088 100644
--- a/src/code/z_message.c
+++ b/src/code/z_message.c
@@ -127,7 +127,7 @@ s32 sCharTexScale;
s16 sTextFade = false; // original name: key_off_flag ?
-char D_8014B2F4 = 0;
+char sMessageStartFrameCount = 0;
s16 sOcarinaButtonIndexBufPos = 0;
@@ -2559,7 +2559,7 @@ void Message_OpenText(PlayState* play, u16 textId) {
Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_A_HEARTS_MAGIC_FORCE);
}
- sMessageHasSetSfx = D_8014B2F4 = sTextboxSkipped = sTextIsCredits = 0;
+ sMessageHasSetSfx = sMessageStartFrameCount = sTextboxSkipped = sTextIsCredits = 0;
if (textId >= 0x0500 && textId < 0x0600) { // text ids 0500 to 0600 are reserved for credits
sTextIsCredits = true;
@@ -4154,17 +4154,17 @@ void Message_Update(PlayState* play) {
switch (msgCtx->msgMode) {
case MSGMODE_TEXT_START:
- D_8014B2F4++;
+ sMessageStartFrameCount++;
var = false;
if (R_SCENE_CAM_TYPE == SCENE_CAM_TYPE_FIXED_MARKET) {
- if (D_8014B2F4 >= 4) {
+ if (sMessageStartFrameCount >= 4) {
var = true;
}
} else if (R_SCENE_CAM_TYPE != SCENE_CAM_TYPE_DEFAULT ||
play->sceneId == SCENE_CASTLE_COURTYARD_GUARDS_DAY) {
var = true;
- } else if (D_8014B2F4 >= 4 || msgCtx->talkActor == NULL) {
+ } else if (sMessageStartFrameCount >= 4 || msgCtx->talkActor == NULL) {
var = true;
}
diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c
index d56eb84102..69d7b76d9e 100644
--- a/src/code/z_player_lib.c
+++ b/src/code/z_player_lib.c
@@ -13,7 +13,8 @@
#include "save.h"
#include "skin_matrix.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/player_pause_joint_tables.h"
+#include "assets/objects/gameplay_keep/player_anim_headers.h"
#include "assets/objects/object_link_boy/object_link_boy.h"
#include "assets/objects/object_link_child/object_link_child.h"
diff --git a/src/code/z_scene.c b/src/code/z_scene.c
index a3182a2f88..38323e6c7b 100644
--- a/src/code/z_scene.c
+++ b/src/code/z_scene.c
@@ -531,13 +531,13 @@ void Scene_SetTransitionForNextEntrance(PlayState* play) {
}
SceneCmdHandlerFunc sSceneCmdHandlers[SCENE_CMD_ID_MAX] = {
- Scene_CommandPlayerEntryList, // SCENE_CMD_ID_SPAWN_LIST
+ Scene_CommandPlayerEntryList, // SCENE_CMD_ID_PLAYER_ENTRY_LIST
Scene_CommandActorEntryList, // SCENE_CMD_ID_ACTOR_LIST
Scene_CommandUnused2, // SCENE_CMD_ID_UNUSED_2
Scene_CommandCollisionHeader, // SCENE_CMD_ID_COLLISION_HEADER
Scene_CommandRoomList, // SCENE_CMD_ID_ROOM_LIST
Scene_CommandWindSettings, // SCENE_CMD_ID_WIND_SETTINGS
- Scene_CommandSpawnList, // SCENE_CMD_ID_ENTRANCE_LIST
+ Scene_CommandSpawnList, // SCENE_CMD_ID_SPAWN_LIST
Scene_CommandSpecialFiles, // SCENE_CMD_ID_SPECIAL_FILES
Scene_CommandRoomBehavior, // SCENE_CMD_ID_ROOM_BEHAVIOR
Scene_CommandUndefined9, // SCENE_CMD_ID_UNDEFINED_9
diff --git a/src/libgcc/longlong.h b/src/libgcc/longlong.h
index fb6ebb15e5..9590da9af2 100644
--- a/src/libgcc/longlong.h
+++ b/src/libgcc/longlong.h
@@ -92,8 +92,8 @@
__asm__("multu %2,%3\n\t" \
"mflo %0\n\t" \
"mfhi %1" \
- : "=d"(w0), "=d"(w1) \
- : "d"((USItype)(u)), "d"((USItype)(v)))
+ : "=r"(w0), "=r"(w1) \
+ : "r"((USItype)(u)), "r"((USItype)(v)))
#endif
#define udiv_qrnnd(q, r, n1, n0, d) \
diff --git a/src/libu64/gfxprint.c b/src/libu64/gfxprint.c
index c47d52a3a5..1131dc5102 100644
--- a/src/libu64/gfxprint.c
+++ b/src/libu64/gfxprint.c
@@ -1,9 +1,10 @@
#include "libc64/aprintf.h"
#include "libu64/gfxprint.h"
+#include "alignment.h"
#include "attributes.h"
#include "translation.h"
-u16 sGfxPrintFontTLUT[64] = {
+ALIGNED(8) u16 sGfxPrintFontTLUT[64] = {
0x0000, 0xFFFF, 0x0000, 0xFFFF, 0x0000, 0xFFFF, 0x0000, 0xFFFF, 0x0000, 0xFFFF, 0x0000, 0xFFFF, 0x0000,
0xFFFF, 0x0000, 0xFFFF, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0x0000, 0x0000,
0xFFFF, 0xFFFF, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF,
@@ -11,14 +12,14 @@ u16 sGfxPrintFontTLUT[64] = {
0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
};
-u16 sGfxPrintRainbowTLUT[16] = {
+ALIGNED(8) u16 sGfxPrintRainbowTLUT[16] = {
0xF801, 0xFBC1, 0xFFC1, 0x07C1, 0x0421, 0x003F, 0x803F, 0xF83F,
0xF801, 0xFBC1, 0xFFC1, 0x07C1, 0x0421, 0x003F, 0x803F, 0xF83F,
};
-u8 sGfxPrintRainbowData[8] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77 };
+ALIGNED(8) u8 sGfxPrintRainbowData[8] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77 };
-u8 sGfxPrintFontData[(16 * 256) / 2] = {
+ALIGNED(8) u8 sGfxPrintFontData[(16 * 256) / 2] = {
0x00, 0xDF, 0xFD, 0x00, 0x0A, 0xEE, 0xFF, 0xA0, 0x0D, 0xF2, 0x2D, 0xD0, 0x06, 0x61, 0x1D, 0xC0, 0x01, 0x12, 0x2D,
0xD0, 0x06, 0x71, 0x99, 0x00, 0x01, 0x1E, 0xED, 0x10, 0x07, 0x7E, 0xF7, 0x00, 0x01, 0x56, 0x29, 0x90, 0x05, 0x58,
0x97, 0x60, 0x0D, 0xD2, 0x29, 0x90, 0x05, 0x59, 0x97, 0x70, 0x04, 0xDF, 0xFD, 0x40, 0x02, 0x6E, 0xF7, 0x00, 0x00,
diff --git a/src/n64dd/n64dd_801C9B70.c b/src/n64dd/n64dd_801C9B70.c
index 2437904c37..79f205c777 100644
--- a/src/n64dd/n64dd_801C9B70.c
+++ b/src/n64dd/n64dd_801C9B70.c
@@ -61,7 +61,7 @@ void func_801C9C74(u8* dest, u8 value, u32 count) {
// n64ddError_GetErrorHeader
const char* func_801C9CA4(void) {
- return D_801D2ED0[func_801C9C48()];
+ return gN64DDLocalizedErrorNumberHeaders[func_801C9C48()];
}
// n64ddError_WriteNumberJP
diff --git a/src/n64dd/n64dd_data_buffer.c b/src/n64dd/n64dd_data_buffer.c
index d4dfeb3363..00a09a69b6 100644
--- a/src/n64dd/n64dd_data_buffer.c
+++ b/src/n64dd/n64dd_data_buffer.c
@@ -1,4 +1,8 @@
#include "n64dd.h"
-// Buffer used for reading from the disk?
-u8 B_801DC000[0x4D10];
+/**
+ * Buffer used during the process of reading from the disk
+ * Used to directly read individual blocks from the disk before copying to the final destination.
+ * As blocks are read directly into this buffer from the disk, it should be 16-byte aligned.
+ */
+ALIGNED(16) u8 gN64DDDiskReadTemporaryBuffer[MAX_BLK_SIZE];
diff --git a/src/n64dd/n64dd_error_headers.c b/src/n64dd/n64dd_error_headers.c
index ee7d611c21..bac2f97b95 100644
--- a/src/n64dd/n64dd_error_headers.c
+++ b/src/n64dd/n64dd_error_headers.c
@@ -1,4 +1,13 @@
#include "n64dd.h"
-// Padding in .rodata suggests that these are in a separate file
-const char* D_801D2ED0[4] = { "エラー番号 ", "Error Number ", NULL, NULL };
+// Padding in .rodata suggests that this array is in a separate file
+
+/**
+ * Region-specific "error number" headers used in N64DD error handling.
+ * The first one is used if the current region is Japan (gCurrentRegion == REGION_JP),
+ * the second otherwise.
+ */
+const char* gN64DDLocalizedErrorNumberHeaders[2] = {
+ "エラー番号 ", // "Error Number"
+ "Error Number ",
+};
diff --git a/src/n64dd/z_n64dd.c b/src/n64dd/z_n64dd.c
index ea1b73249e..c05bf3ad8b 100644
--- a/src/n64dd/z_n64dd.c
+++ b/src/n64dd/z_n64dd.c
@@ -36,7 +36,7 @@ typedef struct struct_801D9B90 {
s32 func_801C7A1C(struct_801E0D18* arg0);
-void* D_801D2E50 = &B_801DC000;
+void* D_801D2E50 = &gN64DDDiskReadTemporaryBuffer;
s32 (*D_801D2E54)(struct_801E0D18*) = func_801C7A1C;
struct_801D9B90 B_801D9B90;
@@ -143,7 +143,7 @@ s32 func_801C7098(void) {
B_801D9D50.unk_00 = 10;
phi_v1 = (&func_801C8000)(&B_801D9D50);
if (phi_v1 < 0) {
- func_800D31A0();
+ Freeze_CurrentThread();
}
return phi_v1;
}
@@ -375,7 +375,7 @@ s32 func_801C7818(void) {
if (func_801C81C4() != 2) {
func_801C761C();
- func_800D31A0();
+ Freeze_CurrentThread();
return -3;
}
@@ -411,7 +411,7 @@ void func_801C7920(s32 arg0, void* arg1, s32 arg2) {
}
B_801D9D50.unk_00 = 7;
if ((&func_801C8000)(&B_801D9D50) != 0) {
- func_800D31A0();
+ Freeze_CurrentThread();
}
}
diff --git a/src/overlays/actors/ovl_Bg_Bdan_Objects/z_bg_bdan_objects.c b/src/overlays/actors/ovl_Bg_Bdan_Objects/z_bg_bdan_objects.c
index 89b34075ea..426fe0b217 100644
--- a/src/overlays/actors/ovl_Bg_Bdan_Objects/z_bg_bdan_objects.c
+++ b/src/overlays/actors/ovl_Bg_Bdan_Objects/z_bg_bdan_objects.c
@@ -105,7 +105,7 @@ s32 BgBdanObjects_GetProperty(BgBdanObjects* this, s32 arg1) {
case JABU_OBJECTS_GET_PROP_CAM_SETTING_NORMAL0:
return this->cameraSetting == CAM_SET_NORMAL0;
case JABU_OBJECTS_GET_PROP_WATCHED_BIGOCTO_INTRO_CUTSCENE:
- return GET_INFTABLE(INFTABLE_146);
+ return GET_INFTABLE(INFTABLE_RUTO_ABDUCTED);
case JABU_OBJECTS_GET_PROP_CAM_SETTING_DUNGEON1:
return this->cameraSetting == CAM_SET_DUNGEON1;
default:
@@ -125,7 +125,7 @@ void BgBdanObjects_SetProperty(BgBdanObjects* this, s32 arg1) {
this->cameraSetting = CAM_SET_DUNGEON0;
break;
case JABU_OBJECTS_SET_PROP_WATCHED_BIGOCTO_INTRO_CUTSCENE:
- SET_INFTABLE(INFTABLE_146);
+ SET_INFTABLE(INFTABLE_RUTO_ABDUCTED);
break;
default:
PRINTF(T("Bg_Bdan_Objects_Set_Contact_Ru1\nそんな送信モードは無い%d!!!!!!!!\n",
diff --git a/src/overlays/actors/ovl_Bg_Haka_Gate/z_bg_haka_gate.c b/src/overlays/actors/ovl_Bg_Haka_Gate/z_bg_haka_gate.c
index cdda12ba15..f81b757a33 100644
--- a/src/overlays/actors/ovl_Bg_Haka_Gate/z_bg_haka_gate.c
+++ b/src/overlays/actors/ovl_Bg_Haka_Gate/z_bg_haka_gate.c
@@ -17,7 +17,7 @@
#include "play_state.h"
#include "player.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_fire.h"
#include "assets/objects/object_haka_objects/object_haka_objects.h"
#define FLAGS 0
diff --git a/src/overlays/actors/ovl_Bg_Haka_Megane/z_bg_haka_megane.c b/src/overlays/actors/ovl_Bg_Haka_Megane/z_bg_haka_megane.c
index a0c3e37a58..d54e004208 100644
--- a/src/overlays/actors/ovl_Bg_Haka_Megane/z_bg_haka_megane.c
+++ b/src/overlays/actors/ovl_Bg_Haka_Megane/z_bg_haka_megane.c
@@ -1,7 +1,7 @@
/*
* File: z_bg_haka_megane.c
* Overlay: ovl_Bg_Haka_Megane
- * Description: Shadow Temple Fake Walls
+ * Description: Shadow Temple and Bottom of the Well Lens of Truth objects
*/
#include "z_bg_haka_megane.h"
@@ -19,8 +19,8 @@ void BgHakaMegane_Destroy(Actor* thisx, PlayState* play);
void BgHakaMegane_Update(Actor* thisx, PlayState* play);
void BgHakaMegane_Draw(Actor* thisx, PlayState* play);
-void func_8087DB24(BgHakaMegane* this, PlayState* play);
-void func_8087DBF0(BgHakaMegane* this, PlayState* play);
+void BgHakaMegane_WaitForObject(BgHakaMegane* this, PlayState* play);
+void BgHakaMegane_UpdateState(BgHakaMegane* this, PlayState* play);
void BgHakaMegane_DoNothing(BgHakaMegane* this, PlayState* play);
ActorProfile Bg_Haka_Megane_Profile = {
@@ -39,28 +39,30 @@ static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP),
};
-static CollisionHeader* sCollisionHeaders[] = {
- &gBotw1Col,
- &gBotw2Col,
+static CollisionHeader* sCollisionHeaders[BGHAKAMEGANE_TYPE_MAX] = {
+ &gBotwRoom0FakeWallsAndFloorsCol,
+ &gBotwRoom3ThreeFakeFloorsCol,
NULL,
- &object_haka_objects_Col_004330,
- &object_haka_objects_Col_0044D0,
+ &gShadowTempleFakeCryptWallGlowingSkullCol,
+ &gShadowTempleFakeWallStrangeFaceCol,
NULL,
- &object_haka_objects_Col_004780,
- &object_haka_objects_Col_004940,
+ &gShadowTempleRoom5FakeWallsCol,
+ &gShadowTempleRoom6FakeFloorCol,
NULL,
- &object_haka_objects_Col_004B00,
+ &gShadowTempleRoom10FakeWallCol,
NULL,
- &object_haka_objects_Col_004CC0,
+ &gShadowTempleRoom18FakeWallCol,
NULL,
};
-static Gfx* sDLists[] = {
- gBotwFakeWallsAndFloorsDL, gBotwThreeFakeFloorsDL, gBotwHoleTrap2DL,
- object_haka_objects_DL_0040F0, object_haka_objects_DL_0043B0, object_haka_objects_DL_001120,
- object_haka_objects_DL_0045A0, object_haka_objects_DL_0047F0, object_haka_objects_DL_0018F0,
- object_haka_objects_DL_0049B0, object_haka_objects_DL_003CF0, object_haka_objects_DL_004B70,
- object_haka_objects_DL_002ED0,
+static Gfx* sDLists[BGHAKAMEGANE_TYPE_MAX] = {
+ gBotwRoom0FakeWallsAndFloorsDL, gBotwRoom3ThreeFakeFloorsDL,
+ gBotwRoom5HiddenPlatformDL, gShadowTempleFakeCryptWallGlowingSkullDL,
+ gShadowTempleFakeWallStrangeFaceDL, gShadowTempleRoom3HiddenPlatformsDL,
+ gShadowTempleRoom5FakeWallsDL, gShadowTempleRoom6FakeFloorDL,
+ gShadowTempleRoom9HiddenPlatformsDL, gShadowTempleRoom10FakeWallDL,
+ gShadowTempleRoom15HiddenWallsDL, gShadowTempleRoom18FakeWallDL,
+ gShadowTempleRoom11HiddenObjectsDL,
};
void BgHakaMegane_Init(Actor* thisx, PlayState* play) {
@@ -78,7 +80,7 @@ void BgHakaMegane_Init(Actor* thisx, PlayState* play) {
if (this->requiredObjectSlot < 0) {
Actor_Kill(thisx);
} else {
- this->actionFunc = func_8087DB24;
+ this->actionFunc = BgHakaMegane_WaitForObject;
}
}
@@ -88,16 +90,17 @@ void BgHakaMegane_Destroy(Actor* thisx, PlayState* play) {
DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
}
-void func_8087DB24(BgHakaMegane* this, PlayState* play) {
+void BgHakaMegane_WaitForObject(BgHakaMegane* this, PlayState* play) {
if (Object_IsLoaded(&play->objectCtx, this->requiredObjectSlot)) {
this->dyna.actor.objectSlot = this->requiredObjectSlot;
this->dyna.actor.draw = BgHakaMegane_Draw;
Actor_SetObjectDependency(play, &this->dyna.actor);
+
if (play->roomCtx.curRoom.lensMode != LENS_MODE_SHOW_ACTORS) {
CollisionHeader* colHeader;
CollisionHeader* collision;
- this->actionFunc = func_8087DBF0;
+ this->actionFunc = BgHakaMegane_UpdateState;
collision = sCollisionHeaders[this->dyna.actor.params];
if (collision != NULL) {
CollisionHeader_GetVirtual(collision, &colHeader);
@@ -109,7 +112,7 @@ void func_8087DB24(BgHakaMegane* this, PlayState* play) {
}
}
-void func_8087DBF0(BgHakaMegane* this, PlayState* play) {
+void BgHakaMegane_UpdateState(BgHakaMegane* this, PlayState* play) {
Actor* thisx = &this->dyna.actor;
if (play->actorCtx.lensActive) {
@@ -139,7 +142,7 @@ void BgHakaMegane_Draw(Actor* thisx, PlayState* play) {
Gfx_DrawDListOpa(play, sDLists[thisx->params]);
}
- if (thisx->params == 0) {
+ if (thisx->params == BGHAKAMEGANE_TYPE_BOTW_ROOM_0_FAKE) {
Gfx_DrawDListXlu(play, gBotwBloodSplatterDL);
}
}
diff --git a/src/overlays/actors/ovl_Bg_Haka_Megane/z_bg_haka_megane.h b/src/overlays/actors/ovl_Bg_Haka_Megane/z_bg_haka_megane.h
index a50a74a27f..a4dbafa27d 100644
--- a/src/overlays/actors/ovl_Bg_Haka_Megane/z_bg_haka_megane.h
+++ b/src/overlays/actors/ovl_Bg_Haka_Megane/z_bg_haka_megane.h
@@ -4,6 +4,23 @@
#include "ultra64.h"
#include "actor.h"
+typedef enum BgHakaMeganeType {
+ /* 0 */ BGHAKAMEGANE_TYPE_BOTW_ROOM_0_FAKE,
+ /* 1 */ BGHAKAMEGANE_TYPE_BOTW_ROOM_3_FAKE,
+ /* 2 */ BGHAKAMEGANE_TYPE_BOTW_ROOM_5_HIDDEN,
+ /* 3 */ BGHAKAMEGANE_TYPE_SHADOW_ROOM_0_FAKE_WALL,
+ /* 4 */ BGHAKAMEGANE_TYPE_SHADOW_ROOM_2_FAKE_WALL,
+ /* 5 */ BGHAKAMEGANE_TYPE_SHADOW_ROOM_3_HIDDEN,
+ /* 6 */ BGHAKAMEGANE_TYPE_SHADOW_ROOM_5_FAKE,
+ /* 7 */ BGHAKAMEGANE_TYPE_SHADOW_ROOM_6_FAKE,
+ /* 8 */ BGHAKAMEGANE_TYPE_SHADOW_ROOM_9_HIDDEN,
+ /* 9 */ BGHAKAMEGANE_TYPE_SHADOW_ROOM_10_FAKE,
+ /* 10 */ BGHAKAMEGANE_TYPE_SHADOW_ROOM_15_HIDDEN,
+ /* 11 */ BGHAKAMEGANE_TYPE_SHADOW_ROOM_18_FAKE,
+ /* 12 */ BGHAKAMEGANE_TYPE_SHADOW_ROOM_11_HIDDEN,
+ /* 13 */ BGHAKAMEGANE_TYPE_MAX
+} BgHakaMeganeType;
+
struct BgHakaMegane;
typedef void (*BgHakaMeganeActionFunc)(struct BgHakaMegane*, struct PlayState*);
@@ -13,7 +30,6 @@ typedef struct BgHakaMegane {
/* 0x0164 */ BgHakaMeganeActionFunc actionFunc;
/* 0x0168 */ char unk_168[0x1];
/* 0x0169 */ s8 requiredObjectSlot;
- /* 0x016A */ char unk_16A[0x2];
} BgHakaMegane; // size = 0x016C
#endif
diff --git a/src/overlays/actors/ovl_Bg_Haka_Trap/z_bg_haka_trap.c b/src/overlays/actors/ovl_Bg_Haka_Trap/z_bg_haka_trap.c
index afb0f19043..a91df648c1 100644
--- a/src/overlays/actors/ovl_Bg_Haka_Trap/z_bg_haka_trap.c
+++ b/src/overlays/actors/ovl_Bg_Haka_Trap/z_bg_haka_trap.c
@@ -1,7 +1,27 @@
/*
* File: z_bg_haka_trap.c
* Overlay: ovl_Bg_Haka_Trap
- * Description: Shadow Temple Objects
+ * Description: Shadow Temple traps
+ *
+ * HAKA_TRAP_GUILLOTINE:
+ * A guillotine blade attached to a chain, drops from the ceiling.
+ *
+ * HAKA_TRAP_GUILLOTINE_FAST: (spawn only param)
+ * Enables a flag making the guillotine move faster.
+ *
+ * HAKA_TRAP_SPIKED_CRUSHER:
+ * A square shaped platform suspended by a chain with spikes underneath, intended to crush the player. A pushblock can
+ * be used to prevent it from decending completely. Rotating this actor may prevent correct hit detection of the block.
+ *
+ * HAKA_TRAP_SPIKED_WALL_EAST:
+ * HAKA_TRAP_SPIKED_WALL_WEST:
+ *
+ * Two wooden spike walls that come together to crush the player. The one to the east has extra holes to reveal the
+ * chest behind it.
+ *
+ * HAKA_TRAP_FAN_BLADE:
+ * A small fan blade that pushes the player away when turned on. `world.rot.z` is used to store the angular
+ * velocity of the fan
*/
#include "z_bg_haka_trap.h"
@@ -26,20 +46,20 @@ void BgHakaTrap_Destroy(Actor* thisx, PlayState* play);
void BgHakaTrap_Update(Actor* thisx, PlayState* play);
void BgHakaTrap_Draw(Actor* thisx, PlayState* play);
-void func_8087FFC0(BgHakaTrap* this, PlayState* play);
-void func_808801B8(BgHakaTrap* this, PlayState* play);
-void func_808802D8(BgHakaTrap* this, PlayState* play);
-void func_80880484(BgHakaTrap* this, PlayState* play);
-void func_808805C0(BgHakaTrap* this, PlayState* play);
-void func_808806BC(BgHakaTrap* this, PlayState* play);
-void func_808808F4(BgHakaTrap* this, PlayState* play);
-void func_808809B0(BgHakaTrap* this, PlayState* play);
-void func_808809E4(BgHakaTrap* this, PlayState* play, s16 arg2);
-void func_80880AE8(BgHakaTrap* this, PlayState* play);
-void func_80880C0C(BgHakaTrap* this, PlayState* play);
-void func_80880D68(BgHakaTrap* this);
+void BgHakaTrap_UpdateBodyColliderPos(BgHakaTrap* this, PlayState* play);
+void BgHakaTrap_SpikedWall_CloseIn(BgHakaTrap* this, PlayState* play);
+void BgHakaTrap_SpikedWall_Burn(BgHakaTrap* this, PlayState* play);
+void BgHakaTrap_Guillotine_Fall(BgHakaTrap* this, PlayState* play);
+void BgHakaTrap_Guillotine_Lift(BgHakaTrap* this, PlayState* play);
+void BgHakaTrap_SpikedCrusher_Fall(BgHakaTrap* this, PlayState* play);
+void BgHakaTrap_SpikedCrusher_Lift(BgHakaTrap* this, PlayState* play);
+void BgHakaTrap_FanBlade_Idle(BgHakaTrap* this, PlayState* play);
+void BgHakaTrap_PushPlayer(BgHakaTrap* this, PlayState* play, s16 angularVelocity);
+void BgHakaTrap_FanBlade_ToggleFanGust(BgHakaTrap* this, PlayState* play);
+void BgHakaTrap_FanBlade_FullGust(BgHakaTrap* this, PlayState* play);
+void BgHakaTrap_SpikedWall_UpdateCollider(BgHakaTrap* this);
-static UNK_TYPE D_80880F30 = 0;
+static s32 sIsSpikeWallBurning = false;
ActorProfile Bg_Haka_Trap_Profile = {
/**/ ACTOR_BG_HAKA_TRAP,
@@ -73,7 +93,7 @@ static ColliderCylinderInit sCylinderInit = {
{ 30, 90, 0, { 0, 0, 0 } },
};
-static ColliderTrisElementInit sTrisElementsInit[] = {
+static ColliderTrisElementInit sSpikedWallTrisElementsInit[] = {
{
{
ELEM_MATERIAL_UNK0,
@@ -98,7 +118,7 @@ static ColliderTrisElementInit sTrisElementsInit[] = {
},
};
-static ColliderTrisInit sTrisInit = {
+static ColliderTrisInit sSpikedWallTrisInit = {
{
COL_MATERIAL_NONE,
AT_NONE,
@@ -107,8 +127,8 @@ static ColliderTrisInit sTrisInit = {
OC2_TYPE_2,
COLSHAPE_TRIS,
},
- ARRAY_COUNT(sTrisElementsInit),
- sTrisElementsInit,
+ ARRAY_COUNT(sSpikedWallTrisElementsInit),
+ sSpikedWallTrisElementsInit,
};
static CollisionCheckInfoInit sColChkInfoInit = { 0, 80, 100, MASS_IMMOVABLE };
@@ -118,7 +138,7 @@ static InitChainEntry sInitChain[] = {
};
void BgHakaTrap_Init(Actor* thisx, PlayState* play) {
- static UNK_TYPE D_80881014 = 0;
+ static s32 sSpikedCrusherFlip = false;
BgHakaTrap* this = (BgHakaTrap*)thisx;
s32 pad;
CollisionHeader* colHeader = NULL;
@@ -126,54 +146,65 @@ void BgHakaTrap_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(thisx, sInitChain);
thisx->params &= 0xFF;
- if (thisx->params != HAKA_TRAP_PROPELLER) {
+ if (thisx->params != HAKA_TRAP_FAN_BLADE) {
Collider_InitCylinder(play, &this->colliderCylinder);
Collider_SetCylinder(play, &this->colliderCylinder, thisx, &sCylinderInit);
- if ((thisx->params == HAKA_TRAP_GUILLOTINE_SLOW) || (thisx->params == HAKA_TRAP_GUILLOTINE_FAST)) {
+ if ((thisx->params == HAKA_TRAP_GUILLOTINE) || (thisx->params == HAKA_TRAP_GUILLOTINE_FAST)) {
this->timer = 20;
this->colliderCylinder.dim.yShift = 10;
thisx->velocity.y = 0.1f;
if (thisx->params == HAKA_TRAP_GUILLOTINE_FAST) {
- thisx->params = HAKA_TRAP_GUILLOTINE_SLOW;
- this->unk_16A = 1;
+ thisx->params = HAKA_TRAP_GUILLOTINE;
+ this->isGuillotineFast = true;
}
- this->actionFunc = func_80880484;
+ this->actionFunc = BgHakaTrap_Guillotine_Fall;
} else {
DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
thisx->flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
- if (thisx->params == HAKA_TRAP_SPIKED_BOX) {
- CollisionHeader_GetVirtual(&object_haka_objects_Col_009CD0, &colHeader);
+ if (thisx->params == HAKA_TRAP_SPIKED_CRUSHER) {
+ CollisionHeader_GetVirtual(&gShadowTempleSpikedCrusherCol, &colHeader);
this->timer = 30;
- if (D_80881014 != 0) {
- this->actionFunc = func_808808F4;
- D_80881014 = 0;
+ // Instances alternate between starting off in the up or down position.
+ if (sSpikedCrusherFlip) {
+ this->actionFunc = BgHakaTrap_SpikedCrusher_Lift;
+ sSpikedCrusherFlip = false;
} else {
- D_80881014 = 1;
- this->actionFunc = func_808806BC;
+ sSpikedCrusherFlip = true;
+ this->actionFunc = BgHakaTrap_SpikedCrusher_Fall;
thisx->velocity.y = 0.5f;
}
- thisx->floorHeight = thisx->home.pos.y - 225.0f;
- this->unk_16A = (thisx->floorHeight + 50.0f) - 25.0f;
+ // Assign the minimum height of the crusher. The crusher intentionally clips through the floor by 25
+ // units to allow the spikes to pierce the floor
+ thisx->floorHeight = thisx->home.pos.y - (200 + 25);
+
+ // Assigns the height the crusher rises on first "tug". The final -25 offset is missing in other
+ // calculations of this variable.
+ this->spikedCrusherStepY = (thisx->floorHeight + 50.0f) - 25.0f;
this->colliderCylinder.dim.radius = 10;
this->colliderCylinder.dim.height = 40;
} else {
- if (thisx->params == HAKA_TRAP_SPIKED_WALL) {
- CollisionHeader_GetVirtual(&object_haka_objects_Col_0081D0, &colHeader);
+ if (thisx->params == HAKA_TRAP_SPIKED_WALL_EAST) {
+ CollisionHeader_GetVirtual(&gShadowTempleSpikedWallEastCol, &colHeader);
+ // Shift the home position toward the center of the room. This will become the target position that
+ // triggers the crush.
thisx->home.pos.x -= 200.0f;
- } else {
+ } else /* HAKA_TRAP_SPIKED_WALL_WEST */ {
+ // Shift the home position toward the center of the room. This will become the target position that
+ // triggers the crush.
thisx->home.pos.x += 200.0f;
- CollisionHeader_GetVirtual(&object_haka_objects_Col_008D10, &colHeader);
+ CollisionHeader_GetVirtual(&gShadowTempleSpikedWallWestCol, &colHeader);
}
Collider_InitTris(play, &this->spikesCollider);
- Collider_SetTris(play, &this->spikesCollider, thisx, &sTrisInit, this->spikesColliderElements);
+ Collider_SetTris(play, &this->spikesCollider, thisx, &sSpikedWallTrisInit,
+ this->spikesColliderElements);
this->colliderCylinder.dim.radius = 18;
this->colliderCylinder.dim.height = 115;
@@ -181,14 +212,15 @@ void BgHakaTrap_Init(Actor* thisx, PlayState* play) {
this->colliderCylinder.elem.atElemFlags &= ~ATELEM_SFX_NORMAL;
this->colliderCylinder.elem.atElemFlags |= ATELEM_SFX_WOOD;
- this->actionFunc = func_808801B8;
+ this->actionFunc = BgHakaTrap_SpikedWall_CloseIn;
}
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, thisx, colHeader);
}
} else {
+ // Initialize HAKA_TRAP_FAN_BLADE
this->timer = 40;
- this->actionFunc = func_808809B0;
+ this->actionFunc = BgHakaTrap_FanBlade_Idle;
thisx->cullingVolumeScale = 500.0f;
}
@@ -198,11 +230,11 @@ void BgHakaTrap_Init(Actor* thisx, PlayState* play) {
void BgHakaTrap_Destroy(Actor* thisx, PlayState* play) {
BgHakaTrap* this = (BgHakaTrap*)thisx;
- if (this->dyna.actor.params != HAKA_TRAP_PROPELLER) {
- if (this->dyna.actor.params != HAKA_TRAP_GUILLOTINE_SLOW) {
+ if (this->dyna.actor.params != HAKA_TRAP_FAN_BLADE) {
+ if (this->dyna.actor.params != HAKA_TRAP_GUILLOTINE) {
DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
- if ((this->dyna.actor.params == HAKA_TRAP_SPIKED_WALL) ||
- (this->dyna.actor.params == HAKA_TRAP_SPIKED_WALL_2)) {
+ if ((this->dyna.actor.params == HAKA_TRAP_SPIKED_WALL_EAST) ||
+ (this->dyna.actor.params == HAKA_TRAP_SPIKED_WALL_WEST)) {
Collider_DestroyTris(play, &this->spikesCollider);
}
}
@@ -210,61 +242,68 @@ void BgHakaTrap_Destroy(Actor* thisx, PlayState* play) {
Collider_DestroyCylinder(play, &this->colliderCylinder);
}
- Audio_StopSfxByPos(&this->unk_16C);
+ Audio_StopSfxByPos(&this->chainLiftSfxPos);
}
-void func_8087FFC0(BgHakaTrap* this, PlayState* play) {
- f32 cosine;
- Vec3f sp28;
- f32 sine;
- f32 zNonNegative;
+// Updates body collider for HAKA_TRAP_GUILLOTINE, HAKA_TRAP_SPIKED_WALL_EAST, HAKA_TRAP_SPIKED_WALL_WEST
+void BgHakaTrap_UpdateBodyColliderPos(BgHakaTrap* this, PlayState* play) {
+ f32 cos;
+ Vec3f colOff;
+ f32 sin;
+ f32 zSign;
Player* player = GET_PLAYER(play);
- Actor_WorldToActorCoords(&this->dyna.actor, &sp28, &player->actor.world.pos);
+ Actor_WorldToActorCoords(&this->dyna.actor, &colOff, &player->actor.world.pos);
- sine = Math_SinS(this->dyna.actor.shape.rot.y);
- cosine = Math_CosS(this->dyna.actor.shape.rot.y);
- if (this->dyna.actor.params == HAKA_TRAP_GUILLOTINE_SLOW) {
- sp28.x = CLAMP(sp28.x, -50.0f, 50.0f);
- zNonNegative = (sp28.z >= 0.0f) ? 1.0f : -1.0f;
- sp28.z = zNonNegative * -15.0f;
+ sin = Math_SinS(this->dyna.actor.shape.rot.y);
+ cos = Math_CosS(this->dyna.actor.shape.rot.y);
+
+ if (this->dyna.actor.params == HAKA_TRAP_GUILLOTINE) {
+ colOff.x = CLAMP(colOff.x, -50.0f, 50.0f);
+ zSign = (colOff.z >= 0.0f) ? 1.0f : -1.0f;
+ colOff.z = zSign * -15.0f;
} else {
- sp28.x = -CLAMP(sp28.x, -162.0f, 162.0f);
- zNonNegative = (sp28.z >= 0.0f) ? 1.0f : -1.0f;
- sp28.z = zNonNegative * 15.0f;
+ colOff.x = -CLAMP(colOff.x, -162.0f, 162.0f);
+ zSign = (colOff.z >= 0.0f) ? 1.0f : -1.0f;
+ colOff.z = zSign * 15.0f;
}
- this->colliderCylinder.dim.pos.x = this->dyna.actor.world.pos.x + sp28.x * cosine + sp28.z * sine;
- this->colliderCylinder.dim.pos.z = this->dyna.actor.world.pos.z + sp28.x * sine + sp28.z * cosine;
+ this->colliderCylinder.dim.pos.x = this->dyna.actor.world.pos.x + colOff.x * cos + colOff.z * sin;
+ this->colliderCylinder.dim.pos.z = this->dyna.actor.world.pos.z + colOff.x * sin + colOff.z * cos;
}
-void func_808801B8(BgHakaTrap* this, PlayState* play) {
- static UNK_TYPE D_80881018 = 0;
+#define BGHAKATRAP_SPIKEDWALL_HITEAST (1 << 0)
+#define BGHAKATRAP_SPIKEDWALL_HITWEST (1 << 1)
+#define BGHAKATRAP_SPIKEDWALL_CRUSH_PLAYER 4
+
+void BgHakaTrap_SpikedWall_CloseIn(BgHakaTrap* this, PlayState* play) {
+ static s32 sSpikedWallFlags = 0;
Player* player = GET_PLAYER(play);
- if ((D_80880F30 == 0) && (!Player_InCsMode(play))) {
+ if (!sIsSpikeWallBurning && !Player_InCsMode(play)) {
+ // Step towards the home position. If we haven't reached it, play the sliding sfx
if (!Math_StepToF(&this->dyna.actor.world.pos.x, this->dyna.actor.home.pos.x, 0.5f)) {
Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_TRAP_OBJ_SLIDE - SFX_FLAG);
- } else if (this->dyna.actor.params == HAKA_TRAP_SPIKED_WALL) {
- D_80881018 |= 1;
- } else if (this->dyna.actor.params == HAKA_TRAP_SPIKED_WALL_2) {
- D_80881018 |= 2;
+ } else if (this->dyna.actor.params == HAKA_TRAP_SPIKED_WALL_EAST) {
+ sSpikedWallFlags |= BGHAKATRAP_SPIKEDWALL_HITEAST;
+ } else if (this->dyna.actor.params == HAKA_TRAP_SPIKED_WALL_WEST) {
+ sSpikedWallFlags |= BGHAKATRAP_SPIKEDWALL_HITWEST;
}
}
- func_8087FFC0(this, play);
+ BgHakaTrap_UpdateBodyColliderPos(this, play);
if (this->spikesCollider.base.acFlags & AC_HIT) {
this->timer = 20;
- D_80880F30 = 1;
- this->actionFunc = func_808802D8;
- } else if (D_80881018 == 3) {
- D_80881018 = 4;
+ sIsSpikeWallBurning = true;
+ this->actionFunc = BgHakaTrap_SpikedWall_Burn;
+ } else if (sSpikedWallFlags == (BGHAKATRAP_SPIKEDWALL_HITEAST | BGHAKATRAP_SPIKEDWALL_HITWEST)) {
+ sSpikedWallFlags = BGHAKATRAP_SPIKEDWALL_CRUSH_PLAYER;
player->actor.bgCheckFlags |= BGCHECKFLAG_CRUSHED;
}
}
-void func_808802D8(BgHakaTrap* this, PlayState* play) {
+void BgHakaTrap_SpikedWall_Burn(BgHakaTrap* this, PlayState* play) {
static Vec3f zeroVec = { 0.0f, 0.0f, 0.0f };
Vec3f vector;
f32 xScale;
@@ -279,7 +318,7 @@ void func_808802D8(BgHakaTrap* this, PlayState* play) {
for (i = 0; i < 2; i++) {
f32 rand = Rand_ZeroOne();
- xScale = (this->dyna.actor.params == HAKA_TRAP_SPIKED_WALL) ? -30.0f : 30.0f;
+ xScale = (this->dyna.actor.params == HAKA_TRAP_SPIKED_WALL_EAST) ? -30.0f : 30.0f;
vector.x = xScale * rand + this->dyna.actor.world.pos.x;
vector.y = Rand_ZeroOne() * 10.0f + this->dyna.actor.world.pos.y + 30.0f;
@@ -289,16 +328,16 @@ void func_808802D8(BgHakaTrap* this, PlayState* play) {
}
if (this->timer == 0) {
- D_80880F30 = 0;
+ sIsSpikeWallBurning = false;
Actor_Kill(&this->dyna.actor);
}
}
-void func_80880484(BgHakaTrap* this, PlayState* play) {
- s32 sp24;
+void BgHakaTrap_Guillotine_Fall(BgHakaTrap* this, PlayState* play) {
+ s32 isDoneFalling;
s32 timer;
- if (this->unk_16A) {
+ if (this->isGuillotineFast) {
this->dyna.actor.velocity.y *= 3.0f;
} else {
this->dyna.actor.velocity.y *= 2.0f;
@@ -308,34 +347,35 @@ void func_80880484(BgHakaTrap* this, PlayState* play) {
this->timer -= 1;
}
- sp24 =
+ isDoneFalling =
Math_StepToF(&this->dyna.actor.world.pos.y, this->dyna.actor.home.pos.y - 185.0f, this->dyna.actor.velocity.y);
timer = this->timer;
- if ((timer == 10 && !this->unk_16A) || (timer == 13 && this->unk_16A)) {
+ if ((timer == 10 && !this->isGuillotineFast) || (timer == 13 && this->isGuillotineFast)) {
Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_GUILLOTINE_BOUND);
}
if (this->timer == 0) {
this->dyna.actor.velocity.y = 0.0f;
- this->timer = (this->unk_16A) ? 10 : 40;
+ this->timer = (this->isGuillotineFast) ? 10 : 40;
Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_GUILLOTINE_UP);
- this->actionFunc = func_808805C0;
+ this->actionFunc = BgHakaTrap_Guillotine_Lift;
}
- func_8087FFC0(this, play);
+ BgHakaTrap_UpdateBodyColliderPos(this, play);
- if (sp24 == 0) {
+ if (!isDoneFalling) {
CollisionCheck_SetAT(play, &play->colChkCtx, &this->colliderCylinder.base);
}
}
-void func_808805C0(BgHakaTrap* this, PlayState* play) {
+void BgHakaTrap_Guillotine_Lift(BgHakaTrap* this, PlayState* play) {
if (this->timer != 0) {
this->timer--;
}
- if (this->unk_16A) {
+ if (this->isGuillotineFast) {
+
Math_StepToF(&this->dyna.actor.world.pos.y, this->dyna.actor.home.pos.y, 27.0f);
} else {
if (this->timer > 20) {
@@ -353,13 +393,13 @@ void func_808805C0(BgHakaTrap* this, PlayState* play) {
this->timer = 20;
this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y;
this->dyna.actor.velocity.y = 0.1f;
- this->actionFunc = func_80880484;
+ this->actionFunc = BgHakaTrap_Guillotine_Fall;
}
- func_8087FFC0(this, play);
+ BgHakaTrap_UpdateBodyColliderPos(this, play);
}
-void func_808806BC(BgHakaTrap* this, PlayState* play) {
+void BgHakaTrap_SpikedCrusher_Fall(BgHakaTrap* this, PlayState* play) {
Vec3f vector;
f32 floorHeight;
f32 yIntersect;
@@ -372,10 +412,17 @@ void func_808806BC(BgHakaTrap* this, PlayState* play) {
this->timer--;
}
+ // Perform a collision check for the "stone umbrella" block
+ // Because of the shape of the room and the size of the block we only need to check three positions,
+ // the center of the east edge, the centerpoint, and the center of the west edge of the crusher.
+ //
+ // The y coordinate is offset by 25 units, as the crusher is allowed to clip into the floor for visual effect.
+
vector.x = this->dyna.actor.world.pos.x + 90.0f;
vector.y = (this->dyna.actor.world.pos.y + 1.0f) + 25.0f;
vector.z = this->dyna.actor.world.pos.z;
+ // actor.floorHeight is storing the minimum y position of the crusher
floorHeight = this->dyna.actor.floorHeight;
for (i = 0; i < 3; i++) {
@@ -403,77 +450,87 @@ void func_808806BC(BgHakaTrap* this, PlayState* play) {
if (this->timer == 0) {
this->dyna.actor.velocity.y = 0.0f;
this->timer = 30;
- this->unk_16A = (s16)this->dyna.actor.world.pos.y + 50.0f;
- this->unk_16A = CLAMP_MAX(this->unk_16A, this->dyna.actor.home.pos.y);
+ this->spikedCrusherStepY = (s16)this->dyna.actor.world.pos.y + 50.0f;
+ this->spikedCrusherStepY = CLAMP_MAX(this->spikedCrusherStepY, this->dyna.actor.home.pos.y);
- this->actionFunc = func_808808F4;
+ this->actionFunc = BgHakaTrap_SpikedCrusher_Lift;
}
}
-void func_808808F4(BgHakaTrap* this, PlayState* play) {
+void BgHakaTrap_SpikedCrusher_Lift(BgHakaTrap* this, PlayState* play) {
if (this->timer != 0) {
this->timer--;
}
if (this->timer > 20) {
- this->unk_169 = Math_StepToF(&this->dyna.actor.world.pos.y, this->unk_16A, 15.0f);
+ this->isSpikedCrusherStationary = Math_StepToF(&this->dyna.actor.world.pos.y, this->spikedCrusherStepY, 15.0f);
} else {
- this->unk_169 = Math_StepToF(&this->dyna.actor.world.pos.y, this->dyna.actor.home.pos.y, 20.0f);
+ this->isSpikedCrusherStationary =
+ Math_StepToF(&this->dyna.actor.world.pos.y, this->dyna.actor.home.pos.y, 20.0f);
}
if (this->timer == 0) {
this->timer = 30;
this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y;
this->dyna.actor.velocity.y = 0.5f;
- this->actionFunc = func_808806BC;
+ this->actionFunc = BgHakaTrap_SpikedCrusher_Fall;
}
}
-void func_808809B0(BgHakaTrap* this, PlayState* play) {
+void BgHakaTrap_FanBlade_Idle(BgHakaTrap* this, PlayState* play) {
if (this->timer != 0) {
this->timer -= 1;
}
if (this->timer == 0) {
- this->actionFunc = func_80880AE8;
+ // this->timer = 0, which signals the fan to turn on and speed up
+ this->actionFunc = BgHakaTrap_FanBlade_ToggleFanGust;
}
}
-void func_808809E4(BgHakaTrap* this, PlayState* play, s16 arg2) {
+void BgHakaTrap_PushPlayer(BgHakaTrap* this, PlayState* play, s16 angularVelocity) {
Player* player = GET_PLAYER(play);
- Vec3f sp18;
+ Vec3f playerRelOff;
- Actor_WorldToActorCoords(&this->dyna.actor, &sp18, &player->actor.world.pos);
+ Actor_WorldToActorCoords(&this->dyna.actor, &playerRelOff, &player->actor.world.pos);
- if ((fabsf(sp18.x) < 70.0f) && (fabsf(sp18.y) < 100.0f) && (sp18.z < 500.0f) &&
+ if ((fabsf(playerRelOff.x) < 70.0f) && (fabsf(playerRelOff.y) < 100.0f) && (playerRelOff.z < 500.0f) &&
(GET_PLAYER(play)->currentBoots != PLAYER_BOOTS_IRON)) {
- player->pushedSpeed = ((500.0f - sp18.z) * 0.06f + 5.0f) * arg2 * (1.0f / 0x3A00) * (2.0f / 3.0f);
+ player->pushedSpeed =
+ ((500.0f - playerRelOff.z) * 0.06f + 5.0f) * angularVelocity * (1.0f / 0x3A00) * (2.0f / 3.0f);
player->pushedYaw = this->dyna.actor.shape.rot.y;
}
}
-void func_80880AE8(BgHakaTrap* this, PlayState* play) {
+void BgHakaTrap_FanBlade_ToggleFanGust(BgHakaTrap* this, PlayState* play) {
+ // this->timer stores the current fan behavior.
+ // if 1, the fan is on and is ramping down to the off state.
+ // if 0, the fan is off and is ramping up to the full on state.
+
+ // world.rot.z is the current angular velocity of the fan
if (this->timer != 0) {
+ // Fan winds down
if (Math_ScaledStepToS(&this->dyna.actor.world.rot.z, 0, this->dyna.actor.world.rot.z * 0.03f + 5.0f)) {
this->timer = 40;
- this->actionFunc = func_808809B0;
+ this->actionFunc = BgHakaTrap_FanBlade_Idle;
}
} else {
+ // Fan speeds up
if (Math_ScaledStepToS(&this->dyna.actor.world.rot.z, 0x3A00, this->dyna.actor.world.rot.z * 0.03f + 5.0f)) {
this->timer = 100;
- this->actionFunc = func_80880C0C;
+ this->actionFunc = BgHakaTrap_FanBlade_FullGust;
}
}
this->dyna.actor.shape.rot.z += this->dyna.actor.world.rot.z;
- if (this->dyna.actor.world.rot.z >= 0x1801) {
+ if (this->dyna.actor.world.rot.z > 0x1800) {
Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_WIND_TRAP - SFX_FLAG);
}
- func_808809E4(this, play, this->dyna.actor.world.rot.z);
+ BgHakaTrap_PushPlayer(this, play, this->dyna.actor.world.rot.z);
}
-void func_80880C0C(BgHakaTrap* this, PlayState* play) {
+void BgHakaTrap_FanBlade_FullGust(BgHakaTrap* this, PlayState* play) {
if (this->timer != 0) {
this->timer--;
}
@@ -481,12 +538,13 @@ void func_80880C0C(BgHakaTrap* this, PlayState* play) {
Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_WIND_TRAP - SFX_FLAG);
if (this->timer == 0) {
- this->timer = 1;
- this->actionFunc = func_80880AE8;
+ this->timer = 1; // setting this signals the fan to turn off and slow down
+ this->actionFunc = BgHakaTrap_FanBlade_ToggleFanGust;
}
+ // world.rot.z is the current angular velocity of the fan
this->dyna.actor.shape.rot.z += this->dyna.actor.world.rot.z;
- func_808809E4(this, play, this->dyna.actor.world.rot.z);
+ BgHakaTrap_PushPlayer(this, play, this->dyna.actor.world.rot.z);
}
void BgHakaTrap_Update(Actor* thisx, PlayState* play) {
@@ -495,14 +553,14 @@ void BgHakaTrap_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
- if ((this->dyna.actor.params != HAKA_TRAP_PROPELLER) && (thisx->params != HAKA_TRAP_SPIKED_BOX)) {
+ if ((this->dyna.actor.params != HAKA_TRAP_FAN_BLADE) && (thisx->params != HAKA_TRAP_SPIKED_CRUSHER)) {
this->colliderCylinder.dim.pos.y = actorPos->y;
- if ((thisx->params == HAKA_TRAP_GUILLOTINE_SLOW) || (thisx->params == HAKA_TRAP_GUILLOTINE_FAST)) {
+ if ((thisx->params == HAKA_TRAP_GUILLOTINE) || (thisx->params == HAKA_TRAP_GUILLOTINE_FAST)) {
CollisionCheck_SetAC(play, &play->colChkCtx, &this->colliderCylinder.base);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->colliderCylinder.base);
} else {
- if (this->actionFunc == func_808801B8) {
+ if (this->actionFunc == BgHakaTrap_SpikedWall_CloseIn) {
CollisionCheck_SetAC(play, &play->colChkCtx, &this->spikesCollider.base);
}
@@ -511,50 +569,49 @@ void BgHakaTrap_Update(Actor* thisx, PlayState* play) {
}
}
-void func_80880D68(BgHakaTrap* this) {
- Vec3f vec3;
- Vec3f vec2;
- Vec3f vec1;
+void BgHakaTrap_SpikedWall_UpdateCollider(BgHakaTrap* this) {
+ Vec3f vtx[3];
- Matrix_MultVec3f(&sTrisElementsInit[0].dim.vtx[0], &vec1);
- Matrix_MultVec3f(&sTrisElementsInit[0].dim.vtx[1], &vec2);
- Matrix_MultVec3f(&sTrisElementsInit[0].dim.vtx[2], &vec3);
- Collider_SetTrisVertices(&this->spikesCollider, 0, &vec1, &vec2, &vec3);
+ Matrix_MultVec3f(&sSpikedWallTrisElementsInit[0].dim.vtx[0], &vtx[0]);
+ Matrix_MultVec3f(&sSpikedWallTrisElementsInit[0].dim.vtx[1], &vtx[1]);
+ Matrix_MultVec3f(&sSpikedWallTrisElementsInit[0].dim.vtx[2], &vtx[2]);
+ Collider_SetTrisVertices(&this->spikesCollider, 0, &vtx[0], &vtx[1], &vtx[2]);
- Matrix_MultVec3f(&sTrisElementsInit[1].dim.vtx[2], &vec2);
- Collider_SetTrisVertices(&this->spikesCollider, 1, &vec1, &vec3, &vec2);
+ Matrix_MultVec3f(&sSpikedWallTrisElementsInit[1].dim.vtx[2], &vtx[1]);
+ Collider_SetTrisVertices(&this->spikesCollider, 1, &vtx[0], &vtx[2], &vtx[1]);
}
void BgHakaTrap_Draw(Actor* thisx, PlayState* play) {
static Gfx* sDLists[5] = {
- object_haka_objects_DL_007610, object_haka_objects_DL_009860, object_haka_objects_DL_007EF0,
- object_haka_objects_DL_008A20, object_haka_objects_DL_0072C0,
+ gShadowTempleGuillotineDL, gShadowTempleSpikedCrusherDL, gShadowTempleSpikedWallEastDL,
+ gShadowTempleSpikedWallWestDL, gShadowTempleFanBladeDL,
};
- static Color_RGBA8 D_8088103C = { 0, 0, 0, 0 };
+ static Color_RGBA8 sFogBlack = { 0, 0, 0, 0 };
BgHakaTrap* this = (BgHakaTrap*)thisx;
s32 pad;
- Vec3f sp2C;
- if (this->actionFunc == func_808802D8) {
- func_80026230(play, &D_8088103C, this->timer + 20, 0x28);
+ if (this->actionFunc == BgHakaTrap_SpikedWall_Burn) {
+ func_80026230(play, &sFogBlack, this->timer + 20, 40);
}
Gfx_DrawDListOpa(play, sDLists[this->dyna.actor.params]);
- if (this->actionFunc == func_808801B8) {
- func_80880D68(this);
+ if (this->actionFunc == BgHakaTrap_SpikedWall_CloseIn) {
+ BgHakaTrap_SpikedWall_UpdateCollider(this);
}
- if (this->actionFunc == func_808802D8) {
+ if (this->actionFunc == BgHakaTrap_SpikedWall_Burn) {
func_80026608(play);
}
- if ((this->actionFunc == func_808808F4) && !this->unk_169) {
- sp2C.x = this->dyna.actor.world.pos.x;
- sp2C.z = this->dyna.actor.world.pos.z;
- sp2C.y = this->dyna.actor.world.pos.y + 110.0f;
+ if ((this->actionFunc == BgHakaTrap_SpikedCrusher_Lift) && !this->isSpikedCrusherStationary) {
+ Vec3f sfxPos;
- SkinMatrix_Vec3fMtxFMultXYZ(&play->viewProjectionMtxF, &sp2C, &this->unk_16C);
- Sfx_PlaySfxAtPos(&this->unk_16C, NA_SE_EV_BRIDGE_CLOSE - SFX_FLAG);
+ sfxPos.x = this->dyna.actor.world.pos.x;
+ sfxPos.z = this->dyna.actor.world.pos.z;
+ sfxPos.y = this->dyna.actor.world.pos.y + 110.0f;
+
+ SkinMatrix_Vec3fMtxFMultXYZ(&play->viewProjectionMtxF, &sfxPos, &this->chainLiftSfxPos);
+ Sfx_PlaySfxAtPos(&this->chainLiftSfxPos, NA_SE_EV_BRIDGE_CLOSE - SFX_FLAG);
}
}
diff --git a/src/overlays/actors/ovl_Bg_Haka_Trap/z_bg_haka_trap.h b/src/overlays/actors/ovl_Bg_Haka_Trap/z_bg_haka_trap.h
index a75c877ed3..14c7c7a1a3 100644
--- a/src/overlays/actors/ovl_Bg_Haka_Trap/z_bg_haka_trap.h
+++ b/src/overlays/actors/ovl_Bg_Haka_Trap/z_bg_haka_trap.h
@@ -5,11 +5,11 @@
#include "actor.h"
typedef enum HakaTrapType {
- /* 0x00 */ HAKA_TRAP_GUILLOTINE_SLOW,
- /* 0x01 */ HAKA_TRAP_SPIKED_BOX,
- /* 0x02 */ HAKA_TRAP_SPIKED_WALL,
- /* 0x03 */ HAKA_TRAP_SPIKED_WALL_2,
- /* 0x04 */ HAKA_TRAP_PROPELLER,
+ /* 0x00 */ HAKA_TRAP_GUILLOTINE,
+ /* 0x01 */ HAKA_TRAP_SPIKED_CRUSHER,
+ /* 0x02 */ HAKA_TRAP_SPIKED_WALL_EAST,
+ /* 0x03 */ HAKA_TRAP_SPIKED_WALL_WEST,
+ /* 0x04 */ HAKA_TRAP_FAN_BLADE,
/* 0x05 */ HAKA_TRAP_GUILLOTINE_FAST
} HakaTrapType;
@@ -21,9 +21,13 @@ typedef struct BgHakaTrap {
/* 0x0000 */ DynaPolyActor dyna;
/* 0x0164 */ BgHakaTrapActionFunc actionFunc;
/* 0x0168 */ u8 timer;
- /* 0x0169 */ u8 unk_169;
- /* 0x016A */ s16 unk_16A; // used as boolean for HAKA_TRAP_GUILLOTINE_SLOW/FAST, s16 for HAKA_TRAP_SPIKED_BOX
- /* 0x016C */ Vec3f unk_16C;
+ /* 0x0169 */ u8 isSpikedCrusherStationary;
+ /* 0x016A */ union {
+ s16 isGuillotineFast; // 0 slow, 1 fast
+ s16 spikedCrusherStepY; // when lifting the crusher, it will pause briefly at this height before being
+ // lifted to its maximum height
+ };
+ /* 0x016C */ Vec3f chainLiftSfxPos;
/* 0x0178 */ ColliderCylinder colliderCylinder;
/* 0x01C4 */ ColliderTris spikesCollider;
/* 0x01E4 */ ColliderTrisElement spikesColliderElements[2];
diff --git a/src/overlays/actors/ovl_Bg_Haka_Tubo/z_bg_haka_tubo.c b/src/overlays/actors/ovl_Bg_Haka_Tubo/z_bg_haka_tubo.c
index c86bc3abda..a1b2e46f76 100644
--- a/src/overlays/actors/ovl_Bg_Haka_Tubo/z_bg_haka_tubo.c
+++ b/src/overlays/actors/ovl_Bg_Haka_Tubo/z_bg_haka_tubo.c
@@ -17,7 +17,8 @@
#include "effect.h"
#include "play_state.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_fragments_2_model.h"
+#include "assets/objects/gameplay_keep/gameplay_keep_0x173D0.h"
#include "assets/objects/object_haka_objects/object_haka_objects.h"
#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
diff --git a/src/overlays/actors/ovl_Bg_Haka_Zou/z_bg_haka_zou.c b/src/overlays/actors/ovl_Bg_Haka_Zou/z_bg_haka_zou.c
index 40c5797627..f2218398ae 100644
--- a/src/overlays/actors/ovl_Bg_Haka_Zou/z_bg_haka_zou.c
+++ b/src/overlays/actors/ovl_Bg_Haka_Zou/z_bg_haka_zou.c
@@ -1,7 +1,7 @@
/*
* File: z_bg_haka_zou.c
* Overlay: ovl_Bg_Haka_Zou
- * Description: Statue and Wall (Shadow Temple)
+ * Description: Bombable Shadow Temple themed objects
*/
#include "z_bg_haka_zou.h"
@@ -20,26 +20,19 @@
#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
-typedef enum ShadowTempleAssetsType {
- /* 0x0 */ STA_GIANT_BIRD_STATUE,
- /* 0x1 */ STA_BOMBABLE_SKULL_WALL,
- /* 0x2 */ STA_BOMBABLE_RUBBLE,
- /* 0x3 */ STA_UNKNOWN
-} ShadowTempleAssetsType;
-
void BgHakaZou_Init(Actor* thisx, PlayState* play);
void BgHakaZou_Destroy(Actor* thisx, PlayState* play);
void BgHakaZou_Update(Actor* thisx, PlayState* play);
void BgHakaZou_Draw(Actor* thisx, PlayState* play);
-void BgHakaZou_Wait(BgHakaZou* this, PlayState* play);
-void func_80882BDC(BgHakaZou* this, PlayState* play);
-void func_80883000(BgHakaZou* this, PlayState* play);
-void func_80883104(BgHakaZou* this, PlayState* play);
-void func_80883144(BgHakaZou* this, PlayState* play);
-void func_80883254(BgHakaZou* this, PlayState* play);
-void func_80883328(BgHakaZou* this, PlayState* play);
-void func_808834D8(BgHakaZou* this, PlayState* play);
+void BgHakaZou_WaitForObject(BgHakaZou* this, PlayState* play);
+void BgHakaZou_CrumbleSkullWall(BgHakaZou* this, PlayState* play);
+void BgHakaZou_WaitForHit(BgHakaZou* this, PlayState* play);
+void BgHakaZou_IdleKill(BgHakaZou* this, PlayState* play);
+void BgHakaZou_BirdStatueAnim_Explode(BgHakaZou* this, PlayState* play);
+void BgHakaZou_BirdStatueAnim_Shear(BgHakaZou* this, PlayState* play);
+void BgHakaZou_BirdStatueAnim_Topple(BgHakaZou* this, PlayState* play);
+void BgHakaZou_BirdStatueAnim_Settle(BgHakaZou* this, PlayState* play);
void BgHakaZou_DoNothing(BgHakaZou* this, PlayState* play);
static ColliderCylinderInit sCylinderInit = {
@@ -90,7 +83,7 @@ void BgHakaZou_Init(Actor* thisx, PlayState* play) {
this->switchFlag = PARAMS_GET_U(thisx->params, 8, 8);
thisx->params &= 0xFF;
- if (thisx->params == STA_UNKNOWN) {
+ if (thisx->params == BGHAKAZOU_TYPE_SKULL_WALL_RUBBLE) {
Actor_SetScale(thisx, (Rand_ZeroOne() * 0.005f) + 0.025f);
thisx->speed = Rand_ZeroOne();
@@ -105,36 +98,38 @@ void BgHakaZou_Init(Actor* thisx, PlayState* play) {
DynaPolyActor_Init(&this->dyna, 0);
- if (thisx->params == STA_GIANT_BIRD_STATUE) {
+ if (thisx->params == BGHAKAZOU_TYPE_GIANT_BIRD_STATUE) {
thisx->cullingVolumeDistance = 2000.0f;
thisx->cullingVolumeScale = 3000.0f;
thisx->cullingVolumeDownward = 3000.0f;
}
}
- this->requiredObjectSlot = (thisx->params == STA_BOMBABLE_RUBBLE)
+ this->requiredObjectSlot = (thisx->params == BGHAKAZOU_TYPE_BOMBABLE_RUBBLE)
? Object_GetSlot(&play->objectCtx, OBJECT_HAKACH_OBJECTS)
: Object_GetSlot(&play->objectCtx, OBJECT_HAKA_OBJECTS);
if (this->requiredObjectSlot < 0) {
Actor_Kill(thisx);
- } else if ((thisx->params != STA_UNKNOWN) && Flags_GetSwitch(play, this->switchFlag)) {
- if (thisx->params != STA_GIANT_BIRD_STATUE) {
+ } else if (thisx->params != BGHAKAZOU_TYPE_SKULL_WALL_RUBBLE && Flags_GetSwitch(play, this->switchFlag)) {
+ if (thisx->params != BGHAKAZOU_TYPE_GIANT_BIRD_STATUE) {
+ // Object has already been destroyed
Actor_Kill(thisx);
} else {
+ // Initialize the statue toppled over
thisx->shape.rot.x = -0x4000;
thisx->world.pos.z -= 80.0f;
- thisx->world.pos.y -= 54.0f;
+ thisx->world.pos.y -= 40 + 14;
}
}
- this->actionFunc = BgHakaZou_Wait;
+ this->actionFunc = BgHakaZou_WaitForObject;
}
void BgHakaZou_Destroy(Actor* thisx, PlayState* play) {
BgHakaZou* this = (BgHakaZou*)thisx;
- if (this->dyna.actor.params != STA_UNKNOWN) {
+ if (this->dyna.actor.params != BGHAKAZOU_TYPE_SKULL_WALL_RUBBLE) {
DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
Collider_DestroyCylinder(play, &this->collider);
}
@@ -165,48 +160,49 @@ void func_808828F4(BgHakaZou* this, PlayState* play) {
}
}
-void BgHakaZou_Wait(BgHakaZou* this, PlayState* play) {
- CollisionHeader* colHeader;
+void BgHakaZou_WaitForObject(BgHakaZou* this, PlayState* play) {
if (Object_IsLoaded(&play->objectCtx, this->requiredObjectSlot)) {
this->dyna.actor.objectSlot = this->requiredObjectSlot;
this->dyna.actor.draw = BgHakaZou_Draw;
- if (this->dyna.actor.params == STA_UNKNOWN) {
- this->actionFunc = func_80882BDC;
+ if (this->dyna.actor.params == BGHAKAZOU_TYPE_SKULL_WALL_RUBBLE) {
+ this->actionFunc = BgHakaZou_CrumbleSkullWall;
} else {
- Actor_SetObjectDependency(play, &this->dyna.actor);
+ CollisionHeader* colHeader;
+ Actor_SetObjectDependency(play, &this->dyna.actor);
colHeader = NULL;
- if (this->dyna.actor.params == STA_GIANT_BIRD_STATUE) {
- CollisionHeader_GetVirtual(&object_haka_objects_Col_006F70, &colHeader);
+ if (this->dyna.actor.params == BGHAKAZOU_TYPE_GIANT_BIRD_STATUE) {
+ CollisionHeader_GetVirtual(&gShadowTempleBirdStatueCol, &colHeader);
this->collider.dim.radius = 80;
this->collider.dim.height = 100;
this->collider.dim.yShift = -30;
this->collider.dim.pos.x -= 56;
this->collider.dim.pos.z += 56;
this->dyna.actor.cullingVolumeScale = 1500.0f;
- } else if (this->dyna.actor.params == STA_BOMBABLE_SKULL_WALL) {
- CollisionHeader_GetVirtual(&object_haka_objects_Col_005E30, &colHeader);
+ } else if (this->dyna.actor.params == BGHAKAZOU_TYPE_BOMBABLE_SKULL_WALL) {
+ CollisionHeader_GetVirtual(&gShadowTempleSkullWallCol, &colHeader);
this->collider.dim.yShift = -50;
- } else {
- CollisionHeader_GetVirtual(&gBotwBombSpotCol, &colHeader);
+ } else /* BGHAKAZOU_TYPE_BOMBABLE_RUBBLE */ {
+ CollisionHeader_GetVirtual(&gBotwBombableRubbleCol, &colHeader);
this->collider.dim.radius = 55;
this->collider.dim.height = 20;
}
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader);
- if ((this->dyna.actor.params == STA_GIANT_BIRD_STATUE) && Flags_GetSwitch(play, this->switchFlag)) {
+ if ((this->dyna.actor.params == BGHAKAZOU_TYPE_GIANT_BIRD_STATUE) &&
+ Flags_GetSwitch(play, this->switchFlag)) {
this->actionFunc = BgHakaZou_DoNothing;
} else {
- this->actionFunc = func_80883000;
+ this->actionFunc = BgHakaZou_WaitForHit;
}
}
}
}
-void func_80882BDC(BgHakaZou* this, PlayState* play) {
+void BgHakaZou_CrumbleSkullWall(BgHakaZou* this, PlayState* play) {
if (this->timer != 0) {
this->timer--;
}
@@ -230,7 +226,7 @@ void func_80882BDC(BgHakaZou* this, PlayState* play) {
}
}
-void func_80882CC4(BgHakaZou* this, PlayState* play) {
+void BgHakaZou_SpawnSkullWallRubble(BgHakaZou* this, PlayState* play) {
s32 i;
s32 j;
Vec3f actorSpawnPos;
@@ -248,13 +244,14 @@ void func_80882CC4(BgHakaZou* this, PlayState* play) {
actorSpawnPos.y = this->dyna.actor.world.pos.y + (i - 1) * 55;
Actor_Spawn(&play->actorCtx, play, ACTOR_BG_HAKA_ZOU, actorSpawnPos.x, actorSpawnPos.y, actorSpawnPos.z, 0,
- this->dyna.actor.shape.rot.y, 0, this->dyna.actor.params + 2);
+ this->dyna.actor.shape.rot.y, 0,
+ this->dyna.actor.params + 2); // this passes BGHAKAZOU_TYPE_SKULL_WALL_RUBBLE into params
func_800286CC(play, &actorSpawnPos, &sZeroVec, &sZeroVec, 1000, 50);
}
}
}
-void func_80882E54(BgHakaZou* this, PlayState* play) {
+void BgHakaZou_SpawnRubbleParticles(BgHakaZou* this, PlayState* play) {
Vec3f fragmentPos;
s32 i;
s32 j;
@@ -264,44 +261,44 @@ void func_80882E54(BgHakaZou* this, PlayState* play) {
fragmentPos.y = this->collider.dim.pos.y;
fragmentPos.z = this->collider.dim.pos.z;
- EffectSsHahen_SpawnBurst(play, &fragmentPos, 10.0f, 0, 10, 10, 4, 141, 40, gBotwBombSpotDL);
+ EffectSsHahen_SpawnBurst(play, &fragmentPos, 10.0f, 0, 10, 10, 4, 141, 40, gBotwBombableRubbleDL);
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++) {
fragmentPos.x = this->collider.dim.pos.x + (((j * 2) - 1) * num);
fragmentPos.z = this->collider.dim.pos.z + (((i * 2) - 1) * num);
- EffectSsHahen_SpawnBurst(play, &fragmentPos, 10.0f, 0, 10, 10, 4, 141, 40, gBotwBombSpotDL);
+ EffectSsHahen_SpawnBurst(play, &fragmentPos, 10.0f, 0, 10, 10, 4, 141, 40, gBotwBombableRubbleDL);
func_800286CC(play, &fragmentPos, &sZeroVec, &sZeroVec, 1000, 50);
}
}
}
-void func_80883000(BgHakaZou* this, PlayState* play) {
+void BgHakaZou_WaitForHit(BgHakaZou* this, PlayState* play) {
if (this->collider.base.acFlags & AC_HIT) {
Flags_SetSwitch(play, this->switchFlag);
- if (this->dyna.actor.params == STA_GIANT_BIRD_STATUE) {
+ if (this->dyna.actor.params == BGHAKAZOU_TYPE_GIANT_BIRD_STATUE) {
this->timer = 20;
- this->actionFunc = func_80883144;
+ this->actionFunc = BgHakaZou_BirdStatueAnim_Explode;
OnePointCutscene_Init(play, 3400, 999, &this->dyna.actor, CAM_ID_MAIN);
- } else if (this->dyna.actor.params == 2) {
- func_80882E54(this, play);
+ } else if (this->dyna.actor.params == BGHAKAZOU_TYPE_BOMBABLE_RUBBLE) {
+ BgHakaZou_SpawnRubbleParticles(this, play);
this->dyna.actor.draw = NULL;
this->timer = 1;
Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_EXPLOSION);
- this->actionFunc = func_80883104;
- } else {
- func_80882CC4(this, play);
+ this->actionFunc = BgHakaZou_IdleKill;
+ } else /* BGHAKAZOU_TYPE_BOMBABLE_SKULL_WALL */ {
+ BgHakaZou_SpawnSkullWallRubble(this, play);
this->timer = 1;
Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_WALL_BROKEN);
- this->actionFunc = func_80883104;
+ this->actionFunc = BgHakaZou_IdleKill;
}
} else {
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
}
}
-void func_80883104(BgHakaZou* this, PlayState* play) {
+void BgHakaZou_IdleKill(BgHakaZou* this, PlayState* play) {
if (this->timer != 0) {
this->timer--;
}
@@ -311,7 +308,7 @@ void func_80883104(BgHakaZou* this, PlayState* play) {
}
}
-void func_80883144(BgHakaZou* this, PlayState* play) {
+void BgHakaZou_BirdStatueAnim_Explode(BgHakaZou* this, PlayState* play) {
Vec3f explosionPos;
if (this->timer != 0) {
@@ -329,11 +326,11 @@ void func_80883144(BgHakaZou* this, PlayState* play) {
if (this->timer == 0) {
this->timer = 20;
- this->actionFunc = func_80883254;
+ this->actionFunc = BgHakaZou_BirdStatueAnim_Shear;
}
}
-void func_80883254(BgHakaZou* this, PlayState* play) {
+void BgHakaZou_BirdStatueAnim_Shear(BgHakaZou* this, PlayState* play) {
f32 moveDist = (Rand_ZeroOne() * 0.5f) + 0.5f;
Math_StepToF(&this->dyna.actor.world.pos.z, this->dyna.actor.home.pos.z - 80.0f, 2.0f * moveDist);
@@ -346,14 +343,14 @@ void func_80883254(BgHakaZou* this, PlayState* play) {
if (this->timer == 0) {
this->timer = 60;
this->dyna.actor.world.rot.x = 8;
- this->actionFunc = func_80883328;
+ this->actionFunc = BgHakaZou_BirdStatueAnim_Topple;
}
} else {
func_808828F4(this, play);
}
}
-void func_80883328(BgHakaZou* this, PlayState* play) {
+void BgHakaZou_BirdStatueAnim_Topple(BgHakaZou* this, PlayState* play) {
Vec3f effectPos;
s32 i;
s32 j;
@@ -377,19 +374,30 @@ void func_80883328(BgHakaZou* this, PlayState* play) {
Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_STONE_BOUND);
this->timer = 25;
- this->actionFunc = func_808834D8;
+ this->actionFunc = BgHakaZou_BirdStatueAnim_Settle;
}
}
-void func_808834D8(BgHakaZou* this, PlayState* play) {
+void BgHakaZou_BirdStatueAnim_Settle(BgHakaZou* this, PlayState* play) {
f32 moveDist;
if (this->timer != 0) {
this->timer--;
}
+ // The idea is to shake the pillar up and down on alternate frames, with the magnitude of the shaking decreasing
+ // linearly as the timer approaches zero. With an even numbered starting timer, the pillar will go up one frame,
+ // down the next with the same magnitude, cancelling out any movement (except perhaps for some miniscule rounding
+ // error). However, the starting timer is set to 25, (an odd number). This skips the increment step and shifts the
+ // pillar down an extra -14.4 units.
+ //
+ // The programmer was likely aware of a discrepancy as BgHakaZou_Init subtracts 14 units to account for this
+ // (resulting in a 0.4 unit discrepancy between post animation and the next time the actor is reloaded). Lowering
+ // the statue 14 units causes the model to clip into the ground, but it is also enough to make the pillar low enough
+ // for Link to climb on top of it if the player is missing keys.
+
moveDist = (this->timer % 2) ? 15.0f : -15.0f;
- this->dyna.actor.world.pos.y += ((this->timer & 0xFE) * 0.04f * moveDist);
+ this->dyna.actor.world.pos.y += ((this->timer & 0xFE) * (1.0f / 25) * moveDist);
if (this->timer == 0) {
this->actionFunc = BgHakaZou_DoNothing;
@@ -404,17 +412,17 @@ void BgHakaZou_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
- if (this->dyna.actor.params == 3) {
+ if (this->dyna.actor.params == BGHAKAZOU_TYPE_SKULL_WALL_RUBBLE) {
Actor_MoveXZGravity(&this->dyna.actor);
}
}
void BgHakaZou_Draw(Actor* thisx, PlayState* play) {
static Gfx* dLists[] = {
- object_haka_objects_DL_0064E0,
- object_haka_objects_DL_005CE0,
- gBotwBombSpotDL,
- object_haka_objects_DL_005CE0,
+ gShadowTempleBirdStatueDL,
+ gShadowTempleSkullWallDL,
+ gBotwBombableRubbleDL,
+ gShadowTempleSkullWallDL,
};
Gfx_DrawDListOpa(play, dLists[thisx->params]);
diff --git a/src/overlays/actors/ovl_Bg_Haka_Zou/z_bg_haka_zou.h b/src/overlays/actors/ovl_Bg_Haka_Zou/z_bg_haka_zou.h
index 1d4c4798d6..1f31cece45 100644
--- a/src/overlays/actors/ovl_Bg_Haka_Zou/z_bg_haka_zou.h
+++ b/src/overlays/actors/ovl_Bg_Haka_Zou/z_bg_haka_zou.h
@@ -4,6 +4,13 @@
#include "ultra64.h"
#include "actor.h"
+typedef enum BgHakaZouType {
+ /* 0x0 */ BGHAKAZOU_TYPE_GIANT_BIRD_STATUE,
+ /* 0x1 */ BGHAKAZOU_TYPE_BOMBABLE_SKULL_WALL,
+ /* 0x2 */ BGHAKAZOU_TYPE_BOMBABLE_RUBBLE,
+ /* 0x3 */ BGHAKAZOU_TYPE_SKULL_WALL_RUBBLE
+} BgHakaZouType;
+
struct BgHakaZou;
typedef void (*BgHakaZouActionFunc)(struct BgHakaZou*, struct PlayState*);
diff --git a/src/overlays/actors/ovl_Bg_Hidan_Curtain/z_bg_hidan_curtain.c b/src/overlays/actors/ovl_Bg_Hidan_Curtain/z_bg_hidan_curtain.c
index 780f11f164..f9c3d10fd5 100644
--- a/src/overlays/actors/ovl_Bg_Hidan_Curtain/z_bg_hidan_curtain.c
+++ b/src/overlays/actors/ovl_Bg_Hidan_Curtain/z_bg_hidan_curtain.c
@@ -18,7 +18,7 @@
#include "play_state.h"
#include "save.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/gameplay_keep_0x173D0.h"
#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
diff --git a/src/overlays/actors/ovl_Bg_Hidan_Fwbig/z_bg_hidan_fwbig.c b/src/overlays/actors/ovl_Bg_Hidan_Fwbig/z_bg_hidan_fwbig.c
index 1c6ca2164a..fd59ec7e57 100644
--- a/src/overlays/actors/ovl_Bg_Hidan_Fwbig/z_bg_hidan_fwbig.c
+++ b/src/overlays/actors/ovl_Bg_Hidan_Fwbig/z_bg_hidan_fwbig.c
@@ -19,7 +19,7 @@
#include "player.h"
#include "save.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/gameplay_keep_0x173D0.h"
#include "assets/objects/object_hidan_objects/object_hidan_objects.h"
#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
diff --git a/src/overlays/actors/ovl_Bg_Mori_Hineri/z_bg_mori_hineri.c b/src/overlays/actors/ovl_Bg_Mori_Hineri/z_bg_mori_hineri.c
index e06abd1114..613a1bf2ca 100644
--- a/src/overlays/actors/ovl_Bg_Mori_Hineri/z_bg_mori_hineri.c
+++ b/src/overlays/actors/ovl_Bg_Mori_Hineri/z_bg_mori_hineri.c
@@ -18,7 +18,7 @@
#include "play_state.h"
#include "player.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/gameplay_keep_0x49F20.h"
#include "assets/objects/object_box/object_box.h"
#include "assets/objects/object_mori_hineri1/object_mori_hineri1.h"
#include "assets/objects/object_mori_hineri1a/object_mori_hineri1a.h"
diff --git a/src/overlays/actors/ovl_Bg_Po_Syokudai/z_bg_po_syokudai.c b/src/overlays/actors/ovl_Bg_Po_Syokudai/z_bg_po_syokudai.c
index 0c1ce9924d..ed0094b8b0 100644
--- a/src/overlays/actors/ovl_Bg_Po_Syokudai/z_bg_po_syokudai.c
+++ b/src/overlays/actors/ovl_Bg_Po_Syokudai/z_bg_po_syokudai.c
@@ -15,7 +15,7 @@
#include "light.h"
#include "play_state.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_fire.h"
#include "assets/objects/object_syokudai/object_syokudai.h"
#define FLAGS 0
diff --git a/src/overlays/actors/ovl_Bg_Spot00_Hanebasi/z_bg_spot00_hanebasi.c b/src/overlays/actors/ovl_Bg_Spot00_Hanebasi/z_bg_spot00_hanebasi.c
index 6bb72a6921..d3f827b696 100644
--- a/src/overlays/actors/ovl_Bg_Spot00_Hanebasi/z_bg_spot00_hanebasi.c
+++ b/src/overlays/actors/ovl_Bg_Spot00_Hanebasi/z_bg_spot00_hanebasi.c
@@ -19,7 +19,7 @@
#include "player.h"
#include "save.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_fire.h"
#include "assets/objects/object_spot00_objects/object_spot00_objects.h"
#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
diff --git a/src/overlays/actors/ovl_Bg_Spot18_Basket/z_bg_spot18_basket.c b/src/overlays/actors/ovl_Bg_Spot18_Basket/z_bg_spot18_basket.c
index 51bccf7ca0..0fb4bc9842 100644
--- a/src/overlays/actors/ovl_Bg_Spot18_Basket/z_bg_spot18_basket.c
+++ b/src/overlays/actors/ovl_Bg_Spot18_Basket/z_bg_spot18_basket.c
@@ -1,3 +1,9 @@
+/*
+ * File: z_bg_spot18_basket.c
+ * Overlay: ovl_Bg_Spot18_Basket
+ * Description: Goron Vase
+ */
+
#include "z_bg_spot18_basket.h"
#include "libc64/qrand.h"
@@ -24,18 +30,18 @@ void BgSpot18Basket_Destroy(Actor* thisx, PlayState* play);
void BgSpot18Basket_Update(Actor* thisx, PlayState* play);
void BgSpot18Basket_Draw(Actor* thisx, PlayState* play);
-void func_808B7BCC(BgSpot18Basket* this, PlayState* play);
-void func_808B7AEC(BgSpot18Basket* this);
-void func_808B7B58(BgSpot18Basket* this);
-void func_808B7BB0(BgSpot18Basket* this);
-void func_808B7D38(BgSpot18Basket* this);
-void func_808B7F74(BgSpot18Basket* this);
-void func_808B818C(BgSpot18Basket* this);
-void func_808B7AFC(BgSpot18Basket* this, PlayState* play);
-void func_808B7B6C(BgSpot18Basket* this, PlayState* play);
-void func_808B7D50(BgSpot18Basket* this, PlayState* play);
-void func_808B7FC0(BgSpot18Basket* this, PlayState* play);
-void func_808B81A0(BgSpot18Basket* this, PlayState* play);
+void BgSpot18Basket_Spinning(BgSpot18Basket* this, PlayState* play);
+void BgSpot18Basket_SetupInactive(BgSpot18Basket* this);
+void BgSpot18Basket_SetupActivation(BgSpot18Basket* this);
+void BgSpot18Basket_SetupSpinning(BgSpot18Basket* this);
+void BgSpot18Basket_SetupExplosionCs(BgSpot18Basket* this);
+void BgSpot18Basket_SetupStopping(BgSpot18Basket* this);
+void BgSpot18Basket_SetupGivingPrize(BgSpot18Basket* this);
+void BgSpot18Basket_Inactive(BgSpot18Basket* this, PlayState* play);
+void BgSpot18Basket_Activation(BgSpot18Basket* this, PlayState* play);
+void BgSpot18Basket_ExplosionCs(BgSpot18Basket* this, PlayState* play);
+void BgSpot18Basket_Stopping(BgSpot18Basket* this, PlayState* play);
+void BgSpot18Basket_GivingPrize(BgSpot18Basket* this, PlayState* play);
ActorProfile Bg_Spot18_Basket_Profile = {
/**/ ACTOR_BG_SPOT18_BASKET,
@@ -87,9 +93,9 @@ static ColliderJntSphInit sJntSphInit = {
sJntSphElementsInit,
};
-static s16 D_808B85C8[] = { 0x8000, 0x2AAA, 0xD555, 0x0000 };
+static s16 sGoronVaseStoppedRotY[] = { 0x8000, 0x2AAA, 0xD555, 0x0000 };
-void func_808B7710(Actor* thisx, PlayState* play) {
+void BgSpot18Basket_InitColliderJntSph(Actor* thisx, PlayState* play) {
BgSpot18Basket* this = (BgSpot18Basket*)thisx;
Collider_InitJntSph(play, &this->colliderJntSph);
@@ -97,8 +103,8 @@ void func_808B7710(Actor* thisx, PlayState* play) {
this->dyna.actor.colChkInfo.mass = MASS_IMMOVABLE;
}
-void func_808B7770(BgSpot18Basket* this, PlayState* play, f32 arg2) {
- static s16 D_808B85D0 = 0;
+void BgSpot18Basket_SpawnDustClouds(BgSpot18Basket* this, PlayState* play, f32 spawnRate) {
+ static s16 spawnPos = 0;
Vec3f acceleration;
Vec3f velocity;
Vec3f position;
@@ -108,14 +114,14 @@ void func_808B7770(BgSpot18Basket* this, PlayState* play, f32 arg2) {
f32 sinValue;
for (i = 0; i != 2; i++) {
- if (arg2 < Rand_ZeroOne()) {
+ if (spawnRate < Rand_ZeroOne()) {
continue;
}
- D_808B85D0 += 0x7530;
+ spawnPos += 0x7530;
- sinValue = Math_SinS(D_808B85D0);
- cosValue = Math_CosS(D_808B85D0);
+ sinValue = Math_SinS(spawnPos);
+ cosValue = Math_CosS(spawnPos);
randomValue = (Rand_ZeroOne() * 35.0f) + 35.0f;
@@ -149,7 +155,7 @@ void BgSpot18Basket_Init(Actor* thisx, PlayState* play) {
CollisionHeader* colHeader = NULL;
DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS | DYNA_TRANSFORM_ROT_Y);
- func_808B7710(&this->dyna.actor, play);
+ BgSpot18Basket_InitColliderJntSph(&this->dyna.actor, play);
CollisionHeader_GetVirtual(&gGoronCityVaseCol, &colHeader);
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader);
@@ -160,11 +166,11 @@ void BgSpot18Basket_Init(Actor* thisx, PlayState* play) {
this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y;
if (Flags_GetSwitch(play, PARAMS_GET_U(this->dyna.actor.params, 8, 6))) {
- func_808B7BB0(this);
+ BgSpot18Basket_SetupSpinning(this);
return;
}
- func_808B7AEC(this);
+ BgSpot18Basket_SetupInactive(this);
Actor_SpawnAsChild(&play->actorCtx, &this->dyna.actor, play, ACTOR_BG_SPOT18_FUTA, this->dyna.actor.world.pos.x,
this->dyna.actor.world.pos.y, this->dyna.actor.world.pos.z, this->dyna.actor.shape.rot.x,
this->dyna.actor.shape.rot.y + 0x1555, this->dyna.actor.shape.rot.z, -1);
@@ -185,50 +191,52 @@ void BgSpot18Basket_Destroy(Actor* thisx, PlayState* play) {
Collider_DestroyJntSph(play, &this->colliderJntSph);
}
-void func_808B7AEC(BgSpot18Basket* this) {
- this->actionFunc = func_808B7AFC;
+void BgSpot18Basket_SetupInactive(BgSpot18Basket* this) {
+ this->actionFunc = BgSpot18Basket_Inactive;
}
-void func_808B7AFC(BgSpot18Basket* this, PlayState* play) {
+void BgSpot18Basket_Inactive(BgSpot18Basket* this, PlayState* play) {
if (Flags_GetSwitch(play, PARAMS_GET_U(this->dyna.actor.params, 8, 6))) {
OnePointCutscene_Init(play, 4220, 80, &this->dyna.actor, CAM_ID_MAIN);
- func_808B7B58(this);
+ BgSpot18Basket_SetupActivation(this);
}
}
-void func_808B7B58(BgSpot18Basket* this) {
- this->actionFunc = func_808B7B6C;
- this->unk_216 = 0;
+void BgSpot18Basket_SetupActivation(BgSpot18Basket* this) {
+ this->actionFunc = BgSpot18Basket_Activation;
+ this->timer = 0;
}
-void func_808B7B6C(BgSpot18Basket* this, PlayState* play) {
- if (this->unk_216 > 20) {
- func_808B7BB0(this);
+void BgSpot18Basket_Activation(BgSpot18Basket* this, PlayState* play) {
+ if (this->timer > 20) {
+ BgSpot18Basket_SetupSpinning(this);
this->dyna.actor.child->parent = NULL;
this->dyna.actor.child = NULL;
}
}
-void func_808B7BB0(BgSpot18Basket* this) {
- this->actionFunc = func_808B7BCC;
- this->unk_210 = this->unk_20C = 0;
+void BgSpot18Basket_SetupSpinning(BgSpot18Basket* this) {
+ this->actionFunc = BgSpot18Basket_Spinning;
+ this->spinRate = this->circleRate = 0;
}
-void func_808B7BCC(BgSpot18Basket* this, PlayState* play) {
+void BgSpot18Basket_Spinning(BgSpot18Basket* this, PlayState* play) {
f32 positionDiff;
Actor* colliderBaseAc;
- Math_StepToS(&this->unk_210, 0x1F4, 0x1E);
+ Math_StepToS(&this->spinRate, 0x1F4, 0x1E);
- this->dyna.actor.shape.rot.y += this->unk_210;
+ this->dyna.actor.shape.rot.y += this->spinRate;
- Math_StepToF(&this->unk_208, 50.0f, 1.5f);
- Math_StepToS(&this->unk_20C, 400, 15);
+ Math_StepToF(&this->circleRadius, 50.0f, 1.5f);
+ Math_StepToS(&this->circleRate, 400, 15);
- this->unk_20E += this->unk_20C;
+ this->circleMoveAngle += this->circleRate;
- this->dyna.actor.world.pos.x = (Math_SinS(this->unk_20E) * this->unk_208) + this->dyna.actor.home.pos.x;
- this->dyna.actor.world.pos.z = (Math_CosS(this->unk_20E) * this->unk_208) + this->dyna.actor.home.pos.z;
+ this->dyna.actor.world.pos.x =
+ (Math_SinS(this->circleMoveAngle) * this->circleRadius) + this->dyna.actor.home.pos.x;
+ this->dyna.actor.world.pos.z =
+ (Math_CosS(this->circleMoveAngle) * this->circleRadius) + this->dyna.actor.home.pos.z;
if (this->colliderJntSph.base.acFlags & AC_HIT) {
colliderBaseAc = this->colliderJntSph.base.ac;
@@ -240,7 +248,7 @@ void func_808B7BCC(BgSpot18Basket* this, PlayState* play) {
if (Math3D_Dist2DSq(colliderBaseAc->world.pos.z, this->colliderJntSph.base.ac->world.pos.x,
this->dyna.actor.world.pos.z, this->dyna.actor.world.pos.x) < SQ(32.0f)) {
OnePointCutscene_Init(play, 4210, 240, &this->dyna.actor, CAM_ID_MAIN);
- func_808B7D38(this);
+ BgSpot18Basket_SetupExplosionCs(this);
DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
}
}
@@ -249,191 +257,193 @@ void func_808B7BCC(BgSpot18Basket* this, PlayState* play) {
Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_ELEVATOR_MOVE - SFX_FLAG);
}
-void func_808B7D38(BgSpot18Basket* this) {
- this->actionFunc = func_808B7D50;
- this->unk_216 = 0;
- this->unk_214 = 0;
+void BgSpot18Basket_SetupExplosionCs(BgSpot18Basket* this) {
+ this->actionFunc = BgSpot18Basket_ExplosionCs;
+ this->timer = 0;
+ this->pivotAltitude = 0;
}
-void func_808B7D50(BgSpot18Basket* this, PlayState* play) {
- if (this->unk_216 > 120) {
- Math_StepToS(&this->unk_210, 0x3E8, 0x32);
+void BgSpot18Basket_ExplosionCs(BgSpot18Basket* this, PlayState* play) {
+ if (this->timer > 120) {
+ Math_StepToS(&this->spinRate, 0x3E8, 0x32);
} else {
- Math_StepToS(&this->unk_210, 0xBB8, 0x64);
+ Math_StepToS(&this->spinRate, 0xBB8, 0x64);
}
- this->dyna.actor.shape.rot.y += this->unk_210;
+ this->dyna.actor.shape.rot.y += this->spinRate;
- if (this->unk_216 < 70) {
- Math_StepToF(&this->unk_208, 100.0f, 2.0f);
+ if (this->timer < 70) {
+ Math_StepToF(&this->circleRadius, 100.0f, 2.0f);
} else {
- Math_StepToF(&this->unk_208, 0.0f, 2.0f);
+ Math_StepToF(&this->circleRadius, 0.0f, 2.0f);
}
- Math_StepToS(&this->unk_20C, 1000, 20);
+ Math_StepToS(&this->circleRate, 1000, 20);
- this->unk_20E += this->unk_20C;
+ this->circleMoveAngle += this->circleRate;
- this->dyna.actor.world.pos.x = (Math_SinS(this->unk_20E) * this->unk_208) + this->dyna.actor.home.pos.x;
- this->dyna.actor.world.pos.z = (Math_CosS(this->unk_20E) * this->unk_208) + this->dyna.actor.home.pos.z;
+ this->dyna.actor.world.pos.x =
+ (Math_SinS(this->circleMoveAngle) * this->circleRadius) + this->dyna.actor.home.pos.x;
+ this->dyna.actor.world.pos.z =
+ (Math_CosS(this->circleMoveAngle) * this->circleRadius) + this->dyna.actor.home.pos.z;
- this->unk_212 += 0xBB8;
+ this->pivotAzimuth += 0xBB8;
- Math_StepToS(&this->unk_214, 0x5DC, 0x1E);
+ Math_StepToS(&this->pivotAltitude, 0x5DC, 0x1E);
- this->dyna.actor.shape.rot.x = Math_CosS(this->unk_212) * this->unk_214;
- this->dyna.actor.shape.rot.z = -Math_SinS(this->unk_212) * this->unk_214;
+ this->dyna.actor.shape.rot.x = Math_CosS(this->pivotAzimuth) * this->pivotAltitude;
+ this->dyna.actor.shape.rot.z = -Math_SinS(this->pivotAzimuth) * this->pivotAltitude;
- if (this->unk_216 > 140) {
- func_808B7F74(this);
+ if (this->timer > 140) {
+ BgSpot18Basket_SetupStopping(this);
}
- if (this->unk_216 < 80) {
- func_808B7770(this, play, 1.0f);
+ if (this->timer < 80) {
+ BgSpot18Basket_SpawnDustClouds(this, play, 1.0f);
} else {
- func_808B7770(this, play, 0.8f);
+ BgSpot18Basket_SpawnDustClouds(this, play, 0.8f);
}
{
- f32 tempValue2 = (this->unk_210 - 500) * 0.0006f;
- f32 tempValue = CLAMP(tempValue2, 0.0f, 1.5f);
+ f32 freqScale = (this->spinRate - 0x1F4) * 0.0006f;
+ f32 clampedFreqScale = CLAMP(freqScale, 0.0f, 1.5f);
- func_800F436C(&this->dyna.actor.projectedPos, NA_SE_EV_WALL_MOVE_SP - SFX_FLAG, tempValue);
+ func_800F436C(&this->dyna.actor.projectedPos, NA_SE_EV_WALL_MOVE_SP - SFX_FLAG, clampedFreqScale);
}
}
-void func_808B7F74(BgSpot18Basket* this) {
+void BgSpot18Basket_SetupStopping(BgSpot18Basket* this) {
s16 shapeRotY;
shapeRotY = this->dyna.actor.shape.rot.y;
- this->actionFunc = func_808B7FC0;
+ this->actionFunc = BgSpot18Basket_Stopping;
if ((shapeRotY < -0x2E93) || (shapeRotY >= 0x7C19)) {
- this->unk_218 = 2;
+ this->prize = 2;
} else if (shapeRotY < 0x26C2) {
- this->unk_218 = 1;
+ this->prize = 1;
} else {
- this->unk_218 = 0;
+ this->prize = 0;
}
- this->unk_216 = 0;
+ this->timer = 0;
}
-void func_808B7FC0(BgSpot18Basket* this, PlayState* play) {
+void BgSpot18Basket_Stopping(BgSpot18Basket* this, PlayState* play) {
s32 pad;
- s32 tempUnk214;
- s16 arrayValue;
+ s32 tempAltitude;
+ s16 stoppedRotY;
- this->unk_212 += 0xBB8;
+ this->pivotAzimuth += 0xBB8;
- if (this->unk_216 >= 13) {
- tempUnk214 = Math_StepToS(&this->unk_214, 0, 55);
+ if (this->timer >= 13) {
+ tempAltitude = Math_StepToS(&this->pivotAltitude, 0, 55);
} else {
- tempUnk214 = 0;
+ tempAltitude = 0;
}
- this->dyna.actor.shape.rot.x = Math_CosS(this->unk_212) * this->unk_214;
- this->dyna.actor.shape.rot.z = -Math_SinS(this->unk_212) * this->unk_214;
+ this->dyna.actor.shape.rot.x = Math_CosS(this->pivotAzimuth) * this->pivotAltitude;
+ this->dyna.actor.shape.rot.z = -Math_SinS(this->pivotAzimuth) * this->pivotAltitude;
- Math_StepToS(&this->unk_210, 0x1F4, 0xA);
- this->dyna.actor.shape.rot.y += this->unk_210;
+ Math_StepToS(&this->spinRate, 0x1F4, 0xA);
+ this->dyna.actor.shape.rot.y += this->spinRate;
- if (tempUnk214 != 0) {
- arrayValue = D_808B85C8[this->unk_218];
+ if (tempAltitude != 0) {
+ stoppedRotY = sGoronVaseStoppedRotY[this->prize];
- if ((s16)(this->dyna.actor.shape.rot.y - arrayValue) >= 0) {
- this->dyna.actor.shape.rot.y = arrayValue;
+ if ((s16)(this->dyna.actor.shape.rot.y - stoppedRotY) >= 0) {
+ this->dyna.actor.shape.rot.y = stoppedRotY;
- func_808B818C(this);
+ BgSpot18Basket_SetupGivingPrize(this);
DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
}
}
- if (this->unk_216 < 30) {
- func_808B7770(this, play, 0.5f);
+ if (this->timer < 30) {
+ BgSpot18Basket_SpawnDustClouds(this, play, 0.5f);
} else {
- func_808B7770(this, play, 0.3f);
+ BgSpot18Basket_SpawnDustClouds(this, play, 0.3f);
}
{
- f32 tempUnk210 = (this->unk_210 - 500) * 0.0006f;
- f32 clampedTempUnk210 = CLAMP(tempUnk210, 0.0f, 1.5f);
+ f32 freqScale = (this->spinRate - 0x1F4) * 0.0006f;
+ f32 clampedFreqScale = CLAMP(freqScale, 0.0f, 1.5f);
- func_800F436C(&this->dyna.actor.projectedPos, NA_SE_EV_WALL_MOVE_SP - SFX_FLAG, clampedTempUnk210);
+ func_800F436C(&this->dyna.actor.projectedPos, NA_SE_EV_WALL_MOVE_SP - SFX_FLAG, clampedFreqScale);
}
}
-void func_808B818C(BgSpot18Basket* this) {
- this->actionFunc = func_808B81A0;
- this->unk_216 = 0;
+void BgSpot18Basket_SetupGivingPrize(BgSpot18Basket* this) {
+ this->actionFunc = BgSpot18Basket_GivingPrize;
+ this->timer = 0;
}
-static s16 D_808B85E4[] = { -0x0FA0, 0x0320, 0x0FA0 };
+static s16 sGoronVaseCollectibleRotY[] = { -0x0FA0, 0x0320, 0x0FA0 };
-void func_808B81A0(BgSpot18Basket* this, PlayState* play) {
+void BgSpot18Basket_GivingPrize(BgSpot18Basket* this, PlayState* play) {
s32 i;
Actor* actor = &this->dyna.actor;
- Vec3f tempVector;
+ Vec3f spawnPos;
EnItem00* collectible;
- if (this->unk_216 == 1) {
- tempVector.x = actor->world.pos.x;
- tempVector.y = actor->world.pos.y + 170.0f;
- tempVector.z = actor->world.pos.z;
+ if (this->timer == 1) {
+ spawnPos.x = actor->world.pos.x;
+ spawnPos.y = actor->world.pos.y + 170.0f;
+ spawnPos.z = actor->world.pos.z;
- if (this->unk_218 == 0) {
- for (i = 0; i < ARRAY_COUNT(D_808B85E4); i++) {
- collectible = Item_DropCollectible(play, &tempVector, ITEM00_BOMBS_A);
+ if (this->prize == 0) {
+ for (i = 0; i < ARRAY_COUNT(sGoronVaseCollectibleRotY); i++) {
+ collectible = Item_DropCollectible(play, &spawnPos, ITEM00_BOMBS_A);
if (collectible != NULL) {
collectible->actor.velocity.y = 11.0f;
- collectible->actor.world.rot.y = D_808B85E4[i];
+ collectible->actor.world.rot.y = sGoronVaseCollectibleRotY[i];
}
}
- } else if (this->unk_218 == 1) {
- for (i = 0; i < ARRAY_COUNT(D_808B85E4); i++) {
- collectible = Item_DropCollectible(play, &tempVector, ITEM00_RUPEE_GREEN);
+ } else if (this->prize == 1) {
+ for (i = 0; i < ARRAY_COUNT(sGoronVaseCollectibleRotY); i++) {
+ collectible = Item_DropCollectible(play, &spawnPos, ITEM00_RUPEE_GREEN);
if (collectible != NULL) {
collectible->actor.velocity.y = 11.0f;
- collectible->actor.world.rot.y = D_808B85E4[i];
+ collectible->actor.world.rot.y = sGoronVaseCollectibleRotY[i];
}
}
- } else if (this->unk_218 == 2) {
- if ((this->unk_21A != 0) || Flags_GetCollectible(play, PARAMS_GET_U(actor->params, 0, 6))) {
- collectible = Item_DropCollectible(play, &tempVector, ITEM00_RUPEE_PURPLE);
+ } else if (this->prize == 2) {
+ if ((this->isHeartPieceGiven) || Flags_GetCollectible(play, PARAMS_GET_U(actor->params, 0, 6))) {
+ collectible = Item_DropCollectible(play, &spawnPos, ITEM00_RUPEE_PURPLE);
if (collectible != NULL) {
collectible->actor.velocity.y = 11.0f;
- collectible->actor.world.rot.y = D_808B85E4[1];
+ collectible->actor.world.rot.y = sGoronVaseCollectibleRotY[1];
}
} else {
- collectible = Item_DropCollectible(play, &tempVector,
+ collectible = Item_DropCollectible(play, &spawnPos,
(PARAMS_GET_U(actor->params, 0, 6) << 8) | ITEM00_HEART_PIECE);
if (collectible != NULL) {
collectible->actor.velocity.y = 11.0f;
- collectible->actor.world.rot.y = D_808B85E4[1];
- this->unk_21A = 1;
+ collectible->actor.world.rot.y = sGoronVaseCollectibleRotY[1];
+ this->isHeartPieceGiven = true;
}
}
- collectible = Item_DropCollectible(play, &tempVector, ITEM00_RUPEE_RED);
+ collectible = Item_DropCollectible(play, &spawnPos, ITEM00_RUPEE_RED);
if (collectible != NULL) {
collectible->actor.velocity.y = 11.0f;
- collectible->actor.world.rot.y = D_808B85E4[0];
+ collectible->actor.world.rot.y = sGoronVaseCollectibleRotY[0];
}
- collectible = Item_DropCollectible(play, &tempVector, ITEM00_RUPEE_BLUE);
+ collectible = Item_DropCollectible(play, &spawnPos, ITEM00_RUPEE_BLUE);
if (collectible != NULL) {
collectible->actor.velocity.y = 11.0f;
- collectible->actor.world.rot.y = D_808B85E4[2];
+ collectible->actor.world.rot.y = sGoronVaseCollectibleRotY[2];
}
}
- } else if (this->unk_216 == 2) {
- if (this->unk_218 == 2) {
+ } else if (this->timer == 2) {
+ if (this->prize == 2) {
Sfx_PlaySfxCentered(NA_SE_SY_CORRECT_CHIME);
} else {
Sfx_PlaySfxCentered(NA_SE_SY_TRE_BOX_APPEAR);
}
- } else if (this->unk_216 == 200) {
- func_808B7BB0(this);
+ } else if (this->timer == 200) {
+ BgSpot18Basket_SetupSpinning(this);
}
}
@@ -442,13 +452,13 @@ void BgSpot18Basket_Update(Actor* thisx, PlayState* play) {
BgSpot18Basket* this = (BgSpot18Basket*)thisx;
s32 bgId;
- this->unk_216++;
+ this->timer++;
this->actionFunc(this, play);
this->dyna.actor.floorHeight = BgCheck_EntityRaycastDown4(&play->colCtx, &this->dyna.actor.floorPoly, &bgId,
&this->dyna.actor, &this->dyna.actor.world.pos);
- if (this->actionFunc != func_808B7AFC) {
+ if (this->actionFunc != BgSpot18Basket_Inactive) {
CollisionCheck_SetOC(play, &play->colChkCtx, &this->colliderJntSph.base);
- if (this->actionFunc != func_808B7B6C) {
+ if (this->actionFunc != BgSpot18Basket_Activation) {
this->colliderJntSph.base.acFlags &= ~AC_HIT;
CollisionCheck_SetAC(play, &play->colChkCtx, &this->colliderJntSph.base);
}
diff --git a/src/overlays/actors/ovl_Bg_Spot18_Basket/z_bg_spot18_basket.h b/src/overlays/actors/ovl_Bg_Spot18_Basket/z_bg_spot18_basket.h
index 6b4c85bceb..631847514a 100644
--- a/src/overlays/actors/ovl_Bg_Spot18_Basket/z_bg_spot18_basket.h
+++ b/src/overlays/actors/ovl_Bg_Spot18_Basket/z_bg_spot18_basket.h
@@ -13,16 +13,16 @@ typedef struct BgSpot18Basket {
/* 0x0164 */ ColliderJntSph colliderJntSph;
/* 0x0184 */ ColliderJntSphElement colliderJntSphElements[2];
/* 0x0204 */ BgSpot18BasketActionFunc actionFunc;
- /* 0x0208 */ f32 unk_208;
- /* 0x020C */ s16 unk_20C;
- /* 0x020E */ s16 unk_20E;
- /* 0x0210 */ s16 unk_210;
- /* 0x0212 */ s16 unk_212;
- /* 0x0214 */ s16 unk_214;
- /* 0x0216 */ s16 unk_216;
- /* 0x0218 */ s16 unk_218;
- /* 0x021A */ u8 unk_21A;
- /* 0x021B */ u8 unk_21B;
+ /* 0x0208 */ f32 circleRadius;
+ /* 0x020C */ s16 circleRate;
+ /* 0x020E */ s16 circleMoveAngle;
+ /* 0x0210 */ s16 spinRate;
+ /* 0x0212 */ s16 pivotAzimuth;
+ /* 0x0214 */ s16 pivotAltitude;
+ /* 0x0216 */ s16 timer;
+ /* 0x0218 */ s16 prize;
+ /* 0x021A */ u8 isHeartPieceGiven;
+ /* 0x021B */ u8 pad;
} BgSpot18Basket; // size = 0x021C
#endif
diff --git a/src/overlays/actors/ovl_Boss_Fd/z_boss_fd.c b/src/overlays/actors/ovl_Boss_Fd/z_boss_fd.c
index b1fffc4294..38b695cc06 100644
--- a/src/overlays/actors/ovl_Boss_Fd/z_boss_fd.c
+++ b/src/overlays/actors/ovl_Boss_Fd/z_boss_fd.c
@@ -30,7 +30,7 @@
#include "player.h"
#include "save.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/dust_textures.h"
#include "assets/objects/object_fd/object_fd.h"
#define FLAGS \
diff --git a/src/overlays/actors/ovl_Boss_Ganon2/z_boss_ganon2.c b/src/overlays/actors/ovl_Boss_Ganon2/z_boss_ganon2.c
index 1cc37837f0..bfdad84ef8 100644
--- a/src/overlays/actors/ovl_Boss_Ganon2/z_boss_ganon2.c
+++ b/src/overlays/actors/ovl_Boss_Ganon2/z_boss_ganon2.c
@@ -31,8 +31,8 @@
#include "assets/objects/object_geff/object_geff.h"
#include "assets/objects/gameplay_keep/gameplay_keep.h"
-#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:0 gc-jp-ce:0 gc-jp-mq:0 gc-us:0 gc-us-mq:0 ique-cn:128" \
- "ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
+#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
+ "ique-cn:0 ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
#define FLAGS \
(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
diff --git a/src/overlays/actors/ovl_Boss_Mo/z_boss_mo.c b/src/overlays/actors/ovl_Boss_Mo/z_boss_mo.c
index ec5ee705bf..07a89e6453 100644
--- a/src/overlays/actors/ovl_Boss_Mo/z_boss_mo.c
+++ b/src/overlays/actors/ovl_Boss_Mo/z_boss_mo.c
@@ -35,11 +35,14 @@
#include "save.h"
#include "skin_matrix.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/shadow_circle.h"
+#include "assets/objects/gameplay_keep/eff_water_ripple.h"
+#include "assets/objects/gameplay_keep/eff_shockwave.h"
+#include "assets/objects/gameplay_keep/dust_textures.h"
#include "assets/objects/object_mo/object_mo.h"
-#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
- "ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
+#pragma increment_block_number "gc-eu:0 gc-eu-mq:0 gc-jp:0 gc-jp-ce:0 gc-jp-mq:0 gc-us:0 gc-us-mq:0 ntsc-1.0:128" \
+ "ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
#define FLAGS \
(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
diff --git a/src/overlays/actors/ovl_Boss_Sst/z_boss_sst.c b/src/overlays/actors/ovl_Boss_Sst/z_boss_sst.c
index 23fccf40f3..f4cb18d303 100644
--- a/src/overlays/actors/ovl_Boss_Sst/z_boss_sst.c
+++ b/src/overlays/actors/ovl_Boss_Sst/z_boss_sst.c
@@ -30,10 +30,10 @@
#include "skin_matrix.h"
#include "assets/objects/object_sst/object_sst.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/gameplay_keep_0x173D0.h"
#pragma increment_block_number "gc-eu:0 gc-eu-mq:0 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
- "ique-cn:128 pal-1.0:0 pal-1.1:0"
+ "ique-cn:128 ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
#define FLAGS \
(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
diff --git a/src/overlays/actors/ovl_Boss_Tw/z_boss_tw.c b/src/overlays/actors/ovl_Boss_Tw/z_boss_tw.c
index 49427c2096..e3de734e45 100644
--- a/src/overlays/actors/ovl_Boss_Tw/z_boss_tw.c
+++ b/src/overlays/actors/ovl_Boss_Tw/z_boss_tw.c
@@ -23,11 +23,11 @@
#include "save.h"
#include "skin_matrix.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/shadow_circle.h"
#include "assets/objects/object_tw/object_tw.h"
-#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
- "ique-cn:0 ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
+#pragma increment_block_number "gc-eu:0 gc-eu-mq:0 gc-jp:0 gc-jp-ce:0 gc-jp-mq:0 gc-us:0 gc-us-mq:0" \
+ "ique-cn:0 ntsc-1.0:0 ntsc-1.1:0 ntsc-1.2:0 pal-1.0:0 pal-1.1:0"
#define FLAGS \
(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
diff --git a/src/overlays/actors/ovl_Boss_Va/z_boss_va.c b/src/overlays/actors/ovl_Boss_Va/z_boss_va.c
index afd2b6e50a..ed7821156e 100644
--- a/src/overlays/actors/ovl_Boss_Va/z_boss_va.c
+++ b/src/overlays/actors/ovl_Boss_Va/z_boss_va.c
@@ -26,7 +26,7 @@
#include "play_state.h"
#include "save.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/gameplay_keep_0x55DB0.h"
#include "assets/objects/object_bv/object_bv.h"
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:0 gc-jp-ce:0 gc-jp-mq:0 gc-us:0 gc-us-mq:0 ntsc-1.0:0" \
diff --git a/src/overlays/actors/ovl_Demo_6K/z_demo_6k.c b/src/overlays/actors/ovl_Demo_6K/z_demo_6k.c
index 076c395093..bbc13c849b 100644
--- a/src/overlays/actors/ovl_Demo_6K/z_demo_6k.c
+++ b/src/overlays/actors/ovl_Demo_6K/z_demo_6k.c
@@ -23,7 +23,8 @@
#include "play_state.h"
#include "player.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_flash.h"
+#include "assets/objects/gameplay_keep/fairy_skel.h"
#include "assets/objects/object_demo_6k/object_demo_6k.h"
#include "assets/objects/object_gnd_magic/object_gnd_magic.h"
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 b0594e2e53..cea51edbf5 100644
--- a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c
+++ b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c
@@ -24,7 +24,7 @@
#include "play_state.h"
#include "save.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_flash.h"
#include "assets/objects/object_efc_crystal_light/object_efc_crystal_light.h"
#include "assets/objects/object_efc_fire_ball/object_efc_fire_ball.h"
#include "assets/objects/object_efc_lgt_shower/object_efc_lgt_shower.h"
@@ -504,7 +504,7 @@ void DemoEffect_Init(Actor* thisx, PlayState* play2) {
this->jewel.isPositionInit = 0;
DemoEffect_InitJewel(play, this);
Actor_ChangeCategory(play, &play->actorCtx, &this->actor, ACTORCAT_BOSS);
- if ((play->sceneId == SCENE_JABU_JABU) && GET_INFTABLE(INFTABLE_145)) {
+ if ((play->sceneId == SCENE_JABU_JABU) && GET_INFTABLE(INFTABLE_RUTO_HAS_SAPPHIRE)) {
Actor_Kill(&this->actor);
return;
}
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 f12d54b9fc..088510d7a1 100644
--- a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c
+++ b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c
@@ -18,12 +18,14 @@
#include "player.h"
#include "save.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/dust_textures.h"
+#include "assets/objects/gameplay_keep/eff_dust.h"
+#include "assets/objects/gameplay_keep/eff_flash.h"
#include "assets/objects/object_efc_star_field/object_efc_star_field.h"
#include "assets/objects/object_toki_objects/object_toki_objects.h"
-#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
- "ique-cn:128 ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:0 pal-1.1:0"
+#pragma increment_block_number "gc-eu:0 gc-eu-mq:0 gc-jp:0 gc-jp-ce:0 gc-jp-mq:0 gc-us:0 gc-us-mq:0 ique-cn:0" \
+ "ntsc-1.0:0 ntsc-1.1:0 ntsc-1.2:0 pal-1.0:0 pal-1.1:0"
#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
diff --git a/src/overlays/actors/ovl_Door_Killer/z_door_killer.c b/src/overlays/actors/ovl_Door_Killer/z_door_killer.c
index 565ea6adc4..0ec43809a7 100644
--- a/src/overlays/actors/ovl_Door_Killer/z_door_killer.c
+++ b/src/overlays/actors/ovl_Door_Killer/z_door_killer.c
@@ -18,7 +18,7 @@
#include "play_state.h"
#include "player.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/door_skel.h"
#include "assets/objects/object_hidan_objects/object_hidan_objects.h"
#include "assets/objects/object_mizu_objects/object_mizu_objects.h"
#include "assets/objects/object_haka_door/object_haka_door.h"
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 3d0b9603dd..abbab207bc 100644
--- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c
+++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c
@@ -25,7 +25,8 @@
#include "player.h"
#include "save.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/gameplay_keep_0x49F20.h"
+#include "assets/objects/gameplay_keep/gameplay_keep_0x4A090.h"
#include "assets/objects/object_gnd/object_gnd.h"
#include "assets/objects/object_goma/object_goma.h"
#include "assets/objects/object_ydan_objects/object_ydan_objects.h"
diff --git a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c
index 10875e547b..be6296eda3 100644
--- a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c
+++ b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c
@@ -17,7 +17,7 @@
#include "play_state.h"
#include "player.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_sparkles.h"
#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
diff --git a/src/overlays/actors/ovl_En_Anubice_Fire/z_en_anubice_fire.c b/src/overlays/actors/ovl_En_Anubice_Fire/z_en_anubice_fire.c
index 5e518870e2..7bfb4d7d47 100644
--- a/src/overlays/actors/ovl_En_Anubice_Fire/z_en_anubice_fire.c
+++ b/src/overlays/actors/ovl_En_Anubice_Fire/z_en_anubice_fire.c
@@ -18,7 +18,7 @@
#include "play_state.h"
#include "player.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/dust_textures.h"
#include "assets/objects/object_anubice/object_anubice.h"
#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
diff --git a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c
index 21d2bb6aa2..f883658f4a 100644
--- a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c
+++ b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c
@@ -20,7 +20,10 @@
#include "effect.h"
#include "play_state.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/arrow_skel.h"
+#include "assets/objects/gameplay_keep/gArrow1_Anim.h"
+#include "assets/objects/gameplay_keep/gArrow2_Anim.h"
+#include "assets/objects/gameplay_keep/eff_sparkles.h"
#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
@@ -107,7 +110,7 @@ void EnArrow_Init(Actor* thisx, PlayState* play) {
if (this->actor.params <= ARROW_SEED) {
if (this->actor.params <= ARROW_0E) {
- SkelAnime_Init(play, &this->skelAnime, &gArrowSkel, &gArrow2Anim, NULL, NULL, 0);
+ SkelAnime_Init(play, &this->skelAnime, &gArrowSkel, &gArrow2_Anim, NULL, NULL, 0);
}
if (this->actor.params <= ARROW_NORMAL) {
@@ -210,7 +213,7 @@ void EnArrow_Shoot(EnArrow* this, PlayState* play) {
void func_809B3CEC(PlayState* play, EnArrow* this) {
EnArrow_SetupAction(this, func_809B4640);
- Animation_PlayOnce(&this->skelAnime, &gArrow1Anim);
+ Animation_PlayOnce(&this->skelAnime, &gArrow1_Anim);
this->actor.world.rot.y += (s32)(24576.0f * (Rand_ZeroOne() - 0.5f)) + 0x8000;
this->actor.velocity.y += (this->actor.speed * (0.4f + (0.4f * Rand_ZeroOne())));
this->actor.speed *= (0.04f + 0.3f * Rand_ZeroOne());
@@ -324,7 +327,7 @@ void EnArrow_Fly(EnArrow* this, PlayState* play) {
}
} else if (this->touchedPoly) {
EnArrow_SetupAction(this, func_809B45E0);
- Animation_PlayOnce(&this->skelAnime, &gArrow2Anim);
+ Animation_PlayOnce(&this->skelAnime, &gArrow2_Anim);
if (this->actor.params >= ARROW_NORMAL_LIT) {
this->timer = 60;
diff --git a/src/overlays/actors/ovl_En_Bb/z_en_bb.c b/src/overlays/actors/ovl_En_Bb/z_en_bb.c
index 50d01b999a..88a2de6c8b 100644
--- a/src/overlays/actors/ovl_En_Bb/z_en_bb.c
+++ b/src/overlays/actors/ovl_En_Bb/z_en_bb.c
@@ -22,7 +22,7 @@
#include "play_state.h"
#include "player.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_fire.h"
#include "assets/objects/object_Bb/object_Bb.h"
#define FLAGS \
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 e5f590a14b..6238f17a66 100644
--- a/src/overlays/actors/ovl_En_Bom/z_en_bom.c
+++ b/src/overlays/actors/ovl_En_Bom/z_en_bom.c
@@ -19,7 +19,8 @@
#include "play_state.h"
#include "player.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/bomb_cap.h"
+#include "assets/objects/gameplay_keep/bomb_body.h"
#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
diff --git a/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c b/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c
index 8467c4e5a6..c2ab0160da 100644
--- a/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c
+++ b/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c
@@ -15,7 +15,7 @@
#include "play_state.h"
#include "player.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/bombchu_body.h"
#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
diff --git a/src/overlays/actors/ovl_En_Boom/z_en_boom.c b/src/overlays/actors/ovl_En_Boom/z_en_boom.c
index c8254f1a86..18d35a395d 100644
--- a/src/overlays/actors/ovl_En_Boom/z_en_boom.c
+++ b/src/overlays/actors/ovl_En_Boom/z_en_boom.c
@@ -15,7 +15,7 @@
#include "effect.h"
#include "play_state.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/boomerang.h"
#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
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 c3e37e868a..adb65c23c8 100644
--- a/src/overlays/actors/ovl_En_Box/z_en_box.c
+++ b/src/overlays/actors/ovl_En_Box/z_en_box.c
@@ -129,7 +129,7 @@ void EnBox_Init(Actor* thisx, PlayState* play2) {
DynaPoly_DisableCeilingCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->movementFlags = 0;
- this->type = PARAMS_GET_U(thisx->params, 12, 4);
+ this->type = ENBOX_GET_TYPE(thisx);
this->iceSmokeTimer = 0;
this->unk_1FB = ENBOX_STATE_0;
this->dyna.actor.gravity = -5.5f;
@@ -138,7 +138,7 @@ void EnBox_Init(Actor* thisx, PlayState* play2) {
if (play) {} // helps the compiler store play2 into s1
- if (Flags_GetTreasure(play, PARAMS_GET_U(this->dyna.actor.params, 0, 5))) {
+ if (Flags_GetTreasure(play, ENBOX_GET_TREASURE_FLAG(&this->dyna.actor))) {
this->alpha = 255;
this->iceSmokeTimer = 100;
EnBox_SetupAction(this, EnBox_Open);
@@ -285,7 +285,7 @@ void EnBox_Fall(EnBox* this, PlayState* play) {
}
void EnBox_FallOnSwitchFlag(EnBox* this, PlayState* play) {
- s32 treasureFlag = PARAMS_GET_U(this->dyna.actor.params, 0, 5);
+ s32 treasureFlag = ENBOX_GET_TREASURE_FLAG(&this->dyna.actor);
if (treasureFlag >= ENBOX_TREASURE_FLAG_UNK_MIN && treasureFlag < ENBOX_TREASURE_FLAG_UNK_MAX) {
Actor_SetClosestSecretDistance(&this->dyna.actor, play);
@@ -304,7 +304,7 @@ void EnBox_FallOnSwitchFlag(EnBox* this, PlayState* play) {
// used for types 9, 10
void func_809C9700(EnBox* this, PlayState* play) {
- s32 treasureFlag = PARAMS_GET_U(this->dyna.actor.params, 0, 5);
+ s32 treasureFlag = ENBOX_GET_TREASURE_FLAG(&this->dyna.actor);
Player* player = GET_PLAYER(play);
if (treasureFlag >= ENBOX_TREASURE_FLAG_UNK_MIN && treasureFlag < ENBOX_TREASURE_FLAG_UNK_MAX) {
@@ -341,7 +341,7 @@ void func_809C9700(EnBox* this, PlayState* play) {
}
void EnBox_AppearOnSwitchFlag(EnBox* this, PlayState* play) {
- s32 treasureFlag = PARAMS_GET_U(this->dyna.actor.params, 0, 5);
+ s32 treasureFlag = ENBOX_GET_TREASURE_FLAG(&this->dyna.actor);
if (treasureFlag >= ENBOX_TREASURE_FLAG_UNK_MIN && treasureFlag < ENBOX_TREASURE_FLAG_UNK_MAX) {
Actor_SetClosestSecretDistance(&this->dyna.actor, play);
@@ -355,7 +355,7 @@ void EnBox_AppearOnSwitchFlag(EnBox* this, PlayState* play) {
}
void EnBox_AppearOnRoomClear(EnBox* this, PlayState* play) {
- s32 treasureFlag = PARAMS_GET_U(this->dyna.actor.params, 0, 5);
+ s32 treasureFlag = ENBOX_GET_TREASURE_FLAG(&this->dyna.actor);
if (treasureFlag >= ENBOX_TREASURE_FLAG_UNK_MIN && treasureFlag < ENBOX_TREASURE_FLAG_UNK_MAX) {
Actor_SetClosestSecretDistance(&this->dyna.actor, play);
@@ -437,16 +437,16 @@ void EnBox_WaitOpen(EnBox* this, PlayState* play) {
Audio_PlayFanfare(NA_BGM_OPEN_TRE_BOX | 0x900);
}
}
- PRINTF("Actor_Environment_Tbox_On() %d\n", PARAMS_GET_U(this->dyna.actor.params, 0, 5));
- Flags_SetTreasure(play, PARAMS_GET_U(this->dyna.actor.params, 0, 5));
+ PRINTF("Actor_Environment_Tbox_On() %d\n", ENBOX_GET_TREASURE_FLAG(&this->dyna.actor));
+ Flags_SetTreasure(play, ENBOX_GET_TREASURE_FLAG(&this->dyna.actor));
} else {
player = GET_PLAYER(play);
Actor_WorldToActorCoords(&this->dyna.actor, &sp4C, &player->actor.world.pos);
if (sp4C.z > -50.0f && sp4C.z < 0.0f && fabsf(sp4C.y) < 10.0f && fabsf(sp4C.x) < 20.0f &&
Player_IsFacingActor(&this->dyna.actor, 0x3000, play)) {
- Actor_OfferGetItemNearby(&this->dyna.actor, play, -PARAMS_GET_U(this->dyna.actor.params, 5, 7));
+ Actor_OfferGetItemNearby(&this->dyna.actor, play, -ENBOX_GET_GET_ITEM_ID(&this->dyna.actor));
}
- if (Flags_GetTreasure(play, PARAMS_GET_U(this->dyna.actor.params, 0, 5))) {
+ if (Flags_GetTreasure(play, ENBOX_GET_TREASURE_FLAG(&this->dyna.actor))) {
EnBox_SetupAction(this, EnBox_Open);
}
}
@@ -556,7 +556,7 @@ void EnBox_Update(Actor* thisx, PlayState* play) {
Actor_SetFocus(&this->dyna.actor, 40.0f);
}
- if (PARAMS_GET_U(this->dyna.actor.params, 5, 7) == GI_ICE_TRAP && this->actionFunc == EnBox_Open &&
+ if (ENBOX_GET_GET_ITEM_ID(&this->dyna.actor) == GI_ICE_TRAP && this->actionFunc == EnBox_Open &&
this->skelanime.curFrame > 45 && this->iceSmokeTimer < 100) {
EnBox_SpawnIceSmoke(this, play);
}
diff --git a/src/overlays/actors/ovl_En_Box/z_en_box.h b/src/overlays/actors/ovl_En_Box/z_en_box.h
index 7bea0c4787..3b8f167eb3 100644
--- a/src/overlays/actors/ovl_En_Box/z_en_box.h
+++ b/src/overlays/actors/ovl_En_Box/z_en_box.h
@@ -7,6 +7,12 @@
#define ENBOX_TREASURE_FLAG_UNK_MIN 20
#define ENBOX_TREASURE_FLAG_UNK_MAX 32
+#define ENBOX_GET_TYPE(thisx) PARAMS_GET_U((thisx)->params, 12, 4)
+#define ENBOX_GET_GET_ITEM_ID(thisx) PARAMS_GET_U((thisx)->params, 5, 7)
+#define ENBOX_GET_TREASURE_FLAG(thisx) PARAMS_GET_U((thisx)->params, 0, 5)
+
+#define ENBOX_PARAMS(type, getItemId, treasureFlag) (((type) << 12) | ((getItemId) << 5) | (treasureFlag))
+
struct EnBox;
typedef void (*EnBoxActionFunc)(struct EnBox*, struct PlayState*);
diff --git a/src/overlays/actors/ovl_En_Butte/z_en_butte.c b/src/overlays/actors/ovl_En_Butte/z_en_butte.c
index 2cf9a677f0..5d3354820e 100644
--- a/src/overlays/actors/ovl_En_Butte/z_en_butte.c
+++ b/src/overlays/actors/ovl_En_Butte/z_en_butte.c
@@ -22,7 +22,7 @@
#include "play_state.h"
#include "player.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_flash.h"
#include "assets/objects/gameplay_field_keep/gameplay_field_keep.h"
#define FLAGS 0
diff --git a/src/overlays/actors/ovl_En_Bw/z_en_bw.c b/src/overlays/actors/ovl_En_Bw/z_en_bw.c
index 37563cf728..332a29c93f 100644
--- a/src/overlays/actors/ovl_En_Bw/z_en_bw.c
+++ b/src/overlays/actors/ovl_En_Bw/z_en_bw.c
@@ -23,7 +23,7 @@
#include "play_state.h"
#include "player.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_fire.h"
#include "assets/objects/object_bw/object_bw.h"
#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
diff --git a/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c b/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c
index dd2a3d45b7..a06c6efebc 100644
--- a/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c
+++ b/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c
@@ -14,7 +14,7 @@
#include "player.h"
#include "save.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/shadow_circle.h"
#include "assets/objects/object_dekubaba/object_dekubaba.h"
#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE)
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 b4bdd073f4..ed44df927b 100644
--- a/src/overlays/actors/ovl_En_Door/z_en_door.c
+++ b/src/overlays/actors/ovl_En_Door/z_en_door.c
@@ -18,7 +18,11 @@
#include "player.h"
#include "save.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/gDoorChildOpeningRightAnim.h"
+#include "assets/objects/gameplay_keep/gDoorChildOpeningLeftAnim.h"
+#include "assets/objects/gameplay_keep/gDoorAdultOpeningRightAnim.h"
+#include "assets/objects/gameplay_keep/gDoorAdultOpeningLeftAnim.h"
+#include "assets/objects/gameplay_keep/door_skel.h"
#include "assets/objects/gameplay_field_keep/gameplay_field_keep.h"
#include "assets/objects/object_hidan_objects/object_hidan_objects.h"
#include "assets/objects/object_mizu_objects/object_mizu_objects.h"
diff --git a/src/overlays/actors/ovl_En_Eiyer/z_en_eiyer.c b/src/overlays/actors/ovl_En_Eiyer/z_en_eiyer.c
index 953ee1597e..91d9941dba 100644
--- a/src/overlays/actors/ovl_En_Eiyer/z_en_eiyer.c
+++ b/src/overlays/actors/ovl_En_Eiyer/z_en_eiyer.c
@@ -1,3 +1,9 @@
+/*
+ * File: z_en_eiyer.c
+ * Overlay: ovl_En_Eiyer
+ * Description: Stinger (Ground)
+ */
+
#include "z_en_eiyer.h"
#include "libc64/qrand.h"
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 b40e670140..c882e0e973 100644
--- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c
+++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c
@@ -27,7 +27,8 @@
#include "quest_hint.h"
#include "save.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/fairy_skel.h"
+#include "assets/objects/gameplay_keep/fairy_anim.h"
#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED | ACTOR_FLAG_UPDATE_DURING_OCARINA)
diff --git a/src/overlays/actors/ovl_En_Ex_Item/z_en_ex_item.c b/src/overlays/actors/ovl_En_Ex_Item/z_en_ex_item.c
index 6c232529e7..95bdbd2ee2 100644
--- a/src/overlays/actors/ovl_En_Ex_Item/z_en_ex_item.c
+++ b/src/overlays/actors/ovl_En_Ex_Item/z_en_ex_item.c
@@ -22,7 +22,9 @@
#include "player.h"
#include "save.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/item_drop_dl.h"
+#include "assets/objects/gameplay_keep/gameplay_keep_0x3C870.h"
+#include "assets/objects/gameplay_keep/gameplay_keep_0x3F140.h"
#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
diff --git a/src/overlays/actors/ovl_En_Ex_Ruppy/z_en_ex_ruppy.c b/src/overlays/actors/ovl_En_Ex_Ruppy/z_en_ex_ruppy.c
index c9dd249402..99dc439ff4 100644
--- a/src/overlays/actors/ovl_En_Ex_Ruppy/z_en_ex_ruppy.c
+++ b/src/overlays/actors/ovl_En_Ex_Ruppy/z_en_ex_ruppy.c
@@ -17,7 +17,7 @@
#include "play_state.h"
#include "save.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/rupee.h"
#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
diff --git a/src/overlays/actors/ovl_En_Fd/z_en_fd.c b/src/overlays/actors/ovl_En_Fd/z_en_fd.c
index df2b2d2c59..d9c95c05d3 100644
--- a/src/overlays/actors/ovl_En_Fd/z_en_fd.c
+++ b/src/overlays/actors/ovl_En_Fd/z_en_fd.c
@@ -21,7 +21,7 @@
#include "play_state.h"
#include "player.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/dust_textures.h"
#include "assets/objects/object_fw/object_fw.h"
#define FLAGS \
diff --git a/src/overlays/actors/ovl_En_Fd_Fire/z_en_fd_fire.c b/src/overlays/actors/ovl_En_Fd_Fire/z_en_fd_fire.c
index 334fc24d35..8a6e38a08c 100644
--- a/src/overlays/actors/ovl_En_Fd_Fire/z_en_fd_fire.c
+++ b/src/overlays/actors/ovl_En_Fd_Fire/z_en_fd_fire.c
@@ -9,7 +9,7 @@
#include "play_state.h"
#include "player.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_fire.h"
#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
diff --git a/src/overlays/actors/ovl_En_Fhg_Fire/z_en_fhg_fire.c b/src/overlays/actors/ovl_En_Fhg_Fire/z_en_fhg_fire.c
index 8820c17de0..b65a6a92dd 100644
--- a/src/overlays/actors/ovl_En_Fhg_Fire/z_en_fhg_fire.c
+++ b/src/overlays/actors/ovl_En_Fhg_Fire/z_en_fhg_fire.c
@@ -26,7 +26,7 @@
#include "play_state.h"
#include "player.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/dust_textures.h"
#include "assets/objects/object_fhg/object_fhg.h"
#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
diff --git a/src/overlays/actors/ovl_En_Fish/z_en_fish.c b/src/overlays/actors/ovl_En_Fish/z_en_fish.c
index 9bc08c7a4c..f207e8a612 100644
--- a/src/overlays/actors/ovl_En_Fish/z_en_fish.c
+++ b/src/overlays/actors/ovl_En_Fish/z_en_fish.c
@@ -20,7 +20,9 @@
#include "play_state.h"
#include "player.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/gFishInWaterAnim.h"
+#include "assets/objects/gameplay_keep/gFishOutOfWaterAnim.h"
+#include "assets/objects/gameplay_keep/gameplay_keep_0x18610.h"
#define FLAGS 0
diff --git a/src/overlays/actors/ovl_En_Fw/z_en_fw.c b/src/overlays/actors/ovl_En_Fw/z_en_fw.c
index 80928b164e..d6ffe1e590 100644
--- a/src/overlays/actors/ovl_En_Fw/z_en_fw.c
+++ b/src/overlays/actors/ovl_En_Fw/z_en_fw.c
@@ -20,7 +20,7 @@
#include "play_state.h"
#include "player.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/dust_textures.h"
#include "assets/objects/object_fw/object_fw.h"
#define FLAGS \
diff --git a/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.c b/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.c
index cc03db16fc..5b04ca7426 100644
--- a/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.c
+++ b/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.c
@@ -29,7 +29,7 @@
#include "player.h"
#include "save.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/rupee.h"
#include "assets/objects/object_tsubo/object_tsubo.h"
#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
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 733c8519aa..b4d86799d9 100644
--- a/src/overlays/actors/ovl_En_Go/z_en_go.c
+++ b/src/overlays/actors/ovl_En_Go/z_en_go.c
@@ -15,7 +15,7 @@
#include "player.h"
#include "save.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/dust_textures.h"
#include "assets/objects/object_oF1d_map/object_oF1d_map.h"
#define FLAGS \
diff --git a/src/overlays/actors/ovl_En_Go2/z_en_go2.c b/src/overlays/actors/ovl_En_Go2/z_en_go2.c
index 6718a23b64..dbf8e2b550 100644
--- a/src/overlays/actors/ovl_En_Go2/z_en_go2.c
+++ b/src/overlays/actors/ovl_En_Go2/z_en_go2.c
@@ -20,7 +20,7 @@
#include "player.h"
#include "save.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/dust_textures.h"
#include "assets/objects/object_oF1d_map/object_oF1d_map.h"
#define FLAGS \
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 7d58731365..f00a7b6de6 100644
--- a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c
+++ b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c
@@ -24,7 +24,7 @@
#include "play_state.h"
#include "player.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/rock_fragments_model.h"
#include "assets/objects/object_goroiwa/object_goroiwa.h"
#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
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 a98dca4837..c03f1d7d16 100644
--- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c
+++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c
@@ -20,7 +20,7 @@
#include "play_state.h"
#include "player.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_fire.h"
#include "assets/objects/object_gs/object_gs.h"
#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_DURING_OCARINA)
diff --git a/src/overlays/actors/ovl_En_Honotrap/z_en_honotrap.c b/src/overlays/actors/ovl_En_Honotrap/z_en_honotrap.c
index e9a7297091..3c6ebe9d03 100644
--- a/src/overlays/actors/ovl_En_Honotrap/z_en_honotrap.c
+++ b/src/overlays/actors/ovl_En_Honotrap/z_en_honotrap.c
@@ -22,7 +22,7 @@
#include "play_state.h"
#include "player.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_fire.h"
#include "assets/objects/gameplay_dangeon_keep/gameplay_dangeon_keep.h"
#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
diff --git a/src/overlays/actors/ovl_En_Horse_Normal/z_en_horse_normal.c b/src/overlays/actors/ovl_En_Horse_Normal/z_en_horse_normal.c
index fcdeb0d10d..8d249f2d3e 100644
--- a/src/overlays/actors/ovl_En_Horse_Normal/z_en_horse_normal.c
+++ b/src/overlays/actors/ovl_En_Horse_Normal/z_en_horse_normal.c
@@ -22,7 +22,7 @@
#include "skin.h"
#include "skin_matrix.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/shadow_horse.h"
#include "assets/objects/object_horse_normal/object_horse_normal.h"
#define FLAGS 0
diff --git a/src/overlays/actors/ovl_En_Ice_Hono/z_en_ice_hono.c b/src/overlays/actors/ovl_En_Ice_Hono/z_en_ice_hono.c
index fb0e54f101..d789b8b980 100644
--- a/src/overlays/actors/ovl_En_Ice_Hono/z_en_ice_hono.c
+++ b/src/overlays/actors/ovl_En_Ice_Hono/z_en_ice_hono.c
@@ -20,7 +20,7 @@
#include "play_state.h"
#include "player.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_fire.h"
#define FLAGS 0
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 3c7cf47292..dff41dd86d 100644
--- a/src/overlays/actors/ovl_En_Insect/z_en_insect.c
+++ b/src/overlays/actors/ovl_En_Insect/z_en_insect.c
@@ -23,7 +23,8 @@
#include "player.h"
#include "save.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/bug_skel.h"
+#include "assets/objects/gameplay_keep/gBugCrawlAnim.h"
#define FLAGS 0
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 c0c05a65d0..519c03386b 100644
--- a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c
+++ b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c
@@ -25,7 +25,7 @@
#include "player.h"
#include "save.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/rectangular_sign_model.h"
#include "assets/objects/object_kanban/object_kanban.h"
#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
diff --git a/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c b/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c
index 64e7303371..c848b597dc 100644
--- a/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c
+++ b/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c
@@ -19,7 +19,7 @@
#include "save.h"
#include "assets/objects/object_dekubaba/object_dekubaba.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/shadow_circle.h"
#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE)
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 a4e5d5773f..dfde84fe60 100644
--- a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c
+++ b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c
@@ -21,7 +21,7 @@
#include "effect.h"
#include "play_state.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/cuttable_shrub.h"
#include "assets/objects/gameplay_field_keep/gameplay_field_keep.h"
#include "assets/objects/object_kusa/object_kusa.h"
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 8d9640a2ad..a2f2ace152 100644
--- a/src/overlays/actors/ovl_En_Light/z_en_light.c
+++ b/src/overlays/actors/ovl_En_Light/z_en_light.c
@@ -16,7 +16,7 @@
#include "play_state.h"
#include "save.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_fire.h"
#include "assets/objects/gameplay_dangeon_keep/gameplay_dangeon_keep.h"
#define FLAGS 0
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 dd62fcabc8..18ae3f1e84 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
@@ -12,10 +12,21 @@
#include "player.h"
#include "save.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/spin_attack.h"
#define FLAGS 0
+typedef enum EnMThunderSwordType {
+ /* 0 */ M_THUNDER_SWORD_MASTER,
+ /* 1 */ M_THUNDER_SWORD_KOKIRI,
+ /* 2 */ M_THUNDER_SWORD_GIANT
+} EnMThunderSwordType;
+
+typedef enum EnMThunderAttackStrength {
+ /* 0 */ M_THUNDER_ATTACK_STRONG,
+ /* 1 */ M_THUNDER_ATTACK_WEAK
+} EnMThunderAttackStrength;
+
void EnMThunder_Init(Actor* thisx, PlayState* play2);
void EnMThunder_Destroy(Actor* thisx, PlayState* play);
void EnMThunder_Update(Actor* thisx, PlayState* play);
@@ -72,14 +83,14 @@ void EnMThunder_Init(Actor* thisx, PlayState* play2) {
Collider_InitCylinder(play, &this->collider);
Collider_SetCylinder(play, &this->collider, &this->actor, &D_80AA0420);
- this->unk_1C7 = PARAMS_GET_S(this->actor.params, 0, 8) - 1;
+ this->swordType = PARAMS_GET_S(this->actor.params, 0, 8) - 1;
Lights_PointNoGlowSetInfo(&this->lightInfo, this->actor.world.pos.x, this->actor.world.pos.y,
this->actor.world.pos.z, 255, 255, 255, 0);
this->lightNode = LightContext_InsertLight(play, &play->lightCtx, &this->lightInfo);
this->collider.dim.radius = 0;
this->collider.dim.height = 40;
this->collider.dim.yShift = -20;
- this->unk_1C4 = 8;
+ this->followPlayerTimer = 8;
this->unk_1B4 = 0.0f;
this->actor.world.pos = player->bodyPartsPos[PLAYER_BODYPART_WAIST];
this->unk_1AC = 0.0f;
@@ -101,11 +112,11 @@ void EnMThunder_Init(Actor* thisx, PlayState* play2) {
player->stateFlags2 &= ~PLAYER_STATE2_17;
this->unk_1CA = 1;
- this->collider.elem.atDmgInfo.dmgFlags = D_80AA044C[this->unk_1C7];
- this->unk_1C6 = 1;
- this->unk_1C9 = ((this->unk_1C7 == 1) ? 2 : 4);
+ this->collider.elem.atDmgInfo.dmgFlags = D_80AA044C[this->swordType];
+ this->attackStrength = M_THUNDER_ATTACK_WEAK;
+ this->targetScale = ((this->swordType == M_THUNDER_SWORD_KOKIRI) ? 2 : 4);
func_80A9EFE0(this, func_80A9F9B4);
- this->unk_1C4 = 8;
+ this->followPlayerTimer = 8;
SFX_PLAY_AT_POS(&player->actor.projectedPos, NA_SE_IT_ROLLING_CUT_LV1);
this->unk_1AC = 1.0f;
} else {
@@ -163,7 +174,7 @@ void func_80A9F408(EnMThunder* this, PlayState* play) {
!(Magic_RequestChange(play, PARAMS_GET_S(this->actor.params, 8, 8), MAGIC_CONSUME_WAIT_PREVIEW)))) {
func_80A9F350(this, play);
func_80A9EFE0(this, func_80A9F350);
- this->unk_1C8 = 0;
+ this->chargeAlpha = 0;
this->unk_1BC = 0.0;
this->unk_1AC = 0.0f;
return;
@@ -195,17 +206,17 @@ void func_80A9F408(EnMThunder* this, PlayState* play) {
gSaveContext.magicState = MAGIC_STATE_CONSUME_SETUP;
}
if (player->unk_858 < 0.85f) {
- this->collider.elem.atDmgInfo.dmgFlags = D_80AA044C[this->unk_1C7];
- this->unk_1C6 = 1;
- this->unk_1C9 = ((this->unk_1C7 == 1) ? 2 : 4);
+ this->collider.elem.atDmgInfo.dmgFlags = D_80AA044C[this->swordType];
+ this->attackStrength = M_THUNDER_ATTACK_WEAK;
+ this->targetScale = ((this->swordType == M_THUNDER_SWORD_KOKIRI) ? 2 : 4);
} else {
- this->collider.elem.atDmgInfo.dmgFlags = D_80AA0458[this->unk_1C7];
- this->unk_1C6 = 0;
- this->unk_1C9 = ((this->unk_1C7 == 1) ? 4 : 8);
+ this->collider.elem.atDmgInfo.dmgFlags = D_80AA0458[this->swordType];
+ this->attackStrength = M_THUNDER_ATTACK_STRONG;
+ this->targetScale = ((this->swordType == M_THUNDER_SWORD_KOKIRI) ? 4 : 8);
}
func_80A9EFE0(this, func_80A9F9B4);
- this->unk_1C4 = 8;
+ this->followPlayerTimer = 8;
{
static u16 sSfxIds[] = {
@@ -215,7 +226,7 @@ void func_80A9F408(EnMThunder* this, PlayState* play) {
NA_SE_IT_ROLLING_CUT_LV1,
};
- SFX_PLAY_AT_POS(&player->actor.projectedPos, sSfxIds[this->unk_1C6]);
+ SFX_PLAY_AT_POS(&player->actor.projectedPos, sSfxIds[this->attackStrength]);
}
this->unk_1AC = 1.0f;
@@ -232,19 +243,19 @@ void func_80A9F408(EnMThunder* this, PlayState* play) {
}
if (player->unk_858 > 0.15f) {
- this->unk_1C8 = 255;
+ this->chargeAlpha = 255;
if (this->actor.child == NULL) {
Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EFF_DUST, this->actor.world.pos.x,
this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0,
- this->unk_1C7 + 2);
+ this->swordType + 2);
}
this->unk_1BC += ((((player->unk_858 - 0.15f) * 1.5f) - this->unk_1BC) * 0.5f);
} else if (player->unk_858 > .1f) {
- this->unk_1C8 = (s32)((player->unk_858 - .1f) * 255.0f * 20.0f);
+ this->chargeAlpha = (s32)((player->unk_858 - .1f) * 255.0f * 20.0f);
this->unk_1AC = (player->unk_858 - .1f) * 10.0f;
} else {
- this->unk_1C8 = 0;
+ this->chargeAlpha = 0;
}
if (player->unk_858 > 0.85f) {
@@ -261,11 +272,11 @@ void func_80A9F408(EnMThunder* this, PlayState* play) {
}
void func_80A9F938(EnMThunder* this, PlayState* play) {
- if (this->unk_1C4 < 2) {
- if (this->unk_1C8 < 40) {
- this->unk_1C8 = 0;
+ if (this->followPlayerTimer < 2) {
+ if (this->chargeAlpha < 40) {
+ this->chargeAlpha = 0;
} else {
- this->unk_1C8 -= 40;
+ this->chargeAlpha -= 40;
}
}
@@ -284,17 +295,17 @@ void func_80A9F9B4(EnMThunder* this, PlayState* play) {
if (Math_StepToF(&this->unk_1AC, 0.0f, 1 / 16.0f)) {
Actor_Kill(&this->actor);
} else {
- Math_SmoothStepToF(&this->actor.scale.x, (s32)this->unk_1C9, 0.6f, 0.8f, 0.0f);
+ Math_SmoothStepToF(&this->actor.scale.x, (s32)this->targetScale, 0.6f, 0.8f, 0.0f);
Actor_SetScale(&this->actor, this->actor.scale.x);
this->collider.dim.radius = (this->actor.scale.x * 25.0f);
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base);
}
- if (this->unk_1C4 > 0) {
+ if (this->followPlayerTimer > 0) {
this->actor.world.pos.x = player->bodyPartsPos[PLAYER_BODYPART_WAIST].x;
this->actor.world.pos.z = player->bodyPartsPos[PLAYER_BODYPART_WAIST].z;
- this->unk_1C4--;
+ this->followPlayerTimer--;
}
if (this->unk_1AC > 0.6f) {
@@ -337,9 +348,9 @@ void EnMThunder_Draw(Actor* thisx, PlayState* play2) {
Matrix_Scale(0.02f, 0.02f, 0.02f, MTXMODE_APPLY);
MATRIX_FINALIZE_AND_LOAD(POLY_XLU_DISP++, play->state.gfxCtx, "../z_en_m_thunder.c", 853);
- switch (this->unk_1C6) {
- case 0:
- case 1:
+ switch (this->attackStrength) {
+ case M_THUNDER_ATTACK_STRONG:
+ case M_THUNDER_ATTACK_WEAK:
gSPSegment(POLY_XLU_DISP++, 0x08,
Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE,
0xFF - ((u8)(s32)(this->unk_1B4 * 30) & 0xFF), 0, 0x40, 0x20, 1,
@@ -347,13 +358,13 @@ void EnMThunder_Draw(Actor* thisx, PlayState* play2) {
break;
}
- switch (this->unk_1C6) {
- case 0:
+ switch (this->attackStrength) {
+ case M_THUNDER_ATTACK_STRONG:
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 170, (u8)(this->unk_1B0 * 255));
gSPDisplayList(POLY_XLU_DISP++, gSpinAttack3DL);
gSPDisplayList(POLY_XLU_DISP++, gSpinAttack4DL);
break;
- case 1:
+ case M_THUNDER_ATTACK_WEAK:
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 170, 255, 255, (u8)(this->unk_1B0 * 255));
gSPDisplayList(POLY_XLU_DISP++, gSpinAttack1DL);
gSPDisplayList(POLY_XLU_DISP++, gSpinAttack2DL);
@@ -362,18 +373,18 @@ void EnMThunder_Draw(Actor* thisx, PlayState* play2) {
Matrix_Mult(&player->mf_9E0, MTXMODE_NEW);
- switch (this->unk_1C7) {
- case 1:
+ switch (this->swordType) {
+ case M_THUNDER_SWORD_KOKIRI:
Matrix_Translate(0.0f, 220.0f, 0.0f, MTXMODE_APPLY);
Matrix_Scale(-0.7f, -0.6f, -0.4f, MTXMODE_APPLY);
Matrix_RotateX(16384.0f, MTXMODE_APPLY);
break;
- case 0:
+ case M_THUNDER_SWORD_MASTER:
Matrix_Translate(0.0f, 300.0f, -100.0f, MTXMODE_APPLY);
Matrix_Scale(-1.2f, -1.0f, -0.7f, MTXMODE_APPLY);
Matrix_RotateX(16384.0f, MTXMODE_APPLY);
break;
- case 2:
+ case M_THUNDER_SWORD_GIANT:
Matrix_Translate(200.0f, 350.0f, 0.0f, MTXMODE_APPLY);
Matrix_Scale(-1.8f, -1.4f, -0.7f, MTXMODE_APPLY);
Matrix_RotateX(16384.0f, MTXMODE_APPLY);
@@ -382,12 +393,12 @@ void EnMThunder_Draw(Actor* thisx, PlayState* play2) {
if (this->unk_1B8 >= 0.85f) {
phi_f14 = (D_80AA046C[(play->gameplayFrames & 7)] * 6.0f) + 1.0f;
- gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 170, this->unk_1C8);
+ gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 170, this->chargeAlpha);
gDPSetEnvColor(POLY_XLU_DISP++, 255, 100, 0, 128);
phi_t1 = 0x28;
} else {
phi_f14 = (D_80AA046C[play->gameplayFrames & 7] * 2.0f) + 1.0f;
- gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 170, 255, 255, this->unk_1C8);
+ gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 170, 255, 255, this->chargeAlpha);
gDPSetEnvColor(POLY_XLU_DISP++, 0, 100, 255, 128);
phi_t1 = 0x14;
}
diff --git a/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.h b/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.h
index 7332cdcf21..dd1e2ce8bc 100644
--- a/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.h
+++ b/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.h
@@ -20,11 +20,11 @@ typedef struct EnMThunder {
/* 0x01B0 */ f32 unk_1B8;
/* 0x01BC */ f32 unk_1BC;
/* 0x01C0 */ EnMThunderActionFunc actionFunc;
- /* 0x01C4 */ u16 unk_1C4;
- /* 0x01C6 */ u8 unk_1C6;
- /* 0x01C7 */ u8 unk_1C7;
- /* 0x01C8 */ u8 unk_1C8;
- /* 0x01C9 */ u8 unk_1C9;
+ /* 0x01C4 */ u16 followPlayerTimer;
+ /* 0x01C6 */ u8 attackStrength; // see `EnMThunderAttackStrength`
+ /* 0x01C7 */ u8 swordType; // see `EnMThunderSwordType`
+ /* 0x01C8 */ u8 chargeAlpha;
+ /* 0x01C9 */ u8 targetScale;
/* 0x01CA */ u8 unk_1CA;
} EnMThunder; // size = 0x01CC
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 7b6656b50b..8e04931a50 100644
--- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c
+++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c
@@ -19,7 +19,7 @@
#include "player.h"
#include "save.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/shopkeeper_controls_tex.h"
#include "assets/objects/object_ossan/object_ossan.h"
#include "assets/objects/object_oF1d_map/object_oF1d_map.h"
#include "assets/objects/object_os/object_os.h"
diff --git a/src/overlays/actors/ovl_En_Po_Field/z_en_po_field.c b/src/overlays/actors/ovl_En_Po_Field/z_en_po_field.c
index 249244b5d8..34ca4d2a89 100644
--- a/src/overlays/actors/ovl_En_Po_Field/z_en_po_field.c
+++ b/src/overlays/actors/ovl_En_Po_Field/z_en_po_field.c
@@ -20,7 +20,7 @@
#include "player.h"
#include "save.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_fire.h"
#include "assets/objects/object_po_field/object_po_field.h"
#define FLAGS \
diff --git a/src/overlays/actors/ovl_En_Po_Relay/z_en_po_relay.c b/src/overlays/actors/ovl_En_Po_Relay/z_en_po_relay.c
index b1f81b70d7..b4add29656 100644
--- a/src/overlays/actors/ovl_En_Po_Relay/z_en_po_relay.c
+++ b/src/overlays/actors/ovl_En_Po_Relay/z_en_po_relay.c
@@ -22,8 +22,7 @@
#include "play_state.h"
#include "player.h"
#include "save.h"
-
-#include "assets/objects/object_tk/object_tk.h"
+#include "array_count.h"
#define FLAGS \
(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
@@ -42,7 +41,7 @@ void EnPoRelay_Talk2(EnPoRelay* this, PlayState* play);
void EnPoRelay_DisappearAndReward(EnPoRelay* this, PlayState* play);
void EnPoRelay_SetupIdle(EnPoRelay* this);
-static Vec3s D_80AD8C30[] = {
+static Vec3s sPathPoints[] = {
{ 0xFFC4, 0xFDEE, 0xF47A }, { 0x0186, 0xFE0C, 0xF47A }, { 0x0186, 0xFE0C, 0xF0F6 }, { 0x00D2, 0xFDEE, 0xF0F6 },
{ 0x00D2, 0xFD9E, 0xEEDA }, { 0x023A, 0xFDC6, 0xEEDA }, { 0x023A, 0xFDC6, 0xED18 }, { 0x00D2, 0xFDC6, 0xED18 },
{ 0x00D2, 0xFDC6, 0xEBCE }, { 0x00D2, 0xFDC6, 0xEAA2 }, { 0x023A, 0xFDC6, 0xEAA2 }, { 0x023A, 0xFDC6, 0xEBB0 },
@@ -84,23 +83,31 @@ static ColliderCylinderInit sCylinderInit = {
{ 30, 52, 0, { 0, 0, 0 } },
};
-static s32 D_80AD8D24 = 0;
+static s32 sAlreadySpawned = false;
static InitChainEntry sInitChain[] = {
ICHAIN_S8(naviEnemyId, NAVI_ENEMY_DAMPES_GHOST, ICHAIN_CONTINUE),
ICHAIN_F32(lockOnArrowOffset, 1500, ICHAIN_STOP),
};
-static Vec3f D_80AD8D30 = { 0.0f, 1.5f, 0.0f };
+static Vec3f sDisappearParticlesVelocity = { 0.0f, 1.5f, 0.0f };
-static Vec3f D_80AD8D3C = { 0.0f, 0.0f, 0.0f };
+static Vec3f sDisappearParticlesAccel = { 0.0f, 0.0f, 0.0f };
-static Vec3f D_80AD8D48 = { 0.0f, 1200.0f, 0.0f };
+// the offset (in model space) from the position of the lantern limb and the position of the actual light
+static Vec3f sLanternLightOffset = { 0.0f, 1200.0f, 0.0f };
+
+typedef enum DampeEyes {
+ /* 0 */ DAMPE_EYES_FULLY_OPEN,
+ /* 1 */ DAMPE_EYES_HALF_OPEN,
+ /* 2 */ DAMPE_EYES_CLOSED,
+ /* 3 */ DAMPE_EYES_MAX
+} DampeEyes;
static void* sEyesTextures[] = {
- gDampeEyeOpenTex,
- gDampeEyeHalfTex,
- gDampeEyeClosedTex,
+ gDampeEyeOpenTex, // DAMPE_EYES_FULLY_OPEN
+ gDampeEyeHalfTex, // DAMPE_EYES_HALF_OPEN
+ gDampeEyeClosedTex, // DAMPE_EYES_CLOSED
};
void EnPoRelay_Init(Actor* thisx, PlayState* play) {
@@ -109,18 +116,19 @@ void EnPoRelay_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->actor, sInitChain);
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 42.0f);
- SkelAnime_InitFlex(play, &this->skelAnime, &gDampeSkel, &gDampeFloatAnim, this->jointTable, this->morphTable, 18);
+ SkelAnime_InitFlex(play, &this->skelAnime, &gDampeSkel, &gDampeFloatAnim, this->jointTable, this->morphTable,
+ LIMB_OBJECT_TK_00BE40_MAX);
Collider_InitCylinder(play, &this->collider);
Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
this->lightNode = LightContext_InsertLight(play, &play->lightCtx, &this->lightInfo);
Lights_PointNoGlowSetInfo(&this->lightInfo, this->actor.home.pos.x, this->actor.home.pos.y, this->actor.home.pos.z,
255, 255, 255, 200);
this->lightColor.a = 255;
- temp = 1;
- if (D_80AD8D24 != 0) {
+ temp = true;
+ if (sAlreadySpawned) {
Actor_Kill(&this->actor);
} else {
- D_80AD8D24 = temp;
+ sAlreadySpawned = temp;
Actor_SetTextWithPrefix(play, &this->actor, 65);
this->textId = this->actor.textId;
EnPoRelay_SetupIdle(this);
@@ -136,9 +144,12 @@ void EnPoRelay_Destroy(Actor* thisx, PlayState* play) {
}
void EnPoRelay_SetupIdle(EnPoRelay* this) {
- this->unk_195 = 32;
- this->pathIndex = 0;
+ this->bobTimer = 32;
+ this->pathPoint = 0;
+
+ // does not despawn upon room transitions
this->actor.room = -1;
+
this->actor.shape.rot.y = 0;
this->actor.world.rot.y = -0x8000;
this->actor.colChkInfo.mass = MASS_HEAVY;
@@ -154,11 +165,11 @@ void EnPoRelay_Vec3sToVec3f(Vec3f* dest, Vec3s* src) {
void EnPoRelay_SetupRace(EnPoRelay* this) {
Vec3f vec;
- EnPoRelay_Vec3sToVec3f(&vec, &D_80AD8C30[this->pathIndex]);
+ EnPoRelay_Vec3sToVec3f(&vec, &sPathPoints[this->pathPoint]);
this->actionTimer = ((s16)(this->actor.shape.rot.y - this->actor.world.rot.y - 0x8000) >> 0xB) % 32U;
Interface_SetTimer(0);
this->hookshotSlotFull = INV_CONTENT(ITEM_HOOKSHOT) != ITEM_NONE;
- this->unk_19A = Actor_WorldYawTowardPoint(&this->actor, &vec);
+ this->yawTowardsPathPoint = Actor_WorldYawTowardPoint(&this->actor, &vec);
this->actor.flags |= ACTOR_FLAG_LOCK_ON_DISABLED;
Actor_PlaySfx(&this->actor, NA_SE_EN_PO_LAUGH);
this->actionFunc = EnPoRelay_Race;
@@ -172,8 +183,12 @@ void EnPoRelay_SetupEndRace(EnPoRelay* this) {
}
void EnPoRelay_CorrectY(EnPoRelay* this) {
- Math_StepToF(&this->actor.home.pos.y, D_80AD8C30[(this->pathIndex >= 28) ? 27 : this->pathIndex].y + 45.0f, 2.0f);
- this->actor.world.pos.y = Math_SinS(this->unk_195 * 0x800) * 8.0f + this->actor.home.pos.y;
+ Math_StepToF(
+ &this->actor.home.pos.y,
+ sPathPoints[(this->pathPoint >= ARRAY_COUNT(sPathPoints)) ? ARRAY_COUNT(sPathPoints) - 1 : this->pathPoint].y +
+ 45.0f,
+ 2.0f);
+ this->actor.world.pos.y = Math_SinS(this->bobTimer * 0x800) * 8.0f + this->actor.home.pos.y;
}
void EnPoRelay_Idle(EnPoRelay* this, PlayState* play) {
@@ -208,9 +223,12 @@ void EnPoRelay_Race(EnPoRelay* this, PlayState* play) {
if (this->actionTimer != 0) {
this->actionTimer--;
}
+
+ // 3% chance of throwing a flame every 32 frames (1.6 seconds), if it fails
+ // it checks again the next frame without waiting the 32 frames
if (this->actionTimer == 0 && Rand_ZeroOne() < 0.03f) {
this->actionTimer = 32;
- if (this->pathIndex < 23) {
+ if (this->pathPoint < 23) {
speedXZ = Rand_ZeroOne() * 3.0f;
if (speedXZ < 1.0f) {
multiplier = 1.0f;
@@ -221,14 +239,19 @@ void EnPoRelay_Race(EnPoRelay* this, PlayState* play) {
}
speedXZ = 30.0f * multiplier;
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HONOTRAP,
- Math_CosS(this->unk_19A) * speedXZ + this->actor.world.pos.x, this->actor.world.pos.y,
- Math_SinS(this->unk_19A) * speedXZ + this->actor.world.pos.z, 0,
- (this->unk_19A + 0x8000) - (0x2000 * multiplier), 0, HONOTRAP_TYPE_FLAME_DROP);
+ Math_CosS(this->yawTowardsPathPoint) * speedXZ + this->actor.world.pos.x,
+ this->actor.world.pos.y,
+ Math_SinS(this->yawTowardsPathPoint) * speedXZ + this->actor.world.pos.z, 0,
+ (this->yawTowardsPathPoint + 0x8000) - (0x2000 * multiplier), 0, HONOTRAP_TYPE_FLAME_DROP);
}
}
- Math_SmoothStepToS(&this->actor.world.rot.y, this->unk_19A, 2, 0x1000, 0x100);
+ Math_SmoothStepToS(&this->actor.world.rot.y, this->yawTowardsPathPoint, 2, 0x1000, 0x100);
this->actor.shape.rot.y = this->actor.world.rot.y + (this->actionTimer * 0x800) + 0x8000;
- if (this->pathIndex < 23) {
+ if (this->pathPoint < 23) {
+ //! @bug Dampé's speed is directly proportional to the player's speed when less than 300 units away from the
+ //! player and not in the branching paths, so if the player's speed is negative (by HESSing or similar),
+ //! Dampé will also move backwards, away from the next path point rather than towards it
+
// If the player travels along a different path to Dampé that converges later
if ((Math3D_PointInSquare2D(660.0f, 840.0f, -4480.0f, -3760.0f, player->actor.world.pos.x,
player->actor.world.pos.z) != 0) ||
@@ -253,21 +276,21 @@ void EnPoRelay_Race(EnPoRelay* this, PlayState* play) {
} else {
Math_ApproachF(&this->actor.speed, 3.5f, 0.5f, 1.5f);
}
- EnPoRelay_Vec3sToVec3f(&vec, &D_80AD8C30[this->pathIndex]);
+ EnPoRelay_Vec3sToVec3f(&vec, &sPathPoints[this->pathPoint]);
if (Actor_WorldDistXZToPoint(&this->actor, &vec) < 40.0f) {
- this->pathIndex++;
- EnPoRelay_Vec3sToVec3f(&vec, &D_80AD8C30[this->pathIndex]);
- if (this->pathIndex == 28) {
+ this->pathPoint++;
+ EnPoRelay_Vec3sToVec3f(&vec, &sPathPoints[this->pathPoint]);
+ if (this->pathPoint == ARRAY_COUNT(sPathPoints)) {
EnPoRelay_SetupEndRace(this);
- } else if (this->pathIndex == 9) {
+ } else if (this->pathPoint == 9) { // first door
Flags_SetSwitch(play, 0x35);
- } else if (this->pathIndex == 17) {
+ } else if (this->pathPoint == 17) { // second door
Flags_SetSwitch(play, 0x36);
- } else if (this->pathIndex == 25) {
+ } else if (this->pathPoint == 25) { // third door
Flags_SetSwitch(play, 0x37);
}
}
- this->unk_19A = Actor_WorldYawTowardPoint(&this->actor, &vec);
+ this->yawTowardsPathPoint = Actor_WorldYawTowardPoint(&this->actor, &vec);
Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_PO_AWAY - SFX_FLAG);
}
@@ -289,7 +312,7 @@ void EnPoRelay_Talk2(EnPoRelay* this, PlayState* play) {
Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0x100);
if (Message_GetState(&play->msgCtx) == TEXT_STATE_EVENT) {
if (Message_ShouldAdvance(play)) {
- if (this->hookshotSlotFull != 0) {
+ if (this->hookshotSlotFull) {
Actor_SetTextWithPrefix(play, &this->actor, 0x2E);
} else {
Actor_SetTextWithPrefix(play, &this->actor, 0x2D);
@@ -324,35 +347,36 @@ void EnPoRelay_DisappearAndReward(EnPoRelay* this, PlayState* play) {
vec.x = (Math_SinS(Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) + 0x4800) * 23.0f) + this->actor.world.pos.x;
vec.z = (Math_CosS(Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) + 0x4800) * 23.0f) + this->actor.world.pos.z;
}
- EffectSsDeadDb_Spawn(play, &vec, &D_80AD8D30, &D_80AD8D3C, this->actionTimer * 10 + 80, 0, 255, 255, 255, 255,
- 0, 0, 255, 1, 9, true);
+ EffectSsDeadDb_Spawn(play, &vec, &sDisappearParticlesVelocity, &sDisappearParticlesAccel,
+ this->actionTimer * 10 + 80, 0, 255, 255, 255, 255, 0, 0, 255, 1, 9, true);
vec.x = (this->actor.world.pos.x + this->actor.world.pos.x) - vec.x;
vec.z = (this->actor.world.pos.z + this->actor.world.pos.z) - vec.z;
- EffectSsDeadDb_Spawn(play, &vec, &D_80AD8D30, &D_80AD8D3C, this->actionTimer * 10 + 80, 0, 255, 255, 255, 255,
- 0, 0, 255, 1, 9, true);
+ EffectSsDeadDb_Spawn(play, &vec, &sDisappearParticlesVelocity, &sDisappearParticlesAccel,
+ this->actionTimer * 10 + 80, 0, 255, 255, 255, 255, 0, 0, 255, 1, 9, true);
vec.x = this->actor.world.pos.x;
vec.z = this->actor.world.pos.z;
- EffectSsDeadDb_Spawn(play, &vec, &D_80AD8D30, &D_80AD8D3C, this->actionTimer * 10 + 80, 0, 255, 255, 255, 255,
- 0, 0, 255, 1, 9, true);
+ EffectSsDeadDb_Spawn(play, &vec, &sDisappearParticlesVelocity, &sDisappearParticlesAccel,
+ this->actionTimer * 10 + 80, 0, 255, 255, 255, 255, 0, 0, 255, 1, 9, true);
if (this->actionTimer == 1) {
Actor_PlaySfx(&this->actor, NA_SE_EN_EXTINCT);
}
}
if (Math_StepToF(&this->actor.scale.x, 0.0f, 0.001f) != 0) {
- if (this->hookshotSlotFull != 0) {
- Vec3f sp60;
+ if (this->hookshotSlotFull) {
+ Vec3f posAtGround;
s32 pad1;
- sp60.x = this->actor.world.pos.x;
- sp60.y = this->actor.floorHeight;
- sp60.z = this->actor.world.pos.z;
+ posAtGround.x = this->actor.world.pos.x;
+ posAtGround.y = this->actor.floorHeight;
+ posAtGround.z = this->actor.world.pos.z;
if (gSaveContext.timerSeconds < HIGH_SCORE(HS_DAMPE_RACE)) {
HIGH_SCORE(HS_DAMPE_RACE) = gSaveContext.timerSeconds;
}
if (!Flags_GetCollectible(play, this->actor.params) && (gSaveContext.timerSeconds <= 60)) {
- Item_DropCollectible2(play, &sp60, (this->actor.params << 8) + (0x4000 | ITEM00_HEART_PIECE));
+ Item_DropCollectible2(play, &posAtGround, (this->actor.params << 8) + (0x4000 | ITEM00_HEART_PIECE));
} else {
- Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ITEM00, sp60.x, sp60.y, sp60.z, 0, 0, 0, 2);
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ITEM00, posAtGround.x, posAtGround.y, posAtGround.z, 0, 0,
+ 0, 2);
}
} else {
Flags_SetTempClear(play, 4);
@@ -377,27 +401,30 @@ void EnPoRelay_Update(Actor* thisx, PlayState* play) {
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
Actor_SetFocus(&this->actor, 50.0f);
- if (this->unk_195 != 0) {
- this->unk_195 -= 1;
+ if (this->bobTimer != 0) {
+ this->bobTimer -= 1;
}
- if (this->unk_195 == 0) {
- this->unk_195 = 32;
+ if (this->bobTimer == 0) {
+ this->bobTimer = 32;
}
this->eyeTextureIdx++;
- if (this->eyeTextureIdx == 3) {
- this->eyeTextureIdx = 0;
+ if (this->eyeTextureIdx == DAMPE_EYES_MAX) {
+ this->eyeTextureIdx = DAMPE_EYES_FULLY_OPEN;
}
}
void EnPoRelay_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void* thisx) {
EnPoRelay* this = (EnPoRelay*)thisx;
- if (limbIndex == 14) {
+ // lantern
+ if (limbIndex == LIMB_OBJECT_TK_00BDCC) {
f32 rand;
Vec3f vec;
OPEN_DISPS(play->state.gfxCtx, "../z_en_po_relay.c", 885);
rand = Rand_ZeroOne();
+
+ // lantern can be from a light orange to pure white
this->lightColor.r = (s16)(rand * 30.0f) + 225;
this->lightColor.g = (s16)(rand * 100.0f) + 155;
this->lightColor.b = (s16)(rand * 160.0f) + 95;
@@ -405,10 +432,12 @@ void EnPoRelay_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s*
gDPSetEnvColor(POLY_OPA_DISP++, this->lightColor.r, this->lightColor.g, this->lightColor.b, 128);
gSPDisplayList(POLY_OPA_DISP++, gDampeLanternDL);
CLOSE_DISPS(play->state.gfxCtx, "../z_en_po_relay.c", 901);
- Matrix_MultVec3f(&D_80AD8D48, &vec);
+ Matrix_MultVec3f(&sLanternLightOffset, &vec);
Lights_PointNoGlowSetInfo(&this->lightInfo, vec.x, vec.y, vec.z, this->lightColor.r, this->lightColor.g,
this->lightColor.b, 200);
- } else if (limbIndex == 8) {
+
+ // halo
+ } else if (limbIndex == LIMB_OBJECT_TK_00BD84) {
OPEN_DISPS(play->state.gfxCtx, "../z_en_po_relay.c", 916);
MATRIX_FINALIZE_AND_LOAD(POLY_OPA_DISP++, play->state.gfxCtx, "../z_en_po_relay.c", 918);
gSPDisplayList(POLY_OPA_DISP++, gDampeHaloDL);
diff --git a/src/overlays/actors/ovl_En_Po_Relay/z_en_po_relay.h b/src/overlays/actors/ovl_En_Po_Relay/z_en_po_relay.h
index 483208f9f0..2fa0536885 100644
--- a/src/overlays/actors/ovl_En_Po_Relay/z_en_po_relay.h
+++ b/src/overlays/actors/ovl_En_Po_Relay/z_en_po_relay.h
@@ -4,6 +4,7 @@
#include "ultra64.h"
#include "actor.h"
#include "light.h"
+#include "assets/objects/object_tk/object_tk.h"
struct EnPoRelay;
@@ -14,14 +15,14 @@ typedef struct EnPoRelay {
/* 0x014C */ SkelAnime skelAnime;
/* 0x0190 */ EnPoRelayActionFunc actionFunc;
/* 0x0194 */ u8 hookshotSlotFull;
- /* 0x0195 */ u8 unk_195;
+ /* 0x0195 */ u8 bobTimer; // used for the up & down bobbing
/* 0x0196 */ s16 actionTimer;
- /* 0x0198 */ s16 pathIndex;
- /* 0x019A */ s16 unk_19A;
- /* 0x019C */ u16 textId;
+ /* 0x0198 */ s16 pathPoint; // current (upcoming) path point
+ /* 0x019A */ s16 yawTowardsPathPoint; // yaw towards the current (upcoming) path point
+ /* 0x019C */ u16 textId; // mirrors actor.textId
/* 0x019E */ u16 eyeTextureIdx;
- /* 0x01A0 */ Vec3s jointTable[18];
- /* 0x020C */ Vec3s morphTable[18];
+ /* 0x01A0 */ Vec3s jointTable[LIMB_OBJECT_TK_00BE40_MAX];
+ /* 0x020C */ Vec3s morphTable[LIMB_OBJECT_TK_00BE40_MAX];
/* 0x0278 */ Color_RGBA8 lightColor;
/* 0x027C */ LightNode* lightNode;
/* 0x0280 */ LightInfo lightInfo;
diff --git a/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c b/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c
index 299b0df33a..fe82003ca3 100644
--- a/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c
+++ b/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c
@@ -23,7 +23,7 @@
#include "play_state.h"
#include "player.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_fire.h"
#include "assets/objects/object_po_sisters/object_po_sisters.h"
#define FLAGS \
diff --git a/src/overlays/actors/ovl_En_Pu_box/z_en_pu_box.c b/src/overlays/actors/ovl_En_Pu_box/z_en_pu_box.c
index 59ea027c65..6f38e51512 100644
--- a/src/overlays/actors/ovl_En_Pu_box/z_en_pu_box.c
+++ b/src/overlays/actors/ovl_En_Pu_box/z_en_pu_box.c
@@ -50,7 +50,7 @@ void EnPubox_Init(Actor* thisx, PlayState* play) {
default:
break;
}
- this->unk_164 = 1;
+ this->unused_164 = 1;
thisx->colChkInfo.cylRadius = 20;
thisx->colChkInfo.cylHeight = 50;
thisx->cullingVolumeDownward = 1200.0f;
diff --git a/src/overlays/actors/ovl_En_Pu_box/z_en_pu_box.h b/src/overlays/actors/ovl_En_Pu_box/z_en_pu_box.h
index c128c86dfb..10b0b06382 100644
--- a/src/overlays/actors/ovl_En_Pu_box/z_en_pu_box.h
+++ b/src/overlays/actors/ovl_En_Pu_box/z_en_pu_box.h
@@ -8,7 +8,7 @@ struct EnPubox;
typedef struct EnPubox {
/* 0x0000 */ DynaPolyActor dyna;
- /* 0x0164 */ u32 unk_164;
+ /* 0x0164 */ u32 unused_164; // Set to 1 on initialization, has no other uses
} EnPubox; // size = 0x0168
#endif
diff --git a/src/overlays/actors/ovl_En_Ru1/z_en_ru1.c b/src/overlays/actors/ovl_En_Ru1/z_en_ru1.c
index be4f3501e7..26cb052c08 100644
--- a/src/overlays/actors/ovl_En_Ru1/z_en_ru1.c
+++ b/src/overlays/actors/ovl_En_Ru1/z_en_ru1.c
@@ -73,14 +73,14 @@ void EnRu1_Sitting_LosingBalance(EnRu1* this, PlayState* play);
void EnRu1_Sitting_DisappearingInWater(EnRu1* this, PlayState* play);
void EnRu1_Sitting_SeesSapphire(EnRu1* this, PlayState* play);
void EnRu1_Action_Unused(EnRu1* this, PlayState* play);
-void func_80AEF9D8(EnRu1* this, PlayState* play);
-void func_80AEFA2C(EnRu1* this, PlayState* play);
-void func_80AEFAAC(EnRu1* this, PlayState* play);
-void func_80AEFB04(EnRu1* this, PlayState* play);
-void func_80AEFB68(EnRu1* this, PlayState* play);
-void func_80AEFCE8(EnRu1* this, PlayState* play);
-void func_80AEFBC8(EnRu1* this, PlayState* play);
-void func_80AEFC24(EnRu1* this, PlayState* play);
+void EnRu1_SapphireRoom_ThrownOntoPlatform(EnRu1* this, PlayState* play);
+void EnRu1_SapphireRoom_Retrieving(EnRu1* this, PlayState* play);
+void EnRu1_SapphireRoom_Holding(EnRu1* this, PlayState* play);
+void EnRu1_SapphireRoom_DoneHolding(EnRu1* this, PlayState* play);
+void EnRu1_SapphireRoom_MissionAccomplished(EnRu1* this, PlayState* play);
+void EnRu1_SapphireRoom_Waiting(EnRu1* this, PlayState* play);
+void EnRu1_SapphireRoom_ReadyToGoHome(EnRu1* this, PlayState* play);
+void EnRu1_SapphireRoom_BeingAbducted(EnRu1* this, PlayState* play);
void func_80AEFECC(EnRu1* this, PlayState* play);
void func_80AEFF40(EnRu1* this, PlayState* play);
@@ -143,7 +143,7 @@ static s32 sUnused = 0;
#include "z_en_ru1_cutscene_data.inc.c"
-static u32 D_80AF1938 = 0;
+static u32 sReachedForSapphire = 0;
static EnRu1ActionFunc sActionFuncs[] = {
EnRu1_Fountain_GazingAtLink, // ENRU1_ACTION_FOUNTAIN_GAZING_AT_LINK
@@ -182,14 +182,14 @@ static EnRu1ActionFunc sActionFuncs[] = {
EnRu1_Sitting_DisappearingInWater, // ENRU1_ACTION_SITTING_DISAPPEARING
EnRu1_Sitting_SeesSapphire, // ENRU1_ACTION_SITTING_SEES_SAPPHIRE
EnRu1_Action_Unused, // ENRU1_ACTION_UNUSED
- func_80AEF9D8, // ENRU1_ACTION_36
- func_80AEFA2C, // ENRU1_ACTION_37
- func_80AEFAAC, // ENRU1_ACTION_38
- func_80AEFB04, // ENRU1_ACTION_39
- func_80AEFB68, // ENRU1_ACTION_40
- func_80AEFCE8, // ENRU1_ACTION_41
- func_80AEFBC8, // ENRU1_ACTION_42
- func_80AEFC24, // ENRU1_ACTION_43
+ EnRu1_SapphireRoom_ThrownOntoPlatform, // ENRU1_ACTION_THROWN_ONTO_SAPPHIRE_PLATFORM
+ EnRu1_SapphireRoom_Retrieving, // ENRU1_ACTION_RETRIEVING_SAPPHIRE
+ EnRu1_SapphireRoom_Holding, // ENRU1_ACTION_HOLDING_SAPPHIRE
+ EnRu1_SapphireRoom_DoneHolding, // ENRU1_ACTION_DONE_HOLDING_SAPPHIRE
+ EnRu1_SapphireRoom_MissionAccomplished, // ENRU1_ACTION_MISSION_ACCOMPLISHED
+ EnRu1_SapphireRoom_Waiting, // ENRU1_ACTION_WAITING_IN_SAPPHIRE_ROOM
+ EnRu1_SapphireRoom_ReadyToGoHome, // ENRU1_ACTION_READY_TO_GO_HOME
+ EnRu1_SapphireRoom_BeingAbducted, // ENRU1_ACTION_BEING_ABDUCTED
func_80AEFECC, // ENRU1_ACTION_44
func_80AEFF40, // ENRU1_ACTION_45
};
@@ -416,13 +416,13 @@ int func_80AEB174(PlayState* play) {
return (Message_GetState(&play->msgCtx) == TEXT_STATE_EVENT) && Message_ShouldAdvance(play);
}
-s32 func_80AEB1B4(PlayState* play) {
+s32 EnRu1_IsTextboxClosing(PlayState* play) {
return Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING;
}
#if DEBUG_FEATURES
void func_80AEB1D8(EnRu1* this) {
- this->action = ENRU1_ACTION_36;
+ this->action = ENRU1_ACTION_THROWN_ONTO_SAPPHIRE_PLATFORM;
this->drawConfig = ENRU1_DRAW_NOTHING;
this->actor.velocity.x = 0.0f;
this->actor.velocity.y = 0.0f;
@@ -470,17 +470,17 @@ s32 EnRu1_UpdateSkelAnime(EnRu1* this) {
}
}
-void func_80AEB364(EnRu1* this, PlayState* play) {
+void EnRu1_WalkTowardSapphire(EnRu1* this, PlayState* play) {
this->skelAnime.movementFlags |= ANIM_FLAG_UPDATE_XZ;
AnimTaskQueue_AddActorMovement(play, &this->actor, &this->skelAnime, 1.0f);
}
-void func_80AEB3A4(EnRu1* this, PlayState* play) {
+void EnRu1_StartWalkingTowardSapphire(EnRu1* this, PlayState* play) {
this->skelAnime.movementFlags |= ANIM_FLAG_UPDATE_XZ;
- func_80AEB364(this, play);
+ EnRu1_WalkTowardSapphire(this, play);
}
-void func_80AEB3CC(EnRu1* this) {
+void EnRu1_StopWalkingTowardSapphire(EnRu1* this) {
this->skelAnime.movementFlags &= ~ANIM_FLAG_UPDATE_XZ;
}
@@ -855,7 +855,7 @@ void EnRu1_InitInJabuJabuHolesRoom(EnRu1* this, PlayState* play) {
this->action = ENRU1_ACTION_MEETING_RANGE_CHECK;
EnRu1_SetMouth(this, ENRU1_MOUTH_FROWNING);
} else if (GET_INFTABLE(INFTABLE_BROUGHT_RUTO_BACK_TO_HOLES_ROOM) &&
- !GET_INFTABLE(INFTABLE_PLACED_RUTO_ON_SWITCH) && !GET_INFTABLE(INFTABLE_145)) {
+ !GET_INFTABLE(INFTABLE_PLACED_RUTO_ON_SWITCH) && !GET_INFTABLE(INFTABLE_RUTO_HAS_SAPPHIRE)) {
if (!EnRu1_IsAssistingLink(this, play)) {
s8 actorRoom;
@@ -1284,7 +1284,7 @@ void EnRu1_BossRoom_WarpingOut(EnRu1* this, PlayState* play) {
}
void EnRu1_InitInJabuJabuBasement(EnRu1* this, PlayState* play) {
- if (GET_INFTABLE(INFTABLE_MET_RUTO_FIRST_TIME) && !GET_INFTABLE(INFTABLE_145) &&
+ if (GET_INFTABLE(INFTABLE_MET_RUTO_FIRST_TIME) && !GET_INFTABLE(INFTABLE_RUTO_HAS_SAPPHIRE) &&
!GET_INFTABLE(INFTABLE_PLACED_RUTO_ON_SWITCH) && !GET_INFTABLE(INFTABLE_BROUGHT_RUTO_BACK_TO_HOLES_ROOM)) {
if (!EnRu1_IsAssistingLink(this, play)) {
s8 actorRoom;
@@ -1667,7 +1667,7 @@ s32 EnRu1_IsOnSapphirePlatform(EnRu1* this, PlayState* play) {
EnRu1_StopMoving(this);
play->csCtx.script = gRutoObtainingSapphireCs;
gSaveContext.cutsceneTrigger = 1;
- this->action = ENRU1_ACTION_36;
+ this->action = ENRU1_ACTION_THROWN_ONTO_SAPPHIRE_PLATFORM;
this->drawConfig = ENRU1_DRAW_NOTHING;
this->bigOctoPlatform = (BgBdanObjects*)dynaPolyActor;
this->actor.shape.shadowAlpha = 0;
@@ -2027,7 +2027,7 @@ void func_80AEF3A8(EnRu1* this, PlayState* play) {
func_80AEF1F0(this, play, something);
}
-void func_80AEF40C(EnRu1* this) {
+void EnRu1_PlayStepSoundNearSapphire(EnRu1* this) {
SkelAnime* skelAnime = &this->skelAnime;
if (Animation_OnFrame(skelAnime, 2.0f) || Animation_OnFrame(skelAnime, 7.0f) ||
@@ -2037,46 +2037,49 @@ void func_80AEF40C(EnRu1* this) {
}
}
-void func_80AEF4A8(EnRu1* this, PlayState* play) {
+void EnRu1_PlayAbductedSfx(EnRu1* this, PlayState* play) {
SfxSource_PlaySfxAtFixedWorldPos(play, &this->actor.projectedPos, 20, NA_SE_VO_RT_FALL);
}
-void func_80AEF4E0(EnRu1* this) {
+/**
+ * Ruto laughs while picking up the Spiritual Stone.
+ */
+void EnRu1_PlayLaughingSfx(EnRu1* this) {
if (Animation_OnFrame(&this->skelAnime, 5.0f)) {
Sfx_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_VO_RT_LAUGH_0);
}
}
-void func_80AEF51C(EnRu1* this) {
+void EnRu1_PlayStartledSfx(EnRu1* this) {
Sfx_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_VO_RT_THROW);
}
-void func_80AEF540(EnRu1* this) {
+void EnRu1_RespondToSapphirePlatformMoving(EnRu1* this) {
if (EnRu1_GetPlatformCamSetting(this) == 2) {
EnRu1_SetEyes(this, ENRU1_EYES_UP);
EnRu1_SetMouth(this, ENRU1_MOUTH_OPEN);
if (this->skelAnime.mode != 2) {
EnRu1_AnimationChange(this, &gRutoChildShutterAnim, ANIMMODE_ONCE, -8.0f, false);
- func_80AEF51C(this);
+ EnRu1_PlayStartledSfx(this);
}
}
}
-void func_80AEF5B8(EnRu1* this) {
+void EnRu1_LookUpAtSapphire(EnRu1* this) {
f32 curFrame;
- if (D_80AF1938 == 0) {
+ if (sReachedForSapphire == 0) {
curFrame = this->skelAnime.curFrame;
if (curFrame >= 60.0f) {
EnRu1_SetEyes(this, ENRU1_EYES_UP);
EnRu1_SetMouth(this, ENRU1_MOUTH_SMILING);
func_80AED57C(this);
- D_80AF1938 = 1;
+ sReachedForSapphire = 1;
}
}
}
-void func_80AEF624(EnRu1* this, PlayState* play) {
+void EnRu1_SetupRetrievingSapphireAnimation(EnRu1* this, PlayState* play) {
f32 frameCount;
CsCmdActorCue* cue;
CsCmdActorCue* cue2;
@@ -2101,53 +2104,53 @@ void func_80AEF624(EnRu1* this, PlayState* play) {
this->actor.world.rot.z = newRotTmp;
Animation_Change(&this->skelAnime, &gRutoChildWalkToAndHoldUpSapphireAnim, 1.0f, 0.0f, frameCount,
ANIMMODE_ONCE, 0.0f);
- func_80AEB3A4(this, play);
- this->action = ENRU1_ACTION_37;
+ EnRu1_StartWalkingTowardSapphire(this, play);
+ this->action = ENRU1_ACTION_RETRIEVING_SAPPHIRE;
this->drawConfig = ENRU1_DRAW_OPA;
this->actor.shape.shadowAlpha = 0xFF;
}
}
-void func_80AEF728(EnRu1* this, UNK_TYPE arg1) {
- if (arg1 != 0) {
+void EnRu1_HoldUpSapphire(EnRu1* this, s32 doneWalking) {
+ if (doneWalking) {
Animation_Change(&this->skelAnime, &gRutoChildHoldArmsUpAnim, 1.0f, 0.0f,
Animation_GetLastFrame(&gRutoChildHoldArmsUpAnim), ANIMMODE_LOOP, 0.0f);
- func_80AEB3CC(this);
- this->action = ENRU1_ACTION_38;
+ EnRu1_StopWalkingTowardSapphire(this);
+ this->action = ENRU1_ACTION_HOLDING_SAPPHIRE;
}
}
-void func_80AEF79C(EnRu1* this, PlayState* play) {
+void EnRu1_BringHandsDown(EnRu1* this, PlayState* play) {
if (EnRu1_CheckCueNotMatchingId(play, 2, 3)) {
Animation_Change(&this->skelAnime, &gRutoChildBringHandsDownAnim, 1.0f, 0,
Animation_GetLastFrame(&gRutoChildBringHandsDownAnim), ANIMMODE_ONCE, -8.0f);
- this->action = ENRU1_ACTION_39;
+ this->action = ENRU1_ACTION_DONE_HOLDING_SAPPHIRE;
}
}
-void func_80AEF820(EnRu1* this, UNK_TYPE arg1) {
- if (arg1 != 0) {
+void EnRu1_KeepArmsDown(EnRu1* this, s32 armsAreDown) {
+ if (armsAreDown) {
Animation_Change(&this->skelAnime, &gRutoChildWait2Anim, 1.0f, 0, Animation_GetLastFrame(&gRutoChildWait2Anim),
ANIMMODE_LOOP, -8.0f);
- this->action = ENRU1_ACTION_40;
+ this->action = ENRU1_ACTION_MISSION_ACCOMPLISHED;
}
}
-void func_80AEF890(EnRu1* this, PlayState* play) {
+void EnRu1_EndRetrievalCutscene(EnRu1* this, PlayState* play) {
s32 pad[2];
s8 curRoomNum;
if (!(DEBUG_FEATURES && IS_CUTSCENE_LAYER) && EnRu1_IsCsStateIdle(play)) {
curRoomNum = play->roomCtx.curRoom.num;
- SET_INFTABLE(INFTABLE_145);
+ SET_INFTABLE(INFTABLE_RUTO_HAS_SAPPHIRE);
Flags_SetSwitch(play, EnRu1_GetSwitchFlag(this));
EnRu1_SetPlatformCamSetting(this, 1);
- this->action = ENRU1_ACTION_42;
+ this->action = ENRU1_ACTION_READY_TO_GO_HOME;
this->actor.room = curRoomNum;
}
}
-void func_80AEF930(EnRu1* this, PlayState* play) {
+void EnRu1_RespondToAbduction(EnRu1* this, PlayState* play) {
if (EnRu1_GetPlatformCamSetting(this) == 3) {
this->actor.flags |= ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY;
this->actor.textId = 0x4048;
@@ -2156,99 +2159,99 @@ void func_80AEF930(EnRu1* this, PlayState* play) {
#else
Message_StartTextbox(play, this->actor.textId, NULL);
#endif
- func_80AEF4A8(this, play);
- this->action = ENRU1_ACTION_43;
+ EnRu1_PlayAbductedSfx(this, play);
+ this->action = ENRU1_ACTION_BEING_ABDUCTED;
this->drawConfig = ENRU1_DRAW_NOTHING;
}
}
-void func_80AEF99C(EnRu1* this, PlayState* play) {
- if (func_80AEB1B4(play) != 0) {
+void EnRu1_RemoveInAbduction(EnRu1* this, PlayState* play) {
+ if (EnRu1_IsTextboxClosing(play)) {
EnRu1_SetPlatformCamSetting(this, 4);
Actor_Kill(&this->actor);
}
}
-void func_80AEF9D8(EnRu1* this, PlayState* play) {
+void EnRu1_SapphireRoom_ThrownOntoPlatform(EnRu1* this, PlayState* play) {
EnRu1_TurnUpperBodyForward(this);
EnRu1_UpdateSkelAnime(this);
EnRu1_UpdateEyes(this);
- func_80AEF624(this, play);
+ EnRu1_SetupRetrievingSapphireAnimation(this, play);
#if DEBUG_FEATURES
func_80AEB220(this, play);
#endif
}
-void func_80AEFA2C(EnRu1* this, PlayState* play) {
- s32 something;
+void EnRu1_SapphireRoom_Retrieving(EnRu1* this, PlayState* play) {
+ s32 doneAnim;
EnRu1_TurnUpperBodyForward(this);
- func_80AEB364(this, play);
+ EnRu1_WalkTowardSapphire(this, play);
EnRu1_UpdateBgCheckInfo(this, play);
- something = EnRu1_UpdateSkelAnime(this);
- func_80AEF4E0(this);
- func_80AEF5B8(this);
- func_80AEF40C(this);
- func_80AEF728(this, something);
+ doneAnim = EnRu1_UpdateSkelAnime(this);
+ EnRu1_PlayLaughingSfx(this);
+ EnRu1_LookUpAtSapphire(this);
+ EnRu1_PlayStepSoundNearSapphire(this);
+ EnRu1_HoldUpSapphire(this, doneAnim);
#if DEBUG_FEATURES
func_80AEB220(this, play);
#endif
}
-void func_80AEFAAC(EnRu1* this, PlayState* play) {
+void EnRu1_SapphireRoom_Holding(EnRu1* this, PlayState* play) {
EnRu1_TurnUpperBodyForward(this);
EnRu1_UpdateBgCheckInfo(this, play);
EnRu1_UpdateSkelAnime(this);
- func_80AEF79C(this, play);
+ EnRu1_BringHandsDown(this, play);
#if DEBUG_FEATURES
func_80AEB220(this, play);
#endif
}
-void func_80AEFB04(EnRu1* this, PlayState* play) {
- s32 something;
+void EnRu1_SapphireRoom_DoneHolding(EnRu1* this, PlayState* play) {
+ s32 doneAnim;
EnRu1_TurnUpperBodyForward(this);
EnRu1_UpdateBgCheckInfo(this, play);
- something = EnRu1_UpdateSkelAnime(this);
+ doneAnim = EnRu1_UpdateSkelAnime(this);
EnRu1_UpdateEyes(this);
- func_80AEF820(this, something);
+ EnRu1_KeepArmsDown(this, doneAnim);
#if DEBUG_FEATURES
func_80AEB220(this, play);
#endif
}
-void func_80AEFB68(EnRu1* this, PlayState* play) {
+void EnRu1_SapphireRoom_MissionAccomplished(EnRu1* this, PlayState* play) {
EnRu1_TurnUpperBodyForward(this);
EnRu1_UpdateBgCheckInfo(this, play);
EnRu1_UpdateSkelAnime(this);
EnRu1_UpdateEyes(this);
- func_80AEF890(this, play);
+ EnRu1_EndRetrievalCutscene(this, play);
#if DEBUG_FEATURES
func_80AEB220(this, play);
#endif
}
-void func_80AEFBC8(EnRu1* this, PlayState* play) {
+void EnRu1_SapphireRoom_ReadyToGoHome(EnRu1* this, PlayState* play) {
EnRu1_TurnUpperBodyForward(this);
EnRu1_UpdateBgCheckInfo(this, play);
EnRu1_UpdateSkelAnime(this);
EnRu1_UpdateEyes(this);
- func_80AEF540(this);
- func_80AEF930(this, play);
+ EnRu1_RespondToSapphirePlatformMoving(this);
+ EnRu1_RespondToAbduction(this, play);
}
-void func_80AEFC24(EnRu1* this, PlayState* play) {
+void EnRu1_SapphireRoom_BeingAbducted(EnRu1* this, PlayState* play) {
EnRu1_TurnUpperBodyForward(this);
- func_80AEF99C(this, play);
+ EnRu1_RemoveInAbduction(this, play);
}
void EnRu1_InitInSapphireRoom(EnRu1* this, PlayState* play) {
- if (GET_INFTABLE(INFTABLE_145) && !GET_INFTABLE(INFTABLE_146)) {
+ if (GET_INFTABLE(INFTABLE_RUTO_HAS_SAPPHIRE) && !GET_INFTABLE(INFTABLE_RUTO_ABDUCTED)) {
s32 pad;
EnRu1_AnimationChange(this, &gRutoChildWait2Anim, ANIMMODE_LOOP, 0, false);
- this->action = ENRU1_ACTION_41;
+ this->action = ENRU1_ACTION_WAITING_IN_SAPPHIRE_ROOM;
this->bigOctoPlatform = EnRu1_FindBigOctoPlatform(play);
EnRu1_SetPlatformCamSetting(this, 1);
this->actor.flags &= ~(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY);
@@ -2257,10 +2260,10 @@ void EnRu1_InitInSapphireRoom(EnRu1* this, PlayState* play) {
}
}
-void func_80AEFCE8(EnRu1* this, PlayState* play) {
+void EnRu1_SapphireRoom_Waiting(EnRu1* this, PlayState* play) {
this->bigOctoPlatform = EnRu1_FindBigOctoPlatform(play);
if (this->bigOctoPlatform != NULL) {
- this->action = ENRU1_ACTION_42;
+ this->action = ENRU1_ACTION_READY_TO_GO_HOME;
this->drawConfig = ENRU1_DRAW_OPA;
EnRu1_SetPlatformCamSetting(this, 1);
}
@@ -2334,7 +2337,7 @@ void EnRu1_InitBesideDoorSwitch(EnRu1* this, PlayState* play) {
s8 actorRoom;
if (GET_INFTABLE(INFTABLE_MET_RUTO_FIRST_TIME) && GET_INFTABLE(INFTABLE_PLACED_RUTO_ON_SWITCH) &&
- !GET_INFTABLE(INFTABLE_145) && (!(EnRu1_IsAssistingLink(this, play)))) {
+ !GET_INFTABLE(INFTABLE_RUTO_HAS_SAPPHIRE) && (!(EnRu1_IsAssistingLink(this, play)))) {
EnRu1_AnimationChange(this, &gRutoChildWait2Anim, ANIMMODE_LOOP, 0, false);
actorRoom = this->actor.room;
this->action = ENRU1_ACTION_22;
@@ -2353,7 +2356,7 @@ void EnRu1_InitBesideDoorSwitch(EnRu1* this, PlayState* play) {
#if DEBUG_FEATURES
void func_80AF0050(EnRu1* this, PlayState* play) {
EnRu1_AnimationChange(this, &gRutoChildWait2Anim, ANIMMODE_LOOP, 0, false);
- this->action = ENRU1_ACTION_36;
+ this->action = ENRU1_ACTION_THROWN_ONTO_SAPPHIRE_PLATFORM;
this->roomNum1 = this->actor.room;
this->bigOctoPlatform = EnRu1_FindBigOctoPlatform(play);
this->actor.room = -1;
diff --git a/src/overlays/actors/ovl_En_Ru1/z_en_ru1.h b/src/overlays/actors/ovl_En_Ru1/z_en_ru1.h
index 2a3cabd916..5ca230e23d 100644
--- a/src/overlays/actors/ovl_En_Ru1/z_en_ru1.h
+++ b/src/overlays/actors/ovl_En_Ru1/z_en_ru1.h
@@ -97,14 +97,14 @@ typedef enum EnRu1Action {
/* 33 */ ENRU1_ACTION_SITTING_DISAPPEARING,
/* 34 */ ENRU1_ACTION_SITTING_SEES_SAPPHIRE,
/* 35 */ ENRU1_ACTION_UNUSED,
- /* 36 */ ENRU1_ACTION_36,
- /* 37 */ ENRU1_ACTION_37,
- /* 38 */ ENRU1_ACTION_38,
- /* 39 */ ENRU1_ACTION_39,
- /* 40 */ ENRU1_ACTION_40,
- /* 41 */ ENRU1_ACTION_41,
- /* 42 */ ENRU1_ACTION_42,
- /* 43 */ ENRU1_ACTION_43,
+ /* 36 */ ENRU1_ACTION_THROWN_ONTO_SAPPHIRE_PLATFORM,
+ /* 37 */ ENRU1_ACTION_RETRIEVING_SAPPHIRE,
+ /* 38 */ ENRU1_ACTION_HOLDING_SAPPHIRE,
+ /* 39 */ ENRU1_ACTION_DONE_HOLDING_SAPPHIRE,
+ /* 40 */ ENRU1_ACTION_MISSION_ACCOMPLISHED,
+ /* 41 */ ENRU1_ACTION_WAITING_IN_SAPPHIRE_ROOM,
+ /* 42 */ ENRU1_ACTION_READY_TO_GO_HOME,
+ /* 43 */ ENRU1_ACTION_BEING_ABDUCTED,
/* 44 */ ENRU1_ACTION_44,
/* 45 */ ENRU1_ACTION_45
} EnRu1Action;
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 3c983d700f..4b3135ed97 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
@@ -151,8 +151,8 @@ static u16 sBgmList[] = {
NA_BGM_WATER_TEMPLE,
NA_BGM_BRIDGE_TO_GANONS,
NA_BGM_CUTSCENE_EFFECTS,
- NA_BGM_OCARINA_OF_TIME,
- NA_BGM_OCARINA_OF_TIME,
+ NA_BGM_SEAL_OF_SAGES,
+ NA_BGM_SEAL_OF_SAGES,
NA_BGM_GERUDO_VALLEY,
NA_BGM_POTION_SHOP,
NA_BGM_KOTAKE_KOUME,
@@ -161,7 +161,7 @@ static u16 sBgmList[] = {
NA_BGM_UNDERGROUND,
NA_BGM_GANONDORF_BOSS,
NA_BGM_GANON_BOSS,
- NA_BGM_END_DEMO,
+ NA_BGM_OCARINA_OF_TIME,
};
#endif
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 4d234504e8..a2ed4257c2 100644
--- a/src/overlays/actors/ovl_En_Tk/z_en_tk.c
+++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.c
@@ -21,7 +21,7 @@
#include "play_state.h"
#include "save.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/dust_textures.h"
#include "assets/objects/object_tk/object_tk.h"
#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY)
diff --git a/src/overlays/actors/ovl_En_Vb_Ball/z_en_vb_ball.c b/src/overlays/actors/ovl_En_Vb_Ball/z_en_vb_ball.c
index d67c549234..ad7eb76dc5 100644
--- a/src/overlays/actors/ovl_En_Vb_Ball/z_en_vb_ball.c
+++ b/src/overlays/actors/ovl_En_Vb_Ball/z_en_vb_ball.c
@@ -19,7 +19,7 @@
#include "player.h"
#include "assets/objects/object_fd/object_fd.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/shadow_circle.h"
#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
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 6dffc30ecd..f496a96f6a 100644
--- a/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c
+++ b/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c
@@ -26,7 +26,7 @@
#include "skin.h"
#include "assets/objects/object_zl4/object_zl4.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_fire.h"
#include "assets/objects/object_horse_zelda/object_horse_zelda.h"
#include "assets/objects/object_horse_ganon/object_horse_ganon.h"
#include "assets/objects/object_im/object_im.h"
diff --git a/src/overlays/actors/ovl_En_Vm/z_en_vm.c b/src/overlays/actors/ovl_En_Vm/z_en_vm.c
index 050942aac4..b8bc829e00 100644
--- a/src/overlays/actors/ovl_En_Vm/z_en_vm.c
+++ b/src/overlays/actors/ovl_En_Vm/z_en_vm.c
@@ -22,7 +22,7 @@
#include "player.h"
#include "assets/objects/object_vm/object_vm.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_enemy_death_flame.h"
#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
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 0192c2cd28..2a63684f9c 100644
--- a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c
+++ b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c
@@ -19,7 +19,7 @@
#include "player.h"
#include "save.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/shadow_circle.h"
#include "assets/objects/object_wallmaster/object_wallmaster.h"
#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
diff --git a/src/overlays/actors/ovl_En_Weiyer/z_en_weiyer.c b/src/overlays/actors/ovl_En_Weiyer/z_en_weiyer.c
index 919eb6bd75..78a284a881 100644
--- a/src/overlays/actors/ovl_En_Weiyer/z_en_weiyer.c
+++ b/src/overlays/actors/ovl_En_Weiyer/z_en_weiyer.c
@@ -26,17 +26,17 @@ void EnWeiyer_Destroy(Actor* thisx, PlayState* play);
void EnWeiyer_Update(Actor* thisx, PlayState* play);
void EnWeiyer_Draw(Actor* thisx, PlayState* play);
-void func_80B32804(EnWeiyer* this, PlayState* play);
-void func_80B328E8(EnWeiyer* this, PlayState* play);
-void func_80B32C2C(EnWeiyer* this, PlayState* play);
-void func_80B32D30(EnWeiyer* this, PlayState* play);
-void func_80B32E34(EnWeiyer* this, PlayState* play);
-void func_80B33018(EnWeiyer* this, PlayState* play);
-void func_80B331CC(EnWeiyer* this, PlayState* play);
-void func_80B333B8(EnWeiyer* this, PlayState* play);
-void func_80B332B4(EnWeiyer* this, PlayState* play);
-void func_80B33338(EnWeiyer* this, PlayState* play);
-void func_80B3349C(EnWeiyer* this, PlayState* play);
+void EnWeiyer_InitInsideWaterBox(EnWeiyer* this, PlayState* play);
+void EnWeiyer_FreeSwim(EnWeiyer* this, PlayState* play);
+void EnWeiyer_TurnAround(EnWeiyer* this, PlayState* play);
+void EnWeiyer_StuckOnFloor(EnWeiyer* this, PlayState* play);
+void EnWeiyer_Attack(EnWeiyer* this, PlayState* play);
+void EnWeiyer_Inactive(EnWeiyer* this, PlayState* play);
+void EnWeiyer_Hurt(EnWeiyer* this, PlayState* play);
+void EnWeiyer_Stunned(EnWeiyer* this, PlayState* play);
+void EnWeiyer_Die(EnWeiyer* this, PlayState* play);
+void EnWeiyer_Dead(EnWeiyer* this, PlayState* play);
+void EnWeiyer_OutOfWater(EnWeiyer* this, PlayState* play);
ActorProfile En_Weiyer_Profile = {
/**/ ACTOR_EN_WEIYER,
@@ -122,7 +122,7 @@ void EnWeiyer_Init(Actor* thisx, PlayState* play) {
Collider_InitCylinder(play, &this->collider);
Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
- this->actionFunc = func_80B32804;
+ this->actionFunc = EnWeiyer_InitInsideWaterBox;
}
void EnWeiyer_Destroy(Actor* thisx, PlayState* play) {
@@ -131,52 +131,52 @@ void EnWeiyer_Destroy(Actor* thisx, PlayState* play) {
Collider_DestroyCylinder(play, &this->collider);
}
-void func_80B32384(EnWeiyer* this) {
- this->unk_196 = this->actor.shape.rot.y;
- this->unk_27C = (cosf(-M_PI / 8) * 3.0f) + this->actor.world.pos.y;
+void EnWeiyer_SetupFreeSwim(EnWeiyer* this) {
+ this->targetYaw = this->actor.shape.rot.y;
+ this->swimHeight = (cosf(-M_PI / 8) * 3.0f) + this->actor.world.pos.y;
Animation_MorphToLoop(&this->skelAnime, &gStingerHitAnim, -5.0f);
- this->unk_194 = 30;
+ this->timer = 30;
this->actor.speed = CLAMP_MAX(this->actor.speed, 2.5f);
this->collider.base.atFlags &= ~AT_ON;
- this->unk_280 = this->actor.floorHeight;
- this->actionFunc = func_80B328E8;
+ this->targetSwimHeight = this->actor.floorHeight;
+ this->actionFunc = EnWeiyer_FreeSwim;
}
-void func_80B32434(EnWeiyer* this) {
+void EnWeiyer_SetupTurnAround(EnWeiyer* this) {
Animation_MorphToLoop(&this->skelAnime, &gStingerHitAnim, -5.0f);
this->collider.base.atFlags |= AT_ON;
- this->unk_194 = 0;
+ this->timer = 0;
this->actor.speed = 5.0f;
- this->actionFunc = func_80B32C2C;
+ this->actionFunc = EnWeiyer_TurnAround;
}
-void func_80B32494(EnWeiyer* this) {
+void EnWeiyer_SetupStuckOnFloor(EnWeiyer* this) {
Animation_Change(&this->skelAnime, &gStingerPopOutAnim, 2.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f);
- this->unk_194 = 40;
+ this->timer = 40;
this->collider.base.atFlags |= AT_ON;
- this->actionFunc = func_80B32D30;
+ this->actionFunc = EnWeiyer_StuckOnFloor;
}
-void func_80B32508(EnWeiyer* this) {
- this->unk_194 = 200;
+void EnWeiyer_SetupAttack(EnWeiyer* this) {
+ this->timer = 200;
this->collider.base.atFlags |= AT_ON;
this->skelAnime.playSpeed = 3.0f;
- this->actionFunc = func_80B32E34;
+ this->actionFunc = EnWeiyer_Attack;
}
-void func_80B32538(EnWeiyer* this) {
- this->unk_194 = 200;
- this->unk_196 = this->actor.yawTowardsPlayer + 0x8000;
- this->unk_27C = this->actor.world.pos.y;
+void EnWeiyer_SetupInactive(EnWeiyer* this) {
+ this->timer = 200;
+ this->targetYaw = this->actor.yawTowardsPlayer + 0x8000;
+ this->swimHeight = this->actor.world.pos.y;
this->actor.speed = CLAMP_MAX(this->actor.speed, 4.0f);
this->collider.base.atFlags &= ~AT_ON;
this->skelAnime.playSpeed = 1.0f;
- this->actionFunc = func_80B33018;
+ this->actionFunc = EnWeiyer_Inactive;
}
-void func_80B325A0(EnWeiyer* this) {
+void EnWeiyer_SetupHurt(EnWeiyer* this) {
Animation_Change(&this->skelAnime, &gStingerHitAnim, 2.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -3.0f);
- this->unk_194 = 40;
+ this->timer = 40;
this->collider.base.atFlags &= ~AT_ON;
this->collider.base.acFlags &= ~AC_ON;
this->actor.gravity = 0.0f;
@@ -184,12 +184,12 @@ void func_80B325A0(EnWeiyer* this) {
this->actor.speed = 3.0f;
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 200, COLORFILTER_BUFFLAG_OPA, 40);
this->collider.dim.height = sCylinderInit.dim.height;
- this->actionFunc = func_80B331CC;
+ this->actionFunc = EnWeiyer_Hurt;
}
-void func_80B32660(EnWeiyer* this) {
+void EnWeiyer_SetupStunned(EnWeiyer* this) {
Animation_Change(&this->skelAnime, &gStingerPopOutAnim, 2.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f);
- this->unk_194 = 80;
+ this->timer = 80;
this->actor.speed = 0.0f;
this->actor.velocity.y = 0.0f;
this->actor.gravity = -1.0f;
@@ -197,34 +197,34 @@ void func_80B32660(EnWeiyer* this) {
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 200, COLORFILTER_BUFFLAG_OPA, 80);
this->collider.base.atFlags &= ~AT_ON;
Actor_PlaySfx(&this->actor, NA_SE_EN_GOMA_JR_FREEZE);
- this->actionFunc = func_80B333B8;
+ this->actionFunc = EnWeiyer_Stunned;
}
-void func_80B32724(EnWeiyer* this) {
+void EnWeiyer_SetupDie(EnWeiyer* this) {
Animation_MorphToLoop(&this->skelAnime, &gStingerHitAnim, -5.0f);
- this->unk_194 = 20;
+ this->timer = 20;
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 200, COLORFILTER_BUFFLAG_OPA, 40);
this->collider.base.atFlags &= ~AT_ON;
this->collider.base.acFlags &= ~AC_ON;
this->actor.speed = 3.0f;
- this->actionFunc = func_80B332B4;
+ this->actionFunc = EnWeiyer_Die;
}
-void func_80B327B0(EnWeiyer* this) {
+void EnWeiyer_SetupDead(EnWeiyer* this) {
this->actor.speed = 0.0f;
this->actor.velocity.y = 0.0f;
this->actor.colorFilterParams |= 0x2000;
- this->actionFunc = func_80B33338;
+ this->actionFunc = EnWeiyer_Dead;
}
-void func_80B327D8(EnWeiyer* this) {
+void EnWeiyer_SetupOutOfWater(EnWeiyer* this) {
this->actor.shape.rot.x = -0x2000;
- this->unk_194 = -1;
+ this->timer = -1;
this->actor.speed = 5.0f;
- this->actionFunc = func_80B3349C;
+ this->actionFunc = EnWeiyer_OutOfWater;
}
-void func_80B32804(EnWeiyer* this, PlayState* play) {
+void EnWeiyer_InitInsideWaterBox(EnWeiyer* this, PlayState* play) {
WaterBox* waterBox;
s32 bgId;
@@ -239,20 +239,20 @@ void func_80B32804(EnWeiyer* this, PlayState* play) {
} else {
this->actor.home.pos.y -= 5.0f;
this->actor.world.pos.y = (this->actor.home.pos.y + this->actor.floorHeight) / 2.0f;
- func_80B32384(this);
+ EnWeiyer_SetupFreeSwim(this);
}
}
-void func_80B328E8(EnWeiyer* this, PlayState* play) {
- s32 sp34;
+void EnWeiyer_FreeSwim(EnWeiyer* this, PlayState* play) {
+ s32 animRestarted;
f32 curFrame;
SkelAnime_Update(&this->skelAnime);
Math_ScaledStepToS(&this->actor.shape.rot.x, 0, 0x800);
- sp34 = Animation_OnFrame(&this->skelAnime, 0.0f);
+ animRestarted = Animation_OnFrame(&this->skelAnime, 0.0f);
curFrame = this->skelAnime.curFrame;
- Math_StepToF(&this->unk_27C, this->unk_280, 0.5f);
- this->actor.world.pos.y = this->unk_27C - cosf((curFrame - 5.0f) * (M_PI / 40)) * 3.0f;
+ Math_StepToF(&this->swimHeight, this->targetSwimHeight, 0.5f);
+ this->actor.world.pos.y = this->swimHeight - cosf((curFrame - 5.0f) * (M_PI / 40)) * 3.0f;
if (curFrame <= 45.0f) {
Math_StepToF(&this->actor.speed, 1.0f, 0.03f);
@@ -261,19 +261,19 @@ void func_80B328E8(EnWeiyer* this, PlayState* play) {
}
if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
- this->unk_196 = this->actor.wallYaw;
- this->unk_194 = 30;
+ this->targetYaw = this->actor.wallYaw;
+ this->timer = 30;
}
- if (Math_ScaledStepToS(&this->actor.shape.rot.y, this->unk_196, 182)) {
- if (this->unk_194 != 0) {
- this->unk_194--;
+ if (Math_ScaledStepToS(&this->actor.shape.rot.y, this->targetYaw, 182)) {
+ if (this->timer != 0) {
+ this->timer--;
}
- if (this->unk_194 == 0) {
- this->unk_196 =
+ if (this->timer == 0) {
+ this->targetYaw =
Rand_S16Offset(0x2000, 0x2000) * ((Rand_ZeroOne() < 0.5f) ? -1 : 1) + this->actor.shape.rot.y;
- this->unk_194 = 30;
+ this->timer = 30;
if (Rand_ZeroOne() < 0.3333f) {
Actor_PlaySfx(&this->actor, NA_SE_EN_EIER_CRY);
@@ -283,38 +283,38 @@ void func_80B328E8(EnWeiyer* this, PlayState* play) {
if (this->actor.home.pos.y < this->actor.world.pos.y) {
if (this->actor.home.pos.y < this->actor.floorHeight) {
- func_80B32434(this);
+ EnWeiyer_SetupTurnAround(this);
} else {
this->actor.world.pos.y = this->actor.home.pos.y;
- this->unk_280 =
+ this->targetSwimHeight =
Rand_ZeroOne() * ((this->actor.home.pos.y - this->actor.floorHeight) / 2.0f) + this->actor.floorHeight;
}
} else {
Player* player = GET_PLAYER(play);
if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
- this->unk_280 =
+ this->targetSwimHeight =
this->actor.home.pos.y - Rand_ZeroOne() * ((this->actor.home.pos.y - this->actor.floorHeight) / 2.0f);
- } else if (sp34 && (Rand_ZeroOne() < 0.1f)) {
- this->unk_280 =
+ } else if (animRestarted && (Rand_ZeroOne() < 0.1f)) {
+ this->targetSwimHeight =
Rand_ZeroOne() * (this->actor.home.pos.y - this->actor.floorHeight) + this->actor.floorHeight;
}
if ((this->actor.xzDistToPlayer < 400.0f) && (fabsf(this->actor.yDistToPlayer) < 250.0f) &&
(player->actor.world.pos.y < (this->actor.home.pos.y + 20.0f))) {
- func_80B32508(this);
+ EnWeiyer_SetupAttack(this);
}
}
}
-void func_80B32C2C(EnWeiyer* this, PlayState* play) {
+void EnWeiyer_TurnAround(EnWeiyer* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
- if (this->unk_194 == 0) {
+ if (this->timer == 0) {
if (Math_ScaledStepToS(&this->actor.shape.rot.x, -0x4000, 0x800)) {
this->actor.shape.rot.z = 0;
this->actor.shape.rot.y += 0x8000;
- this->unk_194 = 1;
+ this->timer = 1;
} else {
this->actor.shape.rot.z = this->actor.shape.rot.x * 2;
}
@@ -327,14 +327,14 @@ void func_80B32C2C(EnWeiyer* this, PlayState* play) {
Actor_PlaySfx(&this->actor, NA_SE_EN_OCTAROCK_SINK);
}
- func_80B32538(this);
+ EnWeiyer_SetupInactive(this);
} else if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
- func_80B32494(this);
+ EnWeiyer_SetupStuckOnFloor(this);
}
}
}
-void func_80B32D30(EnWeiyer* this, PlayState* play) {
+void EnWeiyer_StuckOnFloor(EnWeiyer* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if (Animation_OnFrame(&this->skelAnime, 0.0f)) {
@@ -344,40 +344,40 @@ void func_80B32D30(EnWeiyer* this, PlayState* play) {
Math_ScaledStepToS(&this->actor.shape.rot.x, 0, 0x800);
Math_StepToF(&this->actor.speed, 0.0f, 1.0f);
- if (this->unk_194 != 0) {
- this->unk_194--;
+ if (this->timer != 0) {
+ this->timer--;
}
- if (this->unk_194 == 0) {
- func_80B32434(this);
+ if (this->timer == 0) {
+ EnWeiyer_SetupTurnAround(this);
} else if (this->actor.world.pos.y < this->actor.home.pos.y) {
- func_80B32384(this);
+ EnWeiyer_SetupFreeSwim(this);
}
}
-s16 func_80B32DEC(EnWeiyer* this, PlayState* play) {
+s16 EnWeiyer_PitchTowardPlayer(EnWeiyer* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- Vec3f vec;
+ Vec3f playerWorldPos;
- vec.x = player->actor.world.pos.x;
- vec.y = player->actor.world.pos.y + 20.0f;
- vec.z = player->actor.world.pos.z;
+ playerWorldPos.x = player->actor.world.pos.x;
+ playerWorldPos.y = player->actor.world.pos.y + 20.0f;
+ playerWorldPos.z = player->actor.world.pos.z;
- return Actor_WorldPitchTowardPoint(&this->actor, &vec);
+ return Actor_WorldPitchTowardPoint(&this->actor, &playerWorldPos);
}
-void func_80B32E34(EnWeiyer* this, PlayState* play) {
+void EnWeiyer_Attack(EnWeiyer* this, PlayState* play) {
Player* player = GET_PLAYER(play);
SkelAnime_Update(&this->skelAnime);
- if (this->unk_194 != 0) {
- this->unk_194--;
+ if (this->timer != 0) {
+ this->timer--;
}
- if ((this->unk_194 == 0) || ((this->actor.home.pos.y + 20.0f) <= player->actor.world.pos.y) ||
+ if ((this->timer == 0) || ((this->actor.home.pos.y + 20.0f) <= player->actor.world.pos.y) ||
(this->collider.base.atFlags & AT_HIT)) {
- func_80B32538(this);
+ EnWeiyer_SetupInactive(this);
} else {
if (Actor_IsFacingPlayer(&this->actor, 0x2800)) {
Math_StepToF(&this->actor.speed, 4.0f, 0.2f);
@@ -388,34 +388,34 @@ void func_80B32E34(EnWeiyer* this, PlayState* play) {
if (this->actor.home.pos.y < this->actor.world.pos.y) {
if (this->actor.home.pos.y < this->actor.floorHeight) {
this->actor.shape.rot.x = 0;
- func_80B32434(this);
+ EnWeiyer_SetupTurnAround(this);
return;
}
this->actor.world.pos.y = this->actor.home.pos.y;
Math_SmoothStepToS(&this->actor.shape.rot.x, 0x1000, 2, 0x100, 0x40);
} else {
- Math_SmoothStepToS(&this->actor.shape.rot.x, func_80B32DEC(this, play), 2, 0x100, 0x40);
+ Math_SmoothStepToS(&this->actor.shape.rot.x, EnWeiyer_PitchTowardPlayer(this, play), 2, 0x100, 0x40);
}
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 2, 0x200, 0x80);
if ((player->actor.depthInWater < 50.0f) && (this->actor.depthInWater < 20.0f) &&
Actor_IsFacingPlayer(&this->actor, 0x2000)) {
- func_80B327D8(this);
+ EnWeiyer_SetupOutOfWater(this);
}
}
}
-void func_80B33018(EnWeiyer* this, PlayState* play) {
+void EnWeiyer_Inactive(EnWeiyer* this, PlayState* play) {
f32 curFrame;
SkelAnime_Update(&this->skelAnime);
Math_ScaledStepToS(&this->actor.shape.rot.x, 0, 0x800);
curFrame = this->skelAnime.curFrame;
- Math_StepToF(&this->unk_27C, (this->actor.home.pos.y - this->actor.floorHeight) / 4.0f + this->actor.floorHeight,
+ Math_StepToF(&this->swimHeight, (this->actor.home.pos.y - this->actor.floorHeight) / 4.0f + this->actor.floorHeight,
1.0f);
- this->actor.world.pos.y = this->unk_27C - cosf((curFrame - 5.0f) * (M_PI / 40)) * 3.0f;
+ this->actor.world.pos.y = this->swimHeight - cosf((curFrame - 5.0f) * (M_PI / 40)) * 3.0f;
if (curFrame <= 45.0f) {
Math_StepToF(&this->actor.speed, 1.0f, 0.03f);
@@ -423,70 +423,70 @@ void func_80B33018(EnWeiyer* this, PlayState* play) {
Math_StepToF(&this->actor.speed, 1.3f, 0.03f);
}
- if (this->unk_194 != 0) {
- this->unk_194--;
+ if (this->timer != 0) {
+ this->timer--;
}
if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
- this->unk_196 = this->actor.wallYaw;
+ this->targetYaw = this->actor.wallYaw;
}
- if (Math_SmoothStepToS(&this->actor.shape.rot.y, this->unk_196, 2, 0x200, 0x80) == 0) {
- this->unk_196 = this->actor.yawTowardsPlayer + 0x8000;
+ if (Math_SmoothStepToS(&this->actor.shape.rot.y, this->targetYaw, 2, 0x200, 0x80) == 0) {
+ this->targetYaw = this->actor.yawTowardsPlayer + 0x8000;
}
if (this->actor.home.pos.y < this->actor.world.pos.y) {
if (this->actor.home.pos.y < this->actor.floorHeight) {
- func_80B32434(this);
+ EnWeiyer_SetupTurnAround(this);
} else {
this->actor.world.pos.y = this->actor.home.pos.y;
}
}
- if (this->unk_194 == 0) {
- func_80B32384(this);
+ if (this->timer == 0) {
+ EnWeiyer_SetupFreeSwim(this);
}
}
-void func_80B331CC(EnWeiyer* this, PlayState* play) {
+void EnWeiyer_Hurt(EnWeiyer* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
- if (this->unk_194 != 0) {
- this->unk_194--;
+ if (this->timer != 0) {
+ this->timer--;
}
if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
- this->unk_196 = this->actor.wallYaw;
+ this->targetYaw = this->actor.wallYaw;
} else {
- this->unk_196 = this->actor.yawTowardsPlayer + 0x8000;
+ this->targetYaw = this->actor.yawTowardsPlayer + 0x8000;
}
- Math_ScaledStepToS(&this->actor.world.rot.y, this->unk_196, 0x38E);
+ Math_ScaledStepToS(&this->actor.world.rot.y, this->targetYaw, 0x38E);
Math_ScaledStepToS(&this->actor.shape.rot.x, 0, 0x200);
- this->actor.shape.rot.z = sinf(this->unk_194 * (M_PI / 5)) * 5120.0f;
+ this->actor.shape.rot.z = sinf(this->timer * (M_PI / 5)) * 5120.0f;
- if (this->unk_194 == 0) {
+ if (this->timer == 0) {
this->actor.shape.rot.z = 0;
this->collider.base.acFlags |= AC_ON;
- func_80B32384(this);
+ EnWeiyer_SetupFreeSwim(this);
}
}
-void func_80B332B4(EnWeiyer* this, PlayState* play) {
+void EnWeiyer_Die(EnWeiyer* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
Math_ScaledStepToS(&this->actor.shape.rot.x, -0x4000, 0x400);
this->actor.shape.rot.z += 0x1000;
- if (this->unk_194 != 0) {
- this->unk_194--;
+ if (this->timer != 0) {
+ this->timer--;
}
- if ((this->unk_194 == 0) || (this->actor.bgCheckFlags & BGCHECKFLAG_CEILING)) {
- func_80B327B0(this);
+ if ((this->timer == 0) || (this->actor.bgCheckFlags & BGCHECKFLAG_CEILING)) {
+ EnWeiyer_SetupDead(this);
}
}
-void func_80B33338(EnWeiyer* this, PlayState* play) {
+void EnWeiyer_Dead(EnWeiyer* this, PlayState* play) {
this->actor.shape.shadowAlpha = CLAMP_MIN((s16)(this->actor.shape.shadowAlpha - 5), 0);
this->actor.world.pos.y -= 2.0f;
@@ -496,9 +496,9 @@ void func_80B33338(EnWeiyer* this, PlayState* play) {
}
}
-void func_80B333B8(EnWeiyer* this, PlayState* play) {
- if (this->unk_194 != 0) {
- this->unk_194--;
+void EnWeiyer_Stunned(EnWeiyer* this, PlayState* play) {
+ if (this->timer != 0) {
+ this->timer--;
}
Math_ScaledStepToS(&this->actor.shape.rot.x, 0, 0x200);
@@ -515,78 +515,78 @@ void func_80B333B8(EnWeiyer* this, PlayState* play) {
}
}
- if (this->unk_194 == 0) {
+ if (this->timer == 0) {
this->actor.gravity = 0.0f;
this->actor.velocity.y = 0.0f;
this->collider.dim.height = sCylinderInit.dim.height;
- func_80B32384(this);
+ EnWeiyer_SetupFreeSwim(this);
}
}
-void func_80B3349C(EnWeiyer* this, PlayState* play) {
+void EnWeiyer_OutOfWater(EnWeiyer* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- s16 phi_a1;
- s32 phi_a0;
+ s16 pitch;
+ s32 playerIsOutOfWater;
SkelAnime_Update(&this->skelAnime);
- phi_a0 = ((this->actor.home.pos.y + 20.0f) <= player->actor.world.pos.y);
+ playerIsOutOfWater = ((this->actor.home.pos.y + 20.0f) <= player->actor.world.pos.y);
- if (this->unk_194 == -1) {
- if (phi_a0 || (this->collider.base.atFlags & AT_HIT)) {
- func_80B32538(this);
+ if (this->timer == -1) {
+ if (playerIsOutOfWater || (this->collider.base.atFlags & AT_HIT)) {
+ EnWeiyer_SetupInactive(this);
} else if (this->actor.depthInWater < 0.0f) {
- this->unk_194 = 10;
+ this->timer = 10;
EffectSsGSplash_Spawn(play, &this->actor.world.pos, NULL, NULL, 1, 400);
Actor_PlaySfx(&this->actor, NA_SE_EN_OCTAROCK_JUMP);
}
} else {
- if (phi_a0 || (this->collider.base.atFlags & AT_HIT)) {
- this->unk_194 = 0;
- } else if (this->unk_194 != 0) {
- this->unk_194--;
+ if (playerIsOutOfWater || (this->collider.base.atFlags & AT_HIT)) {
+ this->timer = 0;
+ } else if (this->timer != 0) {
+ this->timer--;
}
- if (this->unk_194 == 0) {
- phi_a1 = 0x1800;
+ if (this->timer == 0) {
+ pitch = 0x1800;
} else {
- phi_a1 = func_80B32DEC(this, play);
- phi_a1 = CLAMP_MIN(phi_a1, 0);
+ pitch = EnWeiyer_PitchTowardPlayer(this, play);
+ pitch = CLAMP_MIN(pitch, 0);
}
- if (this->actor.shape.rot.x < phi_a1) {
- Math_ScaledStepToS(&this->actor.shape.rot.x, phi_a1, 0x400);
+ if (this->actor.shape.rot.x < pitch) {
+ Math_ScaledStepToS(&this->actor.shape.rot.x, pitch, 0x400);
}
if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
- func_80B32434(this);
+ EnWeiyer_SetupTurnAround(this);
} else if ((this->actor.bgCheckFlags & BGCHECKFLAG_WATER) && (this->actor.shape.rot.x > 0)) {
EffectSsGSplash_Spawn(play, &this->actor.world.pos, NULL, NULL, 1, 400);
Actor_PlaySfx(&this->actor, NA_SE_EN_OCTAROCK_SINK);
- func_80B32538(this);
+ EnWeiyer_SetupInactive(this);
} else {
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 8, 0x100, 0x80);
}
}
}
-void func_80B3368C(EnWeiyer* this, PlayState* play) {
+void EnWeiyer_UpdateDamage(EnWeiyer* this, PlayState* play) {
if (this->collider.base.acFlags & AC_HIT) {
this->collider.base.acFlags &= ~AC_HIT;
Actor_SetDropFlag(&this->actor, &this->collider.elem, true);
if ((this->actor.colChkInfo.damageReaction != 0) || (this->actor.colChkInfo.damage != 0)) {
if (this->actor.colChkInfo.damageReaction == 1) {
- if (this->actionFunc != func_80B333B8) {
- func_80B32660(this);
+ if (this->actionFunc != EnWeiyer_Stunned) {
+ EnWeiyer_SetupStunned(this);
}
} else if (Actor_ApplyDamage(&this->actor) == 0) {
Enemy_StartFinishingBlow(play, &this->actor);
Actor_PlaySfx(&this->actor, NA_SE_EN_EIER_DEAD);
this->actor.flags &= ~ACTOR_FLAG_ATTENTION_ENABLED;
- func_80B32724(this);
+ EnWeiyer_SetupDie(this);
} else {
- func_80B325A0(this);
+ EnWeiyer_SetupHurt(this);
}
}
}
@@ -597,12 +597,12 @@ void EnWeiyer_Update(Actor* thisx, PlayState* play) {
s32 pad;
this->actor.home.pos.y = this->actor.depthInWater + this->actor.world.pos.y - 5.0f;
- func_80B3368C(this, play);
+ EnWeiyer_UpdateDamage(this, play);
this->actionFunc(this, play);
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actor.world.rot.x = -this->actor.shape.rot.x;
- if ((this->actor.world.rot.x == 0) || (this->actionFunc == func_80B333B8)) {
+ if ((this->actor.world.rot.x == 0) || (this->actionFunc == EnWeiyer_Stunned)) {
Actor_MoveXZGravity(&this->actor);
} else {
Actor_MoveXYZ(&this->actor);
@@ -644,7 +644,7 @@ void EnWeiyer_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx, "../z_en_weiyer.c", 1193);
- if (this->actionFunc != func_80B33338) {
+ if (this->actionFunc != EnWeiyer_Dead) {
Gfx_SetupDL_25Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, &D_80116280[2]);
gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255);
diff --git a/src/overlays/actors/ovl_En_Weiyer/z_en_weiyer.h b/src/overlays/actors/ovl_En_Weiyer/z_en_weiyer.h
index d35e43544f..2ab34e2c87 100644
--- a/src/overlays/actors/ovl_En_Weiyer/z_en_weiyer.h
+++ b/src/overlays/actors/ovl_En_Weiyer/z_en_weiyer.h
@@ -12,12 +12,12 @@ typedef struct EnWeiyer {
/* 0x0000 */ Actor actor;
/* 0x014C */ SkelAnime skelAnime;
/* 0x0190 */ EnWeiyerActionFunc actionFunc;
- /* 0x0194 */ s16 unk_194;
- /* 0x0196 */ s16 unk_196;
+ /* 0x0194 */ s16 timer;
+ /* 0x0196 */ s16 targetYaw;
/* 0x0198 */ Vec3s jointTable[19];
/* 0x020A */ Vec3s morphTable[19];
- /* 0x027C */ f32 unk_27C;
- /* 0x0280 */ f32 unk_280;
+ /* 0x027C */ f32 swimHeight;
+ /* 0x0280 */ f32 targetSwimHeight;
/* 0x0284 */ ColliderCylinder collider;
} EnWeiyer; // size = 0x02D0
diff --git a/src/overlays/actors/ovl_Magic_Dark/z_magic_dark.c b/src/overlays/actors/ovl_Magic_Dark/z_magic_dark.c
index 13acab8d46..0368bba58d 100644
--- a/src/overlays/actors/ovl_Magic_Dark/z_magic_dark.c
+++ b/src/overlays/actors/ovl_Magic_Dark/z_magic_dark.c
@@ -17,7 +17,8 @@
#include "player.h"
#include "save.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_flash.h"
+#include "assets/objects/gameplay_keep/gameplay_keep_0x32090.h"
#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_UPDATE_DURING_OCARINA)
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 78faf2c0dd..6f41073c4b 100644
--- a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c
+++ b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c
@@ -24,7 +24,7 @@
#include "play_state.h"
#include "save.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/cuttable_shrub.h"
#include "assets/objects/object_mamenoki/object_mamenoki.h"
#define FLAGS ACTOR_FLAG_IGNORE_POINT_LIGHTS
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 ee56e5d203..ebeb54bdfd 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
@@ -16,7 +16,7 @@
#include "effect.h"
#include "play_state.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/gameplay_keep_0x33910.h"
#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
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 a75c504b6f..4f1c201cd8 100644
--- a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c
+++ b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c
@@ -17,7 +17,7 @@
#include "z_lib.h"
#include "play_state.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_fire.h"
#include "assets/objects/object_syokudai/object_syokudai.h"
#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_HOOKSHOT_PULLS_PLAYER)
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 5f8f580e4e..568f211473 100644
--- a/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c
+++ b/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c
@@ -22,7 +22,11 @@
#include "save.h"
#include "assets/objects/object_demo_kekkai/object_demo_kekkai.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_lightning.h"
+#include "assets/objects/gameplay_keep/sun_textures.h"
+#include "assets/objects/gameplay_keep/gameplay_keep_0x4D160.h"
+#include "assets/objects/gameplay_keep/dust_textures.h"
+#include "assets/objects/gameplay_keep/eff_dust.h"
#include "assets/objects/object_spot02_objects/object_spot02_objects.h"
#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED | ACTOR_FLAG_UPDATE_DURING_OCARINA)
diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c
index 0fe5048f20..9e752541b3 100644
--- a/src/overlays/actors/ovl_player_actor/z_player.c
+++ b/src/overlays/actors/ovl_player_actor/z_player.c
@@ -51,7 +51,9 @@
#include "save.h"
#include "skin_matrix.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/player_anim_headers.h"
+#include "assets/objects/gameplay_keep/hover_boots_circle.h"
+#include "assets/objects/gameplay_keep/gameplay_keep_0x33910.h"
#include "assets/objects/object_link_child/object_link_child.h"
// Some player animations are played at this reduced speed, for reasons yet unclear.
@@ -362,22 +364,22 @@ void Player_Action_CsAction(Player* this, PlayState* play);
// .bss part 1
-#pragma increment_block_number "gc-eu:0 gc-eu-mq:0 gc-jp:0 gc-jp-ce:0 gc-jp-mq:0 gc-us:0 gc-us-mq:0 ique-cn:0" \
- "ntsc-1.0:0 ntsc-1.1:0 ntsc-1.2:0 pal-1.0:0 pal-1.1:0"
+#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:64 gc-jp-ce:64 gc-jp-mq:64 gc-us:64 gc-us-mq:64" \
+ "ique-cn:128 ntsc-1.0:64 ntsc-1.1:64 ntsc-1.2:64 pal-1.0:64 pal-1.1:64"
static s32 D_80858AA0;
// TODO: There's probably a way to match BSS ordering with less padding by spreading the variables out and moving
// data around. It would be easier if we had more options for controlling BSS ordering in debug.
-#pragma increment_block_number "gc-eu:192 gc-eu-mq:192 gc-jp:192 gc-jp-ce:192 gc-jp-mq:192 gc-us:192 gc-us-mq:192" \
- "ique-cn:192 ntsc-1.0:192 ntsc-1.1:192 ntsc-1.2:192 pal-1.0:192 pal-1.1:192"
+#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:192 gc-jp-ce:192 gc-jp-mq:192 gc-us:192 gc-us-mq:192" \
+ "ique-cn:128 ntsc-1.0:192 ntsc-1.1:192 ntsc-1.2:192 pal-1.0:192 pal-1.1:192"
static s32 sSavedCurrentMask;
static Vec3f sInteractWallCheckResult;
static Input* sControlInput;
#pragma increment_block_number "gc-eu:192 gc-eu-mq:192 gc-jp:192 gc-jp-ce:192 gc-jp-mq:192 gc-us:192 gc-us-mq:192" \
- "ique-cn:160 ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
+ "ique-cn:192 ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
// .data
diff --git a/src/overlays/effects/ovl_Effect_Ss_Blast/z_eff_ss_blast.c b/src/overlays/effects/ovl_Effect_Ss_Blast/z_eff_ss_blast.c
index aa9ae498eb..7ae5d611d1 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Blast/z_eff_ss_blast.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Blast/z_eff_ss_blast.c
@@ -14,7 +14,7 @@
#include "effect.h"
#include "play_state.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_shockwave.h"
#define rInnerColorR regs[0]
#define rInnerColorG regs[1]
diff --git a/src/overlays/effects/ovl_Effect_Ss_Bomb/z_eff_ss_bomb.c b/src/overlays/effects/ovl_Effect_Ss_Bomb/z_eff_ss_bomb.c
index f78c1e2f56..54cfc4e2fd 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Bomb/z_eff_ss_bomb.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Bomb/z_eff_ss_bomb.c
@@ -17,7 +17,7 @@
#include "play_state.h"
#include "skin_matrix.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_bomb_explosion.h"
#define EFFSSBOMB_LIFESPAN 20
diff --git a/src/overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.c b/src/overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.c
index 176f68acc1..ea6652aff9 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.c
@@ -15,7 +15,7 @@
#include "play_state.h"
#include "skin_matrix.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_bomb_explosion.h"
#define rScale regs[0]
#define rTexIndex regs[1]
diff --git a/src/overlays/effects/ovl_Effect_Ss_Bubble/z_eff_ss_bubble.c b/src/overlays/effects/ovl_Effect_Ss_Bubble/z_eff_ss_bubble.c
index 49f3ace0c1..bf25e04fee 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Bubble/z_eff_ss_bubble.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Bubble/z_eff_ss_bubble.c
@@ -15,7 +15,8 @@
#include "effect.h"
#include "play_state.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/gameplay_keep_0x55DB0.h"
+#include "assets/objects/gameplay_keep/eff_bubble.h"
#define rScale regs[0]
diff --git a/src/overlays/effects/ovl_Effect_Ss_Dead_Db/z_eff_ss_dead_db.c b/src/overlays/effects/ovl_Effect_Ss_Dead_Db/z_eff_ss_dead_db.c
index 8e83ca9f11..173e89d470 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Dead_Db/z_eff_ss_dead_db.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Dead_Db/z_eff_ss_dead_db.c
@@ -14,7 +14,7 @@
#include "play_state.h"
#include "skin_matrix.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_enemy_death_flame.h"
#define rScale regs[0]
#define rTextIdx regs[1]
diff --git a/src/overlays/effects/ovl_Effect_Ss_Dead_Dd/z_eff_ss_dead_dd.c b/src/overlays/effects/ovl_Effect_Ss_Dead_Dd/z_eff_ss_dead_dd.c
index 7bc0936907..a325828d3b 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Dead_Dd/z_eff_ss_dead_dd.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Dead_Dd/z_eff_ss_dead_dd.c
@@ -15,7 +15,7 @@
#include "play_state.h"
#include "skin_matrix.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/lens_flare.h"
#define rScale regs[0]
#define rPrimColorR regs[2]
diff --git a/src/overlays/effects/ovl_Effect_Ss_Dead_Ds/z_eff_ss_dead_ds.c b/src/overlays/effects/ovl_Effect_Ss_Dead_Ds/z_eff_ss_dead_ds.c
index 5f6da1295f..39e625cbd4 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Dead_Ds/z_eff_ss_dead_ds.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Dead_Ds/z_eff_ss_dead_ds.c
@@ -12,7 +12,7 @@
#include "effect.h"
#include "play_state.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/lens_flare.h"
#define rScale regs[0]
#define rTimer regs[1]
diff --git a/src/overlays/effects/ovl_Effect_Ss_Dt_Bubble/z_eff_ss_dt_bubble.c b/src/overlays/effects/ovl_Effect_Ss_Dt_Bubble/z_eff_ss_dt_bubble.c
index 1e7e3ca2ed..c07859177e 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Dt_Bubble/z_eff_ss_dt_bubble.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Dt_Bubble/z_eff_ss_dt_bubble.c
@@ -15,7 +15,8 @@
#include "effect.h"
#include "play_state.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/gameplay_keep_0x55DB0.h"
+#include "assets/objects/gameplay_keep/eff_bubble.h"
#define rPrimColorR regs[0]
#define rPrimColorG regs[1]
diff --git a/src/overlays/effects/ovl_Effect_Ss_Dust/z_eff_ss_dust.c b/src/overlays/effects/ovl_Effect_Ss_Dust/z_eff_ss_dust.c
index f06b5f3031..ab94be61db 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Dust/z_eff_ss_dust.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Dust/z_eff_ss_dust.c
@@ -16,7 +16,8 @@
#include "play_state.h"
#include "skin_matrix.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_dust.h"
+#include "assets/objects/gameplay_keep/dust_textures.h"
#define rPrimColorR regs[0]
#define rPrimColorG regs[1]
diff --git a/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c b/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c
index d632dfaa52..6ca632c689 100644
--- a/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c
+++ b/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c
@@ -14,7 +14,7 @@
#include "effect.h"
#include "play_state.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_fire.h"
#define rScaleMax regs[0]
#define rScale regs[1]
diff --git a/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c b/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c
index d4b07ef730..0c49b89466 100644
--- a/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c
+++ b/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c
@@ -18,7 +18,7 @@
#include "effect.h"
#include "play_state.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_ice_fragments.h"
#define rLifespan regs[0]
#define rYaw regs[1]
diff --git a/src/overlays/effects/ovl_Effect_Ss_Fcircle/z_eff_ss_fcircle.c b/src/overlays/effects/ovl_Effect_Ss_Fcircle/z_eff_ss_fcircle.c
index c9bfbe981a..d2a0a31327 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Fcircle/z_eff_ss_fcircle.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Fcircle/z_eff_ss_fcircle.c
@@ -13,7 +13,7 @@
#include "effect.h"
#include "play_state.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/gameplay_keep_0x173D0.h"
#define rUnused regs[3] // probably supposed to be an alpha
#define rRadius regs[8]
diff --git a/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/z_eff_ss_fire_tail.c b/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/z_eff_ss_fire_tail.c
index 8a5e416a6a..ba906e0e05 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/z_eff_ss_fire_tail.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/z_eff_ss_fire_tail.c
@@ -14,7 +14,7 @@
#include "play_state.h"
#include "player.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_fire.h"
#define rScale regs[0]
#define rLifespan regs[1]
diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Fire/z_eff_ss_g_fire.c b/src/overlays/effects/ovl_Effect_Ss_G_Fire/z_eff_ss_g_fire.c
index 9fc9d920dd..862f7c020e 100644
--- a/src/overlays/effects/ovl_Effect_Ss_G_Fire/z_eff_ss_g_fire.c
+++ b/src/overlays/effects/ovl_Effect_Ss_G_Fire/z_eff_ss_g_fire.c
@@ -10,7 +10,7 @@
#include "effect.h"
#include "play_state.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_fire_footprint.h"
u32 EffectSsGFire_Init(PlayState* play, u32 index, EffectSs* this, void* initParamsx);
void EffectSsGFire_Draw(PlayState* play, u32 index, EffectSs* this);
diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Magma/z_eff_ss_g_magma.c b/src/overlays/effects/ovl_Effect_Ss_G_Magma/z_eff_ss_g_magma.c
index b37136a18c..cae8127d76 100644
--- a/src/overlays/effects/ovl_Effect_Ss_G_Magma/z_eff_ss_g_magma.c
+++ b/src/overlays/effects/ovl_Effect_Ss_G_Magma/z_eff_ss_g_magma.c
@@ -11,7 +11,7 @@
#include "effect.h"
#include "play_state.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_magma_bubble.h"
u32 EffectSsGMagma_Init(PlayState* play, u32 index, EffectSs* this, void* initParamsx);
void EffectSsGMagma_Draw(PlayState* play, u32 index, EffectSs* this);
diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Ripple/z_eff_ss_g_ripple.c b/src/overlays/effects/ovl_Effect_Ss_G_Ripple/z_eff_ss_g_ripple.c
index ef0565c8f8..8822faadb4 100644
--- a/src/overlays/effects/ovl_Effect_Ss_G_Ripple/z_eff_ss_g_ripple.c
+++ b/src/overlays/effects/ovl_Effect_Ss_G_Ripple/z_eff_ss_g_ripple.c
@@ -14,7 +14,7 @@
#include "play_state.h"
#include "skin_matrix.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_water_ripple.h"
#define rWaterBoxNum regs[0]
#define rRadius regs[1]
diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Spk/z_eff_ss_g_spk.c b/src/overlays/effects/ovl_Effect_Ss_G_Spk/z_eff_ss_g_spk.c
index 783224c9e0..3ee210f5ba 100644
--- a/src/overlays/effects/ovl_Effect_Ss_G_Spk/z_eff_ss_g_spk.c
+++ b/src/overlays/effects/ovl_Effect_Ss_G_Spk/z_eff_ss_g_spk.c
@@ -15,7 +15,8 @@
#include "play_state.h"
#include "skin_matrix.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_spark_model.h"
+#include "assets/objects/gameplay_keep/eff_spark_textures.h"
#define rPrimColorR regs[0]
#define rPrimColorG regs[1]
diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.c b/src/overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.c
index 5995c1b563..606d49f0b7 100644
--- a/src/overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.c
+++ b/src/overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.c
@@ -10,7 +10,7 @@
#include "effect.h"
#include "play_state.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_water_splash.h"
//! @bug the reuse of regs[11] means that EffectSs_DrawGEffect will treat the type as an object slot (`rgObjectSlot`)
// this ends up having no effect because the texture provided does not use segment 6
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 550c4a08d3..278f2693f0 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
@@ -15,7 +15,8 @@
#include "play_state.h"
#include "player.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_fragments_1.h"
+#include "assets/objects/gameplay_keep/eff_fragments_2_model.h"
#define rPitch regs[0]
#define rYaw regs[1]
diff --git a/src/overlays/effects/ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.c b/src/overlays/effects/ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.c
index e1fa2a982e..9e36117534 100644
--- a/src/overlays/effects/ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.c
+++ b/src/overlays/effects/ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.c
@@ -14,7 +14,7 @@
#include "play_state.h"
#include "skin_matrix.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_hitmark.h"
#define rTexIndex regs[0]
#define rType regs[1]
diff --git a/src/overlays/effects/ovl_Effect_Ss_Ice_Piece/z_eff_ss_ice_piece.c b/src/overlays/effects/ovl_Effect_Ss_Ice_Piece/z_eff_ss_ice_piece.c
index 4bad83b5f0..fa73d60db9 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Ice_Piece/z_eff_ss_ice_piece.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Ice_Piece/z_eff_ss_ice_piece.c
@@ -14,7 +14,7 @@
#include "effect.h"
#include "play_state.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_ice_fragments.h"
#define rLifespan regs[0]
#define rYaw regs[1]
diff --git a/src/overlays/effects/ovl_Effect_Ss_K_Fire/z_eff_ss_k_fire.c b/src/overlays/effects/ovl_Effect_Ss_K_Fire/z_eff_ss_k_fire.c
index ce06859168..3b79d44a0b 100644
--- a/src/overlays/effects/ovl_Effect_Ss_K_Fire/z_eff_ss_k_fire.c
+++ b/src/overlays/effects/ovl_Effect_Ss_K_Fire/z_eff_ss_k_fire.c
@@ -13,7 +13,7 @@
#include "effect.h"
#include "play_state.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_fire.h"
#define rAlpha regs[0]
#define rScroll regs[2]
diff --git a/src/overlays/effects/ovl_Effect_Ss_KiraKira/z_eff_ss_kirakira.c b/src/overlays/effects/ovl_Effect_Ss_KiraKira/z_eff_ss_kirakira.c
index a4093ead1b..4587968419 100644
--- a/src/overlays/effects/ovl_Effect_Ss_KiraKira/z_eff_ss_kirakira.c
+++ b/src/overlays/effects/ovl_Effect_Ss_KiraKira/z_eff_ss_kirakira.c
@@ -17,7 +17,7 @@
#include "play_state.h"
#include "skin_matrix.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_sparkles.h"
#define rRotSpeed regs[0]
#define rYaw regs[1]
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 5e2ff3aaf0..60a119ca64 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
@@ -16,7 +16,7 @@
#include "play_state.h"
#include "skin_matrix.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/eff_lightning.h"
#define rPrimColorR regs[0]
#define rPrimColorG regs[1]
diff --git a/src/overlays/effects/ovl_Effect_Ss_Sibuki/z_eff_ss_sibuki.c b/src/overlays/effects/ovl_Effect_Ss_Sibuki/z_eff_ss_sibuki.c
index aecdd6c936..7cf282647e 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Sibuki/z_eff_ss_sibuki.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Sibuki/z_eff_ss_sibuki.c
@@ -17,7 +17,8 @@
#include "play_state.h"
#include "player.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/gameplay_keep_0x55DB0.h"
+#include "assets/objects/gameplay_keep/eff_bubble.h"
#define rPrimColorR regs[0]
#define rPrimColorG regs[1]
diff --git a/src/overlays/effects/ovl_Effect_Ss_Sibuki2/z_eff_ss_sibuki2.c b/src/overlays/effects/ovl_Effect_Ss_Sibuki2/z_eff_ss_sibuki2.c
index 24e484c1ee..dcba6caa14 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Sibuki2/z_eff_ss_sibuki2.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Sibuki2/z_eff_ss_sibuki2.c
@@ -13,7 +13,7 @@
#include "effect.h"
#include "play_state.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/unused_bubbles.h"
#define rPrimColorR regs[0]
#define rPrimColorG regs[1]
diff --git a/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.c b/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.c
index bdd99e1e31..8d5605e763 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.c
@@ -16,7 +16,7 @@
#include "play_state.h"
#include "skin_matrix.h"
-#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/gameplay_keep/unknown_eff_stone.h"
#define rReg0 regs[0]
diff --git a/src/overlays/gamestates/ovl_title/z_title.c b/src/overlays/gamestates/ovl_title/z_title.c
index 907fdb886c..a17bd0f4d8 100644
--- a/src/overlays/gamestates/ovl_title/z_title.c
+++ b/src/overlays/gamestates/ovl_title/z_title.c
@@ -203,7 +203,7 @@ void ConsoleLogo_Destroy(GameState* thisx) {
#if PLATFORM_N64
if (this->unk_1E0) {
if (func_801C7818() != 0) {
- func_800D31A0();
+ Freeze_CurrentThread();
}
func_801C7268();
}
@@ -223,7 +223,7 @@ void ConsoleLogo_Init(GameState* thisx) {
#if PLATFORM_N64
if ((D_80121210 != 0) && (D_80121211 != 0) && (D_80121212 == 0)) {
if (func_801C7658() != 0) {
- func_800D31A0();
+ Freeze_CurrentThread();
}
this->unk_1E0 = true;
} else {
diff --git a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.c b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.c
index c7b7042244..f43b3d627c 100644
--- a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.c
+++ b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.c
@@ -1684,22 +1684,23 @@ void KaleidoScope_DrawUIOverlay(PlayState* play) {
static u16 sToPlayMelodyTextWidths[] =
LANGUAGE_ARRAY(gPauseToPlayMelodyJPNTex_WIDTH, gPauseToPlayMelodyENGTex_WIDTH, gPauseToPlayMelodyGERTex_WIDTH,
gPauseToPlayMelodyFRATex_WIDTH);
- static s16 D_8082ADF0[][4] = {
+ static s16 sLRSelectedPrimColors[][4] = {
{ 180, 210, 255, 220 },
{ 100, 100, 150, 220 },
};
- static s16 D_8082AE00 = 20;
- static s16 D_8082AE04 = 0;
+ static s16 sLRSelectedPrimTimer = 20;
+ static s16 sLRSelectedPrimState = 0;
static s16 D_8082AE08[] = {
10, 16, 16, 17, 12, 13, 18, 17, 17, 19, 13, 21, 20, 21, 14, 15, 15, 15, 11, 14,
};
static s16 D_8082AE30[] = {
21, 20, 19, 18, 11, 14, 10, 15, 16, 13, 12, 17,
};
- static s16 D_808321A0;
- static s16 D_808321A2;
- static s16 D_808321A4;
- static s16 D_808321A6;
+ static s16 sLRSelectedPrimR;
+ static s16 sLRSelectedPrimG;
+ static s16 sLRSelectedPrimB;
+ static s16 sLRSelectedPrimA;
+
PauseContext* pauseCtx = &play->pauseCtx;
s16 stepR;
s16 stepG;
@@ -1711,39 +1712,39 @@ void KaleidoScope_DrawUIOverlay(PlayState* play) {
OPEN_DISPS(play->state.gfxCtx, "../z_kaleido_scope_PAL.c", 1676);
- stepR = ABS(D_808321A0 - D_8082ADF0[D_8082AE04][0]) / D_8082AE00;
- stepG = ABS(D_808321A2 - D_8082ADF0[D_8082AE04][1]) / D_8082AE00;
- stepB = ABS(D_808321A4 - D_8082ADF0[D_8082AE04][2]) / D_8082AE00;
- stepA = ABS(D_808321A6 - D_8082ADF0[D_8082AE04][3]) / D_8082AE00;
- if (D_808321A0 >= D_8082ADF0[D_8082AE04][0]) {
- D_808321A0 -= stepR;
+ stepR = ABS(sLRSelectedPrimR - sLRSelectedPrimColors[sLRSelectedPrimState][0]) / sLRSelectedPrimTimer;
+ stepG = ABS(sLRSelectedPrimG - sLRSelectedPrimColors[sLRSelectedPrimState][1]) / sLRSelectedPrimTimer;
+ stepB = ABS(sLRSelectedPrimB - sLRSelectedPrimColors[sLRSelectedPrimState][2]) / sLRSelectedPrimTimer;
+ stepA = ABS(sLRSelectedPrimA - sLRSelectedPrimColors[sLRSelectedPrimState][3]) / sLRSelectedPrimTimer;
+ if (sLRSelectedPrimR >= sLRSelectedPrimColors[sLRSelectedPrimState][0]) {
+ sLRSelectedPrimR -= stepR;
} else {
- D_808321A0 += stepR;
+ sLRSelectedPrimR += stepR;
}
- if (D_808321A2 >= D_8082ADF0[D_8082AE04][1]) {
- D_808321A2 -= stepG;
+ if (sLRSelectedPrimG >= sLRSelectedPrimColors[sLRSelectedPrimState][1]) {
+ sLRSelectedPrimG -= stepG;
} else {
- D_808321A2 += stepG;
+ sLRSelectedPrimG += stepG;
}
- if (D_808321A4 >= D_8082ADF0[D_8082AE04][2]) {
- D_808321A4 -= stepB;
+ if (sLRSelectedPrimB >= sLRSelectedPrimColors[sLRSelectedPrimState][2]) {
+ sLRSelectedPrimB -= stepB;
} else {
- D_808321A4 += stepB;
+ sLRSelectedPrimB += stepB;
}
- if (D_808321A6 >= D_8082ADF0[D_8082AE04][3]) {
- D_808321A6 -= stepA;
+ if (sLRSelectedPrimA >= sLRSelectedPrimColors[sLRSelectedPrimState][3]) {
+ sLRSelectedPrimA -= stepA;
} else {
- D_808321A6 += stepA;
+ sLRSelectedPrimA += stepA;
}
- D_8082AE00--;
- if (D_8082AE00 == 0) {
- D_808321A0 = D_8082ADF0[D_8082AE04][0];
- D_808321A2 = D_8082ADF0[D_8082AE04][1];
- D_808321A4 = D_8082ADF0[D_8082AE04][2];
- D_808321A6 = D_8082ADF0[D_8082AE04][3];
- D_8082AE00 = ZREG(28);
- D_8082AE04 ^= 1;
+ sLRSelectedPrimTimer--;
+ if (sLRSelectedPrimTimer == 0) {
+ sLRSelectedPrimR = sLRSelectedPrimColors[sLRSelectedPrimState][0];
+ sLRSelectedPrimG = sLRSelectedPrimColors[sLRSelectedPrimState][1];
+ sLRSelectedPrimB = sLRSelectedPrimColors[sLRSelectedPrimState][2];
+ sLRSelectedPrimA = sLRSelectedPrimColors[sLRSelectedPrimState][3];
+ sLRSelectedPrimTimer = R_PAUSE_BUTTON_L_R_SELECTED_PRIM_TIMER;
+ sLRSelectedPrimState ^= 1;
}
y = pauseCtx->infoPanelOffsetY - 76;
@@ -1853,7 +1854,7 @@ void KaleidoScope_DrawUIOverlay(PlayState* play) {
gSPDisplayList(POLY_OPA_DISP++, gInfoPanelBgDL);
if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE)) {
- gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, D_808321A0, D_808321A2, D_808321A4, D_808321A6);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sLRSelectedPrimR, sLRSelectedPrimG, sLRSelectedPrimB, sLRSelectedPrimA);
}
// Draw UI_OVERLAY_QUAD_BUTTON_LEFT
@@ -1862,14 +1863,14 @@ void KaleidoScope_DrawUIOverlay(PlayState* play) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 180, 210, 255, 220);
if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE)) {
- gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, D_808321A0, D_808321A2, D_808321A4, D_808321A6);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sLRSelectedPrimR, sLRSelectedPrimG, sLRSelectedPrimB, sLRSelectedPrimA);
}
// Draw UI_OVERLAY_QUAD_BUTTON_RIGHT
gSPDisplayList(POLY_OPA_DISP++, gRButtonIconDL);
if (pauseCtx->cursorSpecialPos != 0) {
- j = (pauseCtx->cursorSpecialPos - 8) * 4;
+ j = (pauseCtx->cursorSpecialPos - PAUSE_CURSOR_PAGE_LEFT + UI_OVERLAY_QUAD_BUTTON_LEFT) * 4;
pauseCtx->cursorVtx[0].v.ob[0] = pauseCtx->uiOverlayVtx[j].v.ob[0];
pauseCtx->cursorVtx[0].v.ob[1] = pauseCtx->uiOverlayVtx[j].v.ob[1];
KaleidoScope_DrawCursor(play, pauseCtx->pageIndex);
@@ -2233,11 +2234,11 @@ void KaleidoScope_UpdatePageSwitch(PlayState* play, Input* input) {
if (pauseCtx->nextPageMode) {}
if (pauseCtx->pageSwitchTimer < ((4 * PAGE_SWITCH_NSTEPS) / 2)) {
- R_PAUSE_BUTTON_LEFT_X -= WREG(25) / WREG(6);
- R_PAUSE_BUTTON_RIGHT_X -= WREG(26) / WREG(6);
+ R_PAUSE_BUTTON_LEFT_X -= R_PAUSE_BUTTON_LEFT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
+ R_PAUSE_BUTTON_RIGHT_X -= R_PAUSE_BUTTON_RIGHT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
} else {
- R_PAUSE_BUTTON_LEFT_X += WREG(25) / WREG(6);
- R_PAUSE_BUTTON_RIGHT_X += WREG(26) / WREG(6);
+ R_PAUSE_BUTTON_LEFT_X += R_PAUSE_BUTTON_LEFT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
+ R_PAUSE_BUTTON_RIGHT_X += R_PAUSE_BUTTON_RIGHT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
}
pauseCtx->pageSwitchTimer += 4;
@@ -4088,13 +4089,13 @@ void KaleidoScope_Update(PlayState* play) {
}
pauseCtx->itemPagePitch = pauseCtx->equipPagePitch = pauseCtx->mapPagePitch = pauseCtx->questPagePitch -=
- 160.0f / WREG(6);
- pauseCtx->infoPanelOffsetY += 40 / WREG(6);
- interfaceCtx->startAlpha += 255 / WREG(6);
- R_PAUSE_BUTTON_LEFT_X += WREG(25) / WREG(6);
- R_PAUSE_BUTTON_RIGHT_X += WREG(26) / WREG(6);
- XREG(5) += 150 / WREG(6);
- pauseCtx->alpha += (u16)(255 / (WREG(6) + WREG(4)));
+ 160.0f / R_PAUSE_UI_ANIMS_DURATION;
+ pauseCtx->infoPanelOffsetY += 40 / R_PAUSE_UI_ANIMS_DURATION;
+ interfaceCtx->startAlpha += 255 / R_PAUSE_UI_ANIMS_DURATION;
+ R_PAUSE_BUTTON_LEFT_X += R_PAUSE_BUTTON_LEFT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
+ R_PAUSE_BUTTON_RIGHT_X += R_PAUSE_BUTTON_RIGHT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
+ XREG(5) += 150 / R_PAUSE_UI_ANIMS_DURATION;
+ pauseCtx->alpha += (u16)(255 / (R_PAUSE_UI_ANIMS_DURATION + WREG(4)));
if (pauseCtx->itemPagePitch == 0) {
interfaceCtx->startAlpha = 255;
@@ -4249,9 +4250,9 @@ void KaleidoScope_Update(PlayState* play) {
case PAUSE_STATE_SAVE_PROMPT:
switch (pauseCtx->savePromptState) {
case PAUSE_SAVE_PROMPT_STATE_APPEARING:
- pauseCtx->promptPitch -= 314.0f / WREG(6);
- R_PAUSE_BUTTON_LEFT_X -= WREG(25) / WREG(6);
- R_PAUSE_BUTTON_RIGHT_X -= WREG(26) / WREG(6);
+ pauseCtx->promptPitch -= 314.0f / R_PAUSE_UI_ANIMS_DURATION;
+ R_PAUSE_BUTTON_LEFT_X -= R_PAUSE_BUTTON_LEFT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
+ R_PAUSE_BUTTON_RIGHT_X -= R_PAUSE_BUTTON_RIGHT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
if (pauseCtx->promptPitch <= -628.0f) {
pauseCtx->promptPitch = -628.0f;
@@ -4320,9 +4321,9 @@ void KaleidoScope_Update(PlayState* play) {
case PAUSE_SAVE_PROMPT_STATE_RETURN_TO_MENU:
case PAUSE_SAVE_PROMPT_STATE_RETURN_TO_MENU_2:
- pauseCtx->promptPitch += 314.0f / WREG(6);
- R_PAUSE_BUTTON_LEFT_X += WREG(25) / WREG(6);
- R_PAUSE_BUTTON_RIGHT_X += WREG(26) / WREG(6);
+ pauseCtx->promptPitch += 314.0f / R_PAUSE_UI_ANIMS_DURATION;
+ R_PAUSE_BUTTON_LEFT_X += R_PAUSE_BUTTON_LEFT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
+ R_PAUSE_BUTTON_RIGHT_X += R_PAUSE_BUTTON_RIGHT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
if (pauseCtx->promptPitch >= -314.0f) {
pauseCtx->state = PAUSE_STATE_MAIN;
@@ -4337,13 +4338,13 @@ void KaleidoScope_Update(PlayState* play) {
case PAUSE_SAVE_PROMPT_STATE_CLOSING_AFTER_SAVED:
if (pauseCtx->promptPitch != (YREG(8) + 160.0f)) {
pauseCtx->itemPagePitch = pauseCtx->equipPagePitch = pauseCtx->mapPagePitch =
- pauseCtx->questPagePitch += 160.0f / WREG(6);
- pauseCtx->promptPitch += 160.0f / WREG(6);
- pauseCtx->infoPanelOffsetY -= 40 / WREG(6);
- R_PAUSE_BUTTON_LEFT_X -= WREG(25) / WREG(6);
- R_PAUSE_BUTTON_RIGHT_X -= WREG(26) / WREG(6);
- XREG(5) -= 150 / WREG(6);
- pauseCtx->alpha -= (u16)(255 / WREG(6));
+ pauseCtx->questPagePitch += 160.0f / R_PAUSE_UI_ANIMS_DURATION;
+ pauseCtx->promptPitch += 160.0f / R_PAUSE_UI_ANIMS_DURATION;
+ pauseCtx->infoPanelOffsetY -= 40 / R_PAUSE_UI_ANIMS_DURATION;
+ R_PAUSE_BUTTON_LEFT_X -= R_PAUSE_BUTTON_LEFT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
+ R_PAUSE_BUTTON_RIGHT_X -= R_PAUSE_BUTTON_RIGHT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
+ XREG(5) -= 150 / R_PAUSE_UI_ANIMS_DURATION;
+ pauseCtx->alpha -= (u16)(255 / R_PAUSE_UI_ANIMS_DURATION);
if (pauseCtx->promptPitch == (YREG(8) + 160.0f)) {
pauseCtx->alpha = 0;
}
@@ -4507,14 +4508,14 @@ void KaleidoScope_Update(PlayState* play) {
case PAUSE_STATE_GAME_OVER_SHOW_WINDOW:
pauseCtx->itemPagePitch = pauseCtx->equipPagePitch = pauseCtx->mapPagePitch = pauseCtx->questPagePitch =
- pauseCtx->promptPitch -= 160.0f / WREG(6);
- pauseCtx->infoPanelOffsetY += 40 / WREG(6);
- interfaceCtx->startAlpha += 255 / WREG(6);
+ pauseCtx->promptPitch -= 160.0f / R_PAUSE_UI_ANIMS_DURATION;
+ pauseCtx->infoPanelOffsetY += 40 / R_PAUSE_UI_ANIMS_DURATION;
+ interfaceCtx->startAlpha += 255 / R_PAUSE_UI_ANIMS_DURATION;
VREG(88) -= 3;
- R_PAUSE_BUTTON_LEFT_X += WREG(25) / WREG(6);
- R_PAUSE_BUTTON_RIGHT_X += WREG(26) / WREG(6);
- XREG(5) += 150 / WREG(6);
- pauseCtx->alpha += (u16)(255 / (WREG(6) + WREG(4)));
+ R_PAUSE_BUTTON_LEFT_X += R_PAUSE_BUTTON_LEFT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
+ R_PAUSE_BUTTON_RIGHT_X += R_PAUSE_BUTTON_RIGHT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
+ XREG(5) += 150 / R_PAUSE_UI_ANIMS_DURATION;
+ pauseCtx->alpha += (u16)(255 / (R_PAUSE_UI_ANIMS_DURATION + WREG(4)));
if (pauseCtx->promptPitch < -628.0f) {
pauseCtx->promptPitch = -628.0f;
interfaceCtx->startAlpha = 255;
@@ -4676,13 +4677,13 @@ void KaleidoScope_Update(PlayState* play) {
case PAUSE_STATE_CLOSING:
if (pauseCtx->itemPagePitch != 160.0f) {
pauseCtx->itemPagePitch = pauseCtx->equipPagePitch = pauseCtx->mapPagePitch =
- pauseCtx->questPagePitch += 160.0f / WREG(6);
- pauseCtx->infoPanelOffsetY -= 40 / WREG(6);
- interfaceCtx->startAlpha -= 255 / WREG(6);
- R_PAUSE_BUTTON_LEFT_X -= WREG(25) / WREG(6);
- R_PAUSE_BUTTON_RIGHT_X -= WREG(26) / WREG(6);
- XREG(5) -= 150 / WREG(6);
- pauseCtx->alpha -= (u16)(255 / WREG(6));
+ pauseCtx->questPagePitch += 160.0f / R_PAUSE_UI_ANIMS_DURATION;
+ pauseCtx->infoPanelOffsetY -= 40 / R_PAUSE_UI_ANIMS_DURATION;
+ interfaceCtx->startAlpha -= 255 / R_PAUSE_UI_ANIMS_DURATION;
+ R_PAUSE_BUTTON_LEFT_X -= R_PAUSE_BUTTON_LEFT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
+ R_PAUSE_BUTTON_RIGHT_X -= R_PAUSE_BUTTON_RIGHT_MOVE_OFFSET_X / R_PAUSE_UI_ANIMS_DURATION;
+ XREG(5) -= 150 / R_PAUSE_UI_ANIMS_DURATION;
+ pauseCtx->alpha -= (u16)(255 / R_PAUSE_UI_ANIMS_DURATION);
if (pauseCtx->itemPagePitch == 160.0f) {
pauseCtx->alpha = 0;
}
diff --git a/tools/assets/extract/extase/__init__.py b/tools/assets/extract/extase/__init__.py
index 029b20d214..066fdf7b0b 100644
--- a/tools/assets/extract/extase/__init__.py
+++ b/tools/assets/extract/extase/__init__.py
@@ -641,6 +641,11 @@ class File:
self.source_h_path = source_path / f"{file_name}.h"
def write_source(self):
+ def strip_extracted_prefix(path : Path) -> Path:
+ parts = path.parts
+ if parts[0] == "extracted":
+ return Path(*parts[2:]) # Skip first two parts
+ return path # Return original path if condition not met
assert hasattr(
self, "source_c_path"
), "set_source_path must be called before write_source"
@@ -660,7 +665,7 @@ class File:
referenced_file,
)
assert hasattr(referenced_file, "source_h_path")
- file_include_paths_complete.append(referenced_file.source_h_path)
+ file_include_paths_complete.append(strip_extracted_prefix(referenced_file.source_h_path))
# Same as file_include_paths_complete,
# but paths that can be are made relative to the source C.
diff --git a/tools/assets/extract/extase_oot64/scene_commands_resource.py b/tools/assets/extract/extase_oot64/scene_commands_resource.py
index 57f2cbf440..aa6da2bc45 100644
--- a/tools/assets/extract/extase_oot64/scene_commands_resource.py
+++ b/tools/assets/extract/extase_oot64/scene_commands_resource.py
@@ -44,13 +44,13 @@ VERBOSE_NOT_FULLY_PARSED_SCENECMD = False
class SceneCmdId(enum.Enum):
# keep the SCENE_CMD_ID_ prefix for grepability
- SCENE_CMD_ID_SPAWN_LIST = 0
+ SCENE_CMD_ID_PLAYER_ENTRY_LIST = 0
SCENE_CMD_ID_ACTOR_LIST = enum.auto()
SCENE_CMD_ID_UNUSED_2 = enum.auto()
SCENE_CMD_ID_COLLISION_HEADER = enum.auto()
SCENE_CMD_ID_ROOM_LIST = enum.auto()
SCENE_CMD_ID_WIND_SETTINGS = enum.auto()
- SCENE_CMD_ID_ENTRANCE_LIST = enum.auto()
+ SCENE_CMD_ID_SPAWN_LIST = enum.auto()
SCENE_CMD_ID_SPECIAL_FILES = enum.auto()
SCENE_CMD_ID_ROOM_BEHAVIOR = enum.auto()
SCENE_CMD_ID_UNDEFINED_9 = enum.auto()
@@ -73,13 +73,13 @@ class SceneCmdId(enum.Enum):
scene_cmd_macro_name_by_cmd_id = {
- SceneCmdId.SCENE_CMD_ID_SPAWN_LIST: "SCENE_CMD_SPAWN_LIST",
+ SceneCmdId.SCENE_CMD_ID_PLAYER_ENTRY_LIST: "SCENE_CMD_PLAYER_ENTRY_LIST",
SceneCmdId.SCENE_CMD_ID_ACTOR_LIST: "SCENE_CMD_ACTOR_LIST",
SceneCmdId.SCENE_CMD_ID_UNUSED_2: "SCENE_CMD_UNUSED_02",
SceneCmdId.SCENE_CMD_ID_COLLISION_HEADER: "SCENE_CMD_COL_HEADER",
SceneCmdId.SCENE_CMD_ID_ROOM_LIST: "SCENE_CMD_ROOM_LIST",
SceneCmdId.SCENE_CMD_ID_WIND_SETTINGS: "SCENE_CMD_WIND_SETTINGS",
- SceneCmdId.SCENE_CMD_ID_ENTRANCE_LIST: "SCENE_CMD_ENTRANCE_LIST",
+ SceneCmdId.SCENE_CMD_ID_SPAWN_LIST: "SCENE_CMD_SPAWN_LIST",
SceneCmdId.SCENE_CMD_ID_SPECIAL_FILES: "SCENE_CMD_SPECIAL_FILES",
SceneCmdId.SCENE_CMD_ID_ROOM_BEHAVIOR: "SCENE_CMD_ROOM_BEHAVIOR",
SceneCmdId.SCENE_CMD_ID_UNDEFINED_9: "SCENE_CMD_UNK_09",
@@ -220,7 +220,7 @@ class SceneCommandsResource(Resource, can_size_be_unknown=True):
)
)
- if cmd_id == SceneCmdId.SCENE_CMD_ID_ENTRANCE_LIST:
+ if cmd_id == SceneCmdId.SCENE_CMD_ID_SPAWN_LIST:
assert data1 == 0
resource = memory_context.report_resource_at_segmented(
self,
@@ -250,7 +250,7 @@ class SceneCommandsResource(Resource, can_size_be_unknown=True):
)
)
- if cmd_id == SceneCmdId.SCENE_CMD_ID_SPAWN_LIST:
+ if cmd_id == SceneCmdId.SCENE_CMD_ID_PLAYER_ENTRY_LIST:
self.player_entry_list_length = data1
resource = memory_context.report_resource_at_segmented(
self,
@@ -439,7 +439,7 @@ class SceneCommandsResource(Resource, can_size_be_unknown=True):
f.write(" " * 4)
f.write(scene_cmd_macro_name_by_cmd_id[cmd_id])
f.write("(")
- if cmd_id == SceneCmdId.SCENE_CMD_ID_SPAWN_LIST:
+ if cmd_id == SceneCmdId.SCENE_CMD_ID_PLAYER_ENTRY_LIST:
address = data2_I
f.write(
memory_context.get_c_expression_length_at_segmented(address)
@@ -474,7 +474,7 @@ class SceneCommandsResource(Resource, can_size_be_unknown=True):
zDir = data2_B2
strength = data2_B3
f.write(f"{xDir}, {yDir}, {zDir}, {strength}")
- if cmd_id == SceneCmdId.SCENE_CMD_ID_ENTRANCE_LIST:
+ if cmd_id == SceneCmdId.SCENE_CMD_ID_SPAWN_LIST:
assert data1 == 0
address = data2_I
f.write(memory_context.get_c_reference_at_segmented(address))
diff --git a/tools/assets/extract/extase_oot64/scene_rooms_resources.py b/tools/assets/extract/extase_oot64/scene_rooms_resources.py
index d3b8903f2a..3b632604cd 100644
--- a/tools/assets/extract/extase_oot64/scene_rooms_resources.py
+++ b/tools/assets/extract/extase_oot64/scene_rooms_resources.py
@@ -293,8 +293,10 @@ class EnvLightSettingsListResource(CDataArrayNamedLengthResource):
def write_blendRateAndFogNear(v):
blendRate = (v >> 10) * 4
+ if blendRate < 0:
+ blendRate += 0x100
fogNear = v & 0x3FF
- return f"(({blendRate} / 4) << 10) | {fogNear}"
+ return f"BLEND_RATE_AND_FOG_NEAR({blendRate}, {fogNear})"
elem_cdata_ext = CDataExt_Struct(
(
diff --git a/tools/assets/extract/oot64_data/audio_ids.py b/tools/assets/extract/oot64_data/audio_ids.py
index 8bcf2b60b8..2ef0431192 100644
--- a/tools/assets/extract/oot64_data/audio_ids.py
+++ b/tools/assets/extract/oot64_data/audio_ids.py
@@ -95,7 +95,7 @@ SEQ_IDS = {
0x5B: "NA_BGM_SHADOW_TEMPLE",
0x5C: "NA_BGM_WATER_TEMPLE",
0x5D: "NA_BGM_BRIDGE_TO_GANONS",
- 0x5E: "NA_BGM_OCARINA_OF_TIME",
+ 0x5E: "NA_BGM_SEAL_OF_SAGES",
0x5F: "NA_BGM_GERUDO_VALLEY",
0x60: "NA_BGM_POTION_SHOP",
0x61: "NA_BGM_KOTAKE_KOUME",
@@ -103,7 +103,7 @@ SEQ_IDS = {
0x63: "NA_BGM_UNDERGROUND",
0x64: "NA_BGM_GANONDORF_BOSS",
0x65: "NA_BGM_GANON_BOSS",
- 0x66: "NA_BGM_END_DEMO",
+ 0x66: "NA_BGM_OCARINA_OF_TIME",
0x67: "NA_BGM_STAFF_1",
0x68: "NA_BGM_STAFF_2",
0x69: "NA_BGM_STAFF_3",
diff --git a/tools/assets/extract/write_source.txt b/tools/assets/extract/write_source.txt
index e4171fb6a1..9ba73ee360 100644
--- a/tools/assets/extract/write_source.txt
+++ b/tools/assets/extract/write_source.txt
@@ -1,11 +1,7 @@
-assets/code/fbdemo_circle/code.c
-assets/code/fbdemo_triforce/code.c
-assets/code/fbdemo_wipe1/code.c
assets/misc/link_animetion/link_animetion.c
assets/misc/z_select_static/z_select_static.c
assets/objects/gameplay_dangeon_keep/gameplay_dangeon_keep.c
assets/objects/gameplay_field_keep/gameplay_field_keep.c
-assets/objects/gameplay_keep/gameplay_keep.c
assets/objects/object_ahg/object_ahg.c
assets/objects/object_am/object_am.c
assets/objects/object_ane/object_ane.c
diff --git a/tools/audio/sampleconv/src/container/container.h b/tools/audio/sampleconv/src/container/container.h
index 680b64012d..dae79344e6 100644
--- a/tools/audio/sampleconv/src/container/container.h
+++ b/tools/audio/sampleconv/src/container/container.h
@@ -62,8 +62,8 @@ typedef struct container_data {
uint32_t num_samples; // also apparently called num_frames? but that's wrong
// Instrument details
- int8_t base_note;
- int8_t fine_tune;
+ int8_t base_note; // [0, 127]
+ int8_t fine_tune; // [-50, 50]
int8_t gain;
int8_t key_low;
int8_t key_hi;
diff --git a/tools/audio/sampleconv/src/container/wav.c b/tools/audio/sampleconv/src/container/wav.c
index ad345f76ed..60ed73e6a7 100644
--- a/tools/audio/sampleconv/src/container/wav.c
+++ b/tools/audio/sampleconv/src/container/wav.c
@@ -221,6 +221,25 @@ wav_read(container_data *out, const char *path, UNUSED bool matching)
smpl.num_sample_loops = le32toh(smpl.num_sample_loops);
smpl.sampler_data = le32toh(smpl.sampler_data);
+ if (!has_inst) {
+ // No INST chunk (yet, if there is one later it will take priority)
+ // Read the base note and fine tuning from the SMPL chunk.
+ // Note the INST and SMPL chunk use different representations for the fine tuning
+ // INST uses cents in [-50, 50]
+ // SMPL uses a fraction [0, 255] with 128 = 50 cents
+ // We use the INST format since AIFF uses that one
+ uint32_t base_note = smpl.unity_note;
+ // First scale down 128 -> 50, round to nearest
+ int32_t fine_tune = (smpl.fine_tune * 50 + 0x40) / 128;
+ // If the result is > 50, make it negative and adjust the base note
+ if (fine_tune > 50) {
+ base_note = (base_note - 1) % 128;
+ fine_tune = fine_tune - 100;
+ }
+ out->base_note = base_note;
+ out->fine_tune = fine_tune;
+ }
+
out->num_loops = smpl.num_sample_loops;
out->loops = NULL;
if (out->num_loops != 0) {
@@ -342,13 +361,14 @@ wav_read(container_data *out, const char *path, UNUSED bool matching)
}
long read_size = ftell(in) - start - 8;
+ uint32_t aligned_chunk_size = (chunk_size + 1) & ~1;
- if (read_size > chunk_size)
+ if (read_size > aligned_chunk_size)
error("overran chunk");
else if (!skipped && read_size < chunk_size)
warning("did not read entire %*s chunk: %lu vs %u", 4, cc4, read_size, chunk_size);
- fseek(in, start + 8 + chunk_size, SEEK_SET);
+ fseek(in, start + 8 + aligned_chunk_size, SEEK_SET);
}
if (!has_fmt)
@@ -361,8 +381,10 @@ wav_read(container_data *out, const char *path, UNUSED bool matching)
}
if (!has_inst) {
- out->base_note = 60; // C4
- out->fine_tune = 0;
+ if (!has_smpl) {
+ out->base_note = 60; // C4
+ out->fine_tune = 0;
+ }
out->key_low = 0;
out->key_hi = 127;
out->vel_low = 0;
@@ -452,13 +474,30 @@ wav_write(container_data *in, const char *path, bool matching)
CHUNK_WRITE(out, &inst);
CHUNK_END(out, chunk_start, htole32);
+ // INST and SMPL use a different representation for the fine tuning.
+ // INST represents it in cents in the range [-50, 50]
+ // SMPL represents it as a fraction in the range [0, 255] where 128 is 50 cents
+ // Our internal fine tuning follows the INST format, which AIFF also happens to agree with.
+ // When writing SMPL we need to convert to the fraction representation, which for
+ // positive fine tuning is simply a rescaling, while for negative fine tuning we need to
+ // adjust the base note to make the fine tuning positive first.
+ uint32_t smpl_unity_note = in->base_note;
+ uint32_t smpl_fine_tune = in->fine_tune;
+ if (in->fine_tune < 0) {
+ // [-50, -1] needs to increment unity_note and use the additive inverse mod 100
+ smpl_unity_note = (smpl_unity_note + 1) % 128;
+ smpl_fine_tune = 100 + smpl_fine_tune;
+ }
+ // Rescale 0..50 to 0..128, round to nearest
+ smpl_fine_tune = (smpl_fine_tune * 128 + 25) / 50;
+
wav_smpl smpl = {
.manufacturer = 0,
.product = 0,
- .sample_period = 0,
- .unity_note = 0,
+ .sample_period = htole32(1000000000 / in->sample_rate),
+ .unity_note = htole32(smpl_unity_note),
._pad = {0, 0, 0},
- .fine_tune = 0,
+ .fine_tune = smpl_fine_tune,
.format = 0,
.offset = 0,
.num_sample_loops = htole32(in->num_loops),
diff --git a/tools/audio/soundfont.h b/tools/audio/soundfont.h
index eeed712de2..28bf8fac5f 100644
--- a/tools/audio/soundfont.h
+++ b/tools/audio/soundfont.h
@@ -29,6 +29,7 @@ typedef struct sample_data {
const char *name;
double sample_rate;
int8_t base_note;
+ int8_t fine_tune;
bool is_dd;
bool cached;
aifc_data aifc;
@@ -66,6 +67,9 @@ typedef struct instr_data {
int8_t base_note_mid;
int8_t base_note_lo;
int8_t base_note_hi;
+ int8_t fine_tune_mid;
+ int8_t fine_tune_lo;
+ int8_t fine_tune_hi;
envelope_data *envelope;
uint16_t release;
@@ -97,6 +101,7 @@ typedef struct drum_data {
sample_data *sample;
double sample_rate;
int8_t base_note;
+ int8_t fine_tune;
} drum_data;
typedef struct sfx_data {
@@ -107,6 +112,7 @@ typedef struct sfx_data {
sample_data *sample;
double sample_rate;
int8_t base_note;
+ int8_t fine_tune;
float tuning;
} sfx_data;
@@ -155,8 +161,9 @@ typedef struct {
size_t match_padding_num;
} soundfont;
-#define NOTE_UNSET (INT8_MIN)
-#define RELEASE_UNSET (UINT16_MAX)
+#define NOTE_UNSET (INT8_MIN)
+#define FINE_TUNE_UNSET (INT8_MIN)
+#define RELEASE_UNSET (UINT16_MAX)
envelope_data *
sf_get_envelope(soundfont *sf, const char *name);
diff --git a/tools/audio/soundfont_compiler.c b/tools/audio/soundfont_compiler.c
index 4f9a5779c4..6a47d643b8 100644
--- a/tools/audio/soundfont_compiler.c
+++ b/tools/audio/soundfont_compiler.c
@@ -64,7 +64,7 @@ midinote_to_z64note(int note)
* (with appropriate shifting such that the index for C4 results in 1.0)
*/
static float
-calc_tuning(float sample_rate, int basenote)
+calc_tuning(float sample_rate, int basenote, int8_t finetune)
{
static const float playback_sample_rate = 32000.0f; // Target samplerate in-game is 32KHz
static const float pitch_frequencies[] = {
@@ -199,7 +199,24 @@ calc_tuning(float sample_rate, int basenote)
/* 0x7F */ 0.099213f, // PITCH_AF0
};
- return (sample_rate / playback_sample_rate) * pitch_frequencies[basenote];
+ float tuning = (sample_rate / playback_sample_rate) * pitch_frequencies[basenote];
+ if (finetune == 0)
+ return tuning;
+
+ // Compute 2^(x / (12 * 100)) for 8-bit signed integer x
+ static const double fine_coeffs[5] = {
+ // Coefficients generated by sollya:
+ // fpminimax(1.00057778950655486^x, 4, [|SG...|], [-128,128], absolute, 2^(-24));
+ // <= 1ulp
+ 1.0,
+ 5.776226171292365e-4,
+ 1.668239519858616e-7,
+ 3.213055863038328e-11,
+ 4.639919853633443e-15,
+ };
+ float x = finetune;
+ tuning *= fine_coeffs[0] + x * (fine_coeffs[1] + x * (fine_coeffs[2] + x * (fine_coeffs[3] + x * fine_coeffs[4])));
+ return tuning;
}
void
@@ -317,16 +334,19 @@ read_instrs_info(soundfont *sf, xmlNodePtr instrs)
{ "Sample", true, xml_parse_c_identifier, offsetof(instr_data, sample_name_mid) },
{ "BaseNote", true, xml_parse_note_number, offsetof(instr_data, base_note_mid) },
+ { "FineTune", true, xml_parse_fine_tune, offsetof(instr_data, fine_tune_mid) },
{ "SampleRate", true, xml_parse_double, offsetof(instr_data, sample_rate_mid) },
{ "RangeLo", true, xml_parse_note_number, offsetof(instr_data, sample_low_end) },
{ "SampleLo", true, xml_parse_c_identifier, offsetof(instr_data, sample_name_low) },
{ "BaseNoteLo", true, xml_parse_note_number, offsetof(instr_data, base_note_lo) },
+ { "FineTuneLo", true, xml_parse_fine_tune, offsetof(instr_data, fine_tune_lo) },
{ "SampleRateLo", true, xml_parse_double, offsetof(instr_data, sample_rate_lo) },
{ "RangeHi", true, xml_parse_note_number, offsetof(instr_data, sample_high_start)},
{ "SampleHi", true, xml_parse_c_identifier, offsetof(instr_data, sample_name_high) },
{ "BaseNoteHi", true, xml_parse_note_number, offsetof(instr_data, base_note_hi) },
+ { "FineTuneHi", true, xml_parse_fine_tune, offsetof(instr_data, fine_tune_hi) },
{ "SampleRateHi", true, xml_parse_double, offsetof(instr_data, sample_rate_hi) },
};
@@ -356,6 +376,9 @@ read_instrs_info(soundfont *sf, xmlNodePtr instrs)
instr->base_note_mid = NOTE_UNSET;
instr->base_note_lo = NOTE_UNSET;
instr->base_note_hi = NOTE_UNSET;
+ instr->fine_tune_mid = FINE_TUNE_UNSET;
+ instr->fine_tune_lo = FINE_TUNE_UNSET;
+ instr->fine_tune_hi = FINE_TUNE_UNSET;
instr->sample_rate_mid = -1.0;
instr->sample_rate_lo = -1.0;
instr->sample_rate_hi = -1.0;
@@ -478,10 +501,13 @@ read_instrs_info(soundfont *sf, xmlNodePtr instrs)
if (instr->base_note_lo == NOTE_UNSET)
instr->base_note_lo = instr->sample_low->base_note;
+ if (instr->fine_tune_lo == FINE_TUNE_UNSET)
+ instr->fine_tune_lo = instr->sample_low->fine_tune;
+
if (instr->sample_rate_lo < 0.0)
instr->sample_rate_lo = instr->sample_low->sample_rate;
- instr->sample_low_tuning = calc_tuning(instr->sample_rate_lo, instr->base_note_lo);
+ instr->sample_low_tuning = calc_tuning(instr->sample_rate_lo, instr->base_note_lo, instr->fine_tune_lo);
}
instr->sample_mid = sample_data_forname(sf, instr->sample_name_mid);
@@ -492,15 +518,18 @@ read_instrs_info(soundfont *sf, xmlNodePtr instrs)
if (instr->base_note_mid == NOTE_UNSET)
instr->base_note_mid = instr->sample_mid->base_note;
+ if (instr->fine_tune_mid == FINE_TUNE_UNSET)
+ instr->fine_tune_mid = instr->sample_mid->fine_tune;
+
if (instr->sample_rate_mid < 0.0)
instr->sample_rate_mid = instr->sample_mid->sample_rate;
- instr->sample_mid_tuning = calc_tuning(instr->sample_rate_mid, instr->base_note_mid);
+ instr->sample_mid_tuning = calc_tuning(instr->sample_rate_mid, instr->base_note_mid, instr->fine_tune_mid);
// Some tuning values don't decompose properly into a samplerate and basenote, they must be accounted for here
// for matching. So far this has only been seen for an Instrument mid sample.
// NOTE: Keep in sync with the BAD_FLOATS list in extraction/tuning.py
- if (f2i(instr->sample_mid_tuning) == 0x3E7319DF /* 0.237403377 */) // diff = 2^-24
+ if (sf->matching && f2i(instr->sample_mid_tuning) == 0x3E7319DF /* 0.237403377 */) // diff = 2^-24
instr->sample_mid_tuning = i2f(0x3E7319E3 /* 0.237403437 */);
if (instr->sample_name_high != NULL) {
@@ -512,10 +541,13 @@ read_instrs_info(soundfont *sf, xmlNodePtr instrs)
if (instr->base_note_hi == NOTE_UNSET)
instr->base_note_hi = instr->sample_high->base_note;
+ if (instr->fine_tune_hi == FINE_TUNE_UNSET)
+ instr->fine_tune_hi = instr->sample_high->fine_tune;
+
if (instr->sample_rate_hi < 0.0)
instr->sample_rate_hi = instr->sample_high->sample_rate;
- instr->sample_high_tuning = calc_tuning(instr->sample_rate_hi, instr->base_note_hi);
+ instr->sample_high_tuning = calc_tuning(instr->sample_rate_hi, instr->base_note_hi, instr->fine_tune_hi);
}
// link
@@ -544,6 +576,7 @@ read_drums_info(soundfont *sf, xmlNodePtr drums)
{ "Sample", false, xml_parse_c_identifier, offsetof(drum_data, sample_name) },
{ "SampleRate", true, xml_parse_double, offsetof(drum_data, sample_rate) },
{ "BaseNote", true, xml_parse_note_number, offsetof(drum_data, base_note) },
+ { "FineTune", true, xml_parse_fine_tune, offsetof(drum_data, fine_tune) },
};
LL_FOREACH(xmlNodePtr, drum_node, drums->children) {
@@ -560,6 +593,7 @@ read_drums_info(soundfont *sf, xmlNodePtr drums)
drum->note_end = NOTE_UNSET;
drum->sample_rate = -1;
drum->base_note = NOTE_UNSET;
+ drum->fine_tune = FINE_TUNE_UNSET;
drum->release = RELEASE_UNSET;
if (drum_node->properties == NULL) {
@@ -605,13 +639,16 @@ read_drums_info(soundfont *sf, xmlNodePtr drums)
// set basenote if not overridden
if (drum->base_note == NOTE_UNSET) {
- if (drum->sample->aifc.has_inst) {
+ if (drum->sample->aifc.has_inst)
drum->base_note = drum->sample->base_note;
- } else {
+ else
error("No basenote for drum (line %d)", drum_node->line);
- }
}
+ // set finetune if not overridden
+ if (drum->fine_tune == FINE_TUNE_UNSET)
+ drum->fine_tune = drum->sample->fine_tune;
+
// link
link_drum:
if (sf->drums == NULL) {
@@ -633,6 +670,7 @@ read_sfx_info(soundfont *sf, xmlNodePtr effects)
{ "Sample", false, xml_parse_c_identifier, offsetof(sfx_data, sample_name)},
{ "SampleRate", true, xml_parse_double, offsetof(sfx_data, sample_rate)},
{ "BaseNote", true, xml_parse_note_number, offsetof(sfx_data, base_note) },
+ { "FineTune", true, xml_parse_fine_tune, offsetof(sfx_data, fine_tune) },
};
LL_FOREACH(xmlNodePtr, sfx_node, effects->children) {
@@ -652,6 +690,7 @@ read_sfx_info(soundfont *sf, xmlNodePtr effects)
} else {
sfx->sample_rate = -1;
sfx->base_note = NOTE_UNSET;
+ sfx->fine_tune = FINE_TUNE_UNSET;
xml_parse_node_by_spec(sfx, sfx_node, sfx_spec, ARRAY_COUNT(sfx_spec));
sfx->sample = sample_data_forname(sf, sfx->sample_name);
@@ -662,10 +701,13 @@ read_sfx_info(soundfont *sf, xmlNodePtr effects)
if (sfx->base_note == NOTE_UNSET)
sfx->base_note = sfx->sample->base_note;
+ if (sfx->fine_tune == FINE_TUNE_UNSET)
+ sfx->fine_tune = sfx->sample->fine_tune;
+
if (sfx->sample_rate == -1)
sfx->sample_rate = sfx->sample->sample_rate;
- sfx->tuning = calc_tuning(sfx->sample_rate, sfx->base_note);
+ sfx->tuning = calc_tuning(sfx->sample_rate, sfx->base_note, sfx->fine_tune);
}
// link
@@ -696,6 +738,7 @@ read_samples_info(soundfont *sf, xmlNodePtr samples)
{"Name", false, xml_parse_c_identifier, offsetof(sample_data, name) },
{ "SampleRate", true, xml_parse_double, offsetof(sample_data, sample_rate)},
{ "BaseNote", true, xml_parse_note_number, offsetof(sample_data, base_note) },
+ { "FineTune", true, xml_parse_fine_tune, offsetof(sample_data, fine_tune) },
{ "IsDD", true, xml_parse_bool, offsetof(sample_data, is_dd) },
{ "Cached", true, xml_parse_bool, offsetof(sample_data, cached) },
};
@@ -717,6 +760,7 @@ read_samples_info(soundfont *sf, xmlNodePtr samples)
sample->sample_rate = -1.0;
sample->base_note = NOTE_UNSET;
+ sample->fine_tune = FINE_TUNE_UNSET;
sample->is_dd = defaults.is_dd;
sample->cached = defaults.cached;
@@ -740,6 +784,9 @@ read_samples_info(soundfont *sf, xmlNodePtr samples)
error("No basenote for sample %s (line %d)", sample->name, sample_node->line);
}
+ if (sample->fine_tune == FINE_TUNE_UNSET)
+ sample->fine_tune = sample->aifc.detune;
+
if (!sample->aifc.has_book)
error("No vadpcm codebook for sample %s (line %d)", sample->name, sample_node->line);
@@ -1403,7 +1450,7 @@ emit_c_drums(FILE *out, soundfont *sf)
if (note > 127)
note -= 128;
- float tuning = calc_tuning(drum->sample_rate, note);
+ float tuning = calc_tuning(drum->sample_rate, note, drum->fine_tune);
fprintf(out, " SF%d_%s_ENTRY(" F32_FMT "f),\n", sf->info.index, drum->name, tuning);
}
diff --git a/tools/audio/xml.c b/tools/audio/xml.c
index 41f07a6454..54c0e661f4 100644
--- a/tools/audio/xml.c
+++ b/tools/audio/xml.c
@@ -235,6 +235,20 @@ err:
error("Invalid note %s", value);
}
+/**
+ * Parse fine tuning in the range [-100, 100]
+ */
+void
+xml_parse_fine_tune(const char *value, void *out)
+{
+ int v = xml_str_to_int(value);
+ if (v < -100 || v > 100)
+ error("Value %d out of range for fine tuning", v);
+ int8_t vs8 = v;
+
+ copy_out(out, vs8);
+}
+
void
xml_parse_string(const char *value, void *out)
{
diff --git a/tools/audio/xml.h b/tools/audio/xml.h
index dabfbcfefe..8e19000233 100644
--- a/tools/audio/xml.h
+++ b/tools/audio/xml.h
@@ -39,6 +39,8 @@ xml_parse_s8(const char *value, void *out);
void
xml_parse_note_number(const char *value, void *out);
void
+xml_parse_fine_tune(const char *value, void *out);
+void
xml_parse_string(const char *value, void *out);
void
xml_parse_c_identifier(const char *value, void *out);
diff --git a/tools/csdis.py b/tools/csdis.py
index d4baec1398..6e796fcc7c 100755
--- a/tools/csdis.py
+++ b/tools/csdis.py
@@ -285,7 +285,7 @@ sequence_ids = {
0x5B: "NA_BGM_SHADOW_TEMPLE",
0x5C: "NA_BGM_WATER_TEMPLE",
0x5D: "NA_BGM_BRIDGE_TO_GANONS",
- 0x5E: "NA_BGM_OCARINA_OF_TIME",
+ 0x5E: "NA_BGM_SEAL_OF_SAGES",
0x5F: "NA_BGM_GERUDO_VALLEY",
0x60: "NA_BGM_POTION_SHOP",
0x61: "NA_BGM_KOTAKE_KOUME",
@@ -293,7 +293,7 @@ sequence_ids = {
0x63: "NA_BGM_UNDERGROUND",
0x64: "NA_BGM_GANONDORF_BOSS",
0x65: "NA_BGM_GANON_BOSS",
- 0x66: "NA_BGM_END_DEMO",
+ 0x66: "NA_BGM_OCARINA_OF_TIME",
0x67: "NA_BGM_STAFF_1",
0x68: "NA_BGM_STAFF_2",
0x69: "NA_BGM_STAFF_3",
diff --git a/tools/extract_audio.py b/tools/extract_audio.py
index c67d7b1650..0d9c81b9b1 100644
--- a/tools/extract_audio.py
+++ b/tools/extract_audio.py
@@ -131,7 +131,7 @@ if __name__ == '__main__':
"NA_BGM_SHADOW_TEMPLE",
"NA_BGM_WATER_TEMPLE",
"NA_BGM_BRIDGE_TO_GANONS",
- "NA_BGM_OCARINA_OF_TIME",
+ "NA_BGM_SEAL_OF_SAGES",
"NA_BGM_GERUDO_VALLEY",
"NA_BGM_POTION_SHOP",
"NA_BGM_KOTAKE_KOUME",
@@ -139,7 +139,7 @@ if __name__ == '__main__':
"NA_BGM_UNDERGROUND",
"NA_BGM_GANONDORF_BOSS",
"NA_BGM_GANON_BOSS",
- "NA_BGM_END_DEMO",
+ "NA_BGM_OCARINA_OF_TIME",
"NA_BGM_STAFF_1",
"NA_BGM_STAFF_2",
"NA_BGM_STAFF_3",