User Tools

Site Tools


es:rpd:attack_skill_mechanic

Mecánica de Habilidad de Ataque

La Habilidad de Ataque es una mecánica de combate principal en Remixed Dungeon que determina la probabilidad de acertar exitosamente un ataque a un enemigo.

Fórmula de Habilidad de Ataque

La habilidad de ataque se calcula en el archivo Char.java como parte del 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 ocultar errores en 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 con factor %2.2f, habilidad resultante %d", getEntityKind(), target.getEntityKind(), skillFactor, aSkill);
 
    return aSkill;
}

Componentes de la Habilidad de Ataque

Habilidad de Ataque Base

  • Definición: El valor base de habilidad de ataque del personaje
  • Almacenamiento: Campo baseAttackSkill en la clase Char
  • Ejemplos:
    • Rata: 8
    • Guerrero: 10 (en la clase Heroe)
    • Ladrón: 12
    • Goo: 11
    • Rey: 32
    • Corazón de Yog: 26
  • Función: Proporciona el valor de ataque fundamental antes de modificadores

Bonificación de Nivel

  • Fórmula: baseAttackSkill + lvl()
  • Efecto: Cada nivel aumenta la habilidad de ataque en 1 punto
  • Implementación: baseAttackSkill + lvl() en el cálculo

Bonificaciones de Buff

  • Mecanismo: Cada buff con attackSkillBonus aumenta la habilidad
  • Fórmula: Los bonos se suman y aplican como modificador exponencial a la precisión: Math.pow(1.4, bonus)
  • Ejemplos:

Factores de Precisión

  • Precisión de Armas: getActiveWeapon().accuracyFactor(this) y getSecondaryWeapon().accuracyFactor(this)
  • Cálculo: Se utiliza el mínimo de ambos factores de precisión de armas, limitado a 20.0
  • Ejemplos:

Penalización a Distancia

  • Condición: Al usar un arma a distancia en combate cuerpo a cuerpo (distancia = 1)
  • Efecto: La precisión se reduce a la mitad (multiplicador 0.5f)
  • Propósito: Desincentiva el uso de armas a distancia a corta distancia

Comparación de Defensa

  • Uso: La habilidad de ataque se compara con la habilidad de defensa del objetivo para determinar la probabilidad de impacto
  • Implementación: En CharUtils.java, Random.Float(attacker.attackSkill(defender)) > Random.Float(defender.defenseSkill(attacker))

Mejora de Habilidad de Ataque del Héroe

La clase Héroe tiene un cálculo especial de habilidad de ataque que puede ser mejorado por configuración de dificultad:

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

Habilidad de Ataque en Combate

  • Probabilidad de Impacto: La habilidad de ataque del atacante se compara con la habilidad de defensa del defensor
  • Cálculo: Random.Float(attacker.attackSkill(defender)) > Random.Float(defender.defenseSkill(attacker))
  • Resultado: Si es verdadero, el ataque impacta; si es falso, el ataque falla

Referencia de Código

Relacionado

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