12 Jan 2016

Kako da započnem programiranje igara ???


Sećam se da sam pre nekih 5 godina poslao e-mail profesorki sa MIT-a nakon što je na PBS Special-u govorila o veštačkoj inteligenciji. U e-mail-u sam detaljno naveo svoje teorije o razvoju VI, kako se mašine mogu isprogramirati da prepoznaju okruženja, kako se emocije mogu naučiti iskustvom, itd. Na pisanje e-mail-a sam potrošio dobra 4 sata jer sam osetio povezanost sa radom profesorke. Pisanje e-mail-a je bilo uzbudljivo jer me je tema veoma interesovala i želeo sam da se obratim nekome. Dok sam ga pisao, gajio sam veliku nadu da ću dobiti odgovor i sagovornika u toj oblasti, koji bi mi pomogao da krenem sa izradom napredne mašinske VI. Na žalost, odgovor je izostao... Ne znam ni da li je pročitala e-mail

U poslednje vreme, zahvaljujući „Indie“ igri The Movie and Super Meat Boy, dobio sam po nekoliko e-mail-ova, pominjanja na Twitter-u i pitanja Formspring-u dnevno od ljudi koji su tražili savete. Većinu e-mail-ova su slali mlađi fanovi, u potrazi za savetima – od „Koji jezik da koristim“ do „Kako da moja igra dospe na Xbox“. Čitam sve e-mail-ove, ali ne odgovaram baš uvek jer bi mi to oduzelo dosta vremena, a da ne pričam o tome da su međusobno veoma slični.

S pravom se osećam loše kada ne odgovorim jer su to ljudi koji tek kreću i traže nekoga ko će im rasvetliti razvoj igara. Oni rade isto što sam i ja učinio pre mnogo godina, kada sam se obratio profesorki sa MIT-a. Zanima ih šta radim i žele da nauče kako se to radi; žele da se na neki način uključe u razvoj igara. E pa, želim da pomognem, ali nemam vremena, znanja niti nameru da budem predavač... i eto nas. Ova često postavljana pitanja su namenjena svima koji žele bilo kakav savet od mene u vezi sa izradom igara.


Odakle da krenem sa svojom idejom igre iz snova?

Najčešće mi stižu pitanja: „Odakle da krenem“. Čini mi se da je početak najveća prepreka za mnoge, jer ne shvataju da su sve, pa čak i vrhunske igre na tržištu krenule od nule i razvijale se dok nisu postale ono što im je suđeno. Kada vam igra iz snova sedi u glavi i kada načinite prvi korak ka njenom kreiranju, može biti veoma zastrašujuće preći iz mašte u primenu. Za nekoga ko nikada nije pravio igre, nešto jednostavno kao što je kretanje karaktera može biti nešto što deluje kao ogromna, nemoguća prepreka i ubrzo može postati obeshrabrujući poraz. Međutim, ne mora biti tako – ključ je krenuti malim koracima.

Super Meat Boy je počeo kao kvad sa slikom Meat Boy-a na sebi. Mew-Genics je u startu bio crni kvadrat koji se šetao po ekranu. Goo! je u startu izgledao kao krugovi sa smajlijima. Prvi „Game 2“ je bio vektorizovana slika karaktera iz „Game 2“. Sve kreće sa veoma bazičnog nivoa i dalje se razvija.

Veoma je bitno ići korak po korak. Ako se bacite na čitavu igru iz snova odjednom, velika je verovatnoća da ćete postati frustrirani i preopterećeni. Ako toj istoj igri iz snova pristupite sitnim koracima, šanse za ostvarenje vaše vizije eksponencijalno rastu.

Kada igru podelite na male delove, to će vas naterati da analizirate i ocenjujete sopstvene ideje na dubljem nivou. Ovo je ključno jer želite da ostanete otvoreni ka promenama, ne želite da se zaglavite na koloseku sa koga ne smete da skrenete. Odstupanje od plana može stvoriti najzanimljivije delove igre. Ovakav način razvoja je prirodniji jer vas tera da razmišljate u sistemu igre i da primenjujete nove ideje na ideje koje su već formirane.

Dakle, dajte sve od sebe da razradite svoje ideje u malim segmentima koji se mogu lako ostvariti sa veštinama koje trenutno posedujete. Tako je lakše videti napredak, nećete doživeti frustracije tek tako, a kasnije se možete vratiti i nastaviti gde ste stali. Ne zaboravite da ne postoji vremensko ograničenje za lansiranje vaše igre (ako tako krenete, čekaju vas teška vremena). Učite svojim tempom i razvijajte svoje projekte kao što gradite Lego kockama – kockicu po kockicu.

Daću vam detaljniji primer – nastanak igre Super Meat Boy. Kada sam napravio kvad sa slikom Meat Boy-a, povezao sam input da bih mogao da ga pomeram. Kada sam se malo pozabavio time, napravio sam tako da kad pritisnem dugme moj Meat Boy kvad skače, pa sam zatim poradio na tome da se zaustavi kada sleti na platformu, pa da stane kada naiđe na zid, pa da se zalepi za zid, a onda kada se zalepi za zid, da ga na pritisak dugmeta preskoči, a ako naiđe na zeleni kvadrat, gubi život, i tako dalje, dok nisam napisao i poslednju liniju koda igre čime je Super Meat Boy bio završen.

Ni jedan posao nije premali, ni jedan napredak beznačajan. Bitno je da ne upadnete u frustraciju i da nastavite sa radom na svojoj igri.

Koji programski jezik preporučujete?

Ovo je drugo pitanje po učestalosti koje mi stiže i, istini za volju, ne sviđa mi se jer na takvo pitanje ne mogu dati odgovor. Uvek pokušavam da na ovo pitanje odgovorim na sledeći način: „koji god jezik vam najviše odgovara“. Mislim da ovo nije pravi odgovor na pitanja jer imam utisak da ljudi traže konačan odgovor ili da tek počinju i da im ni jedan jezik ne odgovara. Pokušaću da detaljnije odgovorim, kako bih eventualno pomogao ljudima da razumeju način izbora jezika koji je za njih najbolji ili da im pomognem da razumeju da korišćenje onoga što im odgovara predstavlja najbolji početak.

Ako tražite savet u vezi sa programskim jezikom za početak, ne treba da se zamarate pitanjima kao što su „Da li će Flash raditi na iOS-u“, „Da li Xbox podržava Java-u“, ili „Da li XNA radi na Mac-u“. Vaš predvidljiv cilj u startu jeste da igru realizujete, a ne da je objavite ili prodate. Ova pitanja su značajna kada razmišljate o vremenu isporuke, ali isporuka igre je mnogo jednostavnija od njene realizacije. O isporuci igre možete brinuti kasnije.

Pronađite jezik koji vama lično odgovara i počnite da kodirate. U početku je bitno da imate što veće zadovoljstvo. Trebalo bi da što pre dobijete nešto na ekranu, a zatim da nad time radite nadogradnju. Trebalo bi da imate mogućnost da menjate svoje kreacije i da ih lako proširujete. Instant zadovoljstvo predstavlja ključ za motivaciju u početku, ali verovatno nećete želeti da u ovom koraku učite novi programski jezik. Ako pokušate da učite novi jezik dok kreirate igru, velika je verovatnoća da ćete potrošiti dosta vremena čitajući, a kao rezultat ćete imati znanje koje još uvek ne možete primeniti u svojoj igri. Ovo može da bude prilično obeshrabrujuće.

Držite se onoga što znate ili najlakšeg mogućeg puta za sticanje veština da biste započeli rad na svojoj igri. Dakle, ako znate malo Flash-a, koristite Flash; ako inače koristite C++, koristite ga i za razvoj igre, ako znate samo Java-u, koristite je. „Zvanični jezik za razvoj igara“ ne postoji. Ne zaboravite to. Minecraft je pisan u Java-i, Super Meat Boy je pisan u C++, Farmville u Flash-u, neka druga igra koju ljudi igraju u HTML 5, neka opet treća igra koju ljudi igraju je rađena na bušenim karticama. Poenta je u sledećem: jezik nije bitan. Pronađite ugodan način za izradu svoje igre i bacite se na posao.

Nemojte misliti da vam preporučujem da ne učite nove jezike i da ne radite izvan svoje zone udobnosti. Kada se točkovi zakotrljaju, poželećete da napustite udobnost poznatog i da naučite nove stvari ako želite da se razvijate u ovom smeru. O ličnom razvoju brinite kasnije, a u međuvremenu uspostavite svoju bazu i počnite da kodirate.

Ako ne znate ni jedan jezik i tražite odakle da počnete, preporučio bih vam Flash, Game Maker, Unity ili nešto slično. Svi navedeni programi izuzetno olakšavaju da se nešto brzinski nađe na ekranu, sa veoma kratkom krivom učenja. Svakako ne želite da krenete od nečega kao što je C++ ako nemate iskustva sa bilo kojim drugim programskim jezikom i ako jedva čekate da započnete kreiranje svoje igre.


Koje knjige ili tutorijale preporučujete?

Preporučujem dve knjige, koje su namenjene isključivo za razvoj u C++ i uopšte nisu početničke knjige. U pitanju su „Effective C++“ i „More Effective C++“. Ovo su napredne knjige o C++, tako da ako ne znate C++, nemojte misliti „Aha, to mi treba da bih pravio igre“. Ne treba vam.

Osim navedenih, nisam čitao druge knjige. Način na koji ja učim je da iščitavam SDK dokumentaciju. Ovo nije tipičan način učenja, ali ja tako učim.

Preporučio bih vam da odete na internet i potražite odgovarajuće tutorijale. Internet je pun primera programa, tutorijala kao što je NeHe, itd. Ne bih preporučio neki konkretan tutorijal, iz prostog razloga što ih nisam lično prošao, ali znam da postoji obilje raznih online resursa. Siguran sam da ćete uz malu pomoć Gugla uspeti da nađete upravo ono što vam treba.

NE preporučujem vam da kopirate delove tutorijala da biste napravili sopstvenu igru. Tako ništa ne učite, već samo kopirate. Isto važi i za open source programe. Dobri su za razmatranje, proučavanje i kao referenca, ali nisu materijal od koga bi trebalo da pravite svoju igru. Nećete postati dobar i efektivan programer ako kopirate izvorni kod u sopstvenu igru, a pri tom ga ne razumete u potpunosti. Nemojte se zavaravati na ovaj način, uložite malo vremena da razumete nešto pre nego što ga iskoristite.



Koji ste softver koristili za kreiranje igre?

Imam utisak da ovo pitanje postavljaju ljudi koji pretpostavljaju da postoji neki magični alat koji pravi igre umesto vas. Stanje stvari je takvo da postoje alati koji za vas mogu odraditi dosta toga što se tiče endžina. Ako vas ne zanima da učite programski jezik da biste izradili endžin igre, potražite nešto kao što je Unity ili UDK. Oni će vas osloboditi napornog rada i ostaviti vam prostora da jednostavno kreirate igru. Međutim, ovo ima svoju cenu. Sistem koji vam je na raspolaganju kroz ove alate vas ograničava. Ovi alati su puni opcija koje su dobro razvijene, stabilne i fenomenalne, ali ponekad ne rade ono što vi želite.

Lično ne volim ograničenja i zaista uživam da se ozbiljno udubim u razvoj, tako da izbegavam takve alate i igre razvijam na osnovu koda koji sam pisao godinama. To ne znači da Super Meat Boy nije mogao da postoji na nečemu kao što je Unity. Mogao je – do određenog nivoa. Doduše, usled ograničenja, to ne bi bila ista igra, kontrole ne bi bile iste i ne bi izgledala isto. Suština bi bila tu, ali igra kakvu znamo ne. Međutim, sve je do vas. Ponavljam, pitanje je šta vama odgovara. UDK, Unity i slični alati su osnova za neke od sjajnih igara. A ima i igara koje funkcionišu bez njih.

Za razvoj koristim Visual Studio, ali bih isto tako mogao da koristim i Eclipse, Code Warrior, XCode, ili Notepad i kompajler. Kao i kod izbora programskog jezika, nije bitno šta koristite. Ja sam navikao da koristim Visual Studio. Ne koristim neke lude funkcije koje on nudi, već ga koristim kao način da organizujem fajlove izvornog koda, kompajliram i debagujem. Ovo omogućava brdo editora.

Za vizuelni deo i animaciju, Ed koristi Flash. Ja sam napisao rutinu za eksportovanje animacija iz Flash-a jer mi je to bilo lakše nego da pišem alate za Edmund, pa opet, Edmund je najlagodniji za rad sa Flash-om – pa zašto se protiviti! Pisanje alata je zahtevalo da naučim JSFL i rad u Flash-u, ali je to Edu i meni najviše odgovaralo za rad na Super Meat Boy. Za izradu igre vam ne treba moj alat za eksportovanje animacije. Jednog dana ću ponuditi ove alate developerima, ali ne uskoro tako da ih nemojte čekati.


Kako ostajete motivisani da završite šta ste započeli?

Ne postoji tajna održavanja motivacije, pa vam ne mogu dati savet kako da tokom svog projekta ostanete motivisani. Nemam neki specijalan trik niti način razmišljanja koji koristim, kao ni organizacionu radnu listu ili nešto slično. Da bih ja lično ostao motivisan, potrebno mi je da verujem u projekat na kome radim i da uživam u tome. Ako ne volim ono na čemu radim, velika je verovatnoća da to neću završiti.

Poodavno sam počeo da radim na igri pod nazivom Goo! Radio sam na njoj 2 godine, a rezultata niotkuda. Ideja nije bila moja, lično ne bih želeo da pravim takvu igru, pa zbog toga nikada nisam uspeo da je napravim onako kako sam želeo. Prestao sam da radim na toj igri i prešao na Super Meat Boy.

Vreme koje sam utrošio radeći na igri Goo! nisam protraćio jer sam naučio dosta o razvoju, ali igri nije bilo suđeno jer za mene nije predstavljala užitak. Jedini aspekt igre u kome sam uživao je bio višesmerni fizički endžin, na koji sam utrošio najviše vremena. Meni je bilo bitno da radim na toj igri jer sam zahvaljujući tome shvatio da uživanje u igri na kojoj radim značajno olakšava rad. To je vrhunska motivacija.

Kada volite svoj rad i verujete u njega, teško je ostaviti posao nedovršen. Opsednuti ste, želite nešto novo da dodate, da unapredite, i zaista želite da sve dovedete do kraja. Ako verujete u ono na čemu radite, ta vera zablista u gotovoj igri. Veća je verovatnoća da ćete uložiti dodatno vreme da sve sredite i ispolirate, da dodate opcije za koje smatrate da će dodatno unaprediti igru – generalno, da krenete korak dalje i da učinite igru baš svojom.


Kako da moja igra dospe na Steam/Xbox/PS3/WiiU/nešto slično?

Ovo pitanje ne bi trebalo da postavlja neko ko tek počinje, pa čak ni neko ko već radi na svojoj igri. Vaš cilj bi trebalo da glasi „Napraviću dobru igru“, a ne „Moram da ovo objavim na XBLA“. Opšte je poznato kako svoju igru možete postaviti na neku od ovih platformi. Ne postoji tajni e-mail, magični obrazac koji treba popuniti, ne morate poznavati nekoga iz branše, ničiji sestrić ne radi u nekoj od tih firmi da vam ugovori tajni sastanak – ništa slično.

Veoma je jednostavno dospeti na bilo koju platformu – sve što vam treba je dobra igra. I to je to. Stvarnost je surova, a neki odbijaju da poveruju. Viđao sam ljude koji krive sve osim svoje igre kada je u pitanju dolazak na Steam/XBLA/šta-god. Dobra igra će privući pažnju i ozbiljno razmatranje vlasnika platforme sopstvenim kvalitetom uz malo vaše pomoći. Pričajte o igri, pokažite uzbuđenje i ako je igra dobra i svidi se drugim ljudima, vaš entuzijazam će se proširiti na ostale.

Ako igra nije dobra, male su šanse da će završiti na distributivnim platformama. Fokusirajte se na to da igra bude najbolja, ne fokusirajte se na platforme na kojima je možete lansirati. Dobra igra se sama prodaje mnogo bolje nego što je može prodati bilo koja platforma.


Šta ako završim igru i niko je ne želi?

Ako se ozbiljno potrudite i mislite da je vaša igra najbolja stvar ikad stvorena, ali ipak ne možete da obezbedite platformu za distribuciju, nemojte to smatrati neuspehom i znakom da vam nije mesto u ovoj industriji. Retki su oni koji postignu uspeh sa prvom igrom. SMB je bila prva igra koju sam završio, ali pre nje je bilo nekoliko njih koje su završile u ćorsokaku.

U jednom trenutku sam bio na nekoliko koraka od toga da za Sony dobijem ugovor identičan onim za fl0w i Everyday Shooter za igru koju sam prethodno pominjao – Goo! Promena menadžmenta u poslednjem trenutku (bukvalno dva dana pre potpisivanja konačne dokumentacije) je dovela do otkazivanja igre i do toga da mi se Sony više nikada nije javio. Igra nije bila dobra, pa čak i uz ugovor sa Sony-jem je imala šansu da bude završena i da doživi ozbiljan neuspeh. Bolelo je i peklo, ali me nije zaustavilo.

Nemojte dopustiti da vas takav neuspeh liši snova. Ljudi mogu da misle da vam je čedo ružno – nema problema. Nastavite da pravite igre. Neka vas neuspesi motivišu, a jednog dana, uz dovoljno snage i upornosti, ima šanse da ostvarite svoj san.


Zaključak

Napišite svoju igru čime god znate, krenite malim koracima, a o drugim stvarima mislite kasnije. Programski jezici i softver nisu bitni za kreiranje igre, tako da odaberite ono što vam je prihvatljivo ili ono što želite da učite, ali što vam neće oduzeti previše energije u startu. Postarajte se da ostvarite dovoljan napredak koji će vam održati motivaciju i eliminisati frustraciju. Volite svoju igru, pričajte o njoj, radujte joj se i biće teško da na njoj ne radite.

Izvor: How do I get started programming games???