C64 Ultimate Game Engine. Eksperymentalny silnik dla C64 Ultimate

Po około 6–8 miesiącach eksperymentów w końcu doprowadziłem projekt do stanu, w którym mogę go pokazać szerszej publiczności. Na moim kanale YouTube opublikowałem właśnie film prezentujący to, nad czym pracowałem przez ostatnie miesiące.

Od razu zaznaczę, że nie jest to jeszcze gotowy silnik, a tym bardziej ukończona gra. To raczej zbiór proof-of-conceptów, eksperymentów technologicznych i pomysłów, które pozwalają mi sprawdzić, co tak dokładnie można zrobić na Commodore 64 Ultimate i jego, w zasadzie podstawowych ficzerach.

Przy okazji fajnie byłoby, gdyby z tego wszystkiego powstała kiedyś taka moja wymarzona gra.

Wiecie… kiedy zabierałem się za ten projekt, pomyślałem sobie: a co, gdyby spróbować zrobić coś na kształt „Mieczy Waldgira”, ale z animowanymi tłami, setkami ruchomych obiektów i dużym, spójnym światem do eksploracji? Idealnie byłaby to taka metroidvania na C64 — trochę „Miecze Waldgira”, trochę „Turrican”, trochę „Zamzara”, a może nawet szczypta „Gryzora”.

Najlepiej wszystko na multikolorowej bitmapie, pełne animacji, dużych bossów i działające płynnie co ramkę. Brzmi nierealnie? Na początku dokładnie tak pomyślałem.

Mimo to postanowiłem zacząć od małych eksperymentów. Powoli powstawały kolejne proof-of-concepty, które od czasu do czasu pokazywałem zarówno na moim kanale YouTube, jak i tutaj na blogu. Z czasem zacząłem odkrywać, że niektóre rzeczy, które wydawały się kompletnie niemożliwe, wcale nie są aż tak odległe od realizacji. Te kroki to np środowisko i workflow od kompilatora, budowania assetów do wrzucania wszystkiego na C64U i odpalania gry do testów.

W tej chwili całość powstaje w języku C przy użyciu kompilatora Oscar64. Głównym celem projektu jest wykorzystanie tego, czego klasyczne C64 nigdy nie miało: procesora pracującego z częstotliwością 64 MHz, pamięci REU oraz Ultimate Audio. Chciałem sprawdzić, jak mogłyby wyglądać gry, gdybyśmy potraktowali te możliwości jako standard, zamiast ciągle myśleć wyłącznie w kategoriach oryginalnych 64 KB RAM.

Jednocześnie nie chciałem tworzyć wszystkiego „na ślepo”. Jako grafik potrzebuję narzędzia wizualnego, które pozwala mi budować sceny, rozmieszczać obiekty, podglądać animacje i od razu widzieć efekt końcowy. Dlatego równolegle powstaje także zestaw narzędzi z GUI służących do tworzenia światów, poziomów i zasobów wykorzystywanych przez silnik. Dzięki temu mogę skupić się na projektowaniu gry, a nie tylko na ręcznym edytowaniu danych i tabel. O tej części silnika powiem następnym razem bo to wg mnie superważny element. Nie tylko runtime ale także GUI. bez tego tak dużych gier jak sobie wymarzyłem nie uda się zrobić.

A jak to wygląda teraz? Obecnie silnik potrafi obsługiwać między innymi:

  • w pełni bitmapowe mapy poziomów,
  • pełnoekranowe animowane bitmapowe tła,
  • renderowanie tła i tilemapy w każdej klatce,
  • tilemapę opartą o kafelki 1×1 znak,
  • animowane kafelki,
  • aktorów, pociski i kolizje,
  • interaktywne obiekty i proste handlery zdarzeń,
  • sprite multiplexer obsługujący obecnie 16 wirtualnych sprite’ów,
  • bardzo duże obiekty i bossów bez praktycznych ograniczeń rozmiaru,
  • płynne działanie w 50 FPS (PAL).

Tło oraz tilemapa są odświeżane w każdej klatce bez stosowania podwójnego buforowania. W filmie można też zobaczyć animowane elementy świata, takie jak mini-boss zbudowany z animowanych kafelków, a także wykorzystanie multipleksowanych sprite’ów do bardziej dynamicznej i rozbudowanej akcji w stylu SHMUP.

REU wykorzystywane jest jako ogromnego magazynu danych. Liczba animacji, grafik i innych zasobów ograniczona jest obecnie głównie pojemnością 16 MB REU oraz dostępnym miejscem na nośniku USB. Dzięki temu nie muszę już walczyć o każdy bajt pamięci tak jak na klasycznym C64.

Na filmie można również usłyszeć około 2 MB muzyki PCM odtwarzanej bezpośrednio przez Commodore 64 Ultimate. Przez cały czas to właśnie C64U generuje dźwięk, wykorzystując możliwości Ultimate Audio.

Nie wiem jeszcze, czy efektem końcowym będzie pełnoprawna gra, gotowy silnik czy po prostu seria eksperymentów. Na razie najważniejsze jest dla mnie sprawdzenie, co da się osiągnąć na Commodore 64 Ultimate i dobra zabawa przy programowaniu. Chętnie podzielę się ze społecznością retro swoją wiedzą i w następnej odsłonie opowiem nieco więcej o technikaliach tego engine’u.

Zobacz także