public void ProcessEffects_Flip_Tails() { var pokemon = new PokemonCard() { Hp = 100 }; var attack = new ApplyAttackPrevention() { CoinFlip = true }; pokemon.Attacks.Add(attack); var player = new Player() { ActivePokemonCard = pokemon }; var opponent = new Player { ActivePokemonCard = new PokemonCard() { Hp = 100 } }; var game = new GameField().WithFlips(CoinFlipper.TAILS); game.AddPlayer(player); game.AddPlayer(opponent); game.ActivePlayerIndex = 0; attack.ProcessEffects(game, player, opponent); Assert.Empty(player.ActivePokemonCard.TemporaryAbilities); }
public void RetreatActivePokemon_Energy_Removed() { var p = new Player(); var card = new PokemonCard(p); var card2 = new PokemonCard(p); var energyCard = new EnergyCard() { Amount = 1 }; p.Hand.Add(energyCard); p.SetActivePokemon(card); p.SetBenchedPokemon(card2); var game = new GameField() { ActivePlayerIndex = 0 }; game.AddPlayer(p); game.AddPlayer(new Player()); game.PlayEnergyCard(energyCard, p.ActivePokemonCard); p.RetreatActivePokemon(p.BenchedPokemon.ValidPokemonCards.First(), new List <EnergyCard>(p.ActivePokemonCard.AttachedEnergy), new GameField()); Assert.Equal(card2.Id, p.ActivePokemonCard.Id); Assert.False(card.AttachedEnergy.Any()); }
public void ProcessEffectsTest_Heads() { var pokemon = new PokemonCard() { Hp = 100 }; var attack = new ApplyAttackFailOnTails(); pokemon.Attacks.Add(attack); var player = new Player() { ActivePokemonCard = pokemon }; var opponent = new Player { ActivePokemonCard = new PokemonCard() { Hp = 100 } }; var game = new GameField(); game.AddPlayer(player); game.AddPlayer(opponent); game.ActivePlayerIndex = 0; attack.ProcessEffects(game, player, opponent); Assert.Single(opponent.ActivePokemonCard.TemporaryAbilities); }
public void SwapActivePlayerTest() { Player p1 = new Player(); Player p2 = new Player(); var game = new GameField(); game.AddPlayer(p1); game.AddPlayer(p2); game.ActivePlayerIndex = 0; Assert.Equal(0, game.ActivePlayerIndex); Assert.Equal(p1, game.ActivePlayer); Assert.Equal(p2, game.NonActivePlayer); game.SwapActivePlayer(); Assert.Equal(1, game.ActivePlayerIndex); Assert.Equal(p1, game.NonActivePlayer); Assert.Equal(p2, game.ActivePlayer); game.SwapActivePlayer(); Assert.Equal(0, game.ActivePlayerIndex); Assert.Equal(p1, game.ActivePlayer); Assert.Equal(p2, game.NonActivePlayer); }
public void Bounce_EvolvedPokemon_OnlyBasic() { var effect = new BouncePokemonEffect() { OnlyBasic = true, ShuffleIntoDeck = false, ReturnAttachedToHand = true, TargetingMode = TargetingMode.OpponentActive }; var opponent = new Player(); var pokemon = new PokemonCard(opponent) { Name = "Pokemon1", Stage = 0, Hp = 100 }; var evolution = new PokemonCard(opponent) { Name = "Evo", Stage = 1, EvolvesFrom = "Pokemon1", Hp = 100 }; opponent.ActivePokemonCard = evolution; pokemon.Evolve(evolution); var other = new PokemonCard(opponent); opponent.BenchedPokemon.Add(other); var sub = Substitute.For <INetworkPlayer>(); sub.SendAndWaitForResponse <CardListMessage>(Arg.Any <NetworkMessage>()).ReturnsForAnyArgs(new CardListMessage { Cards = new List <NetworkId> { other.Id } }); opponent.SetNetworkPlayer(sub); var game = new GameField(); game.AddPlayer(new Player() { Id = NetworkId.Generate() }); game.AddPlayer(opponent); opponent.Id = NetworkId.Generate(); effect.Process(game, game.Players[0], opponent, null); Assert.Single(opponent.Hand); Assert.Equal(pokemon.Id, opponent.Hand[0].Id); Assert.Single(opponent.DiscardPile); Assert.Equal(evolution.Id, opponent.DiscardPile[0].Id); }
public void Setup() { game.AddPlayer(new Player() { Id = NetworkId.Generate() }); game.AddPlayer(new Player() { Id = NetworkId.Generate() }); player1 = game.Players[0]; }
public void ScoopUp_TargetIsEvolved() { var effect = new BouncePokemonEffect { OnlyBasic = true, TargetingMode = TargetingMode.YourPokemon, ReturnAttachedToHand = false, ShuffleIntoDeck = false }; var player = new Player(); var activePokemon = new PokemonCard() { Stage = 1, Owner = player, Hp = 100 }; var basicPokemon = new PokemonCard(); var targetPokemon = new PokemonCard() { Stage = 1, AttachedEnergy = new List <EnergyCard> { new EnergyCard(), new EnergyCard() }, Owner = player, EvolvedFrom = basicPokemon, Hp = 100 }; var sub = Substitute.For <INetworkPlayer>(); sub.SendAndWaitForResponse <CardListMessage>(Arg.Any <NetworkMessage>()).ReturnsForAnyArgs(new CardListMessage { Cards = new List <NetworkId> { targetPokemon.Id } }); player.SetNetworkPlayer(sub); player.ActivePokemonCard = activePokemon; player.BenchedPokemon.Add(targetPokemon); var game = new GameField(); game.AddPlayer(player); game.AddPlayer(new Player()); game.ActivePlayerIndex = 0; effect.Process(game, player, game.NonActivePlayer, null); Assert.Equal(0, player.BenchedPokemon.Count); Assert.Equal(3, player.DiscardPile.Count); Assert.Single(player.Hand); Assert.Equal(basicPokemon.Id, player.Hand[0].Id); }
public void ProcessEffectsTest() { var attack = new DamageManyAttack { Damage = 20, EnemyBenchDamage = 10, SelfDamage = 30, TeamBenchDamage = 40 }; var player = new Player() { Id = NetworkId.Generate() }; player.ActivePokemonCard = new PokemonCard() { Hp = 100, Owner = player }; player.BenchedPokemon.Add(new PokemonCard() { Hp = 100, Owner = player }); var opponent = new Player() { Id = NetworkId.Generate() }; opponent.ActivePokemonCard = new PokemonCard() { Hp = 100, Owner = opponent }; opponent.BenchedPokemon.Add(new PokemonCard() { Hp = 100, Owner = opponent }); var game = new GameField(); game.AddPlayer(player); game.AddPlayer(opponent); game.ActivePlayerIndex = 0; attack.ProcessEffects(game, player, opponent); Assert.Equal(10, opponent.BenchedPokemon.GetFirst().DamageCounters); Assert.Equal(40, player.BenchedPokemon.GetFirst().DamageCounters); Assert.Equal(30, player.ActivePokemonCard.DamageCounters); Assert.Equal(20, attack.GetDamage(null, null, new GameField()).NormalDamage); }
public void CardShuffledIntoDeck() { var effect = new BouncePokemonEffect() { ShuffleIntoDeck = true, TargetingMode = TargetingMode.OpponentActive }; var opponent = new Player(); var pokemon = new PokemonCard(opponent) { AttachedEnergy = new List <EnergyCard> { new EnergyCard() }, Hp = 100 }; opponent.ActivePokemonCard = pokemon; var other = new PokemonCard(opponent); opponent.BenchedPokemon.Add(other); var sub = Substitute.For <INetworkPlayer>(); sub.SendAndWaitForResponse <CardListMessage>(Arg.Any <NetworkMessage>()).ReturnsForAnyArgs(new CardListMessage { Cards = new List <NetworkId> { other.Id } }); opponent.SetNetworkPlayer(sub); var game = new GameField(); game.AddPlayer(new Player() { Id = NetworkId.Generate() }); game.AddPlayer(opponent); opponent.Id = NetworkId.Generate(); effect.Process(game, game.Players[0], opponent, null); Assert.Equal(2, opponent.Deck.Cards.Count); Assert.Equal(other, opponent.ActivePokemonCard); }
public void TestWithValues(float modifier, int damage, int expected, bool roundDown = false) { var game = new GameField(); var player = new Player() { Id = NetworkId.Generate() }; var opponent = new Player() { Id = NetworkId.Generate() }; game.AddPlayer(player); game.AddPlayer(opponent); opponent.ActivePokemonCard = new PokemonCard() { Owner = opponent }; game.ActivePlayerIndex = 0; var pokemon = new PokemonCard() { Owner = player }; var effect = new AttachmentEffect() { Ability = new DamageTakenModifier() { Modifer = modifier, RoundDown = roundDown }, TargetingMode = TargetingMode.YourActive }; player.ActivePokemonCard = pokemon; effect.Process(game, player, opponent, player.ActivePokemonCard); pokemon.DealDamage(damage, game, opponent.ActivePokemonCard, true); Assert.Equal(expected, pokemon.DamageCounters); }
public void DealDamage_Redirect_Higher_Than_Taken() { var game = new GameField(); var player = new Player() { Id = NetworkId.Generate() }; var active = new PokemonCard() { Hp = 100, Owner = player }; game.AddPlayer(player); game.AddPlayer(new Player() { ActivePokemonCard = new PokemonCard() { Hp = 100 }, Id = NetworkId.Generate() }); game.ActivePlayerIndex = 0; game.NonActivePlayer.ActivePokemonCard.Owner = game.NonActivePlayer; player.ActivePokemonCard = active; var benched = new PokemonCard() { Hp = 100, Owner = player }; benched.Ability = new DamageRedirectorAbility(benched) { AskYesNo = false, AmountToRedirect = 50 }; player.BenchedPokemon.Add(benched); game.ActivePlayer.ActivePokemonCard.DealDamage(20, game, game.NonActivePlayer.ActivePokemonCard, true); Assert.Equal(0, active.DamageCounters); Assert.Equal(20, benched.DamageCounters); }
private GameField createTestGame() { var game = new GameField(); game.FirstTurn = false; game.AddPlayer(new Player() { Id = NetworkId.Generate() }); game.AddPlayer(new Player() { Id = NetworkId.Generate() }); game.ActivePlayerIndex = 0; game.ActivePlayer.ActivePokemonCard = new TestPokemon(game.ActivePlayer); game.NonActivePlayer.ActivePokemonCard = new TestPokemon(game.NonActivePlayer); return(game); }
public void ProcessEffectsTest_PreventionLimit_HighDamage() { var pokemon = new PokemonCard() { Hp = 100 }; var attack = new ApplyDamagePreventionEffect() { CoinFlip = true, OnlyProtectSelf = false, MaxDamage = 20 }; pokemon.Attacks.Add(attack); var player = new Player() { ActivePokemonCard = pokemon }; var opponent = new Player { ActivePokemonCard = new PokemonCard() { Hp = 100 } }; var game = new GameField().WithFlips(CoinFlipper.HEADS); game.AddPlayer(player); game.AddPlayer(opponent); game.ActivePlayerIndex = 0; attack.ProcessEffects(game, player, opponent); Assert.Empty(player.ActivePokemonCard.DamageStoppers); Assert.Single(game.DamageStoppers); Assert.False(game.DamageStoppers[0].IsDamageIgnored(410)); }
public void ProcessEffects_All() { var pokemon = new PokemonCard() { Hp = 100 }; var attack = new ApplyAttackPrevention() { OnlySelf = false }; pokemon.Attacks.Add(attack); var player = new Player() { ActivePokemonCard = pokemon }; var opponent = new Player { ActivePokemonCard = new PokemonCard() { Hp = 100 } }; var game = new GameField(); game.AddPlayer(player); game.AddPlayer(opponent); game.ActivePlayerIndex = 0; attack.ProcessEffects(game, player, opponent); Assert.Single(player.ActivePokemonCard.TemporaryAbilities.OfType <PreventStatusEffects>()); Assert.Single(player.ActivePokemonCard.TemporaryAbilities.OfType <DamageTakenModifier>()); }
public void ProcessEffectsTest_Flip_Heads() { var pokemon = new PokemonCard() { Hp = 100 }; var attack = new ApplyDamagePreventionEffect() { CoinFlip = true, OnlyProtectSelf = true }; pokemon.Attacks.Add(attack); var player = new Player() { ActivePokemonCard = pokemon }; var opponent = new Player { ActivePokemonCard = new PokemonCard() { Hp = 100 } }; var game = new GameField().WithFlips(CoinFlipper.HEADS); game.AddPlayer(player); game.AddPlayer(opponent); game.ActivePlayerIndex = 0; attack.ProcessEffects(game, player, opponent); Assert.Single(player.ActivePokemonCard.DamageStoppers); }
public GameField HostGame(NetworkId hostPlayer, Deck deckInfo) { RemoveCompletedGames(); var player = new Player(MasterServer.Instance.Clients[hostPlayer]); var game = new GameField(); game.Format = deckInfo.FormatId; var cardService = (CardService)MasterServer.Instance.Services[typeof(CardService).Name]; foreach (var id in deckInfo.Cards.Select(x => x.CardId)) { var card = cardService.CreateCardById(id); card.Owner = player; var pokemonCard = card as PokemonCard; if (pokemonCard != null && pokemonCard.Ability != null) { pokemonCard.Ability.Id = NetworkId.Generate(); pokemonCard.Ability.PokemonOwner = pokemonCard; } if (pokemonCard != null) { foreach (var attack in pokemonCard.Attacks) { attack.Id = NetworkId.Generate(); } pokemonCard.ReInitLists(); } if (card is TrainerCard) { var trainerCard = (TrainerCard)card; if (trainerCard.Ability != null) { trainerCard.Ability.Id = NetworkId.Generate(); } } player.Deck.Cards.Push(card); } game.AddPlayer(player); ActiveGames.TryAdd(game.Id, game); return(game); }
public void DeckSearched() { var effect = new SearchDeckForCardEffect() { CardType = CardType.Any }; var player = new Player(); player.Id = NetworkId.Generate(); var target = new EnergyCard(); player.Deck.Cards.Push(target); player.Deck.Cards.Push(new EnergyCard()); player.Deck.Cards.Push(new EnergyCard()); player.Deck.Cards.Push(new EnergyCard()); player.Deck.Cards.Push(new EnergyCard()); var sub = Substitute.For <INetworkPlayer>(); sub.SendAndWaitForResponse <CardListMessage>(Arg.Any <NetworkMessage>()).ReturnsForAnyArgs(new CardListMessage { Cards = new List <NetworkId> { target.Id } }); player.SetNetworkPlayer(sub); var game = new GameField(); game.AddPlayer(player); effect.Process(game, player, null, null); Assert.Single(player.Hand); Assert.Equal(4, player.Deck.Cards.Count); Assert.Equal(target.Id, player.Hand[0].Id); }