Skip to content

Instantly share code, notes, and snippets.

@lf94
Created January 16, 2016 17:30
Show Gist options
  • Save lf94/296de608f1d647acf20e to your computer and use it in GitHub Desktop.
Save lf94/296de608f1d647acf20e to your computer and use it in GitHub Desktop.
Change Oot:DBG intro
#!/usr/bin/python3
import sys
import os
from struct import *
import mmap
def changeIntroLogo():
emptySpaceAddress = 0x01AA1000 # 0x035CF000
fileSize = os.path.getsize(sys.argv[2])
startAddress = pack(">I", emptySpaceAddress)
endAddress = pack(">I", emptySpaceAddress + fileSize)
zeroedAddress = pack("I", 0x00000000)
displayListEntry = pack(">I", (int(sys.argv[3], 16)+0x01000000))
print(hex((int(sys.argv[3], 16)+0x01000000)))
print("Start: {0} End: {1}".format(hex(emptySpaceAddress), hex(emptySpaceAddress+fileSize)))
with open(sys.argv[1], "r+b") as ROMHandle:
ROMMap = mmap.mmap(ROMHandle.fileno(), 0)
with open(sys.argv[2], "r+b") as zobjFile:
zobjMap = mmap.mmap(zobjFile.fileno(), 0)
ROMMap[emptySpaceAddress:emptySpaceAddress+fileSize] = zobjMap.read(fileSize)
zobjMap.close()
print("Modifying logo file entry...")
nintendoRogoFileEntry = 0x16A10
address = nintendoRogoFileEntry
ROMMap[address+0x00:address+0x04] = startAddress
ROMMap[address+0x04:address+0x08] = endAddress
ROMMap[address+0x08:address+0x0C] = startAddress
ROMMap[address+0x0C:address+0x10] = zeroedAddress
print("Modifying logo file entry ovl_title constants...")
ovlTitleNintendoRogoConstantAddresses = 0xBCF7AC
address = ovlTitleNintendoRogoConstantAddresses
ROMMap[address+0x0+2:address+0x0+4] = startAddress[0:2]
ROMMap[address+0xC+2:address+0xC+4] = startAddress[2:]
ROMMap[address+0x4+2:address+0x4+4] = endAddress[0:2]
ROMMap[address+0x8+2:address+0x8+4] = endAddress[2:]
print("Modifying ovl_title logo display list entry constant...")
ovlTitleNintendoRogoDLAddress = 0xBCF294
address = ovlTitleNintendoRogoDLAddress
ROMMap[address+0x0+2:address+0x0+4] = bytearray([0x01, 0x00])
ROMMap[address+0xC+2:address+0xC+4] = displayListEntry[2:]
nintendoRogoTextureAddress = 0xBCF394
address = nintendoRogoTextureAddress
ROMMap[address+0x0+2:address+0x0+4] = zeroedAddress[0:2]
address = 0xBCF464 # size? 0x5E (94)
ROMMap[address+0x0+2:address+0x0+4] = bytearray([0x00, 0x5E])
address = 0xBCF474 # size? 0x180 (384)
ROMMap[address+0x0+2:address+0x0+4] = zeroedAddress[0:2]
print("Intro model replacement completed.")
if len(sys.argv) != 4:
print("Usage: change-intro.py <Master Quest DB ROM> <zobj> <display list entry>")
print(sys.argv)
else:
changeIntroLogo()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment