summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorrobojumper <robojumper@gmail.com>2024-10-25 15:15:10 +0200
committerrobojumper <robojumper@gmail.com>2024-10-25 15:15:10 +0200
commitdfaf6296a515273ec1697effbc4903e367956cb4 (patch)
tree5e07b33d15e2879b03bd753e3709de794d1bbd67 /include
parent50b16f7da4319dd059ace7e8015b2f74fda38a68 (diff)
Renames
Diffstat (limited to 'include')
-rw-r--r--include/d/flag/baseflag_manager.h24
-rw-r--r--include/d/flag/dungeonflag_manager.h36
-rw-r--r--include/d/flag/flag_index.h37
-rw-r--r--include/d/flag/itemflag_manager.h8
-rw-r--r--include/d/flag/storyflag_manager.h8
-rw-r--r--include/d/flag/unk_flag_stuff.h26
6 files changed, 94 insertions, 45 deletions
diff --git a/include/d/flag/baseflag_manager.h b/include/d/flag/baseflag_manager.h
index 9d187957..42471bca 100644
--- a/include/d/flag/baseflag_manager.h
+++ b/include/d/flag/baseflag_manager.h
@@ -1,7 +1,7 @@
#ifndef D_FLAG_BASEFLAG_MANAGER_H
#define D_FLAG_BASEFLAG_MANAGER_H
-#include "d/flag/unk_flag_stuff.h"
+#include "d/flag/flag_index.h"
#include "d/flag/flag_space.h"
class ItemStoryManagerBase {
@@ -24,24 +24,26 @@ public:
void init();
- void setFlagSizes(u16 flagSizeMaybe, u16 anotherFlagSizeMaybe);
void copyFlagsFromSave_Priv();
- void setupUnkFlagStuff(UnkFlagDefinition *def, u16 count);
+ void setupFlagIndex(FlagDefinition *def, u16 count);
void doCommit_Priv();
void setOrClearFlag(u16 flag, u16 value);
u16 getFlag(u16 flag) const;
- void FUN_800bf610(u16 flag);
- u16 FUN_800bf640(u16 flag);
- void FUN_800bf690();
+ void onFlagChange(u16 flag);
+ u16 getMaskForFlag(u16 flag);
+ void postCommit();
u16 getUncommittedValue_Priv(u16 flag);
protected:
- /** 0x04 */ u16 flagSizeMaybe;
- /** 0x06 */ u16 anotherSizeMaybe;
- /** 0x08 */ FlagSpace *storyFlagsPtr;
- /** 0x0C */ UnkFlagStuff *unkFlagsPtr;
- /** 0x10 */ bool dirty;
+
+ void setFlagSizes(u16 flagCount, u16 flagSizeBytes);
+
+ /** 0x04 */ u16 mFlagCount;
+ /** 0x06 */ u16 mFlagSizeBytes;
+ /** 0x08 */ FlagSpace *mpFlagSpace;
+ /** 0x0C */ FlagIndex *mpFlagIndex;
+ /** 0x10 */ bool mDirty;
};
#endif
diff --git a/include/d/flag/dungeonflag_manager.h b/include/d/flag/dungeonflag_manager.h
new file mode 100644
index 00000000..ec944532
--- /dev/null
+++ b/include/d/flag/dungeonflag_manager.h
@@ -0,0 +1,36 @@
+#ifndef D_FLAG_DUNGEONFLAG_MANAGER_H
+#define D_FLAG_DUNGEONFLAG_MANAGER_H
+
+#include "d/flag/flag_index.h"
+#include "d/flag/flag_space.h"
+#include "toBeSorted/file_manager.h"
+
+class DungeonflagManager {
+public:
+ bool mShouldCommit;
+ u16 mStageIndex;
+ FlagIndex *mpFlagIndex;
+ FlagSpace mFlagSpace;
+
+ static u16 sDungeonFlags[8];
+
+ void copyFromSave(u32 flag);
+ void copyFromSave_Internal(u16 flagIndex);
+ void setCommitFlag(u16 flag);
+ DungeonflagManager();
+ void init();
+ void setToValue(u16 flag, u32 value);
+ void setFlag(u16 flag);
+ u16 getDungeonFlag(u16 flag);
+ bool doCommit();
+
+ /** inline shenanigans to get copyFromSave to match */
+ static inline u16 *saveFilePtr(u16 flagIndex) {
+ u32 offset = (flagIndex & 0x1fff) * 8;
+ return FileManager::sInstance->getDungeonFlagsConst() + offset;
+ }
+
+ static DungeonflagManager *sInstance;
+};
+
+#endif
diff --git a/include/d/flag/flag_index.h b/include/d/flag/flag_index.h
new file mode 100644
index 00000000..f4f98d34
--- /dev/null
+++ b/include/d/flag/flag_index.h
@@ -0,0 +1,37 @@
+#ifndef D_FLAG_FLAG_INDEX_H
+#define D_FLAG_FLAG_INDEX_H
+
+#include "common.h"
+
+/**
+ * @brief Defines a single story or item flag.
+ */
+struct FlagDefinition {
+ u8 mIndex;
+ u8 mShiftMask;
+};
+
+/**
+ * @brief Helper class for packing and unpacking flag data.
+ *
+ * Some flag managers store their data in a packed format, where
+ * flags have a variable number of bits and can appear in varied
+ * locations within a halfword.
+ */
+class FlagIndex {
+ u16 mDefinitionsCount;
+ FlagDefinition *mpDefinitions;
+
+public:
+ u16 calculateMask(s32 shift);
+ void doNothing(u32 unused);
+ FlagIndex(u16 count, FlagDefinition *definitions);
+ void prepareIndexShiftMask(u16 counterIdx, u32 flagCount, u16 *pIndex, u8 *pShift, u16 *pMask);
+ u16 maskForIdx(u16 index, u16 flagCount);
+ u16 getCounterOrFlag(u16 counterIdx, const u16 *pData, u32 flagCount);
+ void setCounterOrFlag(u16 counterIdx, u16 *pData, u32 flagCount, u32 value);
+
+ u32 checkFlagValid(u16 counterIdx, u32 flagCount);
+};
+
+#endif
diff --git a/include/d/flag/itemflag_manager.h b/include/d/flag/itemflag_manager.h
index fa55067c..d2507575 100644
--- a/include/d/flag/itemflag_manager.h
+++ b/include/d/flag/itemflag_manager.h
@@ -8,7 +8,7 @@
class ItemflagManager : public ItemStoryManagerBase {
public:
- FlagSpace itemFlags;
+ FlagSpace mItemFlags;
ItemflagManager();
virtual ~ItemflagManager() {}
@@ -16,14 +16,14 @@ public:
bool commit();
/** 0x0C */ virtual void setFlagszptr() override {
- storyFlagsPtr = &itemFlags;
+ mpFlagSpace = &mItemFlags;
}
/** 0x10 */ virtual void onDirty() override;
/** 0x14 */ virtual void copyFlagsFromSave();
/** 0x18 */ virtual void setupUnkFlagsStuff();
/** 0x1C */ virtual void doCommit() {
- u16 sz = flagSizeMaybe;
- u16 *flags = storyFlagsPtr->getFlagPtrUnchecked();
+ u16 sz = mFlagCount;
+ u16 *flags = mpFlagSpace->getFlagPtrUnchecked();
FileManager::sInstance->setItemFlags(flags, 0, sz);
}
/** 0x20 */ virtual void setFlag(u16 flag) {
diff --git a/include/d/flag/storyflag_manager.h b/include/d/flag/storyflag_manager.h
index d718823d..bdcaf0aa 100644
--- a/include/d/flag/storyflag_manager.h
+++ b/include/d/flag/storyflag_manager.h
@@ -10,19 +10,19 @@ public:
virtual ~StoryflagManager() {}
- FlagSpace storyFlags;
+ FlagSpace mStoryFlags;
bool commit();
/** 0x0C */ virtual void setFlagszptr() override {
- storyFlagsPtr = &storyFlags;
+ mpFlagSpace = &mStoryFlags;
}
/** 0x10 */ virtual void onDirty() override;
/** 0x14 */ virtual void copyFlagsFromSave() override;
/** 0x18 */ virtual void setupUnkFlagsStuff() override;
/** 0x1C */ virtual void doCommit() override {
- u16 sz = flagSizeMaybe;
- u16 *flags = storyFlagsPtr->getFlagPtrUnchecked();
+ u16 sz = mFlagCount;
+ u16 *flags = mpFlagSpace->getFlagPtrUnchecked();
FileManager::sInstance->setStoryFlags(flags, 0, sz);
}
/** 0x24 */ virtual void unsetFlag(u16 flag) override;
diff --git a/include/d/flag/unk_flag_stuff.h b/include/d/flag/unk_flag_stuff.h
deleted file mode 100644
index 9f0513f3..00000000
--- a/include/d/flag/unk_flag_stuff.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef UNK_FLAG_STUFF_H
-#define UNK_FLAG_STUFF_H
-
-#include "common.h"
-
-struct UnkFlagDefinition {
- u8 mIndex;
- u8 mShiftMask;
-};
-
-class UnkFlagStuff {
- u16 mDefinitionsCount;
- UnkFlagDefinition *mpDefinitions;
-
-public:
- u16 calculateMask(s32 shift);
- void doNothing(u32 unused);
- UnkFlagStuff(u16 count, UnkFlagDefinition *definitions);
- void prepareIndexShiftMask(u16 counterIdx, u32 flagCount, u16 *pIndex, u8 *pShift, u16 *pMask);
- u16 maskForIdx(u16 index, u16 flagSizeMaybe);
- u16 getCounterOrFlag(u16 counterIdx, const u16 *pData, u32 flagCount);
- void setCounterOrFlag(u16 counterIdx, u16 *pData, u32 flagCount, u32 value);
- u32 checkFlagValid(u16 counterIdx, u32 flagCount);
-};
-
-#endif