diff --git a/mgz/fast/header.py b/mgz/fast/header.py index 5cc5462..d0671b7 100644 --- a/mgz/fast/header.py +++ b/mgz/fast/header.py @@ -468,6 +468,8 @@ def parse_de(data, version, save, skip=False): data.read(8) if save >= 64.3: data.read(4) + if save >= 67.2: + _ = de_string(data) players.append(dict( number=number, @@ -550,6 +552,9 @@ def parse_de(data, version, save, skip=False): data.read(c * 4) if not skip: de_string(data) + if save >= 67.2: + _ = de_string(data) + _ = de_string(data) data.read(8) if save >= 37: timestamp, x = unpack('= 25.06, "handicap"/Bytes(8)), If(lambda ctx: find_save_version(ctx) >= 64.3, "unknown_de_64_3" / Int32ul), + If(lambda ctx: find_save_version(ctx) >= 67.2, "unknown_de_67_2" / de_string), ) string_block = Struct( @@ -167,6 +168,10 @@ If(lambda ctx: find_save_version(ctx) >= 66.3, Bytes(12)), If(lambda ctx: find_save_version(ctx) >= 66.3, Array(lambda ctx: ctx.unknown_count, Bytes(4))), de_string, + If(lambda ctx: find_save_version(ctx) >= 67.2, Struct( + de_string, + de_string, + )), Bytes(5), If(lambda ctx: find_save_version(ctx) >= 13.13, Byte), If(lambda ctx: find_save_version(ctx) < 13.17, Struct( @@ -178,5 +183,5 @@ "ver37"/If(lambda ctx: find_save_version(ctx) >= 37, Struct( Int32ul, Int32ul - )) + )), ) diff --git a/mgz/header/initial.py b/mgz/header/initial.py index 605fd7c..4229531 100644 --- a/mgz/header/initial.py +++ b/mgz/header/initial.py @@ -6,6 +6,7 @@ Int32ul, Padding, Struct, Tell, this, Bytes, Const, IfThenElse) from mgz.enums import MyDiplomacyEnum, TheirDiplomacyEnum +from mgz.header.de import de_string from mgz.header.objects import existing_object from mgz.header.playerstats import player_stats from mgz.util import Find, GotoObjectsEnd, RepeatUpTo, Version, find_save_version, find_version @@ -42,6 +43,7 @@ "y"/Int16ul ), "culture"/Byte, + "name"/If(lambda ctx: find_save_version(ctx) >= 67.2, de_string), "civilization"/Byte, "game_status"/Byte, "resigned"/Flag, diff --git a/mgz/model/__init__.py b/mgz/model/__init__.py index 0a4445f..364d83e 100644 --- a/mgz/model/__init__.py +++ b/mgz/model/__init__.py @@ -171,7 +171,7 @@ def parse_match(handle): player['name'].decode(encoding), consts['player_colors'][str(player['color_id'])], player['color_id'], - dataset['civilizations'][str(player['civilization_id'])]['name'], + dataset['civilizations'].get(str(player['civilization_id']), {'name': f""})['name'], player['civilization_id'], Position(pos_x, pos_y), [