diff --git a/assets/xml/objects/object_haka_objects.xml b/assets/xml/objects/object_haka_objects.xml
index ac301fe500..7e0195e148 100644
--- a/assets/xml/objects/object_haka_objects.xml
+++ b/assets/xml/objects/object_haka_objects.xml
@@ -5,52 +5,52 @@
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
@@ -148,7 +148,7 @@
-
+
diff --git a/assets/xml/objects/object_hakach_objects.xml b/assets/xml/objects/object_hakach_objects.xml
index 7a68751068..73e1b8f52e 100644
--- a/assets/xml/objects/object_hakach_objects.xml
+++ b/assets/xml/objects/object_hakach_objects.xml
@@ -4,10 +4,10 @@
-
+
-
+
@@ -19,15 +19,15 @@
-
+
-
+
-
+
@@ -39,8 +39,8 @@
-
-
+
+
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