Thursday, December 06, 2007

Essay I - Pemaparan Konsep Gading-18 Game Engine

Ketika kami diminta mengembangkan Game 3D, maka awalnya saya ingin mengusulkan menggunakan Torque, sebuah Game Engine yang saya nilai baik. Setelah saya download, saya tunjukkan demonya ke Pak Har dan teman-teman lain di Studio Jalan Gading-18, Jogjakarta. Hehe, saya tak sangka kalau Pak Har tak menggubris apa yg saya demokan :))

Tidak, saya tidak sakit hati, meski agak malu. Karena sebelum demo itu, beliau mengatakan begini : "Kalau kita mau menggunakan game engine komersial, kalian-kalian ini tidak akan kami panggil". Dan jadilah, demo Aji dengan Ogre yang mendapat penekanan khusus. Wah, saya justru semangat banget dengan hal itu. Awalnya mungkin karena saya miss-understand dengan dengan apa yang diinginkan Pak Har : menyelesaikan proyek ini bukan dengan filosofi Purpose Based, namun ... Core. Awalnya saya menyangka ini Yet Another Project, dan ternyata bukan. Insya Allah bisa kami selesaikan dengan baik.

Kemudian beliau hanya meminta kami membuat contoh aplikasi dengan Ogre yang dibuat dari scratch (tanpa bantuan Helper Class bawaan Demo Ogre) dan menampilkan sebuah Cube disana. Wah, ternyata memang sangat berbeda memulai coding dengan berbekal kepercayaan diri dan harga diri untuk memulai dari scratch dan membangun sesuatu yang berada pada domain yang sama dengan sistem serupa yang sudah ada di pasaran, yaitu berbagai title Game Engine 3D yang sudah ada. Dan mulailah tiga hari penuh konsentrasi saya lalui. Yang saya maksud penuh konsentrasi adalah benar-benar membuat kode, tanpa sibuk mencari-cari kode di Internet. Ini termasuk filosofi yang menarik : "lebih baik 2 jam full coding, ketimbang 10 menit full searching"

Namun setelah saya membuat satu kelas baru yang akan berfungsi sebagai Base Engine-nya (yaitu di dalam file BaseEngine.cc), kemudian saya sadari akan terjadi suatu kebosanan : saya harus terus-menerus menulis kelas C++ yang baru untuk setiap game yang diminta dibuat Kalau cuma 3 tidak masalah. Tapi bayangkan kalau ada .. 15 buah! Wah, teknik inheritance tidak boleh dipakai! Meskipun screenshot yang dihasilkan sudah baik, perhatikan screenshot di bawah ini :


Namun hasil di atas saya dapatkan dengan tetap terpaksa menyentuh kode C++, membuat engine baru, dan membuat semua definisi Scene 3D/Level/Mission (yang mungkin di load dari suatu file, ini sudah memudahkan) di Engine yang baru tersebut (saya beri nama FireUpEngine.cc). Dan itu, ... tidak baik.

Setelah saya relax beberapa jam, saya dapati solusinya cuma satu. Namun satu jalan solusi ini memulai begitu banyak perubahan desain, cara kerja dan tentunya pola pikir. Solusi itu saya dapatkan saat dulu pertama kali melihat-lihat Game Engine apa saja yang sudah dibuat dengan Ogre, yaitu saya membaca sesuatu tentang LUA. Ia adalah scripting Engine dengan C murni (strict C) yang dapat di-embed di aplikasi kita, untuk kemudian membuat aplikasi kita dapat dikembangkan dengan arsitektur plugins.

Kalau Anda belum bisa membayangkan apa itu plugin, maka bayangkan saja Anda harus membuat aplikasi yang begitu banyak, namun sesungguhnya mereka memiliki kesamaan yang sangat seragam. Letak perbedaannya mungkin hanya sekedar I/O atau tingkah laku obyek-obyek yang diolahnya. Dan jawaban dari pertanyaan ini adalah arsitektur aplikasi dengan subsistem PLUGINS.

Dengan menggunakan fondasi berpikir tersebut, maka nantinya akan ada dua istilah yang harus dipahami dengan baik, yaitu Game Instan dan Game Engine. Game Instan adalah apa yang dilihat dan berfungsi sperti yang diharapkan oleh pemakai sebagai sebuah Game, dan Game Engine adalah apa yang memungkinkan Game Instan tersebut untuk dapat hidup.

Silahkan cermati block diagram di bawah ini untuk memahami apa yang saya maksudkan :



Anda dapati Derived Game (Game Instant) merupakan semua kumpulan resource yang akan dijalankan oleh Gading-18 dan muncul kepada pemakai sebagai sebuah Game yang sesungguhnya. Di titik ini saya masih gamang dengan konsepnya : tepatnya bagaimana saya memisahkan antara script dan engine? Nah, setiap saya blank dalam melanjutkan koding, saya tuangkan gambaran samar apa yang saya rasakan di Inkscape, dan jadilah block diagram berikut ini :


Block diagram ini sudah jauh lebih jelas bagi saya. Perhatikan bahwa yang saya maksud dengan Script adalah sekedar event handler yang akan dipanggil oleh Gading-18. Nah, dengan pemahaman yang ini saja, maka saya sadar bahwa yang paling pintar adalah Gading-18, bukan scriptnya. Selain itu, Anda dapati terdapat ProgramOption yang merupakan class dengan member static public, yang berfungsi untuk menyimpan semua konfigurasi yang dibaca dari file konfigurasi. Oh ya, saya lupa memberitahukan terlebih dahulu, bahwa lonjakan kemajuan Gading-18 terjadi pada saat saya selesai menggunakan Boost.Program_options, sebagai pustaka yang menangani fungsionalitas pemberian opsi ke dalam program, baik via command line atau configuration file.

Ini sangat hebat. Anda dapat menjalankan Gading-18 dengan berbagai konfigurasi. Dan satu2nya konfigurasi yang saya butuhkan saat itu adalah root folder yang merupakan tempat satu suatu game instan di simpan :

./Gading18 --root=./dinosaur_adventure

Selain itu untuk menambahkan kemantapan saya dengan arsitektur Script pada Gading-18, maka saya tambahkan satu atribut window-name :

./Gading18 --root=./dinosaur_adventure --window-name="To Strengthen The Love to Prophet Muhammad SAW"

Nah, dengan fleksibilitas tersebut, maka saya tuangkan lagi apa yang ada di benak saya tentang Game Instans menjadi block diagram berikut ini :



Dan saya sudah mulai sanggup menulis banyak game dengan cara yang singkat saja, kira-kira seperti ini :

./Gading18 --create-game "princess" "Princess in A Castle"


Maka Gading-18 akan membuatkan struktur folder yang lengkap dan dapat dijalankan oleh Gading-18 dengan cara yang serupa :

./Gading18 --root=/home/ela/istri_yang_diberkahi/princess

Berikut adalah screenshot dari Game Instan yang dihasilkan oleh Gading-18 :



ScreenShot tersebut di atas merupakan The Simplest Possible Application yang bisa dibangun dengan Gading-18. Fitur-fitur standar Game 3D seperti Collision Detection dan Hukum Allah pada Alam Semesta lainnya akan segera diimplementasikan. Untuk saat ini Anda bisa menggunakan tombol Panah u/ menggerakkan kamera dan tombol W,A,S,D untuk pergerakannya. Semua konfiguras yang bisa dipakai dapat dilihat dengan menggunakan perintah ini :

./Gading18 --help


Dan Anda bisa meng-override opsi yang sudah dituliskan pada file ./game/Main.cfg melalui perintah Command Line. Sebagai contoh, perintah berikut ini akan menjauhkan kamera dari Ninja dan Ogre :

./Gading18 --camera-start-position-x 500

Sepertinya saya cukupkan sampai disini saja pemaparan saya tentang Konsep Gading-18.Ah, ya, saya belum sampaikan (sepertinya ini justru hal yang penting. Tapi, apalah artinya sebuah Nama. Semuanya akhirnya berpulang kepada kualitas. Dan itu, sesuatu yang harus diperjuangkan), bahwa Gading-18 adalah backronym dari :

GAME DEVELOPMENT INFRASTRUCTURE NOT GADING-18

Dan akan saya akhiri dengan satu catatan kaki berikut ini :

"Game Final yang dimainkan pemakai adalah Sinergi antara Game Engine dan Game Instan. Sehingga istilah Game Programmer akan ditambahkan lagi dengan istilah Game Maker : Anda tidak perlu mengetahui isi kode C++ Gading-18 untuk bisa membuat Game yang menarik"

Silahkan download semua track record pengembangan Gading-18. Itu merupakan hasil dari Export SVN. Sudah lengkap dengan binary dan screenshot, hanya saja untuk beberapa binary, Anda harus mempunyai folder Samples/Media bawaan Source Code Ogre dan jangan lupa buatkan symbolic link (di Linux ya, kalau Anda menggunakan Windows silahkan disesuaikan. Dan kabari saya jika Anda berhasil ^_^) di tempat yang "sesuai". Silahkan cari sendiri ya!!!

Semoga bermanfaat bagi pengunjung setia blog ini!

Betapa senangnya hati ini jika kebahagiaan yang saya rasakan juga dirasakan dan bermanfaat bagi siapapun di luar sana

Insya Allah

Salam hormat,
Eko SW

* Catatan : sepertinya saya belum berkesempatan mengupload source Gading-18. Mungkin di lain waktu (saat koneksi Internet lancar mungkin). Atau silahkan email pribadi ke saya, insya Allah akan saya kirimkan source-nya. Harapan saya semoga bermanfaat

3 comments:

RMS Noor HPD said...

Wuekeke... NIce bow.. Ogre? itu disupport oleh XSI koq jadi gasah kuatir enginenya ga uptodate.

Oh iyah, masalah Torque, itu kan anjuran sayah, sayah menganjurken bukan untuk dipake tp buat referensi, saya sendiri buat game engine from scratch (bener2 scratch, ga pake ogre atau apapun), tp tetep lah yang namanya referensi itu perlu. Ogre itu bagus, cuma sangat big, sementara game saya lightweight. Jadi tergantung kebutuhan ajah. Game sederhana ga perlu heavyweight.

andri said...

Ko, luar biasa sekali, ternyata juga sudah menyentuh ranah game juga.
*bener2 gak mudeng*

Eko said...

@mas ... kucing hantu perkasa ^_^
sejujurnya, kita diminta from scratch. Developing game di Level 1. Mungkin OpenGL atau Direct-X. Namun, karena sadar kemampuan tim juga belum paham dngn detail, maka kita mulai dari Level 2 (pustaka graphic yg mumpuni). Nah, torque yg saya saranin di kategorikan Mas Aji sbg Level 3. Ada jg contoh Game Engine yg dari OpenGL. Wah, antusias sekali.. Cumaaaan ^_^.... terlalu low levelnya. Oh ya, kita insya Allah tetep bakal ke low level. Belum tahu kapan. Kalau secara RoadMap, sekitar tahun 2009 . Kalau saya masih hidup. Hihihi

Sebenarnya desain Game Engine saya ini, terinspirasi dari Demo Engine-nya Torque. Saat itu saya lihat dia punya semua yg diinginkan Game Maker. Dan juga bahasa script miliknya sendiri. Wah, dari itu ide saya melayang dan ilham pun dipahami.

Saya sih ingin Gading-18 ini sekomplit Torque. Ada temen2 yg mau ikut kontribute? Kita jadikan proyek Open Source milik Bangsa yuk? Sudah saya siapkan format kode-nya (misalnya Komentar2 dalam bahasa Indonesia)

@Andri
Saya masih terus belajar kok Ndri. Malah sebenarnya game adalah entry pertama saya memasuki dunia programming. Hehe, dari terkagum2 dengan Game Digger di DOS, saya mulai mempelajari GW-Basic, terus Quick Basic. (jadi ingin menuliskan nostalgia ttg awal muasal jatuh cinta ke dunia programming). Nah, berarti kesempatan programming Game ini sesungguhnya justru set back kok. Do'akan keberhasilannya ya...

Hatur nuhun