core_decoder/main.py
2025-02-11 18:31:17 -06:00

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