120 lines
3.4 KiB
C
120 lines
3.4 KiB
C
#include <ultra64.h>
|
|
#include "functions.h"
|
|
#include "variables.h"
|
|
|
|
typedef struct {
|
|
f32 unk0;
|
|
f32 unk4;
|
|
s16 unk8;
|
|
s16 unkA;
|
|
}Struct_CCW_4530_0;
|
|
|
|
void func_8038A950(Actor *this, s32 next_state);
|
|
Actor *func_8038AA38(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx);
|
|
void func_8038AA8C(Actor *this);
|
|
|
|
/* .data */
|
|
ActorInfo D_8038F190 = {
|
|
0x1B6, 0x2A3, 0x487,
|
|
0x0, NULL,
|
|
func_8038AA8C, NULL, func_8038AA38,
|
|
0, 0, 0.0f, 0
|
|
};
|
|
|
|
Struct_CCW_4530_0 D_8038F1B4[] = {
|
|
{0.15f, 0.9f, SFX_A5_EYRIE_CRY, 25000},
|
|
{0.3f, 1.0f, SFX_A5_EYRIE_CRY, 32000},
|
|
{0.6f, 0.8f, SFX_2_CLAW_SWIPE, 20000},
|
|
{0.68f, 0.85f, SFX_2_CLAW_SWIPE, 23000},
|
|
{0.75f, 0.9f, SFX_2_CLAW_SWIPE, 28000},
|
|
{0.8f, 0.95f, SFX_2_CLAW_SWIPE, 30000},
|
|
{0.81f, 1.0f, SFX_A5_EYRIE_CRY, 32000},
|
|
{0.86f, 1.0f, SFX_2_CLAW_SWIPE, 31000},
|
|
{0.93f, 1.0f, SFX_2_CLAW_SWIPE, 32000},
|
|
0
|
|
};
|
|
|
|
/* .code */
|
|
void func_8038A920(ActorMarker* marker, enum asset_e text_id, s32 arg2) {
|
|
func_8038A950(marker_getActor(marker), 3);
|
|
}
|
|
|
|
void func_8038A950(Actor *this, s32 next_state) {
|
|
if (next_state == 1) {
|
|
skeletalAnim_set(this->unk148, 0x199, 0.0f, 6.5f);
|
|
}
|
|
if (next_state == 2) {
|
|
func_80311480(0xCDC, 0xA, this->position, this->marker, func_8038A920, NULL);
|
|
}
|
|
if (next_state == 3) {
|
|
skeletalAnim_set(this->unk148, 0x19A, 0.0f, 7.0f);
|
|
skeletalAnim_setBehavior(this->unk148, SKELETAL_ANIM_2_ONCE);
|
|
func_80324E38(0.0f, 3);
|
|
timed_setStaticCameraToNode(0.0f, 0);
|
|
}
|
|
if (next_state == 4) {
|
|
mapSpecificFlags_set(5, 1);
|
|
marker_despawn(this->marker);
|
|
}
|
|
this->state = next_state;
|
|
}
|
|
|
|
Actor *func_8038AA38(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx){
|
|
Actor *this;
|
|
|
|
this = marker_getActor(marker);
|
|
if(this->state == 0)
|
|
return this;
|
|
return actor_draw(marker, gfx, mtx, vtx);
|
|
}
|
|
|
|
void func_8038AA8C(Actor *this) {
|
|
f32 sp54[3];
|
|
f32 sp50;
|
|
f32 sp4C;
|
|
Struct_CCW_4530_0 *iPtr;
|
|
f32 sp44;
|
|
f32 sp40;
|
|
|
|
if (!this->unk16C_4) {
|
|
this->unk16C_4 = TRUE;
|
|
mapSpecificFlags_set(5, FALSE);
|
|
if( (!fileProgressFlag_get(FILEPROG_E8_AUTMN_EYRIE_FED) || jiggyscore_isSpawned(JIGGY_49_CCW_EYRIE))
|
|
&& !volatileFlag_get(VOLATILE_FLAG_1F_IN_CHARACTER_PARADE)
|
|
) {
|
|
marker_despawn(this->marker);
|
|
}
|
|
else{
|
|
func_8038A950(this, 1);
|
|
}
|
|
return;
|
|
}
|
|
|
|
if (this->state == 1) {
|
|
skeletalAnim_getProgressRange(this->unk148, &sp50, &sp4C);
|
|
if ((sp50 < 0.21) && (0.21 <= sp4C)) {
|
|
func_8030E878(0xA5, randf2(0.9f, 1.1f), 32000, this->position, 500.0f, 2500.0f);
|
|
}
|
|
|
|
if ((sp50 < 0.56) && (0.56 <= sp4C)) {
|
|
func_8030E878(0xA5, randf2(0.9f, 1.1f), 32000, this->position, 500.0f, 2500.0f);
|
|
}
|
|
|
|
player_getPosition(sp54);
|
|
if (ml_distance_vec3f(this->position, sp54) < 850.0f) {
|
|
func_8038A950(this, 2);
|
|
}
|
|
}
|
|
if (this->state == 3) {
|
|
skeletalAnim_getProgressRange(this->unk148, &sp44, &sp40);
|
|
for(iPtr = &D_8038F1B4[0]; iPtr->unk0 > 0.0f; iPtr++){
|
|
if ((sp44 < iPtr->unk0) && (iPtr->unk0 <= sp40)) {
|
|
func_8030E878(iPtr->unk8, iPtr->unk4, iPtr->unkA, this->position, 500.0f, 2500.0f);
|
|
}
|
|
}
|
|
if (skeletalAnim_getLoopCount(this->unk148) > 0) {
|
|
func_8038A950(this, 4);
|
|
}
|
|
}
|
|
}
|