mirror of
https://github.com/veekun/pokedex.git
synced 2024-08-20 18:16:34 +00:00
b09929dfb6
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.
279 lines
9.5 KiB
Python
279 lines
9.5 KiB
Python
#!/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<n>[0-9]{4})_f(?P<form>..)_s(?P<sex>.)(?:_128)?(?P<shiny>_r)?(?P<back>_b)?(?:_(?P<extra>[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)
|
|
|
|
|