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.
Tidak ada komentar:
Posting Komentar