summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authori82orbom <mariottf2@gmail.com>2020-08-24 05:17:47 +0200
committerGitHub <noreply@github.com>2020-08-23 23:17:47 -0400
commit9054feeefd3fe17c460656b5832dbca11229ad19 (patch)
tree832c1b72a6a4954f96db680803577795cd749c47 /src
parentb78a777216ba8e0ac9f9da3609348fab8c97699d (diff)
Decompiles z_bg_dodoago.c (#334)
* Starts decompiling z_bg_dodoago.c * Removes data * * BgDodoago_SetupAction * * BgDodoago_Destroy * * func_80872288 * * BgDodoago_Draw * * func_80871A08 * * BgDodoago_Init * WIP * * func_80871CF4 * * func_80871CF4 * WIP * * BgDodoago_Update * Finishes z_bg_dodoago * Addresses PR comments * Addresses PR comments #2 * Removes Setup forward declared function * Addresses PR comments #3 Co-authored-by: i82orbom <i82orbom i82orbom@github>
Diffstat (limited to 'src')
-rw-r--r--src/overlays/actors/ovl_Bg_Dodoago/z_bg_dodoago.c257
-rw-r--r--src/overlays/actors/ovl_Bg_Dodoago/z_bg_dodoago.h3
-rw-r--r--src/overlays/actors/ovl_En_Bom/z_en_bom.h2
3 files changed, 247 insertions, 15 deletions
diff --git a/src/overlays/actors/ovl_Bg_Dodoago/z_bg_dodoago.c b/src/overlays/actors/ovl_Bg_Dodoago/z_bg_dodoago.c
index d390ac62f..2fbc87525 100644
--- a/src/overlays/actors/ovl_Bg_Dodoago/z_bg_dodoago.c
+++ b/src/overlays/actors/ovl_Bg_Dodoago/z_bg_dodoago.c
@@ -5,6 +5,7 @@
*/
#include "z_bg_dodoago.h"
+#include "overlays/actors/ovl_En_Bom/z_en_bom.h"
#define FLAGS 0x00000000
@@ -15,13 +16,11 @@ void BgDodoago_Destroy(Actor* thisx, GlobalContext* globalCtx);
void BgDodoago_Update(Actor* thisx, GlobalContext* globalCtx);
void BgDodoago_Draw(Actor* thisx, GlobalContext* globalCtx);
-// void func_80871A08(Vec3f* vec, GlobalContext* globalCtx); // Not 100% sure
void func_80871CF4(BgDodoago* this, GlobalContext* globalCtx);
void func_80871FB8(BgDodoago* this, GlobalContext* globalCtx);
void func_8087227C(BgDodoago* this, GlobalContext* globalCtx);
void func_80872288(BgDodoago* this, GlobalContext* globalCtx);
-/*
const ActorInit Bg_Dodoago_InitVars = {
ACTOR_BG_DODOAGO,
ACTORTYPE_BG,
@@ -33,23 +32,255 @@ const ActorInit Bg_Dodoago_InitVars = {
(ActorFunc)BgDodoago_Update,
(ActorFunc)BgDodoago_Draw,
};
-*/
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Dodoago/BgDodoago_SetupAction.s")
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Dodoago/func_80871A08.s")
+static ColliderCylinderInit sColCylinderInit0 = {
+ { COLTYPE_UNK10, 0x00, 0x39, 0x00, 0x00, COLSHAPE_CYLINDER },
+ { 0x02, { 0x00000000, 0x00, 0x00 }, { 0xFFCFFFFF, 0x00, 0x00 }, 0x00, 0x01, 0x00 },
+ { 80, 30, 80, { 0, 0, 0 } },
+};
+
+static ColliderCylinderInit sColCylinderInit1 = {
+ { COLTYPE_UNK10, 0x00, 0x00, 0x3D, 0x20, COLSHAPE_CYLINDER },
+ { 0x02, { 0x00000000, 0x00, 0x00 }, { 0x00000000, 0x00, 0x00 }, 0x00, 0x00, 0x01 },
+ { 50, 60, 280, { 0, 0, 0 } },
+};
+
+s16 slsAttached = false;
+
+Color_RGBA8_n D_8087259C = { 100, 100, 100, 0 };
+Color_RGBA8_n D_808725A0 = { 40, 40, 40, 0 };
+
+static Vec3f sVelocity = { 0.0f, -1.5f, 0.0f };
+static Vec3f sAcceleration = { 0.0f, -0.2f, 0.0f };
+
+static InitChainEntry D_808725BC[] = {
+ ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
+ ICHAIN_F32(uncullZoneForward, 5000, ICHAIN_CONTINUE),
+ ICHAIN_F32(uncullZoneScale, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(uncullZoneDownward, 800, ICHAIN_STOP),
+};
+
+extern Gfx D_60013500[];
+extern UNK_TYPE D_06001DDC;
+
+u8 D_808727C0[100];
+s32 D_80872824;
+
+void BgDodoago_SetupAction(BgDodoago* this, BgDodoagoActionFunc actionFunc) {
+ this->actionFunc = actionFunc;
+}
+
+void func_80871A08(Vec3f* vec, GlobalContext* globalCtx) {
+ Vec3f pos;
+ Color_RGBA8_n primColor = D_8087259C;
+ Color_RGBA8_n envColor = D_808725A0;
+ s32 i;
+
+ for (i = 4; i > 0; i--) {
+ pos.x = Math_Rand_CenteredFloat(20.0f) + vec->x;
+ pos.y = Math_Rand_CenteredFloat(10.0f) + vec->y;
+ pos.z = Math_Rand_CenteredFloat(20.0f) + vec->z;
+ func_80028B74(globalCtx, &pos, &sVelocity, &sAcceleration, &primColor, &envColor);
+ }
+}
+
+void BgDodoago_Init(Actor* thisx, GlobalContext* globalCtx) {
+ BgDodoago* this = THIS;
+ s32 pad;
+ s32 localC = 0;
+
+ Actor_ProcessInitChain(&this->dyna.actor, D_808725BC);
+ DynaPolyInfo_SetActorMove(&this->dyna, 0);
+ DynaPolyInfo_Alloc(&D_06001DDC, &localC);
+ this->dyna.dynaPolyId = DynaPolyInfo_RegisterActor(globalCtx, &globalCtx->colCtx.dyna, &this->dyna.actor, localC);
+ ActorShape_Init(&this->dyna.actor.shape, 0.0f, NULL, 0.0f);
+
+ if (Flags_GetSwitch(globalCtx, (this->dyna.actor.params & 0x3F))) {
+ BgDodoago_SetupAction(this, func_8087227C);
+ this->dyna.actor.shape.rot.x = 0x1333;
+ globalCtx->unk_11D30[0] = globalCtx->unk_11D30[1] = 0xFF;
+ return;
+ }
+
+ Collider_InitCylinder(globalCtx, &this->colliders[0]);
+ Collider_InitCylinder(globalCtx, &this->colliders[1]);
+ Collider_InitCylinder(globalCtx, &this->colliders[2]);
+ Collider_SetCylinder(globalCtx, &this->colliders[0], &this->dyna.actor, &sColCylinderInit0);
+ Collider_SetCylinder(globalCtx, &this->colliders[1], &this->dyna.actor, &sColCylinderInit1);
+ Collider_SetCylinder(globalCtx, &this->colliders[2], &this->dyna.actor, &sColCylinderInit1);
+ BgDodoago_SetupAction(this, func_80871CF4);
+ D_808727C0[0] = 0;
+}
+
+void BgDodoago_Destroy(Actor* thisx, GlobalContext* globalCtx) {
+ BgDodoago* this = THIS;
+
+ DynaPolyInfo_Free(globalCtx, &globalCtx->colCtx.dyna, this->dyna.dynaPolyId);
+ Collider_DestroyCylinder(globalCtx, &this->colliders[0]);
+ Collider_DestroyCylinder(globalCtx, &this->colliders[1]);
+ Collider_DestroyCylinder(globalCtx, &this->colliders[2]);
+}
+
+void func_80871CF4(BgDodoago* this, GlobalContext* globalCtx) {
+ Actor* attachedActor = func_80033640(globalCtx, &this->colliders[0].base);
+
+ if (attachedActor != NULL) {
+ this->unk_164 =
+ (Math_Vec3f_Yaw(&this->dyna.actor.posRot.pos, &attachedActor->posRot.pos) >= this->dyna.actor.shape.rot.y)
+ ? 1
+ : 0;
+
+ if (((globalCtx->unk_11D30[0] == 0xFF) && (this->unk_164 == 1)) ||
+ ((globalCtx->unk_11D30[1] == 0xFF) && (this->unk_164 == 0))) {
+ Flags_SetSwitch(globalCtx, (this->dyna.actor.params & 0x3F));
+ this->unk_164 = 0;
+ Audio_PlaySoundGeneral(NA_SE_SY_CORRECT_CHIME, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
+ BgDodoago_SetupAction(this, func_80871FB8);
+ func_800800F8(globalCtx, 0xD34, 0xA0, &this->dyna.actor, 0);
+ } else if (globalCtx->unk_11D30[this->unk_164] == 0) {
+ func_800800F8(globalCtx, 0xBF9, 0x28, &this->dyna.actor, 0);
+ BgDodoago_SetupAction(this, func_80872288);
+ Audio_PlaySoundGeneral(NA_SE_SY_CORRECT_CHIME, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
+ } else {
+ func_800800F8(globalCtx, 0xBF9, 0x14, &this->dyna.actor, 0);
+ Audio_PlaySoundGeneral(NA_SE_SY_ERROR, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
+ D_80872824 += 0x1E;
+ return;
+ }
+
+ if (!slsAttached) {
+ this->dyna.actor.attachedA = attachedActor;
+ slsAttached = true;
+ D_80872824 = 0x32;
+ }
+ } else {
+
+ if (Flags_GetEventChkInf(0xB0)) {
+ Collider_CylinderUpdate(&this->dyna.actor, &this->colliders[0]);
+ Collider_CylinderUpdate(&this->dyna.actor, &this->colliders[1]);
+ Collider_CylinderUpdate(&this->dyna.actor, &this->colliders[2]);
+ this->colliders[0].dim.pos.z += 0xC8;
+ this->colliders[1].dim.pos.z += 0xD7;
+ this->colliders[1].dim.pos.x += 0x5A;
+ this->colliders[2].dim.pos.z += 0xD7;
+ this->colliders[2].dim.pos.x -= 0x5A;
+
+ CollisionCheck_SetAC(globalCtx, &globalCtx->colChkCtx, &this->colliders[0].base);
+ CollisionCheck_SetOC(globalCtx, &globalCtx->colChkCtx, &this->colliders[1].base);
+ CollisionCheck_SetOC(globalCtx, &globalCtx->colChkCtx, &this->colliders[2].base);
+ }
+ }
+}
+
+void func_80871FB8(BgDodoago* this, GlobalContext* globalCtx) {
+ Vec3f currentPos;
+ Vec3f D_808725CC[] = {
+ { 0.0f, -200.0f, 430.0f }, { 20.0f, -200.0f, 420.0f }, { -20.0f, -200.0f, 420.0f },
+ { 40.0, -200.0f, 380.0f }, { -40.0, -200.0f, 380.0f }, { 50.0, -200.0f, 350.0f },
+ { -50.0f, -200.0f, 350.0f }, { 60.0f, -200.0f, 320.0f }, { -60.0f, -200.0f, 320.0f },
+ { 70.0f, -200.0f, 290.0f }, { -70.0, -200.0f, 290.0f },
+ };
+ s32 i;
+
+ if (globalCtx->unk_11D30[0] < 0xFF) {
+ globalCtx->unk_11D30[0] += 5;
+ }
+ if (globalCtx->unk_11D30[1] < 0xFF) {
+ globalCtx->unk_11D30[1] += 5;
+ }
+
+ if (globalCtx->unk_11D30[0] != 0xFF || globalCtx->unk_11D30[1] != 0xFF) {
+ D_80872824--;
+ return;
+ }
+
+ if (D_80872824 == 0x6C) {
+ for (i = 10; i >= 0; i--) {
+ currentPos.x = D_808725CC[i].x + this->dyna.actor.posRot.pos.x;
+ currentPos.y = D_808725CC[i].y + this->dyna.actor.posRot.pos.y;
+ currentPos.z = D_808725CC[i].z + this->dyna.actor.posRot.pos.z;
+ func_80033480(globalCtx, &currentPos, 2.0f, 3, 0xC8, 0x4B, 1);
+ }
+ }
+
+ currentPos.x = this->dyna.actor.posRot.pos.x + 200.0f;
+ currentPos.y = this->dyna.actor.posRot.pos.y - 20.0f;
+ currentPos.z = this->dyna.actor.posRot.pos.z + 100.0f;
+
+ func_80871A08(&currentPos, globalCtx);
+
+ currentPos.x = this->dyna.actor.posRot.pos.x - 200.0f;
+ currentPos.y = this->dyna.actor.posRot.pos.y - 20.0f;
+ currentPos.z = this->dyna.actor.posRot.pos.z + 100.0f;
+
+ func_80871A08(&currentPos, globalCtx);
+ Math_ApproxS(&this->unk_164, 0x64, 3);
+ func_800AA000(500.0f, 0x78, 0x14, 0xA);
+
+ if (Math_SmoothScaleMaxMinS(&this->dyna.actor.shape.rot.x, 0x1333, 0x6E - this->unk_164, 0x3E8, 0x32) == 0) {
+ BgDodoago_SetupAction(this, func_8087227C);
+ Audio_PlaySoundGeneral(NA_SE_EV_STONE_BOUND, &this->dyna.actor.projectedPos, 4, &D_801333E0, &D_801333E0, &D_801333E8);
+ } else {
+ Audio_PlaySoundGeneral(NA_SE_EV_STONE_STATUE_OPEN - SFX_FLAG, &this->dyna.actor.projectedPos, 4, &D_801333E0, &D_801333E0, &D_801333E8);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Dodoago/BgDodoago_Init.s")
+void func_8087227C(BgDodoago* this, GlobalContext* globalCtx) {
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Dodoago/BgDodoago_Destroy.s")
+void func_80872288(BgDodoago* this, GlobalContext* globalCtx) {
+ globalCtx->unk_11D30[this->unk_164] += 5;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Dodoago/func_80871CF4.s")
+ if (globalCtx->unk_11D30[this->unk_164] == 0xFF) {
+ BgDodoago_SetupAction(this, func_80871CF4);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Dodoago/func_80871FB8.s")
+void BgDodoago_Update(Actor* thisx, GlobalContext* globalCtx) {
+ BgDodoago* this = THIS;
+ EnBom* bomb;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Dodoago/func_8087227C.s")
+ if (this->dyna.actor.attachedA == NULL) {
+ if ((s32)(this->colliders[1].base.maskA & 2) || (this->colliders[2].base.maskA & 2)) {
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Dodoago/func_80872288.s")
+ if ((s32)(this->colliders[1].base.maskA & 2)) {
+ bomb = (EnBom*)this->colliders[1].base.oc;
+ } else {
+ bomb = (EnBom*)this->colliders[2].base.oc;
+ }
+ this->colliders[1].base.maskA &= ~2;
+ this->colliders[2].base.maskA &= ~2;
+ if (bomb->actor.type == ACTORTYPE_EXPLOSIVES && bomb->actor.id == ACTOR_EN_BOM && bomb->actor.params == 0) {
+ this->dyna.actor.attachedA = &bomb->actor;
+ bomb->timer = 50;
+ bomb->actor.speedXZ = 0.0f;
+ D_80872824 = 0;
+ }
+ }
+ } else {
+ D_80872824++;
+ Flags_GetSwitch(globalCtx, this->dyna.actor.params & 0x3F);
+ if (D_808727C0[0] == 0 && D_80872824 >= 0x8D) {
+ if (Flags_GetSwitch(globalCtx, this->dyna.actor.params & 0x3F)) {
+ D_808727C0[0]++;
+ } else {
+ this->dyna.actor.attachedA = NULL;
+ }
+ }
+ }
+ this->actionFunc(this, globalCtx);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Dodoago/BgDodoago_Update.s")
+void BgDodoago_Draw(Actor* thisx, GlobalContext* globalCtx) {
+ GraphicsContext* gfxCtx = globalCtx->state.gfxCtx;
+ Gfx* dispRefs[4];
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Dodoago/BgDodoago_Draw.s")
+ Graph_OpenDisps(dispRefs, globalCtx->state.gfxCtx, "../z_bg_dodoago.c", 672);
+ if (Flags_GetEventChkInf(0xB0)) {
+ func_80093D18(globalCtx->state.gfxCtx);
+ gSPMatrix(gfxCtx->polyOpa.p++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_bg_dodoago.c", 677),
+ G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(gfxCtx->polyOpa.p++, D_60013500);
+ }
+ Graph_CloseDisps(dispRefs, globalCtx->state.gfxCtx, "../z_bg_dodoago.c", 681);
+}
diff --git a/src/overlays/actors/ovl_Bg_Dodoago/z_bg_dodoago.h b/src/overlays/actors/ovl_Bg_Dodoago/z_bg_dodoago.h
index 2c29c9480..e7e1dcca2 100644
--- a/src/overlays/actors/ovl_Bg_Dodoago/z_bg_dodoago.h
+++ b/src/overlays/actors/ovl_Bg_Dodoago/z_bg_dodoago.h
@@ -10,7 +10,8 @@ typedef void (*BgDodoagoActionFunc)(struct BgDodoago*, GlobalContext*);
typedef struct BgDodoago {
/* 0x0000 */ DynaPolyActor dyna;
- /* 0x0164 */ char unk_164[0xE8];
+ /* 0x0164 */ s16 unk_164;
+ /* 0x0168 */ ColliderCylinder colliders[3];
/* 0x024C */ BgDodoagoActionFunc actionFunc;
} BgDodoago; // size = 0x0250
diff --git a/src/overlays/actors/ovl_En_Bom/z_en_bom.h b/src/overlays/actors/ovl_En_Bom/z_en_bom.h
index cf275e673..18ae1f8d6 100644
--- a/src/overlays/actors/ovl_En_Bom/z_en_bom.h
+++ b/src/overlays/actors/ovl_En_Bom/z_en_bom.h
@@ -22,7 +22,7 @@ typedef struct EnBom {
typedef enum {
/* 0x00 */ BOMB_BODY,
- /* 0x01 */ BOMB_EXPLOSION,
+ /* 0x01 */ BOMB_EXPLOSION
} EnBomType;
extern const ActorInit En_Bom_InitVars;