diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f977ad692..b42b6471a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -42,6 +42,7 @@ Bug #7122: Teleportation to underwater should cancel active water walking effect Bug #7163: Myar Aranath: Wheat breaks the GUI Bug #7172: Current music playlist continues playing indefinitely if next playlist is empty + Bug #7243: Get Skyrim.esm loading Feature #5492: Let rain and snow collide with statics Feature #6447: Add LOD support to Object Paging Feature #6726: Lua API for creating new objects diff --git a/apps/openmw/mwworld/esmloader.cpp b/apps/openmw/mwworld/esmloader.cpp index 0d55847a19..7cb2925232 100644 --- a/apps/openmw/mwworld/esmloader.cpp +++ b/apps/openmw/mwworld/esmloader.cpp @@ -9,6 +9,9 @@ #include #include #include +#include + +#include "../mwbase/environment.hpp" namespace MWWorld { @@ -60,7 +63,8 @@ namespace MWWorld } case ESM::Format::Tes4: { - ESM4::Reader readerESM4(std::move(stream), filepath); + ESM4::Reader readerESM4( + std::move(stream), filepath, MWBase::Environment::get().getResourceSystem()->getVFS()); auto statelessEncoder = mEncoder->getStatelessEncoder(); readerESM4.setEncoder(&statelessEncoder); mStore.loadESM4(readerESM4); diff --git a/components/esm4/reader.cpp b/components/esm4/reader.cpp index b032fabe5f..2ad655784e 100644 --- a/components/esm4/reader.cpp +++ b/components/esm4/reader.cpp @@ -74,8 +74,9 @@ namespace ESM4 subRecordHeader.dataSize = 0; } - Reader::Reader(Files::IStreamPtr&& esmStream, const std::filesystem::path& filename) - : mEncoder(nullptr) + Reader::Reader(Files::IStreamPtr&& esmStream, const std::filesystem::path& filename, VFS::Manager const* vfs) + : mVFS(vfs) + , mEncoder(nullptr) , mFileSize(0) , mStream(std::move(esmStream)) { @@ -224,7 +225,8 @@ namespace ESM4 sp.type = stringType; // TODO: possibly check if the resource exists? - Files::IStreamPtr filestream = Files::openConstrainedFileStream(stringFile); + Files::IStreamPtr filestream + = mVFS ? mVFS->get(stringFile.string()) : Files::openConstrainedFileStream(stringFile); filestream->seekg(0, std::ios::end); std::size_t fileSize = filestream->tellg(); diff --git a/components/esm4/reader.hpp b/components/esm4/reader.hpp index f9ceddfeea..0b792dcf28 100644 --- a/components/esm4/reader.hpp +++ b/components/esm4/reader.hpp @@ -33,6 +33,7 @@ #include "loadtes4.hpp" #include +#include namespace ToUTF8 { @@ -83,6 +84,7 @@ namespace ESM4 class Reader { + VFS::Manager const* mVFS; Header mHeader; // ESM4 header ReaderContext mCtx; @@ -138,7 +140,7 @@ namespace ESM4 const ToUTF8::StatelessUtf8Encoder* encoder, bool hasNull = false); public: - Reader(Files::IStreamPtr&& esmStream, const std::filesystem::path& filename); + Reader(Files::IStreamPtr&& esmStream, const std::filesystem::path& filename, VFS::Manager const* vfs = nullptr); ~Reader(); void open(const std::filesystem::path& filename);