diff --git a/apps/opencs/model/doc/savingstages.cpp b/apps/opencs/model/doc/savingstages.cpp index 27b31251e5..8c17a3b8c1 100644 --- a/apps/opencs/model/doc/savingstages.cpp +++ b/apps/opencs/model/doc/savingstages.cpp @@ -342,8 +342,12 @@ void CSMDoc::WriteCellCollectionStage::perform (int stage, Messages& messages) CSMWorld::CellRef refRecord = ref.get(); + CSMWorld::RefIdData::LocalIndex localIndex = refIdData.searchId(refRecord.mRefID); unsigned int recordFlags = refIdData.getRecordFlags(refRecord.mRefID); - bool isPersistent = ((recordFlags & 0x00000400) != 0) || refRecord.mTeleport; + bool isPersistent = ((recordFlags & ESM::FLAG_Persistent) != 0) + || refRecord.mTeleport + || localIndex.second == CSMWorld::UniversalId::Type_Creature + || localIndex.second == CSMWorld::UniversalId::Type_Npc; if (isPersistent) persistentRefs.push_back(*iter); diff --git a/apps/opencs/model/world/refidadapterimp.hpp b/apps/opencs/model/world/refidadapterimp.hpp index 210deca69b..1d1b5a94a6 100644 --- a/apps/opencs/model/world/refidadapterimp.hpp +++ b/apps/opencs/model/world/refidadapterimp.hpp @@ -153,7 +153,7 @@ namespace CSMWorld return QString::fromUtf8 (record.get().mModel.c_str()); if (column==mModel.mPersistence) - return (record.get().mRecordFlags & 0x00000400) != 0; + return (record.get().mRecordFlags & ESM::FLAG_Persistent) != 0; return BaseRefIdAdapter::getData (column, data, index); } @@ -171,9 +171,9 @@ namespace CSMWorld else if (column==mModel.mPersistence) { if (value.toInt() != 0) - record2.mRecordFlags |= 0x00000400; + record2.mRecordFlags |= ESM::FLAG_Persistent; else - record2.mRecordFlags &= ~0x00000400; + record2.mRecordFlags &= ~ESM::FLAG_Persistent; } else { diff --git a/apps/openmw/mwclass/creature.cpp b/apps/openmw/mwclass/creature.cpp index 0a40139d36..141bf99e92 100644 --- a/apps/openmw/mwclass/creature.cpp +++ b/apps/openmw/mwclass/creature.cpp @@ -588,7 +588,7 @@ namespace MWClass bool Creature::isPersistent(const MWWorld::ConstPtr &actor) const { const MWWorld::LiveCellRef* ref = actor.get(); - return (ref->mBase->mRecordFlags & 0x0400) != 0; + return (ref->mBase->mRecordFlags & ESM::FLAG_Persistent) != 0; } std::string Creature::getSoundIdFromSndGen(const MWWorld::Ptr &ptr, const std::string &name) const diff --git a/apps/openmw/mwclass/npc.cpp b/apps/openmw/mwclass/npc.cpp index 1951f964bc..6131f86269 100644 --- a/apps/openmw/mwclass/npc.cpp +++ b/apps/openmw/mwclass/npc.cpp @@ -403,7 +403,7 @@ namespace MWClass bool Npc::isPersistent(const MWWorld::ConstPtr &actor) const { const MWWorld::LiveCellRef* ref = actor.get(); - return (ref->mBase->mRecordFlags & 0x0400) != 0; + return (ref->mBase->mRecordFlags & ESM::FLAG_Persistent) != 0; } std::string Npc::getModel(const MWWorld::ConstPtr &ptr) const diff --git a/components/esm/esmcommon.hpp b/components/esm/esmcommon.hpp index 749e9a85d6..10e05de905 100644 --- a/components/esm/esmcommon.hpp +++ b/components/esm/esmcommon.hpp @@ -16,6 +16,11 @@ enum Version VER_13 = 0x3fa66666 }; +enum RecordFlag + { + FLAG_Persistent = 0x00000400, + FLAG_Blocked = 0x00002000 + }; // CRTP for FIXED_STRING class, a structure used for holding fixed-length strings template< template class DERIVED, size_t SIZE> diff --git a/components/esm/loadstat.cpp b/components/esm/loadstat.cpp index 0c97662d7e..543e76bc85 100644 --- a/components/esm/loadstat.cpp +++ b/components/esm/loadstat.cpp @@ -12,8 +12,8 @@ namespace ESM { isDeleted = false; mRecordFlags = esm.getRecordFlags(); - //bool isBlocked = (mRecordFlags & 0x00002000) != 0; - //bool isPersistent = (mRecordFlags & 0x00000400) != 0; + //bool isBlocked = (mRecordFlags & ESM::FLAG_Blocked) != 0; + //bool isPersistent = (mRecordFlags & ESM::FLAG_Persistent) != 0; bool hasName = false; while (esm.hasMoreSubs())