aboutsummaryrefslogtreecommitdiff
path: root/src/SCompression.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/SCompression.cpp')
-rw-r--r--src/SCompression.cpp23
1 files changed, 18 insertions, 5 deletions
diff --git a/src/SCompression.cpp b/src/SCompression.cpp
index b689063..d6d2e27 100644
--- a/src/SCompression.cpp
+++ b/src/SCompression.cpp
@@ -1038,11 +1038,6 @@ int WINAPI SCompDecompress(void * pvOutBuffer, int * pcbOutBuffer, void * pvInBu
return SCompDecompressInternal(dcmp_table, _countof(dcmp_table), pvOutBuffer, pcbOutBuffer, pvInBuffer, cbInBuffer);
}
-int WINAPI SCompDecompress_SC1B(void * pvOutBuffer, int * pcbOutBuffer, void * pvInBuffer, int cbInBuffer)
-{
- return SCompDecompressInternal(dcmp_table_sc_beta, _countof(dcmp_table_sc_beta), pvOutBuffer, pcbOutBuffer, pvInBuffer, cbInBuffer);
-}
-
int WINAPI SCompDecompress2(void * pvOutBuffer, int * pcbOutBuffer, void * pvInBuffer, int cbInBuffer)
{
DECOMPRESS pfnDecompress1 = NULL;
@@ -1157,6 +1152,24 @@ int WINAPI SCompDecompress2(void * pvOutBuffer, int * pcbOutBuffer, void * pvInB
return nResult;
}
+int WINAPI SCompDecompressX(TMPQArchive * ha, void * pvOutBuffer, int * pcbOutBuffer, void * pvInBuffer, int cbInBuffer)
+{
+ // MPQs version 2 use their own fixed list of compression flags.
+ if(ha->pHeader->wFormatVersion >= MPQ_FORMAT_VERSION_2)
+ {
+ return SCompDecompress2(pvOutBuffer, pcbOutBuffer, pvInBuffer, cbInBuffer);
+ }
+
+ // Starcraft BETA has specific decompression table.
+ if(ha->dwFlags & MPQ_FLAG_STARCRAFT_BETA)
+ {
+ return SCompDecompressInternal(dcmp_table_sc_beta, _countof(dcmp_table_sc_beta), pvOutBuffer, pcbOutBuffer, pvInBuffer, cbInBuffer);
+ }
+
+ // Default: Use the common MPQ v1 decompression routine
+ return SCompDecompressInternal(dcmp_table, _countof(dcmp_table), pvOutBuffer, pcbOutBuffer, pvInBuffer, cbInBuffer);
+}
+
/*****************************************************************************/
/* */
/* File decompression for MPK archives */