Estou desenvolvendo um RPG 2d clássico (em uma linha semelhante à fantasia final) e fiquei imaginando se alguém teria algum conselho sobre como causar danos às fórmulas / links para recursos / exemplos? Vou explicar minha configuração atual. Espero não estar exagerando nessa questão e peço desculpas se minhas perguntas são muito grandes / amplas
As estatísticas de Meus Personagens são compostas pelo seguinte:
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,
};
Vitalidade é basicamente defesa contra ataques físicos e espírito é defesa contra ataques mágicos.
Todas as estatísticas têm máximos fixos (9999 para HP, 999 para MP / SP e 255 para o restante). Com habilidades, os máximos podem ser aumentados (99999 para HP, 9999 para HP / SP, 999 para o restante) com valores típicos (no nível 100) antes / depois de habilidades + equipamentos + etc serão 8000 / 20.000 para HP, 800 / 2000 para SP / MP, 180/350 para outras estatísticas
No final do jogo, o inimigo HP normalmente fica na casa dos milhões (com um super chefe com no máximo ~ 12 milhões).
Fiquei me perguntando como as pessoas realmente desenvolvem fórmulas de danos adequadas que escalam corretamente? Por exemplo, com base nesses dados, o uso das fórmulas de dano para Final Fantasy X como base parecia muito promissor. Uma referência completa aqui http://www.gamefaqs.com/ps2/197344-final-fantasy-x/faqs/31381, mas como um exemplo rápido: Str = 127, comando 'Attack' usado, inimigo 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
Simplesmente modifiquei os divisores para incluir a classificação de ataque de armas e a classificação de armadura.
O Dano Mágico é calculado da seguinte forma: Mag = 255, Ultima é usado, MDef inimigo = 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
O problema é que as fórmulas desmoronam completamente quando as estatísticas começam a ficar acima de 255. Em particular, valores de defesa acima de 300 ou mais começam a gerar um comportamento realmente estranho. Estatísticas de alta resistência + defesa levam a valores negativos massivos, por exemplo. Embora eu possa modificar as fórmulas para funcionarem corretamente no meu caso de uso, provavelmente seria mais fácil usar uma fórmula completamente nova. Como as pessoas realmente desenvolvem fórmulas de danos? Eu estava pensando em abrir o Excel e tentar criar a fórmula dessa maneira (mapeando as Estatísticas de ataque vs. Estatísticas de defesa, por exemplo), mas estava pensando se há uma maneira mais fácil. Embora eu não possa transmitir toda a mecânica do jogo aqui, alguém poderá sugerir um bom ponto de partida para a construção de uma fórmula de dano?
obrigado