Od jakiegoś czasu zajmujemy…

Od jakiegoś czasu zajmujemy się z narzeczoną tworzeniem amatorskiej gry na telefony z systemem Android inspirowanej tytułami takimi jak Gothic (interakcje bohatera z postaciami niezależnymi, sposób budowy modelu świata) czy Baldur’s Gate 2 (oprawa graficzna). Z założenia rozgrywka ma opierać się przede wszystkim na dialogach i eksploracji umiarkowanie fantastycznego świata. Na ten moment robimy to przede wszystkim w celach edukacyjnych (narzeczona uczy się grafiki 3D, ja jestem programistą i mam okazję eksperymentować z różnymi konceptami dotyczącymi architektury projektu), a dla mnie to też spełnienie marzenia z dzieciństwa. Mimo to staramy się zbierać opinie innych, ponieważ pomagają nam one odpowiednio kierować pracami i ulepszać grę.

Od strony kod większość gry powstaje w czystym Kotlinie, do integracji z platformą użyty jest LibGdx, ale sama gra nie jest pisana w LibGdx ani od niego zależna – jest on zintegrowany w formie modułu implementującego interfejsy definiowane przez grę i mógłby być wymieniony na dowolną bibliotekę oferującą ten sam zestaw funkcji bez potrzeby ingerencji w kod samej gry.

Jeśli ktokolwiek jest zainteresowany to chciałem opisać kilka rozwiązań technicznych, może ktoś kto też w wolnym czasie tworzy gry będzie w stanie z tego skorzystać.

Renderowanie świata

W naszym pierwszym podejściu do tematu próbowaliśmy z rysowanymi grafikami w rzucie top-down (zrzut ekranu)- efekt był jednak daleki od zadowalającego, w związku z czym postanowiliśmy spróbować ze wstępnie renderowanymi grafikami w rzucie izometrycznym. Z początku oparliśmy grę na pojedynczych, reużywalnych obiektach i zacząłem pisać edytor map (wideo), jednak i to rozwiązanie nie przypadło nam do gustu, ponieważ wygląd świata za bardzo podkreślał strukturę kafelków.

Na ten moment przygotowujemy całość mapy w Blenderze. Miejsca, w których mają nastąpić kolizje zaznaczamy czarnymi wielokątami umieszczonymi w osobnej kolekcji, wo osobnych kolekcjach przechowujemy też tło (teren, niskie rośliny) i obiekty pierwszego planu (takie, które mogą zasłonić gracza). Oto jak wygląda prototyp przykładowej sceny (zrzut ekranu).

Rendering poszczególnych kafelków i składanie ich w mapę następuje automatycznie przy pomocy stworzonego w tym celu skryptu w Pythonie – iteruje on po wszystkich kafelkach, odpowiednio konfiguruje kamerę i trzykrotnie zmienia widoczność poszczególnych warstw aby osobno wyrenderować mapę kolizji, tło i pierwszy plan. Dla przykładowego kafelka efekty końcowy wygląda następująco (zrzut ekranu). Następnie przy uruchomieniu gra upraszcza mapę kolizji z formy graficznej do zbioru współrzędnych kafelków, które są zablokowane (w przyszłości ten etap mógłby się odbywać poza aplikacją, na przykład podczas budowania).

Po uruchomieniu gry otrzymujemy taki efekt (zrzut ekranu).

#gamedev #indiegamedev #blender #libgdx #kotlin #gothic #hilmar #android