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.

Vissza a lap tetejére

Tartalom: