Skip to content

Commit 98ef4b7

Browse files
committed
Add support for several new camera events.
In particular, any camera event with code 0xX8 gets parsed out now with a rather odd inconsistency for code 0x88. This replaces several one off patches for the 0x18 and 0x08.
1 parent 221fac0 commit 98ef4b7

File tree

2 files changed

+15
-8
lines changed

2 files changed

+15
-8
lines changed

sc2reader/parsers.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -305,13 +305,21 @@ def parse_camera87_event(self, buffer, frames, type, code, pid):
305305
buffer.skip(8)
306306
return CameraMovementEvent(frames, pid, type, code)
307307

308-
def parse_camera08_event(self, buffer, frames, type, code, pid):
309-
flags, extra = buffer.read_byte(), buffer.read_byte()
310-
buffer.skip( (flags&0x0F) << 3 )
311-
return CameraMovementEvent(frames, pid, type, code)
308+
def parse_cameraX8_event(self, buffer, frames, type, code, pid):
309+
# No idea why these two cases are ever so slightly different. There
310+
# must be a pattern in here somewhere that I haven't found yet.
311+
#
312+
# TODO: Find out why we occassionally shift by 2 instead of 3
313+
if code == 0x88:
314+
flags = buffer.read_byte()
315+
extra = buffer.read_byte()
316+
buffer.skip( (code & 0xF0 | flags & 0x0F) << 2 )
317+
318+
else:
319+
flags = buffer.read_byte()
320+
extra = buffer.read_byte()
321+
buffer.skip( (code & 0xF0 | flags & 0x0F) << 3 )
312322

313-
def parse_camera18_event(self, buffer, frames, type, code, pid):
314-
buffer.skip(162)
315323
return CameraMovementEvent(frames, pid, type, code)
316324

317325
def parse_cameraX1_event(self, buffer, frames, type, code, pid):

sc2reader/readers.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -296,8 +296,7 @@ def get_camera_parser(self, code):
296296
# has no meaningful impact on the course of the game. These events will
297297
# infrequently occur before the game starts for some unknown reason.
298298
if code == 0x87: return self.parse_camera87_event
299-
elif code == 0x08: return self.parse_camera08_event
300-
elif code == 0x18: return self.parse_camera18_event
299+
elif code & 0x0F == 8: return self.parse_cameraX8_event
301300
elif code & 0x0F == 1: return self.parse_cameraX1_event
302301
else:
303302
# TODO: Raise a better error

0 commit comments

Comments
 (0)