pokeheartgold/src/event_data.c
2021-12-21 16:05:04 -05:00

59 lines
1.5 KiB
C

#include "event_data.h"
static u8 sTempFlags[NUM_TEMP_FLAGS / 8] = {0};
u32 SavArray_Flags_sizeof(void) {
return sizeof(SCRIPT_STATE);
}
void SavArray_Flags_init(SCRIPT_STATE *scriptState) {
memset(scriptState, 0, sizeof(SCRIPT_STATE));
}
SCRIPT_STATE *SavArray_Flags_get(SAVEDATA *saveData) {
return SavArray_get(saveData, SAVE_FLAGS);
}
BOOL CheckFlagInArray(SCRIPT_STATE *scriptState, u16 flagno) {
u8 *flagAddr = GetFlagAddr(scriptState, flagno);
if (flagAddr != NULL) {
if (*flagAddr & (1 << (flagno % 8))) {
return TRUE;
}
}
return FALSE;
}
void SetFlagInArray(SCRIPT_STATE *scriptState, u16 flagno) {
u8 *flagAddr = GetFlagAddr(scriptState, flagno);
if (flagAddr == NULL) {
return;
}
*flagAddr |= 1 << (flagno % 8);
}
void ClearFlagInArray(SCRIPT_STATE *scriptState, u16 flagno) {
u8 *flagAddr = GetFlagAddr(scriptState, flagno);
if (flagAddr == NULL) {
return;
}
*flagAddr &= 0xFF ^ (1 << (flagno % 8));
}
u8 *GetFlagAddr(SCRIPT_STATE *scriptState, u16 flagno) {
if (flagno == 0) {
return NULL;
} else if (flagno < TEMP_FLAG_BASE) {
GF_ASSERT((flagno / 8) < (NUM_FLAGS / 8));
return &scriptState->flags[flagno / 8];
} else {
GF_ASSERT(((flagno - TEMP_FLAG_BASE) / 8) < (NUM_TEMP_FLAGS / 8));
return &sTempFlags[(flagno - TEMP_FLAG_BASE) / 8];
}
}
u16 *GetVarAddr(SCRIPT_STATE *scriptState, u16 varno) {
GF_ASSERT((varno - VAR_BASE) < NUM_VARS);
return &scriptState->vars[varno - VAR_BASE];
}