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.')
 | 
			
		||||
 | 
			
		||||
    if args.sprite is not None:
 | 
			
		||||
        sprite = bytearray(open(args.sprite, 'rb').read())
 | 
			
		||||
    else:
 | 
			
		||||
        sprite = None
 | 
			
		||||
 | 
			
		||||
    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)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -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('--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.')
 | 
			
		||||
    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()
 | 
			
		||||
 | 
			
		||||
    # ToDo: Validate files further than mere existance
 | 
			
		||||
    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)
 | 
			
		||||
        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
 | 
			
		||||
    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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def patch_rom(world, rom, hashtable, quickswap=False, beep='normal'):
 | 
			
		||||
def patch_rom(world, rom, hashtable, quickswap=False, beep='normal', sprite=None):
 | 
			
		||||
    # patch items
 | 
			
		||||
    for location in world.get_locations():
 | 
			
		||||
        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
 | 
			
		||||
    write_bytes(rom, 0x181000, hashtable)
 | 
			
		||||
 | 
			
		||||
    # write link sprite if required
 | 
			
		||||
    if sprite is not None:
 | 
			
		||||
        write_bytes(rom, 0x80000, sprite)
 | 
			
		||||
 | 
			
		||||
    return rom
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue