diff --git a/const.py b/const.py index 98eef9d..736a3f7 100644 --- a/const.py +++ b/const.py @@ -46,68 +46,68 @@ Glyphs_JP_large[0xC7] = '⋯' Glyphs_JP_large[0xE0:0xEB] = ['←','→','+','、', '◯', '『', 'F', '°C', '・', '(', ')'] Glyphs_JP_large[0xFF] = ' ' -Glyphs_Kanji1 = ( # TODO: finish this +Glyphs_Kanji = ( '王', '行', '力', '様', '飛', '世', '界', '封', # 0x000 '入', '城', '竜', '士', '船', '印', '海', '父', # 0x008 - '人', '見', '魔', '物', '大', '者', ' ', '何', # 0x010 - ' ', ' ', ' ', '手', '言', '石', '守', ' ', # 0x018 - '無', '心', '間', '前', '風', ' ', '私', ' ', # 0x020 - ' ', '武', '器', '兵', '火', '使', '中', '急', # 0x028 - '時', '森', '来', '砂', '動', '女', ' ', ' ', # 0x030 - '地', ' ', ' ', ' ', '上', ' ', ' ', ' ', # 0x038 + '人', '見', '魔', '物', '大', '者', '本', '何', # 0x010 + '戦', '出', '気', '手', '言', '石', '守', '辺', # 0x018 + '無', '心', '間', '前', '風', '帰', '私', '生', # 0x020 + '年', '武', '器', '兵', '火', '使', '中', '急', # 0x028 + '時', '森', '来', '砂', '動', '女', '待', '臣', # 0x030 + '地', '助', '当', '今', '上', '悪', '泉', '騎', # 0x038 - '思', '持', '変', '水', '塔', ' ', ' ', ' ', # 0x040 - ' ', ' ', ' ', ' ', ' ', '一', ' ', ' ', # 0x048 - '聞', '械', '神', '流', ' ', ' ', '町', '殿', # 0x050 - ' ', '空', ' ', '村', ' ', '子', '格', '納', # 0x058 - '伝', '消', '書', '長', ' ', ' ', '所', '場', # 0x060 - ' ', '北', ' ', ' ', ' ', ' ', '詩', '吟', # 0x068 - '落', '自', '階', ' ', ' ', ' ', ' ', '休', # 0x070-7 - ' ', ' ', '土', ' ', ' ', '発', ' ', ' ', # 0x078-F + '思', '持', '変', '水', '塔', '草', '仲', '復', # 0x040 + '目', '作', '分', '知', '機', '一', '姫', '最', # 0x048 + '聞', '械', '神', '流', '乗', '取', '町', '殿', # 0x050 + '事', '空', '勇', '村', '早', '子', '格', '納', # 0x058 + '伝', '消', '書', '長', '話', '合', '所', '場', # 0x060 + '脱', '北', '後', '全', '忍', '獣', '詩', '吟', # 0x068 + '落', '自', '階', '説', '残', '親', '活', '休', # 0x070 + '姉', '破', '土', '度', '記', '発', '赤', '侍', # 0x078 - '死', '国', '旅', ' ', ' ', '林', '古', '図', # 0x080 - ' ', ' ', '島', ' ', '部', ' ', ' ', ' ', # 0x088 - '防', '向', '先', ' ', ' ', '下', ' ', ' ', # 0x090 - ' ', '木', ' ', ' ', '配', ' ', ' ', ' ', # 0x098 - '願', '門', '東', '開', ' ', ' ', ' ', '舘', # 0x0A0 - '道', '身', '老', '西', ' ', '層', '第', ' ', # 0x0A8 - '光', '読', '外', ' ', ' ', ' ', '谷', ' ', # 0x0B0 - ' ', ' ', ' ', '屋', ' ', '運', '河', '聖', # 0x0B8 + '死', '国', '旅', '完', '小', '林', '古', '図', # 0x080 + '礼', '商', '島', '邪', '部', '狩', '精', '姿', # 0x088 + '防', '向', '先', '解', '板', '下', '台', '賢', # 0x090 + '対', '木', '成', '命', '配', '法', '飲', '回', # 0x098 + '願', '門', '東', '開', '貸', '増', '危', '舘', # 0x0A0 + '道', '身', '老', '西', '近', '層', '第', '青', # 0x0A8 + '光', '読', '外', '理', '強', '同', '谷', '負', # 0x0B0 + '意', '学', '攻', '屋', '体', '運', '河', '聖', # 0x0B8 - '必', '南', '方', '黒', ' ', ' ', '艇', '山', # 0x0C0 - ' ', '名', ' ', ' ', ' ', '少', ' ', '倉', # 0x0C8 - '然', '的', '男', '用', '酒', ' ', ' ', '代', # 0x0D0 - ' ', '具', ' ', ' ', ' ', ' ', '庫', ' ', # 0x0D8 - '日', '窟', '砲', '広', ' ', '博', ' ', ' ', # 0x0E0 - '室', '洞', ' ', ' ', ' ', ' ', ' ', ' ', # 0x0E8 - '宝', '毒', '売', ' ', ' ', ' ', '月', ' ', # 0x0F0 - ' ', ' ', '感', '宿', ' ', ' ', '決', ' ', # 0x0F8 + '必', '南', '方', '黒', '絶', '食', '艇', '山', # 0x0C0 + '穴', '名', '受', '暁', '傷', '少', '鼻', '倉', # 0x0C8 + '然', '的', '男', '用', '酒', '安', '現', '代', # 0x0D0 + '立', '具', '育', '続', '通', '会', '庫', '飼', # 0x0D8 + '日', '窟', '砲', '広', '化', '博', '以', '兄', # 0x0E0 + '室', '洞', '別', '番', '昔', '住', '吸', '去', # 0x0E8 + '宝', '毒', '売', '好', '枝', '踊', '月', '巣', # 0x0F0 + '底', '明', '感', '宿', '召', '喚', '決', '形', # 0x0F8 - '団', '異', '初', ' ', '家', ' ', ' ', ' ', # 0x100 - '墓', ' ', '跡', '遺', '内', ' ', '教', ' ', # 0x108 - '頭', '再', '高', ' ', ' ', ' ', ' ', ' ', # 0x110 - ' ', ' ', ' ', ' ', ' ', ' ', ' ', '滝', # 0x118 - '次', '閉', '求', ' ', ' ', ' ', ' ', ' ', # 0x120 - ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', # 0x128 - '役', '放', '衛', ' ', ' ', ' ', ' ', ' ', # 0x130 - '元', ' ', ' ', ' ', '遊', '頂', ' ', ' ', # 0x138 + '団', '異', '初', '険', '家', '息', '連', '集', # 0x100 + '墓', '著', '跡', '遺', '内', '悲', '教', '返', # 0x108 + '頭', '再', '高', '借', '登', '走', '過', '敵', # 0x110 + '鏡', '愛', '魚', '燃', '幅', '音', '血', '滝', # 0x118 + '次', '閉', '求', '声', '箱', '軍', '泣', '港', # 0x120 + '冊', '秒', '憶', '潜', '爆', '恋', '石', '左', # 0x128 + '役', '放', '衛', '母', '建', '角', '信', '師', # 0x130 + '元', '失', '字', '歩', '遊', '頂', '震', '収', # 0x138 - '追', '暗', ' ', ' ', ' ', ' ', ' ', ' ', # 0x140 - ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', # 0x148 - '炎', '望', '雨', ' ', ' ', ' ', ' ', '白', # 0x150 - ' ', ' ', ' ', ' ', ' ', ' ', '三', ' ', # 0x158 - '夜', '病', '半', ' ', ' ', ' ', ' ', ' ', # 0x160 - ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', # 0x168 - '薬', '弟', '経', ' ', ' ', ' ', ' ', ' ', # 0x170 - ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', # 0x178 + '追', '暗', '橋', '起', '約', '束', '文', '反', # 0x140 + '絵', '能', '歌', '弱', '境', '波', '針', '千', # 0x148 + '炎', '望', '雨', '金', '希', '花', '不', '白', # 0x150 + '剣', '陸', '勝', '烏', '笛', '究', '三', '探', # 0x158 + '夜', '病', '半', '美', '敗', '友', '研', '予', # 0x160 + '支', '々', '除', '数', '店', '翼', '充', '填', # 0x168 + '薬', '弟', '経', '験', '値', '闘', '得', '闇', # 0x170 + '混', '乱', '点', '速', '閃', '射', '斬', '鉄', # 0x178 - '宣', '告', ' ', ' ', ' ', ' ', ' ', ' ', # 0x180 - ' ', '刀', ' ', ' ', ' ', ' ', ' ', '漠', # 0x188 - '特', '胸', '永', ' ', ' ', ' ', ' ', ' ', # 0x190 - ' ', ' ', ' ', ' ', '利', ' ', ' ', ' ', # 0x198 - '紙', '胸', '平', ' ', ' ', ' ', ' ', '孤', # 0x1A0 + '宣', '告', '電', '磁', '圧', '昇', '重', '倍', # 0x180 + '妖', '刀', '拡', '散', '影', '御', '正', '漠', # 0x188 + '特', '胸', '永', '遠', '議', '浮', '眠', '逃', # 0x190 + '滅', '囗', '極', '湖', '利', '周', '緑', '切', # 0x198 + '紙', '胸', '平', '和', '宇', '宙', '則', '孤', # 0x1A0 '溝', ' ') # 0x1A8 -Glyphs_Kanji = [g if g != ' ' else '<${:03X}>'.format(i) for (i, g) in enumerate(Glyphs_Kanji1)] # This is only until they are fully transcribed +#Glyphs_Kanji = [g if g != ' ' else '<${:03X}>'.format(i) for (i, g) in enumerate(Glyphs_Kanji1)] # This is only until they are fully transcribed Dialogue_Macros_EN = { 0x02: [0x61, 0x7A, 0x8B, 0x8D, 0x93], # expands to Bartz (or whatever his name is) diff --git a/ff5reader.py b/ff5reader.py index 1289c5d..12229e7 100644 --- a/ff5reader.py +++ b/ff5reader.py @@ -287,6 +287,7 @@ class Canvas: return QPixmap.fromImage(self.image.copy(0, 0, self.max_x*8+8, self.max_y*8+8)) return QPixmap.fromImage(self.image) + def parse_struct(rom, offset, structure): out = ["0x{:06X}".format(offset)] j = 0 @@ -299,6 +300,7 @@ def parse_struct(rom, offset, structure): j += z[1] return out + def make_enemy_sprites(rom): sprites = [] for e_id in range(0, 0x180*5, 5): @@ -330,6 +332,7 @@ def make_enemy_sprites(rom): sprites.append(sprite.pixmap(True)) return sprites + def make_character_battle_sprites(rom): tile_address = 0x120000 palette_address = 0x14A3C0 @@ -345,6 +348,7 @@ def make_character_battle_sprites(rom): battle_strips.append(battle_strip.pixmap()) return battle_strips + def make_character_status_sprites(rom): tile_address = 0x149400 palette_address = 0x14A660 @@ -370,6 +374,7 @@ def make_character_status_sprites(rom): pixmaps.append(frog_strip.pixmap()) return pixmaps + def make_string_img_small(bytestring, jp=False): if len(bytestring) < 1: raise ValueError('Empty bytestring was passed') @@ -396,6 +401,7 @@ def make_string_img_small(bytestring, jp=False): del painter return string, QPixmap.fromImage(img) + def make_string_img_large(bytestring, macros=None, jp=False): ''' This is how we decipher dialogue data, which has multiple lines, macro expansions and kanji. @@ -455,6 +461,7 @@ def make_string_img_large(bytestring, macros=None, jp=False): xmax = x if x > xmax else xmax return string, QPixmap.fromImage(img.copy(0, 0, xmax, y+16)) + def make_string_img_list(start, length, num, start_jp=None, len_jp=None, start_str=None, start_jp_str=None, indirect=False, large=False, macros_en=None, macros_jp=None): start_jp = start if start_jp is None else start_jp @@ -513,6 +520,7 @@ def make_string_img_list(start, length, num, start_jp=None, len_jp=None, start_s stringlist.append(["0x{:06X}".format(j1), "0x{:0{}X}".format(id, id_digits), str_en, img_en, str_jp, img_jp]) return stringlist + def table_size_to_contents(table): # Stupid hack to get table to size correctly table.hide() @@ -523,6 +531,7 @@ def table_size_to_contents(table): table.viewport().setGeometry(geometry) table.show() + def make_table(headers, items, sortable=False, row_labels=True, scale=2): """ Helper function to tabulate 2d lists @@ -552,6 +561,7 @@ def make_table(headers, items, sortable=False, row_labels=True, scale=2): table.sortItems(0) return table + def make_pixmap_table(items, cols=16, scale=4): rows = divceil(len(items), cols) rd = hex_length(rows-1)+1