blob: cf33b20190698e2fa913623e389cd7d9c41192c1 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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];
}
|