示例#1
0
        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!");
            }
        }
示例#2
0
        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);
        }