Skip to content

Commit d1b6ede

Browse files
authored
Merge pull request #54 from sklett-src/build_64469_fix
build 64469 support
2 parents 080e09d + 1873e6d commit d1b6ede

File tree

4 files changed

+52
-1
lines changed

4 files changed

+52
-1
lines changed

sc2reader/readers.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1877,6 +1877,49 @@ def trigger_ping_event(self, data):
18771877
option=data.read_uint32() - 2147483648,
18781878
)
18791879

1880+
class GameEventsReader_64469(GameEventsReader_38996):
1881+
1882+
# this function is exactly the same as command_event() from GameEventsReader_38996
1883+
# with the only change being that flags now has 26 bits instead of 25.
1884+
def command_event(self, data):
1885+
return dict(
1886+
flags=data.read_bits(26),
1887+
ability=dict(
1888+
ability_link=data.read_uint16(),
1889+
ability_command_index=data.read_bits(5),
1890+
ability_command_data=data.read_uint8() if data.read_bool() else None,
1891+
) if data.read_bool() else None,
1892+
data={ # Choice
1893+
0: lambda: ('None', None),
1894+
1: lambda: ('TargetPoint', dict(
1895+
point=dict(
1896+
x=data.read_bits(20),
1897+
y=data.read_bits(20),
1898+
z=data.read_uint32() - 2147483648,
1899+
)
1900+
)),
1901+
2: lambda: ('TargetUnit', dict(
1902+
flags=data.read_uint16(),
1903+
timer=data.read_uint8(),
1904+
unit_tag=data.read_uint32(),
1905+
unit_link=data.read_uint16(),
1906+
control_player_id=data.read_bits(4) if data.read_bool() else None,
1907+
upkeep_player_id=data.read_bits(4) if data.read_bool() else None,
1908+
point=dict(
1909+
x=data.read_bits(20),
1910+
y=data.read_bits(20),
1911+
z=data.read_uint32() - 2147483648,
1912+
),
1913+
)),
1914+
3: lambda: ('Data', dict(
1915+
data=data.read_uint32()
1916+
)),
1917+
}[data.read_bits(2)](),
1918+
sequence=data.read_uint32() + 1,
1919+
other_unit_tag=data.read_uint32() if data.read_bool() else None,
1920+
unit_group=data.read_uint32() if data.read_bool() else None,
1921+
)
1922+
18801923
class TrackerEventsReader(object):
18811924

18821925
def __init__(self):

sc2reader/resources.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -585,7 +585,8 @@ def register_default_readers(self):
585585
self.register_reader('replay.game.events', readers.GameEventsReader_36442(), lambda r: 36442 <= r.base_build < 38215)
586586
self.register_reader('replay.game.events', readers.GameEventsReader_38215(), lambda r: 38215 <= r.base_build < 38749)
587587
self.register_reader('replay.game.events', readers.GameEventsReader_38749(), lambda r: 38749 <= r.base_build < 38996)
588-
self.register_reader('replay.game.events', readers.GameEventsReader_38996(), lambda r: 38996 <= r.base_build)
588+
self.register_reader('replay.game.events', readers.GameEventsReader_38996(), lambda r: 38996 <= r.base_build < 64469)
589+
self.register_reader('replay.game.events', readers.GameEventsReader_64469(), lambda r: 64469 <= r.base_build)
589590
self.register_reader('replay.game.events', readers.GameEventsReader_HotSBeta(), lambda r: r.versions[1] == 2 and r.build < 24247)
590591

591592
def register_default_datapacks(self):
28.1 KB
Binary file not shown.

test_replays/test_all.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -561,6 +561,13 @@ def test_59587(self):
561561
factory = sc2reader.factories.SC2Factory()
562562
replay = factory.load_replay(replayfilename)
563563

564+
def test_64469(self):
565+
for replayfilename in [
566+
"test_replays/4.3.0.64469/1.SC2Replay",
567+
]:
568+
factory = sc2reader.factories.SC2Factory()
569+
replay = factory.load_replay(replayfilename)
570+
564571

565572
class TestGameEngine(unittest.TestCase):
566573
class TestEvent(object):

0 commit comments

Comments
 (0)