Skip to content

Commit 67c0ff3

Browse files
committed
Fixes several small parsing bugs. Includes an additional cancel flag for abilities, and finally fixes the type 0x03, code 0x08 event for good.
1 parent f967d7b commit 67c0ff3

File tree

2 files changed

+16
-13
lines changed

2 files changed

+16
-13
lines changed

sc2reader/parsers.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ def parse_ability_event(self, buffer, frames, type, code, pid):
215215
end = buffer.peek(35)
216216
ability = buffer.read_byte() << 8 | buffer.read_byte()
217217

218-
if flag in (0x29, 0x19, 0x14): # cancels
218+
if flag in (0x29, 0x19, 0x14, 0x0c): # cancels
219219
# creation autoid number / object id
220220
ability = ability << 8 | buffer.read_byte()
221221
created_id = buffer.read_object_id()
@@ -300,13 +300,10 @@ def parse_camera87_event(self, buffer, frames, type, code, pid):
300300
return CameraMovementEvent(frames, pid, type, code)
301301

302302
def parse_camera08_event(self, buffer, frames, type, code, pid):
303-
short = buffer.read_short(BIG_ENDIAN)
304-
count = short & 0x0F
305-
#print "Short %X, Count %X, Skipped %X" % (short,count,count << 3)
306-
307-
buffer.skip( count << 3 )
303+
flags, extra = buffer.read_byte(), buffer.read_byte()
304+
buffer.skip( (flags&0x0F) << 3 )
308305
return CameraMovementEvent(frames, pid, type, code)
309-
306+
310307
def parse_camera18_event(self, buffer, frames, type, code, pid):
311308
buffer.skip(162)
312309
return CameraMovementEvent(frames, pid, type, code)
@@ -348,6 +345,10 @@ def parse_04X2_event(self, buffer, frames, type, code, pid):
348345
buffer.skip(2)
349346
return UnknownEvent(frames, pid, type, code)
350347

348+
def parse_0488_event(self, buffer, frames, type, code, pid):
349+
buffer.skip(4) #Always 00 00 00 01 ?? or 00 00 00 03
350+
return UnknownEvent(frames, pid, type, code)
351+
351352
def parse_04XC_event(self, buffer, frames, type, code, pid):
352353
#no body
353354
return UnknownEvent(frames, pid, type, code)

sc2reader/readers.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -158,17 +158,18 @@ def read(self, buffer, replay):
158158
start = buffer.cursor
159159

160160
frames += buffer.read_timestamp()
161-
#print frames
162161
pid = buffer.shift(5)
163162
type, code = buffer.shift(3), buffer.read_byte()
164-
#print "%s - %s" % (hex(type),hex(code))
165-
parser = PARSERS[type](code)
166-
163+
#print "Type %X - Code %X - Start %X" % (type,code,start)
164+
165+
parser = PARSERS.get(type,lambda x:None)(code)
166+
167167
if parser == None:
168-
msg = "Unknown event: %s - %s at %s"
169-
raise TypeError(msg % (hex(type), hex(code), hex(start)))
168+
msg = "Unknown event: %X - %X at %X"
169+
raise TypeError(msg % (type, code, start))
170170

171171
event = parser(buffer, frames, type, code, pid)
172+
172173
buffer.align()
173174
event.bytes = buffer.read_range(start,buffer.cursor)
174175
replay.events.append(event)
@@ -200,6 +201,7 @@ def get_unknown4_parser(self, code):
200201
if code == 0x16: return self.parse_0416_event
201202
elif code == 0xC6: return self.parse_04C6_event
202203
elif code == 0x87: return self.parse_0487_event
204+
elif code == 0x88: return self.parse_0488_event
203205
elif code == 0x00: return self.parse_0400_event
204206
elif code & 0x0F == 0x02: return self.parse_04X2_event
205207
elif code & 0x0F == 0x0C: return self.parse_04XC_event

0 commit comments

Comments
 (0)