From 07559b322064d7c1fe75f23195744c0c2863f86a Mon Sep 17 00:00:00 2001 From: Ladislav Zezula Date: Sat, 25 Oct 2025 09:01:18 +0200 Subject: Fixed opening of Warcraft III maps that don't have W3M header --- src/SFileOpenArchive.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'src/SFileOpenArchive.cpp') 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) -- cgit v1.2.3