Files
banjo-kazooie/src/core2/code_E680.c
2022-07-15 17:09:41 -05:00

118 lines
2.5 KiB
C

#include <ultra64.h>
#include "functions.h"
#include "variables.h"
s32 D_8037C3A0;
s32 D_8037C3A4;
void ability_use(s32 arg0){
s32 sp2C;
s32 sp28;
sp2C = 0;
sp28 = 1;
if(D_8037C3A4 & (1 << arg0))
return;
switch(arg0){
case 0x0://L80295660 //jump
mapSpecificFlags_set(8, TRUE);
sp28 = 1;
break;
case 0x1://L80295674 //flap
mapSpecificFlags_set(9, TRUE);
sp28 = 1;
break;
case 0x2://L80295688 //bust
mapSpecificFlags_set(0xa, TRUE);
sp28 = 1;
break;
case 0x3://L8029569C //
if(map_get() == MAP_1_SM_SPIRAL_MOUNTAIN){
sp2C = 0xDFC;
}
break;
case 0x4://L802956B8 //
if(map_get() == MAP_1_SM_SPIRAL_MOUNTAIN){
sp2C = 0xE02;
}
break;
case 0x5://L802956D4 //barge
if(map_get() == MAP_1_SM_SPIRAL_MOUNTAIN){
sp2C = 0xE05;
}
break;
case 0x6://L802956F0 //slide
sp28 = 0;
if(!ability_isUnlocked(ABILITY_10_TALON_TROT)){
if(map_get() == MAP_2_MM_MUMBOS_MOUNTAIN){
sp2C = 0xB4D;
}
else
return;
}
else{
D_8037C3A4 |= (1 << arg0);
}
break;
case 0x8://L80295738 //fly
sp2C = 0xA26;
break;
case 0x7://L80295740 //egg
case 0x9://L80295740 //shock
break;
}//L80295744
if(sp28)
func_8025A70C(COMUSIC_2B_DING_B);
if(sp2C)
func_80311480(sp2C, 4, NULL, NULL, NULL, 0);
D_8037C3A4 |= (1 << arg0);
}
int ability_hasUsed(enum ability_e move){
return (1 << move) & D_8037C3A4;
}
void ability_setHasUsed(enum ability_e move){
D_8037C3A4 |= (1 << move);
}
int ability_hasLearned(enum ability_e move){
return (1 << move) & D_8037C3A0;
}
s32 func_802957F0(void){
return D_8037C3A0;
}
void func_802957FC(void){}
void func_80295804(void){
D_8037C3A0 = 0;
D_8037C3A4 = 0;
}
void func_80295818(s32 move, s32 val){
if(val){
D_8037C3A0 |= (1 << move);
}else{
D_8037C3A0 &= ~(1 << move);
}
}
void func_80295864(s32 val){
D_8037C3A0 = val;
}
void func_80295870(s32 val){
D_8037C3A4 = val;
}
void func_8029587C(s32 *size, u8 **addr){
*size = 8;
*addr = &D_8037C3A0;
}