mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2024-08-13 17:03:47 -04:00
39cc86c260
subrepo: subdir: "soh" merged: "ba904bbd0" upstream: origin: "https://github.com/HarbourMasters/soh.git" branch: "master" commit: "ba904bbd0" git-subrepo: version: "0.4.1" origin: "???" commit: "???"
137 lines
4.6 KiB
C
137 lines
4.6 KiB
C
/*
|
|
* File: z_bg_gate_shutter.c
|
|
* Overlay: Bg_Gate_Shutter
|
|
* Description: Death Mountain Trail Gate
|
|
*/
|
|
|
|
#include "z_bg_gate_shutter.h"
|
|
#include "objects/object_spot01_matoyab/object_spot01_matoyab.h"
|
|
#include "vt.h"
|
|
|
|
#define FLAGS 0
|
|
|
|
void BgGateShutter_Init(Actor* thisx, GlobalContext* globalCtx);
|
|
void BgGateShutter_Destroy(Actor* thisx, GlobalContext* globalCtx);
|
|
void BgGateShutter_Update(Actor* thisx, GlobalContext* globalCtx);
|
|
void BgGateShutter_Draw(Actor* thisx, GlobalContext* globalCtx);
|
|
|
|
void func_8087828C(BgGateShutter* this, GlobalContext* globalCtx);
|
|
void func_80878300(BgGateShutter* this, GlobalContext* globalCtx);
|
|
void func_808783AC(BgGateShutter* this, GlobalContext* globalCtx);
|
|
void func_808783D4(BgGateShutter* this, GlobalContext* globalCtx);
|
|
|
|
const ActorInit Bg_Gate_Shutter_InitVars = {
|
|
ACTOR_BG_GATE_SHUTTER,
|
|
ACTORCAT_ITEMACTION,
|
|
FLAGS,
|
|
OBJECT_SPOT01_MATOYAB,
|
|
sizeof(BgGateShutter),
|
|
(ActorFunc)BgGateShutter_Init,
|
|
(ActorFunc)BgGateShutter_Destroy,
|
|
(ActorFunc)BgGateShutter_Update,
|
|
(ActorFunc)BgGateShutter_Draw,
|
|
NULL,
|
|
};
|
|
|
|
void BgGateShutter_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|
BgGateShutter* this = (BgGateShutter*)thisx;
|
|
s32 pad[2];
|
|
CollisionHeader* colHeader = NULL;
|
|
|
|
DynaPolyActor_Init(&this->dyna, DPM_UNK);
|
|
CollisionHeader_GetVirtual(&gKakarikoGuardGateCol, &colHeader);
|
|
this->dyna.bgId = DynaPoly_SetBgActor(globalCtx, &globalCtx->colCtx.dyna, thisx, colHeader);
|
|
this->somePos.x = thisx->world.pos.x;
|
|
this->somePos.y = thisx->world.pos.y;
|
|
this->somePos.z = thisx->world.pos.z;
|
|
if (((gSaveContext.infTable[7] & 0x40) || (gSaveContext.eventChkInf[4] & 0x20)) &&
|
|
(globalCtx->sceneNum == SCENE_SPOT01)) {
|
|
thisx->world.pos.x = -89.0f;
|
|
thisx->world.pos.z = -1375.0f;
|
|
}
|
|
thisx->scale.x = 1.0f;
|
|
thisx->scale.y = 1.0f;
|
|
thisx->scale.z = 1.0f;
|
|
osSyncPrintf("\n\n");
|
|
osSyncPrintf(VT_FGCOL(GREEN) " ☆☆☆☆☆ 柵でたなぁ ☆☆☆☆☆ \n" VT_RST);
|
|
this->actionFunc = func_8087828C;
|
|
}
|
|
|
|
void BgGateShutter_Destroy(Actor* thisx, GlobalContext* globalCtx) {
|
|
BgGateShutter* this = (BgGateShutter*)thisx;
|
|
|
|
DynaPoly_DeleteBgActor(globalCtx, &globalCtx->colCtx.dyna, this->dyna.bgId);
|
|
}
|
|
|
|
void func_8087828C(BgGateShutter* this, GlobalContext* globalCtx) {
|
|
if (this->openingState == 1 && !(gSaveContext.infTable[7] & 0x40)) {
|
|
this->unk_178 = 2;
|
|
this->actionFunc = func_80878300;
|
|
} else if (this->openingState == 2) {
|
|
this->unk_178 = 2;
|
|
this->actionFunc = func_80878300;
|
|
} else if (this->openingState < 0) {
|
|
this->unk_178 = 2;
|
|
this->actionFunc = func_808783D4;
|
|
}
|
|
}
|
|
|
|
void func_80878300(BgGateShutter* this, GlobalContext* globalCtx) {
|
|
Actor* thisx = &this->dyna.actor;
|
|
|
|
if (this->unk_178 == 0) {
|
|
Audio_PlayActorSound2(thisx, NA_SE_EV_METALGATE_OPEN - SFX_FLAG);
|
|
thisx->world.pos.x -= 2.0f;
|
|
Math_ApproachF(&thisx->world.pos.z, -1375.0f, 0.8f, 0.3f);
|
|
if (thisx->world.pos.x < -89.0f) {
|
|
Audio_PlayActorSound2(thisx, NA_SE_EV_BRIDGE_OPEN_STOP);
|
|
this->unk_178 = 0x1E;
|
|
this->actionFunc = func_808783AC;
|
|
}
|
|
}
|
|
}
|
|
|
|
void func_808783AC(BgGateShutter* this, GlobalContext* globalCtx) {
|
|
if (this->unk_178 == 0) {
|
|
this->openingState = 0;
|
|
this->actionFunc = func_8087828C;
|
|
}
|
|
}
|
|
|
|
void func_808783D4(BgGateShutter* this, GlobalContext* globalCtx) {
|
|
Actor* thisx = &this->dyna.actor;
|
|
|
|
if (this->unk_178 == 0) {
|
|
Audio_PlayActorSound2(thisx, NA_SE_EV_METALGATE_OPEN - SFX_FLAG);
|
|
thisx->world.pos.x += 2.0f;
|
|
Math_ApproachF(&thisx->world.pos.z, -1350.0f, 0.8f, 0.3f);
|
|
if (thisx->world.pos.x > 90.0f) {
|
|
thisx->world.pos.x = 91.0f;
|
|
Audio_PlayActorSound2(thisx, NA_SE_EV_BRIDGE_OPEN_STOP);
|
|
this->unk_178 = 30;
|
|
this->actionFunc = func_808783AC;
|
|
}
|
|
}
|
|
}
|
|
|
|
void BgGateShutter_Update(Actor* thisx, GlobalContext* globalCtx) {
|
|
BgGateShutter* this = (BgGateShutter*)thisx;
|
|
|
|
if (this->unk_178 != 0) {
|
|
this->unk_178 -= 1;
|
|
}
|
|
this->actionFunc(this, globalCtx);
|
|
}
|
|
|
|
void BgGateShutter_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
|
OPEN_DISPS(globalCtx->state.gfxCtx, "../z_bg_gate_shutter.c", 323);
|
|
|
|
func_80093D18(globalCtx->state.gfxCtx);
|
|
|
|
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_bg_gate_shutter.c", 328),
|
|
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
|
gSPDisplayList(POLY_OPA_DISP++, gKakarikoGuardGateDL);
|
|
|
|
CLOSE_DISPS(globalCtx->state.gfxCtx, "../z_bg_gate_shutter.c", 333);
|
|
}
|