private void monsterAttack() //Monster attacks! { Monster mon = _monster; Hero hero = mon.FindTarget(_theParty); int monsterDamage; int randSpecial = _randomNumber.Next(10) + 1; if (randSpecial <= mon.getSpecialAttackFrequency()) { _Paragraph.Inlines.Add(new Bold(new Run(_monster.PerformSpecialAttack(_theParty, 0, _monster))) { Foreground = Brushes.Red }); _Paragraph.Inlines.Add(new LineBreak()); } else { if (mon.getIsPhysical()) { if (hero.getIsDefending()) {//based on the attack of the monster - the defense of the hero. A greater value is used for defending heroes monsterDamage = mon.BasicAttack() - hero.getDefendingDefense(); } else { monsterDamage = mon.BasicAttack() - hero.getModDefense(); } } else { if (hero.getIsDefending()) { monsterDamage = mon.BasicAttack() - hero.getDefendingResistance(); } else { monsterDamage = mon.BasicAttack() - hero.getModResistance(); } } if (monsterDamage < 0) { monsterDamage = 0; } hero.setCurHealth(hero.getCurHealth() - monsterDamage); //actual damage is applied _Paragraph.Inlines.Add(new Bold(new Run("The " + mon.getName() + " attacks " + hero.getName() + " for " + monsterDamage + " damage.")) { Foreground = Brushes.Red }); _Paragraph.Inlines.Add(new LineBreak()); } updateVisuals(); checkForDefeatedUnit(); }