from pprint import pprint import sys from holly import decode_holly from region_array import decode_region_array_entries from object_list import * texture_memory_filename = sys.argv[1] holly_registers_filename = sys.argv[2] with open(texture_memory_filename, "rb") as f: texture_memory = memoryview(f.read()) with open(holly_registers_filename, "rb") as f: holly_registers = memoryview(f.read()) holly = decode_holly(holly_registers) assert (holly.REGION_BASE & 0b11) == 0, holly.REGION_BASE region_array_entries = decode_region_array_entries(texture_memory, holly.REGION_BASE) for entry in region_array_entries: lists = [ ("opaque_list_pointer", entry.opaque_list_pointer), ("opaque_modifier_volume_list_pointer", entry.opaque_modifier_volume_list_pointer), ("translucent_list_pointer", entry.translucent_list_pointer), ("translucent_modifier_volume_list_pointer", entry.translucent_modifier_volume_list_pointer), ("punch_through_list_pointer", entry.punch_through_list_pointer), ] print(entry.tile) for list_type_name, list_pointer in lists: print(" " * 4, end='') print(list_type_name, list_pointer) if list_pointer.empty_ptr: continue offset = list_pointer.pointer_to_object_list while True: ol_entry = decode_ol_entry(texture_memory, offset) print(" " * 8, end='') print(ol_entry) offset += 4 if type(ol_entry) == object_pointer_block_link: if ol_entry.end_of_list: break else: offset = ol_entry.next_pointer_block