Skip to content

Commit cbb4eae

Browse files
committed
Fixed bugs in resource transfer parsing and added a parser for 04-XC type events.
1 parent 19a8e75 commit cbb4eae

File tree

4 files changed

+21
-11
lines changed

4 files changed

+21
-11
lines changed

sc2reader/objects.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ def __init__(self, data):
6363
self.name, self.value = "Player Type", PLAYER_TYPES[self.value]
6464

6565
elif self.id == 0x07D1:
66-
self.name = "Game Type"
66+
self.name,self.value = "Game Type",''.join(reversed(self.value))
6767

6868
elif self.id == 0x0BB8:
6969
self.name, self.value = "Game Speed", GAME_SPEEDS[self.value]
@@ -244,8 +244,8 @@ class CameraMovementEvent(Event):
244244

245245
class ResourceTransferEvent(Event):
246246
name = 'ResourceTransfer'
247-
def __init__(self, timestamp, player, type, code, target, minerals, vespene):
248-
super(ResourceTransferEvent, self).__init__(timestamp, player, type, code)
247+
def __init__(self, frames, pid, type, code, target, minerals, vespene):
248+
super(ResourceTransferEvent, self).__init__(frames, pid, type, code)
249249
self.sender = pid
250250
self.reciever = target
251251
self.minerals = minerals

sc2reader/parsers.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from itertools import chain
22

33
from sc2reader.objects import *
4+
from sc2reader.utils import BIG_ENDIAN,LITTLE_ENDIAN
45

56
class SetupParser(object):
67
def parse_join_event(self, buffer, frames, type, code, pid):
@@ -120,17 +121,17 @@ def parse_hotkey_event(self, buffer, frames, type, code, pid):
120121
return GetHotkeyEvent(frames, pid, type, code, hotkey, overlay)
121122

122123
def parse_transfer_event(self, buffer, frames, type, code, pid):
123-
def read_resource_amount(buffer):
124+
def read_resource(buffer):
124125
block = buffer.read_int(BIG_ENDIAN)
125126
base, multiplier, extension = block >> 8, block & 0xF0, block & 0x0F
126127
return base*multiplier+extension
127128

128-
target = event.code >> 4
129-
bytes.skip(1) #84
130-
minerals,vespene = read_resource_amount(), read_resource_amount()
131-
bytes.skip(8)
129+
target = code >> 4
130+
buffer.skip(1) #84
131+
minerals,vespene = read_resource(buffer), read_resource(buffer)
132+
buffer.skip(8)
132133

133-
return ResourceTransferEvent(frames, pid, event_type, event_code, target, minerals, vespene)
134+
return ResourceTransferEvent(frames, pid, type, code, target, minerals, vespene)
134135

135136
class Unknown2Parser(object):
136137
def parse_0206_event(self, buffer, frames, type, code, pid):
@@ -194,3 +195,7 @@ def parse_0400_event(self, buffer, frames, type, code, pid):
194195
def parse_04X2_event(self, buffer, frames, type, code, pid):
195196
buffer.skip(2)
196197
return UnknownEvent(frames, pid, type, code)
198+
199+
def parse_04XC_event(self, buffer, frames, type, code, pid):
200+
#no body
201+
return UnknownEvent(frames, pid, type, code)

sc2reader/readers.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,9 @@ def read(self, filecontents, replay):
184184
event = parser(buffer, frames, type, code, pid)
185185
buffer.align()
186186
event.bytes = buffer.read_range(start,buffer.cursor)
187+
188+
print "%s - %s" % (event,event.bytes.encode("hex"))
189+
print "Next: %s" % buffer.peek(10 if 10<buffer.left else buffer.left)
187190
replay.events.append(event)
188191
else:
189192
msg = "Unknown event: %s - %s at %s"
@@ -216,7 +219,8 @@ def get_unknown4_parser(self, code):
216219
elif code == 0xC6: return self.parse_04C6_event
217220
elif code == 0x87: return self.parse_0487_event
218221
elif code == 0x00: return self.parse_0400_event
219-
elif code & 0x0F == 2: return self.parse_04X2_event
222+
elif code & 0x0F == 0x02: return self.parse_04X2_event
223+
elif code & 0x0F == 0x0C: return self.parse_04XC_event
220224

221225
class GameEventsReader(GameEventsBase,Unknown2Parser,Unknown4Parser,ActionParser,SetupParser,CameraParser):
222226
def reads(self, build):

sc2reader/utils.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,9 @@ def seek(self, position, mode=SEEK_SET):
8888
self.last_byte = ord(self.io.read(1))
8989

9090
def peek(self, length):
91-
start,ret = self.cursor,self.read_hex(length)
91+
start,last,ret = self.cursor,self.last_byte,self.read_hex(length)
9292
self.seek(start, SEEK_SET)
93+
self.last_byte = last
9394
return ret
9495

9596
'''

0 commit comments

Comments
 (0)