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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }