diff --git a/components/esm4/loadnavm.cpp b/components/esm4/loadnavm.cpp index 46d67f094d..bd982f4279 100644 --- a/components/esm4/loadnavm.cpp +++ b/components/esm4/loadnavm.cpp @@ -207,14 +207,25 @@ void ESM4::NavMesh::load(ESM4::Reader& reader) #endif while (reader.getSubRecordHeader()) { - switch (reader.subRecordHeader().typeId) + const ESM4::SubRecordHeader& subHdr = reader.subRecordHeader(); + switch (subHdr.typeId) { case ESM4::SUB_NVNM: { - // FIXME: FO4 appears to have a different format if (esmVer == 0x3F800000) { - reader.skipSubRecordData(); + // TODO: check if any valid TES5 plugin prepends XXXX to NVNM + if (subSize) + { + reader.skipSubRecordData(subSize); + reader.updateRecordRead(subSize); + subSize = 0; + } + else + { + // FIXME: FO4 appears to have a different format + reader.skipSubRecordData(); + } break; } @@ -235,7 +246,6 @@ void ESM4::NavMesh::load(ESM4::Reader& reader) } else { - const ESM4::SubRecordHeader& subHdr = reader.subRecordHeader(); Log(Debug::Verbose) << ESM::printName(subHdr.typeId) << " skipping..."; reader.skipSubRecordData(); // FIXME: process the subrecord rather than skip } @@ -257,8 +267,7 @@ void ESM4::NavMesh::load(ESM4::Reader& reader) reader.skipSubRecordData(); break; default: - throw std::runtime_error( - "ESM4::NAVM::load - Unknown subrecord " + ESM::printName(reader.subRecordHeader().typeId)); + throw std::runtime_error("ESM4::NAVM::load - Unknown subrecord " + ESM::printName(subHdr.typeId)); } } // std::cout << "num nvnm " << std::dec << mData.size() << std::endl; // FIXME