# 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.
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.
# 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 |
|--------|----------|-------------|-------------|
| 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
Brak komentarzy.