private string[] GetDamage(FormState state, string name, BattleStats bstats, int damage, Enemy target, string attackName) { string[] result = new string[] { "", "" }; Random r = state.Random; // Random pointer Player p = state.Player; if (IsHit(r)) { // get brief damage boost after initial parry if (p.Stats.isParried) { p.Stats.isParried = false; damage *= 2; } result[0] = $"{name} used {attackName}! "; int crit = GetDamageFromCrit(damage, bstats.stats[Stat.CRITS], r); if (crit > damage) { result[0] += "It was a critical hit! "; damage = crit; } result[1] = damage.ToString(); } else { tp.Miss(); result[0] = $"{name} used {attackName} and missed!"; result[1] = 0.ToString(); } return(result); }
private void EnemyAttack() { if (eTurn == d.enemies.Count) { eTurn = 0; } Enemy attacker = d.enemies[eTurn]; if (attacker.hp > 0) { Skill s = attacker.active[r.Next(0, attacker.active.Count)]; CombatLog.AppendText($"{attacker.name} used {s.Name}"); CombatLog.AppendText(Environment.NewLine); int h = r.Next(0, 100); if (h < 95) { int damage = SkillManager.CalculateDamage(s.Damage, s.Multiplier); damage -= p.resistances[s.Element]; bool crit = IsCritHit(); if (crit) { damage = (damage * 2); // crit damage tp.HalfTurn(); } else { tp.FullTurn(); } string log; if (PlayerHealth.Value - damage <= 0) { timer.Stop(); PlayerHealth.Value = 0; tp.turnEnd = true; log = "You died! Returning you back to the Select Dungeon screen..."; MessageBox.Show(log); Run(); } else { log = $"It hit for {damage} damage."; int v = PlayerHealth.Value - damage; if (v >= PlayerHealth.Maximum) { PlayerHealth.Value = PlayerHealth.Maximum; } else { PlayerHealth.Value -= damage; } CombatLog.AppendText(log); CombatLog.AppendText(Environment.NewLine); CombatLog.AppendText(Environment.NewLine); } } else { CombatLog.AppendText("The attack missed."); CombatLog.AppendText(Environment.NewLine); CombatLog.AppendText(Environment.NewLine); tp.Miss(); } CheckTurnEnemies(); } eTurn++; }