1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-08-06 14:20:11 +00:00

Bigmirror OK and documented (#530)

* OK

* documented (with one odd float value)

* delete asm and alter spec

* uniformise spawn data to sIsSpawned,
fix compile warnings in Bg_Jya_Lift and Bg_Mori_Elevator

* translate last printf

* re-delete modified asm

* addressed review comments

* remove outdated comment

* addressed comments, made defines

* untrack scenes dir

* remove scenes dir
This commit is contained in:
EllipticEllipsis 2020-12-29 08:50:56 +00:00 committed by GitHub
parent b50e079e1b
commit 21e367a7cb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
21 changed files with 278 additions and 718 deletions

View file

@ -24,7 +24,7 @@ void func_80892E0C(BgJya1flift* this);
void BgJya1flift_ResetMoveDelay(BgJya1flift* this);
void BgJya1flift_DelayMove(BgJya1flift* this, GlobalContext* globalCtx);
static u8 sHasSpawned = false;
static u8 sIsSpawned = false;
const ActorInit Bg_Jya_1flift_InitVars = {
ACTOR_BG_JYA_1FLIFT,
@ -85,9 +85,9 @@ void BgJya1flift_InitCollision(Actor* thisx, GlobalContext* globalCtx) {
void BgJya1flift_Init(Actor* thisx, GlobalContext* globalCtx) {
BgJya1flift* this = THIS;
// 1 F lift
osSyncPrintf("(1Fリフト)(flag %d)(room %d)\n", sHasSpawned, globalCtx->roomCtx.curRoom.num);
osSyncPrintf("(1Fリフト)(flag %d)(room %d)\n", sIsSpawned, globalCtx->roomCtx.curRoom.num);
this->hasInitialized = false;
if (sHasSpawned) {
if (sIsSpawned) {
Actor_Kill(thisx);
return;
}
@ -100,7 +100,7 @@ void BgJya1flift_Init(Actor* thisx, GlobalContext* globalCtx) {
func_80892DB0(this);
}
thisx->room = -1;
sHasSpawned = true;
sIsSpawned = true;
this->hasInitialized = true;
}
@ -108,7 +108,7 @@ void BgJya1flift_Destroy(Actor* thisx, GlobalContext* globalCtx) {
BgJya1flift* this = THIS;
if (this->hasInitialized) {
sHasSpawned = false;
sIsSpawned = false;
Collider_DestroyCylinder(globalCtx, &this->collider);
DynaPolyInfo_Free(globalCtx, &globalCtx->colCtx.dyna, this->dyna.dynaPolyId);
}

View file

@ -1,20 +1,29 @@
/*
* File: z_bg_jya_bigmirror.c
* Overlay: ovl_Bg_Jya_Bigmirror
* Description: Ceiling mirror and puzzle in Spirit Temple top rooms
*/
#include "z_bg_jya_bigmirror.h"
#define FLAGS 0x00000030
#define THIS ((BgJyaBigmirror*)thisx)
#define BIGMIR_PUZZLE_COBRA1_SOLVED 1 << 0
#define BIGMIR_PUZZLE_COBRA2_SOLVED 1 << 1
#define BIGMIR_PUZZLE_BOMBIWA_DESTROYED 1 << 2
#define BIGMIR_PUZZLE_IN_STATUE_ROOM 1 << 3
#define BIGMIR_PUZZLE_IN_1ST_TOP_ROOM 1 << 4
#define BIGMIR_PUZZLE_IN_2ND_TOP_ROOM 1 << 5
void BgJyaBigmirror_Init(Actor* thisx, GlobalContext* globalCtx);
void BgJyaBigmirror_Destroy(Actor* thisx, GlobalContext* globalCtx);
void BgJyaBigmirror_Update(Actor* thisx, GlobalContext* globalCtx);
void BgJyaBigmirror_Draw(Actor* thisx, GlobalContext* globalCtx);
extern UNK_TYPE D_0600BC70;
extern UNK_TYPE D_0600BD80;
extern UNK_TYPE D_0600E1B0;
extern UNK_TYPE D_0600E2D0;
static u8 sIsSpawned = false;
/*
const ActorInit Bg_Jya_Bigmirror_InitVars = {
ACTOR_BG_JYA_BIGMIRROR,
ACTORTYPE_BG,
@ -26,21 +35,235 @@ const ActorInit Bg_Jya_Bigmirror_InitVars = {
(ActorFunc)BgJyaBigmirror_Update,
(ActorFunc)BgJyaBigmirror_Draw,
};
*/
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Jya_Bigmirror/func_808936E0.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Jya_Bigmirror/func_80893750.s")
typedef struct {
/* 0x00 */ Vec3f pos;
/* 0x0C */ s16 params;
/* 0x0E */ s16 solvedRotY;
/* 0x10 */ s16 initRotY;
} BigMirrorDataEntry; // size = 0x14
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Jya_Bigmirror/func_8089394C.s")
static BigMirrorDataEntry sCobraSpawnData[] = {
{ { -560.0f, 1743.0f, -310.0f }, 0xFF01, 0x4000, 0x8000 },
{ { 60.0f, 1743.0f, -310.0f }, 0xFF02, 0x8000, 0xA000 },
};
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Jya_Bigmirror/func_8089399C.s")
extern Gfx D_0600BC70[];
extern Gfx D_0600BD80[];
extern Gfx D_0600E1B0[];
extern Gfx D_0600E2D0[];
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Jya_Bigmirror/BgJyaBigmirror_Init.s")
void BgJyaBigmirror_SetRoomFlag(Actor* thisx, GlobalContext* globalCtx) {
BgJyaBigmirror* this = THIS;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Jya_Bigmirror/BgJyaBigmirror_Destroy.s")
this->puzzleFlags &= ~(BIGMIR_PUZZLE_IN_STATUE_ROOM | BIGMIR_PUZZLE_IN_1ST_TOP_ROOM | BIGMIR_PUZZLE_IN_2ND_TOP_ROOM);
if (globalCtx->roomCtx.curRoom.num == 5) {
this->puzzleFlags |= BIGMIR_PUZZLE_IN_STATUE_ROOM;
} else if (globalCtx->roomCtx.curRoom.num == 0x19) {
this->puzzleFlags |= BIGMIR_PUZZLE_IN_1ST_TOP_ROOM;
} else if (globalCtx->roomCtx.curRoom.num == 0x1A) {
this->puzzleFlags |= BIGMIR_PUZZLE_IN_2ND_TOP_ROOM;
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Jya_Bigmirror/BgJyaBigmirror_Update.s")
void BgJyaBigmirror_HandleCobra(Actor* thisx, GlobalContext* globalCtx) {
static u8 cobraPuzzleFlags[] = { BIGMIR_PUZZLE_COBRA1_SOLVED, BIGMIR_PUZZLE_COBRA2_SOLVED };
BgJyaBigmirror* this = THIS;
BigMirrorDataEntry* curSpawnData;
BigmirrorCobra* curCobraInfo;
s32 i;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Jya_Bigmirror/func_80893C68.s")
if (this->puzzleFlags & (BIGMIR_PUZZLE_IN_1ST_TOP_ROOM | BIGMIR_PUZZLE_IN_2ND_TOP_ROOM)) {
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Jya_Bigmirror/BgJyaBigmirror_Draw.s")
for (i = 0; i < 2; i++) {
curSpawnData = &sCobraSpawnData[i];
curCobraInfo = &this->cobraInfo[i];
if (curCobraInfo->cobra != NULL) {
curCobraInfo->rotY = curCobraInfo->cobra->actor.shape.rot.y;
if (curCobraInfo->rotY == curSpawnData->solvedRotY) {
this->puzzleFlags |= cobraPuzzleFlags[i];
} else {
this->puzzleFlags &= ~cobraPuzzleFlags[i];
}
if (curCobraInfo->cobra->actor.update == NULL) {
// Cobra deleted
osSyncPrintf("Error : コブラ削除された (%s %d)\n", "../z_bg_jya_bigmirror.c", 203);
}
} else {
curCobraInfo->cobra = (BgJyaCobra*)Actor_SpawnAsChild(
&globalCtx->actorCtx, &this->actor, globalCtx, ACTOR_BG_JYA_COBRA, curSpawnData->pos.x,
curSpawnData->pos.y, curSpawnData->pos.z, 0, curCobraInfo->rotY, 0, curSpawnData->params);
this->actor.child = NULL;
if (&curCobraInfo->cobra->actor == NULL) {
// Cobra generation failed
osSyncPrintf("Error : コブラ発生失敗 (%s %d)\n", "../z_bg_jya_bigmirror.c", 221);
}
}
}
} else {
for (i = 0; i < 2; i++) {
curCobraInfo = &this->cobraInfo[i];
if (curCobraInfo->cobra != NULL) {
if (curCobraInfo->cobra->actor.child != NULL) {
Actor_Kill(curCobraInfo->cobra->actor.child);
curCobraInfo->cobra->actor.child = NULL;
}
Actor_Kill(&curCobraInfo->cobra->actor);
curCobraInfo->cobra = NULL;
}
}
}
}
void BgJyaBigmirror_SetBombiwaFlag(Actor* thisx, GlobalContext* globalCtx) {
BgJyaBigmirror* this = THIS;
if (Flags_GetSwitch(globalCtx, 0x29)) {
this->puzzleFlags |= BIGMIR_PUZZLE_BOMBIWA_DESTROYED;
} else {
this->puzzleFlags &= ~(BIGMIR_PUZZLE_BOMBIWA_DESTROYED);
}
}
void BgJyaBigmirror_HandleMirRay(Actor* thisx, GlobalContext* globalCtx) {
static s16 sMirRayParamss[] = { 0x0005, 0x0007, 0x0008 };
static Vec3f sMirRayPoss[] = {
{ 60.0f, 1802.0f, -1102.0f },
{ -560.0f, 1800.0f, -310.0f },
{ 60.0f, 1800.0f, -310.0f },
};
BgJyaBigmirror* this = THIS;
s32 puzzleSolved;
s32 lightBeamToggles[3];
s32 i;
s32 objBankIndex;
objBankIndex = Object_GetIndex(&globalCtx->objectCtx, OBJECT_MIR_RAY);
if ((objBankIndex < 0) || (objBankIndex != this->mirRayObjIndex)) {
this->lightBeams[2] = NULL;
this->lightBeams[1] = NULL;
this->lightBeams[0] = NULL;
} else {
puzzleSolved = !!(this->puzzleFlags & (BIGMIR_PUZZLE_IN_STATUE_ROOM | BIGMIR_PUZZLE_IN_1ST_TOP_ROOM));
if (puzzleSolved) {
puzzleSolved = !!(this->puzzleFlags & BIGMIR_PUZZLE_COBRA2_SOLVED);
if (puzzleSolved) {
puzzleSolved = !!(this->puzzleFlags & BIGMIR_PUZZLE_COBRA1_SOLVED);
}
}
lightBeamToggles[0] = puzzleSolved; // Only spawn if puzzle solved
if (1) {}
lightBeamToggles[1] = lightBeamToggles[2] =
this->puzzleFlags & (BIGMIR_PUZZLE_IN_1ST_TOP_ROOM | BIGMIR_PUZZLE_IN_2ND_TOP_ROOM);
for (i = 0; i < 3; i++) {
if (lightBeamToggles[i]) {
if ((this->lightBeams[i] == NULL) && Object_IsLoaded(&globalCtx->objectCtx, objBankIndex)) {
this->lightBeams[i] = Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_MIR_RAY, sMirRayPoss[i].x,
sMirRayPoss[i].y, sMirRayPoss[i].z, 0, 0, 0, sMirRayParamss[i]);
if (this->lightBeams[i] == NULL) {
// Mir Ray generation failed
osSyncPrintf("Error : Mir Ray 発生失敗 (%s %d)\n", "../z_bg_jya_bigmirror.c", 310);
}
}
} else {
if (this->lightBeams[i] != NULL) {
Actor_Kill(this->lightBeams[i]);
this->lightBeams[i] = NULL;
}
}
}
}
this->mirRayObjIndex = objBankIndex;
}
void BgJyaBigmirror_Init(Actor* thisx, GlobalContext* globalCtx) {
BgJyaBigmirror* this = THIS;
if (sIsSpawned) {
Actor_Kill(&this->actor);
return;
}
Actor_SetScale(&this->actor, 0.1f);
this->cobraInfo[0].rotY = sCobraSpawnData[0].initRotY;
this->cobraInfo[1].rotY = sCobraSpawnData[1].initRotY;
this->actor.room = -1;
sIsSpawned = true;
this->spawned = true;
this->mirRayObjIndex = -1;
// jya Bigmirror
osSyncPrintf("(jya 大鏡)(arg_data 0x%04x)\n", this->actor.params, this);
}
void BgJyaBigmirror_Destroy(Actor* thisx, GlobalContext* globalCtx) {
BgJyaBigmirror* this = THIS;
if (this->spawned) {
sIsSpawned = false;
}
}
void BgJyaBigmirror_Update(Actor* thisx, GlobalContext* globalCtx) {
BgJyaBigmirror_SetRoomFlag(thisx, globalCtx);
BgJyaBigmirror_HandleCobra(thisx, globalCtx);
BgJyaBigmirror_SetBombiwaFlag(thisx, globalCtx);
BgJyaBigmirror_HandleMirRay(thisx, globalCtx);
}
void BgJyaBigmirror_DrawLightBeam(Actor* thisx, GlobalContext* globalCtx) {
static Vec3s D_80893F4C = { 0, 0, 0 };
BgJyaBigmirror* this = THIS;
Actor* lift;
OPEN_DISPS(globalCtx->state.gfxCtx, "../z_bg_jya_bigmirror.c", 435);
func_80093D84(globalCtx->state.gfxCtx);
lift = Actor_Find(&globalCtx->actorCtx, ACTOR_BG_JYA_LIFT, ACTORTYPE_BG);
if (lift != NULL) {
this->liftHeight = lift->posRot.pos.y;
}
func_800D1694(this->actor.posRot.pos.x, this->actor.posRot.pos.y + 40.0f, this->actor.posRot.pos.z,
&this->actor.shape.rot);
// Second float seems to be either this or 1613/1280 + 0.13: both numerators relate to the lift height
Matrix_Scale(0.1f, (this->liftHeight * -(1.0f / 1280.0f)) + (973.0f / 1280.0f + 0.63f) /* 1.3901563f */, 0.1f,
MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_bg_jya_bigmirror.c", 457),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, D_0600BC70);
if (lift != NULL) {
if (1) {}
func_800D1694(lift->posRot.pos.x, lift->posRot.pos.y, lift->posRot.pos.z, &D_80893F4C);
Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_bg_jya_bigmirror.c", 467),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, D_0600BD80);
}
CLOSE_DISPS(globalCtx->state.gfxCtx, "../z_bg_jya_bigmirror.c", 476);
}
void BgJyaBigmirror_Draw(Actor* thisx, GlobalContext* globalCtx) {
BgJyaBigmirror* this = THIS;
if (this->puzzleFlags & BIGMIR_PUZZLE_IN_1ST_TOP_ROOM) {
Gfx_DrawDListOpa(globalCtx, D_0600E1B0);
Gfx_DrawDListXlu(globalCtx, D_0600E2D0);
}
if ((this->puzzleFlags &
(BIGMIR_PUZZLE_IN_STATUE_ROOM | BIGMIR_PUZZLE_IN_1ST_TOP_ROOM | BIGMIR_PUZZLE_IN_2ND_TOP_ROOM)) &&
(this->puzzleFlags & BIGMIR_PUZZLE_COBRA2_SOLVED) && (this->puzzleFlags & BIGMIR_PUZZLE_COBRA1_SOLVED)) {
BgJyaBigmirror_DrawLightBeam(&this->actor, globalCtx);
}
}

View file

@ -3,12 +3,23 @@
#include "ultra64.h"
#include "global.h"
#include "overlays/actors/ovl_Bg_Jya_Cobra/z_bg_jya_cobra.h"
struct BgJyaBigmirror;
typedef struct {
/* 0x00 */ BgJyaCobra* cobra;
/* 0x04 */ s16 rotY;
} BigmirrorCobra; // size = 0x08
typedef struct BgJyaBigmirror {
/* 0x0000 */ Actor actor;
/* 0x014C */ char unk_14C[0x28];
/* 0x014C */ BigmirrorCobra cobraInfo[2];
/* 0x015C */ u8 puzzleFlags;
/* 0x015D */ u8 spawned;
/* 0x0160 */ Actor* lightBeams[3];
/* 0x016C */ s32 mirRayObjIndex;
/* 0x0170 */ f32 liftHeight;
} BgJyaBigmirror; // size = 0x0174
extern const ActorInit Bg_Jya_Bigmirror_InitVars;

View file

@ -22,7 +22,7 @@ void BgJyaLift_DelayMove(BgJyaLift* this, GlobalContext* globalCtx);
void BgJyaLift_SetupMove(BgJyaLift* this);
void BgJyaLift_Move(BgJyaLift* this, GlobalContext* globalCtx);
static s16 D_8089A020 = 0;
static s16 sIsSpawned = false;
const ActorInit Bg_Jya_Lift_InitVars = {
ACTOR_BG_JYA_LIFT,
@ -52,14 +52,14 @@ void BgJyaLift_InitDynapoly(BgJyaLift* this, GlobalContext* globalCtx, u32 arg2,
DynaPolyInfo_SetActorMove(&this->dyna, moveFlag);
DynaPolyInfo_Alloc(arg2, &localConst);
this->dyna.dynaPolyId = DynaPolyInfo_RegisterActor(globalCtx, &globalCtx->colCtx.dyna, &this->dyna, localConst);
this->dyna.dynaPolyId = DynaPolyInfo_RegisterActor(globalCtx, &globalCtx->colCtx.dyna, &this->dyna.actor, localConst);
}
void BgJyaLift_Init(Actor* thisx, GlobalContext* globalCtx) {
BgJyaLift* this = THIS;
this->unk_16A = 0;
if (D_8089A020) {
if (sIsSpawned) {
Actor_Kill(thisx);
return;
}
@ -69,12 +69,12 @@ void BgJyaLift_Init(Actor* thisx, GlobalContext* globalCtx) {
BgJyaLift_InitDynapoly(this, globalCtx, &D_0600D7E8, 0);
Actor_ProcessInitChain(thisx, sInitChain);
if (Flags_GetSwitch(globalCtx, (thisx->params & 0x3F))) {
BgJyaLift_SetFinalPosY(thisx);
BgJyaLift_SetFinalPosY(this);
} else {
BgJyaLift_SetInitPosY(thisx);
BgJyaLift_SetInitPosY(this);
}
thisx->room = -1;
D_8089A020 = 1;
sIsSpawned = true;
this->unk_16A = 1;
}
@ -85,7 +85,7 @@ void BgJyaLift_Destroy(Actor* thisx, GlobalContext* globalCtx) {
// Goddess Lift DT
osSyncPrintf("女神リフト DT\n");
D_8089A020 = 0;
sIsSpawned = false;
DynaPolyInfo_Free(globalCtx, &globalCtx->colCtx.dyna, this->dyna.dynaPolyId);
}
}
@ -138,7 +138,7 @@ void BgJyaLift_Update(Actor* thisx, GlobalContext* globalCtx) {
GlobalContext* globalCtx2 = globalCtx;
if (this->actionFunc != NULL) {
this->actionFunc(this);
this->actionFunc(this, globalCtx);
}
if ((this->dyna.unk_160 & 4) && ((this->unk_16B & 4) == 0)) {
Camera_ChangeSetting(globalCtx2->cameraPtrs[0], CAM_SET_TEPPEN);

View file

@ -5,7 +5,7 @@
#include "global.h"
struct BgJyaLift;
typedef void (*BgJyaLiftActionFunc)(struct BgJyaLift*);
typedef void (*BgJyaLiftActionFunc)(struct BgJyaLift*, GlobalContext*);
typedef struct BgJyaLift {
/* 0x000 */ DynaPolyActor dyna;

View file

@ -18,7 +18,7 @@ void func_808A2008(BgMoriElevator* this, GlobalContext* globalCtx);
void BgMoriElevator_MoveIntoGround(BgMoriElevator* this, GlobalContext* globalCtx);
void BgMoriElevator_MoveAboveGround(BgMoriElevator* this, GlobalContext* globalCtx);
static s16 sIsSpawned = 0;
static s16 sIsSpawned = false;
const ActorInit Bg_Mori_Elevator_InitVars = {
ACTOR_BG_MORI_ELEVATOR,
@ -99,10 +99,10 @@ void BgMoriElevator_Init(Actor* thisx, GlobalContext* globalCtx) {
osSyncPrintf("Error : 森の神殿 obj elevator バンク危険!(%s %d)\n", "../z_bg_mori_elevator.c", 277);
} else {
switch (sIsSpawned) {
case 0:
case false:
// Forest Temple elevator CT
osSyncPrintf("森の神殿 elevator CT\n");
sIsSpawned = 1;
sIsSpawned = true;
this->dyna.actor.room = -1;
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
DynaPolyInfo_SetActorMove(&this->dyna, DPM_PLAYER);
@ -111,7 +111,7 @@ void BgMoriElevator_Init(Actor* thisx, GlobalContext* globalCtx) {
DynaPolyInfo_RegisterActor(globalCtx, &globalCtx->colCtx.dyna, thisx, localConst);
BgMoriElevator_SetupWaitAfterInit(this);
break;
case 1:
case true:
Actor_Kill(thisx);
break;
}
@ -125,7 +125,7 @@ void BgMoriElevator_Destroy(Actor* thisx, GlobalContext* globalCtx) {
// Forest Temple elevator DT
osSyncPrintf("森の神殿 elevator DT\n");
DynaPolyInfo_Free(globalCtx, &globalCtx->colCtx.dyna, this->dyna.dynaPolyId);
sIsSpawned = 0;
sIsSpawned = false;
}
}

View file

@ -6,7 +6,7 @@
struct BgMoriElevator;
typedef void (*BgMoriElevatorActionFunc)(struct BgMoriElevator*, struct GlobalCtx*);
typedef void (*BgMoriElevatorActionFunc)(struct BgMoriElevator*, GlobalContext*);
typedef struct BgMoriElevator {
/* 0x0000 */ DynaPolyActor dyna;

View file

@ -22,7 +22,7 @@ void BgMoriIdomizu_Main(BgMoriIdomizu* this, GlobalContext* globalCtx);
extern Gfx D_060049D0[];
static s16 sAlreadyLoaded = false;
static s16 sIsSpawned = false;
const ActorInit Bg_Mori_Idomizu_InitVars = {
ACTOR_BG_MORI_IDOMIZU,
@ -52,7 +52,7 @@ void BgMoriIdomizu_Init(Actor* thisx, GlobalContext* globalCtx) {
s32 pad;
BgMoriIdomizu* this = THIS;
if (sAlreadyLoaded) {
if (sIsSpawned) {
Actor_Kill(&this->actor);
return;
}
@ -78,7 +78,7 @@ void BgMoriIdomizu_Init(Actor* thisx, GlobalContext* globalCtx) {
return;
}
BgMoriIdomizu_SetupWaitForMoriTex(this);
sAlreadyLoaded = true;
sIsSpawned = true;
this->isLoaded = true;
this->actor.room = -1;
// Forest Temple well water
@ -90,7 +90,7 @@ void BgMoriIdomizu_Destroy(Actor* thisx, GlobalContext* globalCtx) {
BgMoriIdomizu* this = THIS;
if (this->isLoaded) {
sAlreadyLoaded = false;
sIsSpawned = false;
}
}