mirror of https://github.com/zeldaret/oot.git
Merge 0c5107580a into eb5dac74d6
This commit is contained in:
commit
12723de0ea
|
|
@ -754,7 +754,7 @@ s16 Actor_TestFloorInDirection(Actor* actor, struct PlayState* play, f32 distanc
|
|||
s32 Actor_IsLockedOn(struct PlayState* play, Actor* actor);
|
||||
s32 Actor_OtherIsLockedOn(struct PlayState* play, Actor* actor);
|
||||
f32 func_80033AEC(Vec3f* arg0, Vec3f* arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5);
|
||||
void func_80033C30(Vec3f* arg0, Vec3f* arg1, u8 alpha, struct PlayState* play);
|
||||
void func_80033C30(Vec3f* pos, Vec3f* scale, u8 alpha, struct PlayState* play);
|
||||
void Actor_RequestQuake(struct PlayState* play, s16 y, s16 duration);
|
||||
void Actor_RequestQuakeWithSpeed(struct PlayState* play, s16 y, s16 duration, s16 speed);
|
||||
void Actor_RequestQuakeAndRumble(Actor* actor, struct PlayState* play, s16 quakeY, s16 quakeDuration);
|
||||
|
|
|
|||
|
|
@ -923,7 +923,7 @@ typedef enum LinkAge {
|
|||
#define INFTABLE_198 0x198
|
||||
|
||||
// INFTABLE 0x199-0x19F
|
||||
#define INFTABLE_INDEX_199_19A_19B_19C_19D_19E_19F 25
|
||||
#define INFTABLE_INDEX_KAKARIKO_CUCCO 25
|
||||
#define INFTABLE_199 0x199
|
||||
#define INFTABLE_19A 0x19A
|
||||
#define INFTABLE_19B 0x19B
|
||||
|
|
|
|||
|
|
@ -4034,8 +4034,8 @@ f32 func_80033AEC(Vec3f* arg0, Vec3f* arg1, f32 arg2, f32 arg3, f32 arg4, f32 ar
|
|||
return ret;
|
||||
}
|
||||
|
||||
void func_80033C30(Vec3f* arg0, Vec3f* arg1, u8 alpha, PlayState* play) {
|
||||
MtxF sp60;
|
||||
void func_80033C30(Vec3f* pos, Vec3f* scale, u8 alpha, PlayState* play) {
|
||||
MtxF shadowMtxF;
|
||||
f32 yIntersect;
|
||||
Vec3f checkPos;
|
||||
CollisionPoly* groundPoly;
|
||||
|
|
@ -4046,20 +4046,20 @@ void func_80033C30(Vec3f* arg0, Vec3f* arg1, u8 alpha, PlayState* play) {
|
|||
|
||||
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, alpha);
|
||||
|
||||
checkPos.x = arg0->x;
|
||||
checkPos.y = arg0->y + 1.0f;
|
||||
checkPos.z = arg0->z;
|
||||
checkPos.x = pos->x;
|
||||
checkPos.y = pos->y + 1.0f;
|
||||
checkPos.z = pos->z;
|
||||
|
||||
yIntersect = BgCheck_EntityRaycastDown2(play, &play->colCtx, &groundPoly, &checkPos);
|
||||
|
||||
if (groundPoly != NULL) {
|
||||
func_80038A28(groundPoly, arg0->x, yIntersect, arg0->z, &sp60);
|
||||
Matrix_Put(&sp60);
|
||||
func_80038A28(groundPoly, pos->x, yIntersect, pos->z, &shadowMtxF);
|
||||
Matrix_Put(&shadowMtxF);
|
||||
} else {
|
||||
Matrix_Translate(arg0->x, arg0->y, arg0->z, MTXMODE_NEW);
|
||||
Matrix_Translate(pos->x, pos->y, pos->z, MTXMODE_NEW);
|
||||
}
|
||||
|
||||
Matrix_Scale(arg1->x, 1.0f, arg1->z, MTXMODE_APPLY);
|
||||
Matrix_Scale(scale->x, 1.0f, scale->z, MTXMODE_APPLY);
|
||||
|
||||
MATRIX_FINALIZE_AND_LOAD(POLY_OPA_DISP++, play->state.gfxCtx, "../z_actor.c", 8149);
|
||||
gSPDisplayList(POLY_OPA_DISP++, gCircleShadowDL);
|
||||
|
|
|
|||
|
|
@ -85,14 +85,14 @@ void EnAttackNiw_Destroy(Actor* thisx, PlayState* play) {
|
|||
void func_809B5268(EnAttackNiw* this, PlayState* play, s16 arg2) {
|
||||
if (this->unk_254 == 0) {
|
||||
if (arg2 == 0) {
|
||||
this->unk_264 = 0.0f;
|
||||
this->limb13TargetRotY = 0.0f;
|
||||
} else {
|
||||
this->unk_264 = -10000.0f;
|
||||
this->limb13TargetRotY = -10000.0f;
|
||||
}
|
||||
this->unk_28E++;
|
||||
this->unk_254 = 3;
|
||||
if ((this->unk_28E & 1) == 0) {
|
||||
this->unk_264 = 0.0f;
|
||||
this->limb13TargetRotY = 0.0f;
|
||||
if (arg2 == 0) {
|
||||
this->unk_254 = Rand_ZeroFloat(30.0f);
|
||||
}
|
||||
|
|
@ -104,35 +104,33 @@ void func_809B5268(EnAttackNiw* this, PlayState* play, s16 arg2) {
|
|||
this->unk_292 &= 1;
|
||||
switch (arg2) {
|
||||
case 0:
|
||||
this->unk_26C = 0.0f;
|
||||
this->unk_268 = 0.0f;
|
||||
this->limb11TargetRotZ = this->limb7TargetRotZ = 0.0f;
|
||||
break;
|
||||
case 1:
|
||||
this->unk_258 = 3;
|
||||
this->unk_26C = 7000.0f;
|
||||
this->unk_268 = 7000.0f;
|
||||
this->limb11TargetRotZ = this->limb7TargetRotZ = 7000.0f;
|
||||
|
||||
if (this->unk_292 == 0) {
|
||||
this->unk_26C = 0.0f;
|
||||
this->unk_268 = 0.0f;
|
||||
this->limb11TargetRotZ = this->limb7TargetRotZ = 0.0f;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
this->unk_258 = 2;
|
||||
this->unk_268 = this->unk_26C = -10000.0f;
|
||||
this->unk_280 = this->unk_278 = 25000.0f;
|
||||
this->unk_284 = this->unk_27C = 6000.0f;
|
||||
this->limb11TargetRotZ = this->limb7TargetRotZ = -10000.0f;
|
||||
this->limb7TargetRotY = this->limb11TargetRotY = 25000.0f;
|
||||
this->limb7TargetRotX = this->limb11TargetRotX = 6000.0f;
|
||||
if (this->unk_292 == 0) {
|
||||
this->unk_278 = 8000.0f;
|
||||
this->unk_280 = 8000.0f;
|
||||
this->limb11TargetRotY = 8000.0f;
|
||||
this->limb7TargetRotY = 8000.0f;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
this->unk_258 = 2;
|
||||
this->unk_278 = 10000.0f;
|
||||
this->unk_280 = 10000.0f;
|
||||
this->limb11TargetRotY = 10000.0f;
|
||||
this->limb7TargetRotY = 10000.0f;
|
||||
if (this->unk_292 == 0) {
|
||||
this->unk_278 = 3000.0f;
|
||||
this->unk_280 = 3000.0f;
|
||||
this->limb11TargetRotY = 3000.0f;
|
||||
this->limb7TargetRotY = 3000.0f;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
|
|
@ -140,39 +138,39 @@ void func_809B5268(EnAttackNiw* this, PlayState* play, s16 arg2) {
|
|||
break;
|
||||
case 5:
|
||||
this->unk_258 = 5;
|
||||
this->unk_278 = 14000.0f;
|
||||
this->unk_280 = 14000.0f;
|
||||
this->limb11TargetRotY = 14000.0f;
|
||||
this->limb7TargetRotY = 14000.0f;
|
||||
if (this->unk_292 == 0) {
|
||||
this->unk_278 = 10000.0f;
|
||||
this->unk_280 = 10000.0f;
|
||||
this->limb11TargetRotY = 10000.0f;
|
||||
this->limb7TargetRotY = 10000.0f;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (this->unk_288 != this->unk_2C0) {
|
||||
Math_ApproachF(&this->unk_2C0, this->unk_288, 0.5f, 4000.0f);
|
||||
if (this->limb15TargetRotY != this->limb15RotY) {
|
||||
Math_ApproachF(&this->limb15RotY, this->limb15TargetRotY, 0.5f, 4000.0f);
|
||||
}
|
||||
if (this->unk_264 != this->unk_2BC) {
|
||||
Math_ApproachF(&this->unk_2BC, this->unk_264, 0.5f, 4000.0f);
|
||||
if (this->limb13TargetRotY != this->limb13RotY) {
|
||||
Math_ApproachF(&this->limb13RotY, this->limb13TargetRotY, 0.5f, 4000.0f);
|
||||
}
|
||||
if (this->unk_26C != this->unk_2A4.x) {
|
||||
Math_ApproachF(&this->unk_2A4.x, this->unk_26C, 0.8f, 7000.0f);
|
||||
if (this->limb7TargetRotZ != this->limb7RotZ) {
|
||||
Math_ApproachF(&this->limb7RotZ, this->limb7TargetRotZ, 0.8f, 7000.0f);
|
||||
}
|
||||
if (this->unk_280 != this->unk_2A4.y) {
|
||||
Math_ApproachF(&this->unk_2A4.y, this->unk_280, 0.8f, 7000.0f);
|
||||
if (this->limb7TargetRotY != this->limb7RotY) {
|
||||
Math_ApproachF(&this->limb7RotY, this->limb7TargetRotY, 0.8f, 7000.0f);
|
||||
}
|
||||
if (this->unk_284 != this->unk_2A4.z) {
|
||||
Math_ApproachF(&this->unk_2A4.z, this->unk_284, 0.8f, 7000.0f);
|
||||
if (this->limb7TargetRotX != this->limb7RotX) {
|
||||
Math_ApproachF(&this->limb7RotX, this->limb7TargetRotX, 0.8f, 7000.0f);
|
||||
}
|
||||
if (this->unk_268 != this->unk_2B0.x) {
|
||||
Math_ApproachF(&this->unk_2B0.x, this->unk_268, 0.8f, 7000.0f);
|
||||
if (this->limb11TargetRotZ != this->limb11RotZ) {
|
||||
Math_ApproachF(&this->limb11RotZ, this->limb11TargetRotZ, 0.8f, 7000.0f);
|
||||
}
|
||||
if (this->unk_278 != this->unk_2B0.y) {
|
||||
Math_ApproachF(&this->unk_2B0.y, this->unk_278, 0.8f, 7000.0f);
|
||||
if (this->limb11TargetRotY != this->limb11RotY) {
|
||||
Math_ApproachF(&this->limb11RotY, this->limb11TargetRotY, 0.8f, 7000.0f);
|
||||
}
|
||||
if (this->unk_27C != this->unk_2B0.z) {
|
||||
Math_ApproachF(&this->unk_2B0.z, this->unk_27C, 0.8f, 7000.0f);
|
||||
if (this->limb11TargetRotX != this->limb11RotX) {
|
||||
Math_ApproachF(&this->limb11RotX, this->limb11TargetRotX, 0.8f, 7000.0f);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -222,13 +220,13 @@ void func_809B5670(EnAttackNiw* this, PlayState* play) {
|
|||
this->unk_2D4 = this->actor.yawTowardsPlayer;
|
||||
this->unk_2D0 = this->actor.world.rot.x - 3000.0f;
|
||||
this->unk_2DC = 0.0f;
|
||||
this->unk_284 = 0.0f;
|
||||
this->unk_27C = 0.0f;
|
||||
this->limb7TargetRotX = 0.0f;
|
||||
this->limb11TargetRotX = 0.0f;
|
||||
this->unk_254 = this->unk_256 = this->unk_258 = this->unk_25A = 0;
|
||||
this->unk_25C = 0x64;
|
||||
this->unk_25C = 100;
|
||||
this->actor.gravity = -0.2f;
|
||||
this->unk_2E0 = 5.0f;
|
||||
this->unk_288 = 0.0f;
|
||||
this->limb15TargetRotY = 0.0f;
|
||||
this->actionFunc = func_809B59B0;
|
||||
} else if (((this->actor.projectedPos.z > 0.0f) && (fabsf(sp34.x - this->actor.world.pos.x) < 50.0f) &&
|
||||
(fabsf(sp34.y - this->actor.world.pos.y) < 50.0f) &&
|
||||
|
|
@ -238,17 +236,17 @@ void func_809B5670(EnAttackNiw* this, PlayState* play) {
|
|||
this->unk_2D4 = this->actor.yawTowardsPlayer;
|
||||
this->unk_2D0 = this->actor.world.rot.x - 2000.0f;
|
||||
this->unk_2DC = 0.0f;
|
||||
this->unk_27C = 0.0f;
|
||||
this->unk_284 = 0.0f;
|
||||
this->limb11TargetRotX = 0.0f;
|
||||
this->limb7TargetRotX = 0.0f;
|
||||
this->unk_254 = this->unk_256 = this->unk_258 = this->unk_25A = 0;
|
||||
this->actor.gravity = -0.2f;
|
||||
this->unk_2E0 = 5.0f;
|
||||
this->unk_288 = 0.0f;
|
||||
this->limb15TargetRotY = 0.0f;
|
||||
this->actionFunc = func_809B59B0;
|
||||
} else {
|
||||
this->unk_254 = 10;
|
||||
this->unk_264 = -10000.0f;
|
||||
this->unk_288 = -3000.0f;
|
||||
this->limb13TargetRotY = -10000.0f;
|
||||
this->limb15TargetRotY = -3000.0f;
|
||||
func_809B5268(this, play, 2);
|
||||
}
|
||||
}
|
||||
|
|
@ -265,15 +263,16 @@ void func_809B59B0(EnAttackNiw* this, PlayState* play) {
|
|||
this->actor.velocity.y = 3.5f;
|
||||
}
|
||||
if (this->actor.gravity != -2.0f) {
|
||||
this->unk_280 = this->unk_278 = 14000.0f;
|
||||
this->unk_2D0 = this->unk_26C = this->unk_268 = this->unk_284 = this->unk_27C = 0.0f;
|
||||
this->limb7TargetRotY = this->limb11TargetRotY = 14000.0f;
|
||||
this->unk_2D0 = this->limb7TargetRotZ = this->limb11TargetRotZ = this->limb7TargetRotX =
|
||||
this->limb11TargetRotX = 0.0f;
|
||||
this->unk_2D4 = this->actor.yawTowardsPlayer;
|
||||
this->unk_262 = 0x32;
|
||||
this->unk_25C = 0x64;
|
||||
this->unk_262 = 50;
|
||||
this->unk_25C = 100;
|
||||
this->actor.gravity = -2.0f;
|
||||
}
|
||||
}
|
||||
if (this->unk_25C == 0x32) {
|
||||
if (this->unk_25C == 50) {
|
||||
this->unk_2D4 = Rand_CenteredFloat(200.0f) + this->actor.yawTowardsPlayer;
|
||||
}
|
||||
Math_SmoothStepToS(&this->actor.world.rot.y, this->unk_2D4, 2, this->unk_2DC, 0);
|
||||
|
|
@ -313,27 +312,13 @@ void EnAttackNiw_Update(Actor* thisx, PlayState* play) {
|
|||
PlayState* play2 = play;
|
||||
|
||||
this->unk_28C++;
|
||||
if (this->unk_254 != 0) {
|
||||
this->unk_254--;
|
||||
}
|
||||
if (this->unk_258 != 0) {
|
||||
this->unk_258--;
|
||||
}
|
||||
if (this->unk_25A != 0) {
|
||||
this->unk_25A--;
|
||||
}
|
||||
if (this->unk_25E != 0) {
|
||||
this->unk_25E--;
|
||||
}
|
||||
if (this->unk_260 != 0) {
|
||||
this->unk_260--;
|
||||
}
|
||||
if (this->unk_25C != 0) {
|
||||
this->unk_25C--;
|
||||
}
|
||||
if (this->unk_262 != 0) {
|
||||
this->unk_262--;
|
||||
}
|
||||
DECR(this->unk_254);
|
||||
DECR(this->unk_258);
|
||||
DECR(this->unk_25A);
|
||||
DECR(this->unk_25E);
|
||||
DECR(this->unk_260);
|
||||
DECR(this->unk_25C);
|
||||
DECR(this->unk_262);
|
||||
|
||||
this->actor.shape.rot = this->actor.world.rot;
|
||||
this->actor.shape.shadowScale = 15.0f;
|
||||
|
|
@ -354,12 +339,12 @@ void EnAttackNiw_Update(Actor* thisx, PlayState* play) {
|
|||
}
|
||||
|
||||
if ((this->actor.bgCheckFlags & BGCHECKFLAG_WATER) && (this->actionFunc != func_809B5C18)) {
|
||||
Vec3f sp30;
|
||||
Vec3f splashPos;
|
||||
s32 pad;
|
||||
|
||||
Math_Vec3f_Copy(&sp30, &this->actor.world.pos);
|
||||
sp30.y += this->actor.depthInWater;
|
||||
EffectSsGSplash_Spawn(play, &sp30, NULL, NULL, 0, 0x190);
|
||||
Math_Vec3f_Copy(&splashPos, &this->actor.world.pos);
|
||||
splashPos.y += this->actor.depthInWater;
|
||||
EffectSsGSplash_Spawn(play, &splashPos, NULL, NULL, 0, 400);
|
||||
this->unk_2DC = 0.0f;
|
||||
this->actor.gravity = 0.0f;
|
||||
this->unk_2E0 = 0.0f;
|
||||
|
|
@ -373,6 +358,9 @@ void EnAttackNiw_Update(Actor* thisx, PlayState* play) {
|
|||
cucco = (EnNiw*)this->actor.parent;
|
||||
if ((this->actor.parent->update != NULL) && (this->actor.parent != NULL) && (cucco != NULL) &&
|
||||
(cucco->timer9 == 0) &&
|
||||
//! @bug In certain scenarios like getting cornered against the wall, the PLAYER_STATE1_26 will be flushed
|
||||
//! before the player has regained control of Link. This can result in the player being softlocked by a cucco
|
||||
//! attack.
|
||||
#if OOT_VERSION < NTSC_1_1
|
||||
!(player->stateFlags1 & PLAYER_STATE1_26)
|
||||
#else
|
||||
|
|
@ -380,7 +368,7 @@ void EnAttackNiw_Update(Actor* thisx, PlayState* play) {
|
|||
#endif
|
||||
) {
|
||||
Actor_SetPlayerKnockbackLarge(play, &this->actor, 2.0f, this->actor.world.rot.y, 0.0f, 0x10);
|
||||
cucco->timer9 = 0x46;
|
||||
cucco->timer9 = 70;
|
||||
}
|
||||
}
|
||||
if (this->unk_25E == 0) {
|
||||
|
|
@ -393,25 +381,25 @@ void EnAttackNiw_Update(Actor* thisx, PlayState* play) {
|
|||
}
|
||||
}
|
||||
|
||||
s32 func_809B5F98(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, void* thisx) {
|
||||
s32 EnAttackNiw_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, void* thisx) {
|
||||
EnAttackNiw* this = (EnAttackNiw*)thisx;
|
||||
Vec3f sp0 = { 0.0f, 0.0f, 0.0f };
|
||||
|
||||
if (limbIndex == 13) {
|
||||
rot->y += (s16)this->unk_2BC;
|
||||
rot->y += (s16)this->limb13RotY;
|
||||
}
|
||||
if (limbIndex == 15) {
|
||||
rot->z += (s16)this->unk_2C0;
|
||||
rot->z += (s16)this->limb15RotY;
|
||||
}
|
||||
if (limbIndex == 11) {
|
||||
rot->x += (s16)this->unk_2B0.z;
|
||||
rot->y += (s16)this->unk_2B0.y;
|
||||
rot->z += (s16)this->unk_2B0.x;
|
||||
rot->x += (s16)this->limb11RotX;
|
||||
rot->y += (s16)this->limb11RotY;
|
||||
rot->z += (s16)this->limb11RotZ;
|
||||
}
|
||||
if (limbIndex == 7) {
|
||||
rot->x += (s16)this->unk_2A4.z;
|
||||
rot->y += (s16)this->unk_2A4.y;
|
||||
rot->z += (s16)this->unk_2A4.x;
|
||||
rot->x += (s16)this->limb7RotX;
|
||||
rot->y += (s16)this->limb7RotY;
|
||||
rot->z += (s16)this->limb7RotZ;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -421,5 +409,5 @@ void EnAttackNiw_Draw(Actor* thisx, PlayState* play) {
|
|||
|
||||
Gfx_SetupDL_25Opa(play->state.gfxCtx);
|
||||
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
|
||||
func_809B5F98, NULL, this);
|
||||
EnAttackNiw_OverrideLimbDraw, NULL, this);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,15 +22,17 @@ typedef struct EnAttackNiw {
|
|||
/* 0x025E */ s16 unk_25E;
|
||||
/* 0x0260 */ s16 unk_260;
|
||||
/* 0x0262 */ s16 unk_262;
|
||||
/* 0x0264 */ f32 unk_264;
|
||||
/* 0x0268 */ f32 unk_268;
|
||||
/* 0x026C */ f32 unk_26C;
|
||||
/* 0x0270 */ char unk_270[0x8];
|
||||
/* 0x0278 */ f32 unk_278;
|
||||
/* 0x027C */ f32 unk_27C;
|
||||
/* 0x0280 */ f32 unk_280;
|
||||
/* 0x0284 */ f32 unk_284;
|
||||
/* 0x0284 */ f32 unk_288;
|
||||
|
||||
/* 0x0264 */ f32 limb13TargetRotY;
|
||||
/* 0x0268 */ f32 limb11TargetRotZ;
|
||||
/* 0x026C */ f32 limb7TargetRotZ;
|
||||
/* 0x0270 */ f32 unused_270[2]; //part of an array starting at 0x264
|
||||
/* 0x0278 */ f32 limb11TargetRotY;
|
||||
/* 0x027C */ f32 limb11TargetRotX;
|
||||
/* 0x0280 */ f32 limb7TargetRotY;
|
||||
/* 0x0284 */ f32 limb7TargetRotX;
|
||||
/* 0x0284 */ f32 limb15TargetRotY;
|
||||
|
||||
/* 0x028C */ s16 unk_28C;
|
||||
/* 0x028E */ s16 unk_28E;
|
||||
/* 0x0290 */ char unk_290[0x2];
|
||||
|
|
@ -38,10 +40,15 @@ typedef struct EnAttackNiw {
|
|||
/* 0x0294 */ char unk_294[0x2];
|
||||
/* 0x0296 */ s16 unk_296;
|
||||
/* 0x0298 */ Vec3f unk_298;
|
||||
/* 0x02A4 */ Vec3f unk_2A4;
|
||||
/* 0x02B0 */ Vec3f unk_2B0;
|
||||
/* 0x02BC */ f32 unk_2BC;
|
||||
/* 0x02C0 */ f32 unk_2C0;
|
||||
|
||||
/* 0x02A4 */ f32 limb7RotZ;
|
||||
/* 0x02A8 */ f32 limb7RotY;
|
||||
/* 0x02AC */ f32 limb7RotX;
|
||||
/* 0x02B0 */ f32 limb11RotZ;
|
||||
/* 0x02B4 */ f32 limb11RotY;
|
||||
/* 0x02B8 */ f32 limb11RotX;
|
||||
/* 0x02BC */ f32 limb13RotY;
|
||||
/* 0x02C0 */ f32 limb15RotY;
|
||||
/* 0x02C4 */ char unk_2C4[0xC];
|
||||
/* 0x02D0 */ f32 unk_2D0;
|
||||
/* 0x02D4 */ f32 unk_2D4;
|
||||
|
|
|
|||
|
|
@ -39,24 +39,24 @@ void EnNiw_Update(Actor* thisx, PlayState* play);
|
|||
void EnNiw_Draw(Actor* thisx, PlayState* play);
|
||||
|
||||
void EnNiw_ResetAction(EnNiw* this, PlayState* play);
|
||||
void func_80AB6324(EnNiw* this, PlayState* play);
|
||||
void func_80AB63A8(EnNiw* this, PlayState* play);
|
||||
void func_80AB6450(EnNiw* this, PlayState* play);
|
||||
void func_80AB6570(EnNiw* this, PlayState* play);
|
||||
void EnNiw_IdleSuperCucco(EnNiw* this, PlayState* play);
|
||||
void EnNiw_SuperCuccoFallingIntoPosition(EnNiw* this, PlayState* play);
|
||||
void EnNiw_IdleKakarikoCrate(EnNiw* this, PlayState* play);
|
||||
void EnNiw_IdleWalk(EnNiw* this, PlayState* play);
|
||||
void func_80AB6A38(EnNiw* this, PlayState* play);
|
||||
void func_80AB6BF8(EnNiw* this, PlayState* play);
|
||||
void func_80AB6D08(EnNiw* this, PlayState* play);
|
||||
void func_80AB6EB4(EnNiw* this, PlayState* play);
|
||||
void func_80AB70F8(EnNiw* this, PlayState* play);
|
||||
void EnNiw_PlayerCarrying(EnNiw* this, PlayState* play);
|
||||
void EnNiw_PlayerReleased(EnNiw* this, PlayState* play);
|
||||
void EnNiw_PlayerReleaseSuperCucco(EnNiw* this, PlayState* play);
|
||||
void EnNiw_AngryCutsceneWait(EnNiw* this, PlayState* play);
|
||||
void func_80AB714C(EnNiw* this, PlayState* play);
|
||||
void func_80AB7204(EnNiw* this, PlayState* play);
|
||||
void func_80AB7290(EnNiw* this, PlayState* play);
|
||||
void func_80AB7328(EnNiw* this, PlayState* play);
|
||||
void EnNiw_SetupAttackPlayer(EnNiw* this, PlayState* play);
|
||||
void EnNiw_SetupFleePlayer(EnNiw* this, PlayState* play);
|
||||
void EnNiw_FleePlayer(EnNiw* this, PlayState* play);
|
||||
void EnNiw_SpawnFeather(EnNiw* this, Vec3f* pos, Vec3f* vel, Vec3f* accel, f32 scale);
|
||||
void EnNiw_UpdateEffects(EnNiw* this, PlayState* play);
|
||||
void EnNiw_DrawEffects(EnNiw* this, PlayState* play);
|
||||
|
||||
static s16 D_80AB85E0 = 0;
|
||||
static s16 sHasAttackStarted = false;
|
||||
|
||||
ActorProfile En_Niw_Profile = {
|
||||
/**/ ACTOR_EN_NIW,
|
||||
|
|
@ -92,10 +92,9 @@ static s16 sKakarikoFlagList[] = {
|
|||
};
|
||||
|
||||
static u8 sLowerRiverSpawned = false;
|
||||
|
||||
static u8 sUpperRiverSpawned = false;
|
||||
|
||||
static ColliderCylinderInit sCylinderInit1 = {
|
||||
static ColliderCylinderInit sAttackableBodyCylinderInit = {
|
||||
{
|
||||
COL_MATERIAL_HIT5,
|
||||
AT_NONE,
|
||||
|
|
@ -115,7 +114,7 @@ static ColliderCylinderInit sCylinderInit1 = {
|
|||
{ 15, 25, 4, { 0, 0, 0 } },
|
||||
};
|
||||
|
||||
static ColliderCylinderInit sCylinderInit2 = {
|
||||
static ColliderCylinderInit sNpcBodyCylinderInit = {
|
||||
{
|
||||
COL_MATERIAL_NONE,
|
||||
AT_NONE,
|
||||
|
|
@ -147,11 +146,11 @@ void EnNiw_Init(Actor* thisx, PlayState* play) {
|
|||
s32 i;
|
||||
|
||||
if (this->actor.params < 0) {
|
||||
this->actor.params = 0;
|
||||
this->actor.params = EN_NIW_TYPE_0;
|
||||
}
|
||||
|
||||
// Cucco at at the very beginning of Zora's River
|
||||
if (this->actor.params == 0xB) {
|
||||
if (this->actor.params == EN_NIW_TYPE_ZORA_RIVER_LOWER) {
|
||||
if (sLowerRiverSpawned) {
|
||||
Actor_Kill(&this->actor);
|
||||
PRINTF(VT_FGCOL(YELLOW)
|
||||
|
|
@ -163,7 +162,7 @@ void EnNiw_Init(Actor* thisx, PlayState* play) {
|
|||
}
|
||||
|
||||
// Cucco at tall platform in the first room of Zora's River
|
||||
if (this->actor.params == 0xC) {
|
||||
if (this->actor.params == EN_NIW_TYPE_ZORA_RIVER_UPPER) {
|
||||
if (sUpperRiverSpawned) {
|
||||
Actor_Kill(&this->actor);
|
||||
PRINTF(VT_FGCOL(YELLOW)
|
||||
|
|
@ -183,14 +182,13 @@ void EnNiw_Init(Actor* thisx, PlayState* play) {
|
|||
for (i = 0; i < ARRAY_COUNT(sKakarikoPosList); i++) {
|
||||
if (fabsf(this->actor.world.pos.x - sKakarikoPosList[i].x) < 40.0f &&
|
||||
fabsf(this->actor.world.pos.z - sKakarikoPosList[i].z) < 40.0f) {
|
||||
this->unk_2AA = i;
|
||||
PRINTF(VT_FGCOL(YELLOW) T(" 通常鶏index %d\n", " Normal chicken index %d\n") VT_RST, this->unk_2AA);
|
||||
if (gSaveContext.save.info.infTable[INFTABLE_INDEX_199_19A_19B_19C_19D_19E_19F] &
|
||||
sKakarikoFlagList[i]) {
|
||||
this->kakarikoIdx = i;
|
||||
PRINTF(VT_FGCOL(YELLOW) T(" 通常鶏index %d\n", " Normal chicken index %d\n") VT_RST, this->kakarikoIdx);
|
||||
if (gSaveContext.save.info.infTable[INFTABLE_INDEX_KAKARIKO_CUCCO] & sKakarikoFlagList[i]) {
|
||||
this->actor.world.pos.x = 300.0f;
|
||||
this->actor.world.pos.y = 100.0f;
|
||||
this->actor.world.pos.z = 1530.0f;
|
||||
this->actor.params = 0;
|
||||
this->actor.params = EN_NIW_TYPE_0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -200,46 +198,46 @@ void EnNiw_Init(Actor* thisx, PlayState* play) {
|
|||
Math_Vec3f_Copy(&this->unk_2B8, &this->actor.world.pos);
|
||||
this->unk_304 = 10.0f;
|
||||
Actor_SetScale(&this->actor, 0.01f);
|
||||
this->unk_2A4 = (s16)Rand_ZeroFloat(3.99f) + 5;
|
||||
this->health = (s16)Rand_ZeroFloat(3.99f) + 5;
|
||||
|
||||
if (this->unk_2A4 < 0) {
|
||||
this->unk_2A4 = 1;
|
||||
if (this->health < 0) {
|
||||
this->health = 1;
|
||||
}
|
||||
|
||||
switch (this->actor.params) {
|
||||
case 2:
|
||||
case EN_NIW_TYPE_2:
|
||||
if (IS_DAY) {
|
||||
Actor_Kill(&this->actor);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
case EN_NIW_TYPE_1:
|
||||
if (GET_EVENTCHKINF(EVENTCHKINF_TALON_RETURNED_FROM_CASTLE)) {
|
||||
Actor_Kill(&this->actor);
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
case EN_NIW_TYPE_3:
|
||||
if (!GET_EVENTCHKINF(EVENTCHKINF_TALON_RETURNED_FROM_CASTLE)) {
|
||||
Actor_Kill(&this->actor);
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
case EN_NIW_TYPE_5:
|
||||
if (GET_EVENTCHKINF(EVENTCHKINF_EPONA_OBTAINED)) {
|
||||
Actor_Kill(&this->actor);
|
||||
}
|
||||
break;
|
||||
case 7:
|
||||
case EN_NIW_TYPE_7:
|
||||
if (!GET_EVENTCHKINF(EVENTCHKINF_EPONA_OBTAINED)) {
|
||||
Actor_Kill(&this->actor);
|
||||
}
|
||||
break;
|
||||
case 0xD:
|
||||
case EN_NIW_TYPE_SUPER_CUCCO:
|
||||
this->actor.gravity = 0.0f;
|
||||
FALLTHROUGH;
|
||||
case 0xE:
|
||||
case EN_NIW_TYPE_TALON_CUCCO:
|
||||
this->actor.colChkInfo.mass = 0;
|
||||
this->actor.flags &= ~ACTOR_FLAG_ATTENTION_ENABLED;
|
||||
break;
|
||||
case 4:
|
||||
case EN_NIW_TYPE_KAKARIKO_CRATE:
|
||||
this->actor.gravity = 0.0f;
|
||||
break;
|
||||
}
|
||||
|
|
@ -247,18 +245,18 @@ void EnNiw_Init(Actor* thisx, PlayState* play) {
|
|||
Collider_InitCylinder(play, &this->collider);
|
||||
|
||||
switch (this->actor.params) {
|
||||
case 0xA:
|
||||
case EN_NIW_TYPE_A:
|
||||
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
|
||||
FALLTHROUGH;
|
||||
case 0xD:
|
||||
case 0xE:
|
||||
Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit2);
|
||||
case EN_NIW_TYPE_SUPER_CUCCO:
|
||||
case EN_NIW_TYPE_TALON_CUCCO:
|
||||
Collider_SetCylinder(play, &this->collider, &this->actor, &sNpcBodyCylinderInit);
|
||||
if (play->sceneId == SCENE_LINKS_HOUSE && !GET_EVENTCHKINF(EVENTCHKINF_HORSE_RACE_COW_UNLOCK)) {
|
||||
Actor_Kill(&this->actor);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit1);
|
||||
Collider_SetCylinder(play, &this->collider, &this->actor, &sAttackableBodyCylinderInit);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -277,19 +275,19 @@ void EnNiw_Destroy(Actor* thisx, PlayState* play) {
|
|||
void func_80AB5BF8(EnNiw* this, PlayState* play, s16 arg2) {
|
||||
f32 factor = 1.0f;
|
||||
|
||||
if (this->actor.params == 0xD) {
|
||||
if (this->actor.params == EN_NIW_TYPE_SUPER_CUCCO) {
|
||||
factor = 2.0f;
|
||||
}
|
||||
if (this->timer1 == 0) {
|
||||
if (arg2 == 0) {
|
||||
this->unk_26C[0] = 0.0f;
|
||||
this->unk_26C[OBJECT_NIW_LIMB13_TARGET_ROT_Y] = 0.0f;
|
||||
} else {
|
||||
this->unk_26C[0] = -10000.0f * factor;
|
||||
this->unk_26C[OBJECT_NIW_LIMB13_TARGET_ROT_Y] = -10000.0f * factor;
|
||||
}
|
||||
this->unk_298++;
|
||||
this->timer1 = 3;
|
||||
if (!(this->unk_298 & 1)) {
|
||||
this->unk_26C[0] = 0.0f;
|
||||
this->unk_26C[OBJECT_NIW_LIMB13_TARGET_ROT_Y] = 0.0f;
|
||||
|
||||
if (arg2 == 0) {
|
||||
this->timer1 = Rand_ZeroFloat(30.0f);
|
||||
|
|
@ -302,32 +300,36 @@ void func_80AB5BF8(EnNiw* this, PlayState* play, s16 arg2) {
|
|||
|
||||
switch (arg2) {
|
||||
case 0:
|
||||
this->unk_26C[1] = this->unk_26C[2] = 0.0f;
|
||||
this->unk_26C[OBJECT_NIW_LIMB11_TARGET_ROT_Z] = this->unk_26C[OBJECT_NIW_LIMB7_TARGET_ROT_Z] = 0.0f;
|
||||
break;
|
||||
case 1:
|
||||
this->timer2 = 3;
|
||||
this->unk_26C[1] = this->unk_26C[2] = 7000.0f * factor;
|
||||
this->unk_26C[OBJECT_NIW_LIMB11_TARGET_ROT_Z] = this->unk_26C[OBJECT_NIW_LIMB7_TARGET_ROT_Z] =
|
||||
7000.0f * factor;
|
||||
|
||||
if (this->unk_29C == 0) {
|
||||
this->unk_26C[1] = this->unk_26C[2] = 0.0f;
|
||||
this->unk_26C[OBJECT_NIW_LIMB11_TARGET_ROT_Z] = this->unk_26C[OBJECT_NIW_LIMB7_TARGET_ROT_Z] = 0.0f;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
this->timer2 = 2;
|
||||
this->unk_26C[1] = this->unk_26C[2] = -10000.0f;
|
||||
this->unk_26C[7] = this->unk_26C[5] = 25000.0f;
|
||||
this->unk_26C[8] = this->unk_26C[6] = 6000.0f;
|
||||
this->unk_26C[OBJECT_NIW_LIMB11_TARGET_ROT_Z] = this->unk_26C[OBJECT_NIW_LIMB7_TARGET_ROT_Z] =
|
||||
-10000.0f;
|
||||
this->unk_26C[OBJECT_NIW_LIMB7_TARGET_ROT_Y] = this->unk_26C[OBJECT_NIW_LIMB11_TARGET_ROT_Y] = 25000.0f;
|
||||
this->unk_26C[OBJECT_NIW_LIMB7_TARGET_ROT_X] = this->unk_26C[OBJECT_NIW_LIMB11_TARGET_ROT_X] = 6000.0f;
|
||||
|
||||
if (this->unk_29C == 0) {
|
||||
this->unk_26C[5] = this->unk_26C[7] = 8000.0f;
|
||||
this->unk_26C[OBJECT_NIW_LIMB11_TARGET_ROT_Y] = this->unk_26C[OBJECT_NIW_LIMB7_TARGET_ROT_Y] =
|
||||
8000.0f;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
this->timer2 = 2;
|
||||
this->unk_26C[7] = this->unk_26C[5] = 10000.0f;
|
||||
this->unk_26C[OBJECT_NIW_LIMB7_TARGET_ROT_Y] = this->unk_26C[OBJECT_NIW_LIMB11_TARGET_ROT_Y] = 10000.0f;
|
||||
|
||||
if (this->unk_29C == 0) {
|
||||
this->unk_26C[7] = this->unk_26C[5] = 3000.0f;
|
||||
this->unk_26C[OBJECT_NIW_LIMB7_TARGET_ROT_Y] = this->unk_26C[OBJECT_NIW_LIMB11_TARGET_ROT_Y] =
|
||||
3000.0f;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
|
|
@ -335,36 +337,37 @@ void func_80AB5BF8(EnNiw* this, PlayState* play, s16 arg2) {
|
|||
break;
|
||||
case 5:
|
||||
this->timer2 = 5;
|
||||
this->unk_26C[7] = this->unk_26C[5] = 14000.0f;
|
||||
this->unk_26C[OBJECT_NIW_LIMB7_TARGET_ROT_Y] = this->unk_26C[OBJECT_NIW_LIMB11_TARGET_ROT_Y] = 14000.0f;
|
||||
if (this->unk_29C == 0) {
|
||||
this->unk_26C[7] = this->unk_26C[5] = 10000.0f;
|
||||
this->unk_26C[OBJECT_NIW_LIMB7_TARGET_ROT_Y] = this->unk_26C[OBJECT_NIW_LIMB11_TARGET_ROT_Y] =
|
||||
10000.0f;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (this->unk_2E0 != this->unk_26C[9]) {
|
||||
Math_ApproachF(&this->unk_2E0, this->unk_26C[9], 0.5f, 4000.0f);
|
||||
if (this->limb15RotY != this->unk_26C[OBJECT_NIW_LIMB15_TARGET_ROT_Y]) {
|
||||
Math_ApproachF(&this->limb15RotY, this->unk_26C[OBJECT_NIW_LIMB15_TARGET_ROT_Y], 0.5f, 4000.0f);
|
||||
}
|
||||
if (this->unk_2DC != this->unk_26C[0]) {
|
||||
Math_ApproachF(&this->unk_2DC, this->unk_26C[0], 0.5f, 4000.0f);
|
||||
if (this->limb13RotY != this->unk_26C[OBJECT_NIW_LIMB13_TARGET_ROT_Y]) {
|
||||
Math_ApproachF(&this->limb13RotY, this->unk_26C[OBJECT_NIW_LIMB13_TARGET_ROT_Y], 0.5f, 4000.0f);
|
||||
}
|
||||
if (this->unk_2C4 != this->unk_26C[2]) {
|
||||
Math_ApproachF(&this->unk_2C4, this->unk_26C[2], 0.8f, 7000.0f);
|
||||
if (this->limb7RotZ != this->unk_26C[OBJECT_NIW_LIMB7_TARGET_ROT_Z]) {
|
||||
Math_ApproachF(&this->limb7RotZ, this->unk_26C[OBJECT_NIW_LIMB7_TARGET_ROT_Z], 0.8f, 7000.0f);
|
||||
}
|
||||
if (this->unk_2C8 != this->unk_26C[7]) {
|
||||
Math_ApproachF(&this->unk_2C8, this->unk_26C[7], 0.8f, 7000.0f);
|
||||
if (this->limb7RotY != this->unk_26C[OBJECT_NIW_LIMB7_TARGET_ROT_Y]) {
|
||||
Math_ApproachF(&this->limb7RotY, this->unk_26C[OBJECT_NIW_LIMB7_TARGET_ROT_Y], 0.8f, 7000.0f);
|
||||
}
|
||||
if (this->unk_2CC != this->unk_26C[8]) {
|
||||
Math_ApproachF(&this->unk_2CC, this->unk_26C[8], 0.8f, 7000.0f);
|
||||
if (this->limb7RotX != this->unk_26C[OBJECT_NIW_LIMB7_TARGET_ROT_X]) {
|
||||
Math_ApproachF(&this->limb7RotX, this->unk_26C[OBJECT_NIW_LIMB7_TARGET_ROT_X], 0.8f, 7000.0f);
|
||||
}
|
||||
if (this->unk_2D0 != this->unk_26C[1]) {
|
||||
Math_ApproachF(&this->unk_2D0, this->unk_26C[1], 0.8f, 7000.0f);
|
||||
if (this->limb11RotZ != this->unk_26C[OBJECT_NIW_LIMB11_TARGET_ROT_Z]) {
|
||||
Math_ApproachF(&this->limb11RotZ, this->unk_26C[OBJECT_NIW_LIMB11_TARGET_ROT_Z], 0.8f, 7000.0f);
|
||||
}
|
||||
if (this->unk_2D4 != this->unk_26C[5]) {
|
||||
Math_ApproachF(&this->unk_2D4, this->unk_26C[5], 0.8f, 7000.0f);
|
||||
if (this->limb11RotY != this->unk_26C[OBJECT_NIW_LIMB11_TARGET_ROT_Y]) {
|
||||
Math_ApproachF(&this->limb11RotY, this->unk_26C[OBJECT_NIW_LIMB11_TARGET_ROT_Y], 0.8f, 7000.0f);
|
||||
}
|
||||
if (this->unk_2D8 != this->unk_26C[6]) {
|
||||
Math_ApproachF(&this->unk_2D8, this->unk_26C[6], 0.8f, 7000.0f);
|
||||
if (this->limb11RotX != this->unk_26C[OBJECT_NIW_LIMB11_TARGET_ROT_X]) {
|
||||
Math_ApproachF(&this->limb11RotX, this->unk_26C[OBJECT_NIW_LIMB11_TARGET_ROT_X], 0.8f, 7000.0f);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -436,50 +439,51 @@ void EnNiw_ResetAction(EnNiw* this, PlayState* play) {
|
|||
-10.0f);
|
||||
|
||||
switch (this->actor.params) {
|
||||
case 4:
|
||||
this->actionFunc = func_80AB6450;
|
||||
case EN_NIW_TYPE_KAKARIKO_CRATE:
|
||||
this->actionFunc = EnNiw_IdleKakarikoCrate;
|
||||
break;
|
||||
case 0xD:
|
||||
this->actionFunc = func_80AB6324;
|
||||
case EN_NIW_TYPE_SUPER_CUCCO:
|
||||
this->actionFunc = EnNiw_IdleSuperCucco;
|
||||
break;
|
||||
default:
|
||||
this->actionFunc = func_80AB6570;
|
||||
this->actionFunc = EnNiw_IdleWalk;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void func_80AB6324(EnNiw* this, PlayState* play) {
|
||||
if (this->unk_308 != 0) {
|
||||
void EnNiw_IdleSuperCucco(EnNiw* this, PlayState* play) {
|
||||
if (this->isSuperCuccoThrown) {
|
||||
this->actor.velocity.y = Rand_ZeroFloat(2.0f) + 4.0f;
|
||||
this->actor.speed = Rand_ZeroFloat(2.0f) + 3.0f;
|
||||
this->actionFunc = func_80AB63A8;
|
||||
this->actionFunc = EnNiw_SuperCuccoFallingIntoPosition;
|
||||
}
|
||||
func_80AB5BF8(this, play, 1);
|
||||
}
|
||||
|
||||
void func_80AB63A8(EnNiw* this, PlayState* play) {
|
||||
void EnNiw_SuperCuccoFallingIntoPosition(EnNiw* this, PlayState* play) {
|
||||
if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && this->actor.velocity.y < 0.0f) {
|
||||
this->unk_2AC.x = this->unk_2B8.x = this->actor.world.pos.x;
|
||||
this->unk_2AC.y = this->unk_2B8.y = this->actor.world.pos.y;
|
||||
this->unk_2AC.z = this->unk_2B8.z = this->actor.world.pos.z;
|
||||
this->timer5 = this->timer4 = this->unk_29E = 0;
|
||||
|
||||
this->unk_26C[7] = this->unk_26C[5] = this->unk_26C[6] = this->unk_26C[8] = this->actor.speed = this->unk_2FC =
|
||||
this->unk_300 = 0.0f;
|
||||
this->unk_26C[OBJECT_NIW_LIMB7_TARGET_ROT_Y] = this->unk_26C[OBJECT_NIW_LIMB11_TARGET_ROT_Y] =
|
||||
this->unk_26C[OBJECT_NIW_LIMB11_TARGET_ROT_X] = this->unk_26C[OBJECT_NIW_LIMB7_TARGET_ROT_X] =
|
||||
this->actor.speed = this->unk_2FC = this->unk_300 = 0.0f;
|
||||
|
||||
this->actionFunc = func_80AB6570;
|
||||
this->actionFunc = EnNiw_IdleWalk;
|
||||
} else {
|
||||
func_80AB5BF8(this, play, 2);
|
||||
}
|
||||
}
|
||||
|
||||
void func_80AB6450(EnNiw* this, PlayState* play) {
|
||||
void EnNiw_IdleKakarikoCrate(EnNiw* this, PlayState* play) {
|
||||
Player* player = GET_PLAYER(play);
|
||||
|
||||
if (this->actor.xzDistToPlayer < 30.0f && fabsf(this->actor.world.pos.y - player->actor.world.pos.y) < 5.0f) {
|
||||
this->timer6 = 100;
|
||||
this->actor.gravity = -2.0f;
|
||||
this->actionFunc = func_80AB7290;
|
||||
this->actionFunc = EnNiw_SetupFleePlayer;
|
||||
} else if (Actor_HasParent(&this->actor, play)) {
|
||||
this->actor.gravity = -2.0f;
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EV_CHICKEN_CRY_M);
|
||||
|
|
@ -488,7 +492,7 @@ void func_80AB6450(EnNiw* this, PlayState* play) {
|
|||
this->timer4 = 30;
|
||||
this->actor.flags &= ~ACTOR_FLAG_ATTENTION_ENABLED;
|
||||
this->actor.speed = 0.0f;
|
||||
this->actionFunc = func_80AB6BF8;
|
||||
this->actionFunc = EnNiw_PlayerCarrying;
|
||||
} else {
|
||||
// GI_NONE in this case allows the player to lift the actor
|
||||
Actor_OfferGetItem(&this->actor, play, GI_NONE, 25.0f, 10.0f);
|
||||
|
|
@ -496,13 +500,13 @@ void func_80AB6450(EnNiw* this, PlayState* play) {
|
|||
}
|
||||
}
|
||||
|
||||
void func_80AB6570(EnNiw* this, PlayState* play) {
|
||||
void EnNiw_IdleWalk(EnNiw* this, PlayState* play) {
|
||||
s32 pad[2];
|
||||
f32 posY = Rand_CenteredFloat(100.0f);
|
||||
f32 posZ = Rand_CenteredFloat(100.0f);
|
||||
s16 tmp;
|
||||
|
||||
if (this->actor.params != 0xA) {
|
||||
if (this->actor.params != EN_NIW_TYPE_A) {
|
||||
if (Actor_HasParent(&this->actor, play)) {
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EV_CHICKEN_CRY_M);
|
||||
this->sfxTimer1 = 30;
|
||||
|
|
@ -510,7 +514,7 @@ void func_80AB6570(EnNiw* this, PlayState* play) {
|
|||
this->timer4 = 30;
|
||||
this->actor.flags &= ~ACTOR_FLAG_ATTENTION_ENABLED;
|
||||
this->actor.speed = 0.0f;
|
||||
this->actionFunc = func_80AB6BF8;
|
||||
this->actionFunc = EnNiw_PlayerCarrying;
|
||||
return;
|
||||
}
|
||||
Actor_OfferCarry(&this->actor, play);
|
||||
|
|
@ -537,7 +541,7 @@ void func_80AB6570(EnNiw* this, PlayState* play) {
|
|||
this->unk_2E6++;
|
||||
this->unk_2E6 &= 1;
|
||||
}
|
||||
Math_ApproachF(&this->unk_26C[9], D_80AB8604[this->unk_2E6], 0.5f, 4000.0f);
|
||||
Math_ApproachF(&this->unk_26C[OBJECT_NIW_LIMB15_TARGET_ROT_Y], D_80AB8604[this->unk_2E6], 0.5f, 4000.0f);
|
||||
}
|
||||
|
||||
if (this->timer5 == 0 && this->timer4 == 0) {
|
||||
|
|
@ -546,7 +550,7 @@ void func_80AB6570(EnNiw* this, PlayState* play) {
|
|||
if (this->unk_29E >= 8) {
|
||||
this->timer5 = Rand_ZeroFloat(30.0f);
|
||||
this->unk_29E = Rand_ZeroFloat(3.99f);
|
||||
if (this->actor.params != 0xA && this->actor.params != 8) {
|
||||
if (this->actor.params != EN_NIW_TYPE_A && this->actor.params != EN_NIW_TYPE_8) {
|
||||
if (posY < 0.0f) {
|
||||
posY -= 100.0f;
|
||||
} else {
|
||||
|
|
@ -587,7 +591,7 @@ void func_80AB6570(EnNiw* this, PlayState* play) {
|
|||
}
|
||||
|
||||
if (this->timer4 != 0) {
|
||||
Math_ApproachZeroF(&this->unk_26C[9], 0.5f, 4000.0f);
|
||||
Math_ApproachZeroF(&this->unk_26C[OBJECT_NIW_LIMB15_TARGET_ROT_Y], 0.5f, 4000.0f);
|
||||
tmp = 1;
|
||||
Math_ApproachF(&this->actor.world.pos.x, this->unk_2B8.x, 1.0f, this->unk_2FC);
|
||||
Math_ApproachF(&this->actor.world.pos.z, this->unk_2B8.z, 1.0f, this->unk_2FC);
|
||||
|
|
@ -625,8 +629,9 @@ void func_80AB6A38(EnNiw* this, PlayState* play) {
|
|||
this->unk_2AC.y = this->unk_2B8.y = this->actor.world.pos.y;
|
||||
this->unk_2AC.z = this->unk_2B8.z = this->actor.world.pos.z;
|
||||
this->timer5 = this->timer4 = this->unk_29E = 0;
|
||||
this->unk_26C[7] = this->unk_26C[5] = this->unk_26C[6] = this->unk_26C[8] = this->actor.speed = this->unk_2FC =
|
||||
this->unk_300 = 0.0f;
|
||||
this->unk_26C[OBJECT_NIW_LIMB7_TARGET_ROT_Y] = this->unk_26C[OBJECT_NIW_LIMB11_TARGET_ROT_Y] =
|
||||
this->unk_26C[OBJECT_NIW_LIMB11_TARGET_ROT_X] = this->unk_26C[OBJECT_NIW_LIMB7_TARGET_ROT_X] =
|
||||
this->actor.speed = this->unk_2FC = this->unk_300 = 0.0f;
|
||||
this->actionFunc = EnNiw_ResetAction;
|
||||
} else {
|
||||
path = &play->pathList[pathIndex];
|
||||
|
|
@ -648,7 +653,7 @@ void func_80AB6A38(EnNiw* this, PlayState* play) {
|
|||
}
|
||||
}
|
||||
|
||||
void func_80AB6BF8(EnNiw* this, PlayState* play) {
|
||||
void EnNiw_PlayerCarrying(EnNiw* this, PlayState* play) {
|
||||
if (this->timer4 == 0) {
|
||||
this->unk_2A6 = 2;
|
||||
this->timer4 = 10;
|
||||
|
|
@ -659,10 +664,10 @@ void func_80AB6BF8(EnNiw* this, PlayState* play) {
|
|||
this->actor.shape.rot.z = Rand_CenteredFloat(5000.0f);
|
||||
|
||||
if (Actor_HasNoParent(&this->actor, play)) {
|
||||
if (this->actor.params == 0xD) {
|
||||
if (this->actor.params == EN_NIW_TYPE_SUPER_CUCCO) {
|
||||
this->sfxTimer1 = 0;
|
||||
this->unk_2A6 = 1;
|
||||
this->actionFunc = func_80AB6EB4;
|
||||
this->actionFunc = EnNiw_PlayerReleaseSuperCucco;
|
||||
this->actor.velocity.y = 4.0f;
|
||||
return;
|
||||
}
|
||||
|
|
@ -670,24 +675,25 @@ void func_80AB6BF8(EnNiw* this, PlayState* play) {
|
|||
this->actor.shape.rot.y = this->actor.shape.rot.z;
|
||||
this->actor.shape.rot.x = this->actor.shape.rot.z;
|
||||
this->actor.flags |= ACTOR_FLAG_ATTENTION_ENABLED;
|
||||
this->actionFunc = func_80AB6D08;
|
||||
this->actionFunc = EnNiw_PlayerReleased;
|
||||
}
|
||||
func_80AB5BF8(this, play, 2);
|
||||
}
|
||||
|
||||
void func_80AB6D08(EnNiw* this, PlayState* play) {
|
||||
void EnNiw_PlayerReleased(EnNiw* this, PlayState* play) {
|
||||
if (this->path == 0) {
|
||||
if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
|
||||
return;
|
||||
}
|
||||
if (this->actor.params == 0xE) {
|
||||
if (this->actor.params == EN_NIW_TYPE_TALON_CUCCO) {
|
||||
this->unk_2AC.x = this->unk_2B8.x = this->actor.world.pos.x;
|
||||
this->unk_2AC.y = this->unk_2B8.y = this->actor.world.pos.y;
|
||||
this->unk_2AC.z = this->unk_2B8.z = this->actor.world.pos.z;
|
||||
this->timer5 = this->timer4 = this->unk_29E = 0;
|
||||
|
||||
this->unk_26C[7] = this->unk_26C[5] = this->unk_26C[6] = this->unk_26C[8] = this->actor.speed =
|
||||
this->unk_2FC = this->unk_300 = 0.0f;
|
||||
this->unk_26C[OBJECT_NIW_LIMB7_TARGET_ROT_Y] = this->unk_26C[OBJECT_NIW_LIMB11_TARGET_ROT_Y] =
|
||||
this->unk_26C[OBJECT_NIW_LIMB11_TARGET_ROT_X] = this->unk_26C[OBJECT_NIW_LIMB7_TARGET_ROT_X] =
|
||||
this->actor.speed = this->unk_2FC = this->unk_300 = 0.0f;
|
||||
|
||||
this->actionFunc = EnNiw_ResetAction;
|
||||
return;
|
||||
|
|
@ -707,7 +713,7 @@ void func_80AB6D08(EnNiw* this, PlayState* play) {
|
|||
this->timer6 = 100;
|
||||
this->timer4 = 0;
|
||||
this->path = 0;
|
||||
this->actionFunc = func_80AB7290;
|
||||
this->actionFunc = EnNiw_SetupFleePlayer;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
@ -719,7 +725,7 @@ void func_80AB6D08(EnNiw* this, PlayState* play) {
|
|||
this->timer4 = 30;
|
||||
this->actor.flags &= ~ACTOR_FLAG_ATTENTION_ENABLED;
|
||||
this->actor.speed = 0.0f;
|
||||
this->actionFunc = func_80AB6BF8;
|
||||
this->actionFunc = EnNiw_PlayerCarrying;
|
||||
} else {
|
||||
if (this->timer5 >= 6) {
|
||||
Actor_OfferCarry(&this->actor, play);
|
||||
|
|
@ -728,7 +734,7 @@ void func_80AB6D08(EnNiw* this, PlayState* play) {
|
|||
}
|
||||
}
|
||||
|
||||
void func_80AB6EB4(EnNiw* this, PlayState* play) {
|
||||
void EnNiw_PlayerReleaseSuperCucco(EnNiw* this, PlayState* play) {
|
||||
if (this->actor.world.pos.y > 400.0f) {
|
||||
Actor_Kill(&this->actor);
|
||||
}
|
||||
|
|
@ -739,7 +745,7 @@ void func_80AB6EB4(EnNiw* this, PlayState* play) {
|
|||
void func_80AB6F04(EnNiw* this, PlayState* play) {
|
||||
Vec3f pos;
|
||||
|
||||
if (this->unk_2A8 != 0) {
|
||||
if (this->isAngry) {
|
||||
EnNiw_SpawnAttackCucco(this, play);
|
||||
}
|
||||
|
||||
|
|
@ -776,10 +782,10 @@ void func_80AB6F04(EnNiw* this, PlayState* play) {
|
|||
this->timer6 = 100;
|
||||
this->timer4 = 0;
|
||||
this->actor.velocity.y = 0.0f;
|
||||
if (this->unk_2A8 == 0) {
|
||||
this->actionFunc = func_80AB7290;
|
||||
if (!this->isAngry) {
|
||||
this->actionFunc = EnNiw_SetupFleePlayer;
|
||||
} else {
|
||||
this->actionFunc = func_80AB7204;
|
||||
this->actionFunc = EnNiw_SetupAttackPlayer;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -787,14 +793,14 @@ void func_80AB6F04(EnNiw* this, PlayState* play) {
|
|||
func_80AB5BF8(this, play, 2);
|
||||
}
|
||||
|
||||
void func_80AB70A0(EnNiw* this, PlayState* play) {
|
||||
void EnNiw_AngryCutsceneStart(EnNiw* this, PlayState* play) {
|
||||
OnePointCutscene_Init(play, 2290, -99, &this->actor, CAM_ID_MAIN);
|
||||
this->timer5 = 100;
|
||||
this->unk_2A2 = 1;
|
||||
this->actionFunc = func_80AB70F8;
|
||||
this->actionFunc = EnNiw_AngryCutsceneWait;
|
||||
}
|
||||
|
||||
void func_80AB70F8(EnNiw* this, PlayState* play) {
|
||||
void EnNiw_AngryCutsceneWait(EnNiw* this, PlayState* play) {
|
||||
this->sfxTimer1 = 100;
|
||||
|
||||
if (this->timer5 == 0) {
|
||||
|
|
@ -811,13 +817,13 @@ void func_80AB714C(EnNiw* this, PlayState* play) {
|
|||
this->sfxTimer1 = 100;
|
||||
|
||||
if (this->timer5 == 40) {
|
||||
this->unk_26C[0] = 10000.0f;
|
||||
this->unk_26C[7] = 14000.0f;
|
||||
this->unk_26C[5] = 14000.0f;
|
||||
this->unk_26C[6] = 0.0f;
|
||||
this->unk_26C[8] = 0.0f;
|
||||
this->unk_26C[1] = 0.0f;
|
||||
this->unk_26C[2] = 0.0f;
|
||||
this->unk_26C[OBJECT_NIW_LIMB13_TARGET_ROT_Y] = 10000.0f;
|
||||
this->unk_26C[OBJECT_NIW_LIMB7_TARGET_ROT_Y] = 14000.0f;
|
||||
this->unk_26C[OBJECT_NIW_LIMB11_TARGET_ROT_Y] = 14000.0f;
|
||||
this->unk_26C[OBJECT_NIW_LIMB11_TARGET_ROT_X] = 0.0f;
|
||||
this->unk_26C[OBJECT_NIW_LIMB7_TARGET_ROT_X] = 0.0f;
|
||||
this->unk_26C[OBJECT_NIW_LIMB11_TARGET_ROT_Z] = 0.0f;
|
||||
this->unk_26C[OBJECT_NIW_LIMB7_TARGET_ROT_Z] = 0.0f;
|
||||
this->timer1 = 10;
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EV_CHICKEN_CRY_M);
|
||||
}
|
||||
|
|
@ -825,13 +831,13 @@ void func_80AB714C(EnNiw* this, PlayState* play) {
|
|||
this->timer7 = 10;
|
||||
this->unk_2E4 = this->actor.yawTowardsPlayer;
|
||||
this->actor.flags &= ~ACTOR_FLAG_ATTENTION_ENABLED;
|
||||
this->actionFunc = func_80AB7204;
|
||||
this->actionFunc = EnNiw_SetupAttackPlayer;
|
||||
}
|
||||
|
||||
func_80AB5BF8(this, play, this->unk_2A2);
|
||||
}
|
||||
|
||||
void func_80AB7204(EnNiw* this, PlayState* play) {
|
||||
void EnNiw_SetupAttackPlayer(EnNiw* this, PlayState* play) {
|
||||
EnNiw_SpawnAttackCucco(this, play);
|
||||
|
||||
if (this->timer7 < 2) {
|
||||
|
|
@ -845,15 +851,15 @@ void func_80AB7204(EnNiw* this, PlayState* play) {
|
|||
}
|
||||
}
|
||||
|
||||
void func_80AB7290(EnNiw* this, PlayState* play) {
|
||||
void EnNiw_SetupFleePlayer(EnNiw* this, PlayState* play) {
|
||||
Animation_Change(&this->skelAnime, &gCuccoAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gCuccoAnim), ANIMMODE_LOOP,
|
||||
-10.0f);
|
||||
this->unk_2A0 = Rand_ZeroFloat(1.99f);
|
||||
this->actor.speed = 4.0f;
|
||||
this->actionFunc = func_80AB7328;
|
||||
this->actionFunc = EnNiw_FleePlayer;
|
||||
}
|
||||
|
||||
void func_80AB7328(EnNiw* this, PlayState* play) {
|
||||
void EnNiw_FleePlayer(EnNiw* this, PlayState* play) {
|
||||
Player* player = GET_PLAYER(play);
|
||||
|
||||
if (this->timer6 == 0) {
|
||||
|
|
@ -861,10 +867,11 @@ void func_80AB7328(EnNiw* this, PlayState* play) {
|
|||
this->unk_2AC.y = this->unk_2B8.y = this->actor.world.pos.y;
|
||||
this->unk_2AC.z = this->unk_2B8.z = this->actor.world.pos.z;
|
||||
this->timer5 = this->timer4 = this->unk_29E = 0;
|
||||
this->unk_26C[7] = this->unk_26C[5] = this->unk_26C[6] = this->unk_26C[8] = this->actor.speed = this->unk_2FC =
|
||||
this->unk_300 = 0.0f;
|
||||
if (this->actor.params == 4) {
|
||||
this->actor.params = 0;
|
||||
this->unk_26C[OBJECT_NIW_LIMB7_TARGET_ROT_Y] = this->unk_26C[OBJECT_NIW_LIMB11_TARGET_ROT_Y] =
|
||||
this->unk_26C[OBJECT_NIW_LIMB11_TARGET_ROT_X] = this->unk_26C[OBJECT_NIW_LIMB7_TARGET_ROT_X] =
|
||||
this->actor.speed = this->unk_2FC = this->unk_300 = 0.0f;
|
||||
if (this->actor.params == EN_NIW_TYPE_KAKARIKO_CRATE) {
|
||||
this->actor.params = EN_NIW_TYPE_0;
|
||||
}
|
||||
this->actionFunc = EnNiw_ResetAction;
|
||||
} else {
|
||||
|
|
@ -877,24 +884,24 @@ void func_80AB7328(EnNiw* this, PlayState* play) {
|
|||
|
||||
void func_80AB7420(EnNiw* this, PlayState* play) {
|
||||
if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
|
||||
this->unk_2A4 = (s16)Rand_ZeroFloat(3.99f) + 5;
|
||||
this->health = (s16)Rand_ZeroFloat(3.99f) + 5;
|
||||
this->actionFunc = EnNiw_ResetAction;
|
||||
}
|
||||
}
|
||||
|
||||
void func_80AB747C(EnNiw* this, PlayState* play) {
|
||||
if (this->unk_2A8 == 0 && this->actor.params != 0xA && this->actionFunc != func_80AB6450 &&
|
||||
if (this->isAngry == 0 && this->actor.params != EN_NIW_TYPE_A && this->actionFunc != EnNiw_IdleKakarikoCrate &&
|
||||
this->collider.base.acFlags & AC_HIT) {
|
||||
this->collider.base.acFlags &= ~AC_HIT;
|
||||
this->sfxTimer1 = 30;
|
||||
if (this->unk_2A4 > 0 && D_80AB85E0 == 0) {
|
||||
this->unk_2A4--;
|
||||
if (this->health > 0 && sHasAttackStarted == false) {
|
||||
this->health--;
|
||||
}
|
||||
this->unk_2A6 = 1;
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EV_CHICKEN_CRY_M);
|
||||
this->timer6 = 100;
|
||||
this->path = 0;
|
||||
this->actionFunc = func_80AB7290;
|
||||
this->actionFunc = EnNiw_SetupFleePlayer;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -917,8 +924,8 @@ void EnNiw_Update(Actor* thisx, PlayState* play) {
|
|||
|
||||
this->unk_294++;
|
||||
|
||||
if (this->actionFunc != func_80AB6570) {
|
||||
this->unk_26C[9] = 0.0f;
|
||||
if (this->actionFunc != EnNiw_IdleWalk) {
|
||||
this->unk_26C[OBJECT_NIW_LIMB15_TARGET_ROT_Y] = 0.0f;
|
||||
}
|
||||
if (this->unk_2A6) {
|
||||
featherCount = 20;
|
||||
|
|
@ -972,7 +979,8 @@ void EnNiw_Update(Actor* thisx, PlayState* play) {
|
|||
Actor_SetFocus(&this->actor, this->unk_304);
|
||||
Actor_MoveXZGravity(&this->actor);
|
||||
|
||||
if (this->actionFunc != func_80AB6EB4 && this->actionFunc != func_80AB6450 && play->sceneId != SCENE_ZORAS_RIVER) {
|
||||
if (this->actionFunc != EnNiw_PlayerReleaseSuperCucco && this->actionFunc != EnNiw_IdleKakarikoCrate &&
|
||||
play->sceneId != SCENE_ZORAS_RIVER) {
|
||||
Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 60.0f,
|
||||
UPDBGCHECKINFO_FLAG_0 | UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 |
|
||||
UPDBGCHECKINFO_FLAG_3 | UPDBGCHECKINFO_FLAG_4);
|
||||
|
|
@ -1026,28 +1034,29 @@ void EnNiw_Update(Actor* thisx, PlayState* play) {
|
|||
this->unk_2F0.z = 0.0f;
|
||||
this->unk_2F0.y = 0.0f;
|
||||
this->unk_2F0.x = 0.0f;
|
||||
this->unk_2D8 = 0.0f;
|
||||
this->unk_2D4 = 0.0f;
|
||||
this->unk_2D0 = 0.0f;
|
||||
this->unk_2CC = 0.0f;
|
||||
this->unk_2C8 = 0.0f;
|
||||
this->unk_2C4 = 0.0f;
|
||||
this->unk_2DC = 0.0f;
|
||||
this->unk_2E0 = 0.0f;
|
||||
this->unk_2A8 = this->unk_294 = this->unk_298 = this->unk_2A6 = this->unk_29E = this->unk_2A0 = this->unk_2A2 =
|
||||
this->limb11RotX = 0.0f;
|
||||
this->limb11RotY = 0.0f;
|
||||
this->limb11RotZ = 0.0f;
|
||||
this->limb7RotX = 0.0f;
|
||||
this->limb7RotY = 0.0f;
|
||||
this->limb7RotZ = 0.0f;
|
||||
this->limb13RotY = 0.0f;
|
||||
this->limb15RotY = 0.0f;
|
||||
this->isAngry = this->unk_294 = this->unk_298 = this->unk_2A6 = this->unk_29E = this->unk_2A0 = this->unk_2A2 =
|
||||
0;
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(this->unk_26C); i++) {
|
||||
this->unk_26C[i] = 0;
|
||||
}
|
||||
|
||||
this->unk_2A8 = 0;
|
||||
this->isAngry = false;
|
||||
this->actionFunc = func_80AB7420;
|
||||
return;
|
||||
}
|
||||
|
||||
if ((thisx->bgCheckFlags & BGCHECKFLAG_WATER) && thisx->depthInWater > 15.0f && this->actionFunc != func_80AB6F04 &&
|
||||
thisx->params != 0xD && thisx->params != 0xE && thisx->params != 0xA) {
|
||||
thisx->params != EN_NIW_TYPE_SUPER_CUCCO && thisx->params != EN_NIW_TYPE_TALON_CUCCO &&
|
||||
thisx->params != EN_NIW_TYPE_A) {
|
||||
thisx->velocity.y = 0.0f;
|
||||
thisx->gravity = 0.0f;
|
||||
Math_Vec3f_Copy(&pos, &thisx->world.pos);
|
||||
|
|
@ -1062,35 +1071,38 @@ void EnNiw_Update(Actor* thisx, PlayState* play) {
|
|||
return;
|
||||
}
|
||||
|
||||
if (D_80AB85E0 == 0 && this->unk_2A4 <= 0 && thisx->params != 0xD && thisx->params != 0xE && thisx->params != 0xA) {
|
||||
if (sHasAttackStarted == false && this->health <= 0 && thisx->params != EN_NIW_TYPE_SUPER_CUCCO &&
|
||||
thisx->params != EN_NIW_TYPE_TALON_CUCCO && thisx->params != EN_NIW_TYPE_A) {
|
||||
this->timer6 = 100;
|
||||
|
||||
if (thisx->xzDistToPlayer > 10.0f) {
|
||||
D_80AB85E0 = 1;
|
||||
sHasAttackStarted = true;
|
||||
this->timer5 = this->timer4 = this->unk_29E = 0;
|
||||
thisx->speed = 0.0f;
|
||||
this->unk_2FC = 0.0f;
|
||||
this->unk_300 = 0.0f;
|
||||
this->unk_26C[7] = 0.0f;
|
||||
this->unk_26C[5] = 0.0f;
|
||||
this->unk_26C[6] = 0.0f;
|
||||
this->unk_26C[8] = 0.0f;
|
||||
this->unk_26C[OBJECT_NIW_LIMB7_TARGET_ROT_Y] = 0.0f;
|
||||
this->unk_26C[OBJECT_NIW_LIMB11_TARGET_ROT_Y] = 0.0f;
|
||||
this->unk_26C[OBJECT_NIW_LIMB11_TARGET_ROT_X] = 0.0f;
|
||||
this->unk_26C[OBJECT_NIW_LIMB7_TARGET_ROT_X] = 0.0f;
|
||||
this->sfxTimer1 = 10000;
|
||||
this->unk_2A8 = 1;
|
||||
this->isAngry = true;
|
||||
this->unk_2AC.x = this->unk_2B8.x = thisx->world.pos.x;
|
||||
this->unk_2AC.y = this->unk_2B8.y = thisx->world.pos.y;
|
||||
this->unk_2AC.z = this->unk_2B8.z = thisx->world.pos.z;
|
||||
this->actionFunc = func_80AB70A0;
|
||||
this->actionFunc = EnNiw_AngryCutsceneStart;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
dist = 20.0f;
|
||||
|
||||
//! @bug In certain scenarios like getting cornered against the wall, the PLAYER_STATE1_26 will be flushed before
|
||||
//! the player has regained control of Link. This can result in the player being softlocked by a Cucco attack.
|
||||
#if OOT_VERSION < NTSC_1_1
|
||||
if (this->unk_2A8 != 0 && thisx->xyzDistToPlayerSq < SQ(dist) && !(player->stateFlags1 & PLAYER_STATE1_26))
|
||||
if (this->isAngry && thisx->xyzDistToPlayerSq < SQ(dist) && !(player->stateFlags1 & PLAYER_STATE1_26))
|
||||
#else
|
||||
if (this->unk_2A8 != 0 && thisx->xyzDistToPlayerSq < SQ(dist) && player->invincibilityTimer == 0)
|
||||
if (this->isAngry && thisx->xyzDistToPlayerSq < SQ(dist) && player->invincibilityTimer == 0)
|
||||
#endif
|
||||
{
|
||||
Actor_SetPlayerKnockbackLarge(play, &this->actor, 2.0f, thisx->world.rot.y, 0.0f, 0x10);
|
||||
|
|
@ -1098,12 +1110,12 @@ void EnNiw_Update(Actor* thisx, PlayState* play) {
|
|||
|
||||
func_80AB747C(this, play);
|
||||
|
||||
if (this->sfxTimer2 == 0 && this->actionFunc == func_80AB6BF8) {
|
||||
if (this->sfxTimer2 == 0 && this->actionFunc == EnNiw_PlayerCarrying) {
|
||||
this->sfxTimer2 = 7;
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EN_DEKU_WAKEUP);
|
||||
}
|
||||
if (this->sfxTimer1 == 0) {
|
||||
if (this->actionFunc != func_80AB6570) {
|
||||
if (this->actionFunc != EnNiw_IdleWalk) {
|
||||
this->sfxTimer1 = 30;
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EV_CHICKEN_CRY_A);
|
||||
} else {
|
||||
|
|
@ -1111,15 +1123,16 @@ void EnNiw_Update(Actor* thisx, PlayState* play) {
|
|||
Actor_PlaySfx(&this->actor, NA_SE_EV_CHICKEN_CRY_N);
|
||||
}
|
||||
}
|
||||
if (this->unk_2A8 == 0) {
|
||||
if (!this->isAngry) {
|
||||
Collider_UpdateCylinder(&this->actor, &this->collider);
|
||||
|
||||
if (thisx->params != 0xA && thisx->params != 0xD && thisx->params != 0xE && thisx->params != 4) {
|
||||
if (thisx->params != EN_NIW_TYPE_A && thisx->params != EN_NIW_TYPE_SUPER_CUCCO &&
|
||||
thisx->params != EN_NIW_TYPE_TALON_CUCCO && thisx->params != EN_NIW_TYPE_KAKARIKO_CRATE) {
|
||||
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
|
||||
}
|
||||
if (this->actionFunc != func_80AB6BF8 && this->actionFunc != func_80AB6D08 &&
|
||||
this->actionFunc != func_80AB6324 && this->actionFunc != func_80AB63A8 &&
|
||||
this->actionFunc != func_80AB6450) {
|
||||
if (this->actionFunc != EnNiw_PlayerCarrying && this->actionFunc != EnNiw_PlayerReleased &&
|
||||
this->actionFunc != EnNiw_IdleSuperCucco && this->actionFunc != EnNiw_SuperCuccoFallingIntoPosition &&
|
||||
this->actionFunc != EnNiw_IdleKakarikoCrate) {
|
||||
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
|
||||
}
|
||||
}
|
||||
|
|
@ -1130,20 +1143,20 @@ s32 EnNiw_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p
|
|||
Vec3f zeroVec = { 0.0f, 0.0f, 0.0f };
|
||||
|
||||
if (limbIndex == 13) {
|
||||
rot->y += (s16)this->unk_2DC;
|
||||
rot->y += (s16)this->limb13RotY;
|
||||
}
|
||||
if (limbIndex == 15) {
|
||||
rot->y += (s16)this->unk_2E0;
|
||||
rot->y += (s16)this->limb15RotY;
|
||||
}
|
||||
if (limbIndex == 11) {
|
||||
rot->x += (s16)this->unk_2D8;
|
||||
rot->y += (s16)this->unk_2D4;
|
||||
rot->z += (s16)this->unk_2D0;
|
||||
rot->x += (s16)this->limb11RotX;
|
||||
rot->y += (s16)this->limb11RotY;
|
||||
rot->z += (s16)this->limb11RotZ;
|
||||
}
|
||||
if (limbIndex == 7) {
|
||||
rot->x += (s16)this->unk_2CC;
|
||||
rot->y += (s16)this->unk_2C8;
|
||||
rot->z += (s16)this->unk_2C4;
|
||||
rot->x += (s16)this->limb7RotX;
|
||||
rot->y += (s16)this->limb7RotY;
|
||||
rot->z += (s16)this->limb7RotZ;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
|
@ -1158,7 +1171,7 @@ void EnNiw_Draw(Actor* thisx, PlayState* play) {
|
|||
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
|
||||
EnNiw_OverrideLimbDraw, NULL, this);
|
||||
|
||||
if (this->actionFunc == func_80AB6450) {
|
||||
if (this->actionFunc == EnNiw_IdleKakarikoCrate) {
|
||||
func_80033C30(&this->actor.world.pos, &scale, 255, play);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,22 @@ struct EnNiw;
|
|||
|
||||
typedef void (*EnNiwActionFunc)(struct EnNiw*, struct PlayState*);
|
||||
|
||||
typedef enum EnNiwType {
|
||||
EN_NIW_TYPE_0,
|
||||
EN_NIW_TYPE_1,
|
||||
EN_NIW_TYPE_2,
|
||||
EN_NIW_TYPE_3,
|
||||
EN_NIW_TYPE_KAKARIKO_CRATE,
|
||||
EN_NIW_TYPE_5,
|
||||
EN_NIW_TYPE_7 = 7,
|
||||
EN_NIW_TYPE_8,
|
||||
EN_NIW_TYPE_A = 10,
|
||||
EN_NIW_TYPE_ZORA_RIVER_LOWER,
|
||||
EN_NIW_TYPE_ZORA_RIVER_UPPER,
|
||||
EN_NIW_TYPE_SUPER_CUCCO,
|
||||
EN_NIW_TYPE_TALON_CUCCO
|
||||
} EnNiwType;
|
||||
|
||||
typedef struct EnNiwEffect {
|
||||
/* 0x0000 */ u8 type;
|
||||
/* 0x0004 */ Vec3f pos;
|
||||
|
|
@ -40,7 +56,17 @@ typedef struct EnNiw {
|
|||
/* 0x0266 */ s16 timer7;
|
||||
/* 0x0268 */ s16 timer8;
|
||||
/* 0x026A */ s16 timer9;
|
||||
|
||||
/* 0x026C */ f32 unk_26C[10];
|
||||
#define OBJECT_NIW_LIMB13_TARGET_ROT_Y 0
|
||||
#define OBJECT_NIW_LIMB11_TARGET_ROT_Z 1
|
||||
#define OBJECT_NIW_LIMB7_TARGET_ROT_Z 2
|
||||
#define OBJECT_NIW_LIMB11_TARGET_ROT_Y 5
|
||||
#define OBJECT_NIW_LIMB11_TARGET_ROT_X 6
|
||||
#define OBJECT_NIW_LIMB7_TARGET_ROT_Y 7
|
||||
#define OBJECT_NIW_LIMB7_TARGET_ROT_X 8
|
||||
#define OBJECT_NIW_LIMB15_TARGET_ROT_Y 9
|
||||
|
||||
/* 0x0294 */ s16 unk_294;
|
||||
/* 0x0296 */ s16 unk_296;
|
||||
/* 0x0298 */ s16 unk_298;
|
||||
|
|
@ -49,20 +75,20 @@ typedef struct EnNiw {
|
|||
/* 0x029E */ s16 unk_29E;
|
||||
/* 0x02A0 */ s16 unk_2A0;
|
||||
/* 0x02A2 */ s16 unk_2A2;
|
||||
/* 0x02A4 */ s16 unk_2A4;
|
||||
/* 0x02A4 */ s16 health;
|
||||
/* 0x02A6 */ s16 unk_2A6;
|
||||
/* 0x02A8 */ s16 unk_2A8;
|
||||
/* 0x02AA */ s16 unk_2AA;
|
||||
/* 0x02A8 */ s16 isAngry;
|
||||
/* 0x02AA */ s16 kakarikoIdx; // identifier for Kakariko cuccos
|
||||
/* 0x02AC */ Vec3f unk_2AC;
|
||||
/* 0x02B8 */ Vec3f unk_2B8;
|
||||
/* 0x02C4 */ f32 unk_2C4;
|
||||
/* 0x02C8 */ f32 unk_2C8;
|
||||
/* 0x02CC */ f32 unk_2CC;
|
||||
/* 0x02D0 */ f32 unk_2D0;
|
||||
/* 0x02D4 */ f32 unk_2D4;
|
||||
/* 0x02D8 */ f32 unk_2D8;
|
||||
/* 0x02DC */ f32 unk_2DC;
|
||||
/* 0x02E0 */ f32 unk_2E0;
|
||||
/* 0x02C4 */ f32 limb7RotZ;
|
||||
/* 0x02C8 */ f32 limb7RotY;
|
||||
/* 0x02CC */ f32 limb7RotX;
|
||||
/* 0x02D0 */ f32 limb11RotZ;
|
||||
/* 0x02D4 */ f32 limb11RotY;
|
||||
/* 0x02D8 */ f32 limb11RotX;
|
||||
/* 0x02DC */ f32 limb13RotY;
|
||||
/* 0x02E0 */ f32 limb15RotY;
|
||||
/* 0x02E4 */ s16 unk_2E4;
|
||||
/* 0x02E6 */ s16 unk_2E6;
|
||||
/* 0x02E8 */ s16 path;
|
||||
|
|
@ -73,7 +99,7 @@ typedef struct EnNiw {
|
|||
/* 0x02FC */ f32 unk_2FC;
|
||||
/* 0x0300 */ f32 unk_300;
|
||||
/* 0x0304 */ f32 unk_304;
|
||||
/* 0x0308 */ u8 unk_308;
|
||||
/* 0x0308 */ u8 isSuperCuccoThrown;
|
||||
/* 0x030C */ ColliderCylinder collider;
|
||||
/* 0x0358 */ EnNiwEffect effects[EN_NIW_EFFECT_COUNT];
|
||||
} EnNiw; // size = 0x07B8
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ static s16 sMissingCuccoTextIds[] = {
|
|||
0x5036, 0x5070, 0x5072, 0x5037, 0x5038, 0x5039, 0x503A, 0x503B, 0x503D, 0x503C,
|
||||
};
|
||||
|
||||
static s16 D_80ABB3B4[] = {
|
||||
static s16 sMissingCuccoFlags[] = {
|
||||
INFTABLE_MASK(INFTABLE_199), INFTABLE_MASK(INFTABLE_19A), INFTABLE_MASK(INFTABLE_19B), INFTABLE_MASK(INFTABLE_19C),
|
||||
INFTABLE_MASK(INFTABLE_19D), INFTABLE_MASK(INFTABLE_19E), INFTABLE_MASK(INFTABLE_19F),
|
||||
};
|
||||
|
|
@ -227,18 +227,18 @@ void func_80ABA244(EnNiwLady* this, PlayState* play) {
|
|||
if ((fabsf(currentCucco->actor.world.pos.x - 330.0f) < 90.0f) &&
|
||||
(fabsf(currentCucco->actor.world.pos.z - 1610.0f) < 190.0f)) {
|
||||
if (this->unk_26C == 0) {
|
||||
gSaveContext.save.info.infTable[INFTABLE_INDEX_199_19A_19B_19C_19D_19E_19F] |=
|
||||
D_80ABB3B4[currentCucco->unk_2AA];
|
||||
gSaveContext.save.info.infTable[INFTABLE_INDEX_KAKARIKO_CUCCO] |=
|
||||
sMissingCuccoFlags[currentCucco->kakarikoIdx];
|
||||
if (BREG(1) != 0) {
|
||||
PRINTF(VT_FGCOL(GREEN) T("☆ 鶏柵内GET!☆ %x\n", "☆ GET inside the chicken fence! ☆ %x\n")
|
||||
VT_RST,
|
||||
D_80ABB3B4[currentCucco->unk_2AA]);
|
||||
sMissingCuccoFlags[currentCucco->kakarikoIdx]);
|
||||
}
|
||||
}
|
||||
this->cuccosInPen++;
|
||||
} else if (this->unk_26C == 0) {
|
||||
gSaveContext.save.info.infTable[INFTABLE_INDEX_199_19A_19B_19C_19D_19E_19F] &=
|
||||
~D_80ABB3B4[currentCucco->unk_2AA];
|
||||
gSaveContext.save.info.infTable[INFTABLE_INDEX_KAKARIKO_CUCCO] &=
|
||||
~sMissingCuccoFlags[currentCucco->kakarikoIdx];
|
||||
}
|
||||
}
|
||||
currentCucco = (EnNiw*)currentCucco->actor.next;
|
||||
|
|
@ -304,14 +304,14 @@ void func_80ABA244(EnNiwLady* this, PlayState* play) {
|
|||
this->unk_26A = this->cuccosInPen;
|
||||
PRINTF(VT_FGCOL(CYAN) T("☆☆☆☆☆ 柵内BIT変更前 ☆☆ %x\n", "☆☆☆☆☆ Before changing the fence BIT ☆☆ %x\n")
|
||||
VT_RST,
|
||||
gSaveContext.save.info.infTable[INFTABLE_INDEX_199_19A_19B_19C_19D_19E_19F]);
|
||||
gSaveContext.save.info.infTable[INFTABLE_INDEX_199_19A_19B_19C_19D_19E_19F] &=
|
||||
gSaveContext.save.info.infTable[INFTABLE_INDEX_KAKARIKO_CUCCO]);
|
||||
gSaveContext.save.info.infTable[INFTABLE_INDEX_KAKARIKO_CUCCO] &=
|
||||
(u16) ~(INFTABLE_MASK(INFTABLE_199) | INFTABLE_MASK(INFTABLE_19A) | INFTABLE_MASK(INFTABLE_19B) |
|
||||
INFTABLE_MASK(INFTABLE_19C) | INFTABLE_MASK(INFTABLE_19D) | INFTABLE_MASK(INFTABLE_19E) |
|
||||
INFTABLE_MASK(INFTABLE_19F));
|
||||
PRINTF(VT_FGCOL(CYAN) T("☆☆☆☆☆ 柵内BIT変更後 ☆☆ %x\n",
|
||||
"☆☆☆☆☆ After changing the BIT inside the fence ☆☆ %x\n") VT_RST,
|
||||
gSaveContext.save.info.infTable[INFTABLE_INDEX_199_19A_19B_19C_19D_19E_19F]);
|
||||
gSaveContext.save.info.infTable[INFTABLE_INDEX_KAKARIKO_CUCCO]);
|
||||
PRINTF("\n\n");
|
||||
this->actionFunc = func_80ABA654;
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -241,15 +241,18 @@ void EnTa_Init(Actor* thisx, PlayState* play2) {
|
|||
if (IS_DAY) {
|
||||
this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
|
||||
this->superCuccoTimers[0] = this->superCuccoTimers[1] = this->superCuccoTimers[2] = 7;
|
||||
this->superCuccos[0] = (EnNiw*)Actor_Spawn(
|
||||
&play->actorCtx, play, ACTOR_EN_NIW, this->actor.world.pos.x + 5.0f,
|
||||
this->actor.world.pos.y + 3.0f, this->actor.world.pos.z + 26.0f, 0, 0, 0, 0xD);
|
||||
this->superCuccos[1] = (EnNiw*)Actor_Spawn(
|
||||
&play->actorCtx, play, ACTOR_EN_NIW, this->actor.world.pos.x - 20.0f,
|
||||
this->actor.world.pos.y + 40.0f, this->actor.world.pos.z - 30.0f, 0, 0, 0, 0xD);
|
||||
this->superCuccos[2] = (EnNiw*)Actor_Spawn(
|
||||
&play->actorCtx, play, ACTOR_EN_NIW, this->actor.world.pos.x + 20.0f,
|
||||
this->actor.world.pos.y + 40.0f, this->actor.world.pos.z - 30.0f, 0, 0, 0, 0xD);
|
||||
this->superCuccos[0] =
|
||||
(EnNiw*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_NIW, this->actor.world.pos.x + 5.0f,
|
||||
this->actor.world.pos.y + 3.0f, this->actor.world.pos.z + 26.0f, 0, 0,
|
||||
0, EN_NIW_TYPE_SUPER_CUCCO);
|
||||
this->superCuccos[1] =
|
||||
(EnNiw*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_NIW, this->actor.world.pos.x - 20.0f,
|
||||
this->actor.world.pos.y + 40.0f, this->actor.world.pos.z - 30.0f, 0, 0,
|
||||
0, EN_NIW_TYPE_SUPER_CUCCO);
|
||||
this->superCuccos[2] =
|
||||
(EnNiw*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_NIW, this->actor.world.pos.x + 20.0f,
|
||||
this->actor.world.pos.y + 40.0f, this->actor.world.pos.z - 30.0f, 0, 0,
|
||||
0, EN_NIW_TYPE_SUPER_CUCCO);
|
||||
EnTa_SetTextForTalkInLonLonHouse(this, play);
|
||||
|
||||
if (GET_EVENTINF(EVENTINF_CUCCO_GAME_FINISHED)) {
|
||||
|
|
@ -862,7 +865,7 @@ void EnTa_ThrowSuperCuccos(EnTa* this, PlayState* play) {
|
|||
|
||||
// Mark the cucco as a super cucco, this will cause the cucco
|
||||
// to set random xz and y velocities
|
||||
niw->unk_308 = 1;
|
||||
niw->isSuperCuccoThrown = true;
|
||||
niw->actor.gravity = 0.0f;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue