Add support for custom Link sprites.
This commit is contained in:
parent
5207ccd8fd
commit
c58e63b695
12
Main.py
12
Main.py
|
@ -70,8 +70,13 @@ def main(args, seed=None):
|
||||||
|
|
||||||
logger.info('Patching ROM.')
|
logger.info('Patching ROM.')
|
||||||
|
|
||||||
|
if args.sprite is not None:
|
||||||
|
sprite = bytearray(open(args.sprite, 'rb').read())
|
||||||
|
else:
|
||||||
|
sprite = None
|
||||||
|
|
||||||
rom = bytearray(open(args.rom, 'rb').read())
|
rom = bytearray(open(args.rom, 'rb').read())
|
||||||
patched_rom = patch_rom(world, rom, logic_hash, args.quickswap, args.heartbeep)
|
patched_rom = patch_rom(world, rom, logic_hash, args.quickswap, args.heartbeep, sprite)
|
||||||
|
|
||||||
outfilebase = 'ER_%s_%s_%s_%s' % (world.mode, world.goal, world.shuffle, world.seed)
|
outfilebase = 'ER_%s_%s_%s_%s' % (world.mode, world.goal, world.shuffle, world.seed)
|
||||||
|
|
||||||
|
@ -394,11 +399,16 @@ if __name__ == '__main__':
|
||||||
parser.add_argument('--nodungeonitems', help='Remove Maps and Compasses from Itempool, replacing them by empty slots.', action='store_true')
|
parser.add_argument('--nodungeonitems', help='Remove Maps and Compasses from Itempool, replacing them by empty slots.', action='store_true')
|
||||||
parser.add_argument('--heartbeep', default='normal', const='normal', nargs='?', choices=['normal', 'half', 'quarter', 'off'],
|
parser.add_argument('--heartbeep', default='normal', const='normal', nargs='?', choices=['normal', 'half', 'quarter', 'off'],
|
||||||
help='Select the rate at which the heart beep sound is played at low health.')
|
help='Select the rate at which the heart beep sound is played at low health.')
|
||||||
|
parser.add_argument('--sprite', help='Path to a sprite sheet to use for Link. Needs to be in binary format and have a length of 0x7000 (28672) bytes.')
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
# ToDo: Validate files further than mere existance
|
||||||
if not os.path.isfile(args.rom):
|
if not os.path.isfile(args.rom):
|
||||||
input('Could not find valid base rom for patching at expected path %s. Please run with -h to see help for further information. \nPress Enter to exit.' % args.rom)
|
input('Could not find valid base rom for patching at expected path %s. Please run with -h to see help for further information. \nPress Enter to exit.' % args.rom)
|
||||||
exit(1)
|
exit(1)
|
||||||
|
if args.sprite is not None and not os.path.isfile(args.rom):
|
||||||
|
input('Could not find link sprite sheet at given location. \nPress Enter to exit.' % args.sprite)
|
||||||
|
exit(1)
|
||||||
|
|
||||||
# set up logger
|
# set up logger
|
||||||
loglevel = {'error': logging.ERROR, 'info': logging.INFO, 'warning': logging.WARNING, 'debug': logging.DEBUG}[args.loglevel]
|
loglevel = {'error': logging.ERROR, 'info': logging.INFO, 'warning': logging.WARNING, 'debug': logging.DEBUG}[args.loglevel]
|
||||||
|
|
6
Rom.py
6
Rom.py
|
@ -6,7 +6,7 @@ from Text import KingsReturn_texts, Sanctuary_texts, Kakariko_texts, Blacksmiths
|
||||||
import random
|
import random
|
||||||
|
|
||||||
|
|
||||||
def patch_rom(world, rom, hashtable, quickswap=False, beep='normal'):
|
def patch_rom(world, rom, hashtable, quickswap=False, beep='normal', sprite=None):
|
||||||
# patch items
|
# patch items
|
||||||
for location in world.get_locations():
|
for location in world.get_locations():
|
||||||
if location.name == 'Ganon':
|
if location.name == 'Ganon':
|
||||||
|
@ -233,6 +233,10 @@ def patch_rom(world, rom, hashtable, quickswap=False, beep='normal'):
|
||||||
# store hash table for main menu hash
|
# store hash table for main menu hash
|
||||||
write_bytes(rom, 0x181000, hashtable)
|
write_bytes(rom, 0x181000, hashtable)
|
||||||
|
|
||||||
|
# write link sprite if required
|
||||||
|
if sprite is not None:
|
||||||
|
write_bytes(rom, 0x80000, sprite)
|
||||||
|
|
||||||
return rom
|
return rom
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue