summaryrefslogtreecommitdiff
path: root/src/flags.c
diff options
context:
space:
mode:
authortheo3 <arisstephenson2@gmail.com>2020-06-16 09:02:57 -0700
committertheo3 <arisstephenson2@gmail.com>2020-06-16 09:02:57 -0700
commit90a9cd39be40bfb39b71d7a96f32a7498e426b7b (patch)
tree20c848552097dbe213e8abebf7b676144093aa0c /src/flags.c
parent307c8cfc61ad661efedb32f4a7a83e3b823157c6 (diff)
flags.c OK
Diffstat (limited to 'src/flags.c')
-rw-r--r--src/flags.c118
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