diff --git a/components/esm4/loadachr.cpp b/components/esm4/loadachr.cpp index d947b7c4d8..5c7e57a618 100644 --- a/components/esm4/loadachr.cpp +++ b/components/esm4/loadachr.cpp @@ -60,7 +60,7 @@ void ESM4::ActorCharacter::load(ESM4::Reader& reader) reader.get(mScale); break; case ESM4::SUB_XOWN: - reader.get(mOwner); + reader.getFormId(mOwner); break; case ESM4::SUB_XESP: { diff --git a/components/esm4/loadacre.cpp b/components/esm4/loadacre.cpp index e152376757..1f8a369e8d 100644 --- a/components/esm4/loadacre.cpp +++ b/components/esm4/loadacre.cpp @@ -65,8 +65,8 @@ void ESM4::ActorCreature::load(ESM4::Reader& reader) reader.getFormId(mOwner); break; case ESM4::SUB_XGLB: - reader.get(mGlobal); - break; // FIXME: formId? + reader.getFormId(mGlobal); + break; case ESM4::SUB_XRNK: reader.get(mFactionRank); break; diff --git a/components/esm4/loadcrea.cpp b/components/esm4/loadcrea.cpp index 86bf3d2f78..953b1e9a6c 100644 --- a/components/esm4/loadcrea.cpp +++ b/components/esm4/loadcrea.cpp @@ -177,12 +177,12 @@ void ESM4::Creature::load(ESM4::Reader& reader) break; } case ESM4::SUB_TPLT: - reader.get(mBaseTemplate); + reader.getFormId(mBaseTemplate); break; // FO3 case ESM4::SUB_PNAM: // FO3/FONV/TES5 { FormId bodyPart; - reader.get(bodyPart); + reader.getFormId(bodyPart); mBodyParts.push_back(bodyPart); break; diff --git a/components/esm4/loadidle.cpp b/components/esm4/loadidle.cpp index 1b12b220d0..0536c578ac 100644 --- a/components/esm4/loadidle.cpp +++ b/components/esm4/loadidle.cpp @@ -53,8 +53,8 @@ void ESM4::IdleAnimation::load(ESM4::Reader& reader) break; case ESM4::SUB_ANAM: { - reader.get(mParent); - reader.get(mPrevious); + reader.getFormId(mParent); + reader.getFormId(mPrevious); break; } case ESM4::SUB_CTDA: // formId diff --git a/components/esm4/loadidlm.cpp b/components/esm4/loadidlm.cpp index 571c9c8a85..d76776329d 100644 --- a/components/esm4/loadidlm.cpp +++ b/components/esm4/loadidlm.cpp @@ -75,8 +75,8 @@ void ESM4::IdleMarker::load(ESM4::Reader& reader) } mIdleAnim.resize(mIdleCount); - for (unsigned int i = 0; i < static_cast(mIdleCount); ++i) - reader.get(mIdleAnim.at(i)); + for (FormId& value : mIdleAnim) + reader.getFormId(value); break; } case ESM4::SUB_OBND: // object bounds diff --git a/components/esm4/loadmstt.cpp b/components/esm4/loadmstt.cpp index 73782f70d8..110c1cc718 100644 --- a/components/esm4/loadmstt.cpp +++ b/components/esm4/loadmstt.cpp @@ -53,7 +53,7 @@ void ESM4::MovableStatic::load(ESM4::Reader& reader) reader.get(mData); break; case ESM4::SUB_SNAM: - reader.get(mLoopingSound); + reader.getFormId(mLoopingSound); break; case ESM4::SUB_DEST: // destruction data case ESM4::SUB_OBND: // object bounds diff --git a/components/esm4/loadnavi.cpp b/components/esm4/loadnavi.cpp index 3a0d630abe..95e6a730c8 100644 --- a/components/esm4/loadnavi.cpp +++ b/components/esm4/loadnavi.cpp @@ -80,7 +80,7 @@ void ESM4::Navigation::NavMeshInfo::load(ESM4::Reader& reader) { std::uint32_t count; - reader.get(formId); + reader.getFormId(formId); reader.get(flags); reader.get(x); reader.get(y); @@ -107,10 +107,8 @@ void ESM4::Navigation::NavMeshInfo::load(ESM4::Reader& reader) { // std::cout << "NVMI countMerged " << std::dec << count << std::endl; formIdMerged.resize(count); - for (std::vector::iterator it = formIdMerged.begin(); it != formIdMerged.end(); ++it) - { - reader.get(*it); - } + for (FormId& value : formIdMerged) + reader.getFormId(value); } reader.get(count); // countPrefMerged; @@ -118,10 +116,8 @@ void ESM4::Navigation::NavMeshInfo::load(ESM4::Reader& reader) { // std::cout << "NVMI countPrefMerged " << std::dec << count << std::endl; formIdPrefMerged.resize(count); - for (std::vector::iterator it = formIdPrefMerged.begin(); it != formIdPrefMerged.end(); ++it) - { - reader.get(*it); - } + for (FormId& value : formIdPrefMerged) + reader.getFormId(value); } reader.get(count); // countLinkedDoors; @@ -148,7 +144,7 @@ void ESM4::Navigation::NavMeshInfo::load(ESM4::Reader& reader) reader.get(locationMarker); - reader.get(worldSpaceId); + reader.getFormId(worldSpaceId); // FLG_Tamriel = 0x0000003c, // grid info follows, possibly Tamriel? // FLG_Morrowind = 0x01380000, // grid info follows, probably Skywind if (worldSpaceId == FormId{ 0x3c, 0 } || worldSpaceId == FormId{ 0x380000, 1 }) @@ -170,7 +166,7 @@ void ESM4::Navigation::NavMeshInfo::load(ESM4::Reader& reader) else { FormId cellId; - reader.get(cellId); + reader.getFormId(cellId); cellGrid = cellId; #if 0 @@ -279,14 +275,11 @@ void ESM4::Navigation::load(ESM4::Reader& reader) reader.get(node); reader.get(count); } - if (count) + if (count > 0) { preferredPaths.resize(count); - for (std::vector::iterator it = preferredPaths.begin(); it != preferredPaths.end(); - ++it) - { - reader.get(*it); - } + for (FormId& value : preferredPaths) + reader.getFormId(value); } mPreferredPaths.push_back(std::make_pair(node, preferredPaths)); #if 0 diff --git a/components/esm4/loadnavm.cpp b/components/esm4/loadnavm.cpp index 0c9b0f5dc6..2cbd45a588 100644 --- a/components/esm4/loadnavm.cpp +++ b/components/esm4/loadnavm.cpp @@ -44,7 +44,7 @@ void ESM4::NavMesh::NVNMstruct::load(ESM4::Reader& reader) reader.get(unknownNVER); reader.get(unknownLCTN); - reader.get(worldSpaceId); + reader.getFormId(worldSpaceId); // FLG_Tamriel = 0x0000003c, // grid info follows, possibly Tamriel? // FLG_Morrowind = 0x01380000, // grid info follows, probably Skywind if (worldSpaceId == FormId{ 0x3c, 0 } || worldSpaceId == FormId{ 380000, 1 }) @@ -82,7 +82,7 @@ void ESM4::NavMesh::NVNMstruct::load(ESM4::Reader& reader) else { FormId cellId; - reader.get(cellId); + reader.getFormId(cellId); cellGrid = cellId; #if 0 diff --git a/components/esm4/loadnpc.cpp b/components/esm4/loadnpc.cpp index c6428177c9..5ad8bf320a 100644 --- a/components/esm4/loadnpc.cpp +++ b/components/esm4/loadnpc.cpp @@ -161,7 +161,7 @@ void ESM4::Npc::load(ESM4::Reader& reader) case ESM4::SUB_WNAM: { if (reader.esmVersion() == ESM::VER_094 || reader.esmVersion() == ESM::VER_170) - reader.get(mWornArmor); + reader.getFormId(mWornArmor); else reader.get(mFootWeight); break; @@ -192,7 +192,7 @@ void ESM4::Npc::load(ESM4::Reader& reader) break; } case ESM4::SUB_TPLT: - reader.get(mBaseTemplate); + reader.getFormId(mBaseTemplate); break; case ESM4::SUB_FGGS: { diff --git a/components/esm4/reader.hpp b/components/esm4/reader.hpp index c24319be0d..86a52115e4 100644 --- a/components/esm4/reader.hpp +++ b/components/esm4/reader.hpp @@ -226,6 +226,9 @@ namespace ESM4 mStream->read((char*)&t, sizeof(T)); } + // Use getFormId instead + void get(FormId& value) = delete; + template bool getExact(T& t) {