Blog Tworzę własną grę o piratach #1
Post
Anuluj

Tworzę własną grę o piratach #1

W końcu nadszedł czas żeby co nieco pokazać 😅 Wpis zawiera trochę informacji o mojej grze, jak i krótkie wideo na którym widać obecny postęp prac.

Moim celem jest stworzenie świata, gdzie gracz wciela się w rolę żeglarza, który eksploruje morza, walczy z wrogimi piratami (lub takim zostaje), szuka skarbów i buduje swoją flotę. Będzie w nim równie łatwo będzie się wzbogacić, jak i wszystko stracić. Śmierć bohatera będzie nieodwracalna, jednak świat, po którym się pływa, pozostanie niezmienny i dostępny dla kolejnych podróżników stworzonych przez gracza. Jeśli więc zakopiesz skarb na jakiejś wyspie, to po śmierci będziesz mógł go odkryć kolejnym bohaterem. Wszystko to w biedackim stylu pixelart.

No a przynajmniej taki jest zamysł, aby zrobić coś w stylu roguelike. Do procesu tworzenia używam silnika Defold, w którym pisze się skrypty w języku LUA. Oto wideo pokazujące obecny postęp prac:

Lista funkcjonalności na chwilę obecną jest w teorii dosyć prosta:

  • można pływać statkiem
  • można przesuwać swobodnie mapę, oddalać i przybliżać
  • po mapie pływają losowo NPC
  • można atakować przeciwników aż do ich zniszczenia
  • przy ataku są widoczne efekty specjalnie, dym z armat i kule wpadające do morza

Zaimplementowanie tego wszystkiego wiązało się z pewnymi przeszkodami. Mapa którą widać na wideo nie wydaje się duża, jednak w rzeczywistości składa się z wielu małych kwadracików, tak zwanych “tiles”. Docelowo będzie dużo większa, więc nie ma sensu trzymać jej załadowanej przez cały czas. Takie rozwiązanie skradło by duże zasoby pamięci i gra byłaby w efekcie słabo zoptymalizowana, a więc wstyd na dzielni.

Żeby temu zapobiec, podzieliłem tę mapę na tak zwane „chunki”, czyli zgrupowane kwadraciki o których wcześniej wspomniałem. Gdy gracz porusza się po mapie, ładowane są tylko te bezpośrednio wokół niego lub te które obecnie powinien widzieć na ekranie komputera. Żeby lepiej to zobrazować, możesz wyobrazić sobie tabliczkę czekolady. Jeśli na ekranie miałbyś widzieć pewną jej część, nie ma sensu ładować do pamięci każdego atomu czekolady. Najlepiej je zgrupować w kawałki które łatwo oderwać i pokazywać tylko te, które gracz powinien aktualnie widzieć na ekranie.

Samo strzelanie z armat też było pewnym wyzwaniem. Docelowo w grze będzie kilka typów statków, które mogą przenosić różne ilości armat, które z kolei będą miały rozmaite parametry. Oczywiście nie muszę tego wszystkiego uwzględniać na poziomie pisania prototypu, ale wypadało napisać szkielet tych funkcjonalności, tak aby potem nie grzebać w skryptach i wszystkiego przestawiać.

No więc obecnie w kodzie wygląda to tak, że na statku mam załadowane kilka różnych armat, mają one określone obrażenia, czas przeładowania oraz celność. Atakując inny okręt odpala się autoatak, wylatuje tyle kul, ile armat. Losowość i parametry decydują czy pocisk trafi i jakie zada obrażenia. Do tego dochodzą efekty wizualne. Z nimi to jednak temat na osobny wpis 😄

Jak się tak rozpisałem, to myślę, że może za dużo tego zrobiłem jak na prototyp, ale niczego nie żałuję. Kolejnym etapem jest stworzenie szkieletu sztucznej inteligencji. Statki wroga powinny reagować na atak gracza, odpowiadać ogniem lub uciekać. Fajnie byłoby też przypisać im drużyny, tak aby wzajemnie się ostrzeliwały. Aby to osiągnąć, użyje tak zwanego drzewa behawioralnego. Męczę się z tym tematem już jakiś czas, teoria jest opanowana, ale w praktyce sprawia mi to pewne trudności. O tym napiszę więcej w kolejnym wpisie.

Jeśli masz jakieś pytania, zachęcam do zostawienia komentarza, można to robić anonimowo bez rejestracji.

Do usłyszenia!

Ten post jest udostępniony na licencji CC BY-NC-ND 2.0 przez autora.

Komentarze