diff --git a/data/overlays/actors/z_bg_hidan_firewall.data.s b/data/overlays/actors/z_bg_hidan_firewall.data.s index ff4314b4d1..1449400411 100644 --- a/data/overlays/actors/z_bg_hidan_firewall.data.s +++ b/data/overlays/actors/z_bg_hidan_firewall.data.s @@ -7,12 +7,12 @@ .section .data -glabel Bg_Hidan_Firewall_InitVars - .word 0x000C0100, 0x00000000, 0x002C0000, 0x000001A0 -.word BgHidanFirewall_Init -.word BgHidanFirewall_Destroy -.word BgHidanFirewall_Update -.word 0x00000000 +#glabel Bg_Hidan_Firewall_InitVars +# .word 0x000C0100, 0x00000000, 0x002C0000, 0x000001A0 +#.word BgHidanFirewall_Init +#.word BgHidanFirewall_Destroy +#.word BgHidanFirewall_Update +#.word 0x00000000 glabel D_80886CD0 .word 0x0A110009, 0x20010000, 0x00000000, 0x20000000, 0x01040000, 0xFFCFFFFF, 0x00000000, 0x19000100, 0x001E0053, 0x00000000, 0x00000000 glabel D_80886CFC diff --git a/src/overlays/actors/ovl_Bg_Hidan_Firewall/z_bg_hidan_firewall.c b/src/overlays/actors/ovl_Bg_Hidan_Firewall/z_bg_hidan_firewall.c index ccf7600fda..0b7eb1d580 100644 --- a/src/overlays/actors/ovl_Bg_Hidan_Firewall/z_bg_hidan_firewall.c +++ b/src/overlays/actors/ovl_Bg_Hidan_Firewall/z_bg_hidan_firewall.c @@ -5,25 +5,38 @@ // static ColliderCylinderInit cylinderInitData = // { -// { -// 0x0A, 0x11, 0x00, 0x09, -// 0x20, 0x01, { 0x00, 0x00, }, -// 0x00, { 0x00, 0x00, 0x00, }, -// 0x20000000, -// 0x01, 0x04, { 0x00, 0x00, }, -// 0xFFCFFFFF, -// { 0x00, 0x00, 0x00, 0x00, }, -// 0x19, 0x00, 0x01, 0x00, -// }, +// 0x0A, 0x11, 0x00, 0x09, +// 0x20, 0x01, 0x00, 0x00, +// 0x00, 0x00, 0x00, 0x00, +// 0x20000000, +// 0x01, 0x04, 0x00, 0x00, +// 0xFFCFFFFF, +// 0x00, 0x00, 0x00, 0x00, +// 0x19, 0x00, 0x01, 0x00, // 0x001E, // 0x0053, -// 0x0000, -// { -// 0x0000, 0x0000, 0x0000, -// }, +// 0x00000000000000000000, +// }; + +// static SubActor98Init actor98InitData = +// { +// 0x01, 0x0050, 0x0064, 0xFF, +// }; + +// u32 D_80886D04[] = { +// 0x06015D20, +// 0x06016120, +// 0x06016520, +// 0x06016920, +// 0x06016D20, +// 0x06017120, +// 0x06017520, +// 0x06017920, +// 0x00000000, +// 0x00000000, +// 0x00000000, // }; -/* const ActorInit Bg_Hidan_Firewall_InitVars = { ACTOR_BG_HIDAN_FIREWALL, @@ -37,12 +50,11 @@ const ActorInit Bg_Hidan_Firewall_InitVars = (ActorFunc)BgHidanFirewall_Update, NULL, }; -*/ void BgHidanFirewall_Init(BgHidanFirewall* this, GlobalContext* globalCtx){ f32 scale; - + scale = D_80886D84; this->actor.scale.x = scale; this->actor.scale.z = scale; @@ -52,12 +64,12 @@ void BgHidanFirewall_Init(BgHidanFirewall* this, GlobalContext* globalCtx){ this->unk_150 = 0; - ActorCollider_AllocCylinder(globalCtx, ((s32*)this+0x55));//TODO: fix this. multiple cylinders? - ActorCollider_InitCylinder(globalCtx, ((s32*)this+0x55), &this->actor, &D_80886CD0); + ActorCollider_AllocCylinder(globalCtx, &this->collider); + ActorCollider_InitCylinder(globalCtx, &this->collider, &this->actor, &D_80886CD0); - this->pos_19A.y = this->actor.posRot.pos.y; + this->collider.dim.position.y = this->actor.posRot.pos.y; - func_80061ED4(&this->actor.sub_98, 0, D_80886CFC); + func_80061ED4(&this->actor.sub_98, NULL, &D_80886CFC); this->actionFunc = BgHidanFirewall_Wait; return; @@ -66,35 +78,32 @@ void BgHidanFirewall_Init(BgHidanFirewall* this, GlobalContext* globalCtx){ void BgHidanFirewall_Destroy(BgHidanFirewall* this, GlobalContext* globalCtx) { BgHidanFirewall* thing = this; - ActorCollider_FreeCylinder(globalCtx, (char*)this + 0x154);//TODO: fix this. multiple cylinders? + ActorCollider_FreeCylinder(globalCtx, &this->collider); } -// BgHidanFirewall_Proximity -#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Hidan_Firewall/func_80886728.s") -// s32 func_80886728(BgHidanFirewall* this, GlobalContext* globalCtx) -// { -// Vec3f* sp18; //TODO: where does this come from? -// f32 phi_return; +s32 BgHidanFirewall_Proximity(BgHidanFirewall* this, GlobalContext* globalCtx) +{ + Player* player; + Vec3f distance; + + player = PLAYER; + func_8002DBD0(&this->actor, &distance, &player->actor.posRot.pos); -// func_8002DBD0(&this->actor, sp18, &(globalCtx->actorCtx.actorList[2].first->posRot.pos)); - -// phi_return = 0.0f; -// if (fabsf(sp18->x) < 100.0f) -// { -// phi_return = fabsf(sp18->z); -// if (phi_return < 120.0f) -// { -// phi_return = 1.401298464324817e-45f; -// } -// } -// return phi_return; -// } + if (fabsf(distance.x) < 100.0f) + { + if (fabsf(distance.z) < 120.0f) + { + return 1; + } + } + return 0; +} void BgHidanFirewall_Wait(BgHidanFirewall* this, GlobalContext* globalCtx) { - if (func_80886728(this, globalCtx) != 0) + if (BgHidanFirewall_Proximity(this, globalCtx) != 0) { - this->actor.draw = func_80886B34; + this->actor.draw = BgHidanFirewall_Draw; this->actor.params = 5; this->actionFunc = BgHidanFirewall_Countdown; } @@ -109,20 +118,20 @@ void BgHidanFirewall_Countdown(BgHidanFirewall* this, GlobalContext* globalCtx) } if (this->actor.params == 0) { - this->actionFunc = &func_80886810; + this->actionFunc = BgHidanFirewall_Erupt; } } -void func_80886810(BgHidanFirewall* this, GlobalContext* globalCtx) +void BgHidanFirewall_Erupt(BgHidanFirewall* this, GlobalContext* globalCtx) { - if (func_80886728(this, globalCtx) != 0) + if (BgHidanFirewall_Proximity(this, globalCtx) != 0) { Math_ApproxF(&this->actor.scale.y, 0.1f, 0.024999999f); return; } if (Math_ApproxF(&this->actor.scale.y, D_80886D8C, D_80886D8C) != 0) { - this->actor.draw = 0; + this->actor.draw = NULL; this->actionFunc = BgHidanFirewall_Wait; } else @@ -141,129 +150,106 @@ void func_80886898(BgHidanFirewall* this, GlobalContext* globalCtx) } else { - phi_a3 = (s16)(this->actor.shape.rot.y + 0x8000); + phi_a3 = this->actor.shape.rot.y + 0x8000; } func_8002F71C(globalCtx, this, 5.0f, phi_a3, 1.0f); } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Hidan_Firewall/func_808868FC.s") -// void func_808868FC(BgHidanFirewall* this, GlobalContext* globalCtx) -// { -// Vec3f* temp = &globalCtx->actorCtx.actorList[2].first->posRot.pos; -// Vec3f sp30; -// f32 temp_ret; -// f32 sp28; -// f32 phi_f0; +void func_808868FC(BgHidanFirewall* this, GlobalContext* globalCtx) +{ + Player* player; + Vec3f sp30; + f32 temp_ret; + f32 sp28; + f32 phi_f0; -// func_8002DBD0(&this->actor, &sp30, temp); -// if (sp30.x < -70.0f) -// { -// sp30.x = -70.0f; -// } -// else -// { -// if (70.0f < sp30.x) -// { -// phi_f0 = 70.0f; -// } -// else -// { -// phi_f0 = sp30.x; -// } -// sp30.x = phi_f0; -// } -// if (this->actor.params == 0) -// { -// if (0.0f < sp30.z) -// { -// sp30.z = -25.0f; -// this->actor.params = -1; -// } -// else -// { -// sp30.z = 25.0f; -// this->actor.params = 1; -// } -// } -// else -// { -// sp30.z = this->actor.params * 25.0f; -// } -// sp28 = Math_Sins(this->actor.shape.rot.y); -// temp_ret = Math_Coss(this->actor.shape.rot.y); -// this->pos_19A.x = ((this->actor.posRot.pos.x + (sp30.x * temp_ret)) + (sp30.z * sp28)); -// this->pos_19A.z = ((this->actor.posRot.pos.z - (sp30.x * sp28)) + (sp30.z * temp_ret)); -// } + player = PLAYER; + + func_8002DBD0(&this->actor, &sp30, &player->actor.posRot.pos); + if (sp30.x < -70.0f) + { + sp30.x = -70.0f; + } + else + { + if (70.0f < sp30.x) + { + phi_f0 = 70.0f; + } + else + { + phi_f0 = sp30.x; + } + sp30.x = phi_f0; + } + if (this->actor.params == 0) + { + if (0.0f < sp30.z) + { + sp30.z = -25.0f; + this->actor.params = -1; + } + else + { + sp30.z = 25.0f; + this->actor.params = 1; + } + } + else + { + sp30.z = this->actor.params * 25.0f; + } + sp28 = Math_Sins(this->actor.shape.rot.y); + temp_ret = Math_Coss(this->actor.shape.rot.y); + this->collider.dim.position.x = ((this->actor.posRot.pos.x + (sp30.x * temp_ret)) + (sp30.z * sp28)); + this->collider.dim.position.z = ((this->actor.posRot.pos.z - (sp30.x * sp28)) + (sp30.z * temp_ret)); +} + +void BgHidanFirewall_Update(BgHidanFirewall* this, GlobalContext* globalCtx) +{ + s32 pad1; + s32 pad2; + + this->unk_150 = (this->unk_150 + 1) % 8; + + if (this->collider.base.colliderFlags & 2) + { + this->collider.base.colliderFlags &= ~2; + func_80886898(this, globalCtx); + } + + this->actionFunc(this, globalCtx); + if (this->actionFunc == BgHidanFirewall_Erupt) + { + func_808868FC(this, globalCtx); + Actor_CollisionCheck_SetAT(globalCtx, &globalCtx->sub_11E60, &this->collider); + Actor_CollisionCheck_SetOT(globalCtx, &globalCtx->sub_11E60, &this->collider); + func_8002F974(&this->actor, 0x2034); + } +} + +void BgHidanFirewall_Draw(BgHidanFirewall* this, GlobalContext* globalCtx) +{ + u32* temp; + u32 pad; + GraphicsContext* gfxCtx; + u32 pad1; + u32 pad2; + Gfx* gfx; + + gfxCtx = globalCtx->state.gfxCtx; + + func_800C6AC4(&gfx, globalCtx->state.gfxCtx, &D_80886D30, 0x1C0); + gfxCtx->polyXlu.p = func_80093774(gfxCtx->polyXlu.p, 0x14); + + temp = &D_80886D04; + + gSPSegment(gfxCtx->polyXlu.p++, 0x08, SEGMENTED_TO_VIRTUAL(temp[this->unk_150])); + gDPSetPrimColor(gfxCtx->polyXlu.p++, 0, 0x01, 0xFF, 0xFF, 0x00, 0x96); + gDPSetEnvColor(gfxCtx->polyXlu.p++, 0xFF, 0x00, 0x00, 0xFF); + gSPMatrix(gfxCtx->polyXlu.p++, Matrix_NewMtx(globalCtx->state.gfxCtx, &D_80886D4C, 0x1CA), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(gfxCtx->polyXlu.p++, &D_0600DA80); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Hidan_Firewall/BgHidanFirewall_Update.s") -// void BgHidanFirewall_Update(BgHidanFirewall* this, GlobalContext* globalCtx) -// { -// s32 phi_t8; -// u8 t; - -// phi_t8 = (((this->ukn_150)) + 1) & 7; -// t = this->ukn_164; - -// if ((this->ukn_150) + 1 < 0 && phi_t8) -// { -// phi_t8 -= 8; -// } -// this->ukn_150 = phi_t8; - -// if ((this->ukn_164 & 2) != 0) -// { -// this->ukn_164 &= 0xfffd; -// func_80886898(this, globalCtx); -// } -// this->actionFunc(this, globalCtx); -// if (&func_80886810 == this->actionFunc) -// { -// func_808868FC(this, globalCtx); -// Actor_CollisionCheck_SetAT(globalCtx, &globalCtx->sub_11E60, &this->collider); -// Actor_CollisionCheck_SetOT(globalCtx, &globalCtx->sub_11E60, &this->collider); -// func_8002F974(&this->actor, 0x2034); -// } -// } - -// BgHidanFirewall_Draw -#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Hidan_Firewall/func_80886B34.s") -// void func_80886B34(BgHidanFirewall* this, GlobalContext* globalCtx) -// { -// Gfx** sp38; -// s32 sp28; -// Gfx* temp_ret; -// Gfx* temp_v0; -// s32 temp_v0_2; -// s32 temp_v0_3; -// s32 temp_v0_4; -// s32 temp_v0_5; -// char* temp_a0; - -// func_800C6AC4(&sp38, globalCtx->gfxCtx, D_80886D30, 0x1c0); -// temp_ret = func_80093774(globalCtx->gfxCtx->polyXlu.p, 0x14); -// temp_v0 = temp_ret; -// globalCtx->gfxCtx->polyXlu.p = temp_ret; -// globalCtx->gfxCtx->polyXlu.p = (s32) (temp_v0 + 8); -// temp_v0->unk0 = 0xdb060020; -// temp_a0 = D_80886D04 + (this->ukn_150 * 4); -// temp_v0->unk4 = (s32) (((*temp_a0 & 0xffffff) + ((char*)0x80160000 + (((*temp_a0 * 0x10) >> 0x1c) * 4))->unk6FA8) + 0x80000000); -// temp_v0_2 = globalCtx->gfxCtx->polyXlu.p; -// globalCtx->gfxCtx->polyXlu.p = (s32) (temp_v0_2 + 8); -// temp_v0_2->unk0 = 0xfa000001; -// temp_v0_2->unk4 = 0xffff0096; -// temp_v0_3 = globalCtx->gfxCtx->polyXlu.p; -// globalCtx->gfxCtx->polyXlu.p = (s32) (temp_v0_3 + 8); -// temp_v0_3->unk0 = 0xfb000000; -// temp_v0_3->unk4 = 0xff0000ff; -// temp_v0_4 = globalCtx->gfxCtx->polyXlu.p; -// globalCtx->gfxCtx->polyXlu.p = (s32) (temp_v0_4 + 8); -// temp_v0_4->unk0 = 0xda380003; -// sp28 = temp_v0_4; -// sp28->unk4 = func_800D1A88(*arg1, &D_80886D4C, 0x1ca); -// temp_v0_5 = globalCtx->gfxCtx->polyXlu.p; -// globalCtx->gfxCtx->polyXlu.p = (s32) (temp_v0_5 + 8); -// temp_v0_5->unk4 = (s32) (0x6010000 + 0xda80); -// temp_v0_5->unk0 = 0xde000000; -// func_800C6B54(&sp38, *arg1, &D_80886D68, 0x1cf); -// } + func_800C6B54(&gfx, globalCtx->state.gfxCtx, &D_80886D68, 0x1CF); +} diff --git a/src/overlays/actors/ovl_Bg_Hidan_Firewall/z_bg_hidan_firewall.h b/src/overlays/actors/ovl_Bg_Hidan_Firewall/z_bg_hidan_firewall.h index 96f693de37..d67ffbc8a3 100644 --- a/src/overlays/actors/ovl_Bg_Hidan_Firewall/z_bg_hidan_firewall.h +++ b/src/overlays/actors/ovl_Bg_Hidan_Firewall/z_bg_hidan_firewall.h @@ -13,33 +13,31 @@ typedef struct BgHidanFirewall /* 0x0000 */ Actor actor; /* 0x014C */ FirewallFunc* actionFunc; // idle, countdown, etc /* 0x0150 */ s16 unk_150; - /* 0x0154 */ ColliderCylinderMain* collider; - /* 0x0158 */ char unk_158[0xC]; - /* 0x0164 */ u8 unk_164; - /* 0x0165 */ char unk_166[0x35]; - /* 0x019A */ Vec3s pos_19A; + /* 0x0154 */ ColliderCylinderMain collider; } BgHidanFirewall; // size = 0x01A0 extern const ActorInit Bg_Hidan_Firewall_InitVars; void BgHidanFirewall_Init(BgHidanFirewall* this, GlobalContext* globalCtx); void BgHidanFirewall_Destroy(BgHidanFirewall* this, GlobalContext* globalCtx); -s32 func_80886728(BgHidanFirewall* this, GlobalContext* globalCtx); +s32 BgHidanFirewall_Proximity(BgHidanFirewall* this, GlobalContext* globalCtx); void BgHidanFirewall_Wait(BgHidanFirewall* this, GlobalContext* globalCtx); void BgHidanFirewall_Countdown(BgHidanFirewall* this, GlobalContext* globalCtx); -void func_80886810(BgHidanFirewall* this, GlobalContext* globalCtx); +void BgHidanFirewall_Erupt(BgHidanFirewall* this, GlobalContext* globalCtx); void func_80886898(BgHidanFirewall* this, GlobalContext* globalCtx); void func_808868FC(BgHidanFirewall* this, GlobalContext* globalCtx); void BgHidanFirewall_Update(BgHidanFirewall* this, GlobalContext* globalCtx); -void func_80886B34(BgHidanFirewall* this, GlobalContext* globalCtx); +void BgHidanFirewall_Draw(BgHidanFirewall* this, GlobalContext* globalCtx); -extern char D_80886CFC[8]; -extern char D_80886D04[11 * 4]; -extern void func_80061ED4(); -extern char* D_80886D30; // "../z_bg_hidan_firewall.c +extern ColliderCylinderMain D_80886CD0; +extern SubActor98Init D_80886CFC; +extern u32 D_80886D04[11]; extern f32 D_80886D84; extern f32 D_80886D88; extern float D_80886D8C; -extern ColliderCylinderMain D_80886CD0; +extern u32 D_0600DA80; +extern char D_80886D30; +extern char* D_80886D4C; +extern char* D_80886D68; #endif diff --git a/undefined_syms.txt b/undefined_syms.txt index c2d7779fd5..4568e85fdd 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -390,4 +390,20 @@ D_06009244 = 0x06009244; D_060041F4 = 0x060041F4; D_0600A054 = 0x0600A054; D_06008688 = 0x06008688; -D_04049210 = 0x04049210; \ No newline at end of file +D_04049210 = 0x04049210; + +// z_en_ani +D_060067B8 = 0x060067B8; +D_060070F0 = 0x060070F0; +D_8002B5EC = 0x8002B5EC; +D_060076EC = 0x060076EC; +D_060000F0 = 0x060000F0; + +// z_bg_hidan_firewall +D_0600DA80 = 0x0600DA80; + +// z_bg_breakwall +D_02014F80 = 0x02014F80; +D_801333E0 = 0x801333E0; +D_801333D4 = 0x801333D4; +D_801333E8 = 0x801333E8; \ No newline at end of file