Doom via cURL: Server-seitiges Spiel im Terminal ohne Abhängigkeiten
Entwickler Sawyer X hat das cURL Doom-Projekt veröffentlicht — einen HTTP-Server, der Doom-Frames in ANSI-Halbblöcken rendert und sie über das Netzwerk via cURL ans Terminal sendet. Die Lösung läuft ohne jegliche Softwareinstallation, benötigt nur curl und bash. Sie unterstützt zwei Startmodi: einen vereinfachten mit einem bash-Skript und einen reinen Streaming-curl.
Einfacher Startmechanismus
In der einfachen Variante wird der Befehl curl -sL http://localhost:3000 | bash verwendet. Eine GET-Anfrage an die Root-URL gibt das play.sh-Skript mit dem ersetzten SERVER-Host zurück. Das Skript richtet eine Schleife ein:
- Anfragen an /tick für jede Tastatureingabe.
- stty-Behandlung für Raw-Input.
- Wechsel zum alternativen Bildschirm.
- Cursorsteuerung und Terminal-Löschung.
Ein Browser unter derselben URL zeigt eine minimale Seite mit einer einzigen Codezeile.
Streaming-Modus ohne Shell
Für den „masochistischen“ Ansatz: stty -echo -icanon min 1 time 0 && curl -sN -X POST -T - localhost:3000/play. Dies ist ein bidirektionaler Stream:
- Tastatureingaben werden über den POST-Request-Body hochgesendet.
- ANSI-Frames kommen über die Response herunter.
Eine einzige TCP-Verbindung ohne Zwischenschleifen. Typische Terminalprobleme:
- stdin-Buffering bis Enter.
- Input-Echo über die Frames.
Lösung: stty schaltet in den Raw-Modus. Am Ende — reset zur Wiederherstellung.
# Beispiel für Terminal im Raw-Modus
stty -echo -icanon min 1 time 0
curl -sN -X POST -T - localhost:3000/play
reset
Kontext ungewöhnlicher Doom-Ports
Das Projekt reiht sich in eine Serie von Experimenten ein, die Doom auf unkonventionellen Protokollen laufen lassen.
- cssDoom (Nils Lenheer): Rendering via CSS ohne canvas/WebGL. Logik in JS, Basis — originaler id Software-Quellcode (GPLv2). Grafik: div-Elemente mit transform und preserve-3d für 3D-Raum, Sprites, Texturen, Effekte.
- Doom Over DNS (Adam Rice, March 2026): .NET-Version via Cloudflare DNS TXT-Records. WAD komprimiert in ~1964 Records, Dekompression on-the-fly in PowerShell. Keine Festplattenschreibvorgänge, DLLs werden in den Speicher geladen. Verletzt Erwartungen aus RFC 1035, funktioniert aber global mit Caching.
| Projekt | Protokoll | Abhängigkeiten | Funktionen |
|--------|----------|-------------|----------|
| cURL Doom | HTTP/cURL | curl, bash | ANSI-Halbblöcke, bidirektional |
| cssDoom | CSS/JS | Browser | 3D via transform |
| Doom Over DNS | DNS TXT | PowerShell | Keine Festplattenschreibvorgänge, globaler Cache |
Technische Serverdetails
Der Server erzeugt Doom-Frames in Echtzeit, wandelt sie in ANSI-Halbblöcke für das Terminal um. Er unterstützt lag-freie Eingabebehandlung. Der Code ist Open-Source und steht zum Forken und Experimentieren mit Netzwerk-Rendering zur Verfügung.
Wichtige Punkte:
- Minimale Abhängigkeiten: nur curl/bash, keine Kompilation oder Bibliotheken.
- Zwei Modi: Skript für Bequemlichkeit, Streaming für Protokollreinheit.
- ANSI-Halbblöcke sorgen für ordentliches Rendering in einem 80x24-Terminal.
- Im Kontext: Zeigt die Flexibilität von Doom bei Netzwerkprotokollen.
Das Projekt eignet sich hervorragend zum Studium von Low-Level-Netzwerkinteraktionen, Terminalprotokollen und minimalistischer Spieleentwicklung.
— Editorial Team
Noch keine Kommentare.