From d66b964576ad7e561572e8479d8a4361946b82e4 Mon Sep 17 00:00:00 2001 From: Nicholas Sturgeon Date: Sun, 5 Feb 2023 13:02:31 -0500 Subject: [PATCH 01/12] Implement func_809613B0 --- src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c index bda4dc258..be522ae51 100644 --- a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c +++ b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c @@ -17,6 +17,8 @@ void func_809613C4(ObjMure2* this, PlayState* play); void func_809613FC(ObjMure2* this, PlayState* play); void func_80961490(ObjMure2* this, PlayState* play); +void func_809613B0(ObjMure2* this); + #if 0 ActorInit Obj_Mure2_InitVars = { ACTOR_OBJ_MURE2, @@ -57,7 +59,9 @@ extern InitChainEntry D_809615F4[]; #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Mure2/ObjMure2_Init.s") -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Mure2/func_809613B0.s") +void func_809613B0(ObjMure2* this) { + this->actionFunc = func_809613C4; +} #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Mure2/func_809613C4.s") From 19d65e745df695af1430bc23ecdb25191f0c208c Mon Sep 17 00:00:00 2001 From: Nicholas Sturgeon Date: Sun, 5 Feb 2023 13:08:17 -0500 Subject: [PATCH 02/12] Implement ObjMure2_Init --- src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c index be522ae51..d968c089e 100644 --- a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c +++ b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c @@ -57,7 +57,14 @@ extern InitChainEntry D_809615F4[]; #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Mure2/func_809612BC.s") -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Mure2/ObjMure2_Init.s") +void ObjMure2_Init(Actor* thisx, PlayState* play) { + ObjMure2* this = THIS; + Actor_ProcessInitChain(&this->actor, D_809615F4); + if (play->csCtx.state != 0) { + this->actor.uncullZoneForward += 1200.0f; + } + func_809613B0(this); +} void func_809613B0(ObjMure2* this) { this->actionFunc = func_809613C4; From e872fdb129362b4a868c8fc8ae45d644ab100f6c Mon Sep 17 00:00:00 2001 From: Nicholas Sturgeon Date: Sun, 5 Feb 2023 13:13:06 -0500 Subject: [PATCH 03/12] Implement ObjMure2_Update --- src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c | 10 +++++++++- src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.h | 5 +++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c index d968c089e..c47c87e72 100644 --- a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c +++ b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c @@ -80,4 +80,12 @@ void func_809613B0(ObjMure2* this) { #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Mure2/func_80961490.s") -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Mure2/ObjMure2_Update.s") +void ObjMure2_Update(Actor* thisx, PlayState* play) { + ObjMure2* this = THIS; + if (play->csCtx.state == 0) { + this->unk_17C = 1.0f; + } else { + this->unk_17C = 4.0f; + } + this->actionFunc(this, play); +} diff --git a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.h b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.h index f70d45f1e..b5c5b1329 100644 --- a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.h +++ b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.h @@ -10,7 +10,8 @@ typedef void (*ObjMure2ActionFunc)(struct ObjMure2*, PlayState*); typedef struct ObjMure2 { /* 0x000 */ Actor actor; /* 0x144 */ ObjMure2ActionFunc actionFunc; - /* 0x148 */ char unk_148[0x38]; -} ObjMure2; // size = 0x180 + /* 0x148 */ char pad_148[0x34]; /* maybe part of actionFunc[0xE]? */ + /* 0x17C */ f32 unk_17C; /* inferred */ +} ObjMure2; /* size = 0x180 */ #endif // Z_OBJ_MURE2_H From e7b828ff81059f9a2f387976934200d09bb442f5 Mon Sep 17 00:00:00 2001 From: Nicholas Sturgeon Date: Sun, 5 Feb 2023 13:15:55 -0500 Subject: [PATCH 04/12] Implement func_809613E8 --- src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c index c47c87e72..fc3ce98ca 100644 --- a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c +++ b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c @@ -18,6 +18,7 @@ void func_809613FC(ObjMure2* this, PlayState* play); void func_80961490(ObjMure2* this, PlayState* play); void func_809613B0(ObjMure2* this); +void func_809613E8(ObjMure2* this); #if 0 ActorInit Obj_Mure2_InitVars = { @@ -72,7 +73,9 @@ void func_809613B0(ObjMure2* this) { #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Mure2/func_809613C4.s") -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Mure2/func_809613E8.s") +void func_809613E8(ObjMure2* this) { + this->actionFunc = func_809613FC; +} #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Mure2/func_809613FC.s") From c86ec32e63ca2ca0592dedbf7f59279884a67b46 Mon Sep 17 00:00:00 2001 From: Nicholas Sturgeon Date: Sun, 5 Feb 2023 13:17:24 -0500 Subject: [PATCH 05/12] Implement func_809613C4 --- src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c index fc3ce98ca..64345fcb3 100644 --- a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c +++ b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c @@ -71,7 +71,9 @@ void func_809613B0(ObjMure2* this) { this->actionFunc = func_809613C4; } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Mure2/func_809613C4.s") +void func_809613C4(ObjMure2 *this, PlayState *play) { + func_809613E8(this); +} void func_809613E8(ObjMure2* this) { this->actionFunc = func_809613FC; From 070579049dc09183214fada7d59536de6bf9d775 Mon Sep 17 00:00:00 2001 From: Nicholas Sturgeon Date: Sun, 5 Feb 2023 13:19:25 -0500 Subject: [PATCH 06/12] Implement func_8096147C --- src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c index 64345fcb3..d7021a813 100644 --- a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c +++ b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c @@ -19,6 +19,7 @@ void func_80961490(ObjMure2* this, PlayState* play); void func_809613B0(ObjMure2* this); void func_809613E8(ObjMure2* this); +void func_8096147C(ObjMure2* this); #if 0 ActorInit Obj_Mure2_InitVars = { @@ -81,7 +82,9 @@ void func_809613E8(ObjMure2* this) { #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Mure2/func_809613FC.s") -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Mure2/func_8096147C.s") +void func_8096147C(ObjMure2* this) { + this->actionFunc = func_80961490; +} #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Mure2/func_80961490.s") From 657d02a4e078c30cbe7eca64c642e5ee48466579 Mon Sep 17 00:00:00 2001 From: Nicholas Sturgeon Date: Sun, 5 Feb 2023 13:22:52 -0500 Subject: [PATCH 07/12] Implement func_80961490 --- .../actors/ovl_Obj_Mure2/z_obj_mure2.c | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c index d7021a813..e77c3bf07 100644 --- a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c +++ b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c @@ -17,9 +17,14 @@ void func_809613C4(ObjMure2* this, PlayState* play); void func_809613FC(ObjMure2* this, PlayState* play); void func_80961490(ObjMure2* this, PlayState* play); -void func_809613B0(ObjMure2* this); -void func_809613E8(ObjMure2* this); -void func_8096147C(ObjMure2* this); +void func_809613B0(ObjMure2*); +void func_809613E8(ObjMure2*); +void func_8096104C(ObjMure2*, PlayState*); +void func_8096147C(ObjMure2*); +void func_809611BC(ObjMure2*, PlayState*); +void func_809612BC(ObjMure2*); + +extern f32 D_8096159C[]; #if 0 ActorInit Obj_Mure2_InitVars = { @@ -86,7 +91,16 @@ void func_8096147C(ObjMure2* this) { this->actionFunc = func_80961490; } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Mure2/func_80961490.s") +void func_80961490(ObjMure2* this, PlayState* play) { + func_809612BC(this); + + if ((D_8096159C[this->actor.params & 3] * this->unk_17C) <= + Math3D_XZLengthSquared(this->actor.projectedPos.x, this->actor.projectedPos.z)) { + this->actor.flags &= ~0x10; + func_809611BC(this, play); + func_809613E8(this); + } +} void ObjMure2_Update(Actor* thisx, PlayState* play) { ObjMure2* this = THIS; From 7d14af83acdc4b7b572f08ea387047795fce9f06 Mon Sep 17 00:00:00 2001 From: Nicholas Sturgeon Date: Sun, 5 Feb 2023 13:23:57 -0500 Subject: [PATCH 08/12] Implement func_809613FC --- src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c index e77c3bf07..b4eaaf2da 100644 --- a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c +++ b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c @@ -24,6 +24,7 @@ void func_8096147C(ObjMure2*); void func_809611BC(ObjMure2*, PlayState*); void func_809612BC(ObjMure2*); +extern f32 D_80961590[]; extern f32 D_8096159C[]; #if 0 @@ -85,7 +86,14 @@ void func_809613E8(ObjMure2* this) { this->actionFunc = func_809613FC; } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Mure2/func_809613FC.s") +void func_809613FC(ObjMure2* this, PlayState* play) { + if (Math3D_XZLengthSquared(this->actor.projectedPos.x, this->actor.projectedPos.z) < + D_80961590[this->actor.params & 3] * this->unk_17C) { + this->actor.flags |= 0x10; + func_8096104C(this, play); + func_8096147C(this); + } +} void func_8096147C(ObjMure2* this) { this->actionFunc = func_80961490; From e1eb7ecbc3b15e3831326f98241253fd2cc075b0 Mon Sep 17 00:00:00 2001 From: Nicholas Sturgeon Date: Sun, 5 Feb 2023 13:24:51 -0500 Subject: [PATCH 09/12] Implement func_80961018 --- src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c index b4eaaf2da..a4924187a 100644 --- a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c +++ b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c @@ -57,7 +57,17 @@ extern InitChainEntry D_809615F4[]; #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Mure2/func_80960F0C.s") -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Mure2/func_80961018.s") +void func_80961018(s16* arg0, ObjMure2* arg1) { + s32 value = arg1->actor.params & 3; + s32 temp_a2 = (arg1->actor.params >> 8) & 0x1F; + + if (value == 2) { + *arg0 = temp_a2 * 0x10; + return; + } + + *arg0 = temp_a2 << 8; +} #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Mure2/func_8096104C.s") From 3e9dcb018b41ff881ae1c382500512a0fa49a78e Mon Sep 17 00:00:00 2001 From: Nicholas Sturgeon Date: Sun, 5 Feb 2023 13:28:19 -0500 Subject: [PATCH 10/12] Implement func_809611BC --- .../actors/ovl_Obj_Mure2/z_obj_mure2.c | 25 ++++++++++++++++++- .../actors/ovl_Obj_Mure2/z_obj_mure2.h | 4 ++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c index a4924187a..0f57deea3 100644 --- a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c +++ b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c @@ -26,6 +26,7 @@ void func_809612BC(ObjMure2*); extern f32 D_80961590[]; extern f32 D_8096159C[]; +extern s16 D_809615A8[]; #if 0 ActorInit Obj_Mure2_InitVars = { @@ -71,7 +72,29 @@ void func_80961018(s16* arg0, ObjMure2* arg1) { #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Mure2/func_8096104C.s") -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Mure2/func_809611BC.s") +void func_809611BC(ObjMure2* arg0, PlayState* arg1) { + s16 var_v0 = D_809615A8[arg0->actor.params & 3]; + s32 var_s2 = 0; + + if (var_v0 > 0) { + do { + if (!((arg0->unk_178 >> var_s2) & 1)) { + if (arg0->unk_148[var_s2] != NULL) { + if (Actor_HasParent(arg0->unk_148[var_s2], arg1) != 0) { + arg0->unk_178 |= 1 << var_s2; + } else { + Actor_Kill(arg0->unk_148[var_s2]); + } + arg0->unk_148[var_s2] = NULL; + } + } else { + arg0->unk_148[var_s2] = NULL; + } + + var_v0 = D_809615A8[arg0->actor.params & 3]; + } while (++var_s2 < var_v0); + } +} #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Mure2/func_809612BC.s") diff --git a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.h b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.h index b5c5b1329..12fdb387e 100644 --- a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.h +++ b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.h @@ -10,7 +10,9 @@ typedef void (*ObjMure2ActionFunc)(struct ObjMure2*, PlayState*); typedef struct ObjMure2 { /* 0x000 */ Actor actor; /* 0x144 */ ObjMure2ActionFunc actionFunc; - /* 0x148 */ char pad_148[0x34]; /* maybe part of actionFunc[0xE]? */ + /* 0x148 */ Actor* unk_148[0xC]; /* inferred */ + /* 0x178 */ u16 unk_178; /* inferred */ + /* 0x17A */ char pad_17A[2]; /* 0x17C */ f32 unk_17C; /* inferred */ } ObjMure2; /* size = 0x180 */ From 4282066d7d4ae3afcf2fb94b17e91d4e2da66c3a Mon Sep 17 00:00:00 2001 From: Nicholas Sturgeon Date: Sun, 5 Feb 2023 13:28:57 -0500 Subject: [PATCH 11/12] Implement func_809612BC --- .../actors/ovl_Obj_Mure2/z_obj_mure2.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c index 0f57deea3..9e03088d4 100644 --- a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c +++ b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c @@ -96,7 +96,23 @@ void func_809611BC(ObjMure2* arg0, PlayState* arg1) { } } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Mure2/func_809612BC.s") +void func_809612BC(ObjMure2* arg0) { + s32 var_v0 = 0; + s16 var_v1 = D_809615A8[arg0->actor.params & 3]; + + if (var_v1 > 0) { + do { + if (arg0->unk_148[var_v0] != NULL) { + if (!(((s32)arg0->unk_178 >> var_v0) & 1) && (arg0->unk_148[var_v0]->update == NULL)) { + arg0->unk_178 = arg0->unk_178 | (1 << var_v0); + arg0->unk_148[var_v0] = NULL; + } + } + + var_v1 = D_809615A8[arg0->actor.params & 3]; + } while (++var_v0 < var_v1); + } +} void ObjMure2_Init(Actor* thisx, PlayState* play) { ObjMure2* this = THIS; From 63b21ff81db5167759bb4b59bcf854aa4367b7ce Mon Sep 17 00:00:00 2001 From: Nicholas Sturgeon Date: Sun, 5 Feb 2023 13:31:12 -0500 Subject: [PATCH 12/12] Run formatting --- src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c index 9e03088d4..4fd0d1361 100644 --- a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c +++ b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c @@ -127,7 +127,7 @@ void func_809613B0(ObjMure2* this) { this->actionFunc = func_809613C4; } -void func_809613C4(ObjMure2 *this, PlayState *play) { +void func_809613C4(ObjMure2* this, PlayState* play) { func_809613E8(this); }