Retour à l'accueil

cURL Doom : jeu Doom via HTTP dans le terminal

Le projet cURL Doom permet de jouer à Doom via HTTP et cURL dans le terminal avec des demi-blocs ANSI. Deux modes de lancement décrits, subtilités techniques de l'entrée brute. Comparaison avec cssDoom et Doom Over DNS.

Lancer Doom via cURL : serveur et terminal
Advertisement 728x90

# # Doom via cURL : Jeu côté serveur dans le terminal sans dépendances

Le développeur Sawyer X a publié le projet cURL Doom — un serveur HTTP qui rend les frames de Doom en demi-blocs ANSI et les envoie au terminal via le réseau avec cURL. La solution fonctionne sans installer aucun logiciel, ne nécessitant que curl et bash. Elle supporte deux modes de lancement : un simplifié avec un script bash et un pur streaming curl.

Mécanisme de lancement simple

Dans la version simple, la commande curl -sL http://localhost:3000 | bash est utilisée. Une requête GET à la racine retourne le script play.sh avec l'hôte SERVER substitué. Le script configure une boucle :

  • Requêtes à /tick pour chaque appui de touche.
  • Gestion de stty pour l'entrée raw.
  • Passage à l'écran alternatif.
  • Contrôle du curseur et effacement du terminal.

Un navigateur à la même URL voit une page minimale avec une ligne de code.

Google AdInline article slot

Mode streaming sans shell

Pour l'approche « masochiste » : stty -echo -icanon min 1 time 0 && curl -sN -X POST -T - localhost:3000/play. C'est un flux bidirectionnel :

  • Les appuis de touche sont envoyés vers le haut via le corps de la requête POST.
  • Les frames ANSI descendent via la réponse.

Une seule connexion TCP sans boucles intermédiaires. Problèmes standards du terminal :

  • Bufférisation de stdin jusqu'à Entrée.
  • Écho de l'entrée sur les frames.

Solution : stty passe en mode raw. À la fin — reset pour restaurer.

Google AdInline article slot
# Exemple de terminal en mode raw
stty -echo -icanon min 1 time 0
curl -sN -X POST -T - localhost:3000/play
reset

Contexte des ports Doom inhabituels

Le projet s'inscrit dans une série d'expériences exécutant Doom sur des protocoles non standards.

  • cssDoom (Nils Lenheer) : rendu via CSS sans canvas/WebGL. Logique en JS, base — source originale d'id Software (GPLv2). Graphismes : éléments div avec transform et preserve-3d pour l'espace 3D, sprites, textures, effets.
  • Doom Over DNS (Adam Rice, mars 2026) : version .NET via enregistrements DNS TXT de Cloudflare. WAD compressé en ~1964 enregistrements, décompression à la volée en PowerShell. Pas d'écritures sur disque, DLLs chargées en mémoire. Contredit les attentes de RFC 1035 mais fonctionne globalement avec mise en cache.

| Projet | Protocole | Dépendances | Fonctionnalités |

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

Google AdInline article slot

| cURL Doom | HTTP/cURL | curl, bash | Demi-blocs ANSI, bidirectionnel |

| cssDoom | CSS/JS | Navigateur | 3D via transform |

| Doom Over DNS | DNS TXT | PowerShell | Pas d'écritures disque, cache global |

Détails techniques du serveur

Le serveur génère les frames Doom en temps réel, les convertit en demi-blocs ANSI pour le terminal. Supporte la gestion d'entrée sans latence. Le code est open-source, disponible pour fork et expériences avec rendu réseau.

Points clés :

  • Dépendances minimales : seulement curl/bash, pas de compilation ni bibliothèques.
  • Deux modes : scripté pour la commodité, streaming pour la pureté du protocole.
  • Les demi-blocs ANSI offrent un rendu décent dans un terminal 80x24.
  • Dans le contexte : démontre la flexibilité de Doom pour les protocoles réseau.

Le projet est utile pour étudier les interactions réseau de bas niveau, les protocoles de terminal, et le développement de jeux minimalistes.

— Editorial Team

Advertisement 728x90

Lire ensuite