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