Last active
July 16, 2020 00:54
-
-
Save raffitz/eb2480434bb212610d8d628d4eea1ee6 to your computer and use it in GitHub Desktop.
Pokémon gen iii structure reader
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
import argparse | |
import struct | |
parser = argparse.ArgumentParser(description='Read a gen iii pokémon') | |
parser.add_argument('pokemon', action='store', | |
help='Binary pokémon file to be read') | |
args = parser.parse_args() | |
def translate(thebyte): | |
dictionary = { | |
0x00: " ", | |
0x01: "À", | |
0x02: "Á", | |
0x03: "Â", | |
0x04: "Ç", | |
0x05: "È", | |
0x06: "É", | |
0x07: "Ê", | |
0x08: "Ë", | |
0x09: "Ì", | |
0x0B: "Î", | |
0x0C: "Ï", | |
0x0D: "Ò", | |
0x0E: "Ó", | |
0x0F: "Ô", | |
0x10: "Œ", | |
0x11: "Ù", | |
0x12: "Ú", | |
0x13: "Û", | |
0x14: "Ñ", | |
0x15: "ß", | |
0x16: "à", | |
0x17: "á", | |
0x19: "ç", | |
0x1A: "è", | |
0x1B: "é", | |
0x1C: "ê", | |
0x1D: "ë", | |
0x1E: "ì", | |
0x20: "î", | |
0x21: "ï", | |
0x22: "ò", | |
0x23: "ó", | |
0x24: "ô", | |
0x25: "œ", | |
0x26: "ù", | |
0x27: "ú", | |
0x28: "û", | |
0x29: "ñ", | |
0x2A: "º", | |
0x2B: "ª", | |
0x2C: "ᵉʳ", | |
0x2D: "&", | |
0x2E: "+", | |
0x35: "Lv", | |
0x35: "=", | |
0x36: ";", | |
0x50: "▯", | |
0x51: "¿", | |
0x52: "¡", | |
0x53: "ᴾₖ", | |
0x54: "ᴹₙ", | |
0x55: "ᴾₒ", | |
0x56: "ᴷₑ", | |
0x5A: "Í", | |
0x5B: "%", | |
0x5C: "(", | |
0x5D: ")", | |
0x68: "â", | |
0x6f: "í", | |
0x79: "⬆", | |
0x7a: "⬇", | |
0x7b: "⬅", | |
0x7c: "➡", | |
0x7d: " ", | |
0x7e: " ", | |
0x7f: " ", | |
0x80: " ", | |
0x81: " ", | |
0x82: " ", | |
0x83: " ", | |
0x84: "ᵉ", | |
0x85: "<", | |
0x86: ">", | |
0xA0: "ʳᵉ", | |
0xA1: "0", | |
0xA2: "1", | |
0xA3: "2", | |
0xA4: "3", | |
0xA5: "4", | |
0xA6: "5", | |
0xA7: "6", | |
0xA8: "7", | |
0xA9: "8", | |
0xAA: "9", | |
0xAB: "!", | |
0xAC: "?", | |
0xAD: ".", | |
0xAE: "-", | |
0xAF: "・", | |
0xB0: "...", | |
0xB1: "\"", | |
0xB2: "\"", | |
0xB3: "'", | |
0xB4: "'", | |
0xB5: "♂", | |
0xB6: "♀", | |
0xB7: "$", | |
0xB8: ",", | |
0xB9: "×", | |
0xBA: "/", | |
0xBB: "A", | |
0xBC: "B", | |
0xBD: "C", | |
0xBE: "D", | |
0xBF: "E", | |
0xC0: "F", | |
0xC1: "G", | |
0xC2: "H", | |
0xC3: "I", | |
0xC4: "J", | |
0xC5: "K", | |
0xC6: "L", | |
0xC7: "M", | |
0xC8: "N", | |
0xC9: "O", | |
0xCA: "P", | |
0xCB: "Q", | |
0xCC: "R", | |
0xCD: "S", | |
0xCE: "T", | |
0xCF: "U", | |
0xD0: "V", | |
0xD1: "W", | |
0xD2: "X", | |
0xD3: "Y", | |
0xD4: "Z", | |
0xD5: "a", | |
0xD6: "b", | |
0xD7: "c", | |
0xD8: "d", | |
0xD9: "e", | |
0xDA: "f", | |
0xDB: "g", | |
0xDC: "h", | |
0xDD: "i", | |
0xDE: "j", | |
0xDF: "k", | |
0xE0: "l", | |
0xE1: "m", | |
0xE2: "n", | |
0xE3: "o", | |
0xE4: "p", | |
0xE5: "q", | |
0xE6: "r", | |
0xE7: "s", | |
0xE8: "t", | |
0xE9: "u", | |
0xEA: "v", | |
0xEB: "w", | |
0xEC: "x", | |
0xED: "y", | |
0xEE: "z", | |
0xEF: "▶", | |
0xF0: ":", | |
0xF1: "Ä", | |
0xF2: "Ö", | |
0xF3: "Ü", | |
0xF4: "ä", | |
0xF5: "ö", | |
0xF6: "ü", | |
0xFF: "↩" | |
} | |
return dictionary.get(thebyte, "�") | |
def language(code): | |
langs = { | |
0x0201: "Japanese", | |
0x0202: "English", | |
0x0203: "French", | |
0x0204: "Italian", | |
0x0205: "German", | |
0x0206: "Korean", | |
0x0207: "Spanish" | |
} | |
return langs.get(code, "Unknown Language") | |
def markings(thebyte): | |
marks = { | |
0: "----", | |
1: "●---", | |
2: "-■--", | |
3: "●■--", | |
4: "--▲-", | |
5: "●-▲-", | |
6: "-■▲-", | |
7: "●■▲-", | |
8: "---♥", | |
9: "●--♥", | |
10: "-■-♥", | |
11: "●■-♥", | |
12: "--▲♥", | |
13: "●-▲♥", | |
14: "-■▲♥", | |
15: "●■▲♥" | |
} | |
return marks.get(thebyte & 15,"××××") | |
def getorder(index): | |
orders = { | |
0: "GAEM", | |
1: "GAME", | |
2: "GEAM", | |
3: "GEMA", | |
4: "GMAE", | |
5: "GMEA", | |
6: "AGEM", | |
7: "AGME", | |
8: "AEGM", | |
9: "AEMG", | |
10: "AMGE", | |
11: "AMEG", | |
12: "EGAM", | |
13: "EGMA", | |
14: "EAGM", | |
15: "EAMG", | |
16: "EMGA", | |
17: "EMAG", | |
18: "MGAE", | |
19: "MGEA", | |
20: "MAGE", | |
21: "MAEG", | |
22: "MEGA", | |
23: "MEAG" | |
} | |
return orders.get(index, "XXXX") | |
def getspecies(index): | |
pokes = { | |
1: "BULBASAUR", | |
2: "IVYSAUR", | |
3: "VENUSAUR", | |
4: "CHARMANDER", | |
5: "CHARMELEON", | |
6: "CHARIZARD", | |
7: "SQUIRTLE", | |
8: "WARTORTLE", | |
9: "BLASTOISE", | |
10: "CATERPIE", | |
11: "METAPOD", | |
12: "BUTTERFREE", | |
13: "WEEDLE", | |
14: "KAKUNA", | |
15: "BEEDRILL", | |
16: "PIDGEY", | |
17: "PIDGEOTTO", | |
18: "PIDGEOT", | |
19: "RATTATA", | |
20: "RATICATE", | |
21: "SPEAROW", | |
22: "FEAROW", | |
23: "EKANS", | |
24: "ARBOK", | |
25: "PIKACHU", | |
26: "RAICHU", | |
27: "SANDSHREW", | |
28: "SANDSLASH", | |
29: "NIDORANF", | |
30: "NIDORINA", | |
31: "NIDOQUEEN", | |
32: "NIDORANM", | |
33: "NIDORINO", | |
34: "NIDOKING", | |
35: "CLEFAIRY", | |
36: "CLEFABLE", | |
37: "VULPIX", | |
38: "NINETALES", | |
39: "JIGGLYPUFF", | |
40: "WIGGLYTUFF", | |
41: "ZUBAT", | |
42: "GOLBAT", | |
43: "ODDISH", | |
44: "GLOOM", | |
45: "VILEPLUME", | |
46: "PARAS", | |
47: "PARASECT", | |
48: "VENONAT", | |
49: "VENOMOTH", | |
50: "DIGLETT", | |
51: "DUGTRIO", | |
52: "MEOWTH", | |
53: "PERSIAN", | |
54: "PSYDUCK", | |
55: "GOLDUCK", | |
56: "MANKEY", | |
57: "PRIMEAPE", | |
58: "GROWLITHE", | |
59: "ARCANINE", | |
60: "POLIWAG", | |
61: "POLIWHIRL", | |
62: "POLIWRATH", | |
63: "ABRA", | |
64: "KADABRA", | |
65: "ALAKAZAM", | |
66: "MACHOP", | |
67: "MACHOKE", | |
68: "MACHAMP", | |
69: "BELLSPROUT", | |
70: "WEEPINBELL", | |
71: "VICTREEBEL", | |
72: "TENTACOOL", | |
73: "TENTACRUEL", | |
74: "GEODUDE", | |
75: "GRAVELER", | |
76: "GOLEM", | |
77: "PONYTA", | |
78: "RAPIDASH", | |
79: "SLOWPOKE", | |
80: "SLOWBRO", | |
81: "MAGNEMITE", | |
82: "MAGNETON", | |
83: "FARFETCH'D", | |
84: "DODUO", | |
85: "DODRIO", | |
86: "SEEL", | |
87: "DEWGONG", | |
88: "GRIMER", | |
89: "MUK", | |
90: "SHELLDER", | |
91: "CLOYSTER", | |
92: "GASTLY", | |
93: "HAUNTER", | |
94: "GENGAR", | |
95: "ONIX", | |
96: "DROWZEE", | |
97: "HYPNO", | |
98: "KRABBY", | |
99: "KINGLER", | |
100: "VOLTORB", | |
101: "ELECTRODE", | |
102: "EXEGGCUTE", | |
103: "EXEGGUTOR", | |
104: "CUBONE", | |
105: "MAROWAK", | |
106: "HITMONLEE", | |
107: "HITMONCHAN", | |
108: "LICKITUNG", | |
109: "KOFFING", | |
110: "WEEZING", | |
111: "RHYHORN", | |
112: "RHYDON", | |
113: "CHANSEY", | |
114: "TANGELA", | |
115: "KANGASKHAN", | |
116: "HORSEA", | |
117: "SEADRA", | |
118: "GOLDEEN", | |
119: "SEAKING", | |
120: "STARYU", | |
121: "STARMIE", | |
122: "MR. MIME", | |
123: "SCYTHER", | |
124: "JYNX", | |
125: "ELECTABUZZ", | |
126: "MAGMAR", | |
127: "PINSIR", | |
128: "TAUROS", | |
129: "MAGIKARP", | |
130: "GYARADOS", | |
131: "LAPRAS", | |
132: "DITTO", | |
133: "EEVEE", | |
134: "VAPOREON", | |
135: "JOLTEON", | |
136: "FLAREON", | |
137: "PORYGON", | |
138: "OMANYTE", | |
139: "OMASTAR", | |
140: "KABUTO", | |
141: "KABUTOPS", | |
142: "AERODACTYL", | |
143: "SNORLAX", | |
144: "ARTICUNO", | |
145: "ZAPDOS", | |
146: "MOLTRES", | |
147: "DRATINI", | |
148: "DRAGONAIR", | |
149: "DRAGONITE", | |
150: "MEWTWO", | |
151: "MEW", | |
152: "CHIKORITA", | |
153: "BAYLEEF", | |
154: "MEGANIUM", | |
155: "CYNDAQUIL", | |
156: "QUILAVA", | |
157: "TYPHLOSION", | |
158: "TOTODILE", | |
159: "CROCONAW", | |
160: "FERALIGATR", | |
161: "SENTRET", | |
162: "FURRET", | |
163: "HOOTHOOT", | |
164: "NOCTOWL", | |
165: "LEDYBA", | |
166: "LEDIAN", | |
167: "SPINARAK", | |
168: "ARIADOS", | |
169: "CROBAT", | |
170: "CHINCHOU", | |
171: "LANTURN", | |
172: "PICHU", | |
173: "CLEFFA", | |
174: "IGGLYBUFF", | |
175: "TOGEPI", | |
176: "TOGETIC", | |
177: "NATU", | |
178: "XATU", | |
179: "MAREEP", | |
180: "FLAAFFY", | |
181: "AMPHAROS", | |
182: "BELLOSSOM", | |
183: "MARILL", | |
184: "AZUMARILL", | |
185: "SUDOWOODO", | |
186: "POLITOED", | |
187: "HOPPIP", | |
188: "SKIPLOOM", | |
189: "JUMPLUFF", | |
190: "AIPOM", | |
191: "SUNKERN", | |
192: "SUNFLORA", | |
193: "YANMA", | |
194: "WOOPER", | |
195: "QUAGSIRE", | |
196: "ESPEON", | |
197: "UMBREON", | |
198: "MURKROW", | |
199: "SLOWKING", | |
200: "MISDREAVUS", | |
201: "UNOWN", | |
202: "WOBBUFFET", | |
203: "GIRAFARIG", | |
204: "PINECO", | |
205: "FORRETRESS", | |
206: "DUNSPARCE", | |
207: "GLIGAR", | |
208: "STEELIX", | |
209: "SNUBBULL", | |
210: "GRANBULL", | |
211: "QWILFISH", | |
212: "SCIZOR", | |
213: "SHUCKLE", | |
214: "HERACROSS", | |
215: "SNEASEL", | |
216: "TEDDIURSA", | |
217: "URSARING", | |
218: "SLUGMA", | |
219: "MAGCARGO", | |
220: "SWINUB", | |
221: "PILOSWINE", | |
222: "CORSOLA", | |
223: "REMORAID", | |
224: "OCTILLERY", | |
225: "DELIBIRD", | |
226: "MANTINE", | |
227: "SKARMORY", | |
228: "HOUNDOUR", | |
229: "HOUNDOOM", | |
230: "KINGDRA", | |
231: "PHANPY", | |
232: "DONPHAN", | |
233: "PORYGON2", | |
234: "STANTLER", | |
235: "SMEARGLE", | |
236: "TYROGUE", | |
237: "HITMONTOP", | |
238: "SMOOCHUM", | |
239: "ELEKID", | |
240: "MAGBY", | |
241: "MILTANK", | |
242: "BLISSEY", | |
243: "RAIKOU", | |
244: "ENTEI", | |
245: "SUICUNE", | |
246: "LARVITAR", | |
247: "PUPITAR", | |
248: "TYRANITAR", | |
249: "LUGIA", | |
250: "HO-OH", | |
251: "CELEBI", | |
277: "TREECKO", | |
278: "GROVYLE", | |
279: "SCEPTILE", | |
280: "TORCHIC", | |
281: "COMBUSKEN", | |
282: "BLAZIKEN", | |
283: "MUDKIP", | |
284: "MARSHTOMP", | |
285: "SWAMPERT", | |
286: "POOCHYENA", | |
287: "MIGHTYENA", | |
288: "ZIGZAGOON", | |
289: "LINOONE", | |
290: "WURMPLE", | |
291: "SILCOON", | |
292: "BEAUTIFLY", | |
293: "CASCOON", | |
294: "DUSTOX", | |
295: "LOTAD", | |
296: "LOMBRE", | |
297: "LUDICOLO", | |
298: "SEEDOT", | |
299: "NUZLEAF", | |
300: "SHIFTRY", | |
301: "NINCADA", | |
302: "NINJASK", | |
303: "SHEDINJA", | |
304: "TAILLOW", | |
305: "SWELLOW", | |
306: "SHROOMISH", | |
307: "BRELOOM", | |
308: "SPINDA", | |
309: "WINGULL", | |
310: "PELIPPER", | |
311: "SURSKIT", | |
312: "MASQUERAIN", | |
313: "WAILMER", | |
314: "WAILORD", | |
315: "SKITTY", | |
316: "DELCATTY", | |
317: "KECLEON", | |
318: "BALTOY", | |
319: "CLAYDOL", | |
320: "NOSEPASS", | |
321: "TORKOAL", | |
322: "SABLEYE", | |
323: "BARBOACH", | |
324: "WHISCASH", | |
325: "LUVDISC", | |
326: "CORPHISH", | |
327: "CRAWDAUNT", | |
328: "FEEBAS", | |
329: "MILOTIC", | |
330: "CARVANHA", | |
331: "SHARPEDO", | |
332: "TRAPINCH", | |
333: "VIBRAVA", | |
334: "FLYGON", | |
335: "MAKUHITA", | |
336: "HARIYAMA", | |
337: "ELECTRIKE", | |
338: "MANECTRIC", | |
339: "NUMEL", | |
340: "CAMERUPT", | |
341: "SPHEAL", | |
342: "SEALEO", | |
343: "WALREIN", | |
344: "CACNEA", | |
345: "CACTURNE", | |
346: "SNORUNT", | |
347: "GLALIE", | |
348: "LUNATONE", | |
349: "SOLROCK", | |
350: "AZURILL", | |
351: "SPOINK", | |
352: "GRUMPIG", | |
353: "PLUSLE", | |
354: "MINUN", | |
355: "MAWILE", | |
356: "MEDITITE", | |
357: "MEDICHAM", | |
358: "SWABLU", | |
359: "ALTARIA", | |
360: "WYNAUT", | |
361: "DUSKULL", | |
362: "DUSCLOPS", | |
363: "ROSELIA", | |
364: "SLAKOTH", | |
365: "VIGOROTH", | |
366: "SLAKING", | |
367: "GULPIN", | |
368: "SWALOT", | |
369: "TROPIUS", | |
370: "WHISMUR", | |
371: "LOUDRED", | |
372: "EXPLOUD", | |
373: "CLAMPERL", | |
374: "HUNTAIL", | |
375: "GOREBYSS", | |
376: "ABSOL", | |
377: "SHUPPET", | |
378: "BANETTE", | |
379: "SEVIPER", | |
380: "ZANGOOSE", | |
381: "RELICANTH", | |
382: "ARON", | |
383: "LAIRON", | |
384: "AGGRON", | |
385: "CASTFORM", | |
386: "VOLBEAT", | |
387: "ILLUMISE", | |
388: "LILEEP", | |
389: "CRADILY", | |
390: "ANORITH", | |
391: "ARMALDO", | |
392: "RALTS", | |
393: "KIRLIA", | |
394: "GARDEVOIR", | |
395: "BAGON", | |
396: "SHELGON", | |
397: "SALAMENCE", | |
398: "BELDUM", | |
399: "METANG", | |
400: "METAGROSS", | |
401: "REGIROCK", | |
402: "REGICE", | |
403: "REGISTEEL", | |
404: "KYOGRE", | |
405: "GROUDON", | |
406: "RAYQUAZA", | |
407: "LATIAS", | |
408: "LATIOS", | |
409: "JIRACHI", | |
410: "DEOXYS", | |
411: "CHIMECHO" | |
} | |
return pokes.get(index,"?") | |
def getitem(index): | |
items = { | |
0x000: "NOTHING", | |
0x001: "MASTER BALL", | |
0x002: "ULTRA BALL", | |
0x003: "GREAT BALL", | |
0x004: "POKE BALL", | |
0x005: "SAFARI BALL", | |
0x006: "NET BALL", | |
0x007: "DIVE BALL", | |
0x008: "NEST BALL", | |
0x009: "REPEAT BALL", | |
0x00A: "TIMER BALL", | |
0x00B: "LUXURY BALL", | |
0x00C: "PREMIER BALL", | |
0x00D: "POTION", | |
0x00E: "ANTIDOTE", | |
0x00F: "BURN HEAL", | |
0x010: "ICE HEAL", | |
0x011: "AWAKENING", | |
0x012: "PARALYZ HEAL", | |
0x013: "FULL RESTORE", | |
0x014: "MAX POTION", | |
0x015: "HYPER POTION", | |
0x016: "SUPER POTION", | |
0x017: "FULL HEAL", | |
0x018: "REVIVE", | |
0x019: "MAX REVIVE", | |
0x01A: "FRESH WATER", | |
0x01B: "SODA POP", | |
0x01C: "LEMONADE", | |
0x01D: "MOOMOO MILK", | |
0x01E: "ENERGY POWDER", | |
0x01F: "ENERGY ROOT", | |
0x020: "HEAL POWDER", | |
0x021: "REVIVAL HERB", | |
0x022: "ETHER", | |
0x023: "MAX ETHER", | |
0x024: "ELIXIR", | |
0x025: "MAX ELIXIR", | |
0x026: "LAVA COOKIE", | |
0x027: "BLUE FLUTE", | |
0x028: "YELLOW FLUTE", | |
0x029: "RED FLUTE", | |
0x02A: "BLACK FLUTE", | |
0x02B: "WHITE FLUTE", | |
0x02C: "BERRY JUICE", | |
0x02D: "SACRED ASH", | |
0x02E: "SHOAL SALT", | |
0x02F: "SHOAL SHELL", | |
0x030: "RED SHARD", | |
0x031: "BLUE SHARD", | |
0x032: "YELLOW SHARD", | |
0x033: "GREEN SHARD", | |
0x03F: "HR UP", | |
0x040: "PROTEIN", | |
0x041: "IRON", | |
0x042: "CARBOS", | |
0x043: "CALCIUM", | |
0x044: "RARE CANDY", | |
0x045: "PP UP", | |
0x046: "ZINC", | |
0x047: "PP MAX", | |
0x049: "GUARD SPEC", | |
0x04A: "DIRE HIT", | |
0x04B: "X ATTACK", | |
0x04C: "X DEFEND", | |
0x04D: "X SPEED", | |
0x04E: "X ACCURACY", | |
0x04F: "X SPECIAL", | |
0x050: "POKE DOLL", | |
0x051: "FLUFFY TAIL", | |
0x053: "FIRE STONE", | |
0x054: "MAX REPEL", | |
0x055: "ESCAPE ROPE", | |
0x056: "REPEL", | |
0x05D: "SUN STONE", | |
0x05E: "MOON STONE", | |
0x05F: "FIRE STONE", | |
0x060: "THUNDER STONE", | |
0x061: "WATER STONE", | |
0x062: "LEAF STONE", | |
0x067: "TINY MUSHROOM", | |
0x068: "BIG MUSHROOM", | |
0x06A: "PEARL", | |
0x06B: "BIG PEARL", | |
0x06C: "STARDUST", | |
0x06D: "STAR PIECE", | |
0x06E: "NUGGET", | |
0x06F: "HEART SCALE", | |
0x079: "ORANGE MAIL", | |
0x07A: "HARBOR MAIL", | |
0x07B: "GLITTER MAIL", | |
0x07C: "MECH MAIL", | |
0x07D: "WOOD MAIL", | |
0x07E: "WAVE MAIL", | |
0x07F: "BEAD MAIL", | |
0x080: "SHADOW MAIL", | |
0x081: "TROPIC MAIL", | |
0x082: "DREAM MAIL", | |
0x083: "FAB MAIL", | |
0x084: "RETRO MAIL", | |
0x085: "CHERI BERRY", | |
0x086: "CHESTO BERRY", | |
0x087: "PECHA BERRY", | |
0x088: "RAWST BERRY", | |
0x089: "ASPEAR BERRY", | |
0x08A: "LEPPA BERRY", | |
0x08B: "ORAN BERRY", | |
0x08C: "PERSIM BERRY", | |
0x08D: "LUM BERRY", | |
0x08E: "SITRUS BERRY", | |
0x08F: "FIGY BERRY", | |
0x090: "WIKI BERRY", | |
0x091: "MAGO BERRY", | |
0x092: "AGUAV BERRY", | |
0x093: "IAPAPA BERRY", | |
0x094: "RAZZ BERRY", | |
0x095: "BLUK BERRY", | |
0x096: "NANAB BERRY", | |
0x097: "WEPEAR BERRY", | |
0x098: "PINAP BERRY", | |
0x099: "POMEG BERRY", | |
0x09A: "KELPSY BERRY", | |
0x09B: "QUALOT BERRY", | |
0x09C: "HONDEW BERRY", | |
0x09D: "GREPA BERRY", | |
0x09E: "TAMATO BERRY", | |
0x09F: "CORNN BERRY", | |
0x0A0: "MAGOST BERRY", | |
0x0A1: "RABUTA BERRY", | |
0x0A2: "NOMEL BERRY", | |
0x0A3: "SPELON BERRY", | |
0x0A4: "PAMTRE BERRY", | |
0x0A5: "WATMEL BERRY", | |
0x0A6: "DURIN BERRY", | |
0x0A7: "BELUE BERRY", | |
0x0A8: "LIECHI BERRY", | |
0x0A9: "GANLON BERRY", | |
0x0AA: "SALAC BERRY", | |
0x0AB: "PETAYA BERRY", | |
0x0AC: "APICOT BERRY", | |
0x0AD: "LANSAT BERRY", | |
0x0AE: "STARF BERRY", | |
0x0AF: "ENIGMA BERRY", | |
0x0B3: "BRIGHTPOWDER", | |
0x0B4: "WHITE HERB", | |
0x0B5: "MACHO BRACE", | |
0x0B6: "EXP SHARE", | |
0x0B7: "QUICK CLAW", | |
0x0B8: "SOOTHE BELL", | |
0x0B9: "MENTAL HERB", | |
0x0BA: "CHOICE BAND", | |
0x0BB: "KINGS ROCK", | |
0x0BC: "SILVERPOWDER", | |
0x0BD: "AMULET COIN", | |
0x0BE: "CLEANSE TAG", | |
0x0BF: "SOUL DEW", | |
0x0C0: "DEEP SEA TOOTH", | |
0x0C1: "DEEP SEA SCALE", | |
0x0C2: "SMOKE BALL", | |
0x0C3: "EVERSTONE", | |
0x0C4: "FOCUS BAND", | |
0x0C5: "LUCKY EGG", | |
0x0C6: "SCOPE LENS", | |
0x0C7: "METAL COAT", | |
0x0C8: "LEFTOVERS", | |
0x0C9: "DRAGON SCALE", | |
0x0CA: "LIGHT BALL", | |
0x0CB: "SOFT SAND", | |
0x0CC: "HARD STONE", | |
0x0CD: "MIRACLE SEED", | |
0x0CE: "BLACK GLASSES", | |
0x0CF: "BLACK BELT", | |
0x0D0: "MAGNET", | |
0x0D1: "MYSTIC WATER", | |
0x0D2: "SHARP BEAK", | |
0x0D3: "POISON BARB", | |
0x0D4: "NEVERMELTICE", | |
0x0D5: "SPELL TAG", | |
0x0D6: "TWISTEDSPOON", | |
0x0D7: "CHARCOAL", | |
0x0D8: "DRAGON FANG", | |
0x0D9: "SILK SCARF", | |
0x0DA: "UP-GRADE", | |
0x0DB: "SHELL BELL", | |
0x0DC: "SEA INCENSE", | |
0x0DD: "LAX INCENSE", | |
0x0DE: "LUCKY PUNCH", | |
0x0DF: "METAL POWDER", | |
0x0E0: "THICK CLUB", | |
0x0E1: "STICK", | |
0x0FE: "RED SCARF", | |
0x0FF: "BLUE SCARF", | |
0x100: "PINK SCARF", | |
0x101: "GREEN SCARF", | |
0x102: "YELLOW SCARF", | |
0x103: "MACH BIKE", | |
0x104: "COIN CASE", | |
0x105: "ITEMFINDER", | |
0x106: "OLD ROD", | |
0x107: "GOOD ROD", | |
0x108: "SUPER ROD", | |
0x109: "SS TICKET", | |
0x10A: "CONTEST PASS", | |
0x10C: "WAILMER PAIL", | |
0x10D: "DEVON GOODS", | |
0x10E: "SOOT SACK", | |
0x10F: "BASEMENT KEY", | |
0x110: "ACRO BIKE", | |
0x111: "POKEBLOCK CASE", | |
0x112: "LETTER", | |
0x113: "EON TICKET", | |
0x114: "RED ORB", | |
0x115: "BLUE ORB", | |
0x116: "SCANNER", | |
0x117: "GO-GOGGLES", | |
0x118: "METEORITE", | |
0x119: "RM 1 KEY", | |
0x11A: "RM 2 KEY", | |
0x11B: "RM 4 KEY", | |
0x11C: "RM 6 KEY", | |
0x11D: "STORAGE KEY", | |
0x11E: "ROOT FOSSIL", | |
0x11F: "CLAW FOSSIL", | |
0x120: "DEVON SCOPE", | |
0x121: "TM01", | |
0x122: "TM02", | |
0x123: "TM03", | |
0x124: "TM04", | |
0x125: "TM05", | |
0x126: "TM06", | |
0x127: "TM07", | |
0x128: "TM08", | |
0x129: "TM09", | |
0x12A: "TM10", | |
0x12B: "TM11", | |
0x12C: "TM12", | |
0x12D: "TM13", | |
0x12E: "TM14", | |
0x12F: "TM15", | |
0x130: "TM16", | |
0x131: "TM17", | |
0x132: "TM18", | |
0x133: "TM19", | |
0x134: "TM20", | |
0x135: "TM21", | |
0x136: "TM22", | |
0x137: "TM23", | |
0x138: "TM24", | |
0x139: "TM25", | |
0x13A: "TM26", | |
0x13B: "TM27", | |
0x13C: "TM28", | |
0x13D: "TM29", | |
0x13E: "TM30", | |
0x13F: "TM31", | |
0x140: "TM32", | |
0x141: "TM33", | |
0x142: "TM34", | |
0x143: "TM35", | |
0x144: "TM36", | |
0x145: "TM37", | |
0x146: "TM38", | |
0x147: "TM39", | |
0x148: "TM40", | |
0x149: "TM41", | |
0x14A: "TM42", | |
0x14B: "TM43", | |
0x14C: "TM44", | |
0x14D: "TM45", | |
0x14E: "TM46", | |
0x14F: "TM47", | |
0x150: "TM48", | |
0x151: "TM49", | |
0x152: "TM50", | |
0x153: "HM01", | |
0x154: "HM02", | |
0x155: "HM03", | |
0x156: "HM04", | |
0x157: "HM05", | |
0x158: "HM06", | |
0x159: "HM07", | |
0x15A: "HM08", | |
0x15D: "OAK’S PARCEL", | |
0x15E: "POKE FLUTE", | |
0x15F: "SECRET KEY", | |
0x160: "BIKE VOUCHER", | |
0x161: "GOLD TEETH", | |
0x162: "OLD AMBER", | |
0x163: "CARD KEY", | |
0x164: "ELEVATOR KEY", | |
0x165: "HELIX FOSSIL", | |
0x166: "DOME FOSSIL", | |
0x167: "SILPH SCOPE", | |
0x168: "BIKE", | |
0x169: "TOWN MAP", | |
0x16A: "VS SEEKER", | |
0x16B: "FAME CHECKER", | |
0x16C: "TM CASE", | |
0x16D: "BERRY POUCH", | |
0x16E: "TEACHY TV", | |
0x16F: "TRI-PASS", | |
0x170: "RAINBOW PASS", | |
0x171: "TEA", | |
0x172: "MYSTERYTICKET", | |
0x173: "AURORATICKET", | |
0x174: "POWDER JAR", | |
0x175: "RUBY", | |
0x176: "SAPPHIRE", | |
0x177: "MAGMA EMBLEM", | |
0x178: "OLD SEA MAP" | |
} | |
return items.get(index,"?") | |
def getmovename(index): | |
moves = { | |
0: "-", | |
1: "POUND", | |
2: "KARATE CHOP", | |
3: "DOUBLESLAP", | |
4: "COMET PUNCH", | |
5: "MEGA PUNCH", | |
6: "PAY DAY", | |
7: "FIRE PUNCH", | |
8: "ICE PUNCH", | |
9: "THUNDERPUNCH", | |
10: "SCRATCH", | |
11: "VICEGRIP", | |
12: "GUILLOTINE", | |
13: "RAZOR WIND", | |
14: "SWORDS DANCE", | |
15: "CUT", | |
16: "GUST", | |
17: "WING ATTACK", | |
18: "WHIRLWIND", | |
19: "FLY", | |
20: "BIND", | |
21: "SLAM", | |
22: "VINE WHIP", | |
23: "STOMP", | |
24: "DOUBLE KICK", | |
25: "MEGA KICK", | |
26: "JUMP KICK", | |
27: "ROLLING KICK", | |
28: "SAND-ATTACK", | |
29: "HEADBUTT", | |
30: "HORN ATTACK", | |
31: "FURY ATTACK", | |
32: "HORN DRILL", | |
33: "TACKLE", | |
34: "BODY SLAM", | |
35: "WRAP", | |
36: "TAKE DOWN", | |
37: "THRASH", | |
38: "DOUBLE-EDGE", | |
39: "TAIL WHIP", | |
40: "POISON STING", | |
41: "TWINEEDLE", | |
42: "PIN MISSILE", | |
43: "LEER", | |
44: "BITE", | |
45: "GROWL", | |
46: "ROAR", | |
47: "SING", | |
48: "SUPERSONIC", | |
49: "SONICBOOM", | |
50: "DISABLE", | |
51: "ACID", | |
52: "EMBER", | |
53: "FLAMETHROWER", | |
54: "MIST", | |
55: "WATER GUN", | |
56: "HYDRO PUMP", | |
57: "SURF", | |
58: "ICE BEAM", | |
59: "BLIZZARD", | |
60: "PSYBEAM", | |
61: "BUBBLEBEAM", | |
62: "AURORA BEAM", | |
63: "HYPER BEAM", | |
64: "PECK", | |
65: "DRILL PECK", | |
66: "SUBMISSION", | |
67: "LOW KICK", | |
68: "COUNTER", | |
69: "SEISMIC TOSS", | |
70: "STRENGTH", | |
71: "ABSORB", | |
72: "MEGA DRAIN", | |
73: "LEECH SEED", | |
74: "GROWTH", | |
75: "RAZOR LEAF", | |
76: "SOLARBEAM", | |
77: "POISONPOWDER", | |
78: "STUN SPORE", | |
79: "SLEEP POWDER", | |
80: "PETAL DANCE", | |
81: "STRINGSHOT", | |
82: "DRAGON RAGE", | |
83: "FIRE SPIN", | |
84: "THUNDERSHOCK", | |
85: "THUNDERBOLT", | |
86: "THUNDER WAVE", | |
87: "THUNDER", | |
88: "ROCK THROW", | |
89: "EARTHQUAKE", | |
90: "FISSURE", | |
91: "DIG", | |
92: "TOXIC", | |
93: "CONFUSION", | |
94: "PSYCHIC", | |
95: "HYPNOSIS", | |
96: "MEDITATE", | |
97: "AGILITY", | |
98: "QUICK ATTACK", | |
99: "RAGE", | |
100: "TELEPORT", | |
101: "NIGHT SHADE", | |
102: "MIMIC", | |
103: "SCREECH", | |
104: "DOUBLE TEAM", | |
105: "RECOVER", | |
106: "HARDEN", | |
107: "MINIMIZE", | |
108: "SMOKESCREEN", | |
109: "CONFUSE RAY", | |
110: "WITHDRAW", | |
111: "DEFENSE CURL", | |
112: "BARRIER", | |
113: "LIGHT SCREEN", | |
114: "HAZE", | |
115: "REFLECT", | |
116: "FOCUS ENERGY", | |
117: "BIDE", | |
118: "METRONOME", | |
119: "MIRROR MOVE", | |
120: "SELFDESTRUCT", | |
121: "EGG BOMB", | |
122: "LICK", | |
123: "SMOG", | |
124: "SLUDGE", | |
125: "BONE CLUB", | |
126: "FIRE BLAST", | |
127: "WATERFALL", | |
128: "CLAMP", | |
129: "SWIFT", | |
130: "SKULL BASH", | |
131: "SPIKE CANNON", | |
132: "CONSTRICT", | |
133: "AMNESIA", | |
134: "KINESIS", | |
135: "SOFTBOILED", | |
136: "HI JUMP KICK", | |
137: "GLARE", | |
138: "DREAM EATER", | |
139: "POISON GAS", | |
140: "BARRAGE", | |
141: "LEECH LIFE", | |
142: "LOVELY KISS", | |
143: "SKY ATTACK", | |
144: "TRANSFORM", | |
145: "BUBBLE", | |
146: "DIZZY PUNCH", | |
147: "SPORE", | |
148: "FLASH", | |
149: "PSYWAVE", | |
150: "SPLASH", | |
151: "ACID ARMOR", | |
152: "CRABHAMMER", | |
153: "EXPLOSION", | |
154: "FURY SWIPES", | |
155: "BONEMERANG", | |
156: "REST", | |
157: "ROCK SLIDE", | |
158: "HYPER FANG", | |
159: "SHARPEN", | |
160: "CONVERSION", | |
161: "TRI ATTACK", | |
162: "SUPER FANG", | |
163: "SLASH", | |
164: "SUBSTITUTE", | |
165: "STRUGGLE", | |
166: "SKETCH", | |
167: "TRIPLE KICK", | |
168: "THIEF", | |
169: "SPIDER WEB", | |
170: "MIND READER", | |
171: "NIGHTMARE", | |
172: "FLAME WHEEL", | |
173: "SNORE", | |
174: "CURSE", | |
175: "FLAIL", | |
176: "CONVERSION 2", | |
177: "AEROBLAST", | |
178: "COTTON SPORE", | |
179: "REVERSAL", | |
180: "SPITE", | |
181: "POWDER SNOW", | |
182: "PROTECT", | |
183: "MACH PUNCH", | |
184: "SCARY FACE", | |
185: "FAINT ATTACK", | |
186: "SWEET KISS", | |
187: "BELLY DRUM", | |
188: "SLUDGE BOMB", | |
189: "MUD-SLAP", | |
190: "OCTAZOOKA", | |
191: "SPIKES", | |
192: "ZAPCANNON", | |
193: "FORESIGHT", | |
194: "DESTINY BOND", | |
195: "PERISH SONG", | |
196: "ICY WIND", | |
197: "DETECT", | |
198: "BONE RUSH", | |
199: "LOCK-ON", | |
200: "OUTRAGE", | |
201: "SANDSTORM", | |
202: "GIGA DRAIN", | |
203: "ENDURE", | |
204: "CHARM", | |
205: "ROLLOUT", | |
206: "FALSE SWIPE", | |
207: "SWAGGER", | |
208: "MILK DRINK", | |
209: "SPARK", | |
210: "FURY CUTTER", | |
211: "STEEL WING", | |
212: "MEAN LOOK", | |
213: "ATTRACT", | |
214: "SLEEPTALK", | |
215: "HEAL BELL", | |
216: "RETURN", | |
217: "PRESENT", | |
218: "FRUSTRATION", | |
219: "SAFEGUARD", | |
220: "PAIN SPLIT", | |
221: "SACRED FIRE", | |
222: "MAGNITUDE", | |
223: "DYNAMICPUNCH", | |
224: "MEGAHORN", | |
225: "DRAGONBREATH", | |
226: "BATON PASS", | |
227: "ENCORE", | |
228: "PURSUIT", | |
229: "RAPID SPIN", | |
230: "SWEETSCENT", | |
231: "IRON TAIL", | |
232: "METAL CLAW", | |
233: "VITAL THROW", | |
234: "MORNING SUN", | |
235: "SYNTHESIS", | |
236: "MOONLIGHT", | |
237: "HIDDEN POWER", | |
238: "CROSS CHOP", | |
239: "TWISTER", | |
240: "RAIN DANCE", | |
241: "SUNNY DAY", | |
242: "CRUNCH", | |
243: "MIRROR COAT", | |
244: "PSYCH UP", | |
245: "EXTREMESPEED", | |
246: "ANCIENTPOWER", | |
247: "SHADOW BALL", | |
248: "FUTURE SIGHT", | |
249: "ROCK SMASH", | |
250: "WHIRLPOOL", | |
251: "BEATUP", | |
252: "FAKE OUT", | |
253: "UPROAR", | |
254: "STOCKPILE", | |
255: "SPIT UP", | |
256: "SWALLOW", | |
257: "HEAT WAVE", | |
258: "HAIL", | |
259: "TORMENT", | |
260: "FLATTER", | |
261: "WILL-O-WISP", | |
262: "MEMENTO", | |
263: "FACADE", | |
264: "FOCUS PUNCH", | |
265: "SMELLINGSALT", | |
266: "FOLLOW ME", | |
267: "NATURE POWER", | |
268: "CHARGE", | |
269: "TAUNT", | |
270: "HELPING HAND", | |
271: "TRICK", | |
272: "ROLE PLAY", | |
273: "WISH", | |
274: "ASSIST", | |
275: "INGRAIN", | |
276: "SUPERPOWER", | |
277: "MAGIC COAT", | |
278: "RECYCLE", | |
279: "REVENGE", | |
280: "BRICK BREAK", | |
281: "YAWN", | |
282: "KNOCK OFF", | |
283: "ENDEAVOR", | |
284: "ERUPTION", | |
285: "SKILL SWAP", | |
286: "IMPRISON", | |
287: "REFRESH", | |
288: "GRUDGE", | |
289: "SNATCH", | |
290: "SECRET POWER", | |
291: "DIVE", | |
292: "ARM THRUST", | |
293: "CAMOUFLAGE", | |
294: "TAIL GLOW", | |
295: "LUSTER PURGE", | |
296: "MIST BALL", | |
297: "FEATHERDANCE", | |
298: "TEETER DANCE", | |
299: "BLAZE KICK", | |
300: "MUD SPORT", | |
301: "ICE BALL", | |
302: "NEEDLE ARM", | |
303: "SLACK OFF", | |
304: "HYPER VOICE", | |
305: "POISONFANG", | |
306: "CRUSH CLAW", | |
307: "BLAST BURN", | |
308: "HYDRO CANNON", | |
309: "METEOR MASH", | |
310: "ASTONISH", | |
311: "WEATHER BALL", | |
312: "AROMATHERAPY", | |
313: "FAKE TEARS", | |
314: "AIR CUTTER", | |
315: "OVERHEAT", | |
316: "ODOR SLEUTH", | |
317: "ROCK TOMB", | |
318: "SILVER WIND", | |
319: "METAL SOUND", | |
320: "GRASSWHISTLE", | |
321: "TICKLE", | |
322: "COSMIC POWER", | |
323: "WATER SPOUT", | |
324: "SIGNAL BEAM", | |
325: "SHADOW PUNCH", | |
326: "EXTRASENSORY", | |
327: "SKY UPPERCUT", | |
328: "SAND TOMB", | |
329: "SHEER COLD", | |
330: "MUDDY WATER", | |
331: "BULLET SEED", | |
332: "AERIAL ACE", | |
333: "ICICLE SPEAR", | |
334: "IRON DEFENSE", | |
335: "BLOCK", | |
336: "HOWL", | |
337: "DRAGONCLAW", | |
338: "FRENZY PLANT", | |
339: "BULK UP", | |
340: "BOUNCE", | |
341: "MUD SHOT", | |
342: "POISON TAIL", | |
343: "COVET", | |
344: "VOLT TACKLE", | |
345: "MAGICAL LEAF", | |
346: "WATER SPORT", | |
347: "CALMMIND", | |
348: "LEAF BLADE", | |
349: "DRAGON DANCE", | |
350: "ROCK BLAST", | |
351: "SHOCK WAVE", | |
352: "WATER PULSE", | |
353: "DOOM DESIRE", | |
354: "PSYCHO BOOST" | |
} | |
return moves.get(index,"?") | |
def getgame(index): | |
games = { | |
0: "Colosseum Bonus Disc", | |
1: "Sapphire", | |
2: "Ruby", | |
3: "Emerald", | |
4: "FireRed", | |
5: "LeafGreen", | |
15: "Colosseum/XD" | |
} | |
return games.get(index,"Unknown Game") | |
def getball(index): | |
balls = { | |
1: "Master Ball", | |
2: "Ultra Ball", | |
3: "Great Ball", | |
4: "Poké Ball", | |
5: "Safari Ball", | |
6: "Net Ball", | |
7: "Dive Ball", | |
8: "Nest Ball", | |
9: "Repeat Ball", | |
10: "Timer Ball", | |
11: "Luxury Ball", | |
12: "Premier Ball", | |
} | |
return balls.get(index,"Unknown Ball") | |
def getnature(index): | |
natures = { | |
0: ("Hardy", (+00,+00,+00,+00,+00)), #neutral | |
1: ("Lonely", (+10,-10,+00,+00,+00)), | |
2: ("Brave", (+10,+00,-10,+00,+00)), | |
3: ("Adamant", (+10,+00,+00,-10,+00)), | |
4: ("Naughty", (+10,+00,+00,+00,-10)), | |
5: ("Bold", (-10,+10,+00,+00,+00)), | |
6: ("Docile", (+00,+00,+00,+00,+00)), #neutral | |
7: ("Relaxed", (+00,+10,-10,+00,+00)), | |
8: ("Impish", (+00,+10,+00,-10,+00)), | |
9: ("Lax", (+00,+10,+00,+00,-10)), | |
10: ("Timid", (-10,+00,+10,+00,+00)), | |
11: ("Hasty", (+00,-10,+10,+00,+00)), | |
12: ("Serious", (+00,+00,+00,+00,+00)), #neutral | |
13: ("Jolly", (+00,+00,+10,-10,+00)), | |
14: ("Naive", (+00,+00,+10,+00,-10)), | |
15: ("Modest", (-10,+00,+00,+10,+00)), | |
16: ("Mild", (+00,-10,+00,+10,+00)), | |
17: ("Quiet", (+00,+00,-10,+10,+00)), | |
18: ("Bashful", (+00,+00,+00,+00,+00)), #neutral | |
19: ("Rash", (+00,+00,+00,+10,-10)), | |
20: ("Calm", (-10,+00,+00,+00,+10)), | |
21: ("Gentle", (+00,-10,+00,+00,+10)), | |
22: ("Sassy", (+00,+00,-10,+00,+10)), | |
23: ("Careful", (+00,+00,+00,-10,+10)), | |
24: ("Quirky ", (+00,+00,+00,+00,+00)) #neutral | |
} | |
return natures.get(index, ("Error", (0,0,0,0,0))) | |
def getbasestats(index): | |
stats = { | |
1: (0x2d, 0x31, 0x31, 0x2d, 0x41, 0x41), | |
2: (0x3c, 0x3e, 0x3f, 0x3c, 0x50, 0x50), | |
3: (0x50, 0x52, 0x53, 0x50, 0x64, 0x64), | |
4: (0x27, 0x34, 0x2b, 0x41, 0x3c, 0x32), | |
5: (0x3a, 0x40, 0x3a, 0x50, 0x50, 0x41), | |
6: (0x4e, 0x54, 0x4e, 0x64, 0x6d, 0x55), | |
7: (0x2c, 0x30, 0x41, 0x2b, 0x32, 0x40), | |
8: (0x3b, 0x3f, 0x50, 0x3a, 0x41, 0x50), | |
9: (0x4f, 0x53, 0x64, 0x4e, 0x55, 0x69), | |
10: (0x2d, 0x1e, 0x23, 0x2d, 0x14, 0x14), | |
11: (0x32, 0x14, 0x37, 0x1e, 0x19, 0x19), | |
12: (0x3c, 0x2d, 0x32, 0x46, 0x50, 0x50), | |
13: (0x28, 0x23, 0x1e, 0x32, 0x14, 0x14), | |
14: (0x2d, 0x19, 0x32, 0x23, 0x19, 0x19), | |
15: (0x41, 0x50, 0x28, 0x4b, 0x2d, 0x50), | |
16: (0x28, 0x2d, 0x28, 0x38, 0x23, 0x23), | |
17: (0x3f, 0x3c, 0x37, 0x47, 0x32, 0x32), | |
18: (0x53, 0x50, 0x4b, 0x5b, 0x46, 0x46), | |
19: (0x1e, 0x38, 0x23, 0x48, 0x19, 0x23), | |
20: (0x37, 0x51, 0x3c, 0x61, 0x32, 0x46), | |
21: (0x28, 0x3c, 0x1e, 0x46, 0x1f, 0x1f), | |
22: (0x41, 0x5a, 0x41, 0x64, 0x3d, 0x3d), | |
23: (0x23, 0x3c, 0x2c, 0x37, 0x28, 0x36), | |
24: (0x3c, 0x55, 0x45, 0x50, 0x41, 0x4f), | |
25: (0x23, 0x37, 0x1e, 0x5a, 0x32, 0x28), | |
26: (0x3c, 0x5a, 0x37, 0x64, 0x5a, 0x50), | |
27: (0x32, 0x4b, 0x55, 0x28, 0x14, 0x1e), | |
28: (0x4b, 0x64, 0x6e, 0x41, 0x2d, 0x37), | |
29: (0x37, 0x2f, 0x34, 0x29, 0x28, 0x28), | |
30: (0x46, 0x3e, 0x43, 0x38, 0x37, 0x37), | |
31: (0x5a, 0x52, 0x57, 0x4c, 0x4b, 0x55), | |
32: (0x2e, 0x39, 0x28, 0x32, 0x28, 0x28), | |
33: (0x3d, 0x48, 0x39, 0x41, 0x37, 0x37), | |
34: (0x51, 0x5c, 0x4d, 0x55, 0x55, 0x4b), | |
35: (0x46, 0x2d, 0x30, 0x23, 0x3c, 0x41), | |
36: (0x5f, 0x46, 0x49, 0x3c, 0x55, 0x5a), | |
37: (0x26, 0x29, 0x28, 0x41, 0x32, 0x41), | |
38: (0x49, 0x4c, 0x4b, 0x64, 0x51, 0x64), | |
39: (0x73, 0x2d, 0x14, 0x14, 0x2d, 0x19), | |
40: (0x8c, 0x46, 0x2d, 0x2d, 0x4b, 0x32), | |
41: (0x28, 0x2d, 0x23, 0x37, 0x1e, 0x28), | |
42: (0x4b, 0x50, 0x46, 0x5a, 0x41, 0x4b), | |
43: (0x2d, 0x32, 0x37, 0x1e, 0x4b, 0x41), | |
44: (0x3c, 0x41, 0x46, 0x28, 0x55, 0x4b), | |
45: (0x4b, 0x50, 0x55, 0x32, 0x64, 0x5a), | |
46: (0x23, 0x46, 0x37, 0x19, 0x2d, 0x37), | |
47: (0x3c, 0x5f, 0x50, 0x1e, 0x3c, 0x50), | |
48: (0x3c, 0x37, 0x32, 0x2d, 0x28, 0x37), | |
49: (0x46, 0x41, 0x3c, 0x5a, 0x5a, 0x4b), | |
50: (0x0a, 0x37, 0x19, 0x5f, 0x23, 0x2d), | |
51: (0x23, 0x50, 0x32, 0x78, 0x32, 0x46), | |
52: (0x28, 0x2d, 0x23, 0x5a, 0x28, 0x28), | |
53: (0x41, 0x46, 0x3c, 0x73, 0x41, 0x41), | |
54: (0x32, 0x34, 0x30, 0x37, 0x41, 0x32), | |
55: (0x50, 0x52, 0x4e, 0x55, 0x5f, 0x50), | |
56: (0x28, 0x50, 0x23, 0x46, 0x23, 0x2d), | |
57: (0x41, 0x69, 0x3c, 0x5f, 0x3c, 0x46), | |
58: (0x37, 0x46, 0x2d, 0x3c, 0x46, 0x32), | |
59: (0x5a, 0x6e, 0x50, 0x5f, 0x64, 0x50), | |
60: (0x28, 0x32, 0x28, 0x5a, 0x28, 0x28), | |
61: (0x41, 0x41, 0x41, 0x5a, 0x32, 0x32), | |
62: (0x5a, 0x55, 0x5f, 0x46, 0x46, 0x5a), | |
63: (0x19, 0x14, 0x0f, 0x5a, 0x69, 0x37), | |
64: (0x28, 0x23, 0x1e, 0x69, 0x78, 0x46), | |
65: (0x37, 0x32, 0x2d, 0x78, 0x87, 0x55), | |
66: (0x46, 0x50, 0x32, 0x23, 0x23, 0x23), | |
67: (0x50, 0x64, 0x46, 0x2d, 0x32, 0x3c), | |
68: (0x5a, 0x82, 0x50, 0x37, 0x41, 0x55), | |
69: (0x32, 0x4b, 0x23, 0x28, 0x46, 0x1e), | |
70: (0x41, 0x5a, 0x32, 0x37, 0x55, 0x2d), | |
71: (0x50, 0x69, 0x41, 0x46, 0x64, 0x3c), | |
72: (0x28, 0x28, 0x23, 0x46, 0x32, 0x64), | |
73: (0x50, 0x46, 0x41, 0x64, 0x50, 0x78), | |
74: (0x28, 0x50, 0x64, 0x14, 0x1e, 0x1e), | |
75: (0x37, 0x5f, 0x73, 0x23, 0x2d, 0x2d), | |
76: (0x50, 0x6e, 0x82, 0x2d, 0x37, 0x41), | |
77: (0x32, 0x55, 0x37, 0x5a, 0x41, 0x41), | |
78: (0x41, 0x64, 0x46, 0x69, 0x50, 0x50), | |
79: (0x5a, 0x41, 0x41, 0x0f, 0x28, 0x28), | |
80: (0x5f, 0x4b, 0x6e, 0x1e, 0x64, 0x50), | |
81: (0x19, 0x23, 0x46, 0x2d, 0x5f, 0x37), | |
82: (0x32, 0x3c, 0x5f, 0x46, 0x78, 0x46), | |
83: (0x34, 0x41, 0x37, 0x3c, 0x3a, 0x3e), | |
84: (0x23, 0x55, 0x2d, 0x4b, 0x23, 0x23), | |
85: (0x3c, 0x6e, 0x46, 0x64, 0x3c, 0x3c), | |
86: (0x41, 0x2d, 0x37, 0x2d, 0x2d, 0x46), | |
87: (0x5a, 0x46, 0x50, 0x46, 0x46, 0x5f), | |
88: (0x50, 0x50, 0x32, 0x19, 0x28, 0x32), | |
89: (0x69, 0x69, 0x4b, 0x32, 0x41, 0x64), | |
90: (0x1e, 0x41, 0x64, 0x28, 0x2d, 0x19), | |
91: (0x32, 0x5f, 0xb4, 0x46, 0x55, 0x2d), | |
92: (0x1e, 0x23, 0x1e, 0x50, 0x64, 0x23), | |
93: (0x2d, 0x32, 0x2d, 0x5f, 0x73, 0x37), | |
94: (0x3c, 0x41, 0x3c, 0x6e, 0x82, 0x4b), | |
95: (0x23, 0x2d, 0xa0, 0x46, 0x1e, 0x2d), | |
96: (0x3c, 0x30, 0x2d, 0x2a, 0x2b, 0x5a), | |
97: (0x55, 0x49, 0x46, 0x43, 0x49, 0x73), | |
98: (0x1e, 0x69, 0x5a, 0x32, 0x19, 0x19), | |
99: (0x37, 0x82, 0x73, 0x4b, 0x32, 0x32), | |
100: (0x28, 0x1e, 0x32, 0x64, 0x37, 0x37), | |
101: (0x3c, 0x32, 0x46, 0x8c, 0x50, 0x50), | |
102: (0x3c, 0x28, 0x50, 0x28, 0x3c, 0x2d), | |
103: (0x5f, 0x5f, 0x55, 0x37, 0x7d, 0x41), | |
104: (0x32, 0x32, 0x5f, 0x23, 0x28, 0x32), | |
105: (0x3c, 0x50, 0x6e, 0x2d, 0x32, 0x50), | |
106: (0x32, 0x78, 0x35, 0x57, 0x23, 0x6e), | |
107: (0x32, 0x69, 0x4f, 0x4c, 0x23, 0x6e), | |
108: (0x5a, 0x37, 0x4b, 0x1e, 0x3c, 0x4b), | |
109: (0x28, 0x41, 0x5f, 0x23, 0x3c, 0x2d), | |
110: (0x41, 0x5a, 0x78, 0x3c, 0x55, 0x46), | |
111: (0x50, 0x55, 0x5f, 0x19, 0x1e, 0x1e), | |
112: (0x69, 0x82, 0x78, 0x28, 0x2d, 0x2d), | |
113: (0xfa, 0x05, 0x05, 0x32, 0x23, 0x69), | |
114: (0x41, 0x37, 0x73, 0x3c, 0x64, 0x28), | |
115: (0x69, 0x5f, 0x50, 0x5a, 0x28, 0x50), | |
116: (0x1e, 0x28, 0x46, 0x3c, 0x46, 0x19), | |
117: (0x37, 0x41, 0x5f, 0x55, 0x5f, 0x2d), | |
118: (0x2d, 0x43, 0x3c, 0x3f, 0x23, 0x32), | |
119: (0x50, 0x5c, 0x41, 0x44, 0x41, 0x50), | |
120: (0x1e, 0x2d, 0x37, 0x55, 0x46, 0x37), | |
121: (0x3c, 0x4b, 0x55, 0x73, 0x64, 0x55), | |
122: (0x28, 0x2d, 0x41, 0x5a, 0x64, 0x78), | |
123: (0x46, 0x6e, 0x50, 0x69, 0x37, 0x50), | |
124: (0x41, 0x32, 0x23, 0x5f, 0x73, 0x5f), | |
125: (0x41, 0x53, 0x39, 0x69, 0x5f, 0x55), | |
126: (0x41, 0x5f, 0x39, 0x5d, 0x64, 0x55), | |
127: (0x41, 0x7d, 0x64, 0x55, 0x37, 0x46), | |
128: (0x4b, 0x64, 0x5f, 0x6e, 0x28, 0x46), | |
129: (0x14, 0x0a, 0x37, 0x50, 0x0f, 0x14), | |
130: (0x5f, 0x7d, 0x4f, 0x51, 0x3c, 0x64), | |
131: (0x82, 0x55, 0x50, 0x3c, 0x55, 0x5f), | |
132: (0x30, 0x30, 0x30, 0x30, 0x30, 0x30), | |
133: (0x37, 0x37, 0x32, 0x37, 0x2d, 0x41), | |
134: (0x82, 0x41, 0x3c, 0x41, 0x6e, 0x5f), | |
135: (0x41, 0x41, 0x3c, 0x82, 0x6e, 0x5f), | |
136: (0x41, 0x82, 0x3c, 0x41, 0x5f, 0x6e), | |
137: (0x41, 0x3c, 0x46, 0x28, 0x55, 0x4b), | |
138: (0x23, 0x28, 0x64, 0x23, 0x5a, 0x37), | |
139: (0x46, 0x3c, 0x7d, 0x37, 0x73, 0x46), | |
140: (0x1e, 0x50, 0x5a, 0x37, 0x37, 0x2d), | |
141: (0x3c, 0x73, 0x69, 0x50, 0x41, 0x46), | |
142: (0x50, 0x69, 0x41, 0x82, 0x3c, 0x4b), | |
143: (0xa0, 0x6e, 0x41, 0x1e, 0x41, 0x6e), | |
144: (0x5a, 0x55, 0x64, 0x55, 0x5f, 0x7d), | |
145: (0x5a, 0x5a, 0x55, 0x64, 0x7d, 0x5a), | |
146: (0x5a, 0x64, 0x5a, 0x5a, 0x7d, 0x55), | |
147: (0x29, 0x40, 0x2d, 0x32, 0x32, 0x32), | |
148: (0x3d, 0x54, 0x41, 0x46, 0x46, 0x46), | |
149: (0x5b, 0x86, 0x5f, 0x50, 0x64, 0x64), | |
150: (0x6a, 0x6e, 0x5a, 0x82, 0x9a, 0x5a), | |
151: (0x64, 0x64, 0x64, 0x64, 0x64, 0x64), | |
152: (0x2d, 0x31, 0x41, 0x2d, 0x31, 0x41), | |
153: (0x3c, 0x3e, 0x50, 0x3c, 0x3f, 0x50), | |
154: (0x50, 0x52, 0x64, 0x50, 0x53, 0x64), | |
155: (0x27, 0x34, 0x2b, 0x41, 0x3c, 0x32), | |
156: (0x3a, 0x40, 0x3a, 0x50, 0x50, 0x41), | |
157: (0x4e, 0x54, 0x4e, 0x64, 0x6d, 0x55), | |
158: (0x32, 0x41, 0x40, 0x2b, 0x2c, 0x30), | |
159: (0x41, 0x50, 0x50, 0x3a, 0x3b, 0x3f), | |
160: (0x55, 0x69, 0x64, 0x4e, 0x4f, 0x53), | |
161: (0x23, 0x2e, 0x22, 0x14, 0x23, 0x2d), | |
162: (0x55, 0x4c, 0x40, 0x5a, 0x2d, 0x37), | |
163: (0x3c, 0x1e, 0x1e, 0x32, 0x24, 0x38), | |
164: (0x64, 0x32, 0x32, 0x46, 0x4c, 0x60), | |
165: (0x28, 0x14, 0x1e, 0x37, 0x28, 0x50), | |
166: (0x37, 0x23, 0x32, 0x55, 0x37, 0x6e), | |
167: (0x28, 0x3c, 0x28, 0x1e, 0x28, 0x28), | |
168: (0x46, 0x5a, 0x46, 0x28, 0x3c, 0x3c), | |
169: (0x55, 0x5a, 0x50, 0x82, 0x46, 0x50), | |
170: (0x4b, 0x26, 0x26, 0x43, 0x38, 0x38), | |
171: (0x7d, 0x3a, 0x3a, 0x43, 0x4c, 0x4c), | |
172: (0x14, 0x28, 0x0f, 0x3c, 0x23, 0x23), | |
173: (0x32, 0x19, 0x1c, 0x0f, 0x2d, 0x37), | |
174: (0x5a, 0x1e, 0x0f, 0x0f, 0x28, 0x14), | |
175: (0x23, 0x14, 0x41, 0x14, 0x28, 0x41), | |
176: (0x37, 0x28, 0x55, 0x28, 0x50, 0x69), | |
177: (0x28, 0x32, 0x2d, 0x46, 0x46, 0x2d), | |
178: (0x41, 0x4b, 0x46, 0x5f, 0x5f, 0x46), | |
179: (0x37, 0x28, 0x28, 0x23, 0x41, 0x2d), | |
180: (0x46, 0x37, 0x37, 0x2d, 0x50, 0x3c), | |
181: (0x5a, 0x4b, 0x4b, 0x37, 0x73, 0x5a), | |
182: (0x4b, 0x50, 0x55, 0x32, 0x5a, 0x64), | |
183: (0x46, 0x14, 0x32, 0x28, 0x14, 0x32), | |
184: (0x64, 0x32, 0x50, 0x32, 0x32, 0x50), | |
185: (0x46, 0x64, 0x73, 0x1e, 0x1e, 0x41), | |
186: (0x5a, 0x4b, 0x4b, 0x46, 0x5a, 0x64), | |
187: (0x23, 0x23, 0x28, 0x32, 0x23, 0x37), | |
188: (0x37, 0x2d, 0x32, 0x50, 0x2d, 0x41), | |
189: (0x4b, 0x37, 0x46, 0x6e, 0x37, 0x55), | |
190: (0x37, 0x46, 0x37, 0x55, 0x28, 0x37), | |
191: (0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e), | |
192: (0x4b, 0x4b, 0x37, 0x1e, 0x69, 0x55), | |
193: (0x41, 0x41, 0x2d, 0x5f, 0x4b, 0x2d), | |
194: (0x37, 0x2d, 0x2d, 0x0f, 0x19, 0x19), | |
195: (0x5f, 0x55, 0x55, 0x23, 0x41, 0x41), | |
196: (0x41, 0x41, 0x3c, 0x6e, 0x82, 0x5f), | |
197: (0x5f, 0x41, 0x6e, 0x41, 0x3c, 0x82), | |
198: (0x3c, 0x55, 0x2a, 0x5b, 0x55, 0x2a), | |
199: (0x5f, 0x4b, 0x50, 0x1e, 0x64, 0x6e), | |
200: (0x3c, 0x3c, 0x3c, 0x55, 0x55, 0x55), | |
201: (0x30, 0x48, 0x30, 0x30, 0x48, 0x30), | |
202: (0xbe, 0x21, 0x3a, 0x21, 0x21, 0x3a), | |
203: (0x46, 0x50, 0x41, 0x55, 0x5a, 0x41), | |
204: (0x32, 0x41, 0x5a, 0x0f, 0x23, 0x23), | |
205: (0x4b, 0x5a, 0x8c, 0x28, 0x3c, 0x3c), | |
206: (0x64, 0x46, 0x46, 0x2d, 0x41, 0x41), | |
207: (0x41, 0x4b, 0x69, 0x55, 0x23, 0x41), | |
208: (0x4b, 0x55, 0xc8, 0x1e, 0x37, 0x41), | |
209: (0x3c, 0x50, 0x32, 0x1e, 0x28, 0x28), | |
210: (0x5a, 0x78, 0x4b, 0x2d, 0x3c, 0x3c), | |
211: (0x41, 0x5f, 0x4b, 0x55, 0x37, 0x37), | |
212: (0x46, 0x82, 0x64, 0x41, 0x37, 0x50), | |
213: (0x14, 0x0a, 0xe6, 0x05, 0x0a, 0xe6), | |
214: (0x50, 0x7d, 0x4b, 0x55, 0x28, 0x5f), | |
215: (0x37, 0x5f, 0x37, 0x73, 0x23, 0x4b), | |
216: (0x3c, 0x50, 0x32, 0x28, 0x32, 0x32), | |
217: (0x5a, 0x82, 0x4b, 0x37, 0x4b, 0x4b), | |
218: (0x28, 0x28, 0x28, 0x14, 0x46, 0x28), | |
219: (0x32, 0x32, 0x78, 0x1e, 0x50, 0x50), | |
220: (0x32, 0x32, 0x28, 0x32, 0x1e, 0x1e), | |
221: (0x64, 0x64, 0x50, 0x32, 0x3c, 0x3c), | |
222: (0x37, 0x37, 0x55, 0x23, 0x41, 0x55), | |
223: (0x23, 0x41, 0x23, 0x41, 0x41, 0x23), | |
224: (0x4b, 0x69, 0x4b, 0x2d, 0x69, 0x4b), | |
225: (0x2d, 0x37, 0x2d, 0x4b, 0x41, 0x2d), | |
226: (0x41, 0x28, 0x46, 0x46, 0x50, 0x8c), | |
227: (0x41, 0x50, 0x8c, 0x46, 0x28, 0x46), | |
228: (0x2d, 0x3c, 0x1e, 0x41, 0x50, 0x32), | |
229: (0x4b, 0x5a, 0x32, 0x5f, 0x6e, 0x50), | |
230: (0x4b, 0x5f, 0x5f, 0x55, 0x5f, 0x5f), | |
231: (0x5a, 0x3c, 0x3c, 0x28, 0x28, 0x28), | |
232: (0x5a, 0x78, 0x78, 0x32, 0x3c, 0x3c), | |
233: (0x55, 0x50, 0x5a, 0x3c, 0x69, 0x5f), | |
234: (0x49, 0x5f, 0x3e, 0x55, 0x55, 0x41), | |
235: (0x37, 0x14, 0x23, 0x4b, 0x14, 0x2d), | |
236: (0x23, 0x23, 0x23, 0x23, 0x23, 0x23), | |
237: (0x32, 0x5f, 0x5f, 0x46, 0x23, 0x6e), | |
238: (0x2d, 0x1e, 0x0f, 0x41, 0x55, 0x41), | |
239: (0x2d, 0x3f, 0x25, 0x5f, 0x41, 0x37), | |
240: (0x2d, 0x4b, 0x25, 0x53, 0x46, 0x37), | |
241: (0x5f, 0x50, 0x69, 0x64, 0x28, 0x46), | |
242: (0xff, 0x0a, 0x0a, 0x37, 0x4b, 0x87), | |
243: (0x5a, 0x55, 0x4b, 0x73, 0x73, 0x64), | |
244: (0x73, 0x73, 0x55, 0x64, 0x5a, 0x4b), | |
245: (0x64, 0x4b, 0x73, 0x55, 0x5a, 0x73), | |
246: (0x32, 0x40, 0x32, 0x29, 0x2d, 0x32), | |
247: (0x46, 0x54, 0x46, 0x33, 0x41, 0x46), | |
248: (0x64, 0x86, 0x6e, 0x3d, 0x5f, 0x64), | |
249: (0x6a, 0x5a, 0x82, 0x6e, 0x5a, 0x9a), | |
250: (0x6a, 0x82, 0x5a, 0x5a, 0x6e, 0x9a), | |
251: (0x64, 0x64, 0x64, 0x64, 0x64, 0x64), | |
252: (0x32, 0x96, 0x32, 0x96, 0x96, 0x32), | |
253: (0x32, 0x96, 0x32, 0x96, 0x96, 0x32), | |
254: (0x32, 0x96, 0x32, 0x96, 0x96, 0x32), | |
255: (0x32, 0x96, 0x32, 0x96, 0x96, 0x32), | |
256: (0x32, 0x96, 0x32, 0x96, 0x96, 0x32), | |
257: (0x32, 0x96, 0x32, 0x96, 0x96, 0x32), | |
258: (0x32, 0x96, 0x32, 0x96, 0x96, 0x32), | |
259: (0x32, 0x96, 0x32, 0x96, 0x96, 0x32), | |
260: (0x32, 0x96, 0x32, 0x96, 0x96, 0x32), | |
261: (0x32, 0x96, 0x32, 0x96, 0x96, 0x32), | |
262: (0x32, 0x96, 0x32, 0x96, 0x96, 0x32), | |
263: (0x32, 0x96, 0x32, 0x96, 0x96, 0x32), | |
264: (0x32, 0x96, 0x32, 0x96, 0x96, 0x32), | |
265: (0x32, 0x96, 0x32, 0x96, 0x96, 0x32), | |
266: (0x32, 0x96, 0x32, 0x96, 0x96, 0x32), | |
267: (0x32, 0x96, 0x32, 0x96, 0x96, 0x32), | |
268: (0x32, 0x96, 0x32, 0x96, 0x96, 0x32), | |
269: (0x32, 0x96, 0x32, 0x96, 0x96, 0x32), | |
270: (0x32, 0x96, 0x32, 0x96, 0x96, 0x32), | |
271: (0x32, 0x96, 0x32, 0x96, 0x96, 0x32), | |
272: (0x32, 0x96, 0x32, 0x96, 0x96, 0x32), | |
273: (0x32, 0x96, 0x32, 0x96, 0x96, 0x32), | |
274: (0x32, 0x96, 0x32, 0x96, 0x96, 0x32), | |
275: (0x32, 0x96, 0x32, 0x96, 0x96, 0x32), | |
276: (0x32, 0x96, 0x32, 0x96, 0x96, 0x32), | |
277: (0x28, 0x2d, 0x23, 0x46, 0x41, 0x37), | |
278: (0x32, 0x41, 0x2d, 0x5f, 0x55, 0x41), | |
279: (0x46, 0x55, 0x41, 0x78, 0x69, 0x55), | |
280: (0x2d, 0x3c, 0x28, 0x2d, 0x46, 0x32), | |
281: (0x3c, 0x55, 0x3c, 0x37, 0x55, 0x3c), | |
282: (0x50, 0x78, 0x46, 0x50, 0x6e, 0x46), | |
283: (0x32, 0x46, 0x32, 0x28, 0x32, 0x32), | |
284: (0x46, 0x55, 0x46, 0x32, 0x3c, 0x46), | |
285: (0x64, 0x6e, 0x5a, 0x3c, 0x55, 0x5a), | |
286: (0x23, 0x37, 0x23, 0x23, 0x1e, 0x1e), | |
287: (0x46, 0x5a, 0x46, 0x46, 0x3c, 0x3c), | |
288: (0x26, 0x1e, 0x29, 0x3c, 0x1e, 0x29), | |
289: (0x4e, 0x46, 0x3d, 0x64, 0x32, 0x3d), | |
290: (0x2d, 0x2d, 0x23, 0x14, 0x14, 0x1e), | |
291: (0x32, 0x23, 0x37, 0x0f, 0x19, 0x19), | |
292: (0x3c, 0x46, 0x32, 0x41, 0x5a, 0x32), | |
293: (0x32, 0x23, 0x37, 0x0f, 0x19, 0x19), | |
294: (0x3c, 0x32, 0x46, 0x41, 0x32, 0x5a), | |
295: (0x28, 0x1e, 0x1e, 0x1e, 0x28, 0x32), | |
296: (0x3c, 0x32, 0x32, 0x32, 0x3c, 0x46), | |
297: (0x50, 0x46, 0x46, 0x46, 0x5a, 0x64), | |
298: (0x28, 0x28, 0x32, 0x1e, 0x1e, 0x1e), | |
299: (0x46, 0x46, 0x28, 0x3c, 0x3c, 0x28), | |
300: (0x5a, 0x64, 0x3c, 0x50, 0x5a, 0x3c), | |
301: (0x1f, 0x2d, 0x5a, 0x28, 0x1e, 0x1e), | |
302: (0x3d, 0x5a, 0x2d, 0xa0, 0x32, 0x32), | |
303: (0x01, 0x5a, 0x2d, 0x28, 0x1e, 0x1e), | |
304: (0x28, 0x37, 0x1e, 0x55, 0x1e, 0x1e), | |
305: (0x3c, 0x55, 0x3c, 0x7d, 0x32, 0x32), | |
306: (0x3c, 0x28, 0x3c, 0x23, 0x28, 0x3c), | |
307: (0x3c, 0x82, 0x50, 0x46, 0x3c, 0x3c), | |
308: (0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c), | |
309: (0x28, 0x1e, 0x1e, 0x55, 0x37, 0x1e), | |
310: (0x3c, 0x32, 0x64, 0x41, 0x55, 0x46), | |
311: (0x28, 0x1e, 0x20, 0x41, 0x32, 0x34), | |
312: (0x46, 0x3c, 0x3e, 0x3c, 0x50, 0x52), | |
313: (0x82, 0x46, 0x23, 0x3c, 0x46, 0x23), | |
314: (0xaa, 0x5a, 0x2d, 0x3c, 0x5a, 0x2d), | |
315: (0x32, 0x2d, 0x2d, 0x32, 0x23, 0x23), | |
316: (0x46, 0x41, 0x41, 0x46, 0x37, 0x37), | |
317: (0x3c, 0x5a, 0x46, 0x28, 0x3c, 0x78), | |
318: (0x28, 0x28, 0x37, 0x37, 0x28, 0x46), | |
319: (0x3c, 0x46, 0x69, 0x4b, 0x46, 0x78), | |
320: (0x1e, 0x2d, 0x87, 0x1e, 0x2d, 0x5a), | |
321: (0x46, 0x55, 0x8c, 0x14, 0x55, 0x46), | |
322: (0x32, 0x4b, 0x4b, 0x32, 0x41, 0x41), | |
323: (0x32, 0x30, 0x2b, 0x3c, 0x2e, 0x29), | |
324: (0x6e, 0x4e, 0x49, 0x3c, 0x4c, 0x47), | |
325: (0x2b, 0x1e, 0x37, 0x61, 0x28, 0x41), | |
326: (0x2b, 0x50, 0x41, 0x23, 0x32, 0x23), | |
327: (0x3f, 0x78, 0x55, 0x37, 0x5a, 0x37), | |
328: (0x14, 0x0f, 0x14, 0x50, 0x0a, 0x37), | |
329: (0x5f, 0x3c, 0x4f, 0x51, 0x64, 0x7d), | |
330: (0x2d, 0x5a, 0x14, 0x41, 0x41, 0x14), | |
331: (0x46, 0x78, 0x28, 0x5f, 0x5f, 0x28), | |
332: (0x2d, 0x64, 0x2d, 0x0a, 0x2d, 0x2d), | |
333: (0x32, 0x46, 0x32, 0x46, 0x32, 0x32), | |
334: (0x50, 0x64, 0x50, 0x64, 0x50, 0x50), | |
335: (0x48, 0x3c, 0x1e, 0x19, 0x14, 0x1e), | |
336: (0x90, 0x78, 0x3c, 0x32, 0x28, 0x3c), | |
337: (0x28, 0x2d, 0x28, 0x41, 0x41, 0x28), | |
338: (0x46, 0x4b, 0x3c, 0x69, 0x69, 0x3c), | |
339: (0x3c, 0x3c, 0x28, 0x23, 0x41, 0x2d), | |
340: (0x46, 0x64, 0x46, 0x28, 0x69, 0x4b), | |
341: (0x46, 0x28, 0x32, 0x19, 0x37, 0x32), | |
342: (0x5a, 0x3c, 0x46, 0x2d, 0x4b, 0x46), | |
343: (0x6e, 0x50, 0x5a, 0x41, 0x5f, 0x5a), | |
344: (0x32, 0x55, 0x28, 0x23, 0x55, 0x28), | |
345: (0x46, 0x73, 0x3c, 0x37, 0x73, 0x3c), | |
346: (0x32, 0x32, 0x32, 0x32, 0x32, 0x32), | |
347: (0x50, 0x50, 0x50, 0x50, 0x50, 0x50), | |
348: (0x46, 0x37, 0x41, 0x46, 0x5f, 0x55), | |
349: (0x46, 0x5f, 0x55, 0x46, 0x37, 0x41), | |
350: (0x32, 0x14, 0x28, 0x14, 0x14, 0x28), | |
351: (0x3c, 0x19, 0x23, 0x3c, 0x46, 0x50), | |
352: (0x50, 0x2d, 0x41, 0x50, 0x5a, 0x6e), | |
353: (0x3c, 0x32, 0x28, 0x5f, 0x55, 0x4b), | |
354: (0x3c, 0x28, 0x32, 0x5f, 0x4b, 0x55), | |
355: (0x32, 0x55, 0x55, 0x32, 0x37, 0x37), | |
356: (0x1e, 0x28, 0x37, 0x3c, 0x28, 0x37), | |
357: (0x3c, 0x3c, 0x4b, 0x50, 0x3c, 0x4b), | |
358: (0x2d, 0x28, 0x3c, 0x32, 0x28, 0x4b), | |
359: (0x4b, 0x46, 0x5a, 0x50, 0x46, 0x69), | |
360: (0x5f, 0x17, 0x30, 0x17, 0x17, 0x30), | |
361: (0x14, 0x28, 0x5a, 0x19, 0x1e, 0x5a), | |
362: (0x28, 0x46, 0x82, 0x19, 0x3c, 0x82), | |
363: (0x32, 0x3c, 0x2d, 0x41, 0x64, 0x50), | |
364: (0x3c, 0x3c, 0x3c, 0x1e, 0x23, 0x23), | |
365: (0x50, 0x50, 0x50, 0x5a, 0x37, 0x37), | |
366: (0x96, 0xa0, 0x64, 0x64, 0x5f, 0x41), | |
367: (0x46, 0x2b, 0x35, 0x28, 0x2b, 0x35), | |
368: (0x64, 0x49, 0x53, 0x37, 0x49, 0x53), | |
369: (0x63, 0x44, 0x53, 0x33, 0x48, 0x57), | |
370: (0x40, 0x33, 0x17, 0x1c, 0x33, 0x17), | |
371: (0x54, 0x47, 0x2b, 0x30, 0x47, 0x2b), | |
372: (0x68, 0x5b, 0x3f, 0x44, 0x5b, 0x3f), | |
373: (0x23, 0x40, 0x55, 0x20, 0x4a, 0x37), | |
374: (0x37, 0x68, 0x69, 0x34, 0x5e, 0x4b), | |
375: (0x37, 0x54, 0x69, 0x34, 0x72, 0x4b), | |
376: (0x41, 0x82, 0x3c, 0x4b, 0x4b, 0x3c), | |
377: (0x2c, 0x4b, 0x23, 0x2d, 0x3f, 0x21), | |
378: (0x40, 0x73, 0x41, 0x41, 0x53, 0x3f), | |
379: (0x49, 0x64, 0x3c, 0x41, 0x64, 0x3c), | |
380: (0x49, 0x73, 0x3c, 0x5a, 0x3c, 0x3c), | |
381: (0x64, 0x5a, 0x82, 0x37, 0x2d, 0x41), | |
382: (0x32, 0x46, 0x64, 0x1e, 0x28, 0x28), | |
383: (0x3c, 0x5a, 0x8c, 0x28, 0x32, 0x32), | |
384: (0x46, 0x6e, 0xb4, 0x32, 0x3c, 0x3c), | |
385: (0x46, 0x46, 0x46, 0x46, 0x46, 0x46), | |
386: (0x41, 0x49, 0x37, 0x55, 0x2f, 0x4b), | |
387: (0x41, 0x2f, 0x37, 0x55, 0x49, 0x4b), | |
388: (0x42, 0x29, 0x4d, 0x17, 0x3d, 0x57), | |
389: (0x56, 0x51, 0x61, 0x2b, 0x51, 0x6b), | |
390: (0x2d, 0x5f, 0x32, 0x4b, 0x28, 0x32), | |
391: (0x4b, 0x7d, 0x64, 0x2d, 0x46, 0x50), | |
392: (0x1c, 0x19, 0x19, 0x28, 0x2d, 0x23), | |
393: (0x26, 0x23, 0x23, 0x32, 0x41, 0x37), | |
394: (0x44, 0x41, 0x41, 0x50, 0x7d, 0x73), | |
395: (0x2d, 0x4b, 0x3c, 0x32, 0x28, 0x1e), | |
396: (0x41, 0x5f, 0x64, 0x32, 0x3c, 0x32), | |
397: (0x5f, 0x87, 0x50, 0x64, 0x6e, 0x50), | |
398: (0x28, 0x37, 0x50, 0x1e, 0x23, 0x3c), | |
399: (0x3c, 0x4b, 0x64, 0x32, 0x37, 0x50), | |
400: (0x50, 0x87, 0x82, 0x46, 0x5f, 0x5a), | |
401: (0x50, 0x64, 0xc8, 0x32, 0x32, 0x64), | |
402: (0x50, 0x32, 0x64, 0x32, 0x64, 0xc8), | |
403: (0x50, 0x4b, 0x96, 0x32, 0x4b, 0x96), | |
404: (0x64, 0x64, 0x5a, 0x5a, 0x96, 0x8c), | |
405: (0x64, 0x96, 0x8c, 0x5a, 0x64, 0x5a), | |
406: (0x69, 0x96, 0x5a, 0x5f, 0x96, 0x5a), | |
407: (0x50, 0x50, 0x5a, 0x6e, 0x6e, 0x82), | |
408: (0x50, 0x5a, 0x50, 0x6e, 0x82, 0x6e), | |
409: (0x64, 0x64, 0x64, 0x64, 0x64, 0x64), | |
410: (0x32, 0x96, 0x32, 0x96, 0x96, 0x32), | |
411: (0x41, 0x32, 0x46, 0x41, 0x5f, 0x50) | |
} | |
return stats.get(index, (0,0,0,0,0,0)) | |
with open(args.pokemon, mode='rb') as pokefile: | |
pokecontent = pokefile.read() | |
unpacked = struct.unpack("4H10BH7BBHH48BIBB7H",pokecontent) | |
#print(unpacked) | |
pvl = unpacked[0] | |
pvh = unpacked[1] | |
pv = (pvh << 16) + pvl | |
print("Personality value: %010d (%05d,%05d)" % (pv,pvl,pvh)) | |
tid = unpacked[2] | |
sid = unpacked[3] | |
print("Trainer ID: %05d" % (tid)) | |
print("Secret ID: %05d" % (sid)) | |
addkey = [] | |
keyl = pvl ^ tid | |
addkey.append(keyl & 255) | |
addkey.append(keyl >> 8) | |
keyh = pvh ^ sid | |
addkey.append(keyh & 255) | |
addkey.append(keyh >> 8) | |
key = (keyh << 16) + keyl | |
nickname = ''.join(map(translate, unpacked[4:14])) | |
print("Nickname: %s" % (nickname)) | |
print("Nickname bytes: %s" % (','.join(map(str,unpacked[4:14])))) | |
langcode = unpacked[14] | |
print("Language: %3x %s" % (langcode,language(langcode))) | |
trainername = ''.join(map(translate, unpacked[15:22])) | |
print("Trainer name: %s" % (trainername)) | |
print("Trainer name bytes: %s" % (','.join(map(str,unpacked[15:22])))) | |
marks = unpacked[22] | |
print("Markings: %s" % (markings(marks))) | |
checksum = unpacked[23] | |
print("Checksum: %d" % (checksum)) | |
zeros = unpacked[24] | |
print("Zero: %d" % (zeros)) | |
data = list(unpacked[25:73]) | |
decrypted = [] | |
calcsum = 0 | |
for i, byte in enumerate(data): | |
decbyte = byte ^ addkey[i%4] | |
if i % 2 == 0: | |
calcsum += decbyte | |
else: | |
calcsum += decbyte << 8 | |
decrypted.append(decbyte) | |
calcsum = calcsum & 65535 | |
print("Calculated checksum: %d" % (calcsum)) | |
orderindex = pv % 24 | |
order = getorder(orderindex) | |
print("Substructure order: %s" % (order)) | |
try: | |
growthindex = order.index("G") | |
offset = growthindex * 12 | |
species = decrypted[offset] + (decrypted[offset + 1] << 8) | |
speciesname = getspecies(species) | |
print("(G) Species: %03d %s" % (species,speciesname)) | |
helditem = decrypted[offset+2] + (decrypted[offset + 3] << 8) | |
helditemname = getitem(helditem) | |
print("(G) Held Item: %03d %s" % (helditem,helditemname)) | |
experience = decrypted[offset+4] + ((decrypted[offset + 5] + (decrypted[offset + 6] + (decrypted[offset + 7] << 8)) << 8) << 8) | |
print("(G) Experience: %07d" % (experience)) | |
ppbonus = decrypted[offset + 8] | |
ppbonus1 = ppbonus % 4 | |
ppbonus2 = (ppbonus >> 2) % 4 | |
ppbonus3 = (ppbonus >> 4) % 4 | |
ppbonus4 = (ppbonus >> 6) % 4 | |
print("(G) Move 1 PP Boost: %1d" % (ppbonus1)) | |
print("(G) Move 2 PP Boost: %1d" % (ppbonus2)) | |
print("(G) Move 3 PP Boost: %1d" % (ppbonus3)) | |
print("(G) Move 4 PP Boost: %1d" % (ppbonus4)) | |
friendship = decrypted[offset + 9] | |
print("(G) Friendship: %03d" % (friendship)) | |
unknownval = decrypted[offset+10] + (decrypted[offset + 11] << 8) | |
print("(G) Unknown Value: %05d" % (unknownval)) | |
except ValueError: | |
print("Unable to get growth data") | |
try: | |
attackindex = order.index("A") | |
offset = attackindex * 12 | |
move1 = decrypted[offset + 0] + (decrypted[offset + 1] << 8) | |
move2 = decrypted[offset + 2] + (decrypted[offset + 3] << 8) | |
move3 = decrypted[offset + 4] + (decrypted[offset + 5] << 8) | |
move4 = decrypted[offset + 6] + (decrypted[offset + 7] << 8) | |
move1name = getmovename(move1) | |
move2name = getmovename(move2) | |
move3name = getmovename(move3) | |
move4name = getmovename(move4) | |
print("(A) Move 1: %03d %s" % (move1, move1name)) | |
print("(A) Move 2: %03d %s" % (move2, move2name)) | |
print("(A) Move 3: %03d %s" % (move3, move3name)) | |
print("(A) Move 4: %03d %s" % (move4, move4name)) | |
pp1 = decrypted[offset + 8] | |
pp2 = decrypted[offset + 9] | |
pp3 = decrypted[offset + 10] | |
pp4 = decrypted[offset + 11] | |
print("(A) PP 1: %02d" % (pp1)) | |
print("(A) PP 2: %02d" % (pp2)) | |
print("(A) PP 3: %02d" % (pp3)) | |
print("(A) PP 4: %02d" % (pp4)) | |
except ValueError: | |
print("Unable to get attack data") | |
try: | |
evindex = order.index("E") | |
offset = evindex * 12 | |
hpev = decrypted[offset + 0] | |
atkev = decrypted[offset + 1] | |
defev = decrypted[offset + 2] | |
spdev = decrypted[offset + 3] | |
spatkev = decrypted[offset + 4] | |
spdefev = decrypted[offset + 5] | |
print("(E) HP EV: %03d" % (hpev)) | |
print("(E) Atk EV: %03d" % (atkev)) | |
print("(E) Def EV: %03d" % (defev)) | |
print("(E) Spd EV: %03d" % (spdev)) | |
print("(E) SpAtk EV: %03d" % (spatkev)) | |
print("(E) SpDef EV: %03d" % (spdefev)) | |
cool = decrypted[offset + 6] | |
beau = decrypted[offset + 7] | |
cute = decrypted[offset + 8] | |
smrt = decrypted[offset + 9] | |
togh = decrypted[offset + 10] | |
feel = decrypted[offset + 11] | |
print("(E) Coolness: %03d" % (cool)) | |
print("(E) Beauty: %03d" % (beau)) | |
print("(E) Cuteness: %03d" % (cute)) | |
print("(E) Smartness: %03d" % (smrt)) | |
print("(E) Toughness: %03d" % (togh)) | |
print("(E) Feel: %03d" % (feel)) | |
except ValueError: | |
print("Unable to get EV and Condition data") | |
try: | |
miscindex = order.index("M") | |
offset = miscindex * 12 | |
pokerus = decrypted[offset + 0] | |
print("(M) Pokerus: %03d [strain:%02d] [counter:%d]" % (pokerus,pokerus>>3,pokerus%8)) | |
location = decrypted[offset + 1] | |
print("(M) Location: %03d" % (location)) | |
origins = decrypted[offset + 2] + (decrypted[offset + 3] << 8) | |
levelmet = origins % 128 | |
if levelmet == 0: | |
print("(M) Origin: Hatched") | |
else: | |
print("(M) Level met: %03d" % (levelmet)) | |
game = (origins >> 7) % 16 | |
print("(M) Game: %03d %s" % (game, getgame(game))) | |
ball = (origins >> 11) % 16 | |
print("(M) Caught in: %03d %s" % (ball, getball(ball))) | |
if origins >> 15 == 0: | |
print("(M) OT Gender: ♂") | |
else: | |
print("(M) OT Gender: ♀") | |
ivs = decrypted[offset + 7] | |
ivs = (ivs << 8) + decrypted[offset + 6] | |
ivs = (ivs << 8) + decrypted[offset + 5] | |
ivs = (ivs << 8) + decrypted[offset + 4] | |
hpiv = ivs % 32 | |
atkiv = (ivs >> 5) % 32 | |
defiv = (ivs >> 10) % 32 | |
spdiv = (ivs >> 15) % 32 | |
spatkiv = (ivs >> 20) % 32 | |
spdefiv = (ivs >> 25) % 32 | |
egg = (ivs >> 30) & 1 | |
ability = (ivs >> 31) & 1 | |
print("(M) HP IV: %03d" % (hpiv)) | |
print("(M) Atk IV: %03d" % (atkiv)) | |
print("(M) Def IV: %03d" % (defiv)) | |
print("(M) Spd IV: %03d" % (spdiv)) | |
print("(M) SpAtk IV: %03d" % (spatkiv)) | |
print("(M) SpDef IV: %03d" % (spdefiv)) | |
if egg == 1: | |
print("(M) Egg: Yes") | |
else: | |
print("(M) Egg: No") | |
if ability == 0: | |
print("(M) Ability: First") | |
else: | |
print("(M) Ability: Second") | |
ribbons = decrypted[offset+8] + ((decrypted[offset + 9] + (decrypted[offset + 10] + (decrypted[offset + 11] << 8)) << 8) << 8) | |
coolrib = ribbons % 8 | |
beaurib = (ribbons >> 3) % 8 | |
cuterib = (ribbons >> 6) % 8 | |
smrtrib = (ribbons >> 9) % 8 | |
toghrib = (ribbons >> 12) % 8 | |
champion = (ribbons >> 15) & 1 | |
winning = (ribbons >> 16) & 1 | |
victory = (ribbons >> 17) & 1 | |
artist = (ribbons >> 18) & 1 | |
effort = (ribbons >> 19) & 1 | |
special = (ribbons >> 20) & 63 | |
obedient = (ribbons >> 31) & 1 | |
if coolrib > 0: | |
print("(M) Coolness Ribbon: %2d",coolrib) | |
if beaurib > 0: | |
print("(M) Beauty Ribbon: %2d",beaurib) | |
if cuterib > 0: | |
print("(M) Cuteness Ribbon: %2d",cuterib) | |
if smrtrib > 0: | |
print("(M) Smartness Ribbon: %2d",smrtrib) | |
if toghrib > 0: | |
print("(M) Toughness Ribbon: %2d",toghrib) | |
if champion > 0: | |
print("(M) Champion Ribbon: Yes") | |
if winning > 0: | |
print("(M) Winning Ribbon: Yes") | |
if victory > 0: | |
print("(M) Victory Ribbon: Yes") | |
if artist > 0: | |
print("(M) Artist Ribbon: Yes") | |
if effort > 0: | |
print("(M) Effort Ribbon: Yes") | |
if special > 0: | |
print("(M) Special Ribbon: %02x" % (special)) | |
if obedient > 0: | |
print("(M) Obedient/Fateful: Yes") | |
except ValueError: | |
print("Unable to get EV and Condition data") | |
status = unpacked[73] | |
print("Sleep turns: %01d"% (status % 7)) | |
if status & 8: | |
print("Poisoned: Yes") | |
else: | |
print("Poisoned: No") | |
if status & 16: | |
print("Burnt: Yes") | |
else: | |
print("Burnt: No") | |
if status & 32: | |
print("Frozen: Yes") | |
else: | |
print("Frozen: No") | |
if status & 64: | |
print("Paralysed: Yes") | |
else: | |
print("Paralysed: No") | |
if status & 128: | |
print("Badly Poisoned: Yes") | |
else: | |
print("Badly Poisoned: No") | |
level = unpacked[74] | |
print("Level: %03d" % (level)) | |
pkrsrm = unpacked[75] | |
print("Pokerus Remaining: %03d" % (pkrsrm)) | |
hp = unpacked[76] | |
print("Current HP: %03d" % (hp)) | |
hpmax = unpacked[77] | |
print("Max HP: %03d" % (hpmax)) | |
attack = unpacked[78] | |
print("Attack: %03d" % (attack)) | |
defense = unpacked[79] | |
print("Defense: %03d" % (defense)) | |
speed = unpacked[80] | |
print("Speed: %03d" % (speed)) | |
spattack = unpacked[81] | |
print("Sp. Attack: %03d" % (spattack)) | |
spdefense = unpacked[82] | |
print("Sp. Defense: %03d" % (spdefense)) | |
basestats = getbasestats(species) | |
print("Calculated stats:") | |
calchealth = (2*basestats[0] + hpiv + hpev//4) * level // 100 + level + 10 | |
print(" HP: %03d" % (calchealth)) | |
natureval = pv % 25 | |
(nature,_) = getnature(natureval) | |
print(" Nature: %s" % (nature)) | |
atkmul = 100 | |
if natureval // 5 == 0: | |
atkmul += 10 | |
if natureval % 5 == 0: | |
atkmul -= 10 | |
calcatk = ((2*basestats[1] + atkiv + atkev//4) * level // 100 + 5) * atkmul // 100 | |
print(" Attack: %03d" % (calcatk)) | |
defmul = 100 | |
if natureval // 5 == 1: | |
defmul += 10 | |
if natureval % 5 == 1: | |
defmul -= 10 | |
calcdef = ((2*basestats[2] + defiv + defev//4) * level // 100 + 5) * defmul // 100 | |
print(" Defense: %03d" % (calcdef)) | |
spdmul = 100 | |
if natureval // 5 == 2: | |
spdmul += 10 | |
if natureval % 5 == 2: | |
spdmul -= 10 | |
calcspd = ((2*basestats[3] + spdiv + spdev//4) * level // 100 + 5) * spdmul // 100 | |
print(" Speed: %03d" % (calcspd)) | |
spatkmul = 100 | |
if natureval // 5 == 3: | |
spatkmul += 10 | |
if natureval % 5 == 3: | |
spatkmul -= 10 | |
calcspatk = ((2*basestats[4] + spatkiv + spatkev//4) * level // 100 + 5) * spatkmul // 100 | |
print(" Sp.Atk: %03d" % (calcspatk)) | |
spdefmul = 100 | |
if natureval // 5 == 4: | |
spdefmul += 10 | |
if natureval % 5 == 4: | |
spdefmul -= 10 | |
calcspdef = ((2*basestats[5] + spdefiv + spdefev//4) * level // 100 + 5) * spdefmul // 100 | |
print(" Sp.Def: %03d" % (calcspdef)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment