From 6905b19fd54279fdd3633ddb50006e4113a09e5a Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 27 Apr 2018 09:59:01 +0200 Subject: [PATCH 1/2] build 64469 support --- sc2reader/readers.py | 41 +++++++++++++++++++++++++++++++++++++++++ sc2reader/resources.py | 3 ++- 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/sc2reader/readers.py b/sc2reader/readers.py index 3345e138..f4c172b9 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -1877,6 +1877,47 @@ def trigger_ping_event(self, data): option=data.read_uint32() - 2147483648, ) +class GameEventsReader_64469(GameEventsReader_38749): + + def command_event(self, data): + return dict( + flags=data.read_bits(26), + ability=dict( + ability_link=data.read_uint16(), + ability_command_index=data.read_bits(5), + ability_command_data=data.read_uint8() if data.read_bool() else None, + ) if data.read_bool() else None, + data={ # Choice + 0: lambda: ('None', None), + 1: lambda: ('TargetPoint', dict( + point=dict( + x=data.read_bits(20), + y=data.read_bits(20), + z=data.read_uint32() - 2147483648, + ) + )), + 2: lambda: ('TargetUnit', dict( + flags=data.read_uint16(), + timer=data.read_uint8(), + unit_tag=data.read_uint32(), + unit_link=data.read_uint16(), + control_player_id=data.read_bits(4) if data.read_bool() else None, + upkeep_player_id=data.read_bits(4) if data.read_bool() else None, + point=dict( + x=data.read_bits(20), + y=data.read_bits(20), + z=data.read_uint32() - 2147483648, + ), + )), + 3: lambda: ('Data', dict( + data=data.read_uint32() + )), + }[data.read_bits(2)](), + sequence=data.read_uint32() + 1, + other_unit_tag=data.read_uint32() if data.read_bool() else None, + unit_group=data.read_uint32() if data.read_bool() else None, + ) + class TrackerEventsReader(object): def __init__(self): diff --git a/sc2reader/resources.py b/sc2reader/resources.py index 223f21c9..a24f07b5 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -585,7 +585,8 @@ def register_default_readers(self): self.register_reader('replay.game.events', readers.GameEventsReader_36442(), lambda r: 36442 <= r.base_build < 38215) self.register_reader('replay.game.events', readers.GameEventsReader_38215(), lambda r: 38215 <= r.base_build < 38749) self.register_reader('replay.game.events', readers.GameEventsReader_38749(), lambda r: 38749 <= r.base_build < 38996) - self.register_reader('replay.game.events', readers.GameEventsReader_38996(), lambda r: 38996 <= r.base_build) + self.register_reader('replay.game.events', readers.GameEventsReader_38996(), lambda r: 38996 <= r.base_build < 64469) + self.register_reader('replay.game.events', readers.GameEventsReader_64469(), lambda r: 64469 <= r.base_build) self.register_reader('replay.game.events', readers.GameEventsReader_HotSBeta(), lambda r: r.versions[1] == 2 and r.build < 24247) def register_default_datapacks(self): From 1873e6d6471258339aacc45d5da757e381c44cfb Mon Sep 17 00:00:00 2001 From: sklett Date: Sun, 29 Apr 2018 12:59:15 +0200 Subject: [PATCH 2/2] test and comment for build 64469 --- sc2reader/readers.py | 4 +++- test_replays/4.3.0.64469/1.SC2Replay | Bin 0 -> 28789 bytes test_replays/test_all.py | 7 +++++++ 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100755 test_replays/4.3.0.64469/1.SC2Replay diff --git a/sc2reader/readers.py b/sc2reader/readers.py index f4c172b9..bbc7c3b4 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -1877,8 +1877,10 @@ def trigger_ping_event(self, data): option=data.read_uint32() - 2147483648, ) -class GameEventsReader_64469(GameEventsReader_38749): +class GameEventsReader_64469(GameEventsReader_38996): + # this function is exactly the same as command_event() from GameEventsReader_38996 + # with the only change being that flags now has 26 bits instead of 25. def command_event(self, data): return dict( flags=data.read_bits(26), diff --git a/test_replays/4.3.0.64469/1.SC2Replay b/test_replays/4.3.0.64469/1.SC2Replay new file mode 100755 index 0000000000000000000000000000000000000000..9c79072df71d264bcffb5de721d114612aa659f2 GIT binary patch literal 28789 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 K%$Ab49Q=O}%4~)J literal 0 HcmV?d00001 diff --git a/test_replays/test_all.py b/test_replays/test_all.py index d90b477b..0cc12077 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -561,6 +561,13 @@ def test_59587(self): factory = sc2reader.factories.SC2Factory() replay = factory.load_replay(replayfilename) + def test_64469(self): + for replayfilename in [ + "test_replays/4.3.0.64469/1.SC2Replay", + ]: + factory = sc2reader.factories.SC2Factory() + replay = factory.load_replay(replayfilename) + class TestGameEngine(unittest.TestCase): class TestEvent(object):