Skip to content

Commit 0249d0f

Browse files
committed
Add 2.0.10.26490 support.
1 parent be01fe1 commit 0249d0f

File tree

7 files changed

+96
-14
lines changed

7 files changed

+96
-14
lines changed

sc2reader/events/game.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ def __init__(self, frame, pid, data):
6666
#: Are workers sent to auto-mine on game start
6767
self.starting_rally = data['starting_rally']
6868

69+
#:
70+
self.debug_pause_enabled = data['debug_pause_enabled']
71+
6972
#:
7073
self.base_build_num = data['base_build_num']
7174

sc2reader/events/tracker.py

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class PlayerStatsEvent(TrackerEvent):
4040
"""
4141
name = 'PlayerStatsEvent'
4242

43-
def __init__(self, frames, data):
43+
def __init__(self, frames, data, build):
4444
super(PlayerStatsEvent, self).__init__(frames)
4545

4646
#: Id of the player the stats are for
@@ -187,14 +187,32 @@ def __init__(self, frames, data):
187187
#: The total vespene value of all active forces
188188
self.vespene_used_active_forces = clamp(self.stats[32])
189189

190+
#: Minerals of army value lost to friendly fire
191+
self.ff_minerals_lost_army = clamp(self.stats[33]) if build >= 26490 else None
192+
193+
#: Minerals of economy value lost to friendly fire
194+
self.ff_minerals_lost_economy = clamp(self.stats[34]) if build >= 26490 else None
195+
196+
#: Minerals of technology value lost to friendly fire
197+
self.ff_minerals_lost_technology = clamp(self.stats[35]) if build >= 26490 else None
198+
199+
#: Vespene of army value lost to friendly fire
200+
self.ff_vespene_lost_army = clamp(self.stats[36]) if build >= 26490 else None
201+
202+
#: Vespene of economy value lost to friendly fire
203+
self.ff_vespene_lost_economy = clamp(self.stats[37]) if build >= 26490 else None
204+
205+
#: Vespene of technology value lost to friendly fire
206+
self.ff_vespene_lost_technology = clamp(self.stats[38]) if build >= 26490 else None
207+
190208
def __str__(self):
191209
return self._str_prefix()+"{0: >15} - Stats Update".format(self.player)
192210

193211

194212
class UnitBornEvent(TrackerEvent):
195213
name = 'UnitBornEvent'
196214

197-
def __init__(self, frames, data):
215+
def __init__(self, frames, data, build):
198216
super(UnitBornEvent, self).__init__(frames)
199217

200218
#: The index portion of the unit id
@@ -240,7 +258,7 @@ def __str__(self):
240258
class UnitDiedEvent(TrackerEvent):
241259
name = 'UnitDiedEvent'
242260

243-
def __init__(self, frames, data):
261+
def __init__(self, frames, data, build):
244262
super(UnitDiedEvent, self).__init__(frames)
245263

246264
#: The index portion of the unit id
@@ -277,7 +295,7 @@ def __str__(self):
277295
class UnitOwnerChangeEvent(TrackerEvent):
278296
name = 'UnitOwnerChangeEvent'
279297

280-
def __init__(self, frames, data):
298+
def __init__(self, frames, data, build):
281299
super(UnitOwnerChangeEvent, self).__init__(frames)
282300

283301
#: The index portion of the unit id
@@ -311,7 +329,7 @@ def __str__(self):
311329
class UnitTypeChangeEvent(TrackerEvent):
312330
name = 'UnitTypeChangeEvent'
313331

314-
def __init__(self, frames, data):
332+
def __init__(self, frames, data, build):
315333
super(UnitTypeChangeEvent, self).__init__(frames)
316334

317335
#: The index portion of the unit id
@@ -336,7 +354,7 @@ def __str__(self):
336354
class UpgradeCompleteEvent(TrackerEvent):
337355
name = 'UpgradeCompleteEvent'
338356

339-
def __init__(self, frames, data):
357+
def __init__(self, frames, data, build):
340358
super(UpgradeCompleteEvent, self).__init__(frames)
341359

342360
#: The player that completed the upgrade
@@ -358,7 +376,7 @@ def __str__(self):
358376
class UnitInitEvent(TrackerEvent):
359377
name = 'UnitInitEvent'
360378

361-
def __init__(self, frames, data):
379+
def __init__(self, frames, data, build):
362380
super(UnitInitEvent, self).__init__(frames)
363381

364382
#: The index portion of the unit id
@@ -404,7 +422,7 @@ def __str__(self):
404422
class UnitDoneEvent(TrackerEvent):
405423
name = 'UnitDoneEvent'
406424

407-
def __init__(self, frames, data):
425+
def __init__(self, frames, data, build):
408426
super(UnitDoneEvent, self).__init__(frames)
409427

410428
#: The index portion of the unit id
@@ -426,7 +444,7 @@ def __str__(self):
426444
class UnitPositionsEvent(TrackerEvent):
427445
name = 'UnitPositionsEvent'
428446

429-
def __init__(self, frames, data):
447+
def __init__(self, frames, data, build):
430448
super(UnitPositionsEvent, self).__init__(frames)
431449

432450
#: The starting unit index point.

sc2reader/readers.py

Lines changed: 61 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -699,6 +699,14 @@ def __call__(self, data, replay):
699699
)
700700

701701

702+
class InitDataReader_26490(InitDataReader_24764):
703+
704+
def __call__(self, data, replay):
705+
data = super(InitDataReader_26490, self).__call__(data, replay)
706+
data['game_description']['max_controls'] -= 1
707+
return data
708+
709+
702710
class AttributesEventsReader_Base(Reader):
703711
header_length = 4
704712
offset = False
@@ -743,7 +751,7 @@ def __call__(self, data, replay):
743751
region=p[1][0],
744752
program_id=p[1][1],
745753
subregion=p[1][2],
746-
# name=p[1][3].decode('utf8'),
754+
# name=p[1][3].decode('utf8'), # This is documented but never available
747755
uid=p[1][4],
748756
),
749757
race=p[2].decode('utf8'),
@@ -775,6 +783,7 @@ def __call__(self, data, replay):
775783
default_difficulty=details[13],
776784
mod_paths=details[14] if (replay.build >= 22612 and replay.versions[1] == 1) else None,
777785
campaign_index=details[15] if replay.versions[1] == 2 else None,
786+
restartAsTransitionMap=details[16] if replay.build > 26490 else None,
778787
)
779788

780789

@@ -1031,6 +1040,7 @@ def user_options_event(self, data):
10311040
sync_checksumming_enabled=data.read_bool(),
10321041
is_map_to_map_transition=data.read_bool(),
10331042
use_ai_beacons=None,
1043+
debug_pause_enabled=None,
10341044
base_build_num=None,
10351045
starting_rally=None,
10361046
)
@@ -1694,6 +1704,7 @@ def user_options_event(self, data):
16941704
sync_checksumming_enabled=data.read_bool(),
16951705
is_map_to_map_transition=data.read_bool(),
16961706
use_ai_beacons=data.read_bool(),
1707+
debug_pause_enabled=None,
16971708
base_build_num=None,
16981709
starting_rally=None,
16991710
)
@@ -1860,6 +1871,7 @@ def user_options_event(self, data):
18601871
is_map_to_map_transition=data.read_bool(),
18611872
starting_rally=data.read_bool(),
18621873
use_ai_beacons=data.read_bool(),
1874+
debug_pause_enabled=None,
18631875
base_build_num=None,
18641876
)
18651877

@@ -1874,6 +1886,7 @@ def user_options_event(self, data):
18741886
sync_checksumming_enabled=data.read_bool(),
18751887
is_map_to_map_transition=data.read_bool(),
18761888
starting_rally=data.read_bool(),
1889+
debug_pause_enabled=None,
18771890
base_build_num=data.read_uint32(),
18781891
use_ai_beacons=None,
18791892
)
@@ -1997,6 +2010,52 @@ def game_user_join_event(self, data):
19972010
)
19982011

19992012

2013+
class GameEventsReader_26490(GameEventsReader_24247):
2014+
2015+
def user_options_event(self, data):
2016+
return dict(
2017+
game_fully_downloaded=data.read_bool(),
2018+
development_cheats_enabled=data.read_bool(),
2019+
multiplayer_cheats_enabled=data.read_bool(),
2020+
sync_checksumming_enabled=data.read_bool(),
2021+
is_map_to_map_transition=data.read_bool(),
2022+
starting_rally=data.read_bool(),
2023+
debug_pause_enabled=None,
2024+
base_build_num=data.read_uint32(),
2025+
use_ai_beacons=None,
2026+
)
2027+
2028+
def trigger_mouse_clicked_event(self, data):
2029+
return dict(
2030+
button=data.read_uint32(),
2031+
down=data.read_bool(),
2032+
position_ui=dict(
2033+
x=data.read_uint32(),
2034+
y=data.read_uint32(),
2035+
),
2036+
position_world=dict(
2037+
x=data.read_uint32()-2147483648,
2038+
y=data.read_uint32()-2147483648,
2039+
z=data.read_uint32()-2147483648,
2040+
),
2041+
flags=data.read_uint8()-128,
2042+
)
2043+
2044+
def trigger_mouse_moved_event(self, data):
2045+
return dict(
2046+
position_ui=dict(
2047+
x=data.read_bits(11),
2048+
y=data.read_bits(11),
2049+
),
2050+
position_world=dict(
2051+
x=data.read_bits(20),
2052+
y=data.read_bits(20),
2053+
z=data.read_uint32()-2147483648,
2054+
),
2055+
flags=data.read_uint8()-128,
2056+
)
2057+
2058+
20002059
class TrackerEventsReader_Base(Reader):
20012060

20022061
def __init__(self):
@@ -2021,7 +2080,7 @@ def __call__(self, data, replay):
20212080
frames += decoder.read_struct()
20222081
etype = decoder.read_struct()
20232082
event_data = decoder.read_struct()
2024-
event = self.EVENT_DISPATCH[etype](frames, event_data)
2083+
event = self.EVENT_DISPATCH[etype](frames, event_data, replay.build)
20252084
events.append(event)
20262085

20272086
return events

sc2reader/resources.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -524,7 +524,8 @@ def register_default_readers(self):
524524
self.register_reader('replay.initData', readers.InitDataReader_19132(), lambda r: 19132 <= r.base_build < 22612)
525525
self.register_reader('replay.initData', readers.InitDataReader_22612(), lambda r: 22612 <= r.base_build < 23925)
526526
self.register_reader('replay.initData', readers.InitDataReader_23925(), lambda r: 23925 <= r.base_build < 24764)
527-
self.register_reader('replay.initData', readers.InitDataReader_24764(), lambda r: 24764 <= r.base_build)
527+
self.register_reader('replay.initData', readers.InitDataReader_24764(), lambda r: 24764 <= r.base_build < 26490)
528+
self.register_reader('replay.initData', readers.InitDataReader_26490(), lambda r: 26490 <= r.base_build)
528529
self.register_reader('replay.message.events', readers.MessageEventsReader_Base(), lambda r: r.build < 24247 or r.versions[1] == 1)
529530
self.register_reader('replay.message.events', readers.MessageEventsReader_Beta_24247(), lambda r: r.build >= 24247 and r.versions[1] == 2)
530531
self.register_reader('replay.attributes.events', readers.AttributesEventsReader_Base(), lambda r: r.build < 17326)
@@ -536,7 +537,8 @@ def register_default_readers(self):
536537
self.register_reader('replay.game.events', readers.GameEventsReader_19595(), lambda r: 19595 <= r.base_build < 22612)
537538
self.register_reader('replay.game.events', readers.GameEventsReader_22612(), lambda r: 22612 <= r.base_build < 23260)
538539
self.register_reader('replay.game.events', readers.GameEventsReader_23260(), lambda r: 23260 <= r.base_build < 24247)
539-
self.register_reader('replay.game.events', readers.GameEventsReader_24247(), lambda r: 24247 <= r.base_build)
540+
self.register_reader('replay.game.events', readers.GameEventsReader_24247(), lambda r: 24247 <= r.base_build < 26490)
541+
self.register_reader('replay.game.events', readers.GameEventsReader_26490(), lambda r: 26490 <= r.base_build)
540542
self.register_reader('replay.game.events', readers.GameEventsReader_HotSBeta(), lambda r: r.versions[1] == 2 and r.build < 24247)
541543
self.register_reader('replay.tracker.events', readers.TrackerEventsReader_Base(), lambda r: True)
542544

sc2reader/scripts/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
from __future__ import absolute_import, print_function, unicode_literals, division
33

44
# import submodules
5-
import utils
5+
from sc2reader.scripts import utils
60.1 KB
Binary file not shown.
Binary file not shown.

0 commit comments

Comments
 (0)