The first commit

This commit is contained in:
Banjo Kazooie
2022-07-15 17:09:41 -05:00
commit dd13d34074
1087 changed files with 391897 additions and 0 deletions

351
src/core2/animctrl.c Normal file
View File

@@ -0,0 +1,351 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
#include "core2/animctrl.h"
#include "animation.h"
extern u32 D_A0000238;
/* .code */
void animctrl_80286F90(AnimCtrl *this){
Animation *anim;
f32 duration;
if(this->smooth_transition){
anim = animctrl_getAnimPtr(this);
duration = anim_getDuration(anim);
if( duration < 1.0f ){
anim_setDuration(anim, min_f(1.0f, time_getDelta()/animctrl_getTransistionDuration(this) + duration));
}
}
}
static void __animctrl_update_looped(AnimCtrl *this){
Animation *anim;
f32 delta;
f32 tmp;
anim = animctrl_getAnimPtr(this);
animctrl_80286F90(this);
this->timer = anim_getTimer(anim);
delta = time_getDelta() / animctrl_getDuration(this);
if(this->playback_direction == 0){
delta = -delta;
}
tmp = this->timer + delta;
if(tmp < 0.0f){
tmp += 1.0f;
}
tmp -= (f32)(s32)tmp;//0.0f to 1.0f
anim_setTimer(anim, tmp);
}
void func_802870E0(AnimCtrl *this){
Animation *anim;
f32 delta;
f32 tmpf14;
f32 f_range;
f32 f_percent;
anim = animctrl_getAnimPtr(this);
animctrl_80286F90(this);
this->timer = anim_getTimer(anim);;
delta = time_getDelta() / animctrl_getDuration(this);
if(this->playback_direction == 0){
delta = -delta;
}
tmpf14 = this->timer + delta;
if(this->subrange_end <= tmpf14){
f_range = this->subrange_end - this->subrange_start;
f_percent = (tmpf14 - this->subrange_start)/f_range;
tmpf14 = this->subrange_start + (f_percent - (f32)(s32)f_percent)*f_range;
}
anim_setTimer(anim, tmpf14);
}
void func_802871A4(AnimCtrl *this){
Animation *anim;
f32 phi_f0;
f32 phi_f2;
anim = animctrl_getAnimPtr(this);
animctrl_80286F90(this);
this->timer = anim_getTimer(anim);
phi_f2 = time_getDelta() / animctrl_getDuration(this);
if (this->playback_direction == 0) {
phi_f2 = -phi_f2;
}
phi_f0 = this->timer + phi_f2;
if (phi_f0 < 0.0f) {
phi_f0 = 0.0f;
animctrl_setPlaybackType(this, ANIMCTRL_STOPPED);
} else {
if ((this->subrange_end < phi_f0) || (0.999999 < (f64) phi_f0)) {
if(this->subrange_end < phi_f0)
phi_f0 = this->subrange_end;
if(0.999999 < (f64) phi_f0)
phi_f0 = 0.9999989867210388f; // D_80373E00
animctrl_setPlaybackType(this, ANIMCTRL_STOPPED);
} else {
phi_f0 = phi_f0 - (f32) (s32) phi_f0;
}
}
anim_setTimer(anim, phi_f0);
}
AnimCtrl *animctrl_new(s32 arg0){ //new
ActorAnimCtrl *this;
this = (ActorAnimCtrl *)malloc( func_80289680() + 0x28);
this->animctrl.animation = &this->animation;
func_802896EC(&this->animation, 1);
this->animctrl.playback_type = 0;
this->animctrl.index = 0;
this->animctrl.unk25 = 1;
this->animctrl.timer = 0.0f;
this->animctrl.unk18 = 0.0f;
func_80287784(&this->animctrl, func_8030C77C());
animctrl_setSubRange(&this->animctrl, 0.0f, 1.0f);
animctrl_setDuration(&this->animctrl, 2.0f);
animctrl_setTransitionDuration(&this->animctrl, 0.2f);
animctrl_setSmoothTransition(&this->animctrl, 1);
animctrl_setDirection(&this->animctrl, mvmt_dir_forwards);
return &this->animctrl;
}
void animctrl_free(AnimCtrl * this){ //free
func_802896A0(this->animation);
free(this);
}
void animctrl_update(AnimCtrl *this){//update
switch (this->playback_type)
{
case 0:
break;
case ANIMCTRL_ONCE: //once
func_802871A4(this);
break;
case ANIMCTRL_LOOP: //loop
__animctrl_update_looped(this);
break;
case ANIMCTRL_SUBRANGE_LOOP:
func_802870E0(this);
break;
case ANIMCTRL_STOPPED: //stopped
animctrl_80286F90(this);
break;
}
}
AnimCtrl *animctrl_defrag(AnimCtrl *this){ //realloc
ActorAnimCtrl *full_struct;
full_struct = (ActorAnimCtrl *)defrag(this);
full_struct->animctrl.animation = &full_struct->animation;
return &full_struct->animctrl;
}
void animctrl_setIndex(AnimCtrl *this, enum asset_e index){
this->index = index;
}
Animation *animctrl_getAnimPtr(AnimCtrl *this){
return this->animation;
}
void func_8028746C(AnimCtrl *this, void (* arg1)(s32,s32)){
anim_80289790(this->animation, arg1);
}
void func_8028748C(AnimCtrl *this, s32 arg1){
anim_80289798(this->animation, arg1);
}
void animctrl_reset(AnimCtrl *this){
this->playback_type = ANIMCTRL_LOOP;
this->unk25 = 1;
this->timer = 0.0;
this->unk18 = 0.0;
animctrl_setSmoothTransition(this, 1);
animctrl_setSubRange(this, 0.0, 1.0);
animctrl_setDuration(this, 2.0);
animctrl_setTransitionDuration(this, 0.2);
animctrl_setDirection(this, mvmt_dir_forwards);
}
void func_8028752C(AnimCtrl *this){
if(this->unk25){
if(this->playback_direction)
anim_setTimer(this->animation, 0.0f);
else
anim_setTimer(this->animation, 0.99999899f);
}
else
anim_setTimer(this->animation, this->unk18);
this->timer = anim_getTimer(this->animation);
}
void _func_802875AC(AnimCtrl * this, char *file, s32 line){
if(this->smooth_transition && anim_getIndex(this->animation) != 0){
func_80289674(this->animation);
anim_setIndex(this->animation, this->index);
func_8028752C(this);
anim_setDuration(this->animation, 0.0f);
} else{
anim_8028980C(this->animation);
anim_setIndex(this->animation, this->index);
func_8028752C(this);
anim_setDuration(this->animation, 1.0f);
}
}
void animctrl_setAnimTimer(AnimCtrl *this, f32 timer){
anim_setTimer(this->animation, timer);
}
void animctrl_setPlaybackType(AnimCtrl *this, enum animctrl_playback_e arg1){
this->playback_type = arg1;
}
void animctrl_setDirection(AnimCtrl *this, s32 arg1){
this->playback_direction = arg1;
}
void animctrl_setSmoothTransition(AnimCtrl *this, s32 arg1){
this->smooth_transition = arg1;
}
void animctrl_setDuration(AnimCtrl *this, f32 arg1){
if(IO_READ(0x238) - 0x10000003){
arg1 += 3.0f;
}
this->animation_duration = arg1;
}
void animctrl_setTransitionDuration(AnimCtrl *this, f32 arg1){
this->transition_duration = arg1;
}
void animctrl_setSubRange(AnimCtrl *this, f32 start, f32 end){
this->subrange_start = start - (f32)(s32)start;
this->subrange_end = (end != 1.0)? end - (f32)(s32)end : end;
}
void animctrl_getSubRange(AnimCtrl *this, f32 *startPtr, f32 *endPtr){
*startPtr = this->subrange_start;
*endPtr = this->subrange_end;
}
void func_8028774C(AnimCtrl *this, f32 arg1){
if(arg1 == 1.0)
arg1 = 0.9999989867210388f; // D_80373E18
this->unk18 = arg1;
this->unk25 = 0;
}
void func_80287784(AnimCtrl *this, s32 arg1){
this->unk23 = arg1;
this->unk24 = 0;
}
enum asset_e animctrl_getIndex(AnimCtrl *this){
return anim_getIndex(this->animation);
}
enum animctrl_playback_e animctrl_getPlaybackType(AnimCtrl *this){
return this->playback_type;
}
s32 animctrl_isPlayedForwards(AnimCtrl *this){
return this->playback_direction;
}
s32 animctrl_isSmoothTransistion(AnimCtrl *this){
return this->smooth_transition;
}
f32 animctrl_getDuration(AnimCtrl *this){
return this->animation_duration;
}
f32 animctrl_getTransistionDuration(AnimCtrl *this){
return this->transition_duration;
}
f32 animctrl_getAnimTimer(AnimCtrl *this){
return anim_getTimer(this->animation);
}
f32 animctrl_getTimer(AnimCtrl *this){
return this->timer;
}
void animctrl_setTimer(AnimCtrl *this, f32 arg1){
this->timer = arg1;
}
s32 animctrl_8028780C(AnimCtrl *this, s32 arg1){
return 0;
}
s32 func_8028781C(AnimCtrl *this, f32 *arg1, s32 arg2){
s32 map;
map = map_get();
if( map != MAP_1E_CS_START_NINTENDO
&& map != MAP_1F_CS_START_RAREWARE
&& map != MAP_20_CS_END_NOT_100
&& this->unk23 !=0
&& arg1 != NULL
){
this->unk24 = this->unk24 -1;
if(this->unk24 == 0xFF){
this->unk24 = animctrl_8028780C(arg1, arg2);
}
else{
anim_802897A0(this->animation);
return;
}
}
func_802895F8(this->animation);
}
s32 animctrl_isStopped(AnimCtrl *this){
return animctrl_getPlaybackType(this) == ANIMCTRL_STOPPED;
}
int animctrl_isAt(AnimCtrl *this, f32 arg1){
int retval;
f32 f0 = anim_getTimer(this->animation);
if(f0 == this->timer){
return 0;
}
else{
if(this->playback_direction != 0){ //forward direction
if(this->timer < f0){
return this->timer <= arg1 && arg1 < f0; //arg1 between last animation time and new animation time
}else{
return this->timer <= arg1 || arg1 < f0; //animation just looped, arg1 outside of loop
}
}else{
if(f0 < this->timer){
return arg1 <= this->timer && f0 < arg1;
}else{
return arg1 <= this->timer || f0 < arg1;
}
}
}
return retval;
}
s32 animctrl_isContiguous(AnimCtrl *this){
return (s32)this->animation - (s32) this == 0x28;
}

485
src/core2/bs/ant.c Normal file
View File

@@ -0,0 +1,485 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.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 D_8037D294;
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 = func_8029B30C();
if(func_8029B300() == 0){
func_80297970(0.0f);
}
else{
func_80297970(func_80257C48(sp1C, D_80364960, D_80364964));
}
}
void func_8029E4EC(void){
if(!bsant_inSet(bs_getNextState())){
func_8029B0C0();
func_8029E070(0);
func_8029E064(0);
miscflag_clear(3);
miscflag_clear(4);
func_80293D74();
}
func_80289F10(1);
}
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_ANT_DRONE);
}
void bsant_idle_init(void){
func_8029E554();
func_8028A010(ANIM_TERMITE_IDLE, 1.2f);
func_8029C7F4(1,1,1,2);
func_80297970(0.0f);
pitch_setAngVel(1000.0f, 12.0f);
roll_setAngularVelocity(1000.0f, 12.0f);
miscflag_set(3);
miscflag_set(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(func_80294F78())
new_state = func_802926C0();
if(func_8029B300() > 0)
new_state = BS_ANT_WALK;
if(button_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();
func_8028A010(ANIM_TERMITE_WALK, 0.8f);
func_8029C7F4(2,1,1,2);
func_80289EC8(D_80364960, D_80364964, D_80364968, D_8036496C);
func_802900B4();
}
void bsant_walk_update(void){
enum bs_e sp1C = 0;
AnimCtrl * aCtrl = _player_getAnimCtrlPtr();
func_80299628(0);
func_8029E48C();
if(animctrl_isAt(aCtrl, 0.7781f))
func_8029E448(0);
if(animctrl_isAt(aCtrl, 0.2781f))
func_8029E448(1);
if(func_8029B300() == 0 && func_80297C04(1.0f))
sp1C = BS_35_ANT_IDLE;
if(func_8028B094())
sp1C = BS_38_ANT_FALL;
if(button_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 = _player_getAnimCtrlPtr();
func_8029E554();
animctrl_reset(aCtrl);
animctrl_setIndex(aCtrl, ANIM_TERMITE_JUMP);
animctrl_setDuration(aCtrl, 1.0f);
animctrl_setTransitionDuration(aCtrl, 0.1f);
func_8028774C(aCtrl, 0.2987f);
animctrl_setSubRange(aCtrl, 0.0f, 0.4423f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
func_802875AC(aCtrl, "bsant.c", 0x17c);
func_8029C7F4(1,1,3,6);
if(func_8029B2E8() != 0.0f)
yaw_setIdeal(func_8029B33C());
func_8029797C(yaw_getIdeal());
func_8029E48C();
func_802979AC(yaw_getIdeal(), func_80297A64());
player_setYVelocity(D_80364970);
gravity_set(D_80364974);
func_8029E3E0();
D_8037D294 = 0;
}
void bsant_jump_update(void){
enum bs_e sp2C = 0;
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
f32 sp1C[3];
func_8029E48C();
_get_velocity(sp1C);
if(button_released(BUTTON_A) && 0.0f < sp1C[1])
gravity_reset();
switch(D_8037D294){
case 0://L8029EA88
if(animctrl_isStopped(aCtrl)){
animctrl_setDuration(aCtrl, 5.0f);
func_8028A37C(0.5026f);
D_8037D294 = 1;
}
break;
case 1://L8029EABC
if(func_8028B254(0x82)){
animctrl_setDuration(aCtrl, 1.0f);
func_8028A37C(1.0f);
D_8037D294 = 2;
}
break;
case 2://L8029EAF4
func_80299628(0);
if(func_8028B2E8()){
func_8029C5E8();
D_8037D294 = 3;
}
break;
case 3://L8029EB24
if(animctrl_isStopped(aCtrl))
sp2C = BS_35_ANT_IDLE;
break;
}//L8029EB38
if(func_8028B2E8()){
func_80297970(0.0f);
if(func_8029B300() > 0)
sp2C = BS_ANT_WALK;
if(button_pressed(BUTTON_A))
sp2C = BS_ANT_JUMP;
}
bs_setState(sp2C);
}
void bsant_jump_end(void){
gravity_reset();
func_8029E4EC();
}
void bsant_fall_init(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
func_8029E554();
D_8037D298 = 0;
animctrl_reset(aCtrl);
animctrl_setIndex(aCtrl, ANIM_TERMITE_JUMP);
animctrl_setDuration(aCtrl, 1.9f);
func_8028774C(aCtrl, 0.4423f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_STOPPED);
func_802875AC(aCtrl, "bsant.c", 0x208);
func_8029C7F4(1,1,3,6);
D_8037D294 = 0;
}
void bsant_fall_update(void){
enum bs_e sp2C = 0;
AnimCtrl * aCtrl = _player_getAnimCtrlPtr();
f32 sp1C[3];
func_80299628(0);
if(D_8037D298)
func_8029E48C();
_get_velocity(sp1C);
switch(D_8037D294){
case 0:
if(func_8028B254(0x5A)){
animctrl_setDuration(aCtrl, 2.0f);
func_8028A37C(1.0f);
D_8037D294 = 1;
}
break;
case 1:
break;
}
if(func_8028B2E8()){
if(miscflag_isTrue(0x19))
sp2C = func_80292738();
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 = _player_getAnimCtrlPtr();
f32 sp38;
f32 sp2C[3];
f32 sp20[3];
func_8029E554();
animctrl_reset(aCtrl);
animctrl_setIndex(aCtrl, ANIM_TERMITE_OW);
animctrl_setDuration(aCtrl, 1.4f);
animctrl_setSubRange(aCtrl, 0.0f, 0.4899f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
func_802875AC(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();
func_80297970(200.0f);
func_8029797C(sp38);
func_802979AC(sp38, func_80297A64());
func_8029C7F4(1,1,2,3);
player_setYVelocity(510.0f);
gravity_set(-1200.0f);
func_8028D5DC();
func_80292E48();
D_8037D294 = 0;
}
static void __bsant_recoil_update(void){
enum bs_e sp1C = 0;
if(baanim_isAt(0.5f))
func_80292EA4();
switch(D_8037D294){
case 0:
if(func_8028B254(0x5a)){
func_8028A37C(1.0f);
D_8037D294 = 1;
}
break;
case 1:
break;
}
if(func_8028B2E8())
sp1C = BS_35_ANT_IDLE;
bs_setState(sp1C);
}
static void __bsant_recoil_end(void){
func_80297CA8();
gravity_reset();
func_8028D5F4();
func_80292EA4();
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 = _player_getAnimCtrlPtr();
f32 sp38;
f32 sp2C[3];
f32 sp20[3];
func_8029E554();
func_8029B930();
animctrl_reset(aCtrl);
animctrl_setSmoothTransition(aCtrl, 0);
animctrl_setIndex(aCtrl, ANIM_TERMITE_DIE);
animctrl_setSubRange(aCtrl, 0.0f, 0.523f);
animctrl_setDuration(aCtrl, 1.6f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
func_802875AC(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();
func_80297970(D_8037D290);
func_8029797C(sp38);
func_802979AC(sp38, func_80297A64());
func_8029C7F4(1,1,2,3);
player_setYVelocity(510.0f);
gravity_set(-1200.0f);
pitch_setAngVel(1000.0f, 12.0f);
func_802914CC(0xd);
func_802BF2C0(30.0f);
func_8029C984();
D_8037D294 = 0;
func_8028D5DC();
func_80292E48();
func_8029E3C0(0, 2.9f);
}
void bsant_die_update(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
func_80297970(D_8037D290);
func_80299628(0);
switch(D_8037D294){
case 0://L8029F270
if(func_8028B2E8()){
func_8028A37C(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;
D_8037D294 = 1;
}
break;
case 1://L8029F2C0
if(animctrl_isAt(aCtrl, 0.72f)){
D_8037D290 = 0.0f;
D_8037D294 = 2;
}
break;
case 2://L8029F2F0
if(animctrl_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(func_8029E1A8(0))
func_8029B890();
bs_setState(0);
}
void bsant_die_end(void){
func_8024BD08(0);
gravity_reset();
pitch_setIdeal(0.0f);
roll_setIdeal(0.0f);
func_80291548();
func_80292EA4();
}
void func_8029F398(void){
func_8029E554();
func_8028A010(ANIM_TERMITE_IDLE, 2.0f);
func_8029C7F4(1,1,3,2);
func_80297970(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();
}

184
src/core2/bs/bBarge.c Normal file
View File

@@ -0,0 +1,184 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
void func_8029797C(f32);
f32 func_80297A64(void);
void func_80297970(f32);
f32 func_80297A7C(void);
s32 func_8029E2E0(s32, f32);
void func_80292864(f32, f32);
void func_802979AC(f32, f32);
void func_8029E3C0(s32, f32);
/* .bss */
f32 D_8037D2A0;
u8 D_8037D2A4;
u8 D_8037D2A5;
u8 D_8037D2A6;
/* .code */
s32 func_8029F4E0(Actor * arg0){
return arg0->unk138_31 == 0;
}
void func_8029F4F0(void){
u8 val;
f32 tmp_f;
if(func_8029E1A8(2)){
func_8029AE74(0);
func_8029E3C0(2, 0.12f);
}
if( (++D_8037D2A4) >= 3)
D_8037D2A4 = 0;
switch(D_8037D2A4){
case 0:
tmp_f = (func_80297A7C() + 180.0f);
func_80292864(tmp_f - 70.0f, 20.0f);
break;
case 1:
tmp_f = (func_80297A7C() + 180.0f);
func_80292864(tmp_f - 10.0f, 20.0f);
break;
case 2:
tmp_f = (func_80297A7C() + 180.0f);
func_80292864(tmp_f + 50.0f, 20.0f);
break;
}
}
void func_8029F60C(void){
f32 plyrPos[3];
_player_getPosition(&plyrPos);
func_8032728C(plyrPos, 50.0f, 2, func_8029F4E0);
}
s32 bsbbarge_hitboxActive(void){
return D_8037D2A6;
}
void bsbarge_init(void){
AnimCtrl *plyrMvmnt;
plyrMvmnt = _player_getAnimCtrlPtr();
animctrl_reset(plyrMvmnt);
animctrl_setSmoothTransition(plyrMvmnt, 0);
animctrl_setIndex(plyrMvmnt, ANIM_BANJO_BBARGE);
animctrl_setDuration(plyrMvmnt, 1.0f);
animctrl_setSubRange(plyrMvmnt, 0, 0.375f);
animctrl_setPlaybackType(plyrMvmnt, ANIMCTRL_ONCE);
func_802875AC(plyrMvmnt, "bsbbarge.c", 0x98);
D_8037D2A4 = 0;
func_8029C7F4(1,1,3,3);
func_8029797C(yaw_getIdeal());
func_80297970(func_80297A64()*0.3);
func_802979AC(yaw_getIdeal(), func_80297A64());
func_8029E070(1);
D_8037D2A6 = 0;
D_8037D2A5 = 0;
miscflag_clear(0xA);
miscflag_clear(0xB);
miscflag_clear(0xC);
func_8029E3C0(2, 0.01f);
}
void bsbarge_update(void){
s32 sp24;
AnimCtrl *plyrMvmnt;
sp24 = 0;
plyrMvmnt = _player_getAnimCtrlPtr();
if(button_released(BUTTON_B))
miscflag_set(0xA);
switch(D_8037D2A5){
case 0:
if(animctrl_isAt(plyrMvmnt, 0.1392f))
func_80299BD4();
if(!animctrl_isStopped(plyrMvmnt))
break;
if(miscflag_isFalse(0xA)){
miscflag_set(0xC);
D_8037D2A0 = 850.0f;
}else{
D_8037D2A0 = 500.0f;
}
func_8029E3C0(1, 0.01f);
D_8037D2A5 = 1;
break;
case 1:
func_8029E1A8(1);
if(miscflag_isFalse(0xB) && func_8029E2E0(1, 0.1f)){
if(miscflag_isTrue(0xC)){
func_8030E560(SFX_4_KAZOOIE_RUUUUUH, 30000);
}else{
func_8030E560(SFX_43_KAZOOIE_RUH, 30000);
}
miscflag_set(0xB);
}
if(!func_8029E384(1))
break;
animctrl_setDuration(plyrMvmnt, 1.0f);
func_8028A37C(0.565f);
func_80297970(D_8037D2A0);
func_802979AC(yaw_getIdeal(), func_80297A64());
func_8030E760(SFX_2_CLAW_SWIPE, 0.558f, 22000);
D_8037D2A5 = 2;
func_8029F4F0();
D_8037D2A6 = 1;
break;
case 2:
func_80297970(D_8037D2A0);
if(animctrl_isStopped(plyrMvmnt)){
animctrl_setDuration(plyrMvmnt, 2.0f);
func_8028A37C(0.6f);
func_8029E3C0(0, 0.1f);
D_8037D2A5 = 3;
}
func_8029F4F0();
break;
case 3:
func_8029E1A8(0);
if(miscflag_isFalse(0xC) || func_8029E384(0)){
D_8037D2A0 -= 80.0f;
}
func_80297970(D_8037D2A0);
if(D_8037D2A0 < 200.0f){
animctrl_setDuration(plyrMvmnt, 1.5f);
func_8028A37C(1.0f);
D_8037D2A5 = 4;
}
func_8029F4F0();
break;
case 4:
if(!func_8028B2E8())
sp24 = BS_2F_FALL;
if(animctrl_isAt(plyrMvmnt, 0.7f)){
D_8037D2A0 = 0.0f;
D_8037D2A6 = 0;
}
func_80297970(D_8037D2A0);
if(animctrl_isAt(plyrMvmnt, 0.9193f))
sp24 = BS_20_LANDING;
break;
}
if(D_8037D2A6)
func_8029F60C();
if(player_inWater())
sp24 = BS_4C_LANDING_IN_WATER;
bs_setState(sp24);
}
void bsbarge_end(void){
ability_use(5);
func_8029E070(0);
D_8037D2A6 = 0;
}

65
src/core2/bs/bEggAss.c Normal file
View File

@@ -0,0 +1,65 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
/* .bss */
u8 D_8037D2E0;
u8 D_8037D2E1;
/* .code */
void bseggass_init(void){
func_8028A274(0x2B, 1.0f);
func_8029C7F4(1,3,1,3);
func_80299234(350.0f, 14.0f);
func_80297970(0.0f);
func_8029E058(1);
D_8037D2E0 = (D_8037D2E1 = 1);
func_802952A8(5,0);
}
void bseggass_update(void) {
s32 next_state;
AnimCtrl *plyr_mvmt;
s32 has_eggs;
s32 sp28;
s32 fill1;
s32 fill2;
next_state = 0;
plyr_mvmt = _player_getAnimCtrlPtr();
has_eggs = (item_empty(ITEM_D_EGGS) == 0);
if (should_poop_egg()) {
if (has_eggs)
D_8037D2E0 = func_80258948(D_8037D2E0 + 1, 3);
else
func_80346C10(&sp28, -1, 0, ITEM_D_EGGS, 0);
}
if (has_eggs) {
if (animctrl_isAt(plyr_mvmt, 0.3837f)) {
func_8030E760(SFX_3E_POOP_NOISE, 1.4f, 28000);
func_8033E3F0(COMMON_PARTICLE_4_EGG_ASS, 1);
item_dec(ITEM_D_EGGS);
ability_use(7);
}
if ((animctrl_isAt(plyr_mvmt, 0.4885f)) && (D_8037D2E1 < D_8037D2E0)) {
func_8028774C(plyr_mvmt, 0.349f);
func_802875AC(plyr_mvmt, "bsbeggass.c", 0x5E);
D_8037D2E1++;
}
}
if (animctrl_isStopped(plyr_mvmt)) {
next_state = (button_held(BUTTON_Z))? BS_CROUCH : BS_1_IDLE;
} else if (0.6 < (f64) animctrl_getAnimTimer(plyr_mvmt)) {
next_state = func_802ADCD4(0);
}
if (func_8028B094())
next_state = BS_2F_FALL;
bs_setState(next_state);
}
void bseggass_end(void){
func_802952A8(5, 1);
gravity_reset();
func_8029E058(0);
}

73
src/core2/bs/bEggHead.c Normal file
View File

@@ -0,0 +1,73 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
void func_80299234(f32, f32);
void func_802875AC(AnimCtrl *, char*, s32);
/* .bss */
u8 D_8037D2F0;
u8 D_8037D2F1;
/* .code */
void bsegghead_init(void){
func_8028A274(0x2A, 1.0f);
func_8029C7F4(1,3,1,3);
func_80299234(350.0f, 14.0f);
func_80297970(0.0f);
func_8029E070(1);
D_8037D2F0 = (D_8037D2F1 = 1);
func_802952A8(2,0);
}
void bsegghead_update(void) {
s32 next_state;
AnimCtrl *aCtrl;
s32 has_eggs;
s32 sp28;
s32 fill1;
s32 fill2;
next_state = 0;
aCtrl = _player_getAnimCtrlPtr();
has_eggs = (item_empty(ITEM_D_EGGS) == 0);
if (should_shoot_egg()) {
if (has_eggs)
D_8037D2F0 = func_80258948(D_8037D2F0 + 1, 3);
else
func_80346C10(&sp28, -1, 0, ITEM_D_EGGS, 0);
}
if (has_eggs) {
if (animctrl_isAt(aCtrl, 0.1f))
func_8030E760(SFX_46_KAZOOIE_CHOKING_UP, 1.0f, 0x7fff);
if (animctrl_isAt(aCtrl, 0.4f))
func_8030E760(SFX_57_KAZOOIE_HEGH, 1.0f, 0x7fff);
if (animctrl_isAt(aCtrl, 0.4704f)){
func_8033E3F0(COMMON_PARTICLE_1_EGG_HEAD, 1);
item_dec(ITEM_D_EGGS);
ability_use(7);
}
if ((animctrl_isAt(aCtrl, 0.5919f)) && (D_8037D2F1 < D_8037D2F0)) {
func_8028774C(aCtrl, 0.3878f);
func_802875AC(aCtrl, "bsbegghead.c", 0x62);
D_8037D2F1++;
}
}
if (animctrl_isStopped(aCtrl)) {
next_state = (button_held(BUTTON_Z))? BS_CROUCH : BS_1_IDLE;
} else if (0.65 < (f64) animctrl_getAnimTimer(aCtrl)) {
next_state = func_802ADCD4(0);
}
if (func_8028B094())
next_state = BS_2F_FALL;
bs_setState(next_state);
}
void bsegghead_end(void){
func_802952A8(2, 1);
gravity_reset();
func_8029E070(0);
}

199
src/core2/bs/bFlap.c Normal file
View File

@@ -0,0 +1,199 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
f32 func_802A2858(void);
/*.data*/
const f32 D_80364A10 = 280.0f;
const f32 D_80364A14 = -1100.0f;
const f32 D_80364A18 = -399.9f;
/*.bss*/
u8 D_8037D300;
u8 D_8037D301;
f32 D_8037D304;
f32 D_8037D308;
u8 D_8037D30C;
void bsbflap_init(void) {
func_8028A274(0x18, 0.3f);
func_8029C7F4(1, 1, 1, 2);
if (func_8029B2E8() != 0.0f) {
yaw_setIdeal(func_8029B33C());
}
func_8029797C(yaw_getIdeal());
func_802B6FA8();
func_802979AC(yaw_getIdeal(), func_80297A64());
player_setYVelocity(0.0f);
gravity_set(D_80364A14);
func_8029E070(1);
miscflag_set(0x12);
func_8029E3C0(0, 2.5f);
D_8037D30C = func_8030D90C();
func_80299BD4();
D_8037D301 = 0;
D_8037D308 = 0.0f;
D_8037D300 = 0;
}
void func_802A2790(s32 arg0, f32 arg1, s32 arg2) {
func_8030E394(D_8037D30C);
sfxsource_setSfxId(D_8037D30C, arg0);
func_8030DBB4(D_8037D30C, arg1);
sfxsource_setSampleRate(D_8037D30C, arg2);
func_8030DD90(D_8037D30C, 0);
func_8030DD14(D_8037D30C, 3);
func_8030E2C4(D_8037D30C);
}
void func_802A2810(void) {
AnimCtrl *plyrMvPtr;
plyrMvPtr = _player_getAnimCtrlPtr();
if (animctrl_isAt(plyrMvPtr, 0.9f)) {
D_8037D301++;
}
}
f32 func_802A2858(void){
switch (D_8037D301)
{
case 0:
return 0.15f;
case 1:
return 0.2f;
case 2:
return 0.27f;
case 3:
return 0.38f;
case 4:
return 0.4f;
default:
return 0.7f;
}
}
void func_802A28CC(void){
AnimCtrl *sp1c = _player_getAnimCtrlPtr();
animctrl_setDuration(sp1c, func_802A2858());
}
void func_802A2900(void){
D_8037D304 = D_8037D308;
D_8037D308 += time_getDelta();
}
int func_802A293C(f32 arg0){
return ((D_8037D304 <= arg0) && (arg0 < D_8037D308));
}
void func_802A298C(void){
AnimCtrl * sp1c;
sp1c = _player_getAnimCtrlPtr();
if(func_802A293C(0.08f)){
func_802A2790(0x4e, 1.24f, 0x4e20);
}
if((0.7 < D_8037D308) && animctrl_isAt(sp1c, 0.5698f)){
func_802A2790(0x47, 1.0f, 0x55f0);
}
}
void bsbflap_update(void){
s32 sp1c;
AnimCtrl * sp18;
sp1c = 0;
sp18 = _player_getAnimCtrlPtr();
func_802B6FA8();
switch(D_8037D300){
case 0:
func_80293350();
func_802A2900();
func_802A298C();
if(animctrl_isAt(sp18, 0.9f)){
animctrl_setSmoothTransition(sp18, 0);
animctrl_setIndex(sp18, ANIM_BANJO_BFLAP);
animctrl_setDuration(sp18, func_802A2858());
animctrl_setPlaybackType(sp18, ANIMCTRL_LOOP);
func_8028774C(sp18, 0.0f);
func_802875AC(sp18, "bsbflap.c", 0xe1);
player_setYVelocity(D_80364A10);
gravity_set(D_80364A14);
func_80297BF8(D_80364A18);
D_8037D300 = 1;
}
break;
case 1:
func_80293350();
func_802A2900();
func_802A2810();
func_802A28CC();
func_802A298C();
if(0.67 <= D_8037D308){
D_8037D300 = 2;
}
break;
case 2:
func_80293350();
func_802A2900();
func_802A2810();
func_802A28CC();
func_802A298C();
if(D_8037D301 == 4)
D_8037D300 = 3;
if(button_released(BUTTON_A)){
gravity_reset();
func_80297B94();
animctrl_setDuration(sp18, 1.0f);
D_8037D300 = 4;
}
break;
case 3:
func_80293350();
func_802A2900();
func_802A2810();
func_802A28CC();
func_802A298C();
if(button_released(BUTTON_A)){
gravity_reset();
func_80297B94();
animctrl_setDuration(sp18, 1.0f);
func_80293240(2);
D_8037D300 = 4;
}
else{
func_80297970(func_80297A64() * 0.35);
}
break;
case 4:
if(func_8028B424())
sp1c = BS_3D_FALL_TUMBLING;
break;
}//L802A2C94
func_8029E1A8(0);
if(func_8029E384(0))
sp1c = BS_2F_FALL;
if(should_beak_bust())
sp1c = BS_F_BBUSTER;
if(func_8028B2E8()){
func_8029C5E8();
sp1c = BS_2_WALK_SLOW;
}
if(player_inWater())
sp1c = BS_4C_LANDING_IN_WATER;
bs_setState(sp1c);
}
void bsbflap_end(void) {
ability_use(1);
gravity_reset();
func_80297B94();
func_8029E090(0, 0.2f);
func_8030DA44(D_8037D30C);
}

167
src/core2/bs/bFlip.c Normal file
View File

@@ -0,0 +1,167 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
/* .data */
const f32 D_80364A20 = 920.0f;
const f32 D_80364A24 = -1200.0f;
const f32 D_80364A28 = -533.3f;
const f32 D_80364A2C = 80.0f;
const f32 D_80364A30 = 200.0f;
/* .bss */
u8 D_8037D310;
/* .code */
void _bsbflip_802A2D60(void){
f32 sp1C;
sp1C = func_8029B30C();
if(!func_8029B300())
func_80297970(0.0f);
else
func_80297970(func_80257C48(sp1C, D_80364A2C, D_80364A30));
}
void _bsbflip_802A2DC0(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
f32 sp20[3];
animctrl_reset(aCtrl);
animctrl_setIndex(aCtrl, ANIM_BANJO_BFLIP);
animctrl_setDuration(aCtrl, 2.2f);
func_8028774C(aCtrl, 0.8566f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
func_802875AC(aCtrl, "bsbflip.c", 0x69); //nice
func_802978DC(3);
func_80297970(0.0f);
ml_vec3f_clear(sp20);
func_80297A0C(sp20);
func_8029C5E8();
}
void bsbflip_init(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
animctrl_reset(aCtrl);
animctrl_setSmoothTransition(aCtrl, 0);
animctrl_setIndex(aCtrl, ANIM_BANJO_BFLIP);
animctrl_setDuration(aCtrl, 2.3f);
animctrl_setSubRange(aCtrl, 0.0f, 0.7866f);
func_8028774C(aCtrl, 0.0f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
func_802875AC(aCtrl, "bsbflip.c", 0x80);
func_8029C7F4(1,1,2,3);
func_8029B324(0, 0.03f);
func_8029B324(1, 1.0f);
func_8029E070(1);
func_80299BD4();
D_8037D310 = 0;
}
void bsbflip_update(void){
enum bs_e sp24 = 0;
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
if( animctrl_isAt(aCtrl, 0.2394f)
&& animctrl_getPlaybackType(aCtrl) != 2
&& animctrl_getIndex(aCtrl) == 0x4B
){
func_8030E760(SFX_2_CLAW_SWIPE, 0.558f, 22000);
}
switch(D_8037D310){
case 0://L802A2FD4
if(animctrl_isAt(aCtrl, 0.1837f)){
if(func_8029B2E8() != 0.0f){
func_802991A8(2);
func_8029957C(3);
if(func_8029B2E8){ //!!! BUG !!!
yaw_setIdeal(func_8029B33C());
}
func_80299254(1.0f);
func_802978DC(6);
func_8029797C(yaw_getIdeal());
func_80297970(200.0f);
func_802979AC(yaw_getIdeal(), func_80297A64());
}else{//L802A3098
func_802978DC(6);
func_80297970(0.0f);
}
player_setYVelocity(D_80364A20);
gravity_set(D_80364A24);
func_80297BF8(D_80364A28);
animctrl_setDuration(aCtrl, 1.9f);
func_8030E4E4(SFX_33_BANJO_AHOO);
D_8037D310 = 1;
}
break;
case 1://L802A30F8
_bsbflip_802A2D60();
if(animctrl_isStopped(aCtrl)){
animctrl_reset(aCtrl);
animctrl_setSmoothTransition(aCtrl, 0);
animctrl_setIndex(aCtrl, 0x4C);
animctrl_setDuration(aCtrl, 0.13f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_LOOP);
func_802875AC(aCtrl, "bsbflip.c", 0xd9);
D_8037D310 = 2;
}//L802A316C
if(should_beak_bust()){
sp24 =BS_F_BBUSTER;
}
break;
case 2://L802A3184
if(func_8028B424())
sp24 = BS_3D_FALL_TUMBLING;
if(button_released(BUTTON_A)){
animctrl_reset(aCtrl);
animctrl_setSmoothTransition(aCtrl, 0);
animctrl_setIndex(aCtrl, 0x61);
animctrl_setDuration(aCtrl, 0.8f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
func_802875AC(aCtrl, "bsbflip.c", 0xee);
func_80297B94();
D_8037D310 = 3;
}//L802A320C
if(func_8028B2E8()){
_bsbflip_802A2DC0();
sp24 = func_8029C9C0(sp24);
D_8037D310 = 4;
}
else if(should_beak_bust()){
sp24 = BS_F_BBUSTER;
}
break;
case 3://L802A3258
if(func_8028B424())
sp24 = BS_3D_FALL_TUMBLING;
if(func_8028B2E8()){
func_8029E070(0);
_bsbflip_802A2DC0();
sp24 = func_8029C9C0(sp24);
D_8037D310 = 4;
}
else if(should_beak_bust()){
sp24 = BS_F_BBUSTER;
}
break;
case 4://L802A32C0
if(animctrl_isStopped(aCtrl))
sp24 = BS_2_WALK_SLOW;
sp24 = func_8029C9C0(sp24);
break;
}//L802A32E0
if(player_inWater())
sp24 = BS_4C_LANDING_IN_WATER;
bs_setState(sp24);
}
void bsbflip_end(void){
ability_use(2);
gravity_reset();
func_80297B94();
func_8029E070(0);
func_8029B0C0();
}

823
src/core2/bs/bFly.c Normal file
View File

@@ -0,0 +1,823 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern void func_8028FDC8(f32);
extern void func_802921BC(f32);
extern f32 func_8029B2D0(void);
extern void func_802BFE50(f32, f32, f32);
extern void func_80354030(f32[3], f32);
/* .data */
/* .bss */
f32 D_8037D320;
f32 D_8037D324;
f32 D_8037D328[3];
f32 D_8037D338[3];
u8 D_8037D344;
u8 D_8037D345;
u8 D_8037D346;
u8 D_8037D347;
/* .code */
int func_802A3350(void){
if(!func_8028B2E8())
return 0;
if(func_80294684() & 8){
return 0;
}
return 1;
}
void func_802A339C(f32 arg0[3], f32 arg1[3], f32 arg2){
func_8024C5A8(arg0);
ml_vec3f_scale(arg0, arg2);
func_8024C764(arg1);
}
void func_802A33D8(void){
pitch_setAngVel(500.0f, 1.2f);
}
void func_802A3404(void){
pitch_setAngVel(1000.0f, 2.2f);
}
void func_802A3430(void){
func_802921BC(60.0f);
func_802991A8(3);
func_80299234(500.0f, 2.0f);
roll_setAngularVelocity(500.0f, 2.0f);
func_802A33D8();
func_80293D48(60.0f, 45.0f);
func_80294378(4);
func_8028FEF0();
func_8028FFBC(1);
}
void func_802A34C8(void){
if(!bsbfly_inSet(bs_getNextState())){
gravity_reset();
func_80297B94();
func_8029E070(0);
func_802921BC(0.0f);
func_8029CB84();
func_802991A8(1);
func_80291548();
func_80293D74();
func_80294378(1);
func_8028FFBC(0);
}
}
void func_802A354C(void){
f32 yaw_range;
f32 roll_range;
f32 sp2C;
sp2C = func_8029B2D0();
if(button_held(BUTTON_R)){
func_80299234(500.0f, 30.0f);
yaw_range = 6.0f;
roll_range = 85.0f;
}
else{
func_80299234(500.0f, 2.0f);
yaw_range = 3.0f;
roll_range = 75.0f;
}
roll_setIdeal(ml_map_f(sp2C, -1.0f, 1.0f, -roll_range, roll_range));
yaw_setIdeal(mlNormalizeAngle(yaw_getIdeal() + ml_map_f(sp2C, -1.0f, 1.0f, yaw_range, -yaw_range)));
}
void func_802A3648(void){
f32 tmp_f0 = func_8029B2DC();
if(tmp_f0 < 0.0f)
pitch_setIdeal(ml_map_f(tmp_f0, -1.0f, 0.0f, 300.0f, 360.0f));
else
pitch_setIdeal(ml_map_f(tmp_f0, 0.0f, 1.0f, 0.0f, 80.0f));
}
void func_802A36D0(void){
f32 plyr_pos[3];
_player_getPosition(plyr_pos);
plyr_pos[0] += randf2(-30.0f, 30.0f);
plyr_pos[1] += 50.0f + randf2(0.0f, 30.0f);
plyr_pos[2] += randf2(-30.0f, 30.0f);
func_803541C0(5);
func_803541CC(0x50);
func_80354030(plyr_pos, 0.5f);
}
int bsbfly_inSet(enum bs_e arg0){
return arg0 == BS_BOMB
|| arg0 == BS_57_BOMB_END
|| arg0 == BS_18_FLY_KNOCKBACK
|| arg0 == BS_59_BFLY_UNK59
|| arg0 == BS_FLY_OW
|| arg0 == BS_BFLY_UNK76
|| arg0 == BS_24_FLY
|| arg0 == BS_BFLY_UNK99;
}
int func_802A37F8(void){
return bsbfly_inSet(bs_getState());
}
void bsbfly_enter_init(void){
func_8028A274(ANIM_BANJO_FLY_ENTER, 1.4f);
func_8029C7F4(1,1,3,6);
if(func_8029B2E8() != 0.0f)
yaw_setIdeal(func_8029B33C());
func_8029797C(yaw_getIdeal());
func_80297A0C(0);
func_80297970(0.0f);
gravity_set(-1200.0f);
func_8029E070(1);
func_80299BD4();
D_8037D344 = 0;
D_8037D346 = 0;
}
void bsbfly_enter_update(void){
enum bs_e sp1C = 0;
AnimCtrl * aCtrl = _player_getAnimCtrlPtr();
switch(D_8037D344){
case 0:
if(animctrl_isAt(aCtrl, 0.2416f)){
animctrl_setDuration(aCtrl, 2.4f);
player_setYVelocity(1600.0f);
func_8030E58C(SFX_C_TAKING_FLIGHT_LIFTOFF, 0.7f);
D_8037D344 = 1;
}
break;
default:
func_802A36D0();
if(func_80297AAC() < 0.0f)
sp1C = BS_24_FLY;
break;
}
bs_setState(sp1C);
}
void bsbfly_enter_end(void){
ability_use(8);
func_8029E070(0);
}
void bsbfly_init(void){
func_8028A010(ANIM_BANJO_FLY, 0.62f);
func_8029C7F4(1,1,3,3);
if(miscflag_isTrue(9)){
func_80297970(0.0f);
}else{
func_80297970(600.0f);
}
func_802979AC(yaw_getIdeal(), func_80297A64());
func_8029797C(yaw_getIdeal());
func_8029E070(1);
gravity_set(-300.0f);
func_80297BF8(-99.9f);
func_802914CC(4);
func_802A3430();
D_8037D320 = 1.0f;
D_8037D344 = 0;
D_8037D347 = 0;
}
void bsbfly_update(void){
enum bs_e sp54 = 0;
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
int sp4C;
f32 sp40[3];
f32 sp3C;
f32 sp38;
f32 sp34;
int sp30;
enum bs_e sp2C;
func_802A354C();
func_802A3648();
sp3C = pitch_get();
sp2C = 0;
if(button_pressed(BUTTON_A))
D_8037D347 = 1;
if(D_8037D347 && func_8023DB5C()%3 == 0){
D_8037D347 = 0;
func_80346C10(&sp2C, 0, BS_1_IDLE, ITEM_F_RED_FEATHER, 1);
}
if(sp2C || D_8037D346){
if(sp2C){
animctrl_setDuration(aCtrl, 0.3f);
func_802D8BE4(0);
}
if(D_8037D346){
D_8037D346 = 0;
func_8028FDC8(0.35f);
}else{
func_8028FDC8(1.0f);
}
}//L802A3BB4
sp30 = func_8028FD30();
switch(D_8037D344){
case 0:
if(sp30)
D_8037D344 = 1;
break;
case 1://L802A3BF4
sp34 = mlNormalizeAngle(pitch_getIdeal() - 30.0f);
if((80.0f < sp34 && sp34 < 300.0f))
sp34 = 300.0f;
pitch_setIdeal(sp34);
func_802A3404();
if(sp30){
player_setYVelocity(sp30 * 400.0);
}
if(!sp30){
animctrl_setDuration(aCtrl, 0.62f);
func_802A33D8();
D_8037D344 = 0;
}
break;
}//L802A3CB8
if(animctrl_isAt(aCtrl, 0.1358f)){
func_8030EBC8(SFX_2_CLAW_SWIPE, 0.6f, 0.7f, 0x2710, 0x2ee0);
}
gravity_set(-300.0f);
if(miscflag_isTrue(9)){
func_80297BF8(0.0f);
func_80297A0C(0);
sp38 = 0.0f;
}
else if(sp3C <= 80.0f){
func_80297BF8(ml_map_f(sp3C, 60.0f, 80.0f, -99.9f, -1000.33));
gravity_set(ml_map_f(sp3C, 60.0f, 80.0f, -300.0f, -700.0f));
sp38 = ml_map_f(sp3C, 60.0f, 80.0f, 600.0f, 60.0f);
}
else{
func_80297BF8(ml_map_f(sp3C, 300.0f, 310.0f, -399.99f, -99.9f));
sp38 = ml_map_f(sp3C, 300.0f, 340.0f, 0.0f, 600.0f);
}//L802A3E18
sp4C = func_802946F0();
func_8029445C(sp40);
if(sp4C && -1.0 < sp40[1])
sp38 = 0.0f;
func_8029797C(yaw_get());
func_80297970(sp38);
if(should_beak_bust())
sp54 = BS_F_BBUSTER;
D_8037D320 = max_f(D_8037D320 - time_getDelta(), 0.0f);
if( D_8037D320 == 0.0f
&& button_pressed(BUTTON_B)
&& can_beak_bomb()
){
sp2C = 0;
func_80346C10(&sp2C, 0, 1, ITEM_F_RED_FEATHER, 1);
if(sp2C)
sp54 = BS_BOMB;
}
if(player_inWater())
sp54 = BS_2D_SWIM_IDLE;
if(func_802A3350())
sp54 = BS_1_IDLE;
func_8028FFF0();
bs_setState(sp54);
}
void func_802A3F70(void){
func_802A34C8();
}
int bsbfly_bombHitboxActive(void){
return D_8037D345;
}
//bsbfly_bomb_init
void func_802A3F9C(void){
f32 sp1C[3];
func_8028A180(ASSET_43_ANIM_BANJO_BEAKBOMB_START, 1.0f);
func_8029C7F4(1,1,3,7);
func_802A339C(D_8037D338, sp1C, 4200.0f);
yaw_setIdeal(sp1C[1] + 180.0f);
pitch_setIdeal(sp1C[0]);
roll_setIdeal(0.0f);
func_80297A0C(D_8037D338);
pitch_setIdeal(sp1C[0]);
func_8029E070(1);
func_802914CC(4);
func_802BFE74(1);
func_802A3430();
FUNC_8030E624(SFX_52_BANJO_YAH_OH, 1.0f, 28000);
D_8037D345 = 0;
_player_getPosition(D_8037D328);
D_8037D344 = 0;
func_802D8BE4(0);
}
void func_802A4078(void){
f32 plyr_pos[3];
_player_getPosition(plyr_pos);
plyr_pos[0] += D_8037D338[0];
plyr_pos[1] += D_8037D338[1];
plyr_pos[2] += D_8037D338[2];
func_80294A64(plyr_pos);
func_8030E6D4(SFX_13_BEAKBUSTER_GROUND);
}
s32 func_802A40E0(void){
func_802A4078();
item_dec(ITEM_14_HEALTH);
if(item_getCount(ITEM_14_HEALTH))
return BS_59_BFLY_UNK59;
else
return BS_41_DIE;
}
void func_802A411C(void) {
s32 next_state;
AnimCtrl *sp58;
Struct60s *phi_v0;
f32 sp48[3];
s32 sp44;
s32 sp40;
f32 sp34[3];
f32 sp28[3];
f32 sp24;
next_state = 0;
sp58 = _player_getAnimCtrlPtr();
switch (D_8037D344) {
case 0:
if (animctrl_isAt(sp58, 0.6905f)) {
func_802978DC(8);
func_802914CC(5);
func_802BF590(&D_8037D338);
animctrl_setDuration(sp58, 0.05f);
func_80299CF4(SFX_50_KAZOOIE_RRRUH, 1.3f, 0x7FFF);
D_8037D345 = 1;
D_8037D324 = 0.0f;
D_8037D344 = 1;
}
break;
case 1:
func_802A36D0();
D_8037D324 += time_getDelta();
sp40 = func_8028B2E8();
if (player_inWater()) {
next_state = BS_4C_LANDING_IN_WATER;
}
if ((func_80294530()) || (sp40)) {
if (sp40) {
func_80294480(sp34);
phi_v0 = func_8029463C();
} else {
func_802944D0(sp34);
phi_v0 = func_802946F0();
}
if (phi_v0 != NULL) {
sp44 = phi_v0->unk8;
} else {
sp44 = 0;
}
ml_vec3f_copy(sp28, &D_8037D338);
ml_vec3f_normalize(sp28);
sp24 = mlAbsF(sp34[0] * sp28[0] + sp34[1] * sp28[1] + sp34[2] * sp28[2]);
if (miscflag_isTrue(8) || ((sp44 & 0x80) != 0)) {
func_802A4078();
next_state = BS_18_FLY_KNOCKBACK;
} else if (0.4 < sp24) {
if (0.65 > sp34[1]) {
next_state = func_802A40E0();
} else {
next_state = BS_58;
}
} else if (sp40 != 0) {
next_state = BS_58;
}
}
_player_getPosition(sp48);
ml_vec3f_diff(sp48, D_8037D328);
if (sp48[0]*sp48[0] + sp48[1]*sp48[1] + sp48[2]*sp48[2] > 16000000.0f) {
next_state = BS_57_BOMB_END;
}
if (animctrl_isStopped(sp58) != 0) {
animctrl_setIndex(sp58, 0x47);
animctrl_setDuration(sp58, 0.3f);
animctrl_setPlaybackType(sp58, ANIMCTRL_LOOP);
func_802875AC(sp58, "bsbfly.c", 0x361);
}
break;
}
bs_setState(next_state);
}
void func_802A4404(void){
func_80299E6C();
D_8037D345 = 0;
func_802A34C8();
}
void func_802A4430(void){
AnimCtrl *plyr_animctrl;
plyr_animctrl = _player_getAnimCtrlPtr();
animctrl_reset(plyr_animctrl);
animctrl_setTransitionDuration(plyr_animctrl, 0.3f);
animctrl_setIndex(plyr_animctrl, ASSET_CC_ANIM_BANJO_BEAKBOMB_END);
animctrl_setDuration(plyr_animctrl, 0.38f);
animctrl_setPlaybackType(plyr_animctrl, ANIMCTRL_LOOP);
func_802875AC(plyr_animctrl, "bsbfly.c", 0x38a);
func_8029C7F4(1, 1, 3, 3);
func_8029E070(1);
func_802A3430();
func_80293D74();
func_80294378(1);
roll_setIdeal(0.0f);
pitch_setIdeal(0.0f);
gravity_reset();
func_80297B94();
func_802921BC(0.0f);
func_80299CF4(SFX_31_BANJO_OHHWAAOOO, 1.0f, 0x7fff);
func_80299D2C(SFX_61_CARTOONY_FALL, 1.0f, 0x7fff);
D_8037D320 = 0.35f;
D_8037D344 = 0;
}
void func_802A4548(void){
s32 next_state = 0;
f32 sp20[3];
_get_velocity(sp20);
switch(D_8037D344){
case 0://L802A457C
if(func_8028B254(0x5A)){
func_8028A1F4(8, 2.0f, 0.6667f);
D_8037D344 = 1;
}
break;
case 1://L802A45A8
break;
}//L802A45A8
D_8037D320 -= time_getDelta();
if(D_8037D320 < 0.0f){
D_8037D346 = 1;
next_state = BS_24_FLY;
}
if(should_peck())
next_state = BS_11_BPECK;
if(should_beak_bust())
next_state = BS_F_BBUSTER;
if(func_8028B2E8()){
func_8029C5E8();
next_state = BS_20_LANDING;
}
if(player_inWater())
next_state = BS_2D_SWIM_IDLE;
bs_setState(next_state);
}
void func_802A4664(void){
s32 next_state;
func_80299E6C();
func_80299E90();
next_state = bs_getNextState();
if(next_state == BS_20_LANDING || next_state == BS_24_FLY || next_state == BS_2D_SWIM_IDLE){
func_8030E484(SFX_3EA_UNKNOWN);
}
func_802A34C8();
func_8029E070(0);
}
void func_802A46C8(void) {
f32 phi_f20;
for(phi_f20 = 0.0f; phi_f20 < 360.0f; phi_f20 += 45.0f){
func_80292900(phi_f20, 230.0f);
}
}
void func_802A4748(void) {
func_8028A180(0x3E, 1.4f);
func_8029C7F4(1, 1, 3, 3);
func_8029E070(1);
FUNC_8030E624(SFX_1F_HITTING_AN_ENEMY_3, 0.8f, 32750);
func_80299CF4(SFX_36_BANJO_DOH, 1.0f, 28000);
func_80250D94(1.0f, 0.5f, 0.5f);
item_dec(ITEM_14_HEALTH);
func_802A46C8();
func_8028D5DC();
D_8037D344 = 0;
}
void func_802A47E0(void) {
AnimCtrl *sp1C;
sp1C = _player_getAnimCtrlPtr();
if (animctrl_isAt(sp1C, 0.3659f)) {
FUNC_8030E624(SFX_1F_HITTING_AN_ENEMY_3, 1.0f, 14000);
func_80299CF4(SFX_8B_KAZOOIE_RAWW, 1.0f, 28000);
}
if (animctrl_isAt(sp1C, 0.6862f)) {
FUNC_8030E624(SFX_1F_HITTING_AN_ENEMY_3, 0.8f, 18000);
func_80299CF4(SFX_38_BANJO_AYE_1, 1.0f, 22000);
}
if (animctrl_isAt(sp1C, 0.92f)) {
func_80297970(0.0f);
}
if (animctrl_getAnimTimer(sp1C) < 0.8) {
func_802929F8();
}
}
void func_802A48B4(void) {
s32 next_state;
AnimCtrl *sp18;
next_state = 0;
sp18 = _player_getAnimCtrlPtr();
func_80299628(0);
switch (D_8037D344) {
case 0:
func_802A47E0();
if (animctrl_isAt(sp18, 0.2f) != 0) {
if (item_getCount(ITEM_14_HEALTH) == 0) {
func_8029C984();
func_8029151C(0xD);
func_802BF2C0(30.0f);
func_8029B930();
func_8029E3C0(0, 2.5f);
D_8037D344 = 2;
}
} else if (animctrl_isAt(sp18, 0.92f)) {
func_8028A180(0xD2, 2.25f);
D_8037D344 = 1;
}
break;
case 1:
if (animctrl_isAt(sp18, 0.219f)) {
func_80299CF4(SFX_36_BANJO_DOH, 1.0f, 0x3E80);
}
if (animctrl_isAt(sp18, 0.63f)) {
next_state = BS_20_LANDING;
}
if (animctrl_isStopped(sp18)) {
next_state = BS_1_IDLE;
}
if (func_8028B094()) {
next_state = BS_2F_FALL;
}
break;
case 2:
func_802A47E0();
if (func_8029E1A8(0)) {
func_8029B890();
}
break;
}
bs_setState(next_state);
}
void func_802A4A40(void) {
func_80291548();
func_8029CB84();
func_8029E070(0);
func_8028D5F4();
}
void func_802A4A78(s32 arg0) {
f32 sp3C[3];
f32 sp30[3];
f32 sp2C;
f32 sp28;
f32 pad24;
f32 sp20;
if (arg0 == 0) {
sp2C = -2200.0f;
sp20 = 800.0f;
} else {
sp2C = -1200.0f;
sp20 = 400.0f;
}
func_802BB3DC(2, 100.0f, 0.85f);
func_8028A274(0xD3, 1.2f);
func_80299BFC(1.0f);
func_80250D94(1.0f, 0.5f, 0.5f);
_player_getPosition(sp3C);
func_80294980(sp30);
func_80257F18(sp30, sp3C, &sp28);
yaw_setIdeal(mlNormalizeAngle(sp28 + 180.0f));
yaw_applyIdeal();
func_80297970(sp20);
func_8029797C(sp28);
func_802979AC(sp28, func_80297A64());
if ((arg0 == 1) && (map_get() == MAP_90_GL_BATTLEMENTS)) {
yaw_setIdeal(mlNormalizeAngle(sp28));
yaw_applyIdeal();
}
func_8029C7F4(1, 1, 2, 3);
player_setYVelocity(800.0f);
gravity_set(sp2C);
func_80297BF8(-4000.0f);
func_8029E070(1);
func_802914CC(4);
func_802BFE50(12.0f, 10000.0f, 800.0f);
func_8028D5DC();
func_802A3430();
}
void func_802A4C34(s32 arg0) {
s32 next_state;
next_state = 0;
if (animctrl_isStopped(_player_getAnimCtrlPtr())) {
next_state = BS_24_FLY;
}
if (func_8028B2E8()) {
next_state = BS_2_WALK_SLOW;
}
bs_setState(next_state);
}
void func_802A4C88(s32 arg0) {
func_80297B3C();
func_8028D5F4();
func_80297CA8();
func_8029E070(0);
func_80291548();
func_802A34C8();
}
void func_802A4CD0(void){
func_802A4A78(0);
}
void func_802A4CF0(void){
func_802A4C34(0);
}
void func_802A4D10(void){
func_802A4C88(0);
}
void func_802A4D30(void){
func_802A4A78(1);
}
void func_802A4D50(void){
func_802A4C34(1);
}
void func_802A4D70(void){
func_802A4C88(1);
}
void func_802A4D90(void) {
f32 sp34;
f32 sp28[3];
f32 sp1C[3];
func_802BB3DC(2, 100.0f, 0.85f);
func_8028A274(0x10D, 1.0f);
func_8030E58C(SFX_56_BANJO_HUI, 1.0f);
_player_getPosition(&sp28);
func_80294980(sp1C);
func_80257F18(sp1C, sp28, &sp34);
yaw_setIdeal(mlNormalizeAngle(sp34 + 180.0f));
yaw_applyIdeal();
func_80297970(1300.0f);
func_8029797C(sp34);
func_802979AC(sp34, func_80297A64());
if (map_get() == MAP_90_GL_BATTLEMENTS) {
yaw_setIdeal(mlNormalizeAngle(sp34));
yaw_applyIdeal();
}
func_8029C7F4(1, 1, 2, 3);
player_setYVelocity(400.0f);
gravity_set(-1800.0f);
func_8028D5DC();
func_802914CC(4);
func_802BFE50(12.0f, 10000.0f, 800.0f);
}
void func_802A4EC8(void) {
s32 next_state;
AnimCtrl *sp18;
next_state = 0;
sp18 = _player_getAnimCtrlPtr();
if (func_8028B2E8()) {
next_state = BS_20_LANDING;
}
if (animctrl_isStopped(sp18) && (func_8028B094() || func_80294530())) {
D_8037D346 = 1;
next_state = BS_24_FLY;
}
bs_setState(next_state);
}
void func_802A4F44(void){
gravity_reset();
func_8028D5F4();
func_802A34C8();
}
void func_802A4F74(void) {
func_8028A010(ANIM_BANJO_FLY, 0.62f);
func_8029C7F4(1, 1, 3, 7);
func_8029E070(1);
func_802914CC(4);
func_802A3430();
}
void func_802A4FC8(void) {
s32 next_state;
next_state = 0;
if (animctrl_isAt(_player_getAnimCtrlPtr(), 0.1358f) != 0) {
func_8030EBC8(SFX_2_CLAW_SWIPE, 0.6f, 0.7f, 10000, 12000);
}
if (func_80298850() == 0) {
next_state = BS_24_FLY;
}
bs_setState(next_state);
}
void func_802A503C(void){
func_802A34C8();
}
void func_802A505C(void){
if(bs_getInterruptType() == 9){
func_8029A86C(2);
miscflag_set(7);
func_8029CCC4();
}else{
func_80296608();
}
}
/* BREAK??? */
extern void func_8028A084(s32, f32);
/* .code */
void func_802A50B0(void){
func_802A3430();
bsdrone_init();
}
void func_802A50D8(void){
bsdrone_update();
}
void func_802A50F8(void){
bsdrone_end();
func_802A34C8();
}
void func_802A5120(void){
func_8028A084(0x68, 0.35f);
func_8029C7F4(1,1,3,6);
func_80297970(0.0f);
func_80297A0C(0);
player_setYVelocity(2000.0f);
func_80299CF4(SFX_63_BANJO_UWAAAAOOH, 1.0f, 32000);
}
void func_802A5190(void){
player_setYVelocity(2000.0f);
bs_setState(0);
}
void func_802A51C0(void){}

505
src/core2/bs/bLongLeg.c Normal file
View File

@@ -0,0 +1,505 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
/* .data */
const f32 D_80364A40 = 80.0f;
const f32 D_80364A44 = 500.0f;
const f32 D_80364A48 = 1.0f;
const f32 D_80364A4C = 0.8f;
const f32 D_80364A50 = 400.0f;
const f32 D_80364A54 = -800.0f;
/* .bss */
f32 D_8037D350;
f32 D_8037D354;
f32 D_8037D358;
f32 D_8037D35C;
u8 D_8037D360;
u8 D_8037D361;
/* .code */
int func_802A51D0(void){
if(func_8029D66C())
return 0;
return player_inWater();
}
void func_802A5208(int arg0){
if(arg0)
func_8030E5F4(SFX_49_KAZOOIE_RA, 0.88f);
else
func_8030E5F4(SFX_49_KAZOOIE_RA, 0.96f);
}
void func_802A524C(void){
f32 sp1C = func_8029B30C();
if(!func_8029B300())
func_80297970(0.0f);
else
func_80297970(func_80257C48(sp1C, D_80364A40, D_80364A44));
}
int bslongleg_inSet(s32 move_indx){
return (move_indx == BS_26_LONGLEG_IDLE)
|| (move_indx == BS_LONGLEG_WALK)
|| (move_indx == BS_LONGLEG_JUMP)
|| (move_indx == BS_LONGLEG_EXIT)
|| (move_indx == BS_LONGLEG_SLIDE)
|| (move_indx == BS_LONGLEG_DRONE)
|| (move_indx == BS_LONGLEG_UNK62);
}
void func_802A531C(void){
func_80299650(func_80291684(2), func_80291670(2));
if(func_80291700(2, 0.01f))
func_8030E484(0x3eb);
}
void func_802A5374(void){
func_80292078(1, -50.0f);
func_8029B324(0, 0.03f);
func_8029B324(1, 1.0f);
func_8029E070(1);
func_8029E064(1);
func_8029E0F4(1);
pitch_setAngVel(1000.0f, 12.0f);
roll_setAngularVelocity(1000.0f, 12.0f);
miscflag_set(3);
}
void func_802A5404(void){
if(bslongleg_inSet(bs_getNextState()))
return;
func_80292078(1,0);
func_8029B0C0();
func_8029E070(0);
func_8029E064(0);
func_8029E0F4(0);
func_80292090(1);
pitch_setIdeal(0.0f);
roll_setIdeal(0.0f);
func_802917C4(2);
func_803219F4(1);
miscflag_clear(3);
func_8029E180(4, 0.5f);
func_802A531C();
}
void func_802A54A8(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
animctrl_reset(aCtrl);
animctrl_setSmoothTransition(aCtrl, 0);
animctrl_setIndex(aCtrl, ANIM_BANJO_LONGLEG_ENTER_AS_BIRD);
animctrl_setDuration(aCtrl, 1.0f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
func_802875AC(aCtrl, "bsblongleg.c", 0xe1);
func_802917E4(2, D_8037D35C);
func_803219F4(2);
func_8030E2C4(D_8037D361);
D_8037D360 = 1;
}
void func_802A5548(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
animctrl_reset(aCtrl);
animctrl_setSmoothTransition(aCtrl, 0);
animctrl_setIndex(aCtrl, ANIM_BANJO_LONGLEG_ENTER_AS_BEAR);
animctrl_setDuration(aCtrl, 0.5f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
func_802875AC(aCtrl, "bsblongleg.c", 0xf6);
D_8037D360 = 0;
}
void bsblongleg_enter_init(void){
D_8037D361 = func_8030D90C();
sfxsource_setSfxId(D_8037D361, SFX_2C_PULLING_NOISE);
func_8030E04C(D_8037D361, 0.8f, 1.9f, 1.2f);
miscflag_clear(MISC_FLAG_E_TOUCHING_WADING_BOOTS);
if(bsbtrot_inSet(bs_getPrevState()))
func_802A54A8();
else
func_802A5548();
func_8029C7F4(1,1,3,2);
func_80297970(0.0f);
func_802A5374();
func_80299BD4();
}
void bsblongleg_enter_update(void){
enum bs_e sp1C = 0;
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
func_802A531C();
func_80299594(1, 0.5f);
switch(D_8037D360){
case 0:
if(animctrl_isStopped(aCtrl))
func_802A54A8();
break;
case 1:
if(animctrl_isStopped(aCtrl))
sp1C = BS_26_LONGLEG_IDLE;
break;
}
bs_setState(sp1C);
}
void bsblongleg_enter_end(void){
func_802A5404();
func_8030DA44(D_8037D361);
}
void bsblongleg_stand_enter(void){
func_8028A010(ANIM_BANJO_LONGLEG_IDLE, 1.0f);
func_8029C7F4(1,1,1,2);
func_80297970(0.0f);
func_80292090(2);
func_802A5374();
}
void bsblongleg_stand_update(void){
enum bs_e next_state = 0;
func_802A531C();
func_80299594(1, 0.5f);
if(func_80294F78())
next_state = func_802926C0();
if(button_pressed(BUTTON_B))
func_802917C4(2);
if(func_8029B300() > 0)
next_state = BS_LONGLEG_WALK;
if(player_shouldSlideTrot())
next_state = BS_LONGLEG_SLIDE;
if(button_pressed(BUTTON_A) && func_8028B2E8())
next_state = BS_LONGLEG_JUMP;
if(func_802916CC(2))
next_state = BS_LONGLEG_EXIT;
if(func_802A51D0())
next_state = BS_4C_LANDING_IN_WATER;
bs_setState(next_state);
}
void bsblongleg_stand_end(void){
func_802A5404();
}
void bsblongleg_walk_init(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
animctrl_reset(aCtrl);
animctrl_setIndex(aCtrl, ANIM_BANJO_LONGLEG_WALK);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_LOOP);
func_802875AC(aCtrl, "bsblongleg.c", 0x1a1);
func_8029C7F4(2,1,1,2);
func_80289EC8(D_80364A40, D_80364A44, D_80364A48, D_80364A4C);
}
void bsblongleg_walk_update(void){
enum bs_e sp1C = 0;
AnimCtrl * aCtrl = _player_getAnimCtrlPtr();
func_802A531C();
func_80299594(1, 0.5f);
func_8029AD28(0.47f, 4);
func_8029AD28(0.97f, 3);
if(animctrl_isAt(aCtrl, 0.7781f))
func_802A5208(0);
if(animctrl_isAt(aCtrl, 0.2781f))
func_802A5208(1);
func_802A524C();
if(button_pressed(BUTTON_B) && func_80297A64() == 0.0f)
func_802917C4(2);
if(!func_8029B300() && func_80297C04(1.0f))
sp1C = BS_26_LONGLEG_IDLE;
if(player_shouldSlideTrot())
sp1C = BS_LONGLEG_SLIDE;
if(button_pressed(BUTTON_A) && func_8028B2E8())
sp1C = BS_LONGLEG_JUMP;
if(func_802916CC(2))
sp1C = BS_LONGLEG_EXIT;
if(func_802A51D0())
sp1C = BS_4C_LANDING_IN_WATER;
bs_setState(sp1C);
}
void bsblongleg_walk_end(void){
func_802A5404();
}
void func_802A5AB0(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
animctrl_reset(aCtrl);
animctrl_setSmoothTransition(aCtrl, 0);
animctrl_setDirection(aCtrl, 0);
animctrl_setIndex(aCtrl, ANIM_BANJO_LONGLEG_ENTER_AS_BIRD);
animctrl_setDuration(aCtrl, 1.0f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
func_802875AC(aCtrl, "bsblongleg.c", 0x200);
D_8037D360 = 0;
}
void func_802A5B34(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
animctrl_reset(aCtrl);
animctrl_setSmoothTransition(aCtrl, 0);
animctrl_setIndex(aCtrl, ANIM_BANJO_BTROT_EXIT);
animctrl_setDuration(aCtrl, 0.6f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
func_802875AC(aCtrl, "bsblongleg.c", 0x210);
D_8037D360 = 1;
}
void bsblongleg_exit_init(void){
func_802A5AB0();
func_80289F10(1);
func_8029957C(2);
func_80297970(0.0f);
D_8037D361 = func_8030D90C();
sfxsource_setSfxId(D_8037D361, SFX_2C_PULLING_NOISE);
func_8030E04C(D_8037D361, 1.4f, 0.4f, -1.2f);
}
void bsblongleg_exit_update(void){
enum bs_e sp1C = 0;
AnimCtrl * aCtrl = _player_getAnimCtrlPtr();
func_802A531C();
func_80299628(1);
switch(D_8037D360){
case 0://L802A5C7C
if(animctrl_isAt(aCtrl, 0.68f))
func_8030E2C4(D_8037D361);
if(animctrl_isStopped(aCtrl))
func_802A5B34();
break;
case 1://L802A5CB4
if(animctrl_isStopped(aCtrl))
sp1C = BS_1_IDLE;
break;
}
if(func_802A51D0())
sp1C = BS_4C_LANDING_IN_WATER;
bs_setState(sp1C);
}
void bsblongleg_exit_end(void){
func_8030DA44(D_8037D361);
func_802A5404();
}
void bsblongleg_jump_init(void){
AnimCtrl * aCtrl = _player_getAnimCtrlPtr();
D_8037D350 = 0.14f;
animctrl_reset(aCtrl);
animctrl_setIndex(aCtrl, ANIM_BANJO_LONGLEG_JUMP);
animctrl_setTransitionDuration(aCtrl, 0.134f);
animctrl_setDuration(aCtrl, 1.0f);
func_8028774C(aCtrl, D_8037D350);
animctrl_setSubRange(aCtrl, 0.0f, 0.42f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
func_802875AC(aCtrl, "bsblongleg.c", 0x27F);
func_8029C7F4(1,1,3,6);
if(func_8029B2E8() != 0.0f)
yaw_setIdeal(func_8029B33C());
func_8029797C(yaw_getIdeal());
func_802A524C();
func_802979AC(yaw_getIdeal(), func_80297A64());
player_setYVelocity(D_80364A50);
gravity_set(D_80364A54);
func_8030E58C(SFX_48_KAZOOIE_RUUH, 0.9f);
D_8037D360 = 0;
}
void bsblongleg_jump_update(void){
enum bs_e sp44 = 0;
AnimCtrl * aCtrl = _player_getAnimCtrlPtr();
f32 sp34[3];
f32 sp30;
func_802A531C();
func_802A524C();
_get_velocity(&sp34);
if(button_released(BUTTON_A) && 0.0f < sp34[1])
gravity_reset();
sp30 = player_getYPosition() - func_80294438();
switch(D_8037D360){
case 0://L802A5F24
if((sp34[1] < 100.0f) || sp30 < 10.0f)
animctrl_setDuration(aCtrl, 0.4f);
if(animctrl_isStopped(aCtrl)){
animctrl_setSubRange(aCtrl, 0.0f, 0.5282f);
animctrl_setDuration(aCtrl, 4.5f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
D_8037D360 = 1;
}
break;
case 1://L802A5FA8
if((0.4 < animctrl_getAnimTimer(aCtrl)) && sp30 < 70.0f){
D_8037D350 = animctrl_getAnimTimer(aCtrl);
D_8037D354 = sp30;
animctrl_setPlaybackType(aCtrl, ANIMCTRL_STOPPED);
D_8037D360 = 2;
}
break;
case 2://L802A6020
animctrl_setAnimTimer(aCtrl, ml_map_f(sp30, D_8037D354, 1.0f, D_8037D350, 0.6703f));
func_80299594(1, 0.5f);
if(func_8028B2E8()){
func_8029C5E8();
animctrl_setSubRange(aCtrl, 0.0f, 1.0f);
animctrl_setDuration(aCtrl, 1.3f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
D_8037D360 = 3;
}
break;
case 3://L802A60AC
func_80299594(1, 0.5f);
if(animctrl_isStopped(aCtrl))
sp44 = BS_26_LONGLEG_IDLE;
if(button_pressed(BUTTON_A))
sp44 = BS_LONGLEG_JUMP;
if(func_802916CC(2))
sp44 = BS_LONGLEG_EXIT;
break;
}//L802A60F0
if(func_802A51D0())
sp44 = BS_4C_LANDING_IN_WATER;
bs_setState(sp44);
}
void bsblongleg_jump_end(void){
gravity_reset();
func_802A5404();
}
void bsblongleg_slide_init(void){
AnimCtrl * aCtrl = _player_getAnimCtrlPtr();
animctrl_reset(aCtrl);
animctrl_setIndex(aCtrl, ANIM_BANJO_LONGLEG_JUMP);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_STOPPED);
func_8028774C(aCtrl, 0.0865f);
func_802875AC(aCtrl, "bsblongleg.c", 0x339);
func_8029C7F4(1,1,3,3);
func_8029797C(yaw_getIdeal());
func_802979AC(yaw_getIdeal(), func_80297A64());
func_8029E070(1);
func_8029E064(1);
pitch_setAngVel(1000.0f, 12.0f);
roll_setAngularVelocity(1000.0f, 12.0f);
func_80297970(0.0f);
func_80299AAC();
D_8037D358 = 1.0f;
}
void bsblongleg_slide_update(void){
enum bs_e sp3C = 0;
f32 sp30[3];
f32 sp2C;
func_802A531C();
func_80299AAC();
D_8037D358 = max_f(D_8037D358 - time_getDelta(), 0.0f);
if(player_isSliding()){
func_80294480(sp30);
func_8025801C(sp30, &sp2C);
func_80299594(1, 0.5f);
func_80297970(ml_map_f(pitch_getIdeal(), 20.0f, 60.0f, 550.0f, 700.0f));
func_8029797C(sp2C);
func_8029C22C();
}else{//L802A6304
sp3C = BS_26_LONGLEG_IDLE;
}
if(D_8037D358 == 0.0f && button_pressed(BUTTON_A))
sp3C = BS_LONGLEG_JUMP;
if(func_802A51D0())
sp3C = BS_4C_LANDING_IN_WATER;
bs_setState(sp3C);
}
void bsblongleg_slide_end(void){
func_802A5404();
}
void func_802A6388(f32 arg0){
D_8037D35C = arg0;
}
void func_802A6394(void){
func_8028A010(ANIM_BANJO_LONGLEG_IDLE, 1.0f);
func_8029C7F4(1,1,3,2);
func_80297970(0.0f);
func_802A5374();
func_80292090(2);
func_8029C674();
}
void func_802A63F0(void){
enum bs_e sp1C = 0;
func_802A531C();
func_8029C6D0();
func_80299628(1);
if(func_80298850() == 0)
sp1C = BS_26_LONGLEG_IDLE;
if(func_802A51D0())
sp1C = BS_4C_LANDING_IN_WATER;
bs_setState(sp1C);
}
void func_802A6450(void){
func_8029C748();
func_802A5404();
}
void bsblongleg_drone_init(void){
func_802A5374();
bsdrone_init();
}
void bsblongleg_drone_update(void){
func_802A531C();
bsdrone_update();
if(func_802916CC(2))
bs_setState(BS_LONGLEG_EXIT);
}
void bsblongleg_drone_end(void){
bsdrone_end();
func_802A5404();
}

137
src/core2/bs/bPeck.c Normal file
View File

@@ -0,0 +1,137 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
void func_80292048(s32, f32, f32, f32);
void func_802875AC(AnimCtrl *, char *, s32);
/* .data */
f32 D_80364A60 = -1400.0f;
f32 D_80364A64 = 120.0f;
/* .bss */
f32 D_8037D370;
u8 D_8037D374;
u8 D_8037D375;
u8 D_8037D376;
u8 D_8037D377;
/* .code */
s32 func_802A6510(void){
return D_8037D376;
}
void bsbpeck_init(void){
D_8037D377 = 0;
switch(bs_getPrevState()){
case BS_8_BTROT_JUMP://L802A656C
D_8037D377++;
break;
case BS_5_JUMP:
case BS_2F_FALL:
case BS_3D_FALL_TUMBLING:
case BS_57_BOMB_END:
break;
}
if(func_80293234() == 1)
func_80293240(2);
func_8028A274(0x1a, 0.2f);
func_8029C7F4(1,3,1,6);
func_80299234(1200.0f, 10.0f);
func_8029E070(1);
gravity_set(D_80364A60);
player_setYVelocity(D_80364A64);
func_80292048(1, -38.0f, 0.0f, 105.0f);
func_80292048(0, -38.0f, 0.0f, -7.0f);
func_8028D638(0x23, 0x2A);
D_8037D375 = 0;
D_8037D374 = 0;
D_8037D376 = 1;
}
void func_802A664C(void){
f32 sp1C = 1.0f;
switch(D_8037D375){
case 0:
sp1C = 1.13f;
break;
case 1:
sp1C = 1.1f;
break;
case 2:
sp1C = 1.32f;
break;
}
miscflag_set(5);
func_8030E58C(SFX_42_KAZOOIE_RAH, sp1C);
player_setYVelocity(D_80364A64);
D_8037D375++;
}
void bsbpeck_update(void){
enum bs_e sp24 = 0;
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
func_802B6FA8();
if(D_8037D377){
func_80297970(func_80297A64() * 0.1);
}
switch(D_8037D374){
case 0://L802A6770
if(animctrl_isAt(aCtrl, 0.9126f)){
animctrl_setIndex(aCtrl, ANIM_BANJO_BPECK_ENTER);
func_8028774C(aCtrl, 0.0f);
animctrl_setDuration(aCtrl, 0.35f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_LOOP);
func_802875AC(aCtrl, "bsbpeck.c", 0xbd);
D_8037D370 = 0.5f;
D_8037D374 = 1;
}
break;
case 1://L802A67E8
if(animctrl_isAt(aCtrl, 0.1621f))
func_802A664C();
if(animctrl_isAt(aCtrl, 0.7f))
func_802A664C();
D_8037D370 -= time_getDelta();
if(D_8037D370 < 0.0f){
animctrl_reset(aCtrl);
animctrl_setSmoothTransition(aCtrl, 0);
animctrl_setIndex(aCtrl, ANIM_BANJO_BPECK);
animctrl_setDirection(aCtrl, 0);
animctrl_setDuration(aCtrl, 0.2f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
func_802875AC(aCtrl, "bsbpeck.c", 0xd4);
D_8037D374 = 2;
}
break;
case 2://L802A68C4
if(animctrl_isStopped(aCtrl))
sp24 = BS_2F_FALL;
break;
}//L802A68D8
if(func_8028B2E8()){
func_8029C5E8();
sp24 = BS_1_IDLE;
}
if(player_inWater())
sp24 = BS_4C_LANDING_IN_WATER;
bs_setState(sp24);
}
void bsbpeck_end(void){
D_8037D376 = 0;
ability_use(0xa);
func_80292048(1, 0.0f, 0.0f, 0.0f);
func_80292048(0, 0.0f, 0.0f, 0.0f);
func_8028D638(0, 0);
func_8029E070(0);
gravity_reset();
}

195
src/core2/bs/bShock.c Normal file
View File

@@ -0,0 +1,195 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"s
/* .data */
const f32 D_80364A70 = 1250.0f;
const f32 D_80364A74 = -1200.f;
/* .bss */
u8 D_8037D380;
u8 D_8037D381;
u8 D_8037D382;
/* .code */
void bsbshock_charge_init(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
animctrl_reset(aCtrl);
animctrl_setIndex(aCtrl, ANIM_BANJO_BSHOCK_CHARGE);
animctrl_setTransitionDuration(aCtrl, 0.4f);
animctrl_setDuration(aCtrl, 4.2f);
animctrl_setSubRange(aCtrl, 0.0f, 0.1061f);
animctrl_setPlaybackType(aCtrl,1);
func_802875AC(aCtrl, "bsbshock.c", 0x61);
func_8029C7F4(1,1,3,6);
if(func_8029B2E8() != 0.0f)
yaw_setIdeal(func_8029B33C());
func_8029797C(yaw_getIdeal());
func_802B6FA8();
func_802979AC(yaw_getIdeal(), func_80297A64());
func_8029E064(1);
func_8029E070(1);
func_80299BD4();
D_8037D382 = func_8030D90C();
sfxsource_setSfxId(D_8037D382, SFX_2C_PULLING_NOISE);
func_8030E04C(D_8037D382, 1.4f, 0.4f, -1.2f);
func_80292158(-50.0f);
func_80298528(-50.0f);
D_8037D380 = 1;
D_8037D381 = 0;
}
void bsbshock_charge_update(void){
enum bs_e sp2C = 0;
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
f32 sp1C[3];
if(func_8028B2E8()){
if(func_8023DB5C() % 2)
func_8029C348();
}
else
{//L802A6B94
func_8029C348();
}
func_802B6FA8();
_get_velocity(&sp1C);
if(button_released(BUTTON_A) && 0.0f < sp1C[1]){
gravity_reset();
}
switch(D_8037D381){
case 0:
if(func_8028B424())
sp2C = BS_3D_FALL_TUMBLING;
if(func_8028B254(0x82)){
animctrl_setSubRange(aCtrl, 0.0f, 1.0f);
animctrl_setDuration(aCtrl, 2.8f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
D_8037D381 = 1;
}
break;
case 1:
if(animctrl_isAt(aCtrl, 0.11f))
func_8030E2C4(D_8037D382);
if(animctrl_isAt(aCtrl, 0.4036f))
animctrl_setDuration(aCtrl, 1.4f);
if(animctrl_isStopped(aCtrl))
sp2C = BS_1_IDLE;
break;
}//L802A6CAC
if(func_8028B254(0x3C)){
if(animctrl_getAnimTimer(aCtrl) < 0.3637 && button_released(8)){
D_8037D380 = 0;
}//L802A6CF4
if(func_8028B2E8())
func_80297970(0.0f);
}
else{//L802A6D18
if(should_flap())
sp2C = BS_BFLAP;
if(should_beak_bust())
sp2C = BS_F_BBUSTER;
}//L802A6D44
if(animctrl_isAt( aCtrl, 0.3637f) && D_8037D380)
sp2C = BS_BSHOCK_JUMP;
if(animctrl_isAt(aCtrl, 0.5551f)){
player_setYVelocity(180.0f);
func_80292158(0.0f);
func_80298528(50.0f);
}
if(sp1C[1] < 0.0f && player_inWater())
sp2C = BS_4C_LANDING_IN_WATER;
bs_setState(sp2C);
}
void bsbshock_charge_end(void){
func_8030DA44(D_8037D382);
func_8029E064(0);
func_8029E070(0);
if(func_80292230() != 0.0f){
func_80292158(0.0f);
func_80298528(50.0f);
}
}
void bsbshock_init(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
animctrl_reset(aCtrl);
animctrl_setSmoothTransition(aCtrl, 0);
animctrl_setIndex(aCtrl, ANIM_BANJO_BSHOCK_JUMP);
animctrl_setDuration(aCtrl, 0.8f);
func_8028774C(aCtrl, 0.5304f);
animctrl_setSubRange(aCtrl, 0.0f, 1.0f);
animctrl_setPlaybackType(aCtrl,1);
func_802875AC(aCtrl, "bsbshock.c", 0x13a);
func_8029C7F4(1,1,3,6);
if(func_8029B2E8() != 0.0f)
yaw_setIdeal(func_8029B33C());
func_8029797C(yaw_getIdeal());
func_802B6FA8();
func_802979AC(yaw_getIdeal(), func_80297A64());
player_setYVelocity(D_80364A70);
gravity_set(D_80364A74);
func_8030E484(SFX_E_SHOCKSPRING_BOING);
func_8029E064(1);
func_8029E070(1);
ability_use(9);
func_80292158(-50.0f);
func_80298528(-50.0f);
D_8037D381 = 0;
}
void bsbshock_update(void){
enum bs_e sp2C = 0;
f32 sp20[3];
AnimCtrl * aCtrl = _player_getAnimCtrlPtr();
func_802B6FA8();
_get_velocity(&sp20);
if(animctrl_isAt(aCtrl, 0.7f))
func_8030E484(SFX_53_BANJO_HUIII);
if(button_released(BUTTON_A) && 0.0f < sp20[1])
gravity_reset();
if(D_8037D381 == 0){
func_8029C348();
if(sp20[1] < 0.0f)
sp2C = BS_2F_FALL;
}
if(!func_8028B2E8()){
if(func_8028B424())
sp2C = BS_3D_FALL_TUMBLING;
if(should_flap())
sp2C = BS_BFLAP;
if(should_beak_bust())
sp2C =BS_F_BBUSTER;
}
bs_setState(sp2C);
}
void bsbshock_end(void){
if(bs_getNextState() != BS_11_BPECK)
gravity_reset();
func_8029E064(0);
func_8029E070(0);
func_80292158(0.0f);
func_80298528(50.0f);
}

586
src/core2/bs/bSwim.c Normal file
View File

@@ -0,0 +1,586 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern void func_802921BC(f32);
extern f32 func_8029494C(void);
extern f32 func_8029B2D0(void);
extern bool func_8029E284(s32, f32);
extern bool func_8029E314(s32, f32);
/* .bss */
f32 D_8037D390;
u8 D_8037D394;
u8 D_8037D395;
u8 D_8037D396;
f32 D_8037D398;
void func_802A7140() {
func_8029C7F4(1, 3, 3, 9);
}
f32 func_802A716C() {
f32 sp24[3];
_get_velocity(&sp24);
ml_map_f(gu_sqrtf((sp24[0] * sp24[0]) + (sp24[1] * sp24[1]) + (sp24[2] * sp24[2])), 50.0f, 200.0f, 0.0f, 1.0f);
}
void func_802A71D8(void) {
f32 yaw_range;
f32 sp38;
f32 roll_range;
f32 sp30;
sp30 = func_8029B2D0();
sp38 = func_802A716C();
if (button_held(BUTTON_R)) {
roll_range = 45.0f;
yaw_range = 4.3f;
func_80299234(250.0f, 20.0f);
} else {
roll_range = 35.0f;
yaw_range = func_80257C48(sp38, 3.1f, 2.4f);
func_80299234(90.0f, func_80257C48(sp38, 3.8f, 2.2f));
}
roll_setIdeal(ml_map_f(sp30, -1.0f, 1.0f, -roll_range, roll_range));
yaw_setIdeal(mlNormalizeAngle(yaw_getIdeal() + ml_map_f(sp30, -1.0f, 1.0f, yaw_range, -yaw_range)));
}
void func_802A7304() {
f32 temp_f0;
pitch_setAngVel(func_80257C48(func_802A716C(), 70.0f, 30.0f), 0.9f);
temp_f0 = func_8029B2DC();
if (temp_f0 < 0.0f) {
pitch_setIdeal(ml_map_f(temp_f0, -1.0f, 0.0f, 275.0f, 360.0f));
return;
}
pitch_setIdeal(ml_map_f(temp_f0, 0.0f, 1.0f, 0.0f, 85.0f));
}
bool func_802A73BC(void) {
f32 sp1C;
sp1C = (map_get() == MAP_46_CCW_WINTER) ? 90.0f : 130.0f;
return func_80294574() && player_getYPosition() > (func_80294500() - sp1C);
}
void func_802A744C(void) {
if (func_8028B148() && bs_getState() != BS_4C_LANDING_IN_WATER) {
func_8035644C(0xAC);
}
roll_setAngularVelocity(30.0f, 0.9f);
gravity_set(0.0f);
func_80297BF8(-399.99f);
func_8029B324(0, 0.03f);
func_8029B324(1, 1.0f);
func_8029E070(1);
func_80294378(3);
func_802921BC(60.0f);
func_80297B64(2.0f);
}
bool bsbswim_inSet(enum bs_e move_id){
return move_id == BS_2B_DIVE_IDLE
|| move_id == BS_2C_DIVE_B
|| move_id == BS_39_DIVE_A
|| move_id == BS_30_DIVE_ENTER
|| move_id == BS_78
|| move_id == BS_7F_DIVE_OW
|| move_id == BS_54_SWIM_DIE
|| move_id == BS_97_DIVE_LOCKED
;
}
bool func_802A7588(void){
return bsbswim_inSet(bs_getState());
}
void func_802A75B0(void) {
if (!bsbswim_inSet(bs_getNextState())) {
pitch_setIdeal(0.0f);
roll_setIdeal(0.0f);
func_80297B94();
gravity_reset();
func_8029B0C0();
func_8029E070(0);
func_80294378(1);
func_802921BC(0.0f);
}
}
void func_802A762C() {
func_8028A010(0x70, 2.0f);
func_802A7140();
func_80297930(0);
func_802A744C();
func_80297B64(0.4f);
}
void func_802A7674() {
s32 state_id = 0;
func_802A71D8();
func_802A7304();
if (func_80294F78()) {
state_id = func_802926C0();
}
if (button_held(BUTTON_A)) {
state_id = BS_39_DIVE_A;
}
if (button_held(BUTTON_B)) {
state_id = BS_2C_DIVE_B;
}
if (func_802A73BC()) {
state_id = BS_2D_SWIM_IDLE;
}
if (!player_inWater()) {
state_id = BS_1_IDLE;
}
bs_setState(state_id);
}
void func_802A7718() {
func_802A75B0();
}
void func_802A7738(void) {
AnimCtrl* temp_s0;
AnimCtrl* temp_v0;
temp_v0 = _player_getAnimCtrlPtr();
temp_s0 = temp_v0;
animctrl_reset(temp_v0);
animctrl_setIndex(temp_s0, 0x3F);
func_8028774C(temp_s0, 0.4626f);
animctrl_setDuration(temp_s0, 1.0f);
func_802875AC(temp_s0, "bsbswim.c", 0x186);
func_802A7140();
func_802A744C();
D_8037D390 = 0.0f;
func_80297B64(1.0f);
func_802906A4(2);
}
void func_802A77D8(void) {
f32 sp34;
f32 sp30;
f32 sp24[3];
sp34 = pitch_get();
sp30 = yaw_get();
func_80256E24(sp24, sp34, sp30, 0.0f, 0.0f, D_8037D390);
func_80297930(sp24);
func_80297A0C(sp24);
}
void func_802A7838(void) {
s32 next_state;
AnimCtrl *anim_ctrl;
f64 temp_f2;
next_state = 0;
anim_ctrl = _player_getAnimCtrlPtr();
func_802A71D8();
func_802A7304();
if (D_8037D390 > 0.0f) {
func_802A77D8();
D_8037D390 = max_f(D_8037D390 - 10.0f, 0.0f);
}
if (animctrl_isAt(anim_ctrl, 0.1f)) {
func_8030EB88(SFX_0_BLOOP, 1.2f, 1.4f);
D_8037D390 = 600.0f;
}
if (animctrl_isAt(anim_ctrl, 0.4626f)) {
animctrl_setDuration(anim_ctrl, 1.0f);
}
if (animctrl_isAt(anim_ctrl, 0.2766f)) {
animctrl_setDuration(anim_ctrl, 3.0f);
}
if (!button_held(BUTTON_B)) {
if (button_held(BUTTON_A)) {
temp_f2 = (f64) animctrl_getAnimTimer(anim_ctrl);
if (temp_f2 <= 0.4625 && 0.1 < temp_f2) {
next_state = BS_39_DIVE_A;
}
} else if (animctrl_isAt(anim_ctrl, 0.4625f)) {
next_state = BS_2B_DIVE_IDLE;
}
}
if (animctrl_isAt(anim_ctrl, 0.4625f) && !button_held(BUTTON_B)) {
if (button_held(BUTTON_A)) {
next_state = BS_39_DIVE_A;
} else {
next_state = BS_2B_DIVE_IDLE;
}
}
if (func_802A73BC()) {
next_state = BS_2D_SWIM_IDLE;
}
if (player_inWater() == 0) {
next_state = BS_1_IDLE;
}
bs_setState(next_state);
}
void func_802A7A2C() {
func_802906A4(1);
func_802A75B0();
}
void func_802A7A54() {
func_8028A010(0x71, 0.75f);
func_802A7140();
func_802A744C();
D_8037D390 = 120.0f;
func_80297B64(2.0f);
func_802906A4(2);
}
void func_802A7AB0(void) {
s32 next_state;
AnimCtrl *anim_ctl;
next_state = 0;
anim_ctl = _player_getAnimCtrlPtr();
func_802A71D8();
func_802A7304();
func_802A77D8();
if (animctrl_isAt(anim_ctl, 0.17f)) {
func_8030E760(SFX_0_BLOOP, 1.9f, 10000);
}
if (animctrl_isAt(anim_ctl, 0.67f)) {
func_8030E760(SFX_0_BLOOP, 1.7f, 10000);
}
if (animctrl_isAt(anim_ctl, 0.99f)) {
if (!button_held(BUTTON_A)) {
next_state = BS_2B_DIVE_IDLE;
}
if (button_held(BUTTON_B)) {
next_state = BS_2C_DIVE_B;
}
}
if (func_802A73BC()) {
next_state = BS_2D_SWIM_IDLE;
}
if (!player_inWater()) {
next_state = BS_1_IDLE;
}
bs_setState(next_state);
}
void func_802A7BA8(void) {
func_802906A4(1);
func_802A75B0();
}
void func_802A7BD0(void) {
f32 sp3C;
f32 sp30[3];
f32 sp24[3];
func_80298760(func_80296560());
func_8028A274(0x1A0, 1.4f);
func_80299BFC(1.0f);
_player_getPosition(sp30);
func_80294980(&sp24);
func_80257F18(sp24, sp30, &sp3C);
yaw_setIdeal(mlNormalizeAngle(sp3C));
yaw_applyIdeal();
func_80297970(func_802987D4());
func_8029797C(sp3C);
func_802979AC(sp3C, func_80297A64());
func_8029C7F4(1, 1, 2, 3);
func_8028D5DC();
func_80292E48();
func_802A744C();
}
void func_802A7CA8(void) {
s32 next_state;
f32 plyr_pos[3];
ParticleEmitter *p_ctrl;
next_state = 0;
_player_getPosition(plyr_pos);
plyr_pos[1] += 60.0f;
p_ctrl = func_8029B950(plyr_pos, 25.0f);
particleEmitter_setParticleVelocityRange(p_ctrl, -60.0f, -50.0f, -60.0f, 60.0f, 100.0f, 60.0f);
particleEmitter_emitN(p_ctrl, 1);
if (baanim_isAt(0.3f)) {
func_80292EA4();
}
if (animctrl_isStopped(_player_getAnimCtrlPtr())) {
next_state = BS_2B_DIVE_IDLE;
}
bs_setState(next_state);
}
void func_802A7D74(void) {
func_80297CA8();
func_8028D5F4();
func_80292EA4();
func_802A75B0();
}
void func_802A7DAC(void) {
ability_use(ABILITY_3_CAMERA_CONTROL);
func_8028A180(0x3C, 1.0f);
func_802A7140();
func_80299234(500.0f, 5.0f);
func_80297930(0);
func_802A744C();
pitch_setAngVel(200.0f, 2.5f);
func_80299BD4();
D_8037D396 = 0;
}
void func_802A7E2C(void) {
s32 next_state;
AnimCtrl *sp38;
f32 sp34;
f32 sp30;
f32 sp24[3];
next_state = 0;
sp38 = _player_getAnimCtrlPtr();
switch (D_8037D396) {
case 0:
pitch_setIdeal(50.0f);
if (animctrl_isAt(sp38, 0.7247f)) {
sp34 = pitch_get();
sp30 = yaw_get();
func_80256E24(sp24, sp34, sp30, 0.0f, 0.0f, 800.0f);
func_80297A0C(sp24);
func_8029E3C0(1, 0.8f);
D_8037D396 = TRUE;
}
break;
case 1:
if (func_8029E1A8(1)) {
next_state = BS_2B_DIVE_IDLE;
}
break;
}
if (animctrl_isAt(sp38, 0.6f)) {
func_8030E4E4(SFX_0_BLOOP);
}
if (!player_inWater()) {
next_state = BS_1_IDLE;
}
bs_setState(next_state);
}
void func_802A7F4C(void){
func_802A75B0();
}
void func_802A7F6C(void) {
D_8037D394 = (bs_getPrevState() == BS_41_DIE) ? TRUE : FALSE;
if (D_8037D394 || level_get() == LEVEL_9_RUSTY_BUCKET_BAY || map_get() == MAP_46_CCW_WINTER) {
D_8037D395 = 0;
} else {
D_8037D395 = 1;
}
func_8029B930();
func_8028A010(0xB9, 0.7f);
func_802A7140();
func_802A744C();
func_80297B64(1.0f);
func_80297930(0);
func_80297A0C(0);
pitch_setIdeal(275.0f);
roll_setIdeal(0.0f);
D_8037D396 = 0;
func_8028D5DC();
func_8029E3C0(0, 0.0f);
func_8029E3C0(1, 0.0f);
func_802906A4(3);
func_80299CF4(SFX_CA_BANJO_DROWNING_1, 1.0f, 24000);
}
void func_802A8098(void) {
s32 next_state;
f32 sp40[3];
ParticleEmitter *p_ctrl;
f32 plyr_pos[3];
next_state = 0;
func_80256E24(sp40, -90.0f, 0.0f, 0.0f, 0.0f, 100.0f);
func_80297930(sp40);
func_80297A0C(sp40);
func_8029E22C(1);
if( func_8029E284(1, 0.2f)
|| func_8029E284(1, 0.8f)
|| func_8029E284(1, 1.4f)
) {
func_80299CF4(SFX_CB_BANJO_DROWNING_2, 1.0f, 24000);
}
switch (D_8037D396) {
case 0:
if (func_8023DB4C(1) == 0) {
_player_getPosition(plyr_pos);
plyr_pos[1] += 60.0f;
p_ctrl = func_8029B950(plyr_pos, 25.0f);
particleEmitter_setParticleVelocityRange(p_ctrl, -60.0f, -50.0f, -60.0f, 60.0f, 100.0f, 60.0f);
particleEmitter_emitN(p_ctrl, 1);
}
if (func_8029E270(1) < 1.8 && func_802A73BC() && D_8037D395) {
next_state = BS_2D_SWIM_IDLE;
}
if (func_8029E314(1, 1.55f)) {
player_setYVelocity(-50.0f);
}
if (func_8029E284(1, 1.9f)) {
func_802914CC(0xD);
func_802BF2C0(80.0f);
if (D_8037D394) {
func_8029E3C0(0, 0.5f);
} else {
func_8029C984();
func_8029E3C0(0, 2.75f);
}
}
break;
case 1:
break;
}
if (func_8029E1A8(0)) {
func_8029B890();
}
bs_setState(next_state);
}
void func_802A82D4(void) {
func_802906A4(1);
func_80291548();
func_8024BD08(0);
func_8028D5F4();
if (bs_getNextState() != BS_5A_LOADZONE) {
func_80346CE8();
}
func_802A75B0();
}
void func_802A8330(void) {
f32 sp44[3];
f32 sp38[3];
f32 sp2C[3];
if (func_80298850() && func_80298800(sp2C)) {
_player_getPosition(sp44);
func_8025727C(sp44[0], sp44[1], sp44[2], sp2C[0], sp2C[1], sp2C[2], &sp38[0], &sp38[1]);
pitch_setIdeal(sp38[0]);
yaw_setIdeal(sp38[1]);
roll_setIdeal(0.0f);
}
}
void func_802A83C0(void) {
func_8028A010(0x70, 2.0f);
func_802A7140();
func_80297930(0);
func_80297B64(0.4f);
func_802A744C();
func_802A8330();
}
void func_802A8410(void) {
s32 next_state;
next_state = 0;
if (func_80298850() == 0) {
next_state = BS_2B_DIVE_IDLE;
}
func_802A8330();
bs_setState(next_state);
}
void func_802A844C(void){
func_802A75B0();
}
void func_802A846C(void) {
AnimCtrl *temp_s0;
f32 sp28;
temp_s0 = _player_getAnimCtrlPtr();
func_8029CCC4();
sp28 = func_8029494C();
if (bs_getPrevState() == 0xF) {
sp28 = max_f(sp28, 600.0f);
}
if (sp28 > 80.0f) {
animctrl_reset(temp_s0);
animctrl_setIndex(temp_s0, ANIM_BANJO_ROLL);
animctrl_setPlaybackType(temp_s0, ANIMCTRL_STOPPED);
animctrl_setDuration(temp_s0, 1.2f);
func_8028774C(temp_s0, 0.8204f);
func_802875AC(temp_s0, "bsbswim.c", 0x417);
} else {
animctrl_reset(temp_s0);
animctrl_setIndex(temp_s0, 0x57);
animctrl_setPlaybackType(temp_s0, ANIMCTRL_LOOP);
animctrl_setDuration(temp_s0, 1.2f);
func_8028774C(temp_s0, 0.6412f);
func_802875AC(temp_s0, "bsbswim.c", 0x41E);
}
D_8037D398 = ml_map_f(sp28, 40.0f, 1000.0f, -300.0f, -1200.0f);
player_setYVelocity(D_8037D398);
func_8029C7F4(1, 3, 3, 9);
func_802A744C();
func_802978DC(6);
}
void func_802A85EC(void) {
s32 next_state;
f32 sp38[3];
ParticleEmitter *sp34;
next_state = 0;
_player_getPosition(sp38);
sp38[1] += 60.0f;
sp34 = func_8029B950(sp38, 20.0f);
particleEmitter_setParticleVelocityRange(sp34, -30.0f, -30.0f, -30.0f, 30.0f, 30.0f, 30.0f);
particleEmitter_emitN(sp34, 1);
if (D_8037D398 < 0.0f) {
D_8037D398 += max_f(mlAbsF(D_8037D398) * 0.1, 50.0f);
player_setYVelocity(D_8037D398);
}
if (func_8028B2E8()) {
next_state = BS_2D_SWIM_IDLE;
}
if (!player_inWater()) {
next_state = BS_1_IDLE;
}
if (func_80297AAC() >= 0.0f) {
next_state = BS_2D_SWIM_IDLE;
}
bs_setState(next_state);
}
void func_802A872C(void){
func_802A75B0();
}
void func_802A874C(void){
func_802A744C();
bsdrone_init();
}
void func_802A8774(void){
bsdrone_update();
}
void func_802A8794(void){
bsdrone_end();
func_802A75B0();
}

769
src/core2/bs/bTrot.c Normal file
View File

@@ -0,0 +1,769 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.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(func_80291698(3))
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)
&& func_80291698(3)
&& func_80297A64() == 0.0f
){
func_802917C4(3);
}
}
f32 func_802A88B0(void){
if(func_8028B128())
return D_80364AA0;
if(func_80291698(3))
return D_80364A9C;
return D_80364A94;
}
f32 func_802A8900(void){
if(func_80291698(3))
return D_80364A98;
return D_80364A90;
}
f32 func_802A8934(void){
if(func_8028B128())
return D_80364AB8;
if(func_80291698(3))
return D_80364AB0;
return D_80364AA8;
}
f32 func_802A8984(void){
if(func_8028B128())
return D_80364AB4;
if(func_80291698(3))
return D_80364AAC;
return D_80364AA4;
}
void func_802A89D4(void){
f32 sp24 = func_8029B30C();
if(!func_8029B300()){
func_80297970(0.0f);
}
else{
func_80297970(func_80257C48(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(3);
func_8029CF48(4,1,0.24f);
func_80292090(2);
}
void func_802A8AD8(void){
func_80299650(func_80291684(3), func_80291670(3));
if(miscflag_isTrue(MISC_FLAG_10_TOUCHING_TURBO_TRAINERS) &&(bs_getState() != BS_17_BTROT_EXIT)){
miscflag_clear(MISC_FLAG_10_TOUCHING_TURBO_TRAINERS);
func_802917E4(3, func_80294A40());
func_803219F4(4);
}
if(func_802916CC(3)){
if(func_8029DFE0()){
func_8029E0DC(0);
if(miscflag_isFalse(0x14))
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;
func_80292090(1);
func_8029B0C0();
func_8029E070(0);
func_8029E064(0);
pitch_setIdeal(0.0f);
roll_setIdeal(0.0f);
miscflag_clear(3);
if(next_state != BS_5A_LOADZONE)
func_802917E4(3, 0.0f);
func_802A8AD8();
func_80289F10(1);
func_8029CF48(4, 0, 0.0f);
}
int func_802A8C60(void){
if(func_80291698(3))
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);
func_8028774C(aCtrl, animctrl_getAnimTimer(aCtrl));
func_802875AC(aCtrl, "bsbtrot.c", 0x12e);
}
}
enum asset_e func_802A8D00(enum asset_e arg0, enum asset_e arg1){
if(func_802916CC(3))
return arg0;
else
return arg1;
}
enum bs_e func_802A8D34(enum bs_e arg0){
if(miscflag_isTrue(0xf))
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(func_80294F78())
arg0 = func_802926C0();
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();
func_8028A274(0x16, 1.0f);
func_8029C7F4(1,1,2,2);
func_80297970(0.0f);
func_802A8A40();
func_80299BD4();
func_802952A8(0,0);
}
void bsbtrot_enter_update(void){
enum bs_e next_state = 0;
AnimCtrl *aCtrl = _player_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){
func_8028A010(ANIM_BANJO_BTROT_IDLE, 1.2f);
func_8029C7F4(1,1,1,2);
func_80297970(0.0f);
func_802A8A40();
}
void bsbtrot_stand_update(void){
enum bs_e next_state = 0;;
func_802A8850();
func_802A8AD8();
if(func_80291698(3))
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(0x15, 0x44);
}
void func_802A9054(void){
f32 tmp = 1.0f;
func_80289EC8(func_802A8900(), func_802A88B0(), func_802A8984(), func_802A8934());
if(func_8028B394()){
tmp = ml_map_f(func_80297AF0(), 0.0f, 1.0f, 0.6f, 0.9f);
func_80289EF8(tmp);
}
else{
func_80289EF8(tmp);
}
}
void bsbtrot_walk_init(void){
func_8028A010(func_802A9030(), 0.53f);
func_8029C7F4(2,1,1,2);
func_802A8A40();
func_802A9054();
}
void bsbtrot_walk_update(void){
enum bs_e sp1C = 0;
AnimCtrl *aCtrl = _player_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(func_80291698(3)){
func_802A87C0();
}
else{
if(animctrl_isAt(aCtrl, 0.2115f) || animctrl_isAt(aCtrl, 0.7115f))
func_802A87C0();
}
if(!func_8029B300() && func_80297C04(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 = _player_getAnimCtrlPtr();
animctrl_reset(aCtrl);
animctrl_setIndex(aCtrl, ANIM_BANJO_BTROT_JUMP);
animctrl_setDuration(aCtrl, 1.4f);
animctrl_setTransitionDuration(aCtrl, 0.1f);
func_8028774C(aCtrl, 0.2f);
animctrl_setSubRange(aCtrl, 0.0f, 0.4002f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
func_802875AC(aCtrl, "bsbtrot.c", 0x272);
func_802A8A40();
func_80289F10(1);
func_802991A8(1);
func_8029957C(3);
func_802978DC(6);
if(func_8029B2E8() != 0.0f)
yaw_setIdeal(func_8029B33C());
func_8029797C(yaw_getIdeal());
func_802A89D4();
func_802979AC(yaw_getIdeal(), func_80297A64());
player_setYVelocity(D_80364ABC);
gravity_set(D_80364AC0);
func_8030E484(SFX_48_KAZOOIE_RUUH);
D_8037D3A4 = 0;
}
void bsbtrot_jump_update(void){
enum bs_e sp2C = 0;
AnimCtrl * aCtrl = _player_getAnimCtrlPtr();
f32 sp1C[3];
func_802A8AD8();
if(func_80291698(3))
func_802A87C0();
if(miscflag_isTrue(0xF))
func_802978A4();
else
func_802A89D4();
_get_velocity(&sp1C);
if(button_released(BUTTON_A) && 0.0f < sp1C[1])
gravity_reset();
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(func_8028B2E8()){
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 < func_80297A64())
func_80299AAC();
func_8029C22C();
}
break;
case 3://L802A9660
if(220.0f < func_80297A64())
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 < func_80297A64())
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 < func_80297A64())
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(func_8028B424())
sp2C = BS_3D_FALL_TUMBLING;
if(player_inWater())
sp2C = BS_4C_LANDING_IN_WATER;
if(func_8028B2E8()){
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){
gravity_reset();
func_802A8BB0();
}
void bsbtrot_exit_init(void){
func_8028A274(7, 0.6f);
func_80289F10(1);
func_80297970(0.0f);
}
void bsbtrot_exit_update(void){
enum bs_e sp1C = 0;
if(animctrl_isStopped(_player_getAnimCtrlPtr()))
sp1C = BS_1_IDLE;
bs_setState(sp1C);
}
void bsbtrot_exit_end(void){
func_802A8BB0();
}
void bsbtrot_slide_init(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
animctrl_reset(aCtrl);
animctrl_setIndex(aCtrl, ANIM_BANJO_BTROT_JUMP);
func_8028774C(aCtrl, 0.069f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_STOPPED);
func_802875AC(aCtrl, "bsbtrot.c", 0x382);
func_802A8A40();
func_8029C7F4(1,1,3,3);
func_8029797C(yaw_getIdeal());
func_802979AC(yaw_getIdeal(), func_80297A64());
func_8029E070(1);
func_8029E064(1);
pitch_setAngVel(1000.0f, 12.0f);
roll_setAngularVelocity(1000.0f, 12.0f);
func_80297970(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(func_80291698(3))
func_802A87C0();
func_80299AAC();
D_8037D3A0 = max_f(D_8037D3A0-time_getDelta(), 0.0f);
if(player_shouldSlideTrot()){
func_80294480(sp30);
func_8025801C(sp30, &sp2C);
func_80299628(1);
func_80297970(ml_map_f(pitch_getIdeal(), 20.0f, 60.0f, 550.0f, 700.0f));
func_8029797C(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) && func_8028B2E8())
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 = _player_getAnimCtrlPtr();
animctrl_reset(aCtrl);
animctrl_setIndex(aCtrl, ANIM_BANJO_BTROT_JUMP);
animctrl_setDuration(aCtrl, 1.4f);
func_8028774C(aCtrl, 0.4653f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_STOPPED);
func_802875AC(aCtrl, "bsbtrot.c", 0x400);
func_802A8A40();
func_8029C7F4(1,1,3,6);
func_8029797C(yaw_getIdeal());
func_802A89D4();
func_802979AC(yaw_getIdeal(), func_80297A64());
D_8037D3A4 = 0;
}
void bsbtrot_fall_update(void){
enum bs_e sp2C = 0;
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
f32 sp1C[3];
func_802A8AD8();
if(func_80291698(3))
func_802A87C0();
if(miscflag_isTrue(0xf))
func_802978A4();
else
func_802A89D4();
_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(func_8028B2E8()){
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 < func_80297A64()){
func_80299AAC();
}
func_8029C22C();
D_8037D3A4 = 2;
}
break;
case 2://L802A9E78
if(220.0f < func_80297A64())
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 < func_80297A64())
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 < func_80297A64())
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(func_8028B424())
sp2C = BS_3D_FALL_TUMBLING;
if(func_8028B2E8()){
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){
func_8028A010(ANIM_BANJO_BTROT_IDLE, 1.2f);
func_8029C7F4(1,1,3,2);
func_80297970(0.0f);
func_802A8A40();
func_80292090(2);
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());
func_8028A274(0x66, 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();
func_80297970(func_802987D4());
func_8029797C(sp3C);
func_802979AC(sp3C, func_80297A64());
func_8029C7F4(1,1,2,3);
if(func_802987B4() == 2)
func_802978DC(6);
player_setYVelocity(func_802987C4());
gravity_set(func_802987E4());
func_8028D5DC();
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(func_8028B424())
sp1C = BS_3D_FALL_TUMBLING;
if(func_8028B2E8() && baanim_isStopped())
sp1C = BS_15_BTROT_IDLE;
if(animctrl_isStopped(_player_getAnimCtrlPtr()) && player_inWater())
sp1C = BS_2D_SWIM_IDLE;
bs_setState(sp1C);
}
void bsbtrot_ow_end(void){
func_80297CA8();
gravity_reset();
func_8028D5F4();
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();
}

304
src/core2/bs/bWhirl.c Normal file
View File

@@ -0,0 +1,304 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
const f32 D_80364AD0 = 80.0f;
const f32 D_80364AD4 = 425.0f;
const f32 D_80364AD8 = 0.56f;
const f32 D_80364ADC = 0.4f;
const f32 D_80364AE0 = 693.5f;
const f32 D_80364AE4 = -1200.0f;
/* .bss */
float D_8037D3B0;
u8 D_8037D3B4;
/* .code */
void func_802AA400(void){
f32 sp1C = func_8029B30C();
if(!func_8029B300()){
func_80297970(0.0f);
}else{
func_80297970(func_80257C48(sp1C, D_80364AD0, D_80364AD4));
}
}
static void __bsbwhirl_end(void){
enum bs_e state = bs_getNextState();
if(!( state == BS_1B_WONDERWING_IDLE
|| state == BS_1C_WONDERWING_WALK
|| state == BS_1D_WONDERWING_JUMP
|| state == BS_1E_WONDERWING_EXIT
|| state == BS_A4_WONDERWING_DRONE
|| state == BS_A5_WONDERWING_UNKA5
)
){
func_8029B0C0();
func_8029E070(0);
func_8025A55C(-1, 0xfa0, 0xd);
func_8024BD08(1);
func_8025A7DC(COMUSIC_25_USING_GOLD_FEATHERS);
}
func_80289F10(1);
}
static void __bsbwhirl_spawnSparkle(void){
func_8033E3F0(2,1);
}
enum bs_e func_802AA510(enum bs_e arg0){
if(func_8029B300(arg0) > 0)
arg0 = BS_1C_WONDERWING_WALK;
if(button_released(BUTTON_Z))
arg0 = BS_1E_WONDERWING_EXIT;
if(button_pressed(BUTTON_A) && func_8028B2E8())
arg0 = BS_1D_WONDERWING_JUMP;
if(player_inWater())
arg0 = BS_2D_SWIM_IDLE;
return arg0;
}
void func_802AA58C(enum bs_e *arg0){
D_8037D3B0 += time_getDelta();
if(2.0 < D_8037D3B0){
D_8037D3B0 = 0.0f;
func_80346C10(arg0, BS_1E_WONDERWING_EXIT, -1, ITEM_10_GOLD_FEATHER, 1);
if(*arg0 != BS_1E_WONDERWING_EXIT){
FUNC_8030E624(SFX_3E9_UNKNOWN, 0.8f, 28000);
func_802D8BE4(1);
}
}
}
void bsbwhirl_enter_init(void){
func_8028A274(0x22, 0.5f);
func_8029C7F4(1,1,1,2);
func_80297970(0.0f);
func_8029B324(0, 0.03f);
func_8029B324(1, 1.0f);
func_8029E070(1);
D_8037D3B0 = 0.0f;
func_8024BD08(0);
func_8025A55C(0, 0xfa0, 0xd);
func_8025A6EC(0x25, 0x6d60);
func_80299BD4();
func_802952A8(1,0);
}
void bsbwhirl_enter_update(void){
enum bs_e sp1C = 0;
func_802952A8(1,1);
if(animctrl_isStopped(_player_getAnimCtrlPtr()))
sp1C = BS_1B_WONDERWING_IDLE;
bs_setState(sp1C);
}
void bsbwhirl_enter_end(void){
func_802952A8(1,1);
__bsbwhirl_end();
}
void bsbwhirl_stand_init(void){
func_8028A010(ANIM_BANJO_WONDERWING_IDLE, 1.0f);
func_8029C7F4(1,1,1,2);
func_80297970(0.0f);
}
void bsbwhirl_stand_update(void){
enum bs_e sp1C = 0;
__bsbwhirl_spawnSparkle();
sp1C = func_802AA510(sp1C);
func_802AA58C(&sp1C);
if(player_isSliding())
sp1C = BS_SLIDE;
if(player_inWater())
sp1C = BS_4C_LANDING_IN_WATER;
bs_setState(sp1C);
}
void bsbwhirl_stand_end(void){
__bsbwhirl_end();
}
void bsbwhirl_walk_init(void){
func_8028A010(ANIM_BANJO_WONDERWING_WALK, 0.53f);
func_80289EC8(D_80364AD0, D_80364AD4, D_80364AD8, D_80364ADC);
func_8029C7F4(2,1,1,2);
}
void bsbwhirl_walk_update(void){
enum bs_e sp1C = 0;
__bsbwhirl_spawnSparkle();
func_8029AD28(0.47f, 4);
func_8029AD28(0.97f, 3);
func_802AA400();
if(!func_8029B300() && func_80297C04(1.0f))
sp1C = BS_1B_WONDERWING_IDLE;
if(button_released(BUTTON_Z))
sp1C = BS_1E_WONDERWING_EXIT;
if(button_pressed(BUTTON_A) && func_8028B2E8())
sp1C = BS_1D_WONDERWING_JUMP;
if(player_inWater())
sp1C = BS_4C_LANDING_IN_WATER;
func_802AA58C(&sp1C);
if(player_isSliding())
sp1C = BS_SLIDE;
bs_setState(sp1C);
}
void bsbwhirl_walk_end(void){
__bsbwhirl_end();
}
void bsbwhirl_jump_init(void){
AnimCtrl * aCtrl = _player_getAnimCtrlPtr();
animctrl_reset(aCtrl);
animctrl_setIndex(aCtrl, ANIM_BANJO_WONDERWING_JUMP);
animctrl_setDuration(aCtrl, 0.8f);
animctrl_setTransitionDuration(aCtrl, 0.134f);
func_8028774C(aCtrl, 0.14f);
animctrl_setSubRange(aCtrl, 0.0f, 0.4495f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
func_802875AC(aCtrl, "bsbwhirl.c", 0x181);
func_8029C7F4(1,1,3,6);
if(func_8029B2E8() != 0.0f)
yaw_setIdeal(func_8029B33C());
func_8029797C(yaw_getIdeal());
func_802AA400();
func_802979AC(yaw_getIdeal(), func_80297A64());
player_setYVelocity(D_80364AE0);
gravity_set(D_80364AE4);
func_80299B58(0.91f, 1.09f);
D_8037D3B4 = 0;
}
void bsbwhirl_jump_update(void){
enum bs_e sp2C = 0;
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
f32 sp1C[3];
__bsbwhirl_spawnSparkle();
func_802AA400();
_get_velocity(&sp1C);
if(button_released(BUTTON_A) && 0.0f < sp1C[1])
gravity_reset();
switch(D_8037D3B4){
case 0://L802AAB48
if(func_8028B254(0x82)){
animctrl_setSubRange(aCtrl, 0.0f, 1.0f);
animctrl_setDuration(aCtrl, 0.8f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
D_8037D3B4 = 1;
}
break;
case 1://L802AAB90
if(player_inWater())
sp2C = BS_2D_SWIM_IDLE;
if(func_8028B2E8()){
D_8037D3B4 = 2;
func_8029C5E8();
}
break;
case 2://L802AABC8
if(animctrl_isStopped(aCtrl))
sp2C = BS_1B_WONDERWING_IDLE;
sp2C = func_802AA510(sp2C);
break;
}//L802AABE8
func_802AA58C(&sp2C);
if(player_inWater())
sp2C = BS_4C_LANDING_IN_WATER;
bs_setState(sp2C);
}
void bsbwhirl_jump_end(void){
gravity_reset();
__bsbwhirl_end();
}
void bsbwhirl_exit_init(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
animctrl_reset(aCtrl);
animctrl_setSmoothTransition(aCtrl, 0);
animctrl_setDirection(aCtrl, 0);
animctrl_setIndex(aCtrl, ANIM_BANJO_WONDERWING_EXIT);
animctrl_setDuration(aCtrl, 0.5f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
func_802875AC(aCtrl, "bsbwhirl.c", 0x201);
func_80289F10(1);
func_8029957C(2);
func_80297970(0.0f);
comusic_8025AB44(COMUSIC_25_USING_GOLD_FEATHERS, 0.0f, 0xFA0);
}
void bsbwhirl_exit_update(void){
enum bs_e sp1C = 0;
if(animctrl_isStopped(_player_getAnimCtrlPtr()))
sp1C = BS_1_IDLE;
bs_setState(sp1C);
}
void bsbwhirl_exit_end(void){
__bsbwhirl_end();
}
void bsbwhirl_drone_init(void){
bsdrone_init();
}
void bsbwhirl_drone_update(void){
__bsbwhirl_spawnSparkle();
bsdrone_update();
}
void bsbwhirl_drone_end(void){
bsdrone_end();
__bsbwhirl_end();
}
void func_802AADBC(void){
func_8028A010(ANIM_BANJO_WONDERWING_IDLE, 1.0f);
func_8029C7F4(1,1,3,2);
func_80297970(0.0f);
func_8029C674();
}
void func_802AAE08(void){
enum bs_e sp1C =0;
__bsbwhirl_spawnSparkle();
func_8029C6D0();
if(!func_80298850())
sp1C = BS_1B_WONDERWING_IDLE;
bs_setState(sp1C);
}
void func_802AAE4C(void){
func_8029C748();
__bsbwhirl_end();
}

208
src/core2/bs/bbuster.c Normal file
View File

@@ -0,0 +1,208 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
/*.data*/
const f32 D_80364990 = 400.0f;
const f32 D_80364994 = -800.0f;
const f32 D_80364998 = 730.0f;
const f32 D_8036499C = -2110.0f;
const f32 D_803649A0 = 2300.0f;
const f32 D_803649A4 = -20000.0f;
const f32 D_803649A8 = -5000.0f;
/*.bss*/
f32 D_8037D2B0;
u8 D_8037D2B4;
u8 D_8037D2B5;
u8 D_8037D2B6;
u8 D_8037D2B7;
u8 D_8037D2B8;
u8 D_8037D2B9;
u8 D_8037D2BA;
u8 D_8037D2BB;
u8 D_8037D2BC;
void func_802A02B4(s32 arg0);
/*.code*/
int func_8029FB20(Actor *arg0){
return !arg0->unk124_0;
}
void func_8029FB30(void) {
f32 i;
for(i = 0.0f; i < 359.0; i += 60.0){
func_80292974(i, 730.0f, 100.0f);
}
for(i = 0.0f; i < 359.0; i += 60.0){
func_80292974(mlNormalizeAngle(i + 30.0f), 430.0f, 40.0f);
}
}
s32 func_8029FC4C(void){
return D_8037D2B8;
}
s32 bsbbuster_hitboxActive(void){
return D_8037D2B7;
}
void bsbbuster_init(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
f32 sp20[3];
animctrl_reset(aCtrl);
animctrl_setSmoothTransition(aCtrl, 0);
animctrl_setIndex(aCtrl, ANIM_BANJO_BBUSTER);
animctrl_setDuration(aCtrl, 1.02f);
animctrl_setSubRange(aCtrl, 0.0f, 0.35f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
func_802875AC(aCtrl, "bsbbuster.c", 0x81);
func_8029C7F4(1,1,3,6);
gravity_set(0.0f);
func_80297970(0.0f);
ml_vec3f_clear(sp20);
func_80297A0C(sp20);
func_8029E070(1);
func_802A02B4(0);
D_8037D2B9 = 0;
D_8037D2B7 = 0;
D_8037D2B8 = 0;
D_8037D2B0 = 0.0001f;
D_8037D2B4 = 0;
D_8037D2B5 = 0;
D_8037D2B6 = 0;
D_8037D2BC = 0;
D_8037D2BA = 0;
}
void bsbbuster_update(void){
enum bs_e sp44 = 0;
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
s32 sp3C;
f32 sp30[3];
s32 sp24[3];
D_8037D2B8 = 0;
if(animctrl_isAt(aCtrl, 0.24f))
func_80299BD4();
switch(D_8037D2BA){
case 0://8029FDF0
if(animctrl_isStopped(_player_getAnimCtrlPtr())){
animctrl_setDuration(aCtrl, 0.4f);
D_8037D2BA = 1;
}
break;
case 1://8029FE24
D_8037D2B0 -= time_getDelta();
if(D_8037D2B0 <= 0.0f){
gravity_reset();
func_80297BF8(D_803649A8);
gravity_set(D_803649A4);
player_setYVelocity(D_803649A0);
D_8037D2B7 = 1;
D_8037D2BA = 2;
}
break;
case 2://8029FEA0
if(D_8037D2B5 == 0 && func_80297AAC() < 0.0f){
func_8030E760(SFX_45_KAZOOIE_HUGHH, 1.2f, 0x7530);
D_8037D2B5++;
}
if(D_8037D2B4 == 0 && func_8028B254(0x8c)){
func_8030E5F4(SFX_13_BEAKBUSTER_GROUND, 1.0f);
D_8037D2B4++;
}
if(D_8037D2B6 == 0 && func_8028B254(0x4b)){
func_80250D94(1.0f, 0.3f, 0.4f);
D_8037D2B6++;
}
D_8037D2B9 = miscflag_isTrue(8);
func_8029445C(sp30);
//L8029FF78
if(((0.0f <= sp30[1])? sp30[1] : -sp30[1]) < 1.0){
D_8037D2BC++;
}else{
D_8037D2BC = 0;
}
if(D_8037D2B7 == 2){
D_8037D2B7 = 0;
}
if(func_8028B2E8() || D_8037D2B9 || !(D_8037D2BC < 4)){
func_802BB3DC( 0, 45.0f, 0.71f);
func_8029AE74(0);
func_8029FB30();
func_80297A0C(0);
gravity_set(0.0f);
func_80297970(0.0f);
D_8037D2B7 = 2;
D_8037D2B8 = 1;
D_8037D2B0 = 0.09f;
D_8037D2BA = 3;
_player_getPosition(&sp24);
func_8032728C(sp24, 150.0f, 2, func_8029FB20);
if(func_802931DC(&sp3C)){
sp44 = BS_SPLAT;
}
}
break;
case 3://802A00F0
D_8037D2B7 = 0;
if(func_80297C6C() == 1){
func_80297CCC(0.9f);
}
D_8037D2B0 -= time_getDelta();
if(D_8037D2B0 <= 0.0f){
if(D_8037D2BB){
player_setYVelocity(D_80364990);
gravity_set(D_80364994);
}else{
player_setYVelocity(D_80364998);
gravity_set(D_8036499C);
}
animctrl_setSubRange(aCtrl, 0.0f, 0.7299f);
animctrl_setDuration(aCtrl, 1.9f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
D_8037D2BA = 4;
}
break;
case 4://802A01CC
func_802B6FA8();
if(animctrl_isStopped(aCtrl)){
animctrl_setSubRange(aCtrl, 0.0f, 0.74f);
animctrl_setDuration(aCtrl, 15.0f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
}
if(func_8028B2E8()){
animctrl_setSubRange(aCtrl, 0.0f, 1.0f);
animctrl_setDuration(aCtrl, 1.9f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
sp44 = BS_20_LANDING;
}
break;
}
if(player_inWater())
sp44 = BS_4C_LANDING_IN_WATER;
bs_setState(sp44);
}//L802A024C
void bsbbuster_end(void){
gravity_reset();
func_80297B94();
func_8029E070(0);
D_8037D2B7 = 0;
D_8037D2B8 = 0;
}
void func_802A02B4(s32 arg0){
D_8037D2BB = arg0;
}

64
src/core2/bs/bee.c Normal file
View File

@@ -0,0 +1,64 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
void func_80293D48(f32, f32);
void pitch_setAngVel(f32, f32);
void roll_setAngularVelocity(f32, f32);
int bsbee_inSet(s32 move_idx);
void func_802A02C0(void){
if(bsbee_inSet(bs_getNextState()) == 0){
pitch_setIdeal(0.0f); //pitch_setIdeal
roll_setIdeal(0.0f);
func_8029B0C0();
func_8029E070(0);
func_8029E064(0);
miscflag_clear(3);
miscflag_clear(4);
func_80293D74();
}
func_80289F10(1);
}
void func_802A0340(void){
if(bsbee_inSet(bs_getPrevState()) == 0){
pitch_setAngVel(1000.0f, 12.0f);
roll_setAngularVelocity(1000.0f, 12.0f);
func_80293D48(50.0f, 25.0f);
miscflag_set(3);
miscflag_set(4);
}
}
// bsBee_inSet
int bsbee_inSet(s32 move_idx){
return (move_idx == 0x85)
|| (move_idx == 0x86)
|| (move_idx == 0x87)
|| (move_idx == 0x88)
|| (move_idx == 0x89)
|| (move_idx == 0x8a)
|| (move_idx == 0x8b)
|| (move_idx == 0x9d)
|| (move_idx == 0x6b)
|| bsBeeFly_inSet(move_idx); //bsBeeFly_inSet
}
void bsbee_drone_init(void){
func_802A0340();
bsdrone_init();
}
void bsbee_drone_update(void){
bsdrone_update();
}
void bsbee_drone_end(void){
bsdrone_end();
func_802A02C0();
}

270
src/core2/bs/beeFly.c Normal file
View File

@@ -0,0 +1,270 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
void func_80354030(f32*, f32);
f32 func_8029B2E8(void);
f32 func_8029B33C(void);
void func_8029797C(f32);
void func_80297970(f32);
void func_802921BC(f32);
void func_80297BF8(f32);
void func_802BFE50(f32, f32, f32);
void func_80299234(f32, f32);
f32 func_8029B2D0(void);
f32 func_8029B2DC(void);
f32 func_80297A64(void);
void func_802979AC(f32, f32);
void func_8028FDC8(f32);
void func_80290B40(f32);
void func_80290A6C(void);
/* .data */
f32 D_803649B0[5] = {0.38f, 0.3f, 0.24f, 0.18f, 0.14};
f32 D_803649C4[5] = {0.0f, 0.2f, 0.3f, 0.4f, 0.5f};
/* .bss */
u8 D_8037D2C0;
int bsBeeFly_inSet(s32);
void func_802A04F0(void){
f32 plyrPos[3]; //sp1C
_player_getPosition(&plyrPos);
plyrPos[0] += randf2(-30.0f, 30.0f);
plyrPos[1] += 30.0f + randf2(0.0f, 30.0f);
plyrPos[2] += randf2(-30.0f, 30.0f);
func_803541C0(3);
func_803541CC(0x50);
func_80354030(plyrPos, 0.5f);
}
void func_802A0590(void){
func_802A0340();
func_8028A274(0x1df, 1.5f);
func_8029C7F4(1,1,3,6);
if(func_8029B2E8() != 0.0f){
yaw_setIdeal(func_8029B33C());
}
func_8029797C(yaw_getIdeal());
func_80297970(0.0f);
gravity_set(-1200.0f);
D_8037D2C0 = 0;
}
void func_802A0630(void){
s32 next_state = 0;
AnimCtrl * mvmnt; //sp1C
mvmnt = _player_getAnimCtrlPtr();
switch(D_8037D2C0){
case 0:
if(!animctrl_isAt(mvmnt, 0.266f))
break;
player_setYVelocity(1600.0f);
func_8030E58C(SFX_C_TAKING_FLIGHT_LIFTOFF, 0.7f);
D_8037D2C0 = 1;
break;
case 1:
func_802A04F0();
if(animctrl_isStopped(mvmnt))
func_8028A010(ASSET_1DC_ANIM_BEE_FLY, 0.38f);
if(func_80297AAC() < 0.0f)
next_state = BS_BEE_FLY;
break;
}
bs_setState(next_state);
}
void func_802A0704(void){
func_802A02C0();
}
void func_802A0724(void){
pitch_setAngVel(500.0f, 1.2f);
}
void func_802A0750(void){
pitch_setAngVel(1000.0f, 2.2f);
}
void _bsbeefly_end(void){
if(bsBeeFly_inSet(bs_getNextState()))
return;
func_802921BC(0.0f);
roll_setIdeal(0.0f);
pitch_setIdeal(0.0f);
func_80291548();
gravity_reset();
func_80297B94();
func_8028FFBC(0);
func_8029099C();
}
void func_802A07F8(void){
if(bsBeeFly_inSet(bs_getPrevState()))
return;
func_802921BC(65.0f);
func_802991A8(3);
roll_setAngularVelocity(500.0f, 2.0f);
func_802A0724();
gravity_set(-300.0f);
func_80297BF8(-99.9f);
func_8028FEF0();
func_8028FFBC(1);
func_802909C4();
}
void _bsBeeFly_updateYaw(void){
f32 sp34;
f32 sp30;
f32 stickX;
stickX = func_8029B2D0();
func_802BFE50(2.0f, 2000.0f, 350.0f);
if(button_held(BUTTON_R)){
func_80299234(500.0f, 30.0f);
sp34 = 6.0f;
sp30 = 85.0f;
}
else{
func_80299234(500.0f, 2.0f);
sp34 = 3.0f;
sp30 = 65.0f;
}
roll_setIdeal(ml_map_f(stickX, -1.0f, 1.0f, -sp30, sp30));
yaw_setIdeal(mlNormalizeAngle(yaw_getIdeal() + ml_map_f(stickX, -1.0f, 1.0f, sp34, -sp34)));
}
void _bsBeeFly_updatePitch(void){
f32 stickY = func_8029B2DC();
if(stickY < 0.0f){
pitch_setIdeal(ml_map_f(stickY, -1.0f, 0.0f, 300.0f, 360.0f));
} else {
pitch_setIdeal(ml_map_f(stickY, 0.0f, 1.0f, 0.0f, 80.0f));
}
}
void bsbeefly_enter(void){
s32 mvmnt;
mvmnt = bs_getPrevState();
func_8028A010(ASSET_1DC_ANIM_BEE_FLY, 0.38);
func_8029C7F4(1, 1, 3, 3);
if(miscflag_isTrue(9))
func_80297970(0.0f);
else
func_80297970(600.0f);
func_802979AC(yaw_getIdeal(), func_80297A64());
func_8029797C(yaw_getIdeal());
func_802914CC(4);
func_802A07F8();
if(mvmnt != 0x8b){
func_8028FDC8(1.0f);
D_8037D2C0 = 0;
}
else {
D_8037D2C0 = 1;
}
}
void bsbeefly_update(void){
s32 sp4C;
AnimCtrl* sp48;
s32 sp44;
f32 sp40;
f32 sp3C;
f32 sp38;
f32 *sp24;
f32 sp30;
sp4C = 0;
sp48 = _player_getAnimCtrlPtr();
_bsBeeFly_updateYaw();
_bsBeeFly_updatePitch();
pitch_get(); //return value never used
if(button_pressed(BUTTON_A) && (player_getYPosition() < 7500.0)){
func_8028FDC8(1.0f);
}
if(!func_8028FD30() && player_inWater()){
func_8028FDC8(1.0f);
}
sp44 = func_8028FD30();
animctrl_setDuration(sp48, D_803649B0[sp44]);
sp24 = &D_803649C4[sp44];
sp40 = 0.9f;
sp40 += *sp24;
sp3C = pitch_get();
sp30 = 0.0f;
if(func_80297AAC() < 0.0f){
if(sp3C < 300.0f){
sp30 = ml_map_f(sp3C, 0.0f, 80.0f, 0.0f, 0.23f);
}
if(80.0f < sp3C){
sp30 = ml_map_f(sp3C, 300.0f, 360.0f, -0.2f, 0.0f);
}
}
sp40 += sp30;
if(!sp44 && button_held(BUTTON_B)){
sp40 += 0.12;
}
func_80290B40(sp40);
func_80290A6C();
switch(D_8037D2C0){
default:
break;
case 0:
if((s32)sp24 != (s32)&D_803649C4)
D_8037D2C0 = 1;
break;
case 1:
sp40 = mlNormalizeAngle(pitch_getIdeal() - 30.0f);
if(80.0f < sp40 && sp40 <300.0f)
sp40 = 300.0f;
pitch_setIdeal(sp40);
func_802A0750();
if(sp44 != 0){
player_setYVelocity(sp44*400.0);
func_802A04F0();
}
if((s32)sp24 == (s32)&D_803649C4){
func_802A0724();
D_8037D2C0 = 0;
}
break;
}//L802A0DF0
if(miscflag_isTrue(9)){
func_80297BF8(0.0f);
func_80297A0C(0);
sp38 = 0.0f;
}else{
if(sp3C <= 80.0f){
func_80297BF8(ml_map_f(sp3C, 60.0f, 80.0f, -99.9, -1266.66));
sp38 = ml_map_f(sp3C, 60.0f, 80.0f, 600.0f, 60.0f);
}else{
func_80297BF8(ml_map_f(sp3C, 300.0f, 310.0f, -399.99, -99.9));
sp38 = ml_map_f(sp3C, 300.0f, 340.0f, 0.0f, 600.0f);
}
}
func_8029797C(yaw_get());
if(button_held(9)){
sp38 += (f64)sp38;
}
func_80297970(sp38);
if(func_8028B2E8() && !player_inWater())
sp4C = BS_85_BEE_IDLE;
func_8028FFF0();
bs_setState(sp4C);
}
void bsbeefly_end(void){
_bsbeefly_end();
}
int bsBeeFly_inSet(s32 move){
return move == 0x8C;
}

537
src/core2/bs/beeMain.c Normal file
View File

@@ -0,0 +1,537 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
f32 func_8029B41C(void);
void func_8029E3C0(s32, f32);
void func_80299628(s32);
void yaw_applyIdeal(void);
void func_8029797C(f32);
f32 func_80297A64(void);
void func_802979AC(f32, f32);
void func_802BF2C0(f32);
f32 func_80289F70(void);
void func_8028A3B8(f32, f32);
f32 func_8029B2E8(void);
f32 func_8029B33C(void);
f32 func_80257C48(f32, f32, f32);
f32 func_8029B30C();
/* .data */
f32 D_803649E0 = 30.0f;
f32 D_803649E4 = 375.0f;
f32 D_803649E8 = 0.6f;
f32 D_803649EC = 0.4f;
f32 D_803649F0 = 693.5f;
f32 D_803649F4 = -1200.0f;
u8 D_803649F8 = 0;
s16 D_803649FC[3] = {SFX_54_BANJO_HOO_1, SFX_55_BANJO_HOO_2, SFX_56_BANJO_HUI};
/* .bss */
f32 D_8037D2D0;
u8 D_8037D2D4;
/* .code */
void func_802A0F90(void){
FUNC_8030E624(SFX_2F_ORANGE_SPLAT, 1.4f, 8000);
}
void func_802A0FB4(void){
func_8030EB00(D_803649FC[D_803649F8], 1.35f, 1.45f);
if(++D_803649F8 > 2){
D_803649F8 = 0;
}
}
void func_802A1020(void){
f32 sp1c;
sp1c = func_8029B30C();
if(func_8029B300() == 0){
func_80297970(0.0f);
}
else{
func_80297970(func_80257C48(sp1c, D_803649E0, D_803649E4));
}
}
void func_802A1080(void){
func_802A0340();
func_8028A010(ASSET_1DE_ANIM_BEE_IDLE,3.0f);
func_8029C7F4(1,1,1,2);
func_80297970(0.0f);
func_802900B4();
}
void func_802A10D4(void){
s32 s0;
s0 = 0;
func_80299628(0);
if(func_8028B094())
s0 = 0x88;
if(func_80294F78())
s0 = func_802926C0();
if(func_8029B300() > 0)
s0 = BS_BEE_WALK;
if(button_pressed(BUTTON_A))
s0 = BS_BEE_JUMP;
if(player_inWater())
s0 = BS_BEE_FLY;
bs_setState(func_8029CA94(s0));
}
void func_802A117C(void){
func_802900FC();
func_802A02C0();
}
void func_802A11A4(void){
func_802A0340();
func_8028A010(ASSET_1DD_ANIM_BEE_WALK, 0.38f);
func_8029C7F4(2,1,1,2);
func_80289EC8(D_803649E0, D_803649E4, D_803649E8, D_803649EC);
func_802900B4();
}
void func_802A1214(void){
s32 s0;
s0 = 0;
func_80299628(0);
func_802A1020();
func_8029AD28(0.94f, 4);
func_8029AD28(0.44f, 3);
if(func_8029B300() == 0 && func_80297C04(1.0f))
s0 = BS_85_BEE_IDLE;
if(func_8028B094())
s0 = BS_88_BEE_FALL;
if(button_pressed(BUTTON_A))
s0 = BS_BEE_JUMP;
if(player_inWater())
s0 = BS_BEE_FLY;
bs_setState(s0);
}
void func_802A12D4(void){
func_802900FC();
func_802A02C0();
}
void func_802A12FC(void){
AnimCtrl * s0;
s0 = _player_getAnimCtrlPtr();
func_802A0340();
animctrl_reset(s0);
animctrl_setSmoothTransition(s0, 0);
animctrl_setIndex(s0, ASSET_1E2_ANIM_BEE_JUMP);
animctrl_setSubRange(s0, 0, 0.34f);
func_8028774C(s0, 0.1f);
animctrl_setDuration(s0, 1.2f);
animctrl_setPlaybackType(s0, ANIMCTRL_ONCE);
func_802875AC(s0, "bsbeemain.c", 0x15b);
func_8029C7F4(1,1,3,6);
if(func_8029B2E8() != 0.0f){
yaw_setIdeal(func_8029B33C());
}
func_8029797C(yaw_getIdeal());
func_802A1020();
func_802979AC(yaw_getIdeal(), func_80297A64());
player_setYVelocity(D_803649F0);
gravity_set(D_803649F4);
func_802A0FB4();
D_8037D2D4 = 0;
}
void func_802A1438(void){
s32 sp2c;
AnimCtrl * sp28;
f32 sp1c[3];
sp2c = 0;
sp28 = _player_getAnimCtrlPtr();
func_802A1020();
_get_velocity(sp1c);
if(button_released(BUTTON_A) && (0.0f < sp1c[1])){
gravity_reset();
}
switch (D_8037D2D4)
{
case 0:
if(func_8028B254(0x82)){
func_8028A3B8(0.715f, 0.7f);
D_8037D2D4 = 2;
}else{
if(animctrl_isStopped(sp28)){
func_8028A3B8(0.51f, 4.0f);
D_8037D2D4 = 1;
}
}
break;
case 1:
if(func_8028B254(0x82)){
func_8028A3B8(0.715f, 1.2f);
D_8037D2D4 = 2;
}
break;
case 2:
func_80299628(0);
if(func_8028B2E8()){
func_802A0F90();
func_8028A3B8(1.0f, 0.7f);
D_8037D2D4 = 3;
}
break;
case 3:
func_80299628(0);
if(animctrl_isStopped(sp28)){
func_80297970(0.0f);
sp2c = BS_85_BEE_IDLE;
}
break;
}
if(func_8028B2E8()){
if(func_8029B300() > 0)
sp2c = BS_BEE_WALK;
if(button_pressed(BUTTON_A)){
sp2c = BS_BEE_JUMP;
}
}
else{
if(button_pressed(BUTTON_A)){
sp2c = BS_BEE_FLY;
}
}
if(player_inWater())
sp2c = BS_BEE_FLY;
bs_setState(sp2c);
}
void func_802A163C(void){
func_802A02C0();
gravity_reset();
}
void func_802A1664(void){
AnimCtrl * s0;
s0 = _player_getAnimCtrlPtr();
func_802A0340();
animctrl_reset(s0);
animctrl_setIndex(s0, ASSET_1E2_ANIM_BEE_JUMP);
func_8028774C(s0, 0.34f);
animctrl_setDuration(s0, 8.0f);
animctrl_setSubRange(s0, 0, 0.51f);
animctrl_setPlaybackType(s0, ANIMCTRL_ONCE);
func_802875AC(s0, "bsbeemain.c", 0x1e2);
func_8029C7F4(1,1,3,6);
D_8037D2D4 = 0;
}
void func_802A170C(void){
s32 sp2c; //next state
AnimCtrl * sp28;
f32 sp1c[3];
sp2c = 0;
sp28 = _player_getAnimCtrlPtr();
func_80299628(0);
func_802A1020();
_get_velocity(sp1c);
switch(D_8037D2D4){
case 0:
if(func_8028B254(0x82)){
func_8028A3B8(0.715f, 0.7f);
D_8037D2D4 = 1;
}
break;
case 1:
func_80299628(0);
if(func_8028B2E8()){
func_802A0F90();
func_80297970(0.0f);
func_8028A3B8(1.0f, 0.7f);
D_8037D2D4 = 2;
}
break;
case 2:
func_80299628(0);
if(animctrl_isStopped(sp28)){
func_80297970(0.0f);
sp2c = BS_85_BEE_IDLE;
}
break;
}
if(func_8028B2E8()){
if(miscflag_isTrue(0x19)){
sp2c = func_80292738();
}else{
if(func_8029B300() > 0)
sp2c = BS_BEE_WALK;
if(button_pressed(BUTTON_A))
sp2c = BS_BEE_JUMP;
sp2c = func_8029CA94(sp2c);
}
}
else{
if(miscflag_isFalse(0xf) && button_pressed(BUTTON_A))
sp2c = BS_BEE_FLY;
}//L802A189C
if(player_inWater())
sp2c = BS_BEE_FLY;
bs_setState(sp2c);
}
void func_802A18C8(void){
func_802A02C0();
}
void func_802A18E8(s32 arg0){
///s32 sp40;
AnimCtrl *sp3C;
f32 sp38;
f32 sp2C[3];
f32 sp20[3];
//sp40 = arg0;
sp3C = _player_getAnimCtrlPtr();
func_802A0340();
animctrl_reset(sp3C);
animctrl_setIndex(sp3C, ASSET_1E0_ANIM_BEE_OW);
animctrl_setDuration(sp3C, 1.0f);
animctrl_setSubRange(sp3C, 0, 0.7518f);
animctrl_setPlaybackType(sp3C, ANIMCTRL_ONCE);
func_802875AC(sp3C, "bsbeemain.c", 0x269);
if(arg0 == 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();
func_80297970(200.0f);
func_8029797C(sp38);
func_802979AC(sp38, func_80297A64());
func_8029C7F4(1, 1, 2, 3);
player_setYVelocity(510.0f);
gravity_set(-1200.0f);
func_8028D5DC();
func_80292E48();
D_8037D2D4 = 0;
}
void func_802A1A50(void){
s32 sp1C;
sp1C= 0;
if(baanim_isAt(0.5f)){
func_80292EA4();
}
switch(D_8037D2D4){
case 0:
if(func_8028B254(0x5A)){
func_8028A37C(1.0f);
D_8037D2D4 = 1;
}
break;
case 1:
break;
}
if(func_8028B2E8())
sp1C = BS_85_BEE_IDLE;
if(0.65 < func_80289F70() && player_inWater()){
sp1C = 0x8C;
}
bs_setState(sp1C);
}
void func_802A1B28(void){
func_80297CA8();
gravity_reset();
func_8028D5F4();
func_80292EA4();
func_802A02C0();
}
void func_802A1B68(void){
func_802A18E8(1);
}
void func_802A1B88(void){
func_802A1A50();
}
void func_802A1BA8(void){
func_802A1B28();
}
void func_802A1BC8(void){
func_802A18E8(2);
}
void func_802A1BE8(void){
func_802A1A50();
}
void func_802A1C08(void){
func_802A1B28();
}
void bsbeemain_die_init(void){
AnimCtrl* sp3C;
f32 sp38;
f32 sp2C[3];
f32 sp20[3];
sp3C = _player_getAnimCtrlPtr();
func_8029B930();
func_802A0340();
animctrl_reset(sp3C);
animctrl_setSmoothTransition(sp3C, 0);
animctrl_setIndex(sp3C, ASSET_1E1_ANIM_BEE_DIE);
animctrl_setSubRange(sp3C, 0, 0.3966f);
animctrl_setDuration(sp3C, 1.7f);
animctrl_setPlaybackType(sp3C, ANIMCTRL_ONCE);
func_802875AC(sp3C, "bsbeemain.c", 0x2ef);
func_8029C7F4(1,1,2,3);
_player_getPosition(sp2C);
func_80294980(sp20);
func_80257F18(sp20, sp2C, &sp38);
yaw_setIdeal(mlNormalizeAngle(sp38 + 180.0f));
yaw_applyIdeal();
D_8037D2D0 = 250.f;
func_80297970(D_8037D2D0);
func_8029797C(sp38);
func_802979AC(sp38, func_80297A64());
player_setYVelocity(420.0f);
gravity_set(-1200.0f);
pitch_setAngVel(1000.0f, 12.0f);
func_8028D5DC();
func_80292E48();
func_802914CC(0xd);
func_802BF2C0(30.0f);
func_8029C984();
func_8030E58C(SFX_36_BANJO_DOH, 1.8f);
func_8029E3C0(0, 2.9f);
D_8037D2D4 = 0;
}
void func_802A1DD8(void){
func_80297970(D_8037D2D0);
func_80299628(0);
switch(D_8037D2D4){
case 0:
if(!func_8028B2E8())
break;
func_8028A37C(0.7453f);
FUNC_8030E624(SFX_1F_HITTING_AN_ENEMY_3, 0.8f, 18000);
FUNC_8030E624(SFX_39_BANJO_AYE_2, 1.8f, 18000);
player_setYVelocity(400.0f);
D_8037D2D4 = 1;
break;
case 1:
if(!func_8028B2E8())
break;
func_8028A37C(1.0f);
FUNC_8030E624(SFX_1F_HITTING_AN_ENEMY_3, 0.8f, 18000);
FUNC_8030E624(SFX_39_BANJO_AYE_2, 1.8f, 18000);
D_8037D2D4 = 2;
break;
case 2:
D_8037D2D4 = 3;
break;
case 3:
if(0.0f < D_8037D2D0){
D_8037D2D0 = max_f(0.0f, D_8037D2D0 - 10.0f);
}
break;
}//L802A1EFC
if(func_8029E1A8(0))
func_8029B890();
bs_setState(0);
}
void func_802A1F2C(void){
func_8024BD08(0);
gravity_reset();
func_80291548();
func_80292EA4();
func_802A02C0();
}
void func_802A1F6C(void){
func_802A0340();
func_8028A010(ASSET_1DE_ANIM_BEE_IDLE, 3.0f);
func_8029C7F4(1,1,3,2);
func_80297970(0.0f);
func_8029C674();
func_802B3A50();
}
void func_802A1FC8(void){
s32 sp1C;
sp1C = 0;
func_802B3A50();
func_80299628(0);
func_8029C6D0();
if(!func_80298850()){
sp1C = BS_85_BEE_IDLE;
}
bs_setState(sp1C);
}
void func_802A2014(void){
pitch_setIdeal(0.0f);
roll_setIdeal(0.0f);
func_8029C748();
func_802A02C0();
}
void func_802A2054(void){
func_8028D5F4();
func_8025A2FC(-1, 0xFA0);
func_8024BD08(1);
func_80291548();
func_80298A64();
}
void func_802A2098(void){
miscflag_clear(0x1A);
func_8028A010(ASSET_1DE_ANIM_BEE_IDLE, 3.0f);
yaw_setIdeal(func_8029B41C());
func_8029C7F4(1,1,3,2);
func_80297970(0.0f);
func_8024BD08(0);
func_8025A2FC(0, 0xFA0);
func_8025A6EC(COMUSIC_42_NOTEDOOR_OPENING_FANFARE, -1);
func_8029151C(0xC);
func_8028D5DC();
func_8029E3C0(0, 3.0f);
}
void func_802A2130(void){
s32 next = 0;
if(func_8029E1A8(0)){
next = BS_85_BEE_IDLE;
}
bs_setState(next);
}

116
src/core2/bs/carry.c Normal file
View File

@@ -0,0 +1,116 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
/* .data */
const f32 D_80364AF0 = 30.0f;
const f32 D_80364AF4 = 300.0f;
const f32 D_80364AF8 = 0.84f;
const f32 D_80364AFC = 0.4f;
void func_802AAE80(void){
f32 sp1C = func_8029B30C();
if(func_8029B300() == 0)
func_80297970(0.0f);
else
func_80297970(func_80257C48(sp1C, D_80364AF0, D_80364AF4));
}
void func_802AAEE0(void){
enum bs_e state = bs_getNextState();
if(state != BS_3A_CARRY_IDLE && state != BS_CARRY_WALK)
func_8029B0C0();
func_80289F10(1);
}
void bscarry_idle_init(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
animctrl_reset(aCtrl);
animctrl_setIndex(aCtrl, 0x72);
animctrl_setDuration(aCtrl, 1.2f);
func_802875AC(aCtrl, "bscarry.c", 0x6f);
func_8029C7F4(1,1,1,2);
func_80297970(0.0f);
pitch_setAngVel(1000.0f, 12.0f);
roll_setAngularVelocity(1000.0f, 12.0f);
}
void bscarry_idle_update(void){
enum bs_e sp1C = 0;
if(func_8029B300() > 0)
sp1C = BS_CARRY_WALK;
if(func_802948EC() == 0)
sp1C = BS_1_IDLE;
bs_setState(sp1C);
}
void bscarry_idle_end(void){
func_802AAEE0();
}
void bscarry_walk_init(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
animctrl_reset(aCtrl);
animctrl_setIndex(aCtrl, 0x73);
animctrl_setDuration(aCtrl, 0.8f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_LOOP);
func_802875AC(aCtrl, "bscarry.c", 0xac);
func_8029C7F4(2,1,1,2);
func_80289EC8(D_80364AF0, D_80364AF4, D_80364AF8, D_80364AFC);
}
void bscarry_walk_update(void){
enum bs_e sp1C = 0;
func_8029AD28(0.4f, 4);
func_8029AD28(0.9f, 3);
func_802AAE80();
if(func_8029B300() == 0 && func_80297C04(1.0f))
sp1C = BS_3A_CARRY_IDLE;
if(!func_802948EC())
sp1C = BS_1_IDLE;
bs_setState(sp1C);
}
void bscarry_walk_end(void){
func_802AAEE0();
}
int bscarry_inSet(enum bs_e state){
return state == BS_3A_CARRY_IDLE
|| state == BS_CARRY_WALK;
}
void bscarry_interrupt(void){
switch(bs_getInterruptType()){
case 7:
func_802948F8(func_8028D688());
break;
case 8:
func_8029A86C(2);
bs_setState(0x3C);
break;
case 0x12:
func_8028DE6C(carriedObject_getActorID());
break;
case 0x16:
if(func_802916CC(1)){
bs_setState(BS_CARRY_THROW);
func_8029A86C(2);
}
else{
func_8029A86C(1);
}
break;
default://L802AB260
func_802948E0();
func_80296608();
break;
}
}

74
src/core2/bs/claw.c Normal file
View File

@@ -0,0 +1,74 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
void func_802915CC(f32);
void func_8029AD28(f32, s32);
/* .bss */
u8 _bsclawHitboxActive;
/* .code */
int bsclaw_hitboxActive(void){
return _bsclawHitboxActive;
}
void bsclaw_init(void){
func_8028A180(5, 1.3f);
func_8029C7F4(1,1,3,3);
func_8029797C(yaw_getIdeal());
func_80297970(160.0f);
func_802915CC(80.0f);
_bsclawHitboxActive = 0;
}
void bsclaw_update(void){
enum bs_e sp2C = 0;
AnimCtrl * aCtrl = _player_getAnimCtrlPtr();
f32 sp24;
sp24 = animctrl_getAnimTimer(aCtrl);
_bsclawHitboxActive = animctrl_isAt(aCtrl, 0.1488f)
|| (0.04879999999999998 < sp24 && sp24 < 0.2488)
|| animctrl_isAt(aCtrl, 0.3288f)
|| (0.22879999999999998 < sp24 && sp24 < 0.42879999999999998)
|| animctrl_isAt(aCtrl, 0.5788f)
|| (0.4788 < sp24 && sp24 < 0.6788);
if(animctrl_isAt(aCtrl, 0.5788f))
func_80297970(0.0f);
func_8029AD28(0.08f, 3);
func_8029AD28(0.34f, 4);
func_8029AD28(0.53f, 3);
if(animctrl_isAt(aCtrl, 0.1188f))
func_8030EB00(SFX_2_CLAW_SWIPE, 0.98f, 1.0f);
if(animctrl_isAt(aCtrl, 0.2888f))
func_8030EB00(SFX_2_CLAW_SWIPE, 1.04f, 1.06f);
if(animctrl_isAt(aCtrl, 0.4888f))
func_8030EB00(SFX_2_CLAW_SWIPE, 1.1f, 1.12f);
if(animctrl_isStopped(aCtrl))
sp2C = BS_1_IDLE;
if(!func_8028B2E8())
sp2C = BS_2F_FALL;
if(player_inWater())
sp2C = BS_4C_LANDING_IN_WATER;
if(button_pressed(BUTTON_A))
sp2C = func_8029C780();
bs_setState(sp2C);
}
void bsclaw_end(void){
ability_use(0xB);
_bsclawHitboxActive = 0;
func_802915B8();
}

225
src/core2/bs/climb.c Normal file
View File

@@ -0,0 +1,225 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
/* .bss */
u8 D_8037D3D0;
f32 D_8037D3D4;
u8 D_8037D3D8;
/* .code */
void func_802AB5C0(void){
f32 sp2C[3];
f32 sp28;
f32 f2;
sp28 = func_8029B2DC();
if(mlAbsF(sp28) < 0.03){
f2 = 0.0f;
}
else{
f2 = func_80257D30(sp28, 0.03f, 1.0f, 100.0f, 300.0f);
}
sp2C[0] = 0.0f;
sp2C[1] = f2;
sp2C[2] = 0.0f;
func_80297930(sp2C);
}
void func_802AB654(void){
func_8029957C(6);
func_802991A8(3);
func_80299234(500.0f, 15.0f);
func_8029B324(0, 0.03f);
func_8029B324(1, 1.0f);
func_802978DC(0xA);
func_80297B64(10.0f);
func_80294378(5);
func_80293D48(80.0f, 10.0f);
func_802914CC(0x10);
}
void func_802AB6F0(void){
if(!bsclimb_inSet(bs_getNextState())){
func_80291548();
func_8029B0C0();
func_80289F10(1);
func_802978DC(2);
func_80294378(1);
func_80293D74();
}
}
void func_802AB750(f32 arg0, f32 arg1){
D_8037D3D4 = randf()*arg1 + arg0;
}
int func_802AB788(void){
return (0.0f < mlAbsF(func_80297A70())) || (yaw_get() != yaw_getIdeal());
}
int bsclimb_inSet(s32 move_indx){
return (move_indx == BS_4F_CLIMB_IDLE)
|| (move_indx == BS_50_CLIMB_MOVE)
|| (move_indx == 0x9e);
}
void bsclimb_idle_init(void){
f32 angle_towards_pole;
f32 plyr_pos[3];
f32 pole_pos[3];
player_getPosition(plyr_pos);
climbGetBottom(pole_pos);
if(!bsclimb_inSet(bs_getPrevState())){
func_80257F18(plyr_pos, pole_pos, &angle_towards_pole);
yaw_setIdeal(angle_towards_pole);
yaw_applyIdeal();
}
ability_use(4);
func_8028A010(ASSET_B2_ANIM_BANJO_CLIMB_IDLE_2, 2.64f);
func_80289F10(1);
func_802AB654();
D_8037D3D8 = 1;
func_802AB750(1.0f, 0.5f);
D_8037D3D0 = 0;
}
void bsclimb_idle_update(void){
s32 next_state = 0;
AnimCtrl *anim_ctrl = _player_getAnimCtrlPtr();
func_80293350();
switch(D_8037D3D0){
case 0:
D_8037D3D4 -= time_getDelta();
if(D_8037D3D4 <= 0.0f){
func_8028A180(ASSET_B1_ANIM_BANJO_CLIMB_IDLE_1, 2.96f);
D_8037D3D0 = 1;
}
break;
case 1:
if(animctrl_isStopped(anim_ctrl)){
func_8028A010(ASSET_B2_ANIM_BANJO_CLIMB_IDLE_2, 2.64f);
func_802AB750(3.0f, 4.0f);
D_8037D3D0 = 0;
}
break;
}
func_802AB5C0();
if(func_802AB788())
next_state = BS_50_CLIMB_MOVE;
if(button_pressed(BUTTON_A))
next_state = BS_5_JUMP;
if(D_8037D3D8 == 0)
next_state = BS_1_IDLE;
D_8037D3D8 = 0;
bs_setState(next_state);
}
void bsclimb_idle_end(void){
func_802AB6F0();
}
void bsclimb_move_init(void){
func_8028A010(ASSET_A_ANIM_BANJO_CLIMB_MOVE, 0.9f);
func_80289F10(3);
func_80289EA8(0.3f, 1.5f);
func_80289EC8(100.0f, 300.0f, 0.6f, 0.4f);
func_802AB654();
}
void bsclimb_move_update(void){
s32 next_state = 0;
f32 plyr_pos[3];
s32 map;
func_80293350();
func_802AB5C0();
map = map_get();
if( map == MAP_B_CC_CLANKERS_CAVERN
|| map == MAP_1B_MMM_MAD_MONSTER_MANSION
|| map == MAP_31_RBB_RUSTY_BUCKET_BAY
){
if(baanim_isAt(0.25f))
func_80299D2C(SFX_D2_QUIET_METALLIC, 1.1f, 32000);
if(baanim_isAt(0.75f))
func_80299D2C(SFX_D2_QUIET_METALLIC, 1.2f, 32000);
}
else{//L802ABB34
if(baanim_isAt(0.25f))
func_80299D2C(SFX_D3_JINXIE_SNIFFLING_1, 0.77f, 22000);
if(baanim_isAt(0.75f))
func_80299D2C(SFX_D3_JINXIE_SNIFFLING_1, 0.87f, 22000);
}//L802ABB84
if(!func_802AB788() && func_80297AAC() < 30.0f)
next_state = BS_4F_CLIMB_IDLE;
_player_getPosition(plyr_pos);
if(func_80297A70() < 0.0f && climbGetBottomY() == plyr_pos[1])
next_state = BS_1_IDLE;
if( func_8029825C() == 2
&& 0.0f < func_80297A70()
&& climbGetTopY() == plyr_pos[1]
){
next_state = BS_51_CLIMB_EXIT;
}
if(button_pressed(BUTTON_A))
next_state = BS_5_JUMP;
if(!D_8037D3D8)
next_state = BS_1_IDLE;
D_8037D3D8 = FALSE;
bs_setState(next_state);
}
void bsclimb_move_end(void){
func_802AB6F0();
}
//bsclimb_unknown_9E_init
void func_802ABCCC(void){
func_8028A010(ASSET_B2_ANIM_BANJO_CLIMB_IDLE_2, 2.64f);
func_80289F10(1);
func_802AB654();
func_802978DC(7);
}
//bsclimb_unknown_9E_update
void func_802ABD0C(void){
s32 next_state = 0;
if(!func_80298850())
next_state = BS_4F_CLIMB_IDLE;
bs_setState(next_state);
}
//bsclimb_unknown_9E_end
void func_802ABD40(void){
func_802AB6F0();
}
//bsclimb_interrupt
void func_802ABD60(void){
s32 next_state = 0;
if(bs_getInterruptType() == 0xC){
D_8037D3D8 = TRUE;
}
else{
func_80296608();
return;
}
func_8029A86C(1);
bs_setState(next_state);
}

708
src/core2/bs/croc.c Normal file
View File

@@ -0,0 +1,708 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
int bscroc_inSet(enum bs_e state);
/* .data */
const f32 D_80364B00 = 30.0f;
const f32 D_80364B04 = 375.0f;
const f32 D_80364B08 = 500.0f;
const f32 D_80364B0C = 0.5f;
const f32 D_80364B10 = 0.3f;
const f32 D_80364B14 = 0.2f;
const f32 D_80364B18 = 693.5f; //jump initial velocity
const f32 D_80364B1C = -1200.0f; //jump gravity
u8 D_80364B20 = 0;
s16 D_80364B24[] = {
SFX_54_BANJO_HOO_1,
SFX_55_BANJO_HOO_2,
SFX_56_BANJO_HUI
};
/* .bss */
f32 D_8037D3E0;
u8 _bscrocHitboxActive; //8037D3e4
void *D_8037D3E8;
u8 D_8037D3EC;
f32 D_8037D3F0;
u8 D_8037D3F4;
u8 D_8037D3F5;
/* .code */
f32 func_802ABDC0(void){
if(func_80291670(3) != 0.0f)
return D_80364B08;
else
return D_80364B04;
}
void func_802ABE04(void){
func_8030EB00(D_80364B24[D_80364B20], 1.35f, 1.45f);
if(!(++D_80364B20 < 3))
D_80364B20 = 0;
}
void func_802ABE70(void){
f32 sp1C = func_80291670(3);
func_80299650(func_80291684(3), sp1C);
if(miscflag_isTrue(MISC_FLAG_10_TOUCHING_TURBO_TRAINERS) && bs_getState() != BS_17_BTROT_EXIT){
miscflag_clear(MISC_FLAG_10_TOUCHING_TURBO_TRAINERS);
func_802917E4(3, func_80294A40());
func_8025A6EC(COMUSIC_8A_GETTING_TURBO_TRAINERS, -1);
func_8029E0DC(1);
}
if(sp1C != 0.0f ){
func_8029C3E8(0.0f, 30.0f);
}
if(func_80291700(3, 0.01f)){
func_8029E0DC(0);
func_8030E58C(0x3eb, 1.35f);
}
}
void func_802ABF54(void){
f32 sp1C = func_8029B30C();
if(func_8029B300() == 0){
func_80297970(0.0f);
}
else{
func_80297970(func_80257C48(sp1C, D_80364B00, func_802ABDC0()));
}
}
void func_802ABFBC(void){
if(!bscroc_inSet(bs_getNextState())){
func_8029B0C0();
func_8029E070(0);
func_8029E064(0);
miscflag_clear(3);
miscflag_clear(4);
func_80293D74();
}
func_80289F10(1);
}
int bscroc_inSet(enum bs_e state){
return state == BS_5E_CROC_IDLE
|| state == BS_CROC_WALK
|| state == BS_CROC_JUMP
|| state == BS_61_CROC_FALL
|| state == BS_CROC_OW
|| state == BS_CROC_DIE
|| state == BS_6E_CROC_BITE
|| state == BS_CROC_EAT_BAD
|| state == BS_70_CROC_EAT_GOOD
|| state == BS_CROC_LOCKED
|| state == BS_CROC_DRONE;
}
void bscroc_idle_init(void){
func_8028A010(0xe1, 1.0f);
func_8029C7F4(1,1,1,2);
func_80297970(0.0f);
pitch_setAngVel(1000.0f, 12.0f);
roll_setAngularVelocity(1000.0f, 12.0f);
func_80293D48(50.0f, 25.0f);
miscflag_set(3);
miscflag_set(4);
func_802900B4();
}
void bscroc_idle_update(void){
enum bs_e next_state = 0;
func_802ABE70();
func_80299628(0);
if(func_8028B094())
next_state = BS_61_CROC_FALL;
if(func_80294F78())
next_state = func_802926C0();
if(func_8029B300() > 0)
next_state = BS_CROC_WALK;
if(button_pressed(BUTTON_B))
next_state = BS_6E_CROC_BITE;
if(button_pressed(BUTTON_A))
next_state = BS_CROC_JUMP;
next_state = func_8029CA94(next_state);
bs_setState(next_state);
}
void bscroc_idle_end(void){
func_802ABFBC();
func_802900FC();
}
void bscroc_walk_init(void){
func_8028A100(0xe0, 0.8f, 0.4f);
func_8029C7F4(2,1,1,2);
func_80289EC8(D_80364B00, D_80364B04, D_80364B0C, D_80364B10);
func_802900B4();
}
void bscroc_walk_update(void){
enum bs_e next_state = 0;
func_802ABE70();
func_80299628(0);
func_802ABF54();
func_8029AD28(0.1f, 4);
func_8029AD28(0.6f, 3);
if(func_8029B300() == 0 && func_80297C04(1.0f))
next_state = BS_5E_CROC_IDLE;
if(func_8028B094())
next_state = BS_61_CROC_FALL;
if(button_pressed(BUTTON_B))
next_state = BS_6E_CROC_BITE;
if(button_pressed(BUTTON_A))
next_state = BS_CROC_JUMP;
bs_setState(next_state);
}
void bscroc_walk_end(void){
func_802ABFBC();
func_802900FC();
}
void bscroc_jump_init(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
animctrl_reset(aCtrl);
animctrl_setSmoothTransition(aCtrl, FALSE);
animctrl_setIndex(aCtrl, 0x11C);
animctrl_setSubRange(aCtrl, 0.0f, 0.35f);
animctrl_setDuration(aCtrl, 1.0f);
func_8028774C(aCtrl, 0.1f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
func_802875AC(aCtrl, "bscroc.c", 0x1ac);
func_8029C7F4(1,1,3,6);
if(func_8029B2E8() != 0.0f){
yaw_setIdeal(func_8029B33C());
}
func_8029797C(yaw_getIdeal());
func_802ABF54();
func_802979AC(yaw_getIdeal(), func_80297A64());
player_setYVelocity(D_80364B18);
gravity_set(D_80364B1C);
func_802ABE04();
D_8037D3EC = 0;
}
void bscroc_jump_update(void){
enum bs_e sp2C = 0;
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
f32 sp1C[3];
func_802ABE70();
func_802ABF54();
_get_velocity(&sp1C);
if(button_released(BUTTON_A) && 0.0f < sp1C[1])
gravity_reset();
switch(D_8037D3EC){
case 0:
if(func_8028B254(0x82))
{
func_8028A3B8(0.6538f, 0.7f);
D_8037D3EC = 2;
}
else if(animctrl_isStopped(aCtrl))
{
func_8028A3B8(0.5036f, 3.0f);
D_8037D3EC = 1;
}
break;
case 1:
if(func_8028B254(0x82)){
func_8028A3B8(0.6538f, 1.0f);
D_8037D3EC = 2;
}
break;
case 2:
func_80299628(0);
if(func_8028B2E8()){
func_8029AE48();
func_8028A3B8(1.0f, 1.0f);
D_8037D3EC = 3;
}
break;
case 3:
func_80299628(0);
if(animctrl_isStopped(aCtrl)){
func_80297970(0.0f);
sp2C = BS_5E_CROC_IDLE;
}
break;
}//L802AC66C
if(func_8028B2E8()){
if(func_8029B300() > 0)
sp2C = BS_CROC_WALK;
if(button_pressed(BUTTON_A))
sp2C = BS_CROC_JUMP;
}
if(button_pressed(BUTTON_B))
sp2C = BS_6E_CROC_BITE;
bs_setState(sp2C);
}
void bscroc_jump_end(void){
gravity_reset();
func_802ABFBC();
}
void bscroc_fall_init(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
animctrl_reset(aCtrl);
animctrl_setIndex(aCtrl, 0x11C);
func_8028774C(aCtrl, 0.5036f);
animctrl_setDuration(aCtrl, 0.7f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_STOPPED);
func_802875AC(aCtrl, "bscroc.c", 0x235);
func_8029C7F4(1,1,3,6);
D_8037D3EC = 0;
}
void bscroc_fall_update(void){
enum bs_e next_state = 0;
AnimCtrl * aCtrl = _player_getAnimCtrlPtr();
f32 velocity[3];
func_802ABE70();
func_80299628(0);
func_802ABF54();
_get_velocity(&velocity);
switch(D_8037D3EC){
case 0:
if(func_8028B254(0x82)){
func_8028A37C(0.6538f);
D_8037D3EC = 1;
}
break;
case 1:
if(func_8028B2E8()){
func_8029AE48();
func_80297970(0.0f);
func_8028A3B8(1.0f, 1.0f);
D_8037D3EC = 2;
}
case 2:
break;
}//L802AC850
if(func_8028B2E8()){
if(func_8029B300() > 0 || (D_8037D3EC == 2 && animctrl_isStopped(aCtrl))){
if(miscflag_isTrue(0x19)){
next_state = func_80292738();
}else{
next_state = BS_5E_CROC_IDLE;
}
}
}//L802AC8B4
bs_setState(next_state);
}
void bscroc_fall_end(void){
func_802ABFBC();
}
static void __bscroc_recoil_init(s32 damage){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
f32 sp38;
f32 sp2C[3];
f32 sp20[3];
animctrl_reset(aCtrl);
animctrl_setIndex(aCtrl, 0x11d);
animctrl_setDuration(aCtrl, 1.0f);
animctrl_setSubRange(aCtrl, 0.0f, 0.7518f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
func_802875AC(aCtrl, "bscroc.c", 0x2a5);
if(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();
func_80297970(200.0f);
func_8029797C(sp38);
func_802979AC(sp38, func_80297A64());
func_8029C7F4(1,1,2,3);
player_setYVelocity(510.0f);
gravity_set(-1200.0f);
func_8028D5DC();
func_80292E48();
D_8037D3EC = 0;
}
static void __bscroc_recoil_update(void){
enum bs_e next_state = 0;
func_802ABE70();
if(baanim_isAt(0.5f))
func_80292EA4();
switch(D_8037D3EC){
case 0:
if(func_8028B254(0x5A)){
func_8028A37C(1.0f);
D_8037D3EC = 1;
}
break;
case 1:
break;
}
if(func_8028B2E8())
next_state = BS_5E_CROC_IDLE;
bs_setState(next_state);
}
void __bscroc_recoil_end(void){
func_80297CA8();
gravity_reset();
func_8028D5F4();
func_80292EA4();
func_802ABFBC();
}
void bscroc_ow_init(void){
__bscroc_recoil_init(1);
}
void bscroc_ow_update(void){
__bscroc_recoil_update();
}
void bscroc_ow_end(void){
__bscroc_recoil_end();
}
void bscroc_bounce_init(void){
__bscroc_recoil_init(2);
}
void bscroc_bounce_update(void){
__bscroc_recoil_update();
}
void bscroc_bounce_end(void){
__bscroc_recoil_end();
}
void bscroc_die_init(void){
AnimCtrl * aCtrl = _player_getAnimCtrlPtr();
f32 sp38;
f32 sp2C[3];
f32 sp20[3];
func_8029B930();
animctrl_reset(aCtrl);
animctrl_setSmoothTransition(aCtrl, FALSE);
animctrl_setIndex(aCtrl, 0x11e);
animctrl_setSubRange(aCtrl, 0.0f, 0.3966f);
animctrl_setDuration(aCtrl, 1.7f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
func_802875AC(aCtrl, "bscroc.c", 0x32b);
func_8029C7F4(1,1,2,3);
_player_getPosition(&sp2C);
func_80294980(&sp20);
func_80257F18(&sp20, &sp2C, &sp38);
yaw_setIdeal(mlNormalizeAngle(sp38 + 180.0f));
yaw_applyIdeal();
D_8037D3E0 = 250.0f;
func_80297970(D_8037D3E0);
func_8029797C(sp38);
func_802979AC(sp38, func_80297A64());
player_setYVelocity(420.0f);
gravity_set(-1200.0f);
pitch_setAngVel(1000.0f, 12.0f);
func_8028D5DC();
func_80292E48();
func_802914CC(0xd);
func_802BF2C0(30.0f);
func_8029C984();
func_8030E58C(SFX_36_BANJO_DOH, 1.8f);
func_8029E3C0(0, 2.9f);
D_8037D3EC = 0;
}
void bscroc_die_update(void){
enum bs_e next_state = 0;
func_802ABE70();
func_80297970(D_8037D3E0);
func_80299628(0);
switch(D_8037D3EC){
case 0:
if(func_8028B2E8()){
func_8028A37C(0.7453f);
FUNC_8030E624(SFX_1F_HITTING_AN_ENEMY_3, 0.8f, 18000);
FUNC_8030E624(SFX_39_BANJO_AYE_2, 1.8f, 18000);
player_setYVelocity(400.0f);
D_8037D3EC = 1;
}
break;
case 1:
if(func_8028B2E8()){
func_8028A37C(1.0f);
FUNC_8030E624(SFX_1F_HITTING_AN_ENEMY_3, 0.8f, 18000);
FUNC_8030E624(SFX_39_BANJO_AYE_2, 1.8f, 18000);
D_8037D3EC = 2;
}
break;
case 2:
D_8037D3EC = 3;
break;
case 3:
if(0.0f < D_8037D3E0)
D_8037D3E0 = max_f(0.0f, D_8037D3E0 - 10.0f);
break;
}//L802ACECC
if(func_8029E1A8(0))
func_8029B890();
bs_setState(next_state);
}
void bscroc_die_end(void){
func_8024BD08(0);
gravity_reset();
pitch_setIdeal(0.0f);
roll_setIdeal(0.0f);
func_80291548();
func_80292EA4();
}
int bscroc_hitboxActive(void){
return _bscrocHitboxActive;
}
static void func_802ACF58(void){
f32 sp2C;
f32 sp20[3];
sp2C = func_8028B2E8() ? 500.0f : 400.0f;
func_802589E4(&sp20, yaw_get(), sp2C);
sp20[1] = 200.0f;
func_80297A0C(&sp20);
}
void bscroc_bite_init(void){
func_8028A100(0x122, 0.25f, 0.2f);
func_8029C7F4(1,1,1,3);
func_802ACF58();
D_8037D3F4 = 0;
_bscrocHitboxActive = TRUE;
}
void bscroc_bite_update(void){
enum bs_e next_state = 0;
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
func_802ABE70();
func_80299628(0);
if(animctrl_isAt(aCtrl, 0.99f)){
switch(++D_8037D3F4){
case 1:
func_802ACF58();
animctrl_setDuration(aCtrl, 0.28f);
break;
case 2:
func_802ACF58();
animctrl_setDuration(aCtrl, 0.32f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
break;
}
}
if(animctrl_isAt(aCtrl, 0.6f)){
func_8030EB00(SFX_6D_CROC_BITE, 1.0f, 1.1f);
}
if(D_8037D3F4 == 3){
if(func_8028B094())
next_state = BS_61_CROC_FALL;
else
next_state = BS_CROC_WALK;
}
if(func_8028B2E8() && button_pressed(BUTTON_A))
next_state = BS_CROC_JUMP;
bs_setState(next_state);
}
void bscroc_bite_end(void){
_bscrocHitboxActive = FALSE;
func_802ABFBC();
}
void bscroc_eat_bad_init(void){
func_8028A180(0x123, 2.41f);
func_8029C7F4(1,1,2,3);
func_80297970(0.0f);
}
void bscroc_eat_bad_update(void){
enum bs_e next_state = 0;
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
func_802ABE70();
func_80299628(0);
if(animctrl_isAt(aCtrl, 0.3518f)){
func_8030E58C(SFX_A0_COUGHING, 0.9f);
}
if(animctrl_isAt(aCtrl, 0.5282f)){
func_8030E58C(SFX_A0_COUGHING, 0.85f);
}
if(animctrl_isAt(aCtrl, 0.6671f)){
func_8030E484(SFX_C6_SHAKING_MOUTH);
}
if(animctrl_isStopped(aCtrl)){
next_state = BS_5E_CROC_IDLE;
}
bs_setState(next_state);
}
void bscroc_eat_bad_end(void){
func_802ABFBC();
}
void func_802AD2A8(Gfx **gdl, Mtx **mPtr, void *arg2){
f32 sp34[3];
f32 sp28[3];
player_getRotation(&sp34);
func_8028E9C4(2, &sp28);
set_model_render_mode(1);
func_803391A4(gdl, mPtr, &sp28, &sp34, D_8037D3F0, NULL, D_8037D3E8);
}
void func_802AD318(void){
D_8037D3F5 = 1;
}
void bscroc_eat_good_init(void){
func_8028A010(0x122, 0.25f);
func_8029C7F4(1,1,1,2);
func_80292188(func_802AD2A8);
D_8037D3E8 = assetcache_get(func_80294974());
D_8037D3F0 = 1.0f;
D_8037D3F5 = 0;
D_8037D3F4 = 0;
}
int func_802AD3A0(void){
return D_8037D3F5;
}
void bscroc_eat_good_update(void){
enum bs_e next_state = 0;
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
func_802ABE70();
D_8037D3F0 = max_f(0.1f, D_8037D3F0 - 0.05);
func_80299628(0);
func_802ABF54();
if(animctrl_isAt(aCtrl, 0.99f)){
switch(++D_8037D3F4){
case 1:
animctrl_setDuration(aCtrl, 0.28f);
break;
case 2:
animctrl_setDuration(aCtrl, 0.32f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
break;
case 3:
if(D_8037D3F5)
next_state = BS_CROC_EAT_BAD;
else
next_state = BS_5E_CROC_IDLE;
break;
}
}//L802AD4B0
if(animctrl_isAt(aCtrl, 0.62f))
func_8030EB00(SFX_4C_LIP_SMACK, 1.2f, 1.3f);
if(D_8037D3F4 == 2 && animctrl_isAt(aCtrl, 0.9))
func_8030EB00(SFX_AE_YUMYUM_TALKING, 1.45f, 1.55f);
bs_setState(next_state);
}
void bscroc_eat_good_end(void){
D_8037D3F5 = 0;
assetcache_release(D_8037D3E8);
func_80292188(0);
func_802ABFBC();
}
void func_802AD56C(void){
func_8028A010(0xe1, 1.0f);
func_8029C7F4(1,1,3,2);
func_80297970(0.0f);
func_8029C674();
func_802B3A50();
}
void func_802AD5C0(void){
enum bs_e next_state = 0;
func_802ABE70();
func_802B3A50();
func_80299628(0);
func_8029C6D0();
if(!func_80298850()){
next_state = BS_5E_CROC_IDLE;
}
bs_setState(next_state);
}
void func_802AD614(void){
pitch_setIdeal(0.0f);
roll_setIdeal(0.0f);
func_8029C748();
func_802ABFBC();
}
void bscroc_drone_init(void){
bsdrone_init();
}
void bscroc_drone_update(void){
func_802ABE70();
bsdrone_update();
}
void bscroc_drone_end(void){
bsdrone_end();
func_802ABFBC();
}

208
src/core2/bs/crouch.c Normal file
View File

@@ -0,0 +1,208 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
/* .bss */
f32 D_8037D400;
u8 D_8037D404;
/* .code */
enum bs_e func_802ADCD4(enum bs_e arg0);
void func_802AD6D0(void){
func_8028A010(ANIM_BANJO_CROUCH, 0.5f);
D_8037D404 = 4;
}
void func_802AD6FC(void){
func_8028A180(ANIM_BANJO_CROUCH_NOINPUT, 2.0f);
D_8037D404 = 2;
}
void func_802AD728(void){
func_8028A1F4(ANIM_BANJO_CROUCH, 0.5f, 0.9999f);
func_8029E3C0(2, 2.0f);
D_8037D404 = 1;
}
void func_802AD768(AnimCtrl *aCtrl, f32 arg1){
animctrl_setDuration(aCtrl, ml_map_f(arg1, 0.0f, 180.0f, 0.5, 0.2f));
}
void func_802AD7B0(AnimCtrl *aCtrl){
func_8029AD28(0.41f, 4);
func_8029AD28(0.91f, 3);
}
void bscrouch_init(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
f32 sp28[3];
f32 sp24;
f32 sp20;
switch(bs_getPrevState()){
case BS_9_EGG_HEAD:
case BS_A_EGG_ASS:
case BS_1A_WONDERWING_ENTER:
sp24 = 0.5357f;
break;
default:
sp24 = 0.0f;
break;
}
animctrl_reset(aCtrl);
animctrl_setIndex(aCtrl, ANIM_BANJO_CROUCH_ENTER);
animctrl_setDuration(aCtrl, 0.5f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
func_8028774C(aCtrl, sp24);
func_802875AC(aCtrl, "bscrouch.c", 0xa0);
func_80289F10(1);
func_802991A8(3);
func_80299234(350.0f, 14.0f);
func_8029957C(7);
func_8029932C(8.0f);
func_802978DC(3);
func_8029E3C0(0, 0.7f);
func_8029E3C0(1, 0.2f);
_get_velocity(&sp28);
D_8037D400 = gu_sqrtf(sp28[0]*sp28[0] + sp28[2]*sp28[2]);
if(140.0f < D_8037D400)
func_80299AAC();
if(func_8025801C(sp28, &sp20))
func_8029797C(sp20);
D_8037D404 = 0;
}
void bscrouch_update(void){
enum bs_e sp34 = 0;
f32 sp30;
AnimCtrl *aCtrl = _player_getAnimCtrlPtr(); //sp2C
f32 temp_f2;
f32 pad;
f32 sp20;
func_8029E1A8(0);
func_8029E1A8(1);
sp30 = ml_map_f(func_8029E270(0), 0.0f, 0.3f, 0.0f, D_8037D400);
func_80297970(sp30);
if(220.0f < sp30)
func_802929F8();
if(160.0f < sp30)
func_80299AAC();
sp20 = yaw_getIdeal();
temp_f2 = mlAbsF(mlDiffDegF(sp20, yaw_get()));
switch(D_8037D404){
case 0://802ADA64
if(sp30 != 0.0f)
break;
func_8029E3C0(2, 2.0f);
D_8037D404 = 1;
break;
case 1: //802ADA98
if(temp_f2 != 0.0f){
func_802AD6D0();
}
else{
func_8029E1A8(2);
if(func_8029E384(2))
func_802AD6FC();
}
break;
case 2: //802ADAE8
if(temp_f2 != 0.0f){
func_802AD6D0();
}else{
if(animctrl_isStopped(aCtrl))
func_802AD728();
}
break;
case 4: //802ADB30
func_802AD768(aCtrl,temp_f2);
func_802AD7B0(aCtrl);
if(temp_f2 != 0.0f)
break;
if((f64)animctrl_getAnimTimer(aCtrl) <= 0.5){
animctrl_setSubRange(aCtrl, 0.0f, 0.5f);
}else{
animctrl_setSubRange(aCtrl, 0.0f, 1.0f);
}
animctrl_setPlaybackType(aCtrl,1);
D_8037D404 = 3;
break;
case 3://802ADBCC
func_802AD768(aCtrl, temp_f2);
func_802AD7B0(aCtrl);
if(temp_f2 != 0.0f){
animctrl_setSubRange(aCtrl, 0.0f, 1.0f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_LOOP);
D_8037D404 = 4;
}else{
if(animctrl_isStopped(aCtrl)){
yaw_setIdeal(yaw_get());
func_802AD728();
}
}
break;
}//L802ADC50
if(player_isSliding())
sp34 = BS_SLIDE;
if(func_8028B094())
sp34 = BS_2F_FALL;
sp34 = func_802ADCD4(sp34);
if(sp34 == BS_1_IDLE && func_8029E348(1))
sp34 = 0;
if(player_inWater())
sp34 = BS_2D_SWIM_IDLE;
bs_setState(sp34);
}//*/
void bscrouch_end(void){}
enum bs_e func_802ADCD4(enum bs_e arg0){
if(button_released(BUTTON_Z)){
arg0 = BS_1_IDLE;
if(button_pressed(BUTTON_B) && can_claw())
arg0 = BS_CLAW;
if(button_pressed(BUTTON_A))
arg0 = func_8029C780();
}else{
if(should_wonderwing())
func_80346C10(&arg0, -1, BS_1A_WONDERWING_ENTER, ITEM_10_GOLD_FEATHER, 1);
if(should_trot())
arg0 = BS_14_BTROT_ENTER;
if(should_poop_egg())
func_80346C10(&arg0, -1, BS_A_EGG_ASS, ITEM_D_EGGS, 0);
if(should_shoot_egg())
func_80346C10(&arg0, -1, BS_9_EGG_HEAD, ITEM_D_EGGS, 0);
if(should_flip())
arg0 = BS_12_BFLIP;
if(should_beak_barge())
arg0 = BS_BBARGE;
}
return arg0;
}

132
src/core2/bs/die.c Normal file
View File

@@ -0,0 +1,132 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
/* .bss */
f32 D_8037D410;
s32 D_8037D414;
/* .code */
int _bsdie_802ADE00(void){
return func_8028B2E8();
}
void _bsdie_802ADE20(void){
f32 i;
for(i = 0.0f; i < 360.0f; i += 45.0f){
func_80292900(i, 230.0f);
}
}
void bsdie_init(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
f32 sp38;
f32 sp2C[3];
f32 sp20[3];
animctrl_reset(aCtrl);
animctrl_setSmoothTransition(aCtrl, 0);
animctrl_setIndex(aCtrl, ASSET_9_ANIM_BANJO_DIE);
animctrl_setSubRange(aCtrl, 0.0f, 0.3356f);
animctrl_setDuration(aCtrl, 2.0f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
func_802875AC(aCtrl, "bsdie.c", 0x7e);
func_8029B930();
func_8030E58C(SFX_36_BANJO_DOH, 1.0f);
_player_getPosition(sp2C);
func_80294980(sp20);
func_80257F18(sp20, sp2C, &sp38);
D_8037D410 = 250.0f;
yaw_setIdeal(mlNormalizeAngle(sp38 + 180.0f));
yaw_applyIdeal();
func_80297970(D_8037D410);
func_8029797C(sp38);
func_802979AC(sp38, func_80297A64());
func_80289F10(1);
func_802991A8(1);
func_8029957C(2);
func_802978DC(3);
player_setYVelocity(510.0f);
gravity_set(-1400.0f);
pitch_setAngVel(1000.0f, 12.0f);
func_8029E070(1);
func_8029151C(0xd);
func_802BF2C0(30.0f);
func_8029C984();
func_8029E3C0(0,2.9f);
D_8037D414 = 0;
func_8028D5DC();
func_80292E48();
}
void bsdie_update(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
enum bs_e sp28 = 0;
func_80297970(D_8037D410);
func_80299628(0);
switch(D_8037D414){
case 0://L802AE0B8
if(_bsdie_802ADE00()){
animctrl_setSubRange(aCtrl, 0.0f, 1.0f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
player_setYVelocity(400.0f);
func_80299DB8();
FUNC_8030E624(SFX_39_BANJO_AYE_2, 1.0f, 18000);
func_80250D94(1.0f, 1.0f, 0.4f);
_bsdie_802ADE20();
D_8037D414 = 1;
}
break;
case 1://L802AE134
if(_bsdie_802ADE00()){
func_80299E00();
FUNC_8030E624(SFX_38_BANJO_AYE_1, 1.0f, 18000);
func_80250D94(1.0f, 0.5f, 0.4f);
D_8037D414 = 2;
}
break;
case 2://L802AE184
D_8037D410 = max_f(D_8037D410 - 12.0f, 0.0f);
if(140.0f < D_8037D410)
func_802929F8();
if(animctrl_isAt(aCtrl, 0.6538f))
animctrl_setDuration(aCtrl, 4.0f);
if(animctrl_isStopped(aCtrl)){
D_8037D410 = 0.0f;
D_8037D414 = 3;
}
break;
case 3:
break;
}//L802AE218
if(func_8029E1A8(0))
func_8029B890();
if( func_8029E270(0) != 0.0f
&& func_80294574()
&& ( D_8037D414
|| ( animctrl_isStopped(aCtrl)
&& ( player_getYPosition() < (func_80294500() - 150.0f))
)
)
&& player_inWater()
&& 100.0f < (func_80294500() - func_80294438())
){
sp28 = BS_54_SWIM_DIE;
}
bs_setState(sp28);
}
void bsdie_end(void){
func_8024BD08(0);
gravity_reset();
func_8029E070(0);
pitch_setIdeal(0.0f);
roll_setIdeal(0.0f);
func_80291548();
func_80292EA4();
}

49
src/core2/bs/drone.c Normal file
View File

@@ -0,0 +1,49 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
#include "bsint.h"
typedef struct{
u8 unk0;
bsState behavior;
} struct_drone;
struct_drone D_80364B30[] = {
{01, {func_802AEDE8, func_802AEE48, func_802AEE9C, NULL}},
{02, {func_802AEEF4, func_802AEFB0, func_802AF164, func_80296608}},
{04, {bsdronexform_init, bsdronexform_update, bsdronexform_end, bsdronexform_interrupt}},
{05, {func_802AE9C8, func_802AEA2C, func_802AEB24, NULL}},
{06, {func_802AF604, func_802AF668, func_802AF768, NULL}},
{0}
};
static int __bsdrone_getIndex(void){
int i;
int val = func_802925EC();
for(i = 0; D_80364B30[i].unk0 != 0; i++){
if(val == D_80364B30[i].unk0)
return i;
}
return 0;
}
void bsdrone_init(void){
D_80364B30[__bsdrone_getIndex()].behavior.init_func();
}
void bsdrone_update(void){
D_80364B30[__bsdrone_getIndex()].behavior.update_func();
}
void bsdrone_end(void){
D_80364B30[__bsdrone_getIndex()].behavior.end_func();
}
void bsdrone_interrupt(void){
void (* tmp)(void) = D_80364B30[__bsdrone_getIndex()].behavior.interrupt_func;
if(tmp){
tmp();
}
}

115
src/core2/bs/dronegoto.c Normal file
View File

@@ -0,0 +1,115 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
void func_80297BB8(f32);
/* .bss */
u8 D_8037D440;
u8 D_8037D441;
void func_802AEC08(void);
void func_802AEC70(void);
void func_802AEC78(void);
void func_802AEDC8(void);
void func_802AEB60(s32 arg0){
switch(D_8037D440){
case 1:
func_802AEC70();
break;
case 2:
func_802AEDC8();
break;
}
switch(D_8037D440 = arg0){
case 1:
func_802AEC08();
break;
case 2:
func_802AEC78();
break;
}
}
void func_802AEC08(void){
func_802978A4();
}
void func_802AEC28(void){
func_802978A4();
if(func_8028B2E8() || player_inWater())
func_802AEB60(2);
}
void func_802AEC70(void){}
void func_802AEC78(void){
f32 sp2C;
f32 sp20[3];
s32 sp1C;
func_8029BC60(&sp1C, &sp2C);
func_8028A010(sp1C, sp2C);
func_802925F8(&sp20, &sp2C);
func_80297BC4(&sp20);
func_80297BB8(sp2C);
func_8029C7F4(1,1,3,0xC);
func_8029436C(1);
D_8037D441 = 0;
}
void func_802AECE4(void){
f32 sp2C;
f32 sp20[3];
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
_get_velocity(&sp20);
if(func_8025801C(sp20, &sp2C)){
yaw_setIdeal(sp2C);
}
if( 250.0f <= gu_sqrtf(sp20[0]*sp20[0] + sp20[2]*sp20[2])
&& animctrl_getIndex(aCtrl) == ANIM_BANJO_WALK
){
animctrl_reset(aCtrl);
animctrl_setIndex(aCtrl, ANIM_BANJO_RUN);
func_802875AC(aCtrl, "bsdronegoto.c", 0x9d);
}
if(func_80297C48() && D_8037D441 == 0){
D_8037D441++;
func_80292768();
}
}
void func_802AEDC8(void){
func_8029436C(0);
}
void func_802AEDE8(void){
D_8037D440 = 0;
func_8031F9F4(1);
if( !func_8028B2E8() && func_8029BDE8()){
func_802AEB60(1);
}else{
func_802AEB60(2);
}
}
void func_802AEE48(void){
switch(D_8037D440){
case 1:
func_802AEC28();
break;
case 2:
func_802AECE4();
break;
}
}
void func_802AEE9C(void){
func_802AEB60(0);
func_8031F9F4(0);
}

426
src/core2/bs/dronexform.c Normal file
View File

@@ -0,0 +1,426 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern void player_setYPosition(f32);
extern void yaw_applyIdeal(void);
extern void func_802978DC(int);
extern f32 func_80257A44(f32, f32);
extern f32 cosf(f32);
extern f32 func_802588B0(f32, f32);
extern f32 func_80257AD4(f32, f32);
extern struct41s D_80364BB0;
extern struct41s D_80364BE0;
extern struct41s D_80364C10;
extern struct41s D_80364C40;
extern struct41s D_80364C70;
extern struct41s D_80364CA0;
/* .bss */
struct {
ParticleEmitter *unk0;
ParticleEmitter *unk4;
f32 unk8;
f32 unkC;
f32 unk10;
f32 unk14;
f32 unk18;
u8 unk1C;
u8 pad1D[0x3];
f32 unk20;
f32 unk24;
f32 unk28;
f32 unk2C;
u8 unk30;
u8 unk31; //enum bs_e
u8 unk32;
} D_8037D470;
/* .code */
void func_802AF7A0(ParticleEmitter *arg0, enum asset_e arg1){
func_802F0D54(arg0);
particleEmitter_setSprite(arg0, arg1);
particleEmitter_setParticleAccelerationRange(arg0, 0.0f, -50.0f, 0.0f, 0.0f, -50.0f, 0.0f);
func_802EFA5C(arg0, 0.4f, 0.8f);
func_802EFB84(arg0, 0.03f, 0.03f);
func_802EFE24(arg0, 0.0f, 0.0f, 300.0f, 0.0f, 0.0f, 300.0f);
func_802EFEC0(arg0, 0.65f, 0.65f);
func_802EFF50(arg0, 1.0f);
}
void func_802AF88C(Actor * arg0, f32 arg1, f32 arg2){
particleEmitter_setParticleVelocityRange(arg0, arg1*30.0f, 10.0f, arg2*30.0f, arg1*30.0f, 10.0f, arg2*30.0f);
func_802EFB70(arg0, D_8037D470.unk14, D_8037D470.unk14);
}
void func_802AF900(void){
f32 sp4C;
f32 sp48;
f32 sp44;
f32 sp40;
f32 sp3C;
f32 sp30[3];
player_getPosition(&sp30);
sp3C = D_8037D470.unk8;
sp48 = func_80257A44(sp3C, 0.38f);
sp4C = sp48 * 6.283185308;
sp40 = sinf(sp4C);
sp44 = cosf(sp4C);
sp30[0] += sp40 * D_8037D470.unk18;
sp30[1] += func_80257C48(func_80257A44(sp3C, 1.14f), 0.0f, 130.0f);
sp30[2] += sp44 * D_8037D470.unk18;
func_802AF88C(D_8037D470.unk4, sp40, sp44);
particleEmitter_setPosition(D_8037D470.unk4, &sp30);
particleEmitter_emitN(D_8037D470.unk4, 1);
player_getPosition(&sp30);
sp4C = (1.0 - func_802588B0(sp48 + 0.5, 1.0f))* 6.283185308;
sp30[0] -= sinf(sp4C) * D_8037D470.unk18;
sp30[1] += func_80257C48(func_80257A44(sp3C, 1.14f), 130.0f, 0.0f);
sp30[2] -= cosf(sp4C) * D_8037D470.unk18;
func_802AF88C(D_8037D470.unk0, sp40, sp44);
particleEmitter_setPosition(D_8037D470.unk0, &sp30);
particleEmitter_emitN(D_8037D470.unk0, 1);
}
void func_802AFADC(void){
func_802F0C78(D_8037D470.unk4);
func_802F0C78(D_8037D470.unk0);
}
void func_802AFB0C(void){
D_8037D470.unk0 = partEmitList_pushNew(0x32);
func_802AF7A0(D_8037D470.unk0, ASSET_476_SPRITE_BLUE_GLOW); //blue glow
D_8037D470.unk4 = partEmitList_pushNew(0x32);
func_802AF7A0(D_8037D470.unk4, ASSET_477_SPRITE_YELLOW_GLOW); //orange glow
D_8037D470.unkC = 1.0f;
D_8037D470.unk10 = 0.0f;
D_8037D470.unk8 = 0.0f;
D_8037D470.unk18 = 55.0f;
D_8037D470.unk14 = 0.35f;
D_8037D470.unk1C = 0;
}
void func_802AFB94(f32 arg0){
D_8037D470.unkC = arg0;
}
void func_802AFBA0(f32 arg0){
D_8037D470.unk18 = arg0;
}
void func_802AFBAC(f32 arg0){
D_8037D470.unk14 = arg0;
}
void func_802AFBB8(f32 (* arg0)[3]){
ParticleEmitter* s0 = partEmitList_pushNew(1);
particleEmitter_setSprite(s0, ASSET_6C4_SPRITE_SMOKE_YELLOW); //yellow blast
func_802EFA5C(s0, 0.7f, 0.8f);
particleEmitter_setParticleFramerateRange(s0, 12.0f, 12.0f);
particleEmitter_setPosition(s0, arg0);
func_802EFB70(s0, 3.2f, 3.2f);
func_802EFB84(s0, 3.2f, 3.2f);
func_802EFEC0(s0, 0.8f, 0.8f);
particleEmitter_emitN(s0, 1);
s0 = partEmitList_pushNew(1);
particleEmitter_setSprite(s0, ASSET_6C2_SPRITE_SMOKE_WHITE); //smoke
func_802EFA5C(s0, 0.1f, 0.8f);
particleEmitter_setParticleFramerateRange(s0, 15.0f, 15.0f);
particleEmitter_setPosition(s0, arg0);
func_802EFB70(s0, 3.0f, 3.0f);
func_802EFB84(s0, 3.0f, 3.0f);
func_802EFEC0(s0, 0.65f, 0.65f);
particleEmitter_emitN(s0, 1);
s0 = partEmitList_pushNew(0x11);
particleEmitter_setSprite(s0, ASSET_713_SPRITE_SPARKLE_YELLOW); //sparkle
particleEmitter_setVelocityAndAccelerationRanges(s0, &D_80364BB0);
func_802EFA5C(s0, 0.0f, 0.6f);
func_802EFB70(s0, 0.28f, 0.32f);
func_802EFB84(s0, 0.03f, 0.03f);
func_802EFE24(s0, 0.0f, 0.0f, 300.0f, 0.0f, 0.0f, 300.0f);
func_802EFEC0(s0, 2.0f, 2.0f);
func_802EFF50(s0, 1.0f);
particleEmitter_setPosition(s0, arg0);
particleEmitter_emitN(s0, 8);
particleEmitter_setVelocityAndAccelerationRanges(s0, &D_80364BE0);
particleEmitter_emitN(s0, 5);
particleEmitter_setVelocityAndAccelerationRanges(s0, &D_80364C10);
func_802EF9F8(s0, 0.4f);
func_802EFA18(s0, 3);
particleEmitter_emitN(s0, 4);
s0 = partEmitList_pushNew(0x11);
particleEmitter_setSprite(s0, ASSET_716_SPRITE_SPARKLE_WHITE); //sparkle
particleEmitter_setVelocityAndAccelerationRanges(s0, &D_80364C40);
func_802EFA5C(s0, 0.0f, 0.6f);
func_802EFB70(s0, 0.28f, 0.32f);
func_802EFB84(s0, 0.03f, 0.03f);
func_802EFE24(s0, 0.0f, 0.0f, 300.0f, 0.0f, 0.0f, 300.0f);
func_802EFEC0(s0, 2.0f, 2.0f);
func_802EFF50(s0, 1.0f);
particleEmitter_setPosition(s0, arg0);
particleEmitter_emitN(s0, 8);
particleEmitter_setVelocityAndAccelerationRanges(s0, &D_80364C70);
particleEmitter_emitN(s0, 5);
particleEmitter_setVelocityAndAccelerationRanges(s0, &D_80364CA0);
func_802EF9F8(s0, 0.4f);
func_802EFA18(s0, 3);
particleEmitter_emitN(s0, 4);
}
void func_802AFFAC(void){
D_8037D470.unk10 -= time_getDelta();
while(D_8037D470.unk10 < 0.0f){
func_802AF900();
D_8037D470.unk8 += 0.017 * D_8037D470.unkC;
D_8037D470.unk10 += 0.017;
}
}
void func_802B0060(UNK_TYPE(s32) arg0, UNK_TYPE(s32) arg1){
f32 sp4C[3];
int i;
for(i = 0; i < 3; i++){
sp4C[i] = func_80257AD4(D_8037D470.unk20 + ((f32)i/3.0)*0.5, 0.5f)*(D_8037D470.unk24*D_8037D470.unk28) + D_8037D470.unk24;
}
func_8033A928(arg0, 3, sp4C);
}
void func_802B014C(void){
func_80289EBC(NULL);
}
void func_802B016C(void){
D_8037D470.unk20 = 0.0f;
D_8037D470.unk28 = 0.0f;
D_8037D470.unk24 = 1.0f;
func_80289EBC(func_802B0060);
}
void func_802B01B0(f32 arg0){
D_8037D470.unk28 = arg0;
}
void func_802B01BC(f32 arg0){
D_8037D470.unk24 = arg0;
}
void func_802B01C8(void){
D_8037D470.unk20 += time_getDelta();
}
static void __bsdronexform_setState(int arg0){
enum asset_e sp34;
f32 sp30;
f32 sp24[3];
D_8037D470.unk32 = arg0;
switch(arg0){
case 1:// 802B0230
D_8037D470.unk1C = 1;
D_8037D470.unk2C = player_getYPosition();
func_802AFB94(0.28f);
func_802AFBA0(180.0f);
func_802AFBAC(0.04f);
func_802B01B0(0.05f);
func_802978DC(7);
func_8029E3C0(0, 2.8f);
FUNC_8030E624(SFX_17E_MUMBO_TRANSFORMATION_01, 1.0f, 15000);
break;
case 2:// 802B02A8
func_8029E3C0(0, 0.5f);
func_802978DC(0xb);
break;
case 3:// 802B02C4
func_8029E3C0(0, 0.05f);
break;
case 4:// 802B02DC
func_8029E3C0(0, 0.8f);
break;
case 5:// 802B02F4
_player_getPosition(&sp24);
sp24[1] += 30.0f;
func_8024E3A8(&sp24, 80.0f);
func_802AFBB8(&sp24);
func_8029E3C0(0, 0.1f);
break;
case 6: // 802B033C
func_802BB3DC(2, 80.0f, 0.85f);
func_8030E6D4(SFX_147_GRUNTY_SPELL_ATTACK_2);
if(D_8037D470.unk30 == 7 || D_8037D470.unk31 == 7){
yaw_setIdeal(yaw_get() + 180.0f);
yaw_applyIdeal();
}
func_8029A95C(func_80294A4C()); //set player transformation
func_80291D04(); //update player model
func_8029BD44(&sp34, &sp30);
func_8028A010(sp34, sp30);
func_8029E3C0(0, 0.1f);
break;
case 7: // 802B03E4
func_8029E3C0(0, 0.8f);
break;
case 8: // 802B03FC
if(D_8037D470.unk30 == 1 && D_8037D470.unk31 == 1){
func_8025A6EC(COMUSIC_3C_MINIGAME_LOSS, 28000);
}
func_8029E3C0(0, 1.0f);
break;
case 9:// 802B0438
D_8037D470.unk1C = 0;
func_8029E3C0(0, 0.7f);
func_802978DC(7);
break;
}
}
void bsdronexform_init(void){
f32 sp1C;
enum asset_e sp18;
func_8029BCAC(&sp18, &sp1C);
func_8028A010(sp18, sp1C);
func_8029C7F4(1,1,3,7);
func_80297A0C(0);
func_80297930(0);
pitch_setIdeal(0.0f);
roll_setIdeal(0.0f);
func_80294378(6);
func_802AFB0C();
func_802B016C();
D_8037D470.unk31 = _player_getTransformation();
D_8037D470.unk30 = func_80294A4C();
miscflag_set(MISC_FLAG_1B_TRANSFORMING);
D_8037D470.unk32 = 0;
__bsdronexform_setState(1);
}
f32 func_802B051C(s32 arg0, f32 arg1, f32 arg2, f32 arg3){
return ml_map_f(func_8029E270(arg0), arg1, 0.0f, arg2, arg3);
}
void bsdronexform_update(void){
int sp24;
if(D_8037D470.unk1C)
func_802AFFAC();
func_802B01C8();
switch(D_8037D470.unk32){
case 1:
sp24 = func_8029E1A8(0);
player_setYPosition(func_802B051C(0, 2.8f, 0.0f, 90.0f) + D_8037D470.unk2C);
func_802AFB94(func_802B051C(0, 2.8f, 0.28f, 1.0f));
func_802AFBA0(func_802B051C(0, 2.8f, 180.0f, 55.0f));
func_802AFBAC(func_802B051C(0, 2.8f, 0.04f, 0.35f));
func_802B01BC(func_802B051C(0, 2.8f, 1.0f, 0.8f));
func_802B01B0(func_802B051C(0, 2.8f, 0.05f, 0.4f));
func_8031B990(
(s32)func_802B051C(0, 2.8f, 255.0f, 200.0f),
(s32)func_802B051C(0, 2.8f, 255.0f, 80.0f),
(s32)func_802B051C(0, 2.8f, 255.0f, 80.0f)
);
if(sp24)
__bsdronexform_setState(2);
break;
case 2:
sp24 = func_8029E1A8(0);
func_802B01B0(func_802B051C(0, 0.5f, 0.4f, 0.6f));
if(sp24)
__bsdronexform_setState(3);
break;
case 3:
sp24 = func_8029E1A8(0);
func_802B01BC(func_802B051C(0, 0.05f, 0.8f, 1.2f));
if(sp24)
__bsdronexform_setState(4);
break;
case 4:
sp24 = func_8029E1A8(0);
func_802B01BC(func_802B051C(0, 0.8f, 1.2f, 0.09f));
if(sp24)
__bsdronexform_setState(5);
break;
case 5:
sp24 = func_8029E1A8(0);
if(sp24)
__bsdronexform_setState(6);
break;
case 6:
sp24 = func_8029E1A8(0);
if(sp24)
__bsdronexform_setState(7);
break;
case 7:
sp24 = func_8029E1A8(0);
func_802B01BC(func_802B051C(0, 0.8f, 0.09f, 1.0f));
if(sp24)
__bsdronexform_setState(8);
break;
case 8:
func_802AFBAC(func_802B051C(0, 1.0f, 0.35f, 0.03f));
func_802B01B0(func_802B051C(0, 1.0f, 0.6f, 0.05f));
func_8031B990(
(s32)func_802B051C(0, 1.0f, 200.0f, 255.0f),
(s32)func_802B051C(0, 1.0f, 80.0f, 255.0f),
(s32)func_802B051C(0, 1.0f, 80.0f, 255.0f)
);
if(func_8029E1A8(0)){
if(player_getTransformation() == TRANSFORM_7_WISHWASHY){
bs_setState(0x33);
}else{
__bsdronexform_setState(9);
}
}
break;
case 9:
sp24 = func_8029E1A8(0);
player_setYPosition(func_802B051C(0, 0.7f, 90.0f, 0.0f) + D_8037D470.unk2C);
if(sp24)
bs_setState(bs_getIdleState());
break;
// 802B08AC 8
// 802B09A4 9
}
}
void bsdronexform_end(void){
func_80294378(1);
func_8031B990(0xff,0xff,0xff);
func_802AFADC();
func_802B014C();
func_80298A64();
miscflag_clear(MISC_FLAG_1B_TRANSFORMING);
}
void bsdronexform_interrupt(void){};

196
src/core2/bs/jig.c Normal file
View File

@@ -0,0 +1,196 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
/* .bss */
u8 D_8037D4B0;
u8 D_8037D4B1;
u8 D_8037D4B2;
ActorMarker *D_8037D4B4;
/* .code */
int bsjig_inJiggyJig(enum bs_e state){
return state == BS_44_JIG_JIGGY;
}
void bsjig_setJiggyMarkerPtr(ActorMarker * jiggyMarkerPtr){
D_8037D4B4 = jiggyMarkerPtr;
}
void bsjig_jiggy_init(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
int tmp;
animctrl_reset(aCtrl);
animctrl_setSmoothTransition(aCtrl, FALSE);
animctrl_setIndex(aCtrl, ANIM_BANJO_BJIG_JIGGY);
animctrl_setDuration(aCtrl, 4.3f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
func_802875AC(aCtrl, "bsjig.c", 0x7f);
yaw_setIdeal(func_8029B41C()); //face camera
func_8029C7F4(1,1,3,2);
func_80297970(0.0f);
func_8024BD08(0);
func_8025A2FC(0,0xfa0);
tmp = (item_getCount(ITEM_E_JIGGY) == 9);
if(tmp == 0) //weird if...
tmp = 0;
D_8037D4B1 = tmp;
func_8025A6EC(COMUSIC_D_JINGLE_JIGGY_COLLECTED, -1);
func_8029151C(0xC);
func_8029E070(1);
func_8030E6D4(SFX_33_BANJO_AHOO);
miscflag_clear(7);
miscflag_clear(0xf);
func_8028D5DC();
func_802C82C0(marker_getActor(D_8037D4B4), 1);
D_8037D4B0 = 0;
}
void func_802B0BA8(void){
if(D_8037D4B4){
func_802C82C0(marker_getActor(D_8037D4B4), 4);
}
}
void bsjig_jiggy_update(void){
enum bs_e sp1C = 0;
AnimCtrl * aCtrl = _player_getAnimCtrlPtr();
yaw_setIdeal(func_8029B41C());
if(animctrl_isAt(aCtrl, 0.6502f))
func_80299BD4();
if(animctrl_isAt(aCtrl, 0.835f)){
D_8037D4B0++;
item_inc(ITEM_E_JIGGY);
func_8030E58C(SFX_4B_GULPING, 1.3f);
}
if(animctrl_isAt(aCtrl, 0.94f))
func_8030E484(0x3ea);
if(animctrl_isStopped(aCtrl)){
if(D_8037D4B1)
sp1C = BS_34_JIG_NOTEDOOR;
else
sp1C = BS_1_IDLE;
}
func_80295C08(func_802B0BA8);
bs_setState(sp1C);
}
void func_802B0CD8(void){
if(D_8037D4B4){
func_802C82C0(marker_getActor(D_8037D4B4), 5);
D_8037D4B4 = NULL;
}
}
void bsjig_jiggy_end(void){
s32 sp2C;
s32 sp28 = 4;
int sp24;
sp2C = 0;
sp24 = marker_getActor(D_8037D4B4)->unk38_31;
if(D_8037D4B0 == 0)
item_inc(ITEM_E_JIGGY);
func_802B0CD8();
func_8029E070(0);
func_80291548();
if(bs_getNextState() != BS_34_JIG_NOTEDOOR){
func_8025A2FC(-1, 0xfa0);
func_8024BD08(1);
}
func_8028D5F4();
if( jiggyscore_total() == 100
&& func_8031FF1C(BKPROG_FC_DEFEAT_GRUNTY)
&& bs_getNextState() != BS_34_JIG_NOTEDOOR
){
func_8028F918(2);
func_802E4078(MAP_95_CS_END_ALL_100, 0, 1);
} else {//L802B0DFC
if( jiggyscore_total() == 2
&& map_get() == MAP_2_MM_MUMBOS_MOUNTAIN
){
sp2C = 0xb51;
sp28 = 0xe;
}
else{//L802B0E34
switch(sp24){
case 0x13:
sp2C = 0xa16;
break;
case 0x17:
if(!levelSpecificFlags_get(0) || !levelSpecificFlags_get(1))
sp2C = 0xd2d;
break;
}
}//L802B0E88
if(sp2C != 0){
func_80311480(sp2C, sp28, 0, 0, 0, 0);
}
}//L802B0EA4
func_80298A64();
}
void bsjig_jiggy_interrupt(void){
if(bs_getInterruptType() == 0x26)
func_80296608();
}
void bsjig_notedoor_end(void){
func_8028D5F4();
func_8025A2FC(-1, 0xfa0);
func_8024BD08(1);
func_8029E070(0);
func_80291548();
if( D_8037D4B2
&& jiggyscore_total() == 100
&& func_8031FF1C(BKPROG_FC_DEFEAT_GRUNTY)
){
func_8028F918(2);
func_802E4078(MAP_95_CS_END_ALL_100, 0, 1);
}
func_80298A64();
}
void bsjig_notedoor_init(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
D_8037D4B2 = (bs_getPrevState() == BS_44_JIG_JIGGY);
miscflag_clear(0x1A);
animctrl_reset(aCtrl);
animctrl_setIndex(aCtrl, 0x282);
animctrl_setDuration(aCtrl, 3.6f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
func_802875AC(aCtrl, "bsjig.c", 0x14d);
yaw_setIdeal(func_8029B41C());
func_8029C7F4(1,1,3,2);
func_80297970(0.0f);
if(bs_getPrevState() != BS_44_JIG_JIGGY){
func_8024BD08(0);
func_8025A2FC(0,0xfa0);
}
func_8025A6EC(COMUSIC_42_NOTEDOOR_OPENING_FANFARE,-1);
func_8029151C(0xc);
func_8029E070(1);
func_8030E6D4(SFX_33_BANJO_AHOO);
func_8028D5DC();
}
void bsjig_notedoor_update(void){
enum bs_e sp1C = 0;
if(baanim_isAt(0.59f) || baanim_isAt(0.84f))
func_80299CF4(SFX_3EA_UNKNOWN, 1.0f, 30000);
if(baanim_isStopped())
sp1C = BS_1_IDLE;
bs_setState(sp1C);
}

443
src/core2/bs/jump.c Normal file
View File

@@ -0,0 +1,443 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
f32 func_80294438(void);
void func_8029797C(f32);
void func_802979AC(f32, f32);
f32 func_80297A64(void);
void func_80299B58(f32, f32);
f32 func_8029B2E8(void);
f32 func_8029B33C(void);
void func_802921BC(f32);
void func_8028A084(s32, f32);
/* .data */
f32 D_80364CD0 = 710.0f;
f32 D_80364CD4 = -1350.0f;
f32 D_80364CD8 = 0.0f;
f32 D_80364CDC = 710.0f;
f32 D_80364CE0 = -1350.0f;
f32 D_80364CE4 = 610.0f;
/* .bss */
u8 D_8037D4C0;
u8 D_8037D4C1;
u8 D_8037D4C2;
/* .code */
void func_802B1100(void){
func_80299B58(0.91f, 1.09f);
}
void bsjump_init(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
enum bs_e sp30;
D_8037D4C2 = miscflag_isTrue(2);
sp30 = bs_getPrevState();
if(bsclimb_inSet(sp30)){
climbRelease();
}
if(sp30 == BS_11_BPECK){
animctrl_setSubRange(aCtrl, 0.0f, 0.6667f);
func_8028774C(aCtrl, 0.5042f);
animctrl_setDuration(aCtrl, 8.0f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
D_8037D4C0 = 1;
}
else {
D_8037D4C1 = (sp30 == BS_2D_SWIM_IDLE) || (sp30 == BS_2E_SWIM);
animctrl_reset(aCtrl);
animctrl_setIndex(aCtrl, ANIM_BANJO_JUMP);
animctrl_setDuration(aCtrl, 1.9f);
animctrl_setTransitionDuration(aCtrl, 0.134f);
func_8028774C(aCtrl, 0.3f);
animctrl_setSubRange(aCtrl, 0.0f, 0.5042f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
func_802875AC(aCtrl, "bsjump.c", 0x95);
func_8029C7F4(1,1,3,6);
if(func_8029B2E8() != 0.0f){
yaw_setIdeal(func_8029B33C());
}
func_8029797C(yaw_getIdeal());
func_802B6FA8();
func_802979AC(yaw_getIdeal(), func_80297A64());
if(D_8037D4C1){
player_setYVelocity(D_80364CE4);
} else {
player_setYVelocity(D_80364CD0);
}
gravity_set(D_80364CD4);
D_8037D4C0 = 0;
if(D_8037D4C2){
func_8030E6D4(SFX_33_BANJO_AHOO);
} else{
func_802B1100();
}
}//L802B1340
}
void bsjump_update(void){
enum bs_e sp34 = 0;
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
f32 velocity[3];
if(D_8037D4C2)
func_8029C348();
if(miscflag_isTrue(0xf)){
func_802978A4();
}else{
func_802B6FA8();
}
_get_velocity(&velocity);
if((button_released(BUTTON_A) && 0.0f < velocity[1] && !D_8037D4C2) || !func_8028AB48()){
gravity_reset();
}
switch(D_8037D4C0){
case 0://L802B1428
if(animctrl_isStopped(aCtrl)){
animctrl_setSubRange(aCtrl, 0.0f, 0.6667);
animctrl_setDuration(aCtrl, 4.0f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
D_8037D4C0 = 1;
}
if(func_8028B254(0x82)){
animctrl_setSubRange(aCtrl, 0.0f, 1.0f);
animctrl_setDuration(aCtrl, 1.4f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
D_8037D4C0 = 2;
}
break;
case 1://L802B14B4
if( 500.0f < (player_getYPosition() - func_80294438())){
sp34 = BS_2F_FALL;
}
if(D_8037D4C2){
D_8037D4C2 = 0;
sp34 = BS_BSHOCK_CHARGE;
}
if(func_8028B254(0x5A)){
animctrl_setSubRange(aCtrl, 0.0, 1.0f);
animctrl_setDuration(aCtrl, 2.0f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
D_8037D4C0 = 2;
}
break;
case 2:
break;
}//L802B1548
if(func_8028B424())
sp34 = BS_3D_FALL_TUMBLING;
if(button_released(BUTTON_A))
D_8037D4C2 = 0;
if(should_flap())
sp34 = BS_BFLAP;
if(should_peck())
sp34 = BS_11_BPECK;
if(should_beak_bust())
sp34 = BS_F_BBUSTER;
if(func_8028B2E8()){
func_8029C5E8();
sp34 = BS_20_LANDING;
}
if(velocity[1] < 0.0f && player_inWater())
sp34 = BS_4C_LANDING_IN_WATER;
bs_setState(sp34);
}
void bsjump_end(void){
if(ability_hasLearned(ABILITY_A_HOLD_A_JUMP_HIGHER))
ability_use(0);
if(bs_getNextState() != BS_11_BPECK)
gravity_reset();
}
void bsjump_fall_init(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
int sp20;
if(miscflag_isTrue(7) && 700.0f < func_80297AAC())
player_setYVelocity(700.0f);
sp20 = (bs_getPrevState() == BS_12_BFLIP)? 0 : 1;
animctrl_reset(aCtrl);
animctrl_setSmoothTransition(aCtrl, sp20);
animctrl_setIndex(aCtrl, 0xb0);
animctrl_setTransitionDuration(aCtrl, 0.3f);
animctrl_setDuration(aCtrl, 0.38f);
func_802875AC(aCtrl, "bsjump.c", 0x188);
func_8029C7F4(1,1,3,6);
D_8037D4C0 = 0;
}
void bsjump_fall_update(void){
enum bs_e sp2C = 0;
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
f32 sp1C[3];
if(miscflag_isTrue(0xf))
func_802978A4();
else
func_802B6FA8();
_get_velocity(&sp1C);
switch(D_8037D4C0){
case 0://L802B17B8
if(func_8028B254(0x5a)){
animctrl_reset(aCtrl);
animctrl_setIndex(aCtrl, 8);
func_8028774C(aCtrl, 0.6667f);
animctrl_setDuration(aCtrl, 2.0f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
func_802875AC(aCtrl, "bsjump.c", 0x1b5);
D_8037D4C0 = 1;
}
break;
case 1:
break;
}//L802B1824
if(miscflag_isFalse(0xf)){
if(func_8028B424())
sp2C = BS_3D_FALL_TUMBLING;
if(should_flap() && miscflag_isFalse(5))
sp2C = BS_BFLAP;
if(should_peck())
sp2C = BS_11_BPECK;
if(should_beak_bust())
sp2C = BS_F_BBUSTER;
if(player_inWater())
sp2C = BS_4C_LANDING_IN_WATER;
}
else if(player_inWater()){
func_8029CCC4();
if(miscflag_isTrue(6) || miscflag_isTrue(0x14)){
sp2C = BS_D_TIMEOUT;
}
}//L802B18E8
if(func_8028B2E8()){
func_8029C5E8();
sp2C = BS_20_LANDING;
}
bs_setState(sp2C);
}
void bsjump_fall_end(void){};
void func_802B1928(void) {
AnimCtrl *anim_ctrl;
anim_ctrl = _player_getAnimCtrlPtr();
climbRelease();
animctrl_reset(anim_ctrl);
animctrl_setIndex(anim_ctrl, ANIM_BANJO_JUMP);
animctrl_setDuration(anim_ctrl, 1.9f);
animctrl_setTransitionDuration(anim_ctrl, 0.134f);
func_8028774C(anim_ctrl, 0.3f);
animctrl_setSubRange(anim_ctrl, 0.0f, 0.5042f);
animctrl_setPlaybackType(anim_ctrl, ANIMCTRL_ONCE);
func_802875AC(anim_ctrl, "bsjump.c", 0x201);
func_80289F10(1);
func_802991A8(1);
func_8029957C(3);
func_802978DC(3);
func_8029797C(yaw_getIdeal());
func_80297970(60.0f);
func_802979AC(yaw_getIdeal(), func_80297A64());
player_setYVelocity(D_80364CDC);
gravity_set(D_80364CE0);
func_80294378(6);
D_8037D4C0 = 0;
func_802B1100();
}
void func_802B1A54(void) {
s32 next_state;
AnimCtrl *anim_ctrl;
f32 velocity[3];
next_state = 0;
anim_ctrl = _player_getAnimCtrlPtr();
_get_velocity(velocity);
if (velocity[1] < 0.0f) {
func_80294378(1);
}
switch (D_8037D4C0) {
case 0:
if (animctrl_isStopped(anim_ctrl)) {
animctrl_setSubRange(anim_ctrl, 0.0f, 0.6667f);
animctrl_setDuration(anim_ctrl, 4.0f);
animctrl_setPlaybackType(anim_ctrl, ANIMCTRL_ONCE);
D_8037D4C0 = 1;
}
if (func_8028B254(130)) {
animctrl_setSubRange(anim_ctrl, 0.0f, 1.0f);
animctrl_setDuration(anim_ctrl, 1.4f);
animctrl_setPlaybackType(anim_ctrl, ANIMCTRL_ONCE);
D_8037D4C0 = 2;
}
break;
case 1:
if (func_8028B254(90)) {
animctrl_setSubRange(anim_ctrl, 0.0f, 1.0f);
animctrl_setDuration(anim_ctrl, 2.0f);
animctrl_setPlaybackType(anim_ctrl, ANIMCTRL_ONCE);
D_8037D4C0 = 2;
}
break;
case 2:
break;
}
if (func_8028B2E8()) {
func_8029C5E8();
next_state = BS_20_LANDING;
}
bs_setState(next_state);
}
void func_802B1BCC(void){
func_80294378(1);
gravity_reset();
}
void func_802B1BF4(void) {
AnimCtrl *anim_ctrl;
bool smooth_transition;
anim_ctrl = _player_getAnimCtrlPtr();
smooth_transition = TRUE;
if(bs_getPrevState() == BS_12_BFLIP){
smooth_transition = FALSE;
}
animctrl_reset(anim_ctrl);
animctrl_setSmoothTransition(anim_ctrl, smooth_transition);
animctrl_setIndex(anim_ctrl, ANIM_BANJO_JUMP);
animctrl_setTransitionDuration(anim_ctrl, 0.3f);
animctrl_setDuration(anim_ctrl, 1.9f);
func_8028774C(anim_ctrl, 0.6667f);
animctrl_setPlaybackType(anim_ctrl, ANIMCTRL_STOPPED);
func_802875AC(anim_ctrl, "bsjump.c", 0x298);
yaw_setIdeal(func_8029B41C());
func_80289F10(1);
func_802991A8(1);
func_8029957C(3);
func_802978DC(6);
func_80297970(0.0f);
func_80297A0C(0);
D_8037D4C0 = 0;
func_8028D5DC();
}
void func_802B1CF8(void) {
enum bs_e next_state;
AnimCtrl *anim_ctrl;
f32 velocity[3];
next_state = 0;
anim_ctrl = _player_getAnimCtrlPtr();
_get_velocity(velocity);
switch (D_8037D4C0) {
case 0:
if (func_8028B254(90)) {
animctrl_setSubRange(anim_ctrl, 0.0f, 1.0f);
animctrl_setDuration(anim_ctrl, 2.0f);
animctrl_setPlaybackType(anim_ctrl, ANIMCTRL_ONCE);
D_8037D4C0 = 1;
}
break;
case 1:
break;
}
if (func_8028B2E8() != 0) {
next_state = 1;
}
bs_setState(next_state);
}
void func_802B1DA4(void){
func_8028D5F4();
}
bool bsjump_jumpingFromWater(void){
return D_8037D4C1;
}
void bsjump_tumble_init(void){
func_8028A084(0x68, 0.35f);
func_8029C7F4(1,1,3,6);
func_802921BC(60.0f);
if(func_80293234() == 1){
func_8029E3C0(0, 0.5f);
func_8029E3C0(1, 0.41f);
func_80299CF4(SFX_52_BANJO_YAH_OH, 1.0f, 22000);
}else{
func_8029E3C0(0, 0.0f);
func_8029E3C0(1, 0.01f);
}
D_8037D4C0 = 0;
}
void bsjump_tumble_update(void){
enum bs_e sp1C = 0;
if(func_8029E1A8(1))
func_80299CF4(SFX_63_BANJO_UWAAAAOOH, 1.0f, 32000);
func_8029E1A8(0);
func_802B6FA8();
if(func_8029E384(1)){
pitch_setIdeal(pitch_getIdeal() + 20.0f);
}
if(func_8029E348(0)){
if(should_flap())
sp1C = BS_BFLAP;
if(should_peck())
sp1C = BS_11_BPECK;
if(should_beak_bust())
sp1C = BS_F_BBUSTER;
}//L802B1F2C
if(player_inWater())
sp1C = BS_4C_LANDING_IN_WATER;
if(func_8028B2E8())
sp1C = BS_SPLAT;
bs_setState(sp1C);
}
void bsjump_tumble_end(void){
enum bs_e next_state = bs_getNextState();
if( next_state == BS_F_BBUSTER
|| next_state == BS_BFLAP
|| next_state == BS_11_BPECK
){
func_80293240(3);
}
func_8029CB84();
func_802921BC(0.0f);
func_80299E6C();
}

71
src/core2/bs/ow.c Normal file
View File

@@ -0,0 +1,71 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
void func_802B37DC(void);
/* .bss */
u8 D_8037D4D0;
void func_802B1FD0(s32 arg0){}
void bsow_init(void){
AnimCtrl *plyr_mvmnt;
plyr_mvmnt = _player_getAnimCtrlPtr();
animctrl_reset(plyr_mvmnt);
animctrl_setSmoothTransition(plyr_mvmnt, 0);
animctrl_setSubRange(plyr_mvmnt, 0.0f, 0.534399986267f);
animctrl_setIndex(plyr_mvmnt, ANIM_BANJO_OW);
animctrl_setDuration(plyr_mvmnt, 1.70000004768f);
animctrl_setPlaybackType(plyr_mvmnt, ANIMCTRL_ONCE);
func_802875AC(plyr_mvmnt, "bsow.c", 0x50);
func_80299BFC(1.0f);
func_802B360C();
func_8028D5DC();
func_80292E48();
D_8037D4D0 = 0;
func_802B1FD0(1);
}
void bsow_update(void) {
s32 sp1C = 0;
u8 temp_v0;
sp1C = 0;
func_802B37DC();
switch(D_8037D4D0){
case 0:
if (func_8028B254(0x5A) != 0) {
func_8028A37C(1.0f);
D_8037D4D0 = 1;
}
break;
case 1:
break;
}
if (baanim_isAt(0.3f) != 0) {
func_80292EA4();
}
if (func_8028B424() != 0) {
sp1C = BS_3D_FALL_TUMBLING;
}
if (func_8028B2E8() != 0) {
sp1C = BS_2_WALK_SLOW;
}
if ((player_inWater() != 0) && (func_80297AAC() <= 0.0f)) {
sp1C = BS_4C_LANDING_IN_WATER;
}
bs_setState(sp1C);
}
void bsow_end(void){
func_802B35DC();
func_802B1FD0(0);
func_80297CA8();
gravity_reset();
func_8028D5F4();
func_80292EA4();
}

568
src/core2/bs/pumpkin.c Normal file
View File

@@ -0,0 +1,568 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern void func_802920FC(f32);
extern void func_8028A084(s32, f32);
extern void func_8029AD68(f32, s32);
/* .data */
f32 D_80364CF0 = 30.0f;
f32 D_80364CF4 = 500.0f;
f32 D_80364CF8 = 0.44f;
f32 D_80364CFC = 0.2f;
f32 D_80364D00 = 693.5f;
f32 D_80364D04 = -1200.0f;
u8 D_80364D08 = 0;
s16 D_80364D0C[] = {
SFX_54_BANJO_HOO_1,
SFX_55_BANJO_HOO_2,
SFX_56_BANJO_HUI
}; //enum sfx_e
/* .bss */
u8 D_8037D4E0;
s32 D_8037D4E4;
f32 D_8037D4E8[3];
f32 D_8037D4F4;
/* .code */
void func_802B21D0(void) {
func_8030EB00(D_80364D0C[D_80364D08], 1.35f, 1.45f);
D_80364D08++;
if (D_80364D08 >= 3) {
D_80364D08 = 0;
}
}
void func_802B223C(void) {
f32 sp1C;
sp1C = func_8029B30C();
if (func_8029B300() == 0) {
func_80297970(0.0f);
return;
}
func_80297970(func_80257C48(sp1C, D_80364CF0, D_80364CF4));
}
void func_802B229C(void) {
if (!bspumpkin_inSet(bs_getNextState())) {
func_8029B0C0();
func_8029E070(0);
func_8029E064(0);
miscflag_clear(3);
miscflag_clear(4);
func_80293D74();
}
func_80289F10(1);
}
int bspumpkin_inSet(s32 move_indx){
return (move_indx == BS_48_PUMPKIN_IDLE)
|| (move_indx == BS_49_PUMPKIN_WALK)
|| (move_indx == BS_4A_PUMPKIN_JUMP)
|| (move_indx == BS_4B_PUMPKIN_FALL)
|| (move_indx == BS_4D_PUMPKIN_OW)
|| (move_indx == BS_4E_PUMPKIN_DIE)
|| (move_indx == BS_8F_PUMPKIN_LOCKED)
|| (move_indx == BS_93_PUMPKIN_DRONE);
}
void func_802B2384(void) {
func_8028A084(0xA0, 0.8f);
func_8029C7F4(1, 1, 1, 2);
func_80297970(0.0f);
pitch_setAngVel(1000.0f, 12.0f);
roll_setAngularVelocity(1000.0f, 12.0f);
func_80293D48(50.0f, 25.0f);
miscflag_set(3);
miscflag_set(4);
func_802900B4();
}
void func_802B242C(void) {
s32 next_state;
next_state = 0;
if (func_8028B094()) {
next_state = BS_4B_PUMPKIN_FALL;
}
if (func_80294F78()) {
next_state = func_802926C0();
}
if (func_8029B300() > 0) {
next_state = BS_49_PUMPKIN_WALK;
}
if (button_pressed(BUTTON_A)) {
next_state = BS_4A_PUMPKIN_JUMP;
}
bs_setState(next_state);
}
void func_802B24AC(void){
func_802B229C();
func_802900FC();
}
void func_802B24D4(void) {
AnimCtrl *anim_ctrl;
anim_ctrl = _player_getAnimCtrlPtr();
animctrl_reset(anim_ctrl);
animctrl_setIndex(anim_ctrl, 0xA0);
animctrl_setDuration(anim_ctrl, 0.8f);
animctrl_setPlaybackType(anim_ctrl, ANIMCTRL_LOOP);
_func_802875AC(anim_ctrl, "bspumpkin.c", 0x11D);
func_8029C7F4(2, 1, 1, 2);
func_80289EC8(D_80364CF0, D_80364CF4, D_80364CF8, D_80364CFC);
func_802900B4();
}
void func_802B2580(void) {
s32 next_state;
next_state = 0;
func_802B223C();
func_8029AD68(0.3f, 4);
if ((func_8029B300() == 0) && func_80297C04(1.0f)) {
next_state = BS_48_PUMPKIN_IDLE;
}
if (func_8028B094()) {
next_state = BS_4B_PUMPKIN_FALL;
}
if (button_pressed(BUTTON_A)) {
next_state = BS_4A_PUMPKIN_JUMP;
}
bs_setState(next_state);
}
void func_802B2610(void){
func_802B229C();
func_802900FC();
}
void func_802B2638(void) {
AnimCtrl *anim_ctrl;
anim_ctrl = _player_getAnimCtrlPtr();
animctrl_reset(anim_ctrl);
animctrl_setIndex(anim_ctrl, 0xA1);
animctrl_setSubRange(anim_ctrl, 0.0f, 0.3941f);
animctrl_setDuration(anim_ctrl, 1.2f);
animctrl_setPlaybackType(anim_ctrl, ANIMCTRL_ONCE);
func_802875AC(anim_ctrl, "bspumpkin.c", 0x16C);
func_8029C7F4(1, 1, 3, 6);
if (func_8029B2E8() != 0.0f) {
yaw_setIdeal(func_8029B33C());
}
func_8029797C(yaw_getIdeal());
func_802B223C();
func_802979AC(yaw_getIdeal(), func_80297A64());
player_setYVelocity(D_80364D00);
gravity_set(D_80364D04);
func_802B21D0();
D_8037D4E0 = 0;
}
void func_802B2750(void) {
s32 next_state;
AnimCtrl *anim_ctrl;
f32 sp1C[3];
next_state = 0;
anim_ctrl = _player_getAnimCtrlPtr();
func_802B223C();
_get_velocity(sp1C);
if (button_released(BUTTON_A) && sp1C[1] > 0.0f) {
gravity_reset();
}
switch (D_8037D4E0) {
case 0:
if (func_80297AAC() < 0.0f) {
if (func_8028B254(130)) {
func_80292E48();
animctrl_setDuration(anim_ctrl, 0.7f);
animctrl_setSubRange(anim_ctrl, 0.0f, 0.8059f);
animctrl_setPlaybackType(anim_ctrl, ANIMCTRL_ONCE);
D_8037D4E0 = 2;
} else {
animctrl_setSubRange(anim_ctrl, 0.0f, 0.662f);
animctrl_setPlaybackType(anim_ctrl, ANIMCTRL_ONCE);
D_8037D4E0 = 1;
}
}
break;
case 1:
if (func_8028B254(130)) {
func_80292E48();
animctrl_setSubRange(anim_ctrl, 0.0f, 0.8059f);
animctrl_setPlaybackType(anim_ctrl, ANIMCTRL_ONCE);
D_8037D4E0 = 2;
}
break;
case 2:
if (func_8028B2E8()) {
func_8029AE48();
animctrl_setSubRange(anim_ctrl, 0.0f, 1.0f);
animctrl_setDuration(anim_ctrl, 1.2f);
animctrl_setPlaybackType(anim_ctrl, ANIMCTRL_ONCE);
D_8037D4E0 = 3;
}
break;
case 3:
if (animctrl_isStopped(anim_ctrl)) {
func_80292EA4();
func_80297970(0.0f);
next_state = BS_48_PUMPKIN_IDLE;
}
break;
}
if (func_8028B2E8()) {
if (func_8029B300() > 0) {
next_state = BS_49_PUMPKIN_WALK;
}
if (button_pressed(BUTTON_A)) {
next_state = BS_4A_PUMPKIN_JUMP;
}
}
bs_setState(next_state);
}
void func_802B2990(void){
func_80292EA4();
gravity_reset();
func_802B229C();
}
void func_802B29C0(void) {
AnimCtrl *anim_ctrl;
anim_ctrl = _player_getAnimCtrlPtr();
D_8037D4E4 = 0;
animctrl_reset(anim_ctrl);
animctrl_setIndex(anim_ctrl, 0xA1);
func_8028774C(anim_ctrl, 0.662f);
animctrl_setDuration(anim_ctrl, 0.7f);
animctrl_setPlaybackType(anim_ctrl, ANIMCTRL_STOPPED);
func_802875AC(anim_ctrl, "bspumpkin.c", 0x1F1);
func_8029C7F4(1, 1, 3, 6);
D_8037D4E0 = 0;
}
void func_802B2A5C(void) {
s32 next_state;
AnimCtrl *anim_ctrl;
f32 sp1C[3];
next_state = 0;
anim_ctrl = _player_getAnimCtrlPtr();
if (D_8037D4E4) {
func_802B223C();
}
_get_velocity(sp1C);
switch (D_8037D4E0) {
case 0:
if (func_8028B254(130)) {
animctrl_setSubRange(anim_ctrl, 0.0f, 0.8059f);
animctrl_setPlaybackType(anim_ctrl, ANIMCTRL_ONCE);
D_8037D4E0 = 1;
}
break;
case 1:
if (func_8028B2E8()) {
func_8029AE48();
func_80297970(0.0f);
animctrl_setSubRange(anim_ctrl, 0.0f, 1.0f);
animctrl_setDuration(anim_ctrl, 1.2f);
animctrl_setPlaybackType(anim_ctrl, ANIMCTRL_ONCE);
D_8037D4E0 = 2;
}
break;
case 2:
break;
}
if (func_8028B2E8() && ((func_8029B300() > 0) || (D_8037D4E0 == 2 && animctrl_isStopped(anim_ctrl)))) {
if (miscflag_isTrue(0x19)) {
next_state = func_80292738();
} else {
next_state = BS_48_PUMPKIN_IDLE;
}
}
bs_setState(next_state);
}
void func_802B2BD0(void){
func_802B229C();
}
void func_802B2BF0(void) {
func_8029656C(D_8037D4E8);
func_8028FAB0(D_8037D4E8);
func_8028A084(0xA0, 0.8f);
func_8029C7F4(1, 1, 2, 7);
func_80294378(6);
func_8029E3C0(0, 0.0f);
}
void func_802B2C58(void) {
f32 sp3C;
f32 sp38;
f32 sp34;
f32 sp28[3];
func_8029E22C(0);
sp34 = func_8029E270(0);
sp38 = yaw_getIdeal();
sp3C = ml_map_f(sp34, 0.0f, 2.3f, 0.0f, 45.0f);
yaw_setIdeal(mlNormalizeAngle(sp38 + sp3C));
yaw_applyIdeal();
func_802920FC(ml_map_f(sp34, 0.0f, 2.3f, 1.0f, 0.3f));
ml_vec3f_copy(sp28, D_8037D4E8);
sp28[1] = ml_map_f(sp34, 0.0f, 2.3f, D_8037D4E8[1], D_8037D4E8[1] - 50.0);
func_8028FAB0(sp28);
}
void func_802B2D50(void) {
func_80294378(1);
func_802920FC(1.0f);
}
void func_802B2D80(s32 arg0) {
AnimCtrl *anim_ctrl;
f32 sp38;
f32 plyr_pos[3];
f32 sp20[3];
anim_ctrl = _player_getAnimCtrlPtr();
animctrl_reset(anim_ctrl);
animctrl_setIndex(anim_ctrl, 0x236);
animctrl_setDuration(anim_ctrl, 1.3f);
animctrl_setSubRange(anim_ctrl, 0.0f, 0.45f);
animctrl_setPlaybackType(anim_ctrl, ANIMCTRL_ONCE);
func_802875AC(anim_ctrl, "bspumpkin.c", 0x2AB);
if (arg0 == 1) {
func_8030E58C(SFX_38_BANJO_AYE_1, 1.8f);
} else {
func_8030E58C(SFX_56_BANJO_HUI, 1.8f);
}
_player_getPosition(plyr_pos);
func_80294980(sp20);
func_80257F18(sp20, plyr_pos, &sp38);
yaw_setIdeal(mlNormalizeAngle(sp38 + 180.0f));
yaw_applyIdeal();
func_80297970(200.0f);
func_8029797C(sp38);
func_802979AC(sp38, func_80297A64());
func_8029C7F4(1, 1, 2, 3);
player_setYVelocity(510.0f);
gravity_set(-1200.0f);
func_8028D5DC();
func_80292E48();
D_8037D4E0 = 0;
}
void func_802B2EE8(void) {
s32 next_state;
next_state = 0;
if (baanim_isAt(0.61f)) {
func_80292EA4();
}
switch (D_8037D4E0) {
case 0:
if (func_8028B254(90)) {
func_8028A3B8(1.0f, 0.5f);
func_8029AE48();
D_8037D4E0 = 1;
}
break;
case 1:
if (baanim_isStopped()) {
next_state = BS_48_PUMPKIN_IDLE;
}
break;
}
bs_setState(next_state);
}
void func_802B2F9C(void) {
func_80297CA8();
gravity_reset();
func_8028D5F4();
func_80292EA4();
func_802B229C();
}
void func_802B2FDC(void){
func_802B2D80(1);
}
void func_802B2FFC(void){
func_802B2EE8();
}
void func_802B301C(void){
func_802B2F9C();
}
void func_802B303C(void){
func_802B2D80(2);
}
void func_802B305C(void){
func_802B2EE8();
}
void func_802B307C(void){
func_802B2F9C();
}
void func_802B309C(void) {
AnimCtrl *anim_ctrl;
f32 sp38;
f32 plyr_pos[3];
f32 sp20[3];
anim_ctrl = _player_getAnimCtrlPtr();
func_8029B930();
animctrl_reset(anim_ctrl);
animctrl_setSmoothTransition(anim_ctrl, 0);
animctrl_setIndex(anim_ctrl, 0x188);
animctrl_setSubRange(anim_ctrl, 0.0f, 0.1439f);
animctrl_setDuration(anim_ctrl, 3.5f);
animctrl_setPlaybackType(anim_ctrl, ANIMCTRL_ONCE);
func_802875AC(anim_ctrl, "bspumpkin.c", 0x32E);
func_8030E58C(SFX_36_BANJO_DOH, 1.8f);
_player_getPosition(plyr_pos);
func_80294980(sp20);
func_80257F18(sp20, plyr_pos, &sp38);
D_8037D4F4 = 250.0f;
yaw_setIdeal(mlNormalizeAngle(sp38 + 180.0f));
yaw_applyIdeal();
func_80297970(D_8037D4F4);
func_8029797C(sp38);
func_802979AC(sp38, func_80297A64());
func_8029C7F4(1, 1, 2, 3);
player_setYVelocity(510.0f);
gravity_set(-1200.0f);
pitch_setAngVel(1000.0f, 12.0f);
func_802914CC(0xD);
func_802BF2C0(30.0f);
func_8029C984();
func_8028D5DC();
func_80292E48();
func_8029E3C0(1, 2.9f);
D_8037D4E0 = 0;
}
void func_802B3240(void){
func_80297970(D_8037D4F4);
func_80299628(0);
switch(D_8037D4E0){
case 0://L802B3284
if(func_8028B254(90)) {
func_8028A37C(0.1571f);
D_8037D4E0 = 1;
}
break;
case 1://L802B32AC
if(func_8028B2E8()) {
func_8029AE48();
FUNC_8030E624(SFX_1F_HITTING_AN_ENEMY_3, 0.8f, 18000);
FUNC_8030E624(SFX_39_BANJO_AYE_2, 1.8f, 18000);
func_8028A3B8(0.2f, 2.9f);
D_8037D4E0 = 2;
}
break;
case 2://L802B3300
if(baanim_isStopped()) {
player_setYVelocity(400.0f);
func_8028A37C(0.355f);
D_8037D4E0 = 3;
}
break;
case 3://L802B3338
D_8037D4F4 = max_f(0.0f, D_8037D4F4 - 10.0f);
if (func_8028B254(90)) {
func_8028A37C(0.36f);
D_8037D4E0 = 4;
}
break;
case 4://L802B3384
D_8037D4F4 = max_f(0.0f, D_8037D4F4 - 10.0f);
if (func_8028B2E8()) {
func_8029AE48();
FUNC_8030E624(SFX_1F_HITTING_AN_ENEMY_3, 0.8f, 18000);
FUNC_8030E624(SFX_39_BANJO_AYE_2, 1.8f, 18000);
func_8028A37C(1.0f);
D_8037D4E0 = 5;
}
break;
case 5://L802B33F4
D_8037D4F4 = max_f(0.0f, D_8037D4F4 - 10.0f);
break;
}
if (func_8029E1A8(1) != 0) {
func_8029B890();
}
bs_setState(0);
}
void func_802B3448(void) {
func_802B229C();
func_8024BD08(0);
gravity_reset();
pitch_setIdeal(0.0f);
roll_setIdeal(0.0f);
func_80292EA4();
func_80291548();
}
void func_802B34A0(void) {
func_8028A010(0xA0, 0.8f);
func_8029C7F4(1, 1, 3, 2);
func_80297970(0.0f);
func_8029C674();
func_802B3A50();
}
void func_802B34F8(void) {
s32 next_state;
next_state = 0;
func_802B3A50();
func_8029C6D0();
if (func_80298850() == 0) {
next_state = BS_48_PUMPKIN_IDLE;
}
bs_setState(next_state);
}
void func_802B353C(void) {
func_8029C748();
func_802B229C();
}
void bspumpkin_drone_init(void){
bsdrone_init();
}
void bspumpkin_drone_update(void){
bsdrone_update();
}
void bspumpkin_drone_end(void){
bsdrone_end();
func_802B229C();
}

137
src/core2/bs/rebound.c Normal file
View File

@@ -0,0 +1,137 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern f32 func_80296548(void);
extern f32 func_8029653C(void);
extern f32 func_80297A4C(void);
extern f32 func_8029B56C(f32, f32, f32, f32);
/* .bss */
s32 D_8037D500;
f32 D_8037D504;
/* .code */
void func_802B35D0(s32 arg0){
D_8037D500 = arg0;
}
void func_802B35DC(void) {
if (D_8037D500 == 1) {
func_80297A0C(0);
}
}
void func_802B360C(void) {
f32 sp44[3];
f32 sp38[3];
f32 sp2C[3];
f32 sp28;
f32 sp24;
f32 sp20;
s32 sp1C;
sp1C = func_80296560();
func_80294980(sp38);
_player_getPosition(sp2C);
func_80257F18(sp38, sp2C, &sp28);
if ((sp1C == 0xE) || (sp1C == 0x10)) {
func_802B35D0(1);
func_8029C7F4(1, 1, 2, 1);
yaw_setIdeal(mlNormalizeAngle(sp28));
gravity_set(func_80296548());
sp20 = func_8029653C();
sp24 = func_8029B56C(sp2C[1], sp38[1], sp20, func_80297A4C());
ml_vec3f_diff_copy(sp44, sp38, sp2C);
D_8037D504 = sp24;
sp44[0] /= sp24;
sp44[1] /= sp24;
sp44[2] /= sp24;
sp44[1] = sp20;
func_80297A0C(sp44);
func_8029E3C0(6, sp24);
} else {
func_802B35D0(0);
func_80298760(sp1C);
yaw_setIdeal(mlNormalizeAngle(sp28 + 180.0f));
func_80297970(func_802987D4());
func_8029797C(sp28);
func_802979AC(sp28, func_80297A64());
player_setYVelocity(func_802987C4());
gravity_set(func_802987E4());
func_8029C7F4(1, 1, 2, 3);
if (func_802987B4() == 2) {
func_802978DC(6);
}
}
yaw_applyIdeal();
}
void func_802B37DC(void) {
f32 velocity[3];
if (D_8037D500 != 0) {
if ((D_8037D500 == 1) && func_8029E1A8(6)) {
_get_velocity(velocity);
velocity[0] = 0.0f;
velocity[2] = 0.0f;
func_80297A0C(velocity);
func_80297970(0.0f);
}
} else if (func_802987B4() == 2) {
func_802B6FA8();
}
}
void func_802B3868(void) {
AnimCtrl *anim_ctrl;
f32 sp20;
anim_ctrl = _player_getAnimCtrlPtr();
func_802B360C();
if (D_8037D500 == 0) {
sp20 = 1.4f;
} else {
sp20 = D_8037D504 + 0.5;
}
animctrl_reset(anim_ctrl);
animctrl_setSmoothTransition(anim_ctrl, 0);
animctrl_setSubRange(anim_ctrl, 0.0f, 0.5823f);
animctrl_setIndex(anim_ctrl, 0xF);
animctrl_setDuration(anim_ctrl, sp20);
animctrl_setPlaybackType(anim_ctrl, ANIMCTRL_ONCE);
_func_802875AC(anim_ctrl, "bsrebound.c", 0xC6);
func_8030E58C(SFX_56_BANJO_HUI, 1.0f);
func_8029E3C0(0, 1.5f);
func_8028D5DC();
}
void func_802B3954(void) {
s32 next_state;
AnimCtrl *anim_ctrl;
next_state = 0;
anim_ctrl = _player_getAnimCtrlPtr();
if (func_8029E1A8(0) && map_get() == MAP_93_GL_DINGPOT) {
func_8028D5F4();
}
func_802B37DC();
if (func_8028B2E8()) {
next_state = BS_20_LANDING;
}
if (func_8028B424() && D_8037D500 == 0) {
next_state = BS_3D_FALL_TUMBLING;
}
if (animctrl_isStopped(anim_ctrl) && func_8028B094() && (D_8037D500 == 0)) {
next_state = BS_2F_FALL;
}
bs_setState(next_state);
}
void func_802B3A20(void) {
func_802B35DC();
gravity_reset();
func_8028D5F4();
}

172
src/core2/bs/rest.c Normal file
View File

@@ -0,0 +1,172 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
void func_802B3A50(void) {
f32 sp34;
f32 plyr_pos[3];
f32 sp1C[3];
if (func_80298850()) {
_player_getPosition(plyr_pos);
if (func_80298800(sp1C) && func_80257F18(plyr_pos, sp1C, &sp34)) {
yaw_setIdeal(sp34);
}
}
}
void func_802B3AAC(enum asset_e anim_id, f32 anim_duration) {
AnimCtrl *anim_ctrl;
anim_ctrl = _player_getAnimCtrlPtr();
if (anim_id == 0x14A) {
func_8029E070(1);
switch (animctrl_getIndex(_player_getAnimCtrlPtr())) {
case 0x14A:
func_8028A010(anim_id, anim_duration);
break;
case 0x167:
animctrl_reset(anim_ctrl);
animctrl_setIndex(anim_ctrl, 0x167);
animctrl_setDuration(anim_ctrl, 0.4f);
animctrl_setPlaybackType(anim_ctrl, ANIMCTRL_ONCE);
break;
default:
func_8028A180(0x167, 0.5f);
animctrl_setPlaybackType(anim_ctrl, ANIMCTRL_ONCE);
break;
}
} else {
func_8028A010(anim_id, anim_duration);
}
func_8029C7F4(1, 1, 3, 2);
func_80297970(0.0f);
func_802B3A50();
}
bool func_802B3BB0(void) {
AnimCtrl *anim_ctrl;
bool sp20;
anim_ctrl = _player_getAnimCtrlPtr();
func_802B3A50();
sp20 = FALSE;
switch(animctrl_getIndex(anim_ctrl)){
case 0x167:
if (baanim_isStopped() != 0) {
if (animctrl_isPlayedForwards(anim_ctrl) != 0) {
func_8028A010(0x14A, 11.4f);
} else if (func_80298850() == 0) {
sp20 = TRUE;
}
}
break;
case 0x14A:
if (func_80298850() == 0) {
animctrl_reset(anim_ctrl);
animctrl_setDirection(anim_ctrl, 0);
animctrl_setIndex(anim_ctrl, 0x167);
func_8028774C(anim_ctrl, 1.0f);
animctrl_setDuration(anim_ctrl, 0.5f);
animctrl_setPlaybackType(anim_ctrl, ANIMCTRL_ONCE);
_func_802875AC(anim_ctrl, "bsrest.c", 0xA3);
}
break;
default:
if (func_80298850() == 0) {
sp20 = TRUE;
}
break;
}
return sp20;
}
void func_802B3CCC(void){
func_8029E070(0);
}
void func_802B3CEC(void){
enum asset_e anim_id;
f32 anim_duration;
func_8029BE10(&anim_id, &anim_duration);
func_802B3AAC(anim_id, anim_duration);
}
void func_802B3D1C(void) {
enum bs_e next_state;
next_state = 0;
if (player_inWater() != 0) {
next_state = BS_77;
}
if (func_802B3BB0() != 0) {
next_state = bs_getIdleState();
}
bs_setState(next_state);
}
void func_802B3D6C(void){
func_802B3CCC();
}
void func_802B3D8C(void){
enum asset_e anim_id;
f32 anim_duration;
func_8029BF00(&anim_id, &anim_duration);
func_802B3AAC(anim_id, anim_duration);
}
void func_802B3DBC(void) {
enum bs_e next_state;
next_state = 0;
if (player_inWater() != 0) {
next_state = BS_77;
}
if (func_802B3BB0() != 0) {
next_state = bs_getIdleState();
}
bs_setState(next_state);
}
void func_802B3E0C(void){
func_802B3CCC();
}
void func_802B3E2C(void){
enum asset_e anim_id;
f32 anim_duration;
func_8029BE88(&anim_id, &anim_duration);
func_802B3AAC(anim_id, anim_duration);
func_8029C674();
}
void func_802B3E64(void) {
s32 next_state;
next_state = 0;
func_8029C6D0();
if (player_inWater()) {
next_state = BS_77;
}
if (func_802B3BB0()) {
next_state = bs_getIdleState();
}
if (map_get() == MAP_27_FP_FREEZEEZY_PEAK && miscflag_isTrue(0x14)) {
next_state = func_8029CA94(next_state);
}
bs_setState(next_state);
}
void func_802B3EF4(void){
func_802B3CCC();
func_8029C748();
}

57
src/core2/bs/sled.c Normal file
View File

@@ -0,0 +1,57 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
ActorMarker *D_8037D510;
/* .code */
void func_802B3F20(void){
Actor *actor;
D_8037D510 = func_80296554();
actor = marker_getActor(D_8037D510);
actor->unk138_20 = TRUE;
}
void func_802B3F60(void){
Actor *actor;
if(D_8037D510 != NULL){
actor = marker_getActor(D_8037D510);
actor->unk138_20 = FALSE;
D_8037D510 = NULL;
}
}
void bssled_init(void){
func_802B3F20();
func_8028A010(ASSET_228_ANIM_BANJO_SLED, 1.8f);
func_8029C7F4(1, 1, 3, 7);
func_80297970(0.0f);
func_80294A8C(0);
func_80294378(6);
}
void bssled_update(void){
s32 state = 0;
if(D_8037D510 == NULL)
state = BS_2F_FALL;
bs_setState(state);
}
void bssled_end(void){
func_80294A8C(1);
func_80294378(1);
func_802B3F60();
roll_setIdeal(0.0f);
pitch_setIdeal(0.0f);
}
void bssled_interrupt(void){
if(bs_getInterruptType() == 0x28){
func_802B3F60();
func_8029A86C(2);
}
else{
func_80296608();
}
}

121
src/core2/bs/slide.c Normal file
View File

@@ -0,0 +1,121 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
/* .bss */
s32 D_8037D520;
s32 D_8037D524;
f32 D_8037D528;
void func_802B40D0(void){
f32 sp44[3];
f32 sp38[3];
f32 sp2C[3];
f32 sp28;
_player_getPosition(sp38);
sp38[1] += 20.0f;
D_8037D524++;
if(!(D_8037D524 < 3))
D_8037D524 = 0;
if(D_8037D524){
sp28 = mlNormalizeAngle(yaw_get() + 90.0f);
func_802589E4(sp2C, sp28, randf()*10.0f + 20.0f);
sp2C[1] = 0.0f;
}
switch(D_8037D524){
case 1://L802B41A0
ml_vec3f_scale(sp2C, -1.0f);
sp38[0] += sp2C[0];
sp38[1] += sp2C[1];
sp38[2] += sp2C[2];
break;
case 2://L802B41DC
sp38[0] += sp2C[0];
sp38[1] += sp2C[1];
sp38[2] += sp2C[2];
break;
case 0://L802B4208
break;
}
func_802589E4(sp44, yaw_get(), 40.0f);
sp44[1] = 50.0f;
func_80352CF4(sp38, sp44, 10.0f, 150.0f);
}
void bsslide_init(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
f32 sp30[3];
f32 sp2C;
f32 sp28;
f32 tmp_f0;
D_8037D520 = ANIM_BANJO_SLIDE_FRONT;
if(player_isSliding()){
func_80294480(sp30);
if(func_80258108(sp30, &sp28, &sp2C)){
tmp_f0 = mlNormalizeAngle(yaw_get() - sp28);
if(tmp_f0 < 90.0f || 270.0f < tmp_f0){
D_8037D520 = ANIM_BANJO_SLIDE_BACK;
}
}
}
animctrl_reset(aCtrl);
animctrl_setIndex(aCtrl, D_8037D520);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_STOPPED);
animctrl_setDuration(aCtrl, 1.0f);
func_802875AC(aCtrl, "bsslide.c", 0x7f);
func_8029C7F4(1,1,3,3);
func_8029797C(yaw_getIdeal());
func_802979AC(yaw_getIdeal() ,func_80297A64());
pitch_setAngVel(800.0f, 8.0f);
func_80297970(0.0f);
func_80299AAC();
D_8037D524 = 0;
D_8037D528 = 1.0f;
}
void bsslide_update(void){
enum bs_e sp3C = 0;
f32 sp30[3];
f32 sp2C;
f32 sp28;
func_80299AAC();
D_8037D528 = max_f(D_8037D528 - time_getDelta(), 0.0f);
if(player_isSliding()){
func_80294480(sp30);
if(func_80258108(sp30, &sp2C, &sp28)){
if(D_8037D520 == 0x5A){
yaw_setIdeal(sp2C + 180.0f);
pitch_setIdeal(-sp28);
}else{
yaw_setIdeal(sp2C);
pitch_setIdeal(sp28);
}
func_80297970(ml_map_f(sp28,20.0f, 60.0f, 550.0f, 700.0f));
func_8029797C(sp2C);
}else{
func_80297970(500.0f);
}
func_802B40D0();
}else{//L802B44C4
sp3C = BS_1_IDLE;
}//L802B44C8
if(player_inWater())
sp3C = BS_4C_LANDING_IN_WATER;
if(D_8037D528 == 0.0f && button_pressed(BUTTON_A))
sp3C = func_8029C780();
bs_setState(sp3C);
}
void bsslide_end(void){
if(level_get() != 6)
ability_use(6);
pitch_setIdeal(0.0f);
}

87
src/core2/bs/splat.c Normal file
View File

@@ -0,0 +1,87 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
#include "bsint.h"
void func_80292900(f32, f32);
void func_80250D94(f32, f32, f32);
/* .bss */
u8 D_8037D530;
/* .code */
void func_802B4570(void) {
f32 i;
for(i = 0.0f; i < 360.0f; i += 45.0f){
func_80292900(i, 230.0f);
}
}
void bssplat_init(void){
s32 sp1C;
func_8028A274(0x149, 1.1f);
func_8029C7F4(1,1,3,3);
func_802931DC(&sp1C);
func_803463D4(ITEM_14_HEALTH, -sp1C);
if(func_8029CEB0() == 4){
FUNC_8030E624(SFX_116_DEAF_RUSTLING, 0.7f, 32000);
FUNC_8030E624(SFX_116_DEAF_RUSTLING, 0.8f, 32000);
func_80250D94(0.75f, 0.25f, 0.3f);
}else{
FUNC_8030E624(SFX_1F_HITTING_AN_ENEMY_3, 0.8f, 32750);
func_80250D94(1.0f, 0.5f, 0.4f);
}
func_80299CF4(SFX_38_BANJO_AYE_1, 1.0f, 28000);
func_802B4570();
func_802BB3DC(0, 45.0f, 0.71f);
if(item_getCount(ITEM_14_HEALTH) == 0)
bs_setState(BS_41_DIE);
D_8037D530 = 0;
func_8028D5DC();
}
void bssplat_update(void){
enum bs_e sp1C = 0;
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
func_80297970(max_f(0.0f, func_80297A64() - 15.0f));
switch (D_8037D530)
{
case 0://L802B4760
if(140.0f < func_80297A64())
func_802929F8();
if(func_8028B094())
sp1C = BS_2F_FALL;
if(animctrl_isStopped(aCtrl)){
func_8028A180(ASSET_D2_ANIM_BANJO_GETTING_UP, 2.25f);
D_8037D530 = 1;
}
break;
case 1://L802B47C8
if(animctrl_isAt(aCtrl, 0.63f))
sp1C = BS_20_LANDING;
if(animctrl_isStopped(aCtrl))
sp1C = BS_1_IDLE;
if(func_8028B094())
sp1C = BS_2F_FALL;
break;
}//L802B4808
if(func_8028B2E8() == 0 && player_inWater())
sp1C = BS_2D_SWIM_IDLE;
bs_setState(sp1C);
}
void bssplat_end(void){
func_8028D5F4();
func_80297CA8();
}

336
src/core2/bs/stand.c Normal file
View File

@@ -0,0 +1,336 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
#include "bsint.h"
extern f32 func_8029B2E8(void);
void func_80299234(f32, f32);
void func_802875AC(AnimCtrl *, char*, s32);
void func_802900B4(void);
void func_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_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);
func_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);
func_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);
func_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);
func_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);
func_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;
func_802991A8(3);
func_80299234(200.0f, 14.0f);
} else {
if (D_8037D544 != 0) {
yaw_setIdeal(yaw_get());
}
D_8037D544 = 0;
func_802991A8(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) == 0x95) {
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, 0xF6);
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(0x95, 5.5f);
_func_802875AC(anim_ctrl, "bsstand.c", 0x1AB);
func_8029E070(1);
func_802900FC();
} else if (sp18 & 0x20) {
func_8028A180(0x95, 5.5f);
func_8029E070(1);
func_802900FC();
} else if (sp18 & 8) {
if (animctrl_getIndex(anim_ctrl) == 0x6F) {
sp1C = animctrl_getAnimTimer(anim_ctrl);
} else {
sp1C = 0.0f;
func_802900B4();
}
animctrl_reset(anim_ctrl);
animctrl_setIndex(anim_ctrl, 0x6F);
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) == 0xd2){
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 == 0xd){
bs_setState(0x52);
}
if(sp1C == 0x7){
if(_player_getTransformation() != TRANSFORM_1_BANJO)
func_8029A86C(1);
else{
func_802948F8(func_8028D688());
bs_setState(BS_3A_CARRY_IDLE);
}
}
else if(sp1C == 0x12){//L802B53D0
func_8029A86C(1);
if( _player_getTransformation() == TRANSFORM_1_BANJO && !miscflag_isTrue(0xF) && func_802916CC(0)){
func_8028DE6C(carriedObject_getActorID());
func_8029A86C(2);
}
}
else if(sp1C == 0x8){//L802B5438
func_8029A86C(2);
bs_setState(0x3C);
}else{
func_802948E0();
func_80296608();
}
}

49
src/core2/bs/surf.c Normal file
View File

@@ -0,0 +1,49 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
/* .bss */
s32 D_8037D560;
/* .code */
void func_802B5FD0(void) {
AnimCtrl *anim_ctrl;
anim_ctrl = _player_getAnimCtrlPtr();
animctrl_reset(anim_ctrl);
animctrl_setIndex(anim_ctrl, 0x69);
animctrl_setDuration(anim_ctrl, 1.8f);
animctrl_setPlaybackType(anim_ctrl, ANIMCTRL_LOOP);
_func_802875AC(anim_ctrl, "bssurf.c", 0x33);
func_8029C7F4(1, 1, 3, 2);
func_80297970(0.0f);
D_8037D560 = 1;
}
void func_802B6064(void) {
enum bs_e next_state;
next_state = 0;
if (button_pressed(BUTTON_A)) {
next_state = BS_5_JUMP;
}
if (D_8037D560 == 0) {
next_state = BS_1_IDLE;
}
D_8037D560 = 0;
if (miscflag_isTrue(6)) {
next_state = BS_53_TIMEOUT;
}
bs_setState(next_state);
}
void func_802B60D0(void){}
void func_802B60D8(void) {
if (bs_getInterruptType() == 0xD) {
D_8037D560 = 1;
func_8029A86C(2);
return;
}
func_80296608();
}

315
src/core2/bs/swim.c Normal file
View File

@@ -0,0 +1,315 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern void func_80295328(s32, f32);
bool bsswim_inset(enum bs_e state_id);
/* .data */
f32 D_80364D40 = 30.0f;
f32 D_80364D44 = 300.0f;
f32 D_80364D48 = 1.2f;
f32 D_80364D4C = 0.7f;
s16 D_80364D50[10] = {
0x57,
0x57,
0x57,
0x58,
0x57,
0x58,
0x57,
0x57,
0x58,
0x58
};
/* .bss */
u32 D_8037D550;
/* .code */
void func_802B5480(void) {
f32 sp2C[3];
ParticleEmitter *sp28;
if (func_80294574()) {
if (randf() > 0.5) {
func_8029223C(sp2C);
} else {
func_80292260(sp2C);
}
sp28 = func_8029B950(&sp2C, 0.0f);
particleEmitter_setParticleVelocityRange(sp28, -60.0f, -100.0f, -60.0f, 60.0f, 0.0f, 60.0f);
particleEmitter_emitN(sp28, 1);
}
}
void func_802B5538(AnimCtrl *arg0) {
enum asset_e sp24;
sp24 = D_80364D50[D_8037D550];
if (animctrl_getIndex(arg0) != sp24) {
func_8028774C(arg0, animctrl_getAnimTimer(arg0));
animctrl_setIndex(arg0, sp24);
_func_802875AC(arg0, "bsswim.c", 0x79);
}
D_8037D550++;
if (D_8037D550 >= 10) {
D_8037D550 = 0;
}
}
void func_802B55DC(void) {
f32 sp1C;
sp1C = func_8029B30C();
if (func_8029B300() == 0) {
func_80297970(0.0f);
return;
}
func_80297970(func_80257C48(sp1C, D_80364D40, D_80364D44));
}
void func_802B563C(void) {
if (level_get() == LEVEL_9_RUSTY_BUCKET_BAY) {
func_8035644C(0xAB);
} else if (map_get() == MAP_46_CCW_WINTER) {
func_8035644C(0xDD);
}
gravity_set(100.0f);
func_80297BF8(133.33f);
func_8029B324(0, 0.03f);
func_8029B324(1, 1.0f);
func_80294378(3);
}
void func_802B56D4(void) {
if (!bsswim_inset(bs_getNextState())) {
func_80297B94();
gravity_reset();
func_8029B0C0();
func_80294378(1);
}
}
bool bsswim_inset(enum bs_e state_id){
return state_id == BS_2D_SWIM_IDLE
|| state_id == BS_2E_SWIM
|| state_id == BS_4C_LANDING_IN_WATER
|| state_id == BS_77
|| state_id == BS_96_SWIM_LOCKED
;
}
void func_802B5774(void) {
AnimCtrl *anim_ctrl;
s32 prev_state;
f32 transition_duration;
anim_ctrl = _player_getAnimCtrlPtr();
prev_state = bs_getPrevState();
if (prev_state == BS_4C_LANDING_IN_WATER) {
transition_duration = 0.8f;
} else {
transition_duration = 0.5f;
}
if (bsbswim_inSet(prev_state) != 0) {
if (prev_state == BS_54_SWIM_DIE) {
func_80299CF4(SFX_AF_BANJO_CATCHING_BREATH, 1.0f, 30000);
} else {
func_80299CF4(SFX_AF_BANJO_CATCHING_BREATH, 1.0f, (s32) ml_map_f(item_getCount(ITEM_17_AIR), 3600.0f, 0.0f, 8000.0f, 30000.0f));
}
func_80295328(4, 0.7f);
}
if ((animctrl_getIndex(anim_ctrl) == 0x57) && (prev_state != BS_4C_LANDING_IN_WATER)) {
animctrl_setSmoothTransition(anim_ctrl, 0);
animctrl_setIndex(anim_ctrl, 0x57);
animctrl_setPlaybackType(anim_ctrl, ANIMCTRL_LOOP);
animctrl_setDuration(anim_ctrl, 1.2f);
} else {
animctrl_reset(anim_ctrl);
animctrl_setTransitionDuration(anim_ctrl, transition_duration);
animctrl_setIndex(anim_ctrl, 0x57);
animctrl_setPlaybackType(anim_ctrl, ANIMCTRL_LOOP);
func_8028774C(anim_ctrl, 0.3f);
animctrl_setDuration(anim_ctrl, 1.2f);
func_802875AC(anim_ctrl, "bsswim.c", 0xFD);
}
func_8029C7F4(1, 3, 3, 2);
func_80299234(500.0f, 5.0f);
func_80297970(0.0f);
func_802B563C();
D_8037D550 = 0;
}
void func_802B5950(void) {
s32 next_state;
AnimCtrl *anim_ctrl;
next_state = 0;
anim_ctrl = _player_getAnimCtrlPtr();
if ((func_8023DB4C(7) == 0) && ((f64) randf() < 0.5)) {
func_8029C304(1);
}
if ((func_8023DB4C(7) == 0) && ((f64) randf() < 0.5)) {
func_802B5480();
}
if (animctrl_isAt(anim_ctrl, 0.01f) != 0) {
func_8030EC20(SFX_DC_IDLE_PADDLING, 0.85f, 1.15f, 16000, 16000);
}
if (animctrl_isAt(anim_ctrl, 0.4348f) != 0) {
func_802B5538(anim_ctrl);
}
if (func_8029B300() == 1) {
next_state = BS_2E_SWIM;
}
if (!player_inWater()) {
next_state = BS_1_IDLE;
}
if (func_80294F78()) {
next_state = func_802926C0();
}
if (should_dive()) {
next_state = BS_30_DIVE_ENTER;
}
if (func_80294524() && button_pressed(BUTTON_A)) {
next_state = BS_5_JUMP;
}
if (miscflag_isTrue(6) || miscflag_isTrue(0x14)) {
next_state = BS_D_TIMEOUT;
}
bs_setState(next_state);
}
void func_802B5AF8(void){
func_802B56D4();
}
void func_802B5B18(void) {
AnimCtrl *anim_ctrl;
f32 anim_duration;
anim_ctrl = _player_getAnimCtrlPtr();
if (bs_getPrevState() == BS_4C_LANDING_IN_WATER) {
anim_duration = 0.8f;
} else {
anim_duration = 0.4f;
}
if (animctrl_getIndex(anim_ctrl) != 0x39) {
animctrl_reset(anim_ctrl);
animctrl_setIndex(anim_ctrl, 0x39);
animctrl_setTransitionDuration(anim_ctrl, anim_duration);
func_8028774C(anim_ctrl, 0.8f);
animctrl_setPlaybackType(anim_ctrl, ANIMCTRL_LOOP);
func_802875AC(anim_ctrl, "bsswim.c", 0x164);
}
func_80289F10(2);
func_80289EA8(0.3f, 1.5f);
func_80289EC8(D_80364D40, D_80364D44, D_80364D48, D_80364D4C);
func_802991A8(3);
func_80299234(500.0f, 5.0f);
func_8029957C(1);
func_802978DC(2);
}
void func_802B5C40(void) {
s32 next_state;
AnimCtrl *anim_ctrl;
f32 sp1C[3];
next_state = 0;
anim_ctrl =_player_getAnimCtrlPtr();
if (animctrl_isAt(anim_ctrl, 0.38f)) {
func_8029C4E4(1);
}
if (animctrl_isAt(anim_ctrl, 0.88f)) {
func_8029C4E4(0);
}
if (animctrl_isAt(anim_ctrl, 0.2f)) {
func_8030EB88(SFX_12_WATER_PADDLING_1, 0.9f, 1.1f);
}
if (animctrl_isAt(anim_ctrl, 0.7f)) {
func_8030EB88(SFX_12_WATER_PADDLING_1, 0.9f, 1.1f);
}
func_802B55DC();
if (func_8029B300() == 0) {
next_state = BS_2D_SWIM_IDLE;
}
if (player_inWater() == 0) {
next_state = BS_1_IDLE;
}
if ((func_80294530() != 0) && (can_dive() != 0)) {
func_802944D0(sp1C);
if (sp1C[1] < -0.7) {
if ((func_80294500() - player_getYPosition()) > 90.0f) {
next_state = BS_30_DIVE_ENTER;
}
}
}
if (should_dive() != 0) {
next_state = BS_30_DIVE_ENTER;
}
if (func_80294524() && button_pressed(BUTTON_A)) {
next_state = BS_5_JUMP;
}
if (miscflag_isTrue(6) || miscflag_isTrue(0x14)) {
next_state = BS_D_TIMEOUT;
}
bs_setState(next_state);
}
void func_802B5E10(void){
func_802B56D4();
}
void func_802B5E30(void) {
f32 sp34;
f32 plyr_pos[3];
f32 sp1C[3];
if (func_80298850() != 0) {
_player_getPosition(plyr_pos);
if (func_80298800(sp1C) && func_80257F18(plyr_pos, sp1C, &sp34)) {
yaw_setIdeal(sp34);
}
}
}
void func_802B5E8C(void) {
func_8028A010(0x57, 1.2f);
func_8029C7F4(1, 3, 3, 2);
func_80299234(500.0f, 5.0f);
func_80297970(0.0f);
func_802B563C();
func_802B5E30();
}
void func_802B5EFC(void) {
enum bs_e next_state;
next_state = 0;
if (func_80298850() == 0) {
next_state = BS_2D_SWIM_IDLE;
}
func_802B5E30();
bs_setState(next_state);
}
void func_802B5F38(void){
func_802B56D4();
}
void func_802B5F58(void){
func_802B563C();
bsdrone_init();
}
void func_802B5F80(void){
bsdrone_update();
}
void func_802B5FA0(void){
bsdrone_end();
func_802B56D4();
}

74
src/core2/bs/throw.c Normal file
View File

@@ -0,0 +1,74 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
/* .bss */
u8 D_8037D580;
/* .code */
void bsthrow_init(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
animctrl_reset(aCtrl);
animctrl_setIndex(aCtrl, 0x11b);
animctrl_setDuration(aCtrl, 1.0f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
func_802875AC(aCtrl, "bsthrow.c", 0x2e);
func_80289F10(1);
func_802991A8(1);
func_8029957C(3);
func_802978DC(3);
func_80297970(0.0f);
func_80297A0C(0);
D_8037D580 = 0;
}
void bsthrow_update(void){
enum bs_e next_state = 0;
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
f32 sp34[3];
f32 sp28[3];
f32 sp24;
ActorMarker *sp20 = func_802948EC();
if(D_8037D580 == 0 && sp20 != NULL)
func_802948F8(sp20);
_player_getPosition(&sp28);
func_80294A1C(&sp34);
func_80257F18(&sp28, &sp34, &sp24);
yaw_setIdeal(sp24);
if(animctrl_isAt(aCtrl, 0.35f) && sp20){
D_8037D580 = 1;
marker_getActor(sp20)->unk138_21 = 1;
}
if(animctrl_isStopped(aCtrl))
next_state = BS_1_IDLE;
bs_setState(next_state);
}
void bsthrow_end(void){
D_8037D580 = 0;
if(bs_getNextState() == BS_1_IDLE){
func_802917E4(0, 0.14f);
func_802917E4(1, 0.28f);
}
}
void bsthrow_interrupt(void){
if(bs_getInterruptType() == 0x12){
if(D_8037D580 == 0){
func_8028DE6C(carriedObject_getActorID());
}
else{
func_8029A86C(1);
}
}
else{ //L802B6748
func_80296608();
}
}

75
src/core2/bs/timeout.c Normal file
View File

@@ -0,0 +1,75 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
void func_80292E80(s32, f32);
f32 func_8029B41C(void);
void func_802BF2C0(f32);
void func_802B6270(void){
func_8028A180(0x77, 3.2f);
func_8029C7F4(1,1,3,2);
func_80297970(0.0f);
func_802914CC(0xd);
yaw_setIdeal(func_8029B41C() + 35.0f);
func_802BF2C0(80.0f);
func_8025A58C(0,0xfa0);
func_8025A70C(COMUSIC_3C_MINIGAME_LOSS);
func_8024BD08(0);
func_8029E070(1);
func_8028D5DC();
}
void func_802B6314(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
if(animctrl_isAt(aCtrl, 0.0625f))
func_80292E48();
if(animctrl_isAt(aCtrl, 0.18f))
FUNC_8030E624(SFX_3EB_UNKNOWN, 1.0f, 18000);
if(animctrl_isAt(aCtrl, 0.8421f)){
func_80292E80(0, 0.3f);
func_80292E80(1, 0.3f);
}
if(animctrl_isAt(aCtrl, 0.84f))
func_8029B6F0();
}
void func_802B63C8(void){
func_80292EA4();
func_80291548();
func_8024BD08(1);
}
void func_802B63F8(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
animctrl_reset(aCtrl);
func_8029C848(aCtrl);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_LOOP);
func_802875AC(aCtrl, "bstimeout.c", 0x7e);
func_8029C7F4(1,1,3,7);
func_80297970(0.0f);
func_802914CC(0xd);
yaw_setIdeal(func_8029B41C() + 35.0f);
func_802BF2C0(80.0f);
func_8025A58C(0,0xfa0);
func_8025A70C(COMUSIC_3C_MINIGAME_LOSS);
func_8024BD08(0);
func_8028D5DC();
func_8029E3C0(0, 2.9f);
}
void func_802B64D0(void){
if(func_8029E1A8(0))
func_8029B6F0();
}
void func_802B6500(void){
func_8029E070(0);
func_80291548();
func_8024BD08(1);
func_8025A904();
}

70
src/core2/bs/turn.c Normal file
View File

@@ -0,0 +1,70 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
/* .data */
f32 D_8037D590;
s32 D_8037D594;
/* .code */
void bsturn_init(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
f32 sp28[3];
animctrl_reset(aCtrl);
animctrl_setIndex(aCtrl, ANIM_BANJO_TURN);
animctrl_setDuration(aCtrl, 0.3f);
animctrl_setTransitionDuration(aCtrl,0.1f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
func_802875AC(aCtrl, "bsturn.c", 0x37);
func_80289F10(1);
func_802991A8(1);
func_8029957C(2);
func_802978DC(3);
_get_velocity(&sp28);
D_8037D590 = gu_sqrtf(sp28[0]*sp28[0] + sp28[2]*sp28[2]);
func_8030EBC8(SFX_19_BANJO_LANDING_08, 0.95f, 1.05f, 0x7530, 0x7d00);
D_8037D594 = 0;
}
void bsturn_update(void){
enum bs_e sp2C = 0;
func_80297970(ml_map_f(animctrl_getAnimTimer(_player_getAnimCtrlPtr()), 0.18f, 1.0f, D_8037D590, 0.0f));
D_8037D594++;
if(!(D_8037D594 < 6))
D_8037D594 = -1;
switch(D_8037D594){
case -1://L802B68DC
func_802927E0(func_80297A7C() - 10.0f, func_80297AB8()*0.88);
break;
case 0://L802B691C
func_802927E0(func_80297A7C(), func_80297AB8());
break;
case 1://L802B6940
func_802927E0(func_80297A7C() + 10.0f, func_80297AB8()*0.88);
break;
}//L802B6978
if(animctrl_isStopped(_player_getAnimCtrlPtr()))
sp2C = BS_WALK_FAST;
if(button_held(BUTTON_Z))
sp2C = BS_CROUCH;
if(button_pressed(BUTTON_B))
sp2C = BS_CLAW;
if(button_pressed(BUTTON_A))
sp2C = func_8029C780();
bs_setState(sp2C);
}
void bsturn_end(void){
yaw_set(mlNormalizeAngle(yaw_get() - 180.0f));
pitch_setIdeal(0.0f);
roll_setIdeal(0.0f);
}

84
src/core2/bs/twirl.c Normal file
View File

@@ -0,0 +1,84 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
/* .bss */
f32 D_8037D5A0;
u8 D_8037D5A4;
u8 _bstwirlHitboxActive;
/* .code */
int bstwirl_hitboxActive(void){
return _bstwirlHitboxActive;
}
void bstwirl_init(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
animctrl_reset(aCtrl);
animctrl_setSmoothTransition(aCtrl, 0);
animctrl_setIndex(aCtrl, ANIM_BANJO_ROLL);
animctrl_setDuration(aCtrl, 0.9f);
animctrl_setSubRange(aCtrl, 0.0f, 1.0f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
func_802875AC(aCtrl, "bstwirl.c", 0x46);
func_80289F10(1);
func_802991A8(1);
func_8029957C(3);
func_8029797C(yaw_getIdeal());
func_802979AC(yaw_getIdeal(), func_80297A64());
func_802978DC(3);
D_8037D5A0 = func_80297A64();
func_80297970(600.0f);
func_80299CF4(SFX_32_BANJO_EGHEE, 1.0f, 0x6590);
_bstwirlHitboxActive = TRUE;
func_8029E3C0(0, 0.01f);
D_8037D5A4 = 0;
}
void bstwirl_update(void){
enum bs_e sp1C = 0;
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
switch(D_8037D5A4){
case 0:
D_8037D5A4 = 1;
break;
case 1:
D_8037D5A4 = 2;
break;
case 2:
if(func_8029E1A8(0)){
func_8029AE74(0);
func_8029E3C0(0, 0.12f);
}
if(animctrl_isAt(aCtrl, 0.8011f)){
animctrl_setDuration(aCtrl, 2.5f);
func_80297970(0.0f);
_bstwirlHitboxActive = 0;
D_8037D5A4 = 3;
}
//??? missing break
case 3://L802B6C38
if(animctrl_isStopped(aCtrl))
sp1C = BS_1_IDLE;
break;
}//L802B6C4C
if(button_pressed(BUTTON_A))
sp1C = func_8029C780();
if(0.6 < animctrl_getAnimTimer(aCtrl) && !func_8028B2E8())
sp1C = BS_2F_FALL;
if(player_inWater())
sp1C = BS_4C_LANDING_IN_WATER;
sp1C = func_8029CA94(sp1C);
bs_setState(sp1C);
}
void bstwirl_end(void){
ability_use(0xC);
_bstwirlHitboxActive = FALSE;
}

505
src/core2/bs/walk.c Normal file
View File

@@ -0,0 +1,505 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
#include "animation.h"
void func_80289EA8(f32, f32);
f32 func_80297AB8(void);
void func_802927E0(f32, f32);
f32 func_8029B2E8(void);
int func_80297C04(f32);
void func_8029AD28(f32, s32);
f32 func_80297AF0(void);
void func_80289EF8(f32);
f32 func_8029B30C(void);
f32 func_80257C48(f32, f32, f32);
f32 func_80297A64(void);
void func_80299594(s32, f32);
// .data
f32 D_80364D70 = 30.0f;//creep_min
f32 D_80364D74 = 80.0f;//creep_max/slow_walk_min
f32 D_80364D78 = 150.0f;//slow_walk_max/walk_min
f32 D_80364D7C = 225.0f;//walk_max/walk_fast_min
f32 D_80364D80 = 500.0f;//walk_fast_max
f32 D_80364D84 = 30.0f; //mud_min
f32 D_80364D88 = 150.0f; //mud_max
f32 D_80364D8C = 125.0f;
f32 D_80364D90 = 1.3f; //walk_slow
f32 D_80364D94 = 0.6f;
f32 D_80364D98 = 1.8f; //creep
f32 D_80364D9C = 1.2f;
f32 D_80364DA0 = 0.92f; //walk
f32 D_80364DA4 = 0.58f;
f32 D_80364DA8 = 0.54f; //walk_fast
f32 D_80364DAC = 0.44f;
f32 D_80364DB0 = 1.2f; //mud
f32 D_80364DB4 = 0.9f;
// .bss (?)
f32 D_8037D5B0;
/*.code*/
void func_802B6D00(void){
f32 sp1C;
s32 sp18;
sp1C = func_8029B30C();
sp18 = func_8029B300();
if(func_8028B128()){
if(sp18 == 0){
func_80297970(0.0f);
}else{//L802B6D48
func_80297970(func_80257C48(func_8029B2E8(), D_80364D84, D_80364D88));
}
}
else{//L802B6D78
switch(sp18){
case 0://802B6D98
func_80297970(0.0f);
break;
case 1://802B6DAC
func_80297970(func_80257C48(sp1C, D_80364D70, D_80364D74));
break;
case 2://802B6DD0
func_80297970(func_80257C48(sp1C, D_80364D74, D_80364D78));
break;
case 3://802B6DF4
func_80297970(func_80257C48(sp1C, D_80364D78, D_80364D7C));
break;
case 4://802B6E18
func_80297970(func_80257C48(sp1C, D_80364D7C, D_80364D80));
break;
}
}//L802B6E34
}
void func_802B6E44(void){
if(func_8028B394()){
func_80289EF8(ml_map_f(func_80297AF0(), 0.0f, 1.0f, 0.5f, 0.9f));
}else{
func_80289EF8(1.0f);
}
}
void func_802B6EB0(f32 arg0){
D_8037D5B0 = arg0;
}
void func_802B6EBC(void){
D_8037D5B0 = max_f(0.0f, D_8037D5B0 - time_getDelta());
}
int func_802B6EF4(void){
return D_8037D5B0 == 0.0f;
}
s32 func_802B6F20(s32 arg0){
if(button_pressed(BUTTON_B)){
if( D_80364D7C < func_80297A64()){
if(can_roll())
arg0 = BS_ROLL;
}else{//L802B6F74
if(can_claw())
arg0 = BS_CLAW;
}
}
return arg0;
}
f32 func_802B6F9C(void){
return D_80364D80;
}
void func_802B6FA8(void){
func_802B6D00();
}
void bswalk_creep_init(void){
AnimCtrl * s0 = _player_getAnimCtrlPtr();
f32 sp20;
if(bs_getPrevState() == BS_2_WALK_SLOW){
sp20 = anim_getTimer(animctrl_getAnimPtr(s0));
}else{
sp20 = 0.0f;
}
animctrl_reset(s0);
animctrl_setIndex(s0, ANIM_BANJO_WALK_CREEP);
animctrl_setDuration(s0, 0.43f);
func_8028774C(s0, sp20);
animctrl_setPlaybackType(s0, ANIMCTRL_LOOP);
func_802875AC(s0, "bswalk.c", 0xe4);
func_8029C7F4(2,1,1,2);
func_80289EA8(0.3f, 1.5f);
func_80289EC8(D_80364D70, D_80364D74, D_80364D98, D_80364D9C);
}
void bswalk_creep_update(void){
s32 s0 = 0;
func_802B6E44();
if(func_8029B2E8() == 0.0f){
yaw_setIdeal(yaw_get());
}
func_8029AD28(0.47f, 4);
func_8029AD28(0.97f, 3);
func_802B6D00();
switch(func_8029B300()){
case 0://L802B7160
if(func_80297C04(1.0f))
s0 = BS_1_IDLE;
break;
case 2://L802B7180
s0 = BS_2_WALK_SLOW;
break;
case 3://L802B7188
s0 = BS_WALK;
break;
case 4:
s0 = BS_WALK_FAST;
break;
}//L802B7194
if(func_8028B128())
s0 = BS_WALK_MUD;
if(func_80294F78())
s0 = func_802926C0();
if(func_8028B094())
s0 = BS_2F_FALL;
if(button_held(BUTTON_Z))
s0 = BS_CROUCH;
s0 = func_802B6F20(s0);
if(button_pressed(BUTTON_A))
s0 = func_8029C780();
if(player_isSliding())
s0 = BS_SLIDE;
s0 = func_8029CA94(s0);
if(player_inWater())
s0 = BS_2D_SWIM_IDLE;
bs_setState(s0);
}
void bswalk_slow_init(void){
AnimCtrl * s0 = _player_getAnimCtrlPtr();
f32 sp20;
if(bs_getPrevState() == 3){
sp20 = anim_getTimer(animctrl_getAnimPtr(s0));
}else{
sp20 = 0.0f;
}
animctrl_reset(s0);
animctrl_setIndex(s0, ANIM_BANJO_WALK);
animctrl_setDuration(s0, 0.43f);
func_8028774C(s0, sp20);
animctrl_setPlaybackType(s0, ANIMCTRL_LOOP);
func_802875AC(s0, "bswalk.c", 0x168);
func_8029C7F4(2,1,1,2);
func_80289EA8(0.3f, 1.5f);
func_80289EC8(D_80364D74, D_80364D78, D_80364D90, D_80364D94);
}
void bswalk_slow_upate(void){
s32 s0 = 0;
func_802B6E44();
if(func_8029B2E8() == 0.0f){
yaw_setIdeal(yaw_get());
}
func_8029AD28(0.4f, 4);
func_8029AD28(0.9f, 3);
func_802B6D00();
switch(func_8029B300()){
case 0://L802B7160
if(func_80297C04(3.0f))
s0 = BS_1_IDLE;
break;
case 1://L802B7180
s0 = BS_WALK_CREEP;
break;
case 3://L802B7188
s0 = BS_WALK;
break;
case 4:
s0 = BS_WALK_FAST;
break;
}//L802B7194
if(func_8028B128())
s0 = BS_WALK_MUD;
if(func_80294F78())
s0 = func_802926C0();
if(func_8028B094())
s0 = BS_2F_FALL;
if(button_held(BUTTON_Z))
s0 = BS_CROUCH;
s0 = func_802B6F20(s0);
if(button_pressed(BUTTON_A))
s0 = func_8029C780();
if(player_isSliding())
s0 = BS_SLIDE;
s0 = func_8029CA94(s0);
if(player_inWater())
s0 = BS_2D_SWIM_IDLE;
bs_setState(s0);
}
void bswalk_init(void){
AnimCtrl * s0 = _player_getAnimCtrlPtr();
f32 sp20 = 0.0f;
switch(bs_getPrevState()){
default:
sp20 = 0.0f;
break;
case 2:
case 4:
sp20 = anim_getTimer(animctrl_getAnimPtr(s0));
break;
}
animctrl_reset(s0);
animctrl_setIndex(s0, ANIM_BANJO_RUN);
animctrl_setDuration(s0, 0.66f);
animctrl_setTransitionDuration(s0, 0.14f);
func_8028774C(s0, sp20);
animctrl_setPlaybackType(s0, ANIMCTRL_LOOP);
func_802875AC(s0, "bswalk.c", 0x1ed);
func_8029C7F4(2,1,1,2);
func_80289EA8(0.3f, 1.5f);
func_80289EC8(D_80364D78, D_80364D7C, D_80364DA0, D_80364DA4);
func_802B6EB0(0.3f);
}
void bswalk_update(void){
s32 s0 = 0;
func_802B6E44();
func_8029AD28(0.4f, 4);
func_8029AD28(0.9f, 3);
func_802B6EBC();
func_802B6D00();
switch(func_8029B300()){
case 0:
case 1:
case 2:
if(func_80297C04(D_80364D78) && func_802B6EF4())
s0 = BS_2_WALK_SLOW;
break;
case 4:
s0 = BS_WALK_FAST;
break;
}//L802B76B8
if(func_8028B128())
s0 = BS_WALK_MUD;
if(func_8028B4C4() && D_80364D8C < func_80297AB8()){
s0 = BS_SKID;
}
if(func_80294F78())
s0 = func_802926C0();
if(func_8028B094())
s0 = BS_2F_FALL;
if(button_held(BUTTON_Z))
s0 = BS_CROUCH;
s0 = func_802B6F20(s0);
if(button_pressed(BUTTON_A))
s0 = func_8029C780();
if(player_isSliding())
s0 = BS_SLIDE;
s0 = func_8029CA94(s0);
if(player_inWater())
s0 = BS_2D_SWIM_IDLE;
bs_setState(s0);
}
void bswalk_fast_init(void){
AnimCtrl * s0 = _player_getAnimCtrlPtr();
f32 sp28 = 0.0f;
int sp24 = 1;
switch(bs_getPrevState()){
case 1:
case 2://L802B780C
if(func_80297AB8() < 200.0f){
func_802927E0(0.0f, 0.0f);
}
break;
case 0xc: //L802B7844
sp24 = 0;
break;
case 3:
sp28 = anim_getTimer(animctrl_getAnimPtr(s0));
break;
}
animctrl_reset(s0);
animctrl_setSmoothTransition(s0, sp24);
animctrl_setIndex(s0, ANIM_BANJO_RUN);
animctrl_setDuration(s0, 0.66f);
animctrl_setTransitionDuration(s0, 0.1f);
func_8028774C(s0, sp28);
animctrl_setPlaybackType(s0, ANIMCTRL_LOOP);
func_802875AC(s0, "bswalk.c", 0x27d);
func_8029C7F4(2,1,1,2);
func_80289EA8(0.3f, 1.5f);
func_80289EC8(D_80364D7C, D_80364D80, D_80364DA8, D_80364DAC);
pitch_setAngVel(1000.0f, 12.0f);
roll_setAngularVelocity(1000.0f, 12.0f);
func_802B6EB0(0.3f);
}
void bswalk_fast_update(void){
s32 s0 = 0;
func_802B6E44();
func_80299594(0, 0.5f);
func_8029AD28(0.4f, 4);
func_8029AD28(0.9f, 3);
func_802B6EBC();
func_802B6D00();
switch(func_8029B300()){
case 0://L802B79EC
if(func_80297C04(18.0f))
s0 = BS_1_IDLE;
if(func_80294F78())
s0 = func_802926C0();
break;
case 1:
case 2://L802B7A28
if(func_80297C04(D_80364D78))
s0 = BS_2_WALK_SLOW;
if(func_80294F78())
s0 = func_802926C0();
break;
case 3://L802B7A60
if(func_80297C04(D_80364D7C) && func_802B6EF4())
s0 = BS_WALK;
if(func_80294F78())
s0 = func_802926C0();
break;
}//L802B7AA4
if(func_8028B128())
s0 = BS_WALK_MUD;
if(func_8028B4C4() && D_80364D8C < func_80297AB8()){
s0 = BS_SKID;
}
if(func_8028B094())
s0 = BS_2F_FALL;
if(button_held(BUTTON_Z))
s0 = BS_CROUCH;
s0 = func_802B6F20(s0);
if(button_pressed(BUTTON_A))
s0 = func_8029C780();
if(player_isSliding())
s0 = BS_SLIDE;
s0 = func_8029CA94(s0);
if(player_inWater())
s0 = BS_2D_SWIM_IDLE;
bs_setState(s0);
}
void bswalk_fast_end(void){
pitch_setIdeal(0.0f);
roll_setIdeal(0.0f);
}
void bswalk_mud_init(void){
func_8028A010(ANIM_BANJO_WALK_MUD, 0.43f);
func_8029C7F4(2,1,1,2);
func_80289EA8(0.3f, 1.5f);
func_80289EC8(D_80364D84, D_80364D88, D_80364DB0, D_80364DB4);
}
void bswalk_mud_update(void){
s32 s0 = 0;
func_802B6E44();
func_8029AD28(0.4f, 4);
func_8029AD28(0.9f, 3);
func_802B6D00();
if(!func_8028B128())
s0 = BS_2_WALK_SLOW;
if(!func_8029B300())
s0 = BS_1_IDLE;
if(func_80294F78())
s0 = func_802926C0();
if(func_8028B094())
s0 = BS_2F_FALL;
if(button_held(BUTTON_Z))
s0 = BS_CROUCH;
s0 = func_802B6F20(s0);
if(button_pressed(BUTTON_A))
s0 = func_8029C780();
if(player_isSliding())
s0 = BS_SLIDE;
s0 = func_8029CA94(s0);
if(player_inWater())
s0 = BS_2D_SWIM_IDLE;
bs_setState(s0);
}
void bswalk_drone_init(void){
bsdrone_init();
if(func_80289F94(3)){
func_80289F10(2);
func_80289EA8(0.3f, 1.5f);
func_80289EC8(D_80364D74, D_80364D78, D_80364D90, D_80364D94);
}
}
void bswalk_drone_update(void){
bsdrone_update();
}
void bswalk_drone_end(void){
bsdrone_end();
}

777
src/core2/bs/walrus.c Normal file
View File

@@ -0,0 +1,777 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern void func_8029AD68(f32, s32);
extern f32 ml_vec3f_dot_product(f32[3], f32[3]);
int func_802B81F0(enum bs_e state);
/* .data */
f32 D_80364DC0 = 30.0f;
f32 D_80364DC4 = 400.0f;
f32 D_80364DC8 = 0.6f;
f32 D_80364DCC = 0.4f;
f32 D_80364DD0 = 693.5f;
f32 D_80364DD4 = -1200.0f;
f32 D_80364DD8 = 30.0f;
f32 D_80364DDC = 700.0f;
f32 D_80364DE0 = 0.6f;
f32 D_80364DE4 = 0.44f;
f32 D_80364DE8 = 700.0f;
f32 D_80364DEC = -1200.0f;
u8 D_80364DF0 = 0;
s16 D_80364DF4[] = {SFX_54_BANJO_HOO_1, SFX_55_BANJO_HOO_2, SFX_56_BANJO_HUI}; //sfx_e
/* .bss */
f32 D_8037D5C0;
f32 D_8037D5C4;
u8 D_8037D5C8;
/* .code */
void func_802B7E00(void) {
u8 temp_t9;
func_8030EB00(D_80364DF4[D_80364DF0], 1.35f, 1.45f);
D_80364DF0++;
if (D_80364DF0 >= 3) {
D_80364DF0 = 0;
}
}
void func_802B7E6C(void) {
f32 sp1C;
sp1C = func_8029B30C();
if (func_8029B300() == 0) {
func_80297970(0.0f);
return;
}
func_80297970(func_80257C48(sp1C, D_80364DC0, D_80364DC4));
}
void func_802B7ECC(void) {
D_8037D5C0 = 0.0f;
if (func_80295530(8) < 3) {
D_8037D5C0 = 1.0f;
}
D_8037D5C0 = mlClamp_f(D_8037D5C0, 0.0f, 1.0f);
}
void func_802B7F28(void) {
f32 pad44;
f32 sp40;
f32 sp3C;
f32 sp38;
f32 sp2C[3];
f32 sp20[3];
sp38 = D_80364DD8;
sp3C = D_80364DDC;
sp40 = func_8029B30C();
func_802B7ECC();
_get_velocity(sp20);
sp20[1] = 0.0f;
if (900.0 < sp20[0] * sp20[0] + sp20[1] * sp20[1] + sp20[2] * sp20[2]) {
ml_vec3f_normalize(sp20);
func_80294480(sp2C);
if ( ml_vec3f_dot_product(sp20, sp2C) < -0.2) {
sp3C += D_8037D5C0 * 350.0;
}
}
if (func_8029B300() == 0) {
func_80297970(0.0f);
return;
}
func_80297970(func_80257C48(sp40, sp38, sp3C));
}
void func_802B8048(void){
if(!func_802B81F0(bs_getNextState())){
pitch_setIdeal(0.0f);
roll_setIdeal(0.0f);
func_8029B0C0();
func_8029E070(0);
func_8029E064(0);
miscflag_clear(3);
miscflag_clear(4);
func_80293D74();
func_8029CF48(4, 0, 0.0f);
}
}
void func_802B80D0(void) {
if (func_802B8190(bs_getNextState()) == 0) {
func_802B8048();
func_8029E0E8(0);
}
}
void func_802B8110(void){
func_8029CF48(4, 1, 0.15f);
}
void func_802B813C(void) {
if (func_802B8190(bs_getPrevState()) == 0) {
D_8037D5C0 = 0.0f;
func_8029E0E8(1);
func_8029CF48(4, 1, 0.15f);
}
}
int func_802B8190(enum bs_e state){
return state == 0x81
|| state == BS_7D_WALRUS_SLED
|| state == BS_7E_WALRUS_SLED
|| state == 0x82
|| state == 0x80
|| state == BS_7D_WALRUS_SLED_DRONE;
}
int func_802B81F0(enum bs_e state){
return state == BS_67_WALRUS_IDLE
|| state == BS_WALRUS_WALK
|| state == BS_WALRUS_JUMP
|| state == BS_6A_WALRUS_FALL
|| state == BS_WALRUS_OW
|| state == BS_WALRUS_DIE
|| state == BS_WALRUS_DRONE
|| func_802B8190(state);
}
void bswalrus_idle_init(void){
func_8028A010(0x11f, 4.0f);
func_8029C7F4(1,1,1,2);
func_80297970(0.0f);
pitch_setAngVel(1000.0f, 12.0f);
roll_setAngularVelocity(1000.0f, 12.0f);
func_80293D48(50.0f, 25.0f);
miscflag_set(3);
miscflag_set(4);
func_802900B4();
func_802B8110();
}
void bswalrus_idle_update(void){
enum bs_e next_state = 0;
func_80299628(0);
if(func_8028B094())
next_state = BS_6A_WALRUS_FALL;
if(func_80294F78())
next_state = func_802926C0();
if(func_8029B300() > 0)
next_state = BS_WALRUS_WALK;
if(button_pressed(BUTTON_A))
next_state = BS_WALRUS_JUMP;
bs_setState(next_state);
}
void bswalrus_idle_end(void){
func_802B8048();
func_802900FC();
}
void bswalrus_walk_init(void){
func_8028A010(0x120, 0.8f);
func_8029C7F4(2,1,1,2);
func_80289EC8(D_80364DC0, D_80364DC4, D_80364DC8, D_80364DCC);
func_802900B4();
func_802B8110();
}
void bswalrus_walk_update(void){
enum bs_e next_state = 0;
func_80299628(0);
func_802B7E6C();
func_8029AD68(0.3f, 4);
if(func_8029B300() == 0 && func_80297C04(1.0f))
next_state = BS_67_WALRUS_IDLE;
if(func_8028B094())
next_state = BS_6A_WALRUS_FALL;
if(button_pressed(BUTTON_A))
next_state = BS_WALRUS_JUMP;
bs_setState(next_state);
}
void bswalrus_walk_end(void){
func_802B8048();
func_802900FC();
}
void bswalrus_jump_init(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
animctrl_reset(aCtrl);
animctrl_setSmoothTransition(aCtrl, FALSE);
animctrl_setIndex(aCtrl, 0x121);
animctrl_setSubRange(aCtrl, 0.0f, 0.514f);
animctrl_setDuration(aCtrl, 1.0f);
func_8028774C(aCtrl, 0.1);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
func_802875AC(aCtrl, "bswalrus.c", 0x1f8);
func_8029C7F4(1,1,3,6);
if(func_8029B2E8() != 0.0f)
yaw_setIdeal(func_8029B33C());
func_8029797C(yaw_getIdeal());
func_802B7E6C();
func_802979AC(yaw_getIdeal(), func_80297A64());
player_setYVelocity(D_80364DD0);
gravity_set(D_80364DD4);
func_802B7E00();
func_802B8110();
D_8037D5C8 = 0;
}
void bswalrus_jump_update(void){
enum bs_e next_state = 0;
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
f32 sp1C[3];
func_802B7E6C();
_get_velocity(sp1C);
if(button_released(BUTTON_A) && 0.0f < sp1C[1])
gravity_reset();
switch(D_8037D5C8){
case 0://L802B86D8
if(func_8028B254(0x82)){
animctrl_setDuration(aCtrl, 0.7f);
animctrl_setSubRange(aCtrl, 0.0f, 0.8501f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
D_8037D5C8 = 2;
}
else if(animctrl_isStopped(aCtrl)){
animctrl_setSubRange(aCtrl, 0.0f, 0.6734f);
animctrl_setDuration(aCtrl, 3.0f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
D_8037D5C8 = 1;
}
break;
case 1://L802B876C
if(func_8028B254(0x82)){
animctrl_setSubRange(aCtrl, 0.0f, 0.8501f);
animctrl_setDuration(aCtrl, 1.0f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
D_8037D5C8 = 2;
}
break;
case 2://L802B87B4
func_80299628(0);
if(func_8028B2E8()){
func_8029AE48();
animctrl_setSubRange(aCtrl, 0.0f, 1.0f);
animctrl_setDuration(aCtrl, 1.0f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
D_8037D5C8 = 3;
}
break;
case 3://L802B880C
func_80299628(0);
if(animctrl_isStopped(aCtrl)){
func_80297970(0.0f);
next_state = BS_67_WALRUS_IDLE;
}
break;
}//L802B8838
if(func_8028B2E8()){
if(func_8029B300() > 0)
next_state = BS_WALRUS_WALK;
if(button_pressed(BUTTON_A))
next_state = BS_WALRUS_JUMP;
}
bs_setState(next_state);
}
void bswalrus_jump_end(void){
gravity_reset();
func_802B8048();
}
void bswalrus_fall_init(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
animctrl_reset(aCtrl);
animctrl_setIndex(aCtrl, 0x121);
func_8028774C(aCtrl, 0.662f);
animctrl_setDuration(aCtrl, 0.7f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_STOPPED);
func_802875AC(aCtrl, "bswalrus.c", 0x284);
func_8029C7F4(1,1,3,6);
func_802B8110();
D_8037D5C8 = 0;
}
void bswalrus_fall_update(void){
enum bs_e next_state = 0;
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
f32 sp1C[3];
func_80299628(0);
func_802B7E6C();
_get_velocity(sp1C);
switch (D_8037D5C8)
{
case 0://L802B89A4
if(func_8028B254(0x82)){
animctrl_setSubRange(aCtrl, 0.0f, 0.8501f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
D_8037D5C8 = 1;
}
break;
case 1://L802B89E0
if(func_8028B2E8()){
func_8029AE48();
func_80297970(0.0f);
animctrl_setSubRange(aCtrl, 0.0f, 1.0f);
animctrl_setDuration(aCtrl, 1.0f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
D_8037D5C8 = 2;
}
break;
case 2://L802B8A38
break;
}//L802B8A38
if(func_8028B2E8()){
if( func_8029B300() > 0
|| (D_8037D5C8 == 2 && animctrl_isStopped(aCtrl))
){
if(miscflag_isTrue(0x19))
next_state = func_80292738();
else
next_state = BS_67_WALRUS_IDLE;
}
}
bs_setState(next_state);
}
void bswalrus_fall_end(void){
func_802B8048();
}
static void __bswalrus_recoil_init(s32 damage){
f32 sp3C;
f32 sp30[3];
f32 sp24[3];
func_80298760(func_80296560());
func_8028A274(0x19c, 1.0f);
if(damage == 1)
func_8030E58C(SFX_38_BANJO_AYE_1, 1.8f);
else
func_8030E58C(SFX_56_BANJO_HUI, 1.8f);
_player_getPosition(sp30);
func_80294980(sp24);
func_80257F18(sp24, sp30, &sp3C);
yaw_setIdeal(mlNormalizeAngle(sp3C + 180.0f));
yaw_applyIdeal();
func_80297970(func_802987D4());
func_8029797C(sp3C);
func_802979AC(sp3C, func_80297A64());
func_8029C7F4(1,1,2,3);
player_setYVelocity(func_802987C4());
gravity_set(func_802987E4());
func_8028D5DC();
func_80292E48();
func_802B8110();
}
static void __bswalrus_recoil_update(void){
enum bs_e next_state = 0;
if(baanim_isAt(0.5f))
func_80292EA4();
if(func_8028B2E8())
next_state = BS_67_WALRUS_IDLE;
bs_setState(next_state);
}
static void __bswalrus_recoil_end(void){
gravity_reset();
func_8028D5F4();
func_80292EA4();
func_802B8048();
}
void bswalrus_ow_init(void){
__bswalrus_recoil_init(1);
}
void bswalrus_ow_update(void){
__bswalrus_recoil_update();
}
void bswalrus_ow_end(void){
__bswalrus_recoil_end();
}
void bswalrus_bounce_init(void){
__bswalrus_recoil_init(2);
}
void bswalrus_bounce_update(void){
__bswalrus_recoil_update();
}
void bswalrus_bounce_end(void){
__bswalrus_recoil_end();
}
void bswalrus_die_init(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
f32 sp38;
f32 sp2C[3];
f32 sp20[3];
func_8029B930();
animctrl_reset(aCtrl);
animctrl_setSmoothTransition(aCtrl, FALSE);
animctrl_setIndex(aCtrl, 0x19d);
animctrl_setSubRange(aCtrl, 0.0f, 0.4454f);
animctrl_setDuration(aCtrl, 2.2f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
func_802875AC(aCtrl, "bswalrus.c", 0x366);
func_8030E58C(SFX_36_BANJO_DOH, 1.8f);
_player_getPosition(sp2C);
func_80294980(sp20);
func_80257F18(sp20, sp2C, &sp38);
D_8037D5C4 = 250.0f;
yaw_setIdeal(mlNormalizeAngle(sp38 + 180.0f));
yaw_applyIdeal();
func_80297970(D_8037D5C4);
func_8029797C(sp38);
func_802979AC(sp38, func_80297A64());
func_8029C7F4(1,1,2,3);
player_setYVelocity(420.0f); //B)
gravity_set(-1200.0f);
pitch_setAngVel(1000.0f, 12.0f);
func_802914CC(0xd);
func_802BF2C0(30.0f);
func_8025AB00();
func_8025A2FC(0, 0xfa0);
func_8025A70C(0x1A);
func_8028D5DC();
func_80292E48();
func_8029E3C0(0, 1.5f);
func_802B8110();
D_8037D5C8 = 0;
}
void bswalrus_die_update(void){
enum bs_e next_state = 0;
func_80297970(D_8037D5C4);
func_80299628(0);
switch(D_8037D5C8){
case 0://L802B8F54
if(func_8028B2E8()){
func_8028A37C(1.0f);
FUNC_8030E624(SFX_1F_HITTING_AN_ENEMY_3, 0.8f, 18000);
FUNC_8030E624(SFX_39_BANJO_AYE_2, 1.8f, 18000);
player_setYVelocity(400.0f);
D_8037D5C8 = 2;
}
break;
case 2://L802B8FA8
D_8037D5C8 = 3;
break;
case 3://L802B8FB0
if(0.0f < D_8037D5C4){
D_8037D5C4 = max_f(0.0f, D_8037D5C4 - 10.0f);
}
break;
}//L802B8FE0
if(func_8029E1A8(0))
func_8029B890();
bs_setState(next_state);
}
void bswalrus_die_end(void){
func_8024BD08(0);
gravity_reset();
pitch_setIdeal(0.0f);
roll_setIdeal(0.0f);
func_80291548();
func_80292EA4();
}
void bswalrus_drone_init(void){
func_802B8110();
bsdrone_init();
}
void bswalrus_drone_update(void){
bsdrone_update();
}
void bswalrus_drone_end(void){
bsdrone_end();
func_802B8048();
}
void func_802B90D0(void){
func_8028A010(0x19e, 0.8f);
func_8029C7F4(1,1,3,2);
func_80297970(0.0f);
func_8029C674();
func_802B813C();
func_802B3A50();
}
void func_802B9130(void){
enum bs_e next_state = 0;
func_802B3A50();
func_80299628(0);
func_8029C6D0();
if(!func_80298850())
next_state = BS_7D_WALRUS_SLED;
bs_setState(next_state);
}
void func_802B917C(void){
func_8029C748();
func_802B80D0();
}
void bswalrus_sled_init(void){
func_8028A010(0x19e, 0.8f);
func_8029C7F4(2,1,1,2);
func_80289EC8(D_80364DC0, D_80364DC4, D_80364DE0, D_80364DE4);
func_802900B4();
func_802B813C();
}
void bswalrus_sled_update(void){
enum bs_e next_state = 0;
f32 sp20[3];
if(50.0f < func_80297AB8()){
if(func_8023DB4C(1)){
func_80292554(&sp20);
}else{
func_80292578(&sp20);
}
particleEmitter_emitN(func_802F1EC8(sp20), 1);
}//L802B927C
func_80299628(0);
func_802B7F28();
if(func_80294F78())
next_state = func_802926C0();
if(button_pressed(BUTTON_A))
next_state = BS_7E_WALRUS_SLED;
next_state = func_8029CA94(next_state);
bs_setState(next_state);
}
void bswalrus_sled_end(void){
func_802B80D0();
func_802900FC();
}
void bswalrus_sled_jump_init(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
animctrl_reset(aCtrl);
animctrl_setSmoothTransition(aCtrl, FALSE);
animctrl_setIndex(aCtrl, 0x19f);
animctrl_setSubRange(aCtrl, 0.0f, 0.4285f);
animctrl_setDuration(aCtrl, 1.0f);
func_8028774C(aCtrl, 0.14f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_ONCE);
func_802875AC(aCtrl, "bswalrus.c", 0x477);
func_8029C7F4(1,1,3,6);
if(func_8029B2E8() != 0.0f)
yaw_setIdeal(func_8029B33C());
func_8029797C(yaw_getIdeal());
func_802B7F28();
func_802979AC(yaw_getIdeal(), func_80297A64());
player_setYVelocity(D_80364DD0);
gravity_set(D_80364DD4);
func_802B7E00();
func_802B813C();
D_8037D5C8 = 0;
}
void bswalrus_sled_jump_update(void){
enum bs_e next_state = 0;
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
f32 sp1C[3];
func_802B7F28();
_get_velocity(sp1C);
if(button_released(BUTTON_A) && 0.0f < sp1C[1])
gravity_reset();
switch (D_8037D5C8)
{
case 0:
if(animctrl_isStopped(aCtrl)){
func_8028A3B8(0.5058f, 7.0f);
D_8037D5C8 = 1;
}
break;
case 1://L802B94F0
if(func_8028B254(0x82)){
func_8028A3B8(1.0f, 1.0f);
D_8037D5C8 = 2;
}
break;
case 2://L802B951C
if(animctrl_isStopped(aCtrl)){
next_state = BS_7D_WALRUS_SLED;
}
break;
}//L802B9530
if(func_8028B2E8()){
if(button_pressed(BUTTON_A))
next_state = BS_7E_WALRUS_SLED;
next_state = func_8029CA94(next_state);
}
bs_setState(next_state);
}
void bswalrus_sled_jump_end(void){
gravity_reset();
func_802B80D0();
}
void func_802B95A0(void){
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
animctrl_reset(aCtrl);
animctrl_setIndex(aCtrl, 0x19f);
animctrl_setSubRange(aCtrl, 0.0f, 0.5058f);
animctrl_setDuration(aCtrl, 1.0f);
animctrl_setPlaybackType(aCtrl, ANIMCTRL_STOPPED);
func_802875AC(aCtrl, "bswalrus.c", 0x4e2);
func_8029C7F4(1,1,3,6);
func_802B813C();
D_8037D5C8 = 0;
}
void func_802B963C(void){
enum bs_e next_state = 0;
AnimCtrl *aCtrl = _player_getAnimCtrlPtr();
f32 sp1C[3];
func_80299628(0);
func_802B7E6C();
_get_velocity(sp1C);
switch (D_8037D5C8)
{
case 0://L802B9694
if(func_8028B254(0x82)){
func_8028A3B8(1.0f, 1.0f);
D_8037D5C8 = 1;
}
break;
case 1://L802B96C0
if(func_8028B2E8()){
func_8029AE48();
func_80297970(0.0f);
D_8037D5C8 = 2;
}
break;
case 2:
break;
}//L802B96F0
if(func_8028B2E8()){
if( func_8029B300() > 0
|| (D_8037D5C8 == 2 && animctrl_isStopped(aCtrl))
){
next_state = BS_7D_WALRUS_SLED;
}
if(button_pressed(BUTTON_A))
next_state = BS_7E_WALRUS_SLED;
next_state = func_8029CA94(next_state);
}//L802B9754
bs_setState(next_state);
}
void func_802B976C(void){
func_802B8048();
}
void func_802B978C(void) {
func_8028A180(0x1A9, 3.2f);
func_8029C7F4(1, 1, 3, 7);
func_80297970(0.0f);
func_802914CC(0xD);
func_802BF2C0(60.0f);
func_8025A58C(0, 0xFA0);
func_8025A70C(COMUSIC_3C_MINIGAME_LOSS);
func_8024BD08(0);
func_8028D5DC();
func_8029E3C0(0, 2.9f);
func_802B813C();
func_80292E48();
}
void func_802B9830(void) {
yaw_setIdeal(func_8029B41C() + 35.0f);
func_80299628(0);
if (func_8029E1A8(0) != 0) {
func_8029B6F0();
}
}
void func_802B9880(void) {
func_80291548();
func_8024BD08(1);
func_8025A904();
func_80292EA4();
func_802B80D0();
}
void func_802B98C0(void) {
if (bs_getInterruptType() == 0x2B) {
func_8029A86C(2);
bs_setState(BS_67_WALRUS_IDLE);
return;
}
func_80296608();
}
void bswalrus_sled_drone_init(void){
func_802B813C();
bsdrone_init();
}
void bswalrus_sled_drone_update(void){
bsdrone_update();
}
void bswalrus_sled_drone_end(void){
bsdrone_end();
func_802B80D0();
}

103
src/core2/bs/washy.c Normal file
View File

@@ -0,0 +1,103 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
/* .bss */
u8 D_8037D5D0;
/* .code */
void func_802B9980(s32 arg0){
AnimCtrl *plyr_anim = _player_getAnimCtrlPtr();
switch (arg0)
{
case 1: //L802B99B8
func_802BB3DC(0, 30.0f, 0.6f);
func_8030E58C(SFX_82_METAL_BREAK, 0.8f);
player_setYVelocity(400.0f);
break;
case 2: //L802B99F4
func_802BB3DC(0, 10.0f, 0.6f);
player_setYVelocity(300.0f);
break;
case 3: //L802B9A20
func_8029E3C0(0, 0.01f);
break;
case 4: //L802B9A38
FUNC_8030E624(SFX_3EB_UNKNOWN, 0.7f, 25000);
func_8029E3C0(0, 0.25f);
break;
case 5: //L802B9A58
func_8030E58C(SFX_D0_GRIMLET_SQUEAK, 0.9f);
animctrl_setDuration(plyr_anim, 2.2f);
break;
case 6: //L802B9A84
func_8029E3C0(0, 0.01f);
case 0: //L802B9A94
break;
}
D_8037D5D0 = arg0;
}
void func_802B9AAC(void){
func_802900FC();
}
void func_802B9ACC(void){
func_8028A180(ASSET_281_ANIM_WISHYWASHY_DOOOH, 40.0f);
func_8029C7F4(1, 1, 3, 2);
func_802900B4();
func_802B9980(0);
}
void func_802B9B14(void){
s32 next_state = 0;
s32 sp18;
switch(D_8037D5D0){
case 0: // L802B9B48
if(func_8028B2E8())
func_802B9980(1);
break;
case 1: // L802B9B68
if(func_8028B2E8())
func_802B9980(2);
break;
case 2: // L802B9B88
if(func_8028B2E8())
func_802B9980(3);
break;
case 3: // L802B9BA8
if(func_8029E1A8(0))
func_802B9980(4);
break;
case 4: // L802B9BC8
if(func_8029E1A8(0))
func_802B9980(5);
break;
case 5: // L802B9BE8
if(baanim_isStopped()){
if(func_8028ADF0())
next_state = BS_1_IDLE;
else
func_802B9980(6);
}
break;
case 6: // L802B9C20
if(func_8029E1A8(0)){
sp18 = func_802F9AA8(SFX_12B_BOILING_AND_BUBBLING);
func_802F9DB8(sp18, 1.0f, 1.2f, 0.0f);
func_802F9F80(sp18, 0.05f, 0.05 + randf()*0.4, 0.1f);
func_802FA060(sp18, 28000, 32000, 0.0f);
func_8029E3C0(0, 0.8 + randf()*0.7);
}
break;
}
bs_setState(next_state);
}
void func_802B9D00(void){
if(bs_getInterruptType() == 0xA)
func_80296608();
}

53
src/core2/bsList.c Normal file
View File

@@ -0,0 +1,53 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
#include "bsint.h"
//TODO replace with bsList Count
bsState D_8037C700[166];
/* .code */
void bsList_clearAll(void){
s32 i = 0;
do{
bsList_setInitMethod(i, NULL);
bsList_setUpdateMethod(i, NULL);
bsList_setEndMethod(i, NULL);
bsList_setInterruptMethod(i, NULL);
i++;
}while(i != 0xa6);
}
void bsList_setInitMethod(enum bs_e i, bsStateMethod func){
D_8037C700[i].init_func = func;
}
void bsList_setUpdateMethod(s32 i, bsStateMethod func){
D_8037C700[i].update_func = func;
}
void bsList_setEndMethod(s32 i, bsStateMethod func){
D_8037C700[i].end_func = func;
}
void bsList_setInterruptMethod(s32 i, bsStateMethod func){
D_8037C700[i].interrupt_func = func;
}
bsStateMethod bsList_getInitMethod(s32 i){
return D_8037C700[i].init_func;
}
bsStateMethod bsList_getUpdateMethod(s32 i){
return D_8037C700[i].update_func;
}
bsStateMethod bsList_getEndMethod(s32 i){
return D_8037C700[i].end_func;
}
bsStateMethod bsList_getInterruptMethod(s32 i){
return D_8037C700[i].interrupt_func;
}

162
src/core2/ch/badShad.c Normal file
View File

@@ -0,0 +1,162 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern void func_802C3D3C(void (*)(s32, s32), s32, s32);
Actor *func_802D6F48(ActorMarker *this, Gfx **gdl, Mtx **mptr, Vtx **arg3);
void func_802D6EA0(Actor *this);
void func_802D729C(Actor *actor, f32 arg1);
/* .data */
ActorInfo D_80367A50 = {
0x9B, 0x108, 0x3BF,
0x1, NULL,
func_802D6EA0, func_80326224, func_802D6F48,
0, 0, 0.0f, 0
};
/* .bss */
f32 D_8037DE10[3];
f32 D_8037DE20[3];
/* .code */
void func_802D6EA0(Actor *this){
s32 iVar1;
if(!this->initialized){
this->initialized = 1;
this->marker->collidable = 0;
}
if(!this->despawn_flag && this->unk1C_x < (f32)(func_8023DB5C() - 1) ){
if(this->unk104){
marker_getActor(this->unk104)->unk104 = 0;
}
marker_despawn(this->marker);
}
}
Actor *func_802D6F48(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx){
f32 sp44[3];
f32 sp40;
Actor *this = func_80325300(marker, sp44);
Actor *other;
if(this->despawn_flag)
return this;
if(this->unk104){
other = marker_getActor(this->unk104);
}
if(other)
func_8033A410(other->alpha_124_19);
sp40 = ml_map_f(this->unk28, 0.0f , 800.0f, 0.53f, 0.18f)*this->unk1C[1];
set_model_render_mode(2);
func_803391A4(gfx, mtx, this->position, sp44, sp40, NULL, func_80330B1C(marker));
return this;
}
f32 func_802D7038(Actor *this) {
f32 sp34;
f32 sp28[3];
sp34 = 0.0f;
if( (this->spawn_position_x == this->position_x)
&& (this->spawn_position_z == this->position_z)
){
D_8037DE10[0] = this->spawn_position[0];
D_8037DE10[1] = this->spawn_position[1];
D_8037DE10[2] = this->spawn_position[2];
} else {
this->spawn_position[0] = this->position[0];
this->spawn_position[2] = this->position[2];
sp28[0] = this->position[0];
sp28[1] = this->position[1];
sp28[2] = this->position[2];
if (func_803209F8(D_8037DE10, D_8037DE20, &sp34, sp28)) {
this->spawn_position[1] = D_8037DE10[1];
} else {
D_8037DE10[0] = sp28[0];
D_8037DE10[1] = sp28[1];
D_8037DE10[2] = sp28[2];
this->spawn_position[1] = sp28[1];
}
}
return sp34;
}
void func_802D7124(Actor *actor, f32 arg1) {
f32 sp1C[3];
func_8024C5CC(&sp1C);
if ((actor->position[0] - sp1C[0]) * (actor->position[0] - sp1C[0]) + (actor->position[2] - sp1C[2]) * (actor->position[2] - sp1C[2]) < 12250000.0f) {
func_802D729C(actor, arg1);
}
}
void func_802D71A0(s32 this, s32 arg1){
ActorMarker *marker;
f32 sp40;
Actor *sp3C;
Actor *sp38;
s32 sp2C[3];
f32 sp28;
marker = reinterpret_cast(ActorMarker *,this);
sp38 = marker_getActor(marker);
if(!sp38->despawn_flag){
sp40 = reinterpret_cast(f32,arg1);
sp38 = marker_getActor(marker);
sp28 = func_802D7038(sp38);
sp2C[0] = (s32) D_8037DE10[0];
sp2C[1] = (s32) D_8037DE10[1];
sp2C[2] = (s32) D_8037DE10[2];
sp3C = func_803056FC(0x108, sp2C, (s32)sp38->yaw);
if(sp3C){
marker_getActor(marker)->unk104 = sp3C->marker;
sp3C->unk104 = marker;
sp3C->unk1C[0] = func_8023DB5C();
sp3C->unk1C[1] = sp40;
sp3C->unk28 = sp28;
}
}
}
void func_802D729C(Actor *actor, f32 arg1){
Actor *sp1C;
if(actor->despawn_flag){
if(actor->unk104){
sp1C = marker_getActor(actor->unk104);
sp1C->unk104 = NULL;
marker_getActor(actor->unk104)->despawn_flag = TRUE;
}
else{
}
actor->unk104 = NULL;
return;
}
if(!actor->unk104){
func_802C3D3C(func_802D71A0, (s32) actor->marker, reinterpret_cast(s32, arg1));
return;
}
sp1C = marker_getActor(actor->unk104);
if(sp1C->despawn_flag == TRUE)
return;
if(!((func_8023DB5C() ^ actor->marker->actrArrayIdx) & 0x7)){
sp1C->unk28 = func_802D7038(actor);
sp1C->position_x = D_8037DE10[0];
sp1C->position_y = D_8037DE10[1] + 6.0f;
sp1C->position_z = D_8037DE10[2];
sp1C->yaw = D_8037DE20[1];
sp1C->pitch = D_8037DE20[0];
sp1C->roll = D_8037DE20[2];
}
else{
sp1C->position_x = actor->position_x;
sp1C->position_z = actor->position_z;
}
sp1C->unk1C[0] = func_8023DB5C();
sp1C->unk1C[1] = arg1;
}

89
src/core2/ch/beehive.c Normal file
View File

@@ -0,0 +1,89 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
void func_802CE8D4(Actor *this);
/* .data */
ActorAnimationInfo D_803672C0[] ={
{0x000, 0.0f},
{ASSET_165_ANIM_BEEHIVE_IDLE, 0.65f},
{ASSET_65_ANIM_BEEHIVE_DIE, 0.5f},
{ASSET_65_ANIM_BEEHIVE_DIE, 1000000.0f},
};
ActorInfo D_803672E0 = {0x50, ACTOR_12_BEEHIVE, ASSET_364_MODEL_BEEHIVE,
1, &D_803672C0,
func_802CE8D4, func_80326224, func_80325888,
0, 0x333, 0.0f, 0
};
/* .code */
void func_802CE7E0(ActorMarker *marker, s32 arg1){
Actor *actor = marker_getActor(marker);
FUNC_8030E8B4(SFX_11_WOOD_BREAKING_1, 1.0f, 28000, actor->position, 300, 3000);
FUNC_8030E8B4(SFX_D_EGGSHELL_BREAKING, 1.0f, 28000, actor->position, 300, 3000);
func_80328A84(actor, 2);
actor_playAnimationOnce(actor);
marker->collidable = FALSE;
actor->unk138_27 = 3;
func_802C3F04(func_802C4140, ACTOR_4C_STEAM, reinterpret_cast(s32, actor->position[0]), reinterpret_cast(s32, actor->position[1]), reinterpret_cast(s32, actor->position[2]));
func_802C3F04(func_802C4140, ACTOR_4A_WOOD_EXPLOSION, reinterpret_cast(s32, actor->position[0]), reinterpret_cast(s32, actor->position[1]), reinterpret_cast(s32, actor->position[2]));
actor->marker->propPtr->unk8_3 = 0;
func_803115C4(ASSET_D96_TEXT_BEEHIVE);
func_803115C4(ASSET_DA6_TEXT_BEEHIVE_WITH_BEES);
}
void func_802CE8D4(Actor *this){
if(!this->unk16C_4){
marker_setCollisionScripts(this->marker, NULL, NULL, func_802CE7E0);
this->marker->propPtr->unk8_3 = 1;
this->unk44_31 = func_8030D90C();
this->unk16C_4 = 1;
this->unk38_0 = func_803203FC(1)| func_803203FC(0x1F);
}//L802CE960
if(map_get() == MAP_27_FP_FREEZEEZY_PEAK){
if(func_8038BFA0()){
this->unk58_0 = 0;
return;
}
this->unk58_0 = 1;
}//L802CE9A4
switch(this->state)
{
case 1://L802CE9C4
if( !func_8031FF1C(BKPROG_D_BEEHIVE_TEXT)
&& func_803296B8(this, 250, 300)
){
if(func_8028ECAC() == 0 || func_8028ECAC() == BSGROUP_8_TROT){
if( player_getTransformation() == TRANSFORM_1_BANJO
&& func_80311480(ASSET_D96_TEXT_BEEHIVE, 0, NULL, NULL, NULL, 0)
){
func_80320004(BKPROG_D_BEEHIVE_TEXT, 1);
}
}
}//L802CEA48
if( actor_animationIsAt(this, 0.45f)
|| actor_animationIsAt(this, 0.55f)
|| actor_animationIsAt(this, 0.6f)
){
if(!this->unk38_0){
func_8030E394(this->unk44_31);
sfxsource_setSfxId(this->unk44_31, SFX_67_BEEHIVE_CLONK);
sfxsource_setSampleRate(this->unk44_31, 12000);
func_8030DBB4(this->unk44_31, (animctrl_getAnimTimer(this->animctrl) + 0.9) - 0.4);
func_8030DF68(this->unk44_31, this->position);
func_8030DEB4(this->unk44_31, 300.0f, 1500.0f);
func_8030DD14(this->unk44_31, 3);
func_8030E2C4(this->unk44_31);
}
}//L802CEB48
break;
case 2://L802CEB2C
if(animctrl_isStopped(this->animctrl)){
func_80326310(this);
}
break;
}//L802CEB48
}

386
src/core2/ch/bigbutt.c Normal file
View File

@@ -0,0 +1,386 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
void func_802C6240(Actor *);
Actor *func_802C6E84(ActorMarker *, Gfx **, Mtx **, Vtx **);
/*.data */
ActorAnimationInfo D_80366010[] ={
{0x00, 0.0f},
{ASSET_33_ANIM_BIGBUTT_EAT, 5.5f},
{ASSET_36_ANIM_BIGBUTT_WALK, 0.7f},
{ASSET_10_ANIM_BIGBUTT_RUN, 0.8f},
{ASSET_21_ANIM_BIGBUTT_SLIDE, 0.9f},
{ASSET_32_ANIM_BIGBUTT_ATTACK, 1.1f},
{ASSET_35_ANIM_BIGBUTT_ALERT, 0.6f},
{ASSET_34_ANIM_BIGBUTT_DIE, 4.0f},
{ASSET_36_ANIM_BIGBUTT_WALK, 1.3f},
{ASSET_10_ANIM_BIGBUTT_RUN, 0.6f},
{ASSET_33_ANIM_BIGBUTT_EAT, 5.5f},
{ASSET_36_ANIM_BIGBUTT_WALK, 1.3f},
{ASSET_253_ANIM_BIGBUTT_OW, 0.7f},
{ASSET_254_ANIM_BIGBUTT_FALL, 1.1f},
{ASSET_254_ANIM_BIGBUTT_FALL, 1000000000.0f},
{ASSET_255_ANIM_BIGBUTT_GET_UP, 1.0f},
};
ActorInfo D_80366090 = {0x3, ACTOR_4_BIGBUTT, ASSET_353_MODEL_BIGBUTT,
1, D_80366010,
func_802C6240, func_80326224, func_802C6E84,
3200, 0, 0.0f, 0
};
ActorInfo D_803660B4 = {0x9, ACTOR_E_BULL_INTRO, ASSET_354_MODEL_BULL_INTRO,
1, D_80366010,
func_802C6240, func_80326224, func_802C6E84,
3200, 0, 0.0f, 0
};
/* .code */
void func_802C5E80(Actor *this){
this->unk28 = randf2(3.5f, 4.9f);
}
void func_802C5EB8(Actor *this){
if(func_803203FC(0xC1))
return;
if(this->unk38_31){
this->unk38_31--;
}
else{
if(func_80329530(this, 1200) && func_803292E0(this)){
func_80328A84(this, 8);
}
}
}
void func_802C5F44(Actor *this){
if(!func_80329530(this, 1200) || !func_803292E0(this)){
func_80328B8C(this, 1, 0.16f, 1);
}
}
void func_802C5F94(Actor *this){
func_80328A84(this, 2);
func_802C5E80(this);
func_80328CEC(this, (s32)this->yaw_moving, 135, 175);
this->unk38_31 = 150;
}
void func_802C5FF8(Actor *this){
if( !this->unk138_28
&& actor_animationIsAt(this, 0.4f)
&& randf() < 0.14
&& func_8028EE84() != BSWATERGROUP_2_UNDERWATER
){
func_8030E878(SFX_2B_BULL_MOO_1, randf2(0.9f, 1.1f), 32000, this->position, 0.0f, 2000.0f);
}
}
void func_802C60AC(ActorMarker *marker, ActorMarker *other_marker){
Actor *actor = marker_getActor(marker);
if( actor->state == 4
&& 5.0 <= actor->unk28
&& func_803294F0(actor, 80, func_80329784(actor))
){
animctrl_setPlaybackType(actor->animctrl, ANIMCTRL_ONCE);
func_80328A84(actor, 5);
func_8030E58C(SFX_1E_HITTING_AN_ENEMY_2, 1.0f);
}
}
void func_802C6150(ActorMarker *marker, ActorMarker *other_marker){
Actor *actor = marker_getActor(marker);
func_80328AC8(actor, 0xC);
func_8030E878(SFX_2B_BULL_MOO_1, randf2(1.28f, 1.37f), 32000, actor->position, 0.0f, 2000.0f);
}
void func_802C61C0(ActorMarker *marker, ActorMarker *other_marker){
Actor *actor = marker_getActor(marker);
if( actor->state != 0xd
&& actor->state != 0xe
&& actor->state != 0xf
){
func_80328AC8(actor, 0xd);
FUNC_8030E8B4(SFX_143_BULL_DAMAGE, 1.0f, 16000, actor->position, 0, 2000);
FUNC_8030E8B4(SFX_143_BULL_DAMAGE, 1.0f, 16000, actor->position, 0, 2000);
}
}
//chBigbuttUpdate
void func_802C6240(Actor *this){
s32 sp2C;
u8 tmp_a0;
f32 tmp_f0;
if(!this->initialized){
this->marker->unk1C = func_802C61C0;
this->marker->unkC = func_802C60AC;
this->marker->unk10 = func_802C6150;
this->unk138_24 = 0;
this->unk16C_0 = 1;
this->initialized = TRUE;
return;
}//L802C62BC
switch(this->state){
case 0x1: //L802C62E4
this->unk10_12 = 3;
sp2C = func_8032863C(this->animctrl, 0.16f, 0.55f);
if(!this->unk138_28){
if( actor_animationIsAt(this, 0.157f)
|| actor_animationIsAt(this, 0.289f)
|| actor_animationIsAt(this, 0.4f)
|| actor_animationIsAt(this, 0.536f)
){
if(func_8028EE84() != BSWATERGROUP_2_UNDERWATER){
func_8030E878(SFX_C8_CRUNCH,randf2(0.93f, 1.07f),10000, this->position, 0.0f, 1800.0f);
}
}
}//L802C63C4
if(sp2C == 2){
func_80328A2C(this, 0.55f, 1, 0.35f);
}
func_802C5FF8(this);
if( func_8032863C(this->animctrl, 0.65f, 0.99f) >= 2
&& !func_80328A2C(this, 0.0f, -1, 0.45f)
&& func_80328BD4(this, 2, 0.0f, -1, 0.58f)
){
func_80328CEC(this, (s32)this->yaw, 10, 45);
func_802C5E80(this);
}//L802C647C
func_802C5EB8(this);
break;
case 0x2: //L802C6494
func_802C5FF8(this);
func_80328FB0(this, 2.0f);
if(!func_80329030(this, 0) && func_80329480(this)){
func_80328CEC(this, (s32)this->yaw, 90, 150);
}//L802C64EC
if(!(func_8023DB5C() & 0xf))
func_80328CEC(this, (s32)this->yaw_moving, 10, 20);
if(!(func_8023DB5C() & 0x7))
func_80328BD4(this, 1, 0.16f, 1, 0.02f);
if( !(func_8023DB5C() & 0xf)
&& func_80329078(this, (s32)this->yaw_moving, 150)
&& func_80328B38(this, 3, 0.13f)
){
this->unk28 = randf2(7.1f, 8.4f);
}
func_802C5EB8(this);
break;
case 0x8: //L802C65D0
func_802C5F44(this);
this->yaw_moving = func_80329784(this);
func_80328FB0(this, 4.0f);
if(func_80329480(this))
func_80328A84(this, 6);
break;
case 0x3: //L802C6620
func_80328FB0(this, 3.0f);
if(! func_80329030(this, 0) && func_80329480(this)){
func_80328CEC(this, (s32)this->yaw, 120, 180);
func_80328A84(this, 2);
func_802C5E80(this);
}
if(!(func_8023DB5C() & 0xf) && func_80328B38(this, 2, 0.08f))
func_802C5E80(this);
func_802C5EB8(this);
break;
case 0x6: //L802C66D0
animctrl_setDuration(this->animctrl, D_80366010[6].duration - (3 - this->unk10_12)*0.1085);
this->yaw_moving = (f32)func_80329784(this);
if(!func_803294B4(this, 0x21)){
func_80328A84(this, 8);
}
func_802C5F44(this);
if(actor_animationIsAt(this, 0.35f) && func_8028EE84() != BSWATERGROUP_2_UNDERWATER){
func_8030E58C(SFX_3C_BULL_GROWN, randf()/10.0f + 1.0);
this->unk10_12--;
}
if(!func_80329078(this, (s32)this->yaw, 20))
func_802C5F94(this);
if(this->unk10_12 == 0 || (this->unk10_12 < 3 && func_80329530(this, 300))){
func_80328A84(this, 9);
this->unk28 = 13.0f;
}
break;
case 0x9: //L802C6878
if(actor_animationIsAt(this, 0.35f))
func_8030E58C(SFX_2E_BIGBUTT_RUNNING, 1.0f);
this->unk28 += 0.15;
if(30.0f < this->unk28)
this->unk28 = 30.0f;
this->yaw_moving = (f32)func_80329784(this);
func_80328FB0(this, 9.0f);
if(!func_80329030(this, 0))
func_802C5F94(this);
if(func_80329530(this, 320)){
if(func_80329078(this, (s32)this->yaw_moving,200)){
animctrl_setPlaybackType(this->animctrl, ANIMCTRL_ONCE);
func_80328A84(this, 4);
this->unk28 += 5.7;
tmp_a0 = this->unk44_31;
if(this->unk44_31 == 0){
this->unk44_31 = func_8030D90C();
tmp_a0 = this->unk44_31;
}
sfxsource_setSfxId(tmp_a0, SFX_18_BIGBUTT_SLIDE);
func_8030DD14(this->unk44_31, 2);
func_8030DBB4(this->unk44_31, (randf()*0.1 - 0.05) + 1.0);
func_8030E2C4(this->unk44_31);
}
else{//L802C69FC
func_802C5F94(this);
}
}//L802C6A08
break;
case 0x4: //L802C6A14
if(animctrl_getAnimTimer(this->animctrl) < 0.99){
this->yaw_moving = (f32)func_80329784(this);
func_80328FB0(this, 1.0f);
}
func_80329030(this, 0);
func_8030E2C4(this->unk44_31);
if(0.99 <= animctrl_getAnimTimer(this->animctrl)){
func_80329878(this, func_80329530(this, 250)? 0.8: 1.2);
if(0.0f == this->unk28){
animctrl_setPlaybackType(this->animctrl, ANIMCTRL_LOOP);
func_80328B8C(this, 1, 0.65f, 1);
func_8030DA44(this->unk44_31);
this->unk44_31 = 0;
func_8030E484(SFX_19_BANJO_LANDING_08);
}
}//L802C6B1C
break;
case 0x5: //L802C6B28
actor_playAnimationOnce(this);
tmp_f0 = animctrl_getAnimTimer(this->animctrl);
animctrl_setDuration(this->animctrl, D_80366010[5].duration + ((0.65 < tmp_f0)? (tmp_f0 - 0.65)*16.0 : 0.0));
if(actor_animationIsAt(this, 0.95f)){
actor_loopAnimation(this);
func_802C5F94(this);
}
break;
case 0xc: //L802C6BDC
actor_playAnimationOnce(this);
if(actor_animationIsAt(this, 0.95f)){
func_80328B8C(this, 1, 0.65f, 1);
actor_loopAnimation(this);
}
break;
case 0xd: //L802C6C28
actor_playAnimationOnce(this);
if(actor_animationIsAt(this, 0.95f)){
func_80328B8C(this, 0xe, 0.99f, 1);
this->unk60 = 4.0f;
}
break;
case 0xe: //L802C6C7C
actor_playAnimationOnce(this);
this->unk60 -= time_getDelta();
if(this->unk60 <= 0.0f){
this->unk166 = 0x63;
func_80328AC8(this, 0xF);
}
break;
case 0xf: //L802C6CD4
actor_playAnimationOnce(this);
if(actor_animationIsAt(this, 0.95f)){
func_80328B8C(this, 1, 0.65f, 1);
actor_loopAnimation(this);
}
break;
}//L802C6D1C
if(this->state == 0xe){
if(this->marker->unk14_20 != 0x29e)
this->marker->unk14_20 = 0x29e;
}else{//L802C6D60
if(this->marker->unk14_20 != 3)
this->marker->unk14_20 = 3;
}
}
void func_802C6DA0(s32 arg0, f32 arg1[3], f32 arg2[3]){
func_8034A174(func_80329934(), arg0, arg2);
arg2[0] = (arg2[0] - arg1[0])*0.2;
arg2[1] = (arg2[1] - arg1[1])*0.2;
arg2[2] = (arg2[2] - arg1[2])*0.2;
}
void func_802C6E3C(s32 arg0, f32 arg1[3]){
f32 sp1C[3];
func_8034A174(func_80329934(), arg0, sp1C);
func_80352CF4(sp1C, arg1, 170.0f, 50.0f);
}
Actor *func_802C6E84(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx){
Actor *actor; //sp4C
f32 sp40[3];
actor = func_80325888(marker, gfx, mtx, vtx);
if(marker->unk14_21){
f32 sp34[3] = {0.0f, 4.0f, -15.0f};
f32 sp28[3];
f32 sp1C[3];
ml_vec3f_yaw_rotate_copy(sp34, sp34, actor->yaw);
switch(actor->state){
case 6:
if(actor_animationIsAt(actor, 0.65f)){
func_8034A174(func_80329934(), 9, sp40);
func_80352CF4(sp40, sp34, 60.0f, 50.0f);
}
break;
case 4://L802C6F50
if((func_8023DB5C() & 1) == 1){
if(func_80259808(actor->yaw)){
func_802C6E3C(0xb, sp34);
func_802C6E3C(0xa, sp34);
}
else{
func_802C6E3C(0x8, sp34);
func_802C6E3C(0x9, sp34);
}
}
break;
case 1://L802C6FB4
if(actor_animationIsAt(actor, 0.85f)
&& (func_8023DB5C()& 0xe) == 8
&& randf() < 0.6
){
func_8034A174(func_80329934(),5, sp40);
func_802C6DA0(6, sp40, sp28);
func_802C6DA0(7, sp40, sp1C);
func_80352CF4(sp40, sp28, 200.0f, 50.0f);
func_80352CF4(sp40, sp1C, 200.0f, 50.0f);
}
break;
}
}//L802C7064
return actor;
}

View File

@@ -0,0 +1,57 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
void func_803567EC(Actor *this);
/* .data */
ActorInfo D_80372810 = {
0x1A7, ACTOR_28A_CLANKER_WHIPCRACK, ASSET_432_MODEL_CLANKER_WHIPCRACK,
0, NULL,
func_803567EC, NULL, func_80325888,
0, 0, 0.0f, 0
};
/* .code */
void func_80356770(Actor *this, s32 next_state){
if(next_state == 1)
func_80335924(this->unk148, ASSET_15C_ANIM_CLANKER_WHIPCRACK_IDLE, 0.5f, 1.0f);
if(next_state == 2)
func_80335924(this->unk148, ASSET_15D_ANIM_CLANKER_WHIPCRACK_ATTACK, 0.5f, 1.0f);
this->state = next_state;
}
void func_803567EC(Actor *this){
f32 plyr_pos[3];
f32 plyr_dist;
f32 sp44;
f32 sp40;
if(!this->unk16C_4){
this->unk16C_4 = TRUE;
this->roll = this->yaw;
this->yaw = 0.0f;
func_80356770(this, 1);
}
player_getPosition(plyr_pos);
plyr_dist = ml_vec3f_distance(plyr_pos, this->position);
if(this->state == 1){
if(plyr_dist < 700.0f)
func_80356770(this, 2);
}
if(this->state == 2){
func_8033568C(this->unk148, &sp44, &sp40);
if(sp44 < 0.13 && 0.13 <= sp40)
func_8030E9C4(SFX_6A_FLAGPOLE_WOBBLE, randf2(0.9f, 1.0f), 14000, this->position, 500.0f, 1000.0f);
if(sp44 < 0.8 && 0.8 <= sp40)
func_8030E9C4(SFX_2_CLAW_SWIPE, randf2(0.9f, 1.1f), randi2(10000, 14000), this->position, 500.0f, 1000.0f);
if(800.0f < plyr_dist)
func_80356770(this, 1);
}//L803569D4
}

91
src/core2/ch/climbBase.c Normal file
View File

@@ -0,0 +1,91 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
void func_802D77D4(Actor *this);
extern void func_8028F738(f32[3], f32[3], f32, u32);
extern f32 func_80258640(f32[3], f32[3]);
typedef struct {
f32 unk0[3];
s16 unkC;
}ActorLocal_climbBase;
/* .data */
extern ActorInfo D_80367B20 = {
0x35, 0x26, 0x0,
0x1, NULL,
func_802D77D4, func_80326224, func_80325340,
0, 0, 0.0f, 0
};
extern f32 D_8037DE30[3];
extern u8 D_8037DE3C;
/* .code */
s32 func_802D76E0(Actor *this, f32 *arg1) {
ActorLocal_climbBase *local;
f32 sp40[3];
f32 sp34[3];
f32 sp30;
s32 temp_v0;
s32 sp28;
local = (ActorLocal_climbBase *)&this->local;
sp28 = func_8030526C(sp40, 0x27, this->position);
temp_v0 = func_8030526C(sp34, 0x28, this->position);
if (!sp28 && !temp_v0) {
return FALSE;
}
if (sp28 && temp_v0) {
sp30 = func_80258640(this->position, sp40);
if (func_80258640(this->position, sp34) < sp30) {
sp28 = 0;
}
}
if (sp28) {
ml_vec3f_copy(arg1, sp40);
local->unkC = 1;
} else {
ml_vec3f_copy(arg1, sp34);
local->unkC = 2;
}
return TRUE;
}
void func_802D77D4(Actor *this) {
f32 sp4C[3];
f32 sp40[3];
f32 sp3C;
f32 sp30[3];
ActorLocal_climbBase *local;
local = (ActorLocal_climbBase *)&this->local;
switch (this->state) { /* irregular */
case 1:
func_802D76E0(this, sp30);
ml_vec3f_copy(local->unk0, sp30);
func_80328A84(this, 2);
return;
case 2:
sp3C = (f32)(this->unkF4_8 + 0x19);
player_getPosition(sp40);
ml_vec3f_diff_copy(sp4C, this->position, sp40);
if (((sp4C[0] * sp4C[0]) + (sp4C[2] * sp4C[2])) < (sp3C * sp3C)) {
if ((this->position[1] < sp40[1]) && (sp40[1] <= local->unk0[1])) {
if (func_803203FC(2) == 0) {
func_8028F738(this->position, local->unk0, (f32)this->unkF4_8, local->unkC);
}
}
}
return;
}
}
void func_802D7930(void){
player_getPosition(D_8037DE30);
D_8037DE3C = TRUE;
}

227
src/core2/ch/clucker.c Normal file
View File

@@ -0,0 +1,227 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern void func_8033A45C(s32, s32);
typedef struct{
u8 unk0;
// u8 pad1[3];
f32 unk4;
} ActorLocal_Clucker;
Actor *func_803575B8(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx);
void func_8035765C(Actor *this);
/* .data */
extern ActorInfo D_80372870 = {
0x1B2, ACTOR_29F_CLUCKER, ASSET_482_MODEL_CLUCKER,
0, NULL,
func_8035765C, NULL, func_803575B8,
0, 0, 0.0f, 0
};
/* .code */
void func_80357150(Actor *this){
f32 sp34[3];
f32 sp28[3];
f32 sp1C[3];
sp1C[0] = 50.0f;
sp1C[1] = 200.0f;
sp1C[2] = 300.0f;
ml_vec3f_yaw_rotate_copy(sp1C, sp1C, this->yaw);
sp34[0] = sp1C[0] + this->position_x;
sp34[1] = sp1C[1] + this->position_y;
sp34[2] = sp1C[2] + this->position_z;
ml_vec3f_yaw_rotate_copy(sp1C, sp1C, 10.0f);
sp34[0] += 3.0f*sp1C[0];
sp34[1] += 3.0f*sp1C[1];
sp34[2] += 3.0f*sp1C[2];
sp28[0] = -50.0f;
sp28[1] = this->yaw + 20.0f;
sp28[2] = 0.0f;
func_802BAE6C(sp34, sp28);
}
void func_80357264(Actor *this, s32 next_state){
ActorLocal_Clucker *local = (ActorLocal_Clucker *)&this->local;
f32 sp38;
s32 pad34;
this->marker->unk14_20 = 0x1d0;
actor_collisionOff(this);
if(next_state == 1 || next_state == 2){
func_80335924(this->unk148, ASSET_184_ANIM_CLUCKER_ATTACK_SHORT, 0.0f, 2.5f);
func_80335A74(this->unk148, 0.99f);
func_80335A8C(this->unk148, 4);
if(this->state == 4){
if(local->unk0 == 2){
local->unk4 = randf2(0.5f, 0.75f);
}
else{//L8035732C
local->unk4 = randf2(0.25f, 0.35f);
}//L8035734C
}
else{//L80357358
local->unk4 = 0.0f;
}
}//L80357368
if(this->state == 1 && next_state == 2)
local->unk0 = -1;
if(next_state == 3)
local->unk4 = 0.2f;
if(next_state == 4){
this->marker->unk14_20 = 0x1b2;
actor_collisionOn(this);
local->unk0 = (local->unk0 + 1) % 3;
if(local->unk0 < 2)
func_80335924(this->unk148, ASSET_184_ANIM_CLUCKER_ATTACK_SHORT, 0.0f, randf2( 0.6f, 1.0f));
else
func_80335924(this->unk148, ASSET_185_ANIM_CLUCKER_ATTACK_LONG, 0.0f, randf2( 2.3f, 2.7f));
func_80335A8C(this->unk148, 2);
func_8030E6A4(SFX_4A_CLUCKER_AHH, randf2(0.85f, 0.95f), 32000);
}
if(next_state == 5){
if(!levelSpecificFlags_get(0x14)
&& !( func_80326D68(this->position, 0x318, -1, &sp38) && ( sp38 < 250.0f))
){
levelSpecificFlags_set(0x14, TRUE);
func_80324E38(0.0f, 3);
func_80357150(this);
func_80324E88(2.0f);
func_80324E38(2.0f, 0);
}//L80357518
func_8030E6D4(SFX_1E_HITTING_AN_ENEMY_2);
func_80335924(this->unk148, ASSET_186_ANIM_CLUCKER_DIE, 0.05f, 2.0f);
}//L80357540
this->state = next_state;
}
void func_80357564(ActorMarker *this_marker, ActorMarker *other_marker){
func_8030E6D4(SFX_1E_HITTING_AN_ENEMY_2);
}
void func_8035758C(ActorMarker *this_marker, ActorMarker *other_marker){
Actor *this = marker_getActor(this_marker);
func_80357264(this, 5);
}
Actor *func_803575B8(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx){
Actor *this = marker_getActor(marker);
func_8033A45C(3, (this->state == 5)? 1 : 0);
func_8033A45C(4, (this->state == 0 || this->state == 1 || this->state == 6)? 0 : 1);
return func_80325888(marker, gfx, mtx, vtx);
}
void func_8035765C(Actor *this){
f32 sp5C[3];
f32 sp58;
ActorLocal_Clucker *local = (ActorLocal_Clucker *)&this->local;
f32 sp50;
f32 sp4C;
f32 sp48;
f32 sp44;
f32 sp40;
sp50 = time_getDelta();
if( !this->unk16C_4){
this->unk16C_4 = TRUE;
this->unk16C_0 = TRUE;
if(this->state != 6){
marker_setCollisionScripts(this->marker, NULL, func_80357564, func_8035758C);
local->unk0 = 0xff;
func_80357264(this, 1);
}
else{//L803576E0
func_80357264(this, 6);
}
}//L803576EC
player_getPosition(sp5C);
sp58 = ml_vec3f_distance(this->position, sp5C);
if(this->state == 1){
if(sp58 < this->scale*800.0f){
func_80357264(this, 2);
}
}//L80357758
if(this->state == 2){
if(0.0f < local->unk4){
local->unk4 -= sp50;
}
else if(sp58 < this->scale*600.0f){
func_80357264(this, 3);
}
else if(this->scale*1000.0f < sp58){//L803577DC
func_80357264(this, 1);
}
}//L80357808
if(this->state == 3){
if(func_8025773C(&local->unk4, sp50)){
func_80357264(this, 4);
}
}
if(this->state == 4){
func_8033568C(this->unk148, &sp4C, &sp48);
if(func_8033567C(this->unk148) == 0x185){
if(sp4C < 0.58 && 0.58 <= sp48){
this->marker->unk14_20 = 0x1d0;
}
if(sp4C < 0.05 && 0.05 <= sp48){
FUNC_8030E624(SFX_2_CLAW_SWIPE, 0.9f, 32000);
}
if( (sp4C < 0.11 && 0.11 <= sp48)
|| (sp4C < 0.32 && 0.32 <= sp48)
|| (sp4C < 0.53 && 0.53 <= sp48)
){
func_8030E6A4(SFX_80_YUMYUM_CLACK, randf2(0.75f, 0.95f), 32700);
}
if(sp4C < 0.9 && 0.9 <= sp48){
func_8030E6D4(SFX_2_CLAW_SWIPE);
}
}
else{//L803579F0
if(sp4C < 0.63 && 0.63 <= sp48){
this->marker->unk14_20 = 0x1d0;
}
if(sp4C < 0.1 && 0.1 <= sp48){
FUNC_8030E624(SFX_2_CLAW_SWIPE, 0.9f, 32000);
}
if(sp4C < 0.5 && 0.5 <= sp48){
func_8030E6A4(SFX_80_YUMYUM_CLACK, randf2(0.75f, 0.95f), 32700);
}
if(sp4C < 0.9 && 0.9 <= sp48){
func_8030E6D4(SFX_2_CLAW_SWIPE);
}
}//L80357B30
if(func_80335794(this->unk148) > 0){
func_80357264(this, 2);
}
}//L80357B48
if(this->state == 5){
func_8033568C(this->unk148, &sp44, &sp40);
if(sp44 < 0.1 && 0.1 <= sp40){
func_8030E6A4(SFX_68_CLUCKER_AAEEGHH, randf2(1.0f, 1.1f), 32000);
}
if(sp44 < 0.7 && 0.7 <= sp40){
func_8030E6D4(SFX_61_CARTOONY_FALL);
}
if(func_80335794(this->unk148) > 0){
func_80357264(this, 6);
}
}
}

101
src/core2/ch/code_468E0.c Normal file
View File

@@ -0,0 +1,101 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
void func_802CD898(Actor *);
void func_802CD8C0(Actor *);
void func_802CDAC4(Actor *);
void func_802CDB18(Actor *);
/* .data */
ActorInfo D_80367160 = {0x12, 0x66, 0, 0, NULL,
func_802CD898, func_802CD8C0, func_80325340,
0, 0, 0.0f, 0
};
ActorInfo D_80367184 = {0x12, 0x6C, 0, 0, NULL,
func_802CD898, func_802CDB18, func_80325340,
0, 0, 0.0f, 0
};
/* .code */
void func_802CD870(Actor *this){
*(s32 *)this->unkBC = TRUE;
func_8028F918(2);
}
void func_802CD898(Actor *this){
marker_despawn(this->marker);
func_802BBC58(2);
}
void func_802CD8C0(Actor *this){
if(!this->unk16C_4){
this->unk16C_4 = 1;
this->marker->unk2C_1 = 1;
this->marker->collidable = 0;
*(s32*)this->unkBC = 0; //TODO Make struct
if(func_803203FC(1) || func_803203FC(0x1F)){
marker_despawn(this->marker);
return;
}
if(this->unkF4_8 != 0x32 && func_8028E4A4() != this->unkF4_8){
marker_despawn(this->marker);
return;
}
if(map_get() == MAP_26_MMM_NAPPERS_ROOM){
if(func_8031FF1C(BKPROG_1D_MMM_DINNING_ROOM_CUTSCENE)){
marker_despawn(this->marker);
return;
}
else{
func_802CD870(this);
func_80320004(BKPROG_1D_MMM_DINNING_ROOM_CUTSCENE, TRUE);
}
}
//L802CD9C4
if(map_get() == MAP_8E_GL_FURNACE_FUN){
if(func_8031FF1C(BKPROG_F4_ENTER_FF_CUTSCENE)){
marker_despawn(this->marker);
return;
}
else{
func_802CD870(this);
}
}
}//L802CDA00
if(func_80343D50(this, func_80343654(this) + 1, 20, 20)){
func_802CDAC4(this);
if(1.0 == this->unk48){
this->marker->unk2C_2 = 0;
if(*(s32*)this->unkBC)
func_8028F918(0);
if(map_get() == MAP_8E_GL_FURNACE_FUN){
mapSpecificFlags_set(4, TRUE);
}
else{
func_802BBC58(2);
func_802BD0D8(0xf);
}
marker_despawn(this->marker);
}
}
}
void func_802CDAC4(Actor *this){
f32 sp1C[3];
func_802BBC58(1);
func_8024CD88(this->position);
sp1C[0] = this->pitch;
sp1C[1] = this->yaw;
sp1C[2] = 0.0f;
func_8024CE18(sp1C);
}
void func_802CDB18(Actor *this){
func_8028FBD4(0);
func_802CD8C0(this);
}

324
src/core2/ch/code_5AB30.c Normal file
View File

@@ -0,0 +1,324 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern int func_802592C4(f32[3], f32[3], f32);
extern void func_802EFA20(ParticleEmitter *, f32, f32);
extern void func_80328B8C(Actor *, s32, f32, s32);
extern void func_80328FB0(Actor *, f32);
extern void func_803300C0(ActorMarker *, void *);
typedef struct {
ActorMarker *unk0;
f32 unk4;
u8 pad8[0x1];
u8 unk9;
u8 unkA;
u8 unkB;
} ActorLocal_chSirSlush;
Actor *func_802E1AC0(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx); //chSirSlush_draw
void func_802E20E8(Actor *this); //chSirSlush_update
/* .data */
ActorAnimationInfo D_80368650[] = {
{0, 0.0f},
{ASSET_108_ANIM_SIR_SLUSH_IDLE, 0.8f},
{ASSET_109_ANIM_SIR_SLUSH_ATTACK, 4.0f},
{ASSET_220_ANIM_SIR_SLUSH_DIE, 1.6f}
};
ActorInfo D_80368670 = {
0xB1, ACTOR_124_SIR_SLUSH, ASSET_377_MODEL_SIR_SLUSH,
1, D_80368650,
func_802E20E8, func_80326224, func_802E1AC0,
0, 0x199, 0.0f, 0
};
struct31s D_80368694 = {
{0.4f, 1.55f},
{0.0f, 0.0f},
{0.0f, 0.01f},
{4.0f, 4.0f},
0.0f, 0.3f
};
struct43s D_803686BC = {
{{-250.0f, 600.0f, -250.0f}, {350.0f, 960.0f, 350.0f}},
{{0.0f, -1200.0f, 0.0f}, {0.0f, -1200.0f, 0.0f}},
{{-80.0f, 0.0f, -80.0f}, {80.0f, 200.0f, 80.0f}}
};
f32 D_80368704[3] = {350.0f, 600.0f, 65.0f};
/* .code */
Actor *func_802E1AC0(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx){
Actor *actor;
ActorLocal_chSirSlush *local;
actor = marker_getActor(marker);
local = (ActorLocal_chSirSlush *)&actor->local;
func_8033A45C(1, local->unk9);
func_8033A45C(2, local->unkA);
func_80325888(marker, gfx, mtx, vtx);
}
void func_802E1B24(ActorMarker *marker){
Actor *actor;
Actor *other;
f32 sp1C[3];
ActorMarker *m = *(ActorMarker **)&marker;
actor = marker_getActor(m);
other = spawn_child_actor(ACTOR_125_SNOWBALL, &actor);
if(m->unk14_21){
func_8034A174(m->unk44, 5, sp1C);
}
else{
sp1C[0] = actor->position[0];
sp1C[1] = actor->position[1];
sp1C[2] = actor->position[2];
sp1C[1] += 150.0f;
}
other->position[0] = sp1C[0];
other->position[1] = sp1C[1];
other->position[2] = sp1C[2];
}
void func_802E1BD0(ActorMarker *marker){
Actor *actor;
Actor *other;
f32 sp2C[3];
s32 sp28;
ActorMarker *m = *(ActorMarker **)&marker;
actor = marker_getActor(m);
other = spawn_child_actor(ACTOR_126_SIR_SLUSH_HAT, &actor);
func_8034A174(m->unk44, 6, sp2C);
other->position[0] = sp2C[0];
other->position[1] = sp2C[1];
other->position[2] = sp2C[2];
other->yaw = actor->yaw + 180.0f;
other->velocity[0] = other->velocity[1] = other->velocity[2] = 0.0f;
other->velocity[0] = 34.0f;
sp28 = (func_8023DB5C() & 1)? 0x3C : 0x78;
ml_vec3f_yaw_rotate_copy(other->velocity, other->velocity, other->yaw - sp28);
other->velocity[1] = 30.0f;
}
void func_802E1CB8(f32 position[3], s32 count){
ParticleEmitter *particleSpawner = partEmitList_pushNew(count);
particleEmitter_setModel(particleSpawner, ASSET_378_MODEL_SNOWBALL);
particleEmitter_setPosition(particleSpawner, position);
particleEmitter_setPositionVelocityAndAccelerationRanges(particleSpawner, &D_803686BC);
func_802EFE24(particleSpawner, -600.0f, -600.0f, -600.0f, 600.0f, 600.0f, 600.0f);
func_802EF9F8(particleSpawner, 0.01f);
func_802EFA18(particleSpawner, 3);
func_802EFA20(particleSpawner, 1.0f, 1.3f);
func_802EF9EC(particleSpawner, 0x2f, 16000);
func_802EFB98(particleSpawner, &D_80368694);
particleEmitter_emitN(particleSpawner, count);
}
void func_802E1DA0(Actor *this){
ActorLocal_chSirSlush *local = (ActorLocal_chSirSlush *) &this->local;
func_80328B8C(this, 1, 0.01f, 1);
actor_loopAnimation(this);
local->unk4 = 0.4f;
}
void func_802E1DE8(Actor *this){
func_80328B8C(this, 3, 0.01f, 1);
actor_playAnimationOnce(this);
}
void func_802E1E20(Actor *this, f32 arg1){
this->yaw_moving = func_80329784(this);
func_80328FB0(this, 6.0f);
}
int func_802E1E5C(Actor *this, s32 arg1){
f32 f0;
f0 = this->yaw - this->yaw_moving;
if((f0 < arg1) && (-arg1 < f0)){
return 1;
}
return 0;
}
int func_802E1EB4(Actor *this, s32 arg1, s32 arg2){
f32 sp1C[3];
if(this->unkF4_8 == 0x33){
player_getPosition(sp1C);
if( (this->position[1] + 500.0f < sp1C[1]) || (sp1C[1] < this->position[1] - 500.0f))
return 0;
}//L802E1F28
if(func_80329530(this, arg2) && !func_80329530(this, arg1)){
return 1;
}
return 0;
}
int func_802E1F70(ActorMarker *marker, s32 arg1){
if(marker->unk40_31 == 0xB){
marker->unk14_20 = 0x287;
}
else{
marker->unk14_20 = 0xB1;
}
return 1;
}
void func_802E1FD0(ActorMarker *marker, ActorMarker *other_marker){
Actor *actor = marker_getActor(marker);
FUNC_8030E8B4(SFX_15_METALLIC_HIT_2, 1.0f, 30000, actor->position, 1500, 4500);
FUNC_8030E8B4(SFX_3EA_UNKNOWN, 1.0f, 30000, actor->position, 1500, 4500);
FUNC_8030E8B4(SFX_2F_ORANGE_SPLAT, 1.0f, 30000, actor->position, 1500, 4500);
func_802C3C88((GenMethod_1)func_802E1BD0, (s32)actor->marker);
if(map_get() == MAP_27_FP_FREEZEEZY_PEAK)
func_8038A978();
func_802E1CB8(actor->position, 0xC);
marker_despawn(actor->marker);
}
int func_802E208C(void){
f32 sp1C[3];
if(map_get() == MAP_46_CCW_WINTER){
player_getPosition(sp1C);
if(func_802592C4(sp1C, D_80368704, 900.0f))
return 1;
}
return 0;
}
//chSirSlush_update
void func_802E20E8(Actor *this){
ActorLocal_chSirSlush *local = (ActorLocal_chSirSlush *) &this->local;
f32 sp38;
sp38 = time_getDelta();
if(!this->unk16C_4){
this->unk16C_4 = TRUE;
this->marker->propPtr->unk8_3 = 0;
actor_collisionOn(this);
marker_setCollisionScripts(this->marker, NULL, NULL, func_802E1FD0);
func_803300C0(this->marker, func_802E1F70);
local->unk9 = 0;
local->unkA = 1;
local->unkB = 0;
local->unk4 = 0.0f;
animctrl_setTransitionDuration(this->animctrl, 0.8f);
animctrl_setAnimTimer(this->animctrl, randf());
func_8032BC18(this);
if(map_get() == MAP_27_FP_FREEZEEZY_PEAK){
local->unk0 = func_80326EEC(0x336)->marker;
func_8038A990();
}
}//L802E21D8
if(map_get() == MAP_27_FP_FREEZEEZY_PEAK){
if(func_8038BFA0() || func_8038DD14()){
actor_collisionOff(this);
this->unk58_0 = 0;
return;
}
else{//L802E2224
actor_collisionOn(this);
this->unk58_0 = 1;
}
}//L802E223C
if(!actor_playerIsWithinDist(this, 4000))
return;
if(!local->unkB && this->marker->unk14_21){
local->unkB = 1;
}//L802E2280
switch(this->state){
case 1://L802E22B0
local->unk9 = FALSE;
local->unkA = 1;
func_802E1E20(this, 6.0f);
if(!func_80329530(this, 0xC4E)){
func_802E1DE8(this);
}
else if(
map_get() != MAP_27_FP_FREEZEEZY_PEAK
|| func_8038DD34(local->unk0) == 0
|| func_8031FF1C(0x13)
){//L802E2318
if(0.0 < local->unk4){
if( (func_8023DB5C() & 1)
|| func_8028ECAC() == BSGROUP_A_FLYING
){//L802E236C
local->unk4 -= sp38;
}
}
else{//L802E2380
if( func_802E1EB4(this, 0x1f4, 0xabe)
&& func_802E1E5C(this, 3)
&& func_8028EE84() != BSWATERGROUP_2_UNDERWATER
&& !func_802E208C()
){
func_80328B8C(this, 2, 0.01f, 1);
actor_playAnimationOnce(this);
}
}
}
break;
case 2://L802E23E8
if(!func_80329530(this, 0xC4E)){
func_802E1DE8(this);
}//L802E240C
else if(
0.98 < animctrl_getAnimTimer(this->animctrl)
|| !func_802E1EB4(this, 0x1f4, 0xabe)
|| func_8028EE84() == BSWATERGROUP_2_UNDERWATER
|| func_802E208C()
){
func_802E1DA0(this);
}
else{
if(animctrl_getAnimTimer(this->animctrl) < 0.45){
func_802E1E20(this, 6.0f);
}
if( actor_animationIsAt(this, 0.19f)
|| actor_animationIsAt(this, 0.28f)
|| actor_animationIsAt(this, 0.37f)
){
FUNC_8030E8B4(SFX_A7_WOODEN_SWOSH, 1.3f, 18000, this->position, 800, 3050);
}//L802E24FC
if(actor_animationIsAt(this, 0.15f)){
func_8030E878(SFX_3F5_UNKNOWN, randf2(1.35f, 1.5f),32000, this->position, 800.0f, 3050.0f);
}//L802E2558
if(actor_animationIsAt(this, 0.45f)){
local->unk9 = TRUE;
}
else if(
actor_animationIsAt(this, 0.58f)
&& local->unkB
){
func_8030E878(SFX_8F_SNOWBALL_FLYING, randf2(0.95f, 1.05f), 30000, this->position, 800.0f, 3050.0f);
func_802C3C88((GenMethod_1)func_802E1B24, (s32)this->marker);
local->unk9 = FALSE;
}
}
break;
case 3://L802E2604
if(func_80329530(this, 0xC4E)){
func_802E1DA0(this);
}
break;
}
}

156
src/core2/ch/code_CFA60.c Normal file
View File

@@ -0,0 +1,156 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
/* public */
Actor *func_80356C50(ActorMarker *, Gfx **, Mtx **, Vtx **);
void func_80356CCC(Actor *);
typedef struct{
f32 unk0;
}ActorLocal_Core2_CFA60;
/* .data */
ActorInfo D_80372840 = {
0x29, ACTOR_1CC_GRILL_CHOMPA, ASSET_430_MODEL_GRILL_CHOMPA,
0, NULL,
func_80356CCC, NULL, func_80356C50,
0, 0, 0.0f, 0
};
/* .code */
void func_803569F0(Actor *this, s32 next_state){
ActorLocal_Core2_CFA60 *local = (ActorLocal_Core2_CFA60 *)&this->local;
this->marker->unk14_20 = 0x1cf;
actor_collisionOff(this);
if(next_state == 1 || next_state == 2){
func_80335924(this->unk148, ASSET_15A_ANIM_GRILL_CHOMPA_ATTACK, 0, 2.5f);
func_80335A74(this->unk148, 0.99f);
func_80335A8C(this->unk148, 4);
if(this->state == 4){
local->unk0 = randf2(0.5f, 1.0f);
}
else{//L80356AA4
local->unk0 = 0.0f;
}
}////L80356AB8
if(this->state == 1 && next_state == 2){
func_8030E760(0x3EF, 0.9f, 32700);
}
if(next_state == 3){
local->unk0 = 0.2f;
}
if(next_state == 4){
this->marker->unk14_20 = 0x29;
actor_collisionOn(this);
func_80335924(this->unk148, ASSET_15A_ANIM_GRILL_CHOMPA_ATTACK, 0, randf2(2.3f, 2.7f));
func_80335A8C(this->unk148, 2);
func_8030E760(0x3ef, 1.1f, 25000);
func_8030E760(0x3ef, 1.1f, 25000);
}//L80356B90
if(next_state == 5){
func_8030E760(SFX_1E_HITTING_AN_ENEMY_2, 1.0f, 32000);
func_80335924(this->unk148, ASSET_15B_ANIM_GRILL_CHOMPA_DIE, 0.05f, 2.0f);
func_80335A8C(this->unk148, 2);
}
this->state = next_state;
}
void func_80356BF4(ActorMarker *marker, ActorMarker *other_marker){
func_8030E760(SFX_1E_HITTING_AN_ENEMY_2, 1.0f, 32000);
}
void func_80356C24(ActorMarker *marker, ActorMarker *other_marker){
func_803569F0(marker_getActor(marker), 5);
}
Actor *func_80356C50(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx){
Actor *actor = marker_getActor(marker);
if(actor->state == 0){
return actor;
}
else{
func_8033A45C(3, (actor->state == 1 || actor->state == 6)? 0:1);
return func_80325888(marker, gfx, mtx, vtx);
}
}
void func_80356CCC(Actor *this){
f32 sp5C[3];
f32 sp58;
ActorLocal_Core2_CFA60 *local = (ActorLocal_Core2_CFA60 *)&this->local;
f32 sp50;
f32 sp4C;
f32 sp48;
f32 sp44;
f32 sp40;
sp50 = time_getDelta();
if(!this->unk16C_4){
this->unk16C_4 = 1;
this->unk16C_0 = 1;
marker_setCollisionScripts(this->marker, NULL, func_80356BF4, func_80356C24);
func_803569F0(this, (this->state < 5)? 1 : 6);
}//L80356D48
player_getPosition(sp5C);
sp58 = ml_vec3f_distance(this->position, sp5C);
if( this->state == 1){
if( sp58 < this->scale*400.0f
&& (map_get() != MAP_3C_RBB_KITCHEN || this->position_z < sp5C[2])
){
func_803569F0(this, 2);
}
}//L80356DCC
if(this->state == 2){
if(0.0f < local->unk0){
local->unk0 -= sp50;
}
else if(sp58 < this->scale*300.0f){
func_803569F0(this, 3);
}
else if(this->scale*500.0f < sp58){
func_803569F0(this, 1);
}
}//L80356E88
if(this->state == 3){
if(func_8025773C(&this->local, sp50)){
func_803569F0(this, 4);
}
}//L80356EAC
if(this->state == 4){
func_8033568C(this->unk148, &sp4C, &sp48);
if(sp4C < 0.59 && 0.59 <= sp48){
this->marker->unk14_20 = 0x1cf;
}
if(sp4C < 0.5 && 0.5 <= sp48){
func_8030E760(SFX_2_CLAW_SWIPE, 0.9f, 32000);
}
if( (sp4C < 0.11 && 0.11 <= sp48)
|| (sp4C < 0.32 && 0.32 <= sp48)
|| (sp4C < 0.53 && 0.53 <= sp48)
){
func_8030E760(SFX_6D_CROC_BITE, randf2(0.95f, 1.05f), 32000);
}//L80357028
if(sp4C < 0.9 && 0.9 <= sp48){
func_8030E760(SFX_2_CLAW_SWIPE, 1.0f, 32000);
}
if(func_80335794(this->unk148) > 0){
func_803569F0(this, 2);
}
}//L80357078
if(this->state == 5){
func_8033568C(this->unk148, &sp44, &sp40);
if(sp44 < 0.1 && 0.1 <= sp40){
func_8030E760(SFX_D7_GRABBA_DEATH, 1.0f, 32000);
}
if(sp44 < 0.7 && 0.7 <= sp40){
func_8030E760(SFX_A_BANJO_LANDING_05, 0.8f, 32000);
}
if(func_80335794(this->unk148) > 0){
func_803569F0(this, 6);
}
}//L8035713C
}

89
src/core2/ch/drips.c Normal file
View File

@@ -0,0 +1,89 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
#define _HorzDist3v(v1, v2) ((v1[0]-v2[0])*(v1[0]-v2[0]) + (v1[2]-v2[2])*(v1[2]-v2[2]))
extern int func_8024549C(f32[3], f32);
typedef struct{
f32 unk0;
f32 unk4;
f32 unk8;
f32 unkC;
}struct_core2_D2AB0;
void chdrips_update(Actor *this);
/* .data */
ActorInfo gChDripsInfo = {
0x246, ACTOR_354_DRIPS, 0,
0, NULL,
chdrips_update, func_80326224, func_80325340,
5000, 0, 0.0f, 0
};
s32 D_80372AE4[3] = {0xff, 0xff, 0xfe};
struct_core2_D2AB0 D_80372AF0 = {0.0f, 0.0f, 1.0f, 1.4f};
struct43s D_80372B00 = {
{{0.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 0.0f}},
{{0.0f, -650.0f, 0.0f}, {0.0f, -650.0f, 0.0f}},
{{-400.0f, 0.0f, -400.0f}, {400.0f, 0.0f, 400.0f}}
};
/* .code */
void func_80359A40(f32 position[3], struct_core2_D2AB0 *arg1, s32 cnt){
ParticleEmitter *pCtrl = partEmitList_pushNew(cnt);
particleEmitter_setSprite(pCtrl, ASSET_70C_SPRITE_RIPPLE);
func_802EFA70(pCtrl, 1);
func_802EFFA8(pCtrl, D_80372AE4);
particleEmitter_setPosition(pCtrl, position);
func_802EFB70(pCtrl, 0.1f, 0.1f);
func_802EFB84(pCtrl, 1.0f, 1.4f);
particleEmitter_setSpawnIntervalRange(pCtrl, arg1->unk0, arg1->unk4);
func_802EFEC0(pCtrl, arg1->unk8, arg1->unkC);
func_802EFA5C(pCtrl, 0.0f, 0.5f);
particleEmitter_emitN(pCtrl, cnt);
}
void __chdrips_particleCallback(struct31s *pCtrl, f32 position[3]){
if(func_8024549C(position, 4.0f)){
position[1] += 2.0f;
func_80359A40(position, &D_80372AF0, 1);
func_8030E878(SFX_413_UNKNOWN, randf2(1.0f, 1.4f), 20000, position, 0.0f, 3500.0f);
}
}
int __chdrips_playerWithinDist(Actor *this, s32 arg1){
f32 sp1C[3];
player_getPosition(sp1C);
if(_HorzDist3v(this->position, sp1C) < arg1*arg1)
return 1;
return 0;
}
void chdrips_update(Actor *this){
ParticleEmitter *pCtrl;
if(!this->unk16C_4){
this->unk16C_4 = TRUE;
actor_collisionOff(this);
this->unk60 = this->yaw/360.0;
}
if(__chdrips_playerWithinDist(this, 5000) && randf() < this->unk60){
pCtrl = partEmitList_pushNew(1);
particleEmitter_setModel(pCtrl, ASSET_8A0_SPRITE_WATER_DROP);
particleEmitter_setPosition(pCtrl, this->position);
particleEmitter_setPositionVelocityAndAccelerationRanges(pCtrl, &D_80372B00);
func_802EFA18(pCtrl, 1);
particleEmitter_setParticleCallback(pCtrl, __chdrips_particleCallback);
particleEmitter_setSpawnIntervalRange(pCtrl, 0.0f, 0.01f);
func_802EFEC0(pCtrl, 7.0f, 7.0f);
func_802EFB70(pCtrl, 0.1f, 0.1f);
func_802EFB84(pCtrl, 0.1f, 0.1f);
particleEmitter_emitN(pCtrl, 1);
}
}

91
src/core2/ch/firefx.c Normal file
View File

@@ -0,0 +1,91 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern int func_8024DB50(f32 arg0[3], f32 arg1);
void chfirefx_update(Actor *this);
/* .data */
ActorInfo gChFireFxInfo = {
0x256, ACTOR_383_FIRE_FX, ASSET_526_SPRITE_FIRE,
0, NULL,
chfirefx_update, func_80326224, func_80325888,
0, 0, 0.0f, 0
};
/* code */
void __chfirefx_spawnSmoke(f32 position[3], f32 scale){
ParticleEmitter *pCtrl;
pCtrl = partEmitList_pushNew(1);
particleEmitter_setSprite(pCtrl, ASSET_70D_SPRITE_SMOKE_1);
particleEmitter_setStartingFrameRange(pCtrl, 1, 6);
func_802EF9E4(pCtrl, 0x23);
particleEmitter_setPosition(pCtrl, position);
particleEmitter_setParticleSpawnPositionRange(pCtrl, 0.0f, 110.0f*scale, 0.0f, 0.0f, 110.0f*scale, 0.0f);
particleEmitter_setParticleVelocityRange(pCtrl, 0.0f, 40.0f*scale, 0.0f, 0.0f, 90.0f*scale, 0.0f);
func_802EFB70(pCtrl, 2.6*scale, 3.2*scale);
func_802EFB84(pCtrl, 5.0*scale, 6.0*scale);
particleEmitter_setSpawnIntervalRange(pCtrl, 0.0f, 0.01f);
func_802EFEC0(pCtrl, 4.0f, 7.0f);
func_802EFA5C(pCtrl, 0.3f, 0.7f);
func_802EFA70(pCtrl, 4);
particleEmitter_emitN(pCtrl, 1);
}
void __chfirefx_spawnSpark(f32 position[3], f32 scale){
ParticleEmitter *pCtrl;
pCtrl = partEmitList_pushNew(1);
particleEmitter_setSprite(pCtrl, ASSET_713_SPRITE_SPARKLE_YELLOW);
particleEmitter_setStartingFrameRange(pCtrl, 1, 6);
particleEmitter_setPosition(pCtrl, position);
particleEmitter_setParticleSpawnPositionRange(pCtrl, 0.0f, 20.0f*scale, 0.0f, 0.0f, 20.0f*scale, 0.0f);
particleEmitter_setParticleVelocityRange(pCtrl, -30.0f*scale, 120.0f*scale, -30.0f*scale, 60.0f*scale, 360.0f*scale, 60.0f*scale);
particleEmitter_setParticleAccelerationRange(pCtrl, 0.0f, -50.0f, 0.0f, 0.0f, -90.0f, 0.0f);
func_802EFB70(pCtrl, 0.1*scale, 0.2*scale);
func_802EFB84(pCtrl, 0.2*scale, 0.4*scale);
particleEmitter_setSpawnIntervalRange(pCtrl, 0.0f, 0.01f);
func_802EFEC0(pCtrl, 0.9f, 1.3f);
func_802EFA5C(pCtrl, 0.3f, 0.7f);
func_802EFA70(pCtrl, 4);
particleEmitter_emitN(pCtrl, 1);
}
void __chfirefx_hiss(ActorMarker *marker,ActorMarker *other_marker){
Actor *actor = marker_getActor(marker);
FUNC_8030E8B4(SFX_96_HOTSAND_EEL_HISS, 1.0f, 32000, actor->position, 1000, 2000);
}
void chfirefx_update(Actor *this){
if(!this->unk16C_4){
this->unk16C_4 = TRUE;
this->marker->propPtr->unk8_3 = FALSE;
actor_collisionOn(this);
marker_setCollisionScripts(this->marker, __chfirefx_hiss, NULL, NULL);
this->unk38_31 = (0.0f != this->yaw) ? 1 : 0;
if(this->unkF4_8 != 0x32){
this->unk1C[0] = 1.0f;
this->unk44_31 = func_8030ED2C(SFX_128_FIRE_CRACKING, 2);
func_8030DBB4(this->unk44_31, 1.1f);
}
else{
this->unk1C[0] = 0.0f;
}
}//L80359934
if(actor_playerIsWithinDist(this, 2000)){
if( func_8024DB50(this->position, 50.0f) && this->unk38_31 ){
if(!(func_8023DB5C() & 3) && randf() < 0.1){
__chfirefx_spawnSmoke(this->position, this->scale);
} //L803599AC
if(!(func_8023DB5C() & 3) && randf() < 0.3){
__chfirefx_spawnSpark(this->position, this->scale);
}
}//L803599F4
if(0.0f != this->unk1C[0]){
func_8030DB04(this->unk44_31, 7000, this->position, 300.0f, 800.0f);
func_8030E2C4(this->unk44_31);
}
}//L80359A2C
}

332
src/core2/ch/flotsam.c Normal file
View File

@@ -0,0 +1,332 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern f32 func_80309724(f32[3]);
typedef struct {
f32 unk0;
f32 unk4;
ParticleEmitter *pCtrl_8;
u8 unkC;
u8 unkD;
//u8 padE[2];
f32 unk10[3];
f32 unk1C[3];
f32 unk28[3];
f32 unk34[3];
}ActorLocal_Core2_D50F0;
void func_8035C8F4(Actor *this);
Actor* func_8035C71C(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx);
/* .data */
ActorInfo D_80372C80 = {
0xC9, 0x13B, 0x401,
0, NULL,
func_8035C8F4, NULL, func_8035C71C,
0, 0, 1.0f, 0
};
struct31s D_80372CA4 = {
{1.0f, 1.2f},
{1.6f, 2.0f},
{0.05f, 0.05f},
{0.3f, 0.5f},
0.1f, 0.5f
};
struct43s D_80372CCC = {
{{-5.0f, 10.0f, -5.0f}, {5.0f, 50.0f, 5.0f}},
{{0.0f, 200.0f, 0.0f}, {0.0f, 1000.0f, 0.0f}},
{{-20.0f, -20.0f, -20.0f}, {20.0f, 20.0f, 20.0f}}
};
/* .code */
void func_8035C080(Actor *this, s32 next_state){
f32 i;
ActorLocal_Core2_D50F0 *local = (ActorLocal_Core2_D50F0 *)&this->local; //sp60
f32 sp64[3];
f32 sp60;
f32 sp54[3];
f32 sp48[3];
f32 sp3C[3];
s32 sp38;
local->unk0 = 0.0f;
local->unkD = next_state;
if(next_state == 1){
func_80335924(this->unk148, 0, 0.0f, 0.0f);
this->yaw = local->unk34[0];
}
if( next_state == 3
|| next_state == 4
|| next_state == 7
|| next_state == 6
){
func_80335924(this->unk148, ASSET_132_ANIM_FLOTSAM_MOVE, 0.1f, 0.7f);
local->unk10[0] = this->position_x;
local->unk10[1] = this->position_y;
local->unk10[2] = this->position_z;
actor_collisionOn(this);
if(next_state == 3){
player_getPosition(sp54);
}
else if(next_state == 4){//L8035C15C
sp54[0] = local->unk28[0];\
sp54[1] = local->unk28[1];\
sp54[2] = local->unk28[2];
}
else if(next_state == 6){//L8035C180
func_8030E6D4(SFX_1D_HITTING_AN_ENEMY_1);
actor_collisionOff(this);
player_getPosition(sp48);
sp3C[0] = this->position_x - sp48[0];
sp3C[1] = this->position_y - sp48[1];\
sp3C[2] = this->position_z - sp48[2];\
sp3C[1] = 0.0f;
ml_vec3f_set_length(sp3C, 150.0f);
sp54[0] = sp3C[0] + this->position_x;\
sp54[1] = sp3C[1] + this->position_y;\
sp54[2] = sp3C[2] + this->position_z;
sp54[1] = local->unk4;
}
else{//L8035C228
sp54[0] = this->position_x;\
sp54[1] = this->position_y;\
sp54[2] = this->position_z;
} //L8035C240
sp64[0] = sp54[0] - this->position_x;\
sp64[1] = sp54[1] - this->position_y;\
sp64[2] = sp54[2] - this->position_z;
sp64[1] = 0.0f;
sp60 = gu_sqrtf(sp64[0]*sp64[0] + sp64[1]*sp64[1] + sp64[2]*sp64[2]);
if(next_state == 4 && sp60 <= 250.0f){
local->unk1C[0] = sp54[0];\
local->unk1C[1] = sp54[1];\
local->unk1C[2] = sp54[2];
next_state = 5;
}
else{//L8035C2DC
if(this->state == 2){
if(300.0f < sp60){
ml_vec3f_set_length(sp64, 300.0f);
}
}
else{
if(150.0f < sp60){
ml_vec3f_set_length(sp64, 150.0f);
}
}////L8035C344
for(i = 1; 0.025 < i; i -= 0.05){//L8035C378
local->unk1C[0] = sp64[0] *i + this->position_x;
local->unk1C[1] = local->unk4;
local->unk1C[2] = sp64[2] *i + this->position_z;
if(func_80329210(this, local->unk1C)){
next_state = 5;
break;
}
}
}//L8035C3F8
if(next_state == 5){
func_8030E878(0x3f2, randf2(1, 1.2f), 0x7530, this->position, 100.0f, 10000.0f);
local->unk34[1] = this->yaw;
if(sp60 <= 250.0f){
local->unk34[2] = local->unk34[0];
}
else if(local->unk34[0] < local->unk34[1]){//L8035C47C
local->unk34[2] = local->unk34[0] - 20.0f;
}
else{//L8035C4B0
local->unk34[2] = local->unk34[0] + 20.0f;
}
}
else if(next_state == 3){//L8035C4C0
if(ml_vec3f_distance(local->unk28, this->position) < 10.0f){
func_8035C080(this, 1);
return;
}
else{
func_8035C080(this, 4);
return;
}
}
else if(next_state == 4){//L8035C514
local->unk1C[0] = sp54[0];
local->unk1C[1] = sp54[1];
local->unk1C[2] = sp54[2];
next_state = 5;
}
else if(next_state == 7){//L8035C540
func_8035C080(this, 4);
return;
}
}//L8035C560
if(next_state == 8){
actor_collisionOff(this);
FUNC_8030E624(SFX_1D_HITTING_AN_ENEMY_1, 1.0f, 25000);
timed_playSfx(0.2f, SFX_103_FLOTSAM_DEATH, 1.0f, 32000);
sp38 = func_802F9AA8(SFX_104_PROPELLER_NOISE);
func_802F9DB8(sp38, 1.0f, 1.3f, 0.05f);
func_802F9EC4(sp38, this->position, 0x5dc, 0x9c4);
func_802F9F80(sp38, 0.0f, 2.0f, 2.0f);
func_802FA060(sp38, 0x6590, 0x6d60, 500.0f);
func_80335924(this->unk148, ASSET_189_ANIM_FLOTSAM_DIE, 0.1f, 4.0f);
func_80335A8C(this->unk148, 2);
local->pCtrl_8 = particleEmitter_new(20);
particleEmitter_setSprite(local->pCtrl_8, ASSET_70E_SPRITE_SMOKE_2);
particleEmitter_setStartingFrameRange(local->pCtrl_8, 0, 7);
particleEmitter_setPosition(local->pCtrl_8, this->position);
particleEmitter_setPositionVelocityAndAccelerationRanges(local->pCtrl_8, &D_80372CCC);
func_802EFB98(local->pCtrl_8, &D_80372CA4);
particleEmitter_setSpawnInterval(local->pCtrl_8, 4);
}//L8035C698
this->state = next_state;
}
void func_8035C6C4(ActorMarker *this_marker, ActorMarker *other_marker){
Actor *this = marker_getActor(this_marker);
func_8035C080(this, 6);
}
void func_8035C6F0(ActorMarker *this_marker, ActorMarker *other_marker){
Actor *this = marker_getActor(this_marker);
func_8035C080(this, 8);
}
Actor* func_8035C71C(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx){
Actor *this = marker_getActor(marker); //sp64
ActorLocal_Core2_D50F0 *local = (ActorLocal_Core2_D50F0 *)&this->local; //sp60
s32 sp5C;
s32 pad58;
f32 sp4C[3];
f32 sp40[3];
f32 sp34[3];
f32 sp28[3];
if(this->state == 0) return this;
if(this->state == 8){
sp5C = func_803356A0(this->unk148);
if(sp5C){
sp40[0] = 0.0f;
sp40[1] = 0.0f;
sp40[2] = local->unk0 * -2200.0f;
func_80345C78(sp4C, sp40);
func_8033A8F0(sp5C, 3, sp4C);
sp34[0] = 1.0 - local->unk0*0.5;
sp34[1] = 1.0 - local->unk0*0.5;
sp34[2] = 1.0 - local->unk0*0.5;
func_8033A928(sp5C, 3, sp34);
}
}
if(local->pCtrl_8){
func_8033A450(func_80329934());
}
func_80325888(marker, gfx, mtx, vtx);
if(local->pCtrl_8 && this->marker->unk14_21){
func_8034A174(func_80329934(), 5, sp28);
particleEmitter_setPosition(local->pCtrl_8, sp28);
func_802EF3A8(local->pCtrl_8, gfx, mtx, vtx);
}
return this;
}
void func_8035C8C8(Actor *this){
ActorLocal_Core2_D50F0 *local = (ActorLocal_Core2_D50F0 *)&this->local;
if(local->pCtrl_8)
func_802EF684(local->pCtrl_8);
}
void func_8035C8F4(Actor *this){
f32 plyr_pos[3];
f32 sp40[3];
f32 sp3C;
ActorLocal_Core2_D50F0 *local = (ActorLocal_Core2_D50F0 *)&this->local;
f32 sp34;
sp34 = time_getDelta();
if(this->state == 0){
this->marker->unk14_21 = FALSE;
this->marker->unk30 = func_8035C8C8;
marker_setCollisionScripts(this->marker, func_8035C6C4, func_8035C6C4, func_8035C6F0);
local->unk4 = func_80309724(this->position);
local->pCtrl_8 = NULL;
local->unk34[0] = this->yaw;
local->unk34[2] = local->unk34[1] = local->unk34[0];
local->unk28[0] = this->position_x;
local->unk28[1] = this->position_y;
local->unk28[2] = this->position_z;
func_8035C080(this, 1);
}//L8035C9AC
player_getPosition(plyr_pos);
sp40[0] = plyr_pos[0] - this->position_x;
sp40[1] = plyr_pos[1] - this->position_y;
sp40[2] = plyr_pos[2] - this->position_z;
sp3C = gu_sqrtf(sp40[0]*sp40[0] + sp40[1]*sp40[1] + sp40[2]*sp40[2]);
if(local->pCtrl_8){
particleEmitter_update(local->pCtrl_8);
}
if(this->state == 1){
if( sp3C < 800.0f
&& func_80329210(this, plyr_pos)
&& plyr_pos[1] < this->position_y + 100.0f
){
func_8035C080(this, 3);
}
}//L8035CA80
if(this->state == 5){
local->unk0 += 1.9047619047619049*sp34;
if(1.0f <= local->unk0)
local->unk0 = 1.0f;
func_80255FE4(this->position, local->unk10, local->unk1C, local->unk0);
this->position_y += 100.0f*sinf(local->unk0*3.141592654);
this->yaw = local->unk0*(local->unk34[2] - local->unk34[1]) + local->unk34[1];
if(func_80335794(this->unk148) > 0){
if(ml_vec3f_distance(this->position, local->unk28) < 10.0f){
func_8035C080(this, 1);
}
else if(local->unkC > 0){//L8035CB8C
local->unkC--;
if(local->unkC > 0){
func_8035C080(this, 7);
}
else{
func_8035C080(this, 2);
}
}
else{
func_8035C080(this, 2);
}
}
}//L8035CBD4
if(this->state == 2){
if(sp3C < 800.0f){
func_8035C080(this, 3);
}
else{
func_8035C080(this, 4);
}
}//L8035CC38
if(this->state == 8){
local->unk0 += 0.25*sp34;
if(func_80335794(this->unk148) > 0)
marker_despawn(this->marker);
}
}

606
src/core2/ch/gameSelect.c Normal file
View File

@@ -0,0 +1,606 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
#ifndef ABS
#define ABS(d) ((d) >= 0) ? (d) : -(d)
#endif
void func_8031FBF8(void);
void func_8031FBA0(void);
void func_803184C8(gczoombox_t *, f32, s32, s32, f32, s32, s32);
Actor *func_802C4360(ActorMarker *, Gfx **, Mtx **, Vtx **);
Actor *func_802C4464(ActorMarker *, Gfx **, Mtx **, Vtx **);
void func_802C4C14(Actor *this);
void func_802C5740(Actor *this);
extern void func_802C71F0(Actor *);
extern void func_802C74F4(Actor *, s32, f32 );
extern void func_8031FB14(s32, s32);
extern void func_8031F678(s32, s32);
extern void func_80335110(s32);
extern void func_8024E60C(s32, f32*);
extern void func_8024E71C(s32, f32*);
/* .data */
f32 D_80365DD0[3][3] = {
{-320.0f, 340.0f, 350.0f},
{110.0f, 340.0f, 110.0f},
{-413.333313f, 353.333313f, -234.305511f}
};
u8 *D_80365DF4 = "USE THE CONTROL STICK TO SELECT A GAME.";
u8 *D_80365DF8 = "PRESS A TO PLAY THE GAME OR Z TO ERASE IT!";
u8 *D_80365DFC = "ARE YOU SURE? PRESS A TO CONFIRM, OR B TO CANCEL";
s32 D_80365E00 = -1;
f32 D_80365E04[3][3] = {
{-435.0f, 278.0f, -159.0f},
{ 444.635437f, 216.0f, -356.591675f},
{ 55.0f, 191.822906f, -905.96875f}
};
ActorAnimationInfo D_80365E28[] = {
{0x000, 0.0f},
{0x24D, 9e+09f},
{0x24D, 2.0f},
{0x24E, 1.0f},
{0x24F, 0.6f},
{0x24D, 2.0f}
};
ActorInfo D_80365E58 = { 0xE4, 0x195, 0x532, 0x1, D_80365E28, func_802C5740, func_80326224, func_802C4464, 0, 0, 0.0f, 0};
ActorAnimationInfo D_80365E7C[] = {
{0x000, 0.0f},
{0x250, 9e+09f},
{0x250, 4.5f},
{0x251, 1.0f},
{0x252, 0.67f},
{0x250, 4.5f},
};
ActorInfo D_80365EAC = { 0xE5, 0x196, 0x532, 0x1, D_80365E7C, func_802C4C14, func_80326224, func_802C4360, 0, 0, 0.0f, 0};
ActorAnimationInfo D_80365ED0[] = {
{0x000, 0.0f},
{0x24A, 9e+09f},
{0x24A, 1.0f},
{0x24B, 1.0f},
{0x24C, 1.0f},
{0x24A, 1.0f}
};
ActorInfo D_80365F00 = { 0xE6, 0x197, 0x532, 0x1, D_80365ED0, func_802C4C14, func_80326224, func_802C4360, 0, 0, 0.0f, 0};
/* .bss */
// Remove this when this memory region is properly symbolized
u8 unk_8037DCB0[0x8037DCE0 - 0x8037DCB0];
extern u8 D_8037DCCE[0x12];
struct {
u8 *unk0;
u8 *unk4;
} D_8037DCE0;
s32 D_8037DCE8;
s32 D_8037DCEC;
gczoombox_t *D_8037DCF0;
gczoombox_t *D_8037DCF4;
f32 D_8037DCF8[2][3];
f32 D_8037DD10[2][3];
void *D_8037DD28;
s32 D_8037DD2C;
f32 D_8037DD30;
f32 D_8037DD34;
/* .code */
Actor *func_802C4360(ActorMarker *marker, Gfx **arg1, Mtx **arg2, Vtx **arg3){
s32 sp1C = marker->unk14_20 - 0xe4;
func_8033A45C(3, sp1C);
func_8033A45C(1, 1);
func_8033A45C(4, 1);
func_8033A45C(9, 1);
func_8033A45C(5, 0);
func_8033A45C(8, 0);
func_8033A45C(6, 0);
func_8033A45C(7, 0);
func_8033A45C(0xC, 1);
func_8033A45C(0xF, 1);
if(sp1C == D_80365E00){
func_8033A388(0xFF, 0xFF, 0xFF, 0xFF);
}
else{
func_8033A388(0x64, 0x64, 0x64, 0xFF);
}
return func_80325888(marker, arg1, arg2, arg3);
}
Actor *func_802C4464(ActorMarker *marker, Gfx **arg1, Mtx **arg2, Vtx **arg3){
Actor *ret_val = func_802C4360(marker, arg1, arg2, arg3);
if(D_8037DCF4)
gczoombox_draw(D_8037DCF4, arg1, arg2, arg3);
if(D_8037DCF0)
gczoombox_draw(D_8037DCF0, arg1, arg2, arg3);
return ret_val;
}
void func_802C44D0(s32 arg0, s32 arg1){
if(arg1 == 3)
D_8037DD2C = 0;
}
void *func_802C44EC(f32 arg0[3], f32 arg1[3], f32 arg2) {
f32 phi_f12;
f32 sp40[3];
s32 i;
static bool D_8037DD38;
static f32 D_8037DD3C;
static f32 D_8037DD40;
arg2 = (arg2 > 0.75) ? 0.75 : arg2;
sp40[0] = arg1[0] - arg0[0];
sp40[1] = arg1[1] - arg0[1];
sp40[2] = arg1[2] - arg0[2];
D_8037DD38 = D_8037DD38^1;
phi_f12 = gu_sqrtf(sp40[0]*sp40[0] + sp40[1]*sp40[1] + sp40[2]*sp40[2]);
if (phi_f12 < 10.0f) {
phi_f12 = 500.0f;
}
D_8037DD3C = 1.0 + (9.0f / gu_sqrtf(phi_f12));
D_8037DD40 = sinf(D_8037DD3C*1.5707963267948966);
for(i = 0; i < 3; i++){
D_8037DD10[D_8037DD38][i] = arg0[i] + ((arg1[i] - arg0[i])*sinf((((arg2 / 0.75) * 3.1415926535897931) / 2) * D_8037DD3C)) / D_8037DD40;
D_8037DCF8[D_8037DD38][i] += (D_8037DD10[D_8037DD38][i] - D_8037DCF8[D_8037DD38][i]) / 5.0;
}
return &D_8037DCF8[D_8037DD38];
}
void func_802C4768(s32 gamenum){
u8 * sp20[2];
static u8 D_8037DD48[0x20];
static u8 D_8037DD68[0x20];
func_8031FBF8();
D_80365E00 = gamenum;
func_8031FBA0();
if(func_8033D1BC(gamenum)){
func_8033D13C(gamenum);
D_8037DCCE[gamenum] = (func_8034717C(6)) ? 1 : 0;
strcpy(D_8037DD48, "");
strcat(D_8037DD48, "GAME ");
switch(gamenum){
case 0: //L802C4820
strIToA(D_8037DD48, 1);
break;
case 1: //L802C4838
strIToA(D_8037DD48, 3);
break;
case 2: //L802C484C
strIToA(D_8037DD48, 2);
break;
}//L802C4858
strcat(D_8037DD48, ": TIME ");
strcat(D_8037DD48, func_80311C64(func_803470A0()));
strcat(D_8037DD48, ",");
strcat(D_8037DD48, "");
strcpy(D_8037DD68, "");
strIToA(D_8037DD68, jiggyscore_total());
strcat(D_8037DD68, " JIGSAW");
if(jiggyscore_total() != 1){
strcat(D_8037DD68, "S");
}
strcat(D_8037DD68, ", ");
strIToA(D_8037DD68, notescore_getTotal());
strcat(D_8037DD68, " NOTE");
if(notescore_getTotal() != 1){
strcat(D_8037DD68, "S");
}
strcat(D_8037DD68, ".");
strcat(D_8037DD68, "");
}//L802C49AC
else{
D_8037DCCE[gamenum] = 0;
strcpy(D_8037DD48, "");
strcat(D_8037DD48, "GAME ");
switch (gamenum){
case 0:
strIToA(D_8037DD48, 1);
break;
case 1:
strIToA(D_8037DD48, 3);
break;
case 2:
strIToA(D_8037DD48, 2);
break;
}//L802C4A40
strcat(D_8037DD48, ": EMPTY");
strcpy(D_8037DD68, "");
}//L802C4A68
sp20[0] = D_8037DD48;\
sp20[1] = D_8037DD68;
func_8031877C(D_8037DCF4);
func_80318284(D_8037DCF4, 2, sp20);
gczoombox_maximize(D_8037DCF4);
gczoombox_resolve_minimize(D_8037DCF4);
}
void func_802C4AC8(s32 arg0){
func_8033D0FC(arg0);
func_802C4768(arg0);
}
void func_802C4AF0(Actor * this){
int i;
if(D_8037DCF0){
gczoombox_free(D_8037DCF0);
D_8037DCF0 = NULL;
}
if(D_8037DCF4){
gczoombox_free(D_8037DCF4);
D_8037DCF4 = NULL;
}
for(i = 0; i < 3; i++){
func_8033CFD4(i);
}
if(D_8037DD28){
func_802F9D38(D_8037DD28);
D_8037DD28 = NULL;
}
comusic_8025AB44(COMUSIC_73_GAMEBOY, 0, 4000);
func_8025AABC(COMUSIC_73_GAMEBOY);
func_8025AB00();
}
void func_802C4BB4(ActorMarker *marker){
Actor *this;
s32 sp20;
Actor *other;
f32 sp18;
sp20 = marker->unk14_20 - 0xe4;
this = marker_getActor(marker);
sp18 = this->scale;
other = func_8032813C(sp20 + 0x198, this->position, (s32)this->yaw);
other->scale = sp18;
}
void func_802C4C14(Actor *this){
int sp84;
int sp80;
s32 sp74[3];
s32 *tmp_a2; //pad70
s32 pad_6C;
s32 pad_68;
s32 sp5C[3];
s32 pad_58;
f32 sp54;
f32 sp50;
int i; //sp4C
s32 sp48;
f32 sp44;
s32 tmp_a2_2;
f32 sp34[3];
sp84 = this->marker->unk14_20 - 0xe4;
sp80 = (sp84 == D_80365E00);
sp50 = time_getDelta();
if(!D_8037DCF4)
return;
if(!this->initialized){
func_802C3C88(func_802C4BB4, this->marker);
func_802C7318(this);
this->unk130 = func_802C71F0;
if(sp84 == 0){
func_802C75A0(this, 1);
func_802C74F4(this, 0, 1.0f);
func_802C74F4(this, 1, 1.0f);
}//L802C4CD8
this->initialized = TRUE;
}//L802C4CE4
func_802C7478(this);
if(!sp80){
if(this->state != 1){
func_80328A84(this, 1);
}
}
else{//L802C4D24
func_8024E60C(0, sp74);
func_8024E55C(0, sp5C);
func_8024E71C(0, &sp54);
switch(this->state){
case 2:
case 5:
switch(sp84){
case 0://L802C4D8C
if(actor_animationIsAt(this, 0.1f))
func_8030E510(SFX_5D_BANJO_RAAOWW, 8000);
if(actor_animationIsAt(this, 0.7f))
func_8030E510(SFX_5E_BANJO_PHEWWW, 8000);
break;
case 1://L802C4DD0
if(randf() < 0.1){
// if(randf() < D_80376118){
func_8030E6A4(MIN(2.0f, randf() *3.0f) + 311.0f, 1.0f, 12000);
}
break;
case 2://L802C4E74
if(randf() < 0.03){
func_8030E6A4(0x3ed, randf()*0.3 + 0.7, 15000);
}
break;
}//L802C4ED4
break;
}//L802C4ED4
if(!func_8038AAB0()){
switch(this->state){
case 1://L802C4F10
if(sp84 == 1){
func_8030E510(SFX_136_GAMEBOY_STARTUP, 15000);
timedFunc_set_3(0.25f, comusic_8025AB44, COMUSIC_73_GAMEBOY, -1, 2000);
func_8025A58C(0, 2000);
}
else{
comusic_8025AB44(COMUSIC_73_GAMEBOY, 0, 4000);
func_8025A58C(-1, 2000);
}
if(sp84 == 2){
D_8037DD28 = func_802F9AA8(SFX_12B_BOILING_AND_BUBBLING);
func_802F9F80(D_8037DD28, 0.5f, 9000000000.0f, 0.5f);
func_802F9DB8(D_8037DD28, 0.9f, 0.9f, 0.0f);
func_802FA060(D_8037DD28, 15000, 15000, 0.0f);
}
else{
if(D_8037DD28){
func_802F9D38(D_8037DD28);
D_8037DD28 = NULL;
}
}
func_802C4768(sp84);
func_80328A84(this, 2);
break;
case 5://L802C5040
if(D_8037DD2C == 0 &&
(sp5C[0] == 1 || sp5C[1] == 1)
){
if(sp5C[0] == 1){
func_802C4AC8(sp84);
func_8025A6EC(COMUSIC_2B_DING_B, 22000);
}
func_80328A84(this, 2);
func_8031877C(D_8037DCF0);
func_80318284(D_8037DCF0, 2, &D_8037DCE0);
D_8037DD34 = 0.0f;
}
break;
case 3://L802C50C8
case 4://L802C50C8
if(animctrl_isStopped(this->animctrl)){
func_802DEB80();
if(!func_8033D1BC(sp84)){
timedFunc_set_3(0.0f, func_802E4078, MAP_85_CS_SPIRAL_MOUNTAIN_3, 0, 1);
}
else{//L802C511C
sp44 = 0.0f;
if(this->state == 4 && (sp84 == 0 || sp84 == 1))
sp44 = 0.25f;
if(func_802DA498() && func_8031FF1C(BKPROG_BD_ENTER_LAIR_CUTSCENE)){
timedFunc_set_2(sp44, func_8031FB14, 0, 0);
}
else{//L802C5188
timedFunc_set_2(sp44, func_8031F678, 0, 0);
}//L802C51A0
timedFunc_set_1(sp44, func_80335110, 1);
}//L802C51B8
this->state = 6;
}
break;
case 2://L802C51CC
if(sp74[0] == 1){
if(func_8033D1BC(sp84)){
func_8031877C(D_8037DCF0);
func_803183A4(D_8037DCF0, (&D_80365DFC)[func_8031B5B0()]);
D_8037DD2C = 1;
func_80328A84(this, 5);
}
else{//L802C5240
func_8025A6EC(COMUSIC_2C_BUZZER, 22000);
}
}
else if(sp5C[0] == 1){//L802C5250
if(func_8033D1BC(sp84)){
if(randf() < 0.1){
switch(sp84){
case 0://L802C52B8
func_8030E510(SFX_31_BANJO_OHHWAAOOO, 28000);
func_8030E540(SFX_135_CARTOONY_SPRING);
timedFunc_set_2(0.4f, func_8030E510, SFX_13A_GLASS_BREAKING_7, 0x7fff);
timedFunc_set_2(0.9f, func_8030E510, SFX_150_PORCELAIN_CRASH, 0x7fff);
timedFunc_set_2(1.0f, func_8030E510, SFX_151_CAT_MEOW, 0x7fff);
break;
case 1://L802C5320
timedFunc_set_2(0.4f, func_8030E510, SFX_31_BANJO_OHHWAAOOO, 28000);
timedFunc_set_2(0.2f, func_8030E510, SFX_E_SHOCKSPRING_BOING, 28000);
func_8030E540(SFX_2D_KABOING);
break;
case 2://L802C5364
timedFunc_set_2(0.15f, func_8030E510, SFX_32_BANJO_EGHEE, 28000);
func_8030E510(SFX_3F6_UNKNOWN, 28000);
func_8030E540(SFX_8F_SNOWBALL_FLYING);
break;
}//L802C5394
func_80328A84(this, 4);
levelSpecificFlags_set(sp84 + 0x35, 1);
}
else{//L802C53B4
func_8030E484(SFX_3EA_UNKNOWN);
func_80328A84(this, 3);
}
}else{//L802C53D0
func_8030E510(SFX_4F_BANJO_WAHOO, 28000);
func_80328A84(this, 3);
}//L802C53E8
if(sp84 == 0)
func_802C75A0(this, 2);
if(sp84 == 1)
comusic_8025AB44(COMUSIC_73_GAMEBOY, 0, 4000);
func_8025A58C(0, 0x1f4);
actor_playAnimationOnce(this);
}
else{//L802C5434
if((0.7 < ((0.0f <= sp54) ? sp54 : -sp54)) && D_8037DCEC == 0
){
tmp_a2_2 = D_80365E00;
if(sp54 < 0.0f){
D_8037DCEC = 1;
switch(D_80365E00){
case 0:
D_8037DCEC = 0;
break;
case 1:
D_80365E00 = 2;
break;
case 2:
D_80365E00 = 0;
break;
}
}
else{//L802C54D4
D_8037DCEC = 1;
switch(D_80365E00){
case 0:
D_80365E00 = 2;
break;
case 1:
D_8037DCEC = 0;
break;
case 2:
D_80365E00 = 1;
break;
}
}//L802C550C
if(D_8037DCEC){
D_8037DCE8 = tmp_a2_2;
D_8037DD30 = 0.0f;
}
}else{//L802C5530
if(((0.0f <= sp54) ? sp54 : -sp54) < 0.3){
D_8037DCEC = 0;
}
}
}//L802C556C
if(D_8037DD2C == 0){
D_8037DD34 += sp50;
if(20.0 < D_8037DD34){
func_8031877C(D_8037DCF0);
func_80318284(D_8037DCF0, 2, &D_8037DCE0);
D_8037DD34 = 0.0f;
}
}
break;
case 6://L802C55E8
break;
}
}//L802C55E8
D_8037DD30 += sp50;
sp48 = func_803097A0();
if(this->marker->unk14_21){
for(i = 0; i < 3; i++){
func_8034A174(sp48, i+5, sp34);
ml_vec3f_copy(D_80365DD0[i], sp34);
}
}
func_802BAEB4(
func_802C44EC(D_80365DD0[D_8037DCE8], D_80365DD0[D_80365E00], D_8037DD30),
func_802C44EC(D_80365E04[D_8037DCE8], D_80365E04[D_80365E00], D_8037DD30)
);
if(this->marker->unk14_21)
osViBlack(0);
}//L802C5734
}
void func_802C5740(Actor * this){
int i = func_8031B5B0();
D_8037DCE0.unk0 = (&D_80365DF4)[i];
D_8037DCE0.unk4 = (&D_80365DF8)[i];
if(!this->initialized){
func_8033CE40();
if(D_8037DCF4 == NULL){
D_8037DCF4 = gczoombox_new(0xA0, 0xc, 2, 0, NULL);
gczoombox_open(D_8037DCF4);
func_803184C8(D_8037DCF4, 30.0f, 5, 2, 0.4f, 0, 0);
}//L802C57FC
if(D_8037DCF0 == NULL){
D_8037DCF0 = gczoombox_new(0xA, 0xd, 2, 1, func_802C44D0);
func_80318284(D_8037DCF0, 2, &D_8037DCE0);
gczoombox_open(D_8037DCF0);
gczoombox_maximize(D_8037DCF0);
}//L802C5860
func_803300D8(this->marker, func_802C4AF0);
D_8037DCEC = 0;
func_8031FBF8();
func_8031FBA0();
D_8037DCE8 = 0;
D_80365E00 = 0;
D_8037DCF8[1][0] = D_80365DD0[0][0];
D_8037DCF8[1][1] = D_80365DD0[0][1];
D_8037DCF8[1][2] = D_80365DD0[0][2];
D_8037DCF8[0][0] = D_80365E04[0][0];
D_8037DCF8[0][1] = D_80365E04[0][1];
D_8037DCF8[0][2] = D_80365E04[0][2];
D_8037DD30 = 0.75f;
D_8037DD34 = func_8038AAB0(&D_80365E04[0], &D_8037DCE8) ? 20.0 : 0.0;
actor_collisionOff(this);
func_8025A6EC(COMUSIC_73_GAMEBOY, 0);
}//L802C5940
if(!func_8038AAB0()){
if(D_8037DCF4)
func_80316EF4(D_8037DCF4);
if(D_8037DCF0)
func_80316EF4(D_8037DCF0);
}
func_802C4C14(this);
}
void func_802C5994(void){
s32 sp1C = level_get();
s32 t6 = map_get() == MAP_83_CS_GAME_OVER_MACHINE_ROOM;
s32 a1 = (0 < sp1C && sp1C < 0xd);
if( a1 || t6)
{
if(D_80365E00 != -1 && !func_802E4A08() && map_get() != MAP_91_FILE_SELECT){
func_8033D17C(D_80365E00);
func_8033CFD4(D_80365E00);
}
}
}
s32 func_802C5A30(void){
return D_80365E00;
}
void func_802C5A3C(s32 arg0){
D_80365E00 = arg0;
}
void func_802C5A48(void){
D_80365E00 = -1;
}

367
src/core2/ch/ghost.c Normal file
View File

@@ -0,0 +1,367 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
typedef struct {
f32 unk0;
f32 unk4;
} ActorLocal_Core2_D4050;
void func_8035B900(Actor *this);
void func_8035BD48(Actor *this);
/* .data */
ActorAnimationInfo D_80372BE0[] ={
{0x00, 0.0f},
{ASSET_9E_ANIM_TEEHEE_IDLE, 2.0f},
{ASSET_9F_ANIM_TEEHEE_ALERTED, 1.5f},
{ASSET_AC_ANIM_TEEHEE_CHASE, 1.0f},
{ASSET_9E_ANIM_TEEHEE_IDLE, 2.0f},
{ASSET_9E_ANIM_TEEHEE_IDLE, 2.0f},
{ASSET_2AB_ANIM_TEEHEE_DIE, 1.0f}
};
ActorInfo D_80372C18 = { //TEEHEE
0x99, ACTOR_CA_TEEHEE, ASSET_3CB_MODEL_TEEHEE,
0x1, D_80372BE0,
func_8035B900, func_80326224, func_80325888,
6500, 0, 0.9f, 0
};
ActorInfo D_80372C3C = { //PURPLE_TEEHEE (inside tumblar)
0x296, ACTOR_3C1_PURPLE_TEEHEE, ASSET_564_MODEL_PURPLE_TEEHEE,
0x1, D_80372BE0,
func_8035B900, func_8035BD48, func_80325888,
6500, 0, 0.9f, 0
};
s32 D_80372C60[3] = {0x46, 0xFE, 0x46};
s32 D_80372C6C[3] = {0xFE, 0x46, 0xFE};
/* .code */
void func_8035AFE0(f32 scale, f32 pos[3], s32 cnt, enum asset_e sprite_id, s32 arg4[3]){
ParticleEmitter *pCtrl = partEmitList_pushNew(cnt);
particleEmitter_setSprite(pCtrl, sprite_id);
func_802EFFA8(pCtrl, arg4);
particleEmitter_setPosition(pCtrl, pos);
particleEmitter_setParticleSpawnPositionRange(pCtrl,
-100.0f*scale, 20.0f*scale, -100.0f*scale,
100.0f*scale, 200.0f*scale, 100.0f*scale
);
particleEmitter_setParticleAccelerationRange(pCtrl,
0.0f, -10.0f*scale, 0.0f,
0.0f, -10.0f*scale, 0.0f
);
particleEmitter_setParticleVelocityRange(pCtrl,
-100.0f*scale, -20.0f*scale, -100.0f*scale,
100.0f*scale, 100.0f*scale, 100.0f*scale
);
func_802EFB70(pCtrl, scale*0.4, scale*0.6);
func_802EFB84(pCtrl, scale*1.0, scale*1.4);
particleEmitter_setSpawnIntervalRange(pCtrl, 0.0f, 0.01f);
func_802EFEC0(pCtrl, 1.0f, 1.4f);
func_802EFA5C(pCtrl, 0.0f, 0.01f);
func_802EFA70(pCtrl, 0x10);
particleEmitter_emitN(pCtrl, cnt);
}
void func_8035B1CC(ActorMarker *this_marker, ActorMarker *other_marker){
Actor *this = marker_getActor(this_marker);
f32 sp30;
sp30 = this->scale;
func_8030E878(SFX_121_AWAWAU, 1.3f, 32000, this->position, this->scale*400.0f, this->scale*1800.0f);
func_8030E878(SFX_30_MAGIC_POOF, 1.0f, 32000, this->position, this->scale*400.0f, this->scale*1800.0f);
func_80328B8C(this, 6, 0.01f, 1);
actor_playAnimationOnce(this);
actor_collisionOff(this);
func_80326310(this);
func_8035AFE0(sp30, this->position, 8, ASSET_700_SPRITE_DUST, D_80372C60);
}
void func_8035B2C4(ActorMarker *this_marker, ActorMarker *other_marker){
Actor *this = marker_getActor(this_marker);
f32 sp30 = this->scale;
func_8030E878(SFX_121_AWAWAU, 1.3f, 32000, this->position, this->scale*400.0f, this->scale*1800.0f);
func_8030E878(SFX_30_MAGIC_POOF, 1.0f, 32000, this->position, this->scale*400.0f, this->scale*1800.0f);
func_80328B8C(this, 6, 0.01f, 1);
actor_playAnimationOnce(this);
actor_collisionOff(this);
func_8035AFE0(sp30, this->position, 8, ASSET_700_SPRITE_DUST, D_80372C6C);
}
void func_8035B3B4(ActorMarker *this_marker, ActorMarker *other_marker){
Actor *this = marker_getActor(this_marker);
this->unk60 = 1.0f;
}
int func_8035B3E4(Actor *this){
if(func_80329530(this, (s32)(this->scale*600.0f)) && func_803292E0(this))
return 1;
return 0;
}
int func_8035B444(Actor *this, f32 arg1){
int out;
func_80328FB0(this, arg1);
if(!func_80329054(this, 2) && func_80329480(this))
return 0;
return 1;
}
void func_8035B49C(Actor *this){
f32 tmp_f2;
if(this->velocity_x < this->unk1C_x){
this->velocity_x = (f64)this->velocity_x + this->scale;
}
else if(this->unk1C_x < this->velocity_x){
this->velocity_x = (f64)this->velocity_x - this->scale;
}
this->velocity_z += (this->velocity_y += (0.0f <= this->velocity_z)? -(0.1*this->scale) : 0.1*this->scale);
this->position_y = this->velocity_z + this->velocity_x;
}
void func_8035B56C(Actor *this){
f32 sp2C;
f32 plyr_pos[3];
sp2C = 2*(f64)this->scale;
player_getPosition(plyr_pos);
if(this->position_y < plyr_pos[1]){
if(this->position_y + sp2C < plyr_pos[1]){
this->position_y = this->position_y + sp2C;
this->velocity_x += sp2C;
}
else{
this->velocity_x += plyr_pos[1] - this->position_y;
this->position_y = plyr_pos[1];
}
}
else if(plyr_pos[1] < this->position_y){
if(plyr_pos[1] < this->position_y - sp2C){
this->position_y = this->position_y - sp2C;
this->velocity_x -= sp2C;
}
else{
this->velocity_x -= (this->position_y - plyr_pos[1]);
this->position_y = plyr_pos[1];
}
}
}
void func_8035B674(Actor *this){
ActorLocal_Core2_D4050 *local = (ActorLocal_Core2_D4050 *)&this->local;
func_80328B8C(this, 1, 0.01f, 1);
actor_loopAnimation(this);
local->unk0 = randf2(1.0f, 4.5f);
}
void func_8035B6CC(Actor *this){
func_80328B8C(this, 2, 0.01f, 1);
actor_playAnimationOnce(this);
this->unk28 = 1.0f;
func_8030E878(0x3F4, randf2(1.0f, 1.2f), 32000, this->position, this->scale*400.0f, this->scale*1800.0f);
}
void func_8035B75C(Actor *this){
func_80328B8C(this, 3, 0.01f, 1);
actor_loopAnimation(this);
this->unk28 = func_803203FC(0xC1) ? 0.0 : 12.0;
func_8030E878(0x3F4, randf2(1.0f, 1.2f), 32000, this->position, this->scale*400.0f, this->scale*1800.0f);
}
void func_8035B824(Actor *this){
ActorLocal_Core2_D4050 *local = (ActorLocal_Core2_D4050 *)&this->local;
func_80328B8C(this, 4, 0.01f, 1);
actor_loopAnimation(this);
func_80328CEC(this, (s32)this->yaw_moving, 0xA, 0x1E);
this->unk28 = 4.0f;
local->unk4 = randf2(2.0f, 4.5f);
}
void func_8035B8A8(Actor *this){
func_80328B8C(this, 5, 0.01f, 1);
actor_loopAnimation(this);
func_80328CEC(this, (s32)this->yaw_moving, 0xE1, 0x87);
}
void func_8035B900(Actor *this){
ActorLocal_Core2_D4050 *local = (ActorLocal_Core2_D4050 *)&this->local;
s32 sp30 = func_8023DB5C();
f32 sp2C = time_getDelta();
if(!this->unk16C_4){
this->unk16C_4 = TRUE;
marker_setCollisionScripts(this->marker, NULL, func_8035B3B4, func_8035B1CC);
this->marker->propPtr->unk8_3 = FALSE;
actor_collisionOn(this);
this->velocity_z = 0.0f;
this->unk60 = 0.0f;
this->unk1C[0] = this->position_y + this->scale*100.0f;
this->velocity_y = this->scale*2.0;
this->velocity_x = this->unk1C[0];
local->unk0 = randf2(1.0f, 4.5f);
animctrl_setTransitionDuration(this->animctrl, 0.8f);
}//L8035B9D4
if(0.0 < this->unk60 - sp2C){
this->unk60 -= sp2C;
}
else{//L8035BA08
switch(this->state){
case 1: //L8035BA30
func_8035B49C(this);
if(func_8035B3E4(this)){
func_8035B6CC(this);
}
else if(0.0 < local->unk0 - sp2C){
local->unk0 = local->unk0 - sp2C;
}
else{
func_8035B824(this);
}
break;
case 2: //L8035BA98
this->yaw_moving = func_80329784(this);
func_8035B444(this, 4.0f);
if(actor_animationIsAt(this, 0.99f)){
func_8035B75C(this);
}
break;
case 3: //L8035BAE0
func_8035B56C(this);
if((sp30 & 0x3F) == 7 && randf() < 0.7){
func_8030E878(0x3F4, randf2(1.0f, 1.2f), 32000, this->position, this->scale*400.0f, this->scale*1800.0f);
}//L8035BB6C
this->yaw_moving = func_80329784(this);
if(!func_8035B3E4(this) || !func_8035B444(this, 5.0f)){
func_8035B674(this);
}
break;
case 4: //L8035BBB0
func_8035B49C(this);
if(!func_8035B444(this, 2.0f)){
func_8035B8A8(this);
}
else if(local->unk4 - sp2C <= 0.0){
func_8035B674(this);
}
else{
local->unk4 = local->unk4 - sp2C;
}
break;
case 5: //L8035BC1C
func_8035B49C(this);
func_80328FB0(this, 3.0f);
if(func_80329480(this)){
func_8035B674(this);
}
break;
case 6: //L8035BC48
break;
}
}//L8035BC48
}
int func_8035BC5C(Actor *this, s32 target, s32 delta){
s32 done = FALSE;
s32 alpha;
if(delta < 0){
if((s32)(this->alpha_124_19 + delta) < target){
this->alpha_124_19 = target;
done = TRUE;
}
}
else{//L8035BCB8
if(target < this->alpha_124_19 + delta){
this->alpha_124_19 = target;
done = TRUE;
}
}
if(!done){
this->alpha_124_19 += delta;
}
alpha = this->alpha_124_19;
actor_setOpacity(this, alpha);
return done;
}
void func_8035BD48(Actor *this){
if(!this->unk16C_4){
this->unk16C_4 = TRUE;
this->marker->propPtr->unk8_3 = FALSE;
actor_collisionOn(this);
marker_setCollisionScripts(this->marker, NULL, func_8035B3B4, func_8035B2C4);
mapSpecificFlags_set(3, FALSE);
mapSpecificFlags_set(4, FALSE);
if(map_get() == MAP_24_MMM_TUMBLARS_SHED){
if( jiggyscore_isSpawned(JIGGY_62_MMM_TUMBLAR)
|| jiggyscore_isCollected(JIGGY_62_MMM_TUMBLAR)
){
marker_despawn(this->marker);
}
else{//L8035BE04
func_80328B8C(this, 1, 0.01f, 1);
actor_setOpacity(this, 0);
}
}
else{//L8035BE2C
func_80328B8C(this, 3, 0.01f, 1);
actor_setOpacity(this, 0xff);
}
}//L8035BE50
switch(this->state){
case 1: //L8035BE78
actor_collisionOff(this);
if(mapSpecificFlags_getClear(4)){
marker_despawn(this->marker);
}
else if(mapSpecificFlags_getClear(3)){
func_80328B8C(this, 3, 0.01f, 1);
}
break;
case 3: //L8035BECC
this->unk58_0 = TRUE;
actor_collisionOn(this);
if(mapSpecificFlags_getClear(4)){
this->unk38_0 = TRUE;
func_8035B2C4(this->marker, NULL);
}
else{//L8035BF14
if(this->alpha_124_19 == 0xFF || func_8035BC5C(this, 0xff, 0xA)){
func_80343DEC(this);
}
if((func_8023DB5C() &0x3F) == 7 && randf() < 0.7){
func_8030E878(0x3f4, randf2(1.0f, 1.2f), 32000, this->position, this->scale*400.0f, this->scale*1800.0f);
}
}
break;
case 6: //L8035BFD4
if(func_8035BC5C(this, 0, -7)){
this->unk58_0 = FALSE;
this->unk48 = 0.0f;
func_80343DEC(this);
if(this->unk38_0){
marker_despawn(this->marker);
}
else{
func_80328B8C(this, 1, 0.01f, 1);
timedFunc_set_2(randf2(5.0f, 10.0f), mapSpecificFlags_set, 3, TRUE);
}
}
break;
}//L8035C06C
}

93
src/core2/ch/gloop.c Normal file
View File

@@ -0,0 +1,93 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
Actor *chgloop_draw(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx);
void chgloop_update(Actor *this);
/* .data */
ActorAnimationInfo chgloop_animations[] ={
{0x00, 0.0f},
{ASSET_CA_ANIM_GLOOP_SWIMMING, 2.0f},
{ASSET_CA_ANIM_GLOOP_SWIMMING, 1.0f},
{ASSET_CA_ANIM_GLOOP_SWIMMING, 0.4f},
{ASSET_CB_ANIM_GLOOP_BLOWING_BUBBLE, 1.5f},
{ASSET_CA_ANIM_GLOOP_SWIMMING, 2.0f},
{ASSET_CA_ANIM_GLOOP_SWIMMING, 2.0f}
};
ActorInfo chGloop = {
MARKER_6A_GLOOP, ACTOR_E6_GLOOP, ASSET_372_MODEL_GLOOP,
0x2, chgloop_animations,
chgloop_update, chgloop_update, chgloop_draw,
1900, 0, 0.0f, 0
};
/* .code */
Actor *chgloop_draw(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx){
Actor *this = func_80325888(marker, gfx, mtx, vtx);
if(!marker->unk14_21)
return this;
func_8034A174(func_80329934(), 5, this->unk1C);
return this;
}
void chgloop_spawnBubble(s32 arg0, s32 arg1, s32 arg2, s32 arg3){
f32 sp1C[3];
sp1C[0] = reinterpret_cast(f32, arg0);
sp1C[1] = reinterpret_cast(f32, arg1);
sp1C[2] = reinterpret_cast(f32, arg2);
func_8032813C(ACTOR_E7_GLOOP_BUBBLE, sp1C, (s32)reinterpret_cast(f32, arg3));
}
void chgloop_update(Actor *this){
f32 sp34[3];
if(!this->initialized){
actor_collisionOff(this);
this->initialized = TRUE;
this->marker->propPtr->unk8_3 = TRUE;
}
func_80326224(this);
switch(this->state){
case 2://L802D14DC
actor_loopAnimation(this);
if(this->unk54 != 0.0f)
func_80328A84(this, 4);
if( !mapSpecificFlags_get(2)
&& func_80329530(this, 350)
&& func_80311480(ASSET_D34_TEXT_GLOOP_MEET, 0, NULL, NULL, NULL, NULL)
){
mapSpecificFlags_set(2, TRUE);
}
break;
case 4://L802D1558
actor_playAnimationOnce(this);
if(this->unk54 == 0.0f)
func_80328A84(this, 2);
if(actor_animationIsAt(this, 0.6f)){
if(this->marker->unk14_21){
sp34[0] = this->unk1C[0];
sp34[1] = this->unk1C[1];
sp34[2] = this->unk1C[2];
}
else{
sp34[0] = this->position[0];
sp34[1] = this->position[1];
sp34[2] = this->position[2];
}
if(func_80329530(this, 1900)){
func_802C3F04(chgloop_spawnBubble, reinterpret_cast(s32, sp34[0]), reinterpret_cast(s32, sp34[1]), reinterpret_cast(s32, sp34[2]), reinterpret_cast(s32, this->yaw));
}
func_8030E9C4(SFX_3ED, randf()/2 + 0.6, 32000, this->position, 100.0f, 3000.0f);
}
break;
}//L802D1670
}

376
src/core2/ch/icecube.c Normal file
View File

@@ -0,0 +1,376 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
#define _HorzDist3v(v1, v2) ((v1[0]-v2[0])*(v1[0]-v2[0]) + (v1[2]-v2[2])*(v1[2]-v2[2]))
extern void func_802D729C(Actor *, f32);
extern f32 func_80257204(f32, f32, f32, f32);
void chicecube_update(Actor *this);
Actor *chicecube_draw(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx);
/* .data */
ActorAnimationInfo D_80372B50[] = {
{0x000, 0.0f},
{ASSET_233_ANIM_ICECUBE, 999999.0f},
{ASSET_233_ANIM_ICECUBE, 1.2f},
{ASSET_233_ANIM_ICECUBE, 999999.0f},
{ASSET_233_ANIM_ICECUBE, 999999.0f},
{ASSET_233_ANIM_ICECUBE, 1.2f}
};
ActorInfo D_80372B80 = {
0x250, 0x37D, ASSET_504_MODEL_ICECUBE,
1, D_80372B50,
chicecube_update, func_80326224, chicecube_draw,
0, 0, 0.0f, 0
};
ActorInfo D_80372BA4 = {
0x25F, 0x3A0, ASSET_504_MODEL_ICECUBE,
1, D_80372B50,
chicecube_update, func_80326224, chicecube_draw,
0, 0, 0.0f, 0
};
s32 D_80372BC8[3] = {220, 220, 230};
s32 D_80372BD4[3] = {200, 200, 255};
/*.code */
Actor *chicecube_draw(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx){
Actor *actor = marker_getActor(marker);
func_8033A45C(3, actor->unk38_31);
actor = func_80325888(marker, gfx, mtx, vtx);
return actor;
}
int func_80359DF4(Actor *this, s32 arg1){
if(func_80329530(this, arg1) && func_803292E0(this))
return 1;
return 0;
}
int func_80359E38(Actor *this, s32 arg1, s32 arg2){
int sp1C = 0;
if(arg1 < this->alpha_124_19 + arg2){
this->alpha_124_19 = arg1;
sp1C = 1;
}
else{
this->alpha_124_19 += arg2;
}
actor_setOpacity(this, this->alpha_124_19);
return sp1C;
}
int func_80359EBC(Actor *this, s32 arg1, s32 arg2){
int sp1C = 0;
if((this->alpha_124_19 - arg2) < arg1){
this->alpha_124_19 = arg1;
sp1C = 1;
}
else{
this->alpha_124_19 -= arg2;
}
actor_setOpacity(this, this->alpha_124_19);
return sp1C;
}
int func_80359F40(Actor *this, f32 arg1[3]){
f32 sp24;
f32 sp20;
sp24 = func_80257204(this->position[0], this->position[2], arg1[0], arg1[2]);
if((func_8023DB5C() & 0xF) == 4){
this->velocity[2] = (f32)randi2(-45, 45);
}
sp20 = this->yaw;
sp24 += this->velocity[2];
this->yaw = sp24;
if(func_80329030(this, 0)){
this->yaw = sp20;
return 1;
}
else{
this->yaw = sp20;
return 0;
}
}
int func_80359FEC(f32 arg0[3], f32 arg1[3], s32 arg2){
if(_HorzDist3v(arg0, arg1) < arg2*arg2)
return 1;
return 0;
}
void func_8035A04C(f32 position[3], s32 cnt, enum asset_e model_id, f32 scale){
ParticleEmitter *pCtrl = partEmitList_pushNew(cnt);
particleEmitter_setModel(pCtrl, model_id);
particleEmitter_setPosition(pCtrl, position);
particleEmitter_setParticleSpawnPositionRange(pCtrl, -100.0f*scale, 0.0f, -100.0f*scale, 100.0f*scale, 200.0f*scale, 100.0f*scale);
particleEmitter_setParticleAccelerationRange(pCtrl, 0.0f, -1000.0f, 0.0f, 0.0f, -1000.0f, 0.0f);
particleEmitter_setParticleVelocityRange(pCtrl, -400.0f*scale, 450.0f*scale, -400.0f*scale, 400.0f*scale, 600.0f*scale, 400.0f*scale);
func_802EFE24(pCtrl, 100.0f*scale, 100.0f*scale, 100.0f*scale, 250.0f*scale, 250.0f*scale, 250.0f*scale);
func_802EFB70(pCtrl, scale*0.2, scale*0.4);
particleEmitter_setSpawnIntervalRange(pCtrl, 0.0f, 0.02f);
func_802EFEC0(pCtrl, 2.2f, 2.2f);
func_802EFA5C(pCtrl, 0.0f, 0.3f);
particleEmitter_emitN(pCtrl, cnt);
}
void func_8035A228(f32 position[3], s32 cnt, enum asset_e sprite_id, f32 scale){
ParticleEmitter *pCtrl = partEmitList_pushNew(cnt);
func_802EFFA8(pCtrl, D_80372BC8);
particleEmitter_setSprite(pCtrl, sprite_id);
particleEmitter_setPosition(pCtrl, position);
particleEmitter_setParticleSpawnPositionRange(pCtrl, -50.0f*scale, 0.0f, -50.0f*scale, 50.0f*scale, 200.0f*scale, 50.0f*scale);
particleEmitter_setParticleAccelerationRange(pCtrl, 0.0f, -10.0f, 0.0f, 0.0f, -10.0f, 0.0f);
particleEmitter_setParticleVelocityRange(pCtrl, -280.0f*scale, 0.0f, -280.0f*scale, 280.0f*scale, 280.0f*scale, 280.0f*scale);
func_802EFB70(pCtrl, scale*0.6, scale*0.8);
func_802EFB84(pCtrl, scale*1.0, scale*1.4);
particleEmitter_setSpawnIntervalRange(pCtrl, 0.0f, 0.01f);
func_802EFEC0(pCtrl, 1.2f, 1.8f);
func_802EFA5C(pCtrl, 0.0f, 0.01f);
particleEmitter_emitN(pCtrl, cnt);
}
void func_8035A3F8(f32 position[3], s32 cnt, enum asset_e sprite_id, f32 scale){
ParticleEmitter *pCtrl = partEmitList_pushNew(cnt);
func_802EFFA8(pCtrl, D_80372BD4);
particleEmitter_setSprite(pCtrl, sprite_id);
particleEmitter_setPosition(pCtrl, position);
particleEmitter_setParticleAccelerationRange(pCtrl, 0.0f, -10.0f, 0.0f, 0.0f, -10.0f, 0.0f);
particleEmitter_setParticleVelocityRange(pCtrl, -60.0f*scale, 0.0f, -60.0f*scale, 60.0f*scale, 60.0f*scale, 60.0f*scale);
func_802EFB70(pCtrl, scale*0.4, scale*0.6);
func_802EFB84(pCtrl, scale*0.8, scale*1.2);
particleEmitter_setSpawnIntervalRange(pCtrl, 0.0f, 0.01f);
func_802EFEC0(pCtrl, 0.5f, 0.7f);
func_802EFA5C(pCtrl, 0.0f, 0.3f);
func_802EFA70(pCtrl, 4);
particleEmitter_emitN(pCtrl, cnt);
}
void func_8035A594(f32 position[3], f32 arg1, f32 arg2){
int i;
int v0;
for(i = 60; i != 380; i+=160){
v0 = i;
if(i > 360)
v0 = i - 360;
if(v0 < arg1 && arg2 < v0){
func_8030E878(SFX_28_RUSTLING_NOISE, randf2(1.6f, 1.7f), 17000, position, 500.0f, 1000.0f);
}
}
}
void func_8035A694(Actor *this){
f32 sp3C;
f32 sp38;
s32 tmp_v0;
f32 sp28[3];
sp3C = this->yaw;
sp38 = this->unk28*1.5 + 1.0;
tmp_v0 = func_8023DB5C();
this->yaw += sp38;
if(360.0f < this->yaw)
this->yaw -= 360.0f;
if(this->marker->unk14_21 && !(tmp_v0 & 1)){
func_8034A174(this->marker->unk44, 5, sp28);
func_8035A3F8(sp28, 1, ASSET_70D_SPRITE_SMOKE_1, this->scale);
}
func_8035A594(this->position, this->yaw, sp3C);
}
void __chicecube_spawnHalfCubes(ActorMarker *marker){
Actor *actor = marker_getActor(marker);
Actor *other;
f32 sp54[3];
int i;
f32 pad[1];
sp54[0] = actor->position[0];
sp54[1] = actor->position[1];
sp54[2] = actor->position[2];
sp54[1] += 100.0f;
for(i = 0; i < 2; i++){//L8035A7FC
func_802C8F70((i & 1)? actor->yaw : actor->yaw + 180.0f);
other = func_802C937C(0x21, sp54);
other->unkF4_8 = 1; //don't spawn more
other->scale = randf2(0.5f, 0.6f)*actor->scale;
actor->yaw = randi2(0, 359);
}
if(marker);
}
//__chicecube_ow
void __chicecube_ow(ActorMarker *marker, ActorMarker *other_marker){
Actor *actor = marker_getActor(marker);
FUNC_8030E8B4(SFX_1D_HITTING_AN_ENEMY_1, 0.9f, 22000, actor->position, 1500, 3000);
actor->velocity[1] = 0.8f;
actor->unk28 = 0.0f;
}
//__chicecube_die
void __chicecube_die(ActorMarker *marker, ActorMarker *other_marker){
Actor *actor = marker_getActor(marker);
FUNC_8030E8B4(SFX_B6_GLASS_BREAKING_1, 1.0f, 32000, actor->position, 1500, 4500);
actor->velocity[1] = 0.0f;
func_8035A04C(actor->position, 12, ASSET_505_MODEL_ICECUBE_CHUNK, actor->scale);
func_8035A228(actor->position, 6, ASSET_700_SPRITE_DUST, actor->scale);
if(actor->unkF4_8 != 1){
func_802C3C88(__chicecube_spawnHalfCubes, actor->marker);
}
marker_despawn(actor->marker);
}
void func_8035A998(Actor *this){
func_80328B8C(this, 1, 0.0001f, 1);
actor_playAnimationOnce(this);
this->unk38_31 = 0;
}
void func_8035A9E0(Actor *this){
func_80328B8C(this, 3, animctrl_getAnimTimer(this->animctrl), 1);
actor_loopAnimation(this);
this->unk38_31 = 1;
this->unk28 = 0.0f;
}
void func_8035AA40(Actor *this){
func_80328B8C(this, 5, 0.9999f, 0);
actor_playAnimationOnce(this);
this->unk38_31 = 1;
}
void chicecube_update(Actor *this){
f32 sp3C = time_getDelta();
f32 sp30[3];
if(map_get() == MAP_27_FP_FREEZEEZY_PEAK){
if(func_8038BFA0()){
actor_collisionOff(this);
this->unk58_0 = FALSE;
return;
}
actor_collisionOn(this);
this->unk58_0 = TRUE;
}//L8035AAF4
if(!actor_playerIsWithinDist(this, 3000))
return;
func_802D729C(this, 3.4 * this->scale);
if(!this->unk16C_4){
this->unk16C_4 = TRUE;
marker_setCollisionScripts(this->marker, __chicecube_ow, NULL, __chicecube_die);
this->marker->propPtr->unk8_3 = FALSE;
actor_collisionOff(this);
this->alpha_124_19 = 0x50;
actor_setOpacity(this, this->alpha_124_19);
this->unk38_31 = 0;
this->unk60 = 1.0f;
}//L8035ABC0
if(this->unk60 <= 0.0){
if(-99999.0 != this->unk60){
this->unk60 = -99999.0f;
actor_collisionOn(this);
this->unk1C[0] =this->position[0];
this->unk1C[1] =this->position[1];
this->unk1C[2] =this->position[2];
this->velocity[0] = this->yaw;
}
}
else{//L8035AC3C
this->unk60 -= sp3C;
}
if(0.0 >= this->velocity[1]){
this->velocity[1] = 0.0f;
}
else{
this->velocity[1] -= sp3C;
return;
}
switch(this->state){
case 1: // L8035AC9C
animctrl_setAnimTimer(this->animctrl, 0.0f);
if( func_80359DF4(this, 900)
|| (this->unkF4_8 == 2 && func_803203FC(0xC1))
){
func_80328B8C(this, 2, 0.0001f, 1);
actor_playAnimationOnce(this);
this->unk38_31 = 0x1;
}
break;
case 2: // L8035AD10
if(actor_animationIsAt(this, 0.1f)){
FUNC_8030E8B4(SFX_112_TINKER_ATTENTION, 1.3f, 23000, this->position, 1500, 4500);
}
if( func_80359E38(this, 0xff, 0xa)
&& 0.98 < animctrl_getAnimTimer(this->animctrl)
){
func_8035A9E0(this);
}
break;
case 3: // L8035AD88
animctrl_setAnimTimer(this->animctrl, 0.999f);
if(this->unk28 + 0.28 < 18.0){
this->unk28 = this->unk28 + 0.28;
}
else{
this->unk28 = 18.0f;
}
func_8035A694(this);
if(!func_80359DF4(this, 1300)){
func_80328B8C(this, 4, animctrl_getAnimTimer(this->animctrl), 1);
actor_loopAnimation(this);
this->unk38_31 = 1;
}
else{
player_getPosition(sp30);
if(!func_80359F40(this, sp30)){
func_8035A998(this);
}
}
break;
case 4: // L8035AE64
animctrl_setAnimTimer(this->animctrl, 0.999f);
if(this->unk28 - 0.28 > 8.0)
this->unk28 = this->unk28 - 0.28;
else
this->unk28 = 8.0f;
func_8035A694(this);
if(func_80359DF4(this, 900)){
func_8035A9E0(this);
}
else if(func_80359FEC(this->position, this->unk1C, 0x14)){//L8035AEEC
if(func_803294F0(this, 0xa, (s32)this->velocity[0])){
func_8035AA40(this);
}
}
else{//L8035AF38
if(!func_80359F40(this, this->unk1C)){
func_8035AA40(this);
}
}
break;
case 5: // L8035AF58
if(actor_animationIsAt(this, 0.25f)){
FUNC_8030E8B4(SFX_112_TINKER_ATTENTION, 1.3f, 23000, this->position, 1500, 4500);
}
if( animctrl_getAnimTimer(this->animctrl) < 0.1
&& func_80359EBC(this, 0x50, 0xA)
){
func_8035A998(this);
}
break;
}
}

212
src/core2/ch/jiggy.c Normal file
View File

@@ -0,0 +1,212 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern void func_802BE720(void);
extern f32 func_8033A244(f32);
extern void func_8033A280(f32);
extern u8 D_80329904[];
typedef struct chjiggy_s{
u32 unk0;
u32 index;
} ActorLocal_Jiggy;
Actor *func_802C41D8(f32, f32, f32);
void func_802C7AF8(u32 x, u32 y, u32 z, u32 arg3);
Actor *func_802C7D0C(ActorMarker *this, Gfx **gdl, Mtx **mptr, Vtx **arg3);
void func_802C7D98(Actor * arg0);
void func_802C7DC0(Actor *this);
int func_802C8088(Actor *this);
/* .data */
ActorAnimationInfo D_80366290[] = {
{0, 0.0f},
{0, 0.0f},
{0, 0.0f}
};
ActorInfo D_803662A8 = {
0x52, ACTOR_46_JIGGY, ASSET_35F_MODEL_JIGGY,
1, D_80366290,
func_802C7DC0, func_802C7D98, func_802C7D0C,
0, 0, 0.9f, 0
};
/* .code */
enum jiggy_e func_802C7A30(Actor *this){
s32 id;
s32 sp18[3];
id = map_get();
sp18[0] = (s32)this->position[0];
sp18[1] = (s32)this->position[1];
sp18[2] = (s32)this->position[2];
id = func_80307164(sp18);
if( id < 0){
return 0;
}
else{
return func_80306DBC(id) + 1;
}
}
void func_802C7AB0(ActorMarker * arg0, u32 arg1){
func_8030E6D4(SFX_30_MAGIC_POOF);
func_8025A6EC(COMUSIC_3C_MINIGAME_LOSS, 0x7FF8);
mapSpecificFlags_set(arg1, 1);
marker_despawn(arg0);
}
void func_802C7AF8(u32 x, u32 y, u32 z, u32 arg3){
func_802C3F04((GenMethod_4)func_802C41D8, ACTOR_4C_STEAM, x, y, z);
func_802C3F04((GenMethod_4)func_802C41D8, ACTOR_14F_DESTROYED_JIGGY, x, y, z);
mapSpecificFlags_set(arg3, 1);
}
void func_802C7B6C(u32 arg0){
mapSpecificFlags_set(arg0, 0);
}
void func_802C7B8C(Actor *this, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6){
if( !mapSpecificFlags_get(arg1)
&& mapSpecificFlags_get(arg2)
&& item_getCount(ITEM_0_HOURGLASS_TIMER) == 0
){
func_8028FCC8(1);
actor_collisionOff(this);
func_802BAFE4(arg3);
func_80356520(arg6);
timedFunc_set_4(0.6f, (TFQM4)func_802C7AF8, (s32)this->position[0], (s32)this->position[1], (s32)this->position[2], arg4);
timedFunc_set_2(0.6f, (TFQM2)func_802C7AB0, (s32)this->marker, arg5);
timedFunc_set_0(1.0f, (TFQM0)func_802BE720);
timedFunc_set_1(3.9f, (TFQM1)func_802C7B6C, arg4);
mapSpecificFlags_set(arg1, 1);
}
}
//chjiggy_updateRotate
void func_802C7CA4(Actor *this){
f32 delta = time_getDelta();
this->yaw += delta * 230.0f;
if(360.0f <= this->yaw){
this->yaw -= 360.0f;
}
this->yaw_moving = this->yaw;
}
//chjiggy_draw
Actor *func_802C7D0C(ActorMarker *this, Gfx **gdl, Mtx **mptr, Vtx **arg3){
Actor * thisActor = marker_getActor(this);
ActorLocal_Jiggy *local = (ActorLocal_Jiggy *)&thisActor->local;
u32 jiggyId;
if(!local->unk0){
jiggyId = func_802C8088(thisActor);
if((jiggyId == JIGGY_1C_CC_RINGS) || (jiggyId == JIGGY_1D_CC_SLOW_SAWBLADES)){
func_8033A280(10.0f);
func_8033A244(30000.0f);
}
thisActor = func_80325888(this, gdl, mptr, arg3);
}
return thisActor;
}
void func_802C7D98(Actor * arg0){
func_80343DEC(arg0);
func_802C7CA4(arg0);
}
//chjiggy_update
void func_802C7DC0(Actor *this){
ActorLocal_Jiggy *local = (ActorLocal_Jiggy *)&this->local;
int i;
if(this->marker->unk14_21){
for(i = 0; i < 4; i++){
if(randf() < 0.015){
func_8033E73C(this->marker, i + 5, &D_80329904);
func_8033E3F0(8, 1);
}
}
}//L802C7E44
switch(this->state){
case 1: //L802C7E68
local->unk0 = 0;
if(local->index == 0)
local->index = func_802C7A30(this);
if(jiggyscore_isCollected(local->index)){
marker_despawn(this->marker);
}
else{
func_80328A84(this, 2);
switch(func_802C8088(this)){
case JIGGY_17_CC_CLANKER_RAISED: //L802C7EF8
case JIGGY_49_CCW_EYRIE:// L802C7EF8
this->marker->unk40_21 = 1;
break;
case JIGGY_36_LAIR_TTC_WITCH_SWITCH:// L802C7F0C
this->unk44_14 = func_80341F2C(0x20A);
this->unk48 = 0.0f;
this->unk4C = 300.0f;
this->marker->unk2C_2 = 1;
this->unk54 = 0.0f;
func_80343DEC(this);
func_802C7CA4(this);
break;
case JIGGY_3E_GV_GRABBA:// L802C7F6C
case JIGGY_4D_CCW_FLOWER:// L802C7F6C
this->unk124_6 = 0;
break;
case JIGGY_41_GV_MAZE:// L802C7F7C
this->marker->unk14_10 = 0x1E;
break;
case JIGGY_13_TTC_LOCKUP: //L802C7F94
this->marker->unk14_10 = 0x28;
break;
}
}
break;
case 2: //L802C7FAC
func_802C7CA4(this);
switch(func_802C8088(this)){
case JIGGY_20_BGS_ELEVATED_WALKWAY: //L802C7FE8
func_802C7B8C(this, 4, 3, 0xD, 5, 2, 0xae);
break;
case JIGGY_25_BGS_MAZE://L802C8018
func_802C7B8C(this, 0xd, 0xc, 0x1e, 9, 0xb, 0xaf);
break;
case JIGGY_2F_FP_XMAS_TREE://L802C8048
if(levelSpecificFlags_get(0x29))
actor_collisionOn(this);
else
actor_collisionOff(this);
break;
}
break;
}//L802C8074
}
//chjiggy_getId
int func_802C8088(Actor *this){
ActorLocal_Jiggy *local = (ActorLocal_Jiggy *)&this->local;
return local->index;
}
void func_802C8090(Actor * this){
ActorLocal_Jiggy *local = (ActorLocal_Jiggy *)&this->local;
local->unk0 = 1;
actor_collisionOff(this);
}
//chjiggy_setId
void func_802C80B4(Actor *this, u32 id){
ActorLocal_Jiggy *local = (ActorLocal_Jiggy *)&this->local;
local->index = id;
}

106
src/core2/ch/jigsawdance.c Normal file
View File

@@ -0,0 +1,106 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern f32 func_8028EBA4();
Actor *func_802C80C0(ActorMarker *this, Gfx **gdl, Mtx **mptr, Vtx **arg3);
void func_802C811C(Actor * this);
/* .data */
ActorAnimationInfo D_803662D0[] = {
{0x00, 0.0f},
{0x00, 2.0f},
{0x76, 1.5f},
{0x76, 1.5f},
{0x30, 5.0f},
{0x00, 2.0f}
};
ActorInfo D_80366300 = {0x68, 0x5A, 0x35E,
1, D_803662D0,
func_802C811C, func_80326224, func_802C80C0,
0, 0, 0.0f, 0
};
/* .code */
Actor *func_802C80C0(ActorMarker *this, Gfx **gdl, Mtx **mptr, Vtx **arg3){
Actor *thisActor = marker_getActor(this);
if(!thisActor->initialized){
thisActor->initialized = 1;
return thisActor;
}
else{
return func_80325888(this, gdl, mptr, arg3);
}
}
void func_802C811C(Actor * this){
ActorAnimCtrl *plyrMvmt;
this->marker->collidable = 0;
switch(this->state){
case 1:
break;
case 2:
player_getPosition(this->position);
this->yaw = func_8028EBA4();
plyrMvmt = player_getAnimCtrlPtr();
animctrl_setSmoothTransition(this->animctrl, 0);
animctrl_setIndex(this->animctrl, animctrl_getIndex(plyrMvmt));
func_8028774C(this->animctrl,animctrl_getAnimTimer(plyrMvmt));
animctrl_setDuration(this->animctrl, 1000.0f);
func_802875AC(this->animctrl, "chjigsawdance.c", 0x59);
break;
case 3:
plyrMvmt = player_getAnimCtrlPtr();
animctrl_setSmoothTransition(this->animctrl, 0);
func_8028774C(this->animctrl,animctrl_getAnimTimer(plyrMvmt));
animctrl_setDuration(this->animctrl, 1000.0f);
func_802875AC(this->animctrl, "chjigsawdance.c", 0x62);
break;
case 4:
player_getPosition(this->position);
this->yaw = func_8028EBA4();
plyrMvmt = player_getAnimCtrlPtr();
animctrl_setSmoothTransition(this->animctrl, 0);
func_8028774C(this->animctrl,animctrl_getAnimTimer(plyrMvmt));
animctrl_setDuration(this->animctrl, 1000.0f);
func_802875AC(this->animctrl, "chjigsawdance.c", 0x6e);
break;
case 5:
this->marker->propPtr->unk8_4 = 0;
break;
}
}
void func_802C82C0(Actor * this, u32 arg1){
switch(arg1){
case 3:
if(this->state == 1){
func_80328A84(this, 2);
animctrl_setPlaybackType(this->animctrl, ANIMCTRL_ONCE);
}
break;
case 2:
func_80328A84(this, 3);
break;
case 1:
func_80328A84(this, 4);
break;
case 4:
player_getPosition(this->position);
this->yaw = func_8028EBA4();
animctrl_setSmoothTransition(this->animctrl, 0);
func_8028774C(this->animctrl, animctrl_getAnimTimer(player_getAnimCtrlPtr()));
animctrl_setDuration(this->animctrl, 1000.0f);
func_802875AC(this->animctrl, "chjigsawdance.c", 0x97);
break;
case 5:
func_80328A84(this, 5);
this->marker->propPtr->unk8_4 = 0;
break;
}
}

321
src/core2/ch/jinjo.c Normal file
View File

@@ -0,0 +1,321 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern void func_80328B8C(Actor *, s32, f32 , s32);
extern f32 func_80309B24(f32*);
extern void func_80329904(ActorMarker*, s32, f32*);
extern void func_80326310(Actor *);
extern void func_8032BB88(Actor *, s32, s32);
void func_802CDD78(Actor *this);
/* .data */
extern ActorAnimationInfo D_803671B0[];
extern ActorInfo D_80367200 = { 0x5A, 0x60, 0x3C0, 0x1, D_803671B0, func_802CDD78, func_80326224, func_80325888, 0, 0, 0.0f, 0};
extern ActorInfo D_80367224 = { 0x5B, 0x62, 0x3C2, 0x1, D_803671B0, func_802CDD78, func_80326224, func_80325888, 0, 0, 0.0f, 0};
extern ActorInfo D_80367248 = { 0x5E, 0x5E, 0x3BB, 0x1, D_803671B0, func_802CDD78, func_80326224, func_80325888, 0, 0, 0.0f, 0};
extern ActorInfo D_8036726C = { 0x5D, 0x61, 0x3C1, 0x1, D_803671B0, func_802CDD78, func_80326224, func_80325888, 0, 0, 0.0f, 0};
extern ActorInfo D_80367290 = { 0x5C, 0x5F, 0x3BC, 0x1, D_803671B0, func_802CDD78, func_80326224, func_80325888, 0, 0, 0.0f, 0};
/*.rodata */
//jumptable D_80376560
extern f64 D_80376578; //45.0
extern f64 D_80376580; //182.04444
extern f64 D_803765A8; //0.015
extern f64 D_803765B0; //0.8
extern f64 D_803765B8; //0.3
extern f64 D_803765C0; //0.2
extern f64 D_803765C8; //0.9
//0.1
//.rodata end 803765d0
s32 func_802CDB50(s32 arg0){
switch(arg0){
case 0x5A:
return 0xD98;
case 0x5B:
return 0xD99;
case 0x5C:
return 0xD9b;
case 0x5d:
return 0xD9a;
case 0x5e:
return 0xD97;
}
return 0;
}
void func_802CDBA8(ActorMarker *this, s32 arg1){
Actor *actorPtr = marker_getActor(this);
ActorLocal_Jinjo *localPtr = &actorPtr->jinjo;
if(actorPtr->state < 5){
if(!func_8031FF1C(BKPROG_E_JINJO_TEXT)){
func_80311480(func_802CDB50(actorPtr->marker->unk14_20), 4, 0, 0, 0, 0);
func_80320004(BKPROG_E_JINJO_TEXT, 1);
}
func_80328B8C(actorPtr, 6, 0.0f , -1);
if(func_803463D4(ITEM_12_JINJOS, 1 << (this->unk14_20 + 6) ) == 0x1f)
localPtr->unk4 = 1;
actor_loopAnimation(actorPtr);
this->collidable = 0;
}
}
void func_802CDC9C(Actor *this, s16 arg1){
f32 tmpf;
tmpf = this->yaw;
tmpf -= time_getDelta()*arg1/45.0;
if(tmpf >= 360.0f)
tmpf -= 360.0f;
else if (tmpf < 0.0f)
tmpf += 360.0f;
this->yaw = tmpf;
}
void func_802CDD3C(Actor * this){
ActorLocal_Jinjo *localPtr = &this->jinjo;
if(localPtr->unkC != 0){
func_802F9D38(localPtr->unkC);
localPtr->unkC = 0;
}
}
#ifdef NONMATCHING
void func_802CDD78(Actor * this){
f32 sp7C[3];
f32 sp70[3];
f32 sp6C;
f32 sp68; //unused??
s16 sp66;
s16 sp64;
s32 sp60;
// f32 sp5C;
ActorLocal_Jinjo *local; //= &this->jinjo; //sp34
f32 sp58 = time_getDelta();
int sp50;
//f32 sp4C; //unused
f32 sp40[3];
//s32 sp3C;
//s32 sp38;
f32 *sp30;
f32 tmp_f0;
s32 i;
local = &this->jinjo;
if(!this->initialized){
this->initialized = 1;
local->unk0 = 1;
local->unk4 = 0;
local->unk8 = (this->position_y < func_80309B24(this->position));
this->marker->unkC = func_802CDBA8;
func_803300D8(this->marker, func_802CDD3C);
if(func_803203FC(0xc1)){
marker_despawn(this->marker);
}
}//L802CDE24
sp30 = this->position;
func_8028E964(sp7C);
func_80257F18(sp30, sp7C, &sp6C);
sp64 = (this->yaw * 182.04444);
sp66 = sp64 - (s32)(sp6C*182.04444);
sp60 = func_8028AED4(sp30, 55.0f);
switch(this->state){
case 1:
if(randf() < 0.015){
if(sp60){
func_80328B8C(this, 3, 0.0f, -1);
}else{
func_80328B8C(this, 2, 0.0f, -1);
}
actor_playAnimationOnce(this);
}//L802CDF24
break;
case 2: /* 46FA0 802CDF30 3C053F7D */
case 3:
if(actor_animationIsAt(this, 0.99f)){
func_80328B8C(this, 1, 0.0f, -1);
}
break;
case 4: /* 46FD8 802CDF68 3C053F7D */
if(actor_animationIsAt(this, 0.99f)){
func_80328B8C(this, 1, 0.0f, -1);
}else{//L802CDF9C
tmp_f0 = this->yaw;
if(sp66 >= 0){
tmp_f0 -= 80.0f * sp58;
}
else{//L802CDFBC
tmp_f0 += 80.0f * sp58;
}//L802CDFD0
if(tmp_f0 >= 360.0f)
tmp_f0 -= 360.0f;
else if(tmp_f0 < 0.0f)
tmp_f0 += 360.0f;
this->yaw = tmp_f0;
}//L802CE018
break;
case 6:/* 47094 802CE024 02002025 */
func_802CDC9C(this, sp66);
if(actor_animationIsAt(this, 0.0f) && --(local->unk0) == 0){
func_80328B8C(this, 7, 0.0f, -1);
actor_playAnimationOnce(this);
if(local->unk4){
sp40[0] = this->position_x;
sp40[1] = this->position_y;
sp40[2] = this->position_z;
sp40[1] += 50.0f;
jiggySpawn(10*level_get()-9, sp40);
}//L802CE0CC
func_8024BD08(0);
func_8032BB88(this, 0, 4000);
if(local->unk4){
func_8025A6EC(COMUSIC_30_5TH_JINJO_COLLECTED, 28000);
}else{
func_8025A6EC(COMUSIC_A_JINJO_COLLECTED, 28000);
}
}//L802CE114
break;
case 7:
case 8:
sp50 = this->state == 7;
if(!sp50 || 0.8 < animctrl_getAnimTimer(this->animctrl)){//L802CE158
player_getVelocity(sp70);
sp70[0] *= sp58*6.0f;
sp70[1] *= sp58*6.0f;
sp70[2] *= sp58*6.0f;
sp70[0] += sp7C[0];
sp70[1] += sp7C[1];
sp70[2] += sp7C[2];
sp70[0] -= this->position_x;
sp70[1] -= this->position_y;
sp70[2] -= this->position_z;
sp70[0] *= sp58*3.0f;
sp70[1] *= sp58*3.0f;
sp70[2] *= sp58*3.0f;
this->position_x += sp70[0];
this->position_y += sp70[1];
this->position_z += sp70[2];
if(sp50 || animctrl_getAnimTimer(this->animctrl) < 0.3){
for(i = 0; i < 4; i++){
if(randf() < 0.2){
func_8033E73C(this->marker, i + 5, func_80329904);
func_8033E3F0(8, this->marker->unk14_21);
} //L802CE2C4
}
}//L802CE2D0
}
if(sp50){
if(animctrl_getAnimTimer(this->animctrl) < 0.9)
func_802CDC9C(this, sp66);
if(actor_animationIsAt(this, 0.1f)){
local->unkC = func_802F9AA8(SFX_18_BIGBUTT_SLIDE);
func_802F9EC4(local->unkC, sp30, 500, 2000);
func_802F9F80(local->unkC, 0.0f, 0x50061c46, 0.0f);
func_802FA0B0(local->unkC, 0);
func_8025A6EC(COMUSIC_43_ENTER_LEVEL_GLITTER, 0x7FFF);
func_8025AABC(COMUSIC_43_ENTER_LEVEL_GLITTER);
func_8030E9C4(SFX_C7_SHWOOP, 0.8f, 0x7FFF, sp30, 300.0f, 2000.0f);
}//L802CE3C4
if(actor_animationIsAt(this, 0.434f)){
func_8030E9C4(SFX_C7_SHWOOP, 0.9f, 0x7fff, sp30, 300.0f, 2000.0f);
}//L802CE408
if(actor_animationIsAt(this, 0.811f)){
func_8030E9C4(SFX_C7_SHWOOP, 1.0f, 0x7fff, sp30, 300.0f, 2000.0f);
}
}else{//L802CE450
if(actor_animationIsAt(this,0.214f)){
func_8030E9C4(SFX_C7_SHWOOP, 1.1f, 0x7fff, sp30, 300.0f, 2000.0f);
}//L802CE490
if(actor_animationIsAt(this,0.55f)){
func_8030E9C4(SFX_53_BANJO_HUIII, 1.5f, 0x7fff, sp30, 300.0f, 2000.0f);
}//L802CE4D0
if(actor_animationIsAt(this,0.75f)){
func_80326310(this);
if(local->unk4 == 0){
func_8032BB88(this, -1, 4000);
func_8024BD08(1);
}
}//L802CE518
if(actor_animationIsAt(this,0.85f)){
if(local->unk4){
func_802F9D38();
local->unk4 = 0;
}
func_8030E4E4(SFX_19_BANJO_LANDING_08);
func_8025A7DC(COMUSIC_43_ENTER_LEVEL_GLITTER);
}//L802CE558
if(local->unk4 && actor_animationIsAt(this,0.95f)){
func_8032BB88(this, -1, 4000);
func_8024BD08(1);
}
}//L802CE598
if(sp50){
if(actor_animationIsAt(this, 0.96f) || actor_animationIsAt(this, 0.99f)){
func_80328B8C(this, 8, 0.0f, -1);
actor_playAnimationOnce(this);
}
}
break;
}//L802CE5F0
if(this->state < 4 && !(((sp66 >= 0)? sp66: -sp66) <= 0x100)){
func_80328B8C(this, 4, 0.0f, -1);
actor_playAnimationOnce(this);
}//L802CE630
if(!func_803114B0()){
switch(D_803671B0[this->state].index){
case 0x31:
if(actor_animationIsAt(this, 0.6f)){
if(local->unk8){
func_8030E988(SFX_8_BANJO_LANDING_04, 1.8f, 18000, sp30, 120.0f, 1200.0f);
}else{
FUNC_8030E8B4(SFX_8_BANJO_LANDING_04, 1.8f, 18000, sp30, 120, 1200);
}
}
break;
case 0x2D: //L802CE6F4
if(actor_animationIsAt(this, 0.2f)){
if(local->unk8){
func_8030E988(SFX_17_JINJO_WHISTLE, 1.0f, 22000, sp30, 120.0f, 1200.0f);
}else{
FUNC_8030E8B4(SFX_27_JINJO_HI, 1.0f, 22000, sp30, 120, 1200);
}
}
break;
case 0x2F: //L802CE760
if(actor_animationIsAt(this, 0.2f)){
if(local->unk8){
func_8030E988(SFX_27_JINJO_HI, 1.0f, 22000, sp30, 120.0f, 1200.0f);
}else{
FUNC_8030E8B4(SFX_17_JINJO_WHISTLE, 1.0f, 22000, sp30, 120, 1200);
}
}
break;
default: //L802CE7C8
break;
}
}//L802CE7CC
}
#else
#pragma GLOBAL_ASM("asm/nonmatchings/core2/ch/jinjo/func_802CDD78.s")
#endif

453
src/core2/ch/mole.c Normal file
View File

@@ -0,0 +1,453 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
void func_802D9D60(Actor *this);
Actor *func_802D94B4(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx);
void func_802D9830(ActorMarker *marker, enum asset_e arg1, s32 arg2);
typedef struct{
s16 unk0;
s16 unk2;
s8 unk4;
s8 unk5;
} struct_core2_52290;
/* .data */
ActorAnimationInfo D_80367D70[]= {
{0, 0.0f},
{ASSET_13A_ANIM_BOTTLES_ENTER, 2000000000.0f},
{ASSET_13A_ANIM_BOTTLES_ENTER, 4.5f},
{ASSET_13B_ANIM_BOTTLES_IDLE, 7.0f},
{ASSET_139_ANIM_BOTTLES_EXIT, 1.7f},
{ASSET_13A_ANIM_BOTTLES_ENTER, 2000000000.0f},
};
ActorInfo D_80367DA0= {
0x1DF, ACTOR_37A_BOTTLES, ASSET_387_MODEL_BOTTLES,
1, D_80367D70,
func_802D9D60, func_80326224, func_802D94B4,
0, 0, 0.0f, 0
};
struct_core2_52290 D_80367DC4[] = {
{0x0C23, 0x0C24, 0x0F, ABILITY_1_BEAK_BOMB},
{0x0B47, 0x0B4B, 0x16, ABILITY_6_EGGS},
{0x0B48, 0x0B4C, 0x17, ABILITY_2_BEAK_BUSTER},
{0x0B49, 0x0B4A, 0x18, ABILITY_10_TALON_TROT},
{0x0A1F, 0x0A23, 0x0C, ABILITY_D_SHOCK_JUMP},
{0x0A20, 0x0A22, 0x0D, ABILITY_9_FLY},
{0x0D35, 0x0D36, 0x01, ABILITY_12_WONDERWING},
{0x0C88, 0x0C89, 0x10, ABILITY_E_WADING_BOOTS},
{0x0A84, 0x0A85, 0x19, ABILITY_11_TURBO_TALON},
{0x0F64, 0x0F65, 0x0E, ABILITY_13_1ST_NOTEDOOR}
};
/* .code */
int func_802D9220(enum level_e level){
switch (level){
case LEVEL_1_MUMBOS_MOUNTAIN:
return ability_isUnlocked(ABILITY_6_EGGS)
&& ability_isUnlocked(ABILITY_2_BEAK_BUSTER)
&& ability_isUnlocked(ABILITY_10_TALON_TROT);
case LEVEL_2_TREASURE_TROVE_COVE:
return ability_isUnlocked(ABILITY_D_SHOCK_JUMP)
&& ability_isUnlocked(ABILITY_9_FLY);
case LEVEL_3_CLANKERS_CAVERN:
return ability_isUnlocked(ABILITY_12_WONDERWING);
case LEVEL_4_BUBBLEGLOOP_SWAMP:
return ability_isUnlocked(ABILITY_E_WADING_BOOTS);
case LEVEL_5_FREEZEEZY_PEAK:
return ability_isUnlocked(ABILITY_1_BEAK_BOMB);
case LEVEL_7_GOBIS_VALLEY:
return ability_isUnlocked(ABILITY_11_TURBO_TALON);
default:
return FALSE;
}
}
enum asset_e func_802D9304(void){
s32 level_id = level_get();
int learned_all_moves = func_802D9220(level_id);
switch(level_id){
case LEVEL_1_MUMBOS_MOUNTAIN:
return learned_all_moves ? 0xb4e : 0xd38;
case LEVEL_2_TREASURE_TROVE_COVE:
return learned_all_moves ? 0xa27 : 0xd38;
case LEVEL_3_CLANKERS_CAVERN:
return learned_all_moves ? 0xd37 : 0xd38;
case LEVEL_4_BUBBLEGLOOP_SWAMP:
return learned_all_moves ? 0xc8a : 0xd38;
case LEVEL_5_FREEZEEZY_PEAK:
return learned_all_moves ? 0xc2a : 0xd38;
case LEVEL_7_GOBIS_VALLEY:
return learned_all_moves ? 0xc2a : 0xd38;
default:
return 0xd38;
}
}
int func_802D93EC(void){
return ability_isUnlocked(ABILITY_6_EGGS)
&& ability_isUnlocked(ABILITY_2_BEAK_BUSTER)
&& ability_isUnlocked(ABILITY_10_TALON_TROT)
&& ability_isUnlocked(ABILITY_D_SHOCK_JUMP)
&& ability_isUnlocked(ABILITY_9_FLY)
&& ability_isUnlocked(ABILITY_12_WONDERWING)
&& ability_isUnlocked(ABILITY_E_WADING_BOOTS)
&& ability_isUnlocked(ABILITY_1_BEAK_BOMB)
&& ability_isUnlocked(ABILITY_11_TURBO_TALON);
}
Actor *func_802D94B4(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx){
Actor *actor = marker_getActor(marker);
if(actor->state != 1 && actor->state != 5){
func_8033A45C(3, 0);
func_8033A45C(4, 0);
actor = func_80325888(marker, gfx, mtx, vtx);
}
return actor;
}
void func_802D9530(Actor *this){
Actor *other = func_80329980(this);
if(this->unk100 && other){
if(this->unk100->unk14_20 == 0xB8)
func_80328B8C(other, 3, 0.0001f, 1);
}
func_80328B8C(this, 4, 0.0001f, 1);
actor_playAnimationOnce(this);
this->unk44_31 = func_8030D90C();
sfxsource_setSfxId(this->unk44_31, SFX_3F9_UNKNOWN);
func_8030DD14(this->unk44_31, 2);
func_8030DBB4(this->unk44_31, 1.4f);
sfxsource_setSampleRate(this->unk44_31, 26000);
func_8028F918(0);
}
void func_802D9600(Actor * this){
animctrl_setSmoothTransition(this->animctrl, 0);
func_80328B8C(this, 1, 0.0001f, 1);
this->marker->propPtr->unk8_3 = 0;
}
void func_802D9658(Actor *this){
timed_setCameraToNode(0.0f, D_80367DC4[this->unkF4_8-9].unk4);
}
void func_802D9698(ActorMarker *marker, enum asset_e arg1, s32 arg2){
Actor *actor = marker_getActor(marker);
if( arg1 == D_80367DC4[actor->unkF4_8-9].unk0
&& item_getCount(ITEM_14_HEALTH) < item_getCount(ITEM_15_HEALTH_TOTAL)
){
func_80311480(ASSET_D39_TEXT_BOTTLES_REFILL_HEALTH, 7, 0, actor->marker, func_802D9698, func_802D9830);
}//L802D9738
else if(arg1 == D_80367DC4[actor->unkF4_8-9].unk0 || arg1 == ASSET_D39_TEXT_BOTTLES_REFILL_HEALTH){
func_80311480(func_802D93EC()? 0xa87 : func_802D9304(), 7, 0, actor->marker, func_802D9698, NULL);
}
else{//L802D97BC
if(actor->unk138_24){
func_80347A14(1);
actor->unk138_24 = FALSE;
}
func_80324E88(0.0f);
if(actor->state == 5){
func_8028F918(0);
func_802D9600(actor);
}//L802D9814
else{
func_802D9530(actor);
}
}//L802D9820
}
void func_802D9830(ActorMarker *marker, enum asset_e arg1, s32 arg2){
Actor *actor = marker_getActor(marker);
switch(arg2){
case 1:
timed_setCameraToNode(0.0f, 0x11);
levelSpecificFlags_set(0x1A, 1);
break;
case 2:
levelSpecificFlags_set(0x1A, 0);
func_802D9658(actor);
break;
case 3:
timed_setCameraToNode(0.0f, 0x29);
levelSpecificFlags_set(0x1A, 1);
break;
case 4:
levelSpecificFlags_set(0x1A, 0);
func_802D9658(actor);
break;
case 5:
func_803463D4(ITEM_D_EGGS, 50);
break;
case 6:
func_803463D4(ITEM_F_RED_FEATHER, 25);
break;
case 7:
func_803463D4(ITEM_10_GOLD_FEATHER, 5);
break;
case 8:
item_set(ITEM_14_HEALTH, item_getCount(ITEM_15_HEALTH_TOTAL));
break;
case 0xff:
func_802D9658(actor);
break;
}
}
int func_802D997C(Actor *this){
s32 sp2C;
s32 sp28 = 0xe;
if(ability_isUnlocked(D_80367DC4[this->unkF4_8-9].unk5)){
sp28 = 0xf;
sp2C = D_80367DC4[this->unkF4_8-9].unk2;
}//L802D99EC
else{
func_80347A14(0);
this->unk138_24 = 1;
sp2C = D_80367DC4[this->unkF4_8-9].unk0;
ability_unlock(D_80367DC4[this->unkF4_8-9].unk5);
switch(D_80367DC4[this->unkF4_8-9].unk5){
case ABILITY_9_FLY:
case ABILITY_D_SHOCK_JUMP:
func_8030E6A4(SFX_113_PAD_APPEARS, 0.9f, 32000);
break;
case ABILITY_13_1ST_NOTEDOOR:
func_802FAD64(ITEM_C_NOTE);
break;
}
}//L802D9A9C
func_80311480(sp2C, sp28, this->position, this->marker, func_802D9698, func_802D9830);
return TRUE;
}
void func_802D9ADC(Actor *this){
Actor *other = func_80329980(this);
if(this->unk100 && other && this->unk100->unk14_20 == 0xB8){
func_80328B8C(other, 2, 0.0001f, 1);
}
this->marker->propPtr->unk8_3 = 1;
animctrl_setSmoothTransition(this->animctrl, TRUE);
func_80328B8C(this, 2, 0.0001f, 1);
actor_playAnimationOnce(this);
this->unk44_31 = func_8030D90C();
sfxsource_setSfxId(this->unk44_31, SFX_3F9_UNKNOWN);
func_8030DD14(this->unk44_31, 2);
func_8030DBB4(this->unk44_31, 1.4f);
sfxsource_setSampleRate(this->unk44_31, 26000);
func_802D9658(this);
func_8028F94C(2, this->position);
}
void func_802D9BD8(Actor *this){
func_80328A84(this, 5);
func_802D9658(this);
func_8028F94C(2, this->position);
func_802D997C(this);
}
void func_802D9C1C(Actor *this){
func_80328B8C(this, 3, 0.0001f, 1);
actor_loopAnimation(this);
}
void func_802D9C54(ActorMarker *marker){
Actor *actor = marker_getActor(marker);
Actor *other = spawn_child_actor(ACTOR_12C_MOLEHILL, &actor);
f32 pad[1];
actor->unk100 = other->marker;
if(marker);
}
void func_802D9C90(Actor *this){
u8 tmp_a1 = this->unk44_31;
if(tmp_a1){
func_8030DA44(tmp_a1);
}
}
void func_802D9CBC(Actor *this){
if(ability_isUnlocked(D_80367DC4[this->unkF4_8 - 9].unk5)){
func_802D9BD8(this);
}
else{
if(func_80329530(this, 150)){
if(this->unk38_0 == 0)
func_8028F45C(9, this->position);
else
func_8028F490(this->unk1C);
}//L802D9D44
func_802D9ADC(this);
}
}
void func_802D9D60(Actor *this){
s32 sp50[6];
f32 sp4C;
f32 pad44[2];
Actor *other;
f32 sp34[3];
if(this->unkF4_8 < 8 || this->unkF4_8 >= 0x13)
return;
if(!this->unk16C_4){
this->unk16C_4 = 1;
func_803300D8(this->marker, func_802D9C90);
if(this->initialized){
other = func_80326D68(this->position, ACTOR_12C_MOLEHILL, -1, &sp4C);
this->unk100 = (other) ? other->marker : NULL;
if(this->unk100){
other = func_80329980(this);
if(other && this->unk100->unk14_20 == 0xB8){
func_80328A84(other, 1);
}
}
}
}//L802D9E34
if(!this->initialized){
other = func_80304C38(0x372, this);
if(other == NULL){
this->unk38_0 = FALSE;
}
else{
this->unk38_0 = TRUE;
nodeprop_getPosition(other, this->unk1C);
}
func_802C3C88(func_802D9C54, this->marker);
this->marker->propPtr->unk8_3 = FALSE;
this->marker->collidable = FALSE;
this->initialized = TRUE;
if(this->unkF4_8 == 0x12){
other = func_80304C38(0x349, this);
if(other == NULL){
this->velocity[0] = this->position[0];
this->velocity[1] = this->position[1];
this->velocity[2] = this->position[2];
this->unk28 = 500.0f;
}
else{ //L802D9F08
nodeprop_getPosition(other, this->velocity);
this->unk28 = 2*nodeprop_getRadius(other);
}
}
}//L802D9F34
func_8024E55C(0, sp50);//get face buttons press counters
switch(this->state){
case 1://L802D9F70
this->yaw_moving = func_80329784(this);
func_80328FB0(this, 4.0f);
if(func_8028F20C() && func_8028F0D4() && !func_8028EC04()){
if( this->unkF4_8 == 0x12
&& !ability_isUnlocked(D_80367DC4[this->unkF4_8-9].unk5)
&& (func_8028ECAC() == 0 || func_8028ECAC() == BSGROUP_8_TROT)
){
player_getPosition(sp34);
if(ml_vec3f_distance(sp34, this->velocity) < this->unk28){
func_802D9CBC(this);
}
}
else{//L802DA054
if( !func_8028ECAC()
&& func_80329530(this, 0xFA)
&& func_8028EFC8()
&& sp50[BUTTON_Z] == 1
){
func_802D9CBC(this);
}
}
}
break;
case 2://L802DA0A0
this->marker->propPtr->unk8_3 = TRUE;
this->yaw_moving = func_80329784(this);
func_80328FB0(this, 4.0f);
if( 0.0 < animctrl_getAnimTimer(this->animctrl)
&& animctrl_getAnimTimer(this->animctrl) < 0.16
){
func_8030E2C4(this->unk44_31);
}//L802DA128
if(actor_animationIsAt(this, 0.9999f)){
func_802D9C1C(this);
func_8030DA44(this->unk44_31);
this->unk44_31 = 0;
}
else if(actor_animationIsAt(this, 0.14f)){//L802DA154
FUNC_8030E8B4(SFX_C6_SHAKING_MOUTH, 1.2f, 24000, this->position, 1250, 2500);
}
else if(actor_animationIsAt(this, 0.4f)){//L802DA188
FUNC_8030E8B4(SFX_2C_PULLING_NOISE, 1.2f, 24000, this->position, 1250, 2500);
}
else if(actor_animationIsAt(this, 0.75f)){//L802DA1BC
FUNC_8030E8B4(SFX_C5_TWINKLY_POP, 1.0f, 32000, this->position, 1250, 2500);
}
else if(actor_animationIsAt(this, 0.35f)){//L802DA1EC
func_802D997C(this);
}
break;
case 3://L802DA210
this->yaw_moving = func_80329784(this);
func_80328FB0(this, 4.0f);
if( ( actor_animationIsAt(this, 0.37f)
|| actor_animationIsAt(this, 0.66f)
|| actor_animationIsAt(this, 0.85f)
)
&& randf() < 0.2
){
animctrl_setDirection(this->animctrl, 1 ^ animctrl_isPlayedForwards(this->animctrl));
}
else if(
actor_animationIsAt(this, 0.25f)
|| actor_animationIsAt(this, 0.28f)
|| actor_animationIsAt(this, 0.31f)
){//L802DA2B4
func_8030E878(SFX_6F_BANJO_HEADSCRATCH, randf2(1.4f, 1.55f), 16000, this->position, 1250.0f, 2500.0f);
}
else if(
actor_animationIsAt(this, 0.45f)
|| actor_animationIsAt(this, 0.48f)
|| actor_animationIsAt(this, 0.51f)
|| actor_animationIsAt(this, 0.7f)
|| actor_animationIsAt(this, 0.73f)
|| actor_animationIsAt(this, 0.76f)
){//L802DA33C
func_8030E878(SFX_6F_BANJO_HEADSCRATCH, randf2(1.35f, 1.5f), 6000, this->position, 1250.0f, 2500.0f);
}
break;
case 4://L802DA400
if( 0.35 < animctrl_getAnimTimer(this->animctrl)
&& animctrl_getAnimTimer(this->animctrl) < 0.9
){
func_8030E2C4(this->unk44_31);
}
else if(actor_animationIsAt(this, 0.9999f)){//L802DA45C
func_802D9600(this);
func_8030DA44(this->unk44_31);
this->unk44_31 = 0;
}
break;
}//L802DA488
}
int func_802DA498(void){
return ability_isUnlocked(ABILITY_F_DIVE)
&& ability_isUnlocked(ABILITY_4_BEAR_PUNCH)
&& ability_isUnlocked(ABILITY_C_ROLL)
&& ability_isUnlocked(ABILITY_B_RATATAT_RAP)
&& ability_isUnlocked(ABILITY_0_BARGE)
&& ability_isUnlocked(ABILITY_A_HOLD_A_JUMP_HIGHER)
&& ability_isUnlocked(ABILITY_7_FLAP)
&& ability_isUnlocked(ABILITY_8_FLIP)
&& ability_isUnlocked(ABILITY_5_CLIMB)
;
}

113
src/core2/ch/molehill.c Normal file
View File

@@ -0,0 +1,113 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
typedef struct{
u8 unk0;
u8 pad1[3];
f32 unk4[3];
f32 unk10[3];
f32 unk1C[3];
}ActorLocal_MoleHill;
Actor *func_802DA560(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx);
void func_802DA740(Actor *this);
/*.data */
ActorAnimationInfo D_80367E00[] = {
{0x000, 0.0f},
{0x13D, 2000000000.0f},
{0x13D, 4.5f},
{0x13C, 1.7f}
};
ActorInfo D_80367E20= {
0xB8, ACTOR_12C_MOLEHILL, ASSET_388_MODEL_MOLEHILL,
0, D_80367E00,
func_802DA740, func_80326224, func_802DA560,
0, 0, 0.0f, 0
};
struct31s D_80367E44 = {
{0.05f, 0.1f},
{0.0f, 0.0f},
{0.0f, 0.01f},
{4.0f, 4.0f},
0.0f,
0.3f
};
/* .code */
Actor *func_802DA560(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx){
Actor *actor = marker_getActor(marker);
ActorLocal_MoleHill * local = (ActorLocal_MoleHill *) &actor->local;
if(actor->unk16C_4){
actor = func_80325888(marker, gfx, mtx, vtx);
func_8034A174(actor->marker->unk44, 5, actor->velocity);
func_8034A174(actor->marker->unk44, 6, actor->unk1C);
func_8034A174(actor->marker->unk44, 7, local->unk4);
func_8034A174(actor->marker->unk44, 8, local->unk10);
func_8034A174(actor->marker->unk44, 9, local->unk1C);
local->unk0 = 1;
}
return actor;
}
void func_802DA634(ParticleEmitter *pCtrl, f32 arg1[3], s32 cnt){
particleEmitter_setParticleAccelerationRange(pCtrl, 0.0f, -600.0f, 0.0f, 0.0f, -600.0f, 0.0f);
particleEmitter_setModel(pCtrl, 0x344);
particleEmitter_setPosition(pCtrl, arg1);
func_802EFE24(pCtrl, -600.0f, -600.0f, -600.0f, 600.0f, 600.0f, 600.0f);
particleEmitter_setParticleVelocityRange(pCtrl, -150.0f, 150.0f, -150.0f, 150.0f, 360.0f, 150.0f);
func_802EFB98(pCtrl, &D_80367E44);
func_802EF9F8(pCtrl, 0.01f);
func_802EFA18(pCtrl, 3);
particleEmitter_emitN(pCtrl, cnt);
}
void func_802DA740(Actor *this){
ActorLocal_MoleHill * local = (ActorLocal_MoleHill *) &this->local;
this->marker->propPtr->unk8_3 = TRUE;
this->marker->collidable = FALSE;
if(!this->unk16C_4){
local->unk0 = 0;
this->unk16C_4 = 1;
}
switch(this->state){
case 1:
break;
case 2: //L802DA7C4
if(actor_animationIsAt(this, 0.9999f)){
func_80328B8C(this, 1, 0.0001f, 1);
}
else{
if(local->unk0 && actor_animationIsAt(this, 0.05f)){
func_802DA634(partEmitList_pushNew(6), this->velocity, 6);
}
}
break;
case 3: //L802DA838
if(actor_animationIsAt(this, 0.9999f)){
func_80328B8C(this, 1, 0.0001f, 1);
}
else if(local->unk0){
if(actor_animationIsAt(this, 0.3f)){
func_802DA634(partEmitList_pushNew(6), this->velocity, 6);
}
else if(actor_animationIsAt(this, 0.4f)){
func_802DA634(partEmitList_pushNew(4), this->unk1C, 4);
}
else if(actor_animationIsAt(this, 0.45f)){
func_802DA634(partEmitList_pushNew(4), local->unk4, 4);
}
else if(actor_animationIsAt(this, 0.5f)){
func_802DA634(partEmitList_pushNew(4), local->unk10, 4);
}
else if(actor_animationIsAt(this, 0.55f)){
func_802DA634(partEmitList_pushNew(4), local->unk1C, 4);
}
}
break;
}//L802DA984
}

17
src/core2/ch/musicnote.c Normal file
View File

@@ -0,0 +1,17 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
void func_802C9C30(Actor* this);
/* .data */
ActorInfo D_80366C50 = {
MARKER_5F_MUSIC_NOTE, ACTOR_51_MUSIC_NOTE, ASSET_6D6_MODEL_MUSIC_NOTE, 0, NULL,
func_802C9C30, func_80326224, func_80325934,
0, 0, 0.6f, 0
};
/* .code */
void func_802C9C30(Actor* this){
this->scale = 0.42857143f;
}

124
src/core2/ch/soundsource.c Normal file
View File

@@ -0,0 +1,124 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
void func_802D07C8(Actor *this);
typedef struct{
s32 unk0; //enum sfx_e
s16 unk4;
s16 unk6;
s32 unk8;
f32 unkC;
f32 unk10;
}struct49570s;
typedef struct{
u8 unk0;
}ActorLocal_Core2_49570;
/* .data */
struct49570s D_80367340[] = {
{0x03EC, 400, 3200, -1, -1.0f, -1.0f},
{SFX_128_FIRE_CRACKING, 400, 2600, -1, -1.0f, -1.0f},
{SFX_12B_BOILING_AND_BUBBLING, 100, 1200, 14000, -1.0f, 2.5f},
{-1, 0, 0, 0, 0.0f, 0.0f},
};
ActorInfo D_80367390 = {0x1A8, ACTOR_28B_SOUND_SOURCE, 0,
0, NULL,
func_802D07C8, NULL, func_80325340,
0, 0, 0.0f, 0
};
/* .code */
void func_802D0500(Actor *this){
ActorLocal_Core2_49570 *local = (ActorLocal_Core2_49570 *)this->local;
if(D_80367340[(s32)this->yaw].unk8 != -1){
if(this->unk1C[0] == this->unk1C[1])
sfxsource_setSampleRate(local->unk0, D_80367340[(s32)this->yaw].unk8);
else{
sfxsource_setSampleRate(local->unk0, (s32)((D_80367340[(s32)this->yaw].unk8/this->unk1C[1])*this->unk1C[0]));
}
}
}
void func_802D05A0(Actor *this, s32 next_state){
ActorLocal_Core2_49570 *local = (ActorLocal_Core2_49570 *)this->local;
if(this->state == 2 && local->unk0){
func_8030DA44(local->unk0);
local->unk0 = 0;
}
if(next_state == 2){
this->unk1C[0] = 0.0f;
this->unk1C[1] = 0.0f;
if(-1.0f != D_80367340[(s32)this->yaw].unk10){
this->unk1C[1] = D_80367340[(s32)this->yaw].unk10;
}
local->unk0 = func_8030D90C();
sfxsource_setSfxId(local->unk0, D_80367340[(s32)this->yaw].unk0);
func_8030DD14(local->unk0, 3);
func_8030DFF0(local->unk0, 1);
func_8030DF68(local->unk0, this->position);
func_8030DEB4(local->unk0, D_80367340[(s32)this->yaw].unk4*this->scale, D_80367340[(s32)this->yaw].unk6*this->scale);
func_8030DFB4(local->unk0, 1);
func_802D0500(this);
if(-1.0f != D_80367340[(s32)this->yaw].unkC)
func_8030DBB4(local->unk0, D_80367340[(s32)this->yaw].unkC);
func_8030E2C4(local->unk0);
}//L802D0780
this->state = next_state;
}
void func_802D07A8(Actor *this){
func_802D05A0(this, 0);
}
void func_802D07C8(Actor *this){
f32 sp2C[3];
f32 sp28;
if(!this->unk16C_4){
this->unk16C_4 = 1;
this->marker->unk30 = func_802D07A8;
func_802D05A0(this, 1);
}
player_getPosition(sp2C);
sp28 = ml_vec3f_distance(sp2C, this->position);
if( this->state == 1){
if(sp28 < D_80367340[(s32)this->yaw].unk6*this->scale){
func_802D05A0(this, 2);
}
}//L802D08A0
if(this->state == 2){
if((D_80367340[(s32)this->yaw].unk6 + 100)*this->scale < sp28){
func_802D05A0(this, 1);
}
if(this->unk1C[0] != this->unk1C[1]){
this->unk1C[0] += time_getDelta();
if(this->unk1C[1] < this->unk1C[0]){
this->unk1C[0] = this->unk1C[1];
}
func_802D0500(this);
}
}//L802D095C
}
void func_802D096C(s32 arg0, s32 arg1, s32 arg2, s32 arg3){
f32 sp1C[3];
sp1C[0] = reinterpret_cast(f32, arg0);
sp1C[1] = reinterpret_cast(f32, arg1);
sp1C[2] = reinterpret_cast(f32, arg2);
func_8032813C(0x28B, sp1C, arg3);
}
void func_802D09B8(Actor *this, s32 arg1){
func_802C3F04(func_802D096C,
reinterpret_cast(s32, this->position[0]),
reinterpret_cast(s32, this->position[1]),
reinterpret_cast(s32, this->position[2]),
arg1
);
}

123
src/core2/ch/trainers.c Normal file
View File

@@ -0,0 +1,123 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
Actor *chtrainers_draw(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx);
void chtrainers_update(Actor *this);
/* .data */
extern ActorAnimationInfo D_80366EA0[];
extern ActorInfo D_80366EC0 = {
MARKER_38_TURBO_TALON_TRAINERS, ACTOR_2C_TURBO_TALON_TRAINERS, ASSET_367_MODEL_TURBO_TALON_TRAINERS,
0x0, D_80366EA0,
chtrainers_update, func_80326224, chtrainers_draw,
0, 0, 0.0f, 0
};
/* .rodata */
extern f64 D_80376470;
extern f64 D_80376478;
/* .code */
Actor *chtrainers_draw(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx){
Actor *this = marker_getActor(marker);
if( !this->unk10_12 )
return this;
return func_80325888(marker, gfx, mtx, vtx);
}
void _chtrainers_802CA378(Actor *this, bool arg1){
f32 sp24[3];
if(ability_isUnlocked(ABILITY_11_TURBO_TALON))
actor_setOpacity(this, 0xff);
else
actor_setOpacity(this, 0x87);
if( actor_animationIsAt(this, 0.38f)
|| actor_animationIsAt(this, 0.88f)
){
if(arg1)
FUNC_8030E624(SFX_8_BANJO_LANDING_04, 1.6f, 7000);
else
FUNC_8030E8B4(SFX_8_BANJO_LANDING_04, 1.6f, 7000, this->position, 600, 1500);
}
func_802589E4(sp24, this->velocity[1], 40.0f);
sp24[1] = 0.0f;
ml_vec3f_add(this->position, this->unk1C, sp24);
this->velocity[1] += D_80376470;
this->yaw = mlNormalizeAngle(this->velocity[1] + D_80376478);
}
void chtrainers_update(Actor *this){
s32 sp2C = levelSpecificFlags_get(0x1a);
if(sp2C && this->unkF4_8 != 1){
return;
}
if(!this->initialized){
this->initialized = TRUE;
ml_vec3f_copy(this->unk1C, this->position);
this->velocity[0] = this->yaw;
this->velocity[1] = 0.0f;
this->unk10_12 = !func_803203FC(0x1f) && !func_803203FC(0x1);
func_80328A84(this, 0);
}
if(!func_803203FC(0xF) && ability_isUnlocked(ABILITY_11_TURBO_TALON)){
func_803204E4(0xF, TRUE);
}
switch(this->state){
case 0://L802CA5A8
if(func_803296D8(this, 2000) || sp2C){
if( func_80329530(this, 0xfa)
&& !func_803203FC(0xf)
&& player_getTransformation() == TRANSFORM_1_BANJO
){
if(func_80311480(0xda4, 0, NULL, NULL, NULL, NULL)){
func_803204E4(0xf, TRUE);
}
}//L802CA620
_chtrainers_802CA378(this, sp2C);
}
break;
case 1://L802CA630
this->velocity[2] -= time_getDelta();
if(this->velocity[2] <= 0.0f){
func_80328A84(this, 2);
}
break;
case 2://L802CA670
if(func_8028E80C(3) == 0.0f){
this->velocity[2] = 1.0f;
func_80328A84(this, 3);
}
break;
case 3://L802CA6AC
this->velocity[2] -= time_getDelta();
if(this->velocity[2] <= 0.0f){
this->unk10_12 = 1;
func_80328A84(this, 0);
}
break;
}//L802CA6F8
}
bool chtrainers_802CA708(Actor *this){
return this->unk10_12 && ability_isUnlocked(ABILITY_11_TURBO_TALON);
}
f32 chtrainers_802CA748(Actor *this){
return this->velocity[0];
}
void chtrainers_802CA750(Actor *this){
func_80328A84(this, 1);
this->velocity[2] = 1.0f;
this->unk10_12 = 0;
}

105
src/core2/ch/wadingboots.c Normal file
View File

@@ -0,0 +1,105 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
Actor *chwadingboots_draw(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx);
void chwadingboots_update(Actor *this);
/* .data */
extern ActorAnimationInfo D_80367A00[];
extern ActorInfo D_80367A20 = {
MARKER_11_WADING_BOOTS, ACTOR_65_WADING_BOOTS, ASSET_366_MODEL_WADING_BOOTS,
0x0, D_80367A00,
chwadingboots_update, func_80326224, chwadingboots_draw,
0, 0, 0.0f, 0
};
/* .code */
Actor *chwadingboots_draw(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx){
Actor *this = marker_getActor(marker);
if(!this->unk10_12) return this;
return func_80325888(marker, gfx, mtx, vtx);
}
void chwadingboots_update(Actor *this){
s32 sp2C = levelSpecificFlags_get(0x1a);
if(sp2C && this->unkF4_8 != 1){
return;
}
if(!this->initialized){
this->initialized = TRUE;
this->velocity[0] = this->yaw;
this->unk10_12 = !func_803203FC(0x1f) && !func_803203FC(0x1);
func_80328A84(this, 0);
}
if(!func_803203FC(0x10) && ability_isUnlocked(ABILITY_E_WADING_BOOTS)){
func_803204E4(0x10, TRUE);
}
switch(this->state){
case 0://L802D6C60
if(ability_isUnlocked(ABILITY_E_WADING_BOOTS))
actor_setOpacity(this, 0xff);
else
actor_setOpacity(this, 0x87);
if(actor_animationIsAt(this, 0.25f)){
if(sp2C){
FUNC_8030E624(SFX_3F2_UNKNOWN, 1.4f, 23000);
}
else{
FUNC_8030E8B4(SFX_3F2_UNKNOWN, 1.4f, 23000, this->position, 600, 1500);
}
}
if(func_803203FC(0x10)) break;
if(!func_80329530(this, 0xfa)) break;
if(player_getTransformation() != TRANSFORM_1_BANJO) break;
if(func_80311480(0xda5, 0, NULL, NULL, NULL, NULL)){
func_803204E4(0x10, TRUE);
}
break;
case 1://L802D6D34
this->velocity[1] -= time_getDelta();
if(this->velocity[1] <= 0.0f){
func_80328A84(this, 2);
}
break;
case 2://L802D6D74
if(func_8028E80C(2) == 0.0f){
this->velocity[1] = 1.5f;
func_80328A84(this, 3);
}
break;
case 3://L802D6DB0
this->velocity[1] -= time_getDelta();
if(this->velocity[1] <= 0.0f){
this->unk10_12 = 1;
func_80328A84(this, 0);
}
break;
}//L802D6DFC
}
bool chwadingboots_802D6E0C(Actor *this){
return this->unk10_12 && ability_isUnlocked(ABILITY_E_WADING_BOOTS);
}
f32 chwadingboots_802D6E4C(Actor *this){
return this->velocity[0];
}
void chwadingboots_802D6E54(Actor *this){
func_80328A84(this, 1);
this->velocity[1] = 1.5f;
this->unk10_12 = 0;
}

129
src/core2/ch/whipcrack.c Normal file
View File

@@ -0,0 +1,129 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
void chwhipcrack_update(Actor *this);
/* .data */
ActorInfo D_80373100 = {
0x1c5, ACTOR_30F_WHIPCRACK, ASSET_4FD_MODEL_WHIPCRACK,
0, NULL,
chwhipcrack_update, NULL, func_80325888,
0, 0, 0.0f, 0
};
s32 D_80373124[3] = {0xA0, 0x6B, 0x23};
/* .code */
void __chwhipcrack_spawnPieces(Actor *this, enum asset_e model_id, s32 cnt){
ParticleEmitter *pCtrl = partEmitList_pushNew(cnt);
particleEmitter_setParticleAccelerationRange(pCtrl,
0.0f, -1000.0f, 0.0f,
0.0f, -1000.0f, 0.0f
);
func_802EF9F8(pCtrl, 0.7f);
func_802EFA18(pCtrl, 3);
func_802EFA20(pCtrl, 0.5f, 1.0f);
func_802EF9EC(pCtrl, 0x1f, 10000);
particleEmitter_setModel(pCtrl, model_id);
particleEmitter_setParticleSpawnPositionRange(pCtrl,
-120.0f, 50.0f, -120.0f,
120.0f, 300.0f, 120.0f
);
particleEmitter_setPosition(pCtrl, this->position);
func_802EFB70(pCtrl, 0.5f, 1.0f);
func_802EFE24(pCtrl,
-500.0f, -500.0f, -500.0f,
500.0f, 500.0f, 500.0f
);
particleEmitter_setSpawnIntervalRange(pCtrl, 0.0f, 0.01f);
func_802EFEC0(pCtrl, 4.0f, 4.0f);
particleEmitter_setParticleVelocityRange(pCtrl,
-300.0f, 250.0f, -300.0f,
300.0f, 400.0f, 300.0f
);
particleEmitter_emitN(pCtrl, cnt);
}
void __chwhipcrack_spawnSmoke(Actor *this, s32 cnt){
ParticleEmitter *pCtrl = partEmitList_pushNew(cnt);
particleEmitter_setSprite(pCtrl, ASSET_70E_SPRITE_SMOKE_2);
func_802EFA5C(pCtrl, 0.05f, 0.1f);
particleEmitter_setStartingFrameRange(pCtrl, 0, 7);
particleEmitter_setPosition(pCtrl, this->position);
func_802EFB70(pCtrl, 3.0f, 3.5f);
func_802EFB84(pCtrl, 4.5f, 5.5f);
particleEmitter_setParticleSpawnPositionRange(pCtrl,
-50.0f, 50.0f, -50.0f,
50.0f, 200.0f, 50.0f
);
particleEmitter_setParticleVelocityRange(pCtrl,
-30.0f, 150.0f, -30.0f,
30.0f, 300.0f, 30.0f
);
func_802EFFA8(pCtrl, D_80373124);
func_802EFEC0(pCtrl, 3.0f, 4.0f);
particleEmitter_emitN(pCtrl, cnt);
}
void __chwhipcrack_setState(Actor *this, s32 next_state){
if(next_state == 1)
func_80335924(this->unk148, ASSET_22A_ANIM_WHIPCRACK_IDLE, 0.5f, 1.0f);
if(next_state == 2)
func_80335924(this->unk148, ASSET_229_ANIM_WHIPCRACK_ATTACK, 0.5f, 1.0f);
if(next_state == 3){
__chwhipcrack_spawnPieces(this, ASSET_4FE_MODEL_WHIPCRACK_PART_1, 4);
__chwhipcrack_spawnPieces(this, ASSET_4FF_MODEL_WHIPCRACK_PART_2, 4);
__chwhipcrack_spawnPieces(this, ASSET_500_MODEL_WHIPCRACK_PART_3, 4);
__chwhipcrack_spawnSmoke(this, 6);
FUNC_8030E8B4(SFX_2F_ORANGE_SPLAT, 0.8f, 32200, this->position, 500, 2500);
marker_despawn(this->marker);
}
this->state = next_state;
}
void __chwhipcrack_die(ActorMarker *this_marker, ActorMarker *other_marker){
Actor *this = marker_getActor(this_marker);
__chwhipcrack_setState(this, 3);
}
void chwhipcrack_update(Actor *this){
f32 plyr_pos[3];
f32 plyr_dist;
f32 sp44;
f32 sp40;
if(!this->unk16C_4){
this->unk16C_4 = TRUE;
this->roll = this->yaw;
this->yaw = 0.0f;
marker_setCollisionScripts(this->marker, NULL, NULL, __chwhipcrack_die);
__chwhipcrack_setState(this, 1);
}
player_getPosition(plyr_pos);
plyr_dist = ml_vec3f_distance(plyr_pos, this->position);
if(this->state == 1){
if(plyr_dist < 700.0f){
__chwhipcrack_setState(this, 2);
}
}
if(this->state == 2){
func_8033568C(this->unk148, &sp44, &sp40);
if((sp44 < 0.13) && (0.13 <= sp40)){
func_8030E878(SFX_69_WHIPCRACK_CREAKING, randf2(1.05f, 1.1f), 15000, this->position, 500.0f, 1000.0f);
}
if((sp44 < 0.8) && (0.8 <= sp40)){
func_8030E878(SFX_2_CLAW_SWIPE, randf2(0.9f, 1.1f), randi2(28000, 32000), this->position, 500.0f, 1000.0f);
}
if(800.0f < plyr_dist){
__chwhipcrack_setState(this, 1);
}
}
}

36
src/core2/code_10CD0.c Normal file
View File

@@ -0,0 +1,36 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
/* .bss */
u8 D_8037C530;
/* .code */
void func_80297C60(s32 arg0){
D_8037C530 = arg0;
}
s32 func_80297C6C(void){
return D_8037C530;
}
void func_80297C78(void){
D_8037C530 = 0;
func_80297C60(1);
func_802917C4(4);
}
void func_80297CA8(void){
func_80297CCC(0.6f);
}
void func_80297CCC(f32 arg0){
func_802917E4(4, arg0);
func_80297C60(3);
}
void func_80297CF8(void){
if(func_802916CC(4)){
func_80297C60(1);
}
}

132
src/core2/code_10E0.c Normal file
View File

@@ -0,0 +1,132 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
typedef struct {
s32 unk0;
s16 unk4;
u8 unk6;
u8 pad7[1];
}struct10E0s;
/* .bss */
struct10E0s D_80379E20[340];
/* .code */
void func_80288070(void){
int i;
for(i = 0; i<340; i++){
D_80379E20[i].unk6 = 0;
D_80379E20[i].unk0 = 0;
D_80379E20[i].unk4 = 0;
}
}
void func_802880C0(void){
int i;
for(i = 0; i<340; i++){
if(D_80379E20[i].unk6){
if(D_80379E20[i].unk0){
func_8033A6F0(D_80379E20[i].unk0);
}
}
}
}
void func_80288120(void){
int i;
for(i = 0; i<340; i++){
if(D_80379E20[i].unk6 == 1 && D_80379E20[i].unk0){
if(D_80379E20[i].unk4 < 0x3b){
func_8033A6F0(D_80379E20[i].unk0);
D_80379E20[i].unk0 = 0;
if(func_80254BC4(1)){
break;
}
}
}
}
}
void func_802881AC(void){
int i;
for(i = 0; i<340; i++){
if(D_80379E20[i].unk6){
func_803203FC(0);
D_80379E20[i].unk4 = 0;
func_8033A6F0(D_80379E20[i].unk0);
D_80379E20[i].unk0 = 0;
}
}
}
void func_80288210(void){
int i;
for(i = 0; i<340; i++){
if(D_80379E20[i].unk6 == 1 && D_80379E20[i].unk0){
if(--D_80379E20[i].unk4 <= 0){
func_8033A6F0(D_80379E20[i].unk0);
D_80379E20[i].unk0 = 0;
}
}
}
}
s16 func_80288298(void){
int i;
for(i = 0; i<340; i++){
if(!D_80379E20[i].unk6){
return i;
}
}
return -1;
}
s16 func_80288330(void){
int indx = func_80288298();
D_80379E20[indx].unk6 = 1;
D_80379E20[indx].unk4 = 0;
D_80379E20[indx].unk0 = 0;
return indx;
}
int func_80288374(s16 arg0){
return (D_80379E20[arg0].unk0) ? 1 : 0;
}
void func_802883AC(s16 arg0){
if(D_80379E20[arg0].unk0){
func_8033A6F0(D_80379E20[arg0].unk0);
}
D_80379E20[arg0].unk6 = 0;
D_80379E20[arg0].unk0 = 0;
D_80379E20[arg0].unk4 = 0;
}
int func_80288400(s16 arg0, s32 *arg1){
D_80379E20[arg0].unk4 = 0x3C;
if(D_80379E20[arg0].unk0){
*arg1 = D_80379E20[arg0].unk0;
return FALSE;
}else{
D_80379E20[arg0].unk0 = func_8033A710();
*arg1 = D_80379E20[arg0].unk0;
return TRUE;
}
}
void func_80288470(void){
int i;
for(i = 0; i < 340; i++){
if(D_80379E20[i].unk6 == 1 && D_80379E20[i].unk0){
D_80379E20[i].unk0 = func_8033A9E4(D_80379E20[i].unk0);
}
}
}

58
src/core2/code_11040.c Normal file
View File

@@ -0,0 +1,58 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
/* .bss */
f32 D_8037C550;
f32 D_8037C554;
u8 D_8037C558;
/* .code */
void func_80297FD0(s32 arg0){
D_8037C558 = arg0;
}
void func_80297FDC(void){
f32 diff = D_8037C554 - D_8037C550;
if(mlAbsF(diff) < 0.001){
D_8037C550 = D_8037C554;
}
else{
D_8037C550 += mlClamp_f(diff, -0.12f, 0.12f);
}
}
void func_80298068(void){
f32 f2 = yaw_getIdeal() - yaw_get();
if(180.0f < f2){
f2 -= 360.0f;
}
else if(f2 < -180.0f){
f2 += 360.0f;
}
D_8037C554 = ml_map_f(f2, -40.0f, 40.0f, 1.0f, -1.0f);
func_80297FDC();
}
void func_80298114(void){}
void func_8029811C(void){
D_8037C554 = D_8037C550 = 0.0f;
D_8037C558 = 0;
func_80297FD0(1);
func_80297FD0(2);
}
void func_80298168(void){
if(D_8037C558 != 1 && D_8037C558 == 2){
func_80298068();
}
}
void func_802981A4(void){
if(D_8037C558 != 1 && D_8037C558 == 2){
func_80298114();
}
}

65
src/core2/code_11460.c Normal file
View File

@@ -0,0 +1,65 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
/* .bss */
f32 player_position[3];
f32 D_8037C5B0[3];
f32 D_8037C5C0[3];
/* .code */
void func_802983F0(void){
ml_vec3f_clear(D_8037C5C0);
ml_vec3f_clear(player_position);
ml_vec3f_clear(D_8037C5B0);
}
void func_8029842C(void){
ml_vec3f_copy(D_8037C5B0, player_position);
ml_vec3f_clear(D_8037C5C0);
}
void func_80298464(f32 arg0[3]){
ml_vec3f_copy(player_position, arg0);
ml_vec3f_copy(D_8037C5B0, arg0);
}
void player_setPosition(f32 arg0[3]){
ml_vec3f_copy(player_position, arg0);
}
void player_setYPosition(f32 arg0){
player_position[1] = arg0;
}
void _player_getPosition(f32 arg0[3]){
ml_vec3f_copy(arg0, player_position);
}
f32 player_getYPosition(void){
return player_position[1];
}
void func_80298504(f32 arg0[3]){
ml_vec3f_copy(arg0, D_8037C5B0);
}
void func_80298528(f32 arg0){
player_position[1] += arg0;
}
void func_80298540(f32 arg0[3]){
ml_vec3f_copy(arg0, D_8037C5C0);
}
void func_80298564(f32 arg0[3]){
ml_vec3f_copy(D_8037C5C0, arg0);
}
void func_8029858C(void){
player_position[0] += D_8037C5C0[0];
player_position[1] += D_8037C5C0[1];
player_position[2] += D_8037C5C0[2];
ml_vec3f_clear(D_8037C5C0);
}

87
src/core2/code_11660.c Normal file
View File

@@ -0,0 +1,87 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
/* .bss */
void *D_8037C5D0;
/* .code */
s32 func_802985F0(void){
switch(_player_getTransformation())
{
case TRANSFORM_2_TERMITE: //80298624
return ASSET_34F_MODEL_BANJO_TERMITE;
case TRANSFORM_3_PUMPKIN: //8029862C
return ASSET_36F_MODEL_BANJO_PUMPKIN;
case TRANSFORM_5_CROC: //80298634
return ASSET_374_MODEL_BANJO_CROC;
case TRANSFORM_4_WALRUS: //8029863C
return ASSET_359_MODEL_BANJO_WALRUS;
case TRANSFORM_6_BEE: //80298644
return ASSET_362_MODEL_BANJO_BEE;
case TRANSFORM_7_WISHWASHY: //8029864C
return ASSET_356_MODEL_BANJO_WISHYWASHY;
case TRANSFORM_1_BANJO: //80298654
default:
{
switch (map_get())
{
case MAP_20_CS_END_NOT_100:
case MAP_7B_CS_INTRO_GL_DINGPOT_1:
case MAP_7C_CS_INTRO_BANJOS_HOUSE_1:
case MAP_7D_CS_SPIRAL_MOUNTAIN_1:
case MAP_7E_CS_SPIRAL_MOUNTAIN_2:
case MAP_81_CS_INTRO_GL_DINGPOT_2:
case MAP_82_CS_ENTERING_GL_MACHINE_ROOM:
case MAP_83_CS_GAME_OVER_MACHINE_ROOM:
case MAP_84_CS_UNUSED_MACHINE_ROOM:
case MAP_85_CS_SPIRAL_MOUNTAIN_3:
case MAP_86_CS_SPIRAL_MOUNTAIN_4:
case MAP_87_CS_SPIRAL_MOUNTAIN_5:
case MAP_88_CS_SPIRAL_MOUNTAIN_6:
case MAP_89_CS_INTRO_BANJOS_HOUSE_2:
case MAP_8A_CS_INTRO_BANJOS_HOUSE_3:
return 0x34d;
case MAP_1_SM_SPIRAL_MOUNTAIN:
case MAP_2_MM_MUMBOS_MOUNTAIN:
case MAP_7_TTC_TREASURE_TROVE_COVE:
case MAP_B_CC_CLANKERS_CAVERN:
case MAP_D_BGS_BUBBLEGLOOP_SWAMP:
case MAP_12_GV_GOBIS_VALLEY:
case MAP_1B_MMM_MAD_MONSTER_MANSION:
case MAP_27_FP_FREEZEEZY_PEAK:
case MAP_31_RBB_RUSTY_BUCKET_BAY:
case 0x32:
case MAP_43_CCW_SPRING:
case MAP_44_CCW_SUMMER:
case MAP_45_CCW_AUTUMN:
case MAP_46_CCW_WINTER:
case 0x56:
return 0x34d;
default:
return 0x34e;
}
}
}
}
void func_802986D0(void){
if(D_8037C5D0){
assetcache_release(D_8037C5D0);
}
}
void func_80298700(void){
s32 sp1C = func_802985F0();
if(func_8028ADB4()){
D_8037C5D0 = 0;
}
else if(sp1C){
D_8037C5D0 = assetcache_get(sp1C);
}
else{
D_8037C5D0 = NULL;
}
}

58
src/core2/code_117D0.c Normal file
View File

@@ -0,0 +1,58 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
/* .data */
struct50s D_80364450[] =
{
{0x01, 0x01, 510.0f, -1200.0f, 200.0f},
{0x02, 0x01, 600.0f, -1500.0f, 300.0f},
{0x03, 0x01, 510.0f, -1200.0f, 100.0f},
{0x04, 0x01, 510.0f, -1200.0f, 200.0f},
{0x05, 0x01, 510.0f, -1200.0f, 300.0f},
{0x06, 0x01, 510.0f, -1200.0f, 400.0f},
{0x07, 0x01, 510.0f, -1200.0f, 500.0f},
{0x08, 0x01, 600.0f, -1500.0f, 100.0f},
{0x09, 0x01, 600.0f, -1500.0f, 200.0f},
{0x0A, 0x01, 600.0f, -1500.0f, 300.0f},
{0x0B, 0x01, 600.0f, -1500.0f, 400.0f},
{0x0C, 0x01, 600.0f, -1500.0f, 500.0f},
{0x0D, 0x02, 300.0f, -1200.0f, 0.0f},
{0x0F, 0x01, 300.0f, -1200.0f, 0.0f},
{0x0E, 0x03, 300.0f, -1200.0f, 0.0f},
{0x10, 0x03, 300.0f, -1200.0f, 0.0f},
{00}
};
/*.bss*/
struct{
struct50s *unk0;
f32 unk4[3];
}D_8037C5E0;
/*.code*/
int func_80298760(s32 arg0){
int i;
for(i = 0; D_80364450[i].unk0; i++){
if(arg0 == D_80364450[i].unk0){
D_8037C5E0.unk0 = D_80364450 + i;
break;
}
}
}
s32 func_802987B4(void){
return D_8037C5E0.unk0->unk1;
}
f32 func_802987C4(void){
return D_8037C5E0.unk0->unk4[0];
}
f32 func_802987D4(void){
return D_8037C5E0.unk0->unk4[2];
}
f32 func_802987E4(void){
return D_8037C5E0.unk0->unk4[1];
}

93
src/core2/code_11870.c Normal file
View File

@@ -0,0 +1,93 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
/* .bss */
struct50s D_8037C5F0[8];
u8 D_8037C670;
u8 D_8037C671;
/* .code */
int func_80298800(f32 arg0[3]){
if(!D_8037C5F0[D_8037C670 - 1].unk1)
return 0;
ml_vec3f_copy(arg0, D_8037C5F0[D_8037C670 - 1].unk4);
return 1;
}
s32 func_80298850(void){
if(!D_8037C670){
return 0;
}
return D_8037C5F0[D_8037C670 - 1].unk0;
}
void func_8029887C(void){
D_8037C671 = 0;
D_8037C670 = 0;
}
void func_80298890(void){
if(D_8037C670){
D_8037C670--;
if(D_8037C670 == 0){
func_80297CCC(1.2f);
D_8037C671 = 0;
}
}
}
void func_802988DC(s32 arg0){
D_8037C5F0[D_8037C670].unk0 = arg0;
D_8037C5F0[D_8037C670].unk1 = 0;
ml_vec3f_clear(D_8037C5F0[D_8037C670].unk4);
D_8037C670++;
}
void func_8029892C(f32 arg0[3]){
D_8037C5F0[D_8037C670-1].unk1 = 1;
ml_vec3f_copy(D_8037C5F0[D_8037C670-1].unk4, arg0);
}
void func_80298970(s32 arg0){
int val = 0;
switch(arg0){
case 1:
if(bs_checkInterrupt(0x1E) == 2)
val = 1;
break;
case 2:
if(bs_checkInterrupt(0x1C) == 2)
val = 1;
break;
case 3:
if(bs_checkInterrupt(0x1D) == 2)
val = 1;
break;
case 4:
if(bs_checkInterrupt(0x25) == 2)
val = 1;
break;
default:
val = 1;
break;
}
if(val)
D_8037C671 = arg0;
}
void func_80298A64(void){
if(D_8037C670)
D_8037C671 = 0;
}
void func_80298A84(void){
s32 tmp;
if(D_8037C670){
tmp = D_8037C5F0[D_8037C670-1].unk0;
if(D_8037C671 != tmp){
func_80298970(tmp);
}
}
}

101
src/core2/code_12360.c Normal file
View File

@@ -0,0 +1,101 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern f32 func_80257D30(f32, f32, f32, f32, f32);
extern void func_8025901C(f32, f32 *, f32 *, f32);
extern f32 func_8029B2D0(void);
void func_8029957C(s32 arg0);
/* .bss*/
s32 D_8037C6B0;
f32 D_8037C6B4;
/* .code */
void func_802992F0(void){
func_802990B4();
D_8037C6B4 = 0.0f;
D_8037C6B0 = 0;
func_8029957C(1);
}
void func_8029932C(f32 arg0){
D_8037C6B4 = arg0;
}
void func_80299338(void){
f32 stickX = func_8029B2D0();
f32 sp20;
sp20 =(0.03 < (f64)mlAbsF(stickX)) ? func_80257D30(stickX, 0.0f, 1.0f, 1.0f, 6.0f) : 0.0f;
yaw_setIdeal(yaw_getIdeal() + sp20);
}
void func_802993C8(void){
switch(D_8037C6B0){
case 1://802993F8
if(func_8029B2E8() != 0.0f){
yaw_setIdeal(func_8029B33C());
}
yaw_update();
break;
case 5://80299438
if(func_8029B2E8() != 0.0f){
yaw_setIdeal(func_8029B33C() + 180.0f);
}
yaw_update();
break;
case 3://80299480
yaw_update();
break;
case 6://80299490
func_80299338();
yaw_update();
break;
case 4://802994A8
if(func_8029B2E8() != 0.0f){
yaw_setIdeal(func_8029B33C());
yaw_set(yaw_getIdeal());
}
yaw_update();
break;
case 7://802994F8
if(func_8029B2E8() != 0.0f){
f32 sp1C = func_8029B33C();
f32 diff = mlDiffDegF(yaw_getIdeal(), sp1C);
if(D_8037C6B4 <= mlAbsF(diff)){
yaw_setIdeal(func_8029B33C());
}
}
yaw_update();
break;
case 0://8029956C
case 2:
break;
}
}
void func_8029957C(s32 arg0){
D_8037C6B0 = arg0;
}
s32 func_80299588(void){
return D_8037C6B0;
}
void func_80299594(s32 arg0, f32 arg1){
f32 sp2C[3];
f32 sp20[3];
func_80294480(sp2C);
if(arg0){
func_8025901C(mlNormalizeAngle(yaw_get() + 180.0f), sp2C, sp20, arg1);
} else {
func_8025901C(yaw_get(), sp2C, sp20, arg1);
}
pitch_setIdeal(sp20[0]);
roll_setIdeal(sp20[2]);
}
void func_80299628(s32 arg0){
func_80299594(arg0, 1.0f);
}

235
src/core2/code_126C0.c Normal file
View File

@@ -0,0 +1,235 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
/* .data */
s32 D_80364560 = 0;
s16 D_80364564[8] = {
SFX_32_BANJO_EGHEE,
SFX_34_BANJO_AGHOAA,
SFX_35_BANJO_WOAH,
SFX_37_BANJO_OHWW,
SFX_38_BANJO_AYE_1,
SFX_39_BANJO_AYE_2,
SFX_3A_BANJO_HOUW,
SFX_3B_BANJO_GAAH
};
s16 D_80364574[3] = {
SFX_54_BANJO_HOO_1,
SFX_55_BANJO_HOO_2,
SFX_56_BANJO_HUI,
};
/* .bss */
u8 D_8037C6C0;
u8 D_8037C6C1;
u8 D_8037C6C2;
u8 D_8037C6C3;
u8 D_8037C6C4;
u32 D_8037C6C8;
f32 D_8037C6CC;
struct{
u8 unk0;
f32 unk4;
f32 unk8;
f32 unkC;
f32 unk10;
f32 unk14;
f32 unk18;
f32 unk1C;
} D_8037C6D0;
/* .code */
void func_80299650(f32 arg1, f32 arg2){
f32 f20;
s32 unks0;
if(arg2 == 0.0f){
func_8030E394(D_8037C6C4);
}
else if(arg2 < 1.0) {
if(1.0 <= arg1){
sfxsource_setSfxId(D_8037C6C4, SFX_1C_ALARMCLOCK);
sfxsource_setSampleRate(D_8037C6C4, 0x7fff);
func_8030E2C4(D_8037C6C4);
}
}
else{
unks0 = 0;
f20 = 5.0f;
while(f20 > 0.0f){
if(f20 <= arg1 && arg2 < f20){
sfxsource_setSfxId(D_8037C6C4, (unks0) ? SFX_2A_CLOCK_TIC_1 : SFX_51_CLOCK_TIC_2);
sfxsource_setSampleRate(D_8037C6C4, 0x7fff);
func_8030E2C4(D_8037C6C4);
return;
}
unks0 ^= 1;
f20 -= ml_map_f(f20, 0.0f, 5.0f, 0.1f, 0.25f);
}
}
}
void func_802997E8(void){
f32 f12;
f32 f2;
if(D_8037C6D0.unk0){
D_8037C6D0.unk4 += time_getDelta();
if(D_8037C6D0.unk8 <= D_8037C6D0.unk4){
func_8030DA44(D_8037C6D0.unk0);
D_8037C6D0.unk0 = 0;
}
else{
f12 = D_8037C6D0.unk4/D_8037C6D0.unk8;
if(f12 < D_8037C6D0.unkC){
f2 = ml_map_f(f12, 0.0f, D_8037C6D0.unkC, D_8037C6D0.unk14, D_8037C6D0.unk18);
}
else if(f12 < D_8037C6D0.unk10){
f2 = D_8037C6D0.unk18;
}
else{
f2 = ml_map_f(f12, D_8037C6D0.unk10, 1.0f, D_8037C6D0.unk18, D_8037C6D0.unk1C);
}
func_8030DBB4(D_8037C6D0.unk0, f2);
}
}
}
void func_802998D0(u8 indx){
func_8030E6A4(SFX_19_BANJO_LANDING_08, D_8037C6CC, 22000);
}
void func_80299900(void){
D_8037C6C8 = 0;
D_8037C6C0 = func_8030D90C();
func_8030DD14(D_8037C6C0, 3);
func_8030DD90(D_8037C6C0, 0);
D_8037C6CC = 1.0f;
D_8037C6C1 = func_8030D90C();
sfxsource_setSfxId(D_8037C6C1, SFX_18_BIGBUTT_SLIDE);
func_8030DD54(D_8037C6C1, func_802998D0);
sfxsource_setSampleRate(D_8037C6C1, 28000);
func_8030DD14(D_8037C6C1, 2);
func_8030DD90(D_8037C6C1, 0);
D_8037C6C2 = func_8030D90C();
func_8030DD90(D_8037C6C2, 0);
D_8037C6C3 = func_8030D90C();
func_8030DD90(D_8037C6C3, 0);
D_8037C6C4 = func_8030D90C();
func_8030DD90(D_8037C6C4, 0);
func_8030DD14(D_8037C6C4, 3);
D_8037C6D0.unk0 = 0;
}
void func_80299A20(void){
func_8030DA44(D_8037C6C1);
func_8030DA44(D_8037C6C0);
func_8030DA44(D_8037C6C3);
func_8030DA44(D_8037C6C2);
func_8030DA44(D_8037C6C4);
if(D_8037C6D0.unk0){
func_8030DA44(D_8037C6D0.unk0);
}
}
void func_80299A8C(void){
func_802997E8();
}
void func_80299AAC(void){
D_8037C6CC += randf()*0.1 - 0.05;
D_8037C6CC = max_f(D_8037C6CC, 0.9f);
D_8037C6CC = min_f(D_8037C6CC, 1.5f);
func_8030DBB4(D_8037C6C1, D_8037C6CC);
func_8030E2C4(D_8037C6C1);
}
void func_80299B58(f32 arg0, f32 arg1){
func_80299CF4(D_80364574[D_80364560], randf2(0.93f, 1.09f), 25000);
D_80364560++;
if(D_80364560 >= 3)
D_80364560 = 0;
}
void func_80299BD4(void){
func_8030E5F4(SFX_44_KAZOOIE_AUW, 1.117f);
}
void func_80299BFC(f32 arg0){
sfxsource_setSfxId(D_8037C6C0, D_80364564[D_8037C6C8]);
func_8030DBB4(D_8037C6C0, arg0);
func_8030E2C4(D_8037C6C0);
++D_8037C6C8;
if(D_8037C6C8 >= 8)
D_8037C6C8 = 0;
}
void func_80299C78(u8 indx, enum sfx_e sfx_id, f32 arg2, s32 arg3){
sfxsource_setSfxId(indx, sfx_id);
func_8030DBB4(indx, arg2);
sfxsource_setSampleRate(indx, arg3);
func_8030E2C4(indx);
}
u8 func_80299CC4(void){
return D_8037C6C2;
}
void func_80299CD0(void){
func_8030E3FC(D_8037C6C2);
}
void func_80299CF4(enum sfx_e sfx_id, f32 arg1, s32 arg2){
func_80299C78(D_8037C6C2, sfx_id, arg1, arg2);
}
void func_80299D2C(enum sfx_e sfx_id, f32 arg1, s32 arg2){
func_80299C78(D_8037C6C3, sfx_id, arg1, arg2);
}
void func_80299D64(void){
if(func_8029CEB0() == 4){
FUNC_8030E624(SFX_116_DEAF_RUSTLING, 0.7f, 32000);
FUNC_8030E624(SFX_116_DEAF_RUSTLING, 0.8f, 32000);
}
else{
FUNC_8030E624(SFX_1F_HITTING_AN_ENEMY_3, 0.8f, 32750);
}
}
void func_80299DB8(void){
if(func_8029CEB0() == 4){
FUNC_8030E624(SFX_116_DEAF_RUSTLING, 0.7f, 32000);
}
else{
FUNC_8030E624(SFX_1F_HITTING_AN_ENEMY_3, 0.8f, 18000);
}
}
void func_80299E00(void){
if(func_8029CEB0() == 4){
FUNC_8030E624(SFX_116_DEAF_RUSTLING, 0.7f, 27000);
}
else{
FUNC_8030E624(SFX_1F_HITTING_AN_ENEMY_3, 1.0f, 14000);
}
}
void func_80299E48(void){
func_8030E394(D_8037C6C0);
}
void func_80299E6C(void){
func_8030E394(D_8037C6C2);
}
void func_80299E90(void){
func_8030E394(D_8037C6C3);
}
void func_80299EB4(void){}

177
src/core2/code_12F30.c Normal file
View File

@@ -0,0 +1,177 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern f32 func_80294404(void);
extern s16 D_80364580[];
extern f32 D_80374CF0;
extern f64 D_80374CF8;
extern f64 D_80374D00;
extern f32 D_80374D08;
/*.bss*/
struct {
u8 unk0;
f32 unk4[3];
}
D_8037C6F0;
/*.code */
#ifndef NONMATCHING
#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_12F30/func_80299EC0.s")
#else
void func_80299EC0(f32 arg0[3]) {
f32 spEC[3]; //player_pos
f32 spE0[3];
f32 spD4[3];
BKModelBin *spC8;
f32 spB8[3];
f32 spAC[3];
f32 spA0[3];
f32 sp7C[3][3]; //tri_vtx_colors
s32 sp78;
s32 i;
f32 sp70;
Struct60s *sp6C; //floor_vtx_list
f32 sp48[3][3]; //tri_vtx_coord
f32 temp_f0_2;
f32 temp_f2_2;
f32 temp_f2_4;
Vtx *vtx_buffer;
Vtx *temp_v1;
f32 phi_f18;
arg0[0] = 255.0f;\
arg0[1] = 255.0f;\
arg0[2] = 255.0f;
if (D_8037C6F0.unk0 == 1) {
sp78 = 50;
} else if (func_8028EE84() != BSWATERGROUP_0_NONE) {
sp78 = 200;
} else {
sp78 = 250;
}
_player_getPosition(spEC);
sp6C = func_8029463C();
spC8 = func_802946A8();
if (spC8 == NULL) {
sp6C = NULL;
}
if ((spEC[1] - func_80294438()) > 100.0f) {
sp6C = NULL;
}
if (sp6C == NULL) return;
if (sp6C->unk6 &2) return;
vtx_buffer = vtxList_getVertices(func_8033A148(spC8));
for(i = 0; i<3; i++){
temp_v1 = vtx_buffer + sp6C->unk0[i];
sp48[i][0] = (f32) temp_v1->v.ob[0];
sp48[i][1] = (f32) temp_v1->v.ob[1];
sp48[i][1] = 0.0f;
sp48[i][2] = (f32) temp_v1->v.ob[2];
sp7C[i][0] = (f32) temp_v1->v.cn[0];
sp7C[i][1] = (f32) temp_v1->v.cn[1];
sp7C[i][2] = (f32) temp_v1->v.cn[2];
}
// spEC[1] = 0.0f;
spE0[0] = spEC[0] - sp48[0][0];
spE0[1] = 0.0f;
spE0[2] = spEC[2] - sp48[0][2];
spAC[0] = sp48[0][0] - sp48[1][0];
spAC[1] = 0.0f;
spAC[2] = sp48[0][2] - sp48[1][2];
spB8[0] = -(sp48[2][2] - sp48[1][2]);
spB8[1] = 0.0f;
spB8[2] = sp48[2][0] - sp48[1][0];
phi_f18 = (spE0[0] * spB8[0]) + (spE0[1] * spB8[1]) + (spB8[2] * spE0[2]);
if(phi_f18 == 0.0f){
phi_f18 = D_80374CF0;
}
temp_f0_2 = -((spB8[2] * spAC[2]) + ((spAC[0] * spB8[0]) + 0.0f)) / phi_f18;
spA0[0] = (spE0[0] * temp_f0_2) + sp48[0][0];
spA0[1] = 0.0f;
spA0[2] = (spE0[2] * temp_f0_2) + sp48[0][2];
spD4[0] = spA0[0] - sp48[1][0];
spD4[1] = spA0[1] - sp48[1][1];
spD4[2] = spA0[2] - sp48[1][2];
temp_f2_2 = gu_sqrtf(spD4[0]*spD4[0] + spD4[1]*spD4[1] + spD4[2]*spD4[2]) / (gu_sqrtf(spB8[0] * spB8[0] + spB8[1] * spB8[1] + spB8[2] * spB8[2]) + D_80374CF8);
for(i = 0; i < 3; i++){
arg0[i] = sp7C[1][i] + (sp7C[2][i] - sp7C[1][i])*temp_f2_2;
}
spD4[0] = spA0[0] - sp48[0][0];
spD4[1] = spA0[1] - sp48[0][1];
spD4[2] = spA0[2] - sp48[0][2];
temp_f2_4 = (1.0 - (gu_sqrtf(spE0[0]*spE0[0] + spE0[1]*spE0[1] + spE0[2]*spE0[2]) / (gu_sqrtf(spD4[0]*spD4[0] + spD4[1]*spD4[1] + spD4[2]*spD4[2]) + D_80374D00)));
for(i = 0; i < 3; i++){
arg0[i] += (sp7C[0][i] - arg0[i])*temp_f2_4;
}
for(i = 0; i < 3; i++){
arg0[i] += (255.0f - arg0[i]) * (func_80294404() / 100.0f);
}
for(i = 0; i < 3; i++){
if(arg0[i] > 255.0f){ arg0[i] = 255.0f; }
if(arg0[i] < 0.0f) { arg0[i] = 0.0f; }
}
arg0[0] = ((arg0[0] + arg0[1] + arg0[2]) * (f32) (0xFF - sp78)) / D_80374D08 + sp78;
arg0[1] = arg0[0];
arg0[2] = arg0[0];
}
#endif
void func_8029A47C(s32 arg0[3]){
arg0[0] = (s32)(D_8037C6F0.unk4[0] + 0.5);
arg0[1] = (s32)(D_8037C6F0.unk4[1] + 0.5);
arg0[2] = (s32)(D_8037C6F0.unk4[2] + 0.5);
}
void func_8029A4D0(void){
int i;
s32 map_id = map_get();
D_8037C6F0.unk0 = 0;
D_8037C6F0.unk4[0] = 255.0f;
D_8037C6F0.unk4[1] = 255.0f;
D_8037C6F0.unk4[2] = 255.0f;
for(i = 0; D_80364580[i]; i++){
if(map_id == D_80364580[i]){
D_8037C6F0.unk0 = 1;
break;
}
}
}
void func_8029A54C(void){}
void func_8029A554(void){
int i;
f32 sp28[3];
func_80299EC0(sp28);
for(i = 0; i < 3; i++){
if(D_8037C6F0.unk4[i] < sp28[i]){
D_8037C6F0.unk4[i] += 40.0f;
if(sp28[i] < D_8037C6F0.unk4[i])
D_8037C6F0.unk4[i] = sp28[i];
}
else{//L8029A5C0
D_8037C6F0.unk4[i] -= 40.0f;
if( D_8037C6F0.unk4[i] < sp28[i])
D_8037C6F0.unk4[i] = sp28[i];
}
}
}

68
src/core2/code_13780.c Normal file
View File

@@ -0,0 +1,68 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
#include "bsint.h"
s32 D_8037D160; //prev_state
s32 D_8037D164; //state
s32 D_8037D168; //next_state
s32 D_8037D16C;
s32 D_8037D170;
void bs_clearState(void){
D_8037D160 = 0;
D_8037D164 = 0;
D_8037D168 = 0;
}
void bs_setState(s32 state_id){
if(state_id == 0)
return;
D_8037D168 = state_id;
if(bsList_getEndMethod(D_8037D164) != NULL)
bsList_getEndMethod(D_8037D164)();
D_8037D160 = D_8037D164;
D_8037D164 = D_8037D168;
D_8037D168 = 0;
if(bsList_getInitMethod(D_8037D164) != NULL)
bsList_getInitMethod(D_8037D164)();
}
s32 bs_getPrevState(void){
return D_8037D160;
}
s32 bs_getState(void){
return D_8037D164;
}
s32 bs_getNextState(void){
return D_8037D168;
}
void bs_updateState(void){
if(bsList_getUpdateMethod(D_8037D164) != NULL)
bsList_getUpdateMethod(D_8037D164)();
}
s32 bs_checkInterrupt(s32 arg0){
D_8037D16C = arg0;
D_8037D170 = 0;
if(bsList_getInterruptMethod(D_8037D164) != NULL)
bsList_getInterruptMethod(D_8037D164)();
return D_8037D170;
}
void func_8029A86C(s32 arg0){
D_8037D170 = arg0;
}
s32 bs_getInterruptType(void){
return D_8037D16C;
}

61
src/core2/code_13900.c Normal file
View File

@@ -0,0 +1,61 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
struct {
f32 unk0;
f32 unk4;
u8 xform_8;
} D_8037D180;
u8 D_8037D18C;
/* .code */
void func_8029A890(void){
func_802957FC();
}
void func_8029A8B0(void){
func_80295804();
D_8037D180.unk0 = D_8037D180.unk4 = 0.0f;
D_8037D180.xform_8 = TRANSFORM_1_BANJO;
D_8037D18C = FALSE;
}
enum transformation_e _player_getTransformation(void){
return D_8037D180.xform_8;
}
f32 func_8029A900(void){
return D_8037D180.unk0;
}
f32 func_8029A90C(void){
return D_8037D180.unk4;
}
s32 func_8029A918(void){
return D_8037D18C;
}
void func_8029A924(void){}
void func_8029A92C(void){
func_8029A968(0.0f);
func_8029A974(0.0f);
}
void func_8029A95C(enum transformation_e xform_id){
D_8037D180.xform_8 = xform_id;
}
void func_8029A968(f32 arg0){
D_8037D180.unk0 = arg0;
}
void func_8029A974(f32 arg0){
D_8037D180.unk4 = arg0;
}
void func_8029A980(s32 arg0){
D_8037D18C = arg0;
}

177
src/core2/code_13A00.c Normal file
View File

@@ -0,0 +1,177 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern void func_802F494C(void *, f32);
extern void func_802F4884(void *, s32, f32);
extern f32 func_80294500(void);
void func_8029AE74(s32 arg0);
void func_8029AEE4(s32 arg0);
/* .bss */
Struct5Ds *D_8037D190;
u8 D_8037D194;
/* .code */
void func_8029A990(void){
f32 plyr_pos[3];
ParticleEmitter *pCtrl;
if(map_get() == MAP_2C_MMM_BATHROOM)
func_8029C304(0);
else
func_8029C304(1);
_player_getPosition(plyr_pos);
plyr_pos[1] = func_80294500();
pCtrl = func_802F4094(plyr_pos, 25.0f);
particleEmitter_setParticleVelocityRange(pCtrl,
-350.0f, 300.0f, -350.0f,
350.0f, 500.0f, 350.0f
);
particleEmitter_emitN(pCtrl, 10);
}
void func_8029AA3C(void){
f32 sp34[3];
f32 sp30;
ParticleEmitter *pCtrl;
if(map_get() == MAP_2C_MMM_BATHROOM)
func_8029C304(0);
else
func_8029C304(2);
sp30 = ml_map_f(func_80297AB8(), 0.0f, 500.0f, 70.0f, 250.0f);
func_8028E9C4(D_8037D194, sp34);
sp34[1] = func_80294500();
pCtrl = func_802F4094(sp34, 8.0f);
particleEmitter_setParticleVelocityRange(pCtrl,
-sp30, 300.0f, -sp30,
sp30, 350.0f,sp30
);
particleEmitter_emitN(pCtrl, 5);
}
void func_8029AB14(s32 arg0, s32 arg1){
int sp24 = (arg1 == 4) || (arg1 == 0xb);
int sp20 = player_inWater();
if(sp24){
func_8029AA3C();
}
switch(player_getTransformation()){
case TRANSFORM_3_PUMPKIN: //L8029AB9C
if(arg1 == 7){
func_802F4900(arg0, arg1);
}
if(sp24 || sp20){
func_802F4900(arg0, 0xe);
}
else{
func_802F4900(arg0, 0xd);
}
break;
case TRANSFORM_4_WALRUS://L8029ABEC
if(sp24){
func_802F4900(arg0, 0x4);
}
else if(sp20){
func_802F4900(arg0, 0xf);
}
else{
func_802F4900(arg0, 0xd);
}
break;
default: //L8029AC28
break;
}
}
void func_8029AC34(s32 arg0, s32 arg1){
int sp1C;
sp1C = (arg1 == 4) || (arg1 == 0xb || player_inWater());
if(sp1C){
func_8029A990();
}
switch(player_getTransformation()){
case TRANSFORM_3_PUMPKIN:
case TRANSFORM_4_WALRUS:
case TRANSFORM_5_CROC:
if(sp1C)
FUNC_8030E624(SFX_10_BANJO_LANDING_07, 0.9f, 13000);
else
FUNC_8030E624(SFX_2F_ORANGE_SPLAT, 1.4f, 8000);
break;
default:
break;
}
}
void func_8029ACD4(void){
f32 plyr_pos[3];
_player_getPosition(plyr_pos);
func_802F4894(D_8037D190, plyr_pos);
func_802F4884( D_8037D190, func_80294660(), func_80294500());
}
void func_8029AD28(f32 arg0, s32 arg1){
AnimCtrl *plyr_animCtrl = _player_getAnimCtrlPtr();
if(animctrl_isAt(plyr_animCtrl, arg0)){
func_8029AE74(arg1);
}
}
void func_8029AD68(f32 arg0, s32 arg1){
AnimCtrl *plyr_animCtrl = _player_getAnimCtrlPtr();
if(animctrl_isAt(plyr_animCtrl, arg0)){
func_8029AEE4(arg1);
}
}
void func_8029ADA8(void){
func_802F4798(D_8037D190);
}
void func_8029ADCC(void){
D_8037D190 = func_802F47D0();
func_802F487C(D_8037D190, func_8029AC34);
func_802F48B4(D_8037D190, func_8029AB14);
}
void func_8029AE1C(void){
func_8029ACD4();
func_802F48BC(D_8037D190);
}
void func_8029AE48(void){
func_8029ACD4();
func_802F48E0(D_8037D190);
}
void func_8029AE74(s32 arg0){
s32 tmp_v0;
func_8029ACD4();
D_8037D194 = arg0;
tmp_v0 = func_8028ECAC();
if(tmp_v0 == BSGROUP_6_TURBO_TALON_TRAINERS || tmp_v0 == BSGROUP_8_TROT || tmp_v0 == BSGROUP_9_LONG_LEG){
func_802F494C(D_8037D190, 0.2f);
}
else{
func_802F4924(D_8037D190);
}
}
void func_8029AEE4(s32 arg0){
func_8029ACD4();
D_8037D194 = arg0;
func_802F4978(D_8037D190);
}
void func_8029AF1C(void){
D_8037D190 = func_802F499C(D_8037D190);
}

161
src/core2/code_13FC0.c Normal file
View File

@@ -0,0 +1,161 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
f32 func_8024DDD8(f32[3], f32);
extern void func_8024E71C(s32, f32*);
extern f32 ml_acosf(f32);
extern f32 func_8028EBA4(void);
extern void particleEmitter_setSphericalParticleVelocityRange(ParticleEmitter *this, f32 pitch_min, f32 yaw_min, f32 radial_min, f32 pitch_max, f32 yaw_max, f32 radial_max);
ParticleEmitter * func_802EDD8C(f32[3], f32, f32);
extern void func_80354030(f32[3], f32);
extern void func_80356074(f32[3], f32[3], f32, f32);
extern void func_80292864(f32, f32);
/* .bss */
struct {
f32 unk0;
s32 unk4;
f32 unk8[5];
f32 unk1C[2];
f32 unk24;
f32 unk28;
s32 unk2C;
s32 unk30;
u8 unk34;
} D_8037D1A0;
/*.code */
f32 func_8029AF50(f32 arg0, f32 arg1, f32 arg2){
return (arg0 - arg1)/(arg2 - arg1);
}
void func_8029AF68(void) {
s32 i;
if (D_8037D1A0.unk28 <= D_8037D1A0.unk8[0]) {
D_8037D1A0.unk4 = 0;
D_8037D1A0.unk0 = 0.0f;
return;
}
if ((D_8037D1A0.unk8[0] < D_8037D1A0.unk28) && (D_8037D1A0.unk28 <= D_8037D1A0.unk8[1])) {
D_8037D1A0.unk4 = 1;
D_8037D1A0.unk0 = func_8029AF50(D_8037D1A0.unk28, D_8037D1A0.unk8[0], D_8037D1A0.unk8[1]);
return;
}
if ((D_8037D1A0.unk8[1] < D_8037D1A0.unk28) && (D_8037D1A0.unk28 <= D_8037D1A0.unk8[2])) {
D_8037D1A0.unk4 = 2;
D_8037D1A0.unk0 = func_8029AF50(D_8037D1A0.unk28, D_8037D1A0.unk8[1], D_8037D1A0.unk8[2]);
return;
}
if ((D_8037D1A0.unk8[2] < D_8037D1A0.unk28) && (D_8037D1A0.unk28 <= D_8037D1A0.unk8[3])) {
D_8037D1A0.unk4 = 3;
D_8037D1A0.unk0 = func_8029AF50(D_8037D1A0.unk28, D_8037D1A0.unk8[2], D_8037D1A0.unk8[3]);
return;
}
if ((D_8037D1A0.unk8[3] < D_8037D1A0.unk28) && (D_8037D1A0.unk28 <= D_8037D1A0.unk8[4])) {
D_8037D1A0.unk4 = 4;
D_8037D1A0.unk0 = func_8029AF50(D_8037D1A0.unk28, D_8037D1A0.unk8[3], D_8037D1A0.unk8[4]);
return;
}
}
void func_8029B0C0(void) {
func_8029B324(0, 0.12f);
func_8029B324(1, 0.2f);
func_8029B324(2, 0.5f);
func_8029B324(3, 0.75f);
func_8029B324(4, 1.0f);
}
void func_8029B11C(void) {
D_8037D1A0.unk1C[0] = D_8037D1A0.unk1C[1] = D_8037D1A0.unk28 = D_8037D1A0.unk24 = D_8037D1A0.unk0 = 0.0f;
D_8037D1A0.unk34 = 0;
D_8037D1A0.unk30 = 0;
D_8037D1A0.unk2C = 0;
D_8037D1A0.unk4 = 0;
func_8029B0C0();
}
void func_8029B174(void) {
func_8024E71C(0, &D_8037D1A0.unk1C);
if (D_8037D1A0.unk34) {
D_8037D1A0.unk1C[0] = D_8037D1A0.unk1C[1] = 0.0f;
}
D_8037D1A0.unk28 = gu_sqrtf(D_8037D1A0.unk1C[0]*D_8037D1A0.unk1C[0] + D_8037D1A0.unk1C[1]*D_8037D1A0.unk1C[1]);
if (D_8037D1A0.unk28 != 0.0f) {
D_8037D1A0.unk2C = 0;
D_8037D1A0.unk30 = (s32) (D_8037D1A0.unk30 + 1);
D_8037D1A0.unk24 = ml_acosf(D_8037D1A0.unk1C[1] / D_8037D1A0.unk28);
if (D_8037D1A0.unk1C[0] < 0.0f) {
D_8037D1A0.unk24 = (f32) (180.0f - D_8037D1A0.unk24);
}
if (D_8037D1A0.unk1C[1] < 0.0f) {
D_8037D1A0.unk24 = (f32) (360.0f - D_8037D1A0.unk24);
}
} else {
D_8037D1A0.unk30 = 0;
D_8037D1A0.unk2C = (s32) (D_8037D1A0.unk2C + 1);
}
if (D_8037D1A0.unk28 > 1.0) {
D_8037D1A0.unk28 = 1.0f;
}
func_8029AF68();
}
f32 func_8029B2D0(void){
return D_8037D1A0.unk1C[0];
}
f32 func_8029B2DC(void){
return D_8037D1A0.unk1C[1];
}
f32 func_8029B2E8(void){
return D_8037D1A0.unk28;
}
f32 func_8029B2F4(void){
return D_8037D1A0.unk24;
}
s32 func_8029B300(void){
return D_8037D1A0.unk4;
}
f32 func_8029B30C(void){
return D_8037D1A0.unk0;
}
void func_8029B318(bool arg0){
D_8037D1A0.unk34 = arg0;
}
void func_8029B324(s32 arg0, f32 arg1){
D_8037D1A0.unk8[arg0] = arg1;
}
f32 func_8029B33C(void){
f32 sp1C[3];
_player_getPosition(sp1C);
return func_8024DDD8(sp1C, func_8029B2F4());
}
s32 func_8029B370(void){
return D_8037D1A0.unk30;
}
s32 func_8029B37C(void){
return D_8037D1A0.unk2C;
}
bool func_8029B388(void){
return D_8037D1A0.unk30 == 1;
}
bool func_8029B39C(void){
return D_8037D1A0.unk2C == 1;
}

817
src/core2/code_14420.c Normal file
View File

@@ -0,0 +1,817 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
f32 func_8024DDD8(f32[3], f32);
extern void func_8024E71C(s32, f32*);
extern f32 ml_acosf(f32);
extern f32 func_8028EBA4(void);
extern void particleEmitter_setSphericalParticleVelocityRange(ParticleEmitter *this, f32 pitch_min, f32 yaw_min, f32 radial_min, f32 pitch_max, f32 yaw_max, f32 radial_max);
ParticleEmitter * func_802EDD8C(f32[3], f32, f32);
extern void func_80354030(f32[3], f32);
extern void func_80354380(f32[3], f32);
extern void func_80356074(f32[3], f32[3], f32, f32);
extern void func_80292864(f32, f32);
typedef struct {
s16 state_id;
s16 anim_id;
f32 anim_duration;
} Struct_core2_13FC0;
enum bs_14420_e{
BS14420_0_TERMITE,
BS14420_1_PUMPKIN,
BS14420_2_CROC,
BS14420_3_WALRUS,
BS14420_4_WATER_SURFACE,
BS14420_5_UNDERWATER,
BS14420_7_FLY = 0x7,
BS14420_8_TROT,
BS14420_A_WALRUS_SLED = 0xA,
BS14420_B_BEE,
BS14420_C_CLIMB,
BS14420_D_WONDERWING,
};
/* .data */
s32 D_80364620 = 0;
s16 D_80364624[14] = {0};
u8 D_80364640[16] = {0};
Struct_core2_13FC0 D_80364650[14] = {0};
Struct_core2_13FC0 D_803646C0[14] = {0};
Struct_core2_13FC0 D_80364730[14] = {0};
Struct_core2_13FC0 D_803647A0[14] = {0};
Struct_core2_13FC0 D_80364810[14] = {0};
Struct_core2_13FC0 D_80364880[14] = {0};
Struct_core2_13FC0 D_803648F0[14] = {0};
/* .bss */
// extern struct {
// s32 map_id;
// s32 exit_id;
// }D_8037D1E0;
s32 D_8037D1E0[2];
extern u8 D_8037D1E8;
/* .code */
f32 func_8029B3B0(f32 arg0) {
if (func_8028B128()) {
return arg0 * 0.2;
}
if (func_8028B120()) {
return arg0 * 0.2;
}
return arg0;
}
f32 func_8029B41C(void){
f32 sp2C[3];
f32 sp20[3];
f32 sp1C;
player_getPosition(sp2C);
func_8024C5CC(sp20);
func_80257F18(sp2C, sp20, &sp1C);
return sp1C;
}
enum bs_e func_8029B458(void){
enum bs_e sp1C;
sp1C = bs_getState();
switch(_player_getTransformation()){
case TRANSFORM_2_TERMITE:
return BS_38_ANT_FALL;
case TRANSFORM_3_PUMPKIN:
return BS_4B_PUMPKIN_FALL;
case TRANSFORM_5_CROC:
return BS_61_CROC_FALL;
case TRANSFORM_4_WALRUS:
if(func_802B8190(sp1C))
return BS_82_WALRUS_SLED_LOSE_IN_AIR;
return BS_6A_WALRUS_FALL;
case TRANSFORM_6_BEE:
return BS_88_BEE_FALL;
default:
if(bsbtrot_inSet(sp1C))
return BS_71_BTROT_FALL;
return BS_2F_FALL;
}
}
enum bs_e func_8029B504(void){
enum bs_e sp1C;
if(miscflag_isTrue(0xF))
return 0;
miscflag_set(0xF);
sp1C = func_8029B458();
if(bs_getState() != sp1C)
return sp1C;
return 0;
}
s32 func_8029B564(void){
return 1;
}
f32 func_8029B56C(f32 arg0, f32 arg1, f32 arg2, f32 arg3) {
f32 phi_f0;
f32 phi_f2;
phi_f0 = arg2;
phi_f2 = 0.0f;
while ((phi_f0 > 0.0f) || (arg1 < arg0)) {
phi_f2 += 0.0166666675f;
arg0 += phi_f0 * 0.0166666675f;
phi_f0 += arg3 * 0.0166666675f;
}
return phi_f2;
}
void func_8029B5EC(void){
func_802DC560(0, 0);
func_802E412C(1, 0);
func_802E4078(MAP_1F_CS_START_RAREWARE, 0, 1);
}
void func_8029B62C(void){
if(item_empty(ITEM_16_LIFE)){
if(!func_8031FF1C(BKPROG_BD_ENTER_LAIR_CUTSCENE) || func_8031FF1C(BKPROG_A6_FURNACE_FUN_COMPLETE)){
func_8025A430(-1, 0x7D0, 3);
func_8025A2B0();
func_802DC528(0, 0);
func_80324C58();
timedFunc_set_0(5.0f, func_8029B5EC);
}
else{
func_802E412C(1, 0);
func_802E4078(MAP_83_CS_GAME_OVER_MACHINE_ROOM, 0, 1);
}
}
else{
func_802E4048(D_8037D1E0[0], D_8037D1E0[1], 1);
}
}
void func_8029B6F0(void){
if(item_empty(ITEM_16_LIFE)){
func_8029B62C();
}
else{
func_802E4078(D_8037D1E0[0], D_8037D1E0[1], 1);
}
}
void func_8029B73C(f32 arg0[3], f32 arg1, f32 arg2, f32 arg3, f32 arg4) {
f32 sp3C[3];
f32 sp30[3];
f32 temp_f20;
func_8028FA74(sp3C);
if(sp3C[1] < (arg0[1] + arg2))
return;
if(sp3C[1] > (arg0[1] + arg1))
return;
sp30[0] = sp3C[0] - arg0[0];
sp30[1] = 0.0f;
sp30[2] = sp3C[2] - arg0[2];
temp_f20 = (sp30[0]*sp30[0] + sp30[1]*sp30[1] + sp30[2]*sp30[2]);
if (!((arg3 * arg3) < temp_f20)) {
temp_f20 = gu_sqrtf(temp_f20);
ml_vec3f_set_length_copy(sp30, sp30, min_f(time_getDelta() * arg4, arg3 - temp_f20));
ml_vec3f_add(sp3C, sp3C, sp30);
func_8028FAB0(sp3C);
}
}
void func_8029B85C(ActorMarker *caller, enum asset_e text_id, s32 arg2){
func_8030E6D4(SFX_EB_GRUNTY_LAUGH_2);
func_8029B62C();
}
void func_8029B890(void){
if(!func_8031FF1C(BKPROG_A8_HAS_DIED) && !func_803203FC(2)){
func_803114D0();
if(bs_getState() == 0x54){
func_8029B62C();
return;
}
func_80311480(0xf81, 7, NULL, NULL, func_8029B85C, NULL);
func_80320004(BKPROG_A8_HAS_DIED, TRUE);
}
else{
func_8029B62C();
}
}
void func_8029B930(void){
func_803114D0();
}
ParticleEmitter *func_8029B950(f32 pos[3],f32 arg1){
return func_802EDD8C(pos, arg1, func_80294500());
}
void func_8029B984(f32 dst[3]){
f32 plyr_pos[3];
f32 sp18[3];
_player_getPosition(plyr_pos);
func_8024C5CC(sp18);
ml_vec3f_diff_copy(dst, sp18, plyr_pos);
}
f32 func_8029B9C0(void){
f32 sp1C[3];
func_8029B984(sp1C);
return sp1C[0]*sp1C[0] + sp1C[1]*sp1C[1] + sp1C[2]*sp1C[2];
}
f32 func_8029B9FC(void){
f32 sp1C[3];
func_8029B984(sp1C);
return gu_sqrtf(sp1C[0]*sp1C[0] + sp1C[1]*sp1C[1] + sp1C[2]*sp1C[2]);
}
f32 func_8029BA44(void){
f32 sp1C[3];
func_8029B984(sp1C);
return gu_sqrtf(sp1C[0]*sp1C[0] + sp1C[2]*sp1C[2]);
}
enum bs_e func_8029BA80(void){
switch (_player_getTransformation())
{
case TRANSFORM_3_PUMPKIN:
return BS_4B_PUMPKIN_FALL;
case TRANSFORM_2_TERMITE:
return BS_38_ANT_FALL;
case TRANSFORM_5_CROC:
return BS_61_CROC_FALL;
case TRANSFORM_4_WALRUS:
return BS_6A_WALRUS_FALL;
case TRANSFORM_6_BEE:
return BS_88_BEE_FALL;
case TRANSFORM_1_BANJO:
default:
return BS_2F_FALL;
}
}
enum bs_14420_e func_8029BAF0(void){
enum bs_e state_id = bs_getState();
switch (_player_getTransformation())
{
case TRANSFORM_3_PUMPKIN://L8029BB2C
return BS14420_1_PUMPKIN;
case TRANSFORM_2_TERMITE://L8029BB34
return BS14420_0_TERMITE;
case TRANSFORM_5_CROC://L8029BB3C
return BS14420_2_CROC;
case TRANSFORM_4_WALRUS://L8029BB44
if (func_802B8190(state_id)) {
return BS14420_A_WALRUS_SLED;
}
return BS14420_3_WALRUS;
case TRANSFORM_6_BEE://L8029BB64
return BS14420_B_BEE;
case TRANSFORM_1_BANJO://L8029BB6C
default:
if (bsclimb_inSet(state_id)) {
return BS14420_C_CLIMB;
}
if (bsbfly_inSet(state_id)) {
return BS14420_7_FLY;
}
if (bsbtrot_inSet(state_id)) {
return BS14420_8_TROT;
}
if (func_80291670(2) != 0.0f) {
return 9;
}
if (miscflag_isTrue(0x18)) {
return BS14420_5_UNDERWATER;
}
if (func_8028ECAC() == BSGROUP_3_WONDERWING) {
return BS14420_D_WONDERWING;
}
if (player_inWater()) {
switch(func_8028EE84()){
case BSWATERGROUP_2_UNDERWATER:
return BS14420_5_UNDERWATER;
case BSWATERGROUP_1_SURFACE:
default:
return BS14420_4_WATER_SURFACE;
}
}
return 6;
break;
}
}
void func_8029BC60(enum asset_e *anim_id, f32 *anim_duration) {
s32 indx;
indx = func_8029BAF0();
*anim_id = D_80364650[indx].anim_id;
*anim_duration = D_80364650[indx].anim_duration;
}
void func_8029BCAC(enum asset_e *anim_id, f32 *anim_duration) {
s32 indx;
indx = func_8029BAF0();
*anim_id = D_803646C0[indx].anim_id;
*anim_duration = D_803646C0[indx].anim_duration;
}
void func_8029BCF8(enum asset_e *anim_id, f32 *anim_duration) {
s32 indx;
indx = func_8029BAF0();
*anim_id = D_803647A0[indx].anim_id;
*anim_duration = D_803647A0[indx].anim_duration;
}
void func_8029BD44(enum asset_e *anim_id, f32 *anim_duration) {
s32 indx;
indx = func_8029BAF0();
*anim_id = D_80364730[indx].anim_id;
*anim_duration = D_80364730[indx].anim_duration;
}
enum bs_e func_8029BD90(void) {
return D_80364650[func_8029BAF0()].state_id;
}
enum bs_e func_8029BDBC(void) {
return D_80364624[func_8029BAF0()];
}
enum bs_e func_8029BDE8(void) {
return D_80364640[func_8029BAF0()];
}
void func_8029BE10(enum asset_e *anim_id, f32 *anim_duration) {
s32 indx;
indx = func_8029BAF0();
*anim_id = D_80364810[indx].anim_id;
*anim_duration = D_80364810[indx].anim_duration;
}
enum bs_e func_8029BE5C(void) {
return D_80364810[func_8029BAF0()].state_id;
}
void func_8029BE88(enum asset_e *anim_id, f32 *anim_duration) {
s32 indx;
indx = func_8029BAF0();
*anim_id = D_80364880[indx].anim_id;
*anim_duration = D_80364880[indx].anim_duration;
}
enum bs_e func_8029BED4(void) {
return D_80364880[func_8029BAF0()].state_id;
}
void func_8029BF00(enum asset_e *anim_id, f32 *anim_duration) {
s32 indx;
indx = func_8029BAF0();
*anim_id = D_803648F0[indx].anim_id;
*anim_duration = D_803648F0[indx].anim_duration;
}
enum bs_e func_8029BF4C(void) {
return D_803648F0[func_8029BAF0()].state_id;
}
enum bs_e bs_getIdleState(void){
switch (_player_getTransformation()) {
case TRANSFORM_3_PUMPKIN:
return BS_48_PUMPKIN_IDLE;
case TRANSFORM_2_TERMITE:
return BS_35_ANT_IDLE;
case TRANSFORM_5_CROC:
return BS_5E_CROC_IDLE;
case TRANSFORM_4_WALRUS:
return BS_67_WALRUS_IDLE;
case TRANSFORM_6_BEE:
return BS_85_BEE_IDLE;
case TRANSFORM_1_BANJO:
default:
if (miscflag_isTrue(0x16)) {
return BS_24_FLY;
}
if (miscflag_isTrue(0x18)) {
return BS_2B_DIVE_IDLE;
}
if (func_80291670(3) != 0.0f) {
return BS_15_BTROT_IDLE;
}
if (func_80291670(2) != 0.0f) {
return BS_26_LONGLEG_IDLE;
}
if (player_inWater()) {
if (player_getYPosition() > (func_80294500() - 80.0f)) {
return BS_2D_SWIM_IDLE;
}
return BS_2B_DIVE_IDLE;
}
if (func_8029A918()) {
return BS_15_BTROT_IDLE;
}
return BS_1_IDLE;
break;
}
}
void func_8029C0D0(void) {
f32 sp3C[3];
ParticleEmitter *p_ctrl;
f32 sp34;
if (func_80294574()) {
_player_getPosition(sp3C);
sp3C[1] = sp34 = func_80294500();
p_ctrl = func_802F4094(sp3C, 35.0f);
func_802F3554(3, sp3C);
particleEmitter_setParticleVelocityRange(p_ctrl, -350.0f, 300.0f, -350.0f, 350.0f, 500.0f, 350.0f);
particleEmitter_emitN(p_ctrl, 0xA);
particleEmitter_setParticleVelocityRange(p_ctrl, -150.0f, 500.0f, -150.0f, 150.0f, 800.0f, 150.0f);
particleEmitter_emitN(p_ctrl, 0xA);
func_802F4200(sp3C);
sp3C[1] -= 30.0f;
p_ctrl = func_802EDD8C(sp3C, 20.0f, sp34);
particleEmitter_setParticleVelocityRange(p_ctrl, -60.0f, -250.0f, -60.0f, 60.0f, -150.0f, 60.0f);
particleEmitter_emitN(p_ctrl, 8);
}
}
void func_8029C22C(void) {
if(func_80294574() && func_80294500() > player_getYPosition())
return;
D_80364620 = D_80364620 ? FALSE : TRUE;
if (func_80297AB8() > 100.0f) {
if (D_80364620) {
func_80292864(func_80297A7C() - 20.0f, 20.0f);
}
else{
func_80292864(func_80297A7C() + 20.0f, 20.0f);
}
}
}
void func_8029C304(s32 arg0) {
f32 sp1C[3];
_player_getPosition(sp1C);
sp1C[1] = func_80294500();
func_802F3584(arg0, sp1C, func_802946CC());
}
void func_8029C348(void) {
f32 sp1C[3];
_player_getPosition(sp1C);
sp1C[0] += randf2(-30.0f, 30.0f);
sp1C[1] += randf2(60.0f, 70.0f);
sp1C[2] += randf2(-30.0f, 30.0f);
func_803541C0(2);
func_803541CC(0x50);
func_80354030(sp1C, 0.5);
}
void func_8029C3E8(f32 arg0, f32 arg1) {
f32 sp3C[3];
f32 sp30[3];
f32 sp2C;
f32 sp28;
_player_getPosition(sp30);
sp28 = ml_map_f(func_80297AB8(), 0.0f, 1000.0f, arg0, arg1);
sp2C = func_8028EBA4();
func_802589E4(sp3C, sp2C, sp28);
sp3C[1] = 0.0f;
sp30[0] += sp3C[0];\
sp30[1] += sp3C[1];\
sp30[2] += sp3C[2];
sp30[0] += randf2(-10.0f, 10.0f);
sp30[1] += 4.0f;
sp30[2] += randf2(-10.0f, 10.0f);
func_80354380(sp30, 0.45f);
}
void func_8029C4E4(bool arg0) {
f32 sp3C[3];
f32 sp38;
ParticleEmitter *sp34;
if (func_80294574()) {
if (arg0) {
func_80292260(sp3C);
} else {
func_8029223C(sp3C);
}
sp3C[1] = func_80294500();
sp38 = yaw_get();
sp34 = func_802F4094(sp3C, 8.0f);
particleEmitter_setSphericalParticleVelocityRange(sp34, -140.0f, sp38 - 35.0f, 200.0f, -120.0f, sp38 + 35.0f, 250.0f);
particleEmitter_emitN(sp34, 3);
particleEmitter_setSphericalParticleVelocityRange(sp34, -100.0f, sp38 - 35.0f, 300.0f, -90.0f, sp38 + 35.0f, 400.0f);
particleEmitter_emitN(sp34, 2);
}
}
void func_8029C5E8(void){
func_8029AE1C();
}
#ifndef NONMATCHING
#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_14420/func_8029C608.s")
#else
void func_8029C608(void) {
enum level_e level_id;
enum map_e sp18;
s32 phi_v0;
level_id = level_get();
if ((level_id == 0) || (level_id == LEVEL_6_LAIR)) {
sp18 = map_get();
phi_v0 = func_803348CC();
} else {
sp18 = func_8030ADD8(level_id);
phi_v0 = func_8030AE24(level_id);
}
D_8037D1E0[1] = phi_v0;
D_8037D1E0[0] = sp18;
}
#endif
void func_8029C674(void) {
f32 sp1C[3];
D_8037D1E8 = FALSE;
if (func_80298850() == 4) {
D_8037D1E8 = TRUE;
miscflag_set(0x17);
func_802BE8D8();
func_8028E9C4(5, sp1C);
func_802C2A64(sp1C);
}
}
void func_8029C6D0(void) {
f32 sp3C[3];
f32 sp30[3];
f32 sp24[3];
f32 sp18[3];
if (func_80298850() == 4 && D_8037D1E8) {
func_8028E9C4(5, sp18);
func_802C2A64(sp18);
func_8028E9C4(5, sp30);
func_80298800(sp24);
func_802BC434(sp3C, sp24, sp30);
func_802C2A8C(sp3C);
}
}
void func_8029C748(void) {
if (D_8037D1E8) {
miscflag_clear(0x17);
func_802BE91C();
}
}
enum bs_e func_8029C780(void){
if(button_held(BUTTON_Z) && can_flip())
return BS_12_BFLIP;
if(miscflag_isTrue(MISC_FLAG_2_ON_SPRING_PAD))
return BS_5_JUMP;
if(miscflag_isTrue(MISC_FLAG_1_ON_FLIGHT_PAD))
return BS_23_FLY_ENTER;
return BS_5_JUMP;
}
void func_8029C7F4(s32 arg0, s32 arg1, s32 arg2, s32 arg3){
func_80289F10(arg0);
func_802991A8(arg1);
func_8029957C(arg2);
func_802978DC(arg3);
}
void func_8029C834(enum map_e map_id, s32 exit_id){
D_8037D1E0[0] = map_id;
D_8037D1E0[1] = exit_id;
}
void func_8029C848(AnimCtrl *arg0) {
switch(_player_getTransformation()) {
case TRANSFORM_2_TERMITE: //L8029C880
animctrl_setIndex(arg0, ANIM_TERMITE_IDLE);
animctrl_setDuration(arg0, 2.0f);
break;
case TRANSFORM_3_PUMPKIN: //L8029C8A0
animctrl_setIndex(arg0, 0xA0);
animctrl_setDuration(arg0, 0.8f);
break;
case TRANSFORM_5_CROC: //L8029C8C4
animctrl_setIndex(arg0, 0xE1);
animctrl_setDuration(arg0, 1.0f);
break;
case TRANSFORM_4_WALRUS: //L8029C8E4
animctrl_setIndex(arg0, 0x11F);
animctrl_setDuration(arg0, 1.0f);
break;
case TRANSFORM_6_BEE: //L8029C904
animctrl_setIndex(arg0, ASSET_1DC_ANIM_BEE_FLY);
animctrl_setDuration(arg0, 0.38f);
break;
case TRANSFORM_1_BANJO:
default:
if (player_inWater()) {
animctrl_setIndex(arg0, 0x57);
animctrl_setDuration(arg0, 1.2f);
}
else{
animctrl_setIndex(arg0, 0x6F);
animctrl_setDuration(arg0, 5.5f);
}
break;
}
}
void func_8029C984(void){
func_8025AB00();
func_8025A2FC(0, 4000);
func_8025A70C(COMUSIC_1A_DEATH);
func_8024BD08(0);
}
s32 func_8029C9C0(s32 arg0){
if(miscflag_isTrue(0xF))
return arg0;
if(button_pressed(BUTTON_A))
arg0 = func_8029C780();
if(button_pressed(BUTTON_B) && can_claw())
arg0 = BS_CLAW;
if(button_held(BUTTON_Z) && should_beak_barge())
arg0 = BS_BBARGE;
if(func_80294F78())
arg0 = func_802926C0();
if(player_isSliding())
arg0 = BS_SLIDE;
return arg0;
}
s32 func_8029CA94(s32 arg0){
if(miscflag_isTrue(0x19))
arg0 = func_80292738();
if(miscflag_isTrue(0x1A))
arg0 = (player_getTransformation() == TRANSFORM_6_BEE) ? 0x46 : BS_34_JIG_NOTEDOOR;
if(miscflag_isTrue(MISC_FLAG_E_TOUCHING_WADING_BOOTS))
arg0 = BS_25_LONGLEG_ENTER;
if(miscflag_isTrue(MISC_FLAG_10_TOUCHING_TURBO_TRAINERS))
arg0 = BS_14_BTROT_ENTER;
if(miscflag_isTrue(0x6))
arg0 = BS_53_TIMEOUT;
if(miscflag_isTrue(0x7))
arg0 = BS_44_JIG_JIGGY;
if(miscflag_isTrue(0x14))
arg0 = (player_getTransformation() == TRANSFORM_4_WALRUS) ? 0x80 : 0x53;
miscflag_clear(0xF);
return arg0;
}
void func_8029CB84(void){
pitch_setIdeal(0.0f);
pitch_applyIdeal();
roll_setIdeal(0.0f);
roll_applyIdeal();
}
void func_8029CBC4(void){
func_8025A55C(-1, 4000, 0xc);
func_8024BD08(1);
}
void func_8029CBF4(void){
if(item_getCount(ITEM_E_JIGGY) == 10){
if( jiggyscore_total() == 100 && func_8031FF1C(BKPROG_FC_DEFEAT_GRUNTY)){
timedFunc_set_3(4.1f, (TFQM3)func_802E4078, MAP_95_CS_END_ALL_100, 0, 1);
}//L8029CC58
timedFunc_set_0(4.0f, func_8029CBC4);
func_8025A6EC(COMUSIC_42_NOTEDOOR_OPENING_FANFARE, -1);
}//L8029CC7C
else{
if( jiggyscore_total() == 100 && func_8031FF1C(BKPROG_FC_DEFEAT_GRUNTY)){
func_802E4078(MAP_95_CS_END_ALL_100, 0, 1);
}
func_8029CBC4();
}
}
void func_8029CCC4(void){
if(miscflag_isFalse(7)) return;
if( miscflag_isTrue(0xF)
&& miscflag_isFalse(6)
&& miscflag_isFalse(20)
){
miscflag_clear(0xF);
}
miscflag_clear(7);
func_802B0CD8();
item_inc(ITEM_E_JIGGY);
if(jiggyscore_total() == 100 && func_8031FF1C(BKPROG_FC_DEFEAT_GRUNTY)){
func_8028F918(2);
}
func_8024BD08(0);
func_8025A55C(0, 4000, 0xC);
func_8025A6EC(COMUSIC_D_JINGLE_JIGGY_COLLECTED, -1);
timedFunc_set_0(4.0f, func_8029CBF4);
}
void func_8029CDA0(void){
item_inc(ITEM_E_JIGGY);
}
void func_8029CDC0(void) {
f32 sp2C[3];
f32 sp20[3];
_player_getPosition(sp20);
sp20[0] += (randf() * 90.0f) - 45.0f;
sp20[2] += (randf() * 90.0f) - 45.0f;
sp2C[0] = (randf() * 20.0f) - 10.0f;
sp2C[1] = (randf() * 50.0f) + 120.0f;
sp2C[2] = (randf() * 20.0f) - 10.0f;
func_80356074(sp20, sp2C, 80.0f, 220.0f);
}

95
src/core2/code_1550.c Normal file
View File

@@ -0,0 +1,95 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
#include "animation.h"
AnimationFile *animcache_get(enum asset_e assest_id);
/* .data */
s16 D_803635C0[] = {0x1, 0x3, 0x5, 0xC, 0xE, 0x17, 0x18, 0x19, 0x1A, 0x1C, 0x1D, 0};
/* .bss */
AnimationCache D_8037A8C0[0x2CA];
/* .code */
void func_802884E0(void){
s16 *phi_v0;
for( phi_v0 = D_803635C0; *phi_v0 != 0; phi_v0++){
D_8037A8C0[*phi_v0].unk4_0 = 1;
}
}
void animcache_loadAll(void){
s32 i;
for(i = 0; i < 0x2CA; i++){
if(D_8037A8C0[i].unk4_0){
animcache_get(i);
}
}
}
AnimationFile *animcache_get(enum asset_e asset_id){
if(!D_8037A8C0[asset_id].unk0){
D_8037A8C0[asset_id].unk0 = (AnimationFile *) assetcache_get(asset_id);
}
D_8037A8C0[asset_id].unk4_15 = 30;
return D_8037A8C0[asset_id].unk0;
}
void animcache_free(void){
s32 i;
for(i = 0; i < 0x2CA; i++){
if(D_8037A8C0[i].unk0){
assetcache_release(D_8037A8C0[i].unk0);
}
}
}
void animcache_init(void){
s32 i = 0;
for(i = 0; i < 0x2CA; i++){
D_8037A8C0[i].unk0 = NULL;
D_8037A8C0[i].unk4_15 = 0;
D_8037A8C0[i].unk4_0 = 0;
}
func_802884E0();
animcache_loadAll();
}
void func_8028873C(s32 arg0){
s32 i;
if(arg0){
for(i = 0; i < 0x2CA; i++){
if(D_8037A8C0[i].unk0 && D_8037A8C0[i].unk4_0 && (D_8037A8C0[i].unk4_15 < 30)){
assetcache_release(D_8037A8C0[i].unk0);
D_8037A8C0[i].unk0 = NULL;
D_8037A8C0[i].unk4_0 = 0;
}
}
}
else{
for(i = 0; i < 0x2CA; i++){
if(D_8037A8C0[i].unk0 && !D_8037A8C0[i].unk4_0 && (D_8037A8C0[i].unk4_15 < 30)){
assetcache_release(D_8037A8C0[i].unk0);
D_8037A8C0[i].unk0 = NULL;
if(func_80254BC4(1))
break;
}
}
}
}
void func_80288834(void){
s32 i;
for(i = 0; i < 0x2CA; i++){
if(D_8037A8C0[i].unk0 && !D_8037A8C0[i].unk4_0){
if(--D_8037A8C0[i].unk4_15 == 0){
assetcache_release(D_8037A8C0[i].unk0);
D_8037A8C0[i].unk0 = NULL;
}
}
}
}

41
src/core2/code_15F20.c Normal file
View File

@@ -0,0 +1,41 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern f32 func_8033DE30(s32);
/* .bss */
u8 D_8037D1F0[5];
f32 D_8037D1F8[5];
/* .code */
s32 func_8029CEB0(void){
return func_802944F4();
}
f32 func_8029CED0(void) {
s32 temp_v0;
temp_v0 = func_8029CEB0();
if (D_8037D1F0[temp_v0] != 0) {
return D_8037D1F8[temp_v0];
}
return func_8033DE30(temp_v0);
}
bool func_8029CF20(s32 arg0) {
return func_802944F4() == arg0;
}
void func_8029CF48(s32 arg0, s32 arg1, f32 arg2) {
D_8037D1F0[arg0] = arg1;
D_8037D1F8[arg0] = arg2;
}
void func_8029CF6C(void) {
s32 i;
for(i = 0; i < 5; i++){
D_8037D1F0[i] = 0;
}
}

322
src/core2/code_16010.c Normal file
View File

@@ -0,0 +1,322 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern int func_80258424(f32 vec[3], f32 minX, f32 minY, f32 minZ, f32 maxX, f32 maxY, f32 maxZ);
/* .bss */
u8 D_8037D210;
u8 D_8037D211;
u8 D_8037D212;
f32 D_8037D218[3];
f32 D_8037D224;
/*.code */
bool func_8029CFA0(void){
return func_80294574() && func_80294500() > player_getYPosition();
}
void func_8029CFF8(void){
func_8030DA44(D_8037D210);
}
void func_8029D01C(void){
miscflag_clear(0x13);
D_8037D210 = func_8030D90C();
D_8037D212 = 0;
}
void func_8029D050(void){
func_80299E48();
func_8030E394(D_8037D210);
sfxsource_setSfxId(D_8037D210, SFX_14D_BANJO_FREEZING);
sfxsource_setSampleRate(D_8037D210, 30000);
func_8030DBB4(D_8037D210, 1.2f);
func_8030DD14(D_8037D210, 3);
func_8030E2C4(D_8037D210);
D_8037D211 = 2;
D_8037D224 = 1.0f;
}
void func_8029D0D8(void) {
func_8030E394(D_8037D210);
sfxsource_setSfxId(D_8037D210, SFX_B0_SIZZLING_NOISE);
sfxsource_setSampleRate(D_8037D210, 32000);
func_8030DBB4(D_8037D210, randf2(0.7f, 0.8f));
func_8030DD14(D_8037D210, 3);
func_8030E2C4(D_8037D210);
}
void func_8029D154(void){
f32 sp1C[3];
player_getPosition(sp1C);
func_8032813C(0x188, sp1C, (s32)yaw_get());
}
void func_8029D194(void) {
func_802C3BF8(&func_8029D154);
FUNC_8030E624(SFX_A_BANJO_LANDING_05, 1.0f, 28000);
func_8030E394(D_8037D210);
sfxsource_setSfxId(D_8037D210, SFX_6D_CROC_BITE);
sfxsource_setSampleRate(D_8037D210, 22000);
func_8030DD14(D_8037D210, 3);
player_getPosition(D_8037D218);
D_8037D218[1] = func_80294500();
D_8037D212 = 4;
D_8037D224 = 0.0f;
}
void func_8029D230(void) {
switch (map_get()) {
case MAP_12_GV_GOBIS_VALLEY: //L8029D2C0
case MAP_31_RBB_RUSTY_BUCKET_BAY: //L8029D2C0
case MAP_3C_RBB_KITCHEN: //L8029D2C0
case MAP_6E_GL_GV_LOBBY:
case MAP_8E_GL_FURNACE_FUN:
func_8029D0D8();
break;
case MAP_27_FP_FREEZEEZY_PEAK: //L8029D2D0
case MAP_7F_FP_WOZZAS_CAVE:
func_8029D050();
break;
case MAP_D_BGS_BUBBLEGLOOP_SWAMP:
case MAP_72_GL_BGS_LOBBY:
func_8029D194();
break;
}
}
void func_8029D2F8(void) {
u8 temp_v0;
if (D_8037D211 != 0) {
if ((func_8029CFA0() == 0) && (func_8028F2FC() == 0) && (func_8030E3FC(D_8037D210) != 0)) {
func_8030E394(D_8037D210);
D_8037D211 = 0;
return;
}
D_8037D224 = max_f(0.0f, D_8037D224 - time_getDelta());
if (D_8037D224 == 0.0f) {
if (D_8037D211 == 1) {
func_8029D050();
}
else if (D_8037D211 == 2) {
func_8030E394(D_8037D210);
sfxsource_setSfxId(D_8037D210, SFX_134_FREEZING_SHIVER);
sfxsource_setSampleRate(D_8037D210, 20000);
func_8030DBB4(D_8037D210, 1.2f);
func_8030DD14(D_8037D210, 3);
func_8030E2C4(D_8037D210);
D_8037D211 = 2;
D_8037D224 = 1.5f;
}
}
}
}
void func_8029D448(void) {
f32 sp1C;
s32 temp_a1;
if (func_8030E3FC(D_8037D210) != 0) {
sp1C = time_getDelta();
temp_a1 = func_8030E1C4(D_8037D210) - (s32) (sp1C * 30000.0);
if (temp_a1 <= 0) {
func_8030E394(D_8037D210);
return;
}
sfxsource_setSampleRate(D_8037D210, temp_a1);
}
}
void func_8029D4D8(void) {
if (D_8037D212 != 0) {
D_8037D224 = max_f(0.0f, D_8037D224 - time_getDelta());
if (!(D_8037D224 > 0.0f)) {
D_8037D212 += -1;
D_8037D224 = randf2(0.12f, 0.22f);
func_8030DBB4(D_8037D210, randf2(0.95f, 1.05f));
func_8030E2C4(D_8037D210);
}
}
}
void func_8029D5A4(void){
switch (map_get()) {
case MAP_12_GV_GOBIS_VALLEY:
case MAP_31_RBB_RUSTY_BUCKET_BAY:
case MAP_3C_RBB_KITCHEN:
case MAP_6E_GL_GV_LOBBY:
case MAP_8E_GL_FURNACE_FUN:
func_8029D448();
break;
case MAP_27_FP_FREEZEEZY_PEAK:
case MAP_7F_FP_WOZZAS_CAVE:
func_8029D2F8();
break;
case MAP_D_BGS_BUBBLEGLOOP_SWAMP:
case MAP_72_GL_BGS_LOBBY:
func_8029D4D8();
break;
}
}
bool func_8029D66C(void){
f32 sp2C[3];
switch (map_get()) {
case MAP_D_BGS_BUBBLEGLOOP_SWAMP:
case MAP_12_GV_GOBIS_VALLEY:
case MAP_1B_MMM_MAD_MONSTER_MANSION:
case MAP_3C_RBB_KITCHEN:
case MAP_43_CCW_SPRING:
case MAP_44_CCW_SUMMER:
case MAP_45_CCW_AUTUMN:
case MAP_46_CCW_WINTER:
case MAP_6E_GL_GV_LOBBY:
case MAP_72_GL_BGS_LOBBY:
case MAP_8E_GL_FURNACE_FUN://L8029D6FC
return func_80294610(0xE000) && func_8028B2E8();
case MAP_31_RBB_RUSTY_BUCKET_BAY:
player_getPosition(sp2C);
return player_inWater() && func_80258424(sp2C, -9000.0f, -3000.0f, -3850.0f, -6820.0f, -700.0f, -1620.0f);
break;
case MAP_27_FP_FREEZEEZY_PEAK:
case MAP_7F_FP_WOZZAS_CAVE://L8029D790
return player_inWater();
}
return FALSE;
}
//can_take_ground_damage
bool func_8029D7B4(void){
enum bs_e sp1C;
sp1C = bs_getState();
switch (map_get()) {
case MAP_D_BGS_BUBBLEGLOOP_SWAMP:
case MAP_12_GV_GOBIS_VALLEY:
case MAP_1B_MMM_MAD_MONSTER_MANSION:
case MAP_27_FP_FREEZEEZY_PEAK:
case MAP_31_RBB_RUSTY_BUCKET_BAY:
case MAP_3C_RBB_KITCHEN:
case MAP_43_CCW_SPRING:
case MAP_44_CCW_SUMMER:
case MAP_45_CCW_AUTUMN:
case MAP_46_CCW_WINTER:
case MAP_6E_GL_GV_LOBBY:
case MAP_72_GL_BGS_LOBBY:
case MAP_7F_FP_WOZZAS_CAVE://L8029D84C
case MAP_8E_GL_FURNACE_FUN://L8029D84C
return func_8029D66C()
&& _player_getTransformation() == TRANSFORM_1_BANJO
&& func_802916CC(2)
&& func_8028ECAC() != BSGROUP_3_WONDERWING
&& func_8028ECAC() != BSGROUP_9_LONG_LEG
&& miscflag_isFalse(MISC_FLAG_E_TOUCHING_WADING_BOOTS)
&& sp1C != BS_25_LONGLEG_ENTER
&& func_8028EE84() != BSWATERGROUP_2_UNDERWATER
&& func_8028EC04() < 1U
&& func_80297C6C() != 3
&& bs_getState() != BS_3D_FALL_TUMBLING
&& func_8028F22C() < 1U
;
}
return 0;
}
void func_8029D968(void){
s32 sp24;
Struct60s *temp_v0;
s32 sp1C;
s32 sp18;
func_8029D5A4();
if(map_get() == MAP_12_GV_GOBIS_VALLEY){
sp18 = 0;
sp1C = 0;
temp_v0 = func_802946F0();
if(temp_v0 != NULL){
sp1C = temp_v0->unk8 & 0x4000;
}
temp_v0 = func_8029463C();
if(temp_v0 != NULL){
sp18 = (temp_v0->unk8 & 0x4000) && func_8028B2E8();
}
if (sp1C || sp18) {
func_80250D94(1.0f, 0.5f, 0.4f);
func_8028F504(0xD);
}
}//L8029DA18
sp24 = func_8029D7B4();
func_8029E1A8(4);
if(sp24){
if(map_get() == MAP_8E_GL_FURNACE_FUN){
if(bs_checkInterrupt(0x13)){
func_8029D230();
}
}
else{//L8029DA6C
if(func_8029E384(4)){
func_8029E3C0(4, 4.0f);
if(func_8028F504(0xD)){
func_8029D230();
func_80250D94(1.0f, 0.5f, 0.4f);
}
if(item_empty(ITEM_14_HEALTH)){
bs_checkInterrupt(0x13);
}
}//L8029DAD0
switch (map_get()) {
case MAP_43_CCW_SPRING://8029DB58
case MAP_44_CCW_SUMMER://8029DB58
case MAP_45_CCW_AUTUMN://8029DB58
case MAP_46_CCW_WINTER://8029DB58
func_8035644C(BKPROG_AA_HAS_TOUCHED_CCW_BRAMBLE_FIELD);
break;
case MAP_D_BGS_BUBBLEGLOOP_SWAMP://8029DB68
case MAP_72_GL_BGS_LOBBY:
func_8035644C(BKPROG_F_HAS_TOUCHED_PIRAHANA_WATER);
break;
case MAP_3C_RBB_KITCHEN://8029DB78
func_8035644C(BKPROG_A9_HAS_TOUCHED_RBB_OVEN);
break;
case MAP_12_GV_GOBIS_VALLEY://8029DB88
case MAP_6E_GL_GV_LOBBY:
case MAP_8E_GL_FURNACE_FUN://8029DB88
func_8035644C(BKPROG_10_HAS_TOUCHED_SAND_EEL_SAND);
break;
case MAP_27_FP_FREEZEEZY_PEAK://8029DB98
case MAP_7F_FP_WOZZAS_CAVE://8029DB98
func_8035644C(BKPROG_14_HAS_TOUCHED_FP_ICY_WATER);
break;
case MAP_1B_MMM_MAD_MONSTER_MANSION://8029DBA8
if(!func_8029CFA0())
func_8035644C(BKPROG_86_HAS_TOUCHED_MMM_THORN_HEDGE);
break;
}
}
miscflag_set(0x13);
}
else{
miscflag_clear(0x13);
}
}

198
src/core2/code_16C60.c Normal file
View File

@@ -0,0 +1,198 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
void func_8029E070(bool);
void func_8029E064(bool);
void func_8029E058(bool);
void func_8029E0C4(f32);
void func_8029E0D0(f32);
void func_8029E0DC(bool);
void func_8029E0F4(bool);
void func_8029E0E8(bool);
/* .bss */
f32 D_8037D230;
u8 D_8037D234;
u8 D_8037D235;
u8 D_8037D236;
u8 D_8037D237;
u8 D_8037D238;
u8 D_8037D239;
u8 D_8037D23A;
f32 D_8037D23C;
f32 D_8037D240;
/* .code */
void func_8029DBF0(void){
s32 temp_s0;
switch(func_80291FAC()){
case 0x34D: //L8029DC24
case 0x34E: //L8029DC24
temp_s0 = (s32) func_80257C48(D_8037D23C, 1.0f, 8.0f);
func_8033A45C(0x1B, temp_s0);
func_8033A45C(0x1D, temp_s0);
func_8033A45C(0x1F, temp_s0);
func_8033A45C(0x21, temp_s0);
temp_s0 = (s32) func_80257C48(D_8037D240, 1.0f, 8.0f);
func_8033A45C(0x1A, temp_s0);
func_8033A45C(0x1C, temp_s0);
func_8033A45C(0x1E, temp_s0);
func_8033A45C(0x20, temp_s0);
break;
case ASSET_34F_MODEL_BANJO_TERMITE: //L8029DCCC
case ASSET_359_MODEL_BANJO_WALRUS: //L8029DCCC
case ASSET_36F_MODEL_BANJO_PUMPKIN: //L8029DCCC
case ASSET_374_MODEL_BANJO_CROC: //L8029DCCC
func_8033A45C(0x1B, (s32) func_80257C48(D_8037D23C, 1.0f, 6.0f));
func_8033A45C(0x1A, (s32) func_80257C48(D_8037D240, 1.0f, 6.0f));
break;
case ASSET_356_MODEL_BANJO_WISHYWASHY: //L8029DD2C
func_8033A45C(1, (s32) func_80257C48(D_8037D240, 1.0f, 4.0f));
break;
}
}
void func_8029DD6C(void) {
bool temp_s0;
func_8033A1FC();
switch (func_80291FAC()) {
case 0x34D:
case 0x34E:
func_8033A45C(1, D_8037D238);
func_8033A45C(9, D_8037D238);
func_8033A45C(0xC, D_8037D238);
func_8033A45C(0xF, D_8037D238);
func_8033A45C(2, D_8037D236);
func_8033A45C(0xA, D_8037D236);
func_8033A45C(0xD, D_8037D236);
func_8033A45C(0x10, D_8037D236);
func_8033A45C(8, D_8037D235);
func_8033A45C(0xB, D_8037D235);
func_8033A45C(0xE, D_8037D235);
func_8033A45C(0x11, D_8037D235);
temp_s0 = D_8037D237 + 1;
func_8033A45C(0x12, temp_s0);
func_8033A45C(0x14, temp_s0);
func_8033A45C(0x16, temp_s0);
func_8033A45C(0x18, temp_s0);
func_8033A45C(0x13, temp_s0);
func_8033A45C(0x15, temp_s0);
func_8033A45C(0x17, temp_s0);
func_8033A45C(0x19, temp_s0);
temp_s0 = D_8037D239 + 1;
func_8033A45C(0x22, temp_s0);
func_8033A45C(0x24, temp_s0);
func_8033A45C(0x26, temp_s0);
func_8033A45C(0x28, temp_s0);
func_8033A45C(0x23, temp_s0);
func_8033A45C(0x25, temp_s0);
func_8033A45C(0x27, temp_s0);
func_8033A45C(0x29, temp_s0);
break;
case ASSET_359_MODEL_BANJO_WALRUS:
func_8033A45C(3, D_8037D23A);
break;
case ASSET_374_MODEL_BANJO_CROC:
temp_s0 = D_8037D237 + 1;
func_8033A45C(4, temp_s0);
func_8033A45C(5, temp_s0);
func_8033A45C(6, temp_s0);
func_8033A45C(7, temp_s0);
break;
}
func_8029DBF0();
}
bool func_8029DFA4(void){
return D_8037D235;
}
bool func_8029DFB0(void){
return D_8037D236;
}
bool func_8029DFBC(void){
return D_8037D238;
}
f32 func_8029DFC8(void){
return D_8037D23C;
}
f32 func_8029DFD4(void){
return D_8037D240;
}
bool func_8029DFE0(void){
return D_8037D237;
}
bool func_8029DFEC(void){
return D_8037D239;
}
void func_8029DFF8(void) {
func_8029E070(0);
func_8029E064(0);
func_8029E058(0);
func_8029E0C4(0.0f);
func_8029E0D0(0.0f);
func_8029E0DC(0);
func_8029E0F4(0);
func_8029E0E8(0);
}
void func_8029E058(bool arg0){
D_8037D235 = arg0;
}
void func_8029E064(bool arg0){
D_8037D236 = arg0;
}
void func_8029E070(bool arg0) {
func_8029E090(arg0, 0.0f);
}
void func_8029E090(bool arg0, f32 arg1) {
D_8037D230 = arg1;
D_8037D234 = arg0;
if (arg1 == 0.0f) {
D_8037D238 = arg0;
}
}
void func_8029E0C4(f32 arg0){
D_8037D23C = arg0;
}
void func_8029E0D0(f32 arg0){
D_8037D240 = arg0;
}
void func_8029E0DC(bool arg0){
D_8037D237 = arg0;
}
void func_8029E0E8(bool arg0){
D_8037D23A = arg0;
}
void func_8029E0F4(bool arg0){
D_8037D239 = arg0;
}
void func_8029E100(void) {
if (D_8037D230 != 0.0f) {
D_8037D230 -= time_getDelta();
if (D_8037D230 <= 0.0f) {
D_8037D238 = D_8037D234;
}
}
}

59
src/core2/code_171F0.c Normal file
View File

@@ -0,0 +1,59 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
/* .bss */
struct {
f32 unk0[0x8];
f32 unk20[0x8];
} D_8037D250;
/* .code*/
void func_8029E180(s32 arg0, f32 arg1){
D_8037D250.unk20[arg0] = D_8037D250.unk0[arg0];
D_8037D250.unk0[arg0] += arg1;
}
int func_8029E1A8(s32 arg0){
D_8037D250.unk20[arg0] = D_8037D250.unk0[arg0];
if(0.0f == D_8037D250.unk0[arg0]){
return 0;
}
D_8037D250.unk0[arg0] = max_f(0.0f, D_8037D250.unk0[arg0] - time_getDelta());
return D_8037D250.unk0[arg0] == 0.0f;
}
void func_8029E22C(s32 arg0){
D_8037D250.unk20[arg0] = D_8037D250.unk0[arg0];
D_8037D250.unk0[arg0] += time_getDelta();
}
f32 func_8029E270(s32 arg0){
return D_8037D250.unk0[arg0];
}
int func_8029E284(s32 arg0, f32 arg1){
return D_8037D250.unk20[arg0] <= arg1
&& arg1 < D_8037D250.unk0[arg0];
}
int func_8029E2E0(s32 arg0, f32 arg1){
return D_8037D250.unk0[arg0] < arg1;
}
int func_8029E314(s32 arg0, f32 arg1){
return arg1 < D_8037D250.unk0[arg0];
}
int func_8029E348(s32 arg0){
return (0.0 != D_8037D250.unk0[arg0]);
}
int func_8029E384(s32 arg0){
return (0.0 == D_8037D250.unk0[arg0]);
}
void func_8029E3C0(s32 arg0, f32 arg1){
D_8037D250.unk20[arg0] = arg1;
D_8037D250.unk0[arg0] = arg1;
}

226
src/core2/code_1930.c Normal file
View File

@@ -0,0 +1,226 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern void func_80250E6C(f32, f32);
extern void func_802BB360(s32, f32);
extern void func_802BB378(s32, f32, f32);
extern void func_802BB3AC(s32, f32);
extern void func_8031B908(u8, u8, u8, f32);
/* .bss */
s32 D_8037BF10;
/* .code */
#ifndef NONMATCHING
void func_802888C0(s32 arg0, s32 arg1);
#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_1930/func_802888C0.s")
#else
void func_802888C0(s32 arg0, s32 arg1){
u8 sp1C[3];
f32 f0;
sp1C[0] = arg0 >> 16;\
sp1C[1] = arg0 >> 8;\
sp1C[2] = arg0 >> 0;\
f0 = reinterpret_cast(f32, arg1);\
func_8031B908(sp1C[0], sp1C[1], sp1C[2], f0);
}
#endif
void func_80288914(s32 arg0, s32 arg1, s32 arg2){
f32 f0 = reinterpret_cast(f32, arg1);
f32 f2 = reinterpret_cast(f32, arg2);
func_802BB378(arg0, f0, f2);
}
void func_8028894C(s32 arg0, s32 arg1, s32 arg2){
f32 f0 = reinterpret_cast(f32, arg1);
f32 f2 = reinterpret_cast(f32, arg2);
func_802BB3DC(arg0, f0, f2);
}
void func_80288984(s32 arg0, s32 arg1){
f32 f0 = reinterpret_cast(f32, arg1);
func_802BB360(arg0, f0);
func_802BB3AC(arg0, 1.0f);
func_802BB3C4(arg0);
}
void func_802889C8(s32 arg0, s32 arg1){
f32 f0 = reinterpret_cast(f32, arg1);
func_802BB3AC(arg0, f0);
}
void func_802889F4(s32 arg0) {
s32 sp18;
s32 temp_t6;
s32 phi_a3;
phi_a3 = arg0 >> 0x10;
if( !(phi_a3 == 0xF2 && map_get() == MAP_91_FILE_SELECT && func_802C5A30() != 0)
&& !((phi_a3 == 0x21 || phi_a3 == 0x3ED) && map_get() == MAP_91_FILE_SELECT && (func_802C5A30() == 1))
){
func_8030E6A4(phi_a3, (f32) ((f64) ((arg0 >> 8) & 0xFF) * 0.0078125), (s32) ((f64) (arg0 & 0xFF) * 128.0));
}
}
void func_80288AE0(s32 arg0){
func_8025A6EC((u16) (arg0 >> 16), (u16)arg0 - 1);
}
void func_80288B14(enum sfx_e arg0){
func_8025A7DC(arg0);
}
void func_80288B34(s32 arg0, s32 arg1){
f32 f12 = reinterpret_cast(f32, arg0);
f32 f14 = reinterpret_cast(f32, arg1);
func_80250E6C(f12, f14);
}
void func_80288B60(s32 arg0, s32 arg1, s32 arg2){
f32 f12 = reinterpret_cast(f32, arg0);
f32 f14 = reinterpret_cast(f32, arg1);
f32 f0 = reinterpret_cast(f32, arg2);
func_80250D94(f12, f14, f0);
}
void func_80288B98(vector(struct2s) **arg0, struct2s *arg1){
if(arg1->unk5){
if(arg1->unk5 == 0xFF)
return;
if(--arg1->unk5)
return;
arg1->unk5 = 0xFF;
}
switch(arg1->unk4){
case 0:// 80288BF8
((void (*)(void)) arg1->unk14)();
break;
case 1:// 80288C0C
((void (*)(s32)) arg1->unk14)(arg1->unk8);
break;
case 2:// 80288C24
((void (*)(s32, s32)) arg1->unk14)(arg1->unk8, arg1->unkC);
break;
case 3:// 80288C40
((void (*)(s32, s32, s32)) arg1->unk14)(arg1->unk8, arg1->unkC, arg1->unk10);
break;
case 4:// 80288C5C
((void (*)(u8*)) arg1->unk14)((u8*)&arg1->unk8);
break;
}
}
void func_80288C7C(vector(struct2s) **arg0){
vector_clear(*arg0);
}
s32 func_80288C9C( vector(struct2s) **arg0, f32 arg1, s32 arg_cnt, void *funcPtr, s32 arg4, s32 arg5, s32 arg6){
struct2s *ptr = (struct2s *) vector_pushBackNew(arg0);
ptr->unk0 = arg1;
ptr->unk4 = arg_cnt;
ptr->unk14 = funcPtr;
ptr->unk8 = arg4;
ptr->unkC = arg5;
ptr->unk10 = arg6;
ptr->unk5 = D_8037BF10;
D_8037BF10 = 0;
}
void func_80288D08(vector(struct2s) **arg0, f32 arg1, void *arg2){
func_80288C9C(arg0, arg1, 0, arg2, 0, 0, 0);
}
void func_80288D40(vector(struct2s) **arg0, f32 arg1, void *arg2, s32 arg3){
func_80288C9C(arg0, arg1, 1, arg2, arg3, 0, 0);
}
void func_80288D84(vector(struct2s) **arg0, f32 arg1, void *arg2, s32 arg3, s32 arg4){
func_80288C9C(arg0, arg1, 2, arg2, arg3, arg4, 0);
}
void func_80288DCC(vector(struct2s) **arg0, f32 arg1, void *arg2, s32 arg3, s32 arg4, s32 arg5){
func_80288C9C(arg0, arg1, 3, arg2, arg3, arg4, arg5);
}
void func_80288E18(vector(struct2s) **arg0, f32 arg1, void *func_ptr, void* arg_ptr, s32 arg_size){
s32 out = func_80288C9C(arg0, arg1, 4, func_ptr, 0, 0, 0);
memcpy(out + 8, arg_ptr, arg_size);
}
void func_80288E68(vector(struct2s) **arg0, f32 arg1, s32 arg2, s32 arg3, s32 arg4){
func_80288DCC(arg0, arg1, func_80288914, arg2, arg3, arg4);
}
void func_80288EB0(vector(struct2s) **arg0, f32 arg1, s32 arg2, s32 arg3, s32 arg4){
func_80288DCC(arg0, arg1, func_8028894C, arg2, arg3, arg4);
}
void func_80288EF8(vector(struct2s) **arg0, f32 arg1, s32 arg2, s32 arg3){
func_80288D84(arg0, arg1, func_80288984, arg2, arg3);
}
void func_80288F38(vector(struct2s) **arg0, f32 arg1, s32 arg2, s32 arg3){
func_80288D84(arg0, arg1, func_802889C8, arg2, arg3);
}
void func_80288F78(vector(struct2s) **arg0, f32 arg1, s32 arg2){
func_80288D40(arg0, arg1, func_802889F4, arg2);
}
void func_80288FA8(vector(struct2s) **arg0, f32 arg1, enum sfx_e sfx_id){
func_80288D40(arg0, arg1, func_80288B14, sfx_id);
}
void func_80288FD8(vector(struct2s) **arg0, f32 arg1, s32 arg2){
func_80288D40(arg0, arg1, func_80288AE0, arg2);
}
void func_80289008(vector(struct2s) **arg0, f32 arg1, s32 arg2, s32 arg3){
do{
func_80288D84(arg0, arg1, func_80288B34, arg2, arg3);
}while(0);
}
void func_80289048(vector(struct2s) **arg0, f32 arg1, s32 arg2, s32 arg3, s32 arg4){
do{
func_80288DCC(arg0, arg1, func_80288B60, arg2, arg3, arg4);
}while(0);
}
void func_80289090(vector(struct2s) **arg0, f32 arg1, s32 arg2, s32 arg3){
func_80288D84(arg0, arg1, func_802888C0, arg2, arg3);
}
void func_802890D0(VLA** arg0){
vector_free(*arg0);
free(arg0);
}
vector(struct2s) **func_802890FC(void){
vector(struct2s) **ptr = (vector(struct2s) **)malloc(sizeof(vector(struct2s) **));
*ptr = vector_new(sizeof(struct2s), 2);
func_80288C7C(ptr);
return ptr;
}
void func_8028913C(vector(struct2s) **arg0, s32 arg1){
D_8037BF10 = arg1;
}
void func_8028914C(vector(struct2s) **arg0, AnimCtrl *arg1){
struct2s *iPtr;
for(iPtr = vector_getBegin(*arg0); iPtr != (struct2s*)vector_getEnd(*arg0); iPtr++){
if(animctrl_isAt(arg1, iPtr->unk0))
func_80288B98(arg0, iPtr);
}
}

187
src/core2/code_2240.c Normal file
View File

@@ -0,0 +1,187 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
#include "animation.h"
//function declarations
void anim_setIndex(Animation *this, enum asset_e arg1);
s32 anim_802897A0(Animation *this);
s32 func_802892FC(Animation *this);
void func_8033AA50(s32, f32, s32);
void func_8033A750(s32, s32, s32, f32);
//function definitions
void func_802891D0(Animation *this, s32 arg1){
s32 *tmp;
if(func_80288400(this->unkA[arg1], &tmp) == 0){
func_8033A510(tmp);
};
}
void func_8028920C(Animation *this){
func_802891D0(this, this->unk8);
}
void func_8028922C(Animation *this){
func_802891D0(this, 2);
}
s32 func_8028924C(Animation *this, s32 arg1){
return func_80288374(this->unkA[arg1]);
}
s32 func_80289274(Animation *this){
return func_8028924C(this, this->unk8);
}
s32 func_80289294(Animation *this){
return func_8028924C(this, (this->unk8 != 0)? 0: 1);
}
s32 func_802892CC(Animation *this, s32 arg1){
s32 tmp;
func_80288400(this->unkA[arg1], &tmp);
return tmp;
}
s32 func_802892FC(Animation *this){
return func_802892CC(this, this->unk8);
}
s32 func_8028931C(Animation *this){
return func_802892CC(this, (this->unk8 != 0)? 0: 1);
}
s32 func_80289354(Animation *this){
return func_802892CC(this, 2);
}
void func_80289374(Animation *this){
if(this->unk1C == 1 && func_80289274(this)){
this->unk8 = (this->unk8)? 0 : 1;
}
this->unk1C = 0;
if( this->duration < 1.0f && func_80289294(this)){
func_8033AA50(animcache_get(this->index), this->timer, func_802892FC(this));
func_8033A750(func_802892FC(this), func_8028931C(this), func_802892FC(this), this->duration);
}
else{
func_8033AA50(animcache_get(this->index), this->timer, func_802892FC(this));
}
}
void func_8028948C(Animation *this){
if(this->unk1C == 1 && this->unk1E == 0){
if(func_80289274(this)){
this->unk8 = (this->unk8)? 0 : 1;
func_8028922C(this);
}
}
else{
if(this->unk1C == 2)
func_8028920C(this);
}
this->unk1C = 0;
if( this->duration < 1.0f && func_80289294(this) && !this->unk1E){
func_8033AA50(animcache_get(this->index), this->timer, func_80289354(this));
func_8033A750(func_802892FC(this), func_8028931C(this), func_80289354(this), this->duration);
}
else{
func_8033AA50(animcache_get(this->index), this->timer, func_802892FC(this));
if(this->unk1E && this->index)
this->unk1E = 0;
}
}
void func_802895F8(Animation *this){
if(this->unk1D == 1){
func_8028948C(this);
}
else{
func_80289374(this);
}
if(this->matrices){
(*(this->matrices))(func_802892FC(this), this->unk4);
}
anim_802897A0(this);
}
void func_80289674(Animation *this){
this->unk1C = 1;
}
s32 func_80289680(void){
return 0x20;
}
enum asset_e anim_getIndex(Animation *this){
return this->index;
}
f32 anim_getTimer(Animation *this){
return this->timer;
}
f32 anim_getDuration(Animation *this){
return this->duration;
}
void func_802896A0(Animation *this){
func_802883AC(this->unkA[0]);
func_802883AC(this->unkA[1]);
if(this->unk1D == 1){
func_802883AC(this->unkA[2]);
}
}
void func_802896EC(Animation *this, s32 arg1){
this->unk1D = arg1;
anim_setIndex(this,0);
anim_setTimer(this, 0.0f);
anim_setDuration(this, 1.0f);
anim_80289790(this, NULL);
this->unk1C = 0;
this->unk1E = 1;
this->unk8 = 0;
this->unkA[0] = func_80288330();
this->unkA[1] = func_80288330();
if(this->unk1D == 1){
this->unkA[2] = func_80288330();
}
}
void anim_setIndex(Animation *this, enum asset_e arg1){
this->index = arg1;
}
void anim_setTimer(Animation *this, f32 arg1){
this->timer = arg1;
}
void anim_80289790(Animation *this, void (*arg1)(s32, s32)){
this->matrices = arg1;
}
void anim_80289798(Animation *this, s32 arg1){
this->unk4 = arg1;
}
s32 anim_802897A0(Animation *this){
return func_8033A238(func_802892FC(this));
}
void anim_setDuration(Animation *this, f32 arg1){
this->duration = arg1;
}
void anim_802897D4(Animation *this, BKAnimationList *arg0, Animation *dst){
func_802EA1A8(this, arg0, func_802892FC(dst));
}
void anim_8028980C(Animation *this){
this->unk1C = 2;
}

141
src/core2/code_27550.c Normal file
View File

@@ -0,0 +1,141 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
/* .bss */
struct {
ParticleEmitter *unk0;
ParticleEmitter *unk4;
f32 unk8;
f32 unkC;
f32 unk10;
}D_8037D420;
u8 D_8037D438;
/* .code */
void func_802AE4E0(s32 arg0) {
switch (arg0) {
case 1:
func_8029E3C0(0, 0.2f);
break;
case 2:
func_8025A6CC(COMUSIC_43_ENTER_LEVEL_GLITTER, 32000);
func_8025AABC(COMUSIC_43_ENTER_LEVEL_GLITTER);
func_8029E3C0(0, 0.4f);
func_80291FB8(0);
func_80291D04();
break;
case 3:
comusic_8025AB44(COMUSIC_43_ENTER_LEVEL_GLITTER, 0, 2000);
func_8029E3C0(0, 0.55f);
break;
}
D_8037D438 = arg0;
}
void func_802AE598(void) {
f32 plyr_pos[3];
player_getPosition(plyr_pos);
particleEmitter_setParticleAccelerationRange(D_8037D420.unk4, 0.0f, 700.0f, 0.0f, 0.0f, 1200.0f, 0.0f);
particleEmitter_setParticleSpawnPositionRange(D_8037D420.unk4, -45.0f, -5.0f, -45.0f, 45.0f, 10.0f, 45.0f);
particleEmitter_setPosition(D_8037D420.unk4, plyr_pos);
particleEmitter_emitN(D_8037D420.unk4, 1);
particleEmitter_setParticleAccelerationRange(D_8037D420.unk0, 0.0f, 700.0f, 0.0f, 0.0f, 1200.0f, 0.0f);
particleEmitter_setParticleSpawnPositionRange(D_8037D420.unk4, -45.0f, -5.0f, -45.0f, 45.0f, 10.0f, 45.0f);
particleEmitter_setPosition(D_8037D420.unk0, plyr_pos);
particleEmitter_emitN(D_8037D420.unk0, 1);
player_getPosition(plyr_pos);
plyr_pos[1] += 130.0f;
particleEmitter_setParticleAccelerationRange(D_8037D420.unk4, 0.0f, -700.0f, 0.0f, 0.0f, -1200.0f, 0.0f);
particleEmitter_setParticleSpawnPositionRange(D_8037D420.unk4, -45.0f, -10.0f, -45.0f, 45.0f, 10.0f, 45.0f);
particleEmitter_setPosition(D_8037D420.unk4, plyr_pos);
particleEmitter_emitN(D_8037D420.unk4, 1);
particleEmitter_setParticleAccelerationRange(D_8037D420.unk0, 0.0f, -700.0f, 0.0f, 0.0f, -1200.0f, 0.0f);
particleEmitter_setParticleSpawnPositionRange(D_8037D420.unk4, -45.0f, -10.0f, -45.0f, 45.0f, 10.0f, 45.0f);
particleEmitter_setPosition(D_8037D420.unk0, plyr_pos);
particleEmitter_emitN(D_8037D420.unk0, 1);
}
void func_802AE7AC(ParticleEmitter *p_ctrl, enum asset_e sprite_id) {
func_802F0D54(p_ctrl);
particleEmitter_setSprite(p_ctrl, sprite_id);
func_802EFA5C(p_ctrl, 0.3f, 0.8f);
func_802EFB70(p_ctrl, 0.15f, 0.22f);
func_802EFB84(p_ctrl, 0.03f, 0.05f);
func_802EFE24(p_ctrl, 0.0f, 0.0f, 300.0f, 0.0f, 0.0f, 300.0f);
func_802EFEC0(p_ctrl, 0.55f, 0.55f);
}
void func_802AE874(void) {
func_802F0C78(D_8037D420.unk4);
func_802F0C78(D_8037D420.unk0);
}
void func_802AE8A4(void) {
D_8037D420.unk10 = 0.0f;
D_8037D420.unk8 = 0.0f;
D_8037D420.unkC = 1.0f;
D_8037D420.unk0 = partEmitList_pushNew(60);
func_802AE7AC(D_8037D420.unk0, ASSET_716_SPRITE_SPARKLE_WHITE);
D_8037D420.unk4 = partEmitList_pushNew(60);
func_802AE7AC(D_8037D420.unk4, ASSET_713_SPRITE_SPARKLE_YELLOW);
}
void func_802AE914(void) {
D_8037D420.unk10 -= time_getDelta();
while ( D_8037D420.unk10 < 0.0f) {
func_802AE598();
D_8037D420.unk8 += 0.02 * (f64) D_8037D420.unkC;
D_8037D420.unk10 += 0.02;
}
}
void func_802AE9C8(void) {
f32 anim_duration;
enum asset_e anim_id;
func_8029BCF8(&anim_id, &anim_duration);
func_8028A010(anim_id, anim_duration);
func_8029C7F4(1, 1, 3, 7);
func_80294378(6);
func_802AE8A4();
D_8037D438 = 0;
func_802AE4E0(1);
}
void func_802AEA2C(void) {
s32 next_state;
s32 sp20;
u8 temp_v0;
next_state = 0;
switch (D_8037D438) {
case 1:
func_802AE914();
if (func_8029E1A8(0)) {
func_802AE4E0(2);
}
break;
case 2:
func_802AE914();
sp20 = func_8029E1A8(0);
func_80291FB8((s32) ml_map_f(func_8029E270(0), 0.0f, 0.4f, 255.0f, 0.0f));
if (sp20) {
func_802AE4E0(3);
}
break;
case 3:
if (func_8029E1A8(0)) {
next_state = bs_getIdleState();
}
break;
}
bs_setState(next_state);
}
void func_802AEB24(void){
func_802AE874();
func_80294378(1);
func_80291D04();
}

78
src/core2/code_27F40.c Normal file
View File

@@ -0,0 +1,78 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern f32 func_8029B2D0(void);
/* .code */
void func_802AEED0(f32 arg0[3]) {
func_8028E9C4(5, arg0);
}
void func_802AEEF4(void) {
f32 anim_duration;
f32 sp28[3];
f32 sp1C[3];
enum asset_e anim_id;
func_80299D2C(SFX_12D_CAMERA_ZOOM_CLOSEST, 1.2f, 12000);
func_8029BCF8(&anim_id, &anim_duration);
func_8028A010(anim_id, anim_duration);
func_8029C7F4(1, 1, 3, 2);
func_80297970(0.0f);
func_80297A0C(0);
func_802BE8D8();
func_802AEED0(sp28);
func_802C2A64(sp28);
player_getRotation(sp1C);
sp1C[0] = 0.0f;
sp1C[1] += 180.0f;
sp1C[2] = 0.0f;
func_802C2A8C(sp1C);
miscflag_set(0x17);
}
void func_802AEFB0(void) {
s32 next_state;
f32 sp30[3];
f32 sp24[3];
f32 sp20;
s32 sp1C;
next_state = 0;
sp20 = time_getDelta();
if (func_802C2B00() == 2) {
func_802C2ADC(sp30);
sp30[0] -= func_8029B2DC() * 90.0f * sp20;
sp30[1] -= func_8029B2D0() * 90.0f * sp20;
sp30[2] = 0.0f;
sp30[0] = (sp30[0] > 180.0f) ? max_f(305.0f, sp30[0]) : min_f(70.0f, sp30[0]);
func_802C2A8C(sp30);
yaw_setIdeal(sp30[1] + 180.0f);
sp1C = 0;
if (button_pressed(BUTTON_B) || button_pressed(BUTTON_A) || button_pressed(BUTTON_C_UP)) {
sp1C = 1;
}
if (player_inWater()) {
if (player_getTransformation() == TRANSFORM_1_BANJO && func_8028EE84() == BSWATERGROUP_0_NONE) {
sp1C += 1;
}
} else if (func_8028B254(25) == 0) {
sp1C += 1;
}
if (sp1C) {
next_state = func_8029BDBC();
}
}
func_802AEED0(sp24);
func_802C2A64(sp24);
bs_setState(next_state);
}
void func_802AF164(void) {
if (func_80298850() == 0) {
func_80299D2C(SFX_12E_CAMERA_ZOOM_MEDIUM, 1.2f, 12000);
}
func_802BE91C();
miscflag_clear(0x17);
}

136
src/core2/code_28220.c Normal file
View File

@@ -0,0 +1,136 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
/* .bss */
struct {
ParticleEmitter *unk0;
ParticleEmitter *unk4;
f32 unk8;
f32 unkC;
f32 unk10;
}D_8037D450;
u8 D_8037D468;
/* .code */
void func_802AF1B0(s32 arg0) {
switch (arg0) {
case 1:
func_8029E3C0(0, 0.3f);
break;
case 2:
func_8025A6CC(COMUSIC_43_ENTER_LEVEL_GLITTER, 32000);
func_8025AABC(COMUSIC_43_ENTER_LEVEL_GLITTER);
func_8029E3C0(0, 0.4f);
break;
case 3:
func_80314B30();
func_802921C8(0);
comusic_8025AB44(COMUSIC_43_ENTER_LEVEL_GLITTER, 0, 2000);
func_8029E3C0(0, 2.0f);
break;
}
D_8037D468 = arg0;
}
void func_802AF268(void) {
f32 position[3];
player_getPosition(position);
particleEmitter_setParticleAccelerationRange(D_8037D450.unk4, 0.0f, 700.0f, 0.0f, 0.0f, 1200.0f, 0.0f);
particleEmitter_setPosition(D_8037D450.unk4, position);
particleEmitter_emitN(D_8037D450.unk4, 1);
particleEmitter_setParticleAccelerationRange(D_8037D450.unk0, 0.0f, 700.0f, 0.0f, 0.0f, 1200.0f, 0.0f);
particleEmitter_setPosition(D_8037D450.unk0, position);
particleEmitter_emitN(D_8037D450.unk0, 1);
position[1] += 130.0f;
particleEmitter_setParticleAccelerationRange(D_8037D450.unk4, 0.0f, -700.0f, 0.0f, 0.0f, -1200.0f, 0.0f);
particleEmitter_setPosition(D_8037D450.unk4, position);
particleEmitter_emitN(D_8037D450.unk4, 1);
particleEmitter_setParticleAccelerationRange(D_8037D450.unk0, 0.0f, -700.0f, 0.0f, 0.0f, -1200.0f, 0.0f);
particleEmitter_setPosition(D_8037D450.unk0, position);
particleEmitter_emitN(D_8037D450.unk0, 1);
}
void func_802AF3B4(ParticleEmitter *p_ctrl, enum asset_e sprite_id) {
func_802F0D54();
particleEmitter_setSprite(p_ctrl, sprite_id);
func_802EFA5C(p_ctrl, 0.3f, 0.8f);
particleEmitter_setParticleSpawnPositionRange(p_ctrl, -45.0f, 0.0f, -45.0f, 45.0f, 0.0f, 45.0f);
func_802EFB70(p_ctrl, 0.15f, 0.22f);
func_802EFB84(p_ctrl, 0.03f, 0.05f);
func_802EFE24(p_ctrl, 0.0f, 0.0f, 300.0f, 0.0f, 0.0f, 300.0f);
func_802EFEC0(p_ctrl, 0.55f, 0.55f);
}
void func_802AF4B0(void) {
func_802F0C78(D_8037D450.unk4);
func_802F0C78(D_8037D450.unk0);
}
void func_802AF4E0(void) {
D_8037D450.unk10 = 0.0f;
D_8037D450.unk8 = 0.0f;
D_8037D450.unkC = 1.0f;
D_8037D450.unk0 = partEmitList_pushNew(60);
func_802AF3B4(D_8037D450.unk0, ASSET_716_SPRITE_SPARKLE_WHITE);
D_8037D450.unk4 = partEmitList_pushNew(60);
func_802AF3B4(D_8037D450.unk4, ASSET_713_SPRITE_SPARKLE_YELLOW);
}
void func_802AF550(void) {
D_8037D450.unk10 -= time_getDelta();
while ( D_8037D450.unk10 < 0.0f) {
func_802AF268();
D_8037D450.unk8 += 0.02 * (f64) D_8037D450.unkC;
D_8037D450.unk10 += 0.02;
}
}
void func_802AF604(void){
f32 anim_duration;
enum asset_e anim_id;
func_8029BCF8(&anim_id, &anim_duration);
func_8028A010(anim_id, anim_duration);
func_8029C7F4(1,1,3,7);
func_80294378(6);
func_802AF4E0();
D_8037D468 = 0;
func_802AF1B0(1);
}
void func_802AF668(void) {
s32 next_state;
bool sp20;
next_state = 0;
switch (D_8037D468) {
case 1:
func_802AF550();
if (func_8029E1A8(0)) {
func_802AF1B0(2);
}
break;
case 2:
func_802AF550();
sp20 = func_8029E1A8(0);
func_80291FB8((s32) ml_map_f(func_8029E270(0), 0.0f, 0.4f, 0.0f, 255.0f));
if (sp20) {
func_802AF1B0(3);
}
break;
case 3:
if (func_8029E1A8(0)) {
next_state = bs_getIdleState();
}
break;
}
bs_setState(next_state);
}
void func_802AF768(void){
func_802AF4B0();
func_80294378(1);
func_80291D04();
}

290
src/core2/code_2890.c Normal file
View File

@@ -0,0 +1,290 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern f32 func_802E4B38(void);
extern f32 func_80257BFC(f32, f32, f32, f32, f32);
void func_80289F30(void);
/* .data */
f32 D_803635E0[3] = {0.0f, 5.0f, 0.0f};
s32 D_803635EC[7] = {0x4, 0x3, 0x60, 0x18, 0x1B, 0x67, 0x80};
/* .bss */
AnimCtrl *D_8037BF20;
s32 D_8037BF24;
f32 D_8037BF28;
f32 D_8037BF2C;
struct {
f32 unk0;
f32 unk4;
f32 unk8;
f32 unkC;
f32 unk10;
u8 unk14;
}D_8037BF30;
void (*D_8037BF48)(s32, s32);
/* .code */
void func_80289820(s32 arg0){
D_8037BF24 = arg0;
}
void func_8028982C(void) {
f32 sp2C[3];
f32 temp_f12;
f32 sp24;
sp24 = (D_8037BF30.unk14 != 0) ? D_8037BF30.unk10 : 1.0f;
_get_velocity(sp2C);
temp_f12 = func_80257BFC(gu_sqrtf(sp2C[0]*sp2C[0] + sp2C[2] * sp2C[2]), D_8037BF30.unk0, D_8037BF30.unk4, D_8037BF30.unk8 * sp24, D_8037BF30.unkC * sp24);
animctrl_setDuration(D_8037BF20, mlClamp_f(temp_f12, D_8037BF28, D_8037BF2C));
animctrl_update(D_8037BF20);
}
void func_802898F8(void) {
animctrl_setDuration(D_8037BF20, mlClamp_f(func_80257BFC(mlAbsF(func_80297AAC()), D_8037BF30.unk0, D_8037BF30.unk4, D_8037BF30.unk8, D_8037BF30.unkC), D_8037BF28, D_8037BF2C));
animctrl_update(D_8037BF20);
}
void func_80289978(f32 sp2C[3], f32 arg1, f32 arg2, f32 arg3) {
s32 phi_s0;
for(phi_s0 = 0; phi_s0 < 3; phi_s0++){
sp2C[phi_s0] = ((((f64) sinf((f32) ((f64) func_80257A44((f32) ( arg1 + (2.0 * ((f64) (f32) phi_s0 / 3.0))), 2.0f) * 6.2831853080000002)) * 0.5) + 0.5) * arg3) + arg2;
};
}
void func_80289A78(s32 arg0, s32 arg1) {
f32 sp2C[3];
f32 sp28;
s32 phi_s0;
static s32 D_8037BF4C;
sp28 = func_802E4B38();
if (func_803203FC(0x78) == 0) {
D_8037BF4C = 0;
} else {
for(phi_s0 = 0; phi_s0 < 7; phi_s0++){
if (func_803203FC(phi_s0 + 0x97)) {
D_8037BF4C = D_803635EC[phi_s0];
}
}
}
if ((D_8037BF4C & 1)) {
func_80289978(sp2C, sp28, 2.0f, 1.0f);
func_8033A928(arg0, 6, sp2C);
func_8033A928(arg0, 0x14, sp2C);
}
if (D_8037BF4C & 2) {
func_80289978(sp2C, sp28, 2.0f, 1.0f);
func_8033A928(arg0, 0x10, sp2C);
func_8033A928(arg0, 0x1E, sp2C);
}
if (D_8037BF4C & 4) {
func_80289978(sp2C, sp28, 2.0f, 1.0f);
func_8033A928(arg0, 0x12, sp2C);
}
if (D_8037BF4C & 8) {
func_80289978(sp2C, sp28, 0.2f, 0.5f);
func_8033A928(arg0, 0x12, sp2C);
}
if (D_8037BF4C & 0x10) {
func_8033A968(arg0, 1, &D_803635E0);
}
if (D_8037BF4C & 0x20) {
func_80289978(sp2C, sp28, 2.0f, 1.0f);
func_8033A928(arg0, 0x6C, sp2C);
}
if (D_8037BF4C & 0x40) {
func_80289978(sp2C, sp28, 2.0f, 1.0f);
func_8033A928(arg0, 0x64, sp2C);
func_8033A928(arg0, 0x67, sp2C);
}
if (map_get() == MAP_A_TTC_SANDCASTLE) {
if ((D_8037BF4C & 0x80) && (player_getTransformation() != TRANSFORM_7_WISHWASHY)) {
func_8028FB88(7);
}
if (!(D_8037BF4C & 0x80) && (player_getTransformation() == TRANSFORM_7_WISHWASHY)) {
func_8028FB88(1);
}
}
if (D_8037BF48 != NULL) {
D_8037BF48(arg0, arg1);
}
}
void func_80289D1C(void){
D_8037BF20 = animctrl_new(1);
func_80287784(D_8037BF20, 0);
animctrl_setSmoothTransition(D_8037BF20, FALSE);
func_8028746C(D_8037BF20, func_80289A78);
D_8037BF48 = NULL;
func_80289F30();
D_8037BF24 = 0;
func_80289820(1);
func_80289EA8(0.01f, 100.0f);
func_80289EC8(0.0f, 1000.0f, 0.1f, 10.0f);
D_8037BF30.unk14 = 0;
D_8037BF30.unk10 = 1.0f;
}
void func_80289DDC(void){
animctrl_free(D_8037BF20);
}
void func_80289E00(void){
switch(D_8037BF24){
case 2:
func_8028982C();
break;
case 3:
func_802898F8();
break;
case 1:
animctrl_update(D_8037BF20);
break;
case 0:
break;
}
}
void func_80289E74(void){
D_8037BF20 = animctrl_defrag(D_8037BF20);
}
s32 func_80289E9C(void){
return D_8037BF24;
}
void func_80289EA8(f32 arg0, f32 arg1){
D_8037BF28 = arg0;
D_8037BF2C = arg1;
}
void func_80289EBC(void (*arg0)(s32, s32)){
D_8037BF48 = arg0;
}
void func_80289EC8(f32 arg0, f32 arg1, f32 arg2, f32 arg3){
D_8037BF30.unk0 = arg0;
D_8037BF30.unk4 = arg1;
D_8037BF30.unk8 = arg2;
D_8037BF30.unkC = arg3;
D_8037BF30.unk14 = 0;
}
void func_80289EF8(f32 arg0){
D_8037BF30.unk10 = arg0;
D_8037BF30.unk14 = 1;
}
void func_80289F10(s32 arg0){
func_80289820(arg0);
}
void func_80289F30(void){
f32 sp1C[3];
_player_getPosition(sp1C);
func_8028781C(D_8037BF20, sp1C, 1);
}
AnimCtrl *_player_getAnimCtrlPtr(void){
return D_8037BF20;
}
f32 func_80289F70(void){
return animctrl_getAnimTimer(D_8037BF20);
}
bool func_80289F94(enum asset_e anim_id){
return animctrl_getIndex(D_8037BF20) == anim_id;
}
bool baanim_isStopped(void){
return animctrl_isStopped(D_8037BF20);
}
bool baanim_isAt(f32 time){
return animctrl_isAt(D_8037BF20, time);
}
void func_8028A010(enum asset_e anim_id, f32 duration){
animctrl_reset(D_8037BF20);
animctrl_setIndex(D_8037BF20, anim_id);
animctrl_setDuration(D_8037BF20, duration);
animctrl_setPlaybackType(D_8037BF20, 2);
func_802875AC(D_8037BF20, "baanim.c", 0x188);
}
void func_8028A084(enum asset_e anim_id, f32 duration){
animctrl_reset(D_8037BF20);
animctrl_setSmoothTransition(D_8037BF20, FALSE);
animctrl_setIndex(D_8037BF20, anim_id);
animctrl_setDuration(D_8037BF20, duration);
animctrl_setPlaybackType(D_8037BF20, 2);
func_802875AC(D_8037BF20, "baanim.c", 0x193);
}
void func_8028A100(enum asset_e anim_id, f32 duration, f32 arg2){
animctrl_reset(D_8037BF20);
animctrl_setIndex(D_8037BF20, anim_id);
animctrl_setDuration(D_8037BF20, duration);
func_8028774C(D_8037BF20, arg2);
animctrl_setPlaybackType(D_8037BF20, 2);
func_802875AC(D_8037BF20, "baanim.c", 0x19e);
}
void func_8028A180(enum asset_e anim_id, f32 duration){
animctrl_reset(D_8037BF20);
animctrl_setIndex(D_8037BF20, anim_id);
animctrl_setDuration(D_8037BF20, duration);
animctrl_setPlaybackType(D_8037BF20, 1);
func_802875AC(D_8037BF20, "baanim.c", 0x1a8);
}
void func_8028A1F4(enum asset_e anim_id, f32 duration, f32 arg2){
animctrl_reset(D_8037BF20);
animctrl_setIndex(D_8037BF20, anim_id);
animctrl_setDuration(D_8037BF20, duration);
func_8028774C(D_8037BF20, arg2);
animctrl_setPlaybackType(D_8037BF20, 1);
func_802875AC(D_8037BF20, "baanim.c", 0x1b3);
}
void func_8028A274(enum asset_e anim_id, f32 duration){
animctrl_reset(D_8037BF20);
animctrl_setSmoothTransition(D_8037BF20, FALSE);
animctrl_setIndex(D_8037BF20, anim_id);
animctrl_setDuration(D_8037BF20, duration);
animctrl_setPlaybackType(D_8037BF20, 1);
func_802875AC(D_8037BF20, "baanim.c", 0x1bd);
}
void func_8028A2F0(enum asset_e anim_id, f32 duration, f32 arg2){
animctrl_reset(D_8037BF20);
animctrl_setSmoothTransition(D_8037BF20, FALSE);
animctrl_setIndex(D_8037BF20, anim_id);
animctrl_setDuration(D_8037BF20, duration);
func_8028774C(D_8037BF20, arg2);
animctrl_setPlaybackType(D_8037BF20, 1);
func_802875AC(D_8037BF20, "baanim.c", 0x1c9);
}
void func_8028A37C(f32 arg0){
animctrl_setSubRange(D_8037BF20, 0.0f, arg0);
animctrl_setPlaybackType(D_8037BF20, 1);
}
void func_8028A3B8(f32 arg0, f32 arg1){
animctrl_setSubRange(D_8037BF20, 0.0f, arg0);
animctrl_setDuration(D_8037BF20, arg1);
animctrl_setPlaybackType(D_8037BF20, 1);
}

171
src/core2/code_32DB0.c Normal file
View File

@@ -0,0 +1,171 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
typedef struct {
s32 unk0:24;
s32 unk3:8;
s32 unk4;
} Struct_Core2_32DB0_0s;
void func_802B9E00(s32 arg0);
s32 func_802B9EA8(s32 arg0);
void func_802B9EBC(s32 arg0, s32 arg1);
/* .bss */
Struct_Core2_32DB0_0s D_8037D5E0[0x46];
/* .code */
void func_802B9D40(void){
int i;
for(i = 0; i< 0x46; i++){
D_8037D5E0[i].unk3 = 0;
}
}
void func_802B9D80(void){
int i;
for(i=0; i< 0x46; i++){
if(func_802B9EA8(i))
func_802B9E00(i);
}
}
void func_802B9DD0(s32 arg0){
D_8037D5E0[arg0].unk3 = 1;
D_8037D5E0[arg0].unk0 = 0;
}
void func_802B9E00(s32 arg0){
func_802B9EBC(arg0, 0);
D_8037D5E0[arg0].unk3 = 0;
}
s32 func_802B9E34(s32 arg0){
return D_8037D5E0[arg0].unk4;
}
s32 func_802B9E48(s32 arg0){
return D_8037D5E0[arg0].unk4;
}
s32 func_802B9E5C(s32 arg0){
return D_8037D5E0[arg0].unk4;
}
s32 func_802B9E70(s32 arg0){
return D_8037D5E0[arg0].unk4;
}
s32 func_802B9E84(void){
return 0x46;
}
s32 func_802B9E8C(s32 arg0){
return D_8037D5E0[arg0].unk0;
}
s32 func_802B9EA8(s32 arg0){
return D_8037D5E0[arg0].unk3;
}
void func_802B9EBC(s32 arg0, s32 arg1){
if(arg1 == D_8037D5E0[arg0].unk0)
return;
switch(D_8037D5E0[arg0].unk0){
case 4:// L802B9F08
func_802BA214(D_8037D5E0[arg0].unk4);
break;
case 3:// L802B9F18
func_802BA398(D_8037D5E0[arg0].unk4);
break;
case 1:// L802B9F28
func_802BA76C(D_8037D5E0[arg0].unk4);
break;
case 2:// L802B9F38
func_802BAA88(D_8037D5E0[arg0].unk4);
break;
case 0:// L802B9F40
break;
}
D_8037D5E0[arg0].unk0 = arg1;
switch (arg1)
{
case 4:// L802B9F80
D_8037D5E0[arg0].unk4 = func_802BA1E0();
break;
case 3:// L802B9F90
D_8037D5E0[arg0].unk4 = func_802BA2F4();
break;
case 1:// L802B9FA0
D_8037D5E0[arg0].unk4 = func_802BA6D4();
break;
case 2:// L802B9FB0
D_8037D5E0[arg0].unk4 = func_802BAA40();
break;
case 0:// L802B9FBC
break;
}
}
void func_802B9FD0(Struct61s *file_ptr, s32 arg1){
u8 sp27;
func_802B9DD0(arg1);
func_8034B040(file_ptr, 2, &sp27);
func_802B9EBC(arg1, sp27);
switch(func_802B9E8C(arg1)){
case 4:// L802BA030
func_802BA244(file_ptr, func_802B9E34(arg1));
break;
case 3:// L802BA04C
func_802BA550(file_ptr, func_802B9E48(arg1));
break;
case 1:// L802BA068
func_802BA93C(file_ptr, func_802B9E5C(arg1));
break;
case 2:// L802BA084
func_802BAB3C(file_ptr, func_802B9E70(arg1));
break;
case 0:// L802BA098
break;
}
}
void func_802BA0AC(Struct61s *file_ptr){
s16 sp26;
func_802B9D80();
func_802B9D40();
while(!func_8034AF98(file_ptr, 0)){
if(func_8034B220(file_ptr, 1, &sp26))
func_802B9FD0(file_ptr, sp26);
}
}
void func_802BA128(void){
int i;
for(i = 0; i< 0x46; i++){
if(D_8037D5E0[i].unk3){
switch(D_8037D5E0[i].unk0){
case 4:// L802BA17C
D_8037D5E0[i].unk4 = defrag(D_8037D5E0[i].unk4);
break;
case 3:// L802BA18C
D_8037D5E0[i].unk4 = defrag(D_8037D5E0[i].unk4);
break;
case 1:// L802BA19C
D_8037D5E0[i].unk4 = defrag(D_8037D5E0[i].unk4);
break;
case 2:// L802BA1AC
D_8037D5E0[i].unk4 = defrag(D_8037D5E0[i].unk4);
break;
case 0:// L802BA1B8
break;
}
}
}
}

Some files were not shown because too many files have changed in this diff Show More