diff options
| author | robojumper <robojumper@gmail.com> | 2025-05-10 22:11:12 +0200 |
|---|---|---|
| committer | robojumper <robojumper@gmail.com> | 2025-05-10 22:20:19 +0200 |
| commit | aa35c8c9707ee78913847fb2faf3cf89b5f99557 (patch) | |
| tree | abcdba805d104c324854ee425b53b615e2e03c9c /src/d/flag | |
| parent | 4c5dede891ea0934d77bfcee8f50f9702c949031 (diff) | |
Clean up flag handling
Diffstat (limited to 'src/d/flag')
| -rw-r--r-- | src/d/flag/baseflag_manager.inc | 4 | ||||
| -rw-r--r-- | src/d/flag/bitwise_flag_helper.inc | 2 | ||||
| -rw-r--r-- | src/d/flag/sceneflag_manager.inc | 65 |
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 { |
