O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Combate de RPGs - Formula de danos, escala númerica, evolução ao longo do jogo

Iniciado por Ellye, 12/11/2015 às 12:07

Uma coisa que sempre me incomoda quando reparo em jogos de RPG Maker: jogos que usam a formula padrão de dano para ataques e magias. Ao menos desde o VXA é extremamente fácil alterar isso (direto no Database), então não vejo motivo para utiliza-la fora preguiça e falta de ideias, pois é uma formula terrível.

Vamos analisar: a formula padrão de dano no RPG Maker é:
4*a.atk-2*b.def
Essa mesma formula poderia também ser expressada da seguinte forma, que ressalta mais ainda o quão básica ela é:
4*(a.atk - b.def/2)


É uma formula que usa diretamente de subtração para fazer o papel da defesa, levando a um leque de problemas no jogo. O mais notável desse problema é que os dois valores passam a "depender" um do outro no balanço do jogo. Ao criar os atributos de um inimigo, os valores de ATK e DEF devem ser necessariamente mesurados contra os valores de ATK e DEF dos personagens no level que vão encontrar ele, com os atributos que vão encontrar ele....

No fim das contas, são só dois números que sobem junto no decorrer do jogo, sem muito significado real. Porque você não pode criar um personagem que notavelmente tenha DEF maior do que o normal.... caso contrário ele vira simplesmente imortal, levando por vezes literalmente zero de dano de ataques. Da mesma maneira, você não pode criar personagens praticamente sem DEF, ou o dano que eles levariam de inimigos com ATK alto seria tão absurdo a ponto de parecer bug. Não há muito espaço para balanceamento com uma formula dessas.

Outro problema dela é que a redução linear absoluta de dano por ponto de DEF (cada ponto de DEF remove exatamente 2 pontos do dano final, sempre) resulta em uma curva de HP Efetivo muito desbalanceada em que os primeiros pontos de DEF são basicamente inúteis, mas quanto mais DEF você já tem, mais DEF compensa acumular. Por exemplo:

Se um ataque está lhe causando 1000 de dano, aumentar sua DEF em 10 irá reduzir o dano desse ataque para 980. Uma redução de 2% no dano recebido.
Se um ataque está lhe causando 500 de dano, aumentar sua DEF em 10 pontos irá reduzir o dano desse ataque para 480. Uma redução de 4% no dano recebido.
Se um ataque está lhe causando 480 de dano, aumentar sua DEF em 10 pontos irá reduzir o dano desse ataque para 460. Uma redução de 4,17% no dano recebido.
Se um ataque está lhe causando 60 de dano, aumentar sua DEF em 10 pontos irá reduzir o dano desse ataque para 40. Uma redução de 33,3% no dano recebido.
Se um ataque está lhe causando 40 de dano, aumentar sua DEF em 10 pontos irá reduzir o dano desse ataque para 20. Uma redução de 50% no dano recebido.
Se um ataque está lhe causando 20 de dano, aumentar sua DEF em 10 pontos irá reduzir o dano desse ataque para 0. Uma redução de 100% no dano recebido.

Notem com o mesmo aumento de 20 de DEF tem efeitos proporcionais completamente variáveis de acordo com a quantidade de dano que você está sofrendo atualmente. Como quanto mais DEF você tem, menos dano você sofre.... quanto mais DEF você tem, mais útil cada ponto de DEF passa a ser. Mais notável é o salto de como a importância de cada ponto além do próximo, relativo ao anterior, começa a crescer exponencialmente.




Ok, até agora falei mal da formula padrão do RPG Maker. Mas que tipo de formula eu prefiro, então? Prefiro formulas que aplicam como uma redução percentual que resulte em um aumento linear do HP efetivo, de maneira totalmente independente do ataque. A versão mais elegante de uma formula assim, até agora, encontrei em League of Legends, e a uso em diversos lugares:
a.atk / (1+b.def/100)


O que essa formula significa? Significa que um personagem com 0 de DEF irá levar dano exatamente igual ao atk do agressor (atk/1). Cada ponto de def além do primeiro irá aumentar o divisor em 0,01. Resultado:

Um personagem com 0 DEF recebe 100% do dano de um ataque.
Um personagem com 100 DEF recebe 50% do dano de um ataque.
Um personagem com 200 DEF recebe 33,3% do dano de um ataque.
Um personagem com 300 DEF recebe 25% do dano de um ataque.
Um personagem com 400 DEF recebe 20% do dano de um ataque.
Etc.

Em primeira olhada, isso pode parecer que torna cada ponto de DEF menos eficiente que o ponto anterior. A redução está sendo "menor" a cada centena ali em cima. Mas se formos analisar de forma relativa:

Um personagem com 0 DEF precisa sofrer ataques com dano base total igual a 100% do HP dele para morrer.
Um personagem com 100 DEF precisa sofrer ataques com dano base total igual a 200% do HP dele para morrer.
Um personagem com 200 DEF precisa sofrer ataques com dano base total igual a 300% do HP dele para morrer.
Um personagem com 300 DEF precisa sofrer ataques com dano base total igual a 400% do HP dele para morrer.
Um personagem com 400 DEF precisa sofrer ataques com dano base total igual a 500% do HP dele para morrer.
Etc.

Cada ponto de DEF aumenta seu HP Efetivo em exatamente 1% do valor base, sempre, não importa quantos pontos o personagem já tinha antes.

Um ponto forte desse sistema é que ele funciona completamente independente dos valores de ATK. Você pode ter valores de ATK girando em torno de 40~ enquanto tem valores de DEF variando de 0 até 500, e tudo ainda funciona. Ao criar um monstro, você já tem noção exata de quanto de dano ele irá causar. Os personagens frágeis da sua party podem ser verdadeiramente frágeis, tendo DEF baixa o jogo todo. Os personagens resistentes da party podem ser verdadeiramente resistentes, já começando com valores de DEF alto e mantendo-os. DEF não precisa ser só um número que acompanha o de ATK, pode ser algo a parte.

Primeiro argumento que alguém poderia observar contra esse sistema: "não é só o mesmo que aumentar o HP diretamente, em %?"
É um bom argumento, porque se um jogo usasse esse sistema de forma extremamente crua, isso seria verdade.
Mas o fato de já termos a divisão entre defesa física e defesa mágica já faz com que a dinâmica de DEF (e MDF) seja diferente de simplesmente aumentar o HP diretamente. Ter DEF alta aumentaria seu HP Efetivo contra ataques físicos, mas não contra mágicos, ou seja: diferente de simplesmente aumentar o HP diretamente.
Além disso, a forma como DEF interage com curas (basicamente fazendo com que cada ponto de vida curado seja mais "efetivo" que o normal, já que perdê-los é mais difícil), e o fato de ataques poderem ter penetrações de defesa, adicionam mais nuâncias.




Bem, motivo de expor minha opinião sobre formulas de dano (usando um ataque básico como exemplo) foi para iniciar uma conversa sobre o assunto. É algo que me surpreendo ao notar que pessoas desenvolvendo RPGs (as vezes até mesmo comercialmente) não dão muita importância. Considero de longe um dos aspectos mais importantes para o jogo, então acho que é algo que vale a pena ser conversado sobre.

Essa conspiração toda e eu aqui usando a.atk - b.def  :derp:

Nunca passou pela minha cabeça utilizar a proposta de LoL, é realmente um cálculo inteligente
e, ao contrário do padrão do maker e de muitos outros, as coisas não crescem exponencialmente,
tipo, que causa dano vai causar cada vez mais dano e quem é resistente vai ficar cada vez mais
resistente. Entretanto LoL utiliza dos itens também para dinamizar isso um pouco, como
penetração e life steal para os atacantes e lentidão e retorno de dano para os defendentes,
que claro, só torna a troca de dano mais interessante ainda.
Seria uma boa mesmo mais gente investir tempo observando isso, pois é algo comum eu me
enjoar em rpgs por as batalhas resumirem em mudar de tela e eu apertar ok sucessivamente
porque as criaturas morrem com uma única investida.

Eu, como uso valores bem mais baixos que o comum (HP=40, Atk=12, etc) ainda gosto de
utilizar minha humilde subtração com um bônus mínimo pra randomizar um pouco o dano.
Mas eu concordo contigo no ponto em que imaginar em que level o personagem vai enfrentar
x criatura é realmente um saco kk

Citação de: King Gerar online 12/11/2015 às 13:48Eu, como uso valores bem mais baixos que o comum (HP=40, Atk=12, etc) ainda gosto de
utilizar minha humilde subtração com um bônus mínimo pra randomizar um pouco o dano.
Mas eu concordo contigo no ponto em que imaginar em que level o personagem vai enfrentar
x criatura é realmente um saco kk
Formulas que envolvem porcentagem realmente funcionam melhor com números que não sejam tão baixos (mas também não necessita que sejam obrigatoriamente muito altos), ou a menos podendo trabalhar com números decimais por trás das cortinas (citando novamente o LoL como exemplo, tudo que o player vê são valores inteiros, mas a engine trabalha com números decimais até para HP atual - se bem que o lol nem precisaria tanto disso, já que os números lá já são grandes mesmo).

Eu sempre mechi nesse negócio do Cálculo, é fácil, o problema é conseguir achar um BOM cálculo que esteja de acordo com as necessidades do Inimigos e das Classes, essa sempre foi a parte mais complicada dos Cálculos, fazer algo que deixe o jogo com uma Boa dificuldade, algo balanceado, esses cálculos são a definição disso, valeu por postar  :XD:

That's All~

Primeiramente, parabéns pelo texto, ficou muito bem escrito.
E ta ai,um assunto que raramente vejo alguém falar, mas que é um grande problema em vários jogos por ai.
Se tem uma coisa  no meu jogo, que to com preguiça de fazer, por que vai ser chato e trabalhoso é balancear as formulas.

Mas então, gostei muito da forma da qual você abordou o tema.


Ellyie, meus sinceros parabéns pela iniciativa de criar o tópico para abordar um assunto tão cabal no que tange o desenvolvimento mecânico de um RPG, quanto no texto, bem elaborado e embasado.

Venho contribuir humildemente com a fórmula base que tenho usado no meu projeto, que é a seguinte:

Dano = XX * (a.atk/b.def)

Onde XX é o "dano base" da habilidade usada.

Dessa maneira, ao invés de uma oscilação direta e subtrativa (ou seja, em que a interação Ataque X Defesa infere somente em reduzir o dano), a oscilação é indireta (um valor base é que é alterado, e não necessariamente o atributo) e multiplicativa (a interação Ataque X Defesa pode elevar o dano base).

Essa fórmula base tem se mostrado bastante satisfatória para quesitos de balanceamento do jogo. Minha única dificuldade agora é bolar um sistema semelhante para magias de cura.
"A diferença entre um mestre e um aprendiz é que o mestre já falhou mais vezes que o aprendiz já tentou"

[user]PauloHPBender[/user] Obrigado pela contribuição, mas o tópico é de 2015. Seria mais interessante criar um novo, reabrindo outra discussão  :ok: