#include #include "functions.h" #include "variables.h" #include "core2/ba/model.h" #include "core2/ba/anim.h" #include "core2/ba/physics.h" #include "core2/statetimer.h" /* .data */ f32 D_80364A90 = 30.0f; f32 D_80364A94 = 700.0f; f32 D_80364A98 = 80.0f; f32 D_80364A9C = 1000.0f; f32 D_80364AA0 = 300.0f; f32 D_80364AA4 = 0.56f; f32 D_80364AA8 = 0.34f; f32 D_80364AAC = 0.51f; f32 D_80364AB0 = 0.29f; f32 D_80364AB4 = 0.8f; f32 D_80364AB8 = 0.7f; f32 D_80364ABC = 693.5f; f32 D_80364AC0 = -1200.0f; /* .bss */ f32 D_8037D3A0; u8 D_8037D3A4; void func_802A87C0(void){ if(stateTimer_isActive(STATE_TIMER_3_TURBO_TALON)) func_8029C3E8(10.0f, 50.0f); else func_8029C22C(); } void func_802A880C(s32 arg0){ if(arg0) func_8030E58C(SFX_49_KAZOOIE_RA, 0.96f); else func_8030E58C(SFX_49_KAZOOIE_RA, 1.04f); } void func_802A8850(void){ if( button_pressed(BUTTON_B) && stateTimer_isActive(STATE_TIMER_3_TURBO_TALON) && baphysics_get_target_horizontal_velocity() == 0.0f ){ stateTimer_clear(STATE_TIMER_3_TURBO_TALON); } } f32 func_802A88B0(void){ if(func_8028B128()) return D_80364AA0; if(stateTimer_isActive(STATE_TIMER_3_TURBO_TALON)) return D_80364A9C; return D_80364A94; } f32 func_802A8900(void){ if(stateTimer_isActive(STATE_TIMER_3_TURBO_TALON)) return D_80364A98; return D_80364A90; } f32 func_802A8934(void){ if(func_8028B128()) return D_80364AB8; if(stateTimer_isActive(STATE_TIMER_3_TURBO_TALON)) return D_80364AB0; return D_80364AA8; } f32 func_802A8984(void){ if(func_8028B128()) return D_80364AB4; if(stateTimer_isActive(STATE_TIMER_3_TURBO_TALON)) return D_80364AAC; return D_80364AA4; } void func_802A89D4(void){ f32 sp24 = func_8029B30C(); if(!func_8029B300()){ baphysics_set_target_horizontal_velocity(0.0f); } else{ baphysics_set_target_horizontal_velocity(ml_interpolate_f(sp24, func_802A8900(), func_802A88B0())); } } void func_802A8A40(void){ func_8029B324(0, 0.03f); func_8029B324(1, 1.0f); func_8029E070(1); func_8029E064(1); pitch_setAngVel(1000.0f, 12.0f); roll_setAngularVelocity(1000.0f, 12.0f); miscFlag_set(MISC_FLAG_3); func_8029CF48(4,1,0.24f); baModel_setDirection(PLAYER_MODEL_DIR_KAZOOIE); } void func_802A8AD8(void){ func_80299650(stateTimer_getPrevious(STATE_TIMER_3_TURBO_TALON), stateTimer_get(STATE_TIMER_3_TURBO_TALON)); if(miscFlag_isTrue(MISC_FLAG_10_TOUCHING_TURBO_TRAINERS) &&(bs_getState() != BS_17_BTROT_EXIT)){ miscFlag_clear(MISC_FLAG_10_TOUCHING_TURBO_TRAINERS); stateTimer_set(STATE_TIMER_3_TURBO_TALON, get_turbo_duration()); func_803219F4(4); } if(stateTimer_isDone(STATE_TIMER_3_TURBO_TALON)){ if(func_8029DFE0()){ func_8029E0DC(0); if(miscFlag_isFalse(MISC_FLAG_14_LOSE_BOGGY_RACE)) func_8030E484(0x3eb); func_803219F4(1); } }else{ func_8029E0DC(1); } } void func_802A8BB0(void){ enum bs_e next_state = bs_getNextState(); if(bsbtrot_inSet(next_state)) return; baModel_setDirection(PLAYER_MODEL_DIR_BANJO); func_8029B0C0(); func_8029E070(0); func_8029E064(0); pitch_setIdeal(0.0f); roll_setIdeal(0.0f); miscFlag_clear(MISC_FLAG_3); if(next_state != BS_5A_LOADZONE) stateTimer_set(STATE_TIMER_3_TURBO_TALON, 0.0f); func_802A8AD8(); baanim_setUpdateType(BAANIM_UPDATE_1_NORMAL); func_8029CF48(4, 0, 0.0f); } int func_802A8C60(void){ if(stateTimer_isActive(STATE_TIMER_3_TURBO_TALON)) return 0; return button_released(BUTTON_Z); } void _bsbtrot_802A8C98(AnimCtrl *aCtrl, enum asset_e arg1){ if(animctrl_getIndex(aCtrl) != arg1){ animctrl_setIndex(aCtrl, arg1); animctrl_setStart(aCtrl, animctrl_getAnimTimer(aCtrl)); animctrl_start(aCtrl, "bsbtrot.c", 0x12e); } } enum asset_e func_802A8D00(enum asset_e arg0, enum asset_e arg1){ if(stateTimer_isDone(STATE_TIMER_3_TURBO_TALON)) return arg0; else return arg1; } enum bs_e func_802A8D34(enum bs_e arg0){ if(miscFlag_isTrue(MISC_FLAG_F)) return arg0; if(miscFlag_isTrue(MISC_FLAG_1_ON_FLIGHT_PAD)) return BS_23_FLY_ENTER; return BS_8_BTROT_JUMP; } enum bs_e func_802A8D84(enum bs_e arg0){ if( func_8029B300(arg0) > 0) arg0 = BS_16_BTROT_WALK; if(should_look_first_person_camera()) arg0 = badrone_look(); if(func_8028B094()) arg0 = BS_71_BTROT_FALL; if(func_802A8C60()) arg0 = BS_17_BTROT_EXIT; if(button_pressed(BUTTON_A)) arg0 = func_802A8D34(arg0); if(player_shouldSlideTrot()) arg0 = BS_45_BTROT_SLIDE; if(player_inWater()) arg0 = BS_2D_SWIM_IDLE; return arg0; } void bsbtrot_enter_init(void){ func_802A8AD8(); baanim_playForDuration_onceSmooth(ASSET_16_ANIM_BSBTROT_ENTER, 1.0f); func_8029C7F4(1,1,2, BA_PHYSICS_NORMAL); baphysics_set_target_horizontal_velocity(0.0f); func_802A8A40(); func_80299BD4(); func_802952A8(0,0); } void bsbtrot_enter_update(void){ enum bs_e next_state = 0; AnimCtrl *aCtrl = baanim_getAnimCtrlPtr(); func_802952A8(0,1); func_80299628(1); if(animctrl_isStopped(aCtrl)) next_state = BS_15_BTROT_IDLE; if(0.5 < animctrl_getAnimTimer(aCtrl)) next_state = func_802A8D84(next_state); bs_setState(next_state); } void bsbtrot_enter_end(void){ func_802952A8(0,1); func_802A8BB0(); } void bsbtrot_stand_init(void){ baanim_playForDuration_loopSmooth(ASSET_26_ANIM_BSBTROT_IDLE, 1.2f); func_8029C7F4(1,1,1, BA_PHYSICS_NORMAL); baphysics_set_target_horizontal_velocity(0.0f); func_802A8A40(); } void bsbtrot_stand_update(void){ enum bs_e next_state = 0;; func_802A8850(); func_802A8AD8(); if(stateTimer_isActive(STATE_TIMER_3_TURBO_TALON)) func_802A87C0(); func_80299628(1); next_state = func_802A8D84(next_state); next_state = func_8029CA94(next_state); bs_setState(next_state); } void bsbtrot_stand_end(void){ func_802A8BB0(); } enum asset_e func_802A9030(void){ return func_802A8D00(ASSET_15_ANIM_BSBTROT_WALK, ASSET_44_ANIM_BSBTROT_TURBO_WALK); } void func_802A9054(void){ f32 tmp = 1.0f; baanim_setVelocityMapRanges(func_802A8900(), func_802A88B0(), func_802A8984(), func_802A8934()); if(func_8028B394()){ tmp = ml_map_f(baphysics_get_horizontal_velocity_percentage(), 0.0f, 1.0f, 0.6f, 0.9f); baanim_scaleDuration(tmp); } else{ baanim_scaleDuration(tmp); } } void bsbtrot_walk_init(void){ baanim_playForDuration_loopSmooth(func_802A9030(), 0.53f); func_8029C7F4(2,1,1, BA_PHYSICS_NORMAL); func_802A8A40(); func_802A9054(); } void bsbtrot_walk_update(void){ enum bs_e sp1C = 0; AnimCtrl *aCtrl = baanim_getAnimCtrlPtr(); func_802A8850(); func_802A9054(); func_802A8AD8(); _bsbtrot_802A8C98(aCtrl, func_802A9030()); func_80299628(1); func_802A89D4(); if(animctrl_isAt(aCtrl, 0.2781f)) func_802A880C(1); func_8029AD28(0.2781f, 4); if(animctrl_isAt(aCtrl, 0.7781f)) func_802A880C(0); func_8029AD28(0.7781f, 3); if(stateTimer_isActive(STATE_TIMER_3_TURBO_TALON)){ func_802A87C0(); } else{ if(animctrl_isAt(aCtrl, 0.2115f) || animctrl_isAt(aCtrl, 0.7115f)) func_802A87C0(); } if(!func_8029B300() && baphysics_is_slower_than(1.0f)) sp1C = BS_15_BTROT_IDLE; if(func_8028B094()) sp1C = BS_71_BTROT_FALL; if(func_802A8C60()) sp1C = BS_17_BTROT_EXIT; if(button_pressed(BUTTON_A)) sp1C = func_802A8D34(sp1C); if(player_shouldSlideTrot()) sp1C = BS_45_BTROT_SLIDE; if(player_inWater()) sp1C = BS_2D_SWIM_IDLE; sp1C = func_8029CA94(sp1C); bs_setState(sp1C); } void bsbtrot_walk_end(void){ func_802A8BB0(); } void func_802A9320(void){} void bsbtrot_jump_init(void){ AnimCtrl * aCtrl = baanim_getAnimCtrlPtr(); animctrl_reset(aCtrl); animctrl_setIndex(aCtrl, ASSET_27_ANIM_BSBTROR_JUMP); animctrl_setDuration(aCtrl, 1.4f); animctrl_setTransitionDuration(aCtrl, 0.1f); animctrl_setStart(aCtrl, 0.2f); animctrl_setSubRange(aCtrl, 0.0f, 0.4002f); animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE); animctrl_start(aCtrl, "bsbtrot.c", 0x272); func_802A8A40(); baanim_setUpdateType(BAANIM_UPDATE_1_NORMAL); yaw_setUpdateState(1); func_8029957C(3); baphysics_set_type(BA_PHYSICS_AIRBORN); if(func_8029B2E8() != 0.0f) yaw_setIdeal(func_8029B33C()); baphysics_set_target_yaw(yaw_getIdeal()); func_802A89D4(); baphysics_set_horizontal_velocity(yaw_getIdeal(), baphysics_get_target_horizontal_velocity()); baphysics_set_vertical_velocity(D_80364ABC); baphysics_set_gravity(D_80364AC0); func_8030E484(SFX_48_KAZOOIE_RUUH); D_8037D3A4 = 0; } void bsbtrot_jump_update(void){ enum bs_e sp2C = 0; AnimCtrl * aCtrl = baanim_getAnimCtrlPtr(); f32 sp1C[3]; func_802A8AD8(); if(stateTimer_isActive(STATE_TIMER_3_TURBO_TALON)) func_802A87C0(); if(miscFlag_isTrue(MISC_FLAG_F)) baphysics_reset_horizontal_velocity(); else func_802A89D4(); baphysics_get_velocity(sp1C); if(button_released(BUTTON_A) && 0.0f < sp1C[1]) baphysics_reset_gravity(); switch(D_8037D3A4){ case 0://L802A9530 if(animctrl_isStopped(aCtrl)){ animctrl_setSubRange(aCtrl, 0.0f, 0.4653f); animctrl_setDuration(aCtrl, 10.0f); animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE); D_8037D3A4 = 1; } break; case 1://L802A9578 if(func_8028B254(0x8C)){ animctrl_setSubRange(aCtrl, 0.0f, 0.7328f); animctrl_setDuration(aCtrl, 1.4f); animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE); D_8037D3A4 = 2; } break; case 2://L802A95C4 func_80299628(1); if(player_isStable()){ func_8029C5E8(); animctrl_setSubRange(aCtrl, 0.0f, 0.8798f); animctrl_setDuration(aCtrl, 0.9f); animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE); func_8029957C(1); D_8037D3A4 = 3; if(220.0f < baphysics_get_target_horizontal_velocity()) func_80299AAC(); func_8029C22C(); } break; case 3://L802A9660 if(220.0f < baphysics_get_target_horizontal_velocity()) func_80299AAC(); func_802A9320(); func_80299628(1); if(animctrl_isStopped(aCtrl)){ animctrl_setSubRange(aCtrl, 0.0f, 0.8898f); animctrl_setDuration(aCtrl, 2.0f); animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE); D_8037D3A4 = 4; } func_8029C22C(); break; case 4://L802A96F0 if(220.0f < baphysics_get_target_horizontal_velocity()) func_80299AAC(); func_802A9320(); func_80299628(1); if(animctrl_isStopped(aCtrl)){ animctrl_setSubRange(aCtrl, 0.0f, 1.0f); animctrl_setDuration(aCtrl, 1.2f); animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE); D_8037D3A4 = 5; } func_8029C22C(); break; case 5://L802A9780 if(220.0f < baphysics_get_target_horizontal_velocity()) func_80299AAC(); func_802A9320(); func_80299628(1); if(animctrl_isStopped(aCtrl)) sp2C = BS_15_BTROT_IDLE; break; }//LL802A97D0 if(should_peck()) sp2C = BS_11_BPECK; if(player_isFallTumbling()) sp2C = BS_3D_FALL_TUMBLING; if(player_inWater()) sp2C = BS_4C_LANDING_IN_WATER; if(player_isStable()){ if(button_pressed(BUTTON_A)) sp2C = func_802A8D34(sp2C); if(player_shouldSlideTrot()) sp2C = BS_45_BTROT_SLIDE; } bs_setState(sp2C); } void bsbtrot_jump_end(void){ baphysics_reset_gravity(); func_802A8BB0(); } void bsbtrot_exit_init(void){ baanim_playForDuration_onceSmooth(ASSET_7_ANIM_BSBTROT_EXIT, 0.6f); baanim_setUpdateType(BAANIM_UPDATE_1_NORMAL); baphysics_set_target_horizontal_velocity(0.0f); } void bsbtrot_exit_update(void){ enum bs_e sp1C = 0; if(animctrl_isStopped(baanim_getAnimCtrlPtr())) sp1C = BS_1_IDLE; bs_setState(sp1C); } void bsbtrot_exit_end(void){ func_802A8BB0(); } void bsbtrot_slide_init(void){ AnimCtrl *aCtrl = baanim_getAnimCtrlPtr(); animctrl_reset(aCtrl); animctrl_setIndex(aCtrl, ASSET_27_ANIM_BSBTROR_JUMP); animctrl_setStart(aCtrl, 0.069f); animctrl_setPlaybackType(aCtrl, ANIMCTRL_STOPPED); animctrl_start(aCtrl, "bsbtrot.c", 0x382); func_802A8A40(); func_8029C7F4(1,1,3, BA_PHYSICS_LOCKED_ROTATION); baphysics_set_target_yaw(yaw_getIdeal()); baphysics_set_horizontal_velocity(yaw_getIdeal(), baphysics_get_target_horizontal_velocity()); func_8029E070(1); func_8029E064(1); pitch_setAngVel(1000.0f, 12.0f); roll_setAngularVelocity(1000.0f, 12.0f); baphysics_set_target_horizontal_velocity(0.0f); func_80299AAC(); D_8037D3A0 = 1.0f; } void bsbtrot_slide_update(void){ enum bs_e sp3C = 0; f32 sp30[3]; f32 sp2C; func_802A8AD8(); if(stateTimer_isActive(STATE_TIMER_3_TURBO_TALON)) func_802A87C0(); func_80299AAC(); D_8037D3A0 = ml_max_f(D_8037D3A0-time_getDelta(), 0.0f); if(player_shouldSlideTrot()){ func_80294480(sp30); func_8025801C(sp30, &sp2C); func_80299628(1); baphysics_set_target_horizontal_velocity(ml_map_f(pitch_getIdeal(), 20.0f, 60.0f, 550.0f, 700.0f)); baphysics_set_target_yaw(sp2C); func_8029C22C(); }else{ sp3C = BS_15_BTROT_IDLE; } if(player_inWater()) sp3C = BS_2D_SWIM_IDLE; if(D_8037D3A0 == 0.0f && button_pressed(BUTTON_A) && player_isStable()) sp3C = func_802A8D34(sp3C); bs_setState(sp3C); } void bsbtrot_slide_end(void){ func_802A8BB0(); } int bsbtrot_inSet(s32 move_indx){ return (move_indx == BS_15_BTROT_IDLE) || (move_indx == BS_16_BTROT_WALK) || (move_indx == BS_8_BTROT_JUMP) || (move_indx == BS_17_BTROT_EXIT) || (move_indx == BS_45_BTROT_SLIDE) || (move_indx == BS_14_BTROT_ENTER) || (move_indx == 0x79) || (move_indx == BS_BTROT_OW) || (move_indx == BS_71_BTROT_FALL) || (move_indx == 0x9a); } void bsbtrot_fall_init(void){ AnimCtrl * aCtrl = baanim_getAnimCtrlPtr(); animctrl_reset(aCtrl); animctrl_setIndex(aCtrl, ASSET_27_ANIM_BSBTROR_JUMP); animctrl_setDuration(aCtrl, 1.4f); animctrl_setStart(aCtrl, 0.4653f); animctrl_setPlaybackType(aCtrl, ANIMCTRL_STOPPED); animctrl_start(aCtrl, "bsbtrot.c", 0x400); func_802A8A40(); func_8029C7F4(1,1,3, BA_PHYSICS_AIRBORN); baphysics_set_target_yaw(yaw_getIdeal()); func_802A89D4(); baphysics_set_horizontal_velocity(yaw_getIdeal(), baphysics_get_target_horizontal_velocity()); D_8037D3A4 = 0; } void bsbtrot_fall_update(void){ enum bs_e sp2C = 0; AnimCtrl *aCtrl = baanim_getAnimCtrlPtr(); f32 sp1C[3]; func_802A8AD8(); if(stateTimer_isActive(STATE_TIMER_3_TURBO_TALON)) func_802A87C0(); if(miscFlag_isTrue(MISC_FLAG_F)) baphysics_reset_horizontal_velocity(); else func_802A89D4(); baphysics_get_velocity(sp1C); switch (D_8037D3A4){ case 0://L802A9D90 if(func_8028B254(0x8C)){ animctrl_setSubRange(aCtrl, 0.0f, 0.7328f); animctrl_setDuration(aCtrl, 1.4f); animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE); D_8037D3A4 = 1; } break; case 1://L802A9DDC func_80299628(1); if(player_isStable()){ func_8029C5E8(); animctrl_setSubRange(aCtrl, 0.0f, 0.8798f); animctrl_setDuration(aCtrl, 0.9f); animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE); func_8029957C(1); if(220.0f < baphysics_get_target_horizontal_velocity()){ func_80299AAC(); } func_8029C22C(); D_8037D3A4 = 2; } break; case 2://L802A9E78 if(220.0f < baphysics_get_target_horizontal_velocity()) func_80299AAC(); func_802A9320(); func_80299628(1); if(animctrl_isStopped(aCtrl)){ animctrl_setSubRange(aCtrl, 0.0f, 0.8898f); animctrl_setDuration(aCtrl, 2.0f); animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE); D_8037D3A4 = 3; } func_8029C22C(); break; case 3://L802A9F08 if(220.0f < baphysics_get_target_horizontal_velocity()) func_80299AAC(); func_802A9320(); func_80299628(1); if(animctrl_isStopped(aCtrl)){ animctrl_setSubRange(aCtrl, 0.0f, 1.0f); animctrl_setDuration(aCtrl, 1.2f); animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE); D_8037D3A4 = 4; } func_8029C22C(); break; case 4://802A9F98 if(220.0f < baphysics_get_target_horizontal_velocity()) func_80299AAC(); func_802A9320(); func_80299628(1); if(animctrl_isStopped(aCtrl)) sp2C = BS_15_BTROT_IDLE; break; }//LL802A9FE8 if(player_inWater()) sp2C = BS_4C_LANDING_IN_WATER; if(player_isFallTumbling()) sp2C = BS_3D_FALL_TUMBLING; if(player_isStable()){ if(button_pressed(BUTTON_A)) sp2C = func_802A8D34(sp2C); if(player_shouldSlideTrot()) sp2C = BS_45_BTROT_SLIDE; } bs_setState(sp2C); } void bsbtrot_fall_end(void){ func_802A8BB0(); } void bsbtrot_unk79_init(void){ baanim_playForDuration_loopSmooth(ASSET_26_ANIM_BSBTROT_IDLE, 1.2f); func_8029C7F4(1,1,3, BA_PHYSICS_NORMAL); baphysics_set_target_horizontal_velocity(0.0f); func_802A8A40(); baModel_setDirection(PLAYER_MODEL_DIR_KAZOOIE); func_8029C674(); } void bsbtrot_unk79_update(void){ enum bs_e sp1C = 0; func_8029C6D0(); func_802A8AD8(); func_80299628(1); if(!func_80298850()) sp1C = BS_15_BTROT_IDLE; bs_setState(sp1C); } void bsbtrot_unk79_end(void){ func_8029C748(); func_802A8BB0(); } void bsbtrot_ow_init(void){ f32 sp3C; f32 sp30[3]; f32 sp24[3]; func_802A8A40(); func_80298760(func_80296560()); baanim_playForDuration_onceSmooth(ASSET_66_ANIM_BSBTROT_OW, 1.1f); func_80299BFC(1.0f); _player_getPosition(sp30); func_80294980(sp24); func_80257F18(sp24, sp30, &sp3C); yaw_setIdeal(mlNormalizeAngle(sp3C + 180.0f));\ yaw_applyIdeal(); baphysics_set_target_horizontal_velocity(func_802987D4()); baphysics_set_target_yaw(sp3C); baphysics_set_horizontal_velocity(sp3C, baphysics_get_target_horizontal_velocity()); func_8029C7F4(1,1,2, BA_PHYSICS_LOCKED_ROTATION); if(func_802987B4() == 2) baphysics_set_type(BA_PHYSICS_AIRBORN); baphysics_set_vertical_velocity(func_802987C4()); baphysics_set_gravity(func_802987E4()); baMarker_collisionOff(); func_80292E48(); } void bsbtrot_ow_update(void){ enum bs_e sp1C = 0; if(func_802987B4() == 2) func_802B6FA8(); if(baanim_isAt(0.3f)) func_80292EA4(); if(player_isFallTumbling()) sp1C = BS_3D_FALL_TUMBLING; if(player_isStable() && baanim_isStopped()) sp1C = BS_15_BTROT_IDLE; if(animctrl_isStopped(baanim_getAnimCtrlPtr()) && player_inWater()) sp1C = BS_2D_SWIM_IDLE; bs_setState(sp1C); } void bsbtrot_ow_end(void){ func_80297CA8(); baphysics_reset_gravity(); baMarker_collisionOn(); func_80292EA4(); func_802A8BB0(); } void bsbtrot_drone_init(void){ func_802A8AD8(); func_802A8A40(); bsdrone_init(); } void bsbtrot_drone_update(void){ bsdrone_update(); func_802A8AD8(); } void bsbtrot_drone_end(void){ bsdrone_end(); func_802A8BB0(); }