started implementing main.dol and StaticR.rel patching

This commit is contained in:
Faraphel 2022-07-15 00:05:54 +02:00
parent ea79f49121
commit 7f5e709aec
4 changed files with 39 additions and 6 deletions

View file

@ -0,0 +1,4 @@
{
"mode": "edit",
"base": "sys/main.dol.json"
}

View file

@ -7,7 +7,7 @@ from PIL import Image, ImageDraw, ImageFont
from source.mkw.Patch import * from source.mkw.Patch import *
from source.wt import img, bmg from source.wt import img, bmg
from source.wt import str as wstrt from source.wt import wstrt as wstrt
Patch: any Patch: any
Layer: any Layer: any
@ -405,10 +405,10 @@ class PatchOperation:
patch_content = BytesIO( patch_content = BytesIO(
wstrt.patch_data( wstrt.patch_data(
file_content.read(), file_content.read(),
self.region, region=self.region,
self.https, https=self.https,
self.domain, domain=self.domain,
checked_sections sections=checked_sections
) )
) )

View file

@ -25,9 +25,38 @@ def patch_data(dol_data: bytes, region: int = None, https: str = None, domain: s
for section in sections if sections is not None else []: for section in sections if sections is not None else []:
args.extend(["--add-section", section]) args.extend(["--add-section", section])
process = _tools_run_popen("PATCH", "-", "--DEST", "-", "--clean-dol", "--add-lecode", *args) process = _tools_run_popen("PATCH", "-", "--DEST", "-", *args)
stdout, _ = process.communicate(input=dol_data) stdout, _ = process.communicate(input=dol_data)
if process.returncode != 0: if process.returncode != 0:
raise WTError(tools_path, process.returncode) raise WTError(tools_path, process.returncode)
return stdout return stdout
class StrPath:
"""
File representing a main.dol file
"""
__slots__ = ("path",)
def __init__(self, path: "Path | str"):
self.path: Path = Path(path)
def patch(self, clean_dol: bool = False, add_lecode: bool = False,
region: int = None, https: str = None, domain: str = None,
sections: list[Path] = None) -> None:
"""
See "patch_data". Also patch StaticR.rel.
:return:
"""
args = []
if clean_dol: args.append("--clean-dol")
if add_lecode: args.append("--add-lecode")
if region is not None: args.extend(["--region", region])
if https is not None: args.extend(["--https", https])
if domain is not None: args.extend(["--domain", domain])
for section in sections if sections is not None else []:
args.extend(["--add-section", section])
_tools_run("PATCH", self.path, (self.path / "../../files/rel/StaticR.rel").resolve(), "--overwrite", *args)