1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-08-24 16:01:26 +00:00

introduce RawPointers xml attribute to ignore specific pointers and keep them raw

This commit is contained in:
Dragorn421 2025-02-09 12:19:44 +01:00
parent 6b857c6c71
commit bb7215b25a
No known key found for this signature in database
GPG key ID: 381AEBAF3D429335
6 changed files with 49 additions and 5 deletions

View file

@ -645,6 +645,7 @@ def gfxdis(
def timg_callback_wrapper(timg, fmt, siz, width, height, pal):
try:
ret = timg_callback(timg, fmt, siz, width, height, pal)
assert isinstance(ret, int)
except:
import sys
@ -1096,6 +1097,7 @@ class DListResource(Resource, can_size_be_unknown=True):
):
super().__init__(file, range_start, None, name)
self.target_ucode = target_ucode
self.ignored_raw_pointers: set[int] = set()
def try_parse_data(self, memory_context):
offset = self.range_start
@ -1104,6 +1106,9 @@ class DListResource(Resource, can_size_be_unknown=True):
print(self.name, hex(offset))
def vtx_cb(vtx, num):
if vtx in self.ignored_raw_pointers:
return 0
# TODO be smarter about buffer merging
# (don't merge buffers from two different DLs, if they can be split cleanly)
# if that even happens
@ -1122,6 +1127,9 @@ class DListResource(Resource, can_size_be_unknown=True):
)
def timg_cb(timg, fmt, siz, width, height, pal):
if timg in self.ignored_raw_pointers:
return 0
g_fmt = G_IM_FMT.by_i[fmt]
g_siz = G_IM_SIZ.by_i[siz]
@ -1145,10 +1153,16 @@ class DListResource(Resource, can_size_be_unknown=True):
return 0
def tlut_cb(tlut, idx, count):
if tlut in self.ignored_raw_pointers:
return 0
ci_tex_manager.tlut(tlut, idx, count)
return 0
def mtx_cb(mtx):
if mtx in self.ignored_raw_pointers:
return 0
memory_context.report_resource_at_segmented(
self,
mtx,
@ -1160,6 +1174,9 @@ class DListResource(Resource, can_size_be_unknown=True):
return 0
def dl_cb(dl):
if dl in self.ignored_raw_pointers:
return 0
memory_context.report_resource_at_segmented(
self,
dl,
@ -1346,10 +1363,16 @@ class DListResource(Resource, can_size_be_unknown=True):
pygfxd.gfxd_arg_dflt(arg_num)
def vtx_cb(vtx, num):
if vtx in self.ignored_raw_pointers:
return 0
pygfxd.gfxd_puts(memory_context.get_c_reference_at_segmented(vtx))
return 1
def timg_cb(timg, fmt, siz, width, height, pal):
if timg in self.ignored_raw_pointers:
return 0
try:
timg_c_ref = memory_context.get_c_reference_at_segmented(timg)
# except NoSegmentBaseError: # TODO
@ -1371,16 +1394,25 @@ class DListResource(Resource, can_size_be_unknown=True):
return 0
def tlut_cb(tlut, idx, count):
if tlut in self.ignored_raw_pointers:
return 0
tlut_c_ref = memory_context.get_c_reference_at_segmented(tlut)
pygfxd.gfxd_puts(tlut_c_ref)
return 1
def mtx_cb(mtx):
if mtx in self.ignored_raw_pointers:
return 0
mtx_c_ref = memory_context.get_c_reference_at_segmented(mtx)
pygfxd.gfxd_puts(mtx_c_ref)
return 1
def dl_cb(dl):
if dl in self.ignored_raw_pointers:
return 0
dl_c_ref = memory_context.get_c_reference_at_segmented(dl)
pygfxd.gfxd_puts(dl_c_ref)
return 1

View file

@ -234,7 +234,7 @@ def register_resource_handlers():
file: File,
resource_desc: n64resources.DListResourceDesc,
):
return dlist_resources.DListResource(
res = dlist_resources.DListResource(
file,
resource_desc.offset,
resource_desc.symbol_name,
@ -243,6 +243,8 @@ def register_resource_handlers():
n64resources.GfxMicroCode.F3DEX2: dlist_resources.Ucode.f3dex2,
}[resource_desc.ucode],
)
res.ignored_raw_pointers |= resource_desc.raw_pointers
return res
def texture_resource_handler(
file: File, resource_desc: n64resources.TextureResourceDesc