Heroes and Rats Online - MMORPG na Androida


#1

Czesć,

Chciałem zapytać o opinie na temat gry nad którą od jakiegoś czasu pracuję po godzinach :slight_smile:
Generalnie, to ma być to MMORPG na Androida. Gra jest inspirowana takimi tytułami jak Ultima Online, Tibia.

Obecnie jest na dość wczesnym etapie prac. Brakuje podstawowych mechanik takich jak handel między graczami czy pvp. Niestety nie miałem też możliwości przetestowania stabilności serwera przy większej ilości graczy. Gra będzie rozwijana o nowe mechaniki, lokacje i potwory. Także wiele elementów interfejsu wciąż wymaga pochylenia się nad nimi. Nie jestem też do końca zadowolony z balansu gry (Projekt gry RPG to spore wyzwanie :slightly_smiling_face:

Jestem otwarty na wszelkie opinie i rady :slight_smile: To moja pierwsza gra. Wiem MMO to dość ambitny początek :slight_smile:
W grze mogą pojawić się błędy i glitche.

Link do sklepu play: https://play.google.com/store/apps/details?id=com.gwiazdowski.pionline
Grafiki promocyjne są dość ubogie i przygotowane na kolanie, zostaną uaktualnione w przyszłości.


#2

Cześć Patryk,

Próbowałem przetestować twoją grę. Niestety gra nie odpowiada na ekranie z wyborem serwera. Zaznaczona opcja offline wybieram Connect i nic. Raz pojawiło się okno z informacją że nie można połączyć się z serwerem. Bardzo trudno wybrać opcję. Tekst ma niewielkie rozmiary. Telefon Samsung Galaxy Ace 4 używam tylko do testów gier.

Powodzenia:)
ldurniat


#3

Dzięki! Mógłbyś podzielić się screenshotem?

EDIT:
Gra wykorzystuje Google login. Zapewne z jakiegoś powodu nie zadziałał u ciebie jak należy. Powinienem także zamieścić jakiś spinner informujący o tym, że jesteś aktualnie logowany :wink:


#4

To jeśli jesteś jeszcze na wczesnym etapie to moja opinia: zakop ten projekt głęboko. Na pierwszą grę zrób coś prostego co jesteś w stanie skończyć w rozsądnym czasie.


#5

Tyle że mi się nigdzie nie spieszy. Pracuje nad tym w wolnych chwilach po prostu w ramach hobby :wink:


#6

Odpalone. Bez większych problemów, choć buttony w menu mogły by być większe. Co do zawartości to się nie ma do czego odnieść bo scena testowa mała i nie ma w zasadzie co robić.
Testowane na Lenovo k6


#7

Nie wiem ile obszedłeś. Ale wygląda na to, że umieszczanie gracza na uboczu i zmuszanie go do zwiedzania to nie był najlepszy pomysł :stuck_out_tongue:


#8

Mag lvl1 - name: Siusiak.
U mnie dziala bez problemu, no i sa szczury do zabijania.
Tylko mag ma za malo many na poczatku na fireballe i mozna sie tylko leczyc i tluc. (ale to chyba zamierzone tak jak w mmo)
Moglbys przyspieszyc postac bo naprawde za wolno chodzi :smiley: moze dlatego nikomu sie niechcialo wiecej zwiedzac bo zasneli :stuck_out_tongue:

Zdaje sie (chociaz moge sie mylic) wiekszosc ludzu wybiera droge “w prawo”, wiec albo moglbys zrobic droge na poludnie bardziej wyrazista, albo np ten gosciu na poczatku moglby powiedziec cos co nakieruje tam gracza albo daj jakies szczury po prawej tez.


#9

Połączyłem się z netem przez wifi i gra zadziała :slight_smile:

Edit:

Moje spostrzeżenia:

  • Po śmierci przeniosłem się do miasta. Nie mogłem się poruszyć:frowning: Za drugim razem się udało:)
  • Będąc bardzo blisko szczura lub mijając on nie atakuje mnie. Wydaje mi się że powinien. Raz zaatakował mnie wilk i przez chwilę biegł za mną,
  • Bohater zadaje ciosy bez mojego udziału w czasie walki. Lepiej jeżeli ja musiałbym atakować - jedno tapnięcie = jeden atak,
  • Mogę wejść na kocioł z ogniem (na początku gry),
  • Na dole ekranu widzę cienki półprzezroczysty pasek o długości połowy ekranu,
  • Symbole broni w prawym dolny rogu ekranu są pociemniałe co sugeruje że nie są aktywne. Teraz się zorientowałem że to są buteleczki z jakimś płynem :slight_smile: hehe ,
  • Może warto dodać jakiś znacznik oznaczający porę dnia,
  • Mogę przejść przez drewniane ogrodzenie dla kurczaków :slight_smile:
  • Brakuję małej mapki z podglądem gdzie jestem,
  • Szkoda że nie można przeszukiwać skrzyń lub ich niszczyć:frowning:
  • Teren momentami jest zbyt monotonny ’

Pozdrawiam
ldurniat


#10

Dzięki za testy.

  1. Zweryfikuje. Wygląda na jakiś bug.
  2. Wybrane moby są agresywne. Inne pasywne, atakują tylko jak zostaną zaatakowane,
  3. Wolałem zautomatyzować walkę. Sterowanie na urządzeniach mobilnych nie jest zwykle super wygodne. Ale pomyślę o tym. Obecnie postacie mają po jednym ataku specjalnym. Koszt many zostanie zmniejszony przy kolejnym update jak sugerował ktoś wyżej. Może w przyszłości pomyśle o jakimś rozwiązaniu, które bardziej zaangażuje gracza. Może jakiś “quick time event” który zakończy się ciosem krytycznym?
  4. To też błąd. Zapomniałem dodać tam informację o tym, że to ściana :slight_smile:
  5. Tak, tamto wyżej to miejsca na eliksiry. Musisz posiadać jakieś w ekwipunku, żeby móc skorzystać ze “skrótu”
  6. Pomyślę o znaczniku. Obecnie dzień to parzysta godzina na serwerze. Noc co godzina nieparzysta :slight_smile: Serwer jest ulokowany w Polsce, więc pokrywa się z czasem lokalnym :slight_smile:
  7. Mapka jest w planie. Musze pomyśleć jak to fajnie rozwiązać. Obecnie mapa ma 4 warstwy. Jest w planie więcej. Wyższe góry, głębsze lochy :slight_smile:
  8. To mogłoby być ciekawe urozmaicenie. Dzięki!
  9. Nad terenem ciągle pracuje. Niestety kiepski ze mnie artysta :slight_smile:

#11

Z ciekawości, jak realizujesz komunikację sieciową? Ostatnio zastanawiałem się nad obsłużeniem tego typu gier (MMoG) co wbrew pozorom nie jest proste.


#12

Całość napisana jest w javie.
Dla klienta skorzystałem z LibGdx.
Do komunikacji sieciowej wykorzystałem bibliotekę Kryonet:
https://github.com/EsotericSoftware/kryonet
Na serwerze dodatkowo korzytałem z Hibernate.


#13

Hej, pograłem chwilę, zdobyłem 10 poziom, moje uwagi:

Wiele obiektów nie posiada kolizji i można przez nie przechodzić

Pathfinding działa chwilami dziwnie, czasami wystarczy przejść 1 pole w kierunku gdzie wyznaczona trasa nie powinna się zmienić, a stwór biegnie na około kompletnie, nawet jeżeli wszędzie jest ten sam typ podłoża.

j/w - brakuje mapy, chodziłem przez 6 poziomów i ciukałem pająki i szczury, ciężko było znaleźć mostek

j/w - wiele pustych terenów, np. +1 na górze na północ od miasta, wybrzeża dookoła niej

j/w - przydałoby się więcej czarów/umiejętności, a skalowanie aktualnych chyba niezbyt istnieje, ponieważ na 10 poziomie “wybuch” maga robi tyle samo obrażeń co wcześniej, podczas gdy zwykły atak za pomocą Enchanted Staff zadaje 5x tyle

Poza tym - bardzo solidnie się zapowiada, gra chodzi bardzo płynnie (Huawei P8 Lite), lagi są rzadkie i nie mają wpływu na rozgrywkę (np. stwór przesuwa się w jednym kierunku przez parę sekund, a potem go teleportuje spowrotem)
Powodzenia! :slight_smile:


#14

Zagrałem:

  • 45fpsów? To limit czy mój telefon nie wyrabia? (xperia Z2)
  • Postać trochę za wolno chodzi
  • Trochę mało dynamiczna
  • Niewidzialna ściana u góry mapy? Nie mogłem iść dalej, choć widziałem teren.
  • Ma swój urok, choć zdecydowanie za mało treści jeszcze

Fajnie, że ktoś się zabiera za sieciowe gry. To nie byle co :slight_smile: Staje się wtedy przeciwko wielu przeciwnościom, których nie ma w zwykłych produkcjach. Mam parę pytań:

  • Na czym hostujesz serwer?
  • Jak rozwiązujesz problem wielowątkowości na serwerze?
  • Czy serwer/plansza jest podzielona na instancje? (powiązane z pytaniem powyżej)
  • Jak wygląda utrwalanie? Widzę, że używasz jpa. Gra zapisuje swój stan bezpośrednio do bazy danych wraz z każdą akcją? Przechowujesz stan czy zmiany? To bardzo ciekawe zagadnienie.

Tematy skalowania aplikacji są bardzo ciekawe. Zajmuję się nimi na co dzień w pracy. Chętnie zobaczę jakieś ciekawe rozwiązanie. Sam teraz piszę grę sieciową i to nie lada wyzwanie. Powodzenia! Trzymam kciuki :slight_smile:


#15

Dzięki za Testy! Intensywnie pracuje obecnie nad poprawkami właśnie.

  • Brak minimapy już wiele osób zgłaszało jako problem. Zostanie to dodane w najbliższym czasie.

  • Nad mapą ciągle pracuje. Niestety jest dla mnie dość trudne. Chyba brak mi kreatywności jeśli chodzi o elemęty jakie mogłoby znalezć się na mapie żeby była ciekawsza. Grafik ze mnie też niestety nie najlepszy :slight_smile:

  • Czary umiejętności się pojawią. Nad balansem również pracuje. Na serwerze jest zaimplementowane obecnie bodajże 6 czarów. Każdy z nich działa troszkę inaczej. Ale narazie zostało to odłożone, chcę w pierwszej kolejności rozwinąć obecne mechaniki i dodać rzeczy które mają wyższy priorytet. Niestety nie da się zrobisz wszystkiego na raz.

  • Ostatnio Poprawiłem trochę wydajność serwera, Obecnie limit graczy to 100, co teoretycznie bez problemu można by podnieść i nie powinno być problemów z wydajnością serwera. Optymalizacja klienta także była dużym wyzwaniem. LibGDX jest mniej “ociosany” w porównaniu z np. Unity. o wiele elementów trzeba było zadbać, żeby gra dobrze działała na słabszych urzadzeniach.


#16

Dzięki za przetestowanie!

  • Możliwe, że twój telefon miał jakiś limit? Np oszczędzanie energii? Odpalałem grę na słabszych urządzeniach (Samsung Galaxy S3 Mini, Samsung Galaxy S5 Mini.) Gra wszędznie dawała rade utrzymać 60 klatek.

  • Zobacze, może troszkę zwiększe bazową prędkość. Postać również zyskuje troszkę prędkości poruszania się z kolejnymi poziomami.

  • Pomyślę nad tym. Narazię troszkę nie mam pomysłu jak możnaby to uatrakcyjnić. Generalnie gry którymi się inspirowałem nie miały zbyt dynamicznej walki. Ostatnio balansowałem mechanikę walki, żeby potwory umierały troszkę szybciej i zapewniały wyrównany poziom trudności. Kolega wyżej proponował jakieś “Quick time eventy”. Pomyślę jak to mogłoby wyglądać, żeby walka wydała się bardziej atrakcyjna.

  • Więcej treści oczywiście zostanie dodane. Narazie skupiam się na implementacji podstawowych mechanik i wyeliminowaniu błędów.

Dodatkowe pytania:

  • Serwer hostuje obecnie na tiktalik.com Jest to bardzo tani, Polski hosting. Maszyna jest dość słabiutka, ale do testów wystarcza. Nie mam nrazie zbyt wielu osób na serwerach. Jeszcze się wstrzymuje przed reklamowaniem gry na szerszą skalę.

  • Wielowątkowość to tylko klasyczne Thready javowe. Żadnych cudów tam nie implementowałem. Jak zaczynałem projekt jeszcze nie byłem zbyt dobrym programistą i średnio wiedziałem na co się porywam :slight_smile: Ale generalnie wszystko działa. NPC i gracze mają osobne wątki. No i oczywiście cała komunikacja sieciowa i z bazą danych działą na osobnych wątkach. Ale to mam zapewnione przez biblioteki.

  • Obecna plansza nie jest dzelona na instancje. Możliwe, że w przyszłości będzie. Narazie nie ma takiej potrzeby. Na serwer logowałem jednoczesnie 200 mockowych graczy. Serwer umożliwiał płynną rozgrywkę z okazjonalnymi czkawkami :slight_smile:

  • Generalnie wszystko przechowywane jest w bazie danych (Hibernate), W momęcie zalogowania się gracza, Pobierane są z bazy informacje o postaci (położenie, poziom, zdrowie, ekwipunek). W trakcie działania serwera, co kilka sekund stan wszystkich graczy jest zapisywany(właściwie to nie potrzebnie, ale takie zabezpieczenie) No i w momęcie wylogowania się(lub ewentualnie jakiegoś crasha, przed restartem serwera) Wszystko jest zapisywane w bazie.
    Niedługo zaimplementuje wypadanie ekwipunku na ziemie z potworów. Tego nie planuje zapisywać w bazie. Więc każdy restart serwera będzie to “sprzątał”.
    Ale samo skalowanie jest dość problematyczne. Implementowałem kilka rozwiązań optymalizacyjnych. Np część pakietów nie jest wysyłana do klienta przy większym obciążeniu. Do każdego gracza wysyłane są tylko pakiety dotyczące potworów w jego polu widzenia. Wysyłam tylko informacje które rzeczywiście są potrzebne i które gracz zobaczy. Nie ma potrzeby wysyłać pełnego zestawu statystyk na temat gracza stojącego obok. itp.


#17

Dzięki za namiar na hosting. Właśnie szukałem czegoś do testów :smiley:

Problem z wątkami zaczyna się wtedy gdy operują na wspólnym zasobie (tak jak u Ciebie cała plansza gry). Wtedy zaczyna się zabawa z wyścigami i potencjalnymi zabezpieczeniami przed tym problemem (pesimistic/optimistic lock np). To zawsze jest warte zastanowienia, bo przy potencjalnej kolizji wątków bez zabezpieczeń w najlepszym wypadku np dwóch graczy podniesie ten sam przedmiot, a w najgorszym dostaniesz fatal crash serwera (częste przy nieumiejętnym używaniu kolekcji w javie).

Osobiście nie jestem fanem dumpów w momencie crasha. W niektórych przypadkach jest to niewykonalne, a czasem powoduje tylko kolejny crash. Nie daje żadnej gwarancji. To dość trudna kwestia.

Co do sprzątania ekwipunku z ziemi przy restarcie, faktycznie czasem trzeba iść na jakieś ustępstwa :slight_smile: Jak dla mnie to dobra droga.

Co do skalowania i tego co mówisz o wysyłaniu pakietów z otoczenia gracza, to często się dzieli całość na regiony i podłącza użytkownika do słuchania w zależności od tego w jakim regionie się znajduje (sharding). Problem się robi tylko na krawędziach regionów i różnie się to rozwiązuje. Nie wiem czy tak właśnie robisz, ale może Cie to zainteresuje :slight_smile:


#18

Poprostu crash i ConcurrentModificationException Trzeba pamiętać o lockach i wszystko jest okej :wink:

Tak, znam to pojęcie. Tak robią większe gry MMO. Mapa jest podzielona na obszary. I właściwie każdy obszar to inny serwer. Dlatego np w WoW, wszystkie mapy oddzielone są wysokimi górami. A przejścia między nimi zasłonięte (Wejście do Orgrimmar na przykład). Wtedy przechodząc takim przejściem jesteś jakby “przelogowywany” postacie za tobą znikają. Postacie przed tobą się pojawiają.
Narazie moja mapa jest bardzo mała. 100 graczy na niej to straszna ciasnota. Więc narazie mam to odłożone bo zwyczajnie nie potrzebuje. Mam nadzieję, że kiedyś będę musiał to dzielić :wink:

Obecnie po prostu “server” przed wysłaniem eventu do gracza sprawdza czy postać dotycząca eventu znajduje się dostatecznie blisko. Nie ma sensu wysyłać pakietów do postaci której i tak nie widzisz :wink: