Krótki wstęp
Od kiedy rozpocząłem swoją przygodę z programowaniem, wiedziałem że stworzę własną grę. Na studiach w ramach jednego z przedmiotów napisałem projekt zaliczeniowy będący wariacją Asteroid. Możliwości drzemiące pod moimi palcami czekały na swój czas.
Pracując w Bloomga S.A. miałem możliwość rozwijania własnościowego silnika gry. Nauczyłem się tam jakie wymagania ma silnik gry przeglądarkowej, dowiedziałem się w jaki sposób tworzyć pewne rozwiązania oraz czego zdecydowanie unikać. Pracując tam rozbudziłem moje marzenia, w głowie zaczęła pojawiać się cała architektura gry.
O projekcie
Star Game Engine będzie się składał z kilku mikroserwisów, każdy odpowiedzialny za inną część świata gry. Założenie całego projektu jest takie, by jak najwięcej części świata było łatwe do konfiguracji. Celuję tutaj w osoby które trochę potrafią programować, lecz utworzenie własnego rozbudowanego projektu serwera gry byłoby zbyt złożone.
Kluczowe mechanizmy będą oparte o system eventów oraz strategii, tak by własna wersja gry mogła być w prosty sposób dopasowana do potrzeb.
Założeniem projektu jest komunikacja z użyciem GraphQL, query oraz mutation mają mieć przejrzyste i przewidywalne nazwy, a pola i interfejsy udokumentowane. Projekt jest tworzony z użyciem NestJS (Typescript, Typeorm).
- Warp Core jest główną częścią gry. To tam trzymany jest świat gracza, jego budynki, surowce czy wytworzone technologie. Każda budowa jest utrzymywana w wewnętrznej kolejce, a każde możliwe obliczenia są wykonywane na żądanie. Wszystko po to by gracz miał jak najlepsze doznania z gry.
- Operations Center (Ops) to moduł zarządzający dostępem do światów oraz utrzymujący rejestrujących się użytkowników. To jest miejsce do którego gracz dostanie się na samym początku przygody. Rejestracja w systemie, reset hasła, dołączenie do instancji serwera – to wszystko jest właśnie tutaj.
- Astrometrics lab czyli moduł do łączenia różnych światów graczy. Może być to układ słoneczny, wszechświat czy planeta albo miasto. Wszystko zależy od wyobraźni twórcy gry. Poza łączeniem światów będzie tutaj uwzględniony systemy walk, bo co to za gra jeśli nie ma w niej żadnej bezpośredniej rywalizacji?
- Communication Array dotyczy komunikacji między graczami. Ma za zadanie umożliwić przesłanie wiadomości oraz wszelkich powiadomień. Warto czasem pogadać z innymi, może powstanie z tego jakiś sojusz?
- Wormhole to łącznik między serwerem gry a głównym interfejsem użytkownika. Innymi słowy będzie to pakiet NPM instalowany po stronie frontu by zarządzać całą komunikacją pomiędzy przeglądarką a silnikiem gry. W założeniu ma być niezależny od środowiska, masz ochotę napisać grę w React, Electron, jQuery czy vanilla JS? Proszę bardzo!
Aktualny status projektu
Na moment tworzenia tego wpisu Warp Core posiada już wstępną implementację. W lipcu 2023 została wydana wersja Alpha 0.1 która obejmuje:
- Instalator serwera, który tworzy strukturę bazy danych oraz zapisuje podstawowe dane umożliwiające rozgrywkę,
- Rejestrację własnego świata z uwzględnieniem wolnych miejsc na budowę,
- Podgląd listy dostępnych budynków wraz z ich możliwościami,
- Budowa budynków w kolejce, system kolejek, blokady dodawania elementów do kolejki, pobieranie posiadanych surowców na potrzeby budowy,
- Tworzenie surowców przez budynki,
- Dynamiczne obliczanie posiadanych surowców by obniżyć operacje zapisu do bazy danych,
- Przechowywanie surowców przez budynki.
To dopiero początek, ale już czuję, że wersja Alpha 0.2 wniesie wiele dobrego. Planuję utworzenie testów E2E opartych na Jest oraz usprawnienie procesu instalacji.
Plany wydawnicze
Nie zakładam z góry żadnych terminów. Jest to projekt który robię w swoim wolnym czasie i wtedy gdy mam możliwości. Ponieważ jest to trudne zadanie, tym bardziej robiąc je samemu, estymacja jest wręcz niemożliwa.
W przypadku Warp Core planuję by wersje nieparzyste implementowały nowe funkcje, a parzyste były momentem porządków i usprawnień. Kilka nadchodzących wersji otrzymało swój plan zadań opisany w ramach repozytorium, poszczególne kroki milowe są zapisane tutaj: https://github.com/Space-Game-Engine/Warp-Core/milestones
Demo
Jeszcze brak 🫣 Ale nie traćmy głowy, wszystko w swoim czasie!

