Jak entuzjaści przepisali silnik gier walki MUGEN w Go
Jeśli dorastałeś w latach 2000-tych, prawdopodobnie pamiętasz fenomen M. U.G.E.N. Był to konstruktor dwuwymiarowych gier walki, w którym Naruto mógł walczyć ze Shrekiem na arenie z Mortal Kombat. Społeczność fanów stworzyła tysiące postaci i aren dla niego, ale sam silnik ostatecznie stał się eksponatem muzealnym. Zamknięty kod źródłowy, zależność od architektury x86 i Windows, brak prawdziwej gry online — wszystko to utknęło w erze modemów telefonicznych.
W pewnym momencie grupa deweloperów miała tego dość. Tak właśnie powstał projekt Ikemen GO — open-source'owy silnik napisany w Go, który pobiera stare zasoby i uruchamia je na nowoczesnym sprzęcie.
Co to za projekt i skąd wzięła się nazwa
Początkowo projekt był rozwijany pod nazwą Ikemen i został napisany przez japońskiego dewelopera. W pewnym momencie autor porzucił repozytorium, więc społeczność wykonała fork i przepisała kod w Go.
Przy okazji — nazwa ma zabawny sens. IKEMEN to akronim wyrażenia Itsu made mo Kansei shinai Eien ni Mikansei ENgine, co mniej więcej tłumaczy się jako „Silnik, który pozostaje na zawsze niedokończony”. Czysto japoński humor samobiczujący.
Główny cel Ikemen GO jest prosty: zachować 100% kompatybilności wstecznej z zasobami M. U.G.E.N 1.1 Beta, eliminując przy tym dawne ograniczenia techniczne.
Co w środku i dlaczego to interesujące
Silnik pobiera znajome pliki postaci, areny, czcionki i dźwięki bez konieczności ich konwersji. Ale w przeciwieństwie do oryginału, Ikemen GO zapewnia deweloperom gier i graczom właściwe nowoczesne możliwości.
Oto co wyróżnia się podczas eksploracji repozytorium:
- Wieloplatformowość bez obejść. Dzięki Go silnik kompiluje się na Windows, Linux (w tym architekturę ARM64), macOS (Intel i Apple Silicon), a nawet buduje się do APK na Androida przez Docker.
- Kod sieciowy. W oryginalnym M. U.G.E.N tryb multiplayer był albo funkcją absentną, albo wymagał podejrzanych zewnętrznych programów. Tutaj tryb sieciowy jest wbudowany w architekturę.
- Elastyczne debugowanie. Jeśli chcesz zajrzeć w bebechy silnika, możesz dosłownie uruchomić go w trybie debugowania w VS Code lub GoLand w ciągu kilku minut.
- Licencja MIT. Kod silnika jest całkowicie otwarty. Pewne niuanse dotyczą tylko biblioteki FFmpeg, która jest linkowana dynamicznie, oraz domyślnych zasobów graficznych interfejsu (są rozpowszechniane na licencji CC-BY 3).
Jak działa uruchamianie i budowanie
Dla zwykłego użytkownika wszystko jest niezwykle proste. Sekcja releases zawiera gotowe pliki binarne. Pobierz archiwum, rozpakuj i uruchom plik wykonywalny Ikemen_GO.exe lub Ikemen_GO.command w zależności od systemu.
Jeśli planujesz modyfikować sam silnik lub eksplorować kod, proces wygląda nieco inaczej.
Najpierw sklonuj repozytorium:
git clone https://github.com/ikemen-engine/Ikemen-GO.git
cd Ikemen-GO
Do uruchomienia lokalnego samo zbudowanie jednego źródła Go nie wystarczy — silnik potrzebuje podstawowych zasobów interfejsu (sprite'ów, dźwięków, menu). Są pobierane z sąsiadującego repozytorium Ikemen-GO-Screenpack i rozpakowywane bezpośrednio do głównego katalogu projektu.
Po tym możesz uruchomić debugowanie przez IDE lub zbudować plik binarny dla docelowej platformy. Do budowania na Androida autorzy przygotowali gotowe kontenery Docker, co eliminuje ból konfiguracji lokalnego NDK.
Dlaczego deweloper powinien zajrzeć w ten kod
Istnieją dwa scenariusze wykorzystania Ikemen GO.
Pierwszy — kochasz gry walki i chcesz stworzyć własną. Pisanie fizyki kolizji, obsługi hitboxów, ładowania sprite'ów i stosu sieciowego od zera to zadanie, które pochłania lata. Traktowanie Ikemen GO jako gotowego frameworka jest znacznie bardziej efektywne. Bierzesz silnik, konfigurujesz skrypty Lua, rysujesz postacie i otrzymujesz gotowy produkt.
Drugi scenariusz — studiowanie architektury złożonych systemów w Go. W społeczności Go jest zazwyczaj kojarzony z mikroserwisami, REST API, gRPC i narzędziami CLI. Ikemen GO pokazuje zupełnie inną stronę języka:
- Jak zorganizować pętlę gry i obsługę wejścia z minimalnym opóźnieniem.
- Jak współdziałać z multimedia przez Cgo i FFmpeg.
- Jak ustrukturyzować duży projekt gry bez używania ciężkich silników zewnętrznych jak Unity czy Godot.
Podsumowanie
Ikemen GO to świetny przykład na to, jak open source daje porzuconym technologiom drugie życie. Projekt jest aktywny, PR-y są przyjmowane, a w repozytorium ciągle trwa praca.
Jeśli szukasz nietypowego open-source'owego projektu w Go do nauki lub od dawna chcesz stworzyć swoją wymarzoną grę walki bez konieczności pisania własnego renderera — zajrzyj do repozytorium. Najlepszym miejscem do rozpoczęcia eksploracji jest ich Wiki, która szczegółowo opisuje wszystkie nowe funkcje, których nigdy nie było w oryginalnym M. U.G.E.N.
Powiązane projekty