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

Almost done

This commit is contained in:
Ethan Roseman 2020-03-23 01:31:03 -04:00
parent d879f2acb0
commit 4c3b764461
10 changed files with 101 additions and 184 deletions

View file

@ -7,7 +7,11 @@ void BgHakaMegane_Init(BgHakaMegane* this, GlobalContext* globalCtx);
void BgHakaMegane_Destroy(BgHakaMegane* this, GlobalContext* globalCtx);
void BgHakaMegane_Update(BgHakaMegane* this, GlobalContext* globalCtx);
/*
void func_8087DB24(BgHakaMegane* this, GlobalContext* globalCtx);
void func_8087DBF0(BgHakaMegane* this, GlobalContext* globalCtx);
void func_8087DC64(BgHakaMegane* this, GlobalContext* globalCtx);
void func_8087DC94(BgHakaMegane* this, GlobalContext* globalCtx);
const ActorInit Bg_Haka_Megane_InitVars =
{
ACTOR_BG_HAKA_MEGANE,
@ -21,17 +25,97 @@ const ActorInit Bg_Haka_Megane_InitVars =
(ActorFunc)BgHakaMegane_Update,
NULL,
};
*/
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Haka_Megane/BgHakaMegane_Init.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Haka_Megane/BgHakaMegane_Destroy.s")
InitChainEntry initChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP),
};
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Haka_Megane/func_8087DB24.s")
UNK_TYPE D_8087DD54[] = {
0x06001830, 0x06001AB8, 0x00000000, 0x06004330, 0x060044D0, 0x00000000, 0x06004780,
0x06004940, 0x00000000, 0x06004B00, 0x00000000, 0x06004CC0, 0x00000000,
};
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Haka_Megane/func_8087DBF0.s")
UNK_TYPE D_8087DD88[] = {
0x06001060, 0x06001920, 0x060003F0, 0x060040F0, 0x060043B0, 0x06001120, 0x060045A0,
0x060047F0, 0x060018F0, 0x060049B0, 0x06003CF0, 0x06004B70, 0x06002ED0, 0x00000000,
};
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Haka_Megane/func_8087DC64.s")
extern UNK_TYPE D_06001250;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Haka_Megane/BgHakaMegane_Update.s")
void BgHakaMegane_Init(BgHakaMegane* this, GlobalContext* globalCtx) {
Actor* thisx = &this->dyna.actor;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Haka_Megane/func_8087DC94.s")
Actor_ProcessInitChain(thisx, initChain);
DynaPolyInfo_SetActorMove(thisx, 0);
if (thisx->params < 3) {
this->objBankIndex = Object_GetIndex(&globalCtx->objectCtx, OBJECT_HAKACH_OBJECTS);
} else {
this->objBankIndex = Object_GetIndex(&globalCtx->objectCtx, OBJECT_HAKA_OBJECTS);
}
if (this->objBankIndex < 0) {
Actor_Kill(thisx);
} else {
this->actionFunc = (ActorFunc)func_8087DB24;
}
}
void BgHakaMegane_Destroy(BgHakaMegane* this, GlobalContext* globalCtx) {
DynaPolyInfo_Free(globalCtx, &globalCtx->colCtx.dyna, this->dyna.dynaPolyId);
}
void func_8087DB24(BgHakaMegane* this, GlobalContext* globalCtx) {
Actor* thisx = &this->dyna.actor;
s32 local_c;
u32 collision;
if (Object_IsLoaded(&globalCtx->objectCtx, this->objBankIndex)) {
thisx->draw = (ActorFunc)func_8087DC94;
thisx->objBankIndex = this->objBankIndex;
Actor_SetObjectDependency(globalCtx, thisx);
if (globalCtx->roomCtx.curRoom.showInvisActors) {
this->actionFunc = (ActorFunc)func_8087DBF0;
collision = D_8087DD54[thisx->params];
if (collision != 0) {
DynaPolyInfo_Alloc(&collision, &local_c);
this->dyna.dynaPolyId = DynaPolyInfo_RegisterActor(globalCtx, &globalCtx->colCtx.dyna, thisx, local_c);
}
} else {
this->actionFunc = (ActorFunc)func_8087DC64;
}
}
}
void func_8087DBF0(BgHakaMegane* this, GlobalContext* globalCtx) {
Actor* thisx = &this->dyna.actor;
if (globalCtx->actorCtx.unk_03 != 0) {
thisx->flags |= 0x80;
func_8003EBF8(globalCtx, &globalCtx->colCtx.dyna, this->dyna.dynaPolyId);
} else {
thisx->flags &= -0x81;
func_8003EC50(globalCtx, &globalCtx->colCtx.dyna, this->dyna.dynaPolyId);
}
}
void func_8087DC64(BgHakaMegane* this, GlobalContext* globalCtx) {
}
void BgHakaMegane_Update(BgHakaMegane* this, GlobalContext* globalCtx) {
this->actionFunc(this, globalCtx);
}
void func_8087DC94(BgHakaMegane* this, GlobalContext* globalCtx) {
Actor* thisx = &this->dyna.actor;
if ((thisx->flags & 0x80) == 0x80) {
Draw_DListXlu(globalCtx, D_8087DD88[thisx->params]);
} else {
Draw_DListOpa(globalCtx, D_8087DD88[thisx->params]);
}
if (thisx->params == 0) {
Draw_DListXlu(globalCtx, &D_06001250);
}
}

View file

@ -5,8 +5,11 @@
#include <global.h>
typedef struct {
/* 0x0000 */ Actor actor;
/* 0x014C */ char unk_14C[0x20];
/* 0x0000 */ DynaPolyActor dyna;
/* 0x0164 */ ActorFunc actionFunc;
/* 0x0168 */ char unk_168[0x1];
/* 0x0169 */ s8 objBankIndex;
/* 0x016A */ char unk_16A[0x2];
} BgHakaMegane; // size = 0x016C
extern const ActorInit Bg_Haka_Megane_InitVars;