Files
banjo-kazooie/src/core2/mapspecificflags.c
Banjo Kazooie 0be5904e28 label fx/scores
2023-01-30 16:33:46 -06:00

110 lines
2.2 KiB
C

#include <ultra64.h>
#include "functions.h"
#include "variables.h"
void mapSpecificFlags_set(s32 i, s32 val);
/* .data */
u32 D_80367000 = 0;
/* .bss */
u32 D_8037DDE0;
u32 D_8037DDE4;
u32 D_8037DDE8;
/* .code */
u32 _mapSpecificFlags_calcCRC1(void){
return D_80367000 ^ 0x1195E97;
}
void _mapSpecificFlags_updateCRCs(void){
D_8037DDE4 = D_80367000 ^ 0xA84E38C8;
D_8037DDE0 = _mapSpecificFlags_calcCRC1();
D_8037DDE8 = D_80367000 ^ 0x3973e4d9;
}
void mapSpecificFlags_clearAll(void){
D_80367000 = 0;
_mapSpecificFlags_updateCRCs();
}
s32 mapSpecificFlags_get(s32 i){
return (D_80367000 & (1 << i))? 1 : 0;
}
u32 mapSpecificFlags_getN(s32 idx, s32 n){
s32 i;
u32 ret_val = 0;
for(i = 0; i < n; i++){
ret_val |= mapSpecificFlags_get(idx + i) << i;
}
return ret_val;
}
u32 mapSpecificFlags_getClear(s32 i){
u32 ret_val = mapSpecificFlags_get(i);
mapSpecificFlags_set(i, 0);
return ret_val;
}
void mapSpecificFlags_set(s32 i, s32 val){
if(val)
D_80367000 |= 1 << i;
else
D_80367000 &= ~(1 << i);
_mapSpecificFlags_updateCRCs();
}
void mapSpecificFlags_setN(s32 idx, s32 val, s32 n){
s32 i;
for(i = 0; i < n; i++){
mapSpecificFlags_set(idx + i, (1 << i) & val);
}
}
u32 mapSpecificFlags_getAll(void){
return D_80367000;
}
void mapSpecificFlags_setAll(u32 arg0){
D_80367000 = arg0;
_mapSpecificFlags_updateCRCs();
}
s32 *bitfield_new(s32 arg0){
s32 *phi_v0;
phi_v0 = (s32*)malloc( (((arg0 + 0x1F)>>5) + 1)*sizeof(s32));
*phi_v0 = arg0;
return phi_v0;
}
void bitfield_free(s32 *arg0){
free(arg0);
}
void bitfield_setBit(s32 *arg0, s32 arg1, bool arg2){
if(arg2){
arg0[(arg1 >> 5) + 1] |= 1 << (arg1 & (0x1F));
}
else{
arg0[(arg1 >> 5) + 1] -= arg0[(arg1 >> 5) + 1] & (1 << (arg1 & 0x1F));
}
}
bool bitfield_isBitSet(s32 *arg0, s32 arg1){
return (arg0[(arg1 >> 5) + 1] & (1 << (arg1 & 0x1F))) ? TRUE : FALSE;
}
void bitfield_setAll(s32 *arg0, bool arg1) {
s32 i;
for(i = 0; i < *arg0; i++){
bitfield_setBit(arg0, i, arg1);
}
}
s32 mapSpecificFlags_validateCRC1(void){
return _mapSpecificFlags_calcCRC1() == D_8037DDE0;
}