Klasik bir 2d RPG (son fanteziye benzeyen bir damarda) geliştiriyorum ve birinin formüllere / kaynaklara / örneklere verilen bağlantılara nasıl zarar verecekleri konusunda bir tavsiyesi olup olmadığını merak ediyordum. Mevcut kurulumumu açıklayacağım. Umarım bu soruyu abartmıyorum ve sorularımın çok geniş / geniş olması durumunda özür dilerim
Karakterlerim istatistikleri aşağıdakilerden oluşur:
enum Stat
{
HP = 0,
MP = 1,
SP = 2,
Strength = 3,
Vitality = 4,
Magic = 5,
Spirit = 6,
Skill = 7,
Speed = 8, //Speed/Agility are the same thing
Agility = 8,
Evasion = 9,
MgEvasion = 10,
Accuracy = 11,
Luck = 12,
};
Canlılık temel olarak fiziksel saldırılara karşı savunmadır ve ruh, sihirli saldırılara karşı savunmadır.
Tüm istatistiklerin maksimum değerleri vardır (HP için 9999, MP / SP için 999 ve geri kalanı için 255). Yeteneklerle birlikte, kabiliyetlerden önce / sonra tipik değerlerle (seviye 100'de) 9999, HP / 9999, HP / 9999, HP için 9999, HP + 8000 / 20.000 olacak SP / MP için 2000, diğer istatistikler için 180/350
Geç oyun Düşman HP tipik olarak daha düşük milyonlarda olacaktır (en fazla ~ 12 milyon olan süper bir patronla).
İnsanların doğru şekilde ölçeklenen düzgün hasar formülleri geliştirdiklerini merak ediyordum. Örneğin, bu verilere dayanarak, Final Fantasy X için hasar formüllerini bir üs olarak kullanmak çok umut verici görünüyordu. Burada tam bir referans http://www.gamefaqs.com/ps2/197344-final-fantasy-x/faqs/31381 ancak hızlı bir örnek olarak: Str = 127, 'Saldırı' komutu kullanılmış, düşman Def = 34.
1. Physical Damage Calculation:
Step 1 ------------------------------------- [{(Stat^3 ÷ 32) + 32} x DmCon ÷16]
Step 2 ---------------------------------------- [{(127^3 ÷ 32) + 32} x 16 ÷ 16]
Step 3 -------------------------------------- [{(2048383 ÷ 32) + 32} x 16 ÷ 16]
Step 4 --------------------------------------------------- [{(64011) + 32} x 1]
Step 5 -------------------------------------------------------- [{(64043 x 1)}]
Step 6 ---------------------------------------------------- Base Damage = 64043
Step 7 ----------------------------------------- [{(Def - 280.4)^2} ÷ 110] + 16
Step 8 ------------------------------------------ [{(34 - 280.4)^2} ÷ 110] + 16
Step 9 ------------------------------------------------- [(-246)^2) ÷ 110] + 16
Step 10 ---------------------------------------------------- [60516 ÷ 110] + 16
Step 11 ------------------------------------------------------------ [550] + 16
Step 12 ---------------------------------------------------------- DefNum = 566
Step 13 ---------------------------------------------- [BaseDmg * DefNum ÷ 730]
Step 14 --------------------------------------------------- [64043 * 566 ÷ 730]
Step 15 ------------------------------------------------------ [36248338 ÷ 730]
Step 16 ------------------------------------------------- Base Damage 2 = 49655
Step 17 ------------ Base Damage 2 * {730 - (Def * 51 - Def^2 ÷ 11) ÷ 10} ÷ 730
Step 18 ---------------------- 49655 * {730 - (34 * 51 - 34^2 ÷ 11) ÷ 10} ÷ 730
Step 19 ------------------------- 49655 * {730 - (1734 - 1156 ÷ 11) ÷ 10} ÷ 730
Step 20 ------------------------------- 49655 * {730 - (1734 - 105) ÷ 10} ÷ 730
Step 21 ------------------------------------- 49655 * {730 - (1629) ÷ 10} ÷ 730
Step 22 --------------------------------------------- 49655 * {730 - 162} ÷ 730
Step 23 ----------------------------------------------------- 49655 * 568 ÷ 730
Step 24 -------------------------------------------------- Final Damage = 38635
Bölücüler silahların saldırı derecesini ve zırh derecesini içerecek şekilde değiştirdim.
Sihirli Hasar şu şekilde hesaplanır: Mag = 255, Ultima kullanılır, düşman MDef = 1
Step 1 ----------------------------------- [DmCon * ([Stat^2 ÷ 6] + DmCon) ÷ 4]
Step 2 ------------------------------------------ [70 * ([255^2 ÷ 6] + 70) ÷ 4]
Step 3 ------------------------------------------ [70 * ([65025 ÷ 6] + 70) ÷ 4]
Step 4 ------------------------------------------------ [70 * (10837 + 70) ÷ 4]
Step 5 ----------------------------------------------------- [70 * (10907) ÷ 4]
Step 6 ------------------------------------ Base Damage = 190872 [cut to 99999]
Step 7 ---------------------------------------- [{(MDef - 280.4)^2} ÷ 110] + 16
Step 8 ------------------------------------------- [{(1 - 280.4)^2} ÷ 110] + 16
Step 9 ---------------------------------------------- [{(-279.4)^2} ÷ 110] + 16
Step 10 -------------------------------------------------- [(78064) ÷ 110] + 16
Step 11 ------------------------------------------------------------ [709] + 16
Step 12 --------------------------------------------------------- MDefNum = 725
Step 13 --------------------------------------------- [BaseDmg * MDefNum ÷ 730]
Step 14 --------------------------------------------------- [99999 * 725 ÷ 730]
Step 15 ------------------------------------------------- Base Damage 2 = 99314
Step 16 ---------- Base Damage 2 * {730 - (MDef * 51 - MDef^2 ÷ 11) ÷ 10} ÷ 730
Step 17 ------------------------ 99314 * {730 - (1 * 51 - 1^2 ÷ 11) ÷ 10} ÷ 730
Step 18 ------------------------------ 99314 * {730 - (51 - 1 ÷ 11) ÷ 10} ÷ 730
Step 19 --------------------------------------- 99314 * {730 - (49) ÷ 10} ÷ 730
Step 20 ----------------------------------------------------- 99314 * 725 ÷ 730
Step 21 -------------------------------------------------- Final Damage = 98633
Sorun, istatistikler 255'in üzerine çıkmaya başladığında, formüllerin tamamen parçalanmasıdır. Özellikle 300'ün üzerindeki Savunma değerleri gerçekten garip davranışlar yaratmaya başlar. Yüksek Mukavemet + Savunma istatistikleri, örneğin büyük negatif değerlere yol açmaktadır. Kullanım durumum için doğru çalışması için formülleri değiştirebilmeme rağmen, tamamen yeni bir formülü kullanmak muhtemelen daha kolay olurdu. İnsanlar aslında nasıl hasar formülleri geliştirir? Excel'i açmayı ve formülü bu şekilde oluşturmayı deniyordum (örneğin, Saldırı İstatistikleri ile Savunma İstatistikleri eşleştiriliyordu) ama daha kolay bir yol olup olmadığını merak ediyordum. Oyunumun tam oyun mekaniğini burada aktaramazken, birisi hasar formülü oluşturmak için iyi bir başlangıç yeri önerebilir mi?
Teşekkürler