Skip to content

Instantly share code, notes, and snippets.

@raffitz
Last active July 16, 2020 00:54
Show Gist options
  • Save raffitz/eb2480434bb212610d8d628d4eea1ee6 to your computer and use it in GitHub Desktop.
Save raffitz/eb2480434bb212610d8d628d4eea1ee6 to your computer and use it in GitHub Desktop.
Pokémon gen iii structure reader
#!/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