diff --git a/Sources/Plasma/PubUtilLib/plResMgr/plRegistryKeyList.cpp b/Sources/Plasma/PubUtilLib/plResMgr/plRegistryKeyList.cpp index 0367ebed..d80f89d1 100644 --- a/Sources/Plasma/PubUtilLib/plResMgr/plRegistryKeyList.cpp +++ b/Sources/Plasma/PubUtilLib/plResMgr/plRegistryKeyList.cpp @@ -164,26 +164,27 @@ bool plRegistryKeyList::SetKeyUnused(plKeyImp* key, LoadStatus& loadStatusChange } uint32_t id = key->GetUoid().GetObjectID(); - hsAssert(id <= fKeys.size(), "Bad static key id"); + plKeyImp* foundKey = nullptr; - // Fixed Keys will have id == 0. Let's just make sure we have it before we toss it. + // Fixed Keys use ID == 0 if (id == 0) - { hsAssert(key->GetUoid().GetLocation() == plLocation::kGlobalFixedLoc, "key id == 0 but not fixed?"); - if (!FindKey(key->GetName())) - { - hsAssert(false, "Couldn't find fixed key!"); - return false; - } + else if (id < fKeys.size()) { + if (fKeys[id]->GetUoid().GetObjectID() == id) + foundKey = fKeys[id]; } - else if (id > fKeys.size()) - return false; + + // Last chance: do a slow name search for that key. + if (!foundKey) + foundKey = FindKey(key->GetUoid().GetObjectName()); // Got that key, decrement the key counter - --fReffedKeys; - if (fReffedKeys == 0) - loadStatusChange = kTypeUnloaded; - return true; + if (foundKey) { + --fReffedKeys; + if (fReffedKeys == 0) + loadStatusChange = kTypeUnloaded; + } + return foundKey != nullptr; } void plRegistryKeyList::Read(hsStream* s) diff --git a/Sources/Plasma/PubUtilLib/plResMgr/plResManager.cpp b/Sources/Plasma/PubUtilLib/plResMgr/plResManager.cpp index 6d170b16..c723af06 100644 --- a/Sources/Plasma/PubUtilLib/plResMgr/plResManager.cpp +++ b/Sources/Plasma/PubUtilLib/plResMgr/plResManager.cpp @@ -1665,16 +1665,13 @@ void plResManager::IKeyReffed(plKeyImp* key) void plResManager::IKeyUnreffed(plKeyImp* key) { plRegistryPageNode* page = FindPage(key->GetUoid().GetLocation()); - if (page == nil) + if (!page) { hsAssert(0, "Couldn't find page that key belongs to"); return; } - bool removed = page->SetKeyUnused(key); - hsAssert(removed, "Key wasn't removed from page"); - - if (removed) + if (page->SetKeyUnused(key)) { if (!page->IsLoaded()) {