mirror of
https://github.com/zeldaret/ss
synced 2026-08-04 09:08:55 -04:00
Clean up flag handling
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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:
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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];
|
||||
};
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user