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).
@Gorion103: Właśnie z PoE braliśmy trochę inspiracji, ale zdajemy sobie też sprawę z tego, że ze względu na pracę we dwie osoby i brak mocnego komputera do renderingu nie będziemy w stanie skorzystać z wielu rozwiązań ani uzyskać zbliżonego jakościowo efektu. Niemniej z chęcią zaznajomię się z materiałem i może uda mi się coś zaczerpnąć.
P.S. Efekt zaszumienia zrzutu ekranu z gry w poście wynika z ustawień renderera - na
@11_01_010_1010_00_10: Dzięki zarówno za miłe słowo jak i za uwagę. Nie wykluczam wersji na inne platformy, na ten moment wszystko mam napisane tak, że kod samego silnika gry i skrypty rozgrywki nie są zależne dosłownie od żadnej biblioteki (dependency inversion z dobrych praktyk programowania obiektowego), więc ewentualny port nie powinien być problemem, zwłaszcza że nawet biblioteka, której używam aktualnie wspiera wiele systemów.
Gdyby projekt miał nabierać kształtów i zyskiwać jakieś zainteresowanie to wydawało mi się, że łatwiej będzie walczyć ze słabą konkurencją na mobilkach niż z bardzo rozbudowanymi grami na PC.
@Sulejman7: mobile i PC to zupełnie inny model biznesowy, jeżeli chciałbyś na tym jeszcze zarobić. Projektując i wydając pod PC trzeba się skupić na ilości kopii, w mobile na retencji. Dodatkowo w mobile jeżeli chodzi o
@jakub-goraczka: z braku świadomości istnienia czegoś takiego jak ścieżki technologiczne ¯\_(ツ)_/¯ Dzięki za komentarz, doedukujemy się w temacie i poprawimy :D
@jakub-goraczka: jeszcze raz dzięki za spostrzegawczość. Zmieniłem teksturę na bardziej nieregularną, wzorowaną na polu po ścięciu zboża kosą - a przynajmniej tak wynika z materiałów które znalazłem.
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).
@Sulejman7: O, czyli szykuje się świetna gra z rozbudowanym silnikiem umożliwiającym interakcję ze wszystkim, tylko że z prymitywnym silnikiem, który uniemożliwia interakcję z czymkolwiek XD
Z założenia rozgrywka ma opierać się przede wszystkim na dialogach i eksploracji umiarkowanie fantastycznego
Tak jak pisałem w trzecim zdaniu posta gra powstaje przede wszystkim w celach edukacyjnych, jest to projekt hobbystyczny, nie aspiruje do miana świetnej
@Sulejman7: Powiem tak, jak dla mnie wydawanie tego na mobile to kompletna strata czasu. Rozumiem, że to projekt hobbystyczny, ale macie świetny art. Jeżeli robicie grę desktopową (a wasza taką jest pełną gębą), to możecie później się zastanowić nad portem na mobilki, ale nie odwrotnie.
Projekty wydany na desktopy może wam przynieść jakieś pieniądze, natomiast na mobilkach nie przyniesie wam niczego prócz doświadczenia. Temat wyczerpał już @11_01_010_1010_00_10 - zupełnie
Stwierdziłem, że skoro więcej niż jedna osoba w komentarzach uważa, że może to być wygodniejsze na komputerze to najbliższa wersja będzie dostępna na obu platformach i spróbujemy zebrać opinie na temat tego która wersja jest wygodniejsza i zdecydujemy którą wersję warto rozwijać. Jako, że jest to aplikacja Javova na LibGdx to dosyć szybko udało się uruchomić na komputerze. Duża ilość szumu na zrzucie ekranu to kwestia
@Finsky: Swoją drogą daleki byłbym od deprecjonowania możliwości zdobycia doświadczenia. Ja na przykład realizując hobbystyczne projekty gier nauczyłem się programować, podczas rekrutacji do swojej pierwszej pracy jako programista prezentowałem na rozmowie stworzoną przez siebie grę (podobne założenia tylko jeszcze prostsza implementacja niż w pierwszej wersji obecnego projektu) i na pewno doświadczenie z pisania gier pomogło mi w życiu zawodowym.
Teraz liczymy na podobny efekt w przypadku narzeczonej i grafiki 3D.
@Sulejman7: Nie no, zgadzam się, nie deprecjonuję w ogóle wartości nauki, może źle to ująłem. Chodzi mi o to, że ten screen który macie prezentuje fajną jakość. Na mobilkach prawie nikt w to nie zagra, na Steamie za to możecie mieć nawet małe grono fanów bez większego wysiłku.
Ogólnie proponuję to wrzucić na reddit z dopiskiem, że jest to mobilka, sprawdzisz reakcje większej grupy ludzi.
@Finsky: pod wpływem tych dyskusji myślałem jeszcze o tym co sprawia, że gry tworzą wokół siebie społeczności i wydaje mi się, że tego typu gra kierowana siłą rzeczy dla graczy bardziej wkręconych, niekoniecznie casual mogłaby się promować łatwym moddingiem. Sam tak zaczynałem - tak bardzo spodobał mi się Gothic, że zacząłem robić modyfikacje i dzięki temu nauczyłem się programować. Bez problemu bylibyśmy w stanie udostępnić graczom możliwość tworzenia własnych dialogów,
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
P.S. Efekt zaszumienia zrzutu ekranu z gry w poście wynika z ustawień renderera - na
Na ten moment moja logika była taka:
Po
@Sulejman7: mobile i PC to zupełnie inny model biznesowy, jeżeli chciałbyś na tym jeszcze zarobić. Projektując i wydając pod PC trzeba się skupić na ilości kopii, w mobile na retencji. Dodatkowo w mobile jeżeli chodzi o
Spoko, pisząc 'uwaga' miałem na myśli zauważenie czegoś/zwrócenie na coś uwagi
@Sulejman7: O, czyli szykuje się świetna gra z rozbudowanym silnikiem umożliwiającym interakcję ze wszystkim, tylko że z prymitywnym silnikiem, który uniemożliwia interakcję z czymkolwiek XD
Tak jak pisałem w trzecim zdaniu posta gra powstaje przede wszystkim w celach edukacyjnych, jest to projekt hobbystyczny, nie aspiruje do miana świetnej
Projekty wydany na desktopy może wam przynieść jakieś pieniądze, natomiast na mobilkach nie przyniesie wam niczego prócz doświadczenia. Temat wyczerpał już @11_01_010_1010_00_10 - zupełnie
Stwierdziłem, że skoro więcej niż jedna osoba w komentarzach uważa, że może to być wygodniejsze na komputerze to najbliższa wersja będzie dostępna na obu platformach i spróbujemy zebrać opinie na temat tego która wersja jest wygodniejsza i zdecydujemy którą wersję warto rozwijać. Jako, że jest to aplikacja Javova na LibGdx to dosyć szybko udało się uruchomić na komputerze. Duża ilość szumu na zrzucie ekranu to kwestia
Swoją drogą daleki byłbym od deprecjonowania możliwości zdobycia doświadczenia. Ja na przykład realizując hobbystyczne projekty gier nauczyłem się programować, podczas rekrutacji do swojej pierwszej pracy jako programista prezentowałem na rozmowie stworzoną przez siebie grę (podobne założenia tylko jeszcze prostsza implementacja niż w pierwszej wersji obecnego projektu) i na pewno doświadczenie z pisania gier pomogło mi w życiu zawodowym.
Teraz liczymy na podobny efekt w przypadku narzeczonej i grafiki 3D.
Ogólnie proponuję to wrzucić na reddit z dopiskiem, że jest to mobilka, sprawdzisz reakcje większej grupy ludzi.