Kapitola 4 Způsoby překladu Takže teď už víte jaký typ souboru budete překládat a můžete se do toho pustit. V této fázi překladu už samozřejmě budu mluvit vždy jen o jednom souboru, tedy budu předpokládat, že postupujete podle tohoto tutorialu.
No pokud máte před sebou hru, která používá pouze textové soubory, tak máte v podstatě vyhráno. Stačí použít jakýkoliv textový editor a soubor překládat. Ale dejte si pozor na pár věcí.
K takovému překladu už není podle mne co víc říct.
Binární soubory jsou samy o sobě dosti tvrdý oříšek. Je to proto, že můžou používat různou spoustu formátovacích a jiných znaků a velice často se při chybě při překladu, takový soubor poničí a nefunguje. Příkladem vkládání takovýchto znaků může být např. vkládání znaku s hodnotou 0x00 mezi normální textové řetězce, který se může využívat jako zpožďovací smyčka, odsazování, atd. Chcete-li přeložit takovýto soubor, zjistěte nejprve u všech takovýchto znaků jejich význam. Nedá se říct, co který dělá. Prostě musíte zkoušet. Kolikrát taky pomůže náhoda :-) Jakmile budete dokonale znát strukturu, můžete si dovolit tento soubor rozebrat na dílčí texty, které samozřejmě nakonec zase musíte uvést do původního stavu. Tj. doplnit zpět formátovací znaky a otestovat výsledek. Často se taky stává, že hra používá soubory, ve kterých mají texty pevně stanovenou délku a je-li řetězec kratší, než tato délka, je doplňen náhodnými znaky. To dokáže člověka taky občas poplést. U binárních souborů se asi nejčastěli používají různé hexa editory, protože to je rychlejší. Tím samorřejmě nechci říci, že to jinak nejde. Příkladem her, které používají takovéto typy souborů jsou např. Falcon 4.0, Dune2000, Jagged Alliance2, ...
Pokud váš soubor splňuje podmínky zakódovaného souboru, tak se tršku zapotíte. Teď záleží jen na vás, jaké máte zkušenosti a kolik máte trpělivosti. jsou vpodstatě dva druhy zakódovaných souborů: Předem bych chtěl upozornit na tu zkutečnost, že v tomto tutoriálu NEJSOU uvedeny všechny kompresní metody, které se dají použít. Cílem této kapitoly je NASTÍNIT jen ty základní způsoby, které se používají. Pokud tedy najdete hru, která má texty komprimované podobným způsobem, musíte si dekomprimační algoritmus vytvořit sami. Proto zde uvádím ZÁKLADNÍ postupy, ale algoritmy se můžou lišit. A to všecno nechce většina lidí, kteří chtějí hry překládat, pochopit. Těžko se vysvětluje, že NELZE udělat univerzální dekódovací program. Teď si povíme k jednotlivým typům více.
V této části bych se chtěl zmínit o dvou takových nejrozšířenějších metodách komrese herních dat. Metoda 1V poslední době se docela často používají různé metody komprimace souborů. Je to z toho důvodu, že zabalená data zaberou meně místa než rozbalená. na druhé straně je však třeba vytvořit takovou kompresní metodu, která zmeší obsah dat, ale není moc náročná na zpětné rozbalení. Různé firmy mají sve komprimační metody a ty používají ve svých hrách. Hodně se v poslední době rozšířilo používání knihovny Zlib, kterou vytvořili pánové Jean-loup Gailly a Mark Adler a dali zdrojové soubory volně k dispozici. Pokud máte o tyto zdrojáčky zájem, tak si je můžete stáhnout, nebo najít na Internetu. Příkladem her, které používají tuto kompresní metodu jsou např. Heroes of Might And Magic 3, Fallout 2,... Pokud tedy chcete rozbalit takovéto soubory, musíte si vytvořit program, který je rozbalí. Pokud neznáte funkce knihovny Zlib, podívejte se do ilustračních souborů, které jsou v archivu přiloženy. Metoda 2Další docela častou metodou komprimace je způsob, který využívá opakování se řetězců v použitém textu. Bohužel nevím, jestli tato kompresní metoda má nějaké oficiální jméno, ale určitě ano. V tomto případě existuje libovolný počet způsobů vytvoření kompresního algoritmu. Ale podle mých zkušeností, mají všechny tento dekodovací algoritmus:
Tato metoda se pozná velice snadno. Na začátku souboru je čitelný text a postupně se ztrácí. Je to z toho důvodu, aby se bylo na co odkazovat. V této metodě je docela velká volnost, protože si můžete vybrat, jestli 1 bit bude reprezentovat 1 byte nebo 2 byty atd. Pokud bude tato metoda použita, musíte ještě zjistit, jakým způsobem se získávají informace o adrese a počtu opisovaných znaků. To je tršku složitější, ale dá se na to přijít zkoušením. Samozřejmě to asi nezvládnete bez nějakého prográmku, který si budete vytvářet a zkoušet na původních datech. Většinou se používá způsob, že adresu a počet získáváte ze 2 bytů. Představte si tedy, že např. horních 12 bitů tvoří offset v souboru a zbývající dolní 4 bity tvoří počet kopírovaných znaků. Jistě pro vás nebude teď problém zkoušet a zjišťovat, jak to vlastně je kódované. Tyto metody jsou si vpodstatě podobné, jen se liší metodou výpočtu offsetu a počtu. Tato metoda je použita např. ve starších hrách Fallout 1, Dark Seed 2,...
4.3.2 Soubory fyzicky kódované V této kategorii kódovaných souboru je mnoho způsobů, jak soubor zakódovat. Nejčastěji používané metody jsou:
Metoda 1Nejčastěji se vytvoří kódovací tabulka, a pak se pomocí ní soubory překódují. Pokud je použita tato metoda, nezbývá nic jiného než postupným zkoušením zjistit kódovací tabulku a podle ní potom soubory rozkódovat. Tabulka může být libovolně veliká a proto je její hledání časově náročné. Hlavně pokud dosáhne např. velikosti 512B. Tato metoda je použita např. u některých 2DA souborů ve hře Baldur's Gate.
Metoda 2V této metodě se postupně prochází celý vstupní soubor a na výstupu je každý znak zaměněn za jiný, podle předem stanoveného pravidla. Může být použita třeba následující metoda: Předpokládejme, že funkce Ord(c) vrací ordinální číslo znaku c, cIn je vstupní znak a cOut je znak výstupní. Potom může nastat nekonečné množství různých kombinací, jak znak zakódovat. cOut = Ord(cIn) - 1 atd. Tato metoda byla použita např. u her: Incubation, GTA, Jagged Alliance 2, ...
Další způsob, kde se dají najít texty jsou přímo zdrojové soubory EXE a DLL. Než začnete cokoliv editovat v těchto souborech, uvědomte si, že jakákoliv chyba, které se dopustíte, může mít za následek zničení programu, který potom může padat, nebo dělat jiné věci než má. Překlad těchto souborů sebou nese určitá rizika. Jedná se hlavně o to, jakým způsobem jsou texty v těchto souborech uloženy. V některých hlavně starších hrách byl problém překládat, jelikož se musela striktně dodržovat délka textu. Dneska záleží na tom, jakým způsobem programátoři texty vložili. Pokud jsou texty umístěny v tzv. String Tables, neboli jsou vloženy jako Resources, je to docela jednoduché. Existuje totiž docela dost programů, které umí tyto Resources modifikovat a uložit zpět do původního souboru. V tomto případě tento program umí i reindexovat tabulky, které na jednotlivé položky ukazují. Nejjednodušší bude, pokud si seženete na Internetu některý z níže uvedených programů a zbytek uzčitě pochopíte sami.
Pokud načtete některým z těchto programů váš soubor a neobjeví se tam položka String Tables a texty jsou v souboru viditelné, může to znamenat to, že texty byly sice k programu přilinkovány, ale jako jiný typ Resources. V tomto případě zatím nemůžu dáte přímý návod jak to přeložit. Je to z toho důvodu, že je více možností. V tomto případě bude asi nejjednodušší sáhnout po nějakém dobrém Hex Editoru a editovat texty pomoci něj. Občas můžete taky pomocí výše uvedených programů vyexportovat jednotlivé datové bloky z programu a upravit je jako samostatné Resource soubory. Ale to chce přece jen trošku cviku.
|