27 poin oleh GN⁺ 28 hari lalu | 1 komentar | Bagikan ke WhatsApp
  • RollerCoaster Tycoon karya tahun 1999 adalah game simulasi yang hampir seluruhnya ditulis dalam assembly, dan tetap mampu mempertahankan performa stabil sambil memproses ribuan pengunjung secara real-time
  • Pengembang Chris Sawyer memilih kontrol tingkat rendah alih-alih bahasa tingkat tinggi, dan menyelesaikan generasi terakhir game assembly yang memaksimalkan efisiensi komputasi CPU
  • Melalui proyek penggemar OpenRCT2, pola optimisasi yang presisi dan teknik penghematan memori dari versi asli dianalisis lewat rekayasa balik
  • Game ini memanfaatkan operasi bit shift dan perincian tipe data untuk meningkatkan kecepatan komputasi dan efisiensi cache, serta memungkinkan simulasi skala besar dengan pembatasan kedalaman pathfinding dan penghapusan perhitungan tabrakan
  • Struktur ini merupakan contoh klasik optimisasi yang memanfaatkan keterbatasan teknis secara kreatif, dan masih menunjukkan pentingnya pendekatan menghapus perhitungan yang tidak perlu sejak tahap desain hingga hari ini

Analisis Struktur Optimisasi RollerCoaster Tycoon

  • RollerCoaster Tycoon (RCT) yang dirilis pada 1999 dinilai sebagai game yang hampir seluruhnya ditulis dalam assembly, mampu mensimulasikan ribuan agen secara real-time sambil mempertahankan frame rate yang stabil pada perangkat keras saat itu
  • Berdasarkan pembahasan di podcast game Jerman Stay Forever, artikel ini menganalisis secara konkret bagaimana Chris Sawyer mencapai tingkat optimisasi yang ekstrem
  • Kode sumber aslinya tidak dipublikasikan, tetapi melalui proyek OpenRCT2 buatan penggemar, struktur kode dan teknik optimisasinya dapat diperiksa lewat rekayasa balik
  • Memaksimalkan performa dengan assembly

    • RCT ditulis dengan assembly, bukan C atau C++, sehingga memungkinkan kontrol performa yang jauh lebih rinci dibanding game lain pada masa itu
      • Sebagai contoh, Doom (1993) sebagian besar ditulis dalam C, sedangkan RCT diimplementasikan hampir sepenuhnya dalam assembly
      • Pendekatan ini sudah tergolong langka pada akhir 1990-an, dan RCT dinilai sebagai salah satu game assembly besar terakhir
    • Pada masa itu, optimisasi otomatis oleh compiler masih terbatas, sehingga optimisasi manual memberi perbedaan performa yang besar
  • Analisis kode melalui OpenRCT2

    • OpenRCT2 adalah proyek open source yang sepenuhnya mengimplementasikan ulang game aslinya, tetap menggunakan aset asli sambil mempertahankan kompatibilitas 100%
      • Versi awalnya mereproduksi perilaku yang hampir identik dengan kode asli, lalu berbagai peningkatan ditambahkan setelahnya
    • Melalui proyek ini, pola optimisasi yang sangat rinci dalam kode asli dapat diamati
  • Perincian tipe data — penghematan memori

    • RCT menyimpan ukuran data uang secara berbeda tergantung konteks
      • Contoh: nilai total taman memakai variabel 4 byte, harga toko memakai variabel 1 byte
    • Perincian ini ditujukan untuk menghemat memori dan meningkatkan efisiensi cache, tetapi karena pada CPU modern hampir tidak ada perbedaan performa, OpenRCT2 menyatukannya menjadi satu variabel 8 byte
  • Optimisasi operasi matematika dengan bit shift

    • Di dalam kode, operasi NewValue = OldValue >> digunakan untuk menggantikan pembagian dengan pangkat dua
    • Optimisasi semacam ini hanya mungkin ketika perkalian atau pembagian melibatkan pangkat dua, sehingga tampaknya rumus di dalam game sendiri dirancang agar memenuhi kondisi tersebut
    • Dengan kata lain, struktur matematika yang mempertimbangkan efisiensi komputasi CPU sudah dipakai sejak tahap desain game
  • Desain game yang mempertimbangkan performa

    • Karena Chris Sawyer berperan sebagai programmer sekaligus satu-satunya game designer, ia dapat membangun struktur yang mempertimbangkan performa sejak tahap perancangan
    • Contoh paling representatif adalah sistem pengunjung (pathfinding)
      • Di sebagian besar game simulasi, pengunjung menentukan tujuan lalu mencari rute ke sana, tetapi di RCT pengunjung berjalan secara acak lalu menemukan wahana secara kebetulan
      • Pendekatan ini adalah struktur yang menghindari perhitungan pathfinding berskala besar, sehingga ribuan pengunjung dapat diproses secara bersamaan
    • Saat pathfinding memang diperlukan, misalnya ketika mekanik bergerak menuju wahana yang rusak, diterapkan batas kedalaman pencarian untuk mencegah frame drop
      • Pengunjung biasa hanya mencari hingga 5 persimpangan, mekanik hingga 8
      • Pengunjung yang membeli peta mendapat batas pencarian meningkat menjadi 7
    • Batasan ini bukan sekadar kompromi teknis, melainkan struktur optimisasi yang terintegrasi secara alami ke dalam elemen gameplay
  • Penanganan kerumunan dan penghilangan penghindaran tabrakan

    • RCT sepenuhnya menghapus perhitungan tabrakan atau penghindaran antar pengunjung
      • Ribuan pengunjung dapat berbagi tile jalur yang sama
    • Sebagai gantinya, kepadatan populasi sekitar dilacak sehingga jika tingkat keramaian tinggi, kebahagiaan pengunjung menurun
      • Pemain tetap harus mengelola kepadatan, tetapi jumlah komputasinya jauh lebih kecil
    • Pendekatan ini dinilai sebagai contoh representatif yang menghapus perhitungan fisika kompleks sambil tetap mempertahankan pengalaman bermain
  • Implikasi bagi pengembangan modern

    • Optimisasi RCT dinilai sebagai contoh pemanfaatan keterbatasan teknis secara kreatif
    • Pendekatan seperti ini masih mungkin dilakukan saat ini, tetapi membutuhkan kolaborasi erat antara programmer dan designer
    • Kadang, alih-alih menyelesaikan masalah teknis, menghilangkan masalah itu sendiri sejak tahap desain dapat memberikan peningkatan performa yang lebih besar

1 komentar

 
cadenzah 27 hari lalu

Tolong banyak cintai RollerCoaster Tycoon.