private static void ResolveDamage(Actor defender, int damage) { MessageLogWindow MessageLog = GameLoop.UIManager.MessageLog; if (damage > 0) { BodyPart hitPart = defender.anatomy.RandomItem(); hitPart.HpCurrent -= damage; defender.Health -= damage; MessageLog.AddTextNewline($" {hitPart.Name} was hit for {damage} damage, now at {hitPart.HpCurrent}. {defender.Name} at {defender.Health}."); if (hitPart.HpCurrent <= 0) { hitPart.Severance(0 - hitPart.HpCurrent); } if (defender.Health <= 0) { ResolveDeath(defender); } } else { MessageLog.AddTextNewline($"{defender.Name} blocked all damage!"); } }
public static bool BumpAttack(Actor attacker, Actor defender) { MessageLogWindow MessageLog = GameLoop.UIManager.MessageLog; StringBuilder attackMessage = new StringBuilder(); StringBuilder defenseMessage = new StringBuilder(); int hits = ResolveAttack(attacker, defender, attackMessage); int blocks = ResolveDefense(defender, hits, attackMessage, defenseMessage); int damage = hits - blocks; MessageLog.AddTextNewline(attackMessage.ToString()); if (!string.IsNullOrWhiteSpace(defenseMessage.ToString())) { MessageLog.AddTextNewline(defenseMessage.ToString()); } ResolveDamage(defender, damage); return(true); }