Get sprite json from vt.alttp.run
Fix plando's sprite support Always write both sprite and pallet (using the default if a sprite does not include a pallet) so that the adjuster still works.
This commit is contained in:
		
							parent
							
								
									823657bc26
								
							
						
					
					
						commit
						ce30913121
					
				
							
								
								
									
										8
									
								
								Gui.py
								
								
								
								
							
							
						
						
									
										8
									
								
								Gui.py
								
								
								
								
							| 
						 | 
				
			
			@ -456,7 +456,8 @@ class SpriteSelector(object):
 | 
			
		|||
 | 
			
		||||
            try:
 | 
			
		||||
                task.update_status("Downloading official sprites list")
 | 
			
		||||
                sprites_arr = json.loads(temp_sprites_json)
 | 
			
		||||
                with urlopen('http://vt.alttp.run/sprites') as response:
 | 
			
		||||
                    sprites_arr = json.load(response)
 | 
			
		||||
            except Exception as e:
 | 
			
		||||
                resultmessage = "Error getting list of official sprites. Sprites not updated.\n\n%s: %s" % (type(e).__name__, e)
 | 
			
		||||
                successful = False
 | 
			
		||||
| 
						 | 
				
			
			@ -468,7 +469,8 @@ class SpriteSelector(object):
 | 
			
		|||
                current_sprites = [os.path.basename(file) for file in glob(self.official_sprite_dir+'/*')]
 | 
			
		||||
                official_sprites = [(sprite['file'], os.path.basename(urlparse(sprite['file']).path)) for sprite in sprites_arr]
 | 
			
		||||
                needed_sprites = [(sprite_url, filename) for (sprite_url, filename) in official_sprites if filename not in current_sprites]
 | 
			
		||||
                bundled_sprites = []
 | 
			
		||||
                bundled_sprites = [os.path.basename(file) for file in glob(self.local_official_sprite_dir+'/*')]
 | 
			
		||||
                # todo: eventually use the above list to avoid downloading any sprites that we already have cached in the bundle.
 | 
			
		||||
 | 
			
		||||
                official_filenames = [filename for (_, filename) in official_sprites]
 | 
			
		||||
                obsolete_sprites = [sprite for sprite in current_sprites if sprite not in official_filenames]
 | 
			
		||||
| 
						 | 
				
			
			@ -653,7 +655,5 @@ def get_image_for_sprite(sprite):
 | 
			
		|||
 | 
			
		||||
    return image.zoom(2)
 | 
			
		||||
 | 
			
		||||
temp_sprites_json = '''[{"name":"Link","file":"http:\/\/spr.beegunslingers.com\/link.1.spr"},{"name":"Four Swords Link","file":"http:\/\/spr.beegunslingers.com\/4slink-armors.1.spr"},{"name":"Boo","file":"http:\/\/spr.beegunslingers.com\/boo.2.spr"},{"name":"Boy","file":"http:\/\/spr.beegunslingers.com\/boy.2.spr"},{"name":"Cactuar","file":"http:\/\/spr.beegunslingers.com\/cactuar.1.spr"},{"name":"Cat","file":"http:\/\/spr.beegunslingers.com\/cat.1.spr"},{"name":"Cat Boo","file":"http:\/\/spr.beegunslingers.com\/catboo.1.spr"},{"name":"Cirno","file":"http:\/\/spr.beegunslingers.com\/cirno.1.spr"},{"name":"Dark Boy","file":"http:\/\/spr.beegunslingers.com\/darkboy.2.spr"},{"name":"Dark Girl","file":"http:\/\/spr.beegunslingers.com\/darkgirl.1.spr"},{"name":"Dark Link","file":"http:\/\/spr.beegunslingers.com\/darklink.1.spr"},{"name":"Dark Maple Queen","file":"http:\/\/spr.beegunslingers.com\/shadowsaku.1.spr"},{"name":"Dark Swatchy","file":"http:\/\/spr.beegunslingers.com\/darkswatchy.1.spr"},{"name":"Dark Zelda","file":"http:\/\/spr.beegunslingers.com\/darkzelda.1.spr"},{"name":"Dark Zora","file":"http:\/\/spr.beegunslingers.com\/darkzora.2.spr"},{"name":"Decidueye","file":"http:\/\/spr.beegunslingers.com\/decidueye.1.spr"},{"name":"Demon Link","file":"http:\/\/spr.beegunslingers.com\/demonlink.1.spr"},{"name":"Frog","file":"http:\/\/spr.beegunslingers.com\/froglink.2.spr"},{"name":"Ganondorf","file":"http:\/\/spr.beegunslingers.com\/ganondorf.1.spr"},{"name":"Garfield","file":"http:\/\/spr.beegunslingers.com\/garfield.1.spr"},{"name":"Girl","file":"http:\/\/spr.beegunslingers.com\/girl.2.spr"},{"name":"Headless Link","file":"http:\/\/spr.beegunslingers.com\/headlesslink.1.spr"},{"name":"Invisible Man","file":"http:\/\/spr.beegunslingers.com\/invisibleman.1.spr"},{"name":"Inkling","file":"http:\/\/spr.beegunslingers.com\/inkling.1.spr"},{"name":"Kirby","file":"http:\/\/spr.beegunslingers.com\/kirby-meta.2.spr"},{"name":"Kore8","file":"http:\/\/spr.beegunslingers.com\/kore8.1.spr"},{"name":"Pony","file":"http:\/\/spr.beegunslingers.com\/littlepony.1.spr"},{"name":"Luigi","file":"http:\/\/spr.beegunslingers.com\/luigi.1.spr"},{"name":"Maiden","file":"http:\/\/spr.beegunslingers.com\/maiden.2.spr"},{"name":"Maple Queen","file":"http:\/\/spr.beegunslingers.com\/maplequeen.1.spr"},{"name":"Mario","file":"http:\/\/spr.beegunslingers.com\/mario-classic.1.spr"},{"name":"Marisa","file":"http:\/\/spr.beegunslingers.com\/marisa.1.spr"},{"name":"Mike Jones","file":"http:\/\/spr.beegunslingers.com\/mikejones.2.spr"},{"name":"Minish Cap Link","file":"http:\/\/spr.beegunslingers.com\/minishcaplink.3.spr"},{"name":"Modern Link","file":"http:\/\/spr.beegunslingers.com\/modernlink.1.spr"},{"name":"Mog","file":"http:\/\/spr.beegunslingers.com\/mog.1.spr"},{"name":"Mouse","file":"http:\/\/spr.beegunslingers.com\/mouse.1.spr"},{"name":"Nature Link","file":"http:\/\/spr.beegunslingers.com\/naturelink.1.spr"},{"name":"Negative Link","file":"http:\/\/spr.beegunslingers.com\/negativelink.1.spr"},{"name":"Neon Link","file":"http:\/\/spr.beegunslingers.com\/neonlink.1.spr"},{"name":"Old Man","file":"http:\/\/spr.beegunslingers.com\/oldman.1.spr"},{"name":"Pink Ribbon Link","file":"http:\/\/spr.beegunslingers.com\/pinkribbonlink.1.spr"},{"name":"Popoi","file":"http:\/\/spr.beegunslingers.com\/popoi.1.spr"},{"name":"Pug","file":"http:\/\/spr.beegunslingers.com\/pug.2.spr"},{"name":"Purple Chest","file":"http:\/\/spr.beegunslingers.com\/purplechest-bottle.2.spr"},{"name":"Roy Koopa","file":"http:\/\/spr.beegunslingers.com\/roykoopa.1.spr"},{"name":"Rumia","file":"http:\/\/spr.beegunslingers.com\/rumia.1.spr"},{"name":"Samus","file":"http:\/\/spr.beegunslingers.com\/samus.4.spr"},{"name":"Soda Can","file":"http:\/\/spr.beegunslingers.com\/sodacan.1.spr"},{"name":"Static Link","file":"http:\/\/spr.beegunslingers.com\/staticlink.1.spr"},{"name":"Santa Link","file":"http:\/\/spr.beegunslingers.com\/santalink.1.spr"},{"name":"Super Bunny","file":"http:\/\/spr.beegunslingers.com\/superbunny.1.spr"},{"name":"Swatchy","file":"http:\/\/spr.beegunslingers.com\/swatchy.1.spr"},{"name":"Tingle","file":"http:\/\/spr.beegunslingers.com\/tingle.1.spr"},{"name":"Toad","file":"http:\/\/spr.beegunslingers.com\/toad.1.spr"},{"name":"Valeera","file":"http:\/\/spr.beegunslingers.com\/valeera.1.spr"},{"name":"Vitreous","file":"http:\/\/spr.beegunslingers.com\/vitreous.1.spr"},{"name":"Vivi","file":"http:\/\/spr.beegunslingers.com\/vivi.1.spr"},{"name":"Will","file":"http:\/\/spr.beegunslingers.com\/will.1.spr"},{"name":"Wizzrobe","file":"http:\/\/spr.beegunslingers.com\/wizzrobe.4.spr"},{"name":"Yunica","file":"http:\/\/spr.beegunslingers.com\/yunica.1.spr"},{"name":"Zelda","file":"http:\/\/spr.beegunslingers.com\/zelda.2.spr"},{"name":"Zero Suit Samus","file":"http:\/\/spr.beegunslingers.com\/zerosuitsamus.1.spr"},{"name":"Zora","file":"http:\/\/spr.beegunslingers.com\/zora.1.spr"}]'''
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    guiMain()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,7 +9,7 @@ import sys
 | 
			
		|||
from BaseClasses import World
 | 
			
		||||
from Regions import create_regions
 | 
			
		||||
from EntranceShuffle import link_entrances, connect_entrance, connect_two_way, connect_exit
 | 
			
		||||
from Rom import patch_rom, LocalRom, write_string_to_rom
 | 
			
		||||
from Rom import patch_rom, LocalRom, Sprite, write_string_to_rom
 | 
			
		||||
from Rules import set_rules
 | 
			
		||||
from Dungeons import create_dungeons
 | 
			
		||||
from Items import ItemFactory
 | 
			
		||||
| 
						 | 
				
			
			@ -75,7 +75,7 @@ def main(args):
 | 
			
		|||
    logger.info('Patching ROM.')
 | 
			
		||||
 | 
			
		||||
    if args.sprite is not None:
 | 
			
		||||
        sprite = bytearray(open(args.sprite, 'rb').read())
 | 
			
		||||
        sprite = Sprite(args.sprite)
 | 
			
		||||
    else:
 | 
			
		||||
        sprite = None
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										16
									
								
								Rom.py
								
								
								
								
							
							
						
						
									
										16
									
								
								Rom.py
								
								
								
								
							| 
						 | 
				
			
			@ -114,8 +114,8 @@ class Sprite(object):
 | 
			
		|||
        if len(filedata) == 0x7000:
 | 
			
		||||
            # sprite file with graphics and without palette data
 | 
			
		||||
            self.sprite = filedata[:0x7000]
 | 
			
		||||
            self.palette = None
 | 
			
		||||
            self.glove_palette = None
 | 
			
		||||
            self.palette = list(self.default_palette)
 | 
			
		||||
            self.glove_palette = list(self.default_glove_palette)
 | 
			
		||||
        elif len(filedata) == 0x7078:
 | 
			
		||||
            # sprite file with graphics and palette data
 | 
			
		||||
            self.sprite = filedata[:0x7000]
 | 
			
		||||
| 
						 | 
				
			
			@ -142,11 +142,11 @@ class Sprite(object):
 | 
			
		|||
                return
 | 
			
		||||
            self.sprite = sprite
 | 
			
		||||
            if len(palette) == 0:
 | 
			
		||||
                self.palette = None
 | 
			
		||||
                self.glove_palette = None
 | 
			
		||||
                self.palette = list(self.default_palette)
 | 
			
		||||
                self.glove_palette = list(self.default_glove_palette)
 | 
			
		||||
            elif len(palette) == 0x78:
 | 
			
		||||
                self.palette = palette
 | 
			
		||||
                self.glove_palette = None
 | 
			
		||||
                self.glove_palette = list(self.default_glove_palette)
 | 
			
		||||
            elif len(palette) == 0x7C:
 | 
			
		||||
                self.palette = palette[:0x78]
 | 
			
		||||
                self.glove_palette = palette[0x78:]
 | 
			
		||||
| 
						 | 
				
			
			@ -849,10 +849,8 @@ def write_sprite(rom, sprite):
 | 
			
		|||
    if not sprite.valid:
 | 
			
		||||
        return
 | 
			
		||||
    rom.write_bytes(0x80000, sprite.sprite)
 | 
			
		||||
    if sprite.palette is not None:
 | 
			
		||||
        rom.write_bytes(0xDD308, sprite.palette)
 | 
			
		||||
    if sprite.glove_palette is not None:
 | 
			
		||||
        rom.write_bytes(0xDEDF5, sprite.glove_palette)
 | 
			
		||||
    rom.write_bytes(0xDD308, sprite.palette)
 | 
			
		||||
    rom.write_bytes(0xDEDF5, sprite.glove_palette)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def write_string_to_rom(rom, target, string):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										
											BIN
										
									
								
								Zelda.sprite
								
								
								
								
							
							
						
						
									
										
											BIN
										
									
								
								Zelda.sprite
								
								
								
								
							
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 28 KiB  | 
		Loading…
	
		Reference in New Issue