Automatski prevod arhiviranog ruskog teksta. Snimci i tekst na slikama ostaju na izvornom jeziku. Pročitaj original na ruskom
Ukratko o materijalu
Priča o samostalnom stvaranju igre Fill the Bar za dva dana: priprema, ideja, izrada sadržaja i predaja na Ludum Dare. Glavni postupak projekta je neočekivan prelazak sa jednostavnog 2D ekrana na trodimenzionalni svet.
Tokom dva slobodna dana, 6–7. decembra, napravio sam igru od nule za Ludum Dare. Sada želim da ispričam kako je to bilo. Ali najpre predlažem da pogledate samu igru. Obavezno uključite zvuk.
Šta je Ludum Dare? Ludum Dare je međunarodno takmičenje na kome za ograničeno vreme treba napraviti igru na zadatu temu. Postoje dve kategorije: Jam i Compo. U kategoriji Jam možete učestvovati timski i koristiti unapred pripremljene ili javno dostupne resurse. Rok je 72 sata. Drugi format, Compo, zahteva samostalan rad i izradu svega od nule. Dozvoljeno je koristiti ranije napisan kod, ali na kraju morate objaviti izvorni kod. Vremensko ograničenje za Compo je 48 sati. Detaljna pravila možete pročitati ovde. Nekoliko činjenica: * Takmičenje se održava od 2002. i verovatno je najpopularniji džem za brzi razvoj igara. Na poslednjem takmičenju napravljeno je 2538 igara. * Markus „Notch” Persson, tvorac igre Minecraft, kada je napuštao svoju kompaniju napisao je u oproštajnom pismu: “I will leave Mojang and go back to doing Ludum Dares.” * Lucas Pope, tvorac igre Papers, Please, takođe često učestvuje. * Na Steamu možete naći 16 igara koje su nastale na Ludum Dare-u. * Predstavnici ruske indi scene redovno učestvuju. Na primer, tim Molecats, Aleksej „DiscoFish” Starovojt, Aleksandar „Dyn” Pavlov. Kada sam sredinom novembra saznao da će sledeći Ludum Dare biti održan za vikend 6–7. decembra, nisam mogao da odolim učešću. To je bila prilika da uđem u međunarodnu indi zajednicu i privučem pažnju velikih imena.
Priprema unapred Oduvek sam smatrao da je dobra priprema pola pobede. Zato sam unapred odlučio da odgovorim na pitanja koja će se pojaviti bez obzira na temu. Endžin Prvo pitanje, naravno, bio je izbor endžina. O tome nisam morao mnogo da razmišljam. Za takvo takmičenje najvažnija je veb-verzija igre, kako bi što više posetilaca zaista i zaigralo. Moj izbor bio je Unity, jer sam ga već prilično dobro poznavao kroz rad na igri „Message Quest”. Mogao sam da odaberem i Flash: njegove mogućnosti dovoljne su za konkurentnu igru. Za razliku od GameMakera, koji ne samo da nema pristojnu veb-verziju već tera autora da se osloni samo na golu ideju. Igre napravljene u njemu koje pristojno izgledaju mogu se nabrojati na prste jedne ruke. Mada sam svojevremeno u tom endžinu pravio igru za Android. Unreal Engine 4 se posebno umešao tako što je dan pre početka takmičenja počeo da deli kodove za probni period od 90 dana. Unity je podelu probne Pro verzije najavio unapred. Mislim da je, uz iskustvo pravljenja igara u UE4 i brzo modelovanje s bump i specular mapama, moglo da se prođe zahvaljujući grafici. Ali svi radovi u UE4 koje sam našao među učesnicima imali su klijentsku verziju tešku do 800 MB, užasnu grafiku i nikakav gejmplej. Mislim da je Epic trebalo da pripremi učesnike pre deljenja ključeva. Grafika i zvuk Zatim sam video dva velika rizika. Igra mora da ima pristojnu grafiku, a ja ne mogu da napravim ni nepristojnu. Crtam užasno. Možda bih mogao da se istaknem fotografijama, ali to je loša ideja za veb-igru: fotografije su velike, pa bi se igra učitavala duže nego što neki imaju strpljenja. Igra mora da ima i muziku. Iako korisnici pregledača obično više vole tišinu, na ovom takmičenju većina igara ima muziku, pa bi se njen nedostatak izdvajao kao mana. Za grafiku sam video samo jedan izlaz: pojednostavljenu stilizaciju. Nešto poput piksel-arta, ali ne baš piksel-art, kojeg mi je već bilo preko glave. Da sam radio u Flashu, možda bih našao nešto u vektorskoj grafici, ali izbor Unityja podstakao me je da proučim low poly art, koji već dugo posmatram. Uz to, low-poly grafika je lagana, baš ono što treba za veb-verziju. Ispostavilo se da prvi koraci nisu toliko teški koliko sam se plašio. Najpre sam pokušao da sastavim grafiku od primitiva u Unityju: pravio sam grubu mrežu terena, postavljao i razvlačio kocke i kugle. Nije bilo naročito. Teren je i dalje skrivao neravnine i pravio meke prelaze između materijala. Zatim sam, posle razgovora sa Stanislavom Gajljunasom, autorom igre Molecats, odlučio da naučim Blender. Editor je brz, besplatan i za njega postoje video-lekcije o low-poly grafici. Bilo je dovoljno da ponovim sve korake iz lekcije da se snađem u novom alatu i naučim bar nešto da napravim. Tako sam posle sat vremena učenja zamenio teren i drveće od primitiva sopstvenim low-poly modelima. Počelo je mnogo više da liči na ono što sam želeo.
Sledeće pitanje bilo je pravljenje muzike. Tu nisam imao ni iskustva ni obrazovanja, pa sam se obratio zajednici. Odgovorio mi je Jevgenij Vinakov i preporučio program Musical Palette za pravljenje MIDI muzike prema pravilima muzičke teorije i LMMS za dodavanje instrumenata. Oba programa su javno dostupna. Musical Palette ima ugrađeni tutorijal i sistem saveta. Već nekoliko minuta posle pokretanja počelo je da nastaje nešto nalik muzici. Sa LMMS-om bilo je još lakše: trebalo je samo da zamenim instrumente i sačuvam u standardnom audio-formatu. Unity ne podržava MIDI, i s pravom: pištanje i zujanje standardnih „instrumenata” veoma zamara. Mada je taj format vrlo kompaktan za veb-verzije. Da bi LMMS mogao da menja instrumente, potrebna mu je biblioteka instrumenata u formatu SoundFont. Internet je veliki, pa nije teško pronaći nešto standardno. Ali zamrzavanje editora pri izvozu jeste problem. Srećom, zaobišao sam ga izvozom preko komandne linije: lmms.exe <ime projekta> -o <ime izvoznog fajla> -f <format, na primer wav>. Zatim sam rezultat učitao u Audacity, takođe besplatan, i ponovo ga sačuvao u željenom formatu i s potrebnim kvalitetom.
Rešio sam tehnička pitanja koja su me brinula. Preostalo je samo da proučim pobednike ranijih takmičenja kako bih razumeo potreban nivo. Za sebe sam ga oblikovao kao skup zahteva: Tumačenje teme treba da bude originalno, ali lako razumljivo. Igra treba da bude zaokružena. Slika, gejmplej, zvuk — ništa ne sme da zaostaje. To treba da bude celovito iskustvo. Igrač treba da stigne do kraja za 5–15 minuta. Osnovni gejmplej treba da bude zabavan sam po sebi, bez metagejmpleja. To je dobro objašnjeno u knjizi The Art of Game Design kroz razliku između igara i igračaka. Kasnije, gledajući radove drugih učesnika, video sam kako ih je koštalo izostavljanje neke od ovih stavki. Igra je lepa, ali dosadna. Tumačenje je zanimljivo, ali igra nije završena. Zabavna je, ali grafika je loša i tema promašena.
Prvi dan Takmičenje počinje objavom teme u petak uveče, što je po mom lokalnom vremenu bilo u subotu u 6 ujutru. Nije imalo smisla ustajati tako rano. Pa šta ako drugi počnu ranije — ranije će i otići na spavanje. A učestvovati neispavan u kreativnom takmičenju je glupo. Zato sam spavao do 9, pogledao temu — Entire Game on One Screen — i nastavio da ležim, razmišljajući o njoj u polusnu.
Naravno, prvo sam odbacio ideju da se cela igra odvija na jednom ekranu. To je previše očigledno. Uz to, to je tema koju treba protumačiti, a ne pravilo koje treba poštovati. Počeo sam da prebiram po idejama za igre koje su mi već dugo sazrevale u glavi i proveravam kako se uklapaju u temu. Prvo poklapanje bila je ideja da koristim novi UI u Unityju 4.6, koji omogućava da ekran interfejsa lebdi u 3D prostoru umesto da bude zalepljen za kameru. Druga ideja, takođe podstaknuta tim ažuriranjem endžina, bile su brojne dugmadi i trake napretka. Svi znamo koliko je prijatno gledati traku koja se puni. U mozgu nam je duboko usađena težnja da dovršimo nedovršeno. Druga ideja bila je obavezna upotreba low-poly grafike. Nisam je valjda uzalud učio. Treća ideja bila je korišćenje sintetizatora govora. Ranije sam razmišljao o tome kako indi autori obično izostavljaju glasovnu glumu jer je skupa i zahtevna. Ali ako su svi likovi roboti, sintetizator govora je sasvim prikladan. Sve se to složilo u jednostavnu priču u duhu Portala. Postoji pljosnat svet traka, gde igrač obavlja besmislene radnje zato što to računar traži. A postoji i lep 3D svet u koji lik može da pobegne. Ali sreća traje samo dok ne pronađe mobilni telefon. Poruka je otprilike da od vlasti računarskog ekrana još možemo pobeći tako što se pomerimo u stranu, ali od vlasti ekrana telefona više nemamo kud. Čim se ta slika složila u glavi, počeo sam da radim. Cilj prvog dana bio je potpuna gruba verzija gejmpleja, sa svim potrebnim funkcionalnostima i privremenim zamenama ključnih resursa. Do kraja dana verzija je trebalo da bude u stanju da se, uz stid, objavi. Drugi dan posvetio bih doterivanju: zameni privremenih elemenata, razradi sveta i pisanju muzike. Najpre sam u Unityju napravio scenu od ravne platforme, FPS kontrolera i lebdećeg canvasa s dugmetom i zelenom trakom napretka — sliderom sa isključenom ručicom. Pritiskom na dugme traka se puni, a zatim ponovo prazni. U bilo kom trenutku možete pritisnuti dugme da prekinete pražnjenje i ponovo je napunite. Zatim sam napravio drugu, crvenu traku, koja se puni dok se prva prazni. U prvu staje 100 proizvoljnih jedinica, a u drugu 200. Dakle, zelenu traku treba dvaput potpuno napuniti i isprazniti da biste napunili crvenu. Zatim sam napravio ekran za unapređenja: tri dugmeta na podlozi, kako bih sva tri pomerao jednim potezom. Odlučio sam da prva dva ubrzavaju napredovanje, a treće bude dekorativno. Da li igrač želi brže da stigne do besmislenog rezultata ili će radije urediti „radno mesto”? Prve opcije unapređenja vrte se ukrug, dok se poslednja menja, nagoveštavajući jedinstven napredak. Zato igrač pre ili kasnije treba da odabere konačnu verziju trećeg unapređenja. Važno je da do toga dođe sam, bez nagoveštaja. Kada igrač uzme poslednje posebno unapređenje, počinje provera da li je pritisnuo S — korak unazad u WASD kontrolama. Ako jeste, uključuju se FPS kontrole, pojavljuje se tačka u centru ekrana i malo se menja FOV. Sada je trebalo napraviti lokaciju kojom igrač može da šeta. Tu nije moglo bez klasičnog planiranja. Znao sam polaznu tačku — mesto na kome stoji računar. Zadatak je bio da odredim šta ga okružuje. Odmah da kažem: odabrao sam generičko okruženje kako bi bilo odmah prepoznatljivo. Zadatak šeme je da odredi koji elementi postoje i kako su međusobno raspoređeni. Zatim sledi konkretizacija na šemi u razmeri. Kada dobijem šemu na kojoj se vidi položaj planina, počinjem da pravim visinsku mapu. Bojim glavne površine: gde može da se hoda, gde su putevi, gde ne može da se hoda i gde je voda, takođe neprohodna. Dodajem nekoliko jela kao merilo veličine. Mozak zna prosečnu veličinu jele, pa prema njima može da proceni udaljenosti. Od ovog trenutka može da počne testiranje igranjem. Cilj prvog testa je da se razmere i opšti oblici procene iz ugla igrača. Plašio sam se da će lokacija biti mala i da ću morati da je proširujem, ali testiranje je otklonilo sumnje. Veličina je bila taman: dovoljno da se prošeta, ali ne prevelika da ne bih stigao da je uredim. Tada sam ostavio mapu po strani i prešao na telefon, svojevrsni cilj koji igrač treba da pronađe šetajući lokacijom. Kao i računar, telefon je jednostavan model s canvasom na mestu ekrana. S modelom telefona pojavio se čudan bag. Kad god bi kamera bila usmerena ka telefonu, menjala se boja neba, iako model i nebo nisu delili materijale. Problem sam rešio tek brisanjem modela i pravljenjem novog. Ako neko zna šta može da izazove takav bag, neka mi javi. S telefonom je bio još jedan problem, izazvan mojim neznanjem rada s novim UI-jem. Dodajući tekstualna polja, menjao sam height i width da bih ih smanjio. Zato je čak i font veličine jedan bio prevelik. Kasnije sam saznao da je trebalo koristiti scale. Još jedan zadatak bio je da telefon bude okrenut ka igraču kako bi tekst sigurno mogao da se pročita. U kameru igrača dodao sam nevidljiv objekat čije su koordinate bile cilj do kog telefon dolazi pri aktivaciji. Za glatku promenu koordinata koristio sam Vector3.Lerp. Tako je telefon dolazio u centar ekrana bez obzira na to gde igrač stoji i gleda. Podešavanje nije odmah uspelo. Da ne bih svaki put ponavljao celu početnu sekvencu punjenja traka, napravio sam dugme za varanje koje odmah uključuje hodanje, a telefon sam stavio blizu početne tačke. Dan se završio. Zahvaljujući pravovremenom radu, imao sam verziju u kojoj je moglo da se puni traka, odmakne od računara, prošeta jednostavnom lokacijom, pronađe telefon i time završi igra.
Drugi dan
Došlo je vreme da računar dobije glas. Isprobao sam nekoliko sintetizatora i izabrao ovaj . Odabrao sam glas Lee, jer nije previše prijateljski. Sintetizovani rezultat bio je previše kvalitetan, pa sam dodao efekat Duration Long da mu dam veštačke prizvuke. Dodavanje prvih replika računara mnogo je promenilo igru. Prvo, pojavila se glasovna gluma, što je retko u tako malim igrama. Drugo, pojavio se lik. Treće, pojavila se povratna reakcija na postupke igrača. Punjenje traka više nije bilo samo mehanička radnja, već način komunikacije s likom. Na početku računar objašnjava pravila igre, kao tutorijal kakav poznajemo iz drugih igara. Ali sva ta pravila prikazana su pored njega na ekranu, kao radno uputstvo. Zatim je računar naučio da komentariše izbor unapređenja. Ako igrač bira ona koja ubrzavaju napredak, računar ga hvali. Ako bira posebna unapređenja, osuđuje izbor, svaki put sve oštrije. Ali na poslednji izbor ne reaguje, kao da ne primećuje promenu. Igrač ipak vidi prava pravila i vidi šta treba uraditi da bi se situacija promenila — prekršiti pravilo. Kada se igrač udalji od računara, potrebna je replika koja ga poziva da se vrati, kao i replike za slučaj da se zaista vrati. Igrač čuje da računar uživa svaki put kada pritisne dugme — svojevrsno objašnjenje njegove motivacije u svemu tome. Posle glasova prešao sam na modelovanje okruženja: razradu pejzaža i dodavanje objekata. Postojećoj jeli dodao sam 2 vrste drveća, 2 vrste žbunja i 3 vrste kamenja. Jele sam postavljao u jednom delu mape, u grupama od 2–4. Jednu u grupi pravio sam primetno većom, a ostale manjim. Neke sam izduživao po visini pa smanjivao da izgledaju kao mlada stabla. Sva stabla malo sam okretao u različite strane kako se ne bi videli obrasci.
Mapa je bila puna detalja, ali bez suštine. Zato sam odlučio da dodam velike jedinstvene objekte: prvo svetionik, pa kulu. U početku sam želeo da se na kulu može popeti, ali nisam uspeo da rešim koliziju. Kada je objekat od jednog mesha, sve radi. Kod složenog objekta kolizija pravi čuda: pogrešnu veličinu i ugao rotacije. Nisam imao vremena da istražujem, pa je kula ostala neprohodna za penjanje. Pokušaji dodavanja oštećenja dali su čudan rezultat, koji sam razradio tako da liči na oči i usta. Ako igrač u kuli vidi lice, može da izmisli priču o tome. Telefon koji igrač može da pronađe stavio sam na posebno modelovan panj. Ali nisam želeo put do njega — ko pravi puteve do panjeva? Zato se našao kao slučajno pored staze koja vodi na čistinu. U nedostatku mašte, na čistinu sam stavio običnu logorsku vatru. Dobijeni prizor kasnije sam upotrebio kao naslovnu sliku igre, da pokažem da u njoj ima lepote i nagovestim da taj pogled mogu videti samo oni koji prođu pored telefona. Nažalost, nisam smislio šta da radim sa svetionikom, kulom i vatrom. Objekti postoje, može im se prići, ali šta dalje — nije jasno. Najbolja ideja bila je da se uključi ženski glas koji priča istoriju tog mesta. Ali nikakve smislene priče nisu mi padale na pamet, naročito na engleskom. Ako ideja ne dolazi, treba nastaviti dalje. Sada razumem i da je obrt od sumornog 2D-a ka šarenom 3D-u dobra ideja, ali igra ipak počinje sumornim 2D-om, što mnoge može da odbije. Samo jednostavnost gejmpleja i glasovi mogu da ih zadrže. O pisanju muzike ne mogu da kažem ništa naročito korisno. Samo sam pomerao tačke u Musical Palette-u, pa isprobavao zamenske instrumente u LMMS-u. U Unityju sam podesio da pri udaljavanju od računara njegova muzika ne samo utiša već da počne i druga muzička tema. Telefon je dobio i melodiju zvona da bolje privlači pažnju. Telefon koji zvoni mnogo više podstiče na radnju nego cigla koja samo leži na zemlji. Zatim poslednja podešavanja položaja kamere, malo petljanja s brojkama unapređenja, sastavljanje verzije i završno testiranje. Sve radi. Postavljam verziju i izvorni kod na svoj server, pripremam prijavu i objavljujem. Igra je napravljena i predata. Sada treba obilaziti druge igre, ocenjivati ih i čekati 20 dana do završetka glasanja.