aboutsummaryrefslogtreecommitdiff
path: root/src/SFileOpenArchive.cpp
diff options
context:
space:
mode:
authorLadislav Zezula <zezula@volny.cz>2022-05-15 20:57:06 +0200
committerGitHub <noreply@github.com>2022-05-15 20:57:06 +0200
commit8f3f327697b392014cc084f4f3a3547ddb3a1b89 (patch)
tree5f6f348381c516aa3e307a41d24086da5b243acc /src/SFileOpenArchive.cpp
parent460354d98bc266507befe517f9f246d3b952abc9 (diff)
parent07f9be39a62b93fa3af07c2fc02dcd25edd2c00b (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.cpp18
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)
{