Decompile more of AdventureFlags.cpp (#118)

* fix flags getters and associated relocs

* explicit ARM and improve existing matches

* match CopyTo

* document a bit the flag system and progress on unmatched functions

* remaining bottom functions

* func_ov00_02097810 params and name fix

* fix build issues

* move flag base definition to its own file

* document item flags

---------

Co-authored-by: Yanis002 <Yanis002@users.noreply.github.com>
Co-authored-by: Aetias <aetias@outlook.com>
This commit is contained in:
Yanis
2025-07-22 16:17:02 +02:00
committed by GitHub
parent 383ca6aaa2
commit cf8f5a80b1
16 changed files with 562 additions and 306 deletions
+6
View File
@@ -43,6 +43,12 @@ public:
/* 88 */ s32 mUnk_88;
/* 8c */
void SetFlags(s32 value) {
mFlags1 &= value;
mFlags2 &= value;
}
void func_ov000_020980f8();
s32 func_ov000_020980fc(unk32 param1, unk32 param2, void **param3);
bool func_ov000_02098114();
bool SkipCutscene(s32 param1);
+70 -69
View File
@@ -1,5 +1,6 @@
#pragma once
#include "flags.h"
#include "types.h"
#define MAX_POTIONS 2
@@ -7,86 +8,86 @@
typedef s32 ItemFlag;
enum ItemFlag_ {
ItemFlag_None = -1,
/* 0x00 */ ItemFlag_OshusSword = 0,
/* 0x01 */ ItemFlag_WoodenShield = 1,
/* 0x02 */ ItemFlag_Boomerang = 2,
/* 0x03 */ ItemFlag_Shovel = 3,
/* 0x04 */ ItemFlag_BombBag = 4,
/* 0x05 */ ItemFlag_Bow = 5,
/* 0x06 */ ItemFlag_GrapplingHook = 6,
/* 0x07 */ ItemFlag_BombchuBag = 7,
/* 0x08 */ ItemFlag_Hammer = 8,
/* 0x09 */ ItemFlag_PotionA = 9,
/* 0x0a */ ItemFlag_PotionB = 10,
/* 0x00 */ ItemFlag_OshusSword = FLAG(0, 0),
/* 0x01 */ ItemFlag_WoodenShield = FLAG(0, 1),
/* 0x02 */ ItemFlag_Boomerang = FLAG(0, 2),
/* 0x03 */ ItemFlag_Shovel = FLAG(0, 3),
/* 0x04 */ ItemFlag_BombBag = FLAG(0, 4),
/* 0x05 */ ItemFlag_Bow = FLAG(0, 5),
/* 0x06 */ ItemFlag_GrapplingHook = FLAG(0, 6),
/* 0x07 */ ItemFlag_BombchuBag = FLAG(0, 7),
/* 0x08 */ ItemFlag_Hammer = FLAG(0, 8),
/* 0x09 */ ItemFlag_PotionA = FLAG(0, 9),
/* 0x0a */ ItemFlag_PotionB = FLAG(0, 10),
ItemFlag_EQUIP_START = ItemFlag_OshusSword,
ItemFlag_EQUIP_END = ItemFlag_PotionB + 1,
ItemFlag_EQUIP_COUNT = ItemFlag_EQUIP_END - ItemFlag_EQUIP_START,
/* 0x14 */ ItemFlag_SpiritOfCourage = 20,
/* 0x15 */ ItemFlag_SpiritOfPower = 21,
/* 0x16 */ ItemFlag_SpiritOfWisdom = 22,
/* 0x17 */ ItemFlag_CourageLv1 = 23,
/* 0x18 */ ItemFlag_PowerLv1 = 24,
/* 0x19 */ ItemFlag_WisdomLv1 = 25,
/* 0x14 */ ItemFlag_SpiritOfCourage = FLAG(0, 20),
/* 0x15 */ ItemFlag_SpiritOfPower = FLAG(0, 21),
/* 0x16 */ ItemFlag_SpiritOfWisdom = FLAG(0, 22),
/* 0x17 */ ItemFlag_CourageLv1 = FLAG(0, 23),
/* 0x18 */ ItemFlag_PowerLv1 = FLAG(0, 24),
/* 0x19 */ ItemFlag_WisdomLv1 = FLAG(0, 25),
ItemFlag_FAIRY_LV1 = ItemFlag_CourageLv1,
/* 0x1a */ ItemFlag_CourageLv2 = 26,
/* 0x1b */ ItemFlag_PowerLv2 = 27,
/* 0x1c */ ItemFlag_WisdomLv2 = 28,
/* 0x1a */ ItemFlag_CourageLv2 = FLAG(0, 26),
/* 0x1b */ ItemFlag_PowerLv2 = FLAG(0, 27),
/* 0x1c */ ItemFlag_WisdomLv2 = FLAG(0, 28),
ItemFlag_FAIRY_LV2 = ItemFlag_CourageLv2,
/* 0x20 */ ItemFlag_Hourglass = 32,
/* 0x21 */ ItemFlag_SeaChartSW = 33,
/* 0x22 */ ItemFlag_SeaChartNW = 34,
/* 0x23 */ ItemFlag_SeaChartSE = 35,
/* 0x24 */ ItemFlag_SeaChartNE = 36,
/* 0x25 */ ItemFlag_PhantomSword = 37,
/* 0x26 */ ItemFlag_SunKey = 38,
/* 0x27 */ ItemFlag_Unk_39 = 39,
/* 0x28 */ ItemFlag_FishingRod = 40,
/* 0x29 */ ItemFlag_Cannon = 41,
/* 0x2a */ ItemFlag_KingsKey = 42,
/* 0x2b */ ItemFlag_GhostKey = 43,
/* 0x2c */ ItemFlag_SalvageArm = 44,
/* 0x20 */ ItemFlag_Hourglass = FLAG(1, 0),
/* 0x21 */ ItemFlag_SeaChartSW = FLAG(1, 1),
/* 0x22 */ ItemFlag_SeaChartNW = FLAG(1, 2),
/* 0x23 */ ItemFlag_SeaChartSE = FLAG(1, 3),
/* 0x24 */ ItemFlag_SeaChartNE = FLAG(1, 4),
/* 0x25 */ ItemFlag_PhantomSword = FLAG(1, 5),
/* 0x26 */ ItemFlag_SunKey = FLAG(1, 6),
/* 0x27 */ ItemFlag_Unk_39 = FLAG(1, 7),
/* 0x28 */ ItemFlag_FishingRod = FLAG(1, 8),
/* 0x29 */ ItemFlag_Cannon = FLAG(1, 9),
/* 0x2a */ ItemFlag_KingsKey = FLAG(1, 10),
/* 0x2b */ ItemFlag_GhostKey = FLAG(1, 11),
/* 0x2c */ ItemFlag_SalvageArm = FLAG(1, 12),
/* 0x2d */ ItemFlag_SwordsmansScroll = 45,
/* 0x2e */ ItemFlag_CycloneSlate = 46,
/* 0x2f */ ItemFlag_BigCatchLure = 47,
/* 0x2d */ ItemFlag_SwordsmansScroll = FLAG(1, 13),
/* 0x2e */ ItemFlag_CycloneSlate = FLAG(1, 14),
/* 0x2f */ ItemFlag_BigCatchLure = FLAG(1, 15),
/* 0x60 */ ItemFlag_TreasureChart1 = 96,
/* 0x61 */ ItemFlag_TreasureChart2 = 97,
/* 0x62 */ ItemFlag_TreasureChart3 = 98,
/* 0x63 */ ItemFlag_TreasureChart4 = 99,
/* 0x64 */ ItemFlag_TreasureChart5 = 100,
/* 0x65 */ ItemFlag_TreasureChart6 = 101,
/* 0x66 */ ItemFlag_TreasureChart7 = 102,
/* 0x67 */ ItemFlag_TreasureChart8 = 103,
/* 0x68 */ ItemFlag_TreasureChart9 = 104,
/* 0x69 */ ItemFlag_TreasureChart10 = 105,
/* 0x6a */ ItemFlag_TreasureChart11 = 106,
/* 0x6b */ ItemFlag_TreasureChart12 = 107,
/* 0x6c */ ItemFlag_TreasureChart13 = 108,
/* 0x6d */ ItemFlag_TreasureChart14 = 109,
/* 0x6e */ ItemFlag_TreasureChart15 = 110,
/* 0x6f */ ItemFlag_TreasureChart16 = 111,
/* 0x70 */ ItemFlag_TreasureChart17 = 112,
/* 0x71 */ ItemFlag_TreasureChart18 = 113,
/* 0x72 */ ItemFlag_TreasureChart19 = 114,
/* 0x73 */ ItemFlag_TreasureChart20 = 115,
/* 0x74 */ ItemFlag_TreasureChart21 = 116,
/* 0x75 */ ItemFlag_TreasureChart22 = 117,
/* 0x76 */ ItemFlag_TreasureChart23 = 118,
/* 0x77 */ ItemFlag_TreasureChart24 = 119,
/* 0x78 */ ItemFlag_TreasureChart25 = 120,
/* 0x79 */ ItemFlag_TreasureChart26 = 121,
/* 0x7a */ ItemFlag_TreasureChart27 = 122,
/* 0x7b */ ItemFlag_TreasureChart28 = 123,
/* 0x7c */ ItemFlag_TreasureChart29 = 124,
/* 0x7d */ ItemFlag_TreasureChart30 = 125,
/* 0x7e */ ItemFlag_TreasureChart31 = 126,
/* 0x7f */ ItemFlag_TreasureChart32 = 127,
/* 0x60 */ ItemFlag_TreasureChart1 = FLAG(3, 0),
/* 0x61 */ ItemFlag_TreasureChart2 = FLAG(3, 1),
/* 0x62 */ ItemFlag_TreasureChart3 = FLAG(3, 2),
/* 0x63 */ ItemFlag_TreasureChart4 = FLAG(3, 3),
/* 0x64 */ ItemFlag_TreasureChart5 = FLAG(3, 4),
/* 0x65 */ ItemFlag_TreasureChart6 = FLAG(3, 5),
/* 0x66 */ ItemFlag_TreasureChart7 = FLAG(3, 6),
/* 0x67 */ ItemFlag_TreasureChart8 = FLAG(3, 7),
/* 0x68 */ ItemFlag_TreasureChart9 = FLAG(3, 8),
/* 0x69 */ ItemFlag_TreasureChart10 = FLAG(3, 9),
/* 0x6a */ ItemFlag_TreasureChart11 = FLAG(3, 10),
/* 0x6b */ ItemFlag_TreasureChart12 = FLAG(3, 11),
/* 0x6c */ ItemFlag_TreasureChart13 = FLAG(3, 12),
/* 0x6d */ ItemFlag_TreasureChart14 = FLAG(3, 13),
/* 0x6e */ ItemFlag_TreasureChart15 = FLAG(3, 14),
/* 0x6f */ ItemFlag_TreasureChart16 = FLAG(3, 15),
/* 0x70 */ ItemFlag_TreasureChart17 = FLAG(3, 16),
/* 0x71 */ ItemFlag_TreasureChart18 = FLAG(3, 17),
/* 0x72 */ ItemFlag_TreasureChart19 = FLAG(3, 18),
/* 0x73 */ ItemFlag_TreasureChart20 = FLAG(3, 19),
/* 0x74 */ ItemFlag_TreasureChart21 = FLAG(3, 20),
/* 0x75 */ ItemFlag_TreasureChart22 = FLAG(3, 21),
/* 0x76 */ ItemFlag_TreasureChart23 = FLAG(3, 22),
/* 0x77 */ ItemFlag_TreasureChart24 = FLAG(3, 23),
/* 0x78 */ ItemFlag_TreasureChart25 = FLAG(3, 24),
/* 0x79 */ ItemFlag_TreasureChart26 = FLAG(3, 25),
/* 0x7a */ ItemFlag_TreasureChart27 = FLAG(3, 26),
/* 0x7b */ ItemFlag_TreasureChart28 = FLAG(3, 27),
/* 0x7c */ ItemFlag_TreasureChart29 = FLAG(3, 28),
/* 0x7d */ ItemFlag_TreasureChart30 = FLAG(3, 29),
/* 0x7e */ ItemFlag_TreasureChart31 = FLAG(3, 30),
/* 0x7f */ ItemFlag_TreasureChart32 = FLAG(3, 31),
ItemFlag_TREASURE_CHART_START = ItemFlag_TreasureChart1,
ItemFlag_COUNT = 128,
ItemFlag_COUNT = FLAG(4, 0),
};
typedef s32 ItemId;
+2
View File
@@ -8,6 +8,7 @@
#include "Map/Course.hpp"
#include "Map/MapBase.hpp"
#include "Physics/AABB.hpp"
#include "Save/AdventureFlags.hpp"
#include "System/SysNew.hpp"
struct MapManager_Unk1 {
@@ -245,6 +246,7 @@ public:
Vec3p *param_8);
bool func_ov00_02086a84(s32 *param_2, Vec3p *param_3, Vec3p *param_4, s32 param_5, s32 param_6, unk32 param_7,
Vec3p *param_8, Vec3p *param_9);
void func_ov000_02098d34(FlagsUnk2 *param1);
MapManager();
~MapManager();
+1 -1
View File
@@ -22,7 +22,7 @@ public:
/* 0x00 */ u8 mUnk_00[2];
/* 0x02 */ u8 mUnk_02;
/* 0x03 */ u8 mUnk_03;
/* 0x04 */ u8 mUnk_04; // halts actors and hides the item menu
/* 0x04 */ bool mUnk_04; // halts actors and hides the item menu
/* 0x05 */ u8 mUnk_05;
/* 0x06 */ unk16 mUnk_06;
/* 0x08 */ UnkStruct_020397f8 *mUnk_08;
+2
View File
@@ -92,6 +92,8 @@ struct Struct_027e0db0 {
/* 0x04 */ unk32 mUnk_04;
void func_ov000_0207b288(GameModeId modeId);
void func_ov000_0207b2f0(unk32 param_1, bool param_2);
void func_ov000_0207b334(unk32 param_1);
void func_ov000_0207b378(unk32 param_1);
void func_ov000_0207b43c();
};
+97 -55
View File
@@ -1,5 +1,6 @@
#pragma once
#include "flags.h"
#include "global.h"
#include "types.h"
@@ -9,52 +10,47 @@
typedef u32 AdventureFlag;
enum AdventureFlag_ {
/* 0x09 */ AdventureFlag_SWSeaChart = 9,
/* 0x0a */ AdventureFlag_NWSeaChart = 10,
/* 0x0b */ AdventureFlag_SESeaChart = 11,
/* 0x0c */ AdventureFlag_NESeaChart = 12,
/* 0x0009 */ AdventureFlag_SWSeaChart = FLAG(0, 9),
/* 0x000A */ AdventureFlag_NWSeaChart = FLAG(0, 10),
/* 0x000B */ AdventureFlag_SESeaChart = FLAG(0, 11),
/* 0x000C */ AdventureFlag_NESeaChart = FLAG(0, 12),
/* 0x0013 */ AdventureFlag_Hourglass = FLAG(0, 19),
/* 0x0016 */ AdventureFlag_SunKey = FLAG(0, 22),
/* 0x0017 */ AdventureFlag_Unk_23 = FLAG(0, 23),
/* 0x001D */ AdventureFlag_Unk_29 = FLAG(0, 29),
/* 0x001E */ AdventureFlag_Unk_30 = FLAG(0, 30),
/* 0x001F */ AdventureFlag_Unk_31 = FLAG(0, 31),
/* 0x13 */ AdventureFlag_Hourglass = 19,
/* 0x002B */ AdventureFlag_FishingRod = FLAG(1, 11),
/* 0x0030 */ AdventureFlag_Cannon = FLAG(1, 16),
/* 0x0033 */ AdventureFlag_RegalNecklace = FLAG(1, 19),
/* 0x16 */ AdventureFlag_SunKey = 22,
/* 0x17 */ AdventureFlag_Unk_23 = 23,
/* 0x007A */ AdventureFlag_CourageCrest = FLAG(3, 26),
/* 0x007D */ AdventureFlag_Azurine = FLAG(3, 29),
/* 0x007E */ AdventureFlag_Crimsonine = FLAG(3, 30),
/* 0x007F */ AdventureFlag_Aquanine = FLAG(3, 31),
/* 0x2b */ AdventureFlag_FishingRod = 43,
/* 0x0080 */ AdventureFlag_Unk_128 = FLAG(4, 0),
/* 0x008C */ AdventureFlag_SalvageArm = FLAG(4, 12),
/* 0x30 */ AdventureFlag_Cannon = 48,
/* 0x00A2 */ AdvantureFlag_HerosNewClothes = FLAG(5, 2),
/* 0x00A3 */ AdvantureFlag_Kaleidoscope = FLAG(5, 3),
/* 0x00A4 */ AdventureFlag_GuardNotebook = FLAG(5, 4),
/* 0x00A7 */ AdventureFlag_WoodHeart = FLAG(5, 7),
/* 0x00B6 */ AdventureFlag_SpawnFinalPhantoms = FLAG(5, 22),
/* 0x33 */ AdventureFlag_RegalNecklace = 51,
/* 0x0126 */ AdventureFlag_ReceivedGoldenChimney = FLAG(9, 6),
/* 0x0127 */ AdventureFlag_ReceivedGoldenHandrail = FLAG(9, 7),
/* 0x0128 */ AdventureFlag_ReceivedGoldenCannon = FLAG(9, 8),
/* 0x0129 */ AdventureFlag_ReceivedGoldenHull = FLAG(9, 9),
/* 0x0137 */ AdventureFlag_FrogGlyph_MercayIsland = FLAG(9, 23),
/* 0x0138 */ AdventureFlag_FrogGlyph_MolidaIsland = FLAG(9, 24),
/* 0x0139 */ AdventureFlag_FrogGlyph_BannanIsland = FLAG(9, 25),
/* 0x013A */ AdventureFlag_FrogGlyph_DeeEssIsland = FLAG(9, 26),
/* 0x013B */ AdventureFlag_FrogGlyph_IsleOfFrost = FLAG(9, 27),
/* 0x013C */ AdventureFlag_FrogGlyph_NorthEast = FLAG(9, 28),
/* 0x7a */ AdventureFlag_CourageCrest = 122,
/* 0x7d */ AdventureFlag_Azurine = 125,
/* 0x7e */ AdventureFlag_Crimsonine = 126,
/* 0x7f */ AdventureFlag_Aquanine = 127,
/* 0x80 */ AdventureFlag_Unk_128 = 128,
/* 0x8c */ AdventureFlag_SalvageArm = 140,
/* 0xa2 */ AdvantureFlag_HerosNewClothes = 162,
/* 0xa3 */ AdvantureFlag_Kaleidoscope = 163,
/* 0xa4 */ AdventureFlag_GuardNotebook = 164,
/* 0xa7 */ AdventureFlag_WoodHeart = 167,
/* 0xb6 */ AdventureFlag_SpawnFinalPhantoms = 182,
/* 0x126 */ AdventureFlag_ReceivedGoldenChimney = 294,
/* 0x127 */ AdventureFlag_ReceivedGoldenHandrail = 295,
/* 0x128 */ AdventureFlag_ReceivedGoldenCannon = 296,
/* 0x129 */ AdventureFlag_ReceivedGoldenHull = 297,
/* 0x137 */ AdventureFlag_FrogGlyph_MercayIsland = 311,
/* 0x138 */ AdventureFlag_FrogGlyph_MolidaIsland = 312,
/* 0x139 */ AdventureFlag_FrogGlyph_BannanIsland = 313,
/* 0x13a */ AdventureFlag_FrogGlyph_DeeEssIsland = 314,
/* 0x13b */ AdventureFlag_FrogGlyph_IsleOfFrost = 315,
/* 0x13c */ AdventureFlag_FrogGlyph_NorthEast = 316,
/* 0x187 */ AdventureFlag_COUNT = 391,
/* 0x0187 */ AdventureFlag_COUNT = FLAG(12, 7),
};
struct UnkStruct_027e0d38_UnkC {
@@ -96,46 +92,92 @@ struct FlagsUnk {
/* 38 */ unk32 mUnk_38;
/* 3c */ unk16 mUnk_3c;
/* 3e */ unk16 mUnk_3e;
/* 40 */ unk16 mUnk_40;
/* 42 */ unk16 mUnk_42;
/* 40 */ u16 mUnk_40;
/* 42 */ u16 mUnk_42;
/* 44 */ unk32 mUnk_44;
/* 48 */ unk8 mUnk_48;
/* 49 */ unk8 mUnk_49;
/* 4a */ unk8 mUnk_4a;
/* 48 */ u8 mUnk_48;
/* 49 */ u8 mUnk_49;
/* 4a */ u8 mUnk_4a;
/* 4b */ unk8 mUnk_4b;
/* 4c */
~FlagsUnk();
};
void func_ov000_020980f8();
struct FlagsData {
/* 00 */ u32 data[16];
/* 40 */
};
struct astruct_23 {
/* 00 */ unk32 mUnk_00;
/* 04 */ unk32 mUnk_04;
/* 08 */ unk32 mUnk_08;
/* 0c */ unk32 mUnk_0c;
/* 10 */ unk32 mUnk_10;
/* 14 */ unk8 mUnk_14;
/* 15 */ unk8 mUnk_15;
/* 16 */ bool mUnk_16;
/* 17 */ unk8 mUnk_17;
/* 18 */ unk8 mUnk_18;
/* 19 */ unk8 mUnk_19;
/* 1a */ unk16 mUnk_1a;
/* 1c */ unk16 mUnk_1c;
/* 1e */ unk8 mUnk_1e;
/* 1f */ unk8 mUnk_1f;
/* 20 */ unk8 mUnk_20[0x94 - 0x20];
/* 94 */ unk32 mUnk_94;
/* 98 */ unk16 mUnk_98;
/* 9a */ unk16 mUnk_9a;
/* 9c */ unk16 mUnk_9c;
/* 9e */ unk8 mUnk_9e;
/* 9f */ unk8 mUnk_9f;
/* a0 */ unk32 mUnk_a0;
/* a4 */ unk32 mUnk_a4;
/* a8 */ unk32 mUnk_a8;
/* ac */ unk32 mUnk_ac;
/* b0 */
astruct_23();
~astruct_23();
};
struct AdventureFlags_44 {
void func_ov000_02099024();
bool func_ov000_02098c48(s32 param1);
bool func_ov000_02098c68();
bool func_ov000_02098d20();
bool func_ov000_02098fa4(s32 param1);
bool func_ov000_020990a4(astruct_23 *param1);
s32 func_ov000_0209907c();
};
class AdventureFlags : public SysObject {
public:
/* 00 */ unk32 mFlags[16];
/* 00 */ FlagsData mFlags;
/* 40 */ CutsceneHandler *mCutsceneHandler;
/* 44 */ void *mUnk_44;
/* 44 */ AdventureFlags_44 *mUnk_44;
/* 48 */
static bool Exists();
void CopyTo(unk32 *flags);
void CopyTo(FlagsData *flags);
void func_ov00_02097674();
s32 func_ov00_02097684();
s32 func_ov00_02097684(unk32 param1, unk32 param2, void **param3);
void Load();
void func_ov00_020976c8();
void func_ov00_02097700();
bool func_ov00_02097738();
unk8 func_ov00_02097750();
bool func_ov00_02097750();
bool Get(AdventureFlag flag);
void Set(AdventureFlag flag, bool value);
void func_Ov00_02097810(s32 param1);
void func_ov00_02097810(s32 param1, astruct_23 *param2);
unk32 func_ov00_02097968(unk32 param1);
unk32 func_ov00_02097a44(unk32 param1, s32 param2);
bool func_ov00_02097b9c(s32 param1);
bool func_ov00_02097bac();
bool func_ov00_02097bbc();
bool func_ov00_02097bcc();
bool func_ov00_02097bcc(s32 param2);
bool func_ov00_02097bcc(s32 param1);
bool func_ov00_02097bcc(astruct_23 *param1);
s32 func_ov00_02097c08();
bool Get_FlagsUnk_30_Flag(s32 index);
u8 Get_FlagsUnk_49(s32 index);
@@ -173,7 +215,7 @@ public:
void func_ov004_0210453c();
bool func_ov004_0210455c(s32 param1);
void func_ov004_021046c8(unk32 param1);
void func_ov004_021046d4();
void func_ov004_021046d4(s32 param1);
};
extern AdventureFlags *gAdventureFlags;
+16
View File
@@ -0,0 +1,16 @@
#pragma once
#include "types.h"
/**
* Flags value format:
* - 0x001F: 0000 0000 0001 1111 -> the shift value to read or write the flag's bit
* - 0xFFE0: 1111 1111 1110 0000 -> index of the value in the array
*
* `FLAG` is a macro that allows you to get the final value from the index and the slot number.
*/
#define GET_FLAG(arr, pos) (((arr)[((u32) (pos)) >> 5] & (1 << ((pos) & 0x1f))) != 0)
#define SET_FLAG(arr, pos) ((arr)[((u32) (pos)) >> 5] |= 1 << ((pos) & 0x1f))
#define UNSET_FLAG(arr, pos) ((arr)[((u32) (pos)) >> 5] &= ~(1 << ((pos) & 0x1f)))
#define FLAG(index, slot) (((index) << 5) | ((slot) & 0x1F))
-4
View File
@@ -1,10 +1,6 @@
#ifndef PH_GLOBAL_H
#define PH_GLOBAL_H
#define GET_FLAG(arr, pos) (((1 << ((pos) & 0x1f)) & (arr)[((u32) (pos)) >> 5]) != 0)
#define SET_FLAG(arr, pos) ((arr)[((u32) (pos)) >> 5] |= 1 << ((pos) & 0x1f))
#define RESET_FLAG(arr, pos) ((arr)[((u32) (pos)) >> 5] &= ~(1 << ((pos) & 0x1f)))
#define ARRAY_LEN_U(arr) (u32)((sizeof(arr) / sizeof(*arr)))
#define ARRAY_LEN(arr) (s32)(sizeof(arr) / sizeof(*arr))