Implémenter DOOM avec htop
Méthode de build
- Aller dans le répertoire
doomgeneric
- Compiler avec la commande
make -j8
- Un fichier WAD (données du jeu) est nécessaire. Ce projet inclut
freedoom1.wad (tous les crédits reviennent au projet Freedoom). Il est aussi possible de télécharger et d’utiliser la version shareware classique gratuite DOOM1.wad
Méthode d’exécution
Principe de fonctionnement
- Travail réalisé à partir d’un fork du projet https://github.com/ozkl/doomgeneric
- Ajout des fichiers
main.c, keylogger.c, ascii_stuff.c et modifications partielles
- Écriture d’un convertisseur simple image-vers-ASCII (la longue suite de
if dans ascii_stuff.c)
- Le processus Doom principal crée des processus enfants en nombre égal au nombre de lignes de l’image ASCII, puis crée un segment de mémoire partagée avec chacun d’eux
- Le processus principal copie chaque ligne dans le segment mémoire du processus correspondant, et chaque processus enfant lit son propre segment pour écraser
argv[0]
- L’idée initiale était de trier les processus selon l’utilisation CPU, mais cela s’est révélé difficile.
nice sous Linux a aussi été envisagé, mais comme l’utilisateur ne peut définir que 19 valeurs, l’idée a été abandonnée
- L’idée d’utiliser l’allocation de mémoire virtuelle est alors apparue. Elle est spécifique à chaque processus
- Même si tous les processus enfants allouent exactement la même quantité de mémoire,
htop affiche les frames dans le bon ordre. Il est supposé qu’en cas d’égalité, le tri se fait selon l’heure de création
- Un keylogger simple a été écrit pour ouvrir le périphérique clavier. Le jeu tourne toujours en arrière-plan, que
htop soit lancé ou non
Plateformes prises en charge
- Testé uniquement sur Ubuntu 22.04
- Sous WSL et Arch, le nom du périphérique clavier est différent. Un portage est nécessaire
Résolution des problèmes
- Si le clavier ne fonctionne pas
- Vérifier la macro
KEYBOARD_DEVICE dans main.c. Elle peut varier selon la plateforme
- Utiliser la commande
ll /dev/input/by-path et choisir un périphérique contenant kbd
- Si les frames se figent
- La commande
sed n’a peut-être pas fonctionné
- Dans
htop, aller sur F2 -> "Display options" -> cocher "Update process names on every refresh"
- Erreur
sed: can't read /home/<user>/.config/htop/htoprc: No such file or directory
- Cela se produit si
htop n’a jamais été lancé. Lancer htop, le quitter, puis exécuter de nouveau sed
- Si le processus Doom principal meurt et qu’il ne reste que des processus zombies
- Exécuter
sudo pkill doom-htop
Améliorations
- Lors d’un déplacement avec les touches fléchées, l’écran de
htop bouge aussi, ce qui est gênant
- Cela peut être résolu en changeant le focus après le démarrage de
htop (par exemple en appuyant sur la touche a pour ouvrir le menu de sélection du processeur)
FAQ
- Q : Pourquoi l’avoir créé ?
A : Parce que ça me semblait amusant.
Licence
- Freedoom est sous licence de type BSD (voir
freedoom-license.txt)
- Le reste du code est présumé sous GPL
L’avis de GN⁺
- Représenter l’écran d’un jeu 3D en ASCII art est une idée originale. Cela semble aussi être un bon exemple pour dessiner des graphismes à l’écran en C à la manière de htop
- Il est impressionnant que ce ne soit pas seulement un affichage ASCII, mais une véritable implémentation connectée au moteur du jeu
- Le bon usage du projet
doomgeneric pour réaliser cela avec peu de code mérite aussi d’être salué
- Ouvrir directement un périphérique Linux pour capter l’entrée clavier peut ne pas fonctionner sous WSL ou sur d’autres OS. Il pourrait être utile d’envisager une bibliothèque de saisie clavier indépendante de l’OS
- L’idée d’utiliser de la mémoire partagée pour échanger les données des frames ASCII entre processus parent et enfants est intéressante. C’est un bon exemple pour étudier l’IPC
- L’idée d’injecter les graphismes ASCII dans les noms de processus de htop est créative. Mais cela entraîne aussi des effets secondaires, comme un écran qui bouge quand les noms de processus changent. Des améliorations semblent nécessaires
- La licence semble être GPL, mais ce n’est pas clairement établi. En cas de réutilisation du code, il faut vérifier la licence
1 commentaires
Avis sur Hacker News
Ces commentaires portent sur un projet qui fait tourner le jeu Doom rendu en ASCII comme un processus via htop. Voici les points principaux :