Rabu, 31 Juli 2013

Construct 2 RPG tutorial: The battle continues...

Sesudah kita membahas tentang battle design di bagian kedua, di bagian ketiga ini aku akan mulai mengimplementasikan apa yang kita desain sebelumnya. Di sini aku mulai memikirkan tentang implementasi stats karakter yang kita desain, dan juga tentang pemakaian equipment / senjata. Pertama-tama mari kita lihat screenshot hasil akhir dari tutorial ini:


Pertama-tama aku akan menambahkan beberapa family baru, family ini adalah fitur construct 2 yang cuma ada di versi berbayar (punyaku versi personal)

Aku akan menjelaskan apa arti dari masing-masing family:
- Enemies: berisi daftar-daftar musuh dalam game
- enemySprites: sprites dari musuh, namanya sama dengan nama musuh
- Friendly: berisi karakter pemain dan party member lain yang bergabung dalam battle. Objek-objek yang ada di family ini nggak bisa dilukai dengan serangan pemain tapi bisa disembuhkan dengan item atau skill penyembuh pemain
- FriendlyAttackFX: efek serangan yang dikeluarkan anggota family Friendly, efek serangan ini yang nanti dites collision detection dengan musuh
- Weapons: daftar senjata yang ada dalam game. Senjata yang ada di sini nggak harus dipakai oleh pemain atau party member yang lain, ini cuma menjadi database senjata.



Sebenernya aku ingin membuat family EnemyAttackFX tapi karena musuh masih belum bisa nyerang, itu masih belum aku masukkan. Di masing-masing family ada instance variable baru yang berbeda masing-masing family, tapi berguna untuk kegunaan mereka. Aku cuma ngasih contoh instance variable family Friendly, untuk berikutnya bisa lihat sendiri.


Instance variable sama dengan stats yang kemarin kita desain, tapi ada beberapa tambahan, contohnya weapon dan beberapa armor. Itu untuk mengetahui apa equipment yang saat ini sedang dikenakan oleh character & party member yang lain.

Lanjut ke code, perubahan pertama ada di event kedua, dimana kita memasukkan nilai minATK dan maxATK dari senjata ke character. Ini supaya efek serangan bisa tau nilai minimal dan maksimal serangan senjata untuk dimasukkan ke perhitungan damage. Perubahan berikutnya ada jauh di bawah, yaitu di bawah function on charaAttacks(), di sini agak panjang tapi sebenarnya cuma menulis apa yang sebelumnya kita desain dalam code. Bagian ini mungkin nggak perlu aku jelaskan karena sebenarnya sudah ada di blog post sebelumnya, tapi ada beberapa bagian yang ingin aku jelaskan.
Pertama, setiap kali menghitung random aku selalu memakai floor(random(x)) di mana x adalah nilai yang aku inginkan + 1. Ini karena fungsi random akan mencari angka antara 0 dan 1 angka di bawah angka yang kita inginkan, jadi untuk mengatasi itu aku menambahkan 1. Kegunaan floor adalah untuk membulatkan desimal ke bawah, karena kalau tidak dibulatkan bisa-bisa kita dapat angka seperti 0.7644982 atau 12.37928364. Aku nggak ingin dapat angka desimal panjang seperti itu, jadi selalu aku bulatkan ke bawah.
Kedua, aku membedakan perhitungan damage antara serangan fisik dan serangan sihir, tapi perhitungan kemungkinan kenanya tetap sama. Dengan begini aku bisa bereksperimen dengan bermacam-macam jenis musuh dan serangan yang efektif terhadap musuh itu.
Ketiga, aku menambahkan text untuk menunjukkan angka damage dan miss kalau memang serangan meleset. Ini untuk feedback berupa tulisan kepada pemain tentang besar kekuatan serangan karakter.

File .capx bisa diambil di: https://dl.dropboxusercontent.com/u/22420086/My%20RPG%20project.capx

Kalian bisa mencoba menyerang monster untuk melihat hasil serangan kalian, beberapa serangan akan meleset. Stats yang aku pakai di sini baru buat percobaan, dengan asumsi bahwa stats-stats itu cocok untuk stats karakter level 1. Kalau kalian ingin mencoba mengubah, silahkan saja. Mungkin sekarang segini dulu, sampai ketemu di blog post berikutnya.