DOOM mit htop umsetzen
Build-Anleitung
- In das Verzeichnis
doomgeneric wechseln
- Mit dem Befehl
make -j8 bauen
- Eine WAD-Datei (Spieldaten) wird benötigt. Dieses Projekt enthält
freedoom1.wad (alle Credits an das Freedoom-Projekt). Alternativ kann auch die klassische kostenlose Shareware-Version DOOM1.wad heruntergeladen und verwendet werden
Ausführung
Funktionsweise
- Entstanden als Fork des Projekts https://github.com/ozkl/doomgeneric
- Dateien
main.c, keylogger.c, ascii_stuff.c hinzugefügt und teilweise Änderungen vorgenommen
- Einen einfachen Bild-zu-ASCII-Konverter geschrieben (die lange if-Anweisung in
ascii_stuff.c)
- Der Hauptprozess von Doom erzeugt so viele Kindprozesse, wie das ASCII-Bild Zeilen hat, und erstellt mit jedem Prozess ein Shared-Memory-Segment
- Der Hauptprozess kopiert jede Zeile in das jeweilige Speichersegment des entsprechenden Prozesses, und jeder Kindprozess liest aus seinem Segment und überschreibt
argv[0]
- Ursprünglich sollte nach CPU-Auslastung sortiert werden, was sich aber als schwierig erwies. Auch Linux-
nice wurde erwogen, aber verworfen, weil Nutzer nur 19 Werte einstellen können
- Dann kam die Idee, die Zuweisung von virtuellem Speicher zu verwenden. Diese ist pro Prozess spezifisch
- Selbst wenn alle Kindprozesse exakt gleich viel Speicher allokieren, werden die Frames in
htop in der richtigen Reihenfolge angezeigt. Vermutlich wird bei Gleichstand nach Erstellungszeit sortiert
- Ein einfacher Keylogger wurde geschrieben, um das Tastaturgerät zu öffnen. Das Spiel läuft immer im Hintergrund, unabhängig davon, ob
htop ausgeführt wird oder nicht
Unterstützte Plattformen
- Nur unter Ubuntu 22.04 getestet
- Unter WSL und Arch haben Tastaturgeräte andere Namen. Ein Port ist erforderlich
Fehlerbehebung
- Falls die Tastatur nicht funktioniert
- Das Makro
KEYBOARD_DEVICE in main.c prüfen. Es kann je nach Plattform unterschiedlich sein
- Mit dem Befehl
ll /dev/input/by-path ein Gerät auswählen, das kbd enthält
- Falls das Bild einfriert
- Der
sed-Befehl hat möglicherweise nicht funktioniert
- In
htop F2 -> "Display options" -> "Update process names on every refresh" aktivieren
- Fehler
sed: can't read /home/<user>/.config/htop/htoprc: No such file or directory
- Tritt auf, wenn
htop noch nie ausgeführt wurde. htop einmal starten, beenden und dann sed erneut ausführen
- Falls der Haupt-Doom-Prozess abstürzt und nur Zombie-Prozesse übrig bleiben
sudo pkill doom-htop ausführen
Verbesserungen
- Beim Bewegen mit den Pfeiltasten verschiebt sich der
htop-Bildschirm, was unpraktisch ist
- Das lässt sich lösen, indem nach dem Start von
htop der Fokus geändert wird (z. B. durch Drücken der Taste a, um das Auswahlmenü für Prozessoren zu öffnen)
FAQ
- F: Warum wurde das gemacht?
A: Weil es lustig klang.
Lizenz
- Freedoom steht unter einer BSD-ähnlichen Lizenz (siehe
freedoom-license.txt)
- Der restliche Code steht vermutlich unter GPL
Meinung von GN⁺
- Einen 3D-Spielbildschirm mit ASCII-Art darzustellen, ist eine frische Idee. Es scheint ein gutes Beispiel dafür zu sein, wie man in C ähnlich wie bei htop Grafik auf dem Bildschirm zeichnet
- Beeindruckend ist, dass nicht nur der Bildschirm in ASCII-Art umgewandelt wurde, sondern dass dies tatsächlich mit der echten Game-Engine gekoppelt umgesetzt wurde
- Positiv hervorzuheben ist auch, dass das bestehende Projekt
doomgeneric gut genutzt wurde, um dies mit relativ wenig Code umzusetzen
- Das direkte Öffnen eines Linux-Geräts für Tastatureingaben funktioniert unter WSL oder anderen Betriebssystemen möglicherweise nicht. Eine plattformunabhängige Bibliothek für Tastatureingaben wäre prüfenswert
- Die Idee, Shared Memory zu nutzen, um ASCII-Frame-Daten zwischen Eltern- und Kindprozessen auszutauschen, ist interessant. Ein gutes Beispiel, um sich mit IPC zu beschäftigen
- Auch die Idee, ASCII-Grafik in die Prozessnamen von htop einzubauen, ist kreativ. Allerdings hat das Nebenwirkungen, etwa dass sich der Bildschirm durch Namensänderungen verschiebt. Hier scheint noch Verbesserung nötig
- Die Lizenz wird vermutlich GPL sein, ist aber nicht eindeutig. Vor Wiederverwendung des Codes sollte die Lizenz geprüft werden
1 Kommentare
Hacker-News-Kommentare
Diese Kommentare enthalten Reaktionen auf ein Projekt, das das als ASCII gerenderte Spiel Doom als Prozesse mithilfe von
htopausführt. Die wichtigsten Punkte sind folgende:htopals Rendering-Engine zu verwenden, ist beeindruckend und zeigt die Essenz von Software-Hacking.