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 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 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 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 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 CastformCherrim_Interacts_With_AirLock(PBESpecies species, PBEAbility ability, PBEForm form) { #region Setup PBERandom.SetSeed(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; battle.Begin(); 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]; #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.True(PBEBattle.SelectActionsIfValid(t0, new PBETurnAction(magikarp, rayquaza))); Assert.True(PBEBattle.SelectActionsIfValid(t1, 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.True(PBEBattle.SelectActionsIfValid(t0, new PBETurnAction(rayquaza, magikarp))); Assert.True(PBEBattle.SelectActionsIfValid(t1, 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 Gem_Does_Not_Activate__Effectiveness() { #region Setup PBERandom.SetSeed(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 = new PBEBattle(PBEBattleFormat.Double, 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 excadrill = t0.Party[0]; PBEBattlePokemon starly = t0.Party[1]; PBEBattlePokemon rotom = t1.Party[0]; PBEBattlePokemon shedinja = t1.Party[1]; #endregion #region Use and check Assert.True(PBEBattle.SelectActionsIfValid(t0, new PBETurnAction(excadrill, PBEMove.Earthquake, PBETurnTarget.AllyRight | PBETurnTarget.FoeLeft | PBETurnTarget.FoeRight), new PBETurnAction(starly, PBEMove.Splash, PBETurnTarget.AllyRight))); Assert.True(PBEBattle.SelectActionsIfValid(t1, 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 PBERandom.SetSeed(1); // 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 = new PBEBattle(PBEBattleFormat.Double, 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 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; #endregion #region Use and check Assert.True(PBEBattle.SelectActionsIfValid(t0, new PBETurnAction(corsola, PBEMove.Earthquake, PBETurnTarget.AllyRight | PBETurnTarget.FoeLeft | PBETurnTarget.FoeRight), new PBETurnAction(magikarp, PBEMove.Splash, PBETurnTarget.AllyRight))); Assert.True(PBEBattle.SelectActionsIfValid(t1, 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 PBERandom.SetSeed(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; battle.Begin(); 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; } #endregion #region Use VacuumWave to lower HP Assert.True(PBEBattle.SelectActionsIfValid(t0, new PBETurnAction(lucario, PBEMove.VacuumWave, PBETurnTarget.FoeCenter))); Assert.True(PBEBattle.SelectActionsIfValid(t1, new PBETurnAction(rooster, PBEMove.Splash, PBETurnTarget.AllyCenter))); battle.RunTurn(); #endregion #region Use Roost and check Assert.True(PBEBattle.SelectActionsIfValid(t0, new PBETurnAction(lucario, PBEMove.Earthquake, PBETurnTarget.FoeCenter))); Assert.True(PBEBattle.SelectActionsIfValid(t1, 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 }
//[InlineData(PBEMove.SkyDrop, PBEStatus2.Airborne)] public void HelpingHand_HitsSemiInvulnerable(PBEMove move, PBEStatus2 status2) { #region Setup PBERandom.SetSeed(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 = new PBEBattle(PBEBattleFormat.Double, 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 minun = t0.Party[0]; PBEBattlePokemon giratina = t0.Party[1]; PBEBattlePokemon magikarp = t1.Party[0]; #endregion #region Use Shadow Force Assert.True(PBEBattle.SelectActionsIfValid(t0, new PBETurnAction(minun, PBEMove.Splash, PBETurnTarget.AllyLeft), new PBETurnAction(giratina, move, PBETurnTarget.FoeLeft))); Assert.True(PBEBattle.SelectActionsIfValid(t1, new PBETurnAction(magikarp, PBEMove.Splash, PBETurnTarget.AllyLeft))); battle.RunTurn(); Assert.True(giratina.Status2.HasFlag(status2)); #endregion #region Use Helping Hand and check Assert.True(PBEBattle.SelectActionsIfValid(t0, new PBETurnAction(minun, PBEMove.HelpingHand, PBETurnTarget.AllyRight), new PBETurnAction(giratina, move, PBETurnTarget.FoeLeft))); Assert.True(PBEBattle.SelectActionsIfValid(t1, 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 Confusion_Heal__Bug(bool bugFix) { #region Setup PBERandom.SetSeed(40703); // 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 = 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 deoxys = t0.Party[0]; PBEBattlePokemon accelgor = t1.Party[0]; #endregion #region Use and check Assert.True(PBEBattle.SelectActionsIfValid(t0, new PBETurnAction(deoxys, PBEMove.Splash, PBETurnTarget.AllyCenter))); Assert.True(PBEBattle.SelectActionsIfValid(t1, 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 }
public void BellyDrum_Contrary__Bug(bool bugFix) { #region Setup PBERandom.SetSeed(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 = 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 hariyama = t0.Party[0]; PBEBattlePokemon magikarp = t1.Party[0]; hariyama.AttackChange = settings.MaxStatChange; #endregion #region Use and check Assert.True(PBEBattle.SelectActionsIfValid(t0, new PBETurnAction(hariyama, PBEMove.BellyDrum, PBETurnTarget.AllyCenter))); Assert.True(PBEBattle.SelectActionsIfValid(t1, 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 Gem_Activates__FixedDamage__Bug(bool bugFix) { #region Setup PBERandom.SetSeed(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 = 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 swellow = t0.Party[0]; PBEBattlePokemon magikarp = t1.Party[0]; #endregion #region Use and check Assert.True(PBEBattle.SelectActionsIfValid(t0, new PBETurnAction(swellow, PBEMove.Endeavor, PBETurnTarget.FoeCenter))); Assert.True(PBEBattle.SelectActionsIfValid(t1, 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 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 Explosion_User_Loses_Multiple() { #region Setup PBERandom.SetSeed(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; battle.Begin(); 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]; #endregion #region Use move and check Assert.True(PBEBattle.SelectActionsIfValid(t0, 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.True(PBEBattle.SelectActionsIfValid(t1, 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.Winner == battle.Teams[1]); // Golem's team loses #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }
public void SecretPower_SereneGrace__Bug(bool bugFix) { #region Setup PBERandom.SetSeed(4); // 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; battle.Begin(); PBETrainer t0 = battle.Trainers[0]; PBETrainer t1 = battle.Trainers[1]; PBEBattlePokemon makuhita = t0.Party[0]; PBEBattlePokemon magikarp = t1.Party[0]; #endregion #region Use and check Assert.True(PBEBattle.SelectActionsIfValid(t0, new PBETurnAction(makuhita, PBEMove.SecretPower, PBETurnTarget.FoeCenter))); Assert.True(PBEBattle.SelectActionsIfValid(t1, 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 Intimidate_Does_Not_Hit_Through_Substitute() { #region Setup PBERandom.SetSeed(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; battle.Begin(); 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]; #endregion #region Use Substitute Assert.True(PBEBattle.SelectActionsIfValid(t0, new PBETurnAction(shuckle, PBEMove.Substitute, PBETurnTarget.AllyCenter))); Assert.True(PBEBattle.SelectActionsIfValid(t1, new PBETurnAction(skitty, PBEMove.Splash, PBETurnTarget.AllyCenter))); battle.RunTurn(); Assert.True(shuckle.Status2.HasFlag(PBEStatus2.Substitute)); #endregion #region Switch in Luxray and check Assert.True(PBEBattle.SelectActionsIfValid(t0, new PBETurnAction(shuckle, PBEMove.Splash, PBETurnTarget.AllyCenter))); Assert.True(PBEBattle.SelectActionsIfValid(t1, 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 Shaymin_Reverts_To_Normal_Form_Forever() { #region Setup PBERandom.SetSeed(1); // 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 = new PBEBattle(PBEBattleFormat.Single, settings, new PBETrainerInfo(p0, "Trainer 0"), new PBETrainerInfo(p1, "Trainer 1"), battleTerrain: PBEBattleTerrain.Snow); battle.OnNewEvent += PBEBattle.ConsoleBattleEventHandler; battle.Begin(); 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]; #endregion #region Freeze Shaymin Assert.True(PBEBattle.SelectActionsIfValid(t0, new PBETurnAction(happiny, PBEMove.SecretPower, PBETurnTarget.FoeCenter))); Assert.True(PBEBattle.SelectActionsIfValid(t1, 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(PBEBattle.SelectActionsIfValid(t0, new PBETurnAction(happiny, PBEMove.Splash, PBETurnTarget.AllyCenter))); Assert.True(PBEBattle.SelectActionsIfValid(t1, new PBETurnAction(shaymin, magikarp))); battle.RunTurn(); Assert.True(shaymin.Form == PBEForm.Shaymin); #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }
public void CastformCherrim_Loses_Form(PBESpecies species, PBEAbility ability, PBEForm form) { #region Setup PBERandom.SetSeed(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; battle.Begin(); PBETrainer t0 = battle.Trainers[0]; PBETrainer t1 = battle.Trainers[1]; PBEBattlePokemon shuckle = t0.Party[0]; PBEBattlePokemon castformCherrim = t1.Party[0]; #endregion #region Use Sunny Day and check for correct form Assert.True(PBEBattle.SelectActionsIfValid(t0, new[] { new PBETurnAction(shuckle, PBEMove.Splash, PBETurnTarget.AllyCenter) })); Assert.True(PBEBattle.SelectActionsIfValid(t1, 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.True(PBEBattle.SelectActionsIfValid(t0, new[] { new PBETurnAction(shuckle, PBEMove.GastroAcid, PBETurnTarget.FoeCenter) })); Assert.True(PBEBattle.SelectActionsIfValid(t1, 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 PBERandom.SetSeed(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 = new PBEBattle(PBEBattleFormat.Double, 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 excadrill = t0.Party[0]; PBEBattlePokemon happiny = t1.Party[0]; PBEBattlePokemon qwilfish = t1.Party[1]; #endregion #region Use and check Assert.True(PBEBattle.SelectActionsIfValid(t0, new PBETurnAction(excadrill, PBEMove.Earthquake, PBETurnTarget.AllyRight | PBETurnTarget.FoeLeft | PBETurnTarget.FoeRight))); Assert.True(PBEBattle.SelectActionsIfValid(t1, new PBETurnAction(happiny, PBEMove.WideGuard, PBETurnTarget.AllyLeft | PBETurnTarget.AllyRight), new PBETurnAction(qwilfish, PBEMove.Splash, PBETurnTarget.AllyRight))); battle.RunTurn(); Assert.True(battle.VerifyTeamStatusHappened(t1.Team, PBETeamStatus.WideGuard, PBETeamStatusAction.Damage, damageVictim: happiny) && happiny.HPPercentage == 1 && battle.VerifyTeamStatusHappened(t1.Team, PBETeamStatus.WideGuard, PBETeamStatusAction.Damage, damageVictim: 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 PBERandom.SetSeed(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; battle.Begin(); PBETrainer t0 = battle.Trainers[0]; PBETrainer t1 = battle.Trainers[1]; PBEBattlePokemon mienshao = t0.Party[0]; PBEBattlePokemon magikarp = t1.Party[0]; #endregion #region Use move Assert.True(PBEBattle.SelectActionsIfValid(t0, new PBETurnAction(mienshao, move, PBETurnTarget.AllyCenter))); Assert.True(PBEBattle.SelectActionsIfValid(t1, new PBETurnAction(magikarp, PBEMove.Splash, PBETurnTarget.AllyCenter))); battle.RunTurn(); Assert.True(mienshao.Protection_Counter == 1); #endregion #region Use Calm Mind and check Assert.True(PBEBattle.SelectActionsIfValid(t0, new PBETurnAction(mienshao, PBEMove.CalmMind, PBETurnTarget.AllyCenter))); Assert.True(PBEBattle.SelectActionsIfValid(t1, 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 AutoCenter_Works(bool left) { #region Setup PBERandom.SetSeed(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 = new PBEBattle(PBEBattleFormat.Triple, settings, new PBETrainerInfo(p, "Trainer 0"), new PBETrainerInfo(p, "Trainer 1")); battle.OnNewEvent += PBEBattle.ConsoleBattleEventHandler; battle.Begin(); 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]; #endregion #region Force auto-center and check Assert.True(PBEBattle.SelectActionsIfValid(t0, new PBETurnAction(magikarp0, left ? PBEMove.Splash : PBEMove.Protect, PBETurnTarget.AllyLeft), new PBETurnAction(golem0, PBEMove.Explosion, PBETurnTarget.AllyLeft | PBETurnTarget.AllyRight | PBETurnTarget.FoeLeft | PBETurnTarget.FoeCenter | PBETurnTarget.FoeRight), new PBETurnAction(happiny0, left ? PBEMove.Protect : PBEMove.Splash, PBETurnTarget.AllyRight))); Assert.True(PBEBattle.SelectActionsIfValid(t1, new PBETurnAction(magikarp1, left ? PBEMove.Splash : PBEMove.Protect, PBETurnTarget.AllyLeft), new PBETurnAction(golem1, PBEMove.Explosion, PBETurnTarget.AllyLeft | PBETurnTarget.AllyRight | PBETurnTarget.FoeLeft | PBETurnTarget.FoeCenter | PBETurnTarget.FoeRight), 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 LeechSeed_And_LiquidOoze() { #region Setup PBERandom.SetSeed(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; battle.Begin(); PBETrainer t0 = battle.Trainers[0]; PBETrainer t1 = battle.Trainers[1]; PBEBattlePokemon shroomish = t0.Party[0]; PBEBattlePokemon tentacruel = t1.Party[0]; #endregion #region Use LeechSeed and check Assert.True(PBEBattle.SelectActionsIfValid(t0, new PBETurnAction(shroomish, PBEMove.LeechSeed, PBETurnTarget.FoeCenter))); Assert.True(PBEBattle.SelectActionsIfValid(t1, new PBETurnAction(tentacruel, PBEMove.Splash, PBETurnTarget.AllyCenter))); battle.RunTurn(); Assert.True(shroomish.HP == 0 && tentacruel.HP == 0 && // Both fainted battle.Winner == battle.Teams[0]); // Shroomish's team wins #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }
public void PoisonHeal_BadlyPoisoned_Counter_Works() { #region Setup PBERandom.SetSeed(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; battle.Begin(); PBETrainer t0 = battle.Trainers[0]; PBETrainer t1 = battle.Trainers[1]; PBEBattlePokemon seviper = t0.Party[0]; PBEBattlePokemon gliscor = t1.Party[0]; #endregion #region Badly Poison Gliscor and check Assert.True(PBEBattle.SelectActionsIfValid(t0, new PBETurnAction(seviper, PBEMove.Toxic, PBETurnTarget.FoeCenter))); Assert.True(PBEBattle.SelectActionsIfValid(t1, 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 LifeOrb_User_Wins() { #region Setup PBERandom.SetSeed(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; battle.Begin(); 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(); #endregion #region Use HeadCharge and check Assert.True(PBEBattle.SelectActionsIfValid(t0, new PBETurnAction(riolu, PBEMove.VacuumWave, PBETurnTarget.FoeCenter))); Assert.True(PBEBattle.SelectActionsIfValid(t1, new PBETurnAction(magikarp, PBEMove.Splash, PBETurnTarget.AllyCenter))); battle.RunTurn(); Assert.True(riolu.HP == 0 && magikarp.HP == 0 && // Both fainted battle.Winner == battle.Teams[0]); // Bouffalant's team wins #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }
public void IronBarbs_User_Loses() { #region Setup PBERandom.SetSeed(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; battle.Begin(); 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(); #endregion #region Use Pound and check Assert.True(PBEBattle.SelectActionsIfValid(t0, new PBETurnAction(lucario, PBEMove.Pound, PBETurnTarget.FoeCenter))); Assert.True(PBEBattle.SelectActionsIfValid(t1, new PBETurnAction(ferroseed, PBEMove.Splash, PBETurnTarget.AllyCenter))); battle.RunTurn(); Assert.True(lucario.HP == 0 && ferroseed.HP == 0 && // Both fainted battle.Winner == battle.Teams[1]); // Ferroseed's team wins #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }
public void Confusion_Does_Not_Ignore_Sturdy() { #region Setup PBERandom.SetSeed(40703); // 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 = 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 deoxys = t0.Party[0]; PBEBattlePokemon accelgor = t1.Party[0]; #endregion #region Use and check Assert.True(PBEBattle.SelectActionsIfValid(t0, new PBETurnAction(deoxys, PBEMove.Splash, PBETurnTarget.AllyCenter))); Assert.True(PBEBattle.SelectActionsIfValid(t1, 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 PBERandom.SetSeed(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; battle.Begin(); 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]; #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 Gem_Works(PBEMove move, PBEItem item) { #region Setup PBERandom.SetSeed(1); // Seed ensures all moves do not miss PBESettings settings = PBESettings.DefaultSettings; var p0 = new TestPokemonCollection(1); p0[0] = new TestPokemon(settings, PBESpecies.Mew, 0, 1, move) { Item = item }; 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; battle.Begin(); PBETrainer t0 = battle.Trainers[0]; PBETrainer t1 = battle.Trainers[1]; PBEBattlePokemon mew = t0.Party[0]; PBEBattlePokemon magikarp = t1.Party[0]; #endregion #region Use and check Assert.True(PBEBattle.SelectActionsIfValid(t0, new PBETurnAction(mew, move, PBETurnTarget.FoeCenter))); Assert.True(PBEBattle.SelectActionsIfValid(t1, new PBETurnAction(magikarp, PBEMove.Splash, PBETurnTarget.AllyCenter))); battle.RunTurn(); Assert.True(!battle.VerifyMoveResultHappened(mew, magikarp, PBEResult.Missed) && // Did not miss battle.VerifyItemHappened(mew, mew, item, PBEItemAction.Consumed) && // Gem consumed mew.Item == PBEItem.None); // Properly removed #endregion #region Cleanup battle.OnNewEvent -= PBEBattle.ConsoleBattleEventHandler; #endregion }