diff options
Diffstat (limited to 'arm9/src/event_data.c')
-rw-r--r-- | arm9/src/event_data.c | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/arm9/src/event_data.c b/arm9/src/event_data.c new file mode 100644 index 00000000..cf33b201 --- /dev/null +++ b/arm9/src/event_data.c @@ -0,0 +1,78 @@ +#include "global.h" +#include "save_block_2.h" +#include "event_data.h" + +#pragma thumb on + +u8 UNK_021C5A14[8]; + +u8 * GetFlagAddr(struct ScriptState * state, u16 flag_id); + +u32 SavArray_Flags_sizeof(void) +{ + return sizeof(struct ScriptState); +} + +void SavArray_Flags_init(struct ScriptState * state) +{ + memset(state, 0, sizeof(struct ScriptState)); +} + +struct ScriptState * SavArray_Flags_get(struct SaveBlock2 * sav2) +{ + return (struct ScriptState *)SavArray_get(sav2, 4); +} + +BOOL CheckFlagInArray(struct ScriptState * state, u16 flag_id) +{ + u8 * ptr = GetFlagAddr(state, flag_id); + if (ptr != NULL) + { + int mask = 1 << (flag_id % 8); + if (*ptr & mask) + return TRUE; + } + return FALSE; +} + +void SetFlagInArray(struct ScriptState * state, u16 flag_id) +{ + u8 * ptr = GetFlagAddr(state, flag_id); + if (ptr != NULL) + { + int mask = 1 << (flag_id % 8); + *ptr |= mask; + } +} + +void ClearFlagInArray(struct ScriptState * state, u16 flag_id) +{ + u8 * ptr = GetFlagAddr(state, flag_id); + if (ptr != NULL) + { + int mask = 1 << (flag_id % 8); + *ptr &= 0xFF ^ mask; + } +} + +u8 * GetFlagAddr(struct ScriptState * state, u16 flag_id) +{ + if (flag_id == 0) + return 0; + if (flag_id < 0x4000) + { + GF_ASSERT((flag_id / 8) < 364); + return &state->flags[flag_id / 8]; + } + else + { + GF_ASSERT(((flag_id - 0x4000) / 8) < 8); + return &UNK_021C5A14[(flag_id - 0x4000) / 8]; + } +} + +u16 * GetVarAddr(struct ScriptState * state, u16 var_id) +{ + GF_ASSERT((var_id - 0x4000) < 288); + return &state->vars[var_id - 0x4000]; +} |