3 sierpnia 2017 | Kamil Kozłowski | 11 minut | #gamedev
W miniony weekend postanowiłem w ciągu niecałych 48 godzin stworzyć w pełni działającą grę komputerową. Czyli, innymi słowy, wziąłem udział w pewnym game jamie w Warszawie.
Byłem na Slavicu drugi rok z rzędu, i ponownie towarzyszył mi mój przyjaciel Kuba Rogalski, z którym stworzyliśmy dwuosobowy zespół programistów.
“Dwóch programistów i kropka” to nie jest rozsądna struktura teamu. Co doprowadziło zresztą do wielu niespodziewanych przygód i zmagań.
Ale przecież jeszcze nigdy nie pisałem tutaj o grach, prawda? Więc aby dobrze przedstawić, co się wydarzyło od piątku 28. do niedzieli 30. lipca w budynku Polsko-Japońskiej Akademii Technik Komputerowych, zacznę od podstaw. A zatem:
Czymś bardzo fajnym.
To wydarzenie, na którym tłumy programistów i artystów gromadzą się, by w bardzo ograniczonym czasie tworzyć gry komputerowe. Może trwać tydzień, może trwać dobę, może trwać i godzinę.
Przed przystąpieniem do pracy, uczestnicy dzielą się na zespoły. Nie ma ograniczeń co do ich rozmiarów — ale też nie ma najmniejszego sensu, by było one większe niż pięć osób. Specyfika pracy na czas nie pozwala marnować czasu na zbytnie zarządzanie ekipą.
Praca rozpoczyna się w momencie ogłoszenia tematu jamu – do którego gry muszą się odnosić swoim gameplayem, żeby nie dało się przychodzić z gotowymi grami, czy nawet pomysłami.
Ważne jest, żeby przed game jamem wybrać jakiś ogólnodostępny silnik gier (najlepiej taki na literkę U), który będzie stanowił goły fundament produkcji. Możesz próbować zrobić coś w oparciu o surowe biblioteki graficzne, ale użycie gotowego silnika – nawet jeśli nie będzie jakiś szczególnie rozbudowany – zastąpi ci kilka miesięcy pracy.
Piątek wypełniony był prelekcjami, oraz masowym polowaniem na grafików.
Wśród sześciu prelegentów był Karol Krok, który opowiadał o tym, że gry komputerowe wywodzą się z teatru – i że dorobek wybitnego reżysera Jerzego Grotowskiego zawiera wiele wskazówek co do projektowania wirtualnych doświadczeń. Sjoerd de Jong z Epic Games pokazywał, jak z użyciem Unreal Engine 4 stworzyć grywalny szkielet gry w półtorej godziny; i musiało mu być trochę smutno, kiedy okazało się, że jakieś 90% zgromadzonych pracuje tylko na konkurencyjnym silniku Unity.
My należeliśmy do tych 90%.
Okno edytora Unity z naszym projektem z game jamu. W dolnym panelu widać wszystkie sześć modeli, z których korzystaliśmy w grze.
Może i jest słabsze niż Unreal, ale – w odróżnieniu od niego – tak idiotoodporne i pozbawione granic w błyskawicznym realizowaniu najbardziej absurdalnych pomysłów, że jest wymarzonym narzędziem dla kogoś, kto nie spał od trzydziestu sześciu godzin i właśnie wypił n-tą kawę.
Pewnie dlatego tyle tytułów indie powstało właśnie na Unity.
Zwykle na imprezy tego typu przychodzimy już ze zwerbowanym grafikiem, ale tym razem nam się nie udało. Dlatego od samego rana, aż do ogłoszenia tematu, prowadziliśmy intensywne
i ewentualnie trzeciego programistę, bo planowaliśmy coś naprawdę dużego.
Problem z grafikami miało wiele innych zespołów, które kręciły się nerwowo po korytarzach, szukając jakichkolwiek humanistów – zupełnie bezskutecznie.
Ostatecznie doszliśmy do wniosku, że wszyscy artyści schowali się w jakimś sekretnym pomieszczeniu, aby przeczekać apokalipsę programujących zombie.
W piątek o osiemnastej ogłoszono temat jamu, który brzmiał
Pisałem wcześniej, że lepiej nie przychodzić na game jam z gotowymi pomysłami, prawda?
Na szczęście gotowy pomysł z którym przyszliśmy, dobrze pasował do tego tematu. Postanowiliśmy stworzyć strategię czasu rzeczywistego (troszkę w stylu StarCrafta) z jedną, ogromną mapą, po której poruszamy trzema typami jednostek, i próbujemy zniszczyć bazę wroga, podczas gdy nasza armia rośnie wykładniczo. Do tematu odnieśliśmy się poprzez pewną wariację na temat mgły wojny, a mianowicie – jej brak. Od samego początku możesz rozglądać się po całej mapie, ale nie wiesz, jakie są wrogie jednostki, dopóki nie rozświetlisz ich którymś z wielu reflektorów na mapie. Identyfikowanie wrogów jest niezwykle ważne, bo wszystkie trzy typy jednostek kontrują się nawzajem bardzo brutalnie, jak w “Kamień, papier, nożyce” (zresztą w kodzie gry noszą właśnie takie nazwy).
A, i gra nazywa się Swarmer, bo przewodzisz rosnącemu rojowi.
Nasze jednostki (zaznaczone kółkami) walczą z wrogiem wchodzącym w stożek światła. W oddali widać niezidentyfikowane jednostki i budynki.
Kilkanaście godzin po rozpoczęciu pracy doszedłem do dość oczywistego wniosku, że to było jednak kompletne szaleństwo. Złożona rozgrywka, konieczność balansowania postaci, czasochłonny level design, i wymóg optymalizacji (na mapie mogło się jednocześnie znaleźć ponad 500 jednostek). A byliśmy tam tylko we dwóch. Bez nikogo, kto potrafiłby tworzyć grafikę.
Czy zatem porzuciliśmy ten projekt? A skąd.
Widzisz, najważniejszą umiejętnością podczas game jamów i innych hackatonów jest rozbijanie zadań na mniejsze elementy i priorytetyzacja ich wykonywania — zatem już w pierwszych godzinach udało nam się sklecić jakieś chodzące i atakujące jednostki, które dało się zaznaczać, choć wokół nich była tylko wielka nicość. W ten oto sposób, prawie na samym początku mieliśmy już prototyp, do którego dało sie doklejać kolejne funkcjonalności. Na co komu tworzenie kompletnych systemów gry i systematyczne integrowanie ich, jak Pan Bóg przykazał?
Przecież w 48 godzin nie zdążysz zapomnieć, jak działa twój rozmemłany kod.
W sobotę, największym wyzwaniem było stworzenie prawdziwej grafiki i animacji dla naszej gry ponieważ, jak już wspomniałem, pracowaliśmy tylko we dwóch – i żaden z nas nie był grafikiem. Kuba zdołał co prawda wymodelować stożek i kilka kamieni low-poly, co zrobiło na mnie wrażenie, jednak na dłuższą metę musieliśmy zastosować coś, co nazywamy
W Unity jest wbudowane kilka tzw. prymitywów, czyli bardzo podstawowych modeli, takich jak sześcian, kapsułka, czy kula. Dobrze nadają się do upraszczania kolizji “prawdziwych” modeli stworzonych przez grafików, ale można ich też używać do tworzenia tymczasowej grafiki.
My natomiast stworzyliśmy z nich grafikę, która nie była tymczasowa.
Te trzy "modele" budynków zostały stworzone wyłącznie z użyciem dużej liczby sześcianów i walców. Za całą architekturę prymitywną odpowiadał Kuba.
W porządku, to są statyczne konstrukcje. Ale jak z sześcianów zbudować i wyanimować coś, co zachowuje się jak żywa jednostka w bitwie?
Odpowiedź brzmi: z sercem.
Dopilnowaliśmy, żeby nasze kulki i sześciany wyglądały żywo zarówno wtedy, kiedy walczą, jak i wtedy, kiedy im się nudzi. Każdy zachowuje się inaczej; rozgląda się dookoła, przeciąga się, albo przebiera nogami, tak że ich tłum wygląda jak zbiorowisko niepowiązanych istot.
Po rozwiązaniu problemu z żywymi postaciami, zaczęliśmy zapełnianie gigantycznej mapy (przejście tej gry ostatecznie zajmuje jakieś 20 minut), tworzenie dodatkowych budynków, ciągłe balansowanie jednostek, oraz szlifowanie podstawowych mechanizmów, żeby w Swarmera w końcu zaczęło się przyjemnie grać. To spory nakład żmudnej pracy – którą sami na siebie sprowadziliśmy – jednak cel miał być tego wart.
Był to też ten moment w którym akcja gry trafiła na pustynię. To nie była decyzja ani artystyczna, ani gameplayowa. Po prostu to było pierwsze stworzone metodą prób i błędów środowisko, które wyglądało dobrze w grze.
Spanie na klawiaturze, pusty energetyk, i orzeszki ziemne, to dobre podsumowanie każdego game jamu, który jest na półmetku. Na obrazku pracuje Kuba.
Naprawdę, naprawdę planowałem ponownie wrócić do swojego noclegu w sobotę wieczorem, i poudawać odpowiedzialnego dorosłego, aż do momentu gdy zorientowałem się, że już od czterech godzin trwa niedziela.
Największym wyzwaniem trzeciego dnia było pozostanie na nogach aż do finałów. Przynajmniej – dzięki temu, że nie zmrużyłem oka przez całą noc – w końcu udało mi się zdążyć na śniadanie, serwowane o dziewiątej rano.
Jedna z innych sal PJOTK, wypełniona dżemującymi ludźmi w środku nocy.
Ostatkiem sił dodałem do gry jakąś darmową muzykę i menu pauzy. Po czym i tak pracowaliśmy jeszcze parę godzin, aż pośpiesznie wysłaliśmy zgłoszenie (termin upływał w niedzielę o 12:00), i poszliśmy poznać odpowiedź na pytanie:
A było tam wiele bardzo ciekawych tytułów.
Powstała dwuosobowa gra o mordujących się nawzajem, modyfikowanych genetycznie chomikach z bazookami, którym raz na kilkadziesiąt sekund zmienia się sterowanie (na “nieznane”).
Powstała gra o magu, który rzuca nieznane mu zaklęcia ze zwojów, a inni mogą mu dokuczać przez komendy na Twitchu.
Powstała strzelanka FPP, w którym wrogów widzimy, tylko patrząc przez specjalne gogle (które nie pozwalają strzelać, gdy są w użyciu). Platformówka o mężu, który musi znaleźć telefon w torbie swojej żony. Gra, w której Stalin i Reagan sterują tą samą rakietą nuklearną, aby uderzyć nią nie w swoją półkulę.
A także bardzo nietypowa platformówka o samotnej kropce, w którą właściwie to musisz zagrać, żeby zrozumieć jak jest świetna.
Podczas wydarzenia powstało ponad 80 gier.
Patrząc choćby na opisy tych tytułów, pewnie już się domyśliłeś, że
Swarmer tak naprawdę nie opiera się na żadnym fajnym “myku” w projekcie rozgrywki. Powstał dlatego, że chcieliśmy dowiedzieć się, jak stworzyć sprawnego RTS-a. To był dla nas wystarczająco duży eksperyment. I choć ostatecznie udało nam się go doprowadzić do końca, i wyciągnęliśmy z niego wiele wniosków, to najważniejszy z nich brzmi następująco:
Nigdy więcej skomplikowanych gier na game jamie. Wymagają szalenie dużo pracy, i nie da się przedstawić ogromu przedsięwzięcia podczas krótkiej prezentacji.
Poza tym, zawsze brać ze sobą artystę na game jam, a następnie nie spuszczać go z oka. Podczas wydarzenia nie masz szans, by po prostu kogoś takiego znaleźć. Ale z drugiej strony: jeśli umiesz tworzyć grafikę 3D do gier, lub sprite’y 2D, to możesz iść na Slavica nawet bez drużyny. Będziesz najważniejszą osobą w budynku.
Ponadto, placeholder art nadaje grze unikalny styl i czyni ją zaskakująco ładną, ale jego tworzenie odciąga programistów od ich właściwej pracy. Dlatego należy się do niego uciekać jedynie wtedy, kiedy jest jedynym wyjściem, jakkolwiek kuszący by nie był.
Przy okazji, wiele kluczowych elementów RTS-a da się zaprogramować śmiesznie małym nakładem pracy. Trzeba tylko wiedzieć, co się robi.
W wersji ostatecznej, nasza gra posiada wszystkie kluczowe elementy gameplayu, i da się ją ukończyć. Wydaje się dość trudna w pierwszych momentach, ale był to celowy zabieg: zaczynasz osaczony przez wrogów, by po kilku minutach niszczyć ich już dziesiątkami, jak prawdziwy, nikczemny Rój, którego nic nie może pokonać.
Gra nie posiada natomiast ani samouczka, ani wskazówek. Przyjmijmy, że to część tematu, “Unknown”. Wszystko robisz przyciskami myszki, a rolka pozwala poruszać kamerą.
Grę możesz pobrać z Itcha.
Tak jak rok temu, wyłonienie zwycięzców miało dwa etapy. Najpierw podzielono zespoły na osiem grup półfinałowych, które prezentowały swoje gry w jednym pomieszczeniu, a następnie przez głosowanie wybierały, kto trafi do finału. Później, w finale, na wielkiej auli, wszyscy uczestnicy jamu głosowali, aby wybrać najlepszego z ośmiu finalistów.
Swarmer nie wygrał nic, ale gra która przeszła dalej z naszej grupy, SPICEDERS2000 była tak dobra, że nawet mi nie było żal. Tutaj przy okazji pojawia się moja jedyna krytyka organizacji tego wydarzenia: wybieranie tylko jednej gry (z około dziesięciu) w “fazie grupowej”, przez dosyć małe grono odbiorców, wprowadza sporą losowość co do tego, jakie gry dostaną się do finału. Ciekawe, jakie fajne tytuły trafiły na drugie i trzecie miejsca w swoich grupach, a mogły trafić na pierwsze, gdyby były w innej grupie.
Teraz to brzmi jakby jednak było mi żal za Swarmera, więc zaznaczę: na takim wydarzeniu nie ma dużego znaczenia kto wygra, bo liczy się zabawa i zdobyte umiejętności. Nagrodami dla najlepszych zespołów były jedynie statuetki oraz bilety na inne, zbliżające się game jamy — co jest w sumie świetnym rozwiązaniem, bo nie wprowadza jakiegoś zauważalnego elementu rywalizacji. To by było zupełnie niepotrzebne.
W finale, najlepszą grą została DoT, czyli ta gra o kropce, o której pisałem wcześniej. Drugie miejsce zajęły POLTERGUNS, a trzecie – Forgot How To Hamster, czyli tamta gra o naparzających się chomikach.
Slavic Game Jam ponownie był bardzo udanym wydarzeniem, i nie żałuję żadnej godziny na nim spędzonej. Pewnie wybiorę się na niego za rok, ale tym razem bez ogromnych pomysłów na wielkie produkcje.
Tylko zabawa.