1. Pendahuluan Perkembangan dalam bidang teknologi informasi dan komunikasi semakin pesat, khususnya pada perkembangan teknologi mobile. Berdasarkan data statistik yang bersumber dari StatCounter Global Stats, terhitung mulai November 2011 hingga September 2012 penggunaan perangkat mobile di seluruh dunia terus mengalami peningkatan hingga mencapai 12.03% pada September 2012[1]. Penggunaan perangkat desktop memang masih mendominasi namun berdasarkan data statistik yang bersumber dari StatCounter Global Stats, terhitung mulai November 2011 hingga September 2012 penggunaan perangkat desktop di seluruh dunia terus mengalami penurunan (menjadi 87,97% pada September 2012)[1]. Berdasarkan data statistik tersebut dapat diperkirakan bahwa kedepannya ada kemungkinan besar bahwa penggunaan perangkat mobile akan terus meningkat. Terlebih lagi saat ini telah dikembangkan sistem operasi mobile dan open source yaitu Android. Dalam situs resmi pengembang Android mengatakan bahwa setiap hari lebih dari satu juta perangkat Android baru, diaktifkan di seluruh dunia. Android mendukung ratusan juta perangkat mobile di lebih dari 190 negara di seluruh dunia. Android merupakan platform mobile terbesar yang digunakan dibandingkan platform mobile lainnya dan bertumbuh dengan cepat – setiap hari jutaan pengguna menyalakan perangkat Android mereka untuk pertama kalinya dan mulai mencari aplikasi, game, dan konten digital lainnya[2]. Berdasarkan riset Mobile Gaming Industry, 70% sampai 80% dari keseluruhan pengunduhan yang dilakukan dari perangkat mobile adalah mengunduh game[3]. Berdasarkan riset statistik yang dilakukan oleh eMarketer, memperkirakan bahwa tahun 2012 pada segmen game mobile akan menduduki posisi tertinggi berdasarkan jumlah penggunanya, di antara jumlah pemain dari berbagai jenis segmen game online di United States. Jumlah pemain game mobile juga akan terus berlanjut untuk bertumbuh semakin cepat dibandingkan dengan jumlah pemain game di segmen game lainnya, yaitu mencapai 141 juta pada tahun 2014. Cepatnya pertumbuhan game mobile dimotori oleh meningkatnya kepemilikan smartphone. Antara tahun 2010 dan 2012, jumlah pemain game smartphone akan meningkat dari 45,8% menjadi 75% dari jumlah seluruh pemain game mobile[4]. Berdasarkan data riset yang telah dipaparkan, menjadi latar belakang untuk mengembangkan aplikasi mobile game pada platform Android. Selain itu pengembang dari sistem operasi Android ini juga menyediakan fasilitas untuk memudahkan dalam memasarkan aplikasi yang telah dikembangkan oleh developer. Secara konvensional mengembangkan aplikasi pada platform Andoid dapat menggunakan software yang bernama Eclipse dengan membangunnya menggunakan bahasa pemrograman Java. Namun terdapat cara lain untuk mengembangkan aplikasi game pada platform Android, yaitu menggunakan software Shiva 3D yang merupakan software yang dirancang untuk mengembangkan game dengan menggunakan script Lua untuk pemrogramannya. Melalui software ini memungkinkan untuk menghasilkan game yang telah dikembangkan menjadi satu arsip Android Package (.apk) yang siap pakai. Android Package merupakan format arsip untuk instalasi aplikasi pada platform 1
Android. Dalam software Shiva 3D sudah tersedia game engine yang menyederhanakan dalam proses pengembangan game. Developer dapat lebih fokus kepada implementasi dari logika game yang akan dikembangkan. Adanya script Lua yang sederhana dan dapat dengan mudah dipelajari dapat dijadikan pertimbangan untuk mengembangkan game dengan menggunakan software ini. Berdasarkan latar belakang yang telah disampaikan, maka akan dikembangkan sebuah game yang bergenre shoot em up pada platform Android dengan menggunakan script Lua pada software Shiva 3D.
2. Kajian Pustaka Game adalah sebuah aplikasi atau software yang dibuat dengan tujuan untuk menghibur penggunanya. Meskipun game ini pada dasarnya sama dengan dengan aplikasi atau software yang lain, dimana dalam pembuatanya menggunakan bahasa pemrograman yang kemudian di konversi menjadi sebuah file executable yang kemudian dikemas ke dalam file installer dan kemudian didstribusikan kepada pengguna. Akan tetapi dalam melakukan perancangan akan sangat berbeda bila dibandingkan dengan aplikasi atau software yang lain. Hal ini dikarenakan, di dalam game ada unsur seni dan hiburan yang dimasukkan, seperti halnya membuat sebuah karya seni seperti, lagu, novel, drama atau sebuah film. [5]. Lua merupakan bahasa scripting yang handal, cepat, ringan, dan dapat diintegrasikan. Lua menggabungkan sintaks prosedur yang sederhana dengan susunan-susunan deskripsi data yang handal yang berdasarkan pada larik-larik (array) asosiatif dan extensible semantics. Lua merupakan tipe yang dinamis, berjalan dengan menterjemahkan bytecode untuk mesin virtual yang berbasiskan register, dan memiliki manajemen memori secara otomatis dengan incremental garbage collection, membuat Lua ideal untuk mengatur, scripting, dan prototyping secara cepat[6]. Lua tidak mencoba menolong untuk menulis program-program dengan ribuan baris. Sebaliknya, Lua mencoba menolong untuk menyelesaikan masalah dengan hanya ratusan baris, atau bahkan kurang. Untuk mencapai tujuan ini, Lua bersandar pada extensibilitasnya, seperti kebanyakan bahasa lainnya. Tidak seperti bahasa yang lain, bagaimanapun juga, proses extended dalam Lua mudah, bukan hanya dengan perangkat lunak yang ditulis dalam bahasa Lua itu sendiri, tapi juga dengan perangkat lunak yang ditulis dalam bahasa yang lain, seperti C dan C++[7]. Tentu saja bukan hanya Lua yang merupakan bahasa scripting yang tersedia. Terdapat bahasa yang lain yang dapat digunakan yang kurang lebih memiliki tujuan yang sama, seperti Perl, Tcl, Ruby, Forth, dan Python. Fitur berikut menjadikan Lua jauh berbeda dari bahasa-bahasa lain; meskipun bahasabahasa lain memiliki sebagian fasilitas yang sama dengan Lua, tidak ada bahasa lain yang menawarkan profil yang serupa[7]: Extensibility: ekstensibilitas Lua sangat menarik perhatian sehingga banyak orang menganggap Lua bukan sebagai suatu bahasa, tetapi sebagai suatu perangkat untuk membangun domain-specific language. Lua telah dirancang dari awal untuk diperluas/ diaplikasikan, baik melaui kode Lua dan kode eksternal C. Lua menerapkan sebagian fungsi dasarnya 2
melalui library eksternal. Sangat mudah untuk menghubungkan Lua dengan C/ C++ dan bahasa lainnya, seperti Fortran, Java, Smalltalk, Ada, dan bahkan dengan bahasa scripting yang lain. Simplicity: Lua merupakan bahasa yang sederhana dan kecil. Lua memiliki sedikit (tapi andal) konsep. Kesederhanaan ini membuat Lua mudah untuk dipelajari dan berkontribusi untuk penerapan yang sederhana. Keseluruhan paket Lua (kode sumber, referensi, ditambah arsip biner untuk beberapa platform) dapat dimuat dalam sebuah disket. Efficiency: Lua memiliki implementasi yang cukup efisien. Benchmark independen menunjukan Lua sebagai salah satu bahasa tercepat dalam hal bahasa scripting (interpreted). Portability: ketika membicarakan mengenai portabilitas, tidak hanya berbicara mengenai menjalankan Lua baik pada Windows maupun pada platform Unix. Portabilitasnya berbicara mengenai menjalankan Lua pada banyak platform yang pernah didengar: NextStep, OS/2, PlayStation II (Sony), Mac OS-9 and OS X, BeOS, MS-DOS, IBM mainframes, EPOC, PalmOS, MCF5206eLITE Evaluation Board, RISC OS, tentu saja ditambah dengan semua yang berbau Unix dan Windows. Kode sumber untuk setiap platform adalah hampir sama. Lua tidak menggunakan kompilasi kondisional untuk menyesuaikan kodenya pada mesin yang berbeda; malah, Lua bersandar pada ANSI standar (ISO) C. Dengan begitu, tidak perlu menyesuaikannya lagi terhadap environment yang baru. Jika memiliki compiler ANSI C, hanya perlu meng-compile Lua. Android adalah sebuah sistem operasi untuk perangkat mobile berbasis Linux yang mencakup sistem operasi, middleware, dan aplikasi. Android menyediakan platform yang terbuka bagi para pengembang untuk menciptakan aplikasi mereka[8]. Karena sistem operasi Android merupakan sistem operasi open source, saat ini berbagai vendor smartphone telah menggunakan sistem operasi Android untuk smartphone yang diproduksinya. Dari sekian banyak vendor yang memproduksi smartphone Android diantaranya adalah Samsung, LG, HTC, Motorola, Sony, Nexian, T-Mobile, Nexus, dan Huawei. Karena bersifat open source ini pula perkembangan Android menjadi cepat. Tidak hanya Google saja yang mengembangkannya namun dari pihak vendor smartphone dan berbagai komunitas juga ikut berperan serta untuk semakin meningkatkan kemampuan sistem operasi Android. The Dalvik Virtual Machine (DVM) adalah salah satu elemen kunci dari Android. Android berjalan di dalam Dalvik Virtual Machine (DVM), bukan di Java Virtual Machine (JVM). Android menggunakan virtual machine sendiri yang dikustomisasi dan dirancang untuk memastikan bahwa beberapa fitur berjalan lebih efisien pada perangkat mobile[8]. Shoot Em Up adalah genre dari game, biasanya bergaya arcade, dimana pemain mengendalikan satu objek, biasanya berupa kendaraan angkasa, dan harus bertahan terhadap sekumpulan musuh yang secara terus menerus menyerang. Scrolling Shooter adalah sub-genre dari Shoot Em Up dimana tampilannya secara terus menerus bergerak, biasanya secara horizontal atau vertikal[9].
3
Gambar 1 Arsitektur Android[8]
3. Perancangan Sistem Pada perancangan game ini metode yang digunakan adalah metode prototipe. Secara ideal prototipe berfungsi sebagai sebuah mekanisme untuk mengidentifikasi kebutuhan perangkat lunak. Bila prototipe yang sedang bekerja dibangun, pengembang harus mempergunakan fragmen-fragmen program yang ada atau mengaplikasikan alat-alat bantu (contohnya report generator, window manager, dan lain-lain) yang memungkinkan program yang bekerja untuk dimunculkan secara cepat[10].
Gambar 2 Metode Prototipe [10]
4
Proses dari pengembangan sistem dalam game yang dikembangkan, dapat dijelaskan sebagai berikut: 1. Mengumpulkan Kebutuhan Pada tahap ini menentukan akan seperti apa gameplay (rule/ aturan main) dari game yang akan dikembangkan nantinya dan menentukan sistem kontrol dari game. Selain itu juga melihat gameplay dari berbagai judul game yang telah suskes, yang memiliki gameplay yang mirip dengan gameplay dari game yang akan dikembangkan sebagai referansi, inspirasi, dan motivasi dalam pengembangan game. Selanjutnya mencari penelitian sebelumnya yang memiliki keterkaitan dengan game Shoot Em Up yang dapat dijadikan sebagai referensi. 2. Membangun Prototype Setelah tahap pertama selesai maka semua kebutuhan yang telah didefinisikan dipakai sebagai dasar dalam pembuatan prototype dari game. Semua resource yang dibutuhkan untuk pengembangan game digabungkan dan diatur oleh kode program sehingga terbentuklah prototype dari game yang telah dirancang. 3. Evaluasi Prototype Pada tahap ini dilakukan black-box testing untuk menguji prototype secara keseluruhan. Jika masih ada kekurangan maka prototype akan diperbaiki. Melalui proses ini akan mendapatkan gambaran yang digunakan sebagai acuan untuk menyempurnakan dan memperjelas rancangan game. Peninjauan game: game ini berjudul “Sofra Strike.” Genre dari game ini adalah vertical scrolling shooter, dimana pemain seolah-olah melihat area tempat game berlangsung dari sisi atas lingkungan gameplay dan pemain mengendalikan sebuah pesawat tempur untuk menghindari peluru, menghadapi dan menghancurkan musuh-musuh yang telah menghadang, serta berusaha untuk terus mempertahankan kondisi life meter-nya agar tidak menjadi kosong, hingga pada akhirnya menghadapi boss dari setiap stage yang berbeda. Pemain juga berkesempatan untuk meningkatkan performa senjatanya. Game ini hanya dapat dimainkan oleh satu pemain. Game ini dijalankan pada smartphone yang berteknologi layar sentuh dengan sistem operasi Android (minimal versi 2.1). Perancangan gameplay: ketika game dijalankan akan menuju ke tampilan menu utama/ title screen dari game. Menu utama terdiri dari menu Start Game untuk mulai memainkan game, menu Stage Select untuk memilih stage yang ingin dimainkan, menu How To Play yang berisi informasi mengenai game, menu Credit untuk menampilkan informasi pihak-pihak yang terkait dalam pengembangan game, dan menu Quit untuk keluar dari aplikasi game. Gameplay: ketika memilih menu New Game maka dengan otomatis akan memulai stage satu. Stage satu sebagaimana stage yang lainnya akan menempatkan pemain pada lingkungan stage, dimana background lingkungannya bergerak secara vertikal dengan kecepatan yang telah ditentukan, dengan musuhmusuh yang datang dari sisi atas layar dan dari sisi kiri maupun kanan (atau dari keduanya dalam waktu yang bersamaan). Pemain harus dapat bertahan kira-kira selama satu atau dua menit dari serangan musuh-musuh, sebisa mungkin menghancurkan musuh-musuh yang datang dengan senjatanya, sebelum semua musuh disingkirkan untuk mendatangkan boss yang akan mengambil alih untuk 5
menyerang. Menghancurkan boss pada suatu stage akan mengakhiri stage itu dan akan berpindah ke stage selanjutnya.
Gambar 3 Game Flowchart
Antarmuka: game akan dikendalikan melalui layar sentuh, dan untuk navigasi pesawat menggunakan virtual direction pad. Pemain juga dapat menyentuh tombol Wave Out, yaitu tombol yang ditampilkan di atas tombol untuk menebak ketika Wave Out gauge telah penuh. Jika disentuh maka akan mengaktifkan serangan Wave Out dan tombol ini akan hilang hingga Wave Out gauge penuh kembali. Untuk tombol menembak, jika disentuh sekali akan mengaktifkan menembak secara otomatis, dan jika disentuh lagi maka menembak secara otomatis akan dinonaktifkan sehingga akan menghentikan tembakan.
6
Objek: objek disini adalah mencakup objek-objek yang ditampilkan di layar yang dapat berinteraksi dengan pemain disepanjang gameplay berlangsung, diantaranya meliputi pesawat pemain, pesawat musuh, boss, senjata utama, Wave Out, benda-benda yang dapat di ambil, dan peluru musuh. Suara: suara yang dimainkan dalam keseluruhan game ini dibagi menjadi dua kategori: “Musik” dan “SFX.” Musik adalah lantunan suara musik yang dimainkan disepanjang gameplay dari setiap stage. SFX adalah efek suara yang dimainkan pada saat memilih menu atau ketika terjadi event-event tertentu pada gameplay misalnya ketika musuh meledak dan ketika pemain mendapatkan item. Leveling: dalam aplikasi game ini terdapat enam level permainan. Semakin bertambah level-nya maka tingkat ketahanan musuh terhadap peluru yang ditembakkan oleh pemain juga akan semakin meningkat. Semakin bertambah level-nya maka intensitas kedatangan musuh akan semakin bertambah. Semakin bertambah level-nya maka pola tembakkan dan pergerakkan musuh akan semakin bervariasi. Begitu pula dengan boss yang ada di setiap level-nya, semakin bertambah level-nya maka ketahanannya akan semakin bertambah juga tingkat kerumitan pola tembakkannya akan semakin bertambah. Story: cerita akan ditampilkan sebelum stage dimulai dalam bentuk percakapan antar tokohnya. Controlling: untuk melakukan navigasi pesawat adalah menggunakan virtual directional pad yang tertampil pada layar permainan saat stage dimulai. Pertama virtual directional pad disentuh terlebih dahulu, kemudian geser sentuhan ke arah yang diinginkan. Untuk melakukan tembakan dengan menyentuh tombol „A‟ (Attack) yang ada pada layar permainan. Prinsip penembakan seperti penggunaan saklar, yaitu hidup atau mati. Jika tombol ini disentuh untuk pertama kalinya maka pesawat akan secara otomatis menembakan peluru. Jika disentuh lagi maka pesawat akan berhenti menembakan peluru, begitu seterusnya. Tombol „W‟ (Waveout) untuk menembakan senjata khusus (Waveout). Rancangan tampilan gameplay dapat dilihat pada Gambar 4 Mekanisme gameplay: setiap sebelum stage dimulai, akan mucul tampilan dialog cerita dari game. Saat stage telah dimulai level tembakan pemain berada pada level satu, life meter terisi penuh, dan Waveout gauge dalam keadaan belum terisi. Level tembakan, life meter, dan Waveout gauge pada saat memasuki stage berikutnya akan sesuai dengan kondisi terakhir pada stage sebelumnya, setelah mengalahkan boss. Untuk dapat memenangkan setiap stage yang ada, pemain harus dapat mempertahankan kondisi life meter agar tidak menjadi habis dan harus mengalahkan boss pada setiap stage. Jika pemain tidak dapat mempertahankan kondisi life meter atau dengan kata lain life meter habis saat stage berlangsung, maka pemain dinyatakan kalah dan permainan akan berakhir. Setiap pemain telah berhasil mengalahkan boss yang ada di setiap stage akan di tampilkan tampilan perhitungan score dari stage yang telah dimainkan. Tahap Evaluasi (Pengujian Sistem): Pengujian prototype dilakukan dengan menggunakan metode black-box testing. Pengujian black-box adalah pengujian aspek fundamental sistem tanpa memperhatikan struktur logika internal perangkat lunak. Metode ini digunakan untuk mengetahui apakah perangkat lunak
7
berfungsi dengan benar. Pengujian black box merupakan metode perancangan data uji yang didasarkan pada spesifikasi perangkat lunak yang dibuat[10].
Gambar 4 Rancangan Tampilan Gameplay
4. Hasil dan Pembahasan Gambar 5 menunjukkan antarmuka aplikasi game Sofra Strike yang terdiri dari Start Game, Continue, Stage Select, How To Play, Credits, dan Quit.
Gambar 5 Antarmuka Aplikasi
Gambar 6 Tampilan Dialog Cerita
8
Sebelum stage dimulai akan ada dialog cerita. Cerita dapat dilewati dengan menyentuh tombol „Skip.‟ Setelah dialog selesai maka akan memasuki tampilan gameplay. Selanjutnya adalah tahap pengujian yang dilakukan untuk memeriksa keseluruhan dari aplikasi, memeriksa apakah aplikasi berjalan dengan baik (tidak ada error), dan memeriksa apakah telah sesuai dengan kebutuhan yang telah ditentukan. Berikut merupakan gambaran dari proses pengujian prototype secara keseluruhan
Gambar 7 Langkah-Langkah Pengujian
Black-box testing memungkinkan pengembang untuk membuat himpunan kondisi input yang akan melatih seluruh syarat-syarat fungsional suatu program. Walau didesain untuk menemukan kesalahan, uji coba black-box ini digunakan untuk mendemonstrasikan fungsi aplikasi yang dioperasikan. Tujuan dari pengujian ini adalah membuktikan bahwa hasil output sesuai seperti yang diharapkan [11]. Berikut hasil pegujian prototype yang telah dilakukan dengan menggunakan black-box testing pada game prototype-1 untuk mengetahui apakah gameplay (objek-objek, stage background), game controller, game menu, sound effect, background music sudah berjalan dengan semestinya.
Tabel 1 Black-box testing game prototype-1
Pengujian Gameplay 3D background scrolling Score counter Object sensor Enemy/ boss AI Pause/ Resume/ Quit Gameplay Game menu Game controller Sound effect Background music
9
Valid
Tidak Valid -
Pada testing prototype yang pertama, seluruh elemen yang diujikan berjalan dengan baik. Namun karena stage background menggunakan model tiga dimensi, membuat performa gameplay menurun, serta hanya terdapat satu stage dan belum ada game story. Oleh karena itu, pada prototype selanjutnya, stage background diubah menjadi dua dimensi (menggunakan gambar), game stage ditambah menjadi enam stage dan ditambahkan game story dalam bentuk percakapan antar tokoh yang terlibat.
Tabel 2 Black-box testing game prototype-2
Pengujian Gameplay 2D background scrolling Score counter Object sensor Enemy/ boss AI Pause/ Resume/ Quit gameplay Game menu Game controller Sound effect Background music Game leveling Game story
Valid
Tidak Valid -
Seluruh bagian yang diujikan pada pengujian prototype yang kedua telah berjalan dengan baik dan stage background yang telah diganti menjadi dua dimensi meningkatkan performa gameplay.
10
Selanjutnya akan membahas hasil implementasi dari pola peluru yang ditembakan oleh musuh. Pada dasarnya semua pola tembakan musuh yang dihasilkan berdasarkan pada function yang ada pada Kode Program 1. Kode Program 1 Fungsi untuk Menembakkan Peluru function EnemyAI.spreadMultiRowAtk ( nBranch, arc, bulletRow, nBulletSpd, x, y, z, sBulletType, bIsLockedTarget, nTargetAngle ) local scn = object.getScene ( this.getObject ( ) ) local hHelper = scene.getTaggedObject ( scn, "HelperParticle" ) object.resetRotation ( hHelper, object.kGlobalSpace ) object.setTranslation ( hHelper, x,y,z, object.kGlobalSpace ) if(bIsLockedTarget) then --jika true menembak bersdasarkan posisi player local nXTarget, nYTarget, nZTarget = object.getTranslation ( scene.getTaggedObject ( scn, "PlaneFighter" ), object.kGlobalSpace ) object.lookAt ( hHelper, nXTarget, nYTarget, nZTarget, object.kGlobalSpace, 1 ) else object.rotate ( hHelper, 0,nTargetAngle,0,object.kGlobalSpace ) end local nOriginX, nOriginY, nOriginZ = object.getTranslation (hHelper, object.kGlobalSpace) local nNumBullet = nBranch local nArc = arc local nBulletRow = bulletRow local nArcStart = 1 local s, nShootDir, d = object.getRotation ( hHelper, object.kGlobalSpace ) local nBulletSpeed = nBulletSpd local hBullet if(nNumBullet>1) then nArcStart = nShootDir - (nArc/2) else nArcStart = nShootDir end for h=1, nBulletRow do for i=0, nNumBullet-1 do local hEnvHelper = scene.getTaggedObject ( scn, "HelperManager" ) object.sendEventImmediate ( hEnvHelper, "EnemyLevelingAI", "onEnemyBulletSetting", sBulletType, nOriginX, 0.1, nOriginZ, nArcStart, nBulletSpeed+(h*20) ) if(nNumBullet>1) then nArcStart = nArcStart + (nArc / (nNumBullet-1)) end end if(nNumBullet>1) then nArcStart = nShootDir - (nArc/2) else nArcStart = nShootDir end end end
Pada potongan Kode Program 1, menentukan berapa banyak cabang dari peluru yang ditembakkan, berapa besar sudut tembakkan, arah tembakkan, posisi awal peluru dan kecepatan peluru. Untuk derajat arah tembakkan diterangkan seperti pada Gambar 8.
11
Gambar 8 Derajat Arah Peluru
Dari gambar tersebut dapat dilihat, jika ingin menembakkan peluru ke arah kiri maka derajat arah tembakan adalah nol derajat, jika ingin menembakan peluru ke arah kanan maka derajat arah tembakan adalah 180°, jika ingin menembakan peluru ke arah atas maka derajat arah tembakan adalah 270°, dan jika ingin menembakan peluru ke arah bawah maka derajat arah tembakan adalah 90°. Posisi/ koordinat objek peluru ditentukan terlebih dahulu (dalam hal ini adalah menyesuaikan dengan posisi pesawat boss). Langkah selanjutnya adalah menentukan ke arah mana peluru akan ditembakkan yaitu dengan melakukan rotasi pada objek peluru. Setelah itu menentukan berapa besar gaya dorong yang akan diterapkan ke objek peluru (dalam hal ini, besarnya gaya dorong akan menentukan kecepatan gerak peluru yang ditembakkan). Setelah diberikan gaya dorong (dari sisi bagian belakang objek peluru), maka peluru akan berjalan lurus ke depan sesuai dengan arah yang telah ditentukan. Jika menembakkan peluru lebih dari satu peluru/ cabang (banyaknya peluru sama dengan banyaknya cabang) maka interval sudut antar cabang akan dikalkulasi berdasarkan parameter/ variabel “besar derajat tembak” (interval sudut cabang = besar derajat tembak / (banyaknya cabang - 1)). Misalkan ingin menembakkan peluru sebanyak tiga cabang ke arah 90° (ke arah bawah) dengan besar sudut tembakan 90°, maka akan didapat interval sudut antar cabang sebesar 45° sehingga dihasilkan tembakkan peluru seperti yang terlihat pada Gambar 9.
12
Gambar 9 Contoh Hasil Penerapan Kode Program 1
Inilah prinsip dasar dari penerapan pola tembakan musuh. Pada bagian selanjutnya akan dibahas mengenai pengembangan/ penerapan lebih lanjut dari prinsip dasar yang telah dibahas.
Kode Program 2 Salah Satu Pola Tembakkan Boss Stage Satu elseif(this.nAtkType ( )==2) then if(nState==1) then this.sendEvent ( "onAttack", nCount, 2, this.getArcTarget ( ) ) elseif(nState==2) then if(nCount<120) then if(math.mod ( nCount, 10 )~=0) then local x, y, z = object.getTranslation ( this.getObject ( ), object.kGlobalSpace ) this.spreadMultiRowAtk ( 3, 60, 1, -500, x-1, y+0.5, z, "Enemy_Bullet_OrangeMedSize", false, math.random ( nArcTarget-2, nArcTarget+2 ) ) this.spreadMultiRowAtk ( 1, 0, 1, -800, x-2, y+0.5, z+3.5, "Enemy_Bullet_OrangeMedSize", false, math.random ( 90, 100 ) ) this.spreadMultiRowAtk ( 1, 0, 1, -800, x-2, y+0.5, z-3.5, "Enemy_Bullet_OrangeMedSize", false, math.random ( 80,90 ) ) this.postEvent ( 0.1, "onAttack", nCount+1, 2, nArcTarget ) else this.postEvent ( 0.7, "onAttack", nCount+1, 1, nArcTarget ) end else this.nAtkType ( 1 ) --1 this.postEvent ( 3, "onAttack", 1, 1, 1 ) end end
Pada potongan Kode Program 2, pertama-tama arah target ditentukan terlebih dahulu, yaitu mengunci posisi pesawat pemain terlebih dahulu. Setelah itu menembakkan tiga cabang, satu baris, dengan besar sudut tembakan 60° sebanyak sembilan kali. Diselingi pula dengan tembakan satu cabang, dengan arah derajat tembakan secara acak dari kisaran 90° sampai 100° untuk titik pinggir sebelah kiri dan arah derajat tembakan secara acak dari kisaran 80° sampai 90° untuk titik 13
pinggir sebelah kanan pesawat boss. Pada tiap hitungan kelipatan sepuluh, akan ada sedikit jeda sekaligus kembali melakukan penguncian arah target, begitu seterusnya.
Gambar 10 Salah Satu Pola Tembakkan Boss Stage Satu
Gambar 11 Implementasi Salah Satu Pola Tembakkan Boss Stage Satu
14
Kode Program 3 Salah Satu Pola Tembak Boss Stage Tiga elseif(this.nAtkType ( )==3) then if(nCount<100) then local x, y, z = object.getTranslation ( this.getObject ( ), object.kGlobalSpace ) this.spreadMultiRowAtk ( 1, 0, 3, -600, x+1, 0.1, z, "Enemy_Bullet_OrangeMedSize", false, angle1 ) this.spreadMultiRowAtk ( 1, 0, 3, -600, x, 0.1, z+1, "Enemy_Bullet_OrangeMedSize", false, angle1-90 ) this.spreadMultiRowAtk ( 1, 0, 3, -600, x, 0.1, z-1, "Enemy_Bullet_OrangeMedSize", false, angle1-(90*3) ) this.spreadMultiRowAtk ( 1, 0, 3, -600, x-1, 0.1, z, "Enemy_Bullet_OrangeMedSize", false, angle1-(90*2) ) this.postEvent ( 0.1, "onAttack", nCount+1, angle1-15 ) else this.nAtkType ( 1 ) this.postEvent ( 3,"onAttack", 1,math.random( 0,360 )) end
Pada potongan Kode Program 3, akan menembakkan satu cabang, tiga baris peluru, muncul dari empat titik pada pesawat boss. Arah derajat tembak pada titik pertama merupakkan patokan bagi titik tembak yang lain (yang pada awal sebelum perulangan ditentukan dengan mengacak derajat arah tembakan dari range 0° hingga 360°). Pada titik kedua memiliki interval 90° dari derajat arah tembak titik pertama. Pada titik ketiga memiliki interval dua kali 90° dari derajat arah tembak titik pertama. Pada titik keempat memiliki interval tiga kali 90° dari derajat arah tembak titik pertama. Derajat arah tembak akan dikurangi 15° disetiap pengulangannya.
Gambar 12 Pola Ketiga Tembakkan Boss Stage Tiga
15
Gambar 13 Implementasi Pola Ketiga Tembakkan Boss Stage Tiga
Kode Program 4 Salah Satu Pola Tembakkan Boss Stage Enam elseif(nState==2) then dynamics.enableDynamics ( this.getObject ( ), true ) local x, y, z = object.getTranslation ( this.getObject ( ), object.kGlobalSpace ) this.spreadMultiRowAtk ( 10, 360, 1, -500, x, 0.2, z, "Enemy_Bullet_OrangeMedSize", false, angle1 ) if(nCount<180) then if(math.mod ( nCount, 20 )~=0) then this.postEvent ( 0.07, "onAttack", nCount+1, 2, angle1+angle2, angle2 ) else if(angle2<0) then angle2 = 3 else angle2 = -3 end this.postEvent ( 0.07, "onAttack", nCount+1, 2, angle1,angle2 ) end else this.postEvent ( 1, "onAttack", 1, 3 ) end
Pada potongan Kode Program 4, akan menembakkan sepuluh cabang, satu baris peluru, muncul dari titik tengah pesawat boss disetiap perulangannya, dengan derajat arah tembakan ditentukan secara acak sebelumnya, dengan besar derajat tembakan 360°. Disetiap perulangannya akan ditambah dengan satu variabel penentu derajat arah tembakan yang bernilai tiga derajat. Disetiap
16
hitungan kelipatan 20, variabel ini akan secara bergantian bernilai positif dan kemudian bernilai negatif pada hitungan kelipatan 20 selanjutnya.
Gambar 14 Salah Satu Pola Tembakkan Boss Stage Enam
Gambar 15 Implementasi Salah Satu Pola Tembakkan Boss Stage Enam
Karena game berjalan pada smartphone yang kemampuannya berada di bawah kemampuan personal komputer pada umumnya, maka perlu dilakukan optimisasi resorce game dan optimisasi pemrogrammannya, sehingga engine game dapat berjalan dengan lancar pada saat dimainkan. Engine game pada dasarnya mampu menggunakan background stage berformat model tiga dimensi,
17
namun mengingat keterbatasan kemampuan grafis pada smartphone, maka background yang dipakai adalah background berupa gambar. Dalam penanganan sensor untuk collision detection juga perlu diperhatikan untuk semakin meningkatkan performa gameplay. Collision detection dapat dijelaskan sebagai proses deteksi ketika dua atau lebih objek di dalam suatu lingkungan virtual saling berkontak/ bersentuhan antara satu dengan yang lainnya[12]. Dalam Shiva 3D, collision detection dari suatu objek dapat diaktifkan dengan menambahkan atribut Sensor pada objek yang bersangkutan. Dalam game yang dikembangkan ini, objek-objek yang telah ditentukan untuk dapat saling berinteraksi dalam gameplay, dipasang dengan atribut sensor, sehingga ketika nantinya pasangan objek tertentu (yang telah dipasang dengan atribut sensor) saling bertabrakan akan memanggil/ mengaktifkan suatu proses tertentu. Sensor yang ada pada musuh, boss, dan peluru musuh perlu diatur untuk memiliki jenis sensor yang sama, agar ketika ketiga objek ini saling bertabrakan tidak perlu dilakukan pemeriksaan. Begitu pula sensor yang ada pada pesawat pemain dan pelurunya perlu diatur untuk memiliki jenis sensor yang sama. Jadi sensor hanya akan bekerja jika terjadi tabrakan antara sensor yang jenisnya berbeda. Hal ini akan membuat jalannya program menjadi efisien, mengingat banyaknya objek peluru musuh yang saling bersentuhan pada saat pola tembakkan sedang dilancarkan. Dalam game ini juga menerapkan sistem pakai ulang, yaitu menyimpan objek peluru yang sudah tidak terpakai (karena posisinya telah berada di luar area permainan atau karena telah bertabrakan) sebagai objek yang tidak aktif, untuk kemudian dipakai kembali pada saat dibutuhkan. Saran yang diberikan dari pengembang software Shiva 3D pun merekomendasikan untuk menggunakan metode ini dibandingkan menggunakan sistem “create – destroy.” Shiva 3D memberikan kemudahan bagi pengembangan game ini. Melalui Lua script yang diintegrasikan pada software ini, menjadi memudahkan dalam pemrogramannya. Struktur bahasanya sederhana dan tidak banyak keyword atau perintah yang harus dihafalkan, ditambah pula dengan adanya dukungan referensi manual script Lua yang disertakan dalam software Shiva 3D, juga adanya dukungan referensi online berupa forum dan tutorial.
5. Simpulan Berdasarkan perancangan, implementasi, pembahasan, dan analisis yang telah dilakukan maka dapat diambil kesimpulan bahwa perancangan dan implementasi game shoot em up pada smartphone berbasis sistem operasi Android dengan menggunakkan script Lua dapat diterapkan dengan menggunakan dua fitur utama. Fitur yang pertama yaitu menggunakan impuls untuk pergerakkan objek-objek dalam game. Fitur yang kedua yaitu menggunakan Sensor pada objek-objek dalam game untuk menentukan interaksi/ event yang akan terjadi ketika terjadi collision/ tubrukkan. Dua fitur ini merupakan fondasi utama dalam melakukan implementasi game ini.
18
6. Saran Untuk pengembangan kedepannya, game ini dapat diperlengkapi dengan low-poly 3D background, jenis senjata yang lebih bervariasi, pergerakan musuh yang lebih dinamis/ bervariasi, pola tembakan yang lebih kompleks/ rumit, dan dapat melakukan replay dari stage yang telah dimainkan oleh user.
7. Daftar Pustaka [1]
StatCounter Global Stats, 2012, Mobile vs. Desktop from Sept 2011 to Sept 2012, http://gs.statcounter.com/#mobile_vs_desktop-ww-monthly-201109201209, Diakses tanggal 15 Oktober 2012. [2] Android Developer, 2012, Android, the world's most popular mobile platform, http://developer.android.com/about/index.html, Diakses tanggal 15 Oktober 2012. [3] Touchstone Research, 2011, Tech Savvy Researcher Feature: Mobile Gaming by the Numbers (Infographic), http://touchstoneresearch.com/blog/tech-savvy-researcher-feature-mobilegaming-by-the-numbers-infographic/, Diakses tanggal 15 Oktober 2012. [4] eMarketer, 2012, Mobile, Social Boost Online Gaming Populations, http://www.emarketer.com/Article.aspx?R=1009100&ecid=a6506033675d4 7f881651943c21c5ed4, Diakses tanggal 15 Oktober 2012. [5] Maharani, Rizky Sari Mei, 2011, Teknik Merancang Aplikasi Game, Mawas Juni 2011 : 2, http://jurnal.umk.ac.id/mawas/2011/juni/TEKNIK%20MERANCANG%20A PLIKASI%20GAME.pdf. Diakses tanggal 6 September 2012. [6] Lua Team, 2012, What Is Lua?, http://www.lua.org/about.html, Diakses tanggal 5 September 2012. [7] Ierusalimschy, Roberto, 2003, Programming in Lua (first edition) – Preface, http://www.lua.org/pil/p1.html, Diakses tanggal 6 September 2012. [8] Safaat, Nazruddin, 2011, Pemrograman Aplikasi Mobile Smartphone dan Tablet PC Berbasis Android, Bandung: Informatika. [9] Dixon, D., 2009, Nietzsche contra Caillois: Beyond play and games, Philosophy of Computer Games 2009 : 7, http://eprints.uwe.ac.uk/12726/1/Dixon%2DPGC2009.pdf. Diakses tanggal 5 September 2012. [10] Harnaningrum, CN, 2002, Rekayasa Perangkat Lunak Pedekatan Praktisi (Buku I), Yogyakarta: Andi. [11] Nandiwardhana, Indrayasa. 2012. Pengembangan Physics Game ‘Fix and Fit’ Berbasis Android Smartphone Menggunakan Actionscript 3.0 dan QuickBox2D. Salatiga. FTI-UKSW. [12] Maurina, E.F., 2006, The game programmer's guide to Torque: under the hood of the Torque Game Engine, Wellesley, MA: A K Peters Ltd.
19