Page MenuHomeWildfire Games

Convert maps to a certain version

Authored By
Stan
Jan 18 2021, 3:36 PM
Size
2 KB
Referenced Files
None
Subscribers
None

Convert maps to a certain version

import os
import re
import sys
if sys.version_info.major == 3:
pass
elif sys.version_info.major == 2:
import struct
def version_to_uint32(version):
if sys.version_info.major == 3:
return version.to_bytes(4, byteorder='little')
elif sys.version_info.major == 2:
return struct.pack('<I', version)
def convert_xml(path, new_version):
re_version = re.compile('<Scenario version="(\d+)">')
with open(path, 'rt') as handle:
data = handle.read()
match = re_version.search(data)
if not match:
raise ValueError('Version not found: "{}"'.format(path))
old_version = match.group(0)
data = data.replace(old_version, '<Scenario version="{}">'.format(new_version))
if match.group(1) == '6' and new_version == 7:
fix_ambient_color = re.compile(r'<TerrainAmbientColor r="\d+\.*\d*" g="\d+\.*\d*" b="\d+\.*\d*"/>[\n\s].*<UnitsAmbientColor r="(\d+\.*\d*)" g="(\d+\.*\d*)" b="(\d+\.*\d*)"/>')
ambient_match = fix_ambient_color.search(data)
if not ambient_match:
raise ValueError('TerrainAmbientColor not found: "{}"'.format(path))
oldColor = ambient_match.group(0)
r = ambient_match.group(1)
g = ambient_match.group(2)
b = ambient_match.group(3)
data = data.replace(oldColor, '<AmbientColor r="{}" g="{}" b="{}"/>'.format(r,g,b))
with open(path, 'wt') as handle:
handle.write(data)
sys.stdout.write('File "{}" converted to "{}" version.\n'.format(path, new_version))
def convert_pmp(path, new_version):
with open(path, 'r+b') as handle:
data = handle.read(8)
data = data[:4] + version_to_uint32(new_version)
handle.seek(0)
handle.write(data)
sys.stdout.write('File "{}" converted to "{}" version.\n'.format(path, new_version))
def convert_file(path, new_version):
name, ext = os.path.splitext(path)
if ext == '.xml':
convert_xml(path, new_version)
elif ext == '.pmp':
convert_pmp(path, new_version)
else:
# Ignore other extensions
pass
if __name__ == '__main__':
if len(sys.argv) < 3:
sys.stderr.write('Usage: {} newversion paths...\n'.format(__file__))
exit(1)
new_version = int(sys.argv[1])
if new_version < 1 or new_version >= 2**32:
sys.stderr.write('Incorrect version: "{}"\n'.format(new_version))
exit(1)
paths = sys.argv[2:]
for path in paths:
print(path)
if os.path.isfile(path):
convert_file(path, new_version)
elif os.path.isdir(path):
for name in os.listdir(path):
file_path = os.path.join(path, name)
if os.path.isfile(file_path):
convert_file(file_path, new_version)
else:
sys.stderr.write('Unknown path: "{}"\n'.format(path))

File Metadata

Mime Type
text/plain; charset=utf-8
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1306403
Default Alt Text
Convert maps to a certain version (2 KB)

Event Timeline