summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLucas Shaw <49287729+shawlucas@users.noreply.github.com>2022-01-04 00:10:13 -0500
committerGitHub <noreply@github.com>2022-01-04 05:10:13 +0000
commit005fd64e41a633e00a1fd8117de903889bd5edda (patch)
treeb76c7a9f186f9b8fcf329ccd8accda3bd1fa78c1 /src
parent78cb55ce97721147594f69218d9fb19436b292a9 (diff)
ovl_Obj_Dowsing ok (#504)
* ovl_Obj_Dowsing OK * update spec * params pack * made suggested changes
Diffstat (limited to 'src')
-rw-r--r--src/overlays/actors/ovl_Obj_Dowsing/z_obj_dowsing.c44
-rw-r--r--src/overlays/actors/ovl_Obj_Dowsing/z_obj_dowsing.h9
2 files changed, 46 insertions, 7 deletions
diff --git a/src/overlays/actors/ovl_Obj_Dowsing/z_obj_dowsing.c b/src/overlays/actors/ovl_Obj_Dowsing/z_obj_dowsing.c
index 98f66c014..60da4d5b5 100644
--- a/src/overlays/actors/ovl_Obj_Dowsing/z_obj_dowsing.c
+++ b/src/overlays/actors/ovl_Obj_Dowsing/z_obj_dowsing.c
@@ -14,7 +14,9 @@ void ObjDowsing_Init(Actor* thisx, GlobalContext* globalCtx);
void ObjDowsing_Destroy(Actor* thisx, GlobalContext* globalCtx);
void ObjDowsing_Update(Actor* thisx, GlobalContext* globalCtx);
-#if 0
+s32 ObjDowsing_GetFlag(ObjDowsing* this, GlobalContext* globalCtx);
+s32 ObjDowsing_CheckValidSpawn(ObjDowsing* this, GlobalContext* globalCtx);
+
const ActorInit Obj_Dowsing_InitVars = {
ACTOR_OBJ_DOWSING,
ACTORCAT_ITEMACTION,
@@ -27,14 +29,42 @@ const ActorInit Obj_Dowsing_InitVars = {
(ActorFunc)NULL,
};
-#endif
+s32 ObjDowsing_GetFlag(ObjDowsing* this, GlobalContext* globalCtx) {
+ s32 type = DOWSING_GET_TYPE(&this->actor);
+ s32 flag = DOWSING_GET_FLAG(&this->actor);
+
+ if (type == DOWSING_COLLECTIBLE) {
+ return Actor_GetCollectibleFlag(globalCtx, flag);
+ } else if (type == DOWSING_CHEST) {
+ return Actor_GetChestFlag(globalCtx, flag);
+ } else if (type == DOWSING_SWITCH) {
+ return Flags_GetSwitch(globalCtx, flag);
+ } else {
+ return 0;
+ }
+}
+
+s32 ObjDowsing_CheckValidSpawn(ObjDowsing* this, GlobalContext* globalCtx) {
+ if (ObjDowsing_GetFlag(this, globalCtx)) {
+ Actor_MarkForDeath(&this->actor);
+ return true;
+ }
+ return false;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Dowsing/func_80B23D50.s")
+void ObjDowsing_Init(Actor* thisx, GlobalContext* globalCtx) {
+ ObjDowsing* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Dowsing/func_80B23DD0.s")
+ ObjDowsing_CheckValidSpawn(this, globalCtx);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Dowsing/ObjDowsing_Init.s")
+void ObjDowsing_Destroy(Actor* thisx, GlobalContext* globalCtx) {
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Dowsing/ObjDowsing_Destroy.s")
+void ObjDowsing_Update(Actor* thisx, GlobalContext* globalCtx) {
+ ObjDowsing* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Dowsing/ObjDowsing_Update.s")
+ if (!ObjDowsing_CheckValidSpawn(this, globalCtx)) {
+ func_800B8C50(thisx, globalCtx);
+ }
+}
diff --git a/src/overlays/actors/ovl_Obj_Dowsing/z_obj_dowsing.h b/src/overlays/actors/ovl_Obj_Dowsing/z_obj_dowsing.h
index 5a2982cab..7b1125a28 100644
--- a/src/overlays/actors/ovl_Obj_Dowsing/z_obj_dowsing.h
+++ b/src/overlays/actors/ovl_Obj_Dowsing/z_obj_dowsing.h
@@ -3,8 +3,17 @@
#include "global.h"
+#define DOWSING_GET_TYPE(thisx) ((thisx)->params >> 7)
+#define DOWSING_GET_FLAG(thisx) ((thisx)->params & 0x7F)
+
struct ObjDowsing;
+typedef enum {
+ /* 1 */ DOWSING_COLLECTIBLE = 1,
+ /* 2 */ DOWSING_CHEST,
+ /* 3 */ DOWSING_SWITCH
+} DowsingType;
+
typedef struct ObjDowsing {
/* 0x000 */ Actor actor;
} ObjDowsing; // size = 0x144