public void Camouflage_Fails() { #region Setup PBERandom.SetSeed(0); PBESettings settings = PBESettings.DefaultSettings; var p0 = new TestPokemonCollection(1); p0[0] = new TestPokemon(settings, PBESpecies.Staryu, 0, 100, PBEMove.Camouflage); var p1 = new TestPokemonCollection(1); p1[0] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 100, PBEMove.Splash); var battle = new PBEBattle(PBEBattleFormat.Single, settings, new PBETrainerInfo(p0, "Trainer 0"), new PBETrainerInfo(p1, "Trainer 1"), battleTerrain: PBEBattleTerrain.Water); battle.OnNewEvent += PBEBattle.ConsoleBattleEventHandler; battle.Begin(); PBETrainer t0 = battle.Trainers[0]; PBETrainer t1 = battle.Trainers[1]; PBEBattlePokemon staryu = t0.Party[0]; PBEBattlePokemon magikarp = t1.Party[0]; #endregion #region Use Camouflage and check Assert.True(PBEBattle.SelectActionsIfValid(t0, new PBETurnAction(staryu, PBEMove.Camouflage, PBETurnTarget.AllyCenter))); Assert.True(PBEBattle.SelectActionsIfValid(t1, new PBETurnAction(magikarp, PBEMove.Splash, PBETurnTarget.AllyCenter))); battle.RunTurn(); Assert.True(battle.VerifyMoveResultHappened(staryu, staryu, PBEResult.InvalidConditions)); #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }
public void Illusion_Does_Copy_Active_Trainer_Teammate() { #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(2); p1[0] = new TestPokemon(settings, PBESpecies.Zoroark, 0, 100, PBEMove.Splash) { Ability = PBEAbility.Illusion }; p1[1] = p0[0]; var battle = PBEBattle.CreateTrainerBattle(PBEBattleFormat.Double, settings, new PBETrainerInfo(p0, "Trainer 0", false), new PBETrainerInfo(p1, "Trainer 1", false)); battle.OnNewEvent += PBEBattle.ConsoleBattleEventHandler; PBETrainer t1 = battle.Trainers[1]; PBEBattlePokemon zoroark = t1.Party[0]; battle.Begin(); #endregion #region Check Assert.True(zoroark.Status2.HasFlag(PBEStatus2.Disguised)); #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }
public void Camouflage_Works(PBEBattleTerrain battleTerrain, PBEType expectedType, PBESpecies species) { #region Setup PBERandom.SetSeed(0); PBESettings settings = PBESettings.DefaultSettings; var p0 = new TestPokemonCollection(1); p0[0] = new TestPokemon(settings, species, 0, 100, PBEMove.Camouflage); var p1 = new TestPokemonCollection(1); p1[0] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 100, PBEMove.Splash); var battle = new PBEBattle(PBEBattleFormat.Single, settings, new PBETrainerInfo(p0, "Trainer 0"), new PBETrainerInfo(p1, "Trainer 1"), battleTerrain: battleTerrain); battle.OnNewEvent += PBEBattle.ConsoleBattleEventHandler; battle.Begin(); PBETrainer t0 = battle.Trainers[0]; PBETrainer t1 = battle.Trainers[1]; PBEBattlePokemon camouflager = t0.Party[0]; PBEBattlePokemon magikarp = t1.Party[0]; #endregion #region Use Camouflage and check Assert.True(PBEBattle.SelectActionsIfValid(t0, new PBETurnAction(camouflager, PBEMove.Camouflage, PBETurnTarget.AllyCenter))); Assert.True(PBEBattle.SelectActionsIfValid(t1, new PBETurnAction(magikarp, PBEMove.Splash, PBETurnTarget.AllyCenter))); battle.RunTurn(); Assert.True(camouflager.Type1 == expectedType && camouflager.Type2 == PBEType.None); #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }
public void TeamProtection_Works(PBEMove move, PBEMove move2, PBETeamStatus teamStatus) { #region Setup PBERandom.SetSeed(0); PBESettings settings = PBESettings.DefaultSettings; var p0 = new TestPokemonCollection(1); p0[0] = new TestPokemon(settings, PBESpecies.Mienshao, 0, 100, move); var p1 = new TestPokemonCollection(1); p1[0] = new TestPokemon(settings, PBESpecies.Lucario, 0, 100, move2); 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 mienshao = t0.Party[0]; PBEBattlePokemon lucario = t1.Party[0]; #endregion #region Use move and check Assert.True(PBEBattle.SelectActionsIfValid(t0, new PBETurnAction(mienshao, move, PBETurnTarget.AllyCenter))); Assert.True(PBEBattle.SelectActionsIfValid(t1, new PBETurnAction(lucario, move2, PBETurnTarget.FoeCenter))); battle.RunTurn(); Assert.True(battle.VerifyTeamStatusHappened(t0.Team, teamStatus, PBETeamStatusAction.Damage, damageVictim: mienshao) && !t0.Team.TeamStatus.HasFlag(teamStatus)); #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }
public void Intimidate_Does_Not_Announce_If_No_Foes() { #region Setup PBERandom.SetSeed(0); PBESettings settings = PBESettings.DefaultSettings; var p0 = new TestPokemonCollection(1); p0[0] = new TestPokemon(settings, PBESpecies.Shuckle, 0, 100, PBEMove.Splash); var p1 = new TestPokemonCollection(2); p1[0] = new TestPokemon(settings, PBESpecies.Luxray, 0, 100, PBEMove.Splash) { Ability = PBEAbility.Intimidate }; p1[1] = new TestPokemon(settings, PBESpecies.Skitty, 0, 100, PBEMove.Splash); var battle = new PBEBattle(PBEBattleFormat.Triple, 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 shuckle = t0.Party[0]; PBEBattlePokemon luxray = t1.Party[0]; PBEBattlePokemon skitty = t1.Party[1]; #endregion #region Check Assert.True(!battle.VerifyAbilityHappened(luxray, luxray, PBEAbility.Intimidate, PBEAbilityAction.Stats)); // Did not activate #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }
public void Illusion_Does_Not_Copy_Same_Species() { #region Setup PBERandom.SetSeed(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(2); p1[0] = p1[1] = new TestPokemon(settings, PBESpecies.Zoroark, 0, 100, PBEMove.Splash) { Ability = PBEAbility.Illusion }; var battle = new PBEBattle(PBEBattleFormat.Single, settings, new PBETrainerInfo(p0, "Trainer 0"), new PBETrainerInfo(p1, "Trainer 1")); battle.OnNewEvent += PBEBattle.ConsoleBattleEventHandler; battle.Begin(); PBETrainer t1 = battle.Trainers[1]; PBEBattlePokemon zoroark1 = t1.Party[0]; #endregion #region Check Assert.True(zoroark1.DisguisedAsPokemon == null); #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }
public void CastformCherrim_Interacts_With_AirLock(PBESpecies species, PBEAbility ability, PBEForm form) { #region Setup PBEDataProvider.GlobalRandom.Seed = 0; PBESettings settings = PBESettings.DefaultSettings; var p0 = new TestPokemonCollection(2); p0[0] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 100, PBEMove.Splash); p0[1] = new TestPokemon(settings, PBESpecies.Rayquaza, 0, 100, PBEMove.Splash) { Ability = PBEAbility.AirLock }; var p1 = new TestPokemonCollection(1); p1[0] = new TestPokemon(settings, species, 0, 100, PBEMove.Splash) { Ability = ability }; var battle = new PBEBattle(PBEBattleFormat.Single, settings, new PBETrainerInfo(p0, "Trainer 0"), new PBETrainerInfo(p1, "Trainer 1"), weather: PBEWeather.HarshSunlight); battle.OnNewEvent += PBEBattle.ConsoleBattleEventHandler; PBETrainer t0 = battle.Trainers[0]; PBETrainer t1 = battle.Trainers[1]; PBEBattlePokemon magikarp = t0.Party[0]; PBEBattlePokemon rayquaza = t0.Party[1]; PBEBattlePokemon castformCherrim = t1.Party[0]; battle.Begin(); #endregion #region Check Castform/Cherrim for correct form Assert.True(battle.Weather == PBEWeather.HarshSunlight && castformCherrim.Form == form); #endregion #region Swap Magikarp for Rayquaza and check for no form Assert.Null(t0.SelectActionsIfValid(new PBETurnAction(magikarp, rayquaza))); Assert.Null(t1.SelectActionsIfValid(new PBETurnAction(castformCherrim, PBEMove.Splash, PBETurnTarget.AllyCenter))); battle.RunTurn(); Assert.True(battle.Weather == PBEWeather.HarshSunlight && castformCherrim.Form == 0); #endregion #region Swap Rayquaza for Magikarp and check for correct form Assert.Null(t0.SelectActionsIfValid(new PBETurnAction(rayquaza, magikarp))); Assert.Null(t1.SelectActionsIfValid(new PBETurnAction(castformCherrim, PBEMove.Splash, PBETurnTarget.AllyCenter))); battle.RunTurn(); Assert.True(battle.Weather == PBEWeather.HarshSunlight && castformCherrim.Form == form); #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }
public void Illusion_Works_Wild() { #region Setup PBEDataProvider.GlobalRandom.Seed = 0; PBESettings settings = PBESettings.DefaultSettings; var p0 = new TestPokemonCollection(1); p0[0] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 1, PBEMove.Tackle); var p1 = new TestPokemonCollection(1); p1[0] = new TestPokemon(settings, PBESpecies.Zoroark, 0, 100, PBEMove.Splash) { Ability = PBEAbility.Illusion, CaughtBall = PBEItem.None }; var battle = PBEBattle.CreateWildBattle(PBEBattleFormat.Single, settings, new PBETrainerInfo(p0, "Trainer 0", false), new PBEWildInfo(p1)); battle.OnNewEvent += PBEBattle.ConsoleBattleEventHandler; PBETrainer t0 = battle.Trainers[0]; PBETrainer t1 = battle.Trainers[1]; PBEBattlePokemon magikarp = t0.Party[0]; PBEBattlePokemon zoroark = t1.Party[0]; zoroark.Status2 |= PBEStatus2.Disguised; zoroark.KnownGender = PBEGender.Genderless; zoroark.KnownCaughtBall = PBEItem.None; zoroark.KnownShiny = false; zoroark.KnownSpecies = PBESpecies.Entei; zoroark.KnownForm = 0; zoroark.KnownNickname = zoroark.KnownSpecies.ToString(); IPBEPokemonData pData = PBEDataProvider.Instance.GetPokemonData(zoroark.KnownSpecies, zoroark.KnownForm); zoroark.KnownType1 = pData.Type1; zoroark.KnownType2 = pData.Type2; battle.Begin(); #endregion #region Check that the disguise works Assert.True(zoroark.Status2.HasFlag(PBEStatus2.Disguised) && ((PBEWildPkmnAppearedPacket)battle.Events.Single(p => p is PBEWildPkmnAppearedPacket)).Pokemon[0].IsDisguised); #endregion #region Break the disguise and check Assert.True(t0.SelectActionsIfValid(out _, new PBETurnAction(magikarp, PBEMove.Tackle, PBETurnTarget.FoeCenter))); Assert.True(t1.SelectActionsIfValid(out _, new PBETurnAction(zoroark, PBEMove.Splash, PBETurnTarget.AllyCenter))); battle.RunTurn(); Assert.True(!zoroark.Status2.HasFlag(PBEStatus2.Disguised) && zoroark.KnownSpecies == PBESpecies.Zoroark); #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }
public void Gem_Does_Not_Activate__Effectiveness() { #region Setup PBEDataProvider.GlobalRandom.Seed = 0; PBESettings settings = PBESettings.DefaultSettings; var p0 = new TestPokemonCollection(2); p0[0] = new TestPokemon(settings, PBESpecies.Excadrill, 0, 100, PBEMove.Earthquake) { Item = PBEItem.GroundGem }; p0[1] = new TestPokemon(settings, PBESpecies.Starly, 0, 1, PBEMove.Splash); var p1 = new TestPokemonCollection(2); p1[0] = new TestPokemon(settings, PBESpecies.Rotom, 0, 1, PBEMove.Splash) { Ability = PBEAbility.Levitate }; p1[1] = new TestPokemon(settings, PBESpecies.Shedinja, 0, 1, PBEMove.Splash) { Ability = PBEAbility.WonderGuard }; var battle = PBEBattle.CreateTrainerBattle(PBEBattleFormat.Double, 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 excadrill = t0.Party[0]; PBEBattlePokemon starly = t0.Party[1]; PBEBattlePokemon rotom = t1.Party[0]; PBEBattlePokemon shedinja = t1.Party[1]; battle.Begin(); #endregion #region Use and check Assert.True(t0.SelectActionsIfValid(out _, new PBETurnAction(excadrill, PBEMove.Earthquake, PBETurnTarget.AllyRight | PBETurnTarget.FoeLeft | PBETurnTarget.FoeRight), new PBETurnAction(starly, PBEMove.Splash, PBETurnTarget.AllyRight))); Assert.True(t1.SelectActionsIfValid(out _, new PBETurnAction(rotom, PBEMove.Splash, PBETurnTarget.AllyLeft), new PBETurnAction(shedinja, PBEMove.Splash, PBETurnTarget.AllyRight))); battle.RunTurn(); Assert.True(battle.VerifyMoveResultHappened(excadrill, starly, PBEResult.Ineffective_Type) && starly.HPPercentage == 1 && // Doesn't affect Flying battle.VerifyMoveResultHappened(excadrill, rotom, PBEResult.Ineffective_Ability) && rotom.HPPercentage == 1 && // Doesn't affect Levitate battle.VerifyMoveResultHappened(excadrill, shedinja, PBEResult.Ineffective_Ability) && shedinja.HPPercentage == 1 && // Doesn't affect WonderGuard excadrill.Item == PBEItem.GroundGem); // Gem not consumed #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }
public void Gem_Does_Not_Activate__Miss() { #region Setup PBEDataProvider.GlobalRandom.Seed = 2; // Seed ensures all miss PBESettings settings = PBESettings.DefaultSettings; var p0 = new TestPokemonCollection(2); p0[0] = new TestPokemon(settings, PBESpecies.Corsola, 0, 100, PBEMove.Earthquake) { Ability = PBEAbility.Hustle, Item = PBEItem.GroundGem }; p0[1] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 1, PBEMove.Splash); var p1 = new TestPokemonCollection(2); p1[0] = new TestPokemon(settings, PBESpecies.Happiny, 0, 1, PBEMove.Splash); p1[1] = new TestPokemon(settings, PBESpecies.Qwilfish, 0, 1, PBEMove.Splash); var battle = PBEBattle.CreateTrainerBattle(PBEBattleFormat.Double, 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 corsola = t0.Party[0]; PBEBattlePokemon magikarp = t0.Party[1]; PBEBattlePokemon happiny = t1.Party[0]; PBEBattlePokemon qwilfish = t1.Party[1]; corsola.AccuracyChange = (sbyte)-settings.MaxStatChange; magikarp.EvasionChange = settings.MaxStatChange; happiny.EvasionChange = settings.MaxStatChange; qwilfish.EvasionChange = settings.MaxStatChange; battle.Begin(); #endregion #region Use and check Assert.True(t0.SelectActionsIfValid(out _, new PBETurnAction(corsola, PBEMove.Earthquake, PBETurnTarget.AllyRight | PBETurnTarget.FoeLeft | PBETurnTarget.FoeRight), new PBETurnAction(magikarp, PBEMove.Splash, PBETurnTarget.AllyRight))); Assert.True(t1.SelectActionsIfValid(out _, new PBETurnAction(happiny, PBEMove.Splash, PBETurnTarget.AllyLeft), new PBETurnAction(qwilfish, PBEMove.Splash, PBETurnTarget.AllyRight))); battle.RunTurn(); Assert.True(battle.VerifyMoveResultHappened(corsola, magikarp, PBEResult.Missed) && magikarp.HPPercentage == 1 && // Miss everyone battle.VerifyMoveResultHappened(corsola, happiny, PBEResult.Missed) && happiny.HPPercentage == 1 && battle.VerifyMoveResultHappened(corsola, qwilfish, PBEResult.Missed) && qwilfish.HPPercentage == 1 && corsola.Item == PBEItem.GroundGem); // Gem not consumed #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }
[InlineData(PBESpecies.Gyarados, false)] // Flying dual-type-secondary public void Roost_Works(PBESpecies species, bool swapTypes) // Swap types around since there's no primary flying-type { #region Setup PBEDataProvider.GlobalRandom.Seed = 0; PBESettings settings = PBESettings.DefaultSettings; var p0 = new TestPokemonCollection(1); p0[0] = new TestPokemon(settings, PBESpecies.Lucario, 0, 50, PBEMove.Earthquake, PBEMove.VacuumWave); var p1 = new TestPokemonCollection(1); p1[0] = new TestPokemon(settings, species, 0, 100, PBEMove.Roost, 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 lucario = t0.Party[0]; PBEBattlePokemon rooster = t1.Party[0]; PBEType type1 = rooster.Type1; PBEType type2 = rooster.Type2; if (swapTypes) { rooster.Type1 = type2; rooster.Type2 = type1; rooster.KnownType1 = type2; rooster.KnownType2 = type1; } battle.Begin(); #endregion #region Use VacuumWave to lower HP Assert.Null(t0.SelectActionsIfValid(new PBETurnAction(lucario, PBEMove.VacuumWave, PBETurnTarget.FoeCenter))); Assert.Null(t1.SelectActionsIfValid(new PBETurnAction(rooster, PBEMove.Splash, PBETurnTarget.AllyCenter))); battle.RunTurn(); #endregion #region Use Roost and check Assert.Null(t0.SelectActionsIfValid(new PBETurnAction(lucario, PBEMove.Earthquake, PBETurnTarget.FoeCenter))); Assert.Null(t1.SelectActionsIfValid(new PBETurnAction(rooster, PBEMove.Roost, PBETurnTarget.AllyCenter))); battle.RunTurn(); Assert.True(!battle.VerifyMoveResultHappened(lucario, rooster, PBEResult.Ineffective_Type) && // Earthquake hit !rooster.Status2.HasFlag(PBEStatus2.Roost) && // Roost ended properly rooster.Type1 == type1 && rooster.Type2 == type2 && // Types restored properly rooster.KnownType1 == type1 && rooster.KnownType2 == type2); #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }
public void Whirlwind_Succeeds_WildDoubleBattle() { #region Setup PBEDataProvider.GlobalRandom.Seed = 0; PBESettings settings = PBESettings.DefaultSettings; var p0 = new TestPokemonCollection(3); p0[0] = new TestPokemon(settings, PBESpecies.Diglett, 0, 1, PBEMove.Splash); p0[1] = new TestPokemon(settings, PBESpecies.Geodude, 0, 1, PBEMove.Splash); p0[2] = new TestPokemon(settings, PBESpecies.Trubbish, 0, 1, PBEMove.Splash); var p1 = new TestPokemonCollection(2); p1[0] = new TestPokemon(settings, PBESpecies.Starly, 0, 100, PBEMove.Whirlwind) { CaughtBall = PBEItem.None }; p1[1] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 100, PBEMove.Splash) { CaughtBall = PBEItem.None }; var battle = new PBEBattle(PBEBattleFormat.Double, settings, new PBETrainerInfo(p0, "Trainer 0"), new PBEWildInfo(p1)); battle.OnNewEvent += PBEBattle.ConsoleBattleEventHandler; PBETrainer t0 = battle.Trainers[0]; PBETrainer t1 = battle.Trainers[1]; PBEBattlePokemon diglett = t0.Party[0]; PBEBattlePokemon geodude = t0.Party[1]; PBEBattlePokemon trubbish = t0.Party[2]; PBEBattlePokemon starly = t1.Party[0]; PBEBattlePokemon magikarp = t1.Party[1]; battle.Begin(); #endregion #region Use Whirlwind and check Assert.Null(t0.SelectActionsIfValid( new PBETurnAction(diglett, PBEMove.Splash, PBETurnTarget.AllyLeft), new PBETurnAction(geodude, PBEMove.Splash, PBETurnTarget.AllyRight))); Assert.Null(t1.SelectActionsIfValid( new PBETurnAction(starly, PBEMove.Whirlwind, PBETurnTarget.FoeLeft), new PBETurnAction(magikarp, PBEMove.Splash, PBETurnTarget.AllyRight))); battle.RunTurn(); Assert.True(!battle.VerifyMoveResultHappened(starly, diglett, PBEResult.InvalidConditions) && // No fail diglett.FieldPosition == PBEFieldPosition.None && trubbish.FieldPosition == PBEFieldPosition.Left && // Properly swapped !battle.BattleResult.HasValue); // Did not flee #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }
public void Confusion_Heal__Bug(bool bugFix) { #region Setup PBEDataProvider.GlobalRandom.Seed = 0; // Seed ensures Swagger does not miss and Deoxys hurts itself var settings = new PBESettings { BugFix = bugFix }; settings.MakeReadOnly(); var p0 = new TestPokemonCollection(1); p0[0] = new TestPokemon(settings, PBESpecies.Deoxys, PBEForm.Deoxys, 50, PBEMove.Splash) { Item = PBEItem.SitrusBerry }; var p1 = new TestPokemonCollection(1); p1[0] = new TestPokemon(settings, PBESpecies.Accelgor, 0, 100, PBEMove.Swagger); 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 deoxys = t0.Party[0]; PBEBattlePokemon accelgor = t1.Party[0]; battle.Begin(); #endregion #region Use and check Assert.True(t0.SelectActionsIfValid(out _, new PBETurnAction(deoxys, PBEMove.Splash, PBETurnTarget.AllyCenter))); Assert.True(t1.SelectActionsIfValid(out _, new PBETurnAction(accelgor, PBEMove.Swagger, PBETurnTarget.FoeCenter))); battle.RunTurn(); Assert.True(battle.VerifyStatus2Happened(deoxys, accelgor, PBEStatus2.Confused, PBEStatusAction.Added) && battle.VerifyStatus2Happened(deoxys, deoxys, PBEStatus2.Confused, PBEStatusAction.Damage)); if (settings.BugFix) { Assert.True(battle.VerifyItemHappened(deoxys, deoxys, PBEItem.SitrusBerry, PBEItemAction.Consumed) && deoxys.Item == PBEItem.None); // Healed } else { Assert.True(!battle.VerifyItemHappened(deoxys, deoxys, PBEItem.SitrusBerry, PBEItemAction.Consumed) && deoxys.Item == PBEItem.SitrusBerry); // Buggy } #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }
//[InlineData(PBEMove.SkyDrop, PBEStatus2.Airborne)] public void HelpingHand_HitsSemiInvulnerable(PBEMove move, PBEStatus2 status2) { #region Setup PBEDataProvider.GlobalRandom.Seed = 0; PBESettings settings = PBESettings.DefaultSettings; var p0 = new TestPokemonCollection(2); p0[0] = new TestPokemon(settings, PBESpecies.Minun, 0, 100, PBEMove.HelpingHand, PBEMove.Splash); p0[1] = new TestPokemon(settings, PBESpecies.Giratina, 0, 1, move); var p1 = new TestPokemonCollection(1); p1[0] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 100, PBEMove.Splash); var battle = PBEBattle.CreateTrainerBattle(PBEBattleFormat.Double, 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 minun = t0.Party[0]; PBEBattlePokemon giratina = t0.Party[1]; PBEBattlePokemon magikarp = t1.Party[0]; battle.Begin(); #endregion #region Use Shadow Force Assert.True(t0.SelectActionsIfValid(out _, new PBETurnAction(minun, PBEMove.Splash, PBETurnTarget.AllyLeft), new PBETurnAction(giratina, move, PBETurnTarget.FoeLeft))); Assert.True(t1.SelectActionsIfValid(out _, new PBETurnAction(magikarp, PBEMove.Splash, PBETurnTarget.AllyLeft))); battle.RunTurn(); Assert.True(giratina.Status2.HasFlag(status2)); #endregion #region Use Helping Hand and check Assert.True(t0.SelectActionsIfValid(out _, new PBETurnAction(minun, PBEMove.HelpingHand, PBETurnTarget.AllyRight), new PBETurnAction(giratina, move, PBETurnTarget.FoeLeft))); Assert.True(t1.SelectActionsIfValid(out _, new PBETurnAction(magikarp, PBEMove.Splash, PBETurnTarget.AllyLeft))); battle.RunTurn(); Assert.True(battle.VerifyStatus2Happened(giratina, minun, PBEStatus2.HelpingHand, PBEStatusAction.Added)); #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }
public void BellyDrum_Contrary__Bug(bool bugFix) { #region Setup PBEDataProvider.GlobalRandom.Seed = 0; var settings = new PBESettings { BugFix = bugFix }; settings.MakeReadOnly(); var p0 = new TestPokemonCollection(1); p0[0] = new TestPokemon(settings, PBESpecies.Hariyama, 0, 100, PBEMove.BellyDrum) { Ability = PBEAbility.Contrary }; var p1 = new TestPokemonCollection(1); p1[0] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 100, 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 hariyama = t0.Party[0]; PBEBattlePokemon magikarp = t1.Party[0]; hariyama.AttackChange = settings.MaxStatChange; battle.Begin(); #endregion #region Use and check Assert.True(t0.SelectActionsIfValid(out _, new PBETurnAction(hariyama, PBEMove.BellyDrum, PBETurnTarget.AllyCenter))); Assert.True(t1.SelectActionsIfValid(out _, new PBETurnAction(magikarp, PBEMove.Splash, PBETurnTarget.AllyCenter))); battle.RunTurn(); if (settings.BugFix) { Assert.True(!battle.VerifyMoveResultHappened(hariyama, hariyama, PBEResult.InvalidConditions) && hariyama.AttackChange == -settings.MaxStatChange); // Stat minimized because of Contrary } else { Assert.True(battle.VerifyMoveResultHappened(hariyama, hariyama, PBEResult.InvalidConditions) && hariyama.AttackChange == settings.MaxStatChange); // Buggy } #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }
public void SecretPower_SereneGrace__Bug(bool bugFix) { #region Setup PBEDataProvider.GlobalRandom.Seed = 473; // Seed ensures SecretPower does not freeze without the bugfix var settings = new PBESettings { BugFix = bugFix }; settings.MakeReadOnly(); var p0 = new TestPokemonCollection(1); p0[0] = new TestPokemon(settings, PBESpecies.Makuhita, 0, 1, PBEMove.SecretPower) { Ability = PBEAbility.SereneGrace }; var p1 = new TestPokemonCollection(1); p1[0] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 100, PBEMove.Splash); var battle = new PBEBattle(PBEBattleFormat.Single, settings, new PBETrainerInfo(p0, "Trainer 0"), new PBETrainerInfo(p1, "Trainer 1"), battleTerrain: PBEBattleTerrain.Snow); battle.OnNewEvent += PBEBattle.ConsoleBattleEventHandler; PBETrainer t0 = battle.Trainers[0]; PBETrainer t1 = battle.Trainers[1]; PBEBattlePokemon makuhita = t0.Party[0]; PBEBattlePokemon magikarp = t1.Party[0]; battle.Begin(); #endregion #region Use and check Assert.Null(t0.SelectActionsIfValid(new PBETurnAction(makuhita, PBEMove.SecretPower, PBETurnTarget.FoeCenter))); Assert.Null(t1.SelectActionsIfValid(new PBETurnAction(magikarp, PBEMove.Splash, PBETurnTarget.AllyCenter))); battle.RunTurn(); if (settings.BugFix) { Assert.True(battle.VerifyStatus1Happened(magikarp, makuhita, PBEStatus1.Frozen, PBEStatusAction.Added) && magikarp.Status1 == PBEStatus1.Frozen); // Frozen because of Serene Grace } else { Assert.True(!battle.VerifyStatus1Happened(magikarp, makuhita, PBEStatus1.Frozen, PBEStatusAction.Added) && magikarp.Status1 == PBEStatus1.None); // Buggy } #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }
public void NaturalCure_Works_On_Battle_Ending() { #region Setup PBEDataProvider.GlobalRandom.Seed = 0; PBESettings settings = PBESettings.DefaultSettings; var p0 = new TestPokemonCollection(1); p0[0] = new TestPokemon(settings, PBESpecies.Happiny, 0, 1, PBEMove.Splash); var p1 = new TestPokemonCollection(1); p1[0] = new TestPokemon(settings, PBESpecies.Shaymin, PBEForm.Shaymin, 100, PBEMove.Splash, PBEMove.QuickAttack) { Ability = PBEAbility.NaturalCure, Item = PBEItem.FlameOrb }; 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 happiny = t0.Party[0]; PBEBattlePokemon shaymin = t1.Party[0]; battle.Begin(); #endregion #region Burn Shaymin Assert.Null(t0.SelectActionsIfValid(new PBETurnAction(happiny, PBEMove.Splash, PBETurnTarget.AllyCenter))); Assert.Null(t1.SelectActionsIfValid(new PBETurnAction(shaymin, PBEMove.Splash, PBETurnTarget.AllyCenter))); battle.RunTurn(); Assert.True(shaymin.Status1 == PBEStatus1.Burned); #endregion #region End battle and check Assert.Null(t0.SelectActionsIfValid(new PBETurnAction(happiny, PBEMove.Splash, PBETurnTarget.AllyCenter))); Assert.Null(t1.SelectActionsIfValid(new PBETurnAction(shaymin, PBEMove.QuickAttack, PBETurnTarget.FoeCenter))); battle.RunTurn(); Assert.True(battle.BattleResult == PBEBattleResult.Team1Win && battle.BattleState == PBEBattleState.Ended && shaymin.Status1 == PBEStatus1.None); #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }
public void Gem_Activates__FixedDamage__Bug(bool bugFix) { #region Setup PBEDataProvider.GlobalRandom.Seed = 0; var settings = new PBESettings { BugFix = bugFix }; settings.MakeReadOnly(); var p0 = new TestPokemonCollection(1); p0[0] = new TestPokemon(settings, PBESpecies.Swellow, 0, 1, PBEMove.Endeavor) { Item = PBEItem.NormalGem }; var p1 = new TestPokemonCollection(1); p1[0] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 100, 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 swellow = t0.Party[0]; PBEBattlePokemon magikarp = t1.Party[0]; battle.Begin(); #endregion #region Use and check Assert.True(t0.SelectActionsIfValid(out _, new PBETurnAction(swellow, PBEMove.Endeavor, PBETurnTarget.FoeCenter))); Assert.True(t1.SelectActionsIfValid(out _, new PBETurnAction(magikarp, PBEMove.Splash, PBETurnTarget.AllyCenter))); battle.RunTurn(); if (settings.BugFix) { Assert.True(!battle.VerifyItemHappened(swellow, swellow, PBEItem.NormalGem, PBEItemAction.Consumed) && swellow.Item == PBEItem.NormalGem); // Not consumed } else { Assert.True(battle.VerifyItemHappened(swellow, swellow, PBEItem.NormalGem, PBEItemAction.Consumed) && swellow.Item == PBEItem.None); // Buggy } #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }
public void Shaymin_Reverts_To_Normal_Form_Forever() { #region Setup PBEDataProvider.GlobalRandom.Seed = 0; // Seed ensures SecretPower freezes PBESettings settings = PBESettings.DefaultSettings; var p0 = new TestPokemonCollection(1); p0[0] = new TestPokemon(settings, PBESpecies.Happiny, 0, 100, PBEMove.SecretPower, PBEMove.Splash) { Ability = PBEAbility.SereneGrace }; var p1 = new TestPokemonCollection(2); p1[0] = new TestPokemon(settings, PBESpecies.Shaymin, PBEForm.Shaymin_Sky, 100, PBEMove.Splash); p1[1] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 100, PBEMove.Splash); var battle = PBEBattle.CreateTrainerBattle(PBEBattleFormat.Single, settings, new PBETrainerInfo(p0, "Trainer 0", false), new PBETrainerInfo(p1, "Trainer 1", false), battleTerrain: PBEBattleTerrain.Snow); battle.OnNewEvent += PBEBattle.ConsoleBattleEventHandler; PBETrainer t0 = battle.Trainers[0]; PBETrainer t1 = battle.Trainers[1]; PBEBattlePokemon happiny = t0.Party[0]; PBEBattlePokemon shaymin = t1.Party[0]; PBEBattlePokemon magikarp = t1.Party[1]; battle.Begin(); #endregion #region Freeze Shaymin Assert.True(t0.SelectActionsIfValid(out _, new PBETurnAction(happiny, PBEMove.SecretPower, PBETurnTarget.FoeCenter))); Assert.True(t1.SelectActionsIfValid(out _, new PBETurnAction(shaymin, PBEMove.Splash, PBETurnTarget.AllyCenter))); battle.RunTurn(); Assert.True(shaymin.Status1 == PBEStatus1.Frozen && shaymin.Form == PBEForm.Shaymin); #endregion #region Swap Shaymin for Magikarp and check Assert.True(t0.SelectActionsIfValid(out _, new PBETurnAction(happiny, PBEMove.Splash, PBETurnTarget.AllyCenter))); Assert.True(t1.SelectActionsIfValid(out _, new PBETurnAction(shaymin, magikarp))); battle.RunTurn(); Assert.True(shaymin.Form == PBEForm.Shaymin); #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }
public void Intimidate_Does_Not_Hit_Through_Substitute() { #region Setup PBEDataProvider.GlobalRandom.Seed = 0; PBESettings settings = PBESettings.DefaultSettings; var p0 = new TestPokemonCollection(1); p0[0] = new TestPokemon(settings, PBESpecies.Shuckle, 0, 100, PBEMove.Substitute, PBEMove.Splash); var p1 = new TestPokemonCollection(2); p1[0] = new TestPokemon(settings, PBESpecies.Skitty, 0, 100, PBEMove.Splash); p1[1] = new TestPokemon(settings, PBESpecies.Luxray, 0, 100, PBEMove.Splash) { Ability = PBEAbility.Intimidate }; 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 shuckle = t0.Party[0]; PBEBattlePokemon skitty = t1.Party[0]; PBEBattlePokemon luxray = t1.Party[1]; battle.Begin(); #endregion #region Use Substitute Assert.Null(t0.SelectActionsIfValid(new PBETurnAction(shuckle, PBEMove.Substitute, PBETurnTarget.AllyCenter))); Assert.Null(t1.SelectActionsIfValid(new PBETurnAction(skitty, PBEMove.Splash, PBETurnTarget.AllyCenter))); battle.RunTurn(); Assert.True(shuckle.Status2.HasFlag(PBEStatus2.Substitute)); #endregion #region Switch in Luxray and check Assert.Null(t0.SelectActionsIfValid(new PBETurnAction(shuckle, PBEMove.Splash, PBETurnTarget.AllyCenter))); Assert.Null(t1.SelectActionsIfValid(new PBETurnAction(skitty, luxray))); battle.RunTurn(); Assert.True(battle.VerifyAbilityHappened(luxray, luxray, PBEAbility.Intimidate, PBEAbilityAction.Stats) && // Activated battle.VerifyMoveResultHappened(luxray, shuckle, PBEResult.Ineffective_Substitute) && shuckle.AttackChange == 0); // Did not affect #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }
public void Illusion_Copies_Just_Swapped_Mon() { #region Setup PBEDataProvider.GlobalRandom.Seed = 0; PBESettings settings = PBESettings.DefaultSettings; var p0 = new TestPokemonCollection(1); p0[0] = new TestPokemon(settings, PBESpecies.Happiny, 0, 1, PBEMove.Splash); var p1 = new TestPokemonCollection(4); p1[0] = new TestPokemon(settings, PBESpecies.Trubbish, 0, 10, PBEMove.Splash); // Trubbish needs more speed to swap first p1[1] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 1, PBEMove.Splash); p1[2] = new TestPokemon(settings, PBESpecies.Zoroark, 0, 100, PBEMove.Splash) { Ability = PBEAbility.Illusion }; p1[3] = new TestPokemon(settings, PBESpecies.Feebas, 0, 1, PBEMove.Splash); var battle = PBEBattle.CreateTrainerBattle(PBEBattleFormat.Double, settings, new PBETrainerInfo(p0, "Trainer 0", false), new PBETrainerInfo(p1, "Trainer 1", false), battleTerrain: PBEBattleTerrain.Snow); battle.OnNewEvent += PBEBattle.ConsoleBattleEventHandler; PBETrainer t0 = battle.Trainers[0]; PBETrainer t1 = battle.Trainers[1]; PBEBattlePokemon happiny = t0.Party[0]; PBEBattlePokemon trubbish = t1.Party[0]; PBEBattlePokemon magikarp = t1.Party[1]; PBEBattlePokemon zoroark = t1.Party[2]; PBEBattlePokemon feebas = t1.Party[3]; battle.Begin(); #endregion #region Swap Trubbish and Magikarp for Feebas and Zoroark then check Assert.True(t0.SelectActionsIfValid(out _, new PBETurnAction(happiny, PBEMove.Splash, PBETurnTarget.AllyLeft))); Assert.True(t1.SelectActionsIfValid(out _, new PBETurnAction(trubbish, feebas), new PBETurnAction(magikarp, zoroark))); battle.RunTurn(); Assert.True(zoroark.KnownSpecies == trubbish.Species && zoroark.KnownForm == trubbish.Form); #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }
public void Whirlwind_Fails_WildDoubleBattle() { #region Setup PBEDataProvider.GlobalRandom.Seed = 0; PBESettings settings = PBESettings.DefaultSettings; var p0 = new TestPokemonCollection(1); p0[0] = new TestPokemon(settings, PBESpecies.Tropius, 0, 100, PBEMove.Whirlwind); var p1 = new TestPokemonCollection(2); p1[0] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 1, PBEMove.Splash) { CaughtBall = PBEItem.None }; p1[1] = new TestPokemon(settings, PBESpecies.Happiny, 0, 1, PBEMove.Splash) { CaughtBall = PBEItem.None }; var battle = new PBEBattle(PBEBattleFormat.Double, settings, new PBETrainerInfo(p0, "Trainer 0"), new PBEWildInfo(p1)); battle.OnNewEvent += PBEBattle.ConsoleBattleEventHandler; PBETrainer t0 = battle.Trainers[0]; PBETrainer t1 = battle.Trainers[1]; PBEBattlePokemon tropius = t0.Party[0]; PBEBattlePokemon magikarp = t1.Party[0]; PBEBattlePokemon happiny = t1.Party[1]; battle.Begin(); #endregion #region Use Whirlwind and check Assert.Null(t0.SelectActionsIfValid( new PBETurnAction(tropius, PBEMove.Whirlwind, PBETurnTarget.FoeLeft))); Assert.Null(t1.SelectActionsIfValid( new PBETurnAction(magikarp, PBEMove.Splash, PBETurnTarget.AllyLeft), new PBETurnAction(happiny, PBEMove.Splash, PBETurnTarget.AllyRight))); battle.RunTurn(); Assert.True(battle.VerifyMoveResultHappened(tropius, magikarp, PBEResult.InvalidConditions) && // Fail !battle.BattleResult.HasValue); // Did not flee #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }
public void CastformCherrim_Loses_Form(PBESpecies species, PBEAbility ability, PBEForm form) { #region Setup PBEDataProvider.GlobalRandom.Seed = 0; PBESettings settings = PBESettings.DefaultSettings; var p0 = new TestPokemonCollection(1); p0[0] = new TestPokemon(settings, PBESpecies.Shuckle, 0, 100, PBEMove.GastroAcid, PBEMove.Splash); var p1 = new TestPokemonCollection(1); p1[0] = new TestPokemon(settings, species, 0, 100, PBEMove.Splash, PBEMove.SunnyDay) { Ability = ability }; 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 shuckle = t0.Party[0]; PBEBattlePokemon castformCherrim = t1.Party[0]; battle.Begin(); #endregion #region Use Sunny Day and check for correct form Assert.Null(t0.SelectActionsIfValid(new[] { new PBETurnAction(shuckle, PBEMove.Splash, PBETurnTarget.AllyCenter) })); Assert.Null(t1.SelectActionsIfValid(new[] { new PBETurnAction(castformCherrim, PBEMove.SunnyDay, PBETurnTarget.AllyCenter | PBETurnTarget.FoeCenter) })); battle.RunTurn(); Assert.True(battle.Weather == PBEWeather.HarshSunlight && castformCherrim.Form == form); #endregion #region Use Gastro Acid and check for no form Assert.Null(t0.SelectActionsIfValid(new[] { new PBETurnAction(shuckle, PBEMove.GastroAcid, PBETurnTarget.FoeCenter) })); Assert.Null(t1.SelectActionsIfValid(new[] { new PBETurnAction(castformCherrim, PBEMove.Splash, PBETurnTarget.AllyCenter) })); battle.RunTurn(); Assert.True(battle.Weather == PBEWeather.HarshSunlight && castformCherrim.Form == 0); #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }
public void Gem_Does_Not_Activate__Protection() { #region Setup PBEDataProvider.GlobalRandom.Seed = 0; PBESettings settings = PBESettings.DefaultSettings; var p0 = new TestPokemonCollection(1); p0[0] = new TestPokemon(settings, PBESpecies.Excadrill, 0, 100, PBEMove.Earthquake) { Item = PBEItem.GroundGem }; var p1 = new TestPokemonCollection(2); p1[0] = new TestPokemon(settings, PBESpecies.Happiny, 0, 1, PBEMove.WideGuard); p1[1] = new TestPokemon(settings, PBESpecies.Qwilfish, 0, 1, PBEMove.Splash); var battle = PBEBattle.CreateTrainerBattle(PBEBattleFormat.Double, 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 excadrill = t0.Party[0]; PBEBattlePokemon happiny = t1.Party[0]; PBEBattlePokemon qwilfish = t1.Party[1]; battle.Begin(); #endregion #region Use and check Assert.True(t0.SelectActionsIfValid(out _, new PBETurnAction(excadrill, PBEMove.Earthquake, PBETurnTarget.AllyRight | PBETurnTarget.FoeLeft | PBETurnTarget.FoeRight))); Assert.True(t1.SelectActionsIfValid(out _, new PBETurnAction(happiny, PBEMove.WideGuard, PBETurnTarget.AllyLeft | PBETurnTarget.AllyRight), new PBETurnAction(qwilfish, PBEMove.Splash, PBETurnTarget.AllyRight))); battle.RunTurn(); Assert.True(battle.VerifyTeamStatusDamageHappened(t1.Team, PBETeamStatus.WideGuard, happiny) && happiny.HPPercentage == 1 && battle.VerifyTeamStatusDamageHappened(t1.Team, PBETeamStatus.WideGuard, qwilfish) && qwilfish.HPPercentage == 1 && excadrill.Item == PBEItem.GroundGem); // Gem not consumed #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }
public void Protection_Counter_Resets(PBEMove move) { #region Setup PBEDataProvider.GlobalRandom.Seed = 0; PBESettings settings = PBESettings.DefaultSettings; var p0 = new TestPokemonCollection(1); p0[0] = new TestPokemon(settings, PBESpecies.Mienshao, 0, 100, move, PBEMove.CalmMind); var p1 = new TestPokemonCollection(1); p1[0] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 100, 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 mienshao = t0.Party[0]; PBEBattlePokemon magikarp = t1.Party[0]; battle.Begin(); #endregion #region Use move Assert.Null(t0.SelectActionsIfValid(new PBETurnAction(mienshao, move, PBETurnTarget.AllyCenter))); Assert.Null(t1.SelectActionsIfValid(new PBETurnAction(magikarp, PBEMove.Splash, PBETurnTarget.AllyCenter))); battle.RunTurn(); Assert.True(mienshao.Protection_Counter == 1); #endregion #region Use Calm Mind and check Assert.Null(t0.SelectActionsIfValid(new PBETurnAction(mienshao, PBEMove.CalmMind, PBETurnTarget.AllyCenter))); Assert.Null(t1.SelectActionsIfValid(new PBETurnAction(magikarp, PBEMove.Splash, PBETurnTarget.AllyCenter))); battle.RunTurn(); Assert.True(mienshao.Protection_Counter == 0); #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }
public void PoisonHeal_BadlyPoisoned_Counter_Works() { #region Setup PBEDataProvider.GlobalRandom.Seed = 0; // Seed prevents Toxic from missing PBESettings settings = PBESettings.DefaultSettings; var p0 = new TestPokemonCollection(1); p0[0] = new TestPokemon(settings, PBESpecies.Seviper, 0, 100, PBEMove.Toxic); var p1 = new TestPokemonCollection(1); p1[0] = new TestPokemon(settings, PBESpecies.Gliscor, 0, 100, PBEMove.Splash) { Ability = PBEAbility.PoisonHeal }; 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 seviper = t0.Party[0]; PBEBattlePokemon gliscor = t1.Party[0]; battle.Begin(); #endregion #region Badly Poison Gliscor and check Assert.Null(t0.SelectActionsIfValid(new PBETurnAction(seviper, PBEMove.Toxic, PBETurnTarget.FoeCenter))); Assert.Null(t1.SelectActionsIfValid(new PBETurnAction(gliscor, PBEMove.Splash, PBETurnTarget.AllyCenter))); battle.RunTurn(); Assert.True(gliscor.Status1 == PBEStatus1.BadlyPoisoned && // Was afflicted !battle.VerifyAbilityHappened(gliscor, gliscor, PBEAbility.PoisonHeal, PBEAbilityAction.RestoredHP) && // Did not activate !battle.VerifyStatus1Happened(gliscor, gliscor, PBEStatus1.BadlyPoisoned, PBEStatusAction.Damage) && // Did not activate gliscor.Status1Counter == 2 && // Counter still increments gliscor.HPPercentage == 1); // Did not take damage #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }
public void Illusion_Does_Not_Copy_Just_Swapped_Mon() { #region Setup PBEDataProvider.GlobalRandom.Seed = 0; PBESettings settings = PBESettings.DefaultSettings; var p0 = new TestPokemonCollection(1); p0[0] = new TestPokemon(settings, PBESpecies.Happiny, 0, 1, PBEMove.Splash); var p1 = new TestPokemonCollection(3); p1[0] = new TestPokemon(settings, PBESpecies.Feebas, 0, 1, PBEMove.Splash); p1[1] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 1, PBEMove.Splash); p1[2] = new TestPokemon(settings, PBESpecies.Zoroark, 0, 100, PBEMove.Splash) { Ability = PBEAbility.Illusion }; var battle = PBEBattle.CreateTrainerBattle(PBEBattleFormat.Single, settings, new PBETrainerInfo(p0, "Trainer 0", false), new PBETrainerInfo(p1, "Trainer 1", false), battleTerrain: PBEBattleTerrain.Snow); battle.OnNewEvent += PBEBattle.ConsoleBattleEventHandler; PBETrainer t0 = battle.Trainers[0]; PBETrainer t1 = battle.Trainers[1]; PBEBattlePokemon happiny = t0.Party[0]; PBEBattlePokemon feebas = t1.Party[0]; PBEBattlePokemon zoroark = t1.Party[2]; battle.Begin(); #endregion #region Swap Feebas for Zoroark and check Assert.True(t0.SelectActionsIfValid(out _, new PBETurnAction(happiny, PBEMove.Splash, PBETurnTarget.AllyCenter))); Assert.True(t1.SelectActionsIfValid(out _, new PBETurnAction(feebas, zoroark))); battle.RunTurn(); Assert.True(zoroark.KnownSpecies == PBESpecies.Zoroark && zoroark.KnownForm == 0); #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }
public void Confusion_Does_Not_Ignore_Sturdy() { #region Setup PBEDataProvider.GlobalRandom.Seed = 0; // Seed ensures Swagger does not miss and Deoxys hurts itself PBESettings settings = PBESettings.DefaultSettings; var p0 = new TestPokemonCollection(1); p0[0] = new TestPokemon(settings, PBESpecies.Deoxys, PBEForm.Deoxys_Attack, 50, PBEMove.Splash) { Ability = PBEAbility.Sturdy }; var p1 = new TestPokemonCollection(1); p1[0] = new TestPokemon(settings, PBESpecies.Accelgor, 0, 100, PBEMove.Swagger); 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 deoxys = t0.Party[0]; PBEBattlePokemon accelgor = t1.Party[0]; battle.Begin(); #endregion #region Use and check Assert.True(t0.SelectActionsIfValid(out _, new PBETurnAction(deoxys, PBEMove.Splash, PBETurnTarget.AllyCenter))); Assert.True(t1.SelectActionsIfValid(out _, new PBETurnAction(accelgor, PBEMove.Swagger, PBETurnTarget.FoeCenter))); battle.RunTurn(); Assert.True(battle.VerifyStatus2Happened(deoxys, accelgor, PBEStatus2.Confused, PBEStatusAction.Added) && battle.VerifyStatus2Happened(deoxys, deoxys, PBEStatus2.Confused, PBEStatusAction.Damage) && battle.VerifyAbilityHappened(deoxys, deoxys, PBEAbility.Sturdy, PBEAbilityAction.Damage) && deoxys.HP == 1); #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }
public void Intimidate_Works() { #region Setup PBEDataProvider.GlobalRandom.Seed = 0; PBESettings settings = PBESettings.DefaultSettings; var p0 = new TestPokemonCollection(3); p0[0] = new TestPokemon(settings, PBESpecies.Shuckle, 0, 100, PBEMove.Splash); p0[1] = new TestPokemon(settings, PBESpecies.Magikarp, 0, 100, PBEMove.Splash); p0[2] = new TestPokemon(settings, PBESpecies.Happiny, 0, 100, PBEMove.Splash); var p1 = new TestPokemonCollection(2); p1[0] = new TestPokemon(settings, PBESpecies.Luxray, 0, 100, PBEMove.Splash) { Ability = PBEAbility.Intimidate }; p1[1] = new TestPokemon(settings, PBESpecies.Skitty, 0, 100, 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 shuckle = t0.Party[0]; PBEBattlePokemon magikarp = t0.Party[1]; PBEBattlePokemon happiny = t0.Party[2]; PBEBattlePokemon luxray = t1.Party[0]; PBEBattlePokemon skitty = t1.Party[1]; battle.Begin(); #endregion #region Check Assert.True(battle.VerifyAbilityHappened(luxray, luxray, PBEAbility.Intimidate, PBEAbilityAction.Stats) && // Activated happiny.AttackChange < 0 && magikarp.AttackChange < 0 && shuckle.AttackChange == 0 && skitty.AttackChange == 0); // Hit only surrounding foes #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }
public void ColorChange_Does_Not_Activate() { #region Setup PBEDataProvider.GlobalRandom.Seed = 0; PBESettings settings = PBESettings.DefaultSettings; var p0 = new TestPokemonCollection(1); p0[0] = new TestPokemon(settings, PBESpecies.Conkeldurr, 0, 50, PBEMove.CloseCombat); var p1 = new TestPokemonCollection(1); p1[0] = new TestPokemon(settings, PBESpecies.Kecleon, 0, 100, PBEMove.Substitute) { Ability = PBEAbility.ColorChange }; 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 conkeldurr = t0.Party[0]; PBEBattlePokemon kecleon = t1.Party[0]; battle.Begin(); #endregion #region Use and check Assert.True(t0.SelectActionsIfValid(out _, new PBETurnAction(conkeldurr, PBEMove.CloseCombat, PBETurnTarget.FoeCenter))); Assert.True(t1.SelectActionsIfValid(out _, new PBETurnAction(kecleon, PBEMove.Substitute, PBETurnTarget.AllyCenter))); battle.RunTurn(); Assert.True(battle.VerifyStatus2Happened(kecleon, kecleon, PBEStatus2.Substitute, PBEStatusAction.Added) && // Substitute added !kecleon.Status2.HasFlag(PBEStatus2.Substitute) && // Substitute broke kecleon.Type1 == PBEType.Normal && kecleon.Type2 == PBEType.None); // ColorChange not activated #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }