Powrót do strony głównej

cURL Doom: gra Doom przez HTTP w terminalu

Projekt cURL Doom pozwala grać w Doom przez HTTP i cURL w terminalu z półblokami ANSI. Opisano dwa tryby uruchamiania, niuanse techniczne raw input. Porównanie z cssDoom i Doom Over DNS.

Uruchomienie Doom przez cURL: serwer i terminal
Advertisement 728x90

# Doom przez cURL: gra serwerowa w terminalu bez zależności

Deweloper Sawyer X wypuścił projekt cURL Doom — serwer HTTP, który renderuje klatki Doom w półblokach ANSI i przesyła je do terminala przez sieć za pomocą cURL. Rozwiązanie działa bez instalacji oprogramowania, wymaga tylko curl i bash. Obsługuje dwa tryby uruchomienia: uproszczony ze skryptem bash oraz czysty strumieniowy curl.

Mechanizm prostego uruchomienia

W prostym wariancie używa się polecenia curl -sL http://localhost:3000 | bash. Zapytanie GET do głównego adresu zwraca skrypt play.sh z wstawionym hostem SERVER. Skrypt organizuje pętlę:

  • Zapytania do /tick przy każdym naciśnięciu klawisza.
  • Obsługa stty dla surowego wejścia.
  • Przełączanie alternatywnego ekranu.
  • Zarządzanie kursorem i czyszczenie terminala.

Przeglądarka pod tym samym adresem URL wyświetla minimalną stronę z jedną linią kodu.

Google AdInline article slot

Tryb strumieniowy bez shell

Dla „masochistycznego” podejścia: stty -echo -icanon min 1 time 0 && curl -sN -X POST -T - localhost:3000/play. To dwukierunkowy strumień:

  • Naciśnięcia klawiszy przesyłane w górę przez ciało zapytania POST.
  • Klatki ANSI przychodzące w dół przez odpowiedź.

Jedno połączenie TCP bez pośrednich pętli. Problemy standardowego terminala:

  • Buforowanie stdin do Enter.
  • Echo wejścia na wierzchu klatek.

Rozwiązanie: stty przełącza w tryb raw. Na zakończenie — reset do przywrócenia.

Google AdInline article slot
# Przykład terminala w trybie raw
stty -echo -icanon min 1 time 0
curl -sN -X POST -T - localhost:3000/play
reset

Kontekst nietypowych portów Doom

Projekt wpisuje się w serię eksperymentów z uruchamianiem Doom na niestandardowych protokołach.

  • cssDoom (Nils Lenheer): renderowanie przez CSS bez canvas/WebGL. Logika w JS, podstawa — oryginalny kod źródłowy id Software (GPLv2). Grafika: elementy div z transform i preserve-3d dla przestrzeni 3D, sprite'y, tekstury, efekty.
  • Doom Over DNS (Adam Rice, marzec 2026): wersja .NET przez rekordy DNS TXT Cloudflare. WAD skompresowany do ~1964 rekordów, dekompresja na bieżąco w PowerShell. Bez zapisu na dysk, DLL ładowane do pamięci. Narusza założenia RFC 1035, ale działa globalnie z buforowaniem.

| Projekt | Protokół | Zależności | Cechy |

|--------|----------|-------------|-------------|

Google AdInline article slot

| cURL Doom | HTTP/cURL | curl, bash | Półbloki ANSI, dwukierunkowy |

| cssDoom | CSS/JS | Przeglądarka | 3D przez transform |

| Doom Over DNS | DNS TXT | PowerShell | Bez dysku, globalny cache |

Szczegóły techniczne serwera

Serwer generuje klatki Doom w czasie rzeczywistym, konwertuje je na półbloki ANSI dla terminala. Obsługuje przetwarzanie wejścia bez opóźnień. Kod jest otwarty, dostępny do forkowania i eksperymentów z sieciowym renderowaniem.

Co ważne:

  • Minimalne zależności: tylko curl/bash, bez kompilacji czy bibliotek.
  • Dwa tryby: skryptowy dla wygody, strumieniowy dla czystości protokołu.
  • Półbloki ANSI zapewniają akceptowalny rendering w terminalu 80x24.
  • W kontekście: pokazuje elastyczność Doom wobec protokołów sieciowych.

Projekt jest przydatny do nauki niskopoziomowej komunikacji sieciowej, protokołów terminalowych i minimalistycznego gamedevu.

— Editorial Team

Advertisement 728x90

Czytaj dalej