aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLadislav Zezula <zezula@volny.cz>2025-10-25 09:01:18 +0200
committerLadislav Zezula <zezula@volny.cz>2025-10-25 09:01:18 +0200
commit07559b322064d7c1fe75f23195744c0c2863f86a (patch)
tree2174c18cde38dfd79d67bb7a08aab370f144d781
parentb62de3c83fc146c4e8a05bde15d39e19588c28a4 (diff)
Fixed opening of Warcraft III maps that don't have W3M header
-rw-r--r--src/SFileOpenArchive.cpp15
-rw-r--r--src/StormLib.h2
-rwxr-xr-xtest/StormTest.cpp6
3 files changed, 15 insertions, 8 deletions
diff --git a/src/SFileOpenArchive.cpp b/src/SFileOpenArchive.cpp
index 47136fe..58f4d01 100644
--- a/src/SFileOpenArchive.cpp
+++ b/src/SFileOpenArchive.cpp
@@ -51,6 +51,7 @@ static MTYPE CheckMapType(LPCTSTR szFileName, LPBYTE pbHeaderBuffer, size_t cbHe
{
LPDWORD HeaderInt32 = (LPDWORD)pbHeaderBuffer;
LPCTSTR szExtension;
+ MTYPE TypeByExtension = MapTypeNotRecognized;
// Don't do any checks if there is not at least 16 bytes
if(cbHeaderBuffer > 0x10)
@@ -65,16 +66,22 @@ static MTYPE CheckMapType(LPCTSTR szFileName, LPBYTE pbHeaderBuffer, size_t cbHe
// fake Warcraft III header into the Starcraft II maps
if((szExtension = _tcsrchr(szFileName, _T('.'))) != NULL)
{
+ // Check for Starcraft I maps by extension
+ if(!_tcsicmp(szExtension, _T(".scm")) || !_tcsicmp(szExtension, _T(".scx")))
+ {
+ return MapTypeStarcraft;
+ }
+
// Check for Starcraft II maps by extension
if(!_tcsicmp(szExtension, _T(".s2ma")) || !_tcsicmp(szExtension, _T(".SC2Map")) || !_tcsicmp(szExtension, _T(".SC2Mod")))
{
return MapTypeStarcraft2;
}
- // Check for Starcraft I maps by extension
- if(!_tcsicmp(szExtension, _T(".scm")) || !_tcsicmp(szExtension, _T(".scx")))
+ // Check for Warcraft III maps by extension
+ if(!_tcsicmp(szExtension, _T(".w3m")) || !_tcsicmp(szExtension, _T(".w3x")))
{
- return MapTypeStarcraft;
+ TypeByExtension = MapTypeWarcraft3;
}
}
@@ -112,7 +119,7 @@ static MTYPE CheckMapType(LPCTSTR szFileName, LPBYTE pbHeaderBuffer, size_t cbHe
}
// No special map type recognized
- return MapTypeNotRecognized;
+ return TypeByExtension;
}
static bool IsStarcraftBetaArchive(TMPQHeader * pHeader)
diff --git a/src/StormLib.h b/src/StormLib.h
index 1f3dee7..5e262db 100644
--- a/src/StormLib.h
+++ b/src/StormLib.h
@@ -1,5 +1,5 @@
/*****************************************************************************/
-/* StormLib.h Copyright (c) Ladislav Zezula 1999-2017 */
+/* StormLib.h Copyright (c) Ladislav Zezula 1999-2025 */
/*---------------------------------------------------------------------------*/
/* StormLib library v 9.30 */
/* */
diff --git a/test/StormTest.cpp b/test/StormTest.cpp
index e3a210e..d53c92c 100755
--- a/test/StormTest.cpp
+++ b/test/StormTest.cpp
@@ -3955,14 +3955,14 @@ static DWORD TestUtf8Conversions(const BYTE * szTestString, const TCHAR * szList
static void Test_PlayingSpace()
{
-/*
+
HANDLE hMpq;
HANDLE hFile;
LPBYTE pbData;
DWORD dwFileSize = 529298;
DWORD dwBytesRead = 0;
- if(SFileOpenArchive(_T("e:\\2.mpq"), 0, 0, &hMpq))
+ if(SFileOpenArchive(_T("e:\\Legion_TD_11_2d-BETA_2_TeamOZE.w3x"), 0, 0, &hMpq))
{
if(SFileOpenFileEx(hMpq, "(listfile)", 0, &hFile))
{
@@ -3975,7 +3975,7 @@ static void Test_PlayingSpace()
}
SFileCloseArchive(hMpq);
}
-*/
+
}
//-----------------------------------------------------------------------------