mirror of
https://github.com/zeldaret/botw
synced 2026-10-09 13:37:01 -04:00
Merge pull request #203 from Pistonight/1.6.0_setup_script
setup: add 1.6.0 back
This commit is contained in:
+32
-23
@@ -18,14 +18,16 @@ TARGET_PATH = setup.get_target_path()
|
||||
TARGET_ELF_PATH = setup.get_target_elf_path()
|
||||
|
||||
|
||||
def _download_latest_to_v150_patch(dest: Path):
|
||||
print(">>>> downloading patch...")
|
||||
urllib.request.urlretrieve("https://s.botw.link/v150_downgrade/v190_to_v150.patch", dest)
|
||||
def _download_downgrade_to_v150_patch(version: str, dest: Path):
|
||||
print(f">>>> downloading patch for {version}...")
|
||||
urllib.request.urlretrieve(f"https://s.botw.link/v150_downgrade/{version}_to_v150.patch", dest)
|
||||
|
||||
|
||||
def prepare_executable(original_nso: Optional[Path]):
|
||||
COMPRESSED_V150_HASH = "898dc199301f7c419be5144bb5cb27e2fc346e22b27345ba3fb40c0060c2baf8"
|
||||
UNCOMPRESSED_V150_HASH = "d9fa308d0ee7c0ab081c66d987523385e1afe06f66731bbfa32628438521c106"
|
||||
COMPRESSED_V160_HASH = "15cfca7b89348956f85d945fade2e215a6af5991ed1071e181f97ca72f7ae20b"
|
||||
UNCOMPRESSED_V160_HASH = "8a2fc8b1111a35a76fd2d53a8670599da4a7a9706a3d91215d30fd62149f00c1"
|
||||
COMPRESSED_V190_HASH = "f6f0b20bb1f2b67d164c24871cd473147eef1d285f12e7bd492e3126c6022e27"
|
||||
UNCOMPRESSED_V190_HASH = "6a30c162a2e6f885e0b1c0a6673a84795549a5ccdec1de8d3a741168ac4cba86"
|
||||
|
||||
@@ -45,33 +47,40 @@ def prepare_executable(original_nso: Optional[Path]):
|
||||
nso_data = original_nso.read_bytes()
|
||||
nso_hash = hashlib.sha256(nso_data).hexdigest()
|
||||
|
||||
if nso_hash == UNCOMPRESSED_V150_HASH:
|
||||
print(">>> found uncompressed 1.5.0 NSO")
|
||||
TARGET_PATH.write_bytes(nso_data)
|
||||
version_matrix = [
|
||||
# SHA256 Compressed? Version
|
||||
(UNCOMPRESSED_V150_HASH, False, "1.5.0"),
|
||||
( COMPRESSED_V150_HASH, True, "1.5.0"),
|
||||
(UNCOMPRESSED_V160_HASH, False, "1.6.0"),
|
||||
( COMPRESSED_V160_HASH, True, "1.6.0"),
|
||||
(UNCOMPRESSED_V190_HASH, False, "1.9.0"),
|
||||
( COMPRESSED_V190_HASH, True, "1.9.0"),
|
||||
]
|
||||
|
||||
elif nso_hash == COMPRESSED_V150_HASH:
|
||||
print(">>> found compressed 1.5.0 NSO")
|
||||
setup._decompress_nso(original_nso, TARGET_PATH)
|
||||
for (expected_hash, is_compressed, version_str) in version_matrix:
|
||||
if nso_hash != expected_hash:
|
||||
continue
|
||||
print(f">>> found {"compressed" if is_compressed else "uncompressed"} {version_str} NSO")
|
||||
|
||||
elif nso_hash == UNCOMPRESSED_V190_HASH:
|
||||
print(">>> found uncompressed 1.9.0 NSO")
|
||||
if version_str == "1.5.0":
|
||||
if is_compressed:
|
||||
setup._decompress_nso(original_nso, TARGET_PATH)
|
||||
else:
|
||||
TARGET_PATH.write_bytes(nso_data)
|
||||
break
|
||||
|
||||
with tempfile.TemporaryDirectory() as tmpdir:
|
||||
patch_path = Path(tmpdir) / "patch"
|
||||
_download_latest_to_v150_patch(patch_path)
|
||||
setup._apply_xdelta3_patch(original_nso, patch_path, TARGET_PATH)
|
||||
patch_version_str = "v" + version_str.replace(".","")
|
||||
_download_downgrade_to_v150_patch(patch_version_str, patch_path)
|
||||
if is_compressed:
|
||||
decompressed_nso_path = Path(tmpdir) / f"{patch_version_str}.nso"
|
||||
setup._decompress_nso(original_nso, decompressed_nso_path)
|
||||
else:
|
||||
decompressed_nso_path = original_nso
|
||||
|
||||
elif nso_hash == COMPRESSED_V190_HASH:
|
||||
print(">>> found compressed 1.9.0 NSO")
|
||||
|
||||
with tempfile.TemporaryDirectory() as tmpdir:
|
||||
patch_path = Path(tmpdir) / "patch"
|
||||
decompressed_nso_path = Path(tmpdir) / "v190.nso"
|
||||
|
||||
setup._decompress_nso(original_nso, decompressed_nso_path)
|
||||
_download_latest_to_v150_patch(patch_path)
|
||||
setup._apply_xdelta3_patch(decompressed_nso_path, patch_path, TARGET_PATH)
|
||||
|
||||
break
|
||||
else:
|
||||
setup.fail(f"unknown executable: {nso_hash}")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user