111 lines
2.4 KiB
C
111 lines
2.4 KiB
C
#include <ultra64.h>
|
|
#include "functions.h"
|
|
#include "variables.h"
|
|
|
|
u32 jiggyscore_isCollected(enum jiggy_e);
|
|
void jiggyscore_debug(void);
|
|
void jiggyscore_clearAll(void);
|
|
void jiggyscore_setSpawned(s32, s32);
|
|
|
|
/* .bss */
|
|
struct {
|
|
u8 D_803832C0[0xD];
|
|
u8 D_803832CD[0xD];
|
|
}jiggyscore;
|
|
|
|
/* .code */
|
|
void jiggyscore_clearAll_debug(void){ //jiggyscore_clearAll
|
|
jiggyscore_debug();
|
|
jiggyscore_clearAll();
|
|
}
|
|
|
|
void *jiggyscore_clearAllSpawned(void) {
|
|
s32 i;
|
|
for(i = 0; i < 0x0D; i++){
|
|
jiggyscore.D_803832CD[i] = 0;
|
|
}
|
|
}
|
|
|
|
u8* jiggyscore_getPtr(void){
|
|
return jiggyscore.D_803832C0;
|
|
}
|
|
|
|
int jiggyscore_isSpawned(enum jiggy_e jiggy_id) {
|
|
return ((jiggyscore.D_803832CD[(jiggy_id - 1) / 8] & (1 << (jiggy_id & 7))) != 0)
|
|
|| (jiggyscore_isCollected(jiggy_id) != 0);
|
|
}
|
|
|
|
u32 jiggyscore_isCollected(enum jiggy_e jiggy_id){
|
|
if( jiggy_id <= 0 || jiggy_id >= 0x65)
|
|
return 0;
|
|
return (jiggyscore.D_803832C0[(jiggy_id - 1) / 8] & (1 << (jiggy_id & 7))) != 0;
|
|
}
|
|
|
|
void jiggyscore_debug(void){}
|
|
|
|
void jiggyscore_clearAll(void){
|
|
s32 i;
|
|
for(i = 0; i < 0x0D; i++){
|
|
jiggyscore.D_803832C0[i] = 0;
|
|
}
|
|
jiggyscore_clearAllSpawned();
|
|
}
|
|
|
|
void jiggyscore_setCollected(s32 indx, s32 val){
|
|
if( 0 < indx && indx < 0x65){
|
|
if(val)
|
|
jiggyscore.D_803832C0[(indx - 1) / 8] |= (1 << (indx & 7));
|
|
else
|
|
jiggyscore.D_803832C0[(indx - 1) / 8] &= ~(1 << (indx & 7));
|
|
}
|
|
}
|
|
|
|
void jiggyscore_setSpawned(s32 indx, s32 val) {
|
|
u8 *temp_v0;
|
|
u8 *temp_v0_2;
|
|
|
|
if (val) {
|
|
temp_v0 = (u8*)(((s32) (indx - 1) / 8) + 0xD);
|
|
temp_v0 += (s32) jiggyscore.D_803832C0;
|
|
*temp_v0 |= (1 << (indx & 7));
|
|
return;
|
|
}
|
|
temp_v0_2 = (u8*)(((s32) (indx - 1) / 8) + 0xD);
|
|
temp_v0_2 += (s32)jiggyscore.D_803832C0;
|
|
*temp_v0_2 &= ~(1 << (indx & 7));
|
|
}
|
|
|
|
s32 jiggyscore_leveltotal(s32 lvl) {
|
|
s32 i;
|
|
s32 start;
|
|
s32 end;
|
|
s32 cnt;
|
|
|
|
if (lvl <= 0 || lvl == 0xB || lvl >= 0xB)
|
|
return 0;
|
|
|
|
cnt = 0;
|
|
start = (lvl - 1)*10 + 1;
|
|
end = (lvl)*10 + 1;
|
|
for(i = start; i < end; i++ ){
|
|
if(jiggyscore_isCollected(i))
|
|
cnt++;
|
|
}
|
|
return cnt;
|
|
}
|
|
|
|
s32 jiggyscore_total(void) {
|
|
s32 i;
|
|
s32 cnt;
|
|
|
|
for(i = 0, cnt = 0; i < 0xC; i++){
|
|
cnt += jiggyscore_leveltotal(i);
|
|
}
|
|
return cnt;
|
|
}
|
|
|
|
void jiggyscore_info(s32 *size, u8 **addr){
|
|
*size = 0x0D;
|
|
*addr = jiggyscore.D_803832C0;
|
|
}
|