[Libgdx] TAnima - MMO Rogue-like


#61

Bawiłem się dzisiaj z konfiguracją serwera Discord i zrobiłem coś zabawnego…

Discord zaproszenie:

Wejdźcie na kanał “stream” i możecie grać postacią z poziomu discorda

Sterowanie:

!requestcontrol -> Przejęcie kontroli nad postacią widoczną na streamie https://mixer.com/ByerN na 10 sekund

W grze:
wsad - sterowanie
e - użycie przedmiotu pobocznego (lub podniesienie przedmiotu jeśli na jakimś stoicie)
f - otworzenie menu ekwipunku
!j w 3 - skok do przodu o 3 pola (wsad i liczba od 1 do 3)
!say something - mówisz “something” (no wiadomo)

W trybie menu ekwipunku
wsad - sterowanie
q - ustaw jako przedmiot podstawowy
e - ustaw jako przedmiot poboczny
r - wyrzuć przedmiot
!esc - wyjdź z menu ekwipunku

Bawcie się dobrze :slight_smile: jeśli stream leży, to pingnijcie mnie na discordzie. Jest szansa, że akurat jestem przy kompie i go odpalę. Ten pomysł został zrealizowany w formie zabawy na niedzielne popołudnie :slight_smile:


Polski serwer indiegamedev Discord
#62

Update:
2 rodzaje serwerów:

  • Action mode:
    (no tak jak wcześniej :slight_smile: )

  • Tactics mode:
    Gramy tak jak w starym, dobrym Rogue (albo moim ulubionym Nethack). Gdy gracz poruszy się postacią, porusza się cały świat. Jeśli chodzi o grę mmo, planuję dodać dość sprytny system dobrowolnego głosowania. Trochę wracam w ten sposób do korzeni TAnimy, bo z grubsza- taki właśnie był pierwotny zamysł :slight_smile: Tymczasem, ten tryb jest na tyle prosty w utrzymaniu, że będzie razem z trybem akcji. Coś dla tych co lubią bardziej taktyczne podejście. I naprawdę gra się zupełnie inaczej. Aż sam się zdziwiłem :open_mouth:

PS: Tactics mode może zostać użyty do grania ze społecznością przez stream, tak jak to przypadkiem wynalazłem wczoraj. Planuję dodać większą kustomizację bota (aktualnie tylko discord) i możliwość dodawania własnych botów (classloading w javie).

Co sądzicie? Developerskie demo już wkrótce. Dodaję efekty dźwiękowe, kilka poprawek serwera i możemy działać z wstępnymi testami :slight_smile: Będę wdzięczny za opinie na temat pomysłu tactics mode:)


#63

Kod serwera i klienta został odseparowany całkowicie (takie MVC w świecie sterowania zdarzeniami). Binarki z logiką i kodem sieciowym są odizolowane od gracza. Zabezpieczenie przed chińskimi hakerami kradnącymi gry :smiley:

Do pierwszego dema zostały mi jeszcze:

  • efekty dźwiękowe
  • menu (ustawienia grafiki, dźwięku np głośność itp)
  • starter z wyborem serwera i logowaniem
  • ambientowa ścieżka muzyczna

Wszystko w raczej prostej wersji. To bardzo wczesne demo, nie oczekuję od niego zbyt wiele. Nie będę też go jakoś promował. Będę wam bardzo wdzięczny za pomoc przy testach wydajności serwera (i gry mmo ogólnie). Założę osobny temat w formie eventu na określoną godzinę. Czy ktoś na tym etapie chciałby zadeklarować swoją pomoc? Nie zajmie to długo :slight_smile: Potrzebuję was! Z góry dziękuję :slight_smile:


#64

Pomoc w testowaniu?Oczywiście!

Jestem pełen podziwu że produkcja idzie Ci tak szybko
Mam nadzieję ,że dużo ludzi w to zagra jak gra będzie skończona.
Chyba pora ustalić model sprzedaży/cenowy?


#65

Dzięki :smiley: Produkcja jest okupiona krwią i potem, ale jakoś idzie xD Alfa będzie otwarta na anonimowy dostęp, więc nie będzie potrzeby rejestracji. Będę wdzięczny za zgłaszanie błędów :slight_smile:

Globalnie w przyszłości liczę na zainteresowanie na poziomie Crypt of the necrodancer/Enter the gungeon/Risk of the rain/Rogue legacy. Jeszcze długa droga jeśli chodzi o zasoby. Póki co chcę sprawdzić infrastrukturę. Charakter MMO to bardzo komplikuje.

Jeśli chodzi o model sprzedaży, celowałem w ceny takie jak mają tytuły, które wymieniłem lub wyższe przez wzgląd na utrzymanie serwerów (około 20 +/- 5 dolarów ) + dostęp do zasobów DLC(a tu czas pokaże. Total War: Warhammer 1/2 pokazał fajną drogę jeśli chodzi o DLC). Bardzo nie lubię p2w, więc nie będzie czegoś takiego w mojej grze :slight_smile: Chcę by gracz się dobrze bawił i czuł prawdziwe emocje grając. Coś więcej niż w sztampowych mmorpgach.

Celuję w Steam (wszystko co ma wirtualną maszynę javy). Pewnie bym później wystartował coś na kickstarterze w formie promocji, ale w Polsce to utrudnione. Jeśli zyskam zasoby, to przeportuję klienta na konsole. Java nie wspiera konsol (konsole javy w sumie), więc to lekki problem.


#66

Dzisiaj serwery TAnimy zostały rozproszone.
Jak to działa?
Po co?
Co to jest?
O czym Ty w ogóle do mnie mówisz?

Najczęściej produkcje mmo tworzą osobne instancje serwera dla konkretnego świata. To dość proste i przyjemne podejście ze wzglęgu na to, że developer nie musi borykać się z multum problemów związanych z synchronizacją danych. Jednakże, traci na skalowalności. Gdy liczba użytkowników serwera wzrasta do punktu, w którym nie potrafi już tego uciągnąć pojedyncza fizyczna maszyna- wtedy zaczyna się problem. Co zrobić gdy już nie mogę wykupić maszyny z większymi zasobami?

Rozwój maszyn zatrzymał się w pewnym momencie. Co raz trudniej jest uzyskać większą moc na jednej fizycznej maszynie tanim kosztem (a czasem zwyczajnie się nie da). Z tego względu myśli się nad koncepcją w stylu “mikroserwisy” lub po prostu celuje się w architekture rozproszona. Ale ona nie jest taka prosta. Z samej natury takiej architektury wynika bardzo wiele problemów, krórych normalnie nie uświadczymy tworząc oprogramowanie na pojedynczą maszynę. Każdy kto próbował tworzyć wysoko-wydajnościową aplikację serwerową działającą pod dużym obciążeniem, ten wie :slight_smile: Gry MMO wpadają w tę kategorię.

Z tego względu, serwer TAnimy został zaprojektowany w oparciu o technologię AKKA, a co bardziej istotne- o koncept modelu aktorów (akka jest jego implementacją w technologii Java- u mnie Scala). Model aktorów bardzo dobrze łączy się z konceptem DDD. Ja jako osoba zaczynająca programowanie z poziomu asemblera z doświadczeniem zawodowym opartym na technologii Java (framework Spring i wczesna wersja JavaEE), miałem duży problem z przyzwyczajeniem się to tego zamysłu projektowania oprogramowania. Na początku wydawało mi się to bardzo niespójne, a czasem wręcz niesprawne do użytku w środowisku produkcyjnym. Z czasem okazało się, że się myliłem. To dość przyszłościowy zamysł.

Jeśli ktoś chce stworzyć solidną grę mmo, chciałby się dowiedzieć więcej na temat mojego podejścia i chce z niego skorzystać, to mogę stworzyć osobny artykuł na ten temat. To nie jest takie proste. Wymaga ogrom pracy, samozaparcia, otwartości umysłu i wiedzy. I oczywiście- da się to zrobić inaczej :slight_smile: To tylko jeden z konceptów. Z mojego doświadczenia- jeden z lepszych dla tego typu produkcji.

Zapraszam do komentowania :slight_smile:

PS na prezentacji serwery Virgo i Libra (dynamic mode i tactics mode)


#67

Dodałem:
-HUB światów. Zaraz po pierwszym zalogowaniu do gry, stajemy przed wyborem świata z poziomu gry. Na gifie widoczne światy Virgo(Active Mode) i Libra(TActics Mode). Nazwy serwerów póki co biorą nazwę od znaków zodiaku zaczynając od mojego (Panna). Możemy do niego wrócić z poziomu miasta by przejść do innego świata.
-Wybór klasy- póki co są tylko 3 (Rogue, Warrior, Wizard). Wybiera się je przechodząc do wspomnianego wcześniej HUBa światów i aktywując odpowiedni monument.
-Utrwalanie postaci- postać zachowuje swój stan pomiędzy światami. Tu jeszcze muszę pomyśleć jak to ma wyglądać. Nie chcę by gracze bezstratnie poruszali się pomiędzy światami

Hub światów w założeniach będzie się dynamicznie zmieniał wraz z przyrostem liczby serwerów i dostępnych postaci. To dość proste, ale jeszcze szukam pomysłu na nowe klasy i ich warunki zdobycia. Będę tam też chciał umieścić np wybór skórek dla postaci (skiny zwykłe lub DLC).

Co sądzicie? :slight_smile:


#68

Witam wszystkich bardzo serdecznie. Jestem nowy na forum i nie zwykle spodobał mi się ten projekt. Ciekawi mnie natomiast jedna kwestia. Jak wygląda sprawa audio w tej grze? Pytam bo mam w planach zająć się kompozycją i aranżem muzyki do gier i jestem ciekawy czy np byłbyś zainteresowany jakimiś ścieżkami lub sfx? Póki co to “tylko” moja pasja i chętnie podzielę się popełnionymi przeze mnie dźwiękami. Chciałbym móc pomóc.
Pozdrawiam


#69

Dzięki! :slight_smile:

Co do kwestii audio:

  • efekty dźwiękowe - zainwestowałem w płatne biblioteki dźwięków. Planuję poszerzać swoją kolekcję i wykorzystywać je na potrzeby gier. W porównaniu do tych darmowych, są bardzo dobrej jakości. Po małej edycji i ewentualnym miksowaniu z innymi, dają radę :slight_smile:
  • muzyka - już mam jedną propozycję współpracy, ale będę pamiętał o Tobie jakby co :slight_smile:

Póki co największy problemem dla mnie stanowi GUI i efekty graficzne (ataki/czary itp)

Btw. ciekawi mnie jaką masz wizję ścieżki dźwiękowej w TAnimie. Jeśli ktoś z was patrząc na tą grę jest w stanie sobie wyobrazić ją z jakimś pasującym stylem, to będę bardzo wdzięczny za komentarze (najlepiej z przykładami). To mi bardzo pomoże :slight_smile:

Update:
Ostatnio spędzam dość dużo czasu na szukaniu inspiracji do rozbudowywania gry. Aktualnie skupiłem się na czytaniu wiki Nethacka:
https://nethackwiki.com/wiki/Mazes_of_Menace

Polecam każdemu kto nigdy nie grał w podobne gry, a chce doświadczyć ile pasji kiedyś wkładano w ich tworzenie. Ja jestem pełen podziwu :slight_smile:


#70

Mam kilka pomysłów, chociaż musiałbym zobaczyć większą część gameplay’a. Najchętniej nabyłbym tę grę drogą kupna :slight_smile: i zobaczył co tam siedzi. Jak tylko zobaczyłem dynamikę walki, trochę przerysowaną “wylewność” wyprowadzanych przez naszą postać ciosów, przyszła mi do głowy ścieżka z ciężką gitarową muzą (jak w nowym Doomie), jeżeli natomiast mielibyśmy więcej czasu spędzać skradając się i przyklejając do ścian to coś stonowanego lekko dysonującego (a’la Diablo II / Path of Exile). No i jakieś spokojne smyki w kwartecie ew. jakaś orkiestra kameralna w menu’sach. Chciałbym usłyszeć jak kości się łamią i posoka leje kiedy trafiamy naszym potężnym kijkiem we wroga XD. Generalnie tak bym to widział.

PS Zaproponowałem się, bo chce w końcu wykorzystać te trzy lata studiów z reżyserii dźwięku do tego co lubię.


#71

Dzięki :slight_smile: też myślałem wcześniej nad ciężkimi gitarami. Ew. dubstep lub d’n’b. Póki co tak jak pisałem wyżej :slight_smile:

Jak już uda mi się wypuścić demo, to może przy okazji zrobię jakąś furtkę do zmodowania dźwięku.


#72

Zwiastun Alphy:

Już niedługo będzie można potestować grywalną wersję :slight_smile:


#73

Update:
-Pierwsza wersja efektów dźwiękowych
-Odblokowywanie nowych postaci (“tajemnicze questy”)
-czarna skrzynka- pozwala zachować 3 przedmioty dla kolejnego wcielenia (nie można ich wtedy używać)

Jeszcze kilka pomniejszych rzeczy jak logowanie do gry czy efekty “kinowe”
Co sądzicie? :slight_smile:


#74

Bardzo fajnie się to przedstawia. Wyraźne sygnały opisujące co się dzieje. Ciekawi mnie tylko ścieżka dźwiękowa bo ostatecznie jakieś tło muzyczne będzie, nie? Całość wygląda i brzmi spójnie ale chciałbym usłyszeć całość razem z ambientem i ścieżką. Nie mogę się doczekać grywalnej wersji.

Pozdrawiam


#75

Dzięki :slight_smile: Zaopatrzyłem się w solidną bibliotekę dźwięków to dużo mi ułatwiło. Zwłaszcza, że jeszcze jest przed doszlifowaniem. Tak, będzie muzyka jeszcze oczywiście. Jeszcze nie wiem dokładnie co, ale zobaczymy :slight_smile: Póki co wrzuciłem szum.


#76

TAnima OST: Always here for you


#77

TAnima OST: Like it was yesterday


#78

Pierwszy test wydajnościowy na botach:

Limit stresu: ping powyżej 40ms na łączu 100Mb/s (22ms standardowo, więcej oznacza dławienie się serwera)

Hosting: tiktalik.com
Tryb serwera aplikacji: monolit

Bot:
-klient połączony siecią do serwera poruszający się w kółko co 200ms (granica limitu interakcji gracza). Bot respi się w nowej instancji generowanego dynamicznie średniego rozmiaru lochu.

Konfiguracja 1 (FAIL).:
Zasoby:
System: CentOS7 64b
Rozmiar w hostingu tiktalik: Standard- 1Unit
“Każdy Std Unit posiada 1 GB pamięci RAM i moc procesora porównywalną do 1000MHz.” - tiktalik
Koszt utrzymania: 9.84zł/msc

Rezultat: Brak RAMu. Serwer na starcie z systemem wciąga około 70%, 20ty bot zawala cały RAM, GC zabija procesor.

Konfiguracja 2 (SUKCES).:

Zasoby:
System: CentOS7 64b
Rozmiar w hostingu tiktalik: Standard- 16Unit
“Każdy Std Unit posiada 1 GB pamięci RAM i moc procesora porównywalną do 1000MHz.” - tiktalik
Koszt utrzymania: ~142zł/msc

Przebieg:
-rozgrzanie- uruchomienie 50 botów z częstotliwością 1 na 500ms
-3 x paczki po 200 botów uruchamianych co 300ms- koło 500bota, serwer zaczyna zwalniać
-15s odpoczynku od nawiązywania połączeń, serwer się uspokaja
-kolejne 2 paczki po 200 botów uruchamianych co 300ms, odstęp między paczkami=15s
-Maszyna, na której stawiam boty testowe traci zasoby. Nie da się sprawdzić większego obciążenia, ale serwer byłby w stanie obsłużyć jeszcze na oko koło 200 graczy.

Rezultat: 1000 botów:

Na screenie:
Menadżer zadań- boty zjadły moją maszynę, nie mogłem uruchomić więcej. Gra działała, ale procesor nie dawał rady.
ConEmu (konsola po prawej)- htop maszyny.
Średni ping botów: 25ms

Wnioski dla jednej instancji serwera:
-Głównym problemem jest kosztowne nawiązywanie połączenia sieciowego. Serwer może nie przeżyć impulsu ~400 połączeń.
-Instancja serwera będzie w stanie utrzymać około 1000 połączeń w trybie ciągłym przy maksymalnym obciążeniu w osobnych instancjach poziomów.
-Serwer nie będzie w stanie utrzymać więcej niż N graczy na jednej mapie (jeszcze nie wiem ile to N). Problemem jest miasto, będzie musiało zostać podzielone na instancje.

Co dalej?
-sprawdzam ile graczy może być na jednej planszy
-robię instancjonowanie miasta w zależności od znalezionego limitu
-dorabiam load balancer
-przeprowadzam testy na klastrze złożonym z dwóch maszyn

No powiem wam, że zapowiada się dobrze :slight_smile: lepiej niż się spodziewałem


#79

-Zrobiony load balancer- przenosi połączenia klienta wraz z ruchem gracza po planszach (i shardach)
-Klaster działa. Poniżej dwie maszyny połowy mocy tej poprzedniej. Obciążenie łączne=800 botów. Myślę, że strata tych 200 wynika ze zmniejszonej liczby wirtualnych rdzeni. W teorii im więcej ma, tym lepiej będzie pracować.

Dobrze poszło :slight_smile:


#80

TAnima OST: Going back in time