shithub: pokecrystal

Download patch

ref: 427c822910ac429a89518550bdf7b00d8e60a9a9
parent: 2d260da8ec4b133d82b033f6ee23fd900577f24f
parent: 17ab9dc558db716e02d86c48a0682489c499337e
author: Bryan Bishop <[email protected]>
date: Tue Apr 17 18:59:12 EDT 2012

Merge branch 'move-data-to-files' from cnelsonsic

--- /dev/null
+++ b/extras/chars.py
@@ -1,0 +1,274 @@
+# -*- coding: utf-8 -*-
+#this is straight out of ../textpre.py because i'm lazy
+#see jap_chars for overrides if you are in japanese mode?
+chars = {
+    0x50: "@",
+    0x54: "#",
+    0x75: "…",
+
+    0x79: "┌",
+    0x7A: "─",
+    0x7B: "┐",
+    0x7C: "│",
+    0x7D: "└",
+    0x7E: "┘",
+
+    0x74: "№",
+
+    0x7F: " ",
+    0x80: "A",
+    0x81: "B",
+    0x82: "C",
+    0x83: "D",
+    0x84: "E",
+    0x85: "F",
+    0x86: "G",
+    0x87: "H",
+    0x88: "I",
+    0x89: "J",
+    0x8A: "K",
+    0x8B: "L",
+    0x8C: "M",
+    0x8D: "N",
+    0x8E: "O",
+    0x8F: "P",
+    0x90: "Q",
+    0x91: "R",
+    0x92: "S",
+    0x93: "T",
+    0x94: "U",
+    0x95: "V",
+    0x96: "W",
+    0x97: "X",
+    0x98: "Y",
+    0x99: "Z",
+    0x9A: "(",
+    0x9B: ")",
+    0x9C: ":",
+    0x9D: ";",
+    0x9E: "[",
+    0x9F: "]",
+    0xA0: "a",
+    0xA1: "b",
+    0xA2: "c",
+    0xA3: "d",
+    0xA4: "e",
+    0xA5: "f",
+    0xA6: "g",
+    0xA7: "h",
+    0xA8: "i",
+    0xA9: "j",
+    0xAA: "k",
+    0xAB: "l",
+    0xAC: "m",
+    0xAD: "n",
+    0xAE: "o",
+    0xAF: "p",
+    0xB0: "q",
+    0xB1: "r",
+    0xB2: "s",
+    0xB3: "t",
+    0xB4: "u",
+    0xB5: "v",
+    0xB6: "w",
+    0xB7: "x",
+    0xB8: "y",
+    0xB9: "z",
+    0xC0: "Ä",
+    0xC1: "Ö",
+    0xC2: "Ü",
+    0xC3: "ä",
+    0xC4: "ö",
+    0xC5: "ü",
+    0xD0: "'d",
+    0xD1: "'l",
+    0xD2: "'m",
+    0xD3: "'r",
+    0xD4: "'s",
+    0xD5: "'t",
+    0xD6: "'v",
+    0xE0: "'",
+    0xE3: "-",
+    0xE6: "?",
+    0xE7: "!",
+    0xE8: ".",
+    0xE9: "&",
+    0xEA: "é",
+    0xEB: "→",
+    0xEF: "♂",
+    0xF0: "¥",
+    0xF1: "×",
+    0xF3: "/",
+    0xF4: ",",
+    0xF5: "♀",
+    0xF6: "0",
+    0xF7: "1",
+    0xF8: "2",
+    0xF9: "3",
+    0xFA: "4",
+    0xFB: "5",
+    0xFC: "6",
+    0xFD: "7",
+    0xFE: "8",
+    0xFF: "9",
+}
+
+#override whatever defaults for japanese symbols
+jap_chars = copy(chars)
+jap_chars.update({
+    0x05: "ガ",
+    0x06: "ギ",
+    0x07: "グ",
+    0x08: "ゲ",
+    0x09: "ゴ",
+    0x0A: "ザ",
+    0x0B: "ジ",
+    0x0C: "ズ",
+    0x0D: "ゼ",
+    0x0E: "ゾ",
+    0x0F: "ダ",
+    0x10: "ヂ",
+    0x11: "ヅ",
+    0x12: "デ",
+    0x13: "ド",
+    0x19: "バ",
+    0x1A: "ビ",
+    0x1B: "ブ",
+    0x1C: "ボ",
+    0x26: "が",
+    0x27: "ぎ",
+    0x28: "ぐ",
+    0x29: "げ",
+    0x2A: "ご",
+    0x2B: "ざ",
+    0x2C: "じ",
+    0x2D: "ず",
+    0x2E: "ぜ",
+    0x2F: "ぞ",
+    0x30: "だ",
+    0x31: "ぢ",
+    0x32: "づ",
+    0x33: "で",
+    0x34: "ど",
+    0x3A: "ば",
+    0x3B: "び",
+    0x3C: "ぶ",
+    0x3D: "べ",
+    0x3E: "ぼ",
+    0x40: "パ",
+    0x41: "ピ",
+    0x42: "プ",
+    0x43: "ポ",
+    0x44: "ぱ",
+    0x45: "ぴ",
+    0x46: "ぷ",
+    0x47: "ぺ",
+    0x48: "ぽ",
+    0x80: "ア",
+    0x81: "イ",
+    0x82: "ウ",
+    0x83: "エ",
+    0x84: "ォ",
+    0x85: "カ",
+    0x86: "キ",
+    0x87: "ク",
+    0x88: "ケ",
+    0x89: "コ",
+    0x8A: "サ",
+    0x8B: "シ",
+    0x8C: "ス",
+    0x8D: "セ",
+    0x8E: "ソ",
+    0x8F: "タ",
+    0x90: "チ",
+    0x91: "ツ",
+    0x92: "テ",
+    0x93: "ト",
+    0x94: "ナ",
+    0x95: "ニ",
+    0x96: "ヌ",
+    0x97: "ネ",
+    0x98: "ノ",
+    0x99: "ハ",
+    0x9A: "ヒ",
+    0x9B: "フ",
+    0x9C: "ホ",
+    0x9D: "マ",
+    0x9E: "ミ",
+    0x9F: "ム",
+    0xA0: "メ",
+    0xA1: "モ",
+    0xA2: "ヤ",
+    0xA3: "ユ",
+    0xA4: "ヨ",
+    0xA5: "ラ",
+    0xA6: "ル",
+    0xA7: "レ",
+    0xA8: "ロ",
+    0xA9: "ワ",
+    0xAA: "ヲ",
+    0xAB: "ン",
+    0xAC: "ッ",
+    0xAD: "ャ",
+    0xAE: "ュ",
+    0xAF: "ョ",
+    0xB0: "ィ",
+    0xB1: "あ",
+    0xB2: "い",
+    0xB3: "う",
+    0xB4: "え",
+    0xB5: "お",
+    0xB6: "か",
+    0xB7: "き",
+    0xB8: "く",
+    0xB9: "け",
+    0xBA: "こ",
+    0xBB: "さ",
+    0xBC: "し",
+    0xBD: "す",
+    0xBE: "せ",
+    0xBF: "そ",
+    0xC0: "た",
+    0xC1: "ち",
+    0xC2: "つ",
+    0xC3: "て",
+    0xC4: "と",
+    0xC5: "な",
+    0xC6: "に",
+    0xC7: "ぬ",
+    0xC8: "ね",
+    0xC9: "の",
+    0xCA: "は",
+    0xCB: "ひ",
+    0xCC: "ふ",
+    0xCD: "へ",
+    0xCE: "ほ",
+    0xCF: "ま",
+    0xD0: "み",
+    0xD1: "む",
+    0xD2: "め",
+    0xD3: "も",
+    0xD4: "や",
+    0xD5: "ゆ",
+    0xD6: "よ",
+    0xD7: "ら",
+    0xD8: "り",
+    0xD9: "る",
+    0xDA: "れ",
+    0xDB: "ろ",
+    0xDC: "わ",
+    0xDD: "を",
+    0xDE: "ん",
+    0xDF: "っ",
+    0xE0: "ゃ",
+    0xE1: "ゅ",
+    0xE2: "ょ",
+    0xE3: "ー",
+})
+
+#some of the japanese characters can probably fit into the english table
+#without overriding any of the other mappings.
+for key, value in jap_chars.items():
+    if key not in chars.keys():
+        chars[key] = value
+
--- a/extras/crystal.py
+++ b/extras/crystal.py
@@ -55,279 +55,9 @@
 #this doesn't do anything but is still used in TextScript
 constant_abbreviation_bytes = {}
 
-#this is straight out of ../textpre.py because i'm lazy
-#see jap_chars for overrides if you are in japanese mode?
-chars = {
-    0x50: "@",
-    0x54: "#",
-    0x75: "…",
+# Import the characters from its module.
+from chars import chars, jap_chars
 
-    0x79: "┌",
-    0x7A: "─",
-    0x7B: "┐",
-    0x7C: "│",
-    0x7D: "└",
-    0x7E: "┘",
-
-    0x74: "№",
-
-    0x7F: " ",
-    0x80: "A",
-    0x81: "B",
-    0x82: "C",
-    0x83: "D",
-    0x84: "E",
-    0x85: "F",
-    0x86: "G",
-    0x87: "H",
-    0x88: "I",
-    0x89: "J",
-    0x8A: "K",
-    0x8B: "L",
-    0x8C: "M",
-    0x8D: "N",
-    0x8E: "O",
-    0x8F: "P",
-    0x90: "Q",
-    0x91: "R",
-    0x92: "S",
-    0x93: "T",
-    0x94: "U",
-    0x95: "V",
-    0x96: "W",
-    0x97: "X",
-    0x98: "Y",
-    0x99: "Z",
-    0x9A: "(",
-    0x9B: ")",
-    0x9C: ":",
-    0x9D: ";",
-    0x9E: "[",
-    0x9F: "]",
-    0xA0: "a",
-    0xA1: "b",
-    0xA2: "c",
-    0xA3: "d",
-    0xA4: "e",
-    0xA5: "f",
-    0xA6: "g",
-    0xA7: "h",
-    0xA8: "i",
-    0xA9: "j",
-    0xAA: "k",
-    0xAB: "l",
-    0xAC: "m",
-    0xAD: "n",
-    0xAE: "o",
-    0xAF: "p",
-    0xB0: "q",
-    0xB1: "r",
-    0xB2: "s",
-    0xB3: "t",
-    0xB4: "u",
-    0xB5: "v",
-    0xB6: "w",
-    0xB7: "x",
-    0xB8: "y",
-    0xB9: "z",
-    0xC0: "Ä",
-    0xC1: "Ö",
-    0xC2: "Ü",
-    0xC3: "ä",
-    0xC4: "ö",
-    0xC5: "ü",
-    0xD0: "'d",
-    0xD1: "'l",
-    0xD2: "'m",
-    0xD3: "'r",
-    0xD4: "'s",
-    0xD5: "'t",
-    0xD6: "'v",
-    0xE0: "'",
-    0xE3: "-",
-    0xE6: "?",
-    0xE7: "!",
-    0xE8: ".",
-    0xE9: "&",
-    0xEA: "é",
-    0xEB: "→",
-    0xEF: "♂",
-    0xF0: "¥",
-    0xF1: "×",
-    0xF3: "/",
-    0xF4: ",",
-    0xF5: "♀",
-    0xF6: "0",
-    0xF7: "1",
-    0xF8: "2",
-    0xF9: "3",
-    0xFA: "4",
-    0xFB: "5",
-    0xFC: "6",
-    0xFD: "7",
-    0xFE: "8",
-    0xFF: "9",
-}
-
-#override whatever defaults for japanese symbols
-jap_chars = copy(chars)
-jap_chars.update({
-    0x05: "ガ",
-    0x06: "ギ",
-    0x07: "グ",
-    0x08: "ゲ",
-    0x09: "ゴ",
-    0x0A: "ザ",
-    0x0B: "ジ",
-    0x0C: "ズ",
-    0x0D: "ゼ",
-    0x0E: "ゾ",
-    0x0F: "ダ",
-    0x10: "ヂ",
-    0x11: "ヅ",
-    0x12: "デ",
-    0x13: "ド",
-    0x19: "バ",
-    0x1A: "ビ",
-    0x1B: "ブ",
-    0x1C: "ボ",
-    0x26: "が",
-    0x27: "ぎ",
-    0x28: "ぐ",
-    0x29: "げ",
-    0x2A: "ご",
-    0x2B: "ざ",
-    0x2C: "じ",
-    0x2D: "ず",
-    0x2E: "ぜ",
-    0x2F: "ぞ",
-    0x30: "だ",
-    0x31: "ぢ",
-    0x32: "づ",
-    0x33: "で",
-    0x34: "ど",
-    0x3A: "ば",
-    0x3B: "び",
-    0x3C: "ぶ",
-    0x3D: "べ",
-    0x3E: "ぼ",
-    0x40: "パ",
-    0x41: "ピ",
-    0x42: "プ",
-    0x43: "ポ",
-    0x44: "ぱ",
-    0x45: "ぴ",
-    0x46: "ぷ",
-    0x47: "ぺ",
-    0x48: "ぽ",
-    0x80: "ア",
-    0x81: "イ",
-    0x82: "ウ",
-    0x83: "エ",
-    0x84: "ォ",
-    0x85: "カ",
-    0x86: "キ",
-    0x87: "ク",
-    0x88: "ケ",
-    0x89: "コ",
-    0x8A: "サ",
-    0x8B: "シ",
-    0x8C: "ス",
-    0x8D: "セ",
-    0x8E: "ソ",
-    0x8F: "タ",
-    0x90: "チ",
-    0x91: "ツ",
-    0x92: "テ",
-    0x93: "ト",
-    0x94: "ナ",
-    0x95: "ニ",
-    0x96: "ヌ",
-    0x97: "ネ",
-    0x98: "ノ",
-    0x99: "ハ",
-    0x9A: "ヒ",
-    0x9B: "フ",
-    0x9C: "ホ",
-    0x9D: "マ",
-    0x9E: "ミ",
-    0x9F: "ム",
-    0xA0: "メ",
-    0xA1: "モ",
-    0xA2: "ヤ",
-    0xA3: "ユ",
-    0xA4: "ヨ",
-    0xA5: "ラ",
-    0xA6: "ル",
-    0xA7: "レ",
-    0xA8: "ロ",
-    0xA9: "ワ",
-    0xAA: "ヲ",
-    0xAB: "ン",
-    0xAC: "ッ",
-    0xAD: "ャ",
-    0xAE: "ュ",
-    0xAF: "ョ",
-    0xB0: "ィ",
-    0xB1: "あ",
-    0xB2: "い",
-    0xB3: "う",
-    0xB4: "え",
-    0xB5: "お",
-    0xB6: "か",
-    0xB7: "き",
-    0xB8: "く",
-    0xB9: "け",
-    0xBA: "こ",
-    0xBB: "さ",
-    0xBC: "し",
-    0xBD: "す",
-    0xBE: "せ",
-    0xBF: "そ",
-    0xC0: "た",
-    0xC1: "ち",
-    0xC2: "つ",
-    0xC3: "て",
-    0xC4: "と",
-    0xC5: "な",
-    0xC6: "に",
-    0xC7: "ぬ",
-    0xC8: "ね",
-    0xC9: "の",
-    0xCA: "は",
-    0xCB: "ひ",
-    0xCC: "ふ",
-    0xCD: "へ",
-    0xCE: "ほ",
-    0xCF: "ま",
-    0xD0: "み",
-    0xD1: "む",
-    0xD2: "め",
-    0xD3: "も",
-    0xD4: "や",
-    0xD5: "ゆ",
-    0xD6: "よ",
-    0xD7: "ら",
-    0xD8: "り",
-    0xD9: "る",
-    0xDA: "れ",
-    0xDB: "ろ",
-    0xDC: "わ",
-    0xDD: "を",
-    0xDE: "ん",
-    0xDF: "っ",
-    0xE0: "ゃ",
-    0xE1: "ゅ",
-    0xE2: "ょ",
-    0xE3: "ー",
-})
-
-#some of the japanese characters can probably fit into the english table
-#without overriding any of the other mappings.
-for key, value in jap_chars.items():
-    if key not in chars.keys():
-        chars[key] = value
-
 class Size():
     """a simple way to track whether or not a size
     includes the first value or not, like for
@@ -1333,259 +1063,7 @@
     print groups
     print maps
 
-pokemon_constants = {
-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: "NIDORAN_F",
-30: "NIDORINA",
-31: "NIDOQUEEN",
-32: "NIDORAN_M",
-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",
-}
+from pokemon_constants import pokemon_constants
 
 def get_pokemon_constant_by_id(id):
     if id == 0: return None
@@ -1595,228 +1073,7 @@
     #XXX TODO
     return None
 
-item_constants = {1: 'MASTER_BALL',
-2: 'ULTRA_BALL',
-3: 'BRIGHTPOWDER',
-4: 'GREAT_BALL',
-5: 'POKE_BALL',
-7: 'BICYCLE',
-8: 'MOON_STONE',
-9: 'ANTIDOTE',
-10: 'BURN_HEAL',
-11: 'ICE_HEAL',
-12: 'AWAKENING',
-13: 'PARLYZ_HEAL',
-14: 'FULL_RESTORE',
-15: 'MAX_POTION',
-16: 'HYPER_POTION',
-17: 'SUPER_POTION',
-18: 'POTION',
-19: 'ESCAPE_ROPE',
-20: 'REPEL',
-21: 'MAX_ELIXER',
-22: 'FIRE_STONE',
-23: 'THUNDERSTONE',
-24: 'WATER_STONE',
-26: 'HP_UP',
-27: 'PROTEIN',
-28: 'IRON',
-29: 'CARBOS',
-30: 'LUCKY_PUNCH',
-31: 'CALCIUM',
-32: 'RARE_CANDY',
-33: 'X_ACCURACY',
-34: 'LEAF_STONE',
-35: 'METAL_POWDER',
-36: 'NUGGET',
-37: 'POKE_DOLL',
-38: 'FULL_HEAL',
-39: 'REVIVE',
-40: 'MAX_REVIVE',
-41: 'GUARD_SPEC.',
-42: 'SUPER_REPEL',
-43: 'MAX_REPEL',
-44: 'DIRE_HIT',
-46: 'FRESH_WATER',
-47: 'SODA_POP',
-48: 'LEMONADE',
-49: 'X_ATTACK',
-51: 'X_DEFEND',
-52: 'X_SPEED',
-53: 'X_SPECIAL',
-54: 'COIN_CASE',
-55: 'ITEMFINDER',
-57: 'EXP_SHARE',
-58: 'OLD_ROD',
-59: 'GOOD_ROD',
-60: 'SILVER_LEAF',
-61: 'SUPER_ROD',
-62: 'PP_UP',
-63: 'ETHER',
-64: 'MAX_ETHER',
-65: 'ELIXER',
-66: 'RED_SCALE',
-67: 'SECRETPOTION',
-68: 'S.S.TICKET',
-69: 'MYSTERY_EGG',
-70: 'CLEAR_BELL',
-71: 'SILVER_WING',
-72: 'MOOMOO_MILK',
-73: 'QUICK_CLAW',
-74: 'PSNCUREBERRY',
-75: 'GOLD_LEAF',
-76: 'SOFT_SAND',
-77: 'SHARP_BEAK',
-78: 'PRZCUREBERRY',
-79: 'BURNT_BERRY',
-80: 'ICE_BERRY',
-81: 'POISON_BARB',
-82: "KING'S_ROCK",
-83: 'BITTER_BERRY',
-84: 'MINT_BERRY',
-85: 'RED_APRICORN',
-86: 'TINYMUSHROOM',
-87: 'BIG_MUSHROOM',
-88: 'SILVERPOWDER',
-89: 'BLU_APRICORN',
-91: 'AMULET_COIN',
-92: 'YLW_APRICORN',
-93: 'GRN_APRICORN',
-94: 'CLEANSE_TAG',
-95: 'MYSTIC_WATER',
-96: 'TWISTEDSPOON',
-97: 'WHT_APRICORN',
-98: 'BLACKBELT',
-99: 'BLK_APRICORN',
-101: 'PNK_APRICORN',
-102: 'BLACKGLASSES',
-103: 'SLOWPOKETAIL',
-104: 'PINK_BOW',
-105: 'STICK',
-106: 'SMOKE_BALL',
-107: 'NEVERMELTICE',
-108: 'MAGNET',
-109: 'MIRACLEBERRY',
-110: 'PEARL',
-111: 'BIG_PEARL',
-112: 'EVERSTONE',
-113: 'SPELL_TAG',
-114: 'RAGECANDYBAR',
-115: 'GS_BALL',
-116: 'BLUE_CARD',
-117: 'MIRACLE_SEED',
-118: 'THICK_CLUB',
-119: 'FOCUS_BAND',
-121: 'ENERGYPOWDER',
-122: 'ENERGY_ROOT',
-123: 'HEAL_POWDER',
-124: 'REVIVAL_HERB',
-125: 'HARD_STONE',
-126: 'LUCKY_EGG',
-127: 'CARD_KEY',
-128: 'MACHINE_PART',
-129: 'EGG_TICKET',
-130: 'LOST_ITEM',
-131: 'STARDUST',
-132: 'STAR_PIECE',
-133: 'BASEMENT_KEY',
-134: 'PASS',
-138: 'CHARCOAL',
-139: 'BERRY_JUICE',
-140: 'SCOPE_LENS',
-143: 'METAL_COAT',
-144: 'DRAGON_FANG',
-146: 'LEFTOVERS',
-150: 'MYSTERYBERRY',
-151: 'DRAGON_SCALE',
-152: 'BERSERK_GENE',
-156: 'SACRED_ASH',
-157: 'HEAVY_BALL',
-158: 'FLOWER_MAIL',
-159: 'LEVEL_BALL',
-160: 'LURE_BALL',
-161: 'FAST_BALL',
-163: 'LIGHT_BALL',
-164: 'FRIEND_BALL',
-165: 'MOON_BALL',
-166: 'LOVE_BALL',
-167: 'NORMAL_BOX',
-168: 'GORGEOUS_BOX',
-169: 'SUN_STONE',
-170: 'POLKADOT_BOW',
-172: 'UP_GRADE',
-173: 'BERRY',
-174: 'GOLD_BERRY',
-175: 'SQUIRTBOTTLE',
-177: 'PARK_BALL',
-178: 'RAINBOW_WING',
-180: 'BRICK_PIECE',
-181: 'SURF_MAIL',
-182: 'LITEBLUEMAIL',
-183: 'PORTRAITM_AIL',
-184: 'LOVELY_MAIL',
-185: 'EON_MAIL',
-186: 'MORPH_MAIL',
-187: 'BLUESKY_MAIL',
-188: 'MUSIC_MAIL',
-189: 'MIRAGE_MAIL',
-191: 'TM_01',
-192: 'TM_02',
-193: 'TM_03',
-194: 'TM_04',
-196: 'TM_05',
-197: 'TM_06',
-198: 'TM_07',
-199: 'TM_08',
-200: 'TM_09',
-201: 'TM_10',
-202: 'TM_11',
-203: 'TM_12',
-204: 'TM_13',
-205: 'TM_14',
-206: 'TM_15',
-207: 'TM_16',
-208: 'TM_17',
-209: 'TM_18',
-210: 'TM_19',
-211: 'TM_20',
-212: 'TM_21',
-213: 'TM_22',
-214: 'TM_23',
-215: 'TM_24',
-216: 'TM_25',
-217: 'TM_26',
-218: 'TM_27',
-219: 'TM_28',
-221: 'TM_29',
-222: 'TM_30',
-223: 'TM_31',
-224: 'TM_32',
-225: 'TM_33',
-226: 'TM_34',
-227: 'TM_35',
-228: 'TM_36',
-229: 'TM_37',
-230: 'TM_38',
-231: 'TM_39',
-232: 'TM_40',
-233: 'TM_41',
-234: 'TM_42',
-235: 'TM_43',
-236: 'TM_44',
-237: 'TM_45',
-238: 'TM_46',
-239: 'TM_47',
-240: 'TM_48',
-241: 'TM_49',
-242: 'TM_50',
-243: 'HM_01',
-244: 'HM_02',
-245: 'HM_03',
-246: 'HM_04',
-247: 'HM_05',
-248: 'HM_06',
-249: 'HM_07'}
+from item_constants import item_constants
 
 def find_item_label_by_id(id):
     if id in item_constants.keys():
@@ -1879,311 +1136,9 @@
         if gold > 0xA3: raise Exception, "dunno yet if crystal has new insertions after gold:0xA3 (crystal:0xA5)"
     else: raise Exception, "translate_command_byte needs either a crystal or gold command"
 
-pksv_gs = {
-    0x00: "2call",
-    0x01: "3call",
-    0x02: "2ptcall",
-    0x03: "2jump",
-    0x04: "3jump",
-    0x05: "2ptjump",
-    0x06: "if equal",
-    0x07: "if not equal",
-    0x08: "if false",
-    0x09: "if true",
-    0x0A: "if less than",
-    0x0B: "if greater than",
-    0x0C: "jumpstd",
-    0x0D: "callstd",
-    0x0E: "3callasm",
-    0x0F: "special",
-    0x10: "2ptcallasm",
-    0x11: "checkmaptriggers",
-    0x12: "domaptrigger",
-    0x13: "checktriggers",
-    0x14: "dotrigger",
-    0x15: "writebyte",
-    0x16: "addvar",
-    0x17: "random",
-    0x19: "copybytetovar",
-    0x1A: "copyvartobyte",
-    0x1B: "loadvar",
-    0x1C: "checkcode",
-    0x1E: "writecode",
-    0x1F: "giveitem",
-    0x20: "takeitem",
-    0x21: "checkitem",
-    0x22: "givemoney",
-    0x23: "takemoney",
-    0x24: "checkmonkey",
-    0x25: "givecoins",
-    0x26: "takecoins",
-    0x27: "checkcoins",
-    0x2B: "checktime",
-    0x2C: "checkpoke",
-    0x2D: "givepoke",
-    0x2E: "giveegg",
-    0x2F: "givepokeitem",
-    0x31: "checkbit1",
-    0x32: "clearbit1",
-    0x33: "setbit1",
-    0x34: "checkbit2",
-    0x35: "clearbit2",
-    0x36: "setbit2",
-    0x37: "wildoff",
-    0x38: "wildon",
-    0x39: "xycompare",
-    0x3A: "warpmod",
-    0x3B: "blackoutmod",
-    0x3C: "warp",
-    0x41: "itemtotext",
-    0x43: "trainertotext",
-    0x44: "stringtotext",
-    0x45: "itemnotify",
-    0x46: "pocketisfull",
-    0x47: "loadfont",
-    0x48: "refreshscreen",
-    0x49: "loadmovesprites",
-    0x4B: "3writetext",
-    0x4C: "2writetext",
-    0x4E: "yesorno",
-    0x4F: "loadmenudata",
-    0x50: "writebackup",
-    0x51: "jumptextfaceplayer",
-    0x52: "jumptext",
-    0x53: "closetext",
-    0x54: "keeptextopen",
-    0x55: "pokepic",
-    0x56: "pokepicyesorno",
-    0x57: "interpretmenu",
-    0x58: "interpretmenu2",
-    0x5C: "loadpokedata",
-    0x5D: "loadtrainer",
-    0x5E: "startbattle",
-    0x5F: "returnafterbattle",
-    0x60: "catchtutorial",
-    0x63: "winlosstext",
-    0x65: "talkaftercancel",
-    0x67: "setlasttalked",
-    0x68: "applymovement",
-    0x6A: "faceplayer",
-    0x6B: "faceperson",
-    0x6C: "variablesprite",
-    0x6D: "disappear",
-    0x6E: "appear",
-    0x6F: "follow",
-    0x70: "stopfollow",
-    0x71: "moveperson",
-    0x74: "showemote",
-    0x75: "spriteface",
-    0x76: "follownotexact",
-    0x77: "earthquake",
-    0x79: "changeblock",
-    0x7A: "reloadmap",
-    0x7B: "reloadmappart",
-    0x7C: "writecmdqueue",
-    0x7D: "delcmdqueue",
-    0x7E: "playmusic",
-    0x7F: "playrammusic",
-    0x80: "musicfadeout",
-    0x81: "playmapmusic",
-    0x82: "reloadmapmusic",
-    0x83: "cry",
-    0x84: "playsound",
-    0x85: "waitbutton",
-    0x86: "warpsound",
-    0x87: "specialsound",
-    0x88: "passtoengine",
-    0x89: "newloadmap",
-    0x8A: "pause",
-    0x8B: "deactivatefacing",
-    0x8C: "priorityjump",
-    0x8D: "warpcheck",
-    0x8E: "ptpriorityjump",
-    0x8F: "return",
-    0x90: "end",
-    0x91: "reloadandreturn",
-    0x92: "resetfuncs",
-    0x93: "pokemart",
-    0x94: "elevator",
-    0x95: "trade",
-    0x96: "askforphonenumber",
-    0x97: "phonecall",
-    0x98: "hangup",
-    0x99: "describedecoration",
-    0x9A: "fruittree",
-    0x9C: "checkphonecall",
-    0x9D: "verbosegiveitem",
-    0x9E: "loadwilddata",
-    0x9F: "halloffame",
-    0xA0: "credits",
-    0xA1: "warpfacing",
-    0xA2: "storetext",
-    0xA3: "displaylocation",
-}
+from pksv import pksv_gs, pksv_crystal, pksv_crystal_unknowns,\
+                 pksv_crystal_more, pksv_crystal_more_enders
 
-#see http://www.pokecommunity.com/showpost.php?p=4347261
-#NOTE: this has some updates that need to be back-ported to gold
-pksv_crystal = {
-    0x00: "2call",
-    0x01: "3call",
-    0x02: "2ptcall",
-    0x03: "2jump",
-    0x04: "3jump",
-    0x05: "2ptjump",
-    0x06: "if equal",
-    0x07: "if not equal",
-    0x08: "if false",
-    0x09: "if true",
-    0x0A: "if less than",
-    0x0B: "if greater than",
-    0x0C: "jumpstd",
-    0x0D: "callstd",
-    0x0E: "3callasm",
-    0x0F: "special",
-    0x10: "2ptcallasm",
-    0x11: "checkmaptriggers",
-    0x12: "domaptrigger",
-    0x13: "checktriggers",
-    0x14: "dotrigger",
-    0x15: "writebyte",
-    0x16: "addvar",
-    0x17: "random",
-    0x19: "copybytetovar",
-    0x1A: "copyvartobyte",
-    0x1B: "loadvar",
-    0x1C: "checkcode",
-    0x1D: "writevarcode",
-    0x1E: "writecode",
-    0x1F: "giveitem",
-    0x20: "takeitem",
-    0x21: "checkitem",
-    0x22: "givemoney",
-    0x23: "takemoney",
-    0x24: "checkmonkey",
-    0x25: "givecoins",
-    0x26: "takecoins",
-    0x27: "checkcoins",
-    0x28: "addcellnum",
-    0x29: "delcellnum",
-    0x2B: "checktime",
-    0x2C: "checkpoke",
-    0x2D: "givepoke",
-    0x2E: "giveegg",
-    0x2F: "givepokeitem",
-    0x31: "checkbit1",
-    0x32: "clearbit1",
-    0x33: "setbit1",
-    0x34: "checkbit2",
-    0x35: "clearbit2",
-    0x36: "setbit2",
-    0x37: "wildoff",
-    0x38: "wildon",
-    0x39: "xycompare",
-    0x3A: "warpmod",
-    0x3B: "blackoutmod",
-    0x3C: "warp",
-    0x41: "itemtotext",
-    0x43: "trainertotext",
-    0x44: "stringtotext",
-    0x45: "itemnotify",
-    0x46: "pocketisfull",
-    0x47: "loadfont",
-    0x48: "refreshscreen",
-    0x49: "loadmovesprites",
-    0x4B: "3writetext",
-    0x4C: "2writetext",
-    0x4E: "yesorno",
-    0x4F: "loadmenudata",
-    0x50: "writebackup",
-    0x51: "jumptextfaceplayer",
-    0x53: "jumptext",
-    0x54: "closetext",
-    0x55: "keeptextopen",
-    0x56: "pokepic",
-    0x57: "pokepicyesorno",
-    0x58: "interpretmenu",
-    0x59: "interpretmenu2",
-    0x5D: "loadpokedata",
-    0x5E: "loadtrainer",
-    0x5F: "startbattle",
-    0x60: "returnafterbattle",
-    0x61: "catchtutorial",
-    0x64: "winlosstext",
-    0x66: "talkaftercancel",
-    0x68: "setlasttalked",
-    0x69: "applymovement",
-    0x6B: "faceplayer",
-    0x6C: "faceperson",
-    0x6D: "variablesprite",
-    0x6E: "disappear",
-    0x6F: "appear",
-    0x70: "follow",
-    0x71: "stopfollow",
-    0x72: "moveperson",
-    0x75: "showemote",
-    0x76: "spriteface",
-    0x77: "follownotexact",
-    0x78: "earthquake",
-    0x7A: "changeblock",
-    0x7B: "reloadmap",
-    0x7C: "reloadmappart",
-    0x7D: "writecmdqueue",
-    0x7E: "delcmdqueue",
-    0x7F: "playmusic",
-    0x80: "playrammusic",
-    0x81: "musicfadeout",
-    0x82: "playmapmusic",
-    0x83: "reloadmapmusic",
-    0x84: "cry",
-    0x85: "playsound",
-    0x86: "waitbutton",
-    0x87: "warpsound",
-    0x88: "specialsound",
-    0x89: "passtoengine",
-    0x8A: "newloadmap",
-    0x8B: "pause",
-    0x8C: "deactivatefacing",
-    0x8D: "priorityjump",
-    0x8E: "warpcheck",
-    0x8F: "ptpriorityjump",
-    0x90: "return",
-    0x91: "end",
-    0x92: "reloadandreturn",
-    0x93: "resetfuncs",
-    0x94: "pokemart",
-    0x95: "elevator",
-    0x96: "trade",
-    0x97: "askforphonenumber",
-    0x98: "phonecall",
-    0x99: "hangup",
-    0x9A: "describedecoration",
-    0x9B: "fruittree",
-    0x9C: "specialphonecall",
-    0x9D: "checkphonecall",
-    0x9E: "verbosegiveitem",
-    0x9F: "verbosegiveitem2",
-    0xA0: "loadwilddata",
-    0xA1: "halloffame",
-    0xA2: "credits",
-    0xA3: "warpfacing",
-    0xA4: "storetext",
-    0xA5: "displaylocation",
-    0xB2: "unknown0xb2",
-}
-
-#these have no pksv names as of pksv 2.1.1
-pksv_crystal_unknowns = [
-    0x9F,
-    0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,
-    0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8,
-    0xCC, 0xCD,
-    0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6,
-    0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
-    0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8,
-    0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF,
-]
-
-
 class SingleByteParam():
     """or SingleByte(CommandParam)"""
     size = 1
@@ -2489,187 +1444,7 @@
     pass
 
 
-#byte: [name, [param1 name, param1 type], [param2 name, param2 type], ...]
-#0x9E: ["verbosegiveitem", ["item", ItemLabelByte], ["quantity", SingleByteParam]],
-pksv_crystal_more = {
-    0x00: ["2call", ["pointer", ScriptPointerLabelParam]],
-    0x01: ["3call", ["pointer", ScriptPointerLabelBeforeBank]],
-    0x02: ["2ptcall", ["pointer", PointerLabelToScriptPointer]],
-    0x03: ["2jump", ["pointer", ScriptPointerLabelParam]],
-    0x04: ["3jump", ["pointer", ScriptPointerLabelBeforeBank]],
-    0x05: ["2ptjump", ["pointer", PointerLabelToScriptPointer]],
-    0x06: ["if equal", ["byte", SingleByteParam], ["pointer", ScriptPointerLabelParam]],
-    0x07: ["if not equal", ["byte", SingleByteParam], ["pointer", ScriptPointerLabelParam]],
-    0x08: ["if false", ["pointer", ScriptPointerLabelParam]],
-    0x09: ["if true", ["pointer", ScriptPointerLabelParam]],
-    0x0A: ["if less than", ["byte", SingleByteParam], ["pointer", ScriptPointerLabelParam]],
-    0x0B: ["if greater than", ["byte", SingleByteParam], ["pointer", ScriptPointerLabelParam]],
-    0x0C: ["jumpstd", ["predefined_script", MultiByteParam]],
-    0x0D: ["callstd", ["predefined_script", MultiByteParam]],
-    0x0E: ["3callasm", ["asm", AsmPointerParam]],
-    0x0F: ["special", ["predefined_script", MultiByteParam]],
-    0x10: ["2ptcallasm", ["asm", PointerToAsmPointerParam]],
-    #should map_group/map_id be dealt with in some special way in the asm?
-    0x11: ["checkmaptriggers", ["map_group", SingleByteParam], ["map_id", SingleByteParam]],
-    0x12: ["domaptrigger", ["map_group", MapGroupParam], ["map_id", MapIdParam], ["trigger_id", SingleByteParam]],
-    0x13: ["checktriggers"],
-    0x14: ["dotrigger", ["trigger_id", SingleByteParam]],
-    0x15: ["writebyte", ["value", SingleByteParam]],
-    0x16: ["addvar", ["value", SingleByteParam]],
-    0x17: ["random", ["input", SingleByteParam]],
-    0x18: ["checkver"],
-    0x19: ["copybytetovar", ["address", RAMAddressParam]],
-    0x1A: ["copyvartobyte", ["address", RAMAddressParam]],
-    0x1B: ["loadvar", ["address", RAMAddressParam], ["value", SingleByteParam]],
-    0x1C: ["checkcode", ["variable_id", SingleByteParam]],
-    0x1D: ["writevarcode", ["variable_id", SingleByteParam]],
-    0x1E: ["writecode", ["variable_id", SingleByteParam], ["value", SingleByteParam]],
-    0x1F: ["giveitem", ["item", ItemLabelByte], ["quantity", SingleByteParam]],
-    0x20: ["takeitem", ["item", ItemLabelByte], ["quantity", SingleByteParam]],
-    0x21: ["checkitem", ["item", ItemLabelByte]],
-    0x22: ["givemoney", ["account", SingleByteParam], ["money", MoneyByteParam]],
-    0x23: ["takemoney", ["account", SingleByteParam], ["money", MoneyByteParam]],
-    0x24: ["checkmonkey", ["account", SingleByteParam], ["money", MoneyByteParam]],
-    0x25: ["givecoins", ["coins", CoinByteParam]],
-    0x26: ["takecoins", ["coins", CoinByteParam]],
-    0x27: ["checkcoins", ["coins", CoinByteParam]],
-    #0x28-0x2A not from pksv
-    0x28: ["addcellnum", ["person", SingleByteParam]],
-    0x29: ["delcellnum", ["person", SingleByteParam]],
-    0x2A: ["checkcellnum", ["person", SingleByteParam]],
-    #back on track...
-    0x2B: ["checktime", ["time", SingleByteParam]],
-    0x2C: ["checkpoke", ["pkmn", PokemonParam]],
-#0x2D: ["givepoke", ], .... see GivePoke class
-    0x2E: ["giveegg", ["pkmn", PokemonParam], ["level", DecimalParam]],
-    0x2F: ["givepokeitem", ["pointer", PointerParamToItemAndLetter]],
-    0x30: ["checkpokeitem", ["pointer", PointerParamToItemAndLetter]], #not pksv
-    0x31: ["checkbit1", ["bit_number", MultiByteParam]],
-    0x32: ["clearbit1", ["bit_number", MultiByteParam]],
-    0x33: ["setbit1", ["bit_number", MultiByteParam]],
-    0x34: ["checkbit2", ["bit_number", MultiByteParam]],
-    0x35: ["clearbit2", ["bit_number", MultiByteParam]],
-    0x36: ["setbit2", ["bit_number", MultiByteParam]],
-    0x37: ["wildoff"],
-    0x38: ["wildon"],
-    0x39: ["xycompare", ["pointer", MultiByteParam]],
-    0x3A: ["warpmod", ["warp_id", SingleByteParam], ["map_group", MapGroupParam], ["map_id", MapIdParam]],
-    0x3B: ["blackoutmod", ["map_group", MapGroupParam], ["map_id", MapIdParam]],
-    0x3C: ["warp", ["map_group", MapGroupParam], ["map_id", MapIdParam], ["x", SingleByteParam], ["y", SingleByteParam]],
-    0x3D: ["readmoney", ["account", SingleByteParam], ["memory", SingleByteParam]], #not pksv
-    0x3E: ["readcoins", ["memory", SingleByteParam]], #not pksv
-    0x3F: ["RAM2MEM", ["memory", SingleByteParam]], #not pksv
-    0x40: ["pokenamemem", ["pokemon", PokemonParam], ["memory", SingleByteParam]], #not pksv
-    0x41: ["itemtotext", ["item", ItemLabelByte], ["memory", SingleByteParam]],
-    0x42: ["mapnametotext", ["memory", SingleByteParam]], #not pksv
-    0x43: ["trainertotext", ["trainer_id", TrainerIdParam], ["trainer_group", TrainerGroupParam], ["memory", SingleByteParam]],
-    0x44: ["stringtotext", ["text_pointer", RawTextPointerLabelParam], ["memory", SingleByteParam]],
-    0x45: ["itemnotify"],
-    0x46: ["pocketisfull"],
-    0x47: ["loadfont"],
-    0x48: ["refreshscreen", ["dummy", SingleByteParam]],
-    0x49: ["loadmovesprites"],
-    0x4A: ["loadbytec1ce", ["byte", SingleByteParam]], #not pksv
-    0x4B: ["3writetext", ["text_pointer", PointerLabelBeforeBank]],
-    0x4C: ["2writetext", ["text_pointer", TextPointerLabelParam]],
-    0x4D: ["repeattext", ["byte", SingleByteParam], ["byte", SingleByteParam]], #not pksv
-    0x4E: ["yesorno"],
-    0x4F: ["loadmenudata", ["data", MenuDataPointerParam]],
-    0x50: ["writebackup"],
-    0x51: ["jumptextfaceplayer", ["text_pointer", RawTextPointerLabelParam]],
-    0x53: ["jumptext", ["text_pointer", TextPointerLabelParam]],
-    0x54: ["closetext"],
-    0x55: ["keeptextopen"],
-    0x56: ["pokepic", ["pokemon", PokemonParam]],
-    0x57: ["pokepicyesorno"],
-    0x58: ["interpretmenu"],
-    0x59: ["interpretmenu2"],
-#not pksv
-    0x5A: ["loadpikachudata"],
-    0x5B: ["battlecheck"],
-    0x5C: ["loadtrainerdata"],
-#back to pksv..
-    0x5D: ["loadpokedata", ["pokemon", PokemonParam], ["level", DecimalParam]],
-    0x5E: ["loadtrainer", ["trainer_group", TrainerGroupParam], ["trainer_id", TrainerIdParam]],
-    0x5F: ["startbattle"],
-    0x60: ["returnafterbattle"],
-    0x61: ["catchtutorial", ["byte", SingleByteParam]],
-#not pksv
-    0x62: ["trainertext", ["which_text", SingleByteParam]],
-    0x63: ["trainerstatus", ["action", SingleByteParam]],
-#back to pksv..
-    0x64: ["winlosstext", ["win_text_pointer", TextPointerLabelParam], ["loss_text_pointer", TextPointerLabelParam]],
-    0x65: ["scripttalkafter"], #not pksv
-    0x66: ["talkaftercancel"],
-    0x67: ["talkaftercheck"],
-    0x68: ["setlasttalked", ["person", SingleByteParam]],
-    0x69: ["applymovement", ["person", SingleByteParam], ["data", MovementPointerLabelParam]],
-    0x6A: ["applymovement2", ["data", MovementPointerLabelParam]], #not pksv
-    0x6B: ["faceplayer"],
-    0x6C: ["faceperson", ["person1", SingleByteParam], ["person2", SingleByteParam]],
-    0x6D: ["variablesprite", ["byte", SingleByteParam], ["sprite", SingleByteParam]],
-    0x6E: ["disappear", ["person", SingleByteParam]], #hideperson
-    0x6F: ["appear", ["person", SingleByteParam]], #showperson
-    0x70: ["follow", ["person2", SingleByteParam], ["person1", SingleByteParam]],
-    0x71: ["stopfollow"],
-    0x72: ["moveperson", ["person", SingleByteParam], ["x", SingleByteParam], ["y", SingleByteParam]],
-    0x73: ["writepersonxy", ["person", SingleByteParam]], #not pksv
-    0x74: ["loademote", ["bubble", SingleByteParam]],
-    0x75: ["showemote", ["bubble", SingleByteParam], ["person", SingleByteParam], ["time", SingleByteParam]],
-    0x76: ["spriteface", ["person", SingleByteParam], ["facing", SingleByteParam]],
-    0x77: ["follownotexact", ["person2", SingleByteParam], ["person1", SingleByteParam]],
-    0x78: ["earthquake", ["param", SingleByteParam]],
-    0x79: ["changemap", ["map_data_pointer", MapDataPointerParam]],
-    0x7A: ["changeblock", ["x", SingleByteParam], ["y", SingleByteParam], ["block", SingleByteParam]],
-    0x7B: ["reloadmap"],
-    0x7C: ["reloadmappart"],
-    0x7D: ["writecmdqueue", ["queue_pointer", MultiByteParam]],
-    0x7E: ["delcmdqueue", ["byte", SingleByteParam]],
-    0x7F: ["playmusic", ["music_pointer", MultiByteParam]],
-    0x80: ["playrammusic"],
-    0x81: ["musicfadeout", ["music", MultiByteParam], ["fadetime", SingleByteParam]],
-    0x82: ["playmapmusic"],
-    0x83: ["reloadmapmusic"],
-    0x84: ["cry", ["cry_id", SingleByteParam], ["wtf", SingleByteParam]], #XXX maybe it should use PokemonParam
-    0x85: ["playsound", ["sound_pointer", MultiByteParam]],
-    0x86: ["waitbutton"],
-    0x87: ["warpsound"],
-    0x88: ["specialsound"],
-    0x89: ["passtoengine", ["data_pointer", PointerLabelBeforeBank]],
-    0x8A: ["newloadmap", ["which_method", SingleByteParam]],
-    0x8B: ["pause", ["length", SingleByteParam]],
-    0x8C: ["deactivatefacing", ["time", SingleByteParam]],
-    0x8D: ["priorityjump", ["pointer", ScriptPointerLabelParam]],
-    0x8E: ["warpcheck"],
-    0x8F: ["ptpriorityjump", ["pointer", ScriptPointerLabelParam]],
-    0x90: ["return"],
-    0x91: ["end"],
-    0x92: ["reloadandreturn"],
-    0x93: ["resetfuncs"],
-    0x94: ["pokemart", ["dialog_id", SingleByteParam], ["mart_id", MultiByteParam]], #maybe it should be a pokemark constant id/label?
-    0x95: ["elevator", ["floor_list_pointer", PointerLabelParam]],
-    0x96: ["trade", ["trade_id", SingleByteParam]],
-    0x97: ["askforphonenumber", ["number", SingleByteParam]],
-    0x98: ["phonecall", ["caller_name", RawTextPointerLabelParam]],
-    0x99: ["hangup"],
-    0x9A: ["describedecoration", ["byte", SingleByteParam]],
-    0x9B: ["fruittree", ["tree_id", SingleByteParam]],
-    0x9C: ["specialphonecall", ["call_id", SingleByteParam], ["wtf", SingleByteParam]],
-    0x9D: ["checkphonecall"],
-    0x9E: ["verbosegiveitem", ["item", ItemLabelByte], ["quantity", DecimalParam]],
-    0x9F: ["verbosegiveitem2", ["item", ItemLabelByte]],
-    0xA0: ["loadwilddata", ["map_group", MapGroupParam], ["map_id", MapIdParam]],
-    0xA1: ["halloffame"],
-    0xA2: ["credits"],
-    0xA3: ["warpfacing", ["facing", SingleByteParam], ["map_group", MapGroupParam], ["map_id", MapIdParam], ["x", SingleByteParam], ["y", SingleByteParam]],
-    0xA4: ["storetext", ["pointer", PointerLabelBeforeBank], ["memory", SingleByteParam]],
-    0xA5: ["displaylocation", ["id", SingleByteParam]],
-    0xA8: ["unknown0xa8", ["unknown", SingleByteParam]],
-    0xB2: ["unknown0xb2", ["unknown", SingleByteParam]],
-    0xCC: ["unknown0xcc"],
-}
 
-
 class Command:
     """
     Note: when dumping to asm, anything in script_parse_table that directly
@@ -2811,12 +1586,6 @@
         return True
 
 
-#these cause the script to end; used in create_command_classes
-pksv_crystal_more_enders = [0x03, 0x04, 0x05, 0x0C, 0x51, 0x53,
-                            0x8D, 0x8F, 0x90, 0x91, 0x92, 0x9B,
-                            0xB2, #maybe?
-                            0xCC, #maybe?
-                           ]
 def create_command_classes(debug=False):
     """creates some classes for each command byte"""
     #don't forget to add any manually created script command classes
--- /dev/null
+++ b/extras/item_constants.py
@@ -1,0 +1,222 @@
+item_constants = {1: 'MASTER_BALL',
+2: 'ULTRA_BALL',
+3: 'BRIGHTPOWDER',
+4: 'GREAT_BALL',
+5: 'POKE_BALL',
+7: 'BICYCLE',
+8: 'MOON_STONE',
+9: 'ANTIDOTE',
+10: 'BURN_HEAL',
+11: 'ICE_HEAL',
+12: 'AWAKENING',
+13: 'PARLYZ_HEAL',
+14: 'FULL_RESTORE',
+15: 'MAX_POTION',
+16: 'HYPER_POTION',
+17: 'SUPER_POTION',
+18: 'POTION',
+19: 'ESCAPE_ROPE',
+20: 'REPEL',
+21: 'MAX_ELIXER',
+22: 'FIRE_STONE',
+23: 'THUNDERSTONE',
+24: 'WATER_STONE',
+26: 'HP_UP',
+27: 'PROTEIN',
+28: 'IRON',
+29: 'CARBOS',
+30: 'LUCKY_PUNCH',
+31: 'CALCIUM',
+32: 'RARE_CANDY',
+33: 'X_ACCURACY',
+34: 'LEAF_STONE',
+35: 'METAL_POWDER',
+36: 'NUGGET',
+37: 'POKE_DOLL',
+38: 'FULL_HEAL',
+39: 'REVIVE',
+40: 'MAX_REVIVE',
+41: 'GUARD_SPEC.',
+42: 'SUPER_REPEL',
+43: 'MAX_REPEL',
+44: 'DIRE_HIT',
+46: 'FRESH_WATER',
+47: 'SODA_POP',
+48: 'LEMONADE',
+49: 'X_ATTACK',
+51: 'X_DEFEND',
+52: 'X_SPEED',
+53: 'X_SPECIAL',
+54: 'COIN_CASE',
+55: 'ITEMFINDER',
+57: 'EXP_SHARE',
+58: 'OLD_ROD',
+59: 'GOOD_ROD',
+60: 'SILVER_LEAF',
+61: 'SUPER_ROD',
+62: 'PP_UP',
+63: 'ETHER',
+64: 'MAX_ETHER',
+65: 'ELIXER',
+66: 'RED_SCALE',
+67: 'SECRETPOTION',
+68: 'S.S.TICKET',
+69: 'MYSTERY_EGG',
+70: 'CLEAR_BELL',
+71: 'SILVER_WING',
+72: 'MOOMOO_MILK',
+73: 'QUICK_CLAW',
+74: 'PSNCUREBERRY',
+75: 'GOLD_LEAF',
+76: 'SOFT_SAND',
+77: 'SHARP_BEAK',
+78: 'PRZCUREBERRY',
+79: 'BURNT_BERRY',
+80: 'ICE_BERRY',
+81: 'POISON_BARB',
+82: "KING'S_ROCK",
+83: 'BITTER_BERRY',
+84: 'MINT_BERRY',
+85: 'RED_APRICORN',
+86: 'TINYMUSHROOM',
+87: 'BIG_MUSHROOM',
+88: 'SILVERPOWDER',
+89: 'BLU_APRICORN',
+91: 'AMULET_COIN',
+92: 'YLW_APRICORN',
+93: 'GRN_APRICORN',
+94: 'CLEANSE_TAG',
+95: 'MYSTIC_WATER',
+96: 'TWISTEDSPOON',
+97: 'WHT_APRICORN',
+98: 'BLACKBELT',
+99: 'BLK_APRICORN',
+101: 'PNK_APRICORN',
+102: 'BLACKGLASSES',
+103: 'SLOWPOKETAIL',
+104: 'PINK_BOW',
+105: 'STICK',
+106: 'SMOKE_BALL',
+107: 'NEVERMELTICE',
+108: 'MAGNET',
+109: 'MIRACLEBERRY',
+110: 'PEARL',
+111: 'BIG_PEARL',
+112: 'EVERSTONE',
+113: 'SPELL_TAG',
+114: 'RAGECANDYBAR',
+115: 'GS_BALL',
+116: 'BLUE_CARD',
+117: 'MIRACLE_SEED',
+118: 'THICK_CLUB',
+119: 'FOCUS_BAND',
+121: 'ENERGYPOWDER',
+122: 'ENERGY_ROOT',
+123: 'HEAL_POWDER',
+124: 'REVIVAL_HERB',
+125: 'HARD_STONE',
+126: 'LUCKY_EGG',
+127: 'CARD_KEY',
+128: 'MACHINE_PART',
+129: 'EGG_TICKET',
+130: 'LOST_ITEM',
+131: 'STARDUST',
+132: 'STAR_PIECE',
+133: 'BASEMENT_KEY',
+134: 'PASS',
+138: 'CHARCOAL',
+139: 'BERRY_JUICE',
+140: 'SCOPE_LENS',
+143: 'METAL_COAT',
+144: 'DRAGON_FANG',
+146: 'LEFTOVERS',
+150: 'MYSTERYBERRY',
+151: 'DRAGON_SCALE',
+152: 'BERSERK_GENE',
+156: 'SACRED_ASH',
+157: 'HEAVY_BALL',
+158: 'FLOWER_MAIL',
+159: 'LEVEL_BALL',
+160: 'LURE_BALL',
+161: 'FAST_BALL',
+163: 'LIGHT_BALL',
+164: 'FRIEND_BALL',
+165: 'MOON_BALL',
+166: 'LOVE_BALL',
+167: 'NORMAL_BOX',
+168: 'GORGEOUS_BOX',
+169: 'SUN_STONE',
+170: 'POLKADOT_BOW',
+172: 'UP_GRADE',
+173: 'BERRY',
+174: 'GOLD_BERRY',
+175: 'SQUIRTBOTTLE',
+177: 'PARK_BALL',
+178: 'RAINBOW_WING',
+180: 'BRICK_PIECE',
+181: 'SURF_MAIL',
+182: 'LITEBLUEMAIL',
+183: 'PORTRAITM_AIL',
+184: 'LOVELY_MAIL',
+185: 'EON_MAIL',
+186: 'MORPH_MAIL',
+187: 'BLUESKY_MAIL',
+188: 'MUSIC_MAIL',
+189: 'MIRAGE_MAIL',
+191: 'TM_01',
+192: 'TM_02',
+193: 'TM_03',
+194: 'TM_04',
+196: 'TM_05',
+197: 'TM_06',
+198: 'TM_07',
+199: 'TM_08',
+200: 'TM_09',
+201: 'TM_10',
+202: 'TM_11',
+203: 'TM_12',
+204: 'TM_13',
+205: 'TM_14',
+206: 'TM_15',
+207: 'TM_16',
+208: 'TM_17',
+209: 'TM_18',
+210: 'TM_19',
+211: 'TM_20',
+212: 'TM_21',
+213: 'TM_22',
+214: 'TM_23',
+215: 'TM_24',
+216: 'TM_25',
+217: 'TM_26',
+218: 'TM_27',
+219: 'TM_28',
+221: 'TM_29',
+222: 'TM_30',
+223: 'TM_31',
+224: 'TM_32',
+225: 'TM_33',
+226: 'TM_34',
+227: 'TM_35',
+228: 'TM_36',
+229: 'TM_37',
+230: 'TM_38',
+231: 'TM_39',
+232: 'TM_40',
+233: 'TM_41',
+234: 'TM_42',
+235: 'TM_43',
+236: 'TM_44',
+237: 'TM_45',
+238: 'TM_46',
+239: 'TM_47',
+240: 'TM_48',
+241: 'TM_49',
+242: 'TM_50',
+243: 'HM_01',
+244: 'HM_02',
+245: 'HM_03',
+246: 'HM_04',
+247: 'HM_05',
+248: 'HM_06',
+249: 'HM_07'}
--- /dev/null
+++ b/extras/pksv.py
@@ -1,0 +1,502 @@
+
+pksv_gs = {
+    0x00: "2call",
+    0x01: "3call",
+    0x02: "2ptcall",
+    0x03: "2jump",
+    0x04: "3jump",
+    0x05: "2ptjump",
+    0x06: "if equal",
+    0x07: "if not equal",
+    0x08: "if false",
+    0x09: "if true",
+    0x0A: "if less than",
+    0x0B: "if greater than",
+    0x0C: "jumpstd",
+    0x0D: "callstd",
+    0x0E: "3callasm",
+    0x0F: "special",
+    0x10: "2ptcallasm",
+    0x11: "checkmaptriggers",
+    0x12: "domaptrigger",
+    0x13: "checktriggers",
+    0x14: "dotrigger",
+    0x15: "writebyte",
+    0x16: "addvar",
+    0x17: "random",
+    0x19: "copybytetovar",
+    0x1A: "copyvartobyte",
+    0x1B: "loadvar",
+    0x1C: "checkcode",
+    0x1E: "writecode",
+    0x1F: "giveitem",
+    0x20: "takeitem",
+    0x21: "checkitem",
+    0x22: "givemoney",
+    0x23: "takemoney",
+    0x24: "checkmonkey",
+    0x25: "givecoins",
+    0x26: "takecoins",
+    0x27: "checkcoins",
+    0x2B: "checktime",
+    0x2C: "checkpoke",
+    0x2D: "givepoke",
+    0x2E: "giveegg",
+    0x2F: "givepokeitem",
+    0x31: "checkbit1",
+    0x32: "clearbit1",
+    0x33: "setbit1",
+    0x34: "checkbit2",
+    0x35: "clearbit2",
+    0x36: "setbit2",
+    0x37: "wildoff",
+    0x38: "wildon",
+    0x39: "xycompare",
+    0x3A: "warpmod",
+    0x3B: "blackoutmod",
+    0x3C: "warp",
+    0x41: "itemtotext",
+    0x43: "trainertotext",
+    0x44: "stringtotext",
+    0x45: "itemnotify",
+    0x46: "pocketisfull",
+    0x47: "loadfont",
+    0x48: "refreshscreen",
+    0x49: "loadmovesprites",
+    0x4B: "3writetext",
+    0x4C: "2writetext",
+    0x4E: "yesorno",
+    0x4F: "loadmenudata",
+    0x50: "writebackup",
+    0x51: "jumptextfaceplayer",
+    0x52: "jumptext",
+    0x53: "closetext",
+    0x54: "keeptextopen",
+    0x55: "pokepic",
+    0x56: "pokepicyesorno",
+    0x57: "interpretmenu",
+    0x58: "interpretmenu2",
+    0x5C: "loadpokedata",
+    0x5D: "loadtrainer",
+    0x5E: "startbattle",
+    0x5F: "returnafterbattle",
+    0x60: "catchtutorial",
+    0x63: "winlosstext",
+    0x65: "talkaftercancel",
+    0x67: "setlasttalked",
+    0x68: "applymovement",
+    0x6A: "faceplayer",
+    0x6B: "faceperson",
+    0x6C: "variablesprite",
+    0x6D: "disappear",
+    0x6E: "appear",
+    0x6F: "follow",
+    0x70: "stopfollow",
+    0x71: "moveperson",
+    0x74: "showemote",
+    0x75: "spriteface",
+    0x76: "follownotexact",
+    0x77: "earthquake",
+    0x79: "changeblock",
+    0x7A: "reloadmap",
+    0x7B: "reloadmappart",
+    0x7C: "writecmdqueue",
+    0x7D: "delcmdqueue",
+    0x7E: "playmusic",
+    0x7F: "playrammusic",
+    0x80: "musicfadeout",
+    0x81: "playmapmusic",
+    0x82: "reloadmapmusic",
+    0x83: "cry",
+    0x84: "playsound",
+    0x85: "waitbutton",
+    0x86: "warpsound",
+    0x87: "specialsound",
+    0x88: "passtoengine",
+    0x89: "newloadmap",
+    0x8A: "pause",
+    0x8B: "deactivatefacing",
+    0x8C: "priorityjump",
+    0x8D: "warpcheck",
+    0x8E: "ptpriorityjump",
+    0x8F: "return",
+    0x90: "end",
+    0x91: "reloadandreturn",
+    0x92: "resetfuncs",
+    0x93: "pokemart",
+    0x94: "elevator",
+    0x95: "trade",
+    0x96: "askforphonenumber",
+    0x97: "phonecall",
+    0x98: "hangup",
+    0x99: "describedecoration",
+    0x9A: "fruittree",
+    0x9C: "checkphonecall",
+    0x9D: "verbosegiveitem",
+    0x9E: "loadwilddata",
+    0x9F: "halloffame",
+    0xA0: "credits",
+    0xA1: "warpfacing",
+    0xA2: "storetext",
+    0xA3: "displaylocation",
+}
+
+#see http://www.pokecommunity.com/showpost.php?p=4347261
+#NOTE: this has some updates that need to be back-ported to gold
+pksv_crystal = {
+    0x00: "2call",
+    0x01: "3call",
+    0x02: "2ptcall",
+    0x03: "2jump",
+    0x04: "3jump",
+    0x05: "2ptjump",
+    0x06: "if equal",
+    0x07: "if not equal",
+    0x08: "if false",
+    0x09: "if true",
+    0x0A: "if less than",
+    0x0B: "if greater than",
+    0x0C: "jumpstd",
+    0x0D: "callstd",
+    0x0E: "3callasm",
+    0x0F: "special",
+    0x10: "2ptcallasm",
+    0x11: "checkmaptriggers",
+    0x12: "domaptrigger",
+    0x13: "checktriggers",
+    0x14: "dotrigger",
+    0x15: "writebyte",
+    0x16: "addvar",
+    0x17: "random",
+    0x19: "copybytetovar",
+    0x1A: "copyvartobyte",
+    0x1B: "loadvar",
+    0x1C: "checkcode",
+    0x1D: "writevarcode",
+    0x1E: "writecode",
+    0x1F: "giveitem",
+    0x20: "takeitem",
+    0x21: "checkitem",
+    0x22: "givemoney",
+    0x23: "takemoney",
+    0x24: "checkmonkey",
+    0x25: "givecoins",
+    0x26: "takecoins",
+    0x27: "checkcoins",
+    0x28: "addcellnum",
+    0x29: "delcellnum",
+    0x2B: "checktime",
+    0x2C: "checkpoke",
+    0x2D: "givepoke",
+    0x2E: "giveegg",
+    0x2F: "givepokeitem",
+    0x31: "checkbit1",
+    0x32: "clearbit1",
+    0x33: "setbit1",
+    0x34: "checkbit2",
+    0x35: "clearbit2",
+    0x36: "setbit2",
+    0x37: "wildoff",
+    0x38: "wildon",
+    0x39: "xycompare",
+    0x3A: "warpmod",
+    0x3B: "blackoutmod",
+    0x3C: "warp",
+    0x41: "itemtotext",
+    0x43: "trainertotext",
+    0x44: "stringtotext",
+    0x45: "itemnotify",
+    0x46: "pocketisfull",
+    0x47: "loadfont",
+    0x48: "refreshscreen",
+    0x49: "loadmovesprites",
+    0x4B: "3writetext",
+    0x4C: "2writetext",
+    0x4E: "yesorno",
+    0x4F: "loadmenudata",
+    0x50: "writebackup",
+    0x51: "jumptextfaceplayer",
+    0x53: "jumptext",
+    0x54: "closetext",
+    0x55: "keeptextopen",
+    0x56: "pokepic",
+    0x57: "pokepicyesorno",
+    0x58: "interpretmenu",
+    0x59: "interpretmenu2",
+    0x5D: "loadpokedata",
+    0x5E: "loadtrainer",
+    0x5F: "startbattle",
+    0x60: "returnafterbattle",
+    0x61: "catchtutorial",
+    0x64: "winlosstext",
+    0x66: "talkaftercancel",
+    0x68: "setlasttalked",
+    0x69: "applymovement",
+    0x6B: "faceplayer",
+    0x6C: "faceperson",
+    0x6D: "variablesprite",
+    0x6E: "disappear",
+    0x6F: "appear",
+    0x70: "follow",
+    0x71: "stopfollow",
+    0x72: "moveperson",
+    0x75: "showemote",
+    0x76: "spriteface",
+    0x77: "follownotexact",
+    0x78: "earthquake",
+    0x7A: "changeblock",
+    0x7B: "reloadmap",
+    0x7C: "reloadmappart",
+    0x7D: "writecmdqueue",
+    0x7E: "delcmdqueue",
+    0x7F: "playmusic",
+    0x80: "playrammusic",
+    0x81: "musicfadeout",
+    0x82: "playmapmusic",
+    0x83: "reloadmapmusic",
+    0x84: "cry",
+    0x85: "playsound",
+    0x86: "waitbutton",
+    0x87: "warpsound",
+    0x88: "specialsound",
+    0x89: "passtoengine",
+    0x8A: "newloadmap",
+    0x8B: "pause",
+    0x8C: "deactivatefacing",
+    0x8D: "priorityjump",
+    0x8E: "warpcheck",
+    0x8F: "ptpriorityjump",
+    0x90: "return",
+    0x91: "end",
+    0x92: "reloadandreturn",
+    0x93: "resetfuncs",
+    0x94: "pokemart",
+    0x95: "elevator",
+    0x96: "trade",
+    0x97: "askforphonenumber",
+    0x98: "phonecall",
+    0x99: "hangup",
+    0x9A: "describedecoration",
+    0x9B: "fruittree",
+    0x9C: "specialphonecall",
+    0x9D: "checkphonecall",
+    0x9E: "verbosegiveitem",
+    0x9F: "verbosegiveitem2",
+    0xA0: "loadwilddata",
+    0xA1: "halloffame",
+    0xA2: "credits",
+    0xA3: "warpfacing",
+    0xA4: "storetext",
+    0xA5: "displaylocation",
+    0xB2: "unknown0xb2",
+}
+
+#these cause the script to end; used in create_command_classes
+pksv_crystal_more_enders = [0x03, 0x04, 0x05, 0x0C, 0x51, 0x53,
+                            0x8D, 0x8F, 0x90, 0x91, 0x92, 0x9B,
+                            0xB2, #maybe?
+                            0xCC, #maybe?
+                           ]
+
+#these have no pksv names as of pksv 2.1.1
+pksv_crystal_unknowns = [
+    0x9F,
+    0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,
+    0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8,
+    0xCC, 0xCD,
+    0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6,
+    0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
+    0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8,
+    0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF,
+]
+
+#byte: [name, [param1 name, param1 type], [param2 name, param2 type], ...]
+#0x9E: ["verbosegiveitem", ["item", ItemLabelByte], ["quantity", SingleByteParam]],
+from crystal import ScriptPointerLabelParam, ScriptPointerLabelBeforeBank,\
+                    PointerLabelToScriptPointer,\
+                    SingleByteParam, MultiByteParam, AsmPointerParam,\
+                    PointerToAsmPointerParam, MapGroupParam, MapIdParam,\
+                    RAMAddressParam, ItemLabelByte, MoneyByteParam, CoinByteParam,\
+                    PokemonParam, DecimalParam, PointerParamToItemAndLetter,\
+                    TrainerIdParam, TrainerGroupParam, RawTextPointerLabelParam,\
+                    PointerLabelBeforeBank, TextPointerLabelParam, MenuDataPointerParam,\
+                    MovementPointerLabelParam, MapDataPointerParam, PointerLabelParam
+                    
+pksv_crystal_more = {
+    0x00: ["2call", ["pointer", ScriptPointerLabelParam]],
+    0x01: ["3call", ["pointer", ScriptPointerLabelBeforeBank]],
+    0x02: ["2ptcall", ["pointer", PointerLabelToScriptPointer]],
+    0x03: ["2jump", ["pointer", ScriptPointerLabelParam]],
+    0x04: ["3jump", ["pointer", ScriptPointerLabelBeforeBank]],
+    0x05: ["2ptjump", ["pointer", PointerLabelToScriptPointer]],
+    0x06: ["if equal", ["byte", SingleByteParam], ["pointer", ScriptPointerLabelParam]],
+    0x07: ["if not equal", ["byte", SingleByteParam], ["pointer", ScriptPointerLabelParam]],
+    0x08: ["if false", ["pointer", ScriptPointerLabelParam]],
+    0x09: ["if true", ["pointer", ScriptPointerLabelParam]],
+    0x0A: ["if less than", ["byte", SingleByteParam], ["pointer", ScriptPointerLabelParam]],
+    0x0B: ["if greater than", ["byte", SingleByteParam], ["pointer", ScriptPointerLabelParam]],
+    0x0C: ["jumpstd", ["predefined_script", MultiByteParam]],
+    0x0D: ["callstd", ["predefined_script", MultiByteParam]],
+    0x0E: ["3callasm", ["asm", AsmPointerParam]],
+    0x0F: ["special", ["predefined_script", MultiByteParam]],
+    0x10: ["2ptcallasm", ["asm", PointerToAsmPointerParam]],
+    #should map_group/map_id be dealt with in some special way in the asm?
+    0x11: ["checkmaptriggers", ["map_group", SingleByteParam], ["map_id", SingleByteParam]],
+    0x12: ["domaptrigger", ["map_group", MapGroupParam], ["map_id", MapIdParam], ["trigger_id", SingleByteParam]],
+    0x13: ["checktriggers"],
+    0x14: ["dotrigger", ["trigger_id", SingleByteParam]],
+    0x15: ["writebyte", ["value", SingleByteParam]],
+    0x16: ["addvar", ["value", SingleByteParam]],
+    0x17: ["random", ["input", SingleByteParam]],
+    0x18: ["checkver"],
+    0x19: ["copybytetovar", ["address", RAMAddressParam]],
+    0x1A: ["copyvartobyte", ["address", RAMAddressParam]],
+    0x1B: ["loadvar", ["address", RAMAddressParam], ["value", SingleByteParam]],
+    0x1C: ["checkcode", ["variable_id", SingleByteParam]],
+    0x1D: ["writevarcode", ["variable_id", SingleByteParam]],
+    0x1E: ["writecode", ["variable_id", SingleByteParam], ["value", SingleByteParam]],
+    0x1F: ["giveitem", ["item", ItemLabelByte], ["quantity", SingleByteParam]],
+    0x20: ["takeitem", ["item", ItemLabelByte], ["quantity", SingleByteParam]],
+    0x21: ["checkitem", ["item", ItemLabelByte]],
+    0x22: ["givemoney", ["account", SingleByteParam], ["money", MoneyByteParam]],
+    0x23: ["takemoney", ["account", SingleByteParam], ["money", MoneyByteParam]],
+    0x24: ["checkmonkey", ["account", SingleByteParam], ["money", MoneyByteParam]],
+    0x25: ["givecoins", ["coins", CoinByteParam]],
+    0x26: ["takecoins", ["coins", CoinByteParam]],
+    0x27: ["checkcoins", ["coins", CoinByteParam]],
+    #0x28-0x2A not from pksv
+    0x28: ["addcellnum", ["person", SingleByteParam]],
+    0x29: ["delcellnum", ["person", SingleByteParam]],
+    0x2A: ["checkcellnum", ["person", SingleByteParam]],
+    #back on track...
+    0x2B: ["checktime", ["time", SingleByteParam]],
+    0x2C: ["checkpoke", ["pkmn", PokemonParam]],
+#0x2D: ["givepoke", ], .... see GivePoke class
+    0x2E: ["giveegg", ["pkmn", PokemonParam], ["level", DecimalParam]],
+    0x2F: ["givepokeitem", ["pointer", PointerParamToItemAndLetter]],
+    0x30: ["checkpokeitem", ["pointer", PointerParamToItemAndLetter]], #not pksv
+    0x31: ["checkbit1", ["bit_number", MultiByteParam]],
+    0x32: ["clearbit1", ["bit_number", MultiByteParam]],
+    0x33: ["setbit1", ["bit_number", MultiByteParam]],
+    0x34: ["checkbit2", ["bit_number", MultiByteParam]],
+    0x35: ["clearbit2", ["bit_number", MultiByteParam]],
+    0x36: ["setbit2", ["bit_number", MultiByteParam]],
+    0x37: ["wildoff"],
+    0x38: ["wildon"],
+    0x39: ["xycompare", ["pointer", MultiByteParam]],
+    0x3A: ["warpmod", ["warp_id", SingleByteParam], ["map_group", MapGroupParam], ["map_id", MapIdParam]],
+    0x3B: ["blackoutmod", ["map_group", MapGroupParam], ["map_id", MapIdParam]],
+    0x3C: ["warp", ["map_group", MapGroupParam], ["map_id", MapIdParam], ["x", SingleByteParam], ["y", SingleByteParam]],
+    0x3D: ["readmoney", ["account", SingleByteParam], ["memory", SingleByteParam]], #not pksv
+    0x3E: ["readcoins", ["memory", SingleByteParam]], #not pksv
+    0x3F: ["RAM2MEM", ["memory", SingleByteParam]], #not pksv
+    0x40: ["pokenamemem", ["pokemon", PokemonParam], ["memory", SingleByteParam]], #not pksv
+    0x41: ["itemtotext", ["item", ItemLabelByte], ["memory", SingleByteParam]],
+    0x42: ["mapnametotext", ["memory", SingleByteParam]], #not pksv
+    0x43: ["trainertotext", ["trainer_id", TrainerIdParam], ["trainer_group", TrainerGroupParam], ["memory", SingleByteParam]],
+    0x44: ["stringtotext", ["text_pointer", RawTextPointerLabelParam], ["memory", SingleByteParam]],
+    0x45: ["itemnotify"],
+    0x46: ["pocketisfull"],
+    0x47: ["loadfont"],
+    0x48: ["refreshscreen", ["dummy", SingleByteParam]],
+    0x49: ["loadmovesprites"],
+    0x4A: ["loadbytec1ce", ["byte", SingleByteParam]], #not pksv
+    0x4B: ["3writetext", ["text_pointer", PointerLabelBeforeBank]],
+    0x4C: ["2writetext", ["text_pointer", TextPointerLabelParam]],
+    0x4D: ["repeattext", ["byte", SingleByteParam], ["byte", SingleByteParam]], #not pksv
+    0x4E: ["yesorno"],
+    0x4F: ["loadmenudata", ["data", MenuDataPointerParam]],
+    0x50: ["writebackup"],
+    0x51: ["jumptextfaceplayer", ["text_pointer", RawTextPointerLabelParam]],
+    0x53: ["jumptext", ["text_pointer", TextPointerLabelParam]],
+    0x54: ["closetext"],
+    0x55: ["keeptextopen"],
+    0x56: ["pokepic", ["pokemon", PokemonParam]],
+    0x57: ["pokepicyesorno"],
+    0x58: ["interpretmenu"],
+    0x59: ["interpretmenu2"],
+#not pksv
+    0x5A: ["loadpikachudata"],
+    0x5B: ["battlecheck"],
+    0x5C: ["loadtrainerdata"],
+#back to pksv..
+    0x5D: ["loadpokedata", ["pokemon", PokemonParam], ["level", DecimalParam]],
+    0x5E: ["loadtrainer", ["trainer_group", TrainerGroupParam], ["trainer_id", TrainerIdParam]],
+    0x5F: ["startbattle"],
+    0x60: ["returnafterbattle"],
+    0x61: ["catchtutorial", ["byte", SingleByteParam]],
+#not pksv
+    0x62: ["trainertext", ["which_text", SingleByteParam]],
+    0x63: ["trainerstatus", ["action", SingleByteParam]],
+#back to pksv..
+    0x64: ["winlosstext", ["win_text_pointer", TextPointerLabelParam], ["loss_text_pointer", TextPointerLabelParam]],
+    0x65: ["scripttalkafter"], #not pksv
+    0x66: ["talkaftercancel"],
+    0x67: ["talkaftercheck"],
+    0x68: ["setlasttalked", ["person", SingleByteParam]],
+    0x69: ["applymovement", ["person", SingleByteParam], ["data", MovementPointerLabelParam]],
+    0x6A: ["applymovement2", ["data", MovementPointerLabelParam]], #not pksv
+    0x6B: ["faceplayer"],
+    0x6C: ["faceperson", ["person1", SingleByteParam], ["person2", SingleByteParam]],
+    0x6D: ["variablesprite", ["byte", SingleByteParam], ["sprite", SingleByteParam]],
+    0x6E: ["disappear", ["person", SingleByteParam]], #hideperson
+    0x6F: ["appear", ["person", SingleByteParam]], #showperson
+    0x70: ["follow", ["person2", SingleByteParam], ["person1", SingleByteParam]],
+    0x71: ["stopfollow"],
+    0x72: ["moveperson", ["person", SingleByteParam], ["x", SingleByteParam], ["y", SingleByteParam]],
+    0x73: ["writepersonxy", ["person", SingleByteParam]], #not pksv
+    0x74: ["loademote", ["bubble", SingleByteParam]],
+    0x75: ["showemote", ["bubble", SingleByteParam], ["person", SingleByteParam], ["time", SingleByteParam]],
+    0x76: ["spriteface", ["person", SingleByteParam], ["facing", SingleByteParam]],
+    0x77: ["follownotexact", ["person2", SingleByteParam], ["person1", SingleByteParam]],
+    0x78: ["earthquake", ["param", SingleByteParam]],
+    0x79: ["changemap", ["map_data_pointer", MapDataPointerParam]],
+    0x7A: ["changeblock", ["x", SingleByteParam], ["y", SingleByteParam], ["block", SingleByteParam]],
+    0x7B: ["reloadmap"],
+    0x7C: ["reloadmappart"],
+    0x7D: ["writecmdqueue", ["queue_pointer", MultiByteParam]],
+    0x7E: ["delcmdqueue", ["byte", SingleByteParam]],
+    0x7F: ["playmusic", ["music_pointer", MultiByteParam]],
+    0x80: ["playrammusic"],
+    0x81: ["musicfadeout", ["music", MultiByteParam], ["fadetime", SingleByteParam]],
+    0x82: ["playmapmusic"],
+    0x83: ["reloadmapmusic"],
+    0x84: ["cry", ["cry_id", SingleByteParam], ["wtf", SingleByteParam]], #XXX maybe it should use PokemonParam
+    0x85: ["playsound", ["sound_pointer", MultiByteParam]],
+    0x86: ["waitbutton"],
+    0x87: ["warpsound"],
+    0x88: ["specialsound"],
+    0x89: ["passtoengine", ["data_pointer", PointerLabelBeforeBank]],
+    0x8A: ["newloadmap", ["which_method", SingleByteParam]],
+    0x8B: ["pause", ["length", SingleByteParam]],
+    0x8C: ["deactivatefacing", ["time", SingleByteParam]],
+    0x8D: ["priorityjump", ["pointer", ScriptPointerLabelParam]],
+    0x8E: ["warpcheck"],
+    0x8F: ["ptpriorityjump", ["pointer", ScriptPointerLabelParam]],
+    0x90: ["return"],
+    0x91: ["end"],
+    0x92: ["reloadandreturn"],
+    0x93: ["resetfuncs"],
+    0x94: ["pokemart", ["dialog_id", SingleByteParam], ["mart_id", MultiByteParam]], #maybe it should be a pokemark constant id/label?
+    0x95: ["elevator", ["floor_list_pointer", PointerLabelParam]],
+    0x96: ["trade", ["trade_id", SingleByteParam]],
+    0x97: ["askforphonenumber", ["number", SingleByteParam]],
+    0x98: ["phonecall", ["caller_name", RawTextPointerLabelParam]],
+    0x99: ["hangup"],
+    0x9A: ["describedecoration", ["byte", SingleByteParam]],
+    0x9B: ["fruittree", ["tree_id", SingleByteParam]],
+    0x9C: ["specialphonecall", ["call_id", SingleByteParam], ["wtf", SingleByteParam]],
+    0x9D: ["checkphonecall"],
+    0x9E: ["verbosegiveitem", ["item", ItemLabelByte], ["quantity", DecimalParam]],
+    0x9F: ["verbosegiveitem2", ["item", ItemLabelByte]],
+    0xA0: ["loadwilddata", ["map_group", MapGroupParam], ["map_id", MapIdParam]],
+    0xA1: ["halloffame"],
+    0xA2: ["credits"],
+    0xA3: ["warpfacing", ["facing", SingleByteParam], ["map_group", MapGroupParam], ["map_id", MapIdParam], ["x", SingleByteParam], ["y", SingleByteParam]],
+    0xA4: ["storetext", ["pointer", PointerLabelBeforeBank], ["memory", SingleByteParam]],
+    0xA5: ["displaylocation", ["id", SingleByteParam]],
+    0xA8: ["unknown0xa8", ["unknown", SingleByteParam]],
+    0xB2: ["unknown0xb2", ["unknown", SingleByteParam]],
+    0xCC: ["unknown0xcc"],
+}
+
--- /dev/null
+++ b/extras/pokemon_constants.py
@@ -1,0 +1,253 @@
+pokemon_constants = {
+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: "NIDORAN_F",
+30: "NIDORINA",
+31: "NIDOQUEEN",
+32: "NIDORAN_M",
+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",
+}