48 lines
1.6 KiB
Python
48 lines
1.6 KiB
Python
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
|