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
fonte
Respostas:
Criar fórmulas como essa requer conhecimento de funções matemáticas elementares - o que você aprendeu nas aulas de Álgebra e Pré-cálculo.
Depois de dominar os itens, pergunte a si mesmo (substitua "valor" por "dano" ou "saúde" ou "velocidade" ou o que for) :
Em seguida, basta ajustá-lo (adicionar / multiplicar coisas, alterar o valor base etc.) até que pareça certo. Uma calculadora gráfica ajudará você a visualizar como as alterações nos parâmetros afetarão a função.
A propósito, os problemas que você está enfrentando devem-se a estouros de número inteiro .
Use tipos de variáveis grandes o suficiente para armazenar os números com os quais você está trabalhando. Os tamanhos diferem de acordo com a plataforma no C ++, mas o compilador do Visual Studio de
unsigned int
32 bits é de 32 bits, enquantounsigned __int64
(específico do MS) é de 64 bits. Considere também usar adouble
.Além disso, tente reorganizar suas operações para não encontrar números tão grandes em primeiro lugar (por exemplo, em vez de
MDef * MDef / 110
fazê-lo(int)((float)MDef / 110 * MDef)
) .fonte
__int64
sobreuint64_t
porquestdint.h
não está disponível no Visual Studio 2008 e abaixo, e eu não queria confundir o pobre rapaz mais do que ele já é.Esse é o seu verdadeiro problema: você definiu suas estatísticas antes de definir o que essas estatísticas realmente significam . Você está colocando o carrinho na frente do cavalo.
Veja como o D&D (mesa) funciona. "Força" não significa nada por si só; significa apenas algo porque existe uma regra que diz: "Adicione seu bônus de força ao seu ataque corpo a corpo". Essa regra faz parte das regras de combate da D&D. Sem as regras de combate, "Força" é geralmente uma quantidade sem sentido.
A primeira pergunta que você precisa se perguntar é: quanta diferenciação eu quero entre os personagens? Mais uma vez, observe D&D. Lá, eles têm 6 estatísticas básicas. Essas estatísticas definem diferentes dimensões do jogo para os personagens. Um personagem com alta destreza terá opções diferentes de um personagem com baixa destreza.
Mas a razão de toda essa diferença voltar às regras. Uma alta destreza significa bônus para ataques à distância; você pode acertar com mais frequência com ataques à distância. Então, apenas entre Força e Destreza, você tem duas dimensões de jogo: alcance vs. corpo a corpo.
Inteligência e Sabedoria também formam uma espécie de emparelhamento, mas elas interagem mais com classes específicas. Int faz Wizards e outros lançadores de magia arcanos serem melhores (ou possível sob alguns conjuntos de regras); a sabedoria é vital para os clérigos e outros lançadores de magia divinos. Como os feitiços divinos e arcanos têm listas de feitiços diferentes, essas duas estatísticas estão envolvidas em diferentes dimensões do jogo.
Você precisa definir as regras básicas em torno das estatísticas antes de poder definir funções de progressão de crescimento e similares. Você não precisa de detalhes; você não precisa dizer que "cada ponto de força é adicionado ao teste aleatório para determinar se um ataque corpo a corpo atinge". O que você precisa são meta-regras como "a destreza melhora os atacantes à distância". Você pode descobrir exatamente como isso os torna melhores posteriormente.
Existem diferentes maneiras de progredir os personagens. Um truque comum do Final Fantasy da velha escola era simplesmente usar o nível do personagem como parte de seus cálculos de dano. Isso pode ser simplesmente multiplicar o nível pela estatística apropriada, ou pode significar aplicar uma função ao nível do personagem. Digamos, uma progressão quadrática, para que a taxa de dano de um personagem aumente por nível.
Como você deseja que suas funções de combate funcionem, elas precisam levar em consideração a progressão. Suas funções precisam de ganchos para progressão.
D&D tem uma maneira engraçada de progressão. Faz parte da classe; toda vez que você sobe de nível, você obtém novos recursos de classe e um bônus fixo ao seu hit, com base na classe de personagem. No entanto, alguns recursos de classe melhoraram sozinhos. Feitiços em D&D teriam progressão embutida neles. Um feitiço pode causar 1d4 de dano por 2 níveis de um lançador de feitiços acima do primeiro. Portanto, todos os outros níveis de assistente tornam esse feitiço melhor.
O D&D também usou muito a progressão baseada em itens. Até a 4ª edição, a progressão baseada em itens era principalmente para personagens de luta, mas mesmo em edições mais antigas, os conjuradores tinham itens que lhes davam buffs de estatísticas ou outros ajustes (ou flat out lhes davam feitiços).
Portanto, os itens são outra coisa que suas funções de combate precisam levar em consideração. Os itens apenas aumentam uma ou mais estatísticas enquanto estão equipados ou também fazem outras coisas? D&D era um pouco estranho, pois as estatísticas raramente mudavam; As armas simplesmente causaram dano ao XdY, possivelmente com um bônus baseado em uma de suas estatísticas. E foi isso. Portanto, sua única maneira de causar mais dano na batalha era encontrar uma arma melhor. Em muitos RPGs de videogame, eles levam em consideração o nível, além de uma arma.
fonte
Suas fórmulas parecem bastante complicadas. Não tenho certeza de como os desenvolvedores profissionais de RPG lidam com isso, mas recomendo focar na simplicidade. Tente encontrar a fórmula mais simples possível, que ainda incorpore o intervalo de estatísticas que você deseja usar. Por exemplo, você poderia fazer com que as estatísticas se modificassem antes do cálculo do dano, em vez de modificar o dano durante o cálculo? Depois de ter uma fórmula em mente, eu tentaria representar graficamente uma ampla gama de valores possíveis para ver como ela se comportará à medida que os jogadores subirem de nível. Obviamente, quanto menos variáveis você tiver, mais viável será.
Além disso, o BlueRaja forneceu uma explicação importante sobre por que você pode estar vendo valores inesperados em níveis mais altos de estatísticas. O uso de tipos não assinados e a verificação de estouros serão importantes.
fonte
Eu tenho um problema com isso. Você deve criar seus chefes em torno do que você acha que seus jogadores devem ser capazes de lidar. Você está construindo seus jogadores e fórmula de combate em torno do que você quer que seus chefes sejam.
Depois de criar suas mecânicas e funções de combate, você pode decidir como deseja criar seus chefes, pois deve haver um bom equilíbrio entre o dano que os jogadores podem causar / absorver e o que o chefe pode lidar / absorver.
fonte
Esses números que você citou provavelmente derivam de apenas uma simulação, em milhares de execuções.
Então, você deve escrever uma simulação para criar um personagem de nível 20 e ver como ele se sai em 200 batalhas ou mais contra os tipos de inimigos que ele deveria estar lutando naquele momento. Faça isso novamente para um personagem de nível 30 (presumivelmente na próxima seção do mundo).
Vai demorar um pouco para acertar, mas escrever simulações automatizadas definitivamente tornará isso muito mais fácil do que apenas adivinhar e jogar manualmente.
fonte
Acho que você cometeu o erro de querer criar uma fórmula sem ter um design adequado em mente.
Primeiro comece com um design, depois comece a pensar em representar o design em fórmulas. Quanto mais claro seu design, mais fácil será encontrar fórmulas simples e / ou precisas.
Tente implementar "tipos" de inimigos, por exemplo "blindado" => um ataque de jogador se for do tipo físico reduzido em 50%. Não faça uma batalha fluir para abstrair, pense sobre o que é relevante e o que não é.
Se seu design diz que "inimigos blindados" são fracos contra magia, mas fortes contra dano físico, represente isso no código. Mas lembre-se de que você fez muitos testes, porque os valores não funcionarão magicamente na primeira vez que você escrever o código. Tente criar um design, coloque a lógica no código, sempre verifique se esta é a representação técnica do que você tinha em mente e se não muda os valores até que seja.
fonte
Embora meu design não tenha saído da fase de planilha, cheguei a uma conclusão sobre o design de matemática para RPG:
Mantenha-os o mais simples possível. No design em que estou trabalhando, usei fórmulas muito simplistas, adequadas ao sistema sem classe. Ou seja. Feitiço Bola de Fogo tem dano de 30. O forumal é:
Também podemos adicionar modificadores como este:
Portanto, o resultado final seria 45 de dano. Descobri que o uso de multiplicadores precentage é uma solução muito fácil e muito escalável para trabalhar. Em vez de vir com alguns números ímpares com matemática complexa para descobrir o resultado que queremos.
Agora podemos calcular a resistência do dano, que apenas calcula a defesa contra o tipo de dano definido. Existem duas abordagens e, sinceramente, ainda não decidi qual seria a melhor opção, mas ambas são simples e viáveis:
Portanto, o resultado final será de 22 danos (apenas cortei o resultado parcial).
Outra fórmula:
Então o resultado final será 23. Se acontecer que a resistência é maior que o dano recebido, o personagem simplesmente não recebe nenhum dano. É claro que cabe a você garantir que essa situação não tenha lugar, exceto quando você desejar.
Embora eu deva admitir que o dimensionamento do precentage é um pouco mais fácil de equilibrar e dimensionar. Mas isso também depende dos números de base. A escala de precedência funcionará melhor se você começar de 100 em diante. Se você estiver operando com números pequenos (qualquer coisa abaixo de 100, para ser honesto), pode ficar estranho, pois você começará a obter resultados de ponto flutuante, que será difícil de equilibrar e fará algo interessante com eles.
Provavelmente, a solução ideal nesse caso é usar as duas abordagens quando entenderem. Ou se você é fã de grandes números, comece a partir de 1000.
E nas extremidades finais. Não cheguei a essas conclusões completamente sozinho. Na verdade, passo bastante tempo lendo vários manuais de RPG (Hero, DnD). Especialmente, o DnD foi útil, pois opera com princípios semelhantes, mas, em vez de atributos que estão usando níveis para suas fórmulas, eles podem ser um pouco mais complexos. Do que o que apresentei aqui.
De qualquer forma, o melhor conselho é: tente mantê-los o mais simples possível. Não use matemática avançada ou equações longas, pois elas são propensas a erros, difíceis de detectar, quando você precisar lidar com 87234 outras coisas ao mesmo tempo.
fonte
Como outros já mencionaram, a fórmula Final Fantasy X é bastante complexa. Geralmente para essa série, quanto mais tarde o jogo, mais complicada é a fórmula. Provavelmente é mais fácil basear sua fórmula de dano em outro jogo completamente. Mas, em geral, acho que vale a pena discutir, de um nível muito geral, que tipo de fórmulas de dano você pode encontrar no mundo e como você pode criar um jogo baseado nelas. A primeira coisa que você precisa decidir é quanto dano você deseja causar no final do jogo e que tipo de estatísticas você deseja que o jogador possa ter? Depois disso, você pode escolher um sistema de fórmula e otimizar os valores da fórmula e da arma para refletir esses intervalos ao longo do tempo.
Puramente baseado em Stat
É uma boa idéia se você quer que seus personagens sejam flexíveis em termos de quais níveis de inimigos eles podem desafiar. Uma fórmula como essa dependerá apenas das estatísticas do jogador, de seus equipamentos e das estatísticas dos inimigos. Essas fórmulas geralmente são bastante simples. Final Fantasy Legend II (veja http://www.shenafu.com/ffl2/weapon.php, por exemplo, tem armas que causam danos com base na fórmula simples:
Uma fórmula como essa é boa se você deseja um método muito simples de estimar dano ou um ponto de partida rápido para modificar o dano com base em outros fatores, como habilidades e fraquezas elementares.
Para mostrar quão amplo esse tipo de fórmula pode realmente ser, considere a fórmula de dano para o RPG de inflação, um jogo para Android e IOS (consulte http://inflation-rpg.wikia.com/wiki/Calculations ). A fórmula depende fortemente do status e do equipamento. Cada peça de equipamento possui duas estatísticas - um bônus para a estatística ATK e um valor multiplicador. Algumas peças de equipamento possuem multiplicadores baixos, mas altos bônus, outras possuem bônus baixos, mas altos multiplicadores. Para um personagem com apenas 10 ATK, o Machado de Batalha com seu bônus de 5000 ATK, mas com um baixo multiplicador de 145%, é uma ótima opção. O dano total é
(10+5000)*1.45 = 7264
, mas o Estoc, com 0 bônus e um multiplicador de 300%, é uma má escolha - o dano é(10+0)*3 = 30
. Mais tarde no jogo, um personagem com 5.000 ataques preferiria trocar de arma.Baseado em estatísticas e níveis:
Um bom exemplo disso é Final Fantasy V, VI e Final Fantasy XII (consulte http://www.gamefaqs.com/ps2/459841-final-fantasy-xii/faqs/45900 , por exemplo). A fórmula para espadas em FFXII é:
e a fórmula de dano para pautas é:
Eles são muito parecidos, mas observe que a fórmula da espada depende apenas da força e do nível, enquanto a fórmula do bastão depende da força, da magia e do nível. A vantagem desse tipo de fórmula é que ela permite ao jogador duas vias de crescimento - construindo suas estatísticas ou construindo seus níveis. A desvantagem é que também penaliza os personagens nos dois sentidos. O que isso realmente acaba fazendo é permitir que o jogador suba de nível para aumentar sua produção de dano (para FFXII isso significa aumentar sua produção de dano em ~ 4% por nível em torno do nível 50 quando você leva em consideração os ganhos estatísticos) para ajudar a personalizar a dificuldade de seu dano. nível de conforto.
Dano fixo:
As fórmulas de dano fixo não dependem das estatísticas ou do nível do personagem, elas dependem apenas da fórmula de dano interno da própria arma. Eles ainda podem variar ao longo de um intervalo, mas causam o mesmo dano, independentemente do usuário (exceto quaisquer outros efeitos especiais ou traços de caráter). Eles são mais usados se a arma causar dano fixo e a capacidade de equipar a arma depende de estatísticas e / ou nível. Diablo 2, por exemplo, faz isso, assim como muitos roguelikes que possuem armas que dependem de jogadas de dados. Dito isto, 'dano fixo' não implica "não aleatório" - e, de fato, geralmente há algum elemento aleatório no dano causado.
Essa é uma boa metodologia se você deseja ter armas fáceis de transferir entre os personagens ou controlar cuidadosamente a saída de dano que os personagens em determinados pontos do jogo podem fazer se souber a que equipamento eles têm acesso (através de mesas de jogo, baús e roubar tabelas).
Outro lugar que você encontrará é com certos tipos de equipamentos ou itens no Final Fantasy. 1000 agulhas, por exemplo, sempre causam 1000 de dano. Em Final Fantasy Legend II, as artes marciais causam dano com base na fórmula:
Final Fantasy XII também corrigiu um pouco os danos das armas, causando dano de acordo com a fórmula:
Embora o dano seja um tanto aleatório, ele varia apenas 26,5% no intervalo total, então você garante um certo nível de dano em média ao longo do tempo. Esses tipos de ataques são úteis para personagens que possuem estatísticas baixas e níveis baixos em jogos que normalmente respondem por esses fatores ao causar dano. Além disso, eles ignoram a defesa do alvo (embora a fórmula possa ser facilmente reformulada para caber na defesa, se você desejar).
fonte
todos os jogos da série final fantasy tiveram um limite estatístico de 255 por causa do problema que você está enfrentando. no nível 100, as estatísticas seriam 255.
você diz sobre o aumento de estatísticas com habilidades e equipamentos e eu lembro de ter visto isso nos jogos, mas a maneira como isso é feito está na fórmula. há uma etapa extra que verifica se há modificadores de capacidade e equipamento e os aplica depois que as estatísticas foram usadas.
no seu caso, seria a etapa 21: aplicar modificadores de capacidade etapa 22: aplicar modificadores de equipamento etapa 23: dano final.
se você estiver interessado no google para obter fórmulas de final fantasy, elas estão disponíveis. Eu tenho cópias das mecânicas de batalha reais, incluindo IA para final fantasy 4, 6, 7 e 9. as pessoas os quebraram dos jogos originais quando estavam criando roms para emuladores. Não é tão difícil de encontrar se você olhar bastante o suficiente.
a maior coisa para criar fórmulas é testar. configure um script para executar sua batalha ai em ambos os lados e executar várias centenas de batalhas. varie os monstros e as estatísticas e veja se funciona ou se o lv 40 mata tudo, é perfeitamente possível que um chefe seja realmente impossível de matar lol. uma dica seria desativar todas as animações, pois é impressionante a rapidez com que as IA podem combater quando ninguém está assistindo.
fonte
As duas primeiras coisas são:
Depois que você souber disso, terá informações suficientes para usar as fórmulas matemáticas mencionadas pela BlueRaja em sua resposta . Lembre-se de que não existe uma fórmula de dano 'adequada' - apenas uma que corresponda ao seu design para o tipo de experiência que você deseja que seus jogadores tenham.
fonte
alternativamente, se você estiver procurando por uma fórmula muito simples, faça o seguinte:
(Observe que essa é minha ideia para uma fórmula)
Primeiro, para uma fórmula simples de ataque, você precisará apenas de algumas estatísticas. Estatística de Ataque do jogador (pode ser Força ou Magia, dependendo do tipo de movimento).
Em seguida, crie uma variável chamada MovePower. Isso dependerá da movimentação, e movimentos melhores teriam um MovePower melhor. Para as minhas fórmulas, os comandos gerais de "Ataque" têm um MovePower de 5.
Em seguida, torne a defesa uma estatística baseada em porcentagem (e, é claro, torne impossível obter 100% de defesa contra danos)
Então, durante a fase de ataque, simplesmente multiplique o status do ataque pelo poder de movimento e remova o dano com base na defesa dos inimigos! simples!
Você também pode optar por ter outros modificadores, como se o movimento for atingido (Precisão), se o movimento tiver outro efeito adicional (Biografia, infligindo veneno) e optar por que ele atinja (Precisão novamente), com dano / atualização / desatualização movimentos que mudam as estatísticas, etc. Divirta-se com isso!
fonte
Em essência, você precisa descobrir duas coisas.
1
Você pode usar um usuário
double
ou uma grande biblioteca de números. Fazer cálculos com grandes números (como em jogos de clicar / inativo geralmente depende de bibliotecas de números tão grandes). No seu caso, os números são relativamente pequenos, portanto, o uso do ponto flutuante de 64 bits permitirá a flexibilidade necessária.2
Como você quer que o jogo se comporte? alguns exemplos:
ATK
para decidir se você acerta ou não e rola um dado com uma taxa de dano conhecida, dependendo da arma: por exemplo, espada longa 1d8, espada de duas mãos 1d10, punhal 1d4. Isso não será incrivelmente bem se o hp puder crescer continuamente. Se você usaATK
para determinar se os personagens acertam ou erram, você pode fazer outro arremesso após um golpe bem-sucedido comATK
* 80% para determinar os crits.(ATK - DEF) +/- 20%
no World End (um jogo de estratégia de RPG). Isso significa que ataques contra um oponente com forçaDEF
não podem causar nenhum dano. Para instaceATK = 10
,ENEMY DEF = 12
,(ATK - DEF) = -2
e isso também significa que a alta ataque vs ligeiramente inferior def, pouco podia fazer dano, o que poderia tornar as batalhas mais com o aumento da HP. Por exemploATK = 1010
, com ,ENEMY DEF = 1005
o dano seria 5. O dano também aumentará dramaticamente agora se oATK
aumento for de uma pequena porcentagem. Por exemploATK = 1055
, causará 900% a mais de dano, com apenas um aumento de 5% noATK
valor.ATK / DEF * WEAPON_DAMAGE
Isso irá dimensionar de forma mais gradual quandoATK
ouDEF
são aumentados e permitir que um atacante fraco para danificar uma criatura com forteDEF
.Você precisa tratar seus números com responsabilidade e descobrir como deseja que o jogo se comporte em diferentes situações. Algumas perguntas a serem feitas:
x
batalha? Deveria ser impossível, ganhar deve sery%
menos / mais provável?fonte