Files
tp/tools/rebuild-decomp-tp.py
T
Pieter-Jan Briers 853a6addb4 JAudio naming pass (#3139)
* struct JASWaveArc forward declare fix

* JASAramStream::THeader improvement

* sizeof/offsetof unhardcodings

* JAudio field name/comment pass

HUGE thanks to XAYRGA for their work documenting JAudio file formats

* Some more names

* More names

* More minor names

* Attempt to fix regressions
2026-06-19 17:44:05 -07:00

89 lines
2.6 KiB
Python

#!/usr/bin/env python3
import argparse
import os
from pathlib import Path
if os.name == "nt":
DEFAULT_DOLPHIN_CONFIG_PATH = Path(os.getenv('APPDATA')) / "Dolphin Emulator"
else:
DEFAULT_DOLPHIN_CONFIG_PATH = Path("~/.var/app/org.DolphinEmu.dolphin-emu/data/dolphin-emu").expanduser()
def expanded_path(path_str: str):
path = Path(path_str)
path = path.expanduser()
return path
parser = argparse.ArgumentParser()
parser.add_argument(
"vanilla_iso_path",
type=expanded_path,
help="Path to a vanilla Wind Waker ISO to use as a base.",
)
parser.add_argument(
"output_iso_path",
type=expanded_path,
help="Path to put the modified ISO.",
)
parser.add_argument(
"decomp_repo_path",
type=expanded_path,
help="Path to the root of the git repository containing the tww decompilation.",
)
parser.add_argument(
"--map",
type=expanded_path,
default=DEFAULT_DOLPHIN_CONFIG_PATH / "Maps",
help="Folder to place the symbol map for the modified ISO (defaults to Dolphin's maps directory).",
)
args = parser.parse_args()
decomp_build_path = args.decomp_repo_path / "build/GZ2E01"
import sys
import os.path
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "gclib"))
from gclib.gcm import GCM
from gclib.rarc import RARC
from gclib.yaz0_yay0 import Yaz0
from io import BytesIO
import shutil
gcm = GCM(args.vanilla_iso_path)
gcm.read_entire_disc()
rels_arc = RARC(gcm.read_file_data("files/RELS.arc"))
rels_arc.read()
for rel_name in os.listdir(decomp_build_path):
if os.path.isfile(decomp_build_path / rel_name):
continue
if not os.path.isfile(decomp_build_path / rel_name / (rel_name + ".rel")):
continue
decomp_rel_path = decomp_build_path / rel_name / (rel_name + ".rel")
with open(decomp_rel_path, "rb") as f:
decomp_rel_data = BytesIO(f.read())
rel_file_entry = rels_arc.get_file_entry(rel_name.lower() + ".rel")
if rel_file_entry:
rel_file_entry.data = Yaz0.compress(decomp_rel_data)
else:
gcm_rel_file_path = f"files/rel/Final/Release/{rel_name}.rel"
assert gcm_rel_file_path in gcm.files_by_path, f"Invalid REL path: {gcm_rel_file_path}"
gcm.changed_files[gcm_rel_file_path] = decomp_rel_data
rels_arc.save_changes()
gcm.changed_files["files/RELS.arc"] = rels_arc.data
with open(decomp_build_path / "framework.dol", "rb") as f:
gcm.changed_files["sys/main.dol"] = BytesIO(f.read())
with open(decomp_build_path / "framework.elf.MAP", "rb") as f:
gcm.changed_files["files/map/Final/Release/frameworkF.map"] = BytesIO(f.read())
shutil.copy(decomp_build_path / "framework.elf.MAP", args.map / "GZ2E01.map")
for _ in gcm.export_disc_to_iso_with_changed_files(args.output_iso_path): pass
print("Done")