diff --git a/src/openrct2/object/ImageTable.cpp b/src/openrct2/object/ImageTable.cpp index bb88e97469..209d0de855 100644 --- a/src/openrct2/object/ImageTable.cpp +++ b/src/openrct2/object/ImageTable.cpp @@ -223,7 +223,8 @@ std::vector> ImageTable::LoadObjectIm { std::vector> result; auto objectPath = FindLegacyObject(name); - auto obj = ObjectFactory::CreateObjectFromLegacyFile(context->GetObjectRepository(), objectPath.c_str()); + auto obj = ObjectFactory::CreateObjectFromLegacyFile( + context->GetObjectRepository(), objectPath.c_str(), !gOpenRCT2NoGraphics); if (obj != nullptr) { auto& imgTable = static_cast(obj.get())->GetImageTable(); diff --git a/src/openrct2/object/ObjectFactory.cpp b/src/openrct2/object/ObjectFactory.cpp index eb69fbc847..e2d0ba61e1 100644 --- a/src/openrct2/object/ObjectFactory.cpp +++ b/src/openrct2/object/ObjectFactory.cpp @@ -206,7 +206,7 @@ namespace ObjectFactory * @note jRoot is deliberately left non-const: json_t behaviour changes when const */ static std::unique_ptr CreateObjectFromJson( - IObjectRepository& objectRepository, json_t& jRoot, const IFileDataRetriever* fileRetriever); + IObjectRepository& objectRepository, json_t& jRoot, const IFileDataRetriever* fileRetriever, bool loadImageTable); static ObjectSourceGame ParseSourceGame(const std::string& s) { @@ -241,7 +241,7 @@ namespace ObjectFactory } } - std::unique_ptr CreateObjectFromLegacyFile(IObjectRepository& objectRepository, const utf8* path) + std::unique_ptr CreateObjectFromLegacyFile(IObjectRepository& objectRepository, const utf8* path, bool loadImages) { log_verbose("CreateObjectFromLegacyFile(..., \"%s\")", path); @@ -266,7 +266,7 @@ namespace ObjectFactory log_verbose(" size: %zu", chunk->GetLength()); auto chunkStream = OpenRCT2::MemoryStream(chunk->GetData(), chunk->GetLength()); - auto readContext = ReadObjectContext(objectRepository, objectName, !gOpenRCT2NoGraphics, nullptr); + auto readContext = ReadObjectContext(objectRepository, objectName, loadImages, nullptr); ReadObjectLegacy(*result, &readContext, &chunkStream); if (readContext.WasError()) { @@ -408,7 +408,7 @@ namespace ObjectFactory return ObjectType::None; } - std::unique_ptr CreateObjectFromZipFile(IObjectRepository& objectRepository, std::string_view path) + std::unique_ptr CreateObjectFromZipFile(IObjectRepository& objectRepository, std::string_view path, bool loadImages) { try { @@ -424,7 +424,7 @@ namespace ObjectFactory if (jRoot.is_object()) { auto fileDataRetriever = ZipDataRetriever(path, *archive); - return CreateObjectFromJson(objectRepository, jRoot, &fileDataRetriever); + return CreateObjectFromJson(objectRepository, jRoot, &fileDataRetriever, loadImages); } } catch (const std::exception& e) @@ -434,7 +434,8 @@ namespace ObjectFactory return nullptr; } - std::unique_ptr CreateObjectFromJsonFile(IObjectRepository& objectRepository, const std::string& path) + std::unique_ptr CreateObjectFromJsonFile( + IObjectRepository& objectRepository, const std::string& path, bool loadImages) { log_verbose("CreateObjectFromJsonFile(\"%s\")", path.c_str()); @@ -442,7 +443,7 @@ namespace ObjectFactory { json_t jRoot = Json::ReadFromFile(path.c_str()); auto fileDataRetriever = FileSystemDataRetriever(Path::GetDirectory(path)); - return CreateObjectFromJson(objectRepository, jRoot, &fileDataRetriever); + return CreateObjectFromJson(objectRepository, jRoot, &fileDataRetriever, loadImages); } catch (const std::runtime_error& err) { @@ -485,7 +486,7 @@ namespace ObjectFactory } std::unique_ptr CreateObjectFromJson( - IObjectRepository& objectRepository, json_t& jRoot, const IFileDataRetriever* fileRetriever) + IObjectRepository& objectRepository, json_t& jRoot, const IFileDataRetriever* fileRetriever, bool loadImageTable) { Guard::Assert(jRoot.is_object(), "ObjectFactory::CreateObjectFromJson expects parameter jRoot to be object"); @@ -521,7 +522,7 @@ namespace ObjectFactory result->SetIdentifier(id); result->SetDescriptor(descriptor); result->MarkAsJsonObject(); - auto readContext = ReadObjectContext(objectRepository, id, !gOpenRCT2NoGraphics, fileRetriever); + auto readContext = ReadObjectContext(objectRepository, id, loadImageTable, fileRetriever); result->ReadJson(&readContext, jRoot); if (readContext.WasError()) { diff --git a/src/openrct2/object/ObjectFactory.h b/src/openrct2/object/ObjectFactory.h index 6aef398f28..dc758ee160 100644 --- a/src/openrct2/object/ObjectFactory.h +++ b/src/openrct2/object/ObjectFactory.h @@ -21,12 +21,14 @@ enum class ObjectType : uint8_t; namespace ObjectFactory { - [[nodiscard]] std::unique_ptr CreateObjectFromLegacyFile(IObjectRepository& objectRepository, const utf8* path); + [[nodiscard]] std::unique_ptr CreateObjectFromLegacyFile( + IObjectRepository& objectRepository, const utf8* path, bool loadImages); [[nodiscard]] std::unique_ptr CreateObjectFromLegacyData( IObjectRepository& objectRepository, const rct_object_entry* entry, const void* data, size_t dataSize); - [[nodiscard]] std::unique_ptr CreateObjectFromZipFile(IObjectRepository& objectRepository, std::string_view path); + [[nodiscard]] std::unique_ptr CreateObjectFromZipFile( + IObjectRepository& objectRepository, std::string_view path, bool loadImages); [[nodiscard]] std::unique_ptr CreateObject(ObjectType type); [[nodiscard]] std::unique_ptr CreateObjectFromJsonFile( - IObjectRepository& objectRepository, const std::string& path); + IObjectRepository& objectRepository, const std::string& path, bool loadImages); } // namespace ObjectFactory diff --git a/src/openrct2/object/ObjectRepository.cpp b/src/openrct2/object/ObjectRepository.cpp index 3b1f19f378..50df317bdc 100644 --- a/src/openrct2/object/ObjectRepository.cpp +++ b/src/openrct2/object/ObjectRepository.cpp @@ -10,6 +10,7 @@ #include "ObjectRepository.h" #include "../Context.h" +#include "../OpenRCT2.h" #include "../PlatformEnvironment.h" #include "../common.h" #include "../config/Config.h" @@ -102,15 +103,15 @@ public: auto extension = Path::GetExtension(path); if (String::Equals(extension, ".json", true)) { - object = ObjectFactory::CreateObjectFromJsonFile(_objectRepository, path); + object = ObjectFactory::CreateObjectFromJsonFile(_objectRepository, path, false); } else if (String::Equals(extension, ".parkobj", true)) { - object = ObjectFactory::CreateObjectFromZipFile(_objectRepository, path); + object = ObjectFactory::CreateObjectFromZipFile(_objectRepository, path, false); } else { - object = ObjectFactory::CreateObjectFromLegacyFile(_objectRepository, path.c_str()); + object = ObjectFactory::CreateObjectFromLegacyFile(_objectRepository, path.c_str(), false); } if (object != nullptr) { @@ -263,14 +264,14 @@ public: auto extension = Path::GetExtension(ori->Path); if (String::Equals(extension, ".json", true)) { - return ObjectFactory::CreateObjectFromJsonFile(*this, ori->Path); + return ObjectFactory::CreateObjectFromJsonFile(*this, ori->Path, !gOpenRCT2NoGraphics); } if (String::Equals(extension, ".parkobj", true)) { - return ObjectFactory::CreateObjectFromZipFile(*this, ori->Path); + return ObjectFactory::CreateObjectFromZipFile(*this, ori->Path, !gOpenRCT2NoGraphics); } - return ObjectFactory::CreateObjectFromLegacyFile(*this, ori->Path.c_str()); + return ObjectFactory::CreateObjectFromLegacyFile(*this, ori->Path.c_str(), !gOpenRCT2NoGraphics); } void RegisterLoadedObject(const ObjectRepositoryItem* ori, std::unique_ptr&& object) override