Rabu, 14 Agustus 2013

Construct 2 RPG tutorial 4

Di blog post kali ini aku masih akan membahas tentang battle system. Kalau kalian perhatikan, sewaktu pemain menekan tombol K berulang-ulang (atau tombol serang di gamepad), karakter pemain akan terus-menerus menyerang tanpa henti. Ini akan aku halangi, karena menyerang tanpa henti ini bisa membuat pemain terus menerus menyerang tanpa strategi (atau disebut button mashing). Caranya adalah dengan menambahkan sebuah instance variable attackCount (Number) ke family Friendly, karena aku ingin pembatasan ini juga berpengaruh ke anggota party lainnya nanti. Kemudian di tempat fungsi charaAttacks dipanggil (waktu tombol K di keyboard dan tombol A di gamepad ditekan) tambahkan 1 ke attackCount karakter yang dikendalikan pemain. Kenapa aku tambahkan attackCount di sini dan bukan dalam fungsi charaAttacks? Karena kalau ditambahkan dalam charaAttacks nanti instance variable milik character akan bertambah sewaktu party member yang lain menyerang, atau kita harus mencari cara untuk bisa tahu bahwa yang menyerang adalah karakter dan bukan party member lain. Karena kedua implikasi itu merepotkan, aku memilih untuk menambahkan khusus instance variable character di tempat yang aku yakin pasti karakter yang menyerang. Nantinya kita harus melakukan yang sama pada party member yang lain.



Sesudah itu, tambahkan Timer behaviour ke dalam family Friendly, ini untuk memberi jeda sesudah mereka selesai menyerang sesuai dengan attackCount. Jeda sesudah menyerang ini harus diberi nama, karena aku kesusahan memberi nama, jeda ini aku namai "rest", yang berarti beristirahat sejenak untuk mengatur nafas sesudah menyerang berturut-turut. Untuk memudahkan, aku buat sebuah constant variable berisi "rest". Sekarang, berikan instance variable bernama state ke family Friendly, state ini yang nanti akan aku isi dengan "rest" untuk menandakan karakter ini baru saja menyerang berurutan. Nantinya, variable ini bisa diisi dengan nilai lain seperti: poisoned, stunned, silenced, atau semacamnya.


Buatlah dua event yang mengatur kapan pemain memasuki kondisi rest dan kapan kondisi rest berakhir. Pemain memasuki rest ketika attackCount sama dengan atau lebih dari 3 (atau nilai lain yang kalian suka, kalau kalian ingin combo yang lebih panjang). Di sini, kita mulai memulai timer dengan tag "doneRest" selama 1 detik (atau selama yang kalian suka, kalau kalian kira waktu jeda 1 detik terlalu lama), sesudah waktu yang ditentukan itu timer akan mengeluarkan event On Timer sesuai dengan tag yang sudah kita beri. Di On Timer inilah kita akan mengakhiri kondisi rest.




Yang harus diingat adalah, kita harus langsung mengganti nilai attackCount ke 0 di dalam event attackCount >= 3, karena kalau nggak, timer nggak akan melemparkan event On Timer. Ini karena setiap loop nilai attackCount adalah >= 3, dan start timer akan dijalankan tiap loop, hasilnya adalah timer nggak sempat menghitung waktu sampai waktu yang kita tentukan dan nilai state nggak pernah kembali ke kosong. Jangan lupa untuk mengganti event dimana pemain menyerang (sewaktu tombol K atau tombol gamepad ditekan) supaya karakter benar-benar berhenti menyerang sewaktu sedang memasuki rest.



Berikutnya aku akan memberi AI sederhana untuk musuh kita, sementara ini Ainya berfungsi untuk menggerakkan musuh mendekati karakter kalau dia berada di dekat karakter (masih belum menyerang). Pertama-tama tambahkan line of sight behaviour pada family Enemies, line of sight ini yang berguna untuk menentukan apakah karakter berada di dekat musuh atau nggak. Kemudian berikan instance variable radius pada family Enemies, radius ini adalah radius serangan, musuh akan menyerang karakter kalau karakter berada di dalam jarak radius ini, untuk sementara nilai awal dari radius adalah 60 (pixel). Range dari line of sight ini sudah aku ganti menjadi 150.

Ada dua event baru yang akan aku tulis, yaitu sewaktu musuh melihat di dekatnya ada karakter, dan sewaktu musuh tidak melihat karakter. Sewaktu musuh melihat karakter, dia akan mendekati karakter sampai berada dalam radius serangannya. Sewaktu musuh tidak melihat karakter, dia akan diam saja (sementara ini). AI ini juga mengatur animasi berjalan musuh.




Saat ini musuh cuma mengikuti pemain seperti anjing penurut, tapi nantinya aku ingin musuh bisa menyerang dan menggunakan skill / sihir. Apalagi untuk boss musuh memerlukan AI yang lebih rumit, dan sistem AI musuh nantinya harus gampang di-customize supaya memudahkan sewaktu membuat musuh berikutnya. Mungkin aku akan memikirkan soal itu dulu sebelum melanjutkan AI.