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
fuente
Respuestas:
Crear fórmulas como esta requiere el conocimiento de las funciones matemáticas elementales , las cosas que aprendió en las clases de Álgebra y Precálculo.
Una vez que los haya dominado, pregúntese (reemplace "valor" con "daño" o "salud" o "velocidad" o lo que sea) :
Luego solo modifíquelo (agregue / multiplique cosas, cambie el valor base, etc.) hasta que se sienta bien. Una calculadora gráfica lo ayudará a visualizar cómo los cambios en los parámetros afectarán la función.
Por cierto, los problemas que está experimentando se deben a desbordamientos de enteros .
Use tipos variables que sean lo suficientemente grandes como para contener los números con los que está trabajando. Los tamaños difieren según la plataforma en C ++, pero el uso del compilador de Visual Studio de
unsigned int
32 bits es de 32 bits, mientras queunsigned __int64
(específico de MS) es de 64 bits. También considere usar adouble
.Además, intente reorganizar sus operaciones para que no encuentre números tan grandes en primer lugar (por ejemplo, en lugar de
MDef * MDef / 110
hacerlo(int)((float)MDef / 110 * MDef)
) .fuente
__int64
sobreuint64_t
porquestdint.h
no está disponible en Visual Studio 2008 y más adelante, y yo no quería confundir al pobre chico más de lo que ya es.Ahí está su verdadero problema: definió sus estadísticas antes de definir qué significan realmente esas estadísticas . Estás poniendo el carro delante del caballo.
Mira cómo funciona D&D (sobremesa). "Fuerza" no significa nada en sí mismo; solo significa algo porque hay una regla que dice: "Agrega tu bonificación de fuerza a tu ataque cuerpo a cuerpo". Esa regla es parte de las reglas de combate de D&D. Sin las reglas de combate, "Fuerza" es generalmente una cantidad sin sentido.
La primera pregunta que debes hacerte es esta: ¿cuánta diferencia quiero entre los personajes? Una vez más, mira D&D. Allí, tienen 6 estadísticas básicas. Estas estadísticas definen diferentes dimensiones de juego para los personajes. Un personaje con una alta Destreza tendrá diferentes opciones que un personaje con baja Destreza.
Pero la razón de incluso esa diferencia vuelve a las reglas. Una alta destreza significa bonificaciones a los ataques a distancia; puedes golpear más a menudo con ataques a distancia. Entonces, solo entre Fuerza y Destreza, tienes dos dimensiones de juego: rango vs. cuerpo a cuerpo.
La inteligencia y la sabiduría también forman una especie de pareja, pero estas interactúan más con clases específicas. Int hace que los magos y otros lanzadores de conjuros arcanos sean mejores (o posibles bajo algunos conjuntos de reglas), la sabiduría es vital para los clérigos y otros lanzadores de conjuros divinos. Debido a que los hechizos divinos y arcanos tienen diferentes listas de hechizos, estas dos estadísticas están involucradas en diferentes dimensiones del juego.
Debe definir las reglas básicas en torno a las estadísticas antes de poder definir funciones de progresión de crecimiento y similares. No necesitas detalles; no es necesario decir que "cada punto de fuerza se agrega a la tirada aleatoria para determinar si un ataque cuerpo a cuerpo impacta". Lo que necesita son meta-reglas como "la destreza hace que los atacantes a distancia sean mejores". Puedes descubrir exactamente cómo los hace mejores más adelante.
Hay diferentes formas de progresar personajes. Un truco común de Final Fantasy de la vieja escuela era simplemente usar el nivel del personaje como parte de sus cálculos de daño. Esto podría ser simplemente multiplicar el nivel por la estadística apropiada, o podría significar aplicar una función al nivel del personaje. Digamos, una progresión cuadrática, de modo que la tasa de daño de un personaje aumentaría por nivel.
Como quiera que tus funciones de combate funcionen, deben tener en cuenta la progresión. Sus funciones necesitan ganchos para la progresión.
D&D tiene una forma divertida de progresión. Es en parte basado en la clase; cada vez que subes de nivel, obtienes nuevas características de clase y un bono fijo para tu golpe, según tu clase de personaje. Sin embargo, algunas características de clase mejoraron por sí mismas. Los hechizos en D&D tendrían progresión incorporada. Un hechizo puede hacer 1d4 de daño por 2 niveles de un lanzador de hechizos por encima del primero. Así que cualquier otro nivel de mago mejora ese hechizo.
D&D también utilizó mucho la progresión basada en elementos. Hasta la 4ª edición, la progresión basada en objetos era principalmente para personajes luchadores, pero incluso en las ediciones más antiguas, los lanzadores de hechizos tenían objetos que les daban beneficios de estadísticas u otros ajustes (o simplemente les daban hechizos).
Así que los elementos son otra cosa que tus funciones de combate deben tener en cuenta. ¿Los objetos solo mejoran una o más estadísticas mientras están equipados, o hacen otras cosas también? D&D era un poco extraño, ya que las estadísticas rara vez cambiaban; las armas simplemente hicieron daño XdY, posiblemente con una bonificación basada en una de tus estadísticas. Y eso fue eso. Entonces, tu única forma de hacer más daño en la batalla era encontrar un arma mejor. En muchos juegos de rol de videojuegos, tienen en cuenta el nivel además del arma.
fuente
Tus fórmulas parecen bastante complicadas. No estoy seguro de cómo los desarrolladores profesionales de RPG manejan esto, pero recomendaría centrarse en la simplicidad. Intente encontrar la fórmula más simple posible que aún incorpore el rango de estadísticas que desea usar. Por ejemplo, ¿podría hacer que las estadísticas se modifiquen entre sí antes del cálculo del daño, en lugar de modificar el daño durante el cálculo? Una vez que tenga una fórmula en mente, intentaré graficarla para una amplia gama de valores posibles para ver cómo se comportará a medida que los jugadores suban de nivel. Obviamente, cuantas menos variables tenga, más factible será.
Además, BlueRaja proporcionó una explicación importante de por qué podría estar viendo valores inesperados en niveles estadísticos más altos. Usar tipos sin firmar y verificar desbordamientos será importante.
fuente
Tengo un problema con esto. Debes construir tus jefes alrededor de lo que crees que tus jugadores deberían poder manejar. Estás creando tus jugadores y tu fórmula de combate en torno a cómo quieres que sean tus jefes.
Una vez que construyes tu mecánica de combate y tus roles, puedes decidir cómo quieres diseñar tus jefes, ya que debería ser un buen equilibrio entre el daño que los jugadores pueden causar / absorber frente a lo que el jefe puede tratar / absorber.
fuente
Esos números que citó probablemente se derivan de un simple ajuste de una simulación, a lo largo de miles de ejecuciones.
Entonces, debes escribir una simulación para crear un personaje de nivel 20 y ver cómo le va a través de 200 batallas más o menos contra los tipos de enemigos con los que se supone que está luchando en ese momento. Hazlo nuevamente para un personaje de nivel 30 (presumiblemente en la siguiente sección del mundo).
Tomará un tiempo hacerlo bien, pero escribir simulaciones automáticas definitivamente hará que esto sea mucho más fácil que solo adivinar y jugar manualmente.
fuente
Creo que comete el error de querer crear una fórmula sin tener en mente un diseño adecuado.
Primero comience con un diseño, luego comience a pensar en representar el diseño en fórmulas. Cuanto más claro sea su diseño, más fácil debería ser encontrar fórmulas simples y / o precisas.
Intenta implementar "tipos" de enemigos, por ejemplo, "blindado" => un ataque de jugador si es de tipo físico se reduce en un 50%. No haga que una batalla fluya hacia lo abstracto, piense en lo que es relevante y lo que no lo es.
Si su diseño dice que los "enemigos blindados" son débiles contra la magia pero fuertes contra el daño físico, represente eso en código. Pero recuerde que ha realizado muchas pruebas, porque los valores no funcionarán mágicamente la primera vez que escriba el código. Intente crear un diseño, ponga la lógica en el código, siempre verifique si esta es la representación técnica de lo que tenía en mente y si no cambia los valores hasta que lo sea.
fuente
Aunque mi diseño no ha dejado la fase de hoja de cálculo, he llegado a una conclusión sobre el diseño de las matemáticas para RPG:
Mantenlos lo más simple posible. En el diseño en el que estoy trabajando, utilicé fórmulas muy simplistas, que son adecuadas para un sistema sin clase. Es decir. El hechizo Bola de fuego tiene un daño de 30. Lo formal es:
También podemos agregar modificadores como este:
Entonces el resultado final sería 45 daños. Descubrí que usar multiplicadores de porcentajes es una solución muy fácil y muy escalable para trabajar. En lugar de venir con algunos números impares con matemáticas complejas para descubrir el resultado que queremos.
Ahora podemos calcular la resistencia al daño, eso solo calculará la defensa contra el tipo de daño establecido. Hay dos enfoques y, sinceramente, no he decidido cuál se adaptaría mejor, pero ambos son simples y viables:
Entonces, el resultado final será el daño recibido (solo corté el resultado parcial).
Otra fórmula:
Entonces el resultado final será 23. Si sucede que la resistencia es mayor que el daño recibido, el personaje simplemente no recibe ningún daño. Por supuesto, depende de usted asegurarse de que tal situación no tenga lugar, excepto cuando lo desee.
Aunque debo admitir que la escala de porcentajes es algo más fácil de equilibrar y escalar. Pero esto también depende de sus números base. La escala de porcentajes funcionará mejor si comienza desde 100 en adelante. Si está operando con números pequeños (cualquier cosa por debajo de 100 para ser honesto), puede ser incómodo ya que comenzará a obtener resultados de coma flotante, será difícil de equilibrar y realmente hará algo interesante con ellos.
Probablemente la solución óptima en ese caso es usar ambos enfoques cuando lo vean conveniente. O si eres fanático de los grandes números, comienza desde 1000.
Y al final termina. No he llegado a estas conclusiones completamente solo. De hecho, he pasado bastante tiempo leyendo varios manuales de juegos de rol (Hero, DnD). Especialmente DnD fue útil, ya que opera en principios similares, pero en lugar de atributos que usa niveles para sus fórmulas, pueden ser a veces más complejos. De lo que presenté aquí.
En cualquier caso, el mejor consejo es: trate de mantenerlos lo más simple posible. No use ninguna matemática avanzada o ecuaciones largas, ya que son propensas a errores, que son difíciles de detectar, cuando tiene que lidiar con 87234 otras cosas al mismo tiempo.
fuente
Como otros han mencionado, la fórmula Final Fantasy X es bastante compleja. Generalmente para esa serie, cuanto más tarde el juego, más complicada es la fórmula. Probablemente sea más fácil basar tu fórmula de daño en otro juego completamente. Pero en general, creo que vale la pena discutir desde un nivel muy general qué tipo de fórmulas de daño puedes encontrar en el mundo y cómo puedes hacer un juego basado en ellas. Lo primero que debes decidir es cuánto daño quieres hacer al final del juego y qué tipo de estadísticas quieres que tenga el jugador. Una vez que tenga eso, puede elegir un sistema de fórmula y luego optimizar los valores de fórmula y arma para reflejar esos rangos a lo largo del tiempo.
Puramente basado en estadísticas
Esta es una buena idea si quieres que tus personajes sean flexibles en términos de qué niveles de enemigos pueden desafiar. Una fórmula como esta solo dependerá de las estadísticas del jugador, su equipo y las estadísticas de los enemigos. Estas fórmulas suelen ser bastante simples. Final Fantasy Legend II (Ver http://www.shenafu.com/ffl2/weapon.php, por ejemplo, tiene armas que hacen daño según la fórmula simple:
Una fórmula como esta es buena si desea un método muy simple para estimar el daño, o un punto de partida rápido para modificar el daño basado en otros factores como habilidades y debilidades elementales.
Para mostrar cuán amplio puede llegar a ser este tipo de fórmula, considere la fórmula de daño para Inflation RPG, un juego de Android e iOS (consulte http://inflation-rpg.wikia.com/wiki/Calculations ). La fórmula depende en gran medida de las estadísticas y del equipo. Cada pieza de equipo tiene dos estadísticas: una bonificación a la estadística ATK y un valor multiplicador. Algunos equipos tienen multiplicadores bajos, pero bonificaciones altas, otros tienen bonificaciones bajas pero multiplicadores altos. Para un personaje con solo 10 ATK, el Battle Axe con su 5000 ATK Bonus pero un multiplicador bajo del 145% es una gran opción. El daño total es
(10+5000)*1.45 = 7264
, pero el Estoc, con 0 bonus y un multiplicador del 300% es una mala elección, el daño sí lo es(10+0)*3 = 30
. Más adelante en el juego, un personaje con 5000 ataques preferiría cambiar de arma.Basado en estadísticas y niveles:
Un buen ejemplo de esto es Final Fantasy V, VI y Final Fantasy XII (ver http://www.gamefaqs.com/ps2/459841-final-fantasy-xii/faqs/45900 , por ejemplo). La fórmula para espadas en FFXII es:
y la fórmula de daño para pentagramas es:
Son muy similares, pero tenga en cuenta que la fórmula de la espada solo depende de la fuerza y el nivel, mientras que la fórmula del bastón depende de la fuerza, la magia y el nivel. La ventaja de este tipo de fórmula es que le permite al jugador dos vías de crecimiento: construir sus estadísticas o sus niveles. La desventaja es que también penaliza a los personajes en ambos sentidos. Lo que esto realmente termina haciendo es permitir que el jugador suba de nivel para aumentar su producción de daño (para FFXII, esto equivale a aumentar su producción de daño en ~ 4% por nivel alrededor del nivel 50 cuando se tienen en cuenta las ganancias de estadísticas) para ayudar a personalizar la dificultad a su nivel. nivel de comodidad.
Daño fijo:
Las fórmulas de daño fijo no dependen de las estadísticas o el nivel del personaje, sino de la fórmula de daño interno del arma. Todavía pueden variar en un rango, pero causan el mismo daño independientemente del usuario (salvo cualquier otro efecto especial o rasgo de personaje). Se usan mejor si el arma va a hacer daño fijo y la capacidad de equipar el arma depende de las estadísticas y / o el nivel. Diablo 2, por ejemplo, hace esto, al igual que muchos roguelikes que tienen armas que dependen de tiradas de dado. Dicho esto, 'daño fijo' no implica "no aleatorio", y de hecho, generalmente hay algún elemento de aleatoriedad en el daño causado.
Esta es una buena metodología si quieres tener armas que sean fáciles de transferir entre personajes o para controlar cuidadosamente el daño que pueden hacer los personajes en ciertos puntos del juego si sabes a qué equipo tienen acceso (a través de tablas de caída, cofres y robar mesas).
Otro lugar en el que te encontrarás es con ciertos tipos de equipos u objetos en Final Fantasy. 1000 agujas, por ejemplo, siempre inflige 1000 de daño. En Final Fantasy Legend II, las artes marciales infligen daño según la fórmula:
Final Fantasy XII también tiene un daño fijo para las armas, que inflige daño de acuerdo con la fórmula:
Aunque el daño es algo aleatorio, solo varía en un 26.5 por ciento sobre el rango total, por lo que se garantiza que hará un cierto nivel de daño en promedio con el tiempo. Estos tipos de ataques son útiles para los personajes que tienen estadísticas bajas y niveles bajos en los juegos que normalmente explican esos factores para infligir daño. Además, ignoran la defensa del objetivo (aunque la fórmula podría modificarse fácilmente para ajustarse en defensa si así lo desea).
fuente
Todos los juegos de la serie de fantasía final han tenido un límite de estadísticas de 255 debido al problema que estás encontrando. en el nivel 100 las estadísticas serían 255.
dices sobre aumentar las estadísticas con habilidades y equipos y recuerdo haber visto esto en los juegos, pero la forma en que se hace esto está en la fórmula. hay un paso adicional que verifica los modificadores de habilidad y equipo y los aplica después de que se hayan utilizado las estadísticas.
en su caso, sería el paso 21: aplicar modificadores de habilidad paso 22: aplicar modificadores de equipo paso23: daño final.
si estás interesado en google para las fórmulas de fantasía final, están disponibles. Tengo copias de la mecánica de batalla real, incluida la inteligencia artificial para Final Fantasy 4, 6, 7 y 9. La gente los descifró de los juegos originales cuando creaban roms para emuladores. No es tan difícil de encontrar si te fijas lo suficiente.
Lo más importante para crear fórmulas es probar. configura un script para ejecutar tu batalla con ai en ambos lados y ejecuta varios cientos de batallas. variar los monstruos y las estadísticas y ver si funciona o si lv 40 mata todo, es completamente posible que un jefe sea realmente imposible de matar jajaja. Un consejo sería desactivar todas las animaciones, ya que es impresionante lo rápido que la IA puede luchar cuando nadie está mirando.
fuente
Las 2 primeras cosas son:
Una vez que sepa eso, tiene suficiente información para usar las fórmulas matemáticas que BlueRaja mencionó en su respuesta . Solo recuerda que no existe una fórmula de daño 'adecuada', solo una que coincida con tu diseño para el tipo de experiencia que deseas que tengan tus jugadores.
fuente
alternativamente, si está buscando una fórmula muy simple, haga lo siguiente:
(Tenga en cuenta que esta es mi idea para una fórmula)
Primero, para una fórmula de ataque simple, solo necesitarás algunas estadísticas. La estadística de Ataque del jugador (esto podría ser Fuerza o Magia, dependiendo del tipo de movimiento).
Luego, cree una variable, llamada MovePower. Esto dependerá del movimiento, y mejores movimientos tendrían un mejor MovePower. Para mi fórmula, los comandos generales de "Ataque" tienen un MovePower de 5.
Luego, convierta la defensa en una estadística basada en porcentajes (y, por supuesto, haga que sea imposible alcanzar el 100% de defensa contra el daño)
Luego, durante la fase de ataque, ¡simplemente multiplique la estadística de ataque por el poder de movimiento y elimine el daño según la defensa de los enemigos! ¡sencillo!
También puede optar por tener otros modificadores, como si el movimiento golpeará (Precisión), si el movimiento tiene otro efecto adicional (Bio, infligir veneno,) y optar por que golpee, (Precisión nuevamente) tenga daño para mejorar / degradar movimientos que cambian las estadísticas, etc. ¡Diviértete con eso!
fuente
En esencia, necesitas descubrir dos cosas.
1
Puede usar
double
un usuario o una gran biblioteca de números. Hacer cálculos con números grandes (como en los juegos de clic / inactivo a menudo se basa en bibliotecas de números tan grandes). En su caso, los números son relativamente pequeños, por lo que el uso de punto flotante de 64 bits permitirá la flexibilidad necesaria.2
¿Cómo quieres que se comporte el juego? algunos ejemplos:
ATK
para decidir si golpeas o no y lanzas un dado con un índice de daño conocido dependiendo del arma: por ejemplo, espada larga 1d8, espada de dos manos 1d10, daga 1d4. Esto no escalará increíblemente bien si el HP puede crecer una y otra vez. Si usasATK
para determinar si los personajes golpean o fallan, puedes hacer otro lanzamiento después de un golpe exitoso conATK
* 80% para determinar los crits.(ATK - DEF) +/- 20%
como se hace en World's End (un juego de estrategia RPG). Esto significará que los ataques contra un oponente con fuerzaDEF
no podrían causar ningún daño. Para instaceATK = 10
,ENEMY DEF = 12
,(ATK - DEF) = -2
y también significa que el ataque de alta definición vs ligeramente inferior, no podía hacer mucho daño, ya que podría hacer batallas con el aumento de HP. Por ejemploATK = 1010
, con ,ENEMY DEF = 1005
el daño sería 5. El daño también aumentará dramáticamente ahora siATK
se incrementa en un pequeño porcentaje. Por ejemploATK = 1055
, hará un 900% más de daño con solo un aumento del 5% en elATK
valor.ATK / DEF * WEAPON_DAMAGE
Esto se escalará más gradualmente cuando aumenteATK
oDEF
más y permita que un atacante débil dañe a una criatura con fuerzaDEF
.tl; dr Debes tratar tus números de manera responsable y descubrir cómo quieres que se comporte el juego en diferentes situaciones. Algunas preguntas para hacerte a ti mismo:
x
batalla? ¿Debería ser inútil, ganar debería sery%
menos / más probable?fuente