Defense is a core combat mechanic in Remixed Dungeon that determines the chance to successfully evade incoming attacks.
The defense skill is calculated in the Char.java file as part of the defenseSkill method:
public int defenseSkill(Char enemy) { int defenseSkill = baseDefenseSkill + lvl(); final int[] bf = {0}; forEachBuff(b -> bf[0] += b.defenceSkillBonus(this)); int bonus = bf[0]; float evasion = (float) Math.pow(1.2, bonus); if (paralysed) { evasion /= 2; } int aEnc = getItemFromSlot(Belongings.Slot.ARMOR).requiredSTR() - effectiveSTR(); if (aEnc > 0) { return (int) (defenseSkill * evasion / Math.pow(1.5, aEnc)); } else { if (getHeroClass() == HeroClass.ROGUE) { if (getCurAction() != null && getSubClass() == HeroSubClass.FREERUNNER && !isStarving()) { evasion *= 2; } return (int) ((defenseSkill - aEnc) * evasion); } else { return (int) (defenseSkill * evasion); } } }
baseDefenseSkill field in Char classbaseDefenseSkill + lvl()baseDefenseSkill + lvl() in the calculationdefenceSkillBonus increases the skillMath.pow(1.2, bonus)evasion /= 2)aEnc = getItemFromSlot(Belongings.Slot.ARMOR).requiredSTR() - effectiveSTR()aEnc > 0 (armor requires more STR than available), defense is reduced by a factor of Math.pow(1.5, aEnc)defenseSkill * evasion(defenseSkill - aEnc) * evasion and get additional bonusesevasion *= 2)Random.Float(attacker.attackSkill(defender)) > Random.Float(defender.defenseSkill(attacker))The Hero class has a special defense skill calculation:
// In Hero.java public int defenseSkill(Char enemy) { float skillFactor = 1; if (getSubClass() == HeroSubClass.BRIGAND) { skillFactor *= 1.2; } return (int) (super.defenseSkill(enemy) * skillFactor); }
Random.Float(attacker.attackSkill(defender)) > Random.Float(defender.defenseSkill(attacker))Char_StaDodged: Text displayed when a character successfully dodges an attack