diff --git a/Gui.py b/Gui.py index 97b51fdb..2400ce83 100755 --- a/Gui.py +++ b/Gui.py @@ -1575,7 +1575,7 @@ class SpriteSelector(object): return local_path("data", "sprites", "custom") -def get_image_for_sprite(sprite): +def get_image_for_sprite(sprite, gif_only: bool = False): if not sprite.valid: return None height = 24 @@ -1671,6 +1671,9 @@ def get_image_for_sprite(sprite): return gif gif_data = make_gif(draw_sprite_into_gif) + if gif_only: + return gif_data + image = PhotoImage(data=gif_data) return image.zoom(2) diff --git a/dumpSprites.py b/dumpSprites.py new file mode 100644 index 00000000..c9289ea9 --- /dev/null +++ b/dumpSprites.py @@ -0,0 +1,39 @@ +import argparse +import json +from os import listdir +from os.path import isfile, join +from Rom import Sprite +from Gui import get_image_for_sprite + +parser = argparse.ArgumentParser(description='Dump sprite data and .png files to a directory.') +parser.add_argument('-i') +parser.add_argument('-o') +args = parser.parse_args() + +if not args.i or not args.o: + print('Invalid arguments provided. -i and -o are required.') + exit() + +# Target directories +input_dir = args.i +output_dir = args.o + +# Get a list of all files in the input directory +targetFiles = [file for file in listdir(input_dir) if isfile(join(input_dir, file))] + +spriteData = {} + +for file in targetFiles: + if file[-5:] != '.zspr': + continue + + sprite = Sprite(join(input_dir, file)) + spriteData[sprite.name] = file + + image = open(f'{output_dir}/{sprite.name}.gif', 'wb') + image.write(get_image_for_sprite(sprite, True)) + image.close() + +jsonFile = open(f'{output_dir}/spriteData.json', 'w') +jsonFile.write(json.dumps(spriteData)) +jsonFile.close()