diff options
| author | theo3 <arisstephenson2@gmail.com> | 2020-06-16 09:02:57 -0700 |
|---|---|---|
| committer | theo3 <arisstephenson2@gmail.com> | 2020-06-16 09:02:57 -0700 |
| commit | 90a9cd39be40bfb39b71d7a96f32a7498e426b7b (patch) | |
| tree | 20c848552097dbe213e8abebf7b676144093aa0c /src | |
| parent | 307c8cfc61ad661efedb32f4a7a83e3b823157c6 (diff) | |
flags.c OK
Diffstat (limited to 'src')
| -rw-r--r-- | src/flags.c | 118 |
1 files changed, 102 insertions, 16 deletions
diff --git a/src/flags.c b/src/flags.c index 45099746..64351e6e 100644 --- a/src/flags.c +++ b/src/flags.c @@ -7,18 +7,43 @@ extern u32 ReadBit(u32*, u32); extern u32 CheckBits(u32*, u32, u32); extern void WriteBit(u32*, u32); +extern void ClearBit(u32*, u32); -u32 CheckGlobalFlag(u32 index) { - return CheckLocalFlagByOffset(0, index); +u32 CheckLocalFlag(u32 flag) { + return CheckLocalFlagByOffset(gArea.localFlagOffset, flag); } -u32 CheckRoomFlag(u32 index) { - return ReadBit(&gRoomVars.roomFlags, index); +u32 CheckFlags(u32 flags) { + s32 uVar1; + s32 index; + s32 length; + index = flags & 0x3ff; + length = (((flags & (0xf0) << 0x6) >> 0xa) + 1); + uVar1 = (flags & 0xc000) >> 0xe; + switch ((u32)uVar1) { + case 2: + return CheckRoomFlags(index, length); + case 0: + return CheckLocalFlags(index, length); + case 1: + return CheckGlobalFlags(index, length); + default: + return 0; + } + +} + +u32 CheckGlobalFlag(u32 flag) { + return CheckLocalFlagByOffset(0, flag); } -u32 CheckLocalFlagsByOffset(u32 offset, u32 flag, u32 length) { +u32 CheckRoomFlag(u32 flag) { + return ReadBit(&gRoomVars.roomFlags, flag); +} + +u32 CheckLocalFlagsByOffset(u32 flag, u32 offset, u32 length) { - return CheckBits(&gGlobalFlags, offset + flag, length); + return CheckBits(&gGlobalFlags, flag + offset, length); } u32 CheckLocalFlags(u32 flag, u32 length) { @@ -29,19 +54,80 @@ u32 CheckGlobalFlags(u32 flag, u32 length) { return CheckLocalFlagsByOffset(0, flag, length); } -u32 CheckRoomFlags(u32 - flag, u32 length) { +u32 CheckRoomFlags(u32 flag, u32 length) { return CheckBits(&gRoomVars.roomFlags, flag, length); } -void SetLocalFlagByOffset(u32 flag, u32 offset) -{ - if (offset != 0) { - WriteBit(&gGlobalFlags, flag + offset); - } +void SetLocalFlagByOffset(u32 offset, u32 flag) { + if (flag != 0) { + WriteBit(&gGlobalFlags, offset + flag); + } +} + +void SetLocalFlag(u32 flag) { + SetLocalFlagByOffset(gArea.localFlagOffset, flag); +} + +void SetFlag(u32 flag) { + s32 uVar1; + s32 index; + + if (flag != 0) { + index = flag & 0x3ff; + uVar1 = (flag & 0xc000) >> 0xe; + switch ((u32)uVar1) { + case 2: + SetRoomFlag(index); + return; + case 0: + SetLocalFlag(index); + return; + case 1: + SetGlobalFlag(index); + return; + } + } +} + +void SetGlobalFlag(u32 flag) { + SetLocalFlagByOffset(0, flag); +} + +void SetRoomFlag(u32 flag) { + WriteBit(&gRoomFlags, flag); +} + +void ClearLocalFlagByOffset(u32 offset, u32 flag) { + ClearBit(&gGlobalFlags, offset + flag); +} + +void ClearLocalFlag(u32 flag) { + ClearLocalFlagByOffset(gArea.localFlagOffset, flag); +} + +void ClearFlag(u32 flag) { + s32 uVar1; + s32 index; + + index = flag & 0x3ff; + uVar1 = (flag & 0xc000) >> 0xe; + switch ((u32)uVar1) { + case 2: + ClearRoomFlag(index); + return; + case 0: + ClearLocalFlag(index); + return; + case 1: + ClearGlobalFlag(index); + return; + } +} + +void ClearGlobalFlag(u32 flag) { + ClearLocalFlagByOffset(0, flag); } -void SetLocalFlag(u32 index) -{ - SetLocalFlagByOffset(gArea.localFlagOffset, index); +void ClearRoomFlag(u32 flag) { + ClearBit(&gRoomFlags, flag); }
\ No newline at end of file |
