mirror of
https://github.com/zeldaret/oot.git
synced 2025-05-11 03:23:46 +00:00
dmadata file names no longer hardcoded for gc-eu-mq-dbg
This commit is contained in:
parent
e8e15eca9f
commit
8aaaca4fe0
5 changed files with 32 additions and 1574 deletions
|
@ -238,14 +238,18 @@ class MemoryContext:
|
|||
maps offsets to data
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
def __init__(self, dmadata_table_rom_file_name_by_vrom):
|
||||
self.memory_map = MemoryMap()
|
||||
self.dmadata_table_rom_file_name_by_vrom = dmadata_table_rom_file_name_by_vrom
|
||||
|
||||
def copy(self):
|
||||
other = MemoryContext()
|
||||
other = MemoryContext(self.dmadata_table_rom_file_name_by_vrom)
|
||||
other.memory_map = self.memory_map.copy()
|
||||
return other
|
||||
|
||||
def get_dmadata_table_rom_file_name_from_vrom(self, vromStart, vromEnd):
|
||||
return self.dmadata_table_rom_file_name_by_vrom[(vromStart, vromEnd)]
|
||||
|
||||
def _direct_address_to_offset(self, address: int):
|
||||
segment_num = get_segment_num(address)
|
||||
if segment_num != 0:
|
||||
|
|
|
@ -119,11 +119,13 @@ class ObjectListResource(CDataArrayNamedLengthResource):
|
|||
return f"s16 {self.symbol_name}[{self.length_name}]"
|
||||
|
||||
|
||||
def write_RomFile(resource, memory_context, v, f: io.TextIOBase, line_prefix: str):
|
||||
def write_RomFile(
|
||||
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix: str
|
||||
):
|
||||
assert isinstance(v, dict)
|
||||
vromStart = v["vromStart"]
|
||||
vromEnd = v["vromEnd"]
|
||||
rom_file_name = oot64_data.get_dmadata_table_rom_file_name_from_vrom(
|
||||
rom_file_name = memory_context.get_dmadata_table_rom_file_name_from_vrom(
|
||||
vromStart, vromEnd
|
||||
)
|
||||
f.write(line_prefix)
|
||||
|
|
|
@ -267,9 +267,10 @@ def process_pool_wrapped(extraction_ctx, pd):
|
|||
|
||||
def main():
|
||||
import argparse
|
||||
import re
|
||||
|
||||
# TODO cleanup, command-line argument for version
|
||||
from tools import version_config
|
||||
from tools import dmadata
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument(
|
||||
|
@ -285,13 +286,23 @@ def main():
|
|||
parser.add_argument("-v", dest="oot_version", default="gc-eu-mq-dbg")
|
||||
parser.add_argument("-j", dest="use_multiprocessing", action="store_true")
|
||||
parser.add_argument("-s", dest="single", default=None)
|
||||
parser.add_argument("-r", dest="single_is_regex", default=None, action="store_true")
|
||||
args = parser.parse_args()
|
||||
|
||||
vc = version_config.load_version_config(args.oot_version)
|
||||
|
||||
dma_entries = dmadata.read_dmadata(
|
||||
memoryview((args.baserom_segments_dir / "dmadata").read_bytes()), 0
|
||||
)
|
||||
dmadata_table_rom_file_name_by_vrom = dict()
|
||||
for dma_entry, name in zip(dma_entries, vc.dmadata_segments.keys()):
|
||||
dmadata_table_rom_file_name_by_vrom[
|
||||
(dma_entry.vrom_start, dma_entry.vrom_end)
|
||||
] = name
|
||||
|
||||
pools_desc = get_resources_desc(vc)
|
||||
|
||||
version_memctx_base = MemoryContext()
|
||||
version_memctx_base = MemoryContext(dmadata_table_rom_file_name_by_vrom)
|
||||
|
||||
from .extase_oot64.dlist_resources import MtxResource, TextureResource
|
||||
from ..n64 import G_IM_FMT, G_IM_SIZ
|
||||
|
@ -326,19 +337,23 @@ def main():
|
|||
do_process_pool = False
|
||||
for coll in pool_desc.collections:
|
||||
if isinstance(coll.backing_memory, BaseromFileBackingMemory):
|
||||
if coll.backing_memory.name == args.single:
|
||||
do_process_pool = True
|
||||
if args.single_is_regex:
|
||||
if re.fullmatch(args.single, coll.backing_memory.name):
|
||||
do_process_pool = True
|
||||
else:
|
||||
if coll.backing_memory.name == args.single:
|
||||
do_process_pool = True
|
||||
if do_process_pool:
|
||||
process_pool(extraction_ctx, pool_desc)
|
||||
any_do_process_pool = True
|
||||
if any_do_process_pool:
|
||||
print("OK")
|
||||
print("Done!")
|
||||
else:
|
||||
print("Not found:", args.single)
|
||||
elif not args.use_multiprocessing: # everything on one process
|
||||
for pool_desc in pools_desc:
|
||||
process_pool(extraction_ctx, pool_desc)
|
||||
print("all OK!!!")
|
||||
print("All done!")
|
||||
else: # multiprocessing
|
||||
import multiprocessing
|
||||
|
||||
|
@ -347,7 +362,7 @@ def main():
|
|||
process_pool_wrapped,
|
||||
zip([extraction_ctx] * len(pools_desc), pools_desc),
|
||||
)
|
||||
print("all OK!?")
|
||||
print("All done!")
|
||||
except Exception as e:
|
||||
import traceback
|
||||
import sys
|
||||
|
|
|
@ -76,33 +76,6 @@ def get_scene_id_from_rom_file_name(rom_file_name: str) -> int:
|
|||
return scene_id_by_rom_file_name[rom_file_name]
|
||||
|
||||
|
||||
from . import dmadata_table
|
||||
|
||||
|
||||
def get_dmadata_table_rom_file_names() -> Sequence[str]:
|
||||
return dmadata_table.DATA
|
||||
|
||||
|
||||
dmadata = None
|
||||
|
||||
|
||||
def get_dmadata_table_rom_file_name_from_vrom(vromStart: int, vromEnd: int) -> str:
|
||||
global dmadata
|
||||
if dmadata is None:
|
||||
import struct
|
||||
|
||||
# FIXME handle multiversion
|
||||
with open("extracted/gc-eu-mq-dbg/baserom/dmadata", "rb") as f:
|
||||
bytes = f.read()
|
||||
dmadata = list(struct.iter_unpack(">IIII", bytes))
|
||||
for i, (e_vromStart, e_vromEnd, e_romStart, e_romEnd) in enumerate(dmadata):
|
||||
if e_vromStart == vromStart and e_vromEnd == vromEnd:
|
||||
break
|
||||
if i >= len(dmadata_table.DATA):
|
||||
raise ValueError("Can't find rom file", hex(vromStart), hex(vromEnd))
|
||||
return dmadata_table.DATA[i]
|
||||
|
||||
|
||||
from . import audio_ids
|
||||
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
Loading…
Add table
Reference in a new issue