Unreal engine...
1998-ban az Epic Games fejlesztésében jelent meg az Unreal nevű FPS játék,
melynek alapját egy olyan motor képezte, amely egymagában összefoglalta
a grafikus megjelenítést, fizikai számításokat (ütközések), a mesterséges
intelligenciát (AI), a hálózat- és fájlrendszer-kezelést. A motor a játék
nevéről az Unreal Engine nevet kapta (a későbbiekben "UE"-ként
fogok rá hivatkozni). Ez volt az UE első generációja (UE1),
mely az addig elterjedt OpenGL megjelenítésen túl már ki tudta használni
az akkoriban "berobbanó" GlideAPI-s 3dfx grafikus kártyákat (azok
a bizonyos Voodoo-k...)
Kedvenc UE1-es játékom a Clive Barker's Undying volt.
Aztán eljött a 2002-es év, és az akkor megjelenő America's Army-ban debütált
az UE második generációja (UE2), a "rongybaba"
effektusokkal és az UnrealEd pályaszerkesztővel. UE2-vel készült jópár játék
annakidején PS2-re, GC-re és az első generációs Xbox-okra is - az ilyen
konzoljátékok magyaríthatóságát tekintve nem utolsó szempont...
Némi fejlesztgetés után megjelent az UE2.5-ös verzió is (pl. UT2004, UC2).
Természetesen számtalan más játék is készült UE2-vel és UE2.5-el. Én magam
is fordítottam belőlük néhányat (a teljesség igénye nélkül): Men of Valor,
Spider-Man 2.
További fejlesztgetés után 2006-ban a Gears of War-al bemutatkozott az UE
harmadik generációja is (UE3), DirectX 9/10 támogatással,
nemcsak PC-kre, hanem az Xbox 360-hoz és a PS3-hoz is.
Az UE3-ban már van minden, ami "szem-szájnak ingere": HDR leképezés,
dinamikus fény és árnyék effektek, tükröződések, tárgyak rombolása, az (emberi)
testek lágy mozgási fizikája és a nagy számú szereplők mozgásának, viselkedésének
szimulációja.
Az UE3-at is rengeteg játékfejlesztő cég licenszelte, szinte felsorolni
sem lehet az ezzel készített játékokat, így itt is csak azokat írom le,
amelyeket én magyarítottam: Splinter Cell: Double Agent, Rainbow Six: Vegas
1/2, BlackSite: Area 51, Frontlines: Fuel of War.
INT fájlok
Mint fentebb is leírtam, az UE-nek már több verziója is létezik. Azonban
a magyaríthatóság szempontjából egy dolog közös bennük: az esetek 99.99%-ban
a nyelvi fájlok sima text (szöveg) fájlok, amelyek INT
fájlnév-kiterjesztéssel találhatók a játék telepítési mappájában.
Ez egy kicsi pontosításra szorul, ugyanis a különböző UE-verziókat használó
játékokban az INT fájlok máshol találhatók:
UE1:
A "...\játékmappa\system" alkönyvtárba
kerültek a szövegfájlok:
De néha "vicces" kedvükben voltak egy-egy játék fejlesztői. Volt,
hogy szegény hobby-játékmagyarító lefordította az összes INT fájlt, sehol
sem hagyva angol szöveget és a játékban mégis jópár angol szöveg maradt
még, amelyek nem voltak az INT fájlokban.
Ez bosszantó, de nem megoldhatatlan, mert azok az angol szövegek is voltak
valahol. Meg is lehet találni azokat (az Alapok-ban említett TC-szövegkerés
módszer), méghozzá szintén a "\system" mappában lévő ".u"
fájlokban. És ekkor, ha az ember jobban megfigyelte, az összes INT fájlnak
volt egy ".u" megfelelője (pl. "menu.int" és "menu.u").
Vagyis, ha volt olyan ".u" fájl, amelynek nem volt INT megfelelője,
akkor az már gyanús. Ijedtségre semmi ok, ezek kisebb-nagyobb csomagfájlok,
nem ezeket kell szerkeszteni, hanem a bennük "tárolt" szövegeket
INT-be kell kinyerni. Erre ugyanott van a megoldás is: az "ucc.exe"
program a "\system" mappában. A valódi neve: UnrealScript Compiler,
ez egy kicsi, de sokat tudó, DOS-parancsorban használható program, szinte
minden UE1-es játékban ott található meg. A "-dumpint" paramétert
kell használni a paranccsorban (cmd):
ucc -dumpint valami.u
Ennek a parancssornak a hatására, az ucc.exe kinyeri a szövegeket a valami.u
csomagfájlból és azokat elmenti egy szabványos INT fájlba "valami.int"
néven.
(Megjegyzés: Az egyes UE1-es játékok "ucc.exe"-je nem működik
egy másik játékba másolva - mert sajnos voltak olyanok, amelyekbe nem került
bele az ucc.exe, és persze egy-két változatban nem működik a "-dumpint"
paraméter.)
UE2:
Itt is a szövegek alapesetben a "...\játékmappa\system"
alkönyvtárban találhatók, de olyan is létezett, hogy az előbbi mappában
közvetlenül csak a játék motor magjának szövegfájljai voltak, viszont a
konkrét játék szövegei egy másik, "...\játékmappa\maps"
nevű alkönyvtárba kerültek. Aztán később - újabb variációként - szokás lett
az angol nyelvű szövegeken kívül más nyelvek szövegeit belerakni a játékba
(és azokat váltani is lehetett a beállításokban). Jellemző megoldás erre,
hogy a "\system" mappába raktak még egy alkönyvtárat (pl. "...\játékmappa\system\localization").
Aztán ebbe a mappába INT fájlnév-kiterjesztéssel kerültek bele az angol
nyelvi fájlok és ugyanoda kerültek még pl. GER kiterjesztéssel az előbbiek
német változatai, vagy "*.ITA"=olasz, "*.FRA"=francia,
"*.ESP"=spanyol, stb.
Itt két módszer is létezik, hogyan készítsük el a magyarítást:
- vagy a hagyományos módszerrel, az eredeti INT fájlokban írjuk át a szövegeket
angolról magyarra és a szerkesztett fájlokkal felülírjuk az eredeti fájlokat;
- vagy az INT fájlokról másolatot készítünk HUN kiterjesztéssel a "\localization"
mappába, majd a "\system" mappában a sok INI kiterjesztésű fájl
között keresünk egy olyat, aminek megegyezik a neve a játékkal, vagy pl.
"Game.ini", stb. (sokminden lehet a neve, sokszor csak próbálgatással
lehet kideríteni, hogy melyik a jó fájl), majd nyissuk meg szerkesztésre
(pl. Notepad-el) és a [Engine.Engine] szekcióban módosítsuk a "Language"
paraméter értékét "hun"-ra (Language=hun)
A fájl/mappa szerkezetre létezett még egy olyan megoldás is, amikor a játék
online (multiplayer - többjátékos) és offline (egyetlen "szóló"
játékos) módját különválasztották (pl. SC:PT, SC:CT):
UE3:
Itt már kicsit változott a mappaszerkezet. A régebbi UE verziókhoz képest
az UE3-as játékok telepítési mappájában 4 alkönyvtár található: "\Binaries",
"\Engine", "\...Game" és "\Resources".
Magyarítás szempontjából a "\Binaries" nem érdekes". Az "\Engine"
mappában ugyan találhatók INT fájlok (...\Engine\Localization\INT\*.int),
de ezeket nem kell lefordítani, mert ezek a motor rendszerszövegei, a játékos
általában sosem találkozik velük, mert az adott játék, a motor afféle módosításaként
teljesen más szövegfájlokat használ. Az "\Engine\..."-ben lévők
nem jelennek meg.
A "\Resources" mappában annak az ablaknak a szövegei
találhatók több nyelven, amely a játék indításakor jelenik meg és ellenőrzi
az adott játék verzióját, összeveti az interneten elérhető frissítés verziójával
és ha az utóbbi frissebb, akkor azt letölti és telepíti.
És akkor elérkeztünk a lényeghez, a "\...Game"
mappához. Ennek a mappának a neve az egyes játékoknál más és más lehet,
de a tapasztalatom szerint csak a mappanév eleje a változó, de mindig "...Game"-re
végződik. Ezen belül a szövegfájlokat többféle módon szokták tárolni:
- a "...\...Game\Localization\INT\"
mappában az angol "*.int" fájlok (és további "\GER",
"\FRA", "\ITA", stb. mappákban külön-külön *.ger, *.fra,
*.ita, stb. fájlok)
vagy:
- a "...\...Game\content\Locale\"
mappában lévő külön-külön alkönyvtárakban (pl. "\English",
"\German", "\French", stb.) az adott nyelv fájljai.
Anomáliák
Főleg az UE2-vel (és UE2.5-el) és UE3-mal készült játékok között kezdtek
feltűnni a hobby játékmagyarítók dolgát megnehezítő "módszerek".
Az egyik ilyen jelenség, amikor az összes INT fájl lefordítása
után, a játékban egyetlen magyar szó sem látható. Fölöslegesen dolgoztunk?
Nem, de egy kicsit trükközni kell.
A jelenséggel - többek között - a Splinter Cell: Chaos Theory
magyarítói is találkoztak. Kiderült, hogy a játék a feliratokat (és gyakorlatilag
még minden más fájlt is) egy "dynamic-pc.umd"
nevű fájlból veszi, a kint "nyilvánosban" lévő INT fájlok gyakorlatilag
csak tájékoztató jelleggel vannak kitéve. (UMD = Unreal MOD Pack)
A megoldás az volt, hogy ki kellett csomagolni a többszáz megabájtos .UMD
fájl teljes tartalmát az UT2MOD
Extractor-al (vagy "UMOD Extractor" néven is ismert)
és a kicsomagolt részben lévő INT-eket kellett módosítani. Viszont az .UMD
fájlt vette volna figyelembe továbbra is a játék. A fájlt törölni nem lehetett,
úgyhogy azt találták ki, hogy picit módosítják a fájlt azzal, hogy a fájl
elejére egy arra alkalmas kis programocskával beszúrtak egy karaktert, így
az .UMD fájl "létszámban" ott volt, a játék nem visított a hiánya
miatt, de nem azt használta (mert a beszúrással használhatatlan lett), hanem
az így kicsomagolt és módosított fájlokat.
A másik jelenséggel én is találkoztam a BlackSite: Area
51 magyarításomal kapcsolatban. Megtaláltam az egyetlen INT fájlt
az "...\A52Game\Localization\" mappában, csak éppen nem lehetett
szövegszerkesztővel megnyitni. Jobban megfigyelve erről a "Coalesced.int"
fájlról kiderült, hogy több INT fájl van benne "összefűzve" kódolás
és tömörítés nélkül - ismeretlen módszerrel.
Sajnos már nem emlékszem, kitől - utólag is elnézést kérek tőle, mert sem
a Portálos, sem az SG.hu-s PM-jeim között, sem pedig az emailfiókom archívumában
nem találtam a nyomát -, kaptam egy JAVA-s extractor-t, amivel a "Coalesced.int"
fájlt szekeszthető TXT fájllá lehetett alakítani (az összes INT egyetlen
TXT fájlban), amit szerkesztés után vissza lehetett alakítani az eredeti
formátumra.
(Megjegyzem, volt egy hasonló játék - a Stranglehold -, amelyben szintén
egy "Coalesced.int" fájlba fűzték össze az INT fájlokat, de kicsit
más módszerrel, így a fent leírt módszer annál nem működött. Szerencsére
a játék kijött hivatalosan magyarul...)
A következő jelenség ismét egy hajtépkedős eset: Splinter
Cell: Double Agent - ezekkel az SC-kkel mindig csak a baj van...
Már megint nem jelentek meg a lefordított INT-ek ellenére a magyar szövegek....
És már megint egy újabb módszerrel csesztek ki a moddereken és a hobby magyarítókon...
Tehát a szövegek egy részét (menü, HUD, tippek) egy többszáz megabájtos,
ismeretlen csomagolású, "common.lin" nevű "konténerfájlból",
a pályák szövegeit pedig szintén ismeretlen csomagolású "*.ulnc"
kiterjesztésű fájlokból vette figyelembe a játék. Szerencsére mindkét esetben
az INT-ek kódolás és tömörítés nélküli becsomagolt példányairól volt szó.
Megoldás lehett volna a HEX-ben szerkesztés, de a common.lin fájl mérete
miatt túl nagy lett volna a magyarítás mérete és az orosz lokalizációs kollégák
amúgy is jobb módszert találtak ki. Sajnos már megint nem emlékszem, ki
volt, aki felhívta rá a figyelmemet - tőle is elnézést kérek...
A "trükkös Ivánok" azt találták ki, hogy készítettek egy script
alapján működő programocskát, amivel ki lehet cserélni a "becsomagolt"
INT-eket a "kinti", már lefordított INT-ekre a common-lin és az
*.ulnc fájlokban.
Arra kellett vigyázni, hogy a lefordított INT fájlok mérete csak ugyanakkora
vagy kisebb lehetett, mint az angol nyelvű eredetieké. Ez kicsit afféle
továbbfejlesztett HEX-szerkesztést jelent, csak éppen nem szavanként/mondatonként
kell figyelni a karakter-limitre, hanem egész fájlokkal lehet bűvészkedni
és nem kell HEX-szerkesztővel kínlódni, hanem használhatjuk a jól megszokott
szövegszerkesztőnket.
Amikor a fordítás kész volt, egy script fájlban fel kellett sorolni az elérési
helyükkel azokat a konténerfájlokat (common-lin és *.ulnc), amelyekben ki
kellett cserélni az INT-eket, és HEX értékekkel (16-os számrendszer) megadni
az INT fájl elejét a konténerfájlban és az elfoglalt méretét.
UPK fájlok
A további játékmagyarító-bosszantó módszer, hogy a szövegek bekerültek az
UPK fájlokba, és már semmi közük az INT fájlokhoz. (UPK = Unreal Package
File)
Ismét egy orosz oldotta meg a problémát, készített egy programot (Unreal
Package Decompressor), amelynek segítségével szerkeszthetővé tehetők
az UPK fájlokban lévő szövegek. A módszer hátránya, hogy sajnos HEX-ben,
karakterlimittel szerkesztésről van szó...
De még ez is több a semminél - Rapid mester, a Batman: Arkham Asylum
magyarítás készítőjének örömére.