diff --git a/src/Components/Modules/AssetInterfaces/IGfxImage.cpp b/src/Components/Modules/AssetInterfaces/IGfxImage.cpp index 0a5ab98f..bc498f4a 100644 --- a/src/Components/Modules/AssetInterfaces/IGfxImage.cpp +++ b/src/Components/Modules/AssetInterfaces/IGfxImage.cpp @@ -112,12 +112,19 @@ namespace Assets buffer->align(Utils::Stream::ALIGN_4); Game::GfxImageLoadDef* destTexture = buffer->dest(); - buffer->save(asset->texture, 16); + buffer->save(asset->loadDef, 16); + + builder->incrementExternalSize(asset->loadDef->dataSize); // Zero the size! destTexture->dataSize = 0; - Utils::Stream::ClearPointer(&dest->texture); + if (destTexture->dataSize > 0) + { + buffer->save(asset->loadDef->data, asset->loadDef->dataSize); + } + + Utils::Stream::ClearPointer(&dest->loadDef); } buffer->popBlock(); diff --git a/src/Components/Modules/ZoneBuilder.cpp b/src/Components/Modules/ZoneBuilder.cpp index 433feab9..a3efe22d 100644 --- a/src/Components/Modules/ZoneBuilder.cpp +++ b/src/Components/Modules/ZoneBuilder.cpp @@ -5,7 +5,7 @@ namespace Components std::string ZoneBuilder::TraceZone; std::vector> ZoneBuilder::TraceAssets; - ZoneBuilder::Zone::Zone(std::string name) : dataMap("zone_source/" + name + ".csv"), zoneName(name), indexStart(0), branding { 0 }, + ZoneBuilder::Zone::Zone(std::string name) : dataMap("zone_source/" + name + ".csv"), zoneName(name), indexStart(0), externalSize(0), branding { 0 }, // Reserve 100MB by default. // That's totally fine, as the dedi doesn't load images and therefore doesn't need much memory. @@ -316,7 +316,7 @@ namespace Components this->buffer.enterCriticalSection(); Game::XFile* header = reinterpret_cast(this->buffer.data()); header->size = this->buffer.length() - sizeof(Game::XFile); // Write correct data size - header->externalSize = 0; // ? + header->externalSize = this->externalSize; // This actually stores how much external data has to be loaded. It's used to calculate the loadscreen progress // Write stream sizes for (int i = 0; i < Game::MAX_XFILE_COUNT; ++i) @@ -459,6 +459,11 @@ namespace Components } } + void ZoneBuilder::Zone::incrementExternalSize(unsigned int size) + { + this->externalSize += size; + } + bool ZoneBuilder::IsEnabled() { return (Flags::HasFlag("zonebuilder") && !Dedicated::IsEnabled()); diff --git a/src/Components/Modules/ZoneBuilder.hpp b/src/Components/Modules/ZoneBuilder.hpp index ed984ff0..b53f06fb 100644 --- a/src/Components/Modules/ZoneBuilder.hpp +++ b/src/Components/Modules/ZoneBuilder.hpp @@ -41,6 +41,8 @@ namespace Components void store(Game::XAssetHeader header); + void incrementExternalSize(unsigned int size); + private: void loadFastFiles(); @@ -55,6 +57,7 @@ namespace Components uint32_t safeGetPointer(const void* pointer); int indexStart; + unsigned int externalSize; Utils::Stream buffer; std::string zoneName;