Rabu, 08 Mei 2013

Dev blog: on game design

Sesudah kemarin aku menulis blog post soal sprite, sekarang waktunya aku nulis soal game design. Pertama-tama yang aku lakukan adalah mendefinisikan stats yang dimiliki oleh karakter & musuh, dan juga kegunaannya, dan inilah stats itu:
HP: health points, HP-nya karakter/musuh saat ini. Kalau ini sampai 0, maka karakter/musuh mati
MaxHP: nilai maksimum HP, sewaktu HP disembuhkan nilainya ga boleh melebihi nilai MaxHP
ATK: menentukan kekuatan serangan
DEF: menentukan kekuatan pertahanan karakter/musuh
EVA: penentu kemungkinan menghindar
HIT: menentukan apakah serangannya kena atau tidak
DEX: modifier untuk kemungkinan kena, perhitungan damage, dan giliran serang
LUK: menentukan kemungkinan serangan critical karakter/musuh
EXP: khusus musuh, jumlah experience points yang akan didapatkan karakter

sesudah itu aku langsung memikirkan rumus perhitungan kemungkinan kena serangan dan damage waktu adegan pertarungan. Urutan perhitungannya adalah: kemungkinan kena --> kemungkinan critical --> menghitung damage. Untuk kemungkinan kenanya aku hitung dengan rumus ini:
HIT * [2/3/4] – ((EVA + DEX) * 2)
arti dari [2/3/4] itu akan dirandom salah satu, apakah HIT penyerang akan dikali 2, atau 3, atau 4. Sesudah itu jumlahkan EVA dan DEX penerima serangan lalu dikali 2. Setelah itu hasil perkalian HIT akan dikurangi hasil perhitungan EVA dan DEX, kalau hasilnya lebih dari atau sama dengan 0, maka serangan itu kena, selain itu berarti meleset. Dengan ini ada kemungkinan 2 kali kemungkinan kena, 1 kali kemungkinan meleset (kecuali ada perbedaan stats yang besar, maka akan ada kemungkinan serangan pasti meleset.)

Untuk kemungkinan critical sederhana saja, cuma merandom angka antara 1 sampai 100. Kalau angka hasil randomnya kurang dari atau sama dengan nilai LUK, maka serangan itu critical, dan nantinya nilai damage akan dikali tiga. Jadi nanti akan ada variabel yang menyimpan apakah nanti akan critical atau tidak.



Aku inginnya nilai damage-nya nanti bisa bervariasi, gak monoton (selalu 83, misalnya). Dan di awal-awal game, nilai damage masih berkisar di angka puluhan (60/70/80) tapi nanti semakin jauh ke dalam game, nilai damage akan sampai ratusan. Rumus yang aku bikin adalah seperti ini:
Damage = (ATK * DEX) – (DEF * [2/3/4])
ATK dan DEX penyerang dikalikan terlebih dulu, baru kemudian dikurangi dengan hasil perkalian DEF si penerima serangan. Ini damage biasa, kalau critical nilai damage akan dikali tiga. Sesudah itu damage ini akan mengurangi HP penerima serangan.

Berikutnya adalah soal menentukan giliran serangan. Karena battle nanti akan berjalan otomatis tanpa campur tangan pemain, jadi battle akan berjalan real time, tapi masing-masing pihak akan menyerang bergantian. Urutan penyerang bisa jadi seperti ini (yang kiri menyerang duluan):
Pemain - musuh
Musuh - pemain
Pemain - pemain - musuh
Pemain - musuh - musuh
Musuh - musuh - pemain
atau kombinasi lain yang seperti di atas. Karena itu, perhitungan rumusnya adalah seperti ini:
DEX * [2/3/4/5/6]
di awal turn, DEX dari pemain dan musuh akan dihitung seperti itu, lalu dibandingkan. Yang nilainya lebih besar akan jadi penyerang. Kalau nilainya kebetulan sama, karakter pemain yang akan jadi penyerang.

Kira-kira segitu dulu pembahasan game design kali ini, sampai ketemu di blog post berikutnya.