mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2024-08-13 17:03:47 -04:00
89 lines
2.7 KiB
C
89 lines
2.7 KiB
C
/*
|
|
* File: z_bg_spot01_idomizu.c
|
|
* Overlay: ovl_Bg_Spot01_Idomizu
|
|
* Description: Kakariko Village Well Water
|
|
*/
|
|
|
|
#include "z_bg_spot01_idomizu.h"
|
|
#include "objects/object_spot01_objects/object_spot01_objects.h"
|
|
|
|
#define FLAGS ACTOR_FLAG_5
|
|
|
|
void BgSpot01Idomizu_Init(Actor* thisx, PlayState* play);
|
|
void BgSpot01Idomizu_Destroy(Actor* thisx, PlayState* play);
|
|
void BgSpot01Idomizu_Update(Actor* thisx, PlayState* play);
|
|
void BgSpot01Idomizu_Draw(Actor* thisx, PlayState* play);
|
|
|
|
void func_808ABB84(BgSpot01Idomizu* this, PlayState* play);
|
|
|
|
const ActorInit Bg_Spot01_Idomizu_InitVars = {
|
|
ACTOR_BG_SPOT01_IDOMIZU,
|
|
ACTORCAT_BG,
|
|
FLAGS,
|
|
OBJECT_SPOT01_OBJECTS,
|
|
sizeof(BgSpot01Idomizu),
|
|
(ActorFunc)BgSpot01Idomizu_Init,
|
|
(ActorFunc)BgSpot01Idomizu_Destroy,
|
|
(ActorFunc)BgSpot01Idomizu_Update,
|
|
(ActorFunc)BgSpot01Idomizu_Draw,
|
|
NULL,
|
|
};
|
|
|
|
static InitChainEntry sInitChain[] = {
|
|
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP),
|
|
};
|
|
|
|
void BgSpot01Idomizu_Init(Actor* thisx, PlayState* play) {
|
|
BgSpot01Idomizu* this = (BgSpot01Idomizu*)thisx;
|
|
|
|
Actor_ProcessInitChain(&this->actor, sInitChain);
|
|
if (gSaveContext.eventChkInf[6] & 0x80 || LINK_AGE_IN_YEARS == YEARS_ADULT) {
|
|
this->waterHeight = -550.0f;
|
|
} else {
|
|
this->waterHeight = 52.0f;
|
|
}
|
|
this->actionFunc = func_808ABB84;
|
|
this->actor.world.pos.y = this->waterHeight;
|
|
}
|
|
|
|
void BgSpot01Idomizu_Destroy(Actor* thisx, PlayState* play) {
|
|
}
|
|
|
|
void func_808ABB84(BgSpot01Idomizu* this, PlayState* play) {
|
|
if (gSaveContext.eventChkInf[6] & 0x80) {
|
|
this->waterHeight = -550.0f;
|
|
}
|
|
play->colCtx.colHeader->waterBoxes[0].ySurface = this->actor.world.pos.y;
|
|
if (this->waterHeight < this->actor.world.pos.y) {
|
|
Audio_PlaySoundGeneral(NA_SE_EV_WATER_LEVEL_DOWN - SFX_FLAG, &D_801333D4, 4, &D_801333E0, &D_801333E0,
|
|
&D_801333E8);
|
|
}
|
|
Math_ApproachF(&this->actor.world.pos.y, this->waterHeight, 1.0f, 2.0f);
|
|
}
|
|
|
|
void BgSpot01Idomizu_Update(Actor* thisx, PlayState* play) {
|
|
BgSpot01Idomizu* this = (BgSpot01Idomizu*)thisx;
|
|
|
|
this->actionFunc(this, play);
|
|
}
|
|
|
|
void BgSpot01Idomizu_Draw(Actor* thisx, PlayState* play) {
|
|
u32 frames;
|
|
|
|
OPEN_DISPS(play->state.gfxCtx);
|
|
|
|
Gfx_SetupDL_25Xlu(play->state.gfxCtx);
|
|
|
|
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(play->state.gfxCtx),
|
|
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
|
|
|
frames = play->state.frames;
|
|
gSPSegment(POLY_XLU_DISP++, 0x08,
|
|
Gfx_TwoTexScroll(play->state.gfxCtx, 0, 127 - frames % 128, frames & 0x7F, 32, 32, 1, frames % 128,
|
|
frames & 0x7F, 32, 32));
|
|
|
|
gSPDisplayList(POLY_XLU_DISP++, gKakarikoWellWaterDL);
|
|
|
|
CLOSE_DISPS(play->state.gfxCtx);
|
|
}
|