329 lines
11 KiB
C
329 lines
11 KiB
C
#include <ultra64.h>
|
|
#include "functions.h"
|
|
#include "variables.h"
|
|
#include "core2/particle.h"
|
|
|
|
Actor *func_8035ECA0(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx);
|
|
void func_8035F138(Actor *this);
|
|
BKModelBin *func_803257B4(ActorMarker *marker);
|
|
extern void actor_postdrawMethod(ActorMarker *);
|
|
extern f32 func_80257204(f32, f32, f32, f32);
|
|
|
|
typedef struct {
|
|
s32 unk0;
|
|
}ActorLocal_core2_D7D10;
|
|
|
|
/* .data */
|
|
ActorAnimationInfo D_80372F80[] = {
|
|
{0, 0.0f},
|
|
{ASSET_9A_ANIM_GRAVESTONE_IDLE, 8000000.0f},
|
|
{ASSET_9A_ANIM_GRAVESTONE_IDLE, 1.3f},
|
|
{ASSET_9B_ANIM_GRAVESTONE_WALK, 0.6f},
|
|
{ASSET_9B_ANIM_GRAVESTONE_WALK, 0.75f},
|
|
{ASSET_9A_ANIM_GRAVESTONE_IDLE, 1.5f},
|
|
{ASSET_1ED_ANIM_GRAVESTONE_OW, 1.0f},
|
|
{ASSET_1EE_ANIM_GRAVESTONE_DIE, 2.4f}
|
|
};
|
|
|
|
ActorInfo D_80372FC0 = {
|
|
MARKER_96_GRAVESTONE, ACTOR_C7_GRAVESTONE, ASSET_3C9_MODEL_GRAVESTONE,
|
|
0x1, D_80372F80,
|
|
func_8035F138, func_80326224, func_8035ECA0,
|
|
3500, 0, 1.2f, 0
|
|
};
|
|
|
|
ActorInfo D_80372FE4 = {
|
|
MARKER_297_GIANT_GRAVESTONE, ACTOR_3C2_GIANT_GRAVESTONE, ASSET_3C9_MODEL_GRAVESTONE,
|
|
0x1, D_80372F80,
|
|
func_8035F138, func_80326224, func_8035ECA0,
|
|
14000, 0, 3.2f, 0
|
|
};
|
|
|
|
/* .code */
|
|
Actor *func_8035ECA0(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx) {
|
|
static f32 D_80373008[3] = {0.0f, 0.0f, 0.0f};
|
|
f32 rotation[3];
|
|
Actor *this;
|
|
ActorLocal_core2_D7D10 *local;
|
|
|
|
this = marker_getActorAndRotation(marker, rotation);
|
|
local = (ActorLocal_core2_D7D10 *)&this->local;
|
|
func_8033A45C(3, (s32) this->velocity[1]);
|
|
func_8033A45C(4, local->unk0);
|
|
modelRender_preDraw( (GenFunction_1)actor_predrawMethod, (s32)this);
|
|
modelRender_postDraw((GenFunction_1)actor_postdrawMethod, (s32)marker);
|
|
modelRender_draw(gfx, mtx, this->position, rotation, this->scale, D_80373008, func_803257B4(marker));
|
|
return this;
|
|
}
|
|
|
|
bool func_8035ED60(Actor *this) {
|
|
f32 temp_f0;
|
|
f32 temp_f2;
|
|
|
|
temp_f0 = this->position[0] - this->unk1C[0];
|
|
temp_f2 = this->position[2] - this->unk1C[2];
|
|
if (((temp_f0 * temp_f0) + (temp_f2 * temp_f2)) < 110.0f) {
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
void func_8035EDB0(f32 position[3], s32 count, enum asset_e sprite) {
|
|
static s32 D_80373014[3] = {0xAA, 0xAA, 0xAA};
|
|
static struct31s D_80373020 = {{0.4f, 0.8f}, {1.4f, 2.0f}, {0.0f, 0.01f}, {1.2f, 1.8f}, 0.0f, 0.01};
|
|
static struct43s D_80373048 = {
|
|
{{-200.0f, -200.0f, -200.0f}, { 200.0f, 200.0f, 200.0f}},
|
|
{{ 0.0f, -10.0f, 0.0f}, { 0.0f, -10.0f, 0.0f}},
|
|
{{ -50.0f, 0.0f, -50.0f}, { 50.0f, 200.0f, 50.0f}}
|
|
};
|
|
ParticleEmitter *p_ctrl;
|
|
|
|
p_ctrl = partEmitMgr_newEmitter(count);
|
|
particleEmitter_setRGB(p_ctrl, D_80373014);
|
|
particleEmitter_setSprite(p_ctrl, sprite);
|
|
particleEmitter_setPosition(p_ctrl, position);
|
|
particleEmitter_setPositionVelocityAndAccelerationRanges(p_ctrl, &D_80373048);
|
|
func_802EFB98(p_ctrl, &D_80373020);
|
|
particleEmitter_setDrawMode(p_ctrl, PART_EMIT_NO_DEPTH);
|
|
particleEmitter_emitN(p_ctrl, count);
|
|
}
|
|
|
|
void func_8035EE48(Actor *this){
|
|
u8 val = this->unk44_31;
|
|
if(val != 0){
|
|
func_8030DA44(val);
|
|
this->unk44_31 = 0;
|
|
}
|
|
}
|
|
|
|
void func_8035EE80(Actor *this){
|
|
subaddie_set_state(this, 3);
|
|
actor_loopAnimation(this);
|
|
this->unk28 = 10.5f;
|
|
func_8035EE48(this);
|
|
}
|
|
|
|
void func_8035EEC0(Actor *this){
|
|
subaddie_set_state(this, 4);
|
|
actor_loopAnimation(this);
|
|
this->unk28 = 9.0f;
|
|
func_8035EE48(this);
|
|
}
|
|
|
|
void func_8035EF00(Actor *this, f32 arg1){
|
|
this->yaw_ideal = (f32)func_80329784(this);
|
|
func_80328FB0(this, arg1);
|
|
}
|
|
|
|
void func_8035EF3C(Actor *this) {
|
|
if( actor_animationIsAt(this, 0.2f)
|
|
|| actor_animationIsAt(this, 0.7f)
|
|
) {
|
|
FUNC_8030E8B4(SFX_123_BANJO_LANDING_10, 0.5f, 24000, this->position, 1750, 3500);
|
|
}
|
|
}
|
|
|
|
void func_8035EF9C(ActorMarker *marker, ActorMarker *other_marker) {
|
|
Actor *this;
|
|
ActorLocal_core2_D7D10 *local;
|
|
|
|
this = marker_getActor(marker);
|
|
local = (ActorLocal_core2_D7D10 *)&this->local;
|
|
this->velocity[2] = 0.0f;
|
|
subaddie_set_state_with_direction(this, 7, 0.02f, 1);
|
|
actor_playAnimationOnce(this);
|
|
local->unk0 = 2;
|
|
actor_collisionOff(this);
|
|
FUNC_8030E8B4(SFX_115_BUZZBOMB_DEATH, 0.6f, 32000, this->position, 1750, 3500);
|
|
FUNC_8030E8B4(SFX_1D_HITTING_AN_ENEMY_1, 0.9f, 22000, this->position, 1750, 3500);
|
|
func_8035EE48(this);
|
|
}
|
|
|
|
void func_8035F048(ActorMarker *marker, ActorMarker *other_marker) {
|
|
Actor *this;
|
|
ActorLocal_core2_D7D10 *local;
|
|
|
|
this = marker_getActor(marker);
|
|
local = (ActorLocal_core2_D7D10 *)&this->local;
|
|
|
|
FUNC_8030E8B4(SFX_F9_GRUNTLING_NOISE_1, 1.2f, 22000, this->position, 1750, 3500);
|
|
FUNC_8030E8B4(SFX_1D_HITTING_AN_ENEMY_1, 0.9f, 22000, this->position, 1750, 3500);
|
|
this->velocity[2] = 0.0f;
|
|
subaddie_set_state_with_direction(this, 6, 0.02f, 1);
|
|
actor_playAnimationOnce(this);
|
|
local->unk0 = 2;
|
|
func_8035EE48(this);
|
|
}
|
|
|
|
void func_8035F0E8(ActorMarker *marker, ActorMarker *other_marker) {
|
|
Actor *this;
|
|
ActorLocal_core2_D7D10 *local;
|
|
|
|
this = marker_getActor(marker);
|
|
local = (ActorLocal_core2_D7D10 *)&this->local;
|
|
FUNC_8030E8B4(SFX_1D_HITTING_AN_ENEMY_1, 0.9f, 22000, this->position, 1750, 3500);
|
|
this->velocity[2] = 0.8f;
|
|
func_8035EE80(this);
|
|
}
|
|
|
|
void func_8035F138(Actor *this) {
|
|
f32 sp2C;
|
|
ActorLocal_core2_D7D10 *local;
|
|
|
|
|
|
local = (ActorLocal_core2_D7D10 *)&this->local;
|
|
sp2C = time_getDelta();
|
|
if ((this->state == 1) && (animctrl_getAnimTimer(this->animctrl) < 0.04)) {
|
|
this->velocity[1] = 2.0f;
|
|
} else {
|
|
this->velocity[1] = 1.0f;
|
|
}
|
|
if (this->velocity[2] <= 0.0) {
|
|
this->velocity[2] = 0.0f;
|
|
}
|
|
else{
|
|
this->velocity[2] -= sp2C;
|
|
return;
|
|
}
|
|
switch(this->state){
|
|
case 1: //L8035F20C
|
|
if (!this->unk16C_4) {
|
|
this->unk16C_4 = TRUE;
|
|
marker_setCollisionScripts(this->marker, func_8035F0E8, func_8035F048, func_8035EF9C);
|
|
local->unk0 = 1;
|
|
this->unk1C[0] = this->position[0];
|
|
this->unk28 = 0.0f;
|
|
this->velocity[1] = 0.0f;
|
|
this->unk1C[2] = this->position[2];
|
|
this->velocity[0] = this->yaw;
|
|
}
|
|
animctrl_setAnimTimer(this->animctrl, 0.0f);
|
|
if (func_80329530(this, (s32) (this->scale * 650.0f)) && func_803292E0(this)) {
|
|
subaddie_set_state(this, 2U);
|
|
actor_playAnimationOnce(this);
|
|
this->unk1C[1] = 1.0f;
|
|
this->unk44_31 = func_8030ED2C(SFX_2C_PULLING_NOISE, 3);
|
|
func_8030E2C4(this->unk44_31);
|
|
}
|
|
break;
|
|
|
|
case 2: //L8035F2F4
|
|
if (this->unk1C[1] < 1.9) {
|
|
this->unk1C[1] += 0.1;
|
|
}
|
|
func_8030DBB4(this->unk44_31, this->unk1C[1]);
|
|
if (actor_animationIsAt(this, 0.66f)) {
|
|
FUNC_8030E8B4(SFX_F9_GRUNTLING_NOISE_1, 0.8f, 32000, this->position, 1750, 3500);
|
|
|
|
}
|
|
if (0.99 <= animctrl_getAnimTimer(this->animctrl)) {
|
|
func_8035EE80(this);
|
|
break;
|
|
}
|
|
func_8035EF00(this, 7.0f);
|
|
break;
|
|
|
|
case 3: //L8035F3AC
|
|
func_8035EF3C(this);
|
|
if (!func_80329530(this, (s32) (this->scale * 1050.0f)) || !func_803292E0(this)) {
|
|
func_8035EEC0(this);
|
|
break;
|
|
}
|
|
|
|
func_8035EF00(this, 6.0f);
|
|
if ((func_80329030(this, 2) == 0) && (func_80329480(this) != 0)) {
|
|
func_8035EEC0(this);
|
|
this->unk38_31 = 3;
|
|
break;
|
|
}
|
|
|
|
if (((this->unk28 + 0.28) <= 18.0) && ( 0.36 <= animctrl_getDuration(this->animctrl) - 0.0056000000000000008)) {
|
|
this->unk28 += 0.28;
|
|
animctrl_setDuration(this->animctrl, animctrl_getDuration(this->animctrl) - 0.0056000000000000008);
|
|
}
|
|
break;
|
|
|
|
case 4: //L8035F4FC
|
|
func_8035EF3C(this);
|
|
if (((f64)this->unk38_31 <= 0.0) && func_80329530(this, (s32) (this->scale * 1050.0f)) && func_803292E0(this)) {
|
|
func_8035EE80(this);
|
|
break;
|
|
}
|
|
this->unk38_31 -= sp2C;
|
|
if (func_8035ED60(this)) {
|
|
subaddie_set_state_with_direction(this, 5, 0.99f, 0);
|
|
actor_playAnimationOnce(this);
|
|
this->unk28 = 0.0f;
|
|
this->unk1C[1] = 1.9f;
|
|
this->unk44_31 = func_8030ED2C(SFX_2C_PULLING_NOISE, 3);
|
|
break;
|
|
}
|
|
|
|
this->yaw_ideal = (f32)(s32)func_80257204(this->position[0], this->position[2], this->unk1C[0], this->unk1C[2]);
|
|
func_80328FB0(this, 7.0f);
|
|
func_80329030(this, 2);
|
|
break;
|
|
|
|
case 5: //L8035F6F4
|
|
if (actor_animationIsAt(this, 0.36f) != 0) {
|
|
func_8030E2C4(this->unk44_31);
|
|
}
|
|
if ((this->unk44_31 != 0) && func_8030E3FC(this->unk44_31)) {
|
|
if (this->unk1C[1] > 1.0) {
|
|
this->unk1C[1] -= 0.1;
|
|
}
|
|
func_8030DBB4(this->unk44_31, this->unk1C[1]);
|
|
}
|
|
if (animctrl_getAnimTimer(this->animctrl) <= 0.02) {
|
|
subaddie_set_state_with_direction(this, 1, 0.02f, 1);
|
|
actor_playAnimationOnce(this);
|
|
this->unk28 = 0.0f;
|
|
func_8035EE48(this);
|
|
break;
|
|
}
|
|
this->yaw_ideal = this->velocity[0];
|
|
func_80328FB0(this, 7.5f);
|
|
func_80329030(this, 2);
|
|
break;
|
|
|
|
case 6: //L8035F7F0
|
|
if (actor_animationIsAt(this, 0.64f)) {
|
|
local->unk0 = 1;
|
|
}
|
|
if (0.99 <= animctrl_getAnimTimer(this->animctrl)) {
|
|
func_8035EEC0(this);
|
|
}
|
|
break;
|
|
|
|
case 7: //L8035F840
|
|
if (actor_animationIsAt(this, 0.3f)) {
|
|
FUNC_8030E8B4(SFX_1E_HITTING_AN_ENEMY_2, 0.6f, 32000, this->position, 1750, 3500);
|
|
FUNC_8030E8B4(SFX_1D_HITTING_AN_ENEMY_1, 0.9f, 26000, this->position, 1750, 3500);
|
|
}
|
|
|
|
if( actor_animationIsAt(this, 0.5f)
|
|
|| actor_animationIsAt(this, 0.7f)
|
|
) {
|
|
FUNC_8030E8B4(SFX_1F_HITTING_AN_ENEMY_3, 0.8f, 16000, this->position, 1750, 3500);
|
|
}
|
|
|
|
if (actor_animationIsAt(this, 0.8f)) {
|
|
FUNC_8030E8B4(SFX_1F_HITTING_AN_ENEMY_3, 0.8f, 14000, this->position, 1750, 3500);
|
|
}
|
|
|
|
if (actor_animationIsAt(this, 0.9f)) {
|
|
FUNC_8030E8B4(SFX_1F_HITTING_AN_ENEMY_3, 0.8f, 12000, this->position, 1750, 3500);
|
|
}
|
|
|
|
if (actor_animationIsAt(this, 0.25f)) {
|
|
func_8035EDB0(this->position, 12, ASSET_700_SPRITE_DUST);
|
|
}
|
|
|
|
if (actor_animationIsAt(this, 0.5f) != 0) {
|
|
func_80326310(this);
|
|
}
|
|
break;
|
|
}
|
|
|
|
}
|