Clean up flag handling

This commit is contained in:
robojumper
2025-05-10 22:11:12 +02:00
parent 4c5dede891
commit aa35c8c970
11 changed files with 136 additions and 102 deletions
+2 -2
View File
@@ -59,7 +59,7 @@ class dFlow_c : dFlowBase_c {
BRANCH_18,
BRANCH_19,
BRANCH_FREE_SPACE_IN_ITEM_CHECK,
BRANCH_21,
BRANCH_TARGET_ACTOR_HAS_KILL_COUNT,
BRANCH_22,
};
@@ -171,7 +171,7 @@ protected:
void setNext(u16 next);
void setField0x3C();
bool checkField0x3C() const;
bool matchesUnknownActorCategory(s32 id) const;
bool shouldActorShowKillCount(s32 id) const;
static void playSound(u32);
void createLytMiniGame();
void clearMinigame();
+2 -2
View File
@@ -18,7 +18,7 @@ public:
/** 0x24 */ virtual void unsetFlag(u16 flag);
/** 0x28 */ virtual void setFlagOrCounterToValue(u16 flag, u16 value);
/** 0x2C */ virtual u16 getCounterOrFlag(u16 flag) const;
/** 0x30 */ virtual u16 getUncommittedValue(u16 flag);
/** 0x30 */ virtual u16 getUncommittedValue(u16 flag) const;
/** 0x34 */ virtual u16 unk3(u16 arg);
/** 0x38 */ virtual const u16 *getSaveFlagSpace() const = 0;
@@ -33,7 +33,7 @@ public:
u16 getMaskForFlag(u16 flag);
void postCommit();
u16 getUncommittedValue_Priv(u16 flag);
u16 getUncommittedValue_Priv(u16 flag) const;
protected:
+1 -1
View File
@@ -5,7 +5,7 @@
class BitwiseFlagHelper {
public:
bool checkFlag(u16 slot, u16 shift, const u16 *pData, u16 flagCount);
bool checkFlag(u16 slot, u16 shift, const u16 *pData, u16 flagCount) const;
bool checkFlag2(u16 slot, u16 shift, const u16 *pData, s32 flagCount) {
return checkFlag(slot, shift, pData, flagCount);
}
+29 -7
View File
@@ -9,6 +9,8 @@ class ItemflagManager : public ItemStoryManagerBase {
private:
FlagSpace mItemFlags;
static const u32 MASK = 0x4000;
public:
ItemflagManager();
virtual ~ItemflagManager() {}
@@ -27,22 +29,22 @@ public:
FileManager::GetInstance()->setItemFlags(flags, 0, sz);
}
/** 0x20 */ virtual void setFlag(u16 flag) override {
ItemStoryManagerBase::setFlag(flag & ~0x4000);
ItemStoryManagerBase::setFlag(flag & ~MASK);
}
/** 0x24 */ virtual void unsetFlag(u16 flag) override {
ItemStoryManagerBase::unsetFlag(flag & ~0x4000);
ItemStoryManagerBase::unsetFlag(flag & ~MASK);
}
/** 0x28 */ virtual void setFlagOrCounterToValue(u16 flag, u16 value) override {
ItemStoryManagerBase::setFlagOrCounterToValue(flag & ~0x4000, value);
ItemStoryManagerBase::setFlagOrCounterToValue(flag & ~MASK, value);
}
/** 0x2C */ virtual u16 getCounterOrFlag(u16 flag) const override {
return ItemStoryManagerBase::getCounterOrFlag(flag & ~0x4000);
return ItemStoryManagerBase::getCounterOrFlag(flag & ~MASK);
}
/** 0x30 */ virtual u16 getUncommittedValue(u16 flag) override {
return ItemStoryManagerBase::getUncommittedValue(flag & ~0x4000);
/** 0x30 */ virtual u16 getUncommittedValue(u16 flag) const override {
return ItemStoryManagerBase::getUncommittedValue(flag & ~MASK);
}
/** 0x34 */ virtual u16 unk3(u16 arg) override {
return ItemStoryManagerBase::unk3(arg & ~0x4000);
return ItemStoryManagerBase::unk3(arg & ~MASK);
}
/** 0x38 */ virtual const u16 *getSaveFlagSpace() const override {
return FileManager::GetInstance()->getItemFlagsConst();
@@ -54,6 +56,26 @@ public:
static ItemflagManager *sInstance;
void setItemflag(u16 flag) {
setFlag(flag | MASK);
}
u16 getItemCounterOrFlag(u16 flag) const {
return getCounterOrFlag(flag | MASK);
}
void setItemFlag(u16 flag) {
setFlag(flag | MASK);
}
void setItemFlagOrCounterToValue(u16 flag, u16 value) {
setFlagOrCounterToValue(flag | MASK, value);
}
u16 getUncommittedItemValue(u16 flag) const {
return getUncommittedValue(flag | MASK);
}
private:
static u16 sFlags[0x40];
};
+37 -13
View File
@@ -7,6 +7,9 @@
class SceneflagManager {
private:
static const u32 TEMPFLAG_OFFSET = 0x80;
static const u32 ZONEFLAG_OFFSET = 0xC0;
FlagSpace mSceneflags;
FlagSpace mTempflags;
FlagSpace mZoneflags;
@@ -18,9 +21,6 @@ private:
static u16 sSceneFlags[8];
static u16 sZoneFlags[0xFC];
// helper
bool checkSceneflagHelper(u16 flag);
public:
static SceneflagManager *sInstance;
@@ -28,7 +28,7 @@ public:
void setShouldCommit(u16 flag);
SceneflagManager();
s32 isNotTempOrZoneFlag(u16 flag);
s32 isZoneFlag(u32 flag);
s32 isZoneFlag(u32 flag) const;
void updateFlagindex(u16 flagindex);
void copyFromSave(u32 flagindex);
void unsetAllTempflags();
@@ -37,11 +37,11 @@ public:
void unsetZoneAndTempflags();
void unsetAllZoneflags();
void unsetZoneflagsForRoom(u16 roomId);
u16 getZoneflagSlot(u16 roomId, u16 flag);
u16 getSceneflagSlotGlobal(u16 sceneIdx, u16 flag);
u16 getSceneflagSlot(u16 flag);
u16 getTempflagSlot(u16 flag);
bool checkZoneFlag(u16 roomId, u16 flag);
u16 getZoneflagSlot(u16 roomId, u16 flag) const;
u16 getSceneflagSlotGlobal(u16 sceneIdx, u16 flag) const;
u16 getSceneflagSlot(u16 flag) const ;
u16 getTempflagSlot(u16 flag) const;
bool checkZoneFlag(u16 roomId, u16 flag) const;
bool checkUncommittedZoneflag(u16 roomId, u16 flag);
u16 checkUncommittedZoneflag2(u16 roomId, u16 flag) {
return checkUncommittedZoneflag(roomId, flag);
@@ -50,9 +50,9 @@ public:
u16 checkUncommittedTempOrSceneflag2(u16 flag) {
return checkUncommittedTempOrSceneflag(flag);
}
u16 checkFlag(u16 roomId, u16 flag);
u16 checkSceneflagGlobal(u16 sceneIdx, u16 flag);
u16 checkTempOrSceneflag(u16 flag);
u16 checkFlag(u16 roomId, u16 flag) const;
u16 checkSceneflagGlobal(u16 sceneIdx, u16 flag) const;
u16 checkTempOrSceneflag(u16 flag) const;
u16 checkUncommittedFlag(u16 roomId, u16 flag);
void setZoneflag(u16 roomId, u16 flag);
void setFlag(u16 roomId, u16 flag);
@@ -64,9 +64,33 @@ public:
void unsetTempOrSceneflag(u16 flag);
s32 commit();
bool checkBoolFlag(u16 roomid, u16 flag) {
bool checkBoolFlag(u16 roomid, u16 flag) const {
return checkFlag(roomid, flag);
}
u16 checkTempflag_i(u16 roomid, u16 flag) const {
return checkFlag(roomid, flag + TEMPFLAG_OFFSET);
}
void setTempflag_i(u16 roomid, u16 flag) {
setFlag(roomid, flag + TEMPFLAG_OFFSET);
}
void unsetTempflag_i(u16 roomid, u16 flag) {
unsetFlag(roomid, flag + TEMPFLAG_OFFSET);
}
u16 checkZoneflag_i(u16 roomid, u16 flag) const {
return checkFlag(roomid, flag + ZONEFLAG_OFFSET);
}
void setZoneflag_i(u16 roomid, u16 flag) {
setFlag(roomid, flag + ZONEFLAG_OFFSET);
}
void unsetZoneflag_i(u16 roomid, u16 flag) {
unsetFlag(roomid, flag + ZONEFLAG_OFFSET);
}
};
#endif