Jumat, 16 Agustus 2013

Construct 2 RPG tutorial: Mages AI

Baiklah, kita ketemu lagi di blog post yang membahas soal cara membuat RPG. Kali ini aku akan melanjutkan bahasan sebelumnya soal AI, yaitu bagaimana membuat AI penyihir. Sebenarnya membuat AI penyihir ini nggak jauh beda dengan membuat AI untuk petarung, hanya ada sedikit perubahan saja. Ada dua jenis penyihir, yaitu penyihir ofensif / tipe penyerang, dan penyihir suportif, keduanya punya logika sendiri-sendiri.

Pertama-tama kita akan bahas AI dari penyihir ofensif, logikanya adalah seperti ini:
  1. Pilih target
  2. Kalau SP mencukupi untuk men-cast paling nggak satu sihir, pilih sihir
  3. Masuk casting time
  4. Kalau diserang musuh casting time berakhir, sihir gagal di-cast
  5. Kalau bisa casting sampai casting time berakhir, keluarkan sihir dan kurangi current SP
  6. Kalau target masih hidup, kembali ke poin 2
  7. Kalau target sudah mati, kembali ke poin 1
  8. Kalau SP nggak mencukupi, dekati musuh, lalu serang secara fisik.
Aku perlu menambahkan poin terakhir soal kemungkinan kalau ternyata si penyihir nggak punya cukup SP buat mengeluarkan sihir, kalau nggak begitu bisa-bisa penyihir kita cuma berdiri bengong di tengah battle screen. Logika pemilihan target akan kubuat sama seperti penyerang fisik, yaitu menggunakan instance variable enemySelection dan targetName, kalau kamu lupa untuk apa kedua instance variable ini, bisa lihat di blog post sebelumnya.

Berikutnya, penyihir akan memilih sihir apa yang dipakai, untuk sementara aku berencana membuatnya memilih acak, karena aku nggak tahu bagaimana cara membuat AI memilih sihir yang bagus. Sesudah memilih, penyihir akan masuk casting time. Selama casting time ini penyihir nggak bisa berjalan atau melakukan hal yang lain, kalau penyihir dikendalikan oleh pemain maka kita harus mengganti nilai variable state yang sudah aku jelaskan. Semua sihir punya instance variable castTime yang hitungannya dalam detik, nanti kita akan mengurusi variable ini sewaktu kita mulai men-coding sistem penyihir ini. Sepertinya sisa poin-poinnya sudah cukup jelas dan nggak perlu aku jelaskan, kalau belum jelas silahkan tinggalkan komentar.


Sekarang aku ingin membahas soal AI penyihir suportif. Tugas penyihir suportif ada 2: healing dan meningkatkan stats rekannya untuk sementara. Karena itu urutan logikanya adalah: kalau ada teman yang perlu disembuhkan, sembuhkan. Kalau nggak ada, support stats.
  1. Lihat current HP teman, cari apakah ada yang perlu disembuhkan
  2. Kalau ada, pilih sihir penyembuh HP
  3. Masuk casting time
  4. Kalau diserang musuh casting time berakhir, sihir gagal di-cast
  5. Kalau bisa casting sampai selesai, keluarkan sihir dan kurangi current SP
  6. Kembali ke poin 1
  7. Kalau nggak ada teman yang perlu disembuhkan, pilih sihir support
  8. Pilih target untuk sihir support itu
  9. Masuk casting time
  10. Kalau diserang musuh casting time berakhir, sihir gagal di-cast
  11. Kalau bisa casting sampai selesai, keluarkan sihir dan kurangi current SP
  12. Kembali ke poin 1
sebelum melakukan logika AI ini, penyihir suportif harus memiliki current SP yang cukup untuk paling nggak men-cast satu sihir, kalau nggak maka penyihir akan menyerang secara fisik.

Aku ingin lebih membahas soal definisi "ada yang perlu disembuhkan" ini, karena kita bisa men-customize bagian ini untuk menentukan seberapa sering penyihir menyembuhkan temannya. Aku membaginya berdasarkan berapa % current HP yang dimiliki karakter. Seperti biasa, aku akan menamai logika penyembuhan ini dan menyimpannya dalam satu instance variable, kali ini aku akan menamainya healMethod.
  1. Menyembuhkan sewaktu current HP di bawah 75% = "worries"
  2. Menyembuhkan sewaktu current HP di bawah 50% = "moderate"
  3. Menyembuhkan sewaktu current HP di bawah 25% = "critical"
dengan begini kita bisa membuat sistem customize AI untuk party member yang adalah seorang healer, karena aku ingin membuat sistem customize yang agak advanced. Satu lagi, karena nantinya selain sihir healing untuk satu orang, akan ada sihir healing untuk seluruh party member sekaligus. Karena itu si penyihir harus bisa menghitung berapa banyak rekannya yang membutuhkan penyembuhan, dan kalau jumlahnya lebih dari satu maka akan menggunakan sihir healing untuk seluruh party member. Jumlah ini akan aku simpan dalam instance variable woundedNumber yang akan bertambah sewaktu melihat current HP teman, kalau nilai woundedNumber ini lebih dari satu maka penyihir akan menggunakan sihir penyembuh seluruh party member (kalau punya). Instance variable ini akan diubah menjadi 0 sewaktu casting berakhir, entah karena diserang musuh ataupun karena sihir berhasil di-cast.

Untuk sihir support aku kira nggak perlu AI khusus untuk memilih teman yang cocok untuk diberi support, karena sihir support itu selalu dibutuhkan. Yang perlu aku lakukan hanyalah memberi tanda apakah karakter tertentu sudah diberi sihir support atau belum, supaya si penyihir bisa ngasih support ke karakter yang belum mendapat support. Aku bisa ngasih slot untuk diisi oleh sihir support, dan untuk itu aku juga harus ngasih slot untuk diisi debuff yang mengurangi stats karakter untuk sementara. Slot-slot ini aku beri nama slot1Buff, slot2Buff, slot1Debuff, slot2Debuff yang berisi string nama status buff dan debuff yang dikenakan ke karakter.


Untuk sekarang, mungkin hanya segini dulu. Sampai ketemu di blog post berikutnya.