summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRoman971 <32455037+Roman971@users.noreply.github.com>2020-03-23 23:19:57 +0100
committerGitHub <noreply@github.com>2020-03-23 23:19:57 +0100
commitc2b9feb5d36cee4f400d5346eff8986ff3d1b7e0 (patch)
tree7a04fb943c4b76e5179c5ac9ce57ac2368f28e17 /src
parent78a4684e3241f5c40cea8fb5437e6c36637df8ad (diff)
parent1abc15910fe86f90c1839d3587239fb3bd5156be (diff)
Merge pull request #27 from ethteck/ovl_Bg_Haka_Megane
Decompiled ovl_Bg_Haka_Megane
Diffstat (limited to 'src')
-rw-r--r--src/overlays/actors/ovl_Bg_Haka_Megane/z_bg_haka_megane.c116
-rw-r--r--src/overlays/actors/ovl_Bg_Haka_Megane/z_bg_haka_megane.h7
2 files changed, 107 insertions, 16 deletions
diff --git a/src/overlays/actors/ovl_Bg_Haka_Megane/z_bg_haka_megane.c b/src/overlays/actors/ovl_Bg_Haka_Megane/z_bg_haka_megane.c
index 2454dc22e..3264890c5 100644
--- a/src/overlays/actors/ovl_Bg_Haka_Megane/z_bg_haka_megane.c
+++ b/src/overlays/actors/ovl_Bg_Haka_Megane/z_bg_haka_megane.c
@@ -1,15 +1,24 @@
+/*
+ * File: z_bg_haka_megane.c
+ * Overlay: ovl_Bg_Haka_Megane
+ * Description:
+ */
+
#include "z_bg_haka_megane.h"
#define ROOM 0x00
#define FLAGS 0x000000B0
-void BgHakaMegane_Init(BgHakaMegane* this, GlobalContext* globalCtx);
-void BgHakaMegane_Destroy(BgHakaMegane* this, GlobalContext* globalCtx);
-void BgHakaMegane_Update(BgHakaMegane* this, GlobalContext* globalCtx);
+static void BgHakaMegane_Init(BgHakaMegane* this, GlobalContext* globalCtx);
+static void BgHakaMegane_Destroy(BgHakaMegane* this, GlobalContext* globalCtx);
+static void BgHakaMegane_Update(BgHakaMegane* this, GlobalContext* globalCtx);
-/*
-const ActorInit Bg_Haka_Megane_InitVars =
-{
+static void func_8087DB24(BgHakaMegane* this, GlobalContext* globalCtx);
+static void func_8087DBF0(BgHakaMegane* this, GlobalContext* globalCtx);
+static void func_8087DC64(BgHakaMegane* this, GlobalContext* globalCtx);
+static void func_8087DC94(BgHakaMegane* this, GlobalContext* globalCtx);
+
+const ActorInit Bg_Haka_Megane_InitVars = {
ACTOR_BG_HAKA_MEGANE,
ACTORTYPE_PROP,
ROOM,
@@ -21,17 +30,96 @@ 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")
+static InitChainEntry initChain[] = {
+ ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP),
+};
+
+static UNK_TYPE collisions[] = {
+ 0x06001830, 0x06001AB8, 0x00000000, 0x06004330, 0x060044D0, 0x00000000, 0x06004780,
+ 0x06004940, 0x00000000, 0x06004B00, 0x00000000, 0x06004CC0, 0x00000000,
+};
+
+static UNK_TYPE dlists[] = {
+ 0x06001060, 0x06001920, 0x060003F0, 0x060040F0, 0x060043B0, 0x06001120, 0x060045A0,
+ 0x060047F0, 0x060018F0, 0x060049B0, 0x06003CF0, 0x06004B70, 0x06002ED0,
+};
+
+extern UNK_TYPE D_06001250;
+
+static void BgHakaMegane_Init(BgHakaMegane* this, GlobalContext* globalCtx) {
+ Actor* thisx = &this->dyna.actor;
+
+ 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;
+ }
+}
+
+static void BgHakaMegane_Destroy(BgHakaMegane* this, GlobalContext* globalCtx) {
+ DynaPolyInfo_Free(globalCtx, &globalCtx->colCtx.dyna, this->dyna.dynaPolyId);
+}
+
+static void func_8087DB24(BgHakaMegane* this, GlobalContext* globalCtx) {
+ s32 localC;
+ UNK_TYPE collision;
+
+ if (Object_IsLoaded(&globalCtx->objectCtx, this->objBankIndex)) {
+ this->dyna.actor.objBankIndex = this->objBankIndex;
+ this->dyna.actor.draw = (ActorFunc)func_8087DC94;
+ Actor_SetObjectDependency(globalCtx, &this->dyna.actor);
+ if (globalCtx->roomCtx.curRoom.showInvisActors) {
+ this->actionFunc = (ActorFunc)func_8087DBF0;
+ collision = collisions[this->dyna.actor.params];
+ if (collision != 0) {
+ DynaPolyInfo_Alloc(collision, &localC);
+ this->dyna.dynaPolyId =
+ DynaPolyInfo_RegisterActor(globalCtx, &globalCtx->colCtx.dyna, &this->dyna.actor, localC);
+ }
+ } else {
+ this->actionFunc = (ActorFunc)func_8087DC64;
+ }
+ }
+}
+
+static 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 &= ~0x80;
+ func_8003EC50(globalCtx, &globalCtx->colCtx.dyna, this->dyna.dynaPolyId);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Haka_Megane/func_8087DB24.s")
+static void func_8087DC64(BgHakaMegane* this, GlobalContext* globalCtx) {
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Haka_Megane/func_8087DBF0.s")
+static void BgHakaMegane_Update(BgHakaMegane* this, GlobalContext* globalCtx) {
+ this->actionFunc(this, globalCtx);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Haka_Megane/func_8087DC64.s")
+static void func_8087DC94(BgHakaMegane* this, GlobalContext* globalCtx) {
+ Actor* thisx = &this->dyna.actor;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Haka_Megane/BgHakaMegane_Update.s")
+ if ((thisx->flags & 0x80) == 0x80) {
+ Draw_DListXlu(globalCtx, dlists[thisx->params]);
+ } else {
+ Draw_DListOpa(globalCtx, dlists[thisx->params]);
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Haka_Megane/func_8087DC94.s")
+ if (thisx->params == 0) {
+ Draw_DListXlu(globalCtx, &D_06001250);
+ }
+}
diff --git a/src/overlays/actors/ovl_Bg_Haka_Megane/z_bg_haka_megane.h b/src/overlays/actors/ovl_Bg_Haka_Megane/z_bg_haka_megane.h
index 06fb457b6..18d029aeb 100644
--- a/src/overlays/actors/ovl_Bg_Haka_Megane/z_bg_haka_megane.h
+++ b/src/overlays/actors/ovl_Bg_Haka_Megane/z_bg_haka_megane.h
@@ -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;