Minecraft w swojej najbardziej pierwotnej postaci właśnie trafił na sprzęt, o którym Notch w 2009 roku nawet nie śnił. Projekt rdgeneric, opublikowany na GitHubie przez programistę pragyaangaur, odtwarza wersję rd-132211 - pierwsze publiczne wydanie Minecrafta z 13 maja 2009 roku - jako pojedynczy plik źródłowy w języku C, który kompiluje się i działa na sześciu zupełnie różnych platformach, od terminala tekstowego po goły procesor x86 bez jakiegokolwiek systemu operacyjnego.

Jedno jądro gry, sześć platform

Autor projektu opisuje go jako implementację inspirowaną doomgeneric - znanym podejściem polegającym na napisaniu silnika gry bez żadnych zależności od systemu operacyjnego i bez dynamicznej alokacji pamięci. Dzięki temu ten sam kod z pliku src/rd.c wystarczy skompilować pod konkretny framebuffer i obsługę klawiatury, żeby działał praktycznie wszędzie.

  • Terminal - renderowanie znakami blokowymi, z obsługą myszy
  • Telnet - wspólny, współdzielony świat dla wielu połączeń jednocześnie
  • Przeglądarka - moduł WebAssembly o wadze 20 KB, działający w pełni offline
  • Plik PDF - silnik JavaScript uruchamiany w Chrome za pomocą 120 pól tekstowych
  • Goły procesor x86 - tryb VGA 13h, obsługa PS/2, start bez systemu operacyjnego
  • Mikrokontrolery Raspberry Pi Pico, Pico 2 i Game Boy Advance (kompilacja potwierdzona, testy sprzętowe nie)

Rozgrywka bazuje na raycastingu - jednym promieniu na piksel - podobnie jak w słynnym Minecraft 4K, minimalistycznej wersji gry z 2010 roku napisanej na konkurs Java4K. Świat generuje się proceduralnie, a fizyka i oświetlenie odwzorowują niewielki fragment mechanik znanych z dzisiejszego Minecraft Java Edition.

Jak mały może być Minecraft

Skompilowany kod rdgeneric zajmuje od 9 do 14 KB, w zależności od docelowej architektury. Wersja działająca w pliku PDF korzysta z narzędzia wasm2js, które konwertuje moduł WebAssembly do czystego JavaScriptu zrozumiałego dla silnika przeglądarki wyświetlającego dokument. Wszystkie platformy wykonują identyczną fizykę - świat opisują liczby całkowite, a pozycję gracza liczby zmiennoprzecinkowe - co zapewnia zgodność zachowania gry niezależnie od tego, czy uruchamiamy ją na nowym laptopie, czy na emulowanym komputerze z początku lat 90.

Projekt udostępniono na licencji MIT, co oznacza pełną swobodę modyfikacji i dalszego rozwijania kodu przez społeczność. README repozytorium zawiera demonstracyjny GIF pokazujący identyczną przechadzkę po tym samym świecie równocześnie w przeglądarce, terminalu, PDF-ie i na gołym x86, a działającą wersję webową można odpalić bezpośrednio z GitHub Pages autora.

Dlaczego to ma znaczenie dla graczy

Dla społeczności Minecrafta, przyzwyczajonej do aktualizacji dodających nowe biomy, moby i mechaniki w kolejnych wersjach gry, rdgeneric jest przypomnieniem, jak wyglądał punkt wyjścia - gra bez craftingu, moich i większości bloków, w której liczyło się tylko stawianie i usuwanie sześciu typów klocków w proceduralnie generowanym świecie. To właśnie ta wersja, rd-132211, krąży w sieci jako playable demo pierwotnej koncepcji Notcha, zanim Minecraft zyskał system craftingu i tysiące godzin zawartości, które dziś przyciągają do gry nowych odbiorców, w tym na konsolach i urządzeniach mobilnych.

Projekty typu rdgeneric regularnie trafiają na szczyty list popularności na GitHubie i Hacker News właśnie dlatego, że łączą nostalgię za pierwszą wersją gry z czystą inżynierską ciekawością: ile da się wycisnąć z jednego pliku w C, żeby uruchomić go na sprzęcie, którego moc liczy się w megahercach, a nie gigahercach. Dla programistów zainteresowanych retrokomputerami i embedded systemami to konkretny, działający przykład, jak pisać kod przenośny między skrajnie różnymi platformami bez jednej linijki warunków specyficznych dla systemu operacyjnego.

Źródła