Suporte ao desenvolvimento de jogos!


    Fórmulas de cálculo de danos

    Compartilhe
    avatar
    Valentine
    Administrador
    Administrador

    Medalhas :
    Mensagens : 4978
    Créditos : 1060

    Fórmulas de cálculo de danos

    Mensagem por Valentine em Ter Maio 15, 2018 11:58 am

    Fórmulas de cálculo de dano: Do básico ao avançado
    Inspiração e base no tutorial de Fomar0153 (em inglês) apresentado em seu blog: http://cobbtocs.co.uk/wp/?p=271
    Nível de dificuldade: Intermediário/avançado

    O Básico: A box de fórmula de cálculo de dano e suas principais funções
    Cada skill no Ace tem uma fórmula de Dano completamente customizável. Você pode atribuir um dano fixo a uma habilidade (simplesmente colocar um número na box do cálculo), ou utilizar variáveis. Essas variáveis podem estar em função do atacante, ou seja, quem está realizando a habilidade (tem o prefixo "a.") ou do receptor (tem o prefixo "b."). Você pode usar parâmetros como ataque, defesa, level e até uma variável do jogo (v[n], onde "n" é o número da variável.) para criar fórmulas impressionantes.
    Pode-se usar operações matemáticas na box também, por exemplo, adição (+), subtração (Glad, multiplicação (*), divisão (/) e potenciação (**) (Lembre-se que a radiciação é uma forma de potência e a raiz quadrada de quatro é igual a 4**0.5 ).

    Uma vantagem disso, por exemplo, é que vc pode criar skills que ignorem a defesa do receptor sem muito trabalho (é só não colocar o "b.def").

    Uma habilidade com a fórmula "a.atk * 4" vai simplesmente causar como dano o quádruplo do ataque de quem está realizando a skill, e não descontará a defesa do oponente. Isto é extremamente útil para habilidades de bosses e afins.

    Ou exemplo da maravilha que as fórmulas de dano podem fazer são as habilidades mágicas. Agora, no Ace, é muito mais fácil configurar habilidades mágicas, cujo dano se baseia somente no poder mágico do atacante e da defesa mágica do defensor. Uma habilidade com a fórmula "a.mat * 2 - b.mdf" causará como dano o dobro do ataque mágico do atacante, descontados da defesa mágica do defensor.

    Habilidades em função do Level também são possíveis agora. Isso é útil para um jogo com poucas habilidades, em que o maker não quer que estas fiquem "fora de uso" depois que o jogador passar vários níveis. Por exemplo, a fórmula "a.level * 4 + 50 - b.def * 2" não será afetada pelo quanto o jogador tem de ataque ou te ataque mágico, mas sim de Level.

    Algo importante a se lembrar é que variáveis de jogo podem ser utilizadas na fórmula de dano também. A fórmula "v[1] * 4 - (v[2] / 3)", por exemplo, depende inteiramente de variáveis, o que pode ser interessante para siquests ou qualquer minigame. Seria possível causar dano de acordo com o número de poções que o jogador possui, por exemplo, ou o número de pessoas na equipe, colocando esses valores em variáveis.

    Estes são apenas alguns exemplos mais básicos do que esta box pode fazer. Experimente criar habilidades em função de atributos mais inusitados, como agilidade, level, HP estante, número de NPCs com quem o jogador tenha falado (em uma variável) etc.

    O melhor mesmo é fazer testes e testes com variadas fórmulas de habilidades e ver qual é a melhor para o seu jogo!

    O avançado: Utilizando Ruby nas suas fórmulas de dano
    Muitos comandos Ruby podem ser utilizados na caixas de fórmula de dano. Devo avisar que o meu conhecimento de Ruby é limitado, e que bons scripters com certeza podem encontar outros métodos para se colocar na box de Fórmula de Cálculo de Dano.

    Enfim, aqui vamos nós:

    1. Como fazer uma habilidade de cura afetar mais um jogador do que o outro, ou não afetar certo jogador:

    Para isso, utilizaremos uma expressão do Ruby, uma forma compacta de se escrever condições, que é a seguinte: condition ? if_true : if_false.
    Na box, escreva: b.id == x ? F1 : F2

    Onde "x" será o id do herói que terá a fórmula de dano diferenciada, F1 será está fórmula e F2 a fórmula geral (para os outros jogadores).

    Exemplo 1: b.id == 3 ? (a.mat * 4) : (a.mat * 2 + 20)
    Quando o alvo desta habilidade for o personagem de id 3 na database, a fórmula será "a.mat * 4". Para todos os outros personagens, a fórmula será "a.mat * 2 + 20".

    Exemplo 2: (b.id == 3 or b.id == 4 or b.id == 5) ? 0 : (a.mat * 3 + 10)
    Quando os alvos desta habilidade forem os personagens de id 3, 4 ou 5, nada acontece. Para todos os outros, a fórmula será "a.mat * 2 + 20".

    Nota: De acordo com o Membro Twinsen (créditos a ele) este último exemplo pode ser reduzido a: "(3..5).include?(b.id) ? 0 : (a.mat * 3 + 10)", causando o mesmo efeito.


    2. Como fazer uma habilidade ser mais forte/mais fraca quando um certo personagem a usa:

    Isto na verdade é uma extensão da técnica acima, só que vamos usar "a." ao invés de "b."

    Exemplo: a.id == 5 ? (a.mat *3 + 20) : (a.mat * 2 + 20)

    Quando o personagem 5 estiver usando esta habilidade, a fórmula será "a.mat * 3 + 20". Para todos os outros, a fórmula será "a.mat * 2 + 20".


    3. Como fazer uma habilidade de cura mais forte quando um switch estiver on:

    Reconhecemos um switch por "$game_switches[n]", onde n é o número do switch. Vamos então acrescentá-lo a mesma expressão de condução utilizada acima:

    Exemplo: $game_switches[5] ? 500 : 300

    Quando o switch 5 estiver ligado, a habilidade curará 500. Se estiver off, curará 300.


    4. Como fazer uma habilidade ser mais forte quando uma certo tipo de arma estiver equipada:

    Vamos utilizar o método "atype_equipped?(x)", que checa se a arma de tipo x está equipada.

    Exemplo: a.atype_equipped?(9) ? (a.mat * 5) : (a.mat * 3 + 20)

    Se a arma equipada for do tipo 9, isto é, for um cajado, a fórmula será "a.mat * 5". Para todos os outros tipos de arma, a fórmula será "a.mat * 3 + 20"


    5. Como adicionar uma condição no personagem que usou a habilidade:

    Vamos utilizar o método "add_state(x)", onde x é o id da condição a se adicionar.

    Exemplo: a.atk * 3 + 15; a.add_state(5)
    Esta habilidade, após causar "a.atk + 15" de dano, deixa o personagem que a utilizou com o status 5 (confuso).


    6. Tenho uma personagem, por exemplo, uma princesa, que não luta, mas ao invés disso manda seus guardas atacarem. Com isso, suas habilidades não podem levar em conta o seu ataque, mas sim o do guarda. Como usar o ataque de outro personagem em uma habilidade?

    Mais fácil do que parece, é só acessarmos a id daquele personagem através de "$game_actors[n]", onde n é o id do personagem.

    Exemplo: $game_actors[7].atk + 20

    Esta habilidade usará sempre o ataque do personagem 7, independente de quem usá-la.


    7. Digamos que eu tenha um personagem que ataque usando duas moedas. Se saírem duas caras, o dano será F1. Se saírem duas coroas, o dano será F2. Se saírem resultados diferentes, o dano será F3.

    Este aqui é bem mais complexo. Vamos precisar nomear duas variáveis locais (pode usar qualquer letra, menos "a" e "b", por que estas já são usadas pelo maker), e elas terão que ser aleatórias, o que implica no método rand(x), além de condições else e elsif, então a estrutura que estávamos usando antes terá que ser abandonada.

    Vejamos como fica:

    c = rand(2); d = rand(2); if c == 0 and d == 0; F1; elsif c == 1 and d == 1; F2; else F3; end

    O método rand(2) vai chamar um número de 0 a 1 (que serão cara e coroa). Quando os dois valores forem 0 (cara), o dano será F1. Se os dois valores forem 1 (coroa), o dano será F2. Para outro resultado (0 e 1 ou 1 e 0), o dano será F3.

    Considerações finais
    Então, makers, eu Tinha esse tutorial sobre formulas de danos aqui pelo PC, eu encontrei na internet a muito tempo atras não sei quem é o autor se alguém souber só deixar ai nos comentários que eu dou um edit..


    A box de Fórmula de Dano só aguenta 99 caracteres. Se sua fórmula ultrapassar isto, tente apagar alguns espaços desnecessários ("b.id==1", ao invés de "b.id == 1"), ou tentar reformular e compactar seus métodos.

    Se sua fórmula tiver algum erro de interpretação de Ruby, o jogo não vai dar crash. Ao invés disso, a habilidade SEMPRE dará "Miss". Se isso acontecer com você, veja se vc esqueceu algum caractere, como um ";" ou algo parecido.

    Créditos:
    Moycanow


    _________________
    avatar
    Kincy
    Ocasional
    Ocasional

    Mensagens : 230
    Créditos : 13

    Ficha do personagem
    Nível: 1
    Vida:
    30/30  (30/30)
    Energia:
    0/0  (0/0)

    Re: Fórmulas de cálculo de danos

    Mensagem por Kincy em Ter Maio 15, 2018 1:42 pm

    Realmente é bastante avançado, teria que ter um grau de dedicação maior para dominar esse tutorial, algo novo para mim. Obrigado Marlos, mais um conteúdo para enriquecer a Aldeia.


    _________________
    Gostou? Clique aqui.

      Data/hora atual: Ter Out 23, 2018 11:01 am