Zajímalo vás někdy, co obnáší kompletní lokalizace 30 let staré hry? Ponořte se do cesty za lokalizací hry Indiana Jones and the Fate of Atlantis, kde podzimní nuda vyvolá fascinující výzvu. Od reverzního inženýrství herních souborů až po malování vlastních znaků do retro fontů - tento příspěvek odhaluje nástroje, triky a vytrvalost potřebné k tomu, aby bylo klasické dobrodružství plně přístupné v novém jazyce. Jak „naučit“ hru zobrazovat znaky, pro které nebyla nikdy navržena? A proč se vám nakonec může tento proces líbit stejně jako výsledek?
Nesnáším podzim! Veškerý volný čas, jenž se dá v létě smysluplně trávit nesmyslným tlacháním u piva a kořalky, v hospodě, venku na zahrádce, s rodinou a přáteli, najednou není čím naplnit. A tak si hledávám zábavu jinou - digitální. Už ani nevím proč, ale měl jsem na podzim 2022 nápad přeložit hru Peglin do češtiny. Začal jsem se zajímat jak takové komunitní překlady vznikají, objevil jsem prekladyher.eu no a co se stalo dál asi tušíte podle nadpisu. Správně, Peglin jsem nikdy nepřeložil. Narazil jsem ovšem na žádost o pomoc s lokalizací cca 30 let staré hry.
Poznámka autora: Ano, datum té žádosti (ani mé odpovědi) moc nezapadá do podzimu. To však nevyvrací fakt, že nesnáším podzim.
Seznámení se hrou
Hru Indiana Jones and the Fate of Atlantis (dále jen Indy4) jsem jako malý chvilku hrál, ale protože byla anglicky, tak jsem moc netušil, co se tam děje. Ovšem dostala se ke mě česká verze předchozí hry ze série - Indiana Jones and the Last Crusade (dále Indy3) a u té jsem vytuhnul na opravdu dlouho. Tušil jsem tedy cca do čeho jdu. Klasická Lucasfilm Games adventura postavená na SCUMM enginu.
Sehnal jsem si tedy kopii (tentokrát již legální na GOGu, a pro jistotu jsem koupil rovnou in Indy3 a tím splatil jistý starý dluh). Už tady na mě číhala první nástraha. Indy4 byl vydán v několika verzích. GOG prodává tzv. "Talkie" verzi, ta obsahuje i kompletní anglický dabing. Pro jistotu jsem ještě našel původní DOS verzi na archive.org a porovnal je. Soubory jsou stejné a přesně tuhle verzi jsem hledal. Hru jsem úspěšně nainstaloval a spustil (na Linuxu přes ScummVM).
Dle ScummVM wiki obsahuje Indy4 tři hlavní datové soubory. Ty jsem našel v adresáři se hrou (v mém případě /opt/Games/Indiana Jones and the Fate of Atlantis
) ve složce data
.
[retro@retro Indiana Jones and the Fate of Atlantis]❤ ls -lh data total 153M -rw-r--r--. 1 retro retro 12K Nov 12 16:38 ATLANTIS.000 -rw-r--r--. 1 retro retro 9.4M Nov 12 16:38 ATLANTIS.001 -rw-r--r--. 1 retro retro 143M Oct 15 14:00 MONSTER.SOU drwx------. 2 retro retro 4.0K Oct 15 14:00 other
Prostou dedukcí (podle velikosti souborů) jsem usoudil, že v souboru MONSTER.SOU
bude dabing. To jsem si i potvrdil porovnáním se soubory z verze bez dabingu, kde tento soubor úplně chybí. Stejně tak jsem se podíval na původní překlad (bez české lokalizace). Ten obsahuje právě soubory ATLANTIS.000
a ATLANSTIS.001
. Překlad jsem stáhl a aplikoval. Hru mám tedy česky, ale české znaky (áčďéěíňóřšťúůýž
a ÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ
) chybí.
A to je právě výzva pro mě. Naučit tuhle 30 let starou hru vykreslit správně například č
. Překlad z roku 2006 nahrazuje všechny znaky obsahující diakritické znaménko znaky bez něho. Čili místo Stlač MEZERNÍK
hra vykreslí Stlac MEZERNIK
.
Práce s herními soubory
Ačkoliv se může zdát, že práce na 30 let staré hře má jen samé nevýhody, je tu i jistá výhoda. Lidstvo mělo 30 let času (čili 30 podzimů) tuto hru (bez zdrojových kodů) pomocí reverzního inženýrství rozebrat a zdokumentovat. A díky tomu existuje sada nástrojů pro SCUMM hry jménem scummtr. Pár chvilek hledání po fórech, pár položených otázek na ScummVM Discordu a nakonec i přečtené README... a hned mám jistou představou co tyto nástroje umí.
Pro začátek budu potřebovat vyexportovat ze hry texty. K tomu slouží program scummtr
s parametrem -o
. A naopak importovat text do hry lze stejným programem s parameterm -i
.
$ /cesta/k/scummtr -g atlantis -p /cesta/k/indy4 -r -o -f texts.txt $ /cesta/k/scummtr -g atlantis -p /cesta/k/indy4 -r -i -f texts.txt
Jelikož už teď vím, že mě nebude bavit pořád dokola psát tenhle příkaz (ani ty další), a také tuším, že ho budu používat často, začnu si to trochu organizovat. Na Linuxu je dobrá (moje) volba Makefile. Na Windows by asi stačil bat soubor. Dále tuším, že budu potřebovat hru spouštět pro testování, a jako bonus si můžu přednastavit cesty k souborům a zkrátit tak příkazy na minimum. Do souboru budeme průběžně přidávat další úlohy.
INDY4_DATA_PATH="/opt/Games/Indiana Jones and the Fate of Atlantis/data" SCUMMTR_BIN_PATH="/opt/scummtr/build/bin" test: scummvm -p $(INDY4_DATA_PATH) --auto-detect export-text: $(SCUMMTR_BIN_PATH)/scummtr -g atlantis -p $(INDY4_DATA_PATH) -r -o -f texts.txt import-text: $(SCUMMTR_BIN_PATH)/scummtr -g atlantis -p $(INDY4_DATA_PATH) -r -i -f texts.txt
Stačí pustit make export-text
a ve stejné složce se vytvoří soubor texts.txt
s texty ze hry. Texty jsou již česky bez diakritiky, protože jsem na hru aplikoval původní češtinu. Jako jednoduchý test stačí v souboru najít testovací řetězec Stlac MEZERNIK
, přepsat ho na Stlač MEZERNIK
, uložit a naimportovat zpět do hry spuštěním make import-text
.
Za povšimnutí stojí že používám editor Notepad++ (přes Wine, nemá Linuxovou nativní verzi) a kódování OEM 852. Jak jsem k tomu dospěl vysvětlím později, byl to jeden z největších oříšků. V této fázi by fungovalo jakékoliv dobové (DOS) kódování.
Nakonec stačí pustit make test
, po chvilce zmáčknout mezerník (což zapauzuje hru) a podívat se co hra vykreslí. Jelikož úkol je přidat vykreslování diakritiky, předpokládám, že hra nevykreslí č
, a mám pravdu. Místo znaku č
nevykreslí hra pro jistotu nic.
Úprava herního fontu
Sada nástrojů scummtr
obsahuje i nástroj scummfont
, kterým je možné (alespoň podle README
) vyexportovat font z herních souborů jako bitmapu (formát bmp, ten otevře i Malování). Chvilku mi trvalo, než jsem pochopil, jak tohle funguje. Tento nástroj se totiž nepoužívá na herní soubory (ATLANTIS.00X
) přímo, ale na soubory s fontem. Nakonec jsem zjistil (hledání, pročítání fór, Discord, ...), žě k těm je možno se dopracovat za pomocí nástroje scummrp
s parametrem -o
, který umí soubory ATLANTIS.00X
"rozbalit". A stejně tak je umí s parametrem -i
i "zabalit". Opět upravím Makefile
, přidám dvě úlohy a jako cílovou složku volím export
.
export-data: $(SCUMMTR_BIN_PATH)/scummrp -g atlantis -o -p $(INDY4_DATA_PATH) -d export import-data: $(SCUMMTR_BIN_PATH)/scummrp -i -g atlantis -p $(INDY4_DATA_PATH) -d export
Ve složce export
už pak konečně v adresáři DISK_0001/LECF/LFLF_0068
nacházím soubory CHAR_000X
. No a s těmi už umí pracovat program scummfont
. S parametrem o
umí herní fonty převést na bitmapu a s parametrem i
zase převést bitmapu zpět na herní font. Makefile
se opět rozrůstá. Malý spoiler: je to už poslední rozšíření Makefile.
export-fonts: $(SCUMMTR_BIN_PATH)/scummfont o export/DISK_0001/LECF/LFLF_0068/CHAR_0001 font-1.bmp $(SCUMMTR_BIN_PATH)/scummfont o export/DISK_0001/LECF/LFLF_0068/CHAR_0002 font-2.bmp $(SCUMMTR_BIN_PATH)/scummfont o export/DISK_0001/LECF/LFLF_0068/CHAR_0003 font-3.bmp $(SCUMMTR_BIN_PATH)/scummfont o export/DISK_0001/LECF/LFLF_0068/CHAR_0004 font-4.bmp $(SCUMMTR_BIN_PATH)/scummfont o export/DISK_0001/LECF/LFLF_0068/CHAR_0005 font-5.bmp import-fonts: $(SCUMMTR_BIN_PATH)/scummfont i export/DISK_0001/LECF/LFLF_0068/CHAR_0001 font-1.bmp $(SCUMMTR_BIN_PATH)/scummfont i export/DISK_0001/LECF/LFLF_0068/CHAR_0002 font-2.bmp $(SCUMMTR_BIN_PATH)/scummfont i export/DISK_0001/LECF/LFLF_0068/CHAR_0003 font-3.bmp $(SCUMMTR_BIN_PATH)/scummfont i export/DISK_0001/LECF/LFLF_0068/CHAR_0004 font-4.bmp $(SCUMMTR_BIN_PATH)/scummfont i export/DISK_0001/LECF/LFLF_0068/CHAR_0005 font-5.bmp
Bitmapy už lze lehce vizuálně prozkoumat. Já používám GIMP, ale tady by opravdu postačilo i obyčejné Malování dostupné ve Windows. Font který hledám, protože bych rád naučil č
, vypadá jako font v souboru font-1.bmp
. Bitmapa obsahuje jen "dlouhou nudli" znaků pod sebou. V tomto fontu má každý znak "chlívek" o velikosti 13x16px a některé "chlívky" jsou prázdné (tam asi hra hledá právě chybějící znaky a nevyrenderuje nic).
Abych si ověřil, že upravená bitmapa je správně převedená zpět na font, a úspěšně naimportována do hry, upravím například znak S
.
No a správně použitý Makefile
(make import-fonts import-data import-text
) nám teď udělá všechno co potřebujeme. Důležité je pouštět import-fonts
a až potom import-data
, protože import-fonts
uloží font zpět do rozbalených dat v herním formátu a import-data
tyto data zabalí a zkopíruje zpět do složky se hrou.
Lokalizace fontu
V GIMPu (nebo klidně v Malování) stačí domalovat do patřičných "chlívků" české znaky a tím pokoříme výzvu. Kam ale přesně domalovat třeba to č
?
Poznámka autora: Tady jsem se hodně zapotil a párkrát to málem vzdal.
První nápad byl zkusit to "hrubou silou". Do každého prázdného "chlívku" v bitmapě namalovat něco unikátního (třeba symbol, nebo číslo), upravovat průběžně testovací text a zapisovat si který znak na jaké pozici v bitmapě se vykreslí. I jsem začal bitmapu takhle upravovat. Ale nechtělo se mi tento dost časově náročný proces opakovat třicetkrát. Naštěstí jsem si všiml, že v bitmapě jsou i německé znaky (například ß
) a že tam jsou čísla v řadě za sebou, ale písmena jsou "náhodně".
To mě přivedlo na stopu, že znaky nejsou v bitmapě náhodně, ale podle nějakého systému. Rychle jsou koukl do ASCII tabulky a i tam jsou čísla za sebou a písmena pak "náhodně". Porovnal jsem tedy pozici náhodného znaku v bitmapě a v ASCII tabulce. Například znak pro vykřičník (!
) má v ASCII tabulce decimální hodnotu 33
a v bitmapě začíná znak vykřičníku na pozici 528
, což je zároveň 33 * 16 (16px je výška jednoho "chlívku" v bitmapě). Zároveň jsem zjistil, že bitmapa má na výšku 4096px, což odpovídá místu pro 256 "chlívků" po 16px a to je maximální počet znaků pro osmibitové znakové sady, které byly používané v DOSu. Našel jsem si tedy znakovou sadu pro středoevropské jazyky používanou v systému DOS (CP852, také nazývanou OEM 852) a v ní našel pozici pro znak č
(9F
neboli 159
).
Lehce (159 * 16px = 2544px) jsem vypočítal pozici pro "chlívek" pro znak č
, a protože byl prázdný, tak jsem tam č
domaloval (jen jsem zkopíroval c
a přimaloval háček).
Soubor s texty jsem uložil v kódování OEM 852 (proto ten Notepad++, nepodařilo se mi najít textový editor na Linuxu, který by uložil soubor správně). Texty i font jsem naimportoval do hry (<3 Makefile
) a hra správně zobrazila č
!
Dokončení
Nyní už jen stačilo projet celou CP852 tabulku, vypočítat si pozici jednotlivých "chlívků" a domalovat do nich potřebné znaky. A to všechno dvakrát, protože je potřeba "počeštit" dva fonty. Jeden je použit pro uživatelské rozhraní (například několikrát zmíněný dialog pauzy) a druhý je použít pro dialogy osob ve hře. Font pro dialogy osob má jiný rozměr "chlívku" (39x10px), čili například č je na pozici 159 * 10px = 1590px.
Domalování jednotlivých znaků zabralo pár hodin, ale byla to v podstatě příjemná práce, protože už jsem věděl, že výzva je pokořena. Někdy to chtělo trochu důvtipu a vymyslet, jak přidat háček nebo čárku do omezeného prostoru. Konečný výsledek můžete posoudit sami.
Když tak vzpomínám,... tenhle podzim nebyl tak špatnej. Vždyť já mám ten podzim vlastně nakonec rád.
P.S. Verzi v angličtině najdete na Localizing 'Indiana Jones and the Fate of Atlantis' 30 years after release.
Díky moc za celý popis procesu. Jako správný rýpal ale musím upozornit, že na přiložených obrázcích je stále MEZERNIK a ne MEZERNÍK :)
To je dobrá otázka. Asi šotek.
To je super! Snad na to ukecám i děti.
žasnu a tleskám úsilí. Já bych vklidu psal bez diakritky. Indy4 je jedna z nej, budu ji muset dát znova jen abych ohodnotil nemalou práci.
Nejde mi do hlavy ten problém s kódováním. Nepomatuji si, že bych s tím měl problém, ale zrovna teď na Xfce s Mouspadem snadné řešení nevidím., ale jsem si jist, ž v Geditu jsem neměl problém.
Nicméně dnes už všechno (asi) dělám v Code a zdá se, že Code podporu kódování má, reopen with i save with.
Normálně používám vim, ale nebyl jsem ho schopen přinutit to otevřít, zobrazit a uložit správně. Tohle bylo dost rychlý řešení a pak už jsem na to znovu nekoukal. Věřím že ten vim i plno dalších nativních programů to umí.
Skvělý článek. Osobně vím, jaké je trápení s fonty při překladech. Článek jsem vzal jedním dechem. Díky ;)
super díky,
teď prosím přeložit Maniac Mansion a Zak MC Kraken ;) :D
Za Maniaca a Krakena v češtině bych i zaplatil.
Já jsem na to koukal myslim, ale nepodařilo se mi tam najít ten font. Ale pro jistotu se podívám znovu. Pro ten Maniac Mansion, která verze by byla nejzajímavější? https://forums.mixnmojo.com/topic/200526-the-many-versions-of-maniac-mansion-a-dorky-breakdown/
Určitě původní PC verzi :)
Verze v1 z roku 1988 byla v EGA grafice, před vydáním v2 „Enhanced Verze“, z roku 1989. Jinak Maniac Mansion Deluxe 1.4 z roku 2005 českou lokalizaci má.
Mě by se u této hry líbil dabing jako udělali na Monkey Island 2, to byla pecka :) :) :)
Díky za zajímavý článek.