banjo-kazooie/src/FP/ch/boggy1.c

203 lines
6.5 KiB
C

#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern void func_80324CD8(f32);
Actor *func_803875E0(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx);
void func_8038774C(Actor *this);
void func_8038794C(Actor *this);
Actor *func_80328230(enum actor_e id, f32 pos[3], f32 rot[3]);
/* .data */
ActorAnimationInfo D_80391B80[] = {
{0x000, 0.0f},
{0x14E, 2.0f},
{0x14D, 7.0f},
{0x14C, 2.0f},
{0x14F, 0.5f},
{0x14F, 1.0f}
};
ActorInfo D_80391BB0 = {
MARKER_124_BOGGY_1, ACTOR_160_BOGGY_1, ASSET_38A_MODEL_BOGGY_1,
0x1, D_80391B80,
func_8038774C, func_8038794C, func_803875E0,
2500, 0, 1.4f, 0
};
f32 D_80391BD4[3] = {1592.0f, 673.0f, 5895.0f};
f32 D_80391BE0[3] = { 0.0f, 0.0f, 0.0f};
f32 D_80391BEC[5] = {2.0f, 2.8f, 4.3f, 5.1f, 5.7f};
/* .code */
Actor *func_803875E0(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx){
Actor *this = marker_getActor(marker);
if(!this->unk38_31 || this->state == 5)
return this;
func_8033A45C(1, 0);
func_8033A45C(3, 1);
this = actor_draw(marker, gfx, mtx, vtx);
if(marker->unk14_21){
func_8034A174(func_80329934(), 5, this->velocity);
}
return this;
}
void func_803876A4(Actor *this){
subaddie_set_state_with_direction(this, 2, 0.0001f, 1);
actor_playAnimationOnce(this);
FUNC_8030E8B4(SFX_8E_GRUNTLING_DAMAGE, 1.0f, 32000, this->position, 1250, 2500);
}
void func_803876F8(Actor *this){
this->marker->propPtr->unk8_3 = FALSE;
subaddie_set_state_with_direction(this, 5, 0.0001f, 1);
this->unk48 = 0.0f;
func_80343DEC(this);
}
void func_8038774C(Actor *this){}
void func_80387754(ActorMarker *this_marker, ActorMarker *other_marker){}
void func_80387760(ActorMarker *marker){
Actor *other = func_80328230(ACTOR_C8_BOGGY_2, D_80391BD4, D_80391BE0);
other->unk4C = 1.0f;
func_80343DEC(other);
}
void func_803877A8(ActorMarker *caller, enum asset_e text_id, s32 arg2){
Actor *this = marker_getActor(caller);
if(arg2 == 1){
jiggy_spawn(JIGGY_2A_FP_BOGGY_1, this->velocity);
}
else if(arg2 == 2){
subaddie_set_state_with_direction(this, 4, 0.0001f, 1);
actor_loopAnimation(this);
actor_collisionOff(this);
}
}
void func_80387828(ActorMarker *caller, enum asset_e text_id, s32 arg2){
Actor *this = marker_getActor(caller);
if(text_id == 0xc00){
func_80311480(0xc2b, 0xf, NULL, this->marker, NULL, func_803877A8);
}
}
void func_8038787C(ActorMarker *marker){
Actor *this = marker_getActor(marker);
s32 s0;
f32 sp24;
s32 sp20;
s0 = func_802F9AA8(SFX_12B_BOILING_AND_BUBBLING);
sp24 = randf2(0.9f, 1.1f);
sp20 = (s32)randf2(16000.0f, 23000.0f);
func_802F9DB8(s0, sp24, sp24, 0.0f);
func_802F9EC4(s0, this->position, 500, 1200);
func_802F9F80(s0, 0.05f, 0.2f, 0.3f);
func_802FA060(s0, sp20, sp20, 0.0f);
}
void func_8038794C(Actor *this){
int i;
if(!this->unk16C_4){
this->unk16C_4 = TRUE;
this->marker->propPtr->unk8_3 = TRUE;
marker_setCollisionScripts(this->marker, NULL, func_80387754, NULL);
this->unk38_31 = 1;
ml_vec3f_copy(this->velocity, this->position);
if(func_803203FC(1))
return;
if(!jiggyscore_isCollected(JIGGY_2A_FP_BOGGY_1) && jiggyscore_isSpawned(JIGGY_2A_FP_BOGGY_1)){
func_803876F8(this);
actor_collisionOff(this);
}
if(jiggyscore_isCollected(JIGGY_2A_FP_BOGGY_1)){
if(!jiggyscore_isCollected(JIGGY_2C_FP_BOGGY_3) && !jiggyscore_isSpawned(JIGGY_2C_FP_BOGGY_3)){
__spawnQueue_add_1((GenFunction_1)func_80387760, reinterpret_cast(s32, this->marker));
}
this->unk38_31 = 0;
actor_collisionOff(this);
this->marker->propPtr->unk8_3 = FALSE;
}
}//L80387A68
if( !this->unk38_31 ) return;
switch(this->state){
case 1://L80387AB0
if(mapSpecificFlags_get(0xb))
this->unk138_24 = TRUE;
if(mapSpecificFlags_get(0x1)){
func_8028F94C(1, this->position);
timed_setStaticCameraToNode(0.0f, 0x12);
func_80324DBC(1.0f, 0xc00, 0xe, NULL, this->marker, func_80387828, func_803877A8);
func_803876A4(this);
break;
}//L80387B38
if(!this->unk138_24 && func_80329530(this, 0x1f4)){
if(!func_8028ECAC() || func_8028ECAC() == BSGROUP_8_TROT){
if(func_80311480(0xbff, 0x2a, this->position, NULL, NULL, NULL)){
for(i = 0; i <5; i++ ){
timedFunc_set_1(D_80391BEC[i], (GenFunction_1)func_8038787C, (s32)this->marker);
}
this->unk138_24 = TRUE;
}
}
}
break;
case 2://L80387BEC
func_8028FC8C(this->position);
if(actor_animationIsAt(this, 0.1f)){
FUNC_8030E8B4(SFX_F6_BLUBBER_TALKING_2, 1.0f, 32000, this->position, 1250, 2500);
}
else if(actor_animationIsAt(this, 0.24f)){//L80387C2C
FUNC_8030E8B4(SFX_A0_COUGHING, 0.7f, 32000, this->position, 1250, 2500);
}
else if(actor_animationIsAt(this, 0.52f)){//L80387C60
FUNC_8030E8B4(SFX_A0_COUGHING, 0.67f, 32000, this->position, 1250, 2500);
}
else if(actor_animationIsAt(this, 0.61f)){//L80387C94
FUNC_8030E8B4(SFX_A0_COUGHING, 0.64f, 32000, this->position, 1250, 2500);
}
else if(actor_animationIsAt(this, 0.69f)){//L80387CC8
FUNC_8030E8B4(SFX_A0_COUGHING, 0.61f, 32000, this->position, 1250, 2500);
}//L80387CF4
if(actor_animationIsAt(this, 0.9999f)){
subaddie_set_state_with_direction(this, 3, 0.0001f, 1);
actor_loopAnimation(this);
}
break;
case 4://L80387D2C
func_80343DEC(this);
func_8028FC8C(this->position);
if(0.99 <= this->unk48){
func_8028F918(0);
func_80324CD8(0.0f);
timed_exitStaticCamera(0.0f);
func_803876F8(this);
}
break;
case 5://L80387D90
if(jiggyscore_isCollected(JIGGY_2A_FP_BOGGY_1)){
this->unk38_31 = 0;
__spawnQueue_add_1((GenFunction_1)func_80387760, reinterpret_cast(s32, this->marker));
}
break;
}
}