2012-07-14

Doom 3 Source + LAN Coop modifikacijos


Tie, kas kartais pažaidžia PC žaidimus, greičiausiai žino tokią legendinę pirmo asmens šaudyklės (first person shooter - fps) žaidimo Doom seriją, kuri pasirodė dar 1993 iš „Id Software“ studijos. Iki šios dienos išleistos trys šio žaidimo dalys – paskutinė Doom 3 dalis 2007 metais ir jos papildymas Resurrection of Evil. Tuo metu šis žaidimas vykdė revoliuciją žaidimų grafikos industrijoje – buvo naudojami naujoviški apšvietimo (framebuffer blending) ir tūrinių šešėlių (shadow volumes) efektai, žaidimo variklis buvo pavadintas kaip naudojantis Id Tech 4 technologiją. Dar prisimenamas ir garsus 2002 metų žaidimo alpha versijos nutekinimas, kuriame jau buvo matyti naujosios technologijos, o dėl palikto derinimo režimo su žaidimu sunkiai susidorodavo net sparčiausios to meto grafinės plokštės. Dėka sugalvoto „Carmack‘s Reverse“ šešėlių algoritmo ir šio žaidimo kūrimo, tapo žymus John Carmack, Id Software įkūrėjas-programuotojas. Na ir žinoma, jau tada buvo pasinaudota šešėliavimo kalbų (shading languages) teikiamomis galimybėmis, o iš kompiuterių buvo spaudžiamas maksimumas. Šiandien šis projektas vis dar gyvuoja, kalbama apie kitas dalis ir atnaujinimus. Ką galima išbandyti prisimenant Doom 3 žaidimą, bandysime išsiaiškinti šiame straipsnyje. 


I. Atviras išeities kodas

Šį žaidimą prisiminiau ne be reikalo. 2011 metų lapkričio mėnesį buvo išleistas šio žaidimo pilnas išeities tekstas (source code). Tai graži tradicija, kurią sugalvojo ir puoselėja pats John Carmack. Taip atsitiko ir su kitais Id Software žaidimais – Quake, Return to Castle Wolfenstein ir pan., visų jų kodas paviešintas ir laisvai prieinamas. Visiems hackeriams, koderiams ir pan. atsidarė durys laisvai modifikuoti išeities kodą savo reikmėms ar jį tobulinti, o galbūt net ir pasimokyti? Tam net susibūrė grupelė entuziastų ioDoom3, siekdami patobulinti esamą kodą, įdiegti naujovių ir sutvarkyti, jog būtų galima lengvai sukompiliuoti žaidimo variklio kodą.
Žinoma, jog šis žaidimas puikiai veikia tiek Windows, tiek ir Linux ar Mac OS. Tai vienas iš to meto privalumų ir išskirtinumų. Daugelio platformų palaikymą tuo metu pavyko pasiekti naudojant OpenGL grafinę biblioteką nei kad dabar masiškai tik Windows aplinkoje apribotą naudoti Microsoft DirectX posistemę. Be to, dabar grafinių procesorių sparta yra tikrai gerokai patobulėjusi, palyginus su to meto grafikos plokštėmis, todėl praktiškai visi kompiuteriai nesunkiai susidoroja su šiuo žaidimu. Išvada viena – puikus žaidimas mėgstantiems fps žanrą, veikiantis praktiškai visur ir dabar laisvai prieinamas modifikacijoms.

II. Kompiliavimas

Prieiga prie kodo susidomėjau ir aš – smalsu pasižiūrėti į kodavimo stilių, visą variklio architektūrą, tvarkingumą ir pan. Atsimenu, dar Quake 3 kodo peržiūrą – tai įspūdžiai buvo tikrai ne kokie visais aspektais. Doom 3 variklis parašytas C++ kalba, turi net savo virtualią mašiną skriptų komandų vykdymui! Daugiau apie architektūrą galima paskaityti Fabien Sanglard svetainėje. Na, aišku norėtųsi, kad dar pasisektų ir sukompiliuoti – tai iš viso būtų šaunu. Reikia dėkoti ioDoom3 vaikinukams, kurie sugebėjo pakankamai gerai sutvarkyti kodą, jog nereikėjo daug modifikacijų. Parsisiuntus išeities kodą, galima pabandyti paeksperimentuoti.
Visą, jau kiek pataisytą, kodą galima parsisiųsti iš ioDoom3 puslapio, Git repozitorijos. Taip pat visą kodą(su pakeitimais) rasite ir šio straipsnio pabaigoje. Be to pridedu ir binary versijas. Pats variklio projektas sukurtas Microsoft Visual Studio projektu, todėl lengvai atsidarė ir be didelių problemų susikompiliavo. Kitas atvejis – sukompiliuoti kodą Linux aplinkoje. Čia jau teko įsirašyti porą bibliotekų, kol visos klaidos buvo pašalintos. Detalesnis Linux komandų sąrašas nuo kodo parsisiuntimo iki instaliacijos yra  pateikiamas apačioje:

mkdir doom3
cd doom3

sudo apt-get update
sudo apt-get install git

git clone git://git.iodoom.org/iodoom3/iodoom3.git

sudo apt-get install g++ g++-multilib gcc-multilib zlib1g-dev 
sudo apt-get install libglu1-mesa-dev freeglut3-dev mesa-common-dev
sudo apt-get install libxxf86vm-dev libopenal-dev libasound2-dev
sudo apt-get install scons

cd iodoom3/neo/
scons NOCURL=1

Sėkmingos kompiliacijos atveju turėtų gautis:

Install file: "build/debug/core/sys/scons/doom" as "doom.x86"

Install file: "build/debug/game/sys/scons/libgame.so" as "gamex86-base.so"
Install file: "build/debug/d3xp/sys/scons/libgame.so" as "gamex86-d3xp.so"
scons: done building targets.

III. LAN modifikacijos

Po viso kompiliavimo proceso ir redagavimo, gauname binarinius failus: DOOM3.exe bei gamex86.dll (Windows) arba DOOM3 bei gamex86.so (Linux). Prie viso šito reikia turėti ir originalų Doom 3 žaidimą, kad būtų prieinami visi žaidimo duomenys – tekstūros ir t.t. Jei neturite – visada galima įsigyti. Toliau po žaidimo instaliavimo telieka pakeisti šiuos failus žaidimo direktorijoje ir galima pradėti žaisti. Rekomenduojama dar prieš tai įsirašyti visus Doom 3 patch'us.
Bet teko susidurti su keletu problemų, apie kurias dar nekalbėjau ir dėl kurių negalėsite pažaisti singleplayer ar net LAN‘e su draugais (nebent turite daugiau nei vieną originalią žaidimo kopiją arba raktą).  Tai autentifikacijos patikrinimo problemos, ypač Linux atveju. Kiekvieną kartą paleidžiant yra tikrinamas žaidimo raktas. Laimei išeitis yra – turime išeities kodą, galime paredaguoti jį. Sprendimo būdas – atlikus paiešką „CDKEY“ išeities kodo failuose galima rasti vietas, kurias reikia pakeisti. Paprasčiausias metodas visus CDKEY_INVALID pakeisti į CDKEY_OK, tokį sprendimą siūlo forume.


Aišku, problema išsisprendžia, bet tik iš dalies – kuriant žaidimo multiplayer serverį ir jungiantis klientu prie jo yra tikrinamas žaidimo raktas Master žaidimų serveryje. Čia jau reikės pasistengti ir ilgai paprakaituoti analizuojant kliento – serverio komunikaciją. Suradus Master server adresą galbūt būtų galima surasti ir modifikuojamas vietas?


Iš tikrųjų teko pusdienį pasikankinti bandant išnarplioti komunikacijas tarp serverio, teko panaudoti ir log‘inimą ir paderinti kai kurias vietas. Vis atsirasdavo vietos, kuriose dar autentifikacija nebuvo pilnai išimta. Teko paredaguoti AsyncClient ir AsyncServer kodo failus. Na bet vis dėl to sėkmingai LAN tinkle pavyko pažaisti tiek su draugais, tiek ir su kitais multiplayer dalyviais, išbandyti Coop Mod‘ą. Pilną pataisytą kodą rasite straipsnio pabaigoje.

IV. Papildymai – Mods

Taip pat reikėtų pakalbėti apie papildymus ir patobulinimus šiam žaidimui. Vienas iš man labiausiai patikusių – Last Man Standing Doom Coop modas, leidžiantis žaisti keliese ir visą žaidimo istoriją (campaign) pereiti kartu su draugų komanda. Taip pat yra ir Survival režimas, kuriame puola priešų bangos ir turite atsilaikyti kuo ilgiau, o finale – detonuoti bombą.

   

IV. Pabaiga

Taigi, tikslas buvo sėkmingai įgyvendintas - paanalizuotas Doom 3 kodas, išbandytas naujas įdomesnis žaidimo režimas. Rezultatas pasiektas – keletas dienų smagaus pasižaidimo su draugais naudojant coop mod‘ifikaciją. Sekant šviežiomis naujienomis žadama išleisti patobulintą Doom 3 BFG Edition žaidimą 2012-10-16 su naujomis zonomis, ginklų modifikacijomis. Turėtų patikti "užkietėjusiems" žaidimo fanams. Taip pat jau kuriama ir Doom IV dalis – kai išeis, siūlau išbandyti.

Source - ioDoom3-source-2012.07.14-fixed
Binary - ioDoom3-bin-2012.07.14-win32

Komentarų nėra:

Rašyti komentarą