This file is loaded when the client starts. It maps the Map IDs to either the DMap or, in later clients, its compressed archive equivalent (.7z files).
The following is a simple python script which reads and parses the GameMap.dat. Pass the filepath as the first arg & it will output each map ID alongside its path. Example: python3 gamemap_decode.py GameMap.dat
import struct, sys
with open(sys.argv[1], "rb") as f:
count, = struct.unpack("<I", f.read(4)) # Little-Endian uint32 - Header (Record Count)
for idx in range(count):
map_id, name_len = struct.unpack("<II", f.read(8)) # Read ID & Length of Map Name
name = f.read(name_len).decode("ascii") # Read the map name
f.read(4) # Puzzle Size (value always 256), don't need to print it
print(f"{map_id}: {name}")