aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/SBaseFileTable.cpp4
-rw-r--r--src/SFileAddFile.cpp2
-rw-r--r--src/SFileOpenArchive.cpp2
-rw-r--r--src/StormLib.h9
4 files changed, 13 insertions, 4 deletions
diff --git a/src/SBaseFileTable.cpp b/src/SBaseFileTable.cpp
index d9664a5..39ba125 100644
--- a/src/SBaseFileTable.cpp
+++ b/src/SBaseFileTable.cpp
@@ -351,7 +351,7 @@ int ConvertMpqHeaderToFormat4(
// If version 1.0 is forced, then the format version is forced to be 1.0
// Reason: Storm.dll in Warcraft III ignores format version value
- if((dwFlags & MPQ_OPEN_FORCE_MPQ_V1) || (bIsWarcraft3Map))
+ if((dwFlags & MPQ_OPEN_FORCE_MPQ_V1) || bIsWarcraft3Map)
wFormatVersion = MPQ_FORMAT_VERSION_1;
// Format-specific fixes
@@ -752,7 +752,7 @@ static int BuildFileTableFromBlockTable(
assert(ha->dwFileTableSize >= ha->dwMaxFileCount);
// MPQs for Warcraft III doesn't know some flags, namely MPQ_FILE_SINGLE_UNIT and MPQ_FILE_PATCH_FILE
- dwFlagMask = (ha->dwFlags & MPQ_FLAG_WAR3_MAP) ? ~(MPQ_FILE_SINGLE_UNIT | MPQ_FILE_PATCH_FILE) : 0xFFFFFFFF;
+ dwFlagMask = (ha->dwFlags & MPQ_FLAG_WAR3_MAP) ? MPQ_FILE_VALID_FLAGS_W3X : MPQ_FILE_VALID_FLAGS;
// Defragment the hash table, if needed
if(ha->dwFlags & MPQ_FLAG_HASH_TABLE_CUT)
diff --git a/src/SFileAddFile.cpp b/src/SFileAddFile.cpp
index 0b70d35..376813b 100644
--- a/src/SFileAddFile.cpp
+++ b/src/SFileAddFile.cpp
@@ -792,7 +792,7 @@ bool WINAPI SFileCreateFile(
if(nError == ERROR_SUCCESS)
{
// Mask all unsupported flags out
- dwFlags &= MPQ_FILE_VALID_FLAGS;
+ dwFlags &= (ha->dwFlags & MPQ_FLAG_WAR3_MAP) ? MPQ_FILE_VALID_FLAGS_W3X : MPQ_FILE_VALID_FLAGS;
// Check for valid flag combinations
if((dwFlags & (MPQ_FILE_IMPLODE | MPQ_FILE_COMPRESS)) == (MPQ_FILE_IMPLODE | MPQ_FILE_COMPRESS))
diff --git a/src/SFileOpenArchive.cpp b/src/SFileOpenArchive.cpp
index a78b169..a896eaf 100644
--- a/src/SFileOpenArchive.cpp
+++ b/src/SFileOpenArchive.cpp
@@ -307,7 +307,7 @@ bool WINAPI SFileOpenArchive(
}
// Check for MPK archives (Longwu Online - MPQ fork)
- if(dwHeaderID == ID_MPK && bIsWarcraft3Map == false)
+ if(bIsWarcraft3Map == false && dwHeaderID == ID_MPK)
{
// Now convert the MPK header to MPQ Header version 4
nError = ConvertMpkHeaderToFormat4(ha, FileSize, dwFlags);
diff --git a/src/StormLib.h b/src/StormLib.h
index dfa31f9..ca84cbc 100644
--- a/src/StormLib.h
+++ b/src/StormLib.h
@@ -231,6 +231,15 @@ extern "C" {
MPQ_FILE_SIGNATURE | \
MPQ_FILE_EXISTS)
+#define MPQ_FILE_VALID_FLAGS_W3X (MPQ_FILE_IMPLODE | \
+ MPQ_FILE_COMPRESS | \
+ MPQ_FILE_ENCRYPTED | \
+ MPQ_FILE_FIX_KEY | \
+ MPQ_FILE_DELETE_MARKER | \
+ MPQ_FILE_SECTOR_CRC | \
+ MPQ_FILE_SIGNATURE | \
+ MPQ_FILE_EXISTS)
+
// We need to mask out the upper 4 bits of the block table index.
// This is because it gets shifted out when calculating block table offset
// BlockTableOffset = pHash->dwBlockIndex << 0x04