Me imagino cuáles son las posibilidades de "golpe garantizado" y "señorita garantizada" (es decir, las posibilidades de que un gatito golpee a un dragón y un dragón pierda a un gatito). Almacene su resultado aleatorio, y antes de aplicar diferencias de poder, marque un golpe si está dentro de esos límites. Eso evitará el problema del 100% de probabilidad de acierto / error ... aunque hay otra opción para proporcionar siempre la posibilidad de un golpe, que se detalla a continuación.
D&D es un sistema "plano", donde la probabilidad se distribuye uniformemente entre los posibles resultados de la tirada. Otros sistemas usan una distribución más curva, que generalmente se logra tirando varios dados y agregándolos. Es bastante fácil crear una curva como esta (me viene a la mente rand () + rand ()) / 2).
Otra posibilidad es "explotar dados". En sistemas como Shadowrun y Savage Worlds, tirar el máximo resultado posible del dado te permite volver a tirar ese dado y agregar el nuevo resultado. En su juego, probaría para ver si su resultado aleatorio estaba por encima de un cierto umbral y, de ser así, volvería a tirar. Si dejas que los dados exploten indefinidamente, incluso el duende más humilde tiene la oportunidad de golpear a un dios, y no necesitas una mecánica explícita de "golpe garantizado".
Por lo tanto, un enfoque posible con un lanzamiento curvo, la posibilidad garantizada de fallar y la explosión de dados sería algo como:
function getRoll():Number
{
var result:Number = (rand() + rand()) * 3; //Curved result from 0 to 6
if(result > 5.75) result += getRoll(); //Explode over a certain threshold, recursively
return result;
}
function attackHits():Boolean
{
var roll:Number = getRoll();
if(roll < 0.25) return false; //Guaranteed chance of miss
else return ((player.dex - enemy.dex) + (player.speed - enemy.speed) +
(player.luck - enemy.luck) + roll) >= 10; //Your original test.
}
Por supuesto, eso no ha sido probado ni equilibrado; querrás ajustar todos esos números mágicos hasta que se sientan bien.
En cuanto a copiar las reglas textualmente, hay problemas legales y éticos con eso. Sin embargo, estás bien inspirándote en D&D y otros juegos de mesa; así es como todos fueron diseñados en primer lugar. Tampoco es necesario que le muestres al jugador exactamente cómo funcionan las reglas, y puedes encontrar que usar una curva de dados de punto flotante suave te da una mejor sensación que restringirte a las restricciones enteras de los dados físicos.
Supongo que esta es una pregunta de equilibrio del juego y no una pregunta de codificación, y hay muchas maneras de manejar esto. Desde su algoritmo existente, sospecho que lo está haciendo más complicado de lo que tiene que ser (tres atributos Y un número aleatorio crean un sistema extremadamente turbio desde la perspectiva del jugador). ¡Mi primer instinto es simplificar!
Favorezca los atributos que hacen múltiples cosas, en lugar de los resultados que están determinados por múltiples atributos. DEX funciona bien como el determinante principal de la probabilidad de golpear; La adición de todo lo demás solo sirve para dificultar el equilibrio. Piénselo de esta manera: el daño esperado de un jugador en cada golpe es su% de golpe multiplicado por su daño promedio cuando golpea. ¿Cómo planea calcular un% de golpe "esperado" o "típico" con tantas variables?
Veo otro problema, que es que su fórmula no escala, y esto es probablemente lo que está experimentando. Suponiendo que DEX, LUCK y SPEED tienden a aumentar en el transcurso del juego, las diferencias entre jugador y monstruo en esas estadísticas también tenderán a aumentar. Solo como ejemplo, si el DEX de inicio de juego de un jugador está en el rango de 4 a 6 y también lo son los monstruos, ese es un modificador de 10-20% para golpear. Si el rango es más como 10 a 20 en etapas posteriores del juego, eso es hasta un modificador de 100%.
Una forma de arreglar eso es mantener las estadísticas fijas. Los rangos de jugador y monstruo son los mismos en todo el juego, y obtener algo así como +1 DEX es algo enorme, extremadamente raro y tratado como tal (si es que existe). Entonces su fórmula funcionará bien para todo el juego, y verá un jugador con aproximadamente la misma probabilidad de golpear en todo momento.
Otra forma es cambiar ese "10" codificado para escalar con el nivel, por lo que tal vez sea "10 + nivel de monstruo" o "10 + nivel de mazmorra" o algo así, lo que provoca un ligero aumento en la dificultad a medida que el juego avanza a menos que el jugador suba de nivel sus estadísticas en consecuencia.
Una tercera forma, como han dicho otros, es establecer límites máximos en el% de golpe más alto y más bajo aceptable, y simplemente decir "si el valor calculado es menor que X, use X en su lugar".
En aras de la exhaustividad, señalaré que no hay una ley absoluta que DEBE incluir una tirada para golpear en primer lugar. Tomar una acción en un juego que no es efectivo no es particularmente divertido, y realmente no aumenta la experiencia, excepto en casos excepcionales. Una alternativa es dejar que los jugadores SIEMPRE golpeen, y simplemente meterse con el rango de daño para que a veces causen mucho menos daño que otros. Recuerde que los sistemas complejos son más divertidos para el diseñador que para el jugador.
fuente
Es posible que desee agregar golpes críticos (generalmente no puede fallar, daño adicional) y fallas críticas (posibilidad plana de fallar sin importar qué, posiblemente aturde al jugador).
fuente
Muchos juegos usan un cambio del cinco por ciento de un golpe independientemente de todos los factores además de la fórmula de golpe normal.
fuente