EWF Multiplayer test!

Prototyp gry sieciowej zrealizowany w Godot engine z użyciem własnego frameworku w formie GDExtension.

07.10.2024 23:30 Projekty Itch.io

Jak już chyba wspominałem w którymś z moich poprzednich postów, od jakiegoś czasu zajmowałem się projektem gry w Godot engine. Projekt o którym wcześniej wspominałem to projekt gry jednoosobowej, bardziej w rodzaju dungeon crawler-a. Jest on projektem nad którym pracowałem już najdłużej i jest najbardziej zaawansowany, jednak w międzyczasie realizowałem też inne pomysły/projekty, aby nieco wyrwać się z monotonii pracy nad jedną i tą samą rzeczą przez bardzo długi okres.

Coś co zawsze mnie interesowało i fascynowało to gry internetowe. Nie zwykłe gry przeglądarkowe, czy takie z opcją gry wieloosobowej, ale takie które działy się w pełni w internetowym świecie. Tak, zgadłeś, gry MMO!

Dlaczego zawsze fascynowały mnie tego typu gry? Dlatego, że zawsze chciałem zobaczyć grę którą bym stworzył w wersji "żywej", tzn. wypełnioną graczami i żyjącą "własnym życiem". Czegoś takiego nie można za bardzo doświadczyć w przypadku gier jednoosobowych, chociaż nadal takie gry mogą mieć swoją popularność i społeczność, co na pewno też jest całkiem fajnym doświadczeniem.

Tak czy inaczej, nie jestem w stanie raczej stworzyć pełnej i wystarczająco ciekawej gry MMO, ale i tak pracowałem przez jakiś czas nad frameworkiem który pozwalał by na stworzenie skalowalnej architektury dla gry sieciowej. Takiej właśnie architektury jaka zwykle wykorzystywana jest przez gry MMO.

W ten sposób powstał właśnie zarodek dla EWF - Ethernal Wolf Framework. Nie pytajcie się dlaczego wybrałem taką nazwę, po prostu wpadłem na taki pomysł kiedy zaczynałem pracować nad tym projektem i tak już zostało.

W skrócie pisząc, EWF to framework który ma za zadanie rozbudowywać funkcje Godot engine pod kątem open world MMO RPG! Zawiera niezbędne rzeczy które są potrzebne/przydatne w takich projektach. Zapewnia między innymi możliwość łączenia się z bazą danych, dostarcza renderer dla terenu i otwartego świata oraz dodaje nowe sieciowe node-y które pozwalają na łatwą interpolację i ekstrapolację stanów otrzymywanych z serwera. A to nie wszystkie planowane feature-y (tak, mam jeszcze kilka w zanadrzu)!

Co więcej wszystko to jest w formie natywnego GDExtension. Dla niewtajemniczonych osób, mogę napisać, że GDExtension to forma rozbudowywania funkcji silnika Godot w formie bibliotek dynamicznych. Tak więc framework jest napisany w C++, kompilowany do formy bibliotek dynamicznych, a następnie wczytywany przez silnik podczas uruchamiania projektu.

W ostatnim czasie pracowałem niestrudzenie nad doprowadzeniem mojego testowego projektu do formy która mogła by zostać jakoś szerzej przetestowana. Nie było to łatwe, ponieważ jak to zwykle bywa z projektami sieciowymi, obsługa błędów, masa szczegółów, możliwych problemów na każdym kroku oraz zapewnienie, że stan klienta ostatecznie nie utknie w martwym punkcie, wymaga bardzo dużo pracy.

Jednak udało mi się doprowadzić projekt do stanu w którym chyba jest testowalny? Nadal nie daje on zbyt wiele możliwości i z punktu widzenia standardowego gracza jest raczej nudny, ale w rzeczywistości bardzo dużo musi działać w tle, aby nawet tak proste doświadczenie mogło przebiegać bez przeszkód.

Nie chciałbym się zbytnio rozpisywać tutaj o architekturze, co jest dostępne a co nie i jak to wszystko dokładnie działa, bo zrobiłem to już mniej więcej na stronie samego projektu, więc po szczegóły odsyłam do niej. I tak, mój testowy projekt jest już opublikowany na itch.io, więc sam możesz go przetestować i przekazać mi cenną opinię. Głównie zależy mi na opisie potencjalnie spotkanych problemów i błędów oraz tego w jakich okolicznościach się pojawiły. Swoją drogą jeden błąd został już znaleziony i naprawiony. To całkiem niezły postęp jak na sam początek :3

Zachęcam do przetestowania mojego projektu i zostawienia opinii, albo dołączenia do społeczności mojego projektu (na itch.io, bądź na mojej stronie w dedykowanym pokoju). Link do projektu znajdziesz poniżej: