Files
banjo-kazooie/src/core2/code_EF50.c
2024-06-17 01:10:20 -05:00

560 lines
15 KiB
C

#include <ultra64.h>
#include "functions.h"
#include "variables.h"
#include "core2/ba/physics.h"
extern void func_80256E24(f32[3], f32, f32, f32, f32, f32);
extern f32 player_getYaw(void);
extern void chJigsawDance_setState(Actor *, s32);
extern void bsjig_setJiggyMarkerPtr(ActorMarker *);
typedef struct{
f32 unk0;
f32 unk4;
f32 unk8[3];
ActorMarker *unk14;
s32 unk18;
s32 unk1C;
} struct_EE40;
void func_80296C90(f32 arg0);
void func_80296C9C(f32 arg0);
void func_80296CA8(ActorMarker *arg0);
void func_80296CB4(s32 arg0);
void func_80296CC0(f32 arg0[3]);
/* .bss */
struct_EE40 D_8037C3E0;
struct_EE40 D_8037C400[5];
/* .code */
enum bs_e func_80295EE0(enum bs_e arg0){
int current_state;
f32 pad30;
s32 sp2C;
s32 sp28;
s16 sp20[3];
Actor *sp1C;
sp2C = 0;
sp28 = 0;
current_state = bs_getState();
if(player_getTransformation() != TRANSFORM_1_BANJO || func_8028EE84() != BSWATERGROUP_0_NONE){
sp2C = 1;
}
if(bsjig_inJiggyJig(current_state)){
sp28 = 1;
}
switch(func_8028ECAC()){
case 6://L80295F5C
if(D_8037C3E0.unk18 != ASSET_3E_ANIM_BSBFLY_BEAKBOMB_CRASH){
sp2C++;
}
break;
case 9://L80295F78
sp2C++;
break;
}
if(sp28){
func_8029CDA0();
}
else{
miscflag_set(7);
if(sp2C){
func_8029CCC4();
}
else{
ml_vec3f_to_vec3h(sp20, D_8037C3E0.unk8);
sp1C = func_803282AC(ACTOR_5A_JIGSAW_DANCE, sp20, 0);
chJigsawDance_setState(sp1C, 3);
bsjig_setJiggyMarkerPtr(sp1C->marker);
sp1C->unk38_31 = D_8037C3E0.unk18;
arg0 = func_8029B504();
}
}
return arg0;
}
enum bs_e __get_rebound_state_id(void){
switch(bsStoredState_getTransformation()){
case TRANSFORM_3_PUMPKIN:// L8029606C
return BS_PUMPKIN_BOUNCE;
case TRANSFORM_2_TERMITE:// L80296074
return BS_ANT_BOUNCE;
case TRANSFORM_5_CROC:// L8029607C
return BS_CROC_BOUNCE;
case TRANSFORM_4_WALRUS:// L80296084
return BS_WALRUS_BOUNCE;
case TRANSFORM_6_BEE:// L8029608C
return BS_BEE_BOUNCE;
case TRANSFORM_1_BANJO:// L80296094
default:
if(func_8028ECAC() == BSGROUP_A_FLYING)
return BS_18_FLY_KNOCKBACK;
return BS_56_RECOIL;
}
}
void func_802960C4(s32 arg0){
s32 sp3C[3];
f32 sp30[3];
f32 sp24[3];
switch(arg0){
case 0://L802960F4
func_80330FCC(D_8037C3E0.unk14, sp3C);
ml_vec3w_to_vec3f(sp30, sp3C);
func_80294A64(sp30);
break;
case 1: //L80296120
func_80294A64(D_8037C3E0.unk8);
break;
case 2: //L80296134
player_getPosition(sp30);
func_802589E4(sp24, player_getYaw(), 100.0f);
sp24[1] = 0.0f;
sp30[0] += sp24[0];
sp30[1] += sp24[1];
sp30[2] += sp24[2];
func_80294A64(sp30);
break;
case 3: //L80296198
func_80294A64(D_8037C3E0.unk8);
break;
}
}
void func_802961B4(s32 arg0){
s32 sp2C[3];
f32 sp20[3];
func_80330FCC(func_80291660(), sp2C);
sp20[0] = sp2C[0];
sp20[1] = sp2C[1];
sp20[2] = sp2C[2];
func_80294A64(sp20);
if(arg0){
item_dec(ITEM_14_HEALTH);
}
}
void func_8029622C(void){
f32 sp34[3];
f32 sp28[3];
_player_getPosition(sp28);
func_80256E24(sp34, 0.0f, yaw_get(), 0.0f, 0.0f, 100.0f);
sp28[0] += sp34[0];
sp28[1] += sp34[1];
sp28[2] += sp34[2];
func_80294A64(sp28);
item_dec(ITEM_14_HEALTH);
}
enum bs_e func_802962BC(u32 arg0){
u32 sp24;
int sp1C;
sp24 = item_getCount(ITEM_14_HEALTH);
sp1C = arg0 < 1 && sp24 != 0;
switch(bsStoredState_getTransformation()){
case TRANSFORM_2_TERMITE: //L80296314
if(sp1C)
return BS_3E_ANT_OW;
else
return BS_43_ANT_DIE;
case TRANSFORM_3_PUMPKIN: //L8029632C
if(sp1C)
return BS_4D_PUMPKIN_OW;
else
return BS_4E_PUMPKIN_DIE;
case TRANSFORM_5_CROC: //L80296344
if(sp1C)
return BS_CROC_OW;
else
return BS_CROC_DIE;
case TRANSFORM_4_WALRUS: //L8029635C
if(sp1C)
return BS_WALRUS_OW;
else
return BS_WALRUS_DIE;
case TRANSFORM_6_BEE: //L80296374
if(sp1C)
return BS_BEE_OW;
return BS_BEE_DIE;
case TRANSFORM_1_BANJO: //L8029638C
default:
if(sp1C){
if(bsbtrot_inSet(bs_getState()))
return BS_BTROT_OW;
if(func_8028EE84() == BSWATERGROUP_2_UNDERWATER)
return BS_7F_DIVE_OW;
if(func_8028ECAC() == BSGROUP_A_FLYING)
return BS_FLY_OW;
return BS_E_OW;
}
return BS_41_DIE;
}
}
void func_80296404(s32 arg0){
int i;
for(i = 0; i <5; i++){
if(D_8037C400[i].unk1C == arg0)
return;
}
for(i = 0; i <5; i++){
if(D_8037C400[i].unk1C == 0){
D_8037C400[i].unk1C = arg0;
D_8037C400[i].unk18 = D_8037C3E0.unk18;
D_8037C400[i].unk0 = D_8037C3E0.unk0;
D_8037C400[i].unk4 = D_8037C3E0.unk4;
D_8037C400[i].unk14 = D_8037C3E0.unk14;
ml_vec3f_copy(D_8037C400[i].unk8, D_8037C3E0.unk8);
return;
}
}
}
void func_802964B8(void){
int i;
s32 tmp;
for(i = 0; i < 5; i++){
if(D_8037C400[i].unk1C){
func_80296C90(D_8037C400[i].unk0);
func_80296C9C(D_8037C400[i].unk4);
func_80296CA8(D_8037C400[i].unk14);
func_80296CB4(D_8037C400[i].unk18);
func_80296CC0(D_8037C400[i].unk8);
tmp = D_8037C400[i].unk1C;
D_8037C400[i].unk1C = 0;
bs_checkInterrupt(tmp);
break;
}
}
}
f32 func_8029653C(void){
return D_8037C3E0.unk0;
}
f32 func_80296548(void){
return D_8037C3E0.unk4;
}
ActorMarker *func_80296554(void){
return D_8037C3E0.unk14;
}
s32 func_80296560(void){
return D_8037C3E0.unk18;
}
void func_8029656C(f32 dst[3]){
ml_vec3f_copy(dst, D_8037C3E0.unk8);
}
void func_80296590(void){
s32 temp_a0 = bs_getInterruptType();
switch (temp_a0) {
case 0xF : //L802965C8
case 0x13 : //L802965C8
case 0x26 : //L802965C8
case 0x2a : //L802965C8
case 0x2c : //L802965C8
case 0x30 : //L802965C8
func_80296404(temp_a0);
break;
case 0x31 : //L802965D8
case 0x32 : //L802965D8
case 0x33 : //L802965D8
func_80296608();
return;
default:
break;
}
func_8029A86C(1);
bs_setState(0);
}
void func_80296608(void){
s32 sp2C;
enum bs_e current_state;
enum bs_e next_state;
s32 sp1C;
sp2C = 1;
next_state = 0;
current_state = bs_getState();
switch(bs_getInterruptType()){
case BS_INTR_18_CROC_ATE_WRONG: //L80296654
func_802AD318();
sp2C = 2;
break;
case BS_INTR_A: //L8029666C
sp2C = 2;
if(func_8028B2E8()){
next_state = badrone_transform();
}
else{
miscflag_set(0x19);
next_state = func_8029B504();
}
break;
case BS_INTR_36_DINGPOT: //L802966A8
next_state = BS_42_DINGPOT;
sp2C = 2;
break;
case BS_INTR_24: //L802966B8
func_802960C4(0);
next_state = __get_rebound_state_id();
sp2C = 2;
break;
case BS_INTR_23: //L802966D8
func_802960C4(1);
next_state = __get_rebound_state_id();
sp2C = 2;
break;
case BS_INTR_2D: //L802966F8
func_802960C4(3);
next_state = __get_rebound_state_id();
sp2C = 2;
break;
case BS_INTR_5: //L80296718
func_802961B4(0);
next_state = __get_rebound_state_id();
sp2C = 2;
break;
case BS_INTR_2C: //L80296738
item_set(ITEM_14_HEALTH, 0);
func_80291930(1);
sp2C = 2;
break;
case BS_INTR_13: //L80296760
item_set(ITEM_14_HEALTH, 0);
/* missing break ? */
case BS_INTR_B: //L8029676C
func_8029622C();
next_state = func_802962BC(0);
sp2C = 2;
break;
case BS_INTR_26: //L8029678C
item_set(ITEM_14_HEALTH, 0);
func_8029B930();
func_8029B890();
sp2C = 2;
break;
case BS_INTR_19: //L802967BC
next_state = func_8029B504();
sp2C = 2;
break;
case BS_INTR_11_DROWN: //L802967D4
next_state = BS_54_SWIM_DIE;
sp2C = 2;
break;
case BS_INTR_17: //L802967E4
func_80294A58(D_8037C3E0.unk18);
next_state = BS_70_CROC_EAT_GOOD;
sp2C = 2;
break;
case BS_INTR_2F_LOGGO: //L80296800
next_state = BS_40_PUMPKIN_FLUSH;
sp2C = 2;
break;
case BS_INTR_9: //L80296810
sp2C = 2;
next_state = func_80295EE0(0);
break;
case BS_INTR_1A: //L80296828
if(!bsbtrot_inSet(current_state)){
next_state = func_8029B504();
}
sp2C = 2;
break;
case BS_INTR_1B: //L80296850
next_state = func_8029B504();
sp2C = 2;
break;
case BS_INTR_1F: //L80296868
if(func_80297C6C() != 3 && baMarker_isCollidable()){
case BS_INTR_31: //L8029688C
func_802960C4(2);
item_dec(ITEM_14_HEALTH);
next_state = func_802962BC(0);
sp2C = 2;
}
break;
case BS_INTR_21: //L802968B4
if(func_80297C6C() != 3){
case BS_INTR_33: //L802968C8
func_802960C4(0);
item_dec(ITEM_14_HEALTH);
next_state = func_802962BC(0);
sp2C = 2;
}
break;
case BS_INTR_20: //L802968F0
if(func_80297C6C() != 3){
func_802960C4(1);
item_dec(ITEM_14_HEALTH);
next_state = func_802962BC(0);
sp2C = 2;
}
break;
case BS_INTR_2E: //L8029692C
func_802960C4(3);
item_dec(ITEM_14_HEALTH);
next_state = func_802962BC(0);
sp2C = 2;
break;
case BS_INTR_4: //L80296954
func_802961B4(1);
next_state = func_802962BC(0);
sp2C = 2;
break;
case BS_INTR_14: //L80296974
next_state = BS_5_JUMP;
sp2C = 2;
break;
case BS_INTR_35: //L80296984
miscflag_set(0x1a);
next_state = func_8029B504();
sp2C = 2;
break;
case BS_INTR_34: //L802969A4
next_state = badrone_802926E8();
sp2C = 2;
break;
case BS_INTR_27_BANJO_SLED: //L802969BC
next_state = BS_7C_SLED;
sp2C = 2;
break;
case BS_INTR_C_CLIMB: //L802969CC
sp1C = player_getTransformation();
sp1C = !((sp1C == TRANSFORM_1_BANJO) || (sp1C == TRANSFORM_7_WISHWASHY));
if(
!func_80298850()
&& !sp1C
&& !miscflag_isTrue(0xf)
&& !func_8028B2E8()
){
next_state = BS_4F_CLIMB_IDLE;
sp2C = 2;
}
break;
case BS_INTR_1E: //L80296A44
if(func_8028ABB8()){
sp2C = 2;
next_state = func_8029BE5C();
}
break;
case BS_INTR_1D: //L80296A68
if(func_8028ABB8()){
sp2C = 2;
next_state = func_8029BF4C();
}
break;
case BS_INTR_1C: //L80296A8C
if(func_8028ABB8()){
sp2C = 2;
next_state = func_8029BED4();
}
break;
case BS_INTR_15: //L80296AB0
sp2C = 2;
if(bsbfly_inSet(current_state)){
next_state = BS_24_FLY;
}
else{
switch(func_8028EE84()){
case BSWATERGROUP_1_SURFACE:
next_state = BS_2D_SWIM_IDLE;
break;
case BSWATERGROUP_2_UNDERWATER:
next_state = BS_2B_DIVE_IDLE;
break;
case BSWATERGROUP_0_NONE://L80296B0C
if(func_8028B2E8())
next_state = bs_getIdleState();
else
next_state = func_8029BA80();
break;
}
}
baphysics_set_target_horizontal_velocity(0.0f);
baphysics_set_velocity(0);
break;
case BS_INTR_25: //L80296B54
sp2C = 2;
next_state = func_8029BED4();
break;
case BS_INTR_F: //L80296B68
miscflag_set(6);
next_state = func_8029B504();
sp2C = 2;
break;
case BS_INTR_30: //L80296B88
item_set(ITEM_14_HEALTH, 0);
miscflag_set(6);
next_state = func_8029B504();
sp2C = 2;
break;
case BS_INTR_37: //L80296BB4
next_state = badrone_vanish();
sp2C = 2;
break;
case BS_INTR_2A: //L80296BCC
sp2C = 2;
next_state = func_8029B504();
miscflag_set(MISC_FLAG_14_LOSE_BOGGY_RACE);
break;
case BS_INTR_27_WALRUS_SLED: //L80296BEC
if(player_getTransformation() == TRANSFORM_4_WALRUS){
next_state = BS_7D_WALRUS_SLED;
sp2C = 2;
}
break;
}//L80296C0C
func_8029A86C(sp2C);
bs_setState(next_state);
}
void func_80296C30(void){
int i;
D_8037C3E0.unk18 = 0;
D_8037C3E0.unk14 = 0;
ml_vec3f_clear(D_8037C3E0.unk8);
for(i = 0; i<5; i++)
D_8037C400[i].unk1C = 0;
}
void func_80296C90(f32 arg0){
D_8037C3E0.unk0 = arg0;
}
void func_80296C9C(f32 arg0){
D_8037C3E0.unk4 = arg0;
}
void func_80296CA8(ActorMarker *arg0){
D_8037C3E0.unk14 = arg0;
}
void func_80296CB4(s32 arg0){
D_8037C3E0.unk18 = arg0;
}
void func_80296CC0(f32 arg0[3])
{ ml_vec3f_copy(D_8037C3E0.unk8, arg0);
}