summaryrefslogtreecommitdiff
path: root/src/d/flag
diff options
context:
space:
mode:
authorrobojumper <robojumper@gmail.com>2025-05-10 22:11:12 +0200
committerrobojumper <robojumper@gmail.com>2025-05-10 22:20:19 +0200
commitaa35c8c9707ee78913847fb2faf3cf89b5f99557 (patch)
treeabcdba805d104c324854ee425b53b615e2e03c9c /src/d/flag
parent4c5dede891ea0934d77bfcee8f50f9702c949031 (diff)
Clean up flag handling
Diffstat (limited to 'src/d/flag')
-rw-r--r--src/d/flag/baseflag_manager.inc4
-rw-r--r--src/d/flag/bitwise_flag_helper.inc2
-rw-r--r--src/d/flag/sceneflag_manager.inc65
3 files changed, 29 insertions, 42 deletions
diff --git a/src/d/flag/baseflag_manager.inc b/src/d/flag/baseflag_manager.inc
index f9de576d..9d8d2aa3 100644
--- a/src/d/flag/baseflag_manager.inc
+++ b/src/d/flag/baseflag_manager.inc
@@ -46,7 +46,7 @@ u16 ItemStoryManagerBase::getFlag(u16 flag) const {
}
/** 800bf4e0 */
-u16 ItemStoryManagerBase::getUncommittedValue_Priv(u16 flag) {
+u16 ItemStoryManagerBase::getUncommittedValue_Priv(u16 flag) const {
u16 *data = mpFlagSpace->getFlagPtrUnchecked();
return mpFlagIndex->getCounterOrFlag(flag, data, mFlagCount);
}
@@ -80,7 +80,7 @@ u16 ItemStoryManagerBase::getCounterOrFlag(u16 flag) const {
}
/** 800bf5f0 */
-u16 ItemStoryManagerBase::getUncommittedValue(u16 flag) {
+u16 ItemStoryManagerBase::getUncommittedValue(u16 flag) const {
return getUncommittedValue_Priv(flag);
}
diff --git a/src/d/flag/bitwise_flag_helper.inc b/src/d/flag/bitwise_flag_helper.inc
index a79095f5..590046c0 100644
--- a/src/d/flag/bitwise_flag_helper.inc
+++ b/src/d/flag/bitwise_flag_helper.inc
@@ -2,7 +2,7 @@
#include "common.h"
-bool BitwiseFlagHelper::checkFlag(u16 slot, u16 shift, const u16 *pData, u16 flagCount) {
+bool BitwiseFlagHelper::checkFlag(u16 slot, u16 shift, const u16 *pData, u16 flagCount) const {
return (pData[slot] >> shift) & 1;
}
void BitwiseFlagHelper::setFlag(u16 slot, u16 shift, u16 *pData, u16 flagCount) {
diff --git a/src/d/flag/sceneflag_manager.inc b/src/d/flag/sceneflag_manager.inc
index ccec3d82..4fea010a 100644
--- a/src/d/flag/sceneflag_manager.inc
+++ b/src/d/flag/sceneflag_manager.inc
@@ -19,21 +19,15 @@ SceneflagManager::SceneflagManager()
}
s32 SceneflagManager::isNotTempOrZoneFlag(u16 flag) {
- // return ((s32)flag - 0x80) < 0;
- return flag < 0x80;
+ return flag < TEMPFLAG_OFFSET;
}
-inline s32 possiblyZoneFlag(u32 flag) {
- return flag >= 0xC0;
-}
-
-s32 SceneflagManager::isZoneFlag(u32 flag) {
- if (possiblyZoneFlag(flag) && flag < 0x100) {
+s32 SceneflagManager::isZoneFlag(u32 flag) const {
+ if (ZONEFLAG_OFFSET <= flag && flag < 0x100) {
return 1;
} else {
return 0;
}
- // return flag >= 0xC0 && flag < 0x100;
}
void SceneflagManager::updateFlagindex(u16 sceneIdx) {
if (sceneIdx != mSceneIdx) {
@@ -43,9 +37,7 @@ void SceneflagManager::updateFlagindex(u16 sceneIdx) {
}
}
void SceneflagManager::copyFromSave(u32 sceneIdx) {
- // sceneIdx &= 0xFFFF;
u16 sceneIdx2 = sceneIdx;
- // missing clrlwi, more inlines?
mSceneIdx = sceneIdx2;
mSceneflags.copyFromSaveFile2(FileManager::GetInstance()->getSceneFlagsConst() + sceneIdx2 * 8, 0, 8);
mTempflags.copyFromSaveFile(FileManager::GetInstance()->getTempFlagsConst(), 0, mTempflags.mCount);
@@ -81,23 +73,23 @@ void SceneflagManager::unsetZoneflagsForRoom(u16 roomId) {
// ? weird mask
mZoneflags.setAllToZero((roomId & 0x3FF) * 4, 4);
}
-u16 SceneflagManager::getZoneflagSlot(u16 roomId, u16 flag) {
+u16 SceneflagManager::getZoneflagSlot(u16 roomId, u16 flag) const {
return (flag + roomId * 0x40) >> 4 & 0xFFF;
}
-u16 SceneflagManager::getSceneflagSlotGlobal(u16 sceneIdx, u16 flag) {
+u16 SceneflagManager::getSceneflagSlotGlobal(u16 sceneIdx, u16 flag) const {
return (flag + sceneIdx * 0x80) >> 4 & 0xFFF;
}
-u16 SceneflagManager::getSceneflagSlot(u16 flag) {
+u16 SceneflagManager::getSceneflagSlot(u16 flag) const {
return flag >> 4 & 0xFFF;
}
-u16 SceneflagManager::getTempflagSlot(u16 flag) {
+u16 SceneflagManager::getTempflagSlot(u16 flag) const {
return flag >> 4 & 0xFFF;
}
-bool SceneflagManager::checkZoneFlag(u16 roomId, u16 flag) {
+bool SceneflagManager::checkZoneFlag(u16 roomId, u16 flag) const {
if (flag == 0xFF) {
return false;
} else {
- u16 zoneflag = flag - 0xC0;
+ u16 zoneflag = flag - ZONEFLAG_OFFSET;
u16 *pData = FileManager::GetInstance()->getZoneFlagsConst();
u16 slot = getZoneflagSlot(roomId, zoneflag);
return mFlagHelper.checkFlag(slot, zoneflag % 16, pData, 0xFC);
@@ -108,43 +100,38 @@ bool SceneflagManager::checkUncommittedZoneflag(u16 roomId, u16 flag) {
return false;
} else {
u16 *pData;
- u16 zoneflag = flag - 0xC0;
+ u16 zoneflag = flag - ZONEFLAG_OFFSET;
pData = mZoneflags.getFlagPtrUnchecked();
u16 slot = getZoneflagSlot(roomId, zoneflag);
return mFlagHelper.checkFlag(slot, zoneflag % 16, pData, mZoneflags.mCount);
}
}
-inline bool SceneflagManager::checkSceneflagHelper(u16 flag) {
- u16 *pData;
- pData = mSceneflags.getFlagPtrUnchecked();
- // u16 slot = getSceneflagSlot2(flag);
- return mFlagHelper.checkFlag(getSceneflagSlot(flag), flag % 16, pData, mSceneflags.mCount);
-}
bool SceneflagManager::checkUncommittedTempOrSceneflag(u16 flag) {
- if (flag >= 0x80) {
- u16 *pData;
- u16 tempflag = flag - 0x80;
+ u16 *pData;
+ if (flag >= TEMPFLAG_OFFSET) {
+ u16 tempflag = flag - TEMPFLAG_OFFSET;
pData = mTempflags.getFlagPtrUnchecked();
u16 slot = getTempflagSlot(tempflag);
return mFlagHelper.checkFlag(slot, tempflag % 16, pData, mTempflags.mCount);
} else {
- return checkSceneflagHelper(flag);
+ pData = mSceneflags.getFlagPtrUnchecked();
+ return mFlagHelper.checkFlag(getSceneflagSlot(flag), flag % 16, pData, mSceneflags.mCount);
}
}
-u16 SceneflagManager::checkFlag(u16 roomId, u16 flag) {
+u16 SceneflagManager::checkFlag(u16 roomId, u16 flag) const {
if (isZoneFlag(flag)) {
return checkZoneFlag(roomId, flag);
} else {
return checkTempOrSceneflag(flag);
}
}
-u16 SceneflagManager::checkSceneflagGlobal(u16 sceneIdx, u16 flag) {
+u16 SceneflagManager::checkSceneflagGlobal(u16 sceneIdx, u16 flag) const {
u16 *pData = FileManager::GetInstance()->getSceneFlagsConst();
return mFlagHelper.checkFlag(getSceneflagSlotGlobal(sceneIdx, flag), flag % 16, pData, 0x800);
}
-u16 SceneflagManager::checkTempOrSceneflag(u16 flag) {
- if (flag >= 0x80) {
- u16 tempflag = flag - 0x80;
+u16 SceneflagManager::checkTempOrSceneflag(u16 flag) const {
+ if (flag >= TEMPFLAG_OFFSET) {
+ u16 tempflag = flag - TEMPFLAG_OFFSET;
const u16 *pData = FileManager::GetInstance()->getTempFlagsConst();
u16 slot = getTempflagSlot(tempflag);
return mFlagHelper.checkFlag(slot, tempflag % 16, pData, 4);
@@ -162,7 +149,7 @@ u16 SceneflagManager::checkUncommittedFlag(u16 roomId, u16 flag) {
void SceneflagManager::setZoneflag(u16 roomId, u16 flag) {
if (checkUncommittedZoneflag2(roomId, flag) != 1 && flag != 0xFF) {
u16 *pData;
- u16 zoneflag = flag - 0xC0;
+ u16 zoneflag = flag - ZONEFLAG_OFFSET;
pData = mZoneflags.getFlagPtrChecked();
u16 slot = getZoneflagSlot(roomId, zoneflag);
mFlagHelper.setFlag(slot, zoneflag % 16, pData, mZoneflags.mCount);
@@ -191,8 +178,8 @@ void SceneflagManager::setSceneflagGlobal(u16 sceneIdx, u16 flag) {
void SceneflagManager::setTempOrSceneflag(u16 flag) {
if (checkUncommittedTempOrSceneflag2(flag) != 1) {
u16 *pData;
- if (flag >= 0x80) {
- u16 tempflag = flag - 0x80;
+ if (flag >= TEMPFLAG_OFFSET) {
+ u16 tempflag = flag - TEMPFLAG_OFFSET;
pData = mTempflags.getFlagPtrChecked();
mFlagHelper.setFlag(getTempflagSlot(tempflag), tempflag % 16, pData, mTempflags.mCount);
} else {
@@ -205,7 +192,7 @@ void SceneflagManager::setTempOrSceneflag(u16 flag) {
void SceneflagManager::unsetZoneflag(u16 roomId, u16 flag) {
if (checkUncommittedZoneflag2(roomId, flag) != 0 && flag != 0xFF) {
u16 *pData;
- u16 zoneflag = flag - 0xC0;
+ u16 zoneflag = flag - ZONEFLAG_OFFSET;
pData = mZoneflags.getFlagPtrChecked();
u16 slot = getZoneflagSlot(roomId, zoneflag);
mFlagHelper.unsetFlag(slot, zoneflag % 16, pData, mZoneflags.mCount);
@@ -234,8 +221,8 @@ void SceneflagManager::unsetSceneflagGlobal(u16 sceneIdx, u16 flag) {
void SceneflagManager::unsetTempOrSceneflag(u16 flag) {
if (checkUncommittedTempOrSceneflag2(flag) != 0) {
u16 *pData;
- if (flag >= 0x80) {
- u16 tempflag = flag - 0x80;
+ if (flag >= TEMPFLAG_OFFSET) {
+ u16 tempflag = flag - TEMPFLAG_OFFSET;
pData = mTempflags.getFlagPtrChecked();
mFlagHelper.unsetFlag(getTempflagSlot(tempflag), tempflag % 16, pData, mTempflags.mCount);
} else {