diff --git a/Makefile b/Makefile index df7dc4d94e..8e15f0867f 100644 --- a/Makefile +++ b/Makefile @@ -742,11 +742,17 @@ $(BUILD_DIR)/baserom/%.o: $(EXTRACTED_DIR)/baserom/% $(BUILD_DIR)/data/%.o: data/%.s $(CPP) $(CPPFLAGS) -Iinclude $< | $(AS) $(ASFLAGS) -o $@ -$(BUILD_DIR)/assets/text/%.enc.jpn.h: assets/text/%.h $(EXTRACTED_DIR)/text/%.h assets/text/charmap.txt - $(CPP) $(CPPFLAGS) -I$(EXTRACTED_DIR) $< | $(PYTHON) tools/msgenc.py --encoding jpn --charmap assets/text/charmap.txt - $@ +ifeq ($(PLATFORM),IQUE) + NES_CHARMAP := assets/text/charmap.chn.txt +else + NES_CHARMAP := assets/text/charmap.nes.txt +endif -$(BUILD_DIR)/assets/text/%.enc.nes.h: assets/text/%.h $(EXTRACTED_DIR)/text/%.h assets/text/charmap.txt - $(CPP) $(CPPFLAGS) -I$(EXTRACTED_DIR) $< | $(PYTHON) tools/msgenc.py --encoding nes --charmap assets/text/charmap.txt - $@ +$(BUILD_DIR)/assets/text/%.enc.nes.h: assets/text/%.h $(EXTRACTED_DIR)/text/%.h $(NES_CHARMAP) + $(CPP) $(CPPFLAGS) -I$(EXTRACTED_DIR) $< | $(PYTHON) tools/msgenc.py --encoding utf-8 --charmap $(NES_CHARMAP) - $@ + +$(BUILD_DIR)/assets/text/%.enc.jpn.h: assets/text/%.h $(EXTRACTED_DIR)/text/%.h assets/text/charmap.jpn.txt + $(CPP) $(CPPFLAGS) -I$(EXTRACTED_DIR) $< | $(PYTHON) tools/msgenc.py --encoding SHIFT-JIS --wchar --charmap assets/text/charmap.jpn.txt - $@ # Dependencies for files including message data headers # TODO remove when full header dependencies are used. diff --git a/assets/text/charmap.chn.txt b/assets/text/charmap.chn.txt new file mode 100644 index 0000000000..08d4d451df --- /dev/null +++ b/assets/text/charmap.chn.txt @@ -0,0 +1,1823 @@ +# Determines how certain text sequences should be encoded for the CHN text encoding. +{ + '\n' : 0x01, + + '[A]' : 0xAA9F, + '[B]' : 0xAAA0, + '[C]' : 0xAAA1, + '[L]' : 0xAAA2, + '[R]' : 0xAAA3, + '[Z]' : 0xAAA4, + '[C-Up]' : 0xAAA5, + '[C-Down]' : 0xAAA6, + '[C-Left]' : 0xAAA7, + '[C-Right]' : 0xAAA8, + '▼' : 0xAAA9, + '[Control-Pad]' : 0xAAAA, + + 'À' : 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, + + # Unfortunately the CN codepoint map does not correspond to any standard encoding, + # characters were added in the order they were needed in the text. The order is + # reproduced here. + '你' : 0xA08C, + '借' : 0xA08D, + '到' : 0xA08E, + '了' : 0xA08F, + '一' : 0xA090, + '颗' : 0xA091, + '口' : 0xA092, + '袋' : 0xA093, + '鸡' : 0xA094, + '蛋' : 0xA095, + '过' : 0xA096, + '夜' : 0xA097, + '后' : 0xA098, + '就' : 0xA099, + '会' : 0xA09A, + '孵' : 0xA09B, + '出' : 0xA09C, + '只' : 0xA09D, + ',' : 0xA09E, + '用' : 0xA09F, + '完' : 0xA0A0, + '别' : 0xA0A1, + '忘' : 0xA0A2, + '记' : 0xA0A3, + '把' : 0xA0A4, + '它' : 0xA0A5, + '还' : 0xA0A6, + '回' : 0xA0A7, + '去' : 0xA0A8, + '。' : 0xA0A9, + '归' : 0xA0AA, + '得' : 0xA0AB, + '克' : 0xA0AC, + '洛' : 0xA0AD, + '!' : 0xA0AE, + '与' : 0xA0AF, + '不' : 0xA0B0, + '同' : 0xA0B1, + '很' : 0xA0B2, + '少' : 0xA0B3, + '啼' : 0xA0B4, + '叫' : 0xA0B5, + '个' : 0xA0B6, + '奇' : 0xA0B7, + '异' : 0xA0B8, + '蘑' : 0xA0B9, + '菇' : 0xA0BA, + '新' : 0xA0BB, + '鲜' : 0xA0BC, + '的' : 0xA0BD, + '都' : 0xA0BE, + '容' : 0xA0BF, + '易' : 0xA0C0, + '变' : 0xA0C1, + '质' : 0xA0C2, + '快' : 0xA0C3, + '拿' : 0xA0C4, + '卡' : 0xA0C5, + '利' : 0xA0C6, + '科' : 0xA0C7, + '药' : 0xA0C8, + '店' : 0xA0C9, + '吧' : 0xA0CA, + '之' : 0xA0CB, + '知' : 0xA0CC, + '道' : 0xA0CD, + '这' : 0xA0CE, + '两' : 0xA0CF, + '人' : 0xA0D0, + '间' : 0xA0D1, + '发' : 0xA0D2, + '生' : 0xA0D3, + '什' : 0xA0D4, + '么' : 0xA0D5, + '事' : 0xA0D6, + '但' : 0xA0D7, + '带' : 0xA0D8, + '迷' : 0xA0D9, + '失' : 0xA0DA, + '森' : 0xA0DB, + '林' : 0xA0DC, + '物' : 0xA0DD, + '原' : 0xA0DE, + '主' : 0xA0DF, + '偷' : 0xA0E0, + '猎' : 0xA0E1, + '者' : 0xA0E2, + '锯' : 0xA0E3, + '定' : 0xA0E4, + '是' : 0xA0E5, + '那' : 0xA0E6, + '年' : 0xA0E7, + '轻' : 0xA0E8, + '留' : 0xA0E9, + '下' : 0xA0EA, + '炸' : 0xA0EB, + '弹' : 0xA0EC, + '枚' : 0xA0ED, + '卢' : 0xA0EE, + '比' : 0xA0EF, + '买' : 0xA0F0, + '德' : 0xA0F1, + '库' : 0xA0F2, + '子' : 0xA0F3, + '可' : 0xA0F4, + '以' : 0xA0F5, + '装' : 0xA0F6, + '弓' : 0xA0F7, + '换' : 0xA0F8, + '破' : 0xA0F9, + '损' : 0xA0FA, + '格' : 0xA0FB, + '雷' : 0xA0FC, + '剑' : 0xA0FD, + '大' : 0xA0FE, + '城' : 0xA0FF, + '修' : 0xA100, + '好' : 0xA101, + '交' : 0xA102, + '处' : 0xA103, + '方' : 0xA104, + '见' : 0xA105, + '卓' : 0xA106, + '拉' : 0xA107, + '王' : 0xA108, + '⋯' : 0xA109, # TODO this isn't quite the same width as everything else.. + '兑' : 0xA10A, + '券' : 0xA10B, + '急' : 0xA10C, + '切' : 0xA10D, + '地' : 0xA10E, + '希' : 0xA10F, + '望' : 0xA110, + '点' : 0xA111, + '铸' : 0xA112, + '卖' : 0xA113, + '掉' : 0xA114, + '巨' : 0xA115, + '刀' : 0xA116, + '铁' : 0xA117, + '匠' : 0xA118, + '师' : 0xA119, + '所' : 0xA11A, + '造' : 0xA11B, + '坚' : 0xA11C, + '摧' : 0xA11D, + '卷' : 0xA11E, + '眼' : 0xA11F, + '青' : 0xA120, + '蛙' : 0xA121, + '趁' : 0xA122, + '凉' : 0xA123, + '海' : 0xA124, + '鲁' : 0xA125, + '湖' : 0xA126, + '世' : 0xA127, + '上' : 0xA128, + '最' : 0xA129, + '水' : 0xA12A, + '在' : 0xA12B, + '前' : 0xA12C, + '送' : 0xA12D, + '蠃' : 0xA12E, + '啦' : 0xA12F, + '骷' : 0xA130, + '髅' : 0xA131, + '面' : 0xA132, + '具' : 0xA133, + '按' : 0xA134, + '戴' : 0xA135, + '试' : 0xA136, + '看' : 0xA137, + '着' : 0xA138, + '真' : 0xA139, + '像' : 0xA13A, + '怪' : 0xA13B, + '恐' : 0xA13C, + '怖' : 0xA13D, + '吓' : 0xA13E, + '基' : 0xA13F, + '顿' : 0xA140, + '受' : 0xA141, + '欢' : 0xA142, + '迎' : 0xA143, + '哦' : 0xA144, + '兔' : 0xA145, + '兜' : 0xA146, + '帽' : 0xA147, + '长' : 0xA148, + '耳' : 0xA149, + '朵' : 0xA14A, + '太' : 0xA14B, + '爱' : 0xA14C, + '让' : 0xA14D, + '头' : 0xA14E, + '起' : 0xA14F, + '来' : 0xA150, + '有' : 0xA151, + '女' : 0xA152, + '孩' : 0xA153, + '?' : 0xA154, + '理' : 0xA155, + '更' : 0xA156, + '多' : 0xA157, + '我' : 0xA158, + '们' : 0xA159, + '娱' : 0xA15A, + '乐' : 0xA15B, + '中' : 0xA15C, + '心' : 0xA15D, + ':' : 0xA15E, + '保' : 0xA15F, + '龄' : 0xA160, + '球' : 0xA161, + '场' : 0xA162, + '想' : 0xA163, + '奖' : 0xA164, + '品' : 0xA165, + '吗' : 0xA166, + '秘' : 0xA167, + '密' : 0xA168, + '付' : 0xA169, + '钱' : 0xA16A, + '才' : 0xA16B, + '告' : 0xA16C, + '诉' : 0xA16D, + '玩' : 0xA16E, + '次' : 0xA16F, + '要' : 0xA170, + '瞄' : 0xA171, + '准' : 0xA172, + '洞' : 0xA173, + '放' : 0xA174, + '鼠' : 0xA175, + '十' : 0xA176, + '机' : 0xA177, + '预' : 0xA178, + '备' : 0xA179, + '开' : 0xA17A, + '始' : 0xA17B, + '再' : 0xA17C, + '差' : 0xA17D, + '(' : 0xA17E, + ')' : 0xA17F, + '捡' : 0xA180, + '扔' : 0xA181, + '没' : 0xA182, + '能' : 0xA183, + '恢' : 0xA184, + '复' : 0xA185, + '正' : 0xA186, + '常' : 0xA187, + '请' : 0xA188, + '救' : 0xA189, + '其' : 0xA18A, + '他' : 0xA18B, + '兄' : 0xA18C, + '弟' : 0xA18D, + '给' : 0xA18E, + '励' : 0xA18F, + '诅' : 0xA190, + '咒' : 0xA191, + '解' : 0xA192, + '除' : 0xA193, + '谢' : 0xA194, + '报' : 0xA195, + '呀' : 0xA196, + '啊' : 0xA197, + '被' : 0xA198, + '小' : 0xA199, + '消' : 0xA19A, + '灭' : 0xA19B, + '蜘' : 0xA19C, + '蛛' : 0xA19D, + '已' : 0xA19E, + '经' : 0xA19F, + '减' : 0xA1A0, + '弱' : 0xA1A1, + '富' : 0xA1A2, + '办' : 0xA1A3, + '法' : 0xA1A4, + '越' : 0xA1A5, + '些' : 0xA1A6, + '验' : 0xA1A7, + '帮' : 0xA1A8, + '助' : 0xA1A9, + '寻' : 0xA1AA, + '找' : 0xA1AB, + '首' : 0xA1AC, + '先' : 0xA1AD, + '晚' : 0xA1AE, + '行' : 0xA1AF, + '动' : 0xA1B0, + '第' : 0xA1B1, + '二' : 0xA1B2, + '住' : 0xA1B3, + '喜' : 0xA1B4, + '松' : 0xA1B5, + '柔' : 0xA1B6, + '土' : 0xA1B7, + '壤' : 0xA1B8, + '仔' : 0xA1B9, + '细' : 0xA1BA, + '观' : 0xA1BB, + '察' : 0xA1BC, + '周' : 0xA1BD, + '围' : 0xA1BE, + '全' : 0xA1BF, + '靠' : 0xA1C0, + '成' : 0xA1C1, + '样' : 0xA1C2, + '因' : 0xA1C3, + '为' : 0xA1C4, + '种' : 0xA1C5, + '界' : 0xA1C6, + '每' : 0xA1C7, + '现' : 0xA1C8, + '徽' : 0xA1C9, + '章' : 0xA1CA, + '收' : 0xA1CB, + '集' : 0xA1CC, + '作' : 0xA1CD, + '战' : 0xA1CE, + '绩' : 0xA1CF, + '证' : 0xA1D0, + '明' : 0xA1D1, + '征' : 0xA1D2, + '途' : 0xA1D3, + '状' : 0xA1D4, + '态' : 0xA1D5, + '窗' : 0xA1D6, + '此' : 0xA1D7, + '图' : 0xA1D8, + '标' : 0xA1D9, + '旁' : 0xA1DA, + '边' : 0xA1DB, + '数' : 0xA1DC, + '字' : 0xA1DD, + '显' : 0xA1DE, + '示' : 0xA1DF, + '目' : 0xA1E0, + '量' : 0xA1E1, + '如' : 0xA1E2, + '果' : 0xA1E3, + '区' : 0xA1E4, + '名' : 0xA1E5, + '说' : 0xA1E6, + '里' : 0xA1E7, + '家' : 0xA1E8, + '族' : 0xA1E9, + '身' : 0xA1EA, + '感' : 0xA1EB, + '止' : 0xA1EC, + '错' : 0xA1ED, + '担' : 0xA1EE, + '需' : 0xA1EF, + '箭' : 0xA1F0, + '关' : 0xA1F1, + '系' : 0xA1F2, + '强' : 0xA1F3, + '迫' : 0xA1F4, + '游' : 0xA1F5, + '戏' : 0xA1F6, + '著' : 0xA1F7, + '射' : 0xA1F8, + '击' : 0xA1F9, + '从' : 0xA1FA, + '台' : 0xA1FB, + '够' : 0xA1FC, + '五' : 0xA1FD, + '支' : 0xA1FE, + '武' : 0xA1FF, + '器' : 0xA200, + '争' : 0xA201, + '取' : 0xA202, + '祝' : 0xA203, + '运' : 0xA204, + '堆' : 0xA205, + '软' : 0xA206, + '泥' : 0xA207, + '精' : 0xA208, + '灵' : 0xA209, + '选' : 0xA20A, + '择' : 0xA20B, + '或' : 0xA20C, + '键' : 0xA20D, + '并' : 0xA20E, + '立' : 0xA20F, + '即' : 0xA210, + '时' : 0xA211, + '举' : 0xA212, + '置' : 0xA213, + '跑' : 0xA214, + '投' : 0xA215, + '掷' : 0xA216, + '疑' : 0xA217, + '型' : 0xA218, + '甚' : 0xA219, + '至' : 0xA21A, + '飞' : 0xA21B, + '檐' : 0xA21C, + '走' : 0xA21D, + '壁' : 0xA21E, + '闪' : 0xA21F, + '光' : 0xA220, + '使' : 0xA221, + '敌' : 0xA222, + '眩' : 0xA223, + '晕' : 0xA224, + '旋' : 0xA225, + '镖' : 0xA226, + '攻' : 0xA227, + '远' : 0xA228, + '短' : 0xA229, + '钩' : 0xA22A, + '条' : 0xA22B, + '力' : 0xA22C, + '链' : 0xA22D, + '勾' : 0xA22E, + '体' : 0xA22F, + '获' : 0xA230, + '自' : 0xA231, + '己' : 0xA232, + '根' : 0xA233, + '木' : 0xA234, + '棒' : 0xA235, + '挥' : 0xA236, + '舞' : 0xA237, + '站' : 0xA238, + '携' : 0xA239, + '浪' : 0xA23A, + '费' : 0xA23B, + '锤' : 0xA23C, + '砸' : 0xA23D, + '碎' : 0xA23E, + '废' : 0xA23F, + '沉' : 0xA240, + '双' : 0xA241, + '手' : 0xA242, + '镜' : 0xA243, + '神' : 0xA244, + '井' : 0xA245, + '外' : 0xA246, + '也' : 0xA247, + '耗' : 0xA248, + '魔' : 0xA249, + '停' : 0xA24A, + '笛' : 0xA24B, + '塞' : 0xA24C, + '尔' : 0xA24D, + '达' : 0xA24E, + '宝' : 0xA24F, + '散' : 0xA250, + '芒' : 0xA251, + '施' : 0xA252, + '展' : 0xA253, + '花' : 0xA254, + '风' : 0xA255, + '返' : 0xA256, + '避' : 0xA257, + '退' : 0xA258, + '火' : 0xA259, + '勋' : 0xA25A, + '圣' : 0xA25B, + '尼' : 0xA25C, + '亚' : 0xA25D, + '觉' : 0xA25E, + '醒' : 0xA25F, + '将' : 0xA260, + '赐' : 0xA261, + '予' : 0xA262, + '茹' : 0xA263, + '特' : 0xA264, + '她' : 0xA265, + '萨' : 0xA266, + '莉' : 0xA267, + '娅' : 0xA268, + '魂' : 0xA269, + '纳' : 0xA26A, + '波' : 0xA26B, + '若' : 0xA26C, + '暗' : 0xA26D, + '英' : 0xA26E, + '帕' : 0xA26F, + '空' : 0xA270, + '瓶' : 0xA271, + '红' : 0xA272, + '色' : 0xA273, + '命' : 0xA274, + '份' : 0xA275, + '绿' : 0xA276, + '蓝' : 0xA277, + '和' : 0xA278, + '抓' : 0xA279, + '伙' : 0xA27A, + '伴' : 0xA27B, + '活' : 0xA27C, + '随' : 0xA27D, + '呼' : 0xA27E, + '唤' : 0xA27F, + '鱼' : 0xA280, + '非' : 0xA281, + '美' : 0xA282, + '豆' : 0xA283, + '园' : 0xA284, + '合' : 0xA285, + '适' : 0xA286, + '趣' : 0xA287, + '对' : 0xA288, + '纪' : 0xA289, + '念' : 0xA28A, + '演' : 0xA28B, + '奏' : 0xA28C, + '各' : 0xA28D, + '律' : 0xA28E, + '重' : 0xA28F, + '握' : 0xA290, + '盾' : 0xA291, + '蹲' : 0xA292, + '防' : 0xA293, + '御' : 0xA294, + '移' : 0xA295, + '表' : 0xA296, + '滑' : 0xA297, + '反' : 0xA298, + '升' : 0xA299, + '级' : 0xA29A, + '延' : 0xA29B, + '伸' : 0xA29C, + '距' : 0xA29D, + '离' : 0xA29E, + '倍' : 0xA29F, + '套' : 0xA2A0, + '件' : 0xA2A1, + '隔' : 0xA2A2, + '热' : 0xA2A3, + '穿' : 0xA2A4, + '潜' : 0xA2A5, + '服' : 0xA2A6, + '淹' : 0xA2A7, + '死' : 0xA2A8, + '坛' : 0xA2A9, + '充' : 0xA2AA, + '满' : 0xA2AB, + '靴' : 0xA2AC, + '浮' : 0xA2AD, + '悬' : 0xA2AE, + '缺' : 0xA2AF, + '摩' : 0xA2B0, + '擦' : 0xA2B1, + '段' : 0xA2B2, + '勇' : 0xA2B3, + '敢' : 0xA2B4, + '相' : 0xA2B5, + '信' : 0xA2B6, + '超' : 0xA2B7, + '东' : 0xA2B8, + '哥' : 0xA2B9, + '猛' : 0xA2BA, + '龙' : 0xA2BB, + '胃' : 0xA2BC, + '做' : 0xA2BD, + '幸' : 0xA2BE, + '银' : 0xA2BF, + '臂' : 0xA2C0, + '答' : 0xA2C1, + '应' : 0xA2C2, + '遵' : 0xA2C3, + '守' : 0xA2C4, + '诺' : 0xA2C5, + '言' : 0xA2C6, + '金' : 0xA2C7, + '焰' : 0xA2C8, + '入' : 0xA2C9, + '冷' : 0xA2CA, + '艳' : 0xA2CB, + '包' : 0xA2CC, + '钥' : 0xA2CD, + '匙' : 0xA2CE, + '打' : 0xA2CF, + '锁' : 0xA2D0, + '门' : 0xA2D1, + '限' : 0xA2D2, + '于' : 0xA2D3, + '宫' : 0xA2D4, + '内' : 0xA2D5, + '老' : 0xA2D6, + '却' : 0xA2D7, + '驱' : 0xA2D8, + '喝' : 0xA2D9, + '进' : 0xA2DA, + '然' : 0xA2DB, + '域' : 0xA2DC, + '烁' : 0xA2DD, + '当' : 0xA2DE, + '位' : 0xA2DF, + '拨' : 0xA2E0, + '查' : 0xA2E1, + '某' : 0xA2E2, + '层' : 0xA2E3, + '罗' : 0xA2E4, + '盘' : 0xA2E5, + '隐' : 0xA2E6, + '藏' : 0xA2E7, + '振' : 0xA2E8, + '石' : 0xA2E9, + '继' : 0xA2EA, + '续' : 0xA2EB, + '努' : 0xA2EC, + '哇' : 0xA2ED, + '公' : 0xA2EE, + '签' : 0xA2EF, + '临' : 0xA2F0, + '西' : 0xA2F1, + '便' : 0xA2F2, + '箱' : 0xA2F3, + '意' : 0xA2F4, + '惊' : 0xA2F5, + '话' : 0xA2F6, + '左' : 0xA2F7, + '右' : 0xA2F8, + '赌' : 0xA2F9, + '徒' : 0xA2FA, + '值' : 0xA2FB, + '威' : 0xA2FC, + '增' : 0xA2FD, + '冰' : 0xA2FE, + '结' : 0xA2FF, + '授' : 0xA300, + '艰' : 0xA301, + '苦' : 0xA302, + '训' : 0xA303, + '练' : 0xA304, + '该' : 0xA305, + '拥' : 0xA306, + '而' : 0xA307, + '荣' : 0xA308, + '义' : 0xA309, + '邪' : 0xA30A, + '恶' : 0xA30B, + '学' : 0xA30C, + '步' : 0xA30D, + '曲' : 0xA30E, + '烈' : 0xA30F, + '安' : 0xA310, + '影' : 0xA311, + '梦' : 0xA312, + '幻' : 0xA313, + '镯' : 0xA314, + '拔' : 0xA315, + '虫' : 0xA316, + '员' : 0xA317, + '张' : 0xA318, + '据' : 0xA319, + '翡' : 0xA31A, + '翠' : 0xA31B, + '伟' : 0xA31C, + '树' : 0xA31D, + '托' : 0xA31E, + '代' : 0xA31F, + '传' : 0xA320, + '碧' : 0xA321, + '商' : 0xA322, + '讲' : 0xA323, + '妖' : 0xA324, + '婆' : 0xA325, + '堡' : 0xA326, + '男' : 0xA327, + '情' : 0xA328, + '隆' : 0xA329, + '牛' : 0xA32A, + '奶' : 0xA32B, + '营' : 0xA32C, + '养' : 0xA32D, + '排' : 0xA32E, + '销' : 0xA32F, + '售' : 0xA330, + '榜' : 0xA331, + '朋' : 0xA332, + '友' : 0xA333, + '搬' : 0xA334, + '日' : 0xA335, + '客' : 0xA336, + '碰' : 0xA337, + '烧' : 0xA338, + '毁' : 0xA339, + '折' : 0xA33A, + '断' : 0xA33B, + '斗' : 0xA33C, + '习' : 0xA33D, + '骑' : 0xA33E, + '士' : 0xA33F, + '又' : 0xA340, + '承' : 0xA341, + '制' : 0xA342, + '尺' : 0xA343, + '码' : 0xA344, + '护' : 0xA345, + '炙' : 0xA346, + '侵' : 0xA347, + '害' : 0xA348, + '底' : 0xA349, + '溺' : 0xA34A, + '掌' : 0xA34B, + '丁' : 0xA34C, + '妮' : 0xA34D, + '席' : 0xA34E, + '性' : 0xA34F, + '危' : 0xA350, + '往' : 0xA351, + '创' : 0xA352, + '建' : 0xA353, + '娜' : 0xA354, + '产' : 0xA355, + '罩' : 0xA356, + '刚' : 0xA357, + '清' : 0xA358, + '舒' : 0xA359, + '爽' : 0xA35A, + '般' : 0xA35B, + '暂' : 0xA35C, + '脱' : 0xA35D, + '参' : 0xA35E, + '加' : 0xA35F, + '嗯' : 0xA360, + '顾' : 0xA361, + '片' : 0xA362, + '四' : 0xA363, + '整' : 0xA364, + '三' : 0xA365, + '房' : 0xA366, + '干' : 0xA367, + '稍' : 0xA368, + '候' : 0xA369, + '赛' : 0xA36A, + '鳞' : 0xA36B, + '跳' : 0xA36C, + '深' : 0xA36D, + '歌' : 0xA36E, + '伊' : 0xA36F, + '阳' : 0xA370, + '摇' : 0xA371, + '篮' : 0xA372, + '雪' : 0xA373, + '壮' : 0xA374, + '管' : 0xA375, + '术' : 0xA376, + '接' : 0xA377, + '智' : 0xA378, + '慧' : 0xA379, + '气' : 0xA37A, + '疲' : 0xA37B, + '惫' : 0xA37C, + '治' : 0xA37D, + '疗' : 0xA37E, + '伤' : 0xA37F, + '且' : 0xA380, + '硬' : 0xA381, + '技' : 0xA382, + '斩' : 0xA383, + '积' : 0xA384, + '蓄' : 0xA385, + '直' : 0xA386, + '释' : 0xA387, + '转' : 0xA388, + '效' : 0xA389, + '谈' : 0xA38A, + '听' : 0xA38B, + '束' : 0xA38C, + '刻' : 0xA38D, + '注' : 0xA38E, + '嗨' : 0xA38F, + '皇' : 0xA390, + '探' : 0xA391, + '儿' : 0xA392, + '附' : 0xA393, + '近' : 0xA394, + '半' : 0xA395, + '思' : 0xA396, + '仅' : 0xA397, + '燃' : 0xA398, + '紫' : 0xA399, + '价' : 0xA39A, + '高' : 0xA39B, + '百' : 0xA39C, + '索' : 0xA39D, + '何' : 0xA39E, + '输' : 0xA39F, + '虽' : 0xA3A0, + '惜' : 0xA3A1, + '幽' : 0xA3A2, + '妙' : 0xA3A3, + '愿' : 0xA3A4, + '勉' : 0xA3A5, + '网' : 0xA3A6, + '墙' : 0xA3A7, + '布' : 0xA3A8, + '藤' : 0xA3A9, + '蔓' : 0xA3AA, + '平' : 0xA3AB, + '爬' : 0xA3AC, + '屏' : 0xA3AD, + '幕' : 0xA3AE, + '顶' : 0xA3AF, + '端' : 0xA3B0, + '挂' : 0xA3B1, + '旧' : 0xA3B2, + '梯' : 0xA3B3, + '嘿' : 0xA3B4, + '饰' : 0xA3B5, + '熄' : 0xA3B6, + '久' : 0xA3B7, + '通' : 0xA3B8, + '狭' : 0xA3B9, + '路' : 0xA3BA, + '慢' : 0xA3BB, + '躲' : 0xA3BC, + '调' : 0xA3BD, + '视' : 0xA3BE, + '角' : 0xA3BF, + '弯' : 0xA3C0, + '旦' : 0xA3C1, + '侧' : 0xA3C2, + '落' : 0xA3C3, + '块' : 0xA3C4, + '推' : 0xA3C5, + '向' : 0xA3C6, + '兴' : 0xA3C7, + '引' : 0xA3C8, + '爆' : 0xA3C9, + '呢' : 0xA3CA, + '山' : 0xA3CB, + '坑' : 0xA3CC, + '楼' : 0xA3CD, + '绝' : 0xA3CE, + '总' : 0xA3CF, + '巧' : 0xA3D0, + '脸' : 0xA3D1, + '私' : 0xA3D2, + '语' : 0xA3D3, + '足' : 0xA3D4, + '导' : 0xA3D5, + '写' : 0xA3D6, + '险' : 0xA3D7, + '雕' : 0xA3D8, + '流' : 0xA3D9, + '粘' : 0xA3DA, + '浑' : 0xA3DB, + '电' : 0xA3DC, + '尾' : 0xA3DD, + '巴' : 0xA3DE, + '几' : 0xA3DF, + '瞧' : 0xA3E0, + '旗' : 0xA3E1, + '哪' : 0xA3E2, + '召' : 0xA3E3, + '跟' : 0xA3E4, + '拜' : 0xA3E5, + '访' : 0xA3E6, + '牧' : 0xA3E7, + '爸' : 0xA3E8, + '拯' : 0xA3E9, + '窟' : 0xA3EA, + '卜' : 0xA3EB, + '肚' : 0xA3EC, + '白' : 0xA3ED, + '马' : 0xA3EE, + '丢' : 0xA3EF, + '河' : 0xA3F0, + '殿' : 0xA3F1, + '村' : 0xA3F2, + '云' : 0xA3F3, + '吹' : 0xA3F4, + '寒' : 0xA3F5, + '庄' : 0xA3F6, + '谁' : 0xA3F7, + '教' : 0xA3F8, + '沙' : 0xA3F9, + '漠' : 0xA3FA, + '盖' : 0xA3FB, + '侬' : 0xA3FC, + '夫' : 0xA3FD, + '等' : 0xA3FE, + '介' : 0xA3FF, + '联' : 0xA400, + '声' : 0xA401, + '嘻' : 0xA402, + '曾' : 0xA403, + '领' : 0xA404, + '统' : 0xA405, + '疆' : 0xA406, + '怕' : 0xA407, + '鸟' : 0xA408, + '黑' : 0xA409, + '睛' : 0xA40A, + '暴' : 0xA40B, + '雨' : 0xA40C, + '息' : 0xA40D, + '初' : 0xA40E, + '六' : 0xA40F, + '聚' : 0xA410, + '封' : 0xA411, + '印' : 0xA412, + '七' : 0xA413, + '认' : 0xA414, + '识' : 0xA415, + '必' : 0xA416, + '须' : 0xA417, + '未' : 0xA418, + '梭' : 0xA419, + '另' : 0xA41A, + '渡' : 0xA41B, + '船' : 0xA41C, + '乘' : 0xA41D, + '艘' : 0xA41E, + '咯' : 0xA41F, + '扇' : 0xA420, + '许' : 0xA421, + '鬼' : 0xA422, + '板' : 0xA423, + '画' : 0xA424, + '廊' : 0xA425, + '扭' : 0xA426, + '天' : 0xA427, + '味' : 0xA428, + '冻' : 0xA429, + '音' : 0xA42A, + '座' : 0xA42B, + '锈' : 0xA42C, + '漩' : 0xA42D, + '涡' : 0xA42E, + '吞' : 0xA42F, + '嘛' : 0xA430, + '牢' : 0xA431, + '固' : 0xA432, + '殊' : 0xA433, + '静' : 0xA434, + '墓' : 0xA435, + '培' : 0xA436, + '睡' : 0xA437, + '掘' : 0xA438, + '阅' : 0xA439, + '读' : 0xA43A, + '式' : 0xA43B, + '租' : 0xA43C, + '货' : 0xA43D, + '款' : 0xA43E, + '仍' : 0xA43F, + ';' : 0xA440, + '载' : 0xA441, + '贪' : 0xA442, + '婪' : 0xA443, + '仇' : 0xA444, + '恨' : 0xA445, + '血' : 0xA446, + '腥' : 0xA447, + '历' : 0xA448, + '史' : 0xA449, + '诡' : 0xA44A, + '计' : 0xA44B, + '谜' : 0xA44C, + '题' : 0xA44D, + '亡' : 0xA44E, + '闭' : 0xA44F, + '今' : 0xA450, + '业' : 0xA451, + '早' : 0xA452, + '招' : 0xA453, + '聘' : 0xA454, + '兼' : 0xA455, + '职' : 0xA456, + '杂' : 0xA457, + '指' : 0xA458, + '启' : 0xA459, + '遗' : 0xA45A, + '极' : 0xA45B, + '亮' : 0xA45C, + '照' : 0xA45D, + '闯' : 0xA45E, + '穴' : 0xA45F, + '伏' : 0xA460, + '阻' : 0xA461, + '拦' : 0xA462, + '朝' : 0xA463, + '囚' : 0xA464, + '室' : 0xA465, + '贝' : 0xA466, + '泊' : 0xA467, + '泉' : 0xA468, + '黎' : 0xA469, + '童' : 0xA46A, + '纯' : 0xA46B, + '洁' : 0xA46C, + '翻' : 0xA46D, + '嘴' : 0xA46E, + '陷' : 0xA46F, + '野' : 0xA470, + '研' : 0xA471, + '究' : 0xA472, + '考' : 0xA473, + '坏' : 0xA474, + '竟' : 0xA475, + '坐' : 0xA476, + '玛' : 0xA477, + '录' : 0xA478, + '钓' : 0xA479, + '磅' : 0xA47A, + '分' : 0xA47B, + '纹' : 0xA47C, + '誓' : 0xA47D, + '忠' : 0xA47E, + '哈' : 0xA47F, + '眠' : 0xA480, + '瀑' : 0xA481, + '国' : 0xA482, + '务' : 0xA483, + '盯' : 0xA484, + '毯' : 0xA485, + '踩' : 0xA486, + '资' : 0xA487, + '瞎' : 0xA488, + '难' : 0xA489, + '倒' : 0xA48A, + '阱' : 0xA48B, + '塘' : 0xA48C, + '屈' : 0xA48D, + '镇' : 0xA48E, + '径' : 0xA48F, + '窄' : 0xA490, + '慌' : 0xA491, + '允' : 0xA492, + '禁' : 0xA493, + '激' : 0xA494, + '颁' : 0xA495, + '喷' : 0xA496, + '扰' : 0xA497, + '砍' : 0xA498, + '持' : 0xA499, + '草' : 0xA49A, + '泰' : 0xA49B, + '沿' : 0xA49C, + '实' : 0xA49D, + '峡' : 0xA49E, + '谷' : 0xA49F, + '册' : 0xA4A0, + '追' : 0xA4A1, + '赶' : 0xA4A2, + '市' : 0xA4A3, + '蜃' : 0xA4A4, + '崖' : 0xA4A5, + '灼' : 0xA4A6, + '宣' : 0xA4A7, + '疯' : 0xA4A8, + '狂' : 0xA4A9, + '滚' : 0xA4AA, + '伞' : 0xA4AB, + '脚' : 0xA4AC, + '共' : 0xA4AD, + '部' : 0xA4AE, + '免' : 0xA4AF, + '规' : 0xA4B0, + '递' : 0xA4B1, + '登' : 0xA4B2, + '补' : 0xA4B3, + '肉' : 0xA4B4, + '歉' : 0xA4B5, + '刺' : 0xA4B6, + '杀' : 0xA4B7, + '节' : 0xA4B8, + '横' : 0xA4B9, + '纵' : 0xA4BA, + '礼' : 0xA4BB, + '貌' : 0xA4BC, + '米' : 0xA4BD, + '无' : 0xA4BE, + '孪' : 0xA4BF, + '姐' : 0xA4C0, + '妹' : 0xA4C1, + '改' : 0xA4C2, + '池' : 0xA4C3, + '胆' : 0xA4C4, + '跃' : 0xA4C5, + '任' : 0xA4C6, + '句' : 0xA4C7, + '线' : 0xA4C8, + '范' : 0xA4C9, + '逃' : 0xA4CA, + '期' : 0xA4CB, + '待' : 0xA4CC, + '丽' : 0xA4CD, + '问' : 0xA4CE, + '闲' : 0xA4CF, + '泳' : 0xA4D0, + '连' : 0xA4D1, + '北' : 0xA4D2, + '棵' : 0xA4D3, + '锐' : 0xA4D4, + '虑' : 0xA4D5, + '挤' : 0xA4D6, + '障' : 0xA4D7, + '碍' : 0xA4D8, + '盔' : 0xA4D9, + '甲' : 0xA4DA, + '假' : 0xA4DB, + '设' : 0xA4DC, + '温' : 0xA4DD, + '际' : 0xA4DE, + '顽' : 0xA4DF, + '皮' : 0xA4E0, + '姆' : 0xA4E1, + '违' : 0xA4E2, + '盗' : 0xA4E3, + '贼' : 0xA4E4, + '蝴' : 0xA4E5, + '蝶' : 0xA4E6, + '崇' : 0xA4E7, + '象' : 0xA4E8, + '猫' : 0xA4E9, + '鹰' : 0xA4EA, + '凯' : 0xA4EB, + '普' : 0xA4EC, + '・' : 0xA4ED, + '博' : 0xA4EE, + '古' : 0xA4EF, + '化' : 0xA4F0, + '笨' : 0xA4F1, + '朗' : 0xA4F2, + '匹' : 0xA4F3, + '雄' : 0xA4F4, + '赚' : 0xA4F5, + '寄' : 0xA4F6, + '卵' : 0xA4F7, + '幼' : 0xA4F8, + '突' : 0xA4F9, + '袭' : 0xA4FA, + '腹' : 0xA4FB, + '绦' : 0xA4FC, + '食' : 0xA4FD, + '笔' : 0xA4FE, + '竖' : 0xA4FF, + '枯' : 0xA500, + '矮' : 0xA501, + '丛' : 0xA502, + '吃' : 0xA503, + '震' : 0xA504, + '撼' : 0xA505, + '吸' : 0xA506, + '败' : 0xA507, + '蜥' : 0xA508, + '蜴' : 0xA509, + '蝙' : 0xA50A, + '蝠' : 0xA50B, + '否' : 0xA50C, + '则' : 0xA50D, + '阿' : 0xA50E, + '莫' : 0xA50F, + '斯' : 0xA510, + '母' : 0xA511, + '绕' : 0xA512, + '触' : 0xA513, + '傻' : 0xA514, + '遭' : 0xA515, + '汀' : 0xA516, + '幅' : 0xA517, + '敬' : 0xA518, + '诱' : 0xA519, + '泡' : 0xA51A, + '挡' : 0xA51B, + '沃' : 0xA51C, + '衣' : 0xA51D, + '炬' : 0xA51E, + '黏' : 0xA51F, + '背' : 0xA520, + '抵' : 0xA521, + '权' : 0xA522, + '核' : 0xA523, + '挑' : 0xA524, + '壳' : 0xA525, + '肌' : 0xA526, + '缩' : 0xA527, + '邦' : 0xA528, + '苏' : 0xA529, + '透' : 0xA52A, + '僵' : 0xA52B, + '尸' : 0xA52C, + '麻' : 0xA52D, + '痹' : 0xA52E, + '咬' : 0xA52F, + '吉' : 0xA530, + '乃' : 0xA531, + '穷' : 0xA532, + '尽' : 0xA533, + '裂' : 0xA534, + '拢' : 0xA535, + '娃' : 0xA536, + '傀' : 0xA537, + '儡' : 0xA538, + '亲' : 0xA539, + '巫' : 0xA53A, + '低' : 0xA53B, + '骨' : 0xA53C, + '斧' : 0xA53D, + '漏' : 0xA53E, + '莱' : 0xA53F, + '彼' : 0xA540, + '塔' : 0xA541, + '扫' : 0xA542, + '描' : 0xA543, + '烟' : 0xA544, + '蛇' : 0xA545, + '弗' : 0xA546, + '扎' : 0xA547, + '挺' : 0xA548, + '八' : 0xA549, + '爪' : 0xA54A, + '迪' : 0xA54B, + '困' : 0xA54C, + '陆' : 0xA54D, + '嗜' : 0xA54E, + '仙' : 0xA54F, + '狼' : 0xA550, + '懈' : 0xA551, + '贩' : 0xA552, + '麦' : 0xA553, + '判' : 0xA554, + '乔' : 0xA555, + '绽' : 0xA556, + '速' : 0xA557, + '嗄' : 0xA558, + '羞' : 0xA559, + '永' : 0xA55A, + '稻' : 0xA55B, + '终' : 0xA55C, + '薇' : 0xA55D, + '呵' : 0xA55E, + '父' : 0xA55F, + '程' : 0xA560, + '工' : 0xA561, + '存' : 0xA562, + '氛' : 0xA563, + '笼' : 0xA564, + '令' : 0xA565, + '敏' : 0xA566, + '项' : 0xA567, + '欧' : 0xA568, + '谅' : 0xA569, + '众' : 0xA56A, + '悍' : 0xA56B, + '怎' : 0xA56C, + '亏' : 0xA56D, + '掏' : 0xA56E, + '毕' : 0xA56F, + '缓' : 0xA570, + '冲' : 0xA571, + '酷' : 0xA572, + '俯' : 0xA573, + '瞰' : 0xA574, + '哼' : 0xA575, + '蚀' : 0xA576, + '功' : 0xA577, + '糟' : 0xA578, + '呸' : 0xA579, + '黄' : 0xA57A, + '类' : 0xA57B, + '篇' : 0xA57C, + '论' : 0xA57D, + '控' : 0xA57E, + '括' : 0xA57F, + '冒' : 0xA580, + '度' : 0xA581, + '检' : 0xA582, + '单' : 0xA583, + '懂' : 0xA584, + '屋' : 0xA585, + '户' : 0xA586, + '致' : 0xA587, + '腾' : 0xA588, + '模' : 0xA589, + '嗒' : 0xA58A, + '咔' : 0xA58B, + '咋' : 0xA58C, + '萎' : 0xA58D, + '紧' : 0xA58E, + '决' : 0xA58F, + '呆' : 0xA590, + '闷' : 0xA591, + '畏' : 0xA592, + '骗' : 0xA593, + '苗' : 0xA594, + '茁' : 0xA595, + '算' : 0xA596, + '猜' : 0xA597, + '残' : 0xA598, + '妇' : 0xA599, + '婴' : 0xA59A, + '蔽' : 0xA59B, + '唯' : 0xA59C, + '响' : 0xA59D, + '抚' : 0xA59E, + '吵' : 0xA59F, + '境' : 0xA5A0, + '隙' : 0xA5A1, + '逝' : 0xA5A2, + '忆' : 0xA5A3, + '喂' : 0xA5A4, + '辈' : 0xA5A5, + '肩' : 0xA5A6, + '洋' : 0xA5A7, + '溢' : 0xA5A8, + '确' : 0xA5A9, + '迹' : 0xA5AA, + '凝' : 0xA5AB, + '髓' : 0xA5AC, + '混' : 0xA5AD, + '沌' : 0xA5AE, + '降' : 0xA5AF, + '健' : 0xA5B0, + '耕' : 0xA5B1, + '耘' : 0xA5B2, + '星' : 0xA5B3, + '倾' : 0xA5B4, + '沛' : 0xA5B5, + '础' : 0xA5B6, + '堂' : 0xA5B7, + '万' : 0xA5B8, + '宗' : 0xA5B9, + '源' : 0xA5BA, + '本' : 0xA5BB, + '替' : 0xA5BC, + '缝' : 0xA5BD, + '惩' : 0xA5BE, + '罚' : 0xA5BF, + '遇' : 0xA5C0, + '懒' : 0xA5C1, + '惰' : 0xA5C2, + '衷' : 0xA5C3, + '势' : 0xA5C4, + '维' : 0xA5C5, + '秩' : 0xA5C6, + '序' : 0xA5C7, + '抗' : 0xA5C8, + '衡' : 0xA5C9, + '旅' : 0xA5CA, + '顺' : 0xA5CB, + '叛' : 0xA5CC, + '愤' : 0xA5CD, + '辽' : 0xA5CE, + '阔' : 0xA5CF, + '茂' : 0xA5D0, + '称' : 0xA5D1, + '讨' : 0xA5D2, + '厌' : 0xA5D3, + '靶' : 0xA5D4, + '饲' : 0xA5D5, + '求' : 0xA5D6, + '材' : 0xA5D7, + '耶' : 0xA5D8, + '谊' : 0xA5D9, + '噓' : 0xA5DA, + '遍' : 0xA5DB, + '谱' : 0xA5DC, + '议' : 0xA5DD, + '吼' : 0xA5DE, + '薄' : 0xA5DF, + '饶' : 0xA5E0, + '稽' : 0xA5E1, + '齐' : 0xA5E2, + '懦' : 0xA5E3, + '抱' : 0xA5E4, + '千' : 0xA5E5, + '辛' : 0xA5E6, + '漂' : 0xA5E7, + '环' : 0xA5E8, + '配' : 0xA5E9, + '帝' : 0xA5EA, + '焦' : 0xA5EB, + '乎' : 0xA5EC, + '欠' : 0xA5ED, + '驯' : 0xA5EE, + '圈' : 0xA5EF, + '局' : 0xA5F0, + '咩' : 0xA5F1, + '既' : 0xA5F2, + '劳' : 0xA5F3, + '祭' : 0xA5F4, + '伪' : 0xA5F5, + '弃' : 0xA5F6, + '耐' : 0xA5F7, + '岗' : 0xA5F8, + '唔' : 0xA5F9, + '佳' : 0xA5FA, + '搭' : 0xA5FB, + '档' : 0xA5FC, + '负' : 0xA5FD, + '责' : 0xA5FE, + '攀' : 0xA5FF, + '绍' : 0xA600, + '忙' : 0xA601, + '提' : 0xA602, + '缠' : 0xA603, + '唉' : 0xA604, + '亳' : 0xA605, + '毛' : 0xA606, + '笑' : 0xA607, + '欣' : 0xA608, + '赏' : 0xA609, + '怜' : 0xA60A, + '瓜' : 0xA60B, + '奔' : 0xA60C, + '啧' : 0xA60D, + '踢' : 0xA60E, + '志' : 0xA60F, + '宜' : 0xA610, + '仿' : 0xA611, + '楚' : 0xA612, + '挖' : 0xA613, + '由' : 0xA614, + '捕' : 0xA615, + '播' : 0xA616, + '谣' : 0xA617, + '勤' : 0xA618, + '陌' : 0xA619, + '杰' : 0xA61A, + '骏' : 0xA61B, + '鞭' : 0xA61C, + '抽' : 0xA61D, + '享' : 0xA61E, + '栏' : 0xA61F, + '逛' : 0xA620, + '汊' : 0xA621, + '烦' : 0xA622, + '匆' : 0xA623, + '妈' : 0xA624, + '唱' : 0xA625, + '墟' : 0xA626, + '粗' : 0xA627, + '虐' : 0xA628, + '乡' : 0xA629, + '彻' : 0xA62A, + '咕' : 0xA62B, + '哝' : 0xA62C, + '简' : 0xA62D, + '优' : 0xA62E, + '惠' : 0xA62F, + '民' : 0xA630, + '灰' : 0xA631, + '聪' : 0xA632, + '南' : 0xA633, + '澈' : 0xA634, + '卫' : 0xA635, + '熟' : 0xA636, + '悉' : 0xA637, + '故' : 0xA638, + '乌' : 0xA639, + '兆' : 0xA63A, + '企' : 0xA63B, + '抢' : 0xA63C, + '夺' : 0xA63D, + '拼' : 0xA63E, + '粉' : 0xA63F, + '番' : 0xA640, + '群' : 0xA641, + '秒' : 0xA642, + '料' : 0xA643, + '肯' : 0xA644, + '赋' : 0xA645, + '婚' : 0xA646, + '诚' : 0xA647, + '邀' : 0xA648, + '斜' : 0xA649, + '诞' : 0xA64A, + '及' : 0xA64B, + '盛' : 0xA64C, + '典' : 0xA64D, + '拍' : 0xA64E, + '轰' : 0xA64F, + '植' : 0xA650, + '矿' : 0xA651, + '采' : 0xA652, + '阴' : 0xA653, + '罕' : 0xA654, + '昏' : 0xA655, + '压' : 0xA656, + '悦' : 0xA657, + '饿' : 0xA658, + '忍' : 0xA659, + '咳' : 0xA65A, + '弄' : 0xA65B, + '舔' : 0xA65C, + '醉' : 0xA65D, + '怀' : 0xA65E, + '尊' : 0xA65F, + '严' : 0xA660, + '滋' : 0xA661, + '农' : 0xA662, + '饥' : 0xA663, + '沮' : 0xA664, + '丧' : 0xA665, + '奋' : 0xA666, + '省' : 0xA667, + '撑' : 0xA668, + '脑' : 0xA669, + '灯' : 0xA66A, + '隧' : 0xA66B, + '派' : 0xA66C, + '狗' : 0xA66D, + '呜' : 0xA66E, + '咣' : 0xA66F, + '警' : 0xA670, + '挪' : 0xA671, + '窜' : 0xA672, + '峙' : 0xA673, + '含' : 0xA674, + '痛' : 0xA675, + '夸' : 0xA676, + '艺' : 0xA677, + '撒' : 0xA678, + '谎' : 0xA679, + '昨' : 0xA67A, + '炎' : 0xA67B, + '痒' : 0xA67C, + '泪' : 0xA67D, + '稳' : 0xA67E, + '况' : 0xA67F, + '磨' : 0xA680, + '休' : 0xA681, + '柱' : 0xA682, + '敲' : 0xA683, + '油' : 0xA684, + '菜' : 0xA685, + '盟' : 0xA686, + '骄' : 0xA687, + '傲' : 0xA688, + '献' : 0xA689, + '噢' : 0xA68A, + '窒' : 0xA68B, + '医' : 0xA68C, + '甜' : 0xA68D, + '鰓' : 0xA68E, + '恼' : 0xA68F, + '耽' : 0xA690, + '搁' : 0xA691, + '孤' : 0xA692, + '丈' : 0xA693, + '订' : 0xA694, + '戒' : 0xA695, + '贵' : 0xA696, + '财' : 0xA697, + '惹' : 0xA698, + '腐' : 0xA699, + '剂' : 0xA69A, + '融' : 0xA69B, + '厚' : 0xA69C, + '映' : 0xA69D, + '妻' : 0xA69E, + '狠' : 0xA69F, + '泄' : 0xA6A0, + '咿' : 0xA6A1, + '瞒' : 0xA6A2, + '咽' : 0xA6A3, + '恭' : 0xA6A4, + '涨' : 0xA6A5, + '嘎' : 0xA6A6, + '悔' : 0xA6A7, + '犹' : 0xA6A8, + '豫' : 0xA6A9, + '呃' : 0xA6AA, + '糕' : 0xA6AB, + '埃' : 0xA6AC, + '荡' : 0xA6AD, + '漾' : 0xA6AE, + '饵' : 0xA6AF, + '晃' : 0xA6B0, + '约' : 0xA6B1, + '专' : 0xA6B2, + '剔' : 0xA6B3, + '窍' : 0xA6B4, + '.' : 0xA6B5, + '乱' : 0xA6B6, + '甩' : 0xA6B7, + '鳅' : 0xA6B8, + '剧' : 0xA6B9, + '竿' : 0xA6BA, + '杆' : 0xA6BB, + '符' : 0xA6BC, + '呱' : 0xA6BD, + '团' : 0xA6BE, + '饱' : 0xA6BF, + '犯' : 0xA6C0, + '肃' : 0xA6C1, + '啵' : 0xA6C2, + '吟' : 0xA6C3, + '月' : 0xA6C4, + '诗' : 0xA6C5, + '碑' : 0xA6C6, + '奥' : 0xA6C7, + '扬' : 0xA6C8, + '舍' : 0xA6C9, + '副' : 0xA6CA, + '袖' : 0xA6CB, + '夏' : 0xA6CC, + '赖' : 0xA6CD, + '仆' : 0xA6CE, + '摆' : 0xA6CF, + '雇' : 0xA6D0, + '疙' : 0xA6D1, + '瘩' : 0xA6D2, + '居' : 0xA6D3, + '簧' : 0xA6D4, + '车' : 0xA6D5, + '剩' : 0xA6D6, + '玻' : 0xA6D7, + '璃' : 0xA6D8, + '赔' : 0xA6D9, + '欺' : 0xA6DA, + '育' : 0xA6DB, + '珍' : 0xA6DC, + '床' : 0xA6DD, + '蛮' : 0xA6DE, + '啄' : 0xA6DF, + '、' : 0xA6E0, + '稀' : 0xA6E1, + '栋' : 0xA6E2, + '柜' : 0xA6E3, + '鼻' : 0xA6E4, + '厉' : 0xA6E5, + '乏' : 0xA6E6, + '饭' : 0xA6E7, + '胡' : 0xA6E8, + '叮' : 0xA6E9, + '咚' : 0xA6EA, + '兵' : 0xA6EB, + '勃' : 0xA6EC, + '苛' : 0xA6ED, + '薪' : 0xA6EE, + '痴' : 0xA6EF, + '挣' : 0xA6F0, + '馊' : 0xA6F1, + '扑' : 0xA6F2, + '良' : 0xA6F3, + '竭' : 0xA6F4, + '慷' : 0xA6F5, + '慨' : 0xA6F6, + '欲' : 0xA6F7, + '愚' : 0xA6F8, + '蠢' : 0xA6F9, + '嘉' : 0xA6FA, + '监' : 0xA6FB, + '狱' : 0xA6FC, + '喔' : 0xA6FD, + '港' : 0xA6FE, + '逆' : 0xA6FF, + '误' : 0xA700, + '独' : 0xA701, + '划' : 0xA702, + '措' : 0xA703, + '颜' : 0xA704, + '奴' : 0xA705, + '罢' : 0xA706, + '洗' : 0xA707, + '俊' : 0xA708, + '罪' : 0xA709, + '偿' : 0xA70A, + '牺' : 0xA70B, + '牲' : 0xA70C, + '劲' : 0xA70D, + '岁' : 0xA70E, + '恩' : 0xA70F, + '账' : 0xA710, + '珂' : 0xA711, + '艾' : 0xA712, + '组' : 0xA713, + '织' : 0xA714, + '伯' : 0xA715, + '社' : 0xA716, + '架' : 0xA717, + '桥' : 0xA718, + '碟' : 0xA719, + '卑' : 0xA71A, + '鄙' : 0xA71B, + '臭' : 0xA71C, + '占' : 0xA71D, + '讶' : 0xA71E, + '兽' : 0xA71F, + '刷' : 0xA720, + '竞' : 0xA721, + '帐' : 0xA722, + '篷' : 0xA723, + '迟' : 0xA724, + '繁' : 0xA725, + '倦' : 0xA726, + '罐' : 0xA727, + '牌' : 0xA728, + '晨' : 0xA729, + '景' : 0xA72A, + '田' : 0xA72B, + '孔' : 0xA72C, + '钻' : 0xA72D, + '浓' : 0xA72E, + '盒' : 0xA72F, + '溜' : 0xA730, + '街' : 0xA731, + '概' : 0xA732, + '盹' : 0xA733, + '敞' : 0xA734, + '扉' : 0xA735, + '文' : 0xA736, + '撞' : 0xA737, + '姑' : 0xA738, + '娘' : 0xA739, + '糊' : 0xA73A, + '涂' : 0xA73B, + '依' : 0xA73C, + '辐' : 0xA73D, + '微' : 0xA73E, + '汇' : 0xA73F, + '缚' : 0xA740, + '宰' : 0xA741, + '摸' : 0xA742, + '侍' : 0xA743, + '垒' : 0xA744, + '扮' : 0xA745, + '惕' : 0xA746, + '估' : 0xA747, + '执' : 0xA748, + '悲' : 0xA749, + '拖' : 0xA74A, + '累' : 0xA74B, + '弥' : 0xA74C, + '渴' : 0xA74D, + '班' : 0xA74E, + '搞' : 0xA74F, + '谛' : 0xA750, + '哀' : 0xA751, + '圆' : 0xA752, + '鸣' : 0xA753, + '俩' : 0xA754, + '善' : 0xA755, + '塌' : 0xA756, + '埋' : 0xA757, + '孙' : 0xA758, + '凶' : 0xA759, + '聊' : 0xA75A, + '寃' : 0xA75B, + '怨' : 0xA75C, + '购' : 0xA75D, + '涌' : 0xA75E, + '劈' : 0xA75F, + '狐' : 0xA760, + '狸' : 0xA761, + '票' : 0xA762, + '闻' : 0xA763, + '哟' : 0xA764, + '唬' : 0xA765, + '摘' : 0xA766, + '愉' : 0xA767, + '呦' : 0xA768, + '棺' : 0xA769, + '溶' : 0xA76A, + '褐' : 0xA76B, + '肤' : 0xA76C, + '颤' : 0xA76D, + '逗' : 0xA76E, + '娶' : 0xA76F, + '逼' : 0xA770, + '悠' : 0xA771, + '蒙' : 0xA772, + '漆' : 0xA773, + '彩' : 0xA774, + '丰' : 0xA775, +} diff --git a/assets/text/charmap.jpn.txt b/assets/text/charmap.jpn.txt new file mode 100644 index 0000000000..f615e8807f --- /dev/null +++ b/assets/text/charmap.jpn.txt @@ -0,0 +1,20 @@ +# Determines how certain text sequences should be encoded for the JPN text encoding. +{ + '\n' : 0x000A, + + '[A]' : 0x839F, + '[B]' : 0x83A0, + '[C]' : 0x83A1, + '[L]' : 0x83A2, + '[R]' : 0x83A3, + '[Z]' : 0x83A4, + '[C-Up]' : 0x83A5, + '[C-Down]' : 0x83A6, + '[C-Left]' : 0x83A7, + '[C-Right]' : 0x83A8, + '▼' : 0x83A9, + '[Control-Pad]' : 0x83AA, + + # Possibly from a SHIFT-JIS extension, python doesn't have builtin support + '┯' : 0x86D3, +} diff --git a/assets/text/charmap.nes.txt b/assets/text/charmap.nes.txt new file mode 100644 index 0000000000..1dd6445712 --- /dev/null +++ b/assets/text/charmap.nes.txt @@ -0,0 +1,50 @@ +# Determines how certain text sequences should be encoded for the NES text encoding. +{ + '\n' : 0x01, + + '[A]' : 0x9F, + '[B]' : 0xA0, + '[C]' : 0xA1, + '[L]' : 0xA2, + '[R]' : 0xA3, + '[Z]' : 0xA4, + '[C-Up]' : 0xA5, + '[C-Down]' : 0xA6, + '[C-Left]' : 0xA7, + '[C-Right]' : 0xA8, + '▼' : 0xA9, + '[Control-Pad]' : 0xAA, + '[D-Pad]' : 0xAB, + + 'À' : 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, +} diff --git a/assets/text/charmap.txt b/assets/text/charmap.txt deleted file mode 100644 index 1e7260a7c7..0000000000 --- a/assets/text/charmap.txt +++ /dev/null @@ -1,57 +0,0 @@ -# Determines how certain text sequences should be encoded. The text sequence is -# converted to either the first or second tuple element based on whether the -# target encoding is the "wide" encoding. The first element is for the non-wide -# encoding, used for all languages besides JP, while the second element is for -# the wide encoding, used for JP. -{ - '\n' : (0x01, 0x000A), - - '[A]' : (0x9F, 0x839F), - '[B]' : (0xA0, 0x83A0), - '[C]' : (0xA1, 0x83A1), - '[L]' : (0xA2, 0x83A2), - '[R]' : (0xA3, 0x83A3), - '[Z]' : (0xA4, 0x83A4), - '[C-Up]' : (0xA5, 0x83A5), - '[C-Down]' : (0xA6, 0x83A6), - '[C-Left]' : (0xA7, 0x83A7), - '[C-Right]' : (0xA8, 0x83A8), - '▼' : (0xA9, 0x83A9), - '[Control-Pad]' : (0xAA, 0x83AA), - '[D-Pad]' : (0xAB, None), - - # Possibly from a SHIFT-JIS extension, python doesn't have builtin support - '┯' : (None, 0x86D3), - - 'À' : (0x80, None), - 'î' : (0x81, None), - 'Â' : (0x82, None), - 'Ä' : (0x83, None), - 'Ç' : (0x84, None), - 'È' : (0x85, None), - 'É' : (0x86, None), - 'Ê' : (0x87, None), - 'Ë' : (0x88, None), - 'Ï' : (0x89, None), - 'Ô' : (0x8A, None), - 'Ö' : (0x8B, None), - 'Ù' : (0x8C, None), - 'Û' : (0x8D, None), - 'Ü' : (0x8E, None), - 'ß' : (0x8F, None), - 'à' : (0x90, None), - 'á' : (0x91, None), - 'â' : (0x92, None), - 'ä' : (0x93, None), - 'ç' : (0x94, None), - 'è' : (0x95, None), - 'é' : (0x96, None), - 'ê' : (0x97, None), - 'ë' : (0x98, None), - 'ï' : (0x99, None), - 'ô' : (0x9A, None), - 'ö' : (0x9B, None), - 'ù' : (0x9C, None), - 'û' : (0x9D, None), - 'ü' : (0x9E, None), -} diff --git a/assets/xml/textures/nes_font_static_ique_cn.xml b/assets/xml/textures/nes_font_static_ique_cn.xml index 73ef61f72f..484707b05d 100644 --- a/assets/xml/textures/nes_font_static_ique_cn.xml +++ b/assets/xml/textures/nes_font_static_ique_cn.xml @@ -1,145 +1,1919 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/baseroms/ique-cn/config.yml b/baseroms/ique-cn/config.yml index a180164821..02fcba20a4 100644 --- a/baseroms/ique-cn/config.yml +++ b/baseroms/ique-cn/config.yml @@ -44,7 +44,7 @@ incbins: # TODO: fix these variables: gMtxClear: 0x80106980 sJpnMessageEntryTable: 0x80115838 - sNesMessageEntryTable: 0x8011DB98 + sNesMessageEntryTable: 0x80119978 sStaffMessageEntryTable: 0x8011DB98 gSoundFontTable: 0x8011F280 gSequenceFontTable: 0x8011F4F0 diff --git a/tools/extract_text.py b/tools/extract_text.py index 83a49caed6..d9d9b50b61 100755 --- a/tools/extract_text.py +++ b/tools/extract_text.py @@ -1882,6 +1882,148 @@ class MessageDecoderNES(MessageDecoder): 0x47 : "BLACK", }[c] +# Chinese Characters ordered according to their appearance in nes_font_static. +# This unfortunately does not appear to match any standard encoding. +CHN_CHARS = """你借到了一\ +颗口袋鸡蛋过夜后就会孵出只,用完\ +别忘记把它还回去。归得克洛!与不\ +同很少啼叫个奇异蘑菇新鲜的都容易\ +变质快拿卡利科药店吧之知道这两人\ +间发生什么事但带迷失森林物原主偷\ +猎者锯定是那年轻留下炸弹枚卢比买\ +德库子可以装弓换破损格雷剑大城修\ +好交处方见卓拉王⋯兑券急切地希望\ +点铸卖掉巨刀铁匠师所造坚摧卷眼青\ +蛙趁凉海鲁湖世上最水在前送蠃啦骷\ +髅面具按戴试看着真像怪恐怖吓基顿\ +受欢迎哦兔兜帽长耳朵太爱让头起来\ +有女孩?理更多我们娱乐中心:保龄\ +球场想奖品吗秘密付钱才告诉玩次要\ +瞄准洞放鼠十机预备开始再差()捡\ +扔没能恢复正常请救其他兄弟给励诅\ +咒解除谢报呀啊被小消灭蜘蛛已经减\ +弱富办法越些验帮助寻找首先晚行动\ +第二住喜松柔土壤仔细观察周围全靠\ +成样因为种界每现徽章收集作战绩证\ +明征途状态窗此图标旁边数字显示目\ +量如果区名说里家族身感止错担需箭\ +关系强迫游戏著射击从台够五支武器\ +争取祝运堆软泥精灵选择或键并立即\ +时举置跑投掷疑型甚至飞檐走壁闪光\ +使敌眩晕旋镖攻远短钩条力链勾体获\ +自己根木棒挥舞站携浪费锤砸碎废沉\ +双手镜神井外也耗魔停笛塞尔达宝散\ +芒施展花风返避退火勋圣尼亚觉醒将\ +赐予茹特她萨莉娅魂纳波若暗英帕空\ +瓶红色命份绿蓝和抓伙伴活随呼唤鱼\ +非美豆园合适趣对纪念演奏各律重握\ +盾蹲防御移表滑反升级延伸距离倍套\ +件隔热穿潜服淹死坛充满靴浮悬缺摩\ +擦段勇敢相信超东哥猛龙胃做幸银臂\ +答应遵守诺言金焰入冷艳包钥匙打锁\ +门限于宫内老却驱喝进然域烁当位拨\ +查某层罗盘隐藏振石继续努哇公签临\ +西便箱意惊话左右赌徒值威增冰结授\ +艰苦训练该拥而荣义邪恶学步曲烈安\ +影梦幻镯拔虫员张据翡翠伟树托代传\ +碧商讲妖婆堡男情隆牛奶营养排销售\ +榜朋友搬日客碰烧毁折断斗习骑士又\ +承制尺码护炙侵害底溺掌丁妮席性危\ +往创建娜产罩刚清舒爽般暂脱参加嗯\ +顾片四整三房干稍候赛鳞跳深歌伊阳\ +摇篮雪壮管术接智慧气疲惫治疗伤且\ +硬技斩积蓄直释转效谈听束刻注嗨皇\ +探儿附近半思仅燃紫价高百索何输虽\ +惜幽妙愿勉网墙布藤蔓平爬屏幕顶端\ +挂旧梯嘿饰熄久通狭路慢躲调视角弯\ +旦侧落块推向兴引爆呢山坑楼绝总巧\ +脸私语足导写险雕流粘浑电尾巴几瞧\ +旗哪召跟拜访牧爸拯窟卜肚白马丢河\ +殿村云吹寒庄谁教沙漠盖侬夫等介联\ +声嘻曾领统疆怕鸟黑睛暴雨息初六聚\ +封印七认识必须未梭另渡船乘艘咯扇\ +许鬼板画廊扭天味冻音座锈漩涡吞嘛\ +牢固殊静墓培睡掘阅读式租货款仍;\ +载贪婪仇恨血腥历史诡计谜题亡闭今\ +业早招聘兼职杂指启遗极亮照闯穴伏\ +阻拦朝囚室贝泊泉黎童纯洁翻嘴陷野\ +研究考坏竟坐玛录钓磅分纹誓忠哈眠\ +瀑国务盯毯踩资瞎难倒阱塘屈镇径窄\ +慌允禁激颁喷扰砍持草泰沿实峡谷册\ +追赶市蜃崖灼宣疯狂滚伞脚共部免规\ +递登补肉歉刺杀节横纵礼貌米无孪姐\ +妹改池胆跃任句线范逃期待丽问闲泳\ +连北棵锐虑挤障碍盔甲假设温际顽皮\ +姆违盗贼蝴蝶崇象猫鹰凯普・博古化\ +笨朗匹雄赚寄卵幼突袭腹绦食笔竖枯\ +矮丛吃震撼吸败蜥蜴蝙蝠否则阿莫斯\ +母绕触傻遭汀幅敬诱泡挡沃衣炬黏背\ +抵权核挑壳肌缩邦苏透僵尸麻痹咬吉\ +乃穷尽裂拢娃傀儡亲巫低骨斧漏莱彼\ +塔扫描烟蛇弗扎挺八爪迪困陆嗜仙狼\ +懈贩麦判乔绽速嗄羞永稻终薇呵父程\ +工存氛笼令敏项欧谅众悍怎亏掏毕缓\ +冲酷俯瞰哼蚀功糟呸黄类篇论控括冒\ +度检单懂屋户致腾模嗒咔咋萎紧决呆\ +闷畏骗苗茁算猜残妇婴蔽唯响抚吵境\ +隙逝忆喂辈肩洋溢确迹凝髓混沌降健\ +耕耘星倾沛础堂万宗源本替缝惩罚遇\ +懒惰衷势维秩序抗衡旅顺叛愤辽阔茂\ +称讨厌靶饲求材耶谊噓遍谱议吼薄饶\ +稽齐懦抱千辛漂环配帝焦乎欠驯圈局\ +咩既劳祭伪弃耐岗唔佳搭档负责攀绍\ +忙提缠唉亳毛笑欣赏怜瓜奔啧踢志宜\ +仿楚挖由捕播谣勤陌杰骏鞭抽享栏逛\ +汊烦匆妈唱墟粗虐乡彻咕哝简优惠民\ +灰聪南澈卫熟悉故乌兆企抢夺拼粉番\ +群秒料肯赋婚诚邀斜诞及盛典拍轰植\ +矿采阴罕昏压悦饿忍咳弄舔醉怀尊严\ +滋农饥沮丧奋省撑脑灯隧派狗呜咣警\ +挪窜峙含痛夸艺撒谎昨炎痒泪稳况磨\ +休柱敲油菜盟骄傲献噢窒医甜鰓恼耽\ +搁孤丈订戒贵财惹腐剂融厚映妻狠泄\ +咿瞒咽恭涨嘎悔犹豫呃糕埃荡漾饵晃\ +约专剔窍.乱甩鳅剧竿杆符呱团饱犯\ +肃啵吟月诗碑奥扬舍副袖夏赖仆摆雇\ +疙瘩居簧车剩玻璃赔欺育珍床蛮啄、\ +稀栋柜鼻厉乏饭胡叮咚兵勃苛薪痴挣\ +馊扑良竭慷慨欲愚蠢嘉监狱喔港逆误\ +独划措颜奴罢洗俊罪偿牺牲劲岁恩账\ +珂艾组织伯社架桥碟卑鄙臭占讶兽刷\ +竞帐篷迟繁倦罐牌晨景田孔钻浓盒溜\ +街概盹敞扉文撞姑娘糊涂依辐微汇缚\ +宰摸侍垒扮惕估执悲拖累弥渴班搞谛\ +哀圆鸣俩善塌埋孙凶聊寃怨购涌劈狐\ +狸票闻哟唬摘愉呦棺溶褐肤颤逗娶逼\ +悠蒙漆彩丰""" +# Ensure the contents of the above is unique +assert len(set(CHN_CHARS)) == len(CHN_CHARS), (len(set(CHN_CHARS)), len(CHN_CHARS)) + +class MessageDecoderCHN(MessageDecoderNES): + def __init__(self) -> None: + # The CHN text encoding is mostly the same as the NES encoding, except it lacks + # the D-Pad Icon and has multi-byte sequences for Chinese characters. + super().__init__() + # Remove D-Pad Icon + self.extraction_charmap.pop(0xAB) + # Add Chinese Characters + for i,c in enumerate(CHN_CHARS): + self.extraction_charmap[0xA08C + i] = c + self.pop_char = self.pop_char_chn + + def pop_char_chn(self) -> int: + c = self.pop_byte() + # AA acts like a sort of escape sequence for single-byte + # chars that are >= 0xA0 that should not be interpreted + # as a multi-byte sequence + if c == 0xAA: + return self.pop_byte() + # For other chars >= 0xA0, it indicates a multi-byte sequence + if c >= 0xA0: + return (c << 8) | self.pop_byte() + # If neither of the above, treat as a single byte char + return c + class MessageTableDesc: def __init__(self, table_name : str, seg_name : str, decoder : MessageDecoder, parent : Optional[int]) -> None: self.table_name : str = table_name @@ -1895,6 +2037,9 @@ class MessageTableEntry: def __init__(self, text_id : int, box_type : int, box_pos : int, addr : int) -> None: self.text_id, self.box_type, self.box_pos, self.addr = text_id, box_type, box_pos, addr + def __str__(self) -> str: + return f"MessageTableEntry(0x{self.text_id:04X}, {self.box_type}, {self.box_pos}, 0x{self.addr:08X})" + @staticmethod def from_bin(data : bytes) -> "MessageTableEntry": text_id,info,addr = struct.unpack(">HBxI", data) @@ -1947,8 +2092,9 @@ class MessageEntry: # Valid for all languages out += self.define_message("DEFINE_MESSAGE", shared_box_type, shared_box_pos, self.data) else: - # Some NTSC messages have different box types/positions between JPN and NES, + # Some NTSC/iQue messages have different box types/positions between JPN and NES/CHN, # so emit both DEFINE_MESSAGE_JPN and DEFINE_MESSAGE_NES + assert len(self.data) == 4 assert self.data[0] is not None assert self.data[1] is not None assert self.data[2] is None @@ -1959,7 +2105,7 @@ class MessageEntry: # JPN only out += self.define_message("DEFINE_MESSAGE_JPN", self.data[0].box_type, self.data[0].box_pos, self.data) elif selection == (False,True,True,True): - # NES only + # NES/CHN only out += self.define_message("DEFINE_MESSAGE_NES", self.data[1].box_type, self.data[1].box_pos, self.data) else: # Other unimplemented cases @@ -2070,8 +2216,9 @@ def main(): jpn_decoder = MessageDecoderJPN() nes_decoder = MessageDecoderNES() + chn_decoder = MessageDecoderCHN() - message_tables : List[Optional[MessageTableDesc]] = [None for _ in range(4)] # JP, EN, FR, DE + message_tables : List[Optional[MessageTableDesc]] = [None for _ in range(4)] # JP, EN/CN, FR, DE message_table_staff : MessageTableDesc = None if config.text_lang == "NTSC": @@ -2087,9 +2234,8 @@ def main(): message_tables[3] = MessageTableDesc("sFraMessageEntryTable", "fra_message_data_static", nes_decoder, 1) message_table_staff = MessageTableDesc("sStaffMessageEntryTable", "staff_message_data_static", nes_decoder, None) elif config.text_lang == "CN": - # TODO: extract CN text message_tables[0] = MessageTableDesc("sJpnMessageEntryTable", "jpn_message_data_static", jpn_decoder, None) - message_tables[1] = None + message_tables[1] = MessageTableDesc("sNesMessageEntryTable", "nes_message_data_static", chn_decoder, None) message_tables[2] = None message_tables[3] = None message_table_staff = MessageTableDesc("sStaffMessageEntryTable", "staff_message_data_static", nes_decoder, None) diff --git a/tools/msgenc.py b/tools/msgenc.py index b7a03a5b23..1483dcdc2d 100644 --- a/tools/msgenc.py +++ b/tools/msgenc.py @@ -13,18 +13,16 @@ def read_charmap(path : str, wchar : bool) -> Dict[str,str]: out_charmap = {} for k,v in charmap.items(): - v = v[wchar] - if v is None: - v = 0 assert isinstance(k, str) - assert v in (range(0xFFFF + 1) if wchar else range(0xFF + 1)) + assert isinstance(v, int) and v in range(0xFFFF + 1) k = repr(k)[1:-1] - if wchar: + if wchar or v > 0xFF: + # split value across two bytes u = (v >> 8) & 0xFF l = (v >> 0) & 0xFF - out_charmap[k] = f"0x{u:02X}, 0x{l:02X}," + out_charmap[k] = f"0x{u:02X},0x{l:02X}," else: out_charmap[k] = f"0x{v:02X}," @@ -62,7 +60,7 @@ def convert_text(text : str, encoding : str, charmap : Dict[str, str]) -> str: # flush text to_flush = string[run_start:i] if len(string[run_start:i]) != 0: - out += ",".join(f"0x{b:02X}" for b in to_flush.encode(encoding)) + out += ",".join(f"0x{b:02X}" for b in to_flush.encode(encoding, "replace")) out += "," if text is None: return @@ -126,24 +124,25 @@ def main(): ) parser.add_argument( "--encoding", - help="encoding (jpn or nes)", + help="base text encoding", required=True, type=str, - choices=("jpn", "nes"), + choices=("utf-8", "SHIFT-JIS"), ) parser.add_argument( "--charmap", help="path to charmap file specifying custom encoding elements", required=True, ) + parser.add_argument( + "--wchar", + help="force wide encoding", + required=False, + action="store_true" + ) args = parser.parse_args() - wchar,encoding = { - "jpn" : (True, "SHIFT-JIS"), - "nes" : (False, "raw-unicode-escape"), - }[args.encoding] - - charmap = read_charmap(args.charmap, wchar) + charmap = read_charmap(args.charmap, args.wchar) text = "" if args.input == "-": @@ -153,7 +152,7 @@ def main(): text = infile.read() text = remove_comments(text) - text = convert_text(text, encoding, charmap) + text = convert_text(text, args.encoding, charmap) if args.output == "-": sys.stdout.buffer.write(text.encode("utf-8"))