# -*- coding: utf-8 -*- import sys chars = { # Japanese character table ' ': '\x00', 'あ': '\x01', 'い': '\x02', 'う': '\x03', 'え': '\x04', 'お': '\x05', 'か': '\x06', 'き': '\x07', 'く': '\x08', 'け': '\x09', 'こ': '\x0A', 'さ': '\x0B', 'し': '\x0C', 'す': '\x0D', 'せ': '\x0E', 'そ': '\x0F', 'た': '\x10', 'ち': '\x11', 'つ': '\x12', 'て': '\x13', 'と': '\x14', 'な': '\x15', 'に': '\x16', 'ぬ': '\x17', 'ね': '\x18', 'の': '\x19', 'は': '\x1A', 'ひ': '\x1B', 'ふ': '\x1C', 'へ': '\x1D', 'ほ': '\x1E', 'ま': '\x1F', 'み': '\x20', 'む': '\x21', 'め': '\x22', 'も': '\x23', 'や': '\x24', 'ゆ': '\x25', 'よ': '\x26', 'ら': '\x27', 'り': '\x28', 'る': '\x29', 'れ': '\x2A', 'ろ': '\x2B', 'わ': '\x2C', 'を': '\x2D', 'ん': '\x2E', 'ぁ': '\x2F', 'ぃ': '\x30', 'ぅ': '\x31', 'ぇ': '\x32', 'ぉ': '\x33', 'ゃ': '\x34', 'ゅ': '\x35', 'ょ': '\x36', 'が': '\x37', 'ぎ': '\x38', 'ぐ': '\x39', 'げ': '\x3A', 'ご': '\x3B', 'ざ': '\x3C', 'じ': '\x3D', 'ず': '\x3E', 'ぜ': '\x3F', 'ぞ': '\x40', 'だ': '\x41', 'ぢ': '\x42', 'づ': '\x43', 'で': '\x44', 'ど': '\x45', 'ば': '\x46', 'び': '\x47', 'ぶ': '\x48', 'べ': '\x49', 'ぼ': '\x4A', 'ぱ': '\x4B', 'ぴ': '\x4C', 'ぷ': '\x4D', 'ぺ': '\x4E', 'ぽ': '\x4F', 'っ': '\x50', 'ア': '\x51', 'イ': '\x52', 'ウ': '\x53', 'エ': '\x54', 'オ': '\x55', 'カ': '\x56', 'キ': '\x57', 'ク': '\x58', 'ケ': '\x59', 'コ': '\x5A', 'サ': '\x5B', 'シ': '\x5C', 'ス': '\x5D', 'セ': '\x5E', 'ソ': '\x5F', 'タ': '\x60', 'チ': '\x61', 'ツ': '\x62', 'テ': '\x63', 'ト': '\x64', 'ナ': '\x65', 'ニ': '\x66', 'ヌ': '\x67', 'ネ': '\x68', 'ノ': '\x69', 'ハ': '\x6A', 'ヒ': '\x6B', 'フ': '\x6C', 'ヘ': '\x6D', 'ホ': '\x6E', 'マ': '\x6F', 'ミ': '\x70', 'ム': '\x71', 'メ': '\x72', 'モ': '\x73', 'ヤ': '\x74', 'ユ': '\x75', 'ヨ': '\x76', 'ラ': '\x77', 'リ': '\x78', 'ル': '\x79', 'レ': '\x7A', 'ロ': '\x7B', 'ワ': '\x7C', 'ヲ': '\x7D', 'ン': '\x7E', 'ァ': '\x7F', 'ィ': '\x80', 'ゥ': '\x81', 'ェ': '\x82', 'ォ': '\x83', 'ャ': '\x84', 'ュ': '\x85', 'ョ': '\x86', 'ガ': '\x87', 'ギ': '\x88', 'グ': '\x89', 'ゲ': '\x8A', 'ゴ': '\x8B', 'ザ': '\x8C', 'ジ': '\x8D', 'ズ': '\x8E', 'ゼ': '\x8F', 'ゾ': '\x90', 'ダ': '\x91', 'ヂ': '\x92', 'ヅ': '\x93', 'デ': '\x94', 'ド': '\x95', 'バ': '\x96', 'ビ': '\x97', 'ブ': '\x98', 'ベ': '\x99', 'ボ': '\x9A', 'パ': '\x9B', 'ピ': '\x9C', 'プ': '\x9D', 'ペ': '\x9E', 'ポ': '\x9F', 'ッ': '\xA0', '0': '\xA1', '1': '\xA2', '2': '\xA3', '3': '\xA4', '4': '\xA5', '5': '\xA6', '6': '\xA7', '7': '\xA8', '8': '\xA9', '9': '\xAA', '!': '\xAB', '?': '\xAC', '。': '\xAD', 'ー': '\xAE', '・': '\xAF', '⋯': '\xB0', '『': '\xB1', '』': '\xB2', '「': '\xB3', '」': '\xB4', '♂': '\xB5', '♀': '\xB6', '円': '\xB7', '.': '\xB8', '×': '\xB9', '/': '\xBA', 'A': '\xBB', 'B': '\xBC', 'C': '\xBD', 'D': '\xBE', 'E': '\xBF', 'F': '\xC0', 'G': '\xC1', 'H': '\xC2', 'I': '\xC3', 'J': '\xC4', 'K': '\xC5', 'L': '\xC6', 'M': '\xC7', 'N': '\xC8', 'O': '\xC9', 'P': '\xCA', 'Q': '\xCB', 'R': '\xCC', 'S': '\xCD', 'T': '\xCE', 'U': '\xCF', 'V': '\xD0', 'W': '\xD1', 'X': '\xD2', 'Y': '\xD3', 'Z': '\xD4', 'a': '\xD5', 'b': '\xD6', 'c': '\xD7', 'd': '\xD8', 'e': '\xD9', 'f': '\xDA', 'g': '\xDB', 'h': '\xDC', 'i': '\xDD', 'j': '\xDE', 'k': '\xDF', 'l': '\xE0', 'm': '\xE1', 'n': '\xE2', 'o': '\xE3', 'p': '\xE4', 'q': '\xE5', 'r': '\xE6', 's': '\xE7', 't': '\xE8', 'u': '\xE9', 'v': '\xEA', 'w': '\xEB', 'x': '\xEC', 'y': '\xED', 'z': '\xEE', '▶': '\xEF', ':': '\xF0', 'Ä': '\xF1', 'Ö': '\xF2', 'Ü': '\xF3', 'ä': '\xF4', 'ö': '\xF5', 'ü': '\xF6', #'⬆': '\xF7', #'⬇': '\xF8', #'⬅': '\xF9', '\\l': '\xFA', '\\p': '\xFB', '\{FC}': '\xFC', '\\v1': '\xFD\x01', '\\v2': '\xFD\x02', '\\v3': '\xFD\x03', '\\n': '\xFE', '@': '\xFF', # characters changed for Western versions ' ': '\x00', 'À': '\x01', 'Á': '\x02', 'Â': '\x03', 'Ç': '\x04', 'È': '\x05', 'É': '\x06', 'Ê': '\x07', 'Ë': '\x08', 'Ì': '\x09', 'Î': '\x0B', 'Ï': '\x0C', 'Ò': '\x0D', 'Ó': '\x0E', 'Ô': '\x0F', 'Œ': '\x10', 'Ù': '\x11', 'Ú': '\x12', 'Û': '\x13', 'Ñ': '\x14', 'ß': '\x15', 'à': '\x16', 'á': '\x17', 'ç': '\x19', 'è': '\x1A', 'é': '\x1B', 'ê': '\x1C', 'ë': '\x1D', 'ì': '\x1E', 'î': '\x20', 'ï': '\x21', 'ò': '\x22', 'ó': '\x23', 'ô': '\x24', 'œ': '\x25', 'ù': '\x26', 'ú': '\x27', 'û': '\x28', 'ñ': '\x29', 'º': '\x2A', 'ª': '\x2B', '\{er}': '\x2C', '&': '\x2D', '+': '\x2E', '\{L.}': '\x34', # Italian '\{Lv}': '\x34', # English '\{Lv.}': '\x34', # German '\{N.}': '\x34', # French '\{Nv}': '\x34', # Spanish '=': '\x35', ';': '\x36', # European '¿': '\x51', '¡': '\x52', '\{PKMN}': '\x53\x54', '\{POKé}': '\x55\x56', '\{POKéBLOC}': '\x55\x56\x57\x58\x59', # French '\{POKéBLOCK}': '\x55\x56\x57\x58\x59', # English '\{POKéCUBO}': '\x55\x56\x57\x58\x59', # Spanish '\{POKéRIEGEL}': '\x55\x56\x57\x58\x59', # German 'Í': '\x5A', '%': '\x5B', '(': '\x5C', ')': '\x5D', '\{POKéMELLA}': '\x5E\x5F\x60\x61\x62', # Italian '\{POKéMELLE}': '\x5E\x5F\x60\x61\x63', # Italian 'â': '\x68', 'í': '\x6F', '⬆': '\x79', '⬇': '\x7A', '⬅': '\x7B', '➡': '\x7C', '\{e}': '\x84', # European '‹': '\x85', # European '›': '\x86', # European '\{re}': '\xA0', # European '0': '\xA1', '1': '\xA2', '2': '\xA3', '3': '\xA4', '4': '\xA5', '5': '\xA6', '6': '\xA7', '7': '\xA8', '8': '\xA9', '9': '\xAA', '!': '\xAB', '?': '\xAC', '.': '\xAD', '-': '\xAE', '…': '\xB0', '“': '\xB1', # English, Italian, Spanish '«': '\xB1', # French '„': '\xB1', # German '”': '\xB2', # English, Italian, Spanish '»': '\xB2', # French #'“': '\xB2', # German — clashes with English B1 '‘': '\xB3', '’': '\xB4', '$': '\xB7', ',': '\xB8', '/': '\xBA', 'A': '\xBB', 'B': '\xBC', 'C': '\xBD', 'D': '\xBE', 'E': '\xBF', 'F': '\xC0', 'G': '\xC1', 'H': '\xC2', 'I': '\xC3', 'J': '\xC4', 'K': '\xC5', 'L': '\xC6', 'M': '\xC7', 'N': '\xC8', 'O': '\xC9', 'P': '\xCA', 'Q': '\xCB', 'R': '\xCC', 'S': '\xCD', 'T': '\xCE', 'U': '\xCF', 'V': '\xD0', 'W': '\xD1', 'X': '\xD2', 'Y': '\xD3', 'Z': '\xD4', 'a': '\xD5', 'b': '\xD6', 'c': '\xD7', 'd': '\xD8', 'e': '\xD9', 'f': '\xDA', 'g': '\xDB', 'h': '\xDC', 'i': '\xDD', 'j': '\xDE', 'k': '\xDF', 'l': '\xE0', 'm': '\xE1', 'n': '\xE2', 'o': '\xE3', 'p': '\xE4', 'q': '\xE5', 'r': '\xE6', 's': '\xE7', 't': '\xE8', 'u': '\xE9', 'v': '\xEA', 'w': '\xEB', 'x': '\xEC', 'y': '\xED', 'z': '\xEE', ':': '\xF0', } asmProblemBytes = ['\x00', '\x09', '\x0A', '\x22'] def utf8ToRSText(t, region = ""): currentChars = chars if region == "DE": chars['“'] = '\xB2' characters = [] char = "" while len(t): if ord(t[0]) >= 0xF0: char += t[0:4] t = t[4:] elif ord(t[0]) >= 0xE0: char += t[0:3] t = t[3:] elif ord(t[0]) >= 0xC0: char += t[0:2] t = t[2:] else: char += t[0:1] t = t[1:] if char != "\\" and char != "\\v" and (char[0:2] != "\\{" or char[-1] == "}"): characters.append(char) char = "" result = "" for char in characters: result += chars[char] return result def asmQuote(t): result = "" quoted = False if t[0] in asmProblemBytes: result = '{0}'.format(ord(t[0])) else: result = '"' + t[0] quoted = True while len(t): if quoted and t[0] in asmProblemBytes: result += '",{0}'.format(ord(t[0])) quoted = False elif quoted: result += t[0] elif t[0] in asmProblemBytes: result += ',{0}'.format(ord(t[0])) quoted = False else: result += ',"' + t[0] quoted = True t = t[1:] if quoted: result += '"' return result