baflap documenation

This commit is contained in:
Banjo Kazooie
2024-09-28 23:42:49 -05:00
parent d748198eab
commit ea4b9ab1a6
7 changed files with 139 additions and 97 deletions

103
src/core2/ba/flap.c Normal file
View File

@@ -0,0 +1,103 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
/* .bss */
u8 s_active;
f32 s_flap_max_timer;
f32 s_flap_list[5];
/* .code */
/**
* @brief returns the number of nonzero flap timers in `s_flap_list`
*
* @return s32 number of active flaps
*/
s32 baflap_getCount(void) {
s32 i;
s32 cnt;
cnt = 0;
for(i = 0; i < 5; i++){
if(s_flap_list[i] != 0.0f){
cnt++;
}
}
return cnt;
}
/**
* @brief add a flap duration to the flap list
*
* @param duration duration of flap in seconds
* @return true if baflap duration was extended
* @return false if baflap does not extend duration or all timers in flap queue are occupied
*/
bool baflap_add(f32 duration) {
s32 i;
// check that timer is far enough away from any value
for(i = 0; i < 5; i++){
if(duration - 0.25 < s_flap_list[i]){
s_flap_max_timer = duration;
return FALSE;
}
}
// add to list
for(i = 0; i < 5; i++){
if (s_flap_list[i] == 0.0f) {
s_flap_list[i] = duration;
return TRUE;
}
}
s_flap_max_timer = duration;
return FALSE;
}
/**
* @brief zeros all flap timers and sets as inactive
*
*/
void baflap_reset(void) {
s32 i;
for(i = 0; i < 5; i++){
s_flap_list[i] = 0.0f;
}
s_active = s_flap_max_timer = 0.0f;
}
/**
* @brief activates or deactivates flap timers
*
* @param active false (0) or true (!0)
*/
void baflap_activate(bool active){
s_active = active;
if(!s_active){
baflap_reset();
}
}
/**
* @brief updates flap timers if active
*
*/
void baflap_update(void) {
f32 temp_f0;
s32 i;
if (s_active != 0) {
//update timers
for(i = 0; i < 5; i++){
func_80259430(&s_flap_list[i]);
}
if (s_flap_max_timer != 0.0f) {
temp_f0 = s_flap_max_timer;
s_flap_max_timer = 0.0f;
baflap_add(temp_f0);
}
}
}

View File

@@ -3,8 +3,8 @@
#include "variables.h"
#include <core1/viewport.h>
#include "core2/ba/physics.h"
#include "core2/ba/flap.h"
extern void func_8028FDC8(f32);
extern void baModel_setYDisplacement(f32);
extern f32 func_8029B2D0(void);
extern void ncDynamicCam4_func_802BFE50(f32, f32, f32);
@@ -56,8 +56,8 @@ void func_802A3430(void){
func_802A33D8();
func_80293D48(60.0f, 45.0f);
func_80294378(4);
func_8028FEF0();
func_8028FFBC(1);
baflap_reset();
baflap_activate(1);
}
void func_802A34C8(void){
@@ -71,7 +71,7 @@ void func_802A34C8(void){
func_80291548();
func_80293D74();
func_80294378(1);
func_8028FFBC(0);
baflap_activate(0);
}
}
@@ -230,13 +230,13 @@ void bsbfly_update(void){
}
if(D_8037D346){
D_8037D346 = 0;
func_8028FDC8(0.35f);
baflap_add(0.35f);
}else{
func_8028FDC8(1.0f);
baflap_add(1.0f);
}
}//L802A3BB4
sp30 = func_8028FD30();
sp30 = baflap_getCount();
switch(D_8037D344){
case 0:
if(sp30)
@@ -306,7 +306,7 @@ void bsbfly_update(void){
if(func_802A3350())
sp54 = BS_1_IDLE;
func_8028FFF0();
baflap_update();
bs_setState(sp54);
}

View File

@@ -3,6 +3,7 @@
#include "variables.h"
#include "core2/ba/physics.h"
#include "core2/ba/flap.h"
void func_80354030(f32*, f32);
@@ -14,7 +15,6 @@ void ncDynamicCam4_func_802BFE50(f32, f32, f32);
void yaw_setVelocityBounded(f32, f32);
f32 func_8029B2D0(void);
f32 func_8029B2DC(void);
void func_8028FDC8(f32);
void func_80290B40(f32);
void func_80290A6C(void);
@@ -98,7 +98,7 @@ void _bsbeefly_end(void){
func_80291548();
baphysics_reset_gravity();
baphysics_reset_terminal_velocity();
func_8028FFBC(0);
baflap_activate(0);
func_8029099C();
}
@@ -111,8 +111,8 @@ void func_802A07F8(void){
func_802A0724();
baphysics_set_gravity(-300.0f);
baphysics_set_terminal_velocity(-99.9f);
func_8028FEF0();
func_8028FFBC(1);
baflap_reset();
baflap_activate(1);
func_802909C4();
}
@@ -161,7 +161,7 @@ void bsbeefly_enter(void){
func_802914CC(4);
func_802A07F8();
if(mvmnt != 0x8b){
func_8028FDC8(1.0f);
baflap_add(1.0f);
D_8037D2C0 = 0;
}
else {
@@ -186,12 +186,12 @@ void bsbeefly_update(void){
_bsBeeFly_updatePitch();
pitch_get(); //return value never used
if(button_pressed(BUTTON_A) && (player_getYPosition() < 7500.0)){
func_8028FDC8(1.0f);
baflap_add(1.0f);
}
if(!func_8028FD30() && player_inWater()){
func_8028FDC8(1.0f);
if((baflap_getCount() == 0) && player_inWater()){
baflap_add(1.0f);
}
sp44 = func_8028FD30();
sp44 = baflap_getCount();
animctrl_setDuration(sp48, D_803649B0[sp44]);
sp24 = &D_803649C4[sp44];
sp40 = 0.9f;
@@ -255,7 +255,7 @@ void bsbeefly_update(void){
baphysics_set_target_horizontal_velocity(sp38);
if(player_isStable() && !player_inWater())
sp4C = BS_85_BEE_IDLE;
func_8028FFF0();
baflap_update();
bs_setState(sp4C);
}

View File

@@ -1,74 +0,0 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
/* .bss */
u8 D_8037BFE0;
f32 D_8037BFE4;
f32 D_8037BFE8[5];
/* .code */
s32 func_8028FD30(void) {
s32 i;
s32 cnt;
cnt = 0;
for(i = 0; i < 5; i++){
if(D_8037BFE8[i] != 0.0f){
cnt++;
}
}
return cnt;
}
bool func_8028FDC8(f32 arg0) {
s32 i;
for(i = 0; i < 5; i++){
if(arg0 - 0.25 < D_8037BFE8[i]){
D_8037BFE4 = arg0;
return FALSE;
}
}
for(i = 0; i < 5; i++){
if (D_8037BFE8[i] == 0.0f) {
D_8037BFE8[i] = arg0;
return TRUE;
}
}
D_8037BFE4 = arg0;
return FALSE;
}
void func_8028FEF0(void) {
s32 i;
for(i = 0; i < 5; i++){
D_8037BFE8[i] = 0.0f;
}
D_8037BFE0 = D_8037BFE4 = 0.0f;
}
void func_8028FFBC(bool arg0){
D_8037BFE0 = arg0;
if(!D_8037BFE0){
func_8028FEF0();
}
}
void func_8028FFF0(void) {
f32 temp_f0;
s32 i;
if (D_8037BFE0 != 0) {
for(i = 0; i < 5; i++){
func_80259430(&D_8037BFE8[i]);
}
if (D_8037BFE4 != 0.0f) {
temp_f0 = D_8037BFE4;
D_8037BFE4 = 0.0f;
func_8028FDC8(temp_f0);
}
}
}