Ein Videospiel schreiben wie 1987 von Grund auf
Was wir bauen
- Die 11. Version des X-Protokolls entstand 1987.
- X11 ist ein Modell aus der Zeit vor GPUs und passt daher nicht gut zu heutiger Hardware.
- Jedes Unix-System hat einen X-Server, und auch unter macOS und Windows lassen sich GUI-Linux-Anwendungen ausführen.
- Das X11-Protokoll ist vergleichsweise einfach und man kann allein durch das Erstellen eines Sockets loslegen.
- Bei 2D-Anwendungen ist keine Interaktion mit der GPU nötig, damit sie funktionieren.
Authentifizierung
- Im vorherigen Artikel wurde eine Verbindung zum X-Server ohne Authentifizierung hergestellt.
- Jetzt wird das X-Authentifizierungsprotokoll unterstützt.
- Das ist nötig, weil in einigen Desktop-Umgebungen mit XWayland eine Authentifizierung erforderlich ist.
- Die Authentifizierung wird mit dem Mechanismus MIT-MAGIC-COOKIE-1 verarbeitet.
Ein Fenster öffnen
- Es wird ein UNIX-Domain-Socket geöffnet, um mit dem X-Server zu kommunizieren.
- Über den X11-Handshake wird eine Verbindung zum Server aufgebaut.
- Es werden ein Grafikkontext erstellt und ein Fenster angelegt.
- Um das Fenster anzuzeigen, wird der Aufruf
map_window verwendet.
Assets laden
- Die für das Spiel benötigten Bilder werden geladen und in ein zum X11-Bildformat passendes Format umgewandelt.
- Es wird ein Pixmap erzeugt, das Bild hochgeladen und anschließend der benötigte Teil in das Fenster kopiert.
Meinung von GN⁺
- Die Einfachheit von X11: Das X11-Protokoll ist relativ einfach, sodass man direkt über Sockets damit kommunizieren kann. Das hilft Einsteiger:innen dabei, die Grundkonzepte von Netzwerkprogrammierung und GUI zu verstehen.
- Optimierungspotenzial: Mit Offscreen-Buffern wie Pixmaps lassen sich Bilder nur einmal hochladen und danach schnell kopieren. Das ist ein gutes Beispiel für Performance-Optimierung.
- Vorteile der Sprache Odin: Die Sprache Odin bietet Funktionen, mit denen sich komplexe Aufgaben wie Speicherverwaltung einfach handhaben lassen. Das ermöglicht effizientes Programmieren.
- Unterstützung für Legacy-Systeme: Dieser Ansatz kann auch auf älteren Systemen funktionieren. Das ist nützlich, wenn Software in unterschiedlichen Umgebungen laufen muss.
- Lernressource: Sich direkt mit Low-Level-Protokollen wie X11 zu beschäftigen, hilft sehr dabei, die internen Abläufe einer GUI zu verstehen. Das kann zur fachlichen Weiterentwicklung von Entwickler:innen beitragen.
1 Kommentare
Hacker-News-Kommentare
Erster Kommentar: PCs hatten 1987 1–2 MB RAM, und das Super NES verfügte über 128 KB RAM. Man erstellte ausführbare Dateien, die viel kleiner waren als Programme von Microsoft. Link
Zweiter Kommentar: X11 ist alt, aber wenn man nur die grundlegenden Funktionen implementiert, die für die Spieleentwicklung nötig sind, muss man sich um den Rest nicht kümmern. Mit Xlib kann man einfacher arbeiten.
Dritter Kommentar: Es wurde ein Minesweeper-Klon für DOS-PCs in Turbo Pascal entwickelt. Bei großen Levels gab es Probleme mit rekursiven Algorithmen, und es wurde eine Funktion hinzugefügt, mit der man eine sichere Startposition wählen kann.
Vierter Kommentar: 1987 Spiele zu entwickeln war viel schwieriger als heute. DOS unterstützte kein Multitasking, wodurch der Arbeitsablauf sehr ineffizient war. Link
Fünfter Kommentar: Die minimale Größe der wasm-Datei der Godot-Engine von 50 MB war enttäuschend. Besonders bei einfachen 2D-Spielen ist Optimierung nötig. Insgesamt war es dennoch beeindruckend.
Sechster Kommentar: Das Interesse an der Sprache Odin wurde geweckt. Ähnlich wie Zig übergibt Odin Speicher-Allocatoren an Funktionen, hat dabei aber einen Mechanismus, der das bequemer handhabbar macht.
Siebter Kommentar: Minesweeper unter Windows 3.1 hatte einen Cheat-Code. Mit einer bestimmten Tastenkombination konnte man sichere Felder und Felder mit Bomben unterscheiden.
Achter Kommentar: Mit Bibliotheken wie SDL gibt es fast keinen Overhead, und man kann verschiedene Betriebssysteme unterstützen. Mit dem Legacy-SDL 1.x lassen sich auch alte Linux-Versionen unterstützen.
Neunter Kommentar: Die Windows-Executable von Simon Tathams Mines ist etwa 180 KiB groß. Link