Skip to content

Commit 140e167

Browse files
committed
TypeTreeHelper - replace 0x4000 with kAlignBytes
1 parent 2a1e007 commit 140e167

1 file changed

Lines changed: 14 additions & 18 deletions

File tree

UnityPy/helpers/TypeTreeHelper.py

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import tabulate
55
from ..exceptions import TypeTreeError as TypeTreeError
66

7+
kAlignBytes = 0x4000
78

89
class TypeTreeNode(object):
910
__slots__ = (
@@ -176,17 +177,12 @@ def read_typetree(
176177
nodes, reader.read_bytes(reader.byte_size), reader.endian
177178
)
178179

179-
obj = {}
180-
i = c_uint32(1)
181-
while i.value < len(nodes):
182-
node = nodes[i.value]
183-
obj[node.name] = read_value(nodes, reader, i)
184-
i.value += 1
180+
obj = read_value(nodes, reader, c_uint32(0))
185181

186-
readed = reader.Position - reader.byte_start
187-
if readed != reader.byte_size:
182+
read = reader.Position - reader.byte_start
183+
if read != reader.byte_size:
188184
raise TypeTreeError(
189-
f"Error while read type, read {readed} bytes but expected {reader.byte_size} bytes",
185+
f"Error while read type, read {read} bytes but expected {reader.byte_size} bytes",
190186
nodes,
191187
)
192188

@@ -196,7 +192,7 @@ def read_typetree(
196192
def read_value(nodes: List[TypeTreeNode], reader: EndianBinaryReader, i: c_uint32):
197193
node = nodes[i.value]
198194
typ = node.type
199-
align = (node.meta_flag & 0x4000) != 0
195+
align = (node.meta_flag & kAlignBytes) != 0
200196

201197
if typ == "SInt8":
202198
value = reader.read_byte()
@@ -224,7 +220,7 @@ def read_value(nodes: List[TypeTreeNode], reader: EndianBinaryReader, i: c_uint3
224220
value = reader.read_aligned_string()
225221
i.value += 3 # Array, Size, Data(typ)
226222
elif typ == "map": # map == MultiDict
227-
if (nodes[i.value + 1].meta_flag & 0x4000) != 0:
223+
if (nodes[i.value + 1].meta_flag & kAlignBytes) != 0:
228224
align = True
229225
map_ = get_nodes(nodes, i.value)
230226
i.value += len(map_) - 1
@@ -242,7 +238,7 @@ def read_value(nodes: List[TypeTreeNode], reader: EndianBinaryReader, i: c_uint3
242238
else:
243239
# Vector
244240
if i.value < len(nodes) - 1 and nodes[i.value + 1].type == "Array":
245-
if (nodes[i.value + 1].meta_flag & 0x4000) != 0:
241+
if (nodes[i.value + 1].meta_flag & kAlignBytes) != 0:
246242
align = True
247243
vector = get_nodes(nodes, i.value)
248244
i.value += len(vector) - 1
@@ -305,7 +301,7 @@ def read_value_str(
305301
) -> list:
306302
node = nodes[i.value]
307303
typ = node.type
308-
align = (node.meta_flag & 0x4000) != 0
304+
align = (node.meta_flag & kAlignBytes) != 0
309305
append = True
310306

311307
if typ == "SInt8":
@@ -340,7 +336,7 @@ def read_value_str(
340336
)
341337
)
342338
elif typ == "map":
343-
if (nodes[i.value + 1].meta_flag & 0x4000) != 0:
339+
if (nodes[i.value + 1].meta_flag & kAlignBytes) != 0:
344340
align = True
345341
map_ = get_nodes(nodes, i.value)
346342
i.value += len(map_) - 1
@@ -370,7 +366,7 @@ def read_value_str(
370366
else:
371367
# Vector
372368
if i.value < len(nodes) - 1 and nodes[i.value + 1].type == "Array":
373-
if (nodes[i.value + 1].meta_flag & 0x4000) != 0:
369+
if (nodes[i.value + 1].meta_flag & kAlignBytes) != 0:
374370
align = True
375371
vector = get_nodes(nodes, i.value)
376372
i.value += len(vector) - 1
@@ -466,7 +462,7 @@ def write_value(
466462
):
467463
node = nodes[i.value]
468464
typ = node.type
469-
align = (node.meta_flag & 0x4000) != 0
465+
align = (node.meta_flag & kAlignBytes) != 0
470466

471467
if typ == "SInt8":
472468
writer.write_byte(value)
@@ -494,7 +490,7 @@ def write_value(
494490
writer.write_aligned_string(value)
495491
i.value += 3 # Array, Size, Data(typ)
496492
elif typ == "map":
497-
if (nodes[i.value + 1].meta_flag & 0x4000) != 0:
493+
if (nodes[i.value + 1].meta_flag & kAlignBytes) != 0:
498494
align = True
499495
map_ = get_nodes(nodes, i.value)
500496
i.value += len(map_) - 1
@@ -514,7 +510,7 @@ def write_value(
514510
else:
515511
# Vector
516512
if i.value < len(nodes) - 1 and nodes[i.value + 1].type == "Array":
517-
if (nodes[i.value + 1].meta_flag & 0x4000) != 0:
513+
if (nodes[i.value + 1].meta_flag & kAlignBytes) != 0:
518514
align = True
519515
vector = get_nodes(nodes, i.value)
520516
i.value += len(vector) - 1

0 commit comments

Comments
 (0)