summaryrefslogtreecommitdiff
path: root/src/overlays/actors
diff options
context:
space:
mode:
Diffstat (limited to 'src/overlays/actors')
-rw-r--r--src/overlays/actors/ovl_En_Insect/z_en_insect.c320
-rw-r--r--src/overlays/actors/ovl_En_Insect/z_en_insect.h20
2 files changed, 174 insertions, 166 deletions
diff --git a/src/overlays/actors/ovl_En_Insect/z_en_insect.c b/src/overlays/actors/ovl_En_Insect/z_en_insect.c
index ddbcd54d0..9a87c5b0f 100644
--- a/src/overlays/actors/ovl_En_Insect/z_en_insect.c
+++ b/src/overlays/actors/ovl_En_Insect/z_en_insect.c
@@ -13,21 +13,24 @@ void EnInsect_Destroy(Actor* thisx, PlayState* play2);
void EnInsect_Update(Actor* thisx, PlayState* play);
void EnInsect_Draw(Actor* thisx, PlayState* play);
-void func_8091AC78(EnInsect* this);
-void func_8091ACC4(EnInsect* this, PlayState* play);
-void func_8091AE10(EnInsect* this);
-void func_8091AE5C(EnInsect* this, PlayState* play);
-void func_8091B030(EnInsect* this);
-void func_8091B07C(EnInsect* this, PlayState* play);
-void func_8091B2D8(EnInsect* this, PlayState* play);
-void func_8091B3D0(EnInsect* this);
-void func_8091B440(EnInsect* this, PlayState* play);
-void func_8091B618(EnInsect* this);
-void func_8091B670(EnInsect* this, PlayState* play);
-void func_8091B928(EnInsect* this);
-void func_8091B984(EnInsect* this, PlayState* play);
-
-s16 D_8091BD60 = 0;
+void EnInsect_SetupSlowDown(EnInsect* this);
+void EnInsect_SlowDown(EnInsect* this, PlayState* play);
+void EnInsect_SetupCrawl(EnInsect* this);
+void EnInsect_Crawl(EnInsect* this, PlayState* play);
+void EnInsect_SetupRunFromPlayer(EnInsect* this);
+void EnInsect_RunFromPlayer(EnInsect* this, PlayState* play);
+void EnInsect_Caught(EnInsect* this, PlayState* play);
+void EnInsect_SetupDig(EnInsect* this);
+void EnInsect_Dig(EnInsect* this, PlayState* play);
+void EnInsect_SetupWalkOnWater(EnInsect* this);
+void EnInsect_WalkOnWater(EnInsect* this, PlayState* play);
+void EnInsect_SetupDrown(EnInsect* this);
+void EnInsect_Drown(EnInsect* this, PlayState* play);
+
+/**
+ * The number of bugs caught this frame.
+ */
+static s16 sCaughtCount = 0;
ActorProfile En_Insect_Profile = {
/**/ ACTOR_EN_INSECT,
@@ -68,7 +71,7 @@ static ColliderJntSphInit sJntSphInit = {
sJntSphElementsInit,
};
-u16 D_8091BDB8[] = { 0, 5 };
+static u16 sInitInsectFlags[] = { 0, INSECT_FLAG_0 | INSECT_FLAG_IS_SHORT_LIVED };
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 10, ICHAIN_CONTINUE),
@@ -77,10 +80,10 @@ static InitChainEntry sInitChain[] = {
ICHAIN_F32(cullingVolumeDownward, 30, ICHAIN_STOP),
};
-Vec3f D_8091BDCC = { 0.0f, 0.0f, 0.0f };
+static Vec3f sAccel = { 0.0f, 0.0f, 0.0f };
-void func_8091A8A0(EnInsect* this) {
- this->unk_30C = D_8091BDB8[ENINSECT_GET_1(&this->actor)];
+void EnInsect_InitFlags(EnInsect* this) {
+ this->insectFlags = sInitInsectFlags[ENINSECT_GET_INIT_FLAGS(&this->actor)];
}
f32 EnInsect_XZDistanceSquared(Vec3f* arg0, Vec3f* arg1) {
@@ -90,30 +93,30 @@ f32 EnInsect_XZDistanceSquared(Vec3f* arg0, Vec3f* arg1) {
s32 EnInsect_InBottleRange(EnInsect* this, PlayState* play) {
s32 pad;
Player* player = GET_PLAYER(play);
- Vec3f sp1C;
+ Vec3f pos;
if (this->actor.xzDistToPlayer < 32.0f) {
- sp1C.x = player->actor.world.pos.x + (Math_SinS(BINANG_ROT180(this->actor.yawTowardsPlayer)) * 16.0f);
- sp1C.y = player->actor.world.pos.y;
- sp1C.z = player->actor.world.pos.z + (Math_CosS(BINANG_ROT180(this->actor.yawTowardsPlayer)) * 16.0f);
- if (EnInsect_XZDistanceSquared(&sp1C, &this->actor.world.pos) <= SQ(20.0f)) {
+ pos.x = player->actor.world.pos.x + (Math_SinS(BINANG_ROT180(this->actor.yawTowardsPlayer)) * 16.0f);
+ pos.y = player->actor.world.pos.y;
+ pos.z = player->actor.world.pos.z + (Math_CosS(BINANG_ROT180(this->actor.yawTowardsPlayer)) * 16.0f);
+ if (EnInsect_XZDistanceSquared(&pos, &this->actor.world.pos) <= SQ(20.0f)) {
return true;
}
}
return false;
}
-void func_8091A9E4(EnInsect* this) {
- if (this->unk_316 > 0) {
- this->unk_316--;
+void EnInsect_UpdateCrawlSfx(EnInsect* this) {
+ if (this->crawlSoundDelay > 0) {
+ this->crawlSoundDelay--;
return;
}
Actor_PlaySfx(&this->actor, NA_SE_EN_MUSI_WALK);
- this->unk_316 = 3.0f / CLAMP_MIN(this->skelAnime.playSpeed, 0.1f);
- if (this->unk_316 < 2) {
- this->unk_316 = 2;
+ this->crawlSoundDelay = 3.0f / CLAMP_MIN(this->skelAnime.playSpeed, 0.1f);
+ if (this->crawlSoundDelay < 2) {
+ this->crawlSoundDelay = 2;
}
}
@@ -126,7 +129,7 @@ void EnInsect_Init(Actor* thisx, PlayState* play) {
this->actor.shape.rot.y = this->actor.world.rot.y;
Actor_ProcessInitChain(&this->actor, sInitChain);
- func_8091A8A0(this);
+ EnInsect_InitFlags(this);
SkelAnime_Init(play, &this->skelAnime, &gameplay_keep_Skel_0527A0, &gameplay_keep_Anim_05140C, this->jointTable,
this->morphTable, BUG_LIMB_MAX);
@@ -142,23 +145,23 @@ void EnInsect_Init(Actor* thisx, PlayState* play) {
this->actor.colChkInfo.mass = 30;
- if (this->unk_30C & 1) {
+ if (this->insectFlags & INSECT_FLAG_0) {
this->actor.gravity = -0.2f;
this->actor.terminalVelocity = -2.0f;
}
- if (this->unk_30C & 4) {
- this->unk_314 = Rand_S16Offset(200, 40);
+ if (this->insectFlags & INSECT_FLAG_IS_SHORT_LIVED) {
+ this->lifeTimer = Rand_S16Offset(200, 40);
this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
}
rand = Rand_ZeroOne();
if (rand < 0.3f) {
- func_8091AC78(this);
+ EnInsect_SetupSlowDown(this);
} else if (rand < 0.4f) {
- func_8091AE10(this);
+ EnInsect_SetupCrawl(this);
} else {
- func_8091B030(this);
+ EnInsect_SetupRunFromPlayer(this);
}
}
@@ -169,102 +172,97 @@ void EnInsect_Destroy(Actor* thisx, PlayState* play2) {
Collider_DestroyJntSph(play, &this->collider);
}
-void func_8091AC78(EnInsect* this) {
- this->unk_312 = Rand_S16Offset(5, 35);
- this->actionFunc = func_8091ACC4;
- this->unk_30C |= 0x100;
+void EnInsect_SetupSlowDown(EnInsect* this) {
+ this->actionTimer = Rand_S16Offset(5, 35);
+ this->actionFunc = EnInsect_SlowDown;
+ this->insectFlags |= INSECT_FLAG_CRAWLING;
}
-void func_8091ACC4(EnInsect* this, PlayState* play) {
- f32 temp_f2;
+void EnInsect_SlowDown(EnInsect* this, PlayState* play) {
+ f32 playSpeed;
Math_SmoothStepToF(&this->actor.speed, 0.0f, 0.1f, 0.5f, 0.0f);
- temp_f2 = (Rand_ZeroOne() * 0.8f) + (this->actor.speed * 1.2f);
- if (temp_f2 < 0.0f) {
- this->skelAnime.playSpeed = 0.0f;
- } else {
- f32 clamped = CLAMP_MAX(temp_f2, 1.9f);
-
- this->skelAnime.playSpeed = clamped;
- }
+ playSpeed = (Rand_ZeroOne() * 0.8f) + (this->actor.speed * 1.2f);
+ this->skelAnime.playSpeed = CLAMP(playSpeed, 0.0f, 1.9f);
SkelAnime_Update(&this->skelAnime);
this->actor.shape.rot.y = this->actor.world.rot.y;
- if (this->unk_312 <= 0) {
- func_8091AE10(this);
+ if (this->actionTimer <= 0) {
+ EnInsect_SetupCrawl(this);
}
- if ((this->unk_30C & 4) && (this->unk_314 <= 0)) {
- func_8091B3D0(this);
- } else if ((this->unk_30C & 1) && (this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH)) {
- func_8091B618(this);
+ if ((this->insectFlags & INSECT_FLAG_IS_SHORT_LIVED) && (this->lifeTimer <= 0)) {
+ EnInsect_SetupDig(this);
+ } else if ((this->insectFlags & INSECT_FLAG_0) && (this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH)) {
+ EnInsect_SetupWalkOnWater(this);
} else if (this->actor.xzDistToPlayer < 40.0f) {
- func_8091B030(this);
+ EnInsect_SetupRunFromPlayer(this);
}
}
-void func_8091AE10(EnInsect* this) {
- this->unk_312 = Rand_S16Offset(10, 45);
- this->actionFunc = func_8091AE5C;
- this->unk_30C |= 0x100;
+void EnInsect_SetupCrawl(EnInsect* this) {
+ this->actionTimer = Rand_S16Offset(10, 45);
+ this->actionFunc = EnInsect_Crawl;
+ this->insectFlags |= INSECT_FLAG_CRAWLING;
}
-void func_8091AE5C(EnInsect* this, PlayState* play) {
+void EnInsect_Crawl(EnInsect* this, PlayState* play) {
s32 pad;
- f32 temp_f0;
+ f32 playSpeed;
+ s16 yaw;
Math_SmoothStepToF(&this->actor.speed, 1.5f, 0.1f, 0.5f, 0.0f);
if ((EnInsect_XZDistanceSquared(&this->actor.world.pos, &this->actor.home.pos) > SQ(40.0f)) ||
- (this->unk_312 < 4)) {
- Math_ScaledStepToS(&this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &this->actor.home.pos),
- 0x7D0);
+ (this->actionTimer < 4)) {
+ yaw = Math_Vec3f_Yaw(&this->actor.world.pos, &this->actor.home.pos);
+ Math_ScaledStepToS(&this->actor.world.rot.y, yaw, 2000);
} else if ((this->actor.child != NULL) && (&this->actor != this->actor.child)) {
- Math_ScaledStepToS(&this->actor.world.rot.y,
- Math_Vec3f_Yaw(&this->actor.world.pos, &this->actor.child->world.pos), 0x7D0);
+ yaw = Math_Vec3f_Yaw(&this->actor.world.pos, &this->actor.child->world.pos);
+ Math_ScaledStepToS(&this->actor.world.rot.y, yaw, 2000);
}
this->actor.shape.rot.y = this->actor.world.rot.y;
- temp_f0 = this->actor.speed * 1.4f;
- this->skelAnime.playSpeed = CLAMP(temp_f0, 0.7f, 1.9f);
+ playSpeed = this->actor.speed * 1.4f;
+ this->skelAnime.playSpeed = CLAMP(playSpeed, 0.7f, 1.9f);
SkelAnime_Update(&this->skelAnime);
- if (this->unk_312 <= 0) {
- func_8091AC78(this);
+ if (this->actionTimer <= 0) {
+ EnInsect_SetupSlowDown(this);
}
- if ((this->unk_30C & 4) && (this->unk_314 <= 0)) {
- func_8091B3D0(this);
- } else if ((this->unk_30C & 1) && (this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH)) {
- func_8091B618(this);
+ if ((this->insectFlags & INSECT_FLAG_IS_SHORT_LIVED) && (this->lifeTimer <= 0)) {
+ EnInsect_SetupDig(this);
+ } else if ((this->insectFlags & INSECT_FLAG_0) && (this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH)) {
+ EnInsect_SetupWalkOnWater(this);
} else if (this->actor.xzDistToPlayer < 40.0f) {
- func_8091B030(this);
+ EnInsect_SetupRunFromPlayer(this);
}
}
-void func_8091B030(EnInsect* this) {
- this->unk_312 = Rand_S16Offset(10, 40);
- this->actionFunc = func_8091B07C;
- this->unk_30C |= 0x100;
+void EnInsect_SetupRunFromPlayer(EnInsect* this) {
+ this->actionTimer = Rand_S16Offset(10, 40);
+ this->actionFunc = EnInsect_RunFromPlayer;
+ this->insectFlags |= INSECT_FLAG_CRAWLING;
}
-void func_8091B07C(EnInsect* this, PlayState* play) {
+void EnInsect_RunFromPlayer(EnInsect* this, PlayState* play) {
s32 pad;
- f32 speed;
+ f32 playSpeed;
s16 frames;
s16 yaw;
- s32 sp38 = this->actor.xzDistToPlayer < 40.0f;
+ s32 playerIsClose = this->actor.xzDistToPlayer < 40.0f;
Math_SmoothStepToF(&this->actor.speed, 1.8f, 0.1f, 0.5f, 0.0f);
if ((EnInsect_XZDistanceSquared(&this->actor.world.pos, &this->actor.home.pos) > SQ(160.0f)) ||
- (this->unk_312 < 4)) {
+ (this->actionTimer < 4)) {
Math_ScaledStepToS(&this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &this->actor.home.pos),
- 0x7D0);
- } else if (sp38) {
+ 2000);
+ } else if (playerIsClose) {
frames = play->state.frames;
yaw = BINANG_ROT180(this->actor.yawTowardsPlayer);
if ((frames & 0x10) != 0) {
@@ -278,62 +276,62 @@ void func_8091B07C(EnInsect* this, PlayState* play) {
//! FAKE:
if (play) {}
- Math_ScaledStepToS(&this->actor.world.rot.y, yaw, 0x7D0);
+ Math_ScaledStepToS(&this->actor.world.rot.y, yaw, 2000);
}
this->actor.shape.rot.y = this->actor.world.rot.y;
- speed = this->actor.speed * 1.6f;
- this->skelAnime.playSpeed = CLAMP(speed, 0.8f, 1.9f);
+ playSpeed = this->actor.speed * 1.6f;
+ this->skelAnime.playSpeed = CLAMP(playSpeed, 0.8f, 1.9f);
SkelAnime_Update(&this->skelAnime);
- if ((this->unk_312 <= 0) || !sp38) {
- func_8091AC78(this);
- } else if ((this->unk_30C & 1) && (this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH)) {
- func_8091B618(this);
+ if ((this->actionTimer <= 0) || !playerIsClose) {
+ EnInsect_SetupSlowDown(this);
+ } else if ((this->insectFlags & INSECT_FLAG_0) && (this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH)) {
+ EnInsect_SetupWalkOnWater(this);
}
}
-void func_8091B274(EnInsect* this) {
- this->unk_312 = 200;
+void EnInsect_SetupCaught(EnInsect* this) {
+ this->actionTimer = 200;
Actor_SetScale(&this->actor, 0.001f);
this->actor.draw = NULL;
this->actor.speed = 0.0f;
this->skelAnime.playSpeed = 0.3f;
- this->actionFunc = func_8091B2D8;
- this->unk_30C &= ~0x100;
+ this->actionFunc = EnInsect_Caught;
+ this->insectFlags &= ~INSECT_FLAG_CRAWLING;
}
-void func_8091B2D8(EnInsect* this, PlayState* play) {
- if ((this->unk_312 == 20) && !(this->unk_30C & 4)) {
+void EnInsect_Caught(EnInsect* this, PlayState* play) {
+ if ((this->actionTimer == 20) && !(this->insectFlags & INSECT_FLAG_IS_SHORT_LIVED)) {
this->actor.draw = EnInsect_Draw;
- } else if (this->unk_312 == 0) {
- if (this->unk_30C & 4) {
+ } else if (this->actionTimer == 0) {
+ if (this->insectFlags & INSECT_FLAG_IS_SHORT_LIVED) {
Actor_Kill(&this->actor);
return;
}
Actor_SetScale(&this->actor, 0.01f);
- func_8091AC78(this);
- } else if (this->unk_312 < 20) {
+ EnInsect_SetupSlowDown(this);
+ } else if (this->actionTimer < 20) {
Actor_SetScale(&this->actor, CLAMP_MAX(this->actor.scale.x + 0.001f, 0.01f));
SkelAnime_Update(&this->skelAnime);
}
}
-void func_8091B3D0(EnInsect* this) {
- this->unk_312 = 60;
+void EnInsect_SetupDig(EnInsect* this) {
+ this->actionTimer = 60;
this->skelAnime.playSpeed = 1.9f;
Actor_PlaySfx(&this->actor, NA_SE_EN_STALTURA_BOUND);
Math_Vec3f_Copy(&this->actor.home.pos, &this->actor.world.pos);
- this->actionFunc = func_8091B440;
- this->unk_30C &= ~0x100;
- this->unk_30C |= 8;
+ this->actionFunc = EnInsect_Dig;
+ this->insectFlags &= ~INSECT_FLAG_CRAWLING;
+ this->insectFlags |= INSECT_FLAG_UNCATCHABLE;
}
-void func_8091B440(EnInsect* this, PlayState* play) {
+void EnInsect_Dig(EnInsect* this, PlayState* play) {
s32 pad[2];
- Vec3f sp34;
+ Vec3f velocity;
Math_SmoothStepToF(&this->actor.speed, 0.0f, 0.1f, 0.5f, 0.0f);
Math_StepToS(&this->actor.shape.rot.x, 0x2AAA, 0x160);
@@ -345,33 +343,33 @@ void func_8091B440(EnInsect* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
- if ((this->unk_312 > 20) && (Rand_ZeroOne() < 0.1f)) {
- sp34.x = Math_SinS(this->actor.shape.rot.y) * -0.6f;
- sp34.y = Math_SinS(this->actor.shape.rot.x) * 0.6f;
- sp34.z = Math_CosS(this->actor.shape.rot.y) * -0.6f;
- func_800B1210(play, &this->actor.world.pos, &sp34, &D_8091BDCC, (Rand_ZeroOne() * 5.0f) + 8.0f,
+ if ((this->actionTimer > 20) && (Rand_ZeroOne() < 0.1f)) {
+ velocity.x = Math_SinS(this->actor.shape.rot.y) * -0.6f;
+ velocity.y = Math_SinS(this->actor.shape.rot.x) * 0.6f;
+ velocity.z = Math_CosS(this->actor.shape.rot.y) * -0.6f;
+ func_800B1210(play, &this->actor.world.pos, &velocity, &sAccel, (Rand_ZeroOne() * 5.0f) + 8.0f,
(Rand_ZeroOne() * 5.0f) + 8.0f);
}
- if (this->unk_312 <= 0) {
+ if (this->actionTimer <= 0) {
Actor_Kill(&this->actor);
}
}
-void func_8091B618(EnInsect* this) {
- this->unk_312 = Rand_S16Offset(120, 50);
+void EnInsect_SetupWalkOnWater(EnInsect* this) {
+ this->actionTimer = Rand_S16Offset(120, 50);
this->unk_310 = 0;
this->unk_30E = this->unk_310;
- this->actionFunc = func_8091B670;
- this->unk_30C &= ~0x100;
+ this->actionFunc = EnInsect_WalkOnWater;
+ this->insectFlags &= ~INSECT_FLAG_CRAWLING;
}
-void func_8091B670(EnInsect* this, PlayState* play) {
+void EnInsect_WalkOnWater(EnInsect* this, PlayState* play) {
s32 pad[2];
s16 temp;
- Vec3f sp40;
+ Vec3f ripplePos;
- if (this->unk_312 > 80) {
+ if (this->actionTimer > 80) {
Math_StepToF(&this->actor.speed, 0.6f, 0.08f);
} else {
Math_StepToF(&this->actor.speed, 0.0f, 0.02f);
@@ -380,10 +378,10 @@ void func_8091B670(EnInsect* this, PlayState* play) {
this->actor.velocity.y = 0.0f;
this->actor.world.pos.y += this->actor.depthInWater;
- this->skelAnime.playSpeed = CLAMP(this->unk_312 * 0.018f, 0.1f, 1.9f);
+ this->skelAnime.playSpeed = CLAMP(this->actionTimer * 0.018f, 0.1f, 1.9f);
SkelAnime_Update(&this->skelAnime);
- if (this->unk_312 > 80) {
+ if (this->actionTimer > 80) {
this->unk_30E += Rand_S16Offset(-50, 100);
this->unk_310 += Rand_S16Offset(-300, 600);
}
@@ -396,45 +394,45 @@ void func_8091B670(EnInsect* this, PlayState* play) {
this->unk_310 = CLAMP(this->unk_310, -temp, temp);
this->actor.shape.rot.y += this->unk_310;
- Math_ScaledStepToS(&this->actor.world.rot.x, 0, 0xBB8);
+ Math_ScaledStepToS(&this->actor.world.rot.x, 0, 3000);
this->actor.shape.rot.x = this->actor.world.rot.x;
if (Rand_ZeroOne() < 0.03f) {
- sp40.x = this->actor.world.pos.x;
- sp40.y = this->actor.world.pos.y + this->actor.depthInWater;
- sp40.z = this->actor.world.pos.z;
- EffectSsGRipple_Spawn(play, &sp40, 40, 200, 4);
+ ripplePos.x = this->actor.world.pos.x;
+ ripplePos.y = this->actor.world.pos.y + this->actor.depthInWater;
+ ripplePos.z = this->actor.world.pos.z;
+ EffectSsGRipple_Spawn(play, &ripplePos, 40, 200, 4);
}
- if ((this->unk_312 <= 0) || ((this->unk_30C & 4) && (this->unk_314 <= 0))) {
- func_8091B928(this);
+ if ((this->actionTimer <= 0) || ((this->insectFlags & INSECT_FLAG_IS_SHORT_LIVED) && (this->lifeTimer <= 0))) {
+ EnInsect_SetupDrown(this);
} else if (!(this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH)) {
- func_8091AC78(this);
+ EnInsect_SetupSlowDown(this);
}
}
-void func_8091B928(EnInsect* this) {
- this->unk_312 = 100;
+void EnInsect_SetupDrown(EnInsect* this) {
+ this->actionTimer = 100;
this->actor.velocity.y = 0.0f;
this->actor.speed = 0.0f;
this->actor.terminalVelocity = -0.8f;
this->actor.gravity = -0.04f;
- this->unk_30C &= ~1;
- this->actionFunc = func_8091B984;
- this->unk_30C &= ~0x100;
- this->unk_30C |= 8;
+ this->insectFlags &= ~INSECT_FLAG_0;
+ this->actionFunc = EnInsect_Drown;
+ this->insectFlags &= ~INSECT_FLAG_CRAWLING;
+ this->insectFlags |= INSECT_FLAG_UNCATCHABLE;
}
-void func_8091B984(EnInsect* this, PlayState* play) {
- this->actor.shape.rot.x -= 0x1F4;
- this->actor.shape.rot.y += 0xC8;
+void EnInsect_Drown(EnInsect* this, PlayState* play) {
+ this->actor.shape.rot.x -= 500;
+ this->actor.shape.rot.y += 200;
Actor_SetScale(&this->actor, CLAMP_MIN(this->actor.scale.x - 0.00005f, 0.001f));
if ((this->actor.depthInWater > 5.0f) && (this->actor.depthInWater < 30.0f) && (Rand_ZeroOne() < 0.3f)) {
EffectSsBubble_Spawn(play, &this->actor.world.pos, -5.0f, 5.0f, 5.0f, (Rand_ZeroOne() * 0.04f) + 0.02f);
}
- if (this->unk_312 <= 0) {
+ if (this->actionTimer <= 0) {
Actor_Kill(&this->actor);
}
}
@@ -447,30 +445,30 @@ void EnInsect_Update(Actor* thisx, PlayState* play) {
this->actor.child = NULL;
}
- if (this->unk_312 > 0) {
- this->unk_312--;
+ if (this->actionTimer > 0) {
+ this->actionTimer--;
}
- if (this->unk_314 > 0) {
- this->unk_314--;
+ if (this->lifeTimer > 0) {
+ this->lifeTimer--;
}
this->actionFunc(this, play);
if (this->actor.update != NULL) {
Actor_MoveWithGravity(&this->actor);
- if (this->unk_30C & 0x100) {
- if (this->unk_30C & 1) {
+ if (this->insectFlags & INSECT_FLAG_CRAWLING) {
+ if (this->insectFlags & INSECT_FLAG_0) {
if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
- func_8091A9E4(this);
+ EnInsect_UpdateCrawlSfx(this);
}
} else {
- func_8091A9E4(this);
+ EnInsect_UpdateCrawlSfx(this);
}
}
updBgCheckInfoFlags = 0;
- if (this->unk_30C & 1) {
+ if (this->insectFlags & INSECT_FLAG_0) {
updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_4;
}
@@ -481,9 +479,9 @@ void EnInsect_Update(Actor* thisx, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
this->actor.parent = NULL;
- func_8091B274(this);
- } else if ((this->actor.xzDistToPlayer < 50.0f) && (this->actionFunc != func_8091B2D8)) {
- if (!(this->unk_30C & 0x20) && (this->unk_314 < 180)) {
+ EnInsect_SetupCaught(this);
+ } else if ((this->actor.xzDistToPlayer < 50.0f) && (this->actionFunc != EnInsect_Caught)) {
+ if (!(this->insectFlags & INSECT_FLAG_SOIL_CLOSE) && (this->lifeTimer < 180)) {
ColliderJntSphElement* jntSphElem = &this->collider.elements[0];
jntSphElem->dim.worldSphere.center.x = this->actor.world.pos.x;
@@ -492,9 +490,9 @@ void EnInsect_Update(Actor* thisx, PlayState* play) {
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
}
- if (!(this->unk_30C & 8) && (D_8091BD60 < 4) && EnInsect_InBottleRange(this, play) &&
- Actor_OfferGetItem(&this->actor, play, GI_MAX, 60.0f, 30.0f)) {
- D_8091BD60++;
+ if (!(this->insectFlags & INSECT_FLAG_UNCATCHABLE) && (sCaughtCount < 4) &&
+ EnInsect_InBottleRange(this, play) && Actor_OfferGetItem(&this->actor, play, GI_MAX, 60.0f, 30.0f)) {
+ sCaughtCount++;
}
}
@@ -507,5 +505,5 @@ void EnInsect_Draw(Actor* thisx, PlayState* play) {
Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, NULL, NULL);
- D_8091BD60 = 0;
+ sCaughtCount = 0;
}
diff --git a/src/overlays/actors/ovl_En_Insect/z_en_insect.h b/src/overlays/actors/ovl_En_Insect/z_en_insect.h
index 48c6a17ea..5ae84f099 100644
--- a/src/overlays/actors/ovl_En_Insect/z_en_insect.h
+++ b/src/overlays/actors/ovl_En_Insect/z_en_insect.h
@@ -8,7 +8,17 @@ struct EnInsect;
typedef void (*EnInsectActionFunc)(struct EnInsect*, PlayState*);
-#define ENINSECT_GET_1(thisx) ((thisx)->params & 1)
+#define INSECT_FLAG_0 (1 << 0)
+#define INSECT_FLAG_1 (1 << 1)
+#define INSECT_FLAG_IS_SHORT_LIVED (1 << 2)
+#define INSECT_FLAG_UNCATCHABLE (1 << 3) // Set when the bug is about to disappear and can no longer be caught.
+#define INSECT_FLAG_FOUND_SOIL (1 << 4)
+#define INSECT_FLAG_SOIL_CLOSE (1 << 5)
+#define INSECT_FLAG_DROPPED_HAS_LANDED (1 << 6) // Set when the landing sound has been played.
+#define INSECT_FLAG_7 (1 << 7)
+#define INSECT_FLAG_CRAWLING (1 << 8)
+
+#define ENINSECT_GET_INIT_FLAGS(thisx) ((thisx)->params & 1)
#define ENINSECT_PARAMS(param) (param)
@@ -20,12 +30,12 @@ typedef struct EnInsect {
/* 0x1E8 */ Vec3s jointTable[BUG_LIMB_MAX];
/* 0x278 */ Vec3s morphTable[BUG_LIMB_MAX];
/* 0x308 */ EnInsectActionFunc actionFunc;
- /* 0x30C */ u16 unk_30C;
+ /* 0x30C */ u16 insectFlags;
/* 0x30E */ s16 unk_30E;
/* 0x310 */ s16 unk_310;
- /* 0x312 */ s16 unk_312;
- /* 0x314 */ s16 unk_314;
- /* 0x316 */ s16 unk_316;
+ /* 0x312 */ s16 actionTimer;
+ /* 0x314 */ s16 lifeTimer;
+ /* 0x316 */ s16 crawlSoundDelay;
} EnInsect; // size = 0x318
#endif // Z_EN_INSECT_H