From cf8f5a80b13c4edd7fd8ebb33ab0de81d64f609b Mon Sep 17 00:00:00 2001 From: Yanis <35189056+Yanis002@users.noreply.github.com> Date: Tue, 22 Jul 2025 16:17:02 +0200 Subject: 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 Co-authored-by: Aetias --- include/Cutscene/CutsceneHandler.hpp | 6 ++ include/Item/Item.hpp | 139 ++++++++++++++--------------- include/Map/MapManager.hpp | 2 + include/Message/MessageManager.hpp | 2 +- include/Message/MsgProc.hpp | 2 + include/Save/AdventureFlags.hpp | 164 ++++++++++++++++++++++------------- include/flags.h | 16 ++++ include/global.h | 4 - 8 files changed, 200 insertions(+), 135 deletions(-) create mode 100644 include/flags.h (limited to 'include') diff --git a/include/Cutscene/CutsceneHandler.hpp b/include/Cutscene/CutsceneHandler.hpp index 035638a7..85f918a5 100644 --- a/include/Cutscene/CutsceneHandler.hpp +++ b/include/Cutscene/CutsceneHandler.hpp @@ -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); diff --git a/include/Item/Item.hpp b/include/Item/Item.hpp index 36f5a9ca..32a14a30 100644 --- a/include/Item/Item.hpp +++ b/include/Item/Item.hpp @@ -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; diff --git a/include/Map/MapManager.hpp b/include/Map/MapManager.hpp index 88308e4b..aa13a0f1 100644 --- a/include/Map/MapManager.hpp +++ b/include/Map/MapManager.hpp @@ -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(); diff --git a/include/Message/MessageManager.hpp b/include/Message/MessageManager.hpp index 221d6c31..fb06134b 100644 --- a/include/Message/MessageManager.hpp +++ b/include/Message/MessageManager.hpp @@ -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; diff --git a/include/Message/MsgProc.hpp b/include/Message/MsgProc.hpp index 81cea949..c3e0b662 100644 --- a/include/Message/MsgProc.hpp +++ b/include/Message/MsgProc.hpp @@ -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(); }; diff --git a/include/Save/AdventureFlags.hpp b/include/Save/AdventureFlags.hpp index 33f7c578..e7619e8d 100644 --- a/include/Save/AdventureFlags.hpp +++ b/include/Save/AdventureFlags.hpp @@ -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, - - /* 0x13 */ AdventureFlag_Hourglass = 19, - - /* 0x16 */ AdventureFlag_SunKey = 22, - /* 0x17 */ AdventureFlag_Unk_23 = 23, - - /* 0x2b */ AdventureFlag_FishingRod = 43, - - /* 0x30 */ AdventureFlag_Cannon = 48, - - /* 0x33 */ AdventureFlag_RegalNecklace = 51, - - /* 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, + /* 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), + + /* 0x002B */ AdventureFlag_FishingRod = FLAG(1, 11), + /* 0x0030 */ AdventureFlag_Cannon = FLAG(1, 16), + /* 0x0033 */ AdventureFlag_RegalNecklace = FLAG(1, 19), + + /* 0x007A */ AdventureFlag_CourageCrest = FLAG(3, 26), + /* 0x007D */ AdventureFlag_Azurine = FLAG(3, 29), + /* 0x007E */ AdventureFlag_Crimsonine = FLAG(3, 30), + /* 0x007F */ AdventureFlag_Aquanine = FLAG(3, 31), + + /* 0x0080 */ AdventureFlag_Unk_128 = FLAG(4, 0), + /* 0x008C */ AdventureFlag_SalvageArm = FLAG(4, 12), + + /* 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), + + /* 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), + + /* 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(); +}; + +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(); +}; - void func_ov000_020980f8(); +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; diff --git a/include/flags.h b/include/flags.h new file mode 100644 index 00000000..1173cc8d --- /dev/null +++ b/include/flags.h @@ -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)) diff --git a/include/global.h b/include/global.h index 449b8dfa..91df45f0 100644 --- a/include/global.h +++ b/include/global.h @@ -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)) -- cgit v1.2.3