From b09929dfb636d2b0337edbfe6761496c7d435965 Mon Sep 17 00:00:00 2001 From: Andrew Ekstedt Date: Wed, 2 Sep 2020 19:17:41 -0700 Subject: [PATCH] add scripts/rename-home.py My oneshot script for renaming the HOME sprites from the web rip. In case we need it in the future for re-ripping, and to record the form identifiers i used since the new ones aren't in the DB yet. --- scripts/rename-home.py | 279 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 279 insertions(+) create mode 100644 scripts/rename-home.py diff --git a/scripts/rename-home.py b/scripts/rename-home.py new file mode 100644 index 0000000..5ed5537 --- /dev/null +++ b/scripts/rename-home.py @@ -0,0 +1,279 @@ +#!/usr/bin/env python3 +# +# this is an unmaintained one-shot script, provided for reference only +# it may not work or do what you expected +# + +# Usage: rename-home.py src -o dest +# Renames sprites from src dir to dest dir. +# files in src dir should be named as in the HOME unity3d assets. +# files in dest dir will be named according to veekun conventions. + +form_names = { + 25: ["", "original-cap", "hoenn-cap", "sinnoh-cap", "unova-cap", "kalos-cap", "alola-cap", "partner-cap", "partner"], + 133: ["", "partner"], + 201: ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", + "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", + "exclamation", "question"], + 351: ["", "sunny", "rainy", "snowy"], + 382: ["", "primal"], + 383: ["", "primal"], + 386: ["normal", "attack", "defense", "speed"], + 412: ["plant", "sandy", "trash"], + 413: ["plant", "sandy", "trash"], + 421: ["overcast", "sunshine"], + 422: ["west", "east"], + 423: ["west", "east"], + 479: ["", "heat", "wash", "frost", "fan", "mow"], + 487: ["altered", "origin"], + 492: ["land", "sky"], + 493: ["normal", "fighting", "flying", "poison", "ground", + "rock", "bug", "ghost", "steel", "fire", "water", "grass", + "electric", "psychic", "ice", "dragon", "dark", "fairy"], + 550: ["red-striped", "blue-striped"], + 555: ["standard", "zen", "standard-galar", "zen-galar"], + 585: ["spring", "summer", "autumn", "winter"], + 586: ["spring", "summer", "autumn", "winter"], + 592: ["male", "female"], + 593: ["male", "female"], + 641: ["incarnate", "therian"], + 642: ["incarnate", "therian"], + 645: ["incarnate", "therian"], + 646: ["", "white", "black"], + 647: ["ordinary", "resolute"], + 648: ["aria", "pirouette"], + 649: ["", "douse", "shock", "burn", "chill"], + 658: ["", "battle-bond", "ash"], + 666: ["icy-snow", "polar", "tundra", "continental", "garden", + "elegant", "meadow", "modern", "marine", "archipelago", + "high-plains", "sandstorm", "river", "monsoon", "savanna", + "sun", "ocean", "jungle", "fancy", "poke-ball"], + 669: ["red", "yellow", "orange", "blue", "white"], + 670: ["red", "yellow", "orange", "blue", "white", "eternal"], + 671: ["red", "yellow", "orange", "blue", "white"], + 676: ["", "heart", "star", "diamond", "debutante", + "matron", "dandy", "la-reine", "kabuki", "pharaoh"], + 678: ["male", "female"], + 681: ["shield", "blade"], + 710: ["average", "small", "large", "super"], + 711: ["average", "small", "large", "super"], + 716: ["neutral", "active"], + 718: ["", '10', '10-power-construct', '50-power-construct', 'complete'], + 720: ["", "unbound"], + 741: ('baile', 'pom-pom', 'pau', 'sensu'), + 744: ('', 'own-tempo'), + 745: ('midday', 'midnight', 'dusk'), + 746: ('solo', 'school'), + 773: ('normal', 'fighting', 'flying', 'poison', 'ground', 'rock', + 'bug', 'ghost', 'steel', 'fire', 'water', 'grass', 'electric', + 'psychic', 'ice', 'dragon', 'dark', 'fairy',), + 774: ('red-meteor', 'orange-meteor', 'yellow-meteor', 'green-meteor', + 'blue-meteor', 'indigo-meteor', 'violet-meteor', 'red', 'orange', + 'yellow', 'green', 'blue', 'indigo', 'violet',), + 778: ('disguised', 'busted', 'totem-disguised', 'totem-busted'), + 800: ["", "dusk", "dawn", "ultra"], + 801: ("", 'original'), + 845: ["", "gulping", "gorging"], + 849: ["amped", "low-key"], + 854: ["phony", "antique"], + 855: ["phony", "antique"], + 869: ["vanilla-cream", "ruby-cream", "matcha-cream", "mint-cream", "lemon-cream", "salted-cream", "ruby-swirl", "caramel-swirl", "rainbow-swirl"], + 875: ["ice", "noice"], + 876: ["male", "female"], + 877: ["full-belly", "hangry"], + 888: ["", "crowned-sword"], + 889: ["", "crowned-shield"], + 890: ["", "eternamax"], + 892: ["single-strike", "rapid-strike"], + + + 19: ["", "alola"], + 20: ["", "alola", "totem-alola"], + 26: ["", "alola"], + 27: ["", "alola"], + 28: ["", "alola"], + 37: ["", "alola"], + 38: ["", "alola"], + 50: ["", "alola"], + 51: ["", "alola"], + 52: ["", "alola", "galar"], + 53: ["", "alola"], + 74: ["", "alola"], + 75: ["", "alola"], + 76: ["", "alola"], + 88: ["", "alola"], + 89: ["", "alola"], + 103: ["", "alola"], + 105: ["", "alola", "totem"], + 735: ["", "totem"], + 738: ["", "totem"], + 743: ["", "totem"], + 752: ["", "totem"], + 754: ["", "totem"], + 758: ["", "totem"], + 777: ["", "totem"], + 784: ["", "totem"], + + + 77: ["", "galar"], + 78: ["", "galar"], + 79: ["", "galar"], + 80: ["", "mega", "galar"], + 83: ["", "galar"], + 110: ["", "galar"], + 122: ["", "galar"], + 222: ["", "galar"], + 263: ["", "galar"], + 264: ["", "galar"], + 554: ["", "galar"], + 562: ["", "galar"], + 618: ["", "galar"], + + 3: ["", "mega"], + 6: ["", "mega-x", "mega-y"], + 9: ["", "mega"], + 15: ["", "mega"], + 18: ["", "mega"], + 65: ["", "mega"], + 94: ["", "mega"], + 115: ["", "mega"], + 127: ["", "mega"], + 130: ["", "mega"], + 142: ["", "mega"], + 150: ["", "mega-x", "mega-y"], + 181: ["", "mega"], + 208: ["", "mega"], + 212: ["", "mega"], + 214: ["", "mega"], + 229: ["", "mega"], + 248: ["", "mega"], + 254: ["", "mega"], + 257: ["", "mega"], + 260: ["", "mega"], + 282: ["", "mega"], + 302: ["", "mega"], + 303: ["", "mega"], + 306: ["", "mega"], + 308: ["", "mega"], + 310: ["", "mega"], + 319: ["", "mega"], + 323: ["", "mega"], + 334: ["", "mega"], + 354: ["", "mega"], + 359: ["", "mega"], + 362: ["", "mega"], + 373: ["", "mega"], + 376: ["", "mega"], + 380: ["", "mega"], + 381: ["", "mega"], + 384: ["", "mega"], + 428: ["", "mega"], + 475: ["", "mega"], + 445: ["", "mega"], + 448: ["", "mega"], + 460: ["", "mega"], + 531: ["", "mega"], + 719: ["", "mega"], +} + +sweets = ["strawberry", "berry", "love", "star", "clover", "flower", "ribbon"] + +import os +import sys +import re +import argparse +import shutil + +parser = argparse.ArgumentParser() +parser.add_argument('src') +parser.add_argument('-o', dest='dest') +args = parser.parse_args() + +fn_re = re.compile("cap(?P[0-9]{4})_f(?P
..)_s(?P.)(?:_128)?(?P_r)?(?P_b)?(?:_(?P[0-9]))?\.") +seen = set() +for file in sorted(os.listdir(args.src)): + m = fn_re.match(file) + if m is None: + print("WARNING: unmatched file", file, file=sys.stderr) + continue + n = int(m.group('n')) + form = int(m.group('form')) + + if n in (414, 664, 665) and form > 0: + # 414 mothim - three identical forms + # 664 scatterbug - identical forms + # 665 spewpa - identical forms + continue + + # 892 urshifu - form 81 = gigantamax single strike, form 82 = gigantamax rapid strike + if n == 892: + if form == 81: + form_name = 'gigantamax-single-strike' + elif form == 82: + form_name = 'gigantamax-rapid-strike' + else: + form_name = form_names[n][form] + + # form 81 = gigantamax + elif form == 81: + form_name = 'gigantamax' + + else: + try: + form_name = form_names[n][form] + except (KeyError, IndexError): + form_name = "" + + if form > 0 and not form_name: + print("WARNING: no form name for", file, file=sys.stderr) + print("INFO:", m.group('n'), m.group('form'), m.group('sex'), m.group('back') or 'front', m.group('shiny') or 'normal', m.group('extra')or'', file=sys.stderr) + continue + + dirs = [] + if m.group('back'): + dirs += ['back'] + if m.group('shiny'): + dirs += ['shiny'] + if m.group('sex') == '1': + dirs += ['female'] + + # 869 alcremie: its form determines the type of cream, and extra determines the sweet + if n == 869: + if form == 81: + # gigantamax + pass + elif m.group('shiny'): + # shiny alcremie uses the same sprites for all flavors + form_name = sweets[int(m.group('extra'))] + else: + form_name = sweets[int(m.group('extra'))] + "-" + form_name + else: + if m.group('extra'): + print("WARNING: unhandled extra on", file, file=sys.stderr) + + + if form_name: + new_name = "{}-{}.png".format(n, form_name) + elif n == 0: + new_name = "egg.png" + else: + new_name = "{}.png".format(n) + if dirs: + new_name = '/'.join(dirs) + '/' + new_name + if new_name in seen: + print("WARNING: duplicate file", new_name, file=sys.stderr) + seen.add(new_name) + + if args.dest: + if dirs: + os.makedirs('/'.join([args.dest] + dirs), exist_ok=True) + destfile = os.path.join(args.dest, new_name) + if os.path.exists(destfile): + print("ERROR: refusing to overwrite", destfile, file=sys.stderr) + sys.exit(1) + else: + shutil.copyfile(os.path.join(args.src, file), destfile) + else: + print("cp", file.ljust(25), new_name) + +