mirror of
https://github.com/zeldaret/mm.git
synced 2026-08-26 15:36:54 -04:00
Document BgIknvDoukutu (#1867)
This commit is contained in:
@@ -14,16 +14,16 @@ void BgIknvDoukutu_Destroy(Actor* thisx, PlayState* play);
|
||||
void BgIknvDoukutu_Update(Actor* thisx, PlayState* play);
|
||||
void BgIknvDoukutu_Draw(Actor* thisx, PlayState* play);
|
||||
|
||||
void func_80BD716C(BgIknvDoukutu* this, PlayState* play);
|
||||
void func_80BD71BC(BgIknvDoukutu* this, PlayState* play);
|
||||
void func_80BD7250(BgIknvDoukutu* this, PlayState* play);
|
||||
void func_80BD72BC(BgIknvDoukutu* this, PlayState* play);
|
||||
void func_80BD7360(BgIknvDoukutu* this, PlayState* play);
|
||||
void func_80BD73D0(BgIknvDoukutu* this, PlayState* play);
|
||||
void func_80BD7768(Actor* thisx, PlayState* play);
|
||||
void func_80BD7820(Actor* thisx, PlayState* play);
|
||||
void func_80BD78C4(Actor* thisx, PlayState* play);
|
||||
void func_80BD7538(Actor* thisx, PlayState* play);
|
||||
void BgIknvDoukutu_Cleanse(BgIknvDoukutu* this, PlayState* play);
|
||||
void BgIknvDoukutu_Cursed(BgIknvDoukutu* this, PlayState* play);
|
||||
void BgIknvDoukutu_FillSpring(BgIknvDoukutu* this, PlayState* play);
|
||||
void BgIknvDoukutu_FadeInWater(BgIknvDoukutu* this, PlayState* play);
|
||||
void BgIknvDoukutu_Dry(BgIknvDoukutu* this, PlayState* play);
|
||||
void BgIknvDoukutu_DoNothing(BgIknvDoukutu* this, PlayState* play);
|
||||
void BgIknvDoukutu_DrawPurified(Actor* thisx, PlayState* play);
|
||||
void BgIknvDoukutu_DrawStream(Actor* thisx, PlayState* play);
|
||||
void BgIknvDoukutu_DrawSpringWater(Actor* thisx, PlayState* play);
|
||||
void BgIknvDoukutu_DrawCleansing(Actor* thisx, PlayState* play);
|
||||
|
||||
ActorProfile Bg_Iknv_Doukutu_Profile = {
|
||||
/**/ ACTOR_BG_IKNV_DOUKUTU,
|
||||
@@ -43,48 +43,48 @@ void BgIknvDoukutu_Init(Actor* thisx, PlayState* play) {
|
||||
s32 pad;
|
||||
|
||||
Actor_SetScale(&this->dyna.actor, 0.1f);
|
||||
this->actionFunc = func_80BD73D0;
|
||||
this->actionFunc = BgIknvDoukutu_DoNothing;
|
||||
this->unk_15C = 0;
|
||||
|
||||
switch (BGIKNVDOUKUTU_GET_F(&this->dyna.actor)) {
|
||||
case BGIKNVDOUKUTU_F_0:
|
||||
this->actionFunc = func_80BD71BC;
|
||||
switch (BGIKNVDOUKUTU_GET_TYPE(&this->dyna.actor)) {
|
||||
case BGIKNVDOUKUTU_INTERIOR:
|
||||
this->actionFunc = BgIknvDoukutu_Cursed;
|
||||
this->cueType = CS_CMD_ACTOR_CUE_516;
|
||||
this->unk_160 = 1.0f;
|
||||
this->opacity = 1.0f;
|
||||
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_IKANA_SPRING_RESTORED) ||
|
||||
CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE)) {
|
||||
this->dyna.actor.draw = func_80BD7768;
|
||||
this->actionFunc = func_80BD73D0;
|
||||
this->dyna.actor.draw = BgIknvDoukutu_DrawPurified;
|
||||
this->actionFunc = BgIknvDoukutu_DoNothing;
|
||||
play->envCtx.lightSettingOverride = 25;
|
||||
} else {
|
||||
play->envCtx.lightSettingOverride = 24;
|
||||
}
|
||||
break;
|
||||
|
||||
case BGIKNVDOUKUTU_F_1:
|
||||
case BGIKNVDOUKUTU_STREAM:
|
||||
Actor_SetScale(&this->dyna.actor, 1.0f);
|
||||
this->dyna.actor.draw = func_80BD7820;
|
||||
this->dyna.actor.draw = BgIknvDoukutu_DrawStream;
|
||||
this->cueType = CS_CMD_ACTOR_CUE_516;
|
||||
DynaPolyActor_Init(&this->dyna, 0);
|
||||
CollisionHeader_GetVirtual(&object_iknv_obj_Colheader_012788, &colHeader);
|
||||
CollisionHeader_GetVirtual(&gIkanaStreamCol, &colHeader);
|
||||
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader);
|
||||
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_IKANA_SPRING_RESTORED)) {
|
||||
Actor_Kill(&this->dyna.actor);
|
||||
}
|
||||
break;
|
||||
|
||||
case BGIKNVDOUKUTU_F_2:
|
||||
case BGIKNVDOUKUTU_SPRING_WATER:
|
||||
this->cueType = CS_CMD_ACTOR_CUE_516;
|
||||
this->dyna.actor.draw = func_80BD78C4;
|
||||
this->dyna.actor.draw = BgIknvDoukutu_DrawSpringWater;
|
||||
DynaPolyActor_Init(&this->dyna, 0);
|
||||
CollisionHeader_GetVirtual(&object_iknv_obj_Colheader_0117C8, &colHeader);
|
||||
CollisionHeader_GetVirtual(&gIkanaCaveSpringWaterCol, &colHeader);
|
||||
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader);
|
||||
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_IKANA_SPRING_RESTORED)) {
|
||||
this->unk_160 = 1.0f;
|
||||
this->opacity = 1.0f;
|
||||
this->dyna.actor.world.pos.y += 68.0f;
|
||||
} else {
|
||||
this->actionFunc = func_80BD7360;
|
||||
this->unk_160 = 0.0f;
|
||||
this->actionFunc = BgIknvDoukutu_Dry;
|
||||
this->opacity = 0.0f;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -97,61 +97,61 @@ void BgIknvDoukutu_Init(Actor* thisx, PlayState* play) {
|
||||
void BgIknvDoukutu_Destroy(Actor* thisx, PlayState* play) {
|
||||
BgIknvDoukutu* this = (BgIknvDoukutu*)thisx;
|
||||
|
||||
if ((BGIKNVDOUKUTU_GET_F(&this->dyna.actor) == BGIKNVDOUKUTU_F_1) ||
|
||||
(BGIKNVDOUKUTU_GET_F(&this->dyna.actor) == BGIKNVDOUKUTU_F_2)) {
|
||||
if ((BGIKNVDOUKUTU_GET_TYPE(&this->dyna.actor) == BGIKNVDOUKUTU_STREAM) ||
|
||||
(BGIKNVDOUKUTU_GET_TYPE(&this->dyna.actor) == BGIKNVDOUKUTU_SPRING_WATER)) {
|
||||
DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
|
||||
}
|
||||
}
|
||||
|
||||
void func_80BD716C(BgIknvDoukutu* this, PlayState* play) {
|
||||
if (this->unk_160 >= 0.05f) {
|
||||
this->unk_160 -= 0.05f;
|
||||
void BgIknvDoukutu_Cleanse(BgIknvDoukutu* this, PlayState* play) {
|
||||
if (this->opacity >= 0.05f) {
|
||||
this->opacity -= 0.05f;
|
||||
} else {
|
||||
this->actionFunc = func_80BD73D0;
|
||||
this->dyna.actor.draw = func_80BD7768;
|
||||
this->actionFunc = BgIknvDoukutu_DoNothing;
|
||||
this->dyna.actor.draw = BgIknvDoukutu_DrawPurified;
|
||||
}
|
||||
play->envCtx.lightSettingOverride = 25;
|
||||
}
|
||||
|
||||
void func_80BD71BC(BgIknvDoukutu* this, PlayState* play) {
|
||||
void BgIknvDoukutu_Cursed(BgIknvDoukutu* this, PlayState* play) {
|
||||
play->envCtx.lightSettingOverride = 24;
|
||||
if (Cutscene_IsCueInChannel(play, this->cueType) &&
|
||||
(play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id == 2)) {
|
||||
this->actionFunc = func_80BD716C;
|
||||
this->dyna.actor.draw = func_80BD7538;
|
||||
this->actionFunc = BgIknvDoukutu_Cleanse;
|
||||
this->dyna.actor.draw = BgIknvDoukutu_DrawCleansing;
|
||||
}
|
||||
}
|
||||
|
||||
void func_80BD7250(BgIknvDoukutu* this, PlayState* play) {
|
||||
f32 temp_fv0 = this->dyna.actor.home.pos.y + 68.0f;
|
||||
void BgIknvDoukutu_FillSpring(BgIknvDoukutu* this, PlayState* play) {
|
||||
f32 waterLevelMax = this->dyna.actor.home.pos.y + 68.0f;
|
||||
|
||||
this->dyna.actor.world.pos.y += 1.7f;
|
||||
if (temp_fv0 < this->dyna.actor.world.pos.y) {
|
||||
this->dyna.actor.world.pos.y = temp_fv0;
|
||||
this->actionFunc = func_80BD73D0;
|
||||
if (waterLevelMax < this->dyna.actor.world.pos.y) {
|
||||
this->dyna.actor.world.pos.y = waterLevelMax;
|
||||
this->actionFunc = BgIknvDoukutu_DoNothing;
|
||||
}
|
||||
Audio_PlaySfx_2(NA_SE_EV_WATER_LEVEL_DOWN - SFX_FLAG);
|
||||
}
|
||||
|
||||
void func_80BD72BC(BgIknvDoukutu* this, PlayState* play) {
|
||||
void BgIknvDoukutu_FadeInWater(BgIknvDoukutu* this, PlayState* play) {
|
||||
if (Cutscene_IsCueInChannel(play, this->cueType) &&
|
||||
(play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id == 3)) {
|
||||
this->actionFunc = func_80BD7250;
|
||||
this->actionFunc = BgIknvDoukutu_FillSpring;
|
||||
}
|
||||
|
||||
if (this->unk_160 < 0.95f) {
|
||||
this->unk_160 += 0.05f;
|
||||
if (this->opacity < 0.95f) {
|
||||
this->opacity += 0.05f;
|
||||
}
|
||||
}
|
||||
|
||||
void func_80BD7360(BgIknvDoukutu* this, PlayState* play) {
|
||||
void BgIknvDoukutu_Dry(BgIknvDoukutu* this, PlayState* play) {
|
||||
if (Cutscene_IsCueInChannel(play, this->cueType) &&
|
||||
(play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id == 2)) {
|
||||
this->actionFunc = func_80BD72BC;
|
||||
this->actionFunc = BgIknvDoukutu_FadeInWater;
|
||||
}
|
||||
}
|
||||
|
||||
void func_80BD73D0(BgIknvDoukutu* this, PlayState* play) {
|
||||
void BgIknvDoukutu_DoNothing(BgIknvDoukutu* this, PlayState* play) {
|
||||
}
|
||||
|
||||
void BgIknvDoukutu_Update(Actor* thisx, PlayState* play) {
|
||||
@@ -165,7 +165,7 @@ void BgIknvDoukutu_Draw(Actor* thisx, PlayState* play) {
|
||||
|
||||
OPEN_DISPS(play->state.gfxCtx);
|
||||
|
||||
AnimatedMat_Draw(play, Lib_SegmentedToVirtual(object_iknv_obj_Matanimheader_00F1C0));
|
||||
AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gIkanaCaveInteriorTexAnim));
|
||||
Scene_SetRenderModeXlu(play, 0, 1);
|
||||
|
||||
MATRIX_FINALIZE_AND_LOAD(POLY_OPA_DISP++, play->state.gfxCtx);
|
||||
@@ -175,32 +175,32 @@ void BgIknvDoukutu_Draw(Actor* thisx, PlayState* play) {
|
||||
Gfx_SetupDL25_Xlu(play->state.gfxCtx);
|
||||
|
||||
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
|
||||
gSPDisplayList(POLY_OPA_DISP++, object_iknv_obj_DL_00DDD8);
|
||||
gSPDisplayList(POLY_OPA_DISP++, gIkanaCaveCursedDL);
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, 215, 42, 55, 120);
|
||||
gSPDisplayList(POLY_XLU_DISP++, object_iknv_obj_DL_00DB60);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gIkanaCaveFogDL);
|
||||
|
||||
CLOSE_DISPS(play->state.gfxCtx);
|
||||
}
|
||||
|
||||
void func_80BD7538(Actor* thisx, PlayState* play) {
|
||||
void BgIknvDoukutu_DrawCleansing(Actor* thisx, PlayState* play) {
|
||||
BgIknvDoukutu* this = (BgIknvDoukutu*)thisx;
|
||||
GraphicsContext* gfxCtx;
|
||||
f32 sp54;
|
||||
f32 opacity;
|
||||
|
||||
func_80BD7768(&this->dyna.actor, play);
|
||||
BgIknvDoukutu_DrawPurified(&this->dyna.actor, play);
|
||||
|
||||
gfxCtx = play->state.gfxCtx;
|
||||
OPEN_DISPS(gfxCtx);
|
||||
Vec3f sp40;
|
||||
s16 sp3E = Math_Vec3f_Yaw(&GET_ACTIVE_CAM(play)->eye, &GET_ACTIVE_CAM(play)->at);
|
||||
s16 sp3C = -Math_Vec3f_Pitch(&GET_ACTIVE_CAM(play)->eye, &GET_ACTIVE_CAM(play)->at);
|
||||
Vec3f translationVec;
|
||||
s16 cameraYaw = Math_Vec3f_Yaw(&GET_ACTIVE_CAM(play)->eye, &GET_ACTIVE_CAM(play)->at);
|
||||
s16 cameraPitch = -Math_Vec3f_Pitch(&GET_ACTIVE_CAM(play)->eye, &GET_ACTIVE_CAM(play)->at);
|
||||
|
||||
sp40.x = -100.0f * Math_SinS(sp3E) * Math_CosS(sp3C);
|
||||
sp40.y = Math_SinS(sp3C) * -100.0f;
|
||||
sp40.z = -100.0f * Math_CosS(sp3E) * Math_CosS(sp3C);
|
||||
Matrix_Translate(sp40.x, sp40.y, sp40.z, MTXMODE_APPLY);
|
||||
sp54 = this->unk_160;
|
||||
AnimatedMat_Draw(play, Lib_SegmentedToVirtual(object_iknv_obj_Matanimheader_00F1C0));
|
||||
translationVec.x = -100.0f * Math_SinS(cameraYaw) * Math_CosS(cameraPitch);
|
||||
translationVec.y = Math_SinS(cameraPitch) * -100.0f;
|
||||
translationVec.z = -100.0f * Math_CosS(cameraYaw) * Math_CosS(cameraPitch);
|
||||
Matrix_Translate(translationVec.x, translationVec.y, translationVec.z, MTXMODE_APPLY);
|
||||
opacity = this->opacity;
|
||||
AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gIkanaCaveInteriorTexAnim));
|
||||
|
||||
MATRIX_FINALIZE_AND_LOAD(POLY_XLU_DISP++, play->state.gfxCtx);
|
||||
|
||||
@@ -208,15 +208,15 @@ void func_80BD7538(Actor* thisx, PlayState* play) {
|
||||
Scene_SetRenderModeXlu(play, 1, 2);
|
||||
Gfx_SetupDL25_Xlu(play->state.gfxCtx);
|
||||
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, (s32)(255.0f * sp54));
|
||||
gSPDisplayList(POLY_XLU_DISP++, object_iknv_obj_DL_00DDD8);
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, 215, 42, 55, (s32)(120.0f * sp54));
|
||||
gSPDisplayList(POLY_XLU_DISP++, object_iknv_obj_DL_00DB60);
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, (s32)(255.0f * opacity));
|
||||
gSPDisplayList(POLY_XLU_DISP++, gIkanaCaveCursedDL);
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, 215, 42, 55, (s32)(120.0f * opacity));
|
||||
gSPDisplayList(POLY_XLU_DISP++, gIkanaCaveFogDL);
|
||||
|
||||
CLOSE_DISPS(gfxCtx);
|
||||
}
|
||||
|
||||
void func_80BD7768(Actor* thisx, PlayState* play) {
|
||||
void BgIknvDoukutu_DrawPurified(Actor* thisx, PlayState* play) {
|
||||
BgIknvDoukutu* this = (BgIknvDoukutu*)thisx;
|
||||
|
||||
OPEN_DISPS(play->state.gfxCtx);
|
||||
@@ -228,43 +228,43 @@ void func_80BD7768(Actor* thisx, PlayState* play) {
|
||||
Gfx_SetupDL25_Opa(play->state.gfxCtx);
|
||||
|
||||
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
|
||||
gSPDisplayList(POLY_OPA_DISP++, object_iknv_obj_DL_010D98);
|
||||
gSPDisplayList(POLY_OPA_DISP++, gIkanaCavePurifiedDL);
|
||||
|
||||
CLOSE_DISPS(play->state.gfxCtx);
|
||||
}
|
||||
|
||||
void func_80BD7820(Actor* thisx, PlayState* play) {
|
||||
void BgIknvDoukutu_DrawStream(Actor* thisx, PlayState* play) {
|
||||
BgIknvDoukutu* this = (BgIknvDoukutu*)thisx;
|
||||
|
||||
OPEN_DISPS(play->state.gfxCtx);
|
||||
|
||||
AnimatedMat_Draw(play, Lib_SegmentedToVirtual(object_iknv_obj_Matanimheader_012728));
|
||||
AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gIkanaStreamTexAnim));
|
||||
|
||||
MATRIX_FINALIZE_AND_LOAD(POLY_XLU_DISP++, play->state.gfxCtx);
|
||||
|
||||
Gfx_SetupDL25_Xlu(play->state.gfxCtx);
|
||||
|
||||
gSPDisplayList(POLY_XLU_DISP++, object_iknv_obj_DL_012700);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gIkanaStreamDL);
|
||||
|
||||
CLOSE_DISPS(play->state.gfxCtx);
|
||||
}
|
||||
|
||||
void func_80BD78C4(Actor* thisx, PlayState* play) {
|
||||
void BgIknvDoukutu_DrawSpringWater(Actor* thisx, PlayState* play) {
|
||||
BgIknvDoukutu* this = (BgIknvDoukutu*)thisx;
|
||||
f32 sp30 = this->unk_160;
|
||||
f32 opacity = this->opacity;
|
||||
s32 pad;
|
||||
|
||||
OPEN_DISPS(play->state.gfxCtx);
|
||||
|
||||
AnimatedMat_Draw(play, Lib_SegmentedToVirtual(object_iknv_obj_Matanimheader_0117A0));
|
||||
AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gIkanaCaveSpringWaterTexAnim));
|
||||
|
||||
MATRIX_FINALIZE_AND_LOAD(POLY_XLU_DISP++, play->state.gfxCtx);
|
||||
|
||||
Gfx_SetupDL25_Xlu(play->state.gfxCtx);
|
||||
|
||||
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, (s32)(140.0f * sp30));
|
||||
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, (s32)(140.0f * opacity));
|
||||
|
||||
gSPDisplayList(POLY_XLU_DISP++, object_iknv_obj_DL_0115E0);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gIkanaCaveSpringWaterDL);
|
||||
|
||||
CLOSE_DISPS(play->state.gfxCtx);
|
||||
}
|
||||
|
||||
@@ -7,19 +7,19 @@ struct BgIknvDoukutu;
|
||||
|
||||
typedef void (*BgIknvDoukutuActionFunc)(struct BgIknvDoukutu*, PlayState*);
|
||||
|
||||
#define BGIKNVDOUKUTU_GET_F(thisx) ((thisx)->params & 0xF)
|
||||
#define BGIKNVDOUKUTU_GET_TYPE(thisx) ((thisx)->params & 0xF)
|
||||
|
||||
typedef enum {
|
||||
/* 0 */ BGIKNVDOUKUTU_F_0,
|
||||
/* 1 */ BGIKNVDOUKUTU_F_1,
|
||||
/* 2 */ BGIKNVDOUKUTU_F_2
|
||||
} BgIknvDoukutuParam;
|
||||
/* 0 */ BGIKNVDOUKUTU_INTERIOR,
|
||||
/* 1 */ BGIKNVDOUKUTU_STREAM,
|
||||
/* 2 */ BGIKNVDOUKUTU_SPRING_WATER
|
||||
} BgIknvDoukutuType;
|
||||
|
||||
typedef struct BgIknvDoukutu {
|
||||
/* 0x000 */ DynaPolyActor dyna;
|
||||
/* 0x15C */ s16 unk_15C; // set and not used
|
||||
/* 0x15E */ u16 cueType;
|
||||
/* 0x160 */ f32 unk_160;
|
||||
/* 0x160 */ f32 opacity;
|
||||
/* 0x164 */ BgIknvDoukutuActionFunc actionFunc;
|
||||
} BgIknvDoukutu;// size = 0x168
|
||||
|
||||
|
||||
Reference in New Issue
Block a user