diff --git a/.gitignore b/.gitignore index a01307c6b1..5f1493e3eb 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,8 @@ baserom/ *.elf *.sra *.z64 +*.n64 +*.v64 *.map *.dump out.txt diff --git a/Jenkinsfile b/Jenkinsfile index 2247df2d6a..b7845d0b77 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -5,13 +5,11 @@ pipeline { stage('Setup') { steps { echo 'Setting up...' - sh 'cp /usr/local/etc/roms/baserom_oot.z64 baserom.z64' + sh 'cp /usr/local/etc/roms/baserom_oot.z64 baserom_original.z64' sh 'git submodule update --init --recursive' - sh 'make -C tools' sh 'cp -r /usr/local/etc/ido/ido7.1_compiler tools/ido7.1_compiler' sh 'chmod +x -R tools/ido*' - sh 'python3 extract_baserom.py' - sh 'python3 extract_assets.py' + sh 'make setup' } } stage('Build') { diff --git a/README.md b/README.md index 47df5289e6..46f963b68a 100644 --- a/README.md +++ b/README.md @@ -14,8 +14,6 @@ This repo does not include all assets necessary for compiling the ROM. A prior c This is a disassembly and decompilation of Legend of Zelda: Ocarina of Time Master Quest (debug) It builds the following ROM: -* zelda_ocarina_mq_dbg.z64 `md5: 717179476af84133b14ff73af87db57a` +* zelda_ocarina_mq_dbg.z64 `md5: f0b7f35375f9cc8ca1b2d59d78e35405` -Please refer to the Getting Started guide in the Wiki for setup instructions. - -Thanks to z64me and CrookedPoe for their actor documentation. https://github.com/CrookedPoe/z64-rw +Please refer to the Getting Started guide in the Wiki for setup instructions. \ No newline at end of file diff --git a/THANKS.md b/THANKS.md new file mode 100644 index 0000000000..13b9dbc43e --- /dev/null +++ b/THANKS.md @@ -0,0 +1 @@ +Thanks to z64me and CrookedPoe for their actor documentation. https://github.com/CrookedPoe/z64-rw \ No newline at end of file diff --git a/checksum.md5 b/checksum.md5 index 98da4b6798..4483a7ce34 100644 --- a/checksum.md5 +++ b/checksum.md5 @@ -1 +1 @@ -717179476af84133b14ff73af87db57a zelda_ocarina_mq_dbg.z64 +f0b7f35375f9cc8ca1b2d59d78e35405 zelda_ocarina_mq_dbg.z64 \ No newline at end of file diff --git a/fixbaserom.py b/fixbaserom.py new file mode 100644 index 0000000000..3cc67be0a8 --- /dev/null +++ b/fixbaserom.py @@ -0,0 +1,63 @@ +import os.path +from os import path +import sys +import struct +import hashlib + + +# Determine if we have a ROM file +romFileName = "" +if (path.exists("baserom_original.z64")): + romFileName = "baserom_original.z64" +elif (path.exists("baserom_original.n64")): + romFileName = "baserom_original.n64" + +# Read in the original ROM +if (romFileName != ""): + print("File '" + romFileName + "' found.") + with open(romFileName, mode='rb') as file: + fileContent = bytearray(file.read()) + + # 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 + + perc = float(i) / float(len(fileContent)) + + if (i % (1024 * 1024 * 4) == 0): + print(str(perc * 100) + "%") + + print("Byte swapping done.") +else: + print("Error: Could not find baserom_original.z64/baserom_original.n64.") + sys.exit(1) + +# Strip the overdump +print("Stripping overdump...") +strippedContent = list(fileContent[0:0x3600000]) + +# Patch the header +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'.") +with open("baserom.z64", mode="wb") as file: + file.write(bytes(strippedContent)) + +print("Done!") + diff --git a/makefile b/makefile index 55ba473563..2272230b53 100644 --- a/makefile +++ b/makefile @@ -129,6 +129,11 @@ build/undefined_syms.txt: undefined_syms.txt clean: $(RM) $(ROM) $(ELF) -r build +setup: + make -C tools + python3 fixbaserom.py + python3 extract_baserom.py + python3 extract_assets.py #### Various Recipes ####