Esempio n. 1
0
        public void KjacRostFTheBloomerInner(List <Delta> deltas, GMWithLocation gmLoc)
        {
            if (turn == 0)
            {
                Unit source = gmLoc.SubjectUnit;
                int  side   = gmLoc.Side;

                foreach (Lane l in gmLoc.Lanes)
                {
                    for (int pos = 0; pos < 2; pos++)
                    {
                        if (l.IsOccupied(side, pos) && l.Units[side, pos].Card.UnitType.Contains("Infantry"))
                        {
                            Unit target = l.Units[side, pos];
                            deltas.Add(new UnitDamageAmountDelta(target, 1, Damage.Type.MELEE, source));
                            appliedTo.Add(target);
                        }
                    }
                }
            }
            else if (turn == 1)
            {
                foreach (Unit u in appliedTo)
                {
                    deltas.Add(new UnitDamageAmountDelta(u, -1, Damage.Type.MELEE, gmLoc.SubjectUnit));
                }
                appliedTo.Clear();
            }
            turn++;
        }
Esempio n. 2
0
 private void RemoveEffects(List <Delta> deltas, GMWithLocation gmLoc, Damage.Type?phase)
 {
     if (AppliedTo != null)
     {
         deltas.Add(new TowerDamageAmountDelta(AppliedTo, -3));
         AppliedTo = null;
     }
 }
Esempio n. 3
0
        private void ApplyEffects(List <Delta> deltas, GMWithLocation gmLoc)
        {
            Tower tower = gmLoc.SubjectLane.Towers[gmLoc.Side];

            deltas.Add(
                new TowerDamageAmountDelta(tower, 3)
                );
            AppliedTo = tower;
        }
        public void InnerCommercialComsRelay(List <Delta> delta, GMWithLocation gmLoc)
        {
            System.Console.WriteLine("COMM COMS RELAY INIT DEP");
            CommercialComsRelayIR inputRequest = new CommercialComsRelayIR(
                gmLoc.SubjectPlayer, gmLoc.GameManager
                );

            gmLoc.SubjectPlayer.AssignInputRequest(inputRequest);
        }
Esempio n. 5
0
        public void AddBoardUpdate(List <Delta> deltas, GMWithLocation gmLoc)
        {
            gmLoc.GameManager.AddPersistentDeltas += RushInner;
            Tuple <int, int, int> lsp = Lane.GetLaneSidePosOf(gmLoc.SubjectUnit, gmLoc.Lanes);

            Lane = gmLoc.Lanes[lsp.Item1];
            Unit = gmLoc.SubjectUnit;
            Side = lsp.Item2;
        }
Esempio n. 6
0
 protected override Delta[] EffectRemoveDeltas(Unit appliedTo, GMWithLocation gmLoc)
 {
     return(new Delta[] {
         new UnitAbilityDelta(appliedTo,
                              gmLoc.SubjectUnit,
                              new RangedShield(2),
                              UnitAbilityDelta.DeltaMode.REMOVE,
                              gmLoc.GameManager)
     });
 }
        public void InnerCommercialShipper(List <Delta> deltas, GMWithLocation gmLoc)
        {
            System.Console.WriteLine("COMM SHIP INIT DEP");
            deltas.AddRange(gmLoc.SubjectPlayer.GetDrawDeltas(gmLoc.GameManager));
            CommercialShipperIR inputRequest = new CommercialShipperIR(
                gmLoc.SubjectPlayer, gmLoc.GameManager
                );

            gmLoc.SubjectPlayer.AssignInputRequest(inputRequest);
        }
Esempio n. 8
0
 protected override Delta[] EffectAddDeltas(GMWithLocation gmLoc)
 {
     return(new Delta[] {
         new UnitAbilityDelta(gmLoc.SubjectUnit,
                              gmLoc.SubjectUnit,
                              new RangedShield(2),
                              UnitAbilityDelta.DeltaMode.ADD,
                              gmLoc.GameManager)
     });
 }
Esempio n. 9
0
 public void SphereGreaserInner(List <Delta> deltas, GMWithLocation gmLoc)
 {
     if (gmLoc.IsFortifying(new string[] { "Drone" }))
     {
         deltas.AddRange(new List <Delta> {
             new RemoveFromLaneDelta(gmLoc.SubjectLane, gmLoc.Side, 0),
             new AddToHandDelta(gmLoc.SubjectPlayer.Hand, gmLoc.FrontUnit.Card)
         });
     }
 }
        private void RemovePersistentFromGM(List <Delta> deltas, GMWithLocation gmLoc, Damage.Type?phase)
        {
            System.Console.WriteLine("~\n~Persistent Field Ability Removed from GM~\n~");
            gmLoc.GameManager.AddPersistentDeltas -= ReapplyEffects;

            foreach (Unit u in appliedTo)
            {
                deltas.AddRange(GetRemoveDeltas(u, Source, gmLoc.GameManager));
            }
            appliedTo.Clear();
        }
Esempio n. 11
0
 private void RegrowthInner(List <Delta> deltas, GMWithLocation gmLoc, Damage.Type?phase)
 {
     if (Function(gmLoc, phase))
     {
         deltas.AddRange(
             gmLoc.SubjectPlayer.Hand
             .GetDrawDeltas(
                 gmLoc.SubjectUnit.Card,
                 gmLoc.GameManager
                 )
             );
     }
 }
Esempio n. 12
0
 public void TempInner(List <Delta> deltas, GMWithLocation gmLoc)
 {
     if (turn == 0 && ShouldApply(gmLoc))
     {
         deltas.AddRange(EffectAddDeltas(gmLoc));
         appliedTo = AppliedTo(gmLoc);
     }
     else if (turn == 1 && appliedTo != null)
     {
         deltas.AddRange(EffectRemoveDeltas(appliedTo, gmLoc));
         appliedTo = null;
     }
     turn++;
 }
 public void SphereSkeletalReshaperInner(List <Delta> deltas, GMWithLocation gmLoc)
 {
     if (gmLoc.IsFortifying("Carthan"))
     {
         deltas.AddRange(
             UnitHealthDelta.GetHealDeltas(
                 gmLoc.FrontUnit,
                 gmLoc.SubjectUnit,
                 2,
                 gmLoc.GameManager
                 )
             );
     }
 }
Esempio n. 14
0
        public void SphereDeathseekersInner(List <Delta> deltas, GMWithLocation gmLoc)
        {
            if (turn == 0)
            {
                Unit self = gmLoc.SubjectUnit;

                // Fortify Artillery: Gain Spore 3 until end of turn.
                if (gmLoc.IsFortifying("Artillery"))
                {
                    deltas.Add(
                        new UnitAbilityDelta(self, self, new Spore(3), UnitAbilityDelta.DeltaMode.ADD, gmLoc.GameManager)
                        );
                    appliedSporeTo = self;
                }

                // Fortify Infantry: Gain Lob until end of turn.
                if (gmLoc.IsFortifying("Infantry"))
                {
                    deltas.Add(
                        new UnitAbilityDelta(self, self, new Lob(), UnitAbilityDelta.DeltaMode.ADD, gmLoc.GameManager)
                        );
                    appliedLobTo = self;
                }
            }
            else if (turn == 1)
            {
                // Remove Spore
                if (appliedSporeTo != null)
                {
                    deltas.Add(
                        new UnitAbilityDelta(appliedSporeTo, appliedSporeTo,
                                             new Spore(3), UnitAbilityDelta.DeltaMode.REMOVE, gmLoc.GameManager)
                        );
                    appliedSporeTo = null;
                }

                // Remove Lob
                if (appliedLobTo != null)
                {
                    deltas.Add(
                        new UnitAbilityDelta(appliedLobTo, appliedLobTo,
                                             new Lob(), UnitAbilityDelta.DeltaMode.REMOVE, gmLoc.GameManager)
                        );
                    appliedLobTo = null;
                }
            }
            turn++;
        }
Esempio n. 15
0
        public void ArchonEtherealClassInner(List <Delta> deltas, GMWithLocation gmLoc)
        {
            Unit front = gmLoc.FrontUnit;

            if (front != null)
            {
                deltas.AddRange(
                    UnitHealthDelta.GetHealDeltas(
                        front,
                        gmLoc.SubjectUnit,
                        2,
                        gmLoc.GameManager
                        )
                    );

                int side = gmLoc.Side;

                Unit left = gmLoc.LeftLane?.Units?[side, 0];
                if (left != null)
                {
                    deltas.AddRange(
                        UnitHealthDelta.GetHealDeltas(
                            left,
                            gmLoc.SubjectUnit,
                            1,
                            gmLoc.GameManager
                            )
                        );
                }

                Unit right = gmLoc.RightLane?.Units?[side, 0];
                if (right != null)
                {
                    deltas.AddRange(
                        UnitHealthDelta.GetHealDeltas(
                            right,
                            gmLoc.SubjectUnit,
                            1,
                            gmLoc.GameManager
                            )
                        );
                }
            }
        }
Esempio n. 16
0
        void MulchInner(List <Delta> deltas, GMWithLocation gmLoc, Damage.Type?phase)
        {
            RemoveFromDeckDelta top = new RemoveFromDeckDelta(gmLoc.SubjectPlayer.Deck, gmLoc.SubjectPlayer.Deck[0], 0);

            deltas.Add(top);

            UnitCard topUnitCard = top.Card as UnitCard;

            // BackUnit works out perfectly because it returns null if its empty or if it contains SubjectUnit
            if (topUnitCard != null && gmLoc.SubjectPlayer.ManaPool.CanAfford(topUnitCard.DeployCost - 1) && gmLoc.BackUnit == null)
            {
                deltas.AddRange(gmLoc.SubjectPlayer.ManaPool.GetSubtractDeltas(topUnitCard.DeployCost - 1));
                deltas.AddRange(gmLoc.SubjectLane.GetDeployDeltas(topUnitCard, gmLoc.Side, 1, gmLoc.GameManager));
            }
            else
            {
                deltas.AddRange(gmLoc.SubjectPlayer.Discard.GetDiscardDeltas(new Card[] { top.Card }));
            }
        }
 public void ArchonBrynhildeClassInner(List <Delta> deltas, GMWithLocation gmLoc)
 {
     if (gmLoc.IsFortifying("Carthan"))
     {
         // heal front line 2
         deltas.AddRange(
             UnitHealthDelta.GetHealDeltas(
                 gmLoc.FrontUnit,
                 gmLoc.SubjectUnit,
                 2,
                 gmLoc.GameManager
                 )
             );
         // gain 3 mana
         deltas.AddRange(
             gmLoc.SubjectPlayer.ManaPool.GetAddDeltas(3)
             );
     }
 }
 public void SphereDeathseekersInner(List <Delta> deltas, GMWithLocation gmLoc)
 {
     if (turn == 0)
     {
         Unit self  = gmLoc.SubjectUnit;
         Unit front = gmLoc.FrontUnit;
         if (gmLoc.Pos == 0)
         {
             // Deploy Front Line: This gains Ranged and Melee Shield 3 this turn.
             deltas.AddRange(new Delta[] {
                 new UnitAbilityDelta(self, self, new RangedShield(3), UnitAbilityDelta.DeltaMode.ADD, gmLoc.GameManager),
                 new UnitAbilityDelta(self, self, new MeleeShield(3), UnitAbilityDelta.DeltaMode.ADD, gmLoc.GameManager)
             });
             appliedShieldTo = self;
         }
         else if (gmLoc.IsFortifying("Carthan"))
         {
             // Fortify Carthan: This gains +3R this turn.
             deltas.Add(new UnitDamageAmountDelta(self, 3, Damage.Type.RANGED, self));
             applied3RTo = self;
         }
     }
     else if (turn == 1)
     {
         if (appliedShieldTo != null)
         {
             deltas.AddRange(new Delta[] {
                 new UnitAbilityDelta(appliedShieldTo, appliedShieldTo, new RangedShield(3), UnitAbilityDelta.DeltaMode.REMOVE, gmLoc.GameManager),
                 new UnitAbilityDelta(appliedShieldTo, appliedShieldTo, new MeleeShield(3), UnitAbilityDelta.DeltaMode.REMOVE, gmLoc.GameManager)
             });
             appliedShieldTo = null;
         }
         if (applied3RTo != null)
         {
             deltas.Add(new UnitDamageAmountDelta(applied3RTo, -3, Damage.Type.RANGED, applied3RTo));
             applied3RTo = null;
         }
     }
     turn++;
 }
        public void SphereMedicalVanguardInner(List <Delta> deltas, GMWithLocation gmLoc)
        {
            Console.WriteLine($"Sphere Medical Vanguard L{gmLoc.Lane} S{gmLoc.Side} P{gmLoc.Pos}");
            if (gmLoc.Pos == 0 && gmLoc.BackUnit == null)
            {
                Console.WriteLine("  In");
                int lane = gmLoc.Lane;
                int side = gmLoc.Side;

                Unit leftLaneFront = gmLoc.LeftLane?.Units?[side, 0];
                if (leftLaneFront != null)
                {
                    Console.WriteLine("  L");
                    deltas.AddRange(
                        UnitHealthDelta.GetHealDeltas(
                            leftLaneFront,
                            gmLoc.SubjectUnit,
                            1,
                            gmLoc.GameManager
                            )
                        );
                }

                Unit rightLaneFront = gmLoc.RightLane?.Units?[side, 0];
                if (rightLaneFront != null)
                {
                    Console.WriteLine("  R");
                    deltas.AddRange(
                        UnitHealthDelta.GetHealDeltas(
                            rightLaneFront,
                            gmLoc.SubjectUnit,
                            1,
                            gmLoc.GameManager
                            )
                        );
                }
            }
        }
Esempio n. 20
0
        public void EXAvengerCustomDrone1Inner(List <Delta> deltas, GMWithLocation gmLoc)
        {
            if (turn == 0)
            {
                if (gmLoc.IsFortifying("Carthan", "Infantry"))
                {
                    foreach (Card c in gmLoc.SubjectPlayer.Hand)
                    {
                        deltas.AddRange(gmLoc.SubjectPlayer.Hand.GetRemoveDelta(c));
                    }

                    buffAmount = gmLoc.SubjectPlayer.Hand.Count;

                    deltas.Add(new UnitDamageAmountDelta(gmLoc.FrontUnit, buffAmount,
                                                         Damage.Type.RANGED, gmLoc.SubjectUnit));
                    buffed = gmLoc.FrontUnit;

                    deltas.AddRange(
                        UnitHealthDelta.GetHealDeltas(
                            gmLoc.FrontUnit,
                            gmLoc.SubjectUnit,
                            buffAmount,
                            gmLoc.GameManager
                            )
                        );
                }
            }
            else if (turn == 1)
            {
                if (buffed != null)
                {
                    deltas.Add(new UnitDamageAmountDelta(buffed, -buffAmount,
                                                         Damage.Type.RANGED, gmLoc.SubjectUnit));
                    buffed = null;
                }
            }
            turn++;
        }
Esempio n. 21
0
 void SwarmInner(List <Delta> deltas, GMWithLocation gmLoc)
 {
     if (gmLoc.Pos == 1)
     {
         foreach (string s in gmLoc.SubjectUnit.Card.UnitType.Split(' '))
         {
             if (s != "Unit" && gmLoc.IsFortifying(s))
             {
                 RemoveFromDeckDelta[] rs = gmLoc.SubjectPlayer.Deck
                                            .GetDrawDeltas(count: 1);
                 deltas.AddRange(rs);
                 deltas.AddRange(
                     gmLoc.SubjectPlayer.Hand
                     .GetDrawDeltas(
                         rs,
                         gmLoc.GameManager
                         )
                     );
                 return;
             }
         }
     }
 }
Esempio n. 22
0
 void SporeInner(List <Delta> deltas, GMWithLocation gameStateLoc, Damage.Type?phase)
 {
     deltas.AddRange(gameStateLoc.SubjectPlayer.ManaPool
                     .GetAddDeltas(Amount));
 }
Esempio n. 23
0
 public void RemoveFromGM(List <Delta> deltas, GMWithLocation gmLoc, Damage.Type?phase)
 {
     gmLoc.GameManager.AddHealDeltas -= MgrLtTulYorvesInner;
 }
Esempio n. 24
0
 protected override Delta[] EffectRemoveDeltas(Unit appliedTo, GMWithLocation gmLoc)
 {
     return(new Delta[] {
         new UnitDamageAmountDelta(appliedTo, -3, Damage.Type.RANGED, gmLoc.SubjectUnit)
     });
 }
Esempio n. 25
0
 protected override Delta[] EffectAddDeltas(GMWithLocation gmLoc)
 {
     return(new Delta[] {
         new UnitDamageAmountDelta(gmLoc.FrontUnit, 3, Damage.Type.RANGED, gmLoc.SubjectUnit)
     });
 }
Esempio n. 26
0
 protected override Unit AppliedTo(GMWithLocation gmLoc)
 {
     return(gmLoc.FrontUnit);
 }
Esempio n. 27
0
 protected override bool ShouldApply(GMWithLocation gmLoc)
 {
     return(gmLoc.IsFortifying("Carthan"));
 }
Esempio n. 28
0
 public void RemoveBoardUpdate(List <Delta> deltas, GMWithLocation gmLoc, Damage.Type?phase)
 {
     gmLoc.GameManager.AddPersistentDeltas -= RushInner;
 }
Esempio n. 29
0
 public void AddToGM(List <Delta> deltas, GMWithLocation gmLoc)
 {
     System.Console.WriteLine("~MgrLt Added to GM~");
     gmLoc.GameManager.AddHealDeltas += MgrLtTulYorvesInner;
 }
Esempio n. 30
0
 protected override bool ShouldApply(GMWithLocation gmLoc)
 {
     return(gmLoc.Pos == 0);
 }