Merge pull request #138 from Pistonight/pmdm_autoequip

match PMDM autoEquip and unequipAll
This commit is contained in:
Michael Zhao 2025-05-02 20:29:16 -07:00 committed by GitHub
commit 5bb38fb36b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 30 additions and 22 deletions

View File

@ -56389,8 +56389,8 @@ Address,Quality,Size,Name
0x0000007100970060,O,000248,_ZN5uking2ui16PauseMenuDataMgr11cookItemGetERKNS_8CookItemE
0x0000007100970158,O,000268,_ZN5uking2ui16PauseMenuDataMgr26setCookDataOnLastAddedItemERKNS_8CookItemE
0x0000007100970264,O,000116,_ZN5uking2ui16PauseMenuDataMgr22autoEquipLastAddedItemEv
0x00000071009702d8,m,000268,_ZN5uking2ui16PauseMenuDataMgr9autoEquipEPNS0_9PouchItemERKN4sead10OffsetListIS2_EE
0x00000071009703e4,m,000216,_ZN5uking2ui16PauseMenuDataMgr10unequipAllENS0_13PouchItemTypeE
0x00000071009702d8,O,000268,_ZN5uking2ui16PauseMenuDataMgr9autoEquipEPNS0_9PouchItemERKN4sead10OffsetListIS2_EE
0x00000071009703e4,O,000216,_ZN5uking2ui16PauseMenuDataMgr10unequipAllENS0_13PouchItemTypeE
0x00000071009704bc,O,001352,_ZN5uking2ui16PauseMenuDataMgr10removeItemERKN4sead14SafeStringBaseIcEE
0x0000007100970a04,O,000896,_ZN5uking2ui16PauseMenuDataMgr22removeWeaponIfEquippedERKN4sead14SafeStringBaseIcEE
0x0000007100970d84,O,000512,_ZN5uking2ui16PauseMenuDataMgr11removeArrowERKN4sead14SafeStringBaseIcEEi

Can't render this file because it is too large.

View File

@ -1054,7 +1054,6 @@ void PauseMenuDataMgr::autoEquipLastAddedItem() {
}
}
// NON_MATCHING: branching
const sead::SafeString& PauseMenuDataMgr::autoEquip(PouchItem* item,
const sead::OffsetList<PouchItem>& list) {
const auto type = item->getType();
@ -1064,20 +1063,30 @@ const sead::SafeString& PauseMenuDataMgr::autoEquip(PouchItem* item,
if (type >= PouchItemType::Material)
return sead::SafeString::cEmptyString;
if (isPouchItemArmor(type)) {
for (auto& other : list) {
if (other.getType() > PouchItemType::ArmorLower)
break;
if (other.getType() == type)
other.mEquipped = false;
}
} else if (isPouchItemWeapon(type)) {
switch (type) {
case PouchItemType::Sword:
case PouchItemType::Bow:
case PouchItemType::Shield:
case PouchItemType::Arrow:
for (auto& other : list) {
if (other.getType() > PouchItemType::Shield)
break;
if (other.getType() == type)
other.mEquipped = false;
}
break;
case PouchItemType::ArmorHead:
case PouchItemType::ArmorUpper:
case PouchItemType::ArmorLower:
for (auto& other : list) {
if (other.getType() > PouchItemType::ArmorLower)
break;
if (other.getType() == type)
other.mEquipped = false;
}
break;
default:
break;
}
item->mEquipped = true;
@ -1086,7 +1095,6 @@ const sead::SafeString& PauseMenuDataMgr::autoEquip(PouchItem* item,
return sead::SafeString::cEmptyString;
}
// NON_MATCHING: harmless reordering
void PauseMenuDataMgr::unequipAll(PouchItemType type) {
const auto lock = sead::makeScopedLock(mCritSection);
@ -1094,19 +1102,18 @@ void PauseMenuDataMgr::unequipAll(PouchItemType type) {
return;
for (auto& item : getItems()) {
if (type == PouchItemType::Invalid) {
if (item.getType() > PouchItemType::ArmorLower)
break;
if (item.isEquipped() && item.getType() != PouchItemType::Arrow)
item.mEquipped = false;
if (item.getType() > PouchItemType::ArmorLower)
break;
if (!item.isEquipped())
continue;
} else {
if (item.getType() > PouchItemType::ArmorLower)
break;
if (item.isEquipped() && item.getType() == type) {
if (type == PouchItemType::Invalid) {
if (item.getType() != PouchItemType::Arrow) {
item.mEquipped = false;
break;
}
} else if (item.getType() == type) {
item.mEquipped = false;
break;
}
}
}
@ -2207,6 +2214,7 @@ const sead::SafeString* PauseMenuDataMgr::getEquippedItemName(PouchItemType type
if (item->isEquipped() && item->getType() == type)
return &item->getName();
}
return nullptr;
}