Exemple #1
0
 public CombatTurn(BattleStatistics attacker, BaseCharacter defender, bool?advantage)
 {
     turnOwner = attacker.Character;
     for (int a = 0; a <= turnOwner.ExtraAttacks; a++)
     {
         attemptedAttacks.Add(new Attack(attacker, defender, advantage));
         if (defender.CurHitPoints <= 0)
         {
             break;
         }
     }
     ToString();
 }
Exemple #2
0
 public Battle(BaseCharacter combatant, BaseCharacter opponent)
 {
     this.combatant               = combatant;
     this.CombatantAtStart        = (BaseCharacter)combatant.Clone();
     this.opponent                = opponent;
     this.OpponentAtStart         = (BaseCharacter)opponent.Clone();
     CombatantInitiative          = this.combatant.Initiative + DiceRoller.TwentySidedDie();
     OpponentInitiative           = this.opponent.Initiative + DiceRoller.TwentySidedDie();
     startingCharacterStatistics  = new BattleStatistics(StartingCharacter, CharacterGoingLast);
     characterGoingLastStatistics = new BattleStatistics(CharacterGoingLast, StartingCharacter);
     estimatedPowerDifference     = combatant.CalculateRelativePower(opponent);
     if (combatant.CurHitPoints <= 0 || opponent.CurHitPoints <= 0)
     {
         throw new ArgumentException("Can't have a battle without at least two living combatants!");
     }
     StartBattle();
 }
Exemple #3
0
 public Attack(BattleStatistics attackerStats, BaseCharacter defender, bool?advantage)
 {
     this.attacker         = attackerStats.Character;
     this.defender         = defender;
     this.advantage        = advantage;
     defenderArmorClass    = defender.ArmorClass;
     defenderInitialHealth = defender.CurHitPoints;
     attackRoll            = attacker.AttackRoll(advantage: advantage);
     criticalHit           = attackRoll == Int32.MaxValue;
     criticalMiss          = attackRoll == Int32.MinValue;
     hit = (criticalHit || attackRoll >= defenderArmorClass) && !criticalMiss;
     if (hit)
     {
         damageRoll  = attacker.DamageRoll(critical: criticalHit);
         damageDealt = defender.ReceiveDamage(damageRoll);
     }
     attackerStats.ReportAttackResults(hit, criticalHit, criticalMiss, damageDealt);
     ToString();
 }
Exemple #4
0
 public Round(int roundNumber, BattleStatistics combatantStats, BattleStatistics opponentStats, bool?combatantAdvantage = null, bool?opponentAdvantage = null)
 {
     this.combatant         = combatantStats.Character;
     this.opponent          = opponentStats.Character;
     this.RoundNumber       = roundNumber;
     statistics[combatant]  = combatantStats;
     statistics[opponent]   = opponentStats;
     roundStartDescription += '\n' + $"\u200BRound {RoundNumber}! {combatant.Name} (HP: {combatant.CurHitPoints}/{combatant.MaxHitPoints}) vs {opponent.Name} (HP: {opponent.CurHitPoints}/{opponent.MaxHitPoints})\n";
     turns.Add(new CombatTurn(statistics[combatant], opponent, combatantAdvantage));
     if (BattleOver.Item1 == null)
     {
         bool otherOneMessedUp = turns.Last().attemptedAttacks.Last().criticalMiss;
         turns.Add(new CombatTurn(statistics[opponent], combatant, otherOneMessedUp ? (bool?)true : opponentAdvantage));
     }
     if (turns.Last().attemptedAttacks.Last().criticalMiss)
     {
         EarnedAdvantage = combatant;
     }
     ToString();
 }