1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-07-05 07:24:34 +00:00

Cleanup: Pass all paths to tools rather than tools constructing them (#2017)

* Pass all paths to tools rather than tools constructing them

* fix: make --baserom-segments required

* sync with mm reviews

* --version everywhere
This commit is contained in:
Dragorn421 2024-09-04 20:49:16 +02:00 committed by GitHub
parent 907e440f3a
commit e833011ccd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
14 changed files with 96 additions and 64 deletions

View file

@ -4,6 +4,7 @@
#
import argparse, re, struct
from pathlib import Path
from typing import Callable, Dict, List, Optional, Tuple, TypeVar
import version_config
@ -189,16 +190,6 @@ def remove_comments(text : str) -> str:
def read4(data : bytes, p : int) -> int:
return struct.unpack(">I", data[p:p+4])[0]
def read_baserom_segment(version : str, name : str) -> bytes:
data = None
with open(f"extracted/{version}/baserom/{name}", "rb") as infile:
data = infile.read()
return data
def write_output_file(version : str, name : str, contents : str):
with open(f"extracted/{version}/text/{name}", "w") as outfile:
outfile.write(contents)
def read_sfx_ids():
sfx_tables = (
(0x0000, "playerbank_table.h"),
@ -760,7 +751,7 @@ class MessageEntry:
return out
def collect_messages(message_tables : List[Optional[MessageTableDesc]], version : str,
def collect_messages(message_tables : List[Optional[MessageTableDesc]], baserom_segments_dir : Path,
config : version_config.VersionConfig, code_vram : int, code_bin : bytes):
messages : Dict[int,MessageEntry] = {}
@ -771,7 +762,7 @@ def collect_messages(message_tables : List[Optional[MessageTableDesc]], version
if desc is None:
continue
baserom_seg = read_baserom_segment(version, desc.seg_name)
baserom_seg = (baserom_segments_dir / desc.seg_name).read_bytes()
code_offset = config.variables[desc.table_name] - code_vram
if desc.parent is None:
@ -829,17 +820,35 @@ def collect_messages(message_tables : List[Optional[MessageTableDesc]], version
def main():
parser = argparse.ArgumentParser(description="Extract text from the baserom into .h files")
parser.add_argument("version", help="OoT version")
parser.add_argument(
"baserom_segments_dir",
type=Path,
help="Directory of uncompressed ROM segments",
)
parser.add_argument(
"output_dir",
type=Path,
help="Output directory to place files in",
)
parser.add_argument(
"-v",
"--version",
dest="oot_version",
required=True,
help="OOT version",
)
args = parser.parse_args()
version : str = args.version
baserom_segments_dir : Path = args.baserom_segments_dir
version : str = args.oot_version
output_dir : Path = args.output_dir
config = version_config.load_version_config(version)
code_vram = config.dmadata_segments["code"].vram
# print(hex(code_vram))
code_bin = read_baserom_segment(version, "code")
code_bin = (baserom_segments_dir / "code").read_bytes()
sfx_ids = read_sfx_ids()
jpn_decoder = MessageDecoderJPN(sfx_ids)
@ -861,8 +870,8 @@ def main():
message_tables[3] = None
message_table_staff = MessageTableDesc("sStaffMessageEntryTable", "staff_message_data_static", nes_decoder, None)
messages = collect_messages(message_tables, version, config, code_vram, code_bin)
staff_messages = collect_messages([message_table_staff], version, config, code_vram, code_bin)
messages = collect_messages(message_tables, baserom_segments_dir, config, code_vram, code_bin)
staff_messages = collect_messages([message_table_staff], baserom_segments_dir, config, code_vram, code_bin)
message_data = []
@ -875,8 +884,8 @@ def main():
message_data = "\n".join(message_data)
message_data_staff = "\n".join(staff_messages[text_id].decode() for text_id in sorted(staff_messages.keys()))
write_output_file(version, "message_data.h", message_data)
write_output_file(version, "message_data_staff.h", message_data_staff)
(output_dir / "message_data.h").write_text(message_data)
(output_dir / "message_data_staff.h").write_text(message_data_staff)
if __name__ == "__main__":
main()