Nisam bas siguran kako se tacno pise postmortem, ali ovde cu pokusati da iznesem svoja iskustva iz prve (i poslednje) igre koju sam napravio, Protector 2000.
Prica pocinje sredinom 2003 godine, kada sam, vrativsi se iz vojske, poceo da razmisljam o pravljenju svoje 2D video-igre (3D je ipak prevelik zalogaj za prvi put). Imao sam prilicno iskustva u programiranju tako da nisam sumnjao u svoje mogucnosti, ali programirati video igru je prilicno drugacije iskustvo od pravljenja desktop aplikacija, sto tada naravno nisam znao.
S obzirom da sam radio u Delphiju odlucio sam se da u tom programskom jeziku pocnem praviti igru, sto se kasnije pokazalo kao velika greska. Proces je poceo razmatranjem grafickog API-a koji sam trebao koristiti i izbor je pao na OpenGL jer mi se cinio dosta laksim od DirectX-a. Ideju za igru mi je dao jedan prijatelj koji je obozavao tu igricu na commodoreu. U pocetku sam mislio da igru izdam kao freeware ali posle su apetiti poceli da rastu (zasto i ja da malo ne zaradim ;).
Komplikacije su pocele vec na samom pocetku posto OpenGL ne podrzava sprajtove tako da sam crtao kvadratni poligon na ekranu i na njega lepio teksturu, menjajuci vise tekstura (frejmova) u toku sekunde, dobivsi na taj nacin animaciju helikoptera. Ovakav pristup se kasnije dosta zakomplikovao kada je trebalo uneti animaciju rotacije helikoptera ali na kraju posle dosta muka sam sve nekako ukomponovao. Takav pristup je inace dosta komplikovan i bilo kakva izmena zahteva dodatno doterivanje koda i ispravljanje bagova (ili sam ga ja zakomplikovao zbog svog neiskustva).
Savladavsi OpenGL proces izrade je poceo da napreduje i nakon nekoliko meseci sam dosao do prve beta verzije koja je bila relativno igriva. S obzirom da nista nisam znao o time movement funkcionisanju igre sve sam bazirao na frame movement sto je kod mene kako-tako radilo ali je na drugim kompjuterima islo presporo ili prebrzo. Nakon neuspelih eksperimenata da limitiram FPS (frames per second) na odredjen broj slicica u sekundi poceo sam sa ucenjem time movement funkcionisanja i posle dosta dana mucenja i vise od polovine prepravljenog koda dobio sam relativno zadovoljavajuc rezultat. Tada se pojavio sledeci problem: kontrole. Posto sam input sa tastature citao preko delphijevih funkcija u toku igranja sa dva igraca jednom od igraca bi se blokirale kontrole ukoliko bi drugi drzao neki taster pritisnut. Ne moram da pominjem koliko je to bilo frustrirajuce pa sam uvideo da moram preci na DirectInput (deo DirectX-a koji sluzi za hvatanje inputa sa tastature, misa, dzojstika) ako zelim da mi igra bude igriva. Tada se otkrila greska koju sam napravio na samom startu: Delphi je sacuvaj-me-boze podrzavao DirectX, odnosno zvanicne podrske nije bilo vec su postojale neke user-contributed biblioteke i to za starije verzije Delphija (ne znam da li je sada bolje po tom pitanju) tako da sam imao dosta muka da to sve nastimam da radi kako treba. I to je vec nekako proslo kada se pojavio novi problem: kako ubaciti zvuk u igru? Ne moram da pominjem da za svaku igru ozbiljniju od Tetrisa windowsova PlaySound funkcija ne dolazi u obzir te sam se odlucio za OpenAL (verovatno sam zaobisao DirectSound zbog prelepih iskustava sa DirectInputom). Naravno, ni OpenAL nije imao neku zavidnu podrsku za Delphi pa je i tu bilo muka ali je na kraju i to uspelo da proradi. Najvecu muku kod zvuka mi je zadavala osobina (bug?) kod OpenAL-a da pod Windowsom 98 generise 32 sound sourcea a pod XP-om samo 16 (a igra je mislila da ima 32) pa su se tada gubili neki zvucni efekti. To sam otkrio i ispravio tek kod trece revizije.
Kada je doslo do programiranja AI-a entuzijazam mi je bio vec prilicno opao, mesecima sam radio a kraj se jos nije nadzirao. Odlucio sam se za "state machine" vrstu "inteligencije" tj. u AI u odredjenom trenutku radi iskljucivo jednu stvar dok se ne desi neki uslov za promenu radnje. Iako je radio jednostavne funkcije bio je prilicno komplikovan za programiranje i na kraju je doslo do ogromne i nepregledne FOR petlje sa desetinama komplikovanih IF-ova koje nisi mogao da uhvatis ni za glavu ni za rep. Trebalo mi je 4 revizije da ga ispeglam i da donekle funkcionise i ako je i dalje prilicno glupav :)
Tokom developmenta nisam imao nikakav design dokument i ceo koncept sam drzao u svojoj glavi sto se opet pokazalo kao greska jer sto sam vise napredovao vise su mi i rasli apetiti tako da sam mnogo puta prepravljao vec uradjeno i peglao bagove koji su tada nastajali.
Nakon sest meseci od pocetka rada prva verzija je bila gotova. Strpljenje me je vec bilo izdalo i zeleo sam sto pre da izdam igricu (i zaradim brdo para ;) iako je nisam ni propisno istestirao. O marketingu nisam nista znao a o placenom hostingu i reklamama nisam ni razmisljao posto je budzet igre bio $0 + moje vreme i zivci. Sklepao sam neku prezentaciju na free hostingu (gde i danas stoji) i nasao sam neki program koji je postovao informacije o igri na stotine shareware sajtova te sam proveo jos dosta neprospavanih noci i potrosenih internet sati. Planirao sam da placanje za registraciju igre ide preko nekog sajta cije ime vise ne mogu da se setim, uglavnom doticni mi je zatvorio nalog (i moje nade u brzo bogacenje ;) nakon 3 meseca zbog nedostatka prometa (odnosno niko mi nije kupio igru).
Ukupni bilans nakon 7-8 meseci rada, krvi, truda i znoja ;) bio je $0. Prilicno razocaravajuce, mora se priznati. Tada sam naucio lekciju kako ne treba praviti igre i da u danasnje vreme, ako zelite uspeti na prezasicenom shareware trzistu, sami mozete veoma malo uraditi. One-man-team je odavno prestao da bude isplativ.
Nisam napisao ovaj tekst da bih nekoga odvratio od game developmenta, napisao sam ga kako bih izneo svoje greske u nadi da ce neko ko pocinje sa razvojem igara nesto nauciti iz njih i, nadam se, proci mnogo bolje od mene u tom poslu. Od samog pocetka se mora imati jasno definisan cilj i razradjena ideja i pre pocetka rada je potrebno da se stvari prvo zapisu, sa definisanim fazama razvoja, i u toku razvoja se ne sme odstupati od toga. Verujte mi, postedecete sebe dosta nevolja. Suvisno je da pominjem da je danas lepa grafika od presudne vaznosti pa ukoliko niste talenat za graficki dizajn kao ja i nemate coveka koji koji bi vam to odradio, ne morate ni da pocinjete projekat, veoma su male sanse da cete uspeti.
Jos uvek volim igrice ali se vise ne bavim game developmentom. Presao sam na web development, jeste mnogo dosadniji posao ali je zarada sigurnija :)
Iako nisam imao nikakve materijalne dobiti ostalo je jedno lepo secanje i, moram priznati, izvestan ponos sto sam ipak do kraja zavrsio jednu video-igru.
Pozdrav za sve