diff options
author | Ladislav Zezula <zezula@volny.cz> | 2022-05-15 20:57:06 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-15 20:57:06 +0200 |
commit | 8f3f327697b392014cc084f4f3a3547ddb3a1b89 (patch) | |
tree | 5f6f348381c516aa3e307a41d24086da5b243acc /src/SFileOpenArchive.cpp | |
parent | 460354d98bc266507befe517f9f246d3b952abc9 (diff) | |
parent | 07f9be39a62b93fa3af07c2fc02dcd25edd2c00b (diff) |
Merge pull request #255 from ladislav-zezula/LZ_SupportStarcraftBeta
Support for Starcraft BETA ADPCM compression
Diffstat (limited to 'src/SFileOpenArchive.cpp')
-rw-r--r-- | src/SFileOpenArchive.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/SFileOpenArchive.cpp b/src/SFileOpenArchive.cpp index 52e1a39..b85f24c 100644 --- a/src/SFileOpenArchive.cpp +++ b/src/SFileOpenArchive.cpp @@ -75,6 +75,20 @@ static MTYPE CheckMapType(LPCTSTR szFileName, LPBYTE pbHeaderBuffer, size_t cbHe return MapTypeNotRecognized; } +static bool IsStarcraftBetaArchive(TMPQHeader * pHeader) +{ + // The archive must be version 1, with a standard header size + if(pHeader->dwID == ID_MPQ && pHeader->dwHeaderSize == MPQ_HEADER_SIZE_V1) + { + // Check for known archive sizes + return (pHeader->dwArchiveSize == 0x00028FB3 || // patch_rt.mpq + pHeader->dwArchiveSize == 0x0351853D || // StarDat.mpq + pHeader->dwArchiveSize == 0x0AEC8960); // INSTALL.exe + + } + return false; +} + static TMPQUserData * IsValidMpqUserData(ULONGLONG ByteOffset, ULONGLONG FileSize, void * pvUserData) { TMPQUserData * pUserData; @@ -446,6 +460,10 @@ bool WINAPI SFileOpenArchive( if(dwFlags & MPQ_OPEN_FORCE_LISTFILE) ha->dwFlags |= MPQ_FLAG_LISTFILE_FORCE; + // StarDat.mpq from Starcraft I BETA: Enable special compression types + if(IsStarcraftBetaArchive(ha->pHeader)) + ha->dwFlags |= MPQ_FLAG_STARCRAFT_BETA; + // Remember whether whis is a map for Warcraft III if(MapType == MapTypeWarcraft3) { |