summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorAltoXorg2022-10-14 11:49:49 +0800
committerAltoXorg2022-10-14 11:49:49 +0800
commit280a47add7eb676d87479ecb104fbcc8af0afcb7 (patch)
treed2582e29e9b5ac889ee14a2bbae900997f6cfe21
downloadaur-280a47add7eb676d87479ecb104fbcc8af0afcb7.tar.gz
init
-rw-r--r--.SRCINFO14
-rw-r--r--PKGBUILD51
-rwxr-xr-xverify_baserom.py36
3 files changed, 101 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO
new file mode 100644
index 000000000000..09ca6bd35d8a
--- /dev/null
+++ b/.SRCINFO
@@ -0,0 +1,14 @@
+pkgbase = soh-otr-gc_mq_d
+ pkgdesc = OTR game data for SoH (Ocarina of Time Master Quest Debug)
+ pkgver = 1
+ pkgrel = 1
+ url = https://github.com/HarbourMasters/Shipwright
+ arch = any
+ makedepends = soh-otr-exporter
+ depends = soh
+ provides = soh-otr
+ conflicts = soh-otr
+ source = verify_baserom.py
+ sha256sums = bd82ccb54e94505549af7dc07b56dc83b3e63e1c65d525b6fb98ed1b56b8aecf
+
+pkgname = soh-otr-gc_mq_d
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 000000000000..8d7c7dd59044
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,51 @@
+# Maintainer: AltoXorg <atrl101 AT yahoo DOT com>
+
+_romname=gc_mq_d
+_romdesc="Ocarina of Time Master Quest Debug"
+pkgname=soh-otr-${_romname}
+pkgver=1
+pkgrel=1
+pkgdesc="OTR game data for SoH (${_romdesc})"
+arch=("any")
+url="https://github.com/HarbourMasters/Shipwright"
+provides=("soh-otr")
+conflicts=("soh-otr")
+depends=("soh")
+makedepends=("soh-otr-exporter")
+source=("verify_baserom.py")
+sha256sums=('bd82ccb54e94505549af7dc07b56dc83b3e63e1c65d525b6fb98ed1b56b8aecf')
+
+SHIP_PREFIX=/opt/soh
+
+prepare() {
+ cd "${srcdir}"
+
+ if [ ! -e "${startdir}/baserom.z64" ]; then
+ echo "baserom.z64 does not exist in this directory."
+ echo "Please put the ROM in \"${startdir}\"."
+ return 1
+ fi
+
+ cp "${startdir}/baserom.z64" .
+ echo "Checking hash..."
+ ./verify_baserom.py baserom.z64
+}
+
+build() {
+ cd "${srcdir}"
+
+ ln -s ${SHIP_PREFIX}/assets assets
+ mkdir -p Extract/assets
+ cp -r "${SHIP_PREFIX}"/assets/game/* Extract/assets/
+
+ "assets/extractor/ZAPD.out" ed -eh -i "assets/extractor/xmls/${_romname^^}" \
+ -b baserom.z64 -fl "assets/extractor/filelists" -o placeholder -osf placeholder -gsf 1 \
+ -rconf "assets/extractor/Config_${_romname^^}.xml" -se OTR
+}
+
+package() {
+ cd "${srcdir}"
+
+ install -Dm644 oot.otr -t "${pkgdir}/${SHIP_PREFIX}"
+}
+
diff --git a/verify_baserom.py b/verify_baserom.py
new file mode 100755
index 000000000000..e84897c2f9b8
--- /dev/null
+++ b/verify_baserom.py
@@ -0,0 +1,36 @@
+#!/usr/bin/env python3
+import sys
+import hashlib
+
+baseromhash = 'f0b7f35375f9cc8ca1b2d59d78e35405'
+baseromsize = 0x3600000
+
+with open(sys.argv[1], 'rb') as f:
+ filedata = bytearray(f.read(baseromsize))
+
+### BYTEORDER CONVERTS
+## LITTLE ENDIAN (.n64)
+#if filedata[0] == 0x40:
+# filedata[0::4], filedata[1::4], filedata[2::4], filedata[3::4] = \
+# filedata[3::4], filedata[2::4], filedata[1::4], filedata[0::4]
+#
+## BYTE SWAPPED (.v64)
+#elif filedata[0] == 0x37:
+# filedata[0::2], filedata[1::2] = filedata[1::2], filedata[0::2]
+
+orighash = hashlib.md5(filedata).hexdigest()
+
+## ROM PATCHES
+# NZLP HEADER
+filedata[0x3E] = 0x50
+
+# BLACKOUT REMAINING ONES
+filedata[0x35CF000:] = [0xFF] * (len(filedata) - 0x35CF000)
+
+patchedhash = hashlib.md5(filedata).hexdigest()
+
+if patchedhash != baseromhash:
+ print(f"Bad ROM! Expected {baseromhash} but got {patchedhash}.")
+ sys.exit(1)
+
+print("OK! Looks good.")