Krajem prošle godine pisao sam o tome kako sam učestvovao na Ludum Dare, najvećem gejm džemu. Ako ste propustili taj tekst, sada je pravi trenutak da kliknete na link i pročitate ga. Ovog puta želim da ispričam kako sam drugi put učestvovao.
Za mene je bio drugi džem, a za sve ostale broj 32, održan od 17. do 20. aprila. Učesnici su glasanjem izabrali temu An Unconventional Weapon, odnosno nekonvencionalno oružje. Iskreno, tema mi se nije svidela. Smatram da igre treba da se udalje od nasilnog rešavanja problema, makar radi raznovrsnosti. Ali tako je kako je.
Pre nastavka preporučujem da pogledate igru na sajtu Ludum Dare kako biste bolje razumeli o čemu govorim. Tamo je i uputstvo za pokretanje Unity WebPlayer igara ako imate najnoviji Chrome.


IGRAJ

Glavna razlika ovog Ludum Dare za mene bilo je vreme. Prvo, tada sam bio, a još sam, u Kaliforniji. Zato je takmičenje za mene počelo u petak u 18:00 i završilo se u nedelju u 18:00: samo jedan ceo dan i delovi druga dva. Za razliku od moskovskog vremena, kada oba dana vikenda možeš da kodiraš do iznemoglosti. Drugo, posao me nije puštao do kasne petkove večeri i pojeo je nekoliko sati subote.
Zato je prva odluka bila svesti sadržaj na minimum. Veliki svet pun jedinstvenog sadržaja nije bio opcija. Ako igra zavisi od sadržaja, rizik da završim džem sa polugotovom igrom bio bi ogroman. Čak sam razmišljao o igri čiji bi ceo sadržaj stao na jedan ekran, poput igara EYEZMAZE. Ali nisam uspevao da zamislim dobru sliku, pa sam odustao.
Drugi zadatak bio je izbor vizuelnog stila koji bi izdvojio igru. Pritom nisam ni umetnik ni modelar sa mnogo različitih veština. Umem ili fotografije u Photoshop, ili low-poly art, u kojem nisam mnogo napredovao od prethodnog Ludum Dare. Tu mi je pomogao film „Grad greha 2“. Prelazak na crno-belu paletu sa retkim mrljama boje zvučao je jednostavno i relativno jedinstveno.
Ali glavni problem ostala je tema igre. Nisam imao spremne ideje za igre sa oružjem. Podsećam, temu džema razmatrao sam kasno uveče posle teškog radnog dana. Glava je pucala, dobre misli nisu dolazile. Posle mučenja odlučio sam da temu odložim i počnem da pravim igru koju bih jednostavno želeo da igram, a sa temom ću nešto smisliti usput.
Srećom, vizija takve igre dugo je sazrevala u mojoj glavi. Ponekad poželim jednostavnu igru sa minimumom upravljanja u kojoj odluke donosi kičmena moždina, a mozak odmara. Nešto gde juriš uz „jupiii“, obilazeći prepreke, ali opušteno. Upravo sa tim poslednjim druge igre žanra imaju problem.
Prvo veče zato sam posvetio osnovnoj mehanici. Kocka koja glumi avion leti iznad terena u fiksnom smeru, a igrač strelicama može da je pomera po preostale dve ose.


Drugi dan počeo je potpunim prepisivanjem kretanja. Najpre sam razdvojio kameru i avion na zasebne objekte. Pre toga avion je bio dete kamere: kamera leti napred, a avion se pomera u odnosu na nju. Ideja je mogla da radi, ali imala je ozbiljan nedostatak. Kada avion stigne do ivice ekrana, umesto njega počinje da se kreće kamera istom brzinom. Avion zapravo nastavlja bočno bez promene, ali vizuelno deluje kao da usporava, jer se avion po ekranu pomera brže nego kamera kroz nivo.
Odlučio sam da ne komplikujem: avion neka slobodno leti unutar nivoa, a kamera neka prati njegove koordinate bez odnosa roditelj–dete, kako ne bi nasledila naginjanje. Bilo bi neprijatno igrati ako bi se kamera bacala kao avion.
Drugi razlog za promenu kretanja bila je potreba da uključim Unity fiziku. Sudari aviona sa preprekama glavni su deo gejmpleja, pa zaslužuju bolje rešenje od oduzimanja HP i prolaska kroz model. Fizika je zahtevala prelazak sa direktnog menjanja pozicije na upravljanje brzinom fizičkog tela. Možda bi pravilnije bilo upravljati silom, ali kada sam pokušao, nisam uspeo da dobijem dobre komande. Prvo pravilo Ludum Dare, kao i razvoja pod vremenskim pritiskom, glasi: ako ne radi i ne znaš kako da popraviš, nemoj to raditi.
Posle osnovne mehanike došao je sadržaj. Kao što sam napisao, vremena je bilo malo i ručno sastavljanje nivoa delovalo je opasno, posebno za gejmplej koji traži veoma dug nivo. Zato sam odlučio da ga generišem. Najpre sam napravio deo terena i automatski ga kopirao do potrebne dužine. Zatim sam napravio nekoliko modela prepreka i ponavljao ih na svakih N metara, nasumično birajući model, razmeru, ugao i položaj u odnosu na početnu tačku.
Kasnije sam sistem usložnio promenom pravila rasporeda prema udaljenosti od početka. Tako se okruženje menja tokom napredovanja igrača: prvo otežavanje povećavanjem razmere, zatim uvođenje novih elemenata. Uz gotovo prazne delove na početku, radi učenja, i na kraju, kao pripremu za finale.
Dodao sam i drugi teren: veliki low-poly model koji se umnožava kao prvi. Ne utiče na gejmplej, ali slici daje dubinu.
Samo osnovni teren:

Zajedno sa drugim terenom:

Da bih gejmpleju dao smisao, dodao sam tri stvari: 1) traku napretka koja pokazuje koliko je ostalo do kraja; 2) poene koji se dalje skupljaju sve brže; 3) mogućnost kupovine unapređenja za te poene između letova.
Iskustvo izrade prethodne igre Fill The Bar, tačnije čišćenje sopstvenih grešaka, naučilo me je radu sa napredovanjem. Prvo, kako sačuvati i učitati napredak igrača. Drugo, svi bonusi treba da povećavaju vrednosti sabiranjem, ne množenjem, da brojevi ne odlete u svemir. Treće, cene unapređenja obrnuto treba da rastu množenjem, da ni igrač ne odleti u svemir beskrajnim unapređenjima; u nekom trenutku razvoj treba usporiti, ali ne naglo. Ako si jednom zaradio za unapređenje, moći ćeš još dva puta isto za sledeće. Pravo balansiranje je, naravno, složenije, ali kao grubo objašnjenje ovo je dovoljno.
Pošto se za poene kupuju korisna unapređenja, oni su nagrada. Nagrada je dobra kada ide zajedno sa rizikom i mami igrača da više rizikuje za veći dobitak. Ovde je rizik očigledan: što niže letiš, opasnije je. Zato sam dodao jednostavan množilac poena pri letu na maloj visini. Takvi letovi i lepše izgledaju.
Tu se završio drugi dan razvoja. Imao sam igru sa potpuno gotovim osnovnim gejmplejem: moglo se stići do kraja nivoa, izbegavati prepreke, skupljati poene i unapređivati avion.
Poslednje jutro počelo je shvatanjem da osnovni gejmplej ne radi bez dugoročnog cilja. Nećeš igrati ako ne znaš zašto. Eh, da sam od početka razradio temu, iz nje bih mogao da izvedem ciljeve, narativ, izgled i ostalo. Ali sada je bilo kasno, priča nije dolazila i trebalo je nekako se izvući.
Ponovo je pomogao postupak kombinovanja postojećih delova slagalice u dizajnersko rešenje. Delovi su bili:
1) Trebalo je obraditi temu „An Unconventional Weapon“.
2) Nisam želeo igru o upotrebi oružja.
3) Bilo je potrebno iznenađenje koje će začuditi igrača.
4) Nešto je trebalo postaviti na kraj puta, neku vrstu cilja.
5) To nešto moralo je biti nejasno kako bi igrač poželeo da sazna šta je.
Svaki deo postao je element slike:
1) Reč Weapon predstavljamo odmah. Igru zovemo „Bomb Bringer“. U glavnom meniju prikazujemo par bombi. Kačimo bombu ispod aviona, ali ne dopuštamo njeno korišćenje bilo gde. Kako radi i šta je u njoj nekonvencionalno igrač će saznati tek na kraju.
2) Naravno, bomba nije prava i ne treba ništa da uništi. Treba uraditi suprotno, da nešto oživi. Na primer, drvo.
3) Da, zadatak je baciti „bombu“ ispod drveta kako bi oživelo i dobilo boje. Upravo ono što treba crno-belom svetu.
4) Postavićemo to drvo na kraj puta.
5) Pošto je drvo na početku mrtvo i bez lišća, njegov oblik može biti agresivan i nejasan. Tako podržava početnu pretpostavku da sa bombom letimo da raznesemo neku nepoznatu stvar.
A sada zagonetka. Nivo treba da bude dug oko 30 kilometara. Na početku moramo videti drvo, a na kraju doleteti do njega. Vidljivost veća od 1–4 km šteti performansama. Ako je drvo vidljivo veliko na početku, na kraju bi jedan njegov poligon bio veličine nekoliko ekrana. Nacrtati ga u pozadini znači reći da objekat nije stvaran i da mu se ne može pošteno prići. Šta uraditi? Razmislite nekoliko minuta pre nastavka.
Bez drveta:

Sa drvetom:

Trik je zakačiti objekat za kameru na velikoj, ali razumnoj udaljenosti. Kada se kamera pomera bočno, svi objekti se pomeraju, a drvo ostaje na mestu, pa ga mozak tumači kao veoma dalek objekat. Pritom povećavam drvo od jedne zadate razmere do druge prema udaljenosti koju je igrač preleteo. Za to koristim omiljenu funkciju Mathf.Lerp.
Sada treba rešiti šta se dešava kada igrač stigne. Radi jednostavnosti izdvojio sam taj trenutak u zasebnu scenu. Bilo bi preteško sve spojiti u razmerama igre. U novoj sceni opet sam varao odnosom veličina drveta i aviona.
Postavimo drvo i malo terena. Postavimo avion i animiramo let oko drveta. Zatim postavimo kameru i njoj animiramo let oko drveta. Bilo bi dobro uraditi to u jednoj animaciji, ali ne znam kako. Zato sam kameru i avion sinhronizovao višestrukim pokretanjem igre.
Završni akord: menjanje boja. Boju materijala nije moguće menjati kroz animaciju, pa pišem kod. Usput otkrivam da promena boje materijala tokom igranja ostaje i posle igre. Posle testa sva grafika iznenada postane šarena. Morao sam i to da poduprem kodom koji materijalima prinudno vraća zadate sive nijanse.
Šta je još ostalo? Ah da, napraviti glavni meni da od početka izgleda raskošno. Pravim mali kanjon u petlji i istom animacijom puštam avion da kruži. Kačim kameru za avion, ali joj zabranjujem naginjanje, tačnije ispravljam je svakog frejma. Malo otklanjanja grešaka i gotovo. Okačio sam bombe i izgledalo je odlično.
Poslednje je bila muzika. To sam odlagao do kraja jer mi uopšte ne leži. Način na koji sam je ranije pravio nije mi se svideo. Želeo sam intuitivnije: potapkaš prstom kako te vodi inspiracija i gotovo. Prst znači ekran telefona, pa sam otišao da vidim šta nudi.
Posle nekoliko programa pronađenih pretragom „music composition“, naišao sam na 
Fingertip Maestro
. Dopao mi se rezultat demoverzije, ali sam morao da platim otključavanje pravih instrumenata.

Pogledaj video na izvornoj platformi


Ispostavilo se da ipak nije jednostavno. Dok pomeram prst, rezultat deluje dobro. Onda ga treba poslati mejlom, pretvoriti u drugi format, povezati sa igrom i shvatiti da je to kakofonija, a ne muzika. Posle nekoliko iteracija našao sam kompromis sa osećajem za lepo. Uostalom, vreme je isticalo.
Gotovo. Pravim verzije, postavljam, proveravam. Ispostavlja se da WebGL ima grešku: završna scena pola sekunde izgleda kako treba, zatim se pojavljuje plavi ekran koji nestaje tek na samom kraju. U drugim verzijama toga nema. Tražim uzrok bez uspeha. Tu boju nigde ne koristim. Verovatno neki sistemski ekran koji nagoveštava grešku. Nažalost, brzo otklanjanje nije moguće. WebGL izgradnja traje oko 10–15 minuta, a postavljanje još 20–30, jer je server u Rusiji, a ja u SAD. Na kraju sam zamenio mesta WebPlayer i WebGL verzijama. Nije, uostalom, toliko teško pogledati WebPlayer verziju: uputstvo stoji iznad svake igre na sajtu Ludum Dare.
Za kraj možete pogledati isti proces na ubrzanom snimku uz muziku iz igre, uključujući neiskorišćene numere.

Pogledaj video na izvornoj platformi


Na kraju bih sumirao, tačnije naveo gde sam pogrešio i šta je trebalo poboljšati:
1) Bez unapređenja brzina leta je prespora da bi pružila uzbuđenje. Ili je trebalo pustiti da brzina raste bez ograničenja.
2) Zvukova uopšte nema. Mogao sam makar da ozvučim klikove i udarce.
3) Temu džema treba odmah otkriti, inače je mnogi neće razumeti i daće negativnu ocenu.
4) Narativ, priču, likove i ostalo želeo sam da dodam, ali nisam uspeo.
5) Više raznovrsnosti u preprekama. Hteo sam varijante kupola koje pucaju na igrača, ali nisam stigao.
6) Igra je ispala bez humora, pa sam morao da je povučem iz te kategorije. Humor je dobar i pomaže širenju igre.
7) Čudo je da ljudima nije muka od moje muzike. Treba mi pouzdaniji način njenog stvaranja.
8) Na završnu scenu potrošeno je više vremena nego što treba trošiti na nešto što mnogi neće videti.