Files
banjo-kazooie/src/core2/bs/stand.c

338 lines
9.5 KiB
C

#include <ultra64.h>
#include "functions.h"
#include "variables.h"
#include "bsint.h"
#include "core2/statetimer.h"
extern f32 func_8029B2E8(void);
void yaw_setVelocityBounded(f32, f32);
void func_802875AC(AnimCtrl *, char*, s32);
void func_802900B4(void);
void rumbleManager_80250D94(f32, f32, f32);
/* .data */
u8 D_80364D20[] = {
0x8 | 0x1,
0x8 | 0x2,
0x8 | 0x4,
0x10,
0x8 | 0x1,
0x8 | 0x1,
0x8 | 0x2,
0x8 | 0x1,
0x20,
0x8 | 0x1,
0x8 | 0x2,
0x8 | 0x4,
0x10,
0x8 | 0x1,
0x8 | 0x1,
0x8 | 0x2,
0x8 | 0x1,
0x10,
0x8 | 0x1,
0x8 | 0x2,
0x20
};
//.bss
s32 D_8037D540;
u8 D_8037D544;
u32 func_802B4870(u32 arg0){
if(++arg0 > 0x14)
arg0 = 0;
return arg0;
}
s32 func_802B488C(s32 arg0){
s32 retVal = arg0;
switch(func_8029B300()){
case 1: //L802B48CC
retVal = BS_WALK_CREEP;
break;
case 2: //L802B48D4
retVal = BS_2_WALK_SLOW;
break;
case 3: //L802B48D4
retVal = BS_WALK;
break;
case 4: //L802B48D4
retVal = BS_4_WALK_FAST;
break;
}
if(button_held(BUTTON_Z))
retVal = BS_CROUCH;
if(button_pressed(BUTTON_B) && can_claw())
retVal = BS_CLAW;
if(button_pressed(BUTTON_A))
retVal = func_8029C780();
if(func_80294F78())
retVal = func_802926C0();
if(player_isSliding())
retVal = BS_SLIDE;
retVal = func_8029CA94(retVal);
if(player_inWater())
retVal = BS_2D_SWIM_IDLE;
return retVal;
}
void bsstand_init(void){
if(bsclimb_inSet(bs_getPrevState()))
climbRelease();
func_8028A180(0x6F, 5.5f);
func_8029C7F4(1,1,1,2);
func_80297970(0.0f);
func_802900B4();
D_8037D540 = 0;
D_8037D544 = 0;
}
void func_802B4A10(AnimCtrl *arg0){
if(animctrl_isAt(arg0, 0.2057f)){ //(30/145)
FUNC_8030E624(SFX_21_EGG_BOUNCE_1, 1.8f, 16000);
rumbleManager_80250D94(0.5f, 0.25f, 0.4f);
}//L802B4A54
if(animctrl_isAt(arg0, 0.2057f)) //(30/145)
func_80292E48();
//L802B4A78
if(animctrl_isAt(arg0, 0.2555f)){ //(37/145)
FUNC_8030E624(SFX_21_EGG_BOUNCE_1, 1.8f, 16000);
rumbleManager_80250D94(0.5f, 0.25f, 0.4f);
}//L802B4AB0
if(animctrl_isAt(arg0, 0.2896f)){ //(42/145)
FUNC_8030E624(SFX_21_EGG_BOUNCE_1, 1.8f, 16000);
rumbleManager_80250D94(0.5f, 0.25f, 0.4f);
}//L802B4AEC
if(animctrl_isAt(arg0, 0.3f)){ //(43.5/145)?
FUNC_8030E624(SFX_62_BANJO_ERGHH, 1.0f, 28000);
}//L802B4B0C
if(animctrl_isAt(arg0, 0.3607f)){
func_80292EA4();
}//L802B4B30
if(animctrl_isAt(arg0, 0.4183f)){
func_8030E58C(SFX_3F1_UNKNOWN, 1.6f);
}//L802B4B50
if(animctrl_isAt(arg0, 0.455f)){
func_8030E58C(SFX_3F1_UNKNOWN, 1.45f);
}//L802B4B74
if(animctrl_isAt(arg0, 0.49f)){
func_8030E58C(SFX_3F1_UNKNOWN, 1.4f);
}//L802B4B98
if(animctrl_isAt(arg0, 0.5397f)){
func_802900D8();
}//L802B4BBC
if(animctrl_isAt(arg0, 0.6619f)){
FUNC_8030E624(SFX_21_EGG_BOUNCE_1, 1.8f, 16000);
rumbleManager_80250D94(0.5f, 0.25f, 0.4f);
}//L802B4BF4
if(animctrl_isAt(arg0, 0.6688f))
func_80292E48();
//L802B4C18
if(animctrl_isAt(arg0, 0.6964f)){
FUNC_8030E624(SFX_21_EGG_BOUNCE_1, 1.8f, 16000);
rumbleManager_80250D94(0.5f, 0.25f, 0.4f);
}//L802B4C50
if(animctrl_isAt(arg0, 0.7747f))
func_80292EA4();
//L802B4C74
if(animctrl_isAt(arg0, 0.7822f)){
FUNC_8030E624(SFX_6F_BANJO_HEADSCRATCH, 1.0f, 14000);
}//L802B4C90
if(animctrl_isAt(arg0, 0.8322f)){
FUNC_8030E624(SFX_6F_BANJO_HEADSCRATCH, 1.0f, 14000);
}//L802B4CB0
if(animctrl_isAt(arg0, 0.8669f)){
FUNC_8030E624(SFX_6F_BANJO_HEADSCRATCH, 1.0f, 14000);
}//L802B4CD0
if(animctrl_isAt(arg0, 0.9048f)){
FUNC_8030E624(SFX_6F_BANJO_HEADSCRATCH, 1.0f, 14000);
}//L802B4CF0
if(animctrl_isAt(arg0, 0.9649f)){
func_802900D8();
}//L802B4CF0
}
void bsstand_update(void) {
s32 next_state;
AnimCtrl *anim_ctrl;
f32 sp1C;
s32 sp18;
anim_ctrl = _player_getAnimCtrlPtr();
if ((func_8029B300() == 0) && (func_8029B2E8() > 0.0f)) {
D_8037D544 = 1;
yaw_setUpdateState(3);
yaw_setVelocityBounded(200.0f, 14.0f);
} else {
if (D_8037D544 != 0) {
yaw_setIdeal(yaw_get());
}
D_8037D544 = 0;
yaw_setUpdateState(1);
}
next_state = func_802B488C(0);
sp18 = D_80364D20[D_8037D540];
if (sp18 & 8) {
if (sp18 & 4) {
if (animctrl_isAt(anim_ctrl, 0.0909f)) func_80299BD4();
if (animctrl_isAt(anim_ctrl, 0.0909f)) func_8029E070(1);
if (animctrl_isAt(anim_ctrl, 0.6818f)) func_8029E070(0);
}//L802B4E70
if (sp18 & 2) {
if (animctrl_isAt(anim_ctrl, 0.7727f)) func_8029E070(1);
if (animctrl_isAt(anim_ctrl, 0.9999f)) func_8029E070(0);
}//L802B50E4
} else if (sp18 & 0x20) {
if (animctrl_getIndex(anim_ctrl) == ASSET_95_ANIM_BSSTAND_KAZOOIE_PECK) {
func_802B4A10(anim_ctrl);
if (animctrl_isAt(anim_ctrl, 0.37f)) {
animctrl_reset(anim_ctrl);
animctrl_setTransitionDuration(anim_ctrl, 0.1f);
animctrl_setIndex(anim_ctrl, ASSET_F6_ANIM_BSSTAND_PULL_KAZOOIE);
animctrl_setDuration(anim_ctrl, 5.0f);
animctrl_setPlaybackType(anim_ctrl, ANIMCTRL_ONCE);
func_802875AC(anim_ctrl, "bsstand.c", 0x170);
}
} else {
if (animctrl_isAt(anim_ctrl, 0.069f)) func_80299D2C(SFX_4B_GULPING, 1.4f, 0x4650);
if (animctrl_isAt(anim_ctrl, 0.1677f)) func_80299D2C(SFX_8B_KAZOOIE_RAWW, 1.0f, 0x4650);
if (animctrl_isAt(anim_ctrl, 0.2441f)) func_80299D2C(SFX_8B_KAZOOIE_RAWW, 1.03f, 0x4650);
if (animctrl_isAt(anim_ctrl, 0.3141f)) func_80299D2C(SFX_8B_KAZOOIE_RAWW, 1.06f, 0x4650);
if (animctrl_isAt(anim_ctrl, 0.3859f)) func_80299D2C(SFX_8B_KAZOOIE_RAWW, 1.5f, 0x7D00);
if (animctrl_isAt(anim_ctrl, 0.414f)) func_80299CF4(SFX_2D_KABOING, 1.0f, 0x4650);
if (animctrl_isAt(anim_ctrl, 0.55f)) func_80299CF4(SFX_A3_BANJO_DOUBLE_COUGH, 1.0f, 0x6D60);
if (animctrl_isAt(anim_ctrl, 0.6187f)) func_80299D2C(SFX_A0_COUGHING, 1.7f, 0x4650);
if (animctrl_isAt(anim_ctrl, 0.7108f)) func_80299D2C(SFX_A0_COUGHING, 1.6f, 0x4650);
if (animctrl_isAt(anim_ctrl, 0.7927f)) func_80299D2C(SFX_A0_COUGHING, 1.5f, 0x4650);
}
} else /*L802B50D4*/if ((sp18 & 0x10) != 0) {
func_802B4A10(anim_ctrl);
}
if (animctrl_isAt(anim_ctrl, 0.9999f) != 0) {
D_8037D540 = func_802B4870(D_8037D540);
sp18 = D_80364D20[D_8037D540];
if (sp18 & 0x10) {
func_8028A180(ASSET_95_ANIM_BSSTAND_KAZOOIE_PECK, 5.5f);
_func_802875AC(anim_ctrl, "bsstand.c", 0x1AB);
func_8029E070(1);
func_802900FC();
} else if (sp18 & 0x20) {
func_8028A180(ASSET_95_ANIM_BSSTAND_KAZOOIE_PECK, 5.5f);
func_8029E070(1);
func_802900FC();
} else if (sp18 & 8) {
if (animctrl_getIndex(anim_ctrl) == ASSET_6F_ANIM_BSSTAND_IDLE) {
sp1C = animctrl_getAnimTimer(anim_ctrl);
} else {
sp1C = 0.0f;
func_802900B4();
}
animctrl_reset(anim_ctrl);
animctrl_setIndex(anim_ctrl, ASSET_6F_ANIM_BSSTAND_IDLE);
animctrl_setDuration(anim_ctrl, 5.5f);
animctrl_setPlaybackType(anim_ctrl, ANIMCTRL_LOOP);
func_8028774C(anim_ctrl, sp1C);
func_802875AC(anim_ctrl, "bsstand.c", 0x1C3);
func_8029E070(0);
}
}
if (func_8028B094() != 0) {
next_state = BS_2F_FALL;
}
bs_setState(next_state);
}
void bsstand_end(void){
func_8029E070(0);
func_802900FC();
func_80292EA4();
}
//bsStand_Land_init
void bsstand_landing_init(void){
func_8029C7F4(1,1,1,2);
func_80297970(0.0f);
}
//bsStand_Land_update
void bsstand_landing_update(void){
s32 sp1C = 0;
AnimCtrl * sp18 = _player_getAnimCtrlPtr();
if(animctrl_getIndex(sp18) == ASSET_D2_ANIM_BSSPLAT){
if(animctrl_isAt(sp18, 0.8264f)){
func_80299CF4(SFX_6F_BANJO_HEADSCRATCH, 1.0f, 0x36b0);
}
//L802B52F8
if(animctrl_isAt(sp18, 0.8864f)){
func_80299CF4(SFX_6F_BANJO_HEADSCRATCH, 1.0f, 0x36b0);
}
}
//L802B531C
if(animctrl_isStopped(sp18))
sp1C = BS_1_IDLE;
bs_setState(func_802B488C(sp1C));
}
///BREAK???
void func_802B5350(void){
s32 sp1C = bs_getInterruptType();
if(sp1C == BS_INTR_D_SURF){
bs_setState(0x52);
}
if(sp1C == 0x7){
if(bsStoredState_getTransformation() != TRANSFORM_1_BANJO)
func_8029A86C(1);
else{
func_802948F8(baMarker_8028D688());
bs_setState(BS_3A_CARRY_IDLE);
}
}
else if(sp1C == 0x12){//L802B53D0
func_8029A86C(1);
if( bsStoredState_getTransformation() == TRANSFORM_1_BANJO && !miscflag_isTrue(0xF) && stateTimer_isDone(STATE_TIMER_0_UNKNOWN)){
func_8028DE6C(baMarker_getCarriedObjectActorId());
func_8029A86C(2);
}
}
else if(sp1C == 0x8){//L802B5438
func_8029A86C(2);
bs_setState(BS_3C_TALK);
}else{
func_802948E0();
func_80296608();
}
}