Ejemplo n.º 1
0
        public void Wild_Battle_Throws_For_Illegal_Party_Size(PBEBattleFormat format, int count, bool expectException)
        {
            #region Setup and check
            PBEDataProvider.GlobalRandom.Seed = 0;
            PBESettings settings = PBESettings.DefaultSettings;

            var p0 = new TestPokemonCollection(1);
            p0[0] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 100, PBEMove.Splash);

            var p1 = new TestPokemonCollection(count);
            p1[0] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 100, PBEMove.Splash)
            {
                CaughtBall = PBEItem.None
            };
            for (int i = 1; i < count; i++)
            {
                p1[i] = p1[0];
            }

            if (expectException)
            {
                Assert.Throws <ArgumentException>(() => new PBEBattle(format, settings, new PBETrainerInfo(p0, "Trainer 0"), new PBEWildInfo(p1)));
            }
            #endregion
        }
Ejemplo n.º 2
0
        public void Wild_Pkmn_Positions_Set_Before_Begin()
        {
            #region Setup
            PBEDataProvider.GlobalRandom.Seed = 0;
            PBESettings settings = PBESettings.DefaultSettings;

            var p0 = new TestPokemonCollection(1);
            p0[0] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 100, PBEMove.Splash);

            var p1 = new TestPokemonCollection(1);
            p1[0] = new TestPokemon(settings, PBESpecies.Darkrai, 0, 100, PBEMove.Splash)
            {
                CaughtBall = PBEItem.None
            };

            var battle = PBEBattle.CreateWildBattle(PBEBattleFormat.Single, settings, new PBETrainerInfo(p0, "Trainer 0", false), new PBEWildInfo(p1));

            PBETrainer       t1      = battle.Trainers[1];
            PBEBattlePokemon darkrai = t1.Party[0];
            #endregion

            #region Check
            Assert.True(darkrai.FieldPosition == PBEFieldPosition.Center &&
                        battle.ActiveBattlers.Single() == darkrai);
            #endregion
        }
Ejemplo n.º 3
0
        public void Fainted_Pkmn_Not_Sent_Out_Double()
        {
            #region Setup
            PBEDataProvider.GlobalRandom.Seed = 0;
            PBESettings settings = PBESettings.DefaultSettings;

            var p0 = new TestPartyPokemonCollection(3);
            p0[0] = new TestPartyPokemon(settings, PBESpecies.Magikarp, 0, 100, PBEMove.Splash);
            p0[1] = new TestPartyPokemon(settings, PBESpecies.Absol, 0, 100, PBEMove.Splash)
            {
                HP = 0
            };
            p0[2] = new TestPartyPokemon(settings, PBESpecies.Feebas, 0, 100, PBEMove.Splash);

            var p1 = new TestPokemonCollection(1);
            p1[0] = new TestPokemon(settings, PBESpecies.Darkrai, 0, 100, PBEMove.Splash);

            var battle = PBEBattle.CreateTrainerBattle(PBEBattleFormat.Double, settings, new PBETrainerInfo(p0, "Trainer 0", false), new PBETrainerInfo(p1, "Trainer 1", false));

            PBETrainer       t0       = battle.Trainers[0];
            PBEBattlePokemon magikarp = t0.Party[0];
            PBEBattlePokemon absol    = t0.Party[1];
            PBEBattlePokemon feebas   = t0.Party[2];

            battle.Begin();
            #endregion

            #region Check
            Assert.True(magikarp.FieldPosition == PBEFieldPosition.Left &&
                        absol.FieldPosition == PBEFieldPosition.None &&
                        feebas.FieldPosition == PBEFieldPosition.Right);
            #endregion
        }
Ejemplo n.º 4
0
        public void Basic_Actions()
        {
            #region Setup
            PBERandom.SetSeed(0);
            PBESettings settings = PBESettings.DefaultSettings;

            var p0 = new TestPokemonCollection(2);
            p0[0] = new TestPokemon(settings, PBESpecies.Koffing, 0, 100, PBEMove.Selfdestruct);
            p0[1] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 100, PBEMove.Splash);

            var p1 = new TestPokemonCollection(1);
            p1[0] = new TestPokemon(settings, PBESpecies.Darkrai, 0, 100, PBEMove.Protect);

            var battle = new PBEBattle(PBEBattleFormat.Single, settings, new PBETrainerInfo(p0, "Trainer 0"), new PBETrainerInfo(p1, "Trainer 1"));
            battle.OnNewEvent += PBEBattle.ConsoleBattleEventHandler;
            battle.Begin();

            PBETrainer       t0       = battle.Trainers[0];
            PBETrainer       t1       = battle.Trainers[1];
            PBEBattlePokemon koffing  = t0.Party[0];
            PBEBattlePokemon magikarp = t0.Party[1];
            PBEBattlePokemon darkrai  = t1.Party[0];
            #endregion

            #region Darkrai uses Protect, Koffing uses Selfdestruct and faints
            var a = new PBETurnAction(koffing, PBEMove.Selfdestruct, PBETurnTarget.FoeCenter);
            Assert.Throws <ArgumentNullException>(() => PBEBattle.SelectActionsIfValid(null, a));                                   // Throw for null team
            Assert.Throws <ArgumentNullException>(() => PBEBattle.SelectActionsIfValid(t0, (IReadOnlyList <PBETurnAction>)null));   // Throw for null collection
            Assert.Throws <ArgumentNullException>(() => PBEBattle.SelectActionsIfValid(t0, new PBETurnAction[] { null }));          // Throw for null elements
            Assert.False(PBEBattle.SelectActionsIfValid(t0, a, a));                                                                 // False for too many actions
            Assert.True(PBEBattle.SelectActionsIfValid(t0, a));                                                                     // True for good actions
                                                                                                                                    // TODO: bad field position to switch into, bad move, bad targets, bad targets with templockedmove, battle status, bad pkmn id, wrong team pkmn id, duplicate pkmn id, can't switch out but tried, invalid switch mon (null hp pos), duplicate switch mon
            Assert.False(PBEBattle.SelectActionsIfValid(t0, a));                                                                    // False because actions were already submitted
            Assert.False(PBEBattle.SelectActionsIfValid(t0, Array.Empty <PBETurnAction>()));                                        // False for 0 despite us now needing 0 additional actions

            Assert.True(PBEBattle.SelectActionsIfValid(t1, new PBETurnAction(darkrai, PBEMove.Protect, PBETurnTarget.AllyCenter))); // True for good actions

            battle.RunTurn();
            #endregion

            #region More checks
            var s = new PBESwitchIn(magikarp, PBEFieldPosition.Center);
            Assert.Throws <ArgumentNullException>(() => PBEBattle.SelectSwitchesIfValid(null, s));                               // Throw for null team
            Assert.Throws <ArgumentNullException>(() => PBEBattle.SelectSwitchesIfValid(t0, (IReadOnlyList <PBESwitchIn>)null)); // Throw for null collection
            Assert.Throws <ArgumentNullException>(() => PBEBattle.SelectSwitchesIfValid(t0, new PBESwitchIn[] { null }));        // Throw for null elements
            Assert.False(PBEBattle.SelectSwitchesIfValid(t0, s, s));                                                             // False for too many
            Assert.True(PBEBattle.SelectSwitchesIfValid(t0, s));                                                                 // True for good switches

            // Below two wouldn't work because of battle status lol
            //Assert.False(PBEBattle.SelectSwitchesIfValid(t0, s)); // False because switches were already submitted
            //Assert.False(PBEBattle.SelectSwitchesIfValid(t0, Array.Empty<PBESwitchIn>())); // False for 0 despite us now needing 0 additional actions

            //battle.RunSwitches();
            #endregion

            #region Cleanup
            battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler;
            #endregion
        }
Ejemplo n.º 5
0
        public void Basic_Actions()
        {
            #region Setup
            PBEDataProvider.GlobalRandom.Seed = 0;
            PBESettings settings = PBESettings.DefaultSettings;

            var p0 = new TestPokemonCollection(2);
            p0[0] = new TestPokemon(settings, PBESpecies.Koffing, 0, 100, PBEMove.Selfdestruct);
            p0[1] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 100, PBEMove.Splash);

            var p1 = new TestPokemonCollection(1);
            p1[0] = new TestPokemon(settings, PBESpecies.Darkrai, 0, 100, PBEMove.Protect);

            var battle = new PBEBattle(PBEBattleFormat.Single, settings, new PBETrainerInfo(p0, "Trainer 0"), new PBETrainerInfo(p1, "Trainer 1"));
            battle.OnNewEvent += PBEBattle.ConsoleBattleEventHandler;

            PBETrainer       t0       = battle.Trainers[0];
            PBETrainer       t1       = battle.Trainers[1];
            PBEBattlePokemon koffing  = t0.Party[0];
            PBEBattlePokemon magikarp = t0.Party[1];
            PBEBattlePokemon darkrai  = t1.Party[0];

            battle.Begin();
            #endregion

            #region Darkrai uses Protect, Koffing uses Selfdestruct and faints
            var a = new PBETurnAction(koffing, PBEMove.Selfdestruct, PBETurnTarget.FoeCenter);
            Assert.Throws <ArgumentNullException>(() => t0.SelectActionsIfValid((IReadOnlyList <PBETurnAction>)null));   // Throw for null collection
            Assert.Throws <ArgumentNullException>(() => t0.SelectActionsIfValid(new PBETurnAction[] { null }));          // Throw for null elements
            Assert.NotNull(t0.SelectActionsIfValid(a, a));                                                               // Too many actions
            Assert.Null(t0.SelectActionsIfValid(a));                                                                     // Good actions
            Assert.NotNull(t0.SelectActionsIfValid(a));                                                                  // Actions were already submitted
            Assert.NotNull(t0.SelectActionsIfValid(Array.Empty <PBETurnAction>()));                                      // 0 despite us now needing 0 additional actions

            Assert.Null(t1.SelectActionsIfValid(new PBETurnAction(darkrai, PBEMove.Protect, PBETurnTarget.AllyCenter))); // True for good actions

            battle.RunTurn();
            #endregion

            #region More checks
            var s = new PBESwitchIn(magikarp, PBEFieldPosition.Center);
            Assert.Throws <ArgumentNullException>(() => t0.SelectSwitchesIfValid((IReadOnlyList <PBESwitchIn>)null)); // Throw for null collection
            Assert.Throws <ArgumentNullException>(() => t0.SelectSwitchesIfValid(new PBESwitchIn[] { null }));        // Throw for null elements
            Assert.NotNull(t0.SelectSwitchesIfValid(s, s));                                                           // Too many
            Assert.Null(t0.SelectSwitchesIfValid(s));                                                                 // Good switches

            // Below two wouldn't work because of battle status lol
            //Assert.NotNull(t0.SelectSwitchesIfValid(s)); // Switches were already submitted
            //Assert.NotNull(t0.SelectSwitchesIfValid(Array.Empty<PBESwitchIn>())); // 0 despite us now needing 0 additional switches

            //battle.RunSwitches();
            #endregion

            #region Cleanup
            battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler;
            #endregion
        }
        public void AutoCenter_Works_MultiBattle(bool faintLeft)
        {
            #region Setup
            PBEDataProvider.GlobalRandom.Seed = 0;
            PBESettings settings = PBESettings.DefaultSettings;

            var pL = new TestPokemonCollection(1);
            pL[0] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 1, PBEMove.Protect, PBEMove.Splash);
            var pC = new TestPokemonCollection(1);
            pC[0] = new TestPokemon(settings, PBESpecies.Golem, 0, 100, PBEMove.Explosion);
            var pR = new TestPokemonCollection(1);
            pR[0] = new TestPokemon(settings, PBESpecies.Happiny, 0, 1, PBEMove.Protect, PBEMove.Splash);

            var battle = new PBEBattle(PBEBattleFormat.Triple, settings,
                                       new[] { new PBETrainerInfo(pL, "Trainer 0"), new PBETrainerInfo(pC, "Trainer 1"), new PBETrainerInfo(pR, "Trainer 2") },
                                       new[] { new PBETrainerInfo(pL, "Trainer 3"), new PBETrainerInfo(pC, "Trainer 4"), new PBETrainerInfo(pR, "Trainer 5") });
            battle.OnNewEvent += PBEBattle.ConsoleBattleEventHandler;

            PBETrainer       t0L       = battle.Trainers[0];
            PBETrainer       t0C       = battle.Trainers[1];
            PBETrainer       t0R       = battle.Trainers[2];
            PBETrainer       t1L       = battle.Trainers[3];
            PBETrainer       t1C       = battle.Trainers[4];
            PBETrainer       t1R       = battle.Trainers[5];
            PBEBattlePokemon magikarp0 = t0L.Party[0];
            PBEBattlePokemon golem0    = t0C.Party[0];
            PBEBattlePokemon happiny0  = t0R.Party[0];
            PBEBattlePokemon magikarp1 = t1L.Party[0];
            PBEBattlePokemon golem1    = t1C.Party[0];
            PBEBattlePokemon happiny1  = t1R.Party[0];

            battle.Begin();
            #endregion

            #region Force auto-center and check
            Assert.Null(t0L.SelectActionsIfValid(new PBETurnAction(magikarp0, faintLeft ? PBEMove.Splash : PBEMove.Protect, PBETurnTarget.AllyLeft)));
            Assert.Null(t0C.SelectActionsIfValid(new PBETurnAction(golem0, PBEMove.Explosion, PBETurnTarget.AllyLeft | PBETurnTarget.AllyRight | PBETurnTarget.FoeLeft | PBETurnTarget.FoeCenter | PBETurnTarget.FoeRight)));
            Assert.Null(t0R.SelectActionsIfValid(new PBETurnAction(happiny0, faintLeft ? PBEMove.Protect : PBEMove.Splash, PBETurnTarget.AllyRight)));
            Assert.Null(t1L.SelectActionsIfValid(new PBETurnAction(magikarp1, faintLeft ? PBEMove.Splash : PBEMove.Protect, PBETurnTarget.AllyLeft)));
            Assert.Null(t1C.SelectActionsIfValid(new PBETurnAction(golem1, PBEMove.Explosion, PBETurnTarget.AllyLeft | PBETurnTarget.AllyRight | PBETurnTarget.FoeLeft | PBETurnTarget.FoeCenter | PBETurnTarget.FoeRight)));
            Assert.Null(t1R.SelectActionsIfValid(new PBETurnAction(happiny1, faintLeft ? PBEMove.Protect : PBEMove.Splash, PBETurnTarget.AllyRight)));

            battle.RunTurn();

            Assert.True((faintLeft ? happiny0 : magikarp0).FieldPosition == PBEFieldPosition.Center && (faintLeft ? happiny1 : magikarp1).FieldPosition == PBEFieldPosition.Center);
            #endregion

            #region Cleanup
            battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler;
            #endregion
        }
        public void Explosion_User_Loses_Multiple()
        {
            #region Setup
            PBEDataProvider.GlobalRandom.Seed = 0;
            PBESettings settings = PBESettings.DefaultSettings;

            var p0 = new TestPokemonCollection(3);
            p0[0] = new TestPokemon(settings, PBESpecies.Qwilfish, 0, 1, PBEMove.Splash);
            p0[1] = new TestPokemon(settings, PBESpecies.Golem, 0, 100, PBEMove.Explosion);
            p0[2] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 1, PBEMove.Splash);

            var p1 = new TestPokemonCollection(3);
            p1[0] = new TestPokemon(settings, PBESpecies.Patrat, 0, 1, PBEMove.Splash);
            p1[1] = new TestPokemon(settings, PBESpecies.Lickilicky, 0, 1, PBEMove.Splash);
            p1[2] = new TestPokemon(settings, PBESpecies.Happiny, 0, 1, PBEMove.Splash);

            var battle = new PBEBattle(PBEBattleFormat.Triple, settings, new PBETrainerInfo(p0, "Trainer 0"), new PBETrainerInfo(p1, "Trainer 1"));
            battle.OnNewEvent += PBEBattle.ConsoleBattleEventHandler;

            PBETrainer       t0         = battle.Trainers[0];
            PBETrainer       t1         = battle.Trainers[1];
            PBEBattlePokemon qwilfish   = t0.Party[0];
            PBEBattlePokemon golem      = t0.Party[1];
            PBEBattlePokemon magikarp   = t0.Party[2];
            PBEBattlePokemon patrat     = t1.Party[0];
            PBEBattlePokemon lickilicky = t1.Party[1];
            PBEBattlePokemon happiny    = t1.Party[2];

            battle.Begin();
            #endregion

            #region Use move and check
            Assert.Null(t0.SelectActionsIfValid(
                            new PBETurnAction(qwilfish, PBEMove.Splash, PBETurnTarget.AllyLeft),
                            new PBETurnAction(golem, PBEMove.Explosion, PBETurnTarget.AllyLeft | PBETurnTarget.AllyRight | PBETurnTarget.FoeLeft | PBETurnTarget.FoeCenter | PBETurnTarget.FoeRight),
                            new PBETurnAction(magikarp, PBEMove.Splash, PBETurnTarget.AllyRight)));
            Assert.Null(t1.SelectActionsIfValid(
                            new PBETurnAction(patrat, PBEMove.Splash, PBETurnTarget.AllyLeft),
                            new PBETurnAction(lickilicky, PBEMove.Splash, PBETurnTarget.AllyCenter),
                            new PBETurnAction(happiny, PBEMove.Splash, PBETurnTarget.AllyRight)));

            battle.RunTurn();

            Assert.True(qwilfish.HP == 0 && golem.HP == 0 && magikarp.HP == 0 && patrat.HP == 0 && lickilicky.HP == 0 && happiny.HP == 0 && // All faint
                        battle.BattleResult == PBEBattleResult.Team1Win); // Golem's team loses
            #endregion

            #region Cleanup
            battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler;
            #endregion
        }
Ejemplo n.º 8
0
        public void AutoCenter_Works_MultiBattle(bool left)
        {
            #region Setup
            PBERandom.SetSeed(0);
            PBESettings settings = PBESettings.DefaultSettings;

            var pM = new TestPokemonCollection(1);
            pM[0] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 1, PBEMove.Protect, PBEMove.Splash);
            var pG = new TestPokemonCollection(1);
            pG[0] = new TestPokemon(settings, PBESpecies.Golem, 0, 100, PBEMove.Explosion);
            var pH = new TestPokemonCollection(1);
            pH[0] = new TestPokemon(settings, PBESpecies.Happiny, 0, 1, PBEMove.Protect, PBEMove.Splash);

            var battle = new PBEBattle(PBEBattleFormat.Triple, settings,
                                       new[] { new PBETrainerInfo(pM, "Trainer 0"), new PBETrainerInfo(pG, "Trainer 1"), new PBETrainerInfo(pH, "Trainer 3") },
                                       new[] { new PBETrainerInfo(pM, "Trainer 3"), new PBETrainerInfo(pG, "Trainer 4"), new PBETrainerInfo(pH, "Trainer 5") });
            battle.OnNewEvent += PBEBattle.ConsoleBattleEventHandler;
            battle.Begin();

            PBETrainer       t0M       = battle.Trainers[0];
            PBETrainer       t0G       = battle.Trainers[1];
            PBETrainer       t0H       = battle.Trainers[2];
            PBETrainer       t1M       = battle.Trainers[3];
            PBETrainer       t1G       = battle.Trainers[4];
            PBETrainer       t1H       = battle.Trainers[5];
            PBEBattlePokemon magikarp0 = t0M.Party[0];
            PBEBattlePokemon golem0    = t0G.Party[0];
            PBEBattlePokemon happiny0  = t0H.Party[0];
            PBEBattlePokemon magikarp1 = t1M.Party[0];
            PBEBattlePokemon golem1    = t1G.Party[0];
            PBEBattlePokemon happiny1  = t1H.Party[0];
            #endregion

            #region Force auto-center and check
            Assert.True(PBEBattle.SelectActionsIfValid(t0M, new PBETurnAction(magikarp0, left ? PBEMove.Splash : PBEMove.Protect, PBETurnTarget.AllyLeft)));
            Assert.True(PBEBattle.SelectActionsIfValid(t0G, new PBETurnAction(golem0, PBEMove.Explosion, PBETurnTarget.AllyLeft | PBETurnTarget.AllyRight | PBETurnTarget.FoeLeft | PBETurnTarget.FoeCenter | PBETurnTarget.FoeRight)));
            Assert.True(PBEBattle.SelectActionsIfValid(t0H, new PBETurnAction(happiny0, left ? PBEMove.Protect : PBEMove.Splash, PBETurnTarget.AllyRight)));
            Assert.True(PBEBattle.SelectActionsIfValid(t1M, new PBETurnAction(magikarp1, left ? PBEMove.Splash : PBEMove.Protect, PBETurnTarget.AllyLeft)));
            Assert.True(PBEBattle.SelectActionsIfValid(t1G, new PBETurnAction(golem1, PBEMove.Explosion, PBETurnTarget.AllyLeft | PBETurnTarget.AllyRight | PBETurnTarget.FoeLeft | PBETurnTarget.FoeCenter | PBETurnTarget.FoeRight)));
            Assert.True(PBEBattle.SelectActionsIfValid(t1H, new PBETurnAction(happiny1, left ? PBEMove.Protect : PBEMove.Splash, PBETurnTarget.AllyRight)));

            battle.RunTurn();

            Assert.True((left ? happiny0 : magikarp0).FieldPosition == PBEFieldPosition.Center && (left ? happiny1 : magikarp1).FieldPosition == PBEFieldPosition.Center);
            #endregion

            #region Cleanup
            battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler;
            #endregion
        }
Ejemplo n.º 9
0
        public void AutoCenter_Works(bool faintLeft)
        {
            #region Setup
            PBEDataProvider.GlobalRandom.Seed = 0;
            PBESettings settings = PBESettings.DefaultSettings;

            var p = new TestPokemonCollection(3);
            p[0] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 1, PBEMove.Protect, PBEMove.Splash);
            p[1] = new TestPokemon(settings, PBESpecies.Golem, 0, 100, PBEMove.Explosion);
            p[2] = new TestPokemon(settings, PBESpecies.Happiny, 0, 1, PBEMove.Protect, PBEMove.Splash);

            var battle = PBEBattle.CreateTrainerBattle(PBEBattleFormat.Triple, settings, new PBETrainerInfo(p, "Trainer 0", false), new PBETrainerInfo(p, "Trainer 1", false));
            battle.OnNewEvent += PBEBattle.ConsoleBattleEventHandler;

            PBETrainer       t0        = battle.Trainers[0];
            PBETrainer       t1        = battle.Trainers[1];
            PBEBattlePokemon magikarp0 = t0.Party[0];
            PBEBattlePokemon golem0    = t0.Party[1];
            PBEBattlePokemon happiny0  = t0.Party[2];
            PBEBattlePokemon magikarp1 = t1.Party[0];
            PBEBattlePokemon golem1    = t1.Party[1];
            PBEBattlePokemon happiny1  = t1.Party[2];

            battle.Begin();
            #endregion

            #region Force auto-center and check
            Assert.True(t0.SelectActionsIfValid(out _,
                                                new PBETurnAction(magikarp0, faintLeft ? PBEMove.Splash : PBEMove.Protect, PBETurnTarget.AllyLeft),
                                                new PBETurnAction(golem0, PBEMove.Explosion, PBETurnTarget.AllyLeft | PBETurnTarget.AllyRight | PBETurnTarget.FoeLeft | PBETurnTarget.FoeCenter | PBETurnTarget.FoeRight),
                                                new PBETurnAction(happiny0, faintLeft ? PBEMove.Protect : PBEMove.Splash, PBETurnTarget.AllyRight)));
            Assert.True(t1.SelectActionsIfValid(out _,
                                                new PBETurnAction(magikarp1, faintLeft ? PBEMove.Splash : PBEMove.Protect, PBETurnTarget.AllyLeft),
                                                new PBETurnAction(golem1, PBEMove.Explosion, PBETurnTarget.AllyLeft | PBETurnTarget.AllyRight | PBETurnTarget.FoeLeft | PBETurnTarget.FoeCenter | PBETurnTarget.FoeRight),
                                                new PBETurnAction(happiny1, faintLeft ? PBEMove.Protect : PBEMove.Splash, PBETurnTarget.AllyRight)));

            battle.RunTurn();

            Assert.True((faintLeft ? happiny0 : magikarp0).FieldPosition == PBEFieldPosition.Center && (faintLeft ? happiny1 : magikarp1).FieldPosition == PBEFieldPosition.Center);
            #endregion

            #region Cleanup
            battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler;
            #endregion
        }
Ejemplo n.º 10
0
        public void Cannot_Send_Egg()
        {
            #region Setup
            PBEDataProvider.GlobalRandom.Seed = 0;
            PBESettings settings = PBESettings.DefaultSettings;

            var p0 = new TestPokemonCollection(3);
            p0[0] = new TestPokemon(settings, PBESpecies.Koffing, 0, 100, PBEMove.Selfdestruct);
            p0[1] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 1, PBEMove.Splash)
            {
                PBEIgnore = true
            };
            p0[2] = new TestPokemon(settings, PBESpecies.Happiny, 0, 100, PBEMove.Splash);

            var p1 = new TestPokemonCollection(1);
            p1[0] = new TestPokemon(settings, PBESpecies.Darkrai, 0, 100, PBEMove.Protect);

            var battle = PBEBattle.CreateTrainerBattle(PBEBattleFormat.Single, settings, new PBETrainerInfo(p0, "Trainer 0", false), new PBETrainerInfo(p1, "Trainer 1", false));
            battle.OnNewEvent += PBEBattle.ConsoleBattleEventHandler;

            PBETrainer       t0       = battle.Trainers[0];
            PBETrainer       t1       = battle.Trainers[1];
            PBEBattlePokemon koffing  = t0.Party[0];
            PBEBattlePokemon magikarp = t0.Party[1];
            PBEBattlePokemon darkrai  = t1.Party[0];

            battle.Begin();
            #endregion

            #region Darkrai uses Protect, Koffing uses Selfdestruct and faints
            Assert.True(t0.SelectActionsIfValid(out _, new PBETurnAction(koffing, PBEMove.Selfdestruct, PBETurnTarget.FoeCenter)));
            Assert.True(t1.SelectActionsIfValid(out _, new PBETurnAction(darkrai, PBEMove.Protect, PBETurnTarget.AllyCenter)));

            battle.RunTurn();
            #endregion

            #region Check
            Assert.False(t0.SelectSwitchesIfValid(out _, new PBESwitchIn(magikarp, PBEFieldPosition.Center)));
            #endregion

            #region Cleanup
            battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler;
            #endregion
        }
Ejemplo n.º 11
0
        public void Lose_If_Remaining_Ignored()
        {
            #region Setup
            PBEDataProvider.GlobalRandom.Seed = 0;
            PBESettings settings = PBESettings.DefaultSettings;

            var p0 = new TestPokemonCollection(2);
            p0[0] = new TestPokemon(settings, PBESpecies.Koffing, 0, 100, PBEMove.Selfdestruct);
            p0[1] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 1, PBEMove.Splash)
            {
                PBEIgnore = true
            };

            var p1 = new TestPokemonCollection(1);
            p1[0] = new TestPokemon(settings, PBESpecies.Darkrai, 0, 100, PBEMove.Protect);

            var battle = PBEBattle.CreateTrainerBattle(PBEBattleFormat.Single, settings, new PBETrainerInfo(p0, "Trainer 0", false), new PBETrainerInfo(p1, "Trainer 1", false));
            battle.OnNewEvent += PBEBattle.ConsoleBattleEventHandler;

            PBETrainer       t0       = battle.Trainers[0];
            PBETrainer       t1       = battle.Trainers[1];
            PBEBattlePokemon koffing  = t0.Party[0];
            PBEBattlePokemon magikarp = t0.Party[1];
            PBEBattlePokemon darkrai  = t1.Party[0];

            battle.Begin();
            #endregion

            #region Darkrai uses Protect, Koffing uses Selfdestruct and faints
            Assert.True(t0.SelectActionsIfValid(out _, new PBETurnAction(koffing, PBEMove.Selfdestruct, PBETurnTarget.FoeCenter)));
            Assert.True(t1.SelectActionsIfValid(out _, new PBETurnAction(darkrai, PBEMove.Protect, PBETurnTarget.AllyCenter)));

            battle.RunTurn();
            #endregion

            #region Check
            Assert.True(koffing.HP == 0 && magikarp.HP > 0 &&
                        battle.BattleResult == PBEBattleResult.Team1Win); // Koffing's team loses
            #endregion

            #region Cleanup
            battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler;
            #endregion
        }
        public void LeechSeed_And_LiquidOoze()
        {
            #region Setup
            PBEDataProvider.GlobalRandom.Seed = 0; // Seed ensures LeechSeed doesn't miss
            var settings = new PBESettings {
                LeechSeedDenominator = 1
            };
            settings.MakeReadOnly();

            var p0 = new TestPokemonCollection(1);
            p0[0] = new TestPokemon(settings, PBESpecies.Shroomish, 0, 1, PBEMove.LeechSeed);

            var p1 = new TestPokemonCollection(1);
            p1[0] = new TestPokemon(settings, PBESpecies.Tentacruel, 0, 100, PBEMove.Splash)
            {
                Ability = PBEAbility.LiquidOoze
            };

            var battle = new PBEBattle(PBEBattleFormat.Single, settings, new PBETrainerInfo(p0, "Trainer 0"), new PBETrainerInfo(p1, "Trainer 1"));
            battle.OnNewEvent += PBEBattle.ConsoleBattleEventHandler;

            PBETrainer       t0         = battle.Trainers[0];
            PBETrainer       t1         = battle.Trainers[1];
            PBEBattlePokemon shroomish  = t0.Party[0];
            PBEBattlePokemon tentacruel = t1.Party[0];

            battle.Begin();
            #endregion

            #region Use LeechSeed and check
            Assert.Null(t0.SelectActionsIfValid(new PBETurnAction(shroomish, PBEMove.LeechSeed, PBETurnTarget.FoeCenter)));
            Assert.Null(t1.SelectActionsIfValid(new PBETurnAction(tentacruel, PBEMove.Splash, PBETurnTarget.AllyCenter)));

            battle.RunTurn();

            Assert.True(shroomish.HP == 0 && tentacruel.HP == 0 && // Both fainted
                        battle.BattleResult == PBEBattleResult.Team0Win); // Shroomish's team wins
            #endregion

            #region Cleanup
            battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler;
            #endregion
        }
        public void IronBarbs_User_Loses()
        {
            #region Setup
            PBEDataProvider.GlobalRandom.Seed = 0;
            PBESettings settings = PBESettings.DefaultSettings;

            var p0 = new TestPokemonCollection(1);
            p0[0] = new TestPokemon(settings, PBESpecies.Lucario, 0, 100, PBEMove.Pound);

            var p1 = new TestPokemonCollection(1);
            p1[0] = new TestPokemon(settings, PBESpecies.Ferroseed, 0, 1, PBEMove.Splash)
            {
                Ability = PBEAbility.IronBarbs
            };

            var battle = new PBEBattle(PBEBattleFormat.Single, settings, new PBETrainerInfo(p0, "Trainer 0"), new PBETrainerInfo(p1, "Trainer 1"));
            battle.OnNewEvent += PBEBattle.ConsoleBattleEventHandler;

            PBETrainer       t0        = battle.Trainers[0];
            PBETrainer       t1        = battle.Trainers[1];
            PBEBattlePokemon lucario   = t0.Party[0];
            PBEBattlePokemon ferroseed = t1.Party[0];
            lucario.HP = 1;
            lucario.UpdateHPPercentage();

            battle.Begin();
            #endregion

            #region Use Pound and check
            Assert.Null(t0.SelectActionsIfValid(new PBETurnAction(lucario, PBEMove.Pound, PBETurnTarget.FoeCenter)));
            Assert.Null(t1.SelectActionsIfValid(new PBETurnAction(ferroseed, PBEMove.Splash, PBETurnTarget.AllyCenter)));

            battle.RunTurn();

            Assert.True(lucario.HP == 0 && ferroseed.HP == 0 && // Both fainted
                        battle.BattleResult == PBEBattleResult.Team1Win); // Ferroseed's team wins
            #endregion

            #region Cleanup
            battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler;
            #endregion
        }
        public void LifeOrb_User_Wins()
        {
            #region Setup
            PBEDataProvider.GlobalRandom.Seed = 0;
            PBESettings settings = PBESettings.DefaultSettings;

            var p0 = new TestPokemonCollection(1);
            p0[0] = new TestPokemon(settings, PBESpecies.Riolu, 0, 100, PBEMove.VacuumWave)
            {
                Item = PBEItem.LifeOrb
            };

            var p1 = new TestPokemonCollection(1);
            p1[0] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 1, PBEMove.Splash);

            var battle = new PBEBattle(PBEBattleFormat.Single, settings, new PBETrainerInfo(p0, "Trainer 0"), new PBETrainerInfo(p1, "Trainer 1"));
            battle.OnNewEvent += PBEBattle.ConsoleBattleEventHandler;

            PBETrainer       t0       = battle.Trainers[0];
            PBETrainer       t1       = battle.Trainers[1];
            PBEBattlePokemon riolu    = t0.Party[0];
            PBEBattlePokemon magikarp = t1.Party[0];
            riolu.HP = 1;
            riolu.UpdateHPPercentage();

            battle.Begin();
            #endregion

            #region Use HeadCharge and check
            Assert.Null(t0.SelectActionsIfValid(new PBETurnAction(riolu, PBEMove.VacuumWave, PBETurnTarget.FoeCenter)));
            Assert.Null(t1.SelectActionsIfValid(new PBETurnAction(magikarp, PBEMove.Splash, PBETurnTarget.AllyCenter)));

            battle.RunTurn();

            Assert.True(riolu.HP == 0 && magikarp.HP == 0 && // Both fainted
                        battle.BattleResult == PBEBattleResult.Team0Win); // Bouffalant's team wins
            #endregion

            #region Cleanup
            battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler;
            #endregion
        }
        public void HPDrain_And_LiquidOoze()
        {
            #region Setup
            PBEDataProvider.GlobalRandom.Seed = 0;
            PBESettings settings = PBESettings.DefaultSettings;

            var p0 = new TestPokemonCollection(1);
            p0[0] = new TestPokemon(settings, PBESpecies.Deoxys, PBEForm.Deoxys_Attack, 100, PBEMove.DrainPunch);

            var p1 = new TestPokemonCollection(1);
            p1[0] = new TestPokemon(settings, PBESpecies.Blissey, 0, 100, PBEMove.Splash)
            {
                Ability = PBEAbility.LiquidOoze
            };

            var battle = new PBEBattle(PBEBattleFormat.Single, settings, new PBETrainerInfo(p0, "Trainer 0"), new PBETrainerInfo(p1, "Trainer 1"));
            battle.OnNewEvent += PBEBattle.ConsoleBattleEventHandler;

            PBETrainer       t0      = battle.Trainers[0];
            PBETrainer       t1      = battle.Trainers[1];
            PBEBattlePokemon deoxys  = t0.Party[0];
            PBEBattlePokemon blissey = t1.Party[0];

            battle.Begin();
            #endregion

            #region Use DrainPunch and check
            Assert.Null(t0.SelectActionsIfValid(new PBETurnAction(deoxys, PBEMove.DrainPunch, PBETurnTarget.FoeCenter)));
            Assert.Null(t1.SelectActionsIfValid(new PBETurnAction(blissey, PBEMove.Splash, PBETurnTarget.AllyCenter)));

            battle.RunTurn();

            Assert.True(deoxys.HP == 0 && blissey.HP == 0 && // Both fainted
                        battle.BattleResult == PBEBattleResult.Team1Win); // Blissey's team wins
            #endregion

            #region Cleanup
            battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler;
            #endregion
        }
Ejemplo n.º 16
0
        public void Recoil_User_Wins()
        {
            #region Setup
            PBEDataProvider.GlobalRandom.Seed = 0;
            PBESettings settings = PBESettings.DefaultSettings;

            var p0 = new TestPokemonCollection(1);
            p0[0] = new TestPokemon(settings, PBESpecies.Bouffalant, 0, 100, PBEMove.HeadCharge);

            var p1 = new TestPokemonCollection(1);
            p1[0] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 1, PBEMove.Splash);

            var battle = PBEBattle.CreateTrainerBattle(PBEBattleFormat.Single, settings, new PBETrainerInfo(p0, "Trainer 0", false), new PBETrainerInfo(p1, "Trainer 1", false));
            battle.OnNewEvent += PBEBattle.ConsoleBattleEventHandler;

            PBETrainer       t0         = battle.Trainers[0];
            PBETrainer       t1         = battle.Trainers[1];
            PBEBattlePokemon bouffalant = t0.Party[0];
            PBEBattlePokemon magikarp   = t1.Party[0];
            bouffalant.HP = 1;
            bouffalant.UpdateHPPercentage();

            battle.Begin();
            #endregion

            #region Use HeadCharge and check
            Assert.True(t0.SelectActionsIfValid(out _, new PBETurnAction(bouffalant, PBEMove.HeadCharge, PBETurnTarget.FoeCenter)));
            Assert.True(t1.SelectActionsIfValid(out _, new PBETurnAction(magikarp, PBEMove.Splash, PBETurnTarget.AllyCenter)));

            battle.RunTurn();

            Assert.True(bouffalant.HP == 0 && magikarp.HP == 0 && // Both fainted
                        battle.BattleResult == PBEBattleResult.Team0Win); // Bouffalant's team wins
            #endregion

            #region Cleanup
            battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler;
            #endregion
        }
Ejemplo n.º 17
0
        public void FinalGambit_User_Loses()
        {
            #region Setup
            PBEDataProvider.GlobalRandom.Seed = 0;
            PBESettings settings = PBESettings.DefaultSettings;

            var p0 = new TestPokemonCollection(1);
            p0[0] = new TestPokemon(settings, PBESpecies.Staraptor, 0, 100, PBEMove.FinalGambit);

            var p1 = new TestPokemonCollection(1);
            p1[0] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 1, PBEMove.Splash);

            var battle = PBEBattle.CreateTrainerBattle(PBEBattleFormat.Single, settings, new PBETrainerInfo(p0, "Trainer 0", false), new PBETrainerInfo(p1, "Trainer 1", false));
            battle.OnNewEvent += PBEBattle.ConsoleBattleEventHandler;

            PBETrainer       t0        = battle.Trainers[0];
            PBETrainer       t1        = battle.Trainers[1];
            PBEBattlePokemon staraptor = t0.Party[0];
            PBEBattlePokemon magikarp  = t1.Party[0];

            battle.Begin();
            #endregion

            #region Use FinalGambit and check
            Assert.True(t0.SelectActionsIfValid(out _, new PBETurnAction(staraptor, PBEMove.FinalGambit, PBETurnTarget.FoeCenter)));
            Assert.True(t1.SelectActionsIfValid(out _, new PBETurnAction(magikarp, PBEMove.Splash, PBETurnTarget.AllyCenter)));

            battle.RunTurn();

            Assert.True(staraptor.HP == 0 && magikarp.HP == 0 && // Both fainted
                        battle.BattleResult == PBEBattleResult.Team1Win); // Magikarp's team wins
            #endregion

            #region Cleanup
            battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler;
            #endregion
        }
        public void Explosion_User_Loses_Single()
        {
            #region Setup
            PBEDataProvider.GlobalRandom.Seed = 0;
            PBESettings settings = PBESettings.DefaultSettings;

            var p0 = new TestPokemonCollection(1);
            p0[0] = new TestPokemon(settings, PBESpecies.Golem, 0, 100, PBEMove.Explosion);

            var p1 = new TestPokemonCollection(1);
            p1[0] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 1, PBEMove.Splash);

            var battle = new PBEBattle(PBEBattleFormat.Single, settings, new PBETrainerInfo(p0, "Trainer 0"), new PBETrainerInfo(p1, "Trainer 1"));
            battle.OnNewEvent += PBEBattle.ConsoleBattleEventHandler;

            PBETrainer       t0       = battle.Trainers[0];
            PBETrainer       t1       = battle.Trainers[1];
            PBEBattlePokemon golem    = t0.Party[0];
            PBEBattlePokemon magikarp = t1.Party[0];

            battle.Begin();
            #endregion

            #region Use move and check
            Assert.Null(t0.SelectActionsIfValid(new PBETurnAction(golem, PBEMove.Explosion, PBETurnTarget.FoeCenter)));
            Assert.Null(t1.SelectActionsIfValid(new PBETurnAction(magikarp, PBEMove.Splash, PBETurnTarget.AllyCenter)));

            battle.RunTurn();

            Assert.True(golem.HP == 0 && magikarp.HP == 0 && // All faint
                        battle.BattleResult == PBEBattleResult.Team1Win); // Golem's team loses
            #endregion

            #region Cleanup
            battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler;
            #endregion
        }
Ejemplo n.º 19
0
        public void Cannot_Switch_In_Egg()
        {
            #region Setup
            PBEDataProvider.GlobalRandom.Seed = 0;
            PBESettings settings = PBESettings.DefaultSettings;

            var p0 = new TestPokemonCollection(2);
            p0[0] = new TestPokemon(settings, PBESpecies.Koffing, 0, 100, PBEMove.Selfdestruct);
            p0[1] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 1, PBEMove.Splash)
            {
                PBEIgnore = true
            };

            var p1 = new TestPokemonCollection(1);
            p1[0] = new TestPokemon(settings, PBESpecies.Darkrai, 0, 100, PBEMove.Protect);

            var battle = PBEBattle.CreateTrainerBattle(PBEBattleFormat.Single, settings, new PBETrainerInfo(p0, "Trainer 0", false), new PBETrainerInfo(p1, "Trainer 1", false));
            battle.OnNewEvent += PBEBattle.ConsoleBattleEventHandler;

            PBETrainer       t0       = battle.Trainers[0];
            PBETrainer       t1       = battle.Trainers[1];
            PBEBattlePokemon koffing  = t0.Party[0];
            PBEBattlePokemon magikarp = t0.Party[1];
            PBEBattlePokemon darkrai  = t1.Party[0];

            battle.Begin();
            #endregion

            #region Check
            Assert.False(t0.SelectActionsIfValid(out _, new PBETurnAction(koffing, magikarp)));
            #endregion

            #region Cleanup
            battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler;
            #endregion
        }
Ejemplo n.º 20
0
        public void AutoCenter_Works_Despite_Available(bool faintLeft)
        {
            #region Setup
            PBEDataProvider.GlobalRandom.Seed = 2; // Seed ensures protect doesn't fail
            PBESettings settings = PBESettings.DefaultSettings;

            var p0L = new TestPokemonCollection(faintLeft ? 1 : 2);
            var p0C = new TestPokemonCollection(1);
            var p0R = new TestPokemonCollection(faintLeft ? 2 : 1);
            var p1  = new TestPokemonCollection(4);
            p0L[0] = p1[0] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 1, PBEMove.Protect, PBEMove.Splash);
            p0C[0] = p1[1] = new TestPokemon(settings, PBESpecies.Golem, 0, 100, PBEMove.Explosion);
            p0R[0] = p1[2] = new TestPokemon(settings, PBESpecies.Happiny, 0, 1, PBEMove.Protect, PBEMove.Splash);
            (faintLeft ? p0R : p0L)[1] = p1[3] = new TestPokemon(settings, PBESpecies.Weezing, 0, 100, PBEMove.Explosion);

            var battle = new PBEBattle(PBEBattleFormat.Triple, settings,
                                       new[] { new PBETrainerInfo(p0L, "Trainer 0"), new PBETrainerInfo(p0C, "Trainer 1"), new PBETrainerInfo(p0R, "Trainer 2") },
                                       new[] { new PBETrainerInfo(p1, "Trainer 3") });
            battle.OnNewEvent += PBEBattle.ConsoleBattleEventHandler;

            PBETrainer       t0L       = battle.Trainers[0];
            PBETrainer       t0C       = battle.Trainers[1];
            PBETrainer       t0R       = battle.Trainers[2];
            PBETrainer       t1        = battle.Trainers[3];
            PBEBattlePokemon magikarp0 = t0L.Party[0];
            PBEBattlePokemon golem0    = t0C.Party[0];
            PBEBattlePokemon happiny0  = t0R.Party[0];
            PBEBattlePokemon weezing0  = (faintLeft ? t0R : t0L).Party[1];
            PBEBattlePokemon magikarp1 = t1.Party[0];
            PBEBattlePokemon golem1    = t1.Party[1];
            PBEBattlePokemon happiny1  = t1.Party[2];
            PBEBattlePokemon weezing1  = t1.Party[3];

            battle.Begin();
            #endregion

            #region Force switch-in from trainer 3
            Assert.Null(t0L.SelectActionsIfValid(
                            new PBETurnAction(magikarp0, faintLeft ? PBEMove.Splash : PBEMove.Protect, PBETurnTarget.AllyLeft)));
            Assert.Null(t0C.SelectActionsIfValid(
                            new PBETurnAction(golem0, PBEMove.Explosion, PBETurnTarget.AllyLeft | PBETurnTarget.AllyRight | PBETurnTarget.FoeLeft | PBETurnTarget.FoeCenter | PBETurnTarget.FoeRight)));
            Assert.Null(t0R.SelectActionsIfValid(
                            new PBETurnAction(happiny0, faintLeft ? PBEMove.Protect : PBEMove.Splash, PBETurnTarget.AllyRight)));
            Assert.Null(t1.SelectActionsIfValid(
                            new PBETurnAction(magikarp1, faintLeft ? PBEMove.Splash : PBEMove.Protect, PBETurnTarget.AllyLeft),
                            new PBETurnAction(golem1, PBEMove.Explosion, PBETurnTarget.AllyLeft | PBETurnTarget.AllyRight | PBETurnTarget.FoeLeft | PBETurnTarget.FoeCenter | PBETurnTarget.FoeRight),
                            new PBETurnAction(happiny1, faintLeft ? PBEMove.Protect : PBEMove.Splash, PBETurnTarget.AllyRight)));

            battle.RunTurn();

            Assert.False((faintLeft ? happiny0 : magikarp0).FieldPosition == PBEFieldPosition.Center && (faintLeft ? happiny1 : magikarp1).FieldPosition == PBEFieldPosition.Center);
            Assert.True(t0L.SwitchInsRequired == 0 && t0C.SwitchInsRequired == 0 && t0R.SwitchInsRequired == 0 && t1.SwitchInsRequired == 1);
            #endregion

            #region Switch-in
            Assert.Null(t1.SelectSwitchesIfValid(
                            new PBESwitchIn(weezing1, PBEFieldPosition.Center)));

            battle.RunSwitches();
            #endregion

            #region Force auto-center and check
            Assert.Null((faintLeft ? t0R : t0L).SelectActionsIfValid(
                            new PBETurnAction(faintLeft ? happiny0 : magikarp0, PBEMove.Protect, faintLeft ? PBETurnTarget.AllyRight : PBETurnTarget.AllyLeft)));
            Assert.Null(t1.SelectActionsIfValid(
                            new PBETurnAction(weezing1, PBEMove.Explosion, PBETurnTarget.AllyLeft | PBETurnTarget.AllyRight | PBETurnTarget.FoeLeft | PBETurnTarget.FoeCenter | PBETurnTarget.FoeRight),
                            new PBETurnAction(faintLeft ? happiny1 : magikarp1, PBEMove.Protect, faintLeft ? PBETurnTarget.AllyRight : PBETurnTarget.AllyLeft)));

            battle.RunTurn();

            Assert.True((faintLeft ? happiny0 : magikarp0).FieldPosition == PBEFieldPosition.Center && (faintLeft ? happiny1 : magikarp1).FieldPosition == PBEFieldPosition.Center);
            #endregion

            #region Cleanup
            battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler;
            #endregion
        }
Ejemplo n.º 21
0
        public void AutoCenter_ActivatesFromHazard()
        {
            #region Setup
            PBEDataProvider.GlobalRandom.Seed = 2; // Seed ensures Regigigas doesn't flinch and Rock Slide hits
            PBESettings settings = PBESettings.DefaultSettings;

            var p0 = new TestPokemonCollection(5);
            p0[0] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 1, PBEMove.Splash)
            {
                Item = PBEItem.FocusSash
            };
            p0[1] = new TestPokemon(settings, PBESpecies.Munchlax, 0, 1, PBEMove.Splash)
            {
                Item = PBEItem.FocusSash
            };
            p0[2] = new TestPokemon(settings, PBESpecies.Happiny, 0, 1, PBEMove.Splash);
            p0[3] = new TestPokemon(settings, PBESpecies.Regigigas, 0, 10, PBEMove.Explosion)
            {
                Ability = PBEAbility.SlowStart
            };
            p0[4] = new TestPokemon(settings, PBESpecies.Mudkip, 0, 1, PBEMove.Splash);

            var p1 = new TestPokemonCollection(3);
            p1[0] = new TestPokemon(settings, PBESpecies.Budew, 0, 1, PBEMove.Splash);
            p1[1] = new TestPokemon(settings, PBESpecies.Butterfree, 0, 10, PBEMove.RockSlide, PBEMove.Splash)
            {
                Ability = PBEAbility.Compoundeyes
            };
            p1[2] = new TestPokemon(settings, PBESpecies.Sunkern, 0, 1, PBEMove.Splash, PBEMove.StealthRock);

            var battle = new PBEBattle(PBEBattleFormat.Triple, settings, new PBETrainerInfo(p0, "Trainer 0"), new PBETrainerInfo(p1, "Trainer 1"));
            battle.OnNewEvent += PBEBattle.ConsoleBattleEventHandler;

            PBETrainer       t0         = battle.Trainers[0];
            PBETrainer       t1         = battle.Trainers[1];
            PBEBattlePokemon magikarp   = t0.Party[0];
            PBEBattlePokemon munchlax   = t0.Party[1];
            PBEBattlePokemon happiny    = t0.Party[2];
            PBEBattlePokemon regigigas  = t0.Party[3];
            PBEBattlePokemon mudkip     = t0.Party[4];
            PBEBattlePokemon budew      = t1.Party[0];
            PBEBattlePokemon butterfree = t1.Party[1];
            PBEBattlePokemon sunkern    = t1.Party[2];
            happiny.HP = 1; // Set Happiny HP to 1 so it faints on switch
            happiny.UpdateHPPercentage();

            battle.Begin();
            #endregion

            #region Set up Stealth Rock while lowering HP, swap Happiny for Regigigas
            Assert.Null(t0.SelectActionsIfValid(
                            new PBETurnAction(magikarp, PBEMove.Splash, PBETurnTarget.AllyLeft),
                            new PBETurnAction(munchlax, PBEMove.Splash, PBETurnTarget.AllyCenter),
                            new PBETurnAction(happiny, regigigas)));
            Assert.Null(t1.SelectActionsIfValid(
                            new PBETurnAction(budew, PBEMove.Splash, PBETurnTarget.AllyLeft),
                            new PBETurnAction(butterfree, PBEMove.RockSlide, PBETurnTarget.FoeLeft | PBETurnTarget.FoeCenter | PBETurnTarget.FoeRight),
                            new PBETurnAction(sunkern, PBEMove.StealthRock, PBETurnTarget.FoeLeft | PBETurnTarget.FoeCenter | PBETurnTarget.FoeRight)));

            battle.RunTurn();

            Assert.True(t0.Team.TeamStatus.HasFlag(PBETeamStatus.StealthRock));
            #endregion

            #region Yeet everyone
            Assert.Null(t0.SelectActionsIfValid(
                            new PBETurnAction(magikarp, PBEMove.Splash, PBETurnTarget.AllyLeft),
                            new PBETurnAction(munchlax, PBEMove.Splash, PBETurnTarget.AllyCenter),
                            new PBETurnAction(regigigas, PBEMove.Explosion, PBETurnTarget.AllyCenter | PBETurnTarget.FoeLeft | PBETurnTarget.FoeCenter)));
            Assert.Null(t1.SelectActionsIfValid(
                            new PBETurnAction(budew, PBEMove.Splash, PBETurnTarget.AllyLeft),
                            new PBETurnAction(butterfree, PBEMove.RockSlide, PBETurnTarget.FoeLeft | PBETurnTarget.FoeCenter | PBETurnTarget.FoeRight),
                            new PBETurnAction(sunkern, PBEMove.Splash, PBETurnTarget.AllyRight)));

            battle.RunTurn();

            Assert.True(magikarp.HP == 0 && munchlax.HP == 0 && regigigas.HP == 0 && budew.HP == 0 && butterfree.HP == 0 &&
                        happiny.HP != 0 && mudkip.HP != 0 && sunkern.HP != 0);
            #endregion

            #region Switch in and check
            Assert.Null(t0.SelectSwitchesIfValid(
                            new PBESwitchIn(happiny, PBEFieldPosition.Center),
                            new PBESwitchIn(mudkip, PBEFieldPosition.Right)));

            battle.RunSwitches();

            Assert.True(happiny.HP == 0 && mudkip.FieldPosition == PBEFieldPosition.Center && sunkern.FieldPosition == PBEFieldPosition.Center);
            #endregion

            #region Cleanup
            battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler;
            #endregion
        }