Ich entwickle ein klassisches 2D-Rollenspiel (ähnlich wie in Final Fantasy) und habe mich gefragt, ob jemand Ratschläge dazu hat, wie man Schadensformeln / Links zu Ressourcen / Beispielen erstellt. Ich erkläre mein aktuelles Setup. Hoffentlich übertreibe ich es mit dieser Frage nicht und entschuldige mich, wenn meine Fragen zu groß sind
Meine Charakterstatistiken setzen sich wie folgt zusammen:
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,
};
Vitalität ist im Grunde eine Verteidigung gegen physische Angriffe und Geist eine Verteidigung gegen magische Angriffe.
Alle Statistiken haben feste Höchstwerte (9999 für HP, 999 für MP / SP und 255 für den Rest). Mit Fähigkeiten können die Maximalwerte erhöht werden (99999 für HP, 9999 für HP / SP, 999 für den Rest), wobei typische Werte (auf Stufe 100) vor / nach Fähigkeiten + Ausrüstung + usw. 8000 / 20.000 für HP, 800 / 2000 für SP / MP, 180/350 für andere Statistiken
Late Game Enemy HP wird in der Regel in den unteren Millionen liegen (wobei ein Super-Boss das Maximum von ~ 12 Millionen hat).
Ich habe mich gefragt, wie Menschen tatsächlich die richtigen Schadensformeln entwickeln, die richtig skaliert werden? Basierend auf diesen Daten sah es beispielsweise vielversprechend aus, die Schadensformeln für Final Fantasy X als Grundlage zu verwenden. Eine vollständige Referenz finden Sie hier http://www.gamefaqs.com/ps2/197344-final-fantasy-x/faqs/31381, aber als kurzes Beispiel: Str = 127, Befehl 'Attack' verwendet, feindlicher 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
Ich habe einfach die Teiler geändert, um die Angriffswertung von Waffen und die Rüstungswertung von Rüstungen einzuschließen.
Der magische Schaden wird wie folgt berechnet: Mag = 255, Ultima wird verwendet, feindliches 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
Das Problem ist, dass die Formeln vollständig auseinanderfallen, sobald die Werte über 255 steigen. Insbesondere Verteidigungswerte über 300 führen zu merkwürdigem Verhalten. Werte für "Hohe Stärke + Verteidigung" führen beispielsweise zu massiven negativen Werten. Während ich möglicherweise in der Lage bin, die Formeln so zu ändern, dass sie für meinen Anwendungsfall korrekt funktionieren, ist es wahrscheinlich einfacher, nur eine völlig neue Formel zu verwenden. Wie entwickeln Menschen tatsächlich Schadensformeln? Ich überlegte, Excel zu öffnen und zu versuchen, die Formel so zu erstellen (z. B. Attack Stats vs. Defense Stats), aber ich fragte mich, ob es einen einfacheren Weg gibt. Obwohl ich hier nicht die vollständige Spielmechanik meines Spiels vermitteln kann, könnte jemand einen guten Ausgangspunkt für die Erstellung einer Schadensformel vorschlagen?
Vielen Dank