Sto sviluppando un classico gioco di ruolo in 2D (simile a Final Fantasy) e mi chiedevo se qualcuno avesse qualche consiglio su come fare formule di danno / collegamenti a risorse / esempi? Spiegherò la mia configurazione attuale. Spero di non esagerare con questa domanda e mi scuso se le mie domande sono troppo grandi / ampie
Le statistiche dei miei personaggi sono composte da quanto segue:
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,
};
La vitalità è fondamentalmente la difesa dagli attacchi fisici e lo spirito è la difesa dagli attacchi magici.
Tutte le statistiche hanno fissato massimi (9999 per HP, 999 per MP / SP e 255 per il resto). Con le abilità, i massimi possono essere aumentati (99999 per HP, 9999 per HP / SP, 999 per il resto) con valori tipici (a livello 100) abilità prima / dopo + equipaggiamento + ecc sarà 8000 / 20.000 per HP, 800 / 2000 per SP / MP, 180/350 per altre statistiche
La fine del gioco Enemy HP sarà in genere tra i milioni inferiori (con un super boss con un massimo di ~ 12 milioni).
Mi chiedevo come le persone sviluppano effettivamente le formule di danno adeguate che si ridimensionano correttamente? Ad esempio, sulla base di questi dati, l'utilizzo delle formule di danno per Final Fantasy X come base sembrava molto promettente. Un riferimento completo qui http://www.gamefaqs.com/ps2/197344-final-fantasy-x/faqs/31381 ma come esempio rapido: Str = 127, comando 'Attack' usato, nemico 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
Ho semplicemente modificato i divisori per includere il grado di attacco delle armi e il grado di armatura dell'armatura.
Il danno magico viene calcolato come segue: Mag = 255, viene utilizzata Ultima, MDef nemico = 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
Il problema è che le formule si sfaldano completamente quando le statistiche iniziano a superare 255. In particolare i valori di Difesa oltre 300 iniziano a generare comportamenti davvero strani. Le statistiche ad alta resistenza + difesa portano ad esempio a valori negativi enormi. Mentre potrei essere in grado di modificare le formule per funzionare correttamente per il mio caso d'uso, probabilmente sarebbe più semplice usare una formula completamente nuova. In che modo le persone sviluppano effettivamente formule di danno? Stavo pensando di aprire Excel e provare a costruire la formula in quel modo (mappando le statistiche di attacco contro le statistiche di difesa per esempio) ma mi chiedevo se ci fosse un modo più semplice? Mentre non riesco a trasmettere qui le meccaniche di gioco complete del mio gioco, qualcuno potrebbe essere in grado di suggerire un buon punto di partenza per la costruzione di una formula di danno?
Grazie