happyleavesaoc / aoc-mgz

Age of Empires II recorded game parsing and summarization in Python 3.
MIT License
197 stars 42 forks source link

Newest version of DE breaks parser #32

Closed Arxian closed 3 years ago

Arxian commented 3 years ago

Something's changed in the replay format that I don't quite have the savvy to comprehend, which causes parsing to flip out.

Running through body.operation.parse_stream in a normal (I think) fashion yields this traceback:

Traceback (most recent call last):
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 506, in _parse
    return packer.unpack(self.fmtstr, _read_stream(stream, self.sizeof()))[0]
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 69, in _read_stream
    raise FieldError("could not read enough bytes, expected %d, found %d" % (length, len(data)))
construct.core.FieldError: could not read enough bytes, expected 4, found 1

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 2784, in _parse
    return self.subcon._parse(stream, context, path)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 508, in _parse
    raise FieldError("packer %r error during parsing" % self.fmtstr)
construct.core.FieldError: packer '<f' error during parsing

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 1042, in _parse
    obj.append(self.subcon._parse(stream, context._, path))
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 2784, in _parse
    return self.subcon._parse(stream, context, path)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 867, in _parse
    subobj = sc._parse(stream, context, path)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 2784, in _parse
    return self.subcon._parse(stream, context, path)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 867, in _parse
    subobj = sc._parse(stream, context, path)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 2788, in _parse
    raise e.__class__("%s\n    %s" % (e, path))
construct.core.FieldError: packer '<f' error during parsing
    (parsing) -> initial -> players -> objects -> objects -> properties -> combat -> ai -> ai -> order_history -> order_history -> target_position -> x

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 2784, in _parse
    return self.subcon._parse(stream, context, path)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 1050, in _parse
    raise RangeError("expected %d to %d, found %d" % (min, max, len(obj)))
construct.core.RangeError: expected 3473408 to 3473408, found 55951

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 1042, in _parse
    obj.append(self.subcon._parse(stream, context._, path))
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 2784, in _parse
    return self.subcon._parse(stream, context, path)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 867, in _parse
    subobj = sc._parse(stream, context, path)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 295, in _parse
    return self.subcon._parse(stream, context, path)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 1594, in _parse
    obj = self.cases.get(key, self.default)._parse(stream, context, path)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 867, in _parse
    subobj = sc._parse(stream, context, path)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 2784, in _parse
    return self.subcon._parse(stream, context, path)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\mgz\util.py", line 223, in _parse
    subobj = self.subcon._parse(stream, context, path)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 2784, in _parse
    return self.subcon._parse(stream, context, path)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 867, in _parse
    subobj = sc._parse(stream, context, path)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 295, in _parse
    return self.subcon._parse(stream, context, path)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 2784, in _parse
    return self.subcon._parse(stream, context, path)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 1594, in _parse
    obj = self.cases.get(key, self.default)._parse(stream, context, path)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 2784, in _parse
    return self.subcon._parse(stream, context, path)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 867, in _parse
    subobj = sc._parse(stream, context, path)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 2784, in _parse
    return self.subcon._parse(stream, context, path)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 1594, in _parse
    obj = self.cases.get(key, self.default)._parse(stream, context, path)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 2784, in _parse
    return self.subcon._parse(stream, context, path)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 867, in _parse
    subobj = sc._parse(stream, context, path)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 2788, in _parse
    raise e.__class__("%s\n    %s" % (e, path))
construct.core.RangeError: expected 3473408 to 3473408, found 55951
    (parsing) -> initial -> players -> objects -> objects -> properties -> combat -> ai -> ai -> order_history

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 2784, in _parse
    return self.subcon._parse(stream, context, path)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 867, in _parse
    subobj = sc._parse(stream, context, path)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 1050, in _parse
    raise RangeError("expected %d to %d, found %d" % (min, max, len(obj)))
construct.core.RangeError: expected 3 to 3, found 0

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\Arx\Documents\Python Scratch\se-mgzparse.py", line 11, in <module>
    header = header.parse_stream(data)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 171, in parse_stream
    return self._parse(stream, context2, "(parsing)")
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 867, in _parse
    subobj = sc._parse(stream, context, path)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 295, in _parse
    return self.subcon._parse(stream, context, path)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 867, in _parse
    subobj = sc._parse(stream, context, path)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 295, in _parse
    return self.subcon._parse(stream, context, path)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\mgz\util.py", line 57, in _parse
    return self.subcon._parse(new_stream, context, path)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 357, in _parse
    return self.subcon.parse(data, context)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 158, in parse
    return self.parse_stream(BytesIO(data), context, **kw)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 171, in parse_stream
    return self._parse(stream, context2, "(parsing)")
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 867, in _parse
    subobj = sc._parse(stream, context, path)
  File "C:\Users\Arx\AppData\Local\Programs\Python\Python36\lib\site-packages\construct\core.py", line 2788, in _parse
    raise e.__class__("%s\n    %s" % (e, path))
construct.core.RangeError: expected 3 to 3, found 0
    (parsing) -> initial

This might already be on someone's radar, but if not, here it is.

Skazu commented 3 years ago

Which version of aoc-mgz did you use? Maybe try installing it directly from master. If this didn't work either, can you provide a match id or the savegame?

Arxian commented 3 years ago

When I opened the issue it was through pip; I then installed from git and got a different error. The latest PR seems to have fixed it, though, so I'm going to go ahead and close the issue.