Minecraft in seiner ursprünglichsten Form läuft jetzt auf Hardware, von der Notch 2009 nicht einmal zu träumen gewagt hätte. Das Projekt rdgeneric, veröffentlicht auf GitHub vom Entwickler pragyaangaur, rekonstruiert die Version rd-132211, das erste öffentliche Release von Minecraft vom 13. Mai 2009, als eine einzige Quelldatei in der Sprache C, die sich auf sechs völlig unterschiedlichen Plattformen kompilieren und ausführen lässt, vom Textterminal bis zum nackten x86-Prozessor ohne jedes Betriebssystem.
Ein Spielkern, sechs Plattformen
Der Autor des Projekts beschreibt es als Implementierung im Stil von doomgeneric, einem bekannten Ansatz, bei dem die Spiel-Engine ohne jegliche Betriebssystem-Abhängigkeiten und ohne dynamische Speicherzuweisung geschrieben wird. Dadurch reicht es, denselben Code aus der Datei src/rd.c für den jeweiligen Framebuffer und die Tastatureingabe zu kompilieren, damit er praktisch überall läuft.
- Terminal, Darstellung mit Blockzeichen, mit Mausunterstützung
- Telnet, eine gemeinsame, geteilte Welt für mehrere gleichzeitige Verbindungen
- Browser, ein 20 KB großes WebAssembly-Modul, das vollständig offline läuft
- PDF-Datei, eine JavaScript-Engine, die in Chrome über 120 Textfelder ausgeführt wird
- Nackter x86-Prozessor, VGA-Modus 13h, PS/2-Unterstützung, Start ohne Betriebssystem
- Mikrocontroller Raspberry Pi Pico, Pico 2 und Game Boy Advance (Kompilierung bestätigt, Hardwaretests noch nicht)
Das Gameplay basiert auf Raycasting, einem Strahl pro Pixel, ähnlich wie bei dem berühmten Minecraft 4K, der minimalistischen Version des Spiels von 2010, die für den Java4K-Wettbewerb geschrieben wurde. Die Welt wird prozedural generiert, und Physik sowie Beleuchtung bilden einen kleinen Ausschnitt der Mechaniken ab, die man aus der heutigen Minecraft Java Edition kennt.
Wie klein Minecraft sein kann
Der kompilierte Code von rdgeneric wiegt je nach Zielarchitektur zwischen 9 und 14 KB. Die PDF-Version nutzt das Tool wasm2js, das das WebAssembly-Modul in reines JavaScript umwandelt, das die Rendering-Engine des Browsers im Dokument versteht. Alle Plattformen führen dieselbe Physik aus, die Welt wird über Integer beschrieben, die Position des Spielers über Gleitkommazahlen, was ein identisches Spielverhalten garantiert, egal ob man es auf einem neuen Laptop oder auf einem emulierten Computer aus den frühen 1990ern laufen lässt.
Das Projekt steht unter der MIT-Lizenz, was volle Freiheit für Modifikationen und die Weiterentwicklung des Codes durch die Community bedeutet. Die README des Repositorys enthält ein Demo-GIF, das einen identischen Spaziergang durch dieselbe Welt gleichzeitig im Browser, im Terminal, im PDF und auf dem nackten x86-System zeigt, und die lauffähige Webversion lässt sich direkt über die GitHub Pages des Autors starten.
Warum das für Spieler wichtig ist
Für die Minecraft-Community, die an Updates gewöhnt ist, die in aufeinanderfolgenden Spielversionen neue Biome, Mobs und Mechaniken hinzufügen, ist rdgeneric eine Erinnerung daran, wie der Ausgangspunkt aussah: ein Spiel ohne Crafting, ohne Mobs und ohne die meisten Blöcke, bei dem es nur darauf ankam, sechs Blockarten in einer prozedural generierten Welt zu platzieren und zu entfernen. Genau diese Version, rd-132211, kursiert im Netz als spielbare Demo des ursprünglichen Konzepts von Notch, bevor Minecraft das Crafting-System und tausende Stunden an Inhalten bekam, die heute neue Spieler ins Spiel ziehen, auch auf Konsolen und mobilen Geräten.
Projekte wie rdgeneric landen regelmäßig an der Spitze der Beliebtheitslisten auf GitHub und Hacker News, gerade weil sie Nostalgie für die erste Version des Spiels mit echter ingenieurstechnischer Neugier verbinden: Wie viel lässt sich aus einer einzigen C-Datei herausholen, um sie auf Hardware laufen zu lassen, deren Leistung in Megahertz statt Gigahertz gemessen wird? Für Entwickler, die sich für Retro-Computer und Embedded-Systeme interessieren, ist das ein konkretes, funktionierendes Beispiel dafür, wie man Code schreibt, der zwischen extrem unterschiedlichen Plattformen portierbar ist, ohne eine einzige betriebssystemspezifische Bedingung im Code.