Пример #1
0
        public void ConditionalDanceMove_ExecutesAppropriateEffectWhenDanceInEffect([Values(DanceEffectType.Fire, DanceEffectType.Danger)] DanceEffectType danceEffectType)
        {
            _testTechnique.ClearEffects();
            _testTechnique.SetDanceEffect(danceEffectType);

            RestorationBattleMoveEffect conditionalHealEffect = GetRestoreHealthEffect(danceEffectType);
            AttackBattleMove            attackWithHeal        = new AttackBattleMove("foo", TargetType.SingleEnemy, 100, 0, effects: conditionalHealEffect);

            _human2.SetMove(_testTechnique, 1);
            _human2.SetSpeed(1);

            _human1.SetHealth(100, 10);
            _human1.SetMove(attackWithHeal, 1);
            _chanceService.PushEventsOccur(true, false); //attack hits, is not crit
            _human1.SetStrength(_enemy1.MaxHealth);
            _human1.SetMoveTarget(_enemy1);

            _enemyTeam = new Team(_menuManager, _enemy1);

            _enemy1.SetDefense(0);
            _enemy1.SetMove(_doNothingMove);
            _enemy1.SetMoveTarget(_enemy1);

            _battleManager.Battle(_humanTeam, _enemyTeam);

            Assert.AreEqual(20, _human1.CurrentHealth, "Human1 should have regained 10 HP when the attack was successful and the dance effect was active");
        }
Пример #2
0
 public DanceMove(string description, TargetType targetType, int effectDuration, DanceEffectType?danceEffect, List <FieldEffect> fieldEffects, params BattleMove[] moves)
     : base(description, targetType, moves)
 {
     EffectDuration = effectDuration;
     FieldEffects   = fieldEffects;
     MoveType       = BattleMoveType.Dance;
     DanceEffect    = danceEffect ?? DanceEffectType.None;
 }
Пример #3
0
        public void AddFakeCombination(DanceEffectType effect1, DanceEffectType effect2, CombinedFieldEffect combinedEffect)
        {
            DanceEffectType first  = (DanceEffectType)Math.Min((int)effect1, (int)effect2);
            DanceEffectType second = (DanceEffectType)Math.Max((int)effect1, (int)effect2);

            _firstEffectType  = first;
            _secondEffectType = second;
            _effect           = combinedEffect;
        }
Пример #4
0
        public override CombinedFieldEffect Combine(DanceEffectType effect1, DanceEffectType effect2)
        {
            CombinedFieldEffect ret;

            DanceEffectType first  = (DanceEffectType)Math.Min((int)effect1, (int)effect2);
            DanceEffectType second = (DanceEffectType)Math.Max((int)effect1, (int)effect2);

            if (_firstEffectType.HasValue && _secondEffectType.HasValue && _firstEffectType.Value == first && _secondEffectType == second && _effect != null)
            {
                ret = _effect;
            }
            else
            {
                ret = base.Combine(effect1, effect2);
            }

            return(ret);
        }
Пример #5
0
        public void BattleManager_AppropriatelyTicksDownDanceEffectCounter([Values(DanceEffectType.Heart, DanceEffectType.Danger)] DanceEffectType danceEffectType)
        {
            const int danceDuration = 4;

            RestorationBattleMoveEffect conditionalHealEffect = GetRestoreHealthEffect(danceEffectType);
            AttackBattleMove            attackWithHeal        = new AttackBattleMove("foo", TargetType.SingleEnemy, 100, 0, effects: conditionalHealEffect);

            _testTechnique.ClearEffects();
            _testTechnique.SetDanceEffect(danceEffectType);
            _testTechnique.SetDuration(danceDuration);

            _human1.SetMove(_testTechnique, 1);
            _human1.SetMove(_doNothingMove);
            _human1.SetMoveTarget(_human1);
            _human1.SetSpeed(1);

            _human2.SetHealth(100, 10);
            _human2.SetMove(attackWithHeal, 6);
            for (var i = 0; i < 6; ++i)
            {
                _chanceService.PushEventsOccur(true, false); //attack hits, does not miss
            }
            _human2.SetMove(_runawayMove);
            _human2.SetMoveTarget(_enemy1);
            _human2.SetStrength(_enemy1.Defense);

            _enemy1.SetHealth(100);
            _enemy1.SetMove(_doNothingMove);
            _enemy1.SetMoveTarget(_enemy1);

            _enemy2.SetHealth(100);
            _enemy2.SetMove(_doNothingMove);
            _enemy2.SetMoveTarget(_enemy2);

            _battleManager.Battle(_humanTeam, _enemyTeam);

            int expectedHealth = 10 + (danceDuration * 10);

            Assert.AreEqual(expectedHealth, _human2.CurrentHealth); //will be 20 higher if the effect doesn't wear off
        }
Пример #6
0
 public void SetDanceEffect(DanceEffectType effect)
 {
     DanceEffect = effect;
 }
Пример #7
0
        public virtual CombinedFieldEffect Combine(DanceEffectType effect1, DanceEffectType effect2)
        {
            CombinedFieldEffect ret = null;
            string combinedName;
            var    first  = (DanceEffectType)Math.Min((int)effect1, (int)effect2);
            var    second = (DanceEffectType)Math.Max((int)effect1, (int)effect2);

            switch (first)
            {
            case DanceEffectType.Fire:
                switch (second)
                {
                case DanceEffectType.Wind:
                    combinedName = "lightning dance";
                    ret          = new CombinedFieldEffect(combinedName,
                                                           new CriticalChanceMultiplierFieldEffect(TargetType.OwnTeam, combinedName, 2.0),
                                                           new CriticalChanceMultiplierFieldEffect(TargetType.EnemyTeam, combinedName, 0.5));
                    break;

                case DanceEffectType.Soul:
                    combinedName = "courage dance";
                    ret          = new CombinedFieldEffect(combinedName,
                                                           new StatMultiplierFieldEffect(TargetType.OwnTeam, combinedName, StatType.Strength, 1.5),
                                                           new MagicMultiplierFieldEffect(TargetType.OwnTeam, combinedName, MagicType.Fire, 1.25));
                    break;

                case DanceEffectType.Heart:
                    combinedName = "passion tempo";
                    ret          = new CombinedFieldEffect(combinedName,
                                                           new CriticalChanceMultiplierFieldEffect(TargetType.OwnTeam, combinedName, 3),
                                                           new SpellCostMultiplierFieldEffect(TargetType.OwnTeam, combinedName, 2),
                                                           new MagicMultiplierFieldEffect(TargetType.OwnTeam, combinedName, MagicType.All, 2));
                    break;

                case DanceEffectType.Mind:
                    combinedName = "burning ballet";
                    ret          = new CombinedFieldEffect(combinedName,
                                                           new SpellCostMultiplierFieldEffect(TargetType.OwnTeam, combinedName, 2),
                                                           new MagicMultiplierFieldEffect(TargetType.OwnTeam, combinedName, MagicType.All, 2));
                    break;

                case DanceEffectType.Danger:
                    combinedName = "eruption festival";
                    ret          = new CombinedFieldEffect(combinedName,
                                                           new MagicAttackFieldEffect(TargetType.EnemyTeam, combinedName, MagicType.Fire, 2, 1, true));
                    break;
                }
                break;

            case DanceEffectType.Water:
                switch (second)
                {
                case DanceEffectType.Soul:
                    combinedName = "river rumba";
                    ret          = new CombinedFieldEffect(combinedName,
                                                           new StatMultiplierFieldEffect(TargetType.OwnTeam, combinedName, StatType.Speed, 2));
                    break;

                case DanceEffectType.Heart:
                    combinedName = "cleansing calypso";
                    ret          = new CombinedFieldEffect(combinedName,
                                                           new RestoreHealthPercentageFieldEffect(TargetType.OwnTeam, combinedName, 25, immediatelyExecuted: true),
                                                           new UndoDebuffsFieldEffect(TargetType.OwnTeam, combinedName)
                                                           );
                    break;

                case DanceEffectType.Mind:
                    combinedName = "clearsong conga";
                    ret          = new CombinedFieldEffect(combinedName,
                                                           new RestoreManaPercentageFieldEffect(TargetType.OwnTeam, combinedName, 25, immediatelyExecuted: true));
                    break;

                case DanceEffectType.Danger:
                    combinedName = "whirlpool fesitval";
                    ret          = new CombinedFieldEffect(combinedName,
                                                           new MagicAttackFieldEffect(TargetType.EnemyTeam, combinedName, MagicType.Water, 2, 1, true));
                    break;
                }
                break;

            case DanceEffectType.Wind:
                switch (second)
                {
                case DanceEffectType.Soul:
                    combinedName = "breeze form";
                    ret          = new CombinedFieldEffect(combinedName,
                                                           new StatMultiplierFieldEffect(TargetType.OwnTeam, combinedName, StatType.Evade, 1.4));
                    break;

                case DanceEffectType.Heart:
                    combinedName = "carefree waltz";
                    ret          = new CombinedFieldEffect(combinedName,
                                                           new RestoreHealthPercentageFieldEffect(TargetType.OwnTeam, combinedName, 10));
                    break;

                case DanceEffectType.Mind:
                    combinedName = "gusty mamba";
                    ret          = new CombinedFieldEffect(combinedName,
                                                           new ReflectFieldEffect(TargetType.OwnTeam, combinedName, MagicType.All));
                    break;

                case DanceEffectType.Danger:
                    combinedName = "tornado festival";
                    ret          = new CombinedFieldEffect(combinedName,
                                                           new MagicAttackFieldEffect(TargetType.EnemyTeam, combinedName, MagicType.Wind, 2, 1, true));
                    break;
                }
                break;

            case DanceEffectType.Earth:
                switch (second)
                {
                case DanceEffectType.Soul:
                    combinedName = "desert swing";
                    ret          = new CombinedFieldEffect(combinedName,
                                                           new StatMultiplierFieldEffect(TargetType.OwnTeam, combinedName, StatType.Defense, 2));
                    break;

                case DanceEffectType.Heart:
                    combinedName = "steadfast stance";
                    var earthShield = new ElementalBattleShield(5, 0, 0, MagicType.Earth);
                    ret = new CombinedFieldEffect(combinedName,
                                                  new ShieldFieldEffect(TargetType.OwnTeam, combinedName, earthShield));
                    break;

                case DanceEffectType.Mind:
                    combinedName = "gaia galla";
                    ret          = new CombinedFieldEffect(combinedName,
                                                           new RestoreHealthPercentageFieldEffect(TargetType.OwnTeam, combinedName, 10));
                    break;

                case DanceEffectType.Danger:
                    combinedName = "earthquake fesitval";
                    ret          = new CombinedFieldEffect(combinedName,
                                                           new MagicAttackFieldEffect(TargetType.EnemyTeam, combinedName, MagicType.Earth, 2, 1, true));
                    break;
                }
                break;
            }

            return(ret);
        }
Пример #8
0
 public DanceEffectCounter(IFighter owner, int turns, DanceEffectType effect)
     : base(turns)
 {
     Owner  = owner;
     Effect = effect;
 }
Пример #9
0
 public DanceBattleCondition(DanceEffectType danceEffectType)
 {
     EffectType = danceEffectType;
 }
Пример #10
0
        public void ConditionalAttackBoostMove_ExecutesAppropriateEffectWhenDanceNotInEffect([Values(DanceEffectType.Water, DanceEffectType.Wind)] DanceEffectType danceEffectType)
        {
            _testTechnique.ClearEffects();
            _testTechnique.SetDanceEffect(DanceEffectType.Soul);

            const int attackBoostMultiplier = 2;
            AttackBoostBattleMoveEffect conditionalAttackBoostEffect = GetAttackBoostEffect(attackBoostMultiplier, danceEffectType);
            AttackBattleMove            attackWithBoost = new AttackBattleMove("foo", TargetType.SingleEnemy, 100, 0, effects: conditionalAttackBoostEffect);

            _human2.SetMove(_testTechnique, 1);
            _human2.SetMove(_doNothingMove);
            _human2.SetSpeed(1);

            const int initialAttackStrength = 2;
            const int expectedDamage        = initialAttackStrength;

            _human1.SetStrength(initialAttackStrength);
            _human1.SetMove(attackWithBoost, 1);
            _chanceService.PushAttackHitsNotCrit();
            _human1.SetMove(_runawayMove);
            _human1.SetMoveTarget(_enemy1);

            _enemyTeam = new Team(_menuManager, _enemy1);

            _enemy1.SetDefense(0);
            _enemy1.SetHealth(100);
            _enemy1.SetMove(_doNothingMove);
            _enemy1.SetMoveTarget(_enemy1);

            _battleManager.Battle(_humanTeam, _enemyTeam);

            const int expectedRemainingHealth = 100 - expectedDamage;

            Assert.AreEqual(expectedRemainingHealth, _enemy1.CurrentHealth, "Human1's strength should not have been mutliplied, since the dance effect condition was not met!");
        }
Пример #11
0
        public void ConditionalDanceMove_ExecutesAppropriateEffectWhenDanceNotInEffect([Values(DanceEffectType.Water, DanceEffectType.Wind)] DanceEffectType danceEffectType)
        {
            _testTechnique.ClearEffects();
            _testTechnique.SetDanceEffect(DanceEffectType.Soul);

            RestorationBattleMoveEffect conditionalHealEffect = GetRestoreHealthEffect(danceEffectType);
            AttackBattleMove            attackWithHeal        = new AttackBattleMove("foo", TargetType.SingleEnemy, 100, 0, effects: conditionalHealEffect);

            _human2.SetMove(_testTechnique, 1);
            _human2.SetSpeed(1);

            const int initialHealth = 10;

            _human1.SetHealth(100, initialHealth);
            _human1.SetMove(attackWithHeal, 1);
            _chanceService.PushEventsOccur(true, false); //attack hits, is not crit
            _human1.SetStrength(_enemy1.MaxHealth);
            _human1.SetMoveTarget(_enemy1);

            _enemyTeam = new Team(_menuManager, _enemy1);

            _enemy1.SetDefense(0);
            _enemy1.SetMove(_doNothingMove);
            _enemy1.SetMoveTarget(_enemy1);

            _battleManager.Battle(_humanTeam, _enemyTeam);

            Assert.AreEqual(initialHealth, _human1.CurrentHealth, "Human1 should not have had their health altered, the active dance effect's didn't match the conditional heal!");
        }
Пример #12
0
        private AttackBoostBattleMoveEffect GetAttackBoostEffect(double attackMultiplier, DanceEffectType danceEffectType)
        {
            DanceBattleCondition battleCondition = new DanceBattleCondition(danceEffectType);

            return(new AttackBoostBattleMoveEffect(attackMultiplier, battleCondition));
        }
Пример #13
0
        private RestorationBattleMoveEffect GetRestoreHealthEffect(DanceEffectType danceEffectType)
        {
            DanceBattleCondition battleCondition = new DanceBattleCondition(danceEffectType);

            return(new RestorationBattleMoveEffect(RestorationType.Health, 10, BattleMoveEffectActivationType.OnAttackHit, battleCondition));
        }