Skip to content

Instantly share code, notes, and snippets.

@blackknight36
Last active July 24, 2018 16:06
Show Gist options
  • Save blackknight36/2744cbc6071fac0a909b5b9c275ce1cf to your computer and use it in GitHub Desktop.
Save blackknight36/2744cbc6071fac0a909b5b9c275ce1cf to your computer and use it in GitHub Desktop.
#!/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