[Libgdx] TAnima - MMO Rogue-like


#1

Cześć.
To mój pierwszy wpis na tym forum. Mam nadzieję, że nie pominąłem czegoś istotnego. :slight_smile:

W wolnych od pracy chwilach rozpocząłem nowy projekt gry. Teraz ma już jakieś 2 miesiące. Niestety nie mam jeszcze grywalnego dema. Gra jest jeszcze na wczesnym etapie produkcji. Opis poniżej:


Wstęp:

TAnima (nazwa robocza) to gra z gatunku rogue-like nastawiona na rozgrywkę sieciową.


Fabuła:

04.06.2141r e.w.i (Ery Wielkiego Imperium)
Rozpoznawczy oddział Imperium dociera do odkrytego niedawno nowego sektora wszechświata w poszukiwaniu form życia i źródeł surowców.

01.02.2142r e.w.i
Na jednym z księżyców planety X-247 odkryto kilkuset kilometrowy kryształ nieznanego pochodzenia. Imperium rozpoczyna badania.

14.07.2144r e.w.i
Nieznany obiekt wykazuje wysoce energetyczne własności przy stosunkowo niskim poziomie promieniowania. Po serii prób okazuje się, że można nim zastąpić niestabilną technologię jądrową. Surowiec dostaje nazwę “Karn”. Zostaje wdrożony plan budowy kopalni nasadkowej. Do układu dociera krążownik budowlany.

23.03.2147r e.w.i
Budowa zostaje ukończona. Kopalnia przybiera kształt wieży porastającej kryształ. Na księżyc zostaje sprowadzony personel regimentu wydobywczego.

11.12.2148r e.w.i
Po ponad roku prac wydobywczych okazuje się, że Karn wykazuje właściwości istoty żywej. Następuje eksterminacja personelu górniczego przez abominacje będące przeciwciałami układu odpornościowego kryształu. Nadzorca dystryktu wprowadza plan przemiany placówki w kolonię opartą na programie resocjalizacyjnym. Kompleks przywdziewa nazwę “TAnima”.

03.10.2149r e.w.i
Zostaje wdrożony program resocjalizacyjny. W celu zmniejszenia strat personelu, jednostki poddane kuratorium zostają wyposażone w środki do obrony w zamian za ciągłe wydobycie surowca. By zapewnić stymulację Karnu poprzez systematyczne zwalczanie przeciwciał, wchodzi w życie dyrektywa mowiąca o natychmiastowym zwolnieniu z programu każdego, kto dotrze do szczytu TAnimy. Do układu docierają pierwsze jednostki poddane opiece Imperium. System wchodzi w życie.

12.03.2431r e.w.i (teraźniejszość)
Budzisz się jako podopieczny na pierwszym poziomie wieży.


Mechanika:
W aktualnych założeniach gra będzie wyglądać w następujący sposób:

  • Gracz podłącza się do serwera i ląduje w mieście (hubie) zależnym od piętra, na którym się aktualnie znajduje
  • W hubach widać innych graczy. Tu jeszcze nie wiem czy nie zrobię instancji w zależności od liczby graczy przez wzgląd na czytelność. Nie zastanawiałem się nad tym bardziej, ale czytelność przy zbyt wielu graczach wygląda na potencjalny problem.
  • W miastach znajdują się NPC i przejścia do lokacji. Te ostatnie są limitowane co do liczby graczy w zespole (dla zespołu są tworzone osobne instancje). Myślę jeszcze nad skalowaniem lokacji w zależności od liczby graczy.
  • Część lokacji jest opcjonalna i ich przejście kończy się uzyskaniem lepszego ekwipunku i innych fantów, które pomogą w przejściu głównych lokacji
  • Główne lokacje prowadzą do kolejnych pięter wieży
  • Gracz zyskuje tytuły i punkty sławy po ukończeniu questów pobocznych i/lub przejściu lokacji. Tytuły z punktu widzenia rozgrywki nic nie znaczą. Być może będą wpływać na rozmowy z NPC (i potencjalnie na questy poboczne)
  • Gdy gracz umrze, traci wszystko po za zdobytymi tytułami i punktami sławy. Rozpoczyna ponownie grę na najniższym poziomie wieży.
  • Punkty sławy można wymieniać na ulepszenia wizualne i dodatkowe profity (np limitowane czasowo przejęcie funkcji naczelnego kuratora- prymitywny panel admina wmontowany w grę)
  • Punkty sławy można kupić za rzeczywiste pieniądze
  • Nad mechaniką postaci (generyczna/rola/hero-like) jeszcze się zastanawiam. Póki co skłaniam się ku generycznym postaciom kształtowanym przez gracza w trakcie gry
  • Poruszanie się postacią jest skokowe po kaflach planszy (polecam filmiki)
  • W planach mam stworzenie gry piekielnie trudnej, ale uczciwej. Staram się unikać bullet-hell. Przeciwnik będzie mógł pozbawić gracza życia kilkoma ciosami, których będzie się dało uniknąć dzięki zręczności i znajomości zachowań przeciwnika.
  • Prawdopodobnie część serwerów będzie miała opcjonalne PVP, a reszta będzie nastawiona na kooperację.

Technologia:
Klient- Java/Scala/Libgdx
Server- Scala/Akka

W przypadku tego projektu, główną wartość dla mnie ma sprawdzenie technologii Akka i podejścia DDD na produkcji, choć nie wykluczam wypuszczenia produktu na rynek w celach zarobkowych gdy(jeśli) zostanie ukończony. :slight_smile:


Video:
https://www.youtube.com/watch?v=cqr0njxhMAQ - Pierwsza wersja
https://www.youtube.com/watch?v=wv4xq5rlgNM - Dodane podstawowe efekty ataku
https://www.youtube.com/watch?v=A7_CXT0eGqI - Dodana prymitywna sztuczna inteligencja


Będę wdzięczny za komentarze :slight_smile:


#2

Gra wygląda bardzo fajnie. Ładne efekty. Poruszanie się tez wygląda bardzo przyjemnie. Troszkę te ściany są mało czytelne. Ale zapewne wiele jeszcze ulegnie zmianie.
Pomysł na rozgrywkę wygląda na dość unikatowy.
Chociaż zastanawiam się na ile w rzeczywistości będzie się w to grało przyjemnie.

Bardzo zaintrygowała mnie ta Akka. Testowałeś wydajność tego? Aktualnie pracuje nad MMO dla komórek insirowane Tibią czy Ultima Online. Do komunikacji sieciowej wykorzystałemkryonet. Obecnie mój serwer jest w stanie utrzymać około 100 graczy na raz. Wysyłając dane do gracza tylko o jego sąsiadach w polu widzenia. W jego przypadku wiele zależy także od wielkości poszczególnych pakietów i tempa serializacji/deserializacji(CPU). Zastanawiam się jakie wyniki osiągnąłbym przy skorzystaniu z Akka


#3

Tak, grafika się będzie kształtować z czasem :slight_smile: Co do ścian to myślałem nad konturem na krawędziach, ale to kiedyś do tego wrócę. Staram się trzymać grafikę na jak najprostszym poziomie by mnie nie przeciążyło jej tworzenie.

Testowałem Akkę w pracy ale to co tam robiłem za dużo nie powie w kwestii wydajności w praktyce. Jak działa na jednym JVM i w pamięci, to śmiga bardzo ładnie korzystając z obliczeń wielowątkowych. Przy tworzeniu klastra dochodzi narzut komunikacji sieciowej, więc warto pomyśleć o odpowiednim rozłożeniu aktorów po shardach by wiadomości nie latały niepotrzebnie siecią. Dodatkowo duży narzut daje zapis do bazy danych (część rzeczy będę trzymał tylko w pamięci bez zapisu do bazy dla zwiększenia wydajności). Między innymi z tego powodu piszę serwer w Akka by zobaczyć jak to się sprawdzi :slight_smile:

Kryo jest proponowanym serializatorem dla Akki o ile dobrze pamiętam. Generalnie samo pisanie w niej jest bardzo przyjemne, ale dość trudne jeśli ktoś nie jest zaznajomiony z praktykami obecnymi w modelu aktorów. Za to dzięki temu bardzo łatwo można zrobić klaster maszyn, na którym rozłoży się cały serwer gry gdy jedna to będzie za mało.


#4

Mały update:

Zmiany dotyczą głównie szeroko pojętego game feelu:

  • Kamera poruszająca się za graczem (użyta interpolacja liniowa) zamiast przyklejenia. Cel kamery umieszczony nieco przed postacią gracza.
  • Kilkudziesięcio-milisekundowe zatrzymanie klatki przy zadawaniu obrażeń (graczowi lub przeciwnikowi atakowanemu przez gracza)
  • Prosty shader przy zadawaniu obrażeń (kolorowanie celu na biało)
  • Zmieniony efekt śmierci postaci
  • Drobna regulacja parametrów poprzednich efektów

Niby nic, a widać różnicę. Polecam porównać z poprzednim filmikiem :slight_smile:


#5

Update:

-dodana tarcza
-dodany kontur ścian
-dodany mechanizm do dekorowania planszy


#6

Dodana wytrzymałość (Stamina- żółty pasek nad postacią). Postać posiada określoną liczbę punktów wytrzymałości i zużywa ją podczas ataku. Każda broń ma inną wartość wytrzymałości, którą potrzebuje do użycia. Wytrzymałość odnawia się z czasem. Jedna z podstawowych mechanik gry.

Dodatkowo poprawione pomniejsze bugi, dodana animacja przy zmianach stanu (drzwi).


#7

Update:
-powiększone pokoje z większą liczbą przeciwników
-generowanie pokoju w oparciu predefiniowane wzorce
-wyszukiwanie ścieżki u przeciwników


#8

nice, to wygląda naprawdę dobrze. Nie grając w gry tego typu nie umiem się wypowiedzieć co do gameplayu, ale wizualnie i ogólnie podoba mi się


#9

Dzięki :smiley: Staram się jak mogę :slight_smile:

Btw, jak macie jakieś uwagi to będę bardzo wdzięczny :slight_smile:


#10

Update:
-Pozbyłem się maszyny stanów na rzecz behavioral tree. Implementacja na bazie gdx-ai.
-Dodałem klasy przeciwników z własnym zachowaniem: Spawner- po za atakowaniem gracza, raz na jakiś czas przywołuje pomocników; Healer- leczy swoich sojuszników

PS:
To moje pierwsze podejście do sztucznej inteligencji opartej na czymś innym niż maszyna stanów. W przyszłości planuję wprowadzić bardziej rozbudowane zachowania. Będę wdzięczny za komentarze :slight_smile:


#11

Update:
-Dodałem pierwszego bossa

W tle gry możecie zobaczyć jak wygląda drzewo AI bossa i jego dedykowanych pomocników. Co sądzicie? :slight_smile:


#12

Update:
-Dodałem oświetlenie


#13

Od poprzedniego filmiku dodałem:
-NPC (+ skrypty reagujące na tekst)
-pisanie wiadomości tekstowych
-ekwipunek podręczny
-podręczny przedmiot (w drugiej ręce, nie obejmuje go automatyczne użycie jak tego w pierwszej)
-pochodnia
-sklep
-eliksir leczniczy


#14

Update:
-skakanie
-przepaście


#15

Update:
-podział klient-serwer


#16

Update:
-odblokowywanie drzwi przełącznikiem
-fale przeciwników + pokój zamknięty aż do końca wszystkich fal
-łamigłówka (0:45)
-mechanizm warunkujący pojawianie się przeszkód (pojawiają się np dopiero po uruchomieniu czegoś- tutaj po wciśnięciu aktywatora drzwi. Gdy wracamy na początek planszy, napotykamy bossa, którego wcześniej nie było)


#17

Update:
-Instancjonowanie lochów

By unikać przepełnienia lochów przez graczy, przejście z miasta jest zrobione w formie powierzchni, na której staje drużyna chcąca rozpocząć przygodę. Raz na jakiś czas zostaje uruchomiona akcja teleportacji graczy stojących w tym miejscu. Jeśli są tam gracze, to jest tworzona dla nich osobna instancja lochu i zostają tam przeniesieni. Dostęp do nowopowstałej instancji zostaje zamknięty dla innych graczy. Po przejściu całego lochu trafiają do kolejnego miasta.

Co sądzicie o takim rozwiązaniu? :slight_smile:


#18

Update:
-Dodany tutorial do gry i kolejne skrypty dla NPCów


#19

Kiedy testy? :wink:
Grafiki i mechanika cool
Mam nadzieje że będzie szło
Ci szybko bo mam chęć zagrać


#20

Dzięki :slight_smile: Myślę, że w ciągu dwóch tygodni uda mi się wypuścić pierwsze demo. Mam jeszcze parę rzeczy do zrobienia