From 4eefcc227bd3ed79385c615ce1acfc207454eb05 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Thu, 22 Aug 2019 02:59:24 +0200 Subject: [PATCH] Fix strings being parsed incorrectly: they use ULEB128! --- lihzahrd/fileutils/filereader.py | 21 ++++++++++++--------- lihzahrd/world.py | 6 +++--- setup.py | 2 +- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/lihzahrd/fileutils/filereader.py b/lihzahrd/fileutils/filereader.py index d25dd75..d907c80 100644 --- a/lihzahrd/fileutils/filereader.py +++ b/lihzahrd/fileutils/filereader.py @@ -57,18 +57,21 @@ class FileReader: left, right, top, bottom = struct.unpack("iiii", self.file.read(16)) return Rect(left, right, top, bottom) - def leb128(self) -> int: - byte = self.uint1() - while byte & 0b1000_0000: - byte = byte & 0b0111_1111 - byte = byte << 7 - byte = byte | self.uint1() - # TODO - raise NotImplementedError("TODO") + def uleb128(self) -> int: + times = 0 + value = 0 + more = True + while more: + byte = self.uint1() + shifted_byte = (byte & 0b0111_1111) << (7 * times) + times += 1 + value += shifted_byte + more = bool(byte & 0b1000_0000) + return value def string(self, size=None) -> str: if size is None: - size = self.leb128() + size = self.uleb128() return str(self.file.read(size), encoding="latin1") def uuid(self) -> uuid.UUID: diff --git a/lihzahrd/world.py b/lihzahrd/world.py index 1a10cf4..350b422 100644 --- a/lihzahrd/world.py +++ b/lihzahrd/world.py @@ -547,7 +547,7 @@ class World: unknown_world_header_data = f.read_until(pointers.world_tiles) # Tiles - #`tm = cls._create_tilematrix(f, world_size, tileframeimportant) + tm = cls._create_tilematrix(f, world_size, tileframeimportant) unknown_world_tiles_data = f.read_until(pointers.chests) @@ -577,7 +577,7 @@ class World: name=chest_name, contents=chest_contents) chests.append(chest) - #`tm[chest.position].extra = chest + tm[chest.position].extra = chest unknown_chests_data = f.read_until(pointers.signs) @@ -590,7 +590,7 @@ class World: sign = Sign(text=f.string(), position=Coordinates(f.int4(), f.int4())) signs.append(sign) - #`tm[sign.position].extra = sign + tm[sign.position].extra = sign unknown_signs_data = f.read_until(pointers.npcs) diff --git a/setup.py b/setup.py index 966162f..743ba18 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ with open("README.md", "r") as f: setuptools.setup( name="lihzahrd", - version="1.0b5", + version="1.0b6", author="Stefano Pigozzi", author_email="ste.pigozzi@gmail.com", description="A Terraria world parser in Python",