diff --git a/src/openrct2/command_line/sprite/SpriteBuild.cpp b/src/openrct2/command_line/sprite/SpriteBuild.cpp index 13c85af74c..951313ab78 100644 --- a/src/openrct2/command_line/sprite/SpriteBuild.cpp +++ b/src/openrct2/command_line/sprite/SpriteBuild.cpp @@ -62,6 +62,8 @@ namespace OpenRCT2::CommandLine::Sprite uint32_t numSuccessful = 0; + std::unordered_map images{}; + // Note: jsonSprite is deliberately left non-const: json_t behaviour changes when const for (auto& [jsonKey, jsonSprite] : jsonSprites.items()) { @@ -84,17 +86,28 @@ namespace OpenRCT2::CommandLine::Sprite auto imagePath = Path::GetAbsolute(Path::Combine(directoryPath, strPath)); - const auto image = SpriteImageLoad(imagePath, meta); - if (image == std::nullopt) + const auto image_iter = images.find(imagePath); + if (image_iter != images.end()) { - fprintf(stderr, "Could not read image file: %s\nCanceling\n", imagePath.c_str()); - return -1; + ImageImporter importer; + auto importResult = importer.Import(image_iter->second, meta); + spriteFile.AddImage(importResult); } + else + { + const auto image = SpriteImageLoad(imagePath, meta); + if (image == std::nullopt) + { + fprintf(stderr, "Could not read image file: %s\nCanceling\n", imagePath.c_str()); + return -1; + } + images[imagePath] = image.value(); - ImageImporter importer; - auto importResult = importer.Import(image.value(), meta); + ImageImporter importer; + auto importResult = importer.Import(image.value(), meta); - spriteFile.AddImage(importResult); + spriteFile.AddImage(importResult); + } if (!silent) fprintf(stdout, "Added: %s\n", imagePath.c_str());