2 poin oleh GN⁺ 2024-04-22 | 1 komentar | Bagikan ke WhatsApp

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

  • Disarankan menyimpan pekerjaan penting terlebih dahulu
  • Telah dipastikan berjalan dengan baik bahkan di laptop lama
  • Jalankan perintah berikut:
    sed -i 's/update_process_names=0/update_process_names=1/' ~/.config/htop/htoprc
    sudo ./doom-htop -iwad freedoom1.wad
    htop -d 1 -s M_VIRT
    
  • Urutan menjalankan doom-htop dan htop tidak berpengaruh
  • sudo diperlukan untuk membuka perangkat keyboard. Jika ada kekhawatiran soal keamanan, bisa menjalankannya tanpa sudo dan hanya menikmati grafisnya
  • htop dengan -d 1 digunakan untuk kecepatan refresh 10FPS. -s M_VIRT digunakan untuk mengurutkan proses berdasarkan alokasi memori virtual
  • Perintah sed diperlukan karena secara default htop tidak memperbarui nama proses setiap kali refresh

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

  1. 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
  2. Jika frame berhenti
    • Perintah sed mungkin tidak bekerja
    • Di htop, tekan F2 -> "Display options" -> centang "Update process names on every refresh"
  3. 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
  4. 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

  1. 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

 
GN⁺ 2024-04-22
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:

  • Perbandingan dengan PSDoom: Jika PSDoom menggunakan Doom untuk mengelola proses, proyek ini melakukan kebalikannya, yaitu memainkan Doom dengan menggunakan pengelola proses.
  • Penilaian teknis: Merendernya dalam ASCII lalu memasukkannya ke nama proses itu sendiri tidak terlalu sulit, tetapi gagasan memanfaatkan htop sebagai mesin render sangat mengesankan dan menunjukkan esensi sejati dari software hacking.
  • Rasa hormat pada kemampuan pengembang: Melihat pengembang yang punya waktu dan kemampuan untuk membuat proyek seperti ini bisa membuat orang kehilangan kepercayaan diri terhadap kemampuannya sendiri.
  • Tren integrasi Doom: Sekarang mungkin sudah saatnya mempertimbangkan untuk mengintegrasikan hal-hal sehari-hari ke dalam Doom. Bisa dibayangkan daftar tugas atau kalender di dalamnya.
  • Pujian untuk semangat hacker: Menyenangkan melihat proyek hacking yang dibuat untuk kesenangan bisa menjadi populer, dan ini menunjukkan bahwa semangat hacker masih hidup.
  • Mengingatkan pada Bad Apple: Ini mengingatkan pada video Bad Apple yang diimplementasikan di Windows Task Manager.
  • Masa depan Doom: Sulit membayangkan sampai sejauh mana Doom masih bisa diimplementasikan di masa depan.