Problema
O jogador obtém 5 pontos por nível até o nível 80, com um máximo de 400. Existem 5 estatísticas a serem distribuídas e nenhum limite máximo para o quanto você pode adicionar a uma estatística.
- Força
- Resistência
- Inteligência
- Agilidade
- Sorte - Concede chance crítica e dano crítico
Eu gostaria de implementar uma equação de retorno decrescente em, digamos, Sorte. Por chance crítica, eu não desejo que o jogador consiga atingir 100% de chance crítica.
Haverá um limite ao qual atingirá quando o crescimento cada vez menor diminuir para 0 por ponto adicionado.
Exemplo: se a chance máxima crítica que eu quero que o jogador tenha seja de 40%, cada ponto na sorte aumentará a chance crítica cada vez menor, até que a chance crítica atinja cerca de 40%. Pelo qual 1 sorte dará uma quantia muito, muito minúscula.
Alguma solução? Obrigado e sua ajuda é muito apreciada!
Respostas:
Você quer começar com uma função assintótica. Ou seja, um que começa em um número
a
e se aproxima de outro númerob
, mas nunca chega a alcançá-lo. Provavelmente será mais fácil sea = 0
eb = 1
. Você pega essa equação, insere o número de pontos de estatística (pontos de sorte) que o personagem possui e obtém o valor real de estatística (Chance Crítica) como a saída.Um exemplo muito simples é
y = x / (x + n)
onden
está uma constante positiva. Aquix
está sua entrada, onde você alimenta o número de pontos estatísticos ey
é sua saída, onde obtém o valor final.Para
n = 5
verificar como é:Quando você se alimenta,
x = 0
você chegay = 0
, mas não importa o tamanho quex
você coloca,y
nunca chega a 1. Perfeito.Agora, você pode sintonizar isso com o desejo do seu coração. Você pode multiplicar por um fator de escala para definir o 'limite' para o que quiser.
y = a * x / (x + 5)
. Se você deseja que o limite seja de 40%, multiplique por 0,4.y = .4 * x / (x + n)
. Agora, quando você se alimentarx
,y
aumentará, mas nunca alcançará 0,4.Ajuste
n
para definir o quão rápido ou lento a equação aumenta.n = 100
vai aumentar muito mais devagar quen = 5
:Você pode resolver essa equação
n
se souber que deseja o valor de estatística que deseja atingir em um número específico de pontos de estatística. Digamos que o personagem tenha 35% de chance de crítico em 100 pontos de sorte. Resolução.35 = .4 * 100 / (100 + n)
den
rendimentosn = 14.29
.Esses números também não precisam ser constantes brutas. Talvez outras estatísticas entrem no cálculo dos valores de
n
. Talvez alguns personagens tenham caracteres diferentesn
, de modo que eles se adaptem melhor ao seu status 'preferido'.Se você deseja uma curva com formato diferente ou mais complexo, existem muitos outros exemplos de funções assintóticas que você também pode usar. Vou deixar você explorar isso como quiser.
fonte
P = x/(x+n)
é a probabilidade, dada uma bolsa com n pedras negras ex pedras brancas, que você desenhe uma pedra branca para fora da bolsa cega. Uma abordagem que você pode fazer é definir os critérios X = sua sorte e N = a sorte deles. Sua chance de crit é de 50% se você tiver a mesma sorte que seu inimigo. Se você deseja que a chance de base seja 10%, então X = sua sorte, N = 9x a sorte deles.Uma boa base seria uma função
arctan
, pois passa pela origem e exibe uma assíntota horizontal.Dimensione-o por
40 / (pi/2)
ou80/pi
para o limite desejado. Em seguida, transformeluck
para obter a inclinação da curva desejada.fonte
Eu realmente gosto da maneira como os jogos do Souls lidam com esse problema. Em vez de fazer com que cada estatística dê bônus com base em uma função contínua, como foi sugerido, ela oferece bônus em uma função linear por partes.
Não me lembro dos números exatos em cima da minha cabeça, mas as funções estão ao longo das linhas a seguir (cada estatística tem suas próprias constantes)
Este método oferece muitos benefícios para o designer e o player. O designer se beneficia, pois você pode ajustar o benefício exato por ponto em uma habilidade de maneira bastante trivial, e o jogador se beneficia por saber exatamente quanto benefício verá de nível para nível.
No caso de uma função contínua, alguns níveis podem oferecer um benefício que não é refletido nos números devido ao alias de medição. Claro que o último nível deu a você um aumento de 0,9 no bônus XYZ, mas como o valor real passou de 23,52 para 24,42, e você arredondou o número antes de exibi-lo, o jogador não percebe que algo mudou.
Da perspectiva do UX, eu definitivamente sugeriria uma função linear por partes. No entanto, o uso de uma função contínua pode ser mais fácil de ajustar posteriormente, pois os jogadores não estarão tão ligados às constantes redondas.
fonte
ceil
o valor do aumento antes da adição e permite apenas níveis de número inteiro. oufloor
então,x <= 0: x = 1
para evitar passar acidentalmente a tampa macia.Jan Dvorak aponta a função exponencial em um comentário. Eu vou explicar aqui.
Observe que as operações exponenciais (e trigonométricas) são consideravelmente mais caras em termos computacionais do que as operações de raiz quadrada, que são muito piores que a matemática básica, então você provavelmente estará melhor com a abordagem de Adam se fizer esses cálculos muitas vezes por segundo . Se você apenas calcula os valores quando o jogador nivela, troca de equipamento etc., a velocidade não é importante, então use o que lhe der a melhor curva.
Uma função exponencial é alguma base, B , a alguma potência, x ,
y=B^x
. Os matemáticos geralmente usam uma base de e , (~ = 2.718), mas não há razão para que você não possa usar 2 ou 10, se preferir.y=e^x
se parece com isso:Observe que o lado esquerdo está se movendo assintoticamente para 0. Portanto, podemos girar o eixo x fazendo
y=e^(
-x)
, mas ele ainda está descendo de 1 a 0 e queremos que ele suba. Para que possamos rodar no eixo y comy=
-e^(-x)
. Agora está subindo de -1 a 0. Podemos adicionar 1 para obtery=
1- e^(-x)
e está subindo de 0 a 1.A partir daqui, é apenas uma questão de dimensioná-lo vertical e horizontalmente. Podemos multiplicar a coisa toda por algum valor, vamos chamá-la de A , que define o limite assintótico. Então podemos multiplicar x por um valor de taxa de variação, k , para ajustar a rapidez com que ela se aproxima do limite.
Isso nos dá uma equação final de
y=A*(1 - e^(-k*x))
. Usando valores dek=0.012
eA=0.5
, podemos definir o limite para 50% e deixá-lo bem próximo desse limitex=400
.Agora, você pode fazer alguns ajustes nisso. Um ajuste que fiz foi mudar para
A=0.5041
, portanto, se arredondarmos para uma porcentagem com 2 casas decimais (como 32,23%), y (399) = 49,99% e y (400) = 50,00%. A partir de y (347), existem vários locais em que são necessários dois pontos para obter uma variação de 0,01%. Mas esse último ponto possível ainda oferece um benefício (quase) tangível e chega a 50%.Como alternativa, poderíamos ajustar o
k
valor para ter um efeito semelhante. Emk=0.02305
, o valor é arredondado para 49,99% emy=399
e 50,00% emy=400
. No entanto, isso tem o problema de que o gráfico é muito raso no final - são necessários 48 pontos para obter o último centésimo de por cento (dey(352)=49.99%
paray(399)=49.99%
atéy(400)=50.00%
) e a última chance de 1% de crítico leva 230 pontos (dey(170)=49.01%
paray(400)=50.00%
) o que provavelmente diminui demais os retornos.Se você quiser, poderá ajustar A e k, para diminuir para um limite um pouco mais alto a uma taxa mais lenta, para fornecer algo entre decaimento linear e exponencial. Fazendo
y=0.6*(1-e^(-0.00447*x))
, você acaba com isso:Observe que a curva continua além de 50%, mas como existe um limite rígido de 400 pontos, o jogador não pode passar por esse ponto (e se conseguirem passar por ele, ainda há um limite rígido de 60% de crítico). Com esta equação, você pode usar 1 casa decimal e ainda ver ganhos a cada 2 a 3 pontos, com uma marca final de
y(399)=49.9%
atéy(400)=50.0%
.Matematicamente, as equações anteriores podem parecer melhores, uma vez que estão se aproximando de 50%, mas pessoalmente acho que ganhos de 0,1% a cada par de pontos são melhores do que ganhos de 0,01%. Mesmo com
A=0.05041
ek=0.012
, são necessários 102 pontos para passar dey(298)=49.00%
paray(400)=50.00%
. 25% dos seus pontos gastos em 2% do seu crítico provavelmente estão diminuídos demais. A equação de 60% leva apenas 20 pontos para o último percentual (que ainda é 5 vezes maior que os 4 pontos necessários para o primeiro percentual).Com essas últimas equações, apenas as pluguei em uma planilha e ajustei manualmente os valores até que parecessem bons. Você teria que fazer algo semelhante se quisesse um limite diferente.
fonte
Para uma solução muito simples, que tal raiz quadrada x 2
A raiz quadrada de 400 (máximo possível) é 20, 20 * 2 = 40.
fonte
1/2
) e você não explica o razões pelas quais isso poderia ser útil.