Files
banjo-kazooie/src/core2/honeycombscore.c
2023-08-09 16:42:48 +02:00

83 lines
1.8 KiB
C

#include <ultra64.h>
#include "functions.h"
#include "variables.h"
#define HONEYCOMB_COUNT 0x19
#define HONEYCOMBSCORE_SIZE (((HONEYCOMB_COUNT-1 + 7) & ~7)/8)
void honeycombscore_debug(void);
void honeycombscore_clear(void);
/* .bss */
u8 sHoneycombScore[3];
/* .code */
void func_803212B0(void){
honeycombscore_debug();
honeycombscore_clear();
}
u8 *honeycombscore_get_ptr(void){
return sHoneycombScore;
}
bool honeycombscore_get(enum honeycomb_e indx){
if( indx <= 0 || indx >= HONEYCOMB_COUNT)
return 0;
return (sHoneycombScore[(indx - 1) / 8] & (1 << (indx & 7))) != 0;
}
void honeycombscore_debug(void){}
void honeycombscore_clear(void){
s32 i;
for(i = 0; i < HONEYCOMBSCORE_SIZE; i++){
sHoneycombScore[i] = 0;
}
}
void honeycombscore_set(enum honeycomb_e indx, bool val){
if( 0 < indx && indx < HONEYCOMB_COUNT){
if(val)
sHoneycombScore[(indx - 1) / 8] |= (1 << (indx & 7));
else
sHoneycombScore[(indx - 1) / 8] &= ~(1 << (indx & 7));
}
}
s32 honeycombscore_get_level_total(enum level_e level_id){
s32 v1;
s32 s2;
int i;
s32 total;
if(level_id <= 0 || level_id == LEVEL_6_LAIR || level_id >= 0xC)
return 0;
v1 = level_id*2 - 1;
v1 = (level_id < 7) ? v1 : v1 - 2;
s2 = (level_id*2 - 1 == 0x15) ? v1 + 6 : v1 + 2;
for(i = v1, total = 0; i<s2; i++){
if(honeycombscore_get(i))
total++;
}
return total;
}
s32 honeycombscore_get_total(void){
int i;
s32 total;
for(i = 0, total = 0; i < 0xC; i++){
total += honeycombscore_get_level_total(i);
}
return total;
}
void honeycombscore_getSizeAndPtr(s32 *size, u8 **addr){
*size = HONEYCOMBSCORE_SIZE;
*addr = sHoneycombScore;
}