1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-07-16 04:44:44 +00:00

Decompiles z_bg_ingate (#301)

* Decompiles z_bg_ingate

	* BgIngate_SetupAction
	* BgIngate_Init
	* BgIngate_Destroy
	* BgIngate_Update
	* func_80892990
	* func_80892890
	* BgIngate_Draw
Removes unused asm's
Formats z_bg_ingate.c

* Addresses PR comments

* Fixes usage of cutscene id instead of regular scene

* Addresses PR comments
This commit is contained in:
i82orbom 2020-08-04 20:30:46 +02:00 committed by GitHub
parent 91299ed21f
commit 34c73dda62
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 91 additions and 293 deletions

View file

@ -16,9 +16,8 @@ void BgIngate_Update(Actor* thisx, GlobalContext* globalCtx);
void BgIngate_Draw(Actor* thisx, GlobalContext* globalCtx);
void func_80892890(BgIngate* this, GlobalContext* globalCtx);
void func_80892990(BgIngate* this, GlobalContext* globalCtx);
void BgIngate_DoNothing(BgIngate* this, GlobalContext* globalCtx);
/*
const ActorInit Bg_Ingate_InitVars = {
ACTOR_BG_INGATE,
ACTORTYPE_PROP,
@ -30,17 +29,93 @@ const ActorInit Bg_Ingate_InitVars = {
(ActorFunc)BgIngate_Update,
(ActorFunc)BgIngate_Draw,
};
*/
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Ingate/BgIngate_SetupAction.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Ingate/BgIngate_Init.s")
extern UNK_TYPE D_060011B8;
extern Gfx D_06001040[];
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Ingate/BgIngate_Destroy.s")
void BgIngate_SetupAction(BgIngate* this, BgIngateActionFunc actionFunc) {
this->actionFunc = actionFunc;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Ingate/func_80892890.s")
void BgIngate_Init(Actor* thisx, GlobalContext* globalCtx) {
BgIngate* this = THIS;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Ingate/func_80892990.s")
s32 pad;
s32 sp32 = 0;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Ingate/BgIngate_Update.s")
DynaPolyInfo_SetActorMove(&this->dyna, 0);
DynaPolyInfo_Alloc(&D_060011B8, &sp32);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Ingate/BgIngate_Draw.s")
this->dyna.dynaPolyId = DynaPolyInfo_RegisterActor(globalCtx, &globalCtx->colCtx.dyna, &this->dyna.actor, sp32);
if ((globalCtx->sceneNum != SCENE_SPOT20 || LINK_IS_CHILD) ||
(((gSaveContext.eventChkInf[1] & 0x100)) && (gSaveContext.cutsceneIndex != 0xFFF0))) {
Actor_Kill(&this->dyna.actor);
return;
}
Actor_SetScale(&this->dyna.actor, 0.1f);
if (((this->dyna.actor.params & 1) != 0) && ((gSaveContext.eventInf[0] & 0xF) == 6)) {
globalCtx->csCtx.frames = 0;
BgIngate_SetupAction(this, func_80892890);
} else {
BgIngate_SetupAction(this, BgIngate_DoNothing);
}
}
void BgIngate_Destroy(Actor* thisx, GlobalContext* globalCtx) {
BgIngate* this = THIS;
DynaPolyInfo_Free(globalCtx, &globalCtx->colCtx.dyna, this->dyna.dynaPolyId);
}
void func_80892890(BgIngate* this, GlobalContext* globalCtx) {
s32 phi0;
s16 phi1;
s16 csFrames;
if (globalCtx->csCtx.frames >= 50) {
phi0 = 0x4000;
if ((this->dyna.actor.params & 2) == 0) {
phi0 = -0x4000;
}
this->dyna.actor.shape.rot.y = this->dyna.actor.posRot.rot.y + phi0;
BgIngate_SetupAction(this, &BgIngate_DoNothing);
} else if (globalCtx->csCtx.frames >= 10) {
csFrames = globalCtx->csCtx.frames - 10;
csFrames *= 400;
phi1 = csFrames;
if (csFrames > 0x4000) {
csFrames = 0x4000;
}
csFrames = (Math_Sins(csFrames) * 16384.0f);
phi1 = csFrames;
if ((this->dyna.actor.params & 2) == 0) {
phi1 = -phi1;
}
this->dyna.actor.shape.rot.y = this->dyna.actor.posRot.rot.y + phi1;
}
}
void BgIngate_DoNothing(BgIngate* this, GlobalContext* globalCtx) {}
void BgIngate_Update(Actor* thisx, GlobalContext* globalCtx) {
BgIngate* this = THIS;
this->actionFunc(this, globalCtx);
}
void BgIngate_Draw(Actor* thisx, GlobalContext* globalCtx) {
GraphicsContext* gfxCtx = globalCtx->state.gfxCtx;
Gfx* dispRefs[4];
Graph_OpenDisps(dispRefs, globalCtx->state.gfxCtx, "../z_bg_ingate.c", 240);
func_80093D18(globalCtx->state.gfxCtx);
gSPMatrix(gfxCtx->polyOpa.p++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_bg_ingate.c", 245),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(gfxCtx->polyOpa.p++, D_06001040);
Graph_CloseDisps(dispRefs, globalCtx->state.gfxCtx, "../z_bg_ingate.c", 250);
}