1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2024-11-25 09:45:02 +00:00

Updated fixbaserom script

- Script now checks ROM header to determine if ROM is byte swapped.
- Checks the hash of the ROM to determine if it's "vanilla".
This commit is contained in:
Jack Walker 2020-03-30 19:38:51 -04:00
parent ec37636a7a
commit d780e6b13e

View file

@ -2,34 +2,33 @@ import os.path
from os import path
import sys
import struct
import hashlib
# Read in the original ROM
if (path.exists("baserom_original.z64")):
print("File 'baserom_original.z64' found.")
with open("baserom_original.z64", mode='rb') as file:
fileContent = file.read()
elif (path.exists("baserom_original.n64")):
print("File 'baserom_original.n64' found.")
print("Byte swapping...")
with open("baserom_original.n64", mode='rb') as file:
fileContent = bytearray(file.read())
# Byte Swap ROM
# TODO: This is pretty slow at the moment. Look into optimizing it later...
i = 0
while (i < len(fileContent)):
tmp = struct.unpack_from("BBBB", fileContent, i)
struct.pack_into("BBBB", fileContent, i + 0, tmp[3], tmp[2], tmp[1], tmp[0])
i += 4
perc = float(i) / float(len(fileContent))
# Check if ROM needs to be byte swapped
if (fileContent[0] == 0x40):
# Byte Swap ROM
# TODO: This is pretty slow at the moment. Look into optimizing it later...
print("ROM needs to be byte swapped...")
i = 0
while (i < len(fileContent)):
tmp = struct.unpack_from("BBBB", fileContent, i)
struct.pack_into("BBBB", fileContent, i + 0, tmp[3], tmp[2], tmp[1], tmp[0])
i += 4
if (i % (1024 * 1024 * 4) == 0):
print(str(perc * 100) + "%")
perc = float(i) / float(len(fileContent))
if (i % (1024 * 1024 * 4) == 0):
print(str(perc * 100) + "%")
print("Byte swapping done.")
print("Byte swapping done.")
else:
print("Error: Could not find a baserom_original.z64 or baserom_original.n64.")
print("Error: Could not find baserom_original.z64.")
sys.exit(1)
# Strip the overdump
@ -40,6 +39,12 @@ strippedContent = list(fileContent[0:0x3600000])
print("Patching header...")
strippedContent[0x3E] = 0x50
# Check to see if the ROM is a "vanilla" Debug ROM
md5Hash = hashlib.md5(bytearray(strippedContent)).hexdigest()
if (str(md5Hash) != "f0b7f35375f9cc8ca1b2d59d78e35405"):
print("Error: Expected a hash of f0b7f35375f9cc8ca1b2d59d78e35405 but got " + str(md5Hash) + ". The baserom is probably not \"vanilla\"")
sys.exit(1)
# Write out our new ROM
print("Writing new ROM 'baserom.z64'.")