mirror of
https://github.com/snesrev/zelda3.git
synced 2025-12-19 18:05:55 -05:00
Add support for extracting dialogue from some more roms
This commit is contained in:
@@ -8,7 +8,7 @@ parser.add_argument('--extract-from-rom', '-e', action='store_true', help='Extra
|
||||
|
||||
optional = parser.add_argument_group('Language settings')
|
||||
optional.add_argument('--extract-dialogue', action='store_true', help = 'Extract dialogue from the german ROM')
|
||||
optional.add_argument('--languages', action='store', metavar='L1,L2', help = 'Comma separated list of additional languages to build (de,fr).')
|
||||
optional.add_argument('--languages', action='store', metavar='L1,L2', help = 'Comma separated list of additional languages to build (de,fr,fr-c,en).')
|
||||
|
||||
optional = parser.add_argument_group('Debug things')
|
||||
optional.add_argument('--no-build', action='store_true', help="Don't actually build zelda3_assets.dat")
|
||||
|
||||
@@ -137,9 +137,11 @@ def decode_hud_icons():
|
||||
save_as_png((128, 64 * 3), dst, 'hud_icons.png', convert_snes_palette(get_hud_snes_palette()[:128]))
|
||||
|
||||
kFontTypes = {
|
||||
'us' : (0xe8000, 256, 'font.png', (0x8ECADF, 99)),
|
||||
'de' : (0xCC6E8, 256, 'font_de.png', (0x8CDECF, 112)),
|
||||
'fr' : (0xCC6E8, 256, 'font_fr.png', (0x8CDEAF, 112)),
|
||||
'us' : (0xe8000, 256, 'font.png', (0x8ECADF, 99)),
|
||||
'de' : (0xCC6E8, 256, 'font_de.png', (0x8CDECF, 112)),
|
||||
'fr' : (0xCC6E8, 256, 'font_fr.png', (0x8CDEAF, 112)),
|
||||
'fr-c' : (0xCD078, 256, 'font_fr_c.png', (0x8CE83F, 112)),
|
||||
'en' : (0x8E8000, 256, 'font_en.png', (0x8ECAFF, 102)),
|
||||
}
|
||||
def decode_font():
|
||||
lang = util.ROM.language
|
||||
|
||||
@@ -160,6 +160,11 @@ class LangUS:
|
||||
return [cmd_index + self.COMMAND_START]
|
||||
return [cmd_index + self.COMMAND_START, int(param)]
|
||||
|
||||
class LangEN(LangUS):
|
||||
alphabet = kTextAlphabet_DE
|
||||
dictionary = kTextDictionary_US
|
||||
rom_addrs = [0x9c8000, 0x8edf60]
|
||||
|
||||
class LangEU:
|
||||
command_lengths = kText_CommandLengths_EU
|
||||
command_names = kText_CommandNames_EU
|
||||
@@ -202,7 +207,6 @@ class LangEU:
|
||||
r = info[1][param]
|
||||
return (info[0], r) if r != None else ()
|
||||
|
||||
|
||||
class LangDE(LangEU):
|
||||
alphabet = kTextAlphabet_DE
|
||||
dictionary = kTextDictionary_DE
|
||||
@@ -213,18 +217,27 @@ class LangFR(LangEU):
|
||||
dictionary = kTextDictionary_FR
|
||||
rom_addrs = [0x9c8000, 0x8CE800]
|
||||
|
||||
class LangFR_C(LangEU):
|
||||
alphabet = kTextAlphabet_FR
|
||||
dictionary = kTextDictionary_FR
|
||||
rom_addrs = [0x9c8000, 0x8CF150]
|
||||
|
||||
|
||||
|
||||
kLanguages = {
|
||||
'us' : LangUS(),
|
||||
'de' : LangDE(),
|
||||
'fr' : LangFR(),
|
||||
'fr-c' : LangFR_C(),
|
||||
'en' : LangEN(),
|
||||
}
|
||||
|
||||
kDialogueFilenames = {
|
||||
'us' : 'dialogue.txt',
|
||||
'de' : 'dialogue_de.txt',
|
||||
'fr' : 'dialogue_fr.txt',
|
||||
'fr-c' : 'dialogue_fr_c.txt',
|
||||
'en' : 'dialogue_en.txt',
|
||||
}
|
||||
|
||||
dict_expansion = []
|
||||
@@ -261,7 +274,6 @@ def decode_strings_generic(get_byte, lang):
|
||||
else:
|
||||
s += info.dictionary[c - info.DICT_BASE_DEC]
|
||||
dict_expansion.append(len(info.dictionary[c - info.DICT_BASE_DEC]))
|
||||
|
||||
result.append((s, srcdata))
|
||||
|
||||
|
||||
|
||||
@@ -14,9 +14,11 @@ DEFAULT_ROM_DIRECTORY = os.path.dirname(__file__)
|
||||
|
||||
ZELDA3_SHA256_US = '66871d66be19ad2c34c927d6b14cd8eb6fc3181965b6e517cb361f7316009cfb'
|
||||
ZELDA3_SHA256 = {
|
||||
'030ff80d0087bca440094cd914c03da0aa199dc6edb9adfb43f1267e99fde45f' : 'de',
|
||||
'29a0d5812ccbb4b11bdb55d8f751a2a797b4110bf402ca8ba15eb2bf85db7b39' : 'fr',
|
||||
'030ff80d0087bca440094cd914c03da0aa199dc6edb9adfb43f1267e99fde45f' : 'de', # German
|
||||
'29a0d5812ccbb4b11bdb55d8f751a2a797b4110bf402ca8ba15eb2bf85db7b39' : 'fr', # French
|
||||
'170d4963a3f5854b2ab3b8203a75ee93034e8f2fff8ff587d9c1bdef9bd04984' : 'fr-c', # French Canadian
|
||||
ZELDA3_SHA256_US : 'us',
|
||||
'b7640393ff2cb47ec7c4c061b78f9f34df14663f1d52e171697661a542d01d0d' : 'en', # English PAL ROM
|
||||
}
|
||||
|
||||
def load_rom(filename, support_multilanguage = False):
|
||||
@@ -56,6 +58,9 @@ class LoadedRom:
|
||||
hash = hashlib.sha256(self.ROM).hexdigest()
|
||||
self.language = ZELDA3_SHA256.get(hash)
|
||||
|
||||
if len(self.ROM) == 1049088:
|
||||
self.ROM = self.ROM[0x200:]
|
||||
|
||||
if support_multilanguage:
|
||||
if self.language == None:
|
||||
raise Exception(f"ROM with hash {hash} not supported.");
|
||||
|
||||
Reference in New Issue
Block a user