File indexing completed on 2025-02-16 06:46:31
0001 #!/usr/bin/env python3 0002 # SPDX-FileCopyrightText: 2020 Volker Krause <vkrause@kde.org> 0003 # SPDX-License-Identifier: LGPL-2.0-or-later 0004 0005 import argparse 0006 import sys 0007 0008 parser = argparse.ArgumentParser(description='Inspect Tirex Metatiles') 0009 parser.add_argument('metatile', nargs=1, help='Metatile file') 0010 parser.add_argument('--list', help='List table of contents of the given metatile', action='store_true') 0011 parser.add_argument('--extract', nargs=1, type=int, help='Extract the given sub-tile data') 0012 arguments = parser.parse_args() 0013 0014 tile = open(arguments.metatile[0], 'rb') 0015 tiledata = tile.read() 0016 if not tiledata[0:4] == b'META': 0017 print('Not a metatile file') 0018 sys.exit(1) 0019 0020 count = int.from_bytes(tiledata[4:8], byteorder='little') 0021 x = int.from_bytes(tiledata[8:12], byteorder='little') 0022 y = int.from_bytes(tiledata[12:16], byteorder='little') 0023 z = int.from_bytes(tiledata[16:20], byteorder='little') 0024 0025 entries = [] 0026 for i in range(count): 0027 offset = int.from_bytes(tiledata[(20+i*8):(24+i*8)], byteorder='little') 0028 size = int.from_bytes(tiledata[(24+i*8):(28+i*8)], byteorder='little') 0029 entries.append((offset, size)) 0030 0031 if arguments.list: 0032 print(f"Count: {count}\nX: {x}\nY: {y}\nZ: {z}\nEntries:") 0033 for i in range(count): 0034 print(f" {i}: Offset: {entries[i][0]}, Size: {entries[i][1]}") 0035 sys.exit(0) 0036 0037 if arguments.extract[0] < 0 or arguments.extract[0] > count: 0038 print('Tile index out of range') 0039 sys.exit(1) 0040 0041 idx = arguments.extract[0] 0042 entry = entries[idx] 0043 sys.stdout.buffer.write(tiledata[entry[0]:(entry[0]+entry[1])])