O czym będzie ta gra?
Na razie jeszcze bardzo dużo rzeczy jest nierozpoczętych lub niedokończonych, więc możliwe że koncept się jeszcze znacznie zmieni. Na pewno to będzie strategiczna gra turowa pvp z elementami klasycznego roguelike. Planuję ją wydać na platformę Steam po jej ukończeniu i będzie ona pierwszym takim dużym projektem jaki zrobię.
O serwerach
Ze względu na bardzo niezaawansowany status rozwoju tej gry, nie mam jeszcze zbyt dużo do powiedzenia o rozgrywce, więc zamiast tego się skupię na serwerach. Ich struktura jest praktycznie w pełni skończona i jedyne co trzeba uzupełnić to samą mechanikę gry. Omówię po kolei kilka ciekawych rzeczy związanymi z tymi serwerami.
Używane narzędzia
Serwery są zrobione w języku Rust i używają dosyć mało znanego micro-frameworka xitca_web. Połączenia odbywają się z użyciem websockets. Dodatkowo, jako klient prawdopodobnie będzie używany silnik gier Bevy ze względu na to, że jest to obecnie jeden z najbardziej rozwiniętych silników gier używających Rust.
Głównym powodem, dla którego używam tych narzędzi a nie innych to redukcja kosztów, dosyć ważny powód dla niezależnego twórcy gier. Dokładniej: Rust jest szybkim językiem programowania i używam jednego z najmniejszych i najszybszych frameworków, którego jednocześnie się w miarę łatwo używa. Ze względu na to, że gra nie działa w czasie rzeczywistym tylko na podstawie tur oraz nie ma skomplikowanej fizyki tylko gracze poruszają się po różnych polach, przy szybkim i dobrze skonfigurowanym serwerze nie trzeba będzie płacić ekstremalnych kwot za powszechnie dostępne serwery. Dodatkowo używam Rust również dla klienta, ponieważ dzięki temu można znacznie zmniejszyć ilość wymaganych synchronizacji, gdyż kod dla obu wersji byłby prawie taki sam.
Napotkane problemy
Mało znany framework
Kiedy mówię „mało znany” mam na myśli framework używany przez mniej niż 7 tysięcy projektów. Z tego powodu nie wszystkie problemy są łatwe do rozwiązania, ale ze względu na to że sam framework jest dosyć dobrze zrobiony, zwykle daję radę naprawić je dosyć szybko. Tak naprawdę to znacznie więcej problemów mam właśnie ze stroną klienta, mimo że używam w nim o wiele bardziej znanych crates.
Inne wyzwania
Większość innych wyzwań jest spowodowana tym, że chcę jak najbardziej zminimalizować zużycie RAM i CPU na serwerze, ponieważ to właśnie one w największym stopniu decydują o cenie serwera. Oczywiście są też rzeczy takie jak przepustowość łącza oraz rozmiar na dysku, ale mają znacznie mniejszy priorytet, więc poprawiam te kwestie tylko jeżeli nie zaszkodzą w wydajności tych najważniejszych.
Zwykle sprowadza się do wymyślania jaki algorytm zadziałał by najlepiej w danej sytuacji, ale również musiałem napisać dosyć dużo niskopoziomowego niebezpiecznego (unsafe) kodu bezpośrednio używającego pointerów i memcpy.
Co dalej?
Na razie dalej rozwijam ten projekt w wolnym czasie, jeżeli uda mi się utrzymać tempo rozwoju to prawdopodobnie skończę go w ciągu następnych dwóch lat lub wcześniej. Obecnie jednak większy priorytet mają sprawy związane ze szkołą w różny sposób, więc ciężko stwierdzić kiedy dokładnie.