Last active
July 24, 2018 16:06
-
-
Save blackknight36/2744cbc6071fac0a909b5b9c275ce1cf to your computer and use it in GitHub Desktop.
This file contains hidden or 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/env python | |
# This script copies character sprite data from the source ROM into the destination ROM. | |
#All sprites are 0x200 in size (ie 0x25000-0x251FF) | |
#Fighter = 0x25000 Knight = 0x25C00 | |
#Thief = 0x25200 Ninja = 0x25E00 | |
#BlackBelt = 0x25400 Master = 0x26000 | |
#RedMage = 0x25600 RedWizard = 0x26200 | |
#WhiteMage = 0x25800 WhiteWizard = 0x26400 | |
#BlackMage = 0x25A00 BlackWizard = 0x26600 | |
import sys | |
if len(sys.argv) < 2: | |
print("Usage: copy_sprites.py <source> <destination>") | |
sys.exit(1) | |
else: | |
source_rom = sys.argv[1] | |
dest_rom = sys.argv[2] | |
sprites = { | |
'fighter' : { 'offset': 0x25000, 'data': b'' }, | |
'knight' : { 'offset': 0x25C00, 'data': b'' }, | |
'thief' : { 'offset': 0x25200, 'data': b'' }, | |
'ninja' : { 'offset': 0x25E00, 'data': b'' }, | |
'blackbelt' : { 'offset': 0x25400, 'data': b'' }, | |
'master' : { 'offset': 0x26000, 'data': b'' }, | |
'redmage' : { 'offset': 0x25600, 'data': b'' }, | |
'redwizard' : { 'offset': 0x26200, 'data': b'' }, | |
'whitemage' : { 'offset': 0x25800, 'data': b'' }, | |
'whitewiz' : { 'offset': 0x26400, 'data': b'' }, | |
'blackmage' : { 'offset': 0x25A00, 'data': b'' }, | |
'blackwiz' : { 'offset': 0x26600, 'data': b'' }, | |
} | |
# Read sprite data into memory | |
with open(source_rom, 'r+b') as f: | |
for k in sprites: | |
f.seek(sprites[k]['offset']) | |
sprites[k]['data'] = f.read(0x200) | |
f.seek(0) | |
f.seek(0x9000) | |
map_sprites = f.read(0xC00) | |
with open(dest_rom, 'r+b') as f: | |
data = bytearray(f.read()) | |
# Update map sprites | |
data[0x9000:0x9C00] = map_sprites | |
# Update sprite data in memory | |
for k in sprites: | |
offset = sprites[k]['offset'] | |
data[offset:offset+0x200] = sprites[k]['data'] | |
# Write ROM data to file | |
f.seek(0) | |
f.write(data) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment