Skip to content
This repository was archived by the owner on Nov 6, 2025. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 43 additions & 37 deletions skadi/demo.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,20 +35,25 @@ def scan(prologue, demo_io, tick=None):

try:
p, m = next(iter_bootstrap)
item = (p, d_io.parse(p.kind, p.compressed, m))
if m:
item = (p, d_io.parse(p.kind, p.compressed, m))

while True:
if p.kind == pb_d.DEM_FullPacket:
full_packets.append(item)
remaining_packets = []
else:
remaining_packets.append(item)
if item:
if p.kind == pb_d.DEM_FullPacket:
full_packets.append(item)
remaining_packets = []
else:
remaining_packets.append(item)

if p.tick >= tick:
break

p, m = next(iter_bootstrap)
item = (p, d_io.parse(p.kind, p.compressed, m))
if m:
item = (p, d_io.parse(p.kind, p.compressed, m))
else:
item = None
except StopIteration:
raise EOFError()

Expand Down Expand Up @@ -126,45 +131,46 @@ def __iter__(self):

while True:
peek, message = next(iter_entries)

if peek.kind == pb_d.DEM_FullPacket:
continue
elif peek.kind == pb_d.DEM_Stop:
raise StopIteration()
else:
pbmsg = d_io.parse(peek.kind, peek.compressed, message)
self.advance(peek.tick, pbmsg)

t = self.tick
um, ge = self.user_messages, self.game_events
w, m = self.world, self.modifiers
yield [t, um, ge, w, m]
if message:
if peek.kind == pb_d.DEM_FullPacket:
continue
elif peek.kind == pb_d.DEM_Stop:
raise StopIteration()
else:
pbmsg = d_io.parse(peek.kind, peek.compressed, message)
self.advance(peek.tick, pbmsg)

t = self.tick
um, ge = self.user_messages, self.game_events
w, m = self.world, self.modifiers
yield [t, um, ge, w, m]

def iterfullticks(self):
iter_entries = iter(self.demo_io)

while True:
peek, message = next(iter_entries)

if peek.kind == pb_d.DEM_Stop:
raise StopIteration()
elif peek.kind != pb_d.DEM_FullPacket:
continue

pro = self.prologue

full_packet = (peek, d_io.parse(peek.kind, peek.compressed, message))
self.world, self.modifiers, self.string_tables = reconstitute(
[full_packet], pro.class_bits, pro.recv_tables, self.string_tables)
self.tick = peek.tick
self.user_messages = []
self.game_events = []
yield [self.tick, self.user_messages, self.game_events, self.world,
self.modifiers]
if message:
if peek.kind == pb_d.DEM_Stop:
raise StopIteration()
elif peek.kind != pb_d.DEM_FullPacket:
continue

pro = self.prologue

full_packet = (peek, d_io.parse(peek.kind, peek.compressed, message))
self.world, self.modifiers, self.string_tables = reconstitute(
[full_packet], pro.class_bits, pro.recv_tables, self.string_tables)
self.tick = peek.tick
self.user_messages = []
self.game_events = []
yield [self.tick, self.user_messages, self.game_events, self.world,
self.modifiers]

def advance(self, tick, pbmsg):
self.tick = tick

if not hasattr(pbmsg, "data"):
return
packet = ie_packet.construct(p_io.construct(pbmsg.data))
am_entries = []

Expand Down
2 changes: 1 addition & 1 deletion skadi/io/protobuf/demo.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ def read(self):
message = self.io.read(size)
else:
# TODO: log here.
print 'unknown kind {}'.format(kind)
#print 'unknown kind {}'.format(kind)
message = None
self.io.read(size)

Expand Down
9 changes: 7 additions & 2 deletions skadi/io/unpacker/prop.py
Original file line number Diff line number Diff line change
Expand Up @@ -155,9 +155,14 @@ def _unpack_array(self, num_elements, array_prop):
return elements

def _unpack_int64(self, flags, num_bits):
#if flags & Flag.EncodedAgainstTickcount:
#raise NotImplementedError('int64 cant be encoded against tickcount')
if flags & Flag.EncodedAgainstTickcount:
raise NotImplementedError('int64 cant be encoded against tickcount')

if flags & Flag.Unsigned:
return self.bitstream.read_varint()
else:
value = self.bitstream.read_varint()
return (-(value & 1)) ^ (value >> 1)
negate = False
second_bits = num_bits - 32

Expand Down