mirror of
https://github.com/zeldaret/tmc
synced 2026-06-24 01:31:39 -04:00
flags.c OK
This commit is contained in:
+102
-16
@@ -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 CheckLocalFlagsByOffset(u32 offset, u32 flag, u32 length) {
|
||||
u32 CheckGlobalFlag(u32 flag) {
|
||||
return CheckLocalFlagByOffset(0, flag);
|
||||
}
|
||||
|
||||
return CheckBits(&gGlobalFlags, offset + flag, length);
|
||||
u32 CheckRoomFlag(u32 flag) {
|
||||
return ReadBit(&gRoomVars.roomFlags, flag);
|
||||
}
|
||||
|
||||
u32 CheckLocalFlagsByOffset(u32 flag, u32 offset, u32 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 index)
|
||||
{
|
||||
SetLocalFlagByOffset(gArea.localFlagOffset, index);
|
||||
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 ClearRoomFlag(u32 flag) {
|
||||
ClearBit(&gRoomFlags, flag);
|
||||
}
|
||||
Reference in New Issue
Block a user