public void BattleManager_CorrectlyPrintsDamageOutput() { int damage = (_shield.MaxHealth + _shield.Defense) - 1; _enemyPlayer1.SetMove(_basicAttackMove); _enemyPlayer1.SetStrength(damage); _enemyPlayer1.SetMoveTarget(_humanPlayer1); _chanceService.PushEventsOccur(true, false); //attack hits, not crit _humanPlayer1.SetBattleShield(_shield as BattleShield); BattleShield fighterShield = _humanPlayer1.BattleShield; _humanPlayer1.SetMove(_doNothingMove, 1); _humanPlayer1.SetMove(_runawayMove); _humanPlayer1.SetMoveTarget(_humanPlayer1); _humanTeam = new Team(_menuManager, _humanPlayer1); _enemyTeam = new Team(_menuManager, _enemyPlayer1); BattleManagerBattleConfiguration config = new BattleManagerBattleConfiguration { ShowIntroAndOutroMessages = false }; _battleManager.Battle(_humanTeam, _enemyTeam, config: config); MockOutputMessage[] outputs = _output.GetOutputs(); Assert.AreEqual(2, outputs.Length); //enemy attacks and shield took damage message MockOutputMessage output = outputs[1]; Assert.AreEqual($"{fighterShield.Owner.DisplayName}'s {fighterShield.GetDisplayText(false)} took {damage} damage!\n", output.Message); }
public void AttackMovePower_AppropriatelyAffectsDamage() { _logger.Subscribe(_team2Fighter, EventType.DamageTaken); int weakAttackPower = 4; int strongAttackPower = 8; AttackBattleMove weakerAttack = new AttackBattleMove("foo", TargetType.SingleEnemy, 100, 0, weakAttackPower); AttackBattleMove strongerAttack = new AttackBattleMove("foo", TargetType.SingleEnemy, 100, 0, strongAttackPower); _team1Fighter.SetStrength(0); _team1Fighter.SetMove(weakerAttack, 1); _team1Fighter.SetMove(strongerAttack, 1); _chanceService.PushEventsOccur(true, false, true, false); //attacks hit, not crits _team2Fighter.SetHealth(weakAttackPower + strongAttackPower); _team2Fighter.SetMove(_doNothingMove); _battleManager.Battle(_team1, _team2); List <EventLog> logs = _logger.Logs; Assert.AreEqual(2, logs.Count); PhysicalDamageTakenEventArgs e = logs[0].E as PhysicalDamageTakenEventArgs; Assert.NotNull(e); Assert.AreEqual(weakAttackPower, e.Damage); e = logs[1].E as PhysicalDamageTakenEventArgs; Assert.NotNull(e); Assert.AreEqual(strongAttackPower, e.Damage); }
public void BattleManager_StopsDanceEffectsIfOwnerDies() { const int expectedHuman2RemainingHealth = 2; const int human2Health = 4; int enemy2Strength = (human2Health + _human2.Defense) - expectedHuman2RemainingHealth; TestDoNothingMove doNothing1 = (TestDoNothingMove)TestMoveFactory.Get(moveType: BattleMoveType.DoNothing); string dangerDanceMessage = "danced the danger dance"; doNothing1.SetMessage(dangerDanceMessage); TestDanceMove dangerDance = (TestDanceMove)TestMoveFactory.Get(moveType: BattleMoveType.Dance); dangerDance.SetDuration(2); dangerDance.AddEffect(new StatMultiplierFieldEffect(TargetType.EnemyTeam, "danger dance", StatType.Strength, 2)); dangerDance.SetDanceEffect(DanceEffectType.Danger); dangerDance.AddMove(doNothing1); _human1.SetMove(dangerDance); _human1.SetMoveTarget(_human1); _human1.SetSpeed(2); _human1.SetHealth(10); _human2.SetHealth(human2Health); _human2.SetMove(_doNothingMove, 1); //end the battle after the first round _human2.SetMove(_runawayMove); _human2.SetMoveTarget(_human2); _human2.SetSpeed(3); _enemy1.SetMove(_basicAttack); _enemy1.SetMoveTarget(_human1); int human1DefenseAndHealth = _human1.Defense + _human1.MaxHealth; int enemy1Strength = human1DefenseAndHealth / 2; _enemy1.SetStrength(enemy1Strength); _enemy1.SetSpeed(1); _enemy2.SetMove(_basicAttack); _enemy2.SetMoveTarget(_human2); _enemy2.SetStrength(enemy2Strength); _chanceService.PushEventsOccur(true, false, true, false); //set up attacks hitting and not crit'ing _battleManager.Battle(_humanTeam, _enemyTeam); Assert.AreEqual(0, _human1.CurrentHealth, "enemy1 attack should have doubled, causing enough damage to kill human1"); Assert.AreEqual(expectedHuman2RemainingHealth, _human2.CurrentHealth, "The effect raising enemy attack should have been lifted when _human1 died"); }
public void BattleManager_CorrectlySetsShield_WhenExecutingShieldMove() { const int shieldDefense = 5; const int shieldHealth = 1; ElementalBattleShield shield = new ElementalBattleShield(shieldHealth, shieldDefense, 0, MagicType.Lightning); ShieldMove shieldMove = new ShieldMove("foo", TargetType.Self, null, shield); _humanFighter.SetSpeed(1); _humanFighter.SetMove(shieldMove, 1); _humanFighter.SetMove(_runawayMove); _enemy.SetStrength(shieldHealth + shieldDefense); _enemy.SetMove(_basicAttackMove); _chanceService.PushEventsOccur(true, false); //attack hits, is not a crit _battleManager.Battle(_humanTeam, _enemyTeam); Assert.AreEqual(_humanFighter.MaxHealth, _humanFighter.CurrentHealth); }
public void StatusesRemoved_OnRoundEnd() { StatMultiplierStatus boostDefenseStatus = new StatMultiplierStatus(1, StatType.Defense, 2); _humanFighter.SetDefense(1); _humanFighter.SetHealth(1); _humanFighter.AddStatus(boostDefenseStatus); _humanFighter.SetMove(_doNothing, 1); _humanFighter.SetMove(_runawayMove); _enemy.SetMove(_basicAttackMove); _enemy.SetMoveTarget(_humanFighter); _enemy.SetStrength(2); _chanceService.PushEventsOccur(true, false); _battleManager.Battle(_humanTeam, _enemyTeam); Assert.AreEqual(1, _humanFighter.CurrentHealth); }
public void SetEnemy_ProperlySetsHumanControlledEnemyStats() { TestEnemyFighter enemy = (TestEnemyFighter)TestFighterFactory.GetFighter(TestFighterType.TestEnemy, 1, "Grumbles"); enemy.SetHealth(10); enemy.SetMana(10); enemy.SetMagicStrength(2); enemy.SetMagicResistance(2); enemy.SetStrength(3); enemy.SetDefense(2); enemy.SetSpeed(5); enemy.SetEvade(5); enemy.SetLuck(20); Assert.AreNotEqual(enemy.MaxHealth, _fighter.MaxHealth, "maxHealth"); Assert.AreNotEqual(enemy.MaxMana, _fighter.MaxMana, "maxMana"); Assert.AreNotEqual(enemy.MagicStrength, _fighter.MagicStrength, "magicStrength"); Assert.AreNotEqual(enemy.MagicResistance, _fighter.MagicResistance, "magicResistance"); Assert.AreNotEqual(enemy.Strength, _fighter.Strength, "strength"); Assert.AreNotEqual(enemy.Defense, _fighter.Defense, "defense"); Assert.AreNotEqual(enemy.Speed, _fighter.Speed, "speed"); Assert.AreNotEqual(enemy.Evade, _fighter.Evade, "evade"); Assert.AreNotEqual(enemy.Luck, _fighter.Luck, "luck"); Assert.AreNotEqual(enemy.DisplayName, _fighter.DisplayName, "displayName"); _fighter.SetEnemy(enemy); Assert.AreEqual(enemy.MaxHealth, _fighter.MaxHealth, "maxHealth"); Assert.AreEqual(enemy.MaxMana, _fighter.MaxMana, "maxMana"); Assert.AreEqual(enemy.MagicStrength, _fighter.MagicStrength, "magicStrength"); Assert.AreEqual(enemy.MagicResistance, _fighter.MagicResistance, "magicResistance"); Assert.AreEqual(enemy.Strength, _fighter.Strength, "strength"); Assert.AreEqual(enemy.Defense, _fighter.Defense, "defense"); Assert.AreEqual(enemy.Speed, _fighter.Speed, "speed"); Assert.AreEqual(enemy.Evade, _fighter.Evade, "evade"); Assert.AreEqual(enemy.Luck, _fighter.Luck, "luck"); Assert.AreEqual(enemy.DisplayName, _fighter.DisplayName, "displayName"); }
private void PhysicalDamageEvent_Setup(int expectedDamage, bool showPhysicalDamageMessages) { Team mixedPlayerTeam = new Team(_menuManager, _humanPlayer1, _enemyPlayer1); TestEnemyFighter enemy3 = (TestEnemyFighter)TestFighterFactory.GetFighter(TestFighterType.TestEnemy, 1); Team enemyTeam = new Team(_menuManager, _enemyPlayer2, enemy3); _humanPlayer1.SetSpeed(2); _humanPlayer1.SetStrength(expectedDamage); _humanPlayer1.SetMove(_basicAttackMove, 1); _humanPlayer1.SetMove(_runawayMove); _humanPlayer1.SetMoveTarget(_enemyPlayer2); _enemyPlayer2.SetHealth(expectedDamage + 1); _enemyPlayer1.SetSpeed(1); _enemyPlayer1.SetStrength(expectedDamage); _enemyPlayer1.SetMove(_basicAttackMove); _enemyPlayer1.SetMoveTarget(enemy3); enemy3.SetHealth(expectedDamage + 1); _mockChanceService.PushEventsOccur(true, false, true, false); //both attacks hit, neither are crits _logger.Subscribe(EventType.DamageTaken, _enemyPlayer2); _logger.Subscribe(EventType.DamageTaken, enemy3); _enemyPlayer2.SetMove(_doNothingMove); enemy3.SetMove(_doNothingMove); BattleManagerBattleConfiguration config = new BattleManagerBattleConfiguration { ShowIntroAndOutroMessages = false, ShowExpAndLevelUpMessages = false, ShowDeathMessages = false, ShowAttackMessages = false, ShowPhysicalDamageMessages = showPhysicalDamageMessages }; _battleManager.Battle(mixedPlayerTeam, enemyTeam, config: config); }