Created
January 16, 2016 17:30
-
-
Save lf94/296de608f1d647acf20e to your computer and use it in GitHub Desktop.
Change Oot:DBG intro
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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