Estoy desarrollando un RPG 2D clásico (en una línea similar a la fantasía final) y me preguntaba si alguien tenía algún consejo sobre cómo hacer fórmulas de daño / enlaces a recursos / ejemplos. Explicaré mi configuración actual. Espero no exagerar con esta pregunta, y me disculpo si mis preguntas son demasiado grandes / amplias
Las estadísticas de Mis personajes se componen de lo siguiente:
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 vitalidad es básicamente defensa contra ataques físicos y el espíritu es defensa contra ataques mágicos.
Todas las estadísticas tienen máximos fijos (9999 para HP, 999 para MP / SP y 255 para el resto). Con las habilidades, los máximos se pueden aumentar (99999 para HP, 9999 para HP / SP, 999 para el resto) con valores típicos (en el nivel 100) antes / después de habilidades + equipo + etc. será 8000 / 20,000 para HP, 800 / 2000 para SP / MP, 180/350 para otras estadísticas
El Enemigo HP del juego tardío generalmente estará en los millones más bajos (con un súper jefe con un máximo de ~ 12 millones)
Me preguntaba cómo las personas realmente desarrollan fórmulas de daño adecuadas que se escalan correctamente. Por ejemplo, en base a estos datos, usar las fórmulas de daño para Final Fantasy X como base parecía muy prometedor. Una referencia completa aquí http://www.gamefaqs.com/ps2/197344-final-fantasy-x/faqs/31381 pero como un ejemplo rápido: Str = 127, comando 'Ataque' usado, enemigo 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
Simplemente modifiqué los divisores para incluir el índice de ataque de las armas y el índice de armadura.
El daño mágico se calcula de la siguiente manera: Mag = 255, se usa Ultima, enemigo 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
El problema es que las fórmulas se desmoronan por completo una vez que las estadísticas comienzan a superar 255. En particular, los valores de Defensa superiores a 300 comienzan a generar un comportamiento realmente extraño. Las estadísticas de Alta Fuerza + Defensa conducen a valores negativos masivos, por ejemplo. Si bien podría modificar las fórmulas para que funcionen correctamente para mi caso de uso, probablemente sería más fácil usar una fórmula completamente nueva. ¿Cómo las personas realmente desarrollan fórmulas de daño? Estaba considerando abrir Excel e intentar construir la fórmula de esa manera (mapeando Estadísticas de Ataque vs. Estadísticas de Defensa, por ejemplo) pero me preguntaba si hay una manera más fácil. Si bien no puedo transmitir la mecánica completa del juego aquí, ¿alguien podría sugerir un buen punto de partida para construir una fórmula de daño?
Gracias