// Damage dealing function that works with either monster or character public int DealtDamage(BattleTile attacker) { BattleSystemViewModel.Instance.AddTxt(new StringWrapper("Damage Calculation Begins")); // Roll 20 for attack type. Random rng = new Random(); int roll = 1 + rng.Next(20); BattleSystemViewModel.Instance.AddTxt(new StringWrapper("Rolled: " + roll)); // Applies to hit Rule if (ToHit > 0) { roll = ToHit; BattleSystemViewModel.Instance.AddTxt(new StringWrapper("ToHit Applied: " + ToHit)); } // Applies Miss at roll/ToHit 1 Rule if (Miss1 && roll == 1) { BattleSystemViewModel.Instance.AddTxt(new StringWrapper("Missed")); DamageStatus = "Miss"; return(0); // Applies Critical Miss at 1 rule } else if (CriticalMiss1 && roll == 1) { DamageStatus = "Critical Miss"; BattleSystemViewModel.Instance.AddTxt(new StringWrapper("Critical Miss")); return(0); } // Applies Hit at roll/ToHit 20 Rule bool hit = false; bool criticalHit = false; bool focusedAttack = false; if (Hit20 && roll == 20) { BattleSystemViewModel.Instance.AddTxt(new StringWrapper("Hit20")); DamageStatus = "Hit"; hit = true; // Applies critical hit rule at 20 } else if (Critical20 && roll == 20) { BattleSystemViewModel.Instance.AddTxt(new StringWrapper("Critical Hit")); DamageStatus = "Critical Hit"; criticalHit = true; // Applies focused attack rule } else if (BattleSystemViewModel.Instance.FocusedAttack && BattleSystemViewModel.Instance.UseFocusedAttack) { if (attacker.Type == "Character" && attacker.Hero.UnequipAllItems().Count > 0) { BattleSystemViewModel.Instance.AddTxt(new StringWrapper("Focused Attack Applied")); DamageStatus = "Focused Attack"; FocusedAttack = true; } } BattleSystemViewModel.Instance.AddTxt(new StringWrapper("Attacker Attack: " + attacker.GetAttack())); BattleSystemViewModel.Instance.AddTxt(new StringWrapper("Attacker Level: " + attacker.GetLevel())); BattleSystemViewModel.Instance.AddTxt(new StringWrapper("Target Defense: " + GetDefense())); BattleSystemViewModel.Instance.AddTxt(new StringWrapper("Target Level: " + GetLevel())); // Hit Designation if (roll + attacker.GetLevel() + attacker.GetAttack() > GetDefense() + GetLevel() || hit || criticalHit || focusedAttack) { int damage = 0; BattleSystemViewModel.Instance.AddTxt(new StringWrapper("Hit Success")); // Level Damage int lvlDamage = (int)(attacker.GetLevel() * .25) + 1; BattleSystemViewModel.Instance.AddTxt(new StringWrapper("Level Damage: " + lvlDamage)); BattleSystemViewModel.Instance.AddTxt(new StringWrapper("Weapon Damage: " + attacker.GetDamage())); // Applies Disable RNG Rule if (DisableRNG) { damage = attacker.GetDamage() + lvlDamage + attacker.GetAttack(); BattleSystemViewModel.Instance.AddTxt(new StringWrapper("RNG Disabled damage: " + damage)); } // RNG enabled rule else { Random weaponDamage = new Random(); damage = (1 + weaponDamage.Next(attacker.GetDamage() + attacker.GetAttack())) + lvlDamage; BattleSystemViewModel.Instance.AddTxt(new StringWrapper("Resulting Damage: " + damage)); } // Critical hit doubles the damage dealt if (criticalHit) { damage = 2 * damage; BattleSystemViewModel.Instance.AddTxt(new StringWrapper("Critical Applied damage: " + damage)); } // Focused attack deals 10 times the damage dealt if (focusedAttack) { damage = 10 * damage; BattleSystemViewModel.Instance.AddTxt(new StringWrapper("Focus Attack Applied damage: " + damage)); } // Update life bar of this Combatant UpdateLifeBar(damage); BattleSystemViewModel.Instance.AddTxt(new StringWrapper("End Damage")); // Return damage delt for recording return(damage); } // Missed return(0); }