En_Bigpamet (#910)

* En_Bigpamet

* a

* PR

* a

* PR

* PR

* Update src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c

Co-authored-by: Derek Hensley <hensley.derek58@gmail.com>

Co-authored-by: Anghelo Carvajal <angheloalf95@gmail.com>
Co-authored-by: Derek Hensley <hensley.derek58@gmail.com>
This commit is contained in:
Maide 2022-08-08 00:33:51 +01:00 committed by GitHub
parent d0313fa766
commit 5f9d4ca059
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 769 additions and 95 deletions

3
spec
View File

@ -2565,8 +2565,7 @@ beginseg
name "ovl_En_Bigpamet" name "ovl_En_Bigpamet"
compress compress
include "build/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.o" include "build/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.o"
include "build/data/ovl_En_Bigpamet/ovl_En_Bigpamet.data.o" include "build/src/overlays/actors/ovl_En_Bigpamet/ovl_En_Bigpamet_reloc.o"
include "build/data/ovl_En_Bigpamet/ovl_En_Bigpamet.reloc.o"
endseg endseg
beginseg beginseg

View File

@ -6,6 +6,8 @@
#include "z_en_bigpamet.h" #include "z_en_bigpamet.h"
#include "z64rumble.h" #include "z64rumble.h"
#include "overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.h"
#include "objects/gameplay_keep/gameplay_keep.h"
#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_400) #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_400)
@ -30,8 +32,19 @@ void func_80A28D0C(EnBigpamet* this, PlayState* play);
void func_80A28DC0(EnBigpamet* this, PlayState* play); void func_80A28DC0(EnBigpamet* this, PlayState* play);
void func_80A28E98(EnBigpamet* this, PlayState* play); void func_80A28E98(EnBigpamet* this, PlayState* play);
void func_80A28EE8(EnBigpamet* this, PlayState* play); void func_80A28EE8(EnBigpamet* this, PlayState* play);
void func_80A281B4(EnBigpamet* this);
void func_80A28274(EnBigpamet* this);
void func_80A28378(EnBigpamet* this);
void func_80A28E40(EnBigpamet* this);
void func_80A28618(EnBigpamet* this);
void func_80A2966C(Actor* thisx, PlayState* play);
void func_80A286C0(EnBigpamet* this);
void func_80A28760(EnBigpamet* this);
void func_80A28970(EnBigpamet* this);
void func_80A28A28(EnBigpamet* this);
void func_80A28D80(EnBigpamet* this);
void func_80A28ED4(EnBigpamet* this);
#if 0
const ActorInit En_Bigpamet_InitVars = { const ActorInit En_Bigpamet_InitVars = {
ACTOR_EN_BIGPAMET, ACTOR_EN_BIGPAMET,
ACTORCAT_BOSS, ACTORCAT_BOSS,
@ -44,18 +57,29 @@ const ActorInit En_Bigpamet_InitVars = {
(ActorFunc)EnBigpamet_Draw, (ActorFunc)EnBigpamet_Draw,
}; };
// static ColliderCylinderInit sCylinderInit = { static ColliderCylinderInit sCylinderInit = {
static ColliderCylinderInit D_80A29700 = { {
{ COLTYPE_HARD, AT_NONE | AT_TYPE_ENEMY, AC_ON | AC_HARD | AC_TYPE_PLAYER, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_CYLINDER, }, COLTYPE_HARD,
{ ELEMTYPE_UNK0, { 0xF7CFFFFF, 0x04, 0x04 }, { 0xF7CF7FFF, 0x00, 0x00 }, TOUCH_ON | TOUCH_SFX_NORMAL, BUMP_ON | BUMP_HOOKABLE, OCELEM_ON, }, AT_NONE | AT_TYPE_ENEMY,
AC_ON | AC_HARD | AC_TYPE_PLAYER,
OC1_ON | OC1_TYPE_ALL,
OC2_TYPE_1,
COLSHAPE_CYLINDER,
},
{
ELEMTYPE_UNK0,
{ 0xF7CFFFFF, 0x04, 0x04 },
{ 0xF7CF7FFF, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_NORMAL,
BUMP_ON | BUMP_HOOKABLE,
OCELEM_ON,
},
{ 53, 50, 0, { 0, 0, 0 } }, { 53, 50, 0, { 0, 0, 0 } },
}; };
// sColChkInfoInit static CollisionCheckInfoInit sColChkInfoInit = { 1, 53, 60, 250 };
static CollisionCheckInfoInit D_80A2972C = { 1, 53, 60, 250 };
// static DamageTable sDamageTable = { static DamageTable sDamageTable = {
static DamageTable D_80A29734 = {
/* Deku Nut */ DMG_ENTRY(1, 0x0), /* Deku Nut */ DMG_ENTRY(1, 0x0),
/* Deku Stick */ DMG_ENTRY(1, 0x0), /* Deku Stick */ DMG_ENTRY(1, 0x0),
/* Horse trample */ DMG_ENTRY(0, 0x0), /* Horse trample */ DMG_ENTRY(0, 0x0),
@ -90,121 +114,760 @@ static DamageTable D_80A29734 = {
/* Powder Keg */ DMG_ENTRY(1, 0xF), /* Powder Keg */ DMG_ENTRY(1, 0xF),
}; };
// static InitChainEntry sInitChain[] = { TexturePtr D_80A29754[] = {
static InitChainEntry D_80A29764[] = { object_tl_Tex_0055A0,
ICHAIN_S8(hintId, 1, ICHAIN_CONTINUE), object_tl_Tex_0057A0,
ICHAIN_VEC3F_DIV1000(scale, 15, ICHAIN_CONTINUE), object_tl_Tex_0059A0,
ICHAIN_F32(gravity, -2, ICHAIN_CONTINUE), object_tl_Tex_0057A0,
ICHAIN_F32(targetArrowOffset, 4333, ICHAIN_CONTINUE), };
static InitChainEntry sInitChain[] = {
ICHAIN_S8(hintId, 1, ICHAIN_CONTINUE), ICHAIN_VEC3F_DIV1000(scale, 15, ICHAIN_CONTINUE),
ICHAIN_F32(gravity, -2, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 4333, ICHAIN_CONTINUE),
ICHAIN_U8(targetMode, 5, ICHAIN_STOP), ICHAIN_U8(targetMode, 5, ICHAIN_STOP),
}; };
#endif s32 D_80A29778 = 0;
Vec3f D_80A2977C = { 0.0f, 1.0f, 0.0f };
Color_RGBA8 D_80A29788 = { 250, 250, 250, 255 };
Color_RGBA8 D_80A2978C = { 180, 180, 180, 255 };
extern ColliderCylinderInit D_80A29700; void EnBigpamet_Init(Actor* thisx, PlayState* play) {
extern CollisionCheckInfoInit D_80A2972C; EnBigpamet* this = THIS;
extern DamageTable D_80A29734; s32 i;
extern InitChainEntry D_80A29764[];
extern UNK_TYPE D_06000440; Actor_ProcessInitChain(&this->actor, sInitChain);
extern UNK_TYPE D_06000AF4;
extern UNK_TYPE D_06001C68;
extern UNK_TYPE D_060031DC;
extern UNK_TYPE D_06004210;
extern UNK_TYPE D_0600823C;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/EnBigpamet_Init.s") SkelAnime_InitFlex(play, &this->skelAnime2, &object_tl_Skel_007C70, &object_tl_Anim_004210, this->jointTable2,
this->morphTable2, OBJECT_TL_2_LIMB_MAX);
SkelAnime_InitFlex(play, &this->skelAnime1, &object_tl_Skel_001A50, &object_tl_Anim_000B30, this->jointTable1,
this->morphTable1, OBJECT_TL_1_LIMB_MAX);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/EnBigpamet_Destroy.s") ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 55.0f);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A2768C.s") Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A276F4.s") if (!D_80A29778) {
for (i = 0; i < ARRAY_COUNT(D_80A29754); i++) {
D_80A29754[i] = Lib_SegmentedToVirtual(D_80A29754[i]);
}
D_80A29778 = true;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A2778C.s") this->actor.params = ENBIGPAMET_1;
func_80A281B4(this);
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A27970.s") void EnBigpamet_Destroy(Actor* thisx, PlayState* play) {
EnBigpamet* this = THIS;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A27B58.s") Collider_DestroyCylinder(play, &this->collider);
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A27DD8.s") void func_80A2768C(EnBigpamet* this) {
if (this->unk_29C != 0) {
this->unk_29C++;
if (this->unk_29C == 4) {
this->unk_29C = 0;
}
} else if (Rand_ZeroOne() < 0.05f) {
this->unk_29C = 1;
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A27FE8.s") void func_80A276F4(EnBigpamet* this) {
if (this->actor.parent->params == GEKKO_ON_SNAPPER) {
this->actor.parent->shape.rot.y = this->actor.shape.rot.y;
this->actor.parent->shape.rot.z = this->actor.shape.rot.z;
Matrix_SetTranslateRotateYXZ(this->actor.world.pos.x, this->unk_2AC, this->actor.world.pos.z,
&this->actor.shape.rot);
Matrix_MultVecY(46.0f, &this->actor.parent->world.pos);
} else if (this->actor.parent->params == GEKKO_REAR_ON_SNAPPER) {
this->actor.parent->world.pos.x = this->actor.world.pos.x;
this->actor.parent->world.pos.z = this->actor.world.pos.z;
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A2811C.s") void func_80A2778C(EnBigpamet* this) {
f32 temp_fs1;
s16 temp_s1;
s16 temp_s2;
s32 i;
EnBigpametStruct* ptr;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A281B4.s") this->unk_2A2 = 40;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A281DC.s") for (ptr = &this->unk_2FC[0], i = 0; i < ARRAY_COUNT(this->unk_2FC); i++, ptr++) {
temp_s2 = (s32)Rand_Next() >> 0x10;
temp_s1 = Rand_S16Offset(0x1800, 0x2800);
temp_fs1 = Rand_ZeroFloat(5.0f) + 7.0f;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A28274.s") ptr->unk_0C.x = (temp_fs1 * Math_CosS(temp_s1)) * Math_SinS(temp_s2);
ptr->unk_0C.y = (temp_fs1 * Math_SinS(temp_s1)) + 3.0f;
ptr->unk_0C.z = (temp_fs1 * Math_CosS(temp_s1)) * Math_CosS(temp_s2);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A282C8.s") ptr->unk_18.x = (s32)Rand_Next() >> 0x10;
ptr->unk_18.y = (s32)Rand_Next() >> 0x10;
ptr->unk_18.z = (s32)Rand_Next() >> 0x10;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A28378.s") ptr->unk_00.x = (Math_SinS(temp_s2) * 40.0f) + this->actor.world.pos.x;
ptr->unk_00.y = this->actor.floorHeight;
ptr->unk_00.z = (Math_CosS(temp_s2) * 40.0f) + this->actor.world.pos.z;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A283A0.s") ptr->unk_20 = Rand_ZeroFloat(0.0025000002f) + 0.002f;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A283F0.s") Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_B_PAMET_BREAK);
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A2844C.s") void func_80A27970(EnBigpamet* this, PlayState* play2) {
Vec3f sp9C;
f32 temp_fs1 = this->actor.depthInWater + this->actor.world.pos.y;
s32 sp94;
s32 i;
s16 temp_s0;
f32 temp_fs0;
CollisionPoly* sp84;
PlayState* play = play2;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A284E4.s") for (i = 0; i < 2; i++) {
temp_fs0 = Rand_ZeroFloat(30.0f) + 30.0f;
temp_s0 = Rand_Next() >> 0x10;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A2855C.s") sp9C.x = (Math_SinS(temp_s0) * temp_fs0) + this->actor.world.pos.x;
sp9C.y = Rand_ZeroFloat(10.0f) + this->actor.floorHeight + 8.0f;
sp9C.z = (Math_CosS(temp_s0) * temp_fs0) + this->actor.world.pos.z;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A28618.s") if (BgCheck_EntityRaycastFloor5_2(play, &play->colCtx, &sp84, &sp94, &this->actor, &sp9C) < temp_fs1) {
sp9C.y = temp_fs1;
EffectSsGSplash_Spawn(play, &sp9C, NULL, NULL, 0, Rand_S16Offset(1000, 200));
} else {
func_800B12F0(play, &sp9C, &D_80A2977C, &gZeroVec3f, Rand_S16Offset(950, 100), Rand_S16Offset(10, 10), 20);
}
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A2866C.s") void func_80A27B58(EnBigpamet* this) {
EnBigpametStruct* ptr;
s32 i;
Vec3f sp64;
f32 temp_fs0;
s16 temp_s2;
f32 temp_fs2;
s16 temp_s1;
f32 temp_fs3;
s16 var_s1;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A286C0.s") sp64.x = (Math_SinS(this->actor.wallYaw + 0x8000) * 50.0f) + this->actor.world.pos.x;
sp64.y = this->actor.world.pos.y;
sp64.z = (Math_CosS(this->actor.wallYaw + 0x8000) * 50.0f) + this->actor.world.pos.z;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A28708.s") this->unk_2A2 = 40;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A28760.s") for (ptr = &this->unk_2FC[0], i = 0; i < ARRAY_COUNT(this->unk_2FC); i++, ptr++) {
temp_s1 = (s32)randPlusMinusPoint5Scaled(20480.0f) + this->actor.wallYaw;
temp_s2 = Rand_S16Offset(0x1000, 0x3000);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A287E8.s") temp_fs2 = Math_SinS(temp_s2);
temp_fs3 = Math_CosS(temp_s2);
temp_fs0 = Rand_ZeroFloat(5.0f) + 7.0f;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A28970.s") ptr->unk_0C.x = Math_SinS(temp_s1) * (temp_fs0 * temp_fs3);
ptr->unk_0C.y = (temp_fs0 * temp_fs2) + 3.0f;
ptr->unk_0C.z = Math_CosS(temp_s1) * (temp_fs0 * temp_fs3);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A289C8.s") ptr->unk_18.x = (s32)Rand_Next() >> 0x10;
ptr->unk_18.y = (s32)Rand_Next() >> 0x10;
ptr->unk_18.z = (s32)Rand_Next() >> 0x10;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A28A28.s") if ((s16)(temp_s1 - this->actor.wallYaw) > 0) {
var_s1 = this->actor.wallYaw + 0x4000;
} else {
var_s1 = this->actor.wallYaw - 0x4000;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A28A98.s") ptr->unk_00.x = (Math_SinS(var_s1) * (60.0f * temp_fs3)) + sp64.x;
ptr->unk_00.y = (60.0f * temp_fs2) + sp64.y;
ptr->unk_00.z = (Math_CosS(var_s1) * (60.0f * temp_fs3)) + sp64.z;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A28B98.s") ptr->unk_20 = Rand_ZeroFloat(0.0025000002f) + 0.002f;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A28D0C.s") Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_B_PAMET_BREAK);
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A28D80.s") void func_80A27DD8(EnBigpamet* this, PlayState* play) {
s32 i;
Vec3f pos;
Vec3f sp8C;
f32 temp_fs0;
f32 temp_fs4;
f32 temp_fs5;
s16 temp_s0;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A28DC0.s") temp_fs4 = Math_SinS(this->actor.wallYaw + 0x4000);
temp_fs5 = Math_CosS(this->actor.wallYaw + 0x4000);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A28E40.s") sp8C.x = Math_SinS(this->actor.wallYaw + 0x8000) * 50.0f + this->actor.world.pos.x;
sp8C.y = this->actor.world.pos.y;
sp8C.z = (Math_CosS(this->actor.wallYaw + 0x8000) * 50.0f) + this->actor.world.pos.z;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A28E98.s") sp8C.x += (this->actor.world.pos.x - sp8C.x) * 0.3f;
sp8C.z += (this->actor.world.pos.z - sp8C.z) * 0.3f;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A28ED4.s") for (i = 0; i < 4; i++) {
temp_fs0 = Rand_ZeroFloat(60.0f) + 50.0f;
temp_s0 = Rand_Next() >> 0x11;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A28EE8.s") pos.x = (Math_CosS(temp_s0) * temp_fs0 * temp_fs4) + sp8C.x;
pos.y = (Math_SinS(temp_s0) * temp_fs0) + sp8C.y;
pos.z = (Math_CosS(temp_s0) * temp_fs0 * temp_fs5) + sp8C.z;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A29028.s") func_800B12F0(play, &pos, &gZeroVec3f, &gZeroVec3f, Rand_S16Offset(950, 100), Rand_S16Offset(20, 10), 20);
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A29094.s") void func_80A27FE8(EnBigpamet* this, PlayState* play) {
Vec3f pos;
s16 sp32;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/EnBigpamet_Update.s") if (this->actor.depthInWater > 0.0f) {
pos.x = this->actor.world.pos.x;
pos.z = this->actor.world.pos.z;
pos.y = this->actor.world.pos.y + this->actor.depthInWater;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A292A8.s") EffectSsGRipple_Spawn(play, &pos, 500, 900, 0);
pos.y += 8.0f;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A293E4.s") if (this->actionFunc != func_80A28D0C) {
sp32 = (s32)randPlusMinusPoint5Scaled(0x8000) + this->actor.world.rot.y;
pos.x -= 55.0f * Math_SinS(sp32);
pos.z -= 55.0f * Math_CosS(sp32);
}
EffectSsGSplash_Spawn(play, &pos, NULL, NULL, 0, Rand_S16Offset(1400, 200));
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A29494.s") void func_80A2811C(EnBigpamet* this, PlayState* play) {
Vec3f pos;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/EnBigpamet_Draw.s") if ((this->actor.depthInWater > 0.0f) && ((play->gameplayFrames % 14) == 0)) {
pos.x = this->actor.world.pos.x;
pos.y = this->actor.world.pos.y + this->actor.depthInWater;
pos.z = this->actor.world.pos.z;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A29580.s") EffectSsGRipple_Spawn(play, &pos, 500, 900, 0);
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A29628.s") void func_80A281B4(EnBigpamet* this) {
this->actor.draw = NULL;
this->actor.flags &= ~ACTOR_FLAG_1;
this->actionFunc = func_80A281DC;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bigpamet/func_80A2966C.s") void func_80A281DC(EnBigpamet* this, PlayState* play) {
WaterBox* sp2C;
f32 sp28;
if (this->actor.parent->params == GEKKO_GET_SNAPPER) {
if (WaterBox_GetSurface1(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &sp28, &sp2C)) {
this->actor.depthInWater = sp28 - this->actor.world.pos.y;
} else {
this->actor.depthInWater = this->actor.world.pos.y;
}
func_80A2778C(this);
func_80A27970(this, play);
func_80A28274(this);
}
}
void func_80A28274(EnBigpamet* this) {
Animation_PlayLoop(&this->skelAnime2, &object_tl_Anim_004210);
this->actor.draw = EnBigpamet_Draw;
this->unk_29E = 20;
this->actionFunc = func_80A282C8;
}
void func_80A282C8(EnBigpamet* this, PlayState* play) {
if (Math_SmoothStepToF(&this->actor.world.pos.y, this->actor.floorHeight, 0.7f, 30.0f, 10.0f) < 1.0f) {
this->unk_29E--;
if (this->unk_29E >= 16) {
func_80A27970(this, play);
}
if (this->unk_29E == 0) {
func_80A28378(this);
}
} else {
func_80A27970(this, play);
}
}
void func_80A28378(EnBigpamet* this) {
this->actor.parent->params = GEKKO_INIT_SNAPPER;
this->actor.speedXZ = 0.0f;
this->actionFunc = func_80A283A0;
}
void func_80A283A0(EnBigpamet* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime2);
if (this->actor.parent->params == GEKKO_ON_SNAPPER) {
func_80A28E40(this);
}
}
void func_80A283F0(EnBigpamet* this) {
Animation_PlayLoop(&this->skelAnime2, &object_tl_Anim_00823C);
this->actor.speedXZ = 1.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actor.params = ENBIGPAMET_1;
this->actionFunc = func_80A2844C;
}
void func_80A2844C(EnBigpamet* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime2);
if (this->actor.parent->params == GEKKO_RETURN_TO_SNAPPER) {
Math_ScaledStepToS(&this->actor.shape.rot.y, Actor_YawBetweenActors(&this->actor, this->actor.parent), 0x400);
this->actor.world.rot.y = this->actor.shape.rot.y;
} else if (this->actor.parent->params == GEKKO_JUMP_ON_SNAPPER) {
this->actor.speedXZ = 0.0f;
} else if (this->actor.parent->params == GEKKO_ON_SNAPPER) {
func_80A28E40(this);
}
}
void func_80A284E4(EnBigpamet* this) {
Animation_MorphToPlayOnce(&this->skelAnime2, &object_tl_Anim_001C68, -3.0f);
this->unk_29E = 0;
this->unk_2A8 = 1.0f;
this->unk_2A4 = 1.0f;
this->actor.speedXZ = 0.0f;
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_B_PAMET_VOICE);
Actor_PlaySfxAtPos(this->actor.parent, NA_SE_EN_FROG_VOICE1);
this->actionFunc = func_80A2855C;
}
void func_80A2855C(EnBigpamet* this, PlayState* play) {
if (SkelAnime_Update(&this->skelAnime2)) {
func_80A28618(this);
} else if (this->skelAnime2.curFrame > 2.0f) {
this->unk_2A8 = 1.5f - ((this->skelAnime2.curFrame - 2.0f) * 0.23333333f);
this->unk_2A4 = 1.5f - ((this->skelAnime2.curFrame - 2.0f) * 0.083333336f);
} else {
f32 curFrame = this->skelAnime2.curFrame;
this->unk_2A4 = this->unk_2A8 = (0.25f * curFrame) + 1.0f;
}
}
void func_80A28618(EnBigpamet* this) {
this->actor.draw = func_80A2966C;
this->unk_2A8 = 0.5f;
this->actor.speedXZ = 0.0f;
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PAMET_CUTTER_ON);
this->actionFunc = func_80A2866C;
}
void func_80A2866C(EnBigpamet* this, PlayState* play) {
this->unk_2A8 += 0.2f;
if (this->unk_2A8 > 1.1f) {
func_80A286C0(this);
}
}
void func_80A286C0(EnBigpamet* this) {
this->collider.info.bumper.dmgFlags = 0xF7CF7FFF;
this->collider.base.atFlags |= AT_ON;
this->actor.shape.rot.z = 0x680;
this->unk_29E = 15;
this->unk_2A8 = 1.0f;
this->actionFunc = func_80A28708;
}
void func_80A28708(EnBigpamet* this, PlayState* play) {
this->unk_29E--;
this->actor.shape.rot.y += 0x3B00;
func_800B9010(&this->actor, NA_SE_EN_B_PAMET_ROLL - SFX_FLAG);
if (this->unk_29E == 0) {
func_80A28760(this);
}
}
void func_80A28760(EnBigpamet* this) {
this->actor.speedXZ = 15.0f;
if (this->actor.bgCheckFlags & 8) {
s16 temp_v1 = this->actor.yawTowardsPlayer - this->actor.wallYaw;
this->actor.bgCheckFlags &= ~8;
if (temp_v1 > 0x3C00) {
this->actor.world.rot.y = this->actor.wallYaw + 0x3C00;
} else if (temp_v1 < -0x3C00) {
this->actor.world.rot.y = this->actor.wallYaw - 0x3C00;
} else {
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
}
} else {
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
}
this->unk_29E = 0;
this->actionFunc = func_80A287E8;
}
void func_80A287E8(EnBigpamet* this, PlayState* play) {
s16 quake;
this->actor.shape.rot.y += 0x3B00;
func_800B9010(&this->actor, NA_SE_EN_B_PAMET_ROLL - SFX_FLAG);
this->unk_29E++;
this->unk_29E = CLAMP_MAX(this->unk_29E, 20);
if (this->collider.base.atFlags & AT_HIT) {
this->collider.base.atFlags &= ~AT_HIT;
if ((s16)(this->actor.yawTowardsPlayer - this->actor.world.rot.y) > 0) {
this->actor.world.rot.y = this->actor.world.rot.y - 0x300;
} else {
this->actor.world.rot.y = this->actor.world.rot.y + 0x300;
}
}
if (play->gameplayFrames & 1) {
func_80A27FE8(this, play);
}
if (this->actor.bgCheckFlags & 8) {
quake = Quake_Add(GET_ACTIVE_CAM(play), 3);
this->actor.velocity.y = this->unk_29E * 0.375f;
Quake_SetSpeed(quake, 0x4E20);
Quake_SetQuakeValues(quake, 15, 0, 0, 0);
Quake_SetCountdown(quake, 10);
Rumble_Request(this->actor.xyzDistToPlayerSq, 180, 20, 100);
func_80A27B58(this);
func_80A27DD8(this, play);
func_80A28970(this);
}
}
void func_80A28970(EnBigpamet* this) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PAMET_CUTTER_OFF);
this->actor.shape.rot.z = 0;
this->collider.base.atFlags &= ~AT_ON;
this->collider.info.bumper.dmgFlags = 0xF7CFFFFF;
this->actor.speedXZ = 0.0f;
this->actionFunc = func_80A289C8;
}
void func_80A289C8(EnBigpamet* this, PlayState* play) {
this->unk_2A8 -= 0.1f;
if (this->unk_2A8 < 0.5f) {
func_80A28A28(this);
}
func_80A27DD8(this, play);
}
void func_80A28A28(EnBigpamet* this) {
this->actor.draw = EnBigpamet_Draw;
Animation_MorphToPlayOnce(&this->skelAnime2, &object_tl_Anim_0031DC, -3.0f);
this->unk_2A8 = 0.1f;
this->unk_2A4 = 1.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actionFunc = func_80A28A98;
}
void func_80A28A98(EnBigpamet* this, PlayState* play) {
f32 curFrame;
Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0x600);
if (SkelAnime_Update(&this->skelAnime2)) {
if ((this->actor.parent->params == GEKKO_RETURN_TO_SNAPPER) ||
(this->actor.parent->params == GEKKO_JUMP_ON_SNAPPER)) {
func_80A283F0(this);
} else {
func_80A284E4(this);
}
} else {
curFrame = this->skelAnime2.curFrame;
if (curFrame > 7.0f) {
this->unk_2A8 = 1.5f - ((curFrame - 7.0f) * (1.0f / 6.0f));
this->unk_2A4 = 1.5f - ((curFrame - 7.0f) * (1.0f / 6.0f));
} else {
this->unk_2A8 = (0.2f * curFrame) + 0.1f;
this->unk_2A4 = ((1.0f / 14.0f) * curFrame) + 1.0f;
}
}
}
void func_80A28B98(EnBigpamet* this, PlayState* play) {
Actor* collectible;
Animation_PlayLoop(&this->skelAnime2, &object_tl_Anim_000AF4);
this->collider.base.atFlags &= ~AT_ON;
this->collider.info.bumper.dmgFlags = 0xF7CFFFFF;
this->collider.base.atFlags &= ~(AT_HIT | AT_BOUNCED);
this->collider.base.acFlags &= ~AC_ON;
this->actor.velocity.y = 22.0f;
this->actor.speedXZ = 5.0f;
if ((this->actor.draw == func_80A2966C) && (this->actionFunc != func_80A28DC0)) {
this->actor.draw = EnBigpamet_Draw;
} else if (this->collider.base.ac != NULL) {
this->actor.world.rot.y = BINANG_ROT180(Actor_YawBetweenActors(&this->actor, this->collider.base.ac));
}
this->actor.shape.rot.y = this->actor.world.rot.y;
this->actor.bgCheckFlags &= ~1;
this->actor.flags &= ~ACTOR_FLAG_1;
this->actor.params = ENBIGPAMET_0;
if ((this->actor.parent->params == GEKKO_ON_SNAPPER) || (this->actor.parent->params == GEKKO_REAR_ON_SNAPPER) ||
(this->actor.parent->params == GEKKO_JUMP_ON_SNAPPER)) {
this->actor.parent->params = GEKKO_CUTSCENE;
}
collectible = Item_DropCollectible(play, &this->actor.world.pos, ITEM00_ARROWS_10);
if (collectible != NULL) {
collectible->velocity.y = 15.0f;
collectible->world.rot.y = Actor_YawToPoint(&this->actor, &this->actor.home.pos);
}
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_B_PAMET_REVERSE);
this->actionFunc = func_80A28D0C;
}
void func_80A28D0C(EnBigpamet* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime2);
if (this->actor.bgCheckFlags & 1) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_HIPLOOP_LAND);
func_80A27FE8(this, play);
func_80A28D80(this);
}
this->actor.shape.rot.x += 0x800;
this->actor.shape.rot.z += 0x1000;
}
void func_80A28D80(EnBigpamet* this) {
this->actor.draw = func_80A2966C;
this->actor.speedXZ = 0.0f;
this->actor.shape.rot.x = 0;
this->actor.shape.rot.z = 0;
this->unk_2A8 = 0.0f;
this->collider.base.acFlags |= AC_ON;
this->actionFunc = func_80A28DC0;
}
void func_80A28DC0(EnBigpamet* this, PlayState* play) {
this->actor.shape.rot.x = (s32)Rand_Next() >> 0x16;
this->actor.shape.rot.z = (s32)Rand_Next() >> 0x16;
if ((this->actor.parent->params == GEKKO_RETURN_TO_SNAPPER) ||
(this->actor.parent->params == GEKKO_JUMP_ON_SNAPPER)) {
func_80A28A28(this);
} else if (this->actor.parent->params == GEKKO_DEFEAT) {
func_80A28ED4(this);
}
}
void func_80A28E40(EnBigpamet* this) {
Animation_MorphToPlayOnce(&this->skelAnime2, &object_tl_Anim_000440, -2.0f);
this->actor.flags |= ACTOR_FLAG_1;
this->actor.speedXZ = 0.0f;
this->actionFunc = func_80A28E98;
}
void func_80A28E98(EnBigpamet* this, PlayState* play) {
if (SkelAnime_Update(&this->skelAnime2)) {
func_80A284E4(this);
}
}
void func_80A28ED4(EnBigpamet* this) {
this->actionFunc = func_80A28EE8;
}
void func_80A28EE8(EnBigpamet* this, PlayState* play) {
Vec3f pos;
s16 sp3A;
this->actor.shape.rot.x = (s32)Rand_Next() >> 0x16;
this->actor.shape.rot.z = (s32)Rand_Next() >> 0x16;
if (Math_StepToF(&this->actor.scale.x, 0.0f, 0.00075f)) {
sp3A = BINANG_ROT180(Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)));
pos.x = (Math_SinS(sp3A) * 20.0f) + this->actor.world.pos.x;
pos.y = this->actor.world.pos.y + 25.0f;
pos.z = (Math_CosS(sp3A) * 20.0f) + this->actor.world.pos.z;
func_800B0DE0(play, &pos, &gZeroVec3f, &gZeroVec3f, &D_80A29788, &D_80A2978C, 800, 50);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 50, NA_SE_EN_NPC_FADEAWAY);
Actor_MarkForDeath(&this->actor);
}
this->actor.scale.y = this->actor.scale.x;
this->actor.scale.z = this->actor.scale.x;
}
void func_80A29028(EnBigpamet* this, PlayState* play) {
if (this->collider.base.acFlags & AC_HIT) {
this->collider.base.acFlags &= ~AC_HIT;
if ((this->actor.colChkInfo.damageEffect == 0xF) && (this->actor.parent->params != GEKKO_JUMP_ON_SNAPPER) &&
(this->actionFunc != func_80A28E98)) {
func_80A28B98(this, play);
}
}
}
void func_80A29094(EnBigpamet* this) {
EnBigpametStruct* ptr = &this->unk_2FC[0];
s32 i;
for (i = 0; i < ARRAY_COUNT(this->unk_2FC); i++, ptr++) {
ptr->unk_0C.y -= 1.0f;
Math_Vec3f_Sum(&ptr->unk_00, &ptr->unk_0C, &ptr->unk_00);
ptr->unk_18.x += (s16)((Rand_Next() >> 0x17) + 0x700);
ptr->unk_18.y += (s16)((Rand_Next() >> 0x17) + 0x900);
ptr->unk_18.z += (s16)((Rand_Next() >> 0x17) + 0xB00);
}
}
void EnBigpamet_Update(Actor* thisx, PlayState* play) {
s32 pad;
EnBigpamet* this = THIS;
func_80A2768C(this);
func_80A29028(this, play);
this->actionFunc(this, play);
if (this->unk_2A2 > 0) {
this->unk_2A2--;
func_80A29094(this);
}
if ((this->actionFunc != func_80A281DC) && (this->actionFunc != func_80A282C8)) {
Actor_MoveWithGravity(&this->actor);
Actor_UpdateBgCheckInfo(play, &this->actor, 40.0f, 50.0f, 60.0f, 0x1F);
func_80A276F4(this);
Actor_SetFocus(&this->actor, 25.0f);
Collider_UpdateCylinder(&this->actor, &this->collider);
if (this->collider.base.atFlags & AT_ON) {
CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base);
}
if (this->collider.base.acFlags & AC_ON) {
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
}
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
if (this->actionFunc != func_80A287E8) {
func_80A2811C(this, play);
}
}
}
void func_80A292A8(EnBigpamet* this, PlayState* play) {
s32 i;
EnBigpametStruct* ptr;
if (this->unk_2A2 > 0) {
OPEN_DISPS(play->state.gfxCtx);
func_8012C28C(play->state.gfxCtx);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x80, 255, 255, 255, 255);
gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255);
for (ptr = &this->unk_2FC[0], i = 0; i < ARRAY_COUNT(this->unk_2FC); i++, ptr++) {
Matrix_SetTranslateRotateYXZ(ptr->unk_00.x, ptr->unk_00.y, ptr->unk_00.z, &ptr->unk_18);
Matrix_Scale(ptr->unk_20, ptr->unk_20, ptr->unk_20, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gameplay_keep_DL_06AB30);
}
CLOSE_DISPS(play->state.gfxCtx);
}
}
s32 EnBigpamet_OverrideLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
EnBigpamet* this = THIS;
if ((this->actionFunc == func_80A2855C) || (this->actionFunc == func_80A28A98)) {
if (limbIndex == OBJECT_TL_2_LIMB_02) {
Matrix_Scale(this->unk_2A4, this->unk_2A8, this->unk_2A4, MTXMODE_APPLY);
} else if ((limbIndex == OBJECT_TL_2_LIMB_0B) || (limbIndex == OBJECT_TL_2_LIMB_09) ||
(limbIndex == OBJECT_TL_2_LIMB_07) || (limbIndex == OBJECT_TL_2_LIMB_05)) {
Matrix_Scale(this->unk_2A4, this->unk_2A8, this->unk_2A8, MTXMODE_APPLY);
}
}
return false;
}
void EnBigpamet_PostLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
EnBigpamet* this = THIS;
if (limbIndex == OBJECT_TL_2_LIMB_01) {
this->unk_2AC = Matrix_GetCurrent()->yw;
}
}
void EnBigpamet_Draw(Actor* thisx, PlayState* play) {
EnBigpamet* this = THIS;
OPEN_DISPS(play->state.gfxCtx);
func_8012C28C(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, D_80A29754[this->unk_29C]);
SkelAnime_DrawFlexOpa(play, this->skelAnime2.skeleton, this->skelAnime2.jointTable, this->skelAnime2.dListCount,
EnBigpamet_OverrideLimbDraw2, EnBigpamet_PostLimbDraw2, &this->actor);
func_80A292A8(this, play);
CLOSE_DISPS(play->state.gfxCtx);
}
s32 EnBigpamet_OverrideLimbDraw1(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
EnBigpamet* this = THIS;
if (limbIndex == OBJECT_TL_1_LIMB_01) {
if (this->actionFunc == func_80A28D0C) {
pos->y -= 2500.0f;
} else {
pos->y -= 700.0f;
}
}
if ((this->unk_2A8 != 1.0f) && (limbIndex == OBJECT_TL_1_LIMB_03)) {
Matrix_Scale(1.0f, this->unk_2A8, this->unk_2A8, MTXMODE_APPLY);
}
return false;
}
void EnBigpamet_PostLimbDraw1(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
EnBigpamet* this = THIS;
if (limbIndex == OBJECT_TL_1_LIMB_01) {
this->unk_2AC = Matrix_GetCurrent()->yw;
}
}
void func_80A2966C(Actor* thisx, PlayState* play) {
EnBigpamet* this = THIS;
func_8012C28C(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime1.skeleton, this->skelAnime1.jointTable, this->skelAnime1.dListCount,
EnBigpamet_OverrideLimbDraw1, EnBigpamet_PostLimbDraw1, &this->actor);
func_80A292A8(this, play);
}

View File

@ -2,18 +2,42 @@
#define Z_EN_BIGPAMET_H #define Z_EN_BIGPAMET_H
#include "global.h" #include "global.h"
#include "objects/object_tl/object_tl.h"
struct EnBigpamet; struct EnBigpamet;
typedef void (*EnBigpametActionFunc)(struct EnBigpamet*, PlayState*); typedef void (*EnBigpametActionFunc)(struct EnBigpamet*, PlayState*);
enum {
/* 0 */ ENBIGPAMET_0,
/* 1 */ ENBIGPAMET_1,
};
typedef struct {
/* 0x00 */ Vec3f unk_00;
/* 0x0C */ Vec3f unk_0C;
/* 0x18 */ Vec3s unk_18;
/* 0x20 */ f32 unk_20;
} EnBigpametStruct; // size = 0x24
typedef struct EnBigpamet { typedef struct EnBigpamet {
/* 0x000 */ Actor actor; /* 0x000 */ Actor actor;
/* 0x144 */ char unk_144[0x154]; /* 0x144 */ SkelAnime skelAnime2;
/* 0x188 */ Vec3s jointTable2[OBJECT_TL_2_LIMB_MAX];
/* 0x1D6 */ Vec3s morphTable2[OBJECT_TL_2_LIMB_MAX];
/* 0x224 */ SkelAnime skelAnime1;
/* 0x268 */ Vec3s jointTable1[OBJECT_TL_1_LIMB_MAX];
/* 0x280 */ Vec3s morphTable1[OBJECT_TL_1_LIMB_MAX];
/* 0x298 */ EnBigpametActionFunc actionFunc; /* 0x298 */ EnBigpametActionFunc actionFunc;
/* 0x29C */ char unk_29C[0x10]; /* 0x29C */ u8 unk_29C;
/* 0x29E */ s16 unk_29E;
/* 0x2A0 */ UNK_TYPE1 pad2A0[2];
/* 0x2A2 */ s16 unk_2A2;
/* 0x2A4 */ f32 unk_2A4;
/* 0x2A8 */ f32 unk_2A8;
/* 0x2AC */ f32 unk_2AC; /* 0x2AC */ f32 unk_2AC;
/* 0x2B0 */ char unk_2B0[0x31C]; /* 0x2B0 */ ColliderCylinder collider;
/* 0x2FC */ EnBigpametStruct unk_2FC[20];
} EnBigpamet; // size = 0x5CC } EnBigpamet; // size = 0x5CC
extern const ActorInit En_Bigpamet_InitVars; extern const ActorInit En_Bigpamet_InitVars;

View File

@ -10036,11 +10036,11 @@
0x80A29094:("func_80A29094",), 0x80A29094:("func_80A29094",),
0x80A29150:("EnBigpamet_Update",), 0x80A29150:("EnBigpamet_Update",),
0x80A292A8:("func_80A292A8",), 0x80A292A8:("func_80A292A8",),
0x80A293E4:("func_80A293E4",), 0x80A293E4:("EnBigpamet_OverrideLimbDraw2",),
0x80A29494:("func_80A29494",), 0x80A29494:("EnBigpamet_PostLimbDraw2",),
0x80A294D8:("EnBigpamet_Draw",), 0x80A294D8:("EnBigpamet_Draw",),
0x80A29580:("func_80A29580",), 0x80A29580:("EnBigpamet_OverrideLimbDraw1",),
0x80A29628:("func_80A29628",), 0x80A29628:("EnBigpamet_PostLimbDraw1",),
0x80A2966C:("func_80A2966C",), 0x80A2966C:("func_80A2966C",),
0x80A29A80:("func_80A29A80",), 0x80A29A80:("func_80A29A80",),
0x80A29C18:("BgDblueMovebg_Init",), 0x80A29C18:("BgDblueMovebg_Init",),

View File

@ -927,18 +927,6 @@ D_06001398 = 0x06001398;
D_06000074 = 0x06000074; D_06000074 = 0x06000074;
D_06001E60 = 0x06001E60; D_06001E60 = 0x06001E60;
// ovl_En_Bigpamet
D_06000440 = 0x06000440;
D_06000AF4 = 0x06000AF4;
D_06000B30 = 0x06000B30;
D_06001A50 = 0x06001A50;
D_06001C68 = 0x06001C68;
D_060031DC = 0x060031DC;
D_06004210 = 0x06004210;
D_06007C70 = 0x06007C70;
D_0600823C = 0x0600823C;
// ovl_En_Bombal // ovl_En_Bombal
D_06000A00 = 0x06000A00; D_06000A00 = 0x06000A00;