User Tools

Site Tools


pt:rpd:attack_skill_mechanic

Mecânica de Habilidade de Ataque

A Habilidade de Ataque é uma mecânica de combate fundamental no Remixed Dungeon que determina a chance de acertar com sucesso um ataque a um inimigo.

Fórmula da Habilidade de Ataque

A habilidade de ataque é calculada no arquivo Char.java como parte do método attackSkill:

public int attackSkill(Char target) {
 
    int[] bf = {0};
    forEachBuff(b -> bf[0] += b.attackSkillBonus(this));
 
    int bonus = bf[0];
 
    float accuracy = (float) Math.pow(1.4, bonus);
 
    if (target == null) { // Principalmente para mascarar bug no Remixed RPG
        target = CharsList.DUMMY;
    }
 
    if (rangedWeapon.valid() && level().distance(getPos(), target.getPos()) == 1) {
        accuracy *= 0.5f;
    }
 
    float mainAccuracyFactor = getActiveWeapon().accuracyFactor(this);
    float secondaryAccuracyFactor = getSecondaryWeapon().accuracyFactor(this);
 
    float skillFactor = Utils.min(20f, mainAccuracyFactor, secondaryAccuracyFactor);
 
    int aSkill = (int) ((baseAttackSkill + lvl()) * accuracy * skillFactor);
 
    GLog.debug("%s atacando %s com fator %2.2f, habilidade resultante %d", getEntityKind(), target.getEntityKind(), skillFactor, aSkill);
 
    return aSkill;
}

Componentes da Habilidade de Ataque

Habilidade de Ataque Base

  • Definição: O valor base da habilidade de ataque do personagem
  • Armazenamento: Campo baseAttackSkill na classe Char
  • Exemplos:
    • Rato: 8
    • Guerreiro: 10 (na classe Herói)
    • Ladrão: 12
    • Goo: 11
    • Rei: 32
    • Coração de Yog: 26
  • Função: Fornece o valor de ataque fundamental antes dos modificadores

Bônus de Nível

  • Fórmula: baseAttackSkill + lvl()
  • Efeito: Cada nível aumenta a habilidade de ataque em 1 ponto
  • Implementação: baseAttackSkill + lvl() no cálculo

Bônus de Buffs

  • Mecanismo: Cada buff com attackSkillBonus aumenta a habilidade
  • Fórmula: Bônus são somados e aplicados como modificador exponencial à precisão: Math.pow(1.4, bonus)
  • Exemplos:

Fatores de Precisão

  • Precisão de Armas: getActiveWeapon().accuracyFactor(this) e getSecondaryWeapon().accuracyFactor(this)
  • Cálculo: O menor dos dois fatores de precisão de armas é usado, limitado a 20.0
  • Exemplos:

Penalidade à Distância

  • Condição: Quando se usa uma arma à distância em alcance corpo a corpo (distância = 1)
  • Efeito: A precisão é reduzida pela metade (multiplicador 0.5f)
  • Propósito: Desencoraja o uso de armas à distância em alcance curto

Comparação de Defesa

  • Uso: A habilidade de ataque é comparada com a habilidade de defesa do alvo para determinar a probabilidade de acerto
  • Implementação: Em CharUtils.java, Random.Float(attacker.attackSkill(defender)) > Random.Float(defender.defenseSkill(attacker))

Melhoria da Habilidade de Ataque do Herói

A classe Herói tem um cálculo especial de habilidade de ataque que pode ser aprimorado pela configuração de dificuldade:

// Em Hero.java
public int attackSkill(Char target) {
    float attackSkillFactor = 1;
 
    if (getDifficulty() == 0) {
        attackSkillFactor *= 1.2;
    }
 
    return (int) (super.attackSkill(target) * attackSkillFactor);
}

Habilidade de Ataque em Combate

  • Chance de Acerto: A habilidade de ataque do atacante é comparada com a habilidade de defesa do defensor
  • Cálculo: Random.Float(attacker.attackSkill(defender)) > Random.Float(defender.defenseSkill(attacker))
  • Resultado: Se verdadeiro, o ataque acerta; se falso, o ataque erra

Referência de Código

Relacionado

pt/rpd/attack_skill_mechanic.txt · Last modified: by 127.0.0.1