490 lines
12 KiB
C
490 lines
12 KiB
C
#include <ultra64.h>
|
|
#include "functions.h"
|
|
#include "variables.h"
|
|
#include "core2/yaw.h"
|
|
#include "core2/ba/anim.h"
|
|
#include "core2/ba/physics.h"
|
|
#include "core2/ba/timer.h"
|
|
|
|
void func_80293D48(f32,f32);
|
|
|
|
/* .data */
|
|
const f32 D_80364960 = 30.0f;
|
|
const f32 D_80364964 = 500.0f;
|
|
const f32 D_80364968 = 0.44f;
|
|
const f32 D_8036496C = 0.2f;
|
|
const f32 D_80364970 = 693.5f; //ant initial jump y velocity
|
|
const f32 D_80364974 = -1200.0f; //ant jump gravity
|
|
u8 D_80364978 = 0;
|
|
s16 D_8036497C[3] = {
|
|
SFX_54_BANJO_HOO_1,
|
|
SFX_55_BANJO_HOO_2,
|
|
SFX_56_BANJO_HUI
|
|
};
|
|
|
|
/* .bss */
|
|
f32 D_8037D290;
|
|
u8 bsant_substate;
|
|
s32 D_8037D298;
|
|
|
|
/* .code */
|
|
void func_8029E3E0(void){
|
|
func_8030EB88(D_8036497C[D_80364978], 1.75f, 1.85f);
|
|
if(++D_80364978 > 2)
|
|
D_80364978 = 0;
|
|
}
|
|
|
|
void func_8029E448(int arg0){
|
|
func_8030EAAC(SFX_3D_TICKER_WALKING, arg0 ? 0.96f : 1.04f, 14000, 8);
|
|
|
|
}
|
|
|
|
void func_8029E48C(void){
|
|
f32 sp1C = bastick_getZonePosition();
|
|
|
|
if(bastick_getZone() == 0){
|
|
baphysics_set_target_horizontal_velocity(0.0f);
|
|
}
|
|
else{
|
|
baphysics_set_target_horizontal_velocity(ml_interpolate_f(sp1C, D_80364960, D_80364964));
|
|
}
|
|
}
|
|
|
|
void func_8029E4EC(void){
|
|
if(!bsant_inSet(bs_getNextState())){
|
|
bastick_resetZones();
|
|
func_8029E070(0);
|
|
func_8029E064(0);
|
|
miscFlag_clear(MISC_FLAG_3);
|
|
miscFlag_clear(MISC_FLAG_4);
|
|
func_80293D74();
|
|
}
|
|
baanim_setUpdateType(BAANIM_UPDATE_1_NORMAL);
|
|
}
|
|
|
|
void func_8029E554(void){
|
|
if(!bsant_inSet(bs_getPrevState()))
|
|
func_80293D48(50.0f, 25.0f);
|
|
}
|
|
|
|
int bsant_inSet(s32 move_indx){
|
|
return (move_indx == BS_35_ANT_IDLE)
|
|
|| (move_indx == BS_ANT_WALK)
|
|
|| (move_indx == BS_ANT_JUMP)
|
|
|| (move_indx == BS_38_ANT_FALL)
|
|
|| (move_indx == BS_3E_ANT_OW)
|
|
|| (move_indx == BS_43_ANT_DIE)
|
|
|| (move_indx == 0x8e)
|
|
|| (move_indx == BS_92_ANT_DRONE);
|
|
}
|
|
|
|
void bsant_idle_init(void){
|
|
func_8029E554();
|
|
baanim_playForDuration_loopSmooth(ASSET_5E_ANIM_BSANT_IDLE, 1.2f);
|
|
func_8029C7F4(1,YAW_STATE_1_DEFAULT,1,BA_PHYSICS_NORMAL);
|
|
baphysics_set_target_horizontal_velocity(0.0f);
|
|
pitch_setAngVel(1000.0f, 12.0f);
|
|
roll_setAngularVelocity(1000.0f, 12.0f);
|
|
miscFlag_set(MISC_FLAG_3);
|
|
miscFlag_set(MISC_FLAG_4);
|
|
func_802900B4();
|
|
}
|
|
|
|
void bsant_idle_update(void){
|
|
enum bs_e new_state = 0;
|
|
func_80299628(0);
|
|
|
|
if(func_8028B094())
|
|
new_state = BS_38_ANT_FALL;
|
|
|
|
if(bainput_should_look_first_person_camera())
|
|
new_state = badrone_look();
|
|
|
|
if(bastick_getZone() > 0)
|
|
new_state = BS_ANT_WALK;
|
|
|
|
if(bakey_pressed(BUTTON_A))
|
|
new_state = BS_ANT_JUMP;
|
|
|
|
bs_setState(new_state);
|
|
}
|
|
|
|
void bsant_idle_end(void){
|
|
func_802900FC();
|
|
func_8029E4EC();
|
|
}
|
|
|
|
void bsant_walk_init(void){
|
|
func_8029E554();
|
|
baanim_playForDuration_loopSmooth(ASSET_5F_ANIM_BSANT_WALK, 0.8f);
|
|
func_8029C7F4(2, YAW_STATE_1_DEFAULT,1, BA_PHYSICS_NORMAL);
|
|
baanim_setVelocityMapRanges(D_80364960, D_80364964, D_80364968, D_8036496C);
|
|
func_802900B4();
|
|
}
|
|
|
|
void bsant_walk_update(void){
|
|
enum bs_e sp1C = 0;
|
|
AnimCtrl * aCtrl = baanim_getAnimCtrlPtr();
|
|
|
|
func_80299628(0);
|
|
func_8029E48C();
|
|
|
|
if(anctrl_isAt(aCtrl, 0.7781f))
|
|
func_8029E448(0);
|
|
|
|
if(anctrl_isAt(aCtrl, 0.2781f))
|
|
func_8029E448(1);
|
|
|
|
if(bastick_getZone() == 0 && baphysics_is_slower_than(1.0f))
|
|
sp1C = BS_35_ANT_IDLE;
|
|
|
|
if(func_8028B094())
|
|
sp1C = BS_38_ANT_FALL;
|
|
|
|
if(bakey_pressed(BUTTON_A))
|
|
sp1C = BS_ANT_JUMP;
|
|
|
|
bs_setState(sp1C);
|
|
}
|
|
|
|
void bsant_walk_end(void){
|
|
func_8029E4EC();
|
|
func_802900FC();
|
|
}
|
|
|
|
void bsant_jump_init(void){
|
|
AnimCtrl *aCtrl = baanim_getAnimCtrlPtr();
|
|
func_8029E554();
|
|
anctrl_reset(aCtrl);
|
|
anctrl_setIndex(aCtrl, ASSET_60_ANIM_BSANT_JUMP);
|
|
anctrl_setDuration(aCtrl, 1.0f);
|
|
anctrl_setTransitionDuration(aCtrl, 0.1f);
|
|
anctrl_setStart(aCtrl, 0.2987f);
|
|
anctrl_setSubRange(aCtrl, 0.0f, 0.4423f);
|
|
anctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
|
|
anctrl_start(aCtrl, "bsant.c", 0x17c);
|
|
func_8029C7F4(1, YAW_STATE_1_DEFAULT, 3, BA_PHYSICS_AIRBORN);
|
|
if(bastick_distance() != 0.0f)
|
|
yaw_setIdeal(bastick_getAngleRelativeToBanjo());
|
|
baphysics_set_target_yaw(yaw_getIdeal());
|
|
func_8029E48C();
|
|
baphysics_set_horizontal_velocity(yaw_getIdeal(), baphysics_get_target_horizontal_velocity());
|
|
baphysics_set_vertical_velocity(D_80364970);
|
|
baphysics_set_gravity(D_80364974);
|
|
func_8029E3E0();
|
|
bsant_substate = 0;
|
|
}
|
|
|
|
void bsant_jump_update(void){
|
|
enum bs_e sp2C = 0;
|
|
AnimCtrl *aCtrl = baanim_getAnimCtrlPtr();
|
|
|
|
f32 sp1C[3];
|
|
|
|
func_8029E48C();
|
|
baphysics_get_velocity(sp1C);
|
|
|
|
if(bakey_released(BUTTON_A) && 0.0f < sp1C[1])
|
|
baphysics_reset_gravity();
|
|
|
|
switch(bsant_substate){
|
|
case 0://L8029EA88
|
|
if(anctrl_isStopped(aCtrl)){
|
|
anctrl_setDuration(aCtrl, 5.0f);
|
|
baanim_setEnd(0.5026f);
|
|
bsant_substate = 1;
|
|
}
|
|
break;
|
|
case 1://L8029EABC
|
|
if(func_8028B254(0x82)){
|
|
anctrl_setDuration(aCtrl, 1.0f);
|
|
baanim_setEnd(1.0f);
|
|
bsant_substate = 2;
|
|
}
|
|
break;
|
|
case 2://L8029EAF4
|
|
func_80299628(0);
|
|
if(player_isStable()){
|
|
func_8029C5E8();
|
|
bsant_substate = 3;
|
|
}
|
|
break;
|
|
case 3://L8029EB24
|
|
if(anctrl_isStopped(aCtrl))
|
|
sp2C = BS_35_ANT_IDLE;
|
|
break;
|
|
}//L8029EB38
|
|
if(player_isStable()){
|
|
baphysics_set_target_horizontal_velocity(0.0f);
|
|
if(bastick_getZone() > 0)
|
|
sp2C = BS_ANT_WALK;
|
|
|
|
if(bakey_pressed(BUTTON_A))
|
|
sp2C = BS_ANT_JUMP;
|
|
}
|
|
|
|
bs_setState(sp2C);
|
|
}
|
|
|
|
void bsant_jump_end(void){
|
|
baphysics_reset_gravity();
|
|
func_8029E4EC();
|
|
}
|
|
|
|
void bsant_fall_init(void){
|
|
AnimCtrl *aCtrl = baanim_getAnimCtrlPtr();
|
|
func_8029E554();
|
|
D_8037D298 = 0;
|
|
anctrl_reset(aCtrl);
|
|
anctrl_setIndex(aCtrl, ASSET_60_ANIM_BSANT_JUMP);
|
|
anctrl_setDuration(aCtrl, 1.9f);
|
|
anctrl_setStart(aCtrl, 0.4423f);
|
|
anctrl_setPlaybackType(aCtrl, ANIMCTRL_STOPPED);
|
|
anctrl_start(aCtrl, "bsant.c", 0x208);
|
|
func_8029C7F4(1, YAW_STATE_1_DEFAULT, 3, BA_PHYSICS_AIRBORN);
|
|
bsant_substate = 0;
|
|
}
|
|
|
|
void bsant_fall_update(void){
|
|
enum bs_e sp2C = 0;
|
|
AnimCtrl * aCtrl = baanim_getAnimCtrlPtr();
|
|
f32 sp1C[3];
|
|
|
|
func_80299628(0);
|
|
if(D_8037D298)
|
|
func_8029E48C();
|
|
|
|
baphysics_get_velocity(sp1C);
|
|
switch(bsant_substate){
|
|
case 0:
|
|
if(func_8028B254(0x5A)){
|
|
anctrl_setDuration(aCtrl, 2.0f);
|
|
baanim_setEnd(1.0f);
|
|
bsant_substate = 1;
|
|
}
|
|
break;
|
|
case 1:
|
|
break;
|
|
}
|
|
if(player_isStable()){
|
|
if(miscFlag_isTrue(MISC_FLAG_19))
|
|
sp2C = badrone_transform();
|
|
else
|
|
sp2C = BS_35_ANT_IDLE;
|
|
}
|
|
bs_setState(sp2C);
|
|
}
|
|
|
|
void bsant_fall_end(void){
|
|
func_8029E4EC();
|
|
}
|
|
|
|
static void __bsant_recoil_init(int take_damage){
|
|
AnimCtrl *aCtrl = baanim_getAnimCtrlPtr();
|
|
f32 sp38;
|
|
f32 sp2C[3];
|
|
f32 sp20[3];
|
|
|
|
func_8029E554();
|
|
anctrl_reset(aCtrl);
|
|
anctrl_setIndex(aCtrl, ASSET_28_ANIM_BSANT_OW);
|
|
anctrl_setDuration(aCtrl, 1.4f);
|
|
anctrl_setSubRange(aCtrl, 0.0f, 0.4899f);
|
|
anctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
|
|
anctrl_start(aCtrl, "bsant.c", 0x272);
|
|
if(take_damage == 1)
|
|
func_8030E58C(SFX_38_BANJO_AYE_1, 1.8f);
|
|
else
|
|
func_8030E58C(SFX_56_BANJO_HUI, 1.8f);
|
|
|
|
_player_getPosition(sp2C);
|
|
func_80294980(sp20);
|
|
func_80257F18(sp20, sp2C, &sp38);
|
|
yaw_setIdeal(mlNormalizeAngle(sp38 + 180.0f));
|
|
yaw_applyIdeal();
|
|
baphysics_set_target_horizontal_velocity(200.0f);
|
|
baphysics_set_target_yaw(sp38);
|
|
baphysics_set_horizontal_velocity(sp38, baphysics_get_target_horizontal_velocity());
|
|
func_8029C7F4(1, YAW_STATE_1_DEFAULT, 2, BA_PHYSICS_LOCKED_ROTATION);
|
|
baphysics_set_vertical_velocity(510.0f);
|
|
baphysics_set_gravity(-1200.0f);
|
|
baMarker_collisionOff();
|
|
baeyes_close();
|
|
bsant_substate = 0;
|
|
}
|
|
|
|
static void __bsant_recoil_update(void){
|
|
enum bs_e sp1C = 0;
|
|
|
|
if(baanim_isAt(0.5f))
|
|
baeyes_open();
|
|
|
|
switch(bsant_substate){
|
|
case 0:
|
|
if(func_8028B254(0x5a)){
|
|
baanim_setEnd(1.0f);
|
|
bsant_substate = 1;
|
|
}
|
|
break;
|
|
case 1:
|
|
break;
|
|
}
|
|
|
|
if(player_isStable())
|
|
sp1C = BS_35_ANT_IDLE;
|
|
|
|
bs_setState(sp1C);
|
|
}
|
|
|
|
static void __bsant_recoil_end(void){
|
|
func_80297CA8();
|
|
baphysics_reset_gravity();
|
|
baMarker_collisionOn();
|
|
baeyes_open();
|
|
func_8029E4EC();
|
|
}
|
|
|
|
void bsant_ow_init(void){
|
|
__bsant_recoil_init(1);
|
|
}
|
|
|
|
void bsant_ow_update(void){
|
|
__bsant_recoil_update();
|
|
}
|
|
|
|
void bsant_ow_end(void){
|
|
__bsant_recoil_end();
|
|
}
|
|
|
|
void bsant_bounce_init(void){
|
|
__bsant_recoil_init(2);
|
|
}
|
|
|
|
void bsant_bounce_update(void){
|
|
__bsant_recoil_update();
|
|
}
|
|
|
|
void bsant_bounce_end(void){
|
|
__bsant_recoil_end();
|
|
}
|
|
|
|
void bsant_die_init(void){
|
|
AnimCtrl *aCtrl = baanim_getAnimCtrlPtr();
|
|
f32 sp38;
|
|
f32 sp2C[3];
|
|
f32 sp20[3];
|
|
func_8029E554();
|
|
func_8029B930();
|
|
anctrl_reset(aCtrl);
|
|
anctrl_setSmoothTransition(aCtrl, 0);
|
|
anctrl_setIndex(aCtrl, ASSET_29_ANIM_BSANT_DIE);
|
|
anctrl_setSubRange(aCtrl, 0.0f, 0.523f);
|
|
anctrl_setDuration(aCtrl, 1.6f);
|
|
anctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
|
|
anctrl_start(aCtrl, "bsant.c", 0x2f6);
|
|
func_8030E58C(SFX_36_BANJO_DOH, 1.8f);
|
|
_player_getPosition(sp2C);
|
|
func_80294980(sp20);
|
|
func_80257F18(sp20, sp2C, &sp38);
|
|
D_8037D290 = 250.0f;
|
|
yaw_setIdeal(mlNormalizeAngle(sp38 + 180.0f));
|
|
yaw_applyIdeal();
|
|
baphysics_set_target_horizontal_velocity(D_8037D290);
|
|
baphysics_set_target_yaw(sp38);
|
|
baphysics_set_horizontal_velocity(sp38, baphysics_get_target_horizontal_velocity());
|
|
func_8029C7F4(1, YAW_STATE_1_DEFAULT, 2, BA_PHYSICS_LOCKED_ROTATION);
|
|
baphysics_set_vertical_velocity(510.0f);
|
|
baphysics_set_gravity(-1200.0f);
|
|
pitch_setAngVel(1000.0f, 12.0f);
|
|
func_802914CC(0xd);
|
|
ncDynamicCamD_func_802BF2C0(30.0f);
|
|
func_8029C984();
|
|
bsant_substate = 0;
|
|
baMarker_collisionOff();
|
|
baeyes_close();
|
|
batimer_set(0, 2.9f);
|
|
}
|
|
|
|
void bsant_die_update(void){
|
|
AnimCtrl *aCtrl = baanim_getAnimCtrlPtr();
|
|
|
|
baphysics_set_target_horizontal_velocity(D_8037D290);
|
|
func_80299628(0);
|
|
switch(bsant_substate){
|
|
case 0://L8029F270
|
|
if(player_isStable()){
|
|
baanim_setEnd(1.0f);
|
|
FUNC_8030E624(SFX_1F_HITTING_AN_ENEMY_3, 0.8f, 18000);
|
|
FUNC_8030E624(SFX_39_BANJO_AYE_2, 1.8f, 18000);
|
|
D_8037D290 = 0.0f;
|
|
bsant_substate = 1;
|
|
}
|
|
break;
|
|
case 1://L8029F2C0
|
|
if(anctrl_isAt(aCtrl, 0.72f)){
|
|
D_8037D290 = 0.0f;
|
|
bsant_substate = 2;
|
|
}
|
|
break;
|
|
case 2://L8029F2F0
|
|
if(anctrl_isAt(aCtrl, 0.77f)){
|
|
FUNC_8030E624(SFX_1F_HITTING_AN_ENEMY_3, 0.8f, 18000);
|
|
FUNC_8030E624(SFX_38_BANJO_AYE_1, 1.8f, 18000);
|
|
}
|
|
break;
|
|
}
|
|
|
|
if(batimer_decrement(0))
|
|
func_8029B890();
|
|
|
|
bs_setState(0);
|
|
}
|
|
|
|
void bsant_die_end(void){
|
|
core1_ce60_incOrDecCounter(FALSE);
|
|
baphysics_reset_gravity();
|
|
pitch_setIdeal(0.0f);
|
|
roll_setIdeal(0.0f);
|
|
func_80291548();
|
|
baeyes_open();
|
|
}
|
|
|
|
void func_8029F398(void){
|
|
func_8029E554();
|
|
baanim_playForDuration_loopSmooth(ASSET_5E_ANIM_BSANT_IDLE, 2.0f);
|
|
func_8029C7F4(1, YAW_STATE_1_DEFAULT, 3, BA_PHYSICS_NORMAL);
|
|
baphysics_set_target_horizontal_velocity(0.0f);
|
|
func_8029C674();
|
|
func_802B3A50();
|
|
}
|
|
|
|
void func_8029F3F4(void){
|
|
enum bs_e sp1C = 0;
|
|
func_802B3A50();
|
|
func_80299628(0);
|
|
func_8029C6D0();
|
|
if(!func_80298850())
|
|
sp1C = BS_35_ANT_IDLE;
|
|
|
|
bs_setState(sp1C);
|
|
}
|
|
|
|
void func_8029F440(void){
|
|
func_8029C748();
|
|
func_8029E4EC();
|
|
}
|
|
|
|
void bsant_drone_init(void){
|
|
func_8029E554();
|
|
bsdrone_init();
|
|
}
|
|
|
|
void bsant_drone_update(void){
|
|
bsdrone_update();
|
|
}
|
|
|
|
void bsant_drone_end(void){
|
|
bsdrone_end();
|
|
func_8029E4EC();
|
|
}
|