Menulis Video Game dari Nol Seperti Tahun 1987
Apa yang kita buat
- Versi ke-11 dari protokol X lahir pada tahun 1987.
- X11 adalah model dari sebelum GPU muncul, sehingga tidak terlalu cocok dengan perangkat keras masa kini.
- Semua sistem Unix memiliki server X, dan di macOS maupun Windows juga bisa menjalankan aplikasi Linux GUI.
- Protokol X11 relatif sederhana, dan bisa dimulai hanya dengan membuat soket.
- Untuk aplikasi 2D, ini bisa berjalan tanpa perlu berinteraksi dengan GPU.
Autentikasi
- Pada artikel sebelumnya, koneksi ke server X dilakukan tanpa autentikasi.
- Sekarang protokol autentikasi X didukung.
- Ini karena pada beberapa lingkungan desktop yang menggunakan XWayland, autentikasi diperlukan.
- Autentikasi ditangani dengan mekanisme MIT-MAGIC-COOKIE-1.
Membuka jendela
- Membuka soket domain UNIX untuk berkomunikasi dengan server X.
- Menetapkan koneksi dengan server melalui handshake X11.
- Membuat graphic context dan jendela.
- Menggunakan pemanggilan
map_window untuk menampilkan jendela.
Memuat aset
- Memuat gambar yang diperlukan untuk game, lalu mengonversinya agar sesuai dengan format gambar X11.
- Membuat Pixmap, mengunggah gambar, lalu menyalin bagian yang diperlukan ke jendela.
Opini GN⁺
- Kesederhanaan X11: Protokol X11 relatif sederhana sehingga bisa dikomunikasikan langsung melalui soket. Ini membantu engineer pemula memahami konsep dasar network programming dan GUI.
- Potensi optimisasi: Dengan menggunakan buffer off-screen seperti Pixmap, gambar cukup diunggah sekali lalu dapat disalin dengan cepat setelahnya. Ini adalah contoh bagus dari optimisasi performa.
- Keunggulan bahasa Odin: Bahasa Odin menyediakan fitur yang dapat menyederhanakan tugas kompleks seperti manajemen memori. Ini memungkinkan pemrograman yang efisien.
- Dukungan sistem lama: Metode ini dapat berjalan bahkan pada sistem lama. Ini berguna ketika perangkat lunak harus dijalankan di berbagai lingkungan.
- Sumber pembelajaran: Menangani langsung protokol level rendah seperti X11 sangat membantu dalam memahami cara kerja internal GUI. Ini dapat berkontribusi pada peningkatan kemampuan teknis engineer.
1 komentar
Opini Hacker News
Komentar pertama: PC pada tahun 1987 memiliki RAM 1~2MB, dan Super NES memiliki RAM 128KB. Dulu orang membuat berkas executable yang jauh lebih kecil daripada program Microsoft. Tautan
Komentar kedua: X11 memang sudah tua, tetapi jika hanya mengimplementasikan fungsi dasar yang dibutuhkan untuk pengembangan game, sisanya tidak perlu dipikirkan. Menggunakan Xlib bisa membuat pekerjaan lebih mudah.
Komentar ketiga: Pernah membuat klon Minesweeper untuk DOS PC dengan Turbo Pascal. Mengalami masalah algoritma rekursif pada level besar, lalu menambahkan fitur untuk memilih posisi awal yang aman.
Komentar keempat: Mengembangkan game pada tahun 1987 jauh lebih sulit dibanding sekarang. DOS tidak mendukung multitasking sehingga alur kerja menjadi sangat tidak efisien. Tautan
Komentar kelima: Kecewa karena ukuran berkas wasm engine Godot minimal 50MB. Terutama untuk game 2D sederhana, optimasi sangat dibutuhkan. Secara keseluruhan tetap mengesankan.
Komentar keenam: Mulai tertarik pada bahasa Odin. Odin, seperti Zig, meneruskan allocator memori ke fungsi, tetapi memiliki mekanisme yang membuat penanganannya lebih sederhana.
Komentar ketujuh: Minesweeper di Windows 3.1 punya cheat code. Jika memasukkan kombinasi tombol tertentu, pengguna bisa membedakan kotak aman dan kotak yang berisi bom.
Komentar kedelapan: Menggunakan library seperti SDL hampir tidak menambah overhead, dan tetap bisa mendukung berbagai sistem operasi. Jika memakai SDL 1.x lawas, versi Linux lama pun masih bisa didukung.
Komentar kesembilan: Ukuran file executable Mines Windows buatan Simon Tatham sekitar 180KiB. Tautan