fix: world format discrepancies

This commit is contained in:
Fireblade
2026-07-12 01:00:58 -04:00
parent f0a868411a
commit 48b80ba865
4 changed files with 84 additions and 14 deletions
+8 -8
View File
@@ -11,6 +11,7 @@ bool RegionFileCache::useSplitSaves(ESavePlatform platform)
{
case SAVE_FILE_PLATFORM_XBONE:
case SAVE_FILE_PLATFORM_PS4:
case SAVE_FILE_PLATFORM_WIN64:
return true;
default:
return false;
@@ -28,8 +29,11 @@ RegionFile *RegionFileCache::_getRegionFile(ConsoleSaveFile *saveFile, const wst
//File file(regionDir, wstring(L"r.") + std::to_wstring(chunkX>>5) + L"." + std::to_wstring(chunkZ>>5) + L".mcr" );
MemSect(31);
File file;
if(useSplitSaves(saveFile->getSavePlatform()))
{
// fireblade: region format now decided by region_format_16 marker
// this allows dlc worlds to load any format, just like regular worlds can now do
// perky please dont scream at me for doing such
bool isNew = saveFile->doesFileExist(ConsoleSavePath(L"region_format_16"));
if (isNew)
@@ -37,10 +41,6 @@ RegionFile *RegionFileCache::_getRegionFile(ConsoleSaveFile *saveFile, const wst
else
file = File(prefix + wstring(L"r.") + std::to_wstring(chunkX >> 5) + L"." + std::to_wstring(chunkZ >> 5) + L".mcr");
}
else
{
file = File( prefix + wstring(L"r.") + std::to_wstring(chunkX>>5) + L"." + std::to_wstring(chunkZ>>5) + L".mcr" );
}
MemSect(0);
RegionFile *ref = nullptr;
@@ -96,7 +96,7 @@ DataInputStream *RegionFileCache::_getChunkDataInputStream(ConsoleSaveFile *save
{
RegionFile* r = _getRegionFile(saveFile, prefix, chunkX, chunkZ);
bool isNew = saveFile->doesFileExist(ConsoleSavePath(L"region_format_16"));
if (useSplitSaves(saveFile->getSavePlatform()) && isNew)
if (isNew)
{
return r->getChunkDataInputStream(chunkX & 15, chunkZ & 15);
}
@@ -111,7 +111,7 @@ DataOutputStream *RegionFileCache::_getChunkDataOutputStream(ConsoleSaveFile *sa
{
RegionFile* r = _getRegionFile(saveFile, prefix, chunkX, chunkZ);
bool isNew = saveFile->doesFileExist(ConsoleSavePath(L"region_format_16"));
if (useSplitSaves(saveFile->getSavePlatform()) && isNew)
if (isNew)
{
return r->getChunkDataOutputStream(chunkX & 15, chunkZ & 15);
}
@@ -126,4 +126,4 @@ DataOutputStream *RegionFileCache::_getChunkDataOutputStream(ConsoleSaveFile *sa
RegionFileCache::~RegionFileCache()
{
_clear();
}
}