Mewujudkan DOOM dengan htop
Cara build
- Pindah ke direktori
doomgeneric
- Build dengan perintah
make -j8
- Memerlukan file WAD (data game). Proyek ini menyertakan
freedoom1.wad (semua kredit untuk proyek Freedoom). Atau bisa juga mengunduh dan menggunakan versi shareware klasik gratis DOOM1.wad
Cara menjalankan
Cara kerja
- Dibuat dengan melakukan fork pada proyek https://github.com/ozkl/doomgeneric
- Menambahkan file
main.c, keylogger.c, ascii_stuff.c serta melakukan beberapa modifikasi
- Menulis konverter gambar-ke-ASCII sederhana (if statement panjang di
ascii_stuff.c)
- Proses doom utama membuat proses anak sebanyak jumlah baris pada gambar ASCII, lalu membuat segmen memori bersama untuk tiap proses
- Proses utama menyalin tiap baris ke segmen memori proses terkait, dan tiap proses anak membacanya dari segmennya sendiri lalu menimpa
argv[0]
- Awalnya ingin mengurutkan proses berdasarkan penggunaan CPU, tetapi sulit.
nice di Linux juga sempat dipertimbangkan, namun dibatalkan karena hanya ada 19 nilai yang bisa diatur pengguna
- Lalu muncul ide menggunakan alokasi memori virtual. Nilainya spesifik untuk tiap proses
- Bahkan ketika semua proses anak mengalokasikan memori yang persis sama, frame tetap ditampilkan dalam urutan yang benar di
htop. Dugaan penulis, jika nilainya sama maka pengurutan dilakukan berdasarkan waktu pembuatan
- Menulis keylogger sederhana untuk membuka perangkat keyboard. Game selalu berjalan di background terlepas dari apakah
htop sedang dijalankan atau tidak
Platform yang didukung
- Hanya diuji di Ubuntu 22.04
- Di WSL dan Arch, nama perangkat keyboard berbeda. Perlu porting
Pemecahan masalah
- Jika keyboard tidak berfungsi
- Periksa makro
KEYBOARD_DEVICE di main.c. Nilainya bisa berbeda di tiap platform
- Gunakan perintah
ll /dev/input/by-path dan pilih perangkat yang mengandung kbd
- Jika frame berhenti
- Perintah
sed mungkin tidak bekerja
- Di
htop, tekan F2 -> "Display options" -> centang "Update process names on every refresh"
- Error
sed: can't read /home/<user>/.config/htop/htoprc: No such file or directory
- Terjadi karena
htop belum pernah dijalankan. Jalankan htop sekali, keluar, lalu jalankan sed lagi
- Jika proses doom utama mati dan hanya proses zombie yang tersisa
- Jalankan
sudo pkill doom-htop
Hal yang bisa ditingkatkan
- Saat bergerak dengan tombol arah, layar
htop ikut bergerak sehingga kurang nyaman
- Ini bisa diatasi dengan mengubah fokus setelah
htop dimulai (misalnya menekan tombol a untuk membuka menu pemilihan prosesor)
FAQ
- Q: Kenapa membuat ini?
A: Karena sepertinya akan seru.
Lisensi
- Freedoom menggunakan lisensi bergaya BSD (lihat
freedoom-license.txt)
- Sisa kodenya diperkirakan GPL
Opini GN⁺
- Mengekspresikan layar game 3D sebagai ASCII art adalah ide yang segar. Ini juga tampak seperti contoh bagus untuk menggambar grafis ke layar dengan C seperti
htop
- Yang mengesankan, ini bukan sekadar mengubah tampilan layar menjadi ASCII art, tetapi benar-benar diimplementasikan dengan menghubungkannya ke game engine asli
- Pemanfaatan proyek
doomgeneric dengan baik untuk mewujudkannya dengan jumlah kode yang relatif sedikit juga layak diapresiasi
- Membuka perangkat Linux secara langsung untuk menerima input keyboard mungkin tidak akan berjalan di WSL atau lingkungan OS lain. Layak mempertimbangkan penggunaan pustaka input keyboard yang independen dari OS
- Ide menggunakan memori bersama untuk mengirim data frame ASCII antara proses induk dan anak sangat menarik. Ini contoh yang bagus untuk mempelajari IPC
- Ide memasukkan grafis ASCII ke nama proses di
htop juga kreatif. Namun, ada efek samping seperti layar htop bergerak karena perubahan nama proses. Tampaknya masih perlu perbaikan
- Lisensinya diperkirakan GPL, tetapi belum jelas. Jika ingin menggunakan ulang kode, perlu memeriksa lisensinya
1 komentar
Opini Hacker News
Komentar-komentar ini berisi reaksi terhadap proyek yang menjalankan game Doom yang dirender dalam ASCII sebagai proses dengan memanfaatkan htop. Poin-poin utamanya adalah sebagai berikut: