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
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.
Binary - ioDoom3-bin-2012.07.14-win32
Komentarų nėra:
Rašyti komentarą