diff --git a/Mage.Sets/src/mage/cards/a/AdmiralAckbar.java b/Mage.Sets/src/mage/cards/a/AdmiralAckbar.java
index 823dc3b0f4..2a68d0b34a 100644
--- a/Mage.Sets/src/mage/cards/a/AdmiralAckbar.java
+++ b/Mage.Sets/src/mage/cards/a/AdmiralAckbar.java
@@ -27,6 +27,7 @@
*/
package mage.cards.a;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.common.AttacksWithCreaturesTriggeredAbility;
@@ -36,7 +37,6 @@ import mage.abilities.effects.common.CastSourceTriggeredAbility;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.UntapAllControllerEffect;
-import mage.abilities.keyword.SpaceflightAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -47,9 +47,7 @@ import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.game.Game;
import mage.game.events.GameEvent;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.RebelStarshipToken;
/**
*
@@ -64,7 +62,7 @@ public class AdmiralAckbar extends CardImpl {
}
public AdmiralAckbar(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{U}{U}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{U}{U}");
addSuperType(SuperType.LEGENDARY);
this.subtype.add("Calamari");
this.subtype.add("Rebel");
@@ -91,20 +89,6 @@ public class AdmiralAckbar extends CardImpl {
}
}
-class RebelStarshipToken extends Token {
-
- public RebelStarshipToken() {
- super("B-Wing", "2/3 blue Rebel Starship artifact creature tokens with spaceflight name B-Wing", 2, 3);
- this.setOriginalExpansionSetCode("SWS");
- cardType.add(CardType.CREATURE);
- cardType.add(CardType.ARTIFACT);
- abilities.add(SpaceflightAbility.getInstance());
- color.setBlue(true);
- subtype.add("Rebel");
- subtype.add("Starship");
- }
-}
-
class AdmiralAckbarTriggeredAbility extends TriggeredAbilityImpl {
public AdmiralAckbarTriggeredAbility(Effect effect) {
@@ -132,6 +116,6 @@ class AdmiralAckbarTriggeredAbility extends TriggeredAbilityImpl {
@Override
public String getRule() {
- return "Whenever two or more Starship creatures you control attack, draw a card" ;
+ return "Whenever two or more Starship creatures you control attack, draw a card";
}
}
diff --git a/Mage.Sets/src/mage/cards/a/AerieWorshippers.java b/Mage.Sets/src/mage/cards/a/AerieWorshippers.java
index 54f1123d2f..c530c43095 100644
--- a/Mage.Sets/src/mage/cards/a/AerieWorshippers.java
+++ b/Mage.Sets/src/mage/cards/a/AerieWorshippers.java
@@ -27,18 +27,16 @@
*/
package mage.cards.a;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.DoIfCostPaid;
-import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.InspiredAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.AerieWorshippersBirdToken;
/**
*
@@ -47,7 +45,7 @@ import java.util.UUID;
public class AerieWorshippers extends CardImpl {
public AerieWorshippers(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{U}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}");
this.subtype.add("Human");
this.subtype.add("Cleric");
@@ -67,19 +65,3 @@ public class AerieWorshippers extends CardImpl {
return new AerieWorshippers(this);
}
}
-
-class AerieWorshippersBirdToken extends Token {
-
- public AerieWorshippersBirdToken() {
- super("Bird", "2/2 blue Bird enchantment creature token with flying");
- cardType.add(CardType.ENCHANTMENT);
- cardType.add(CardType.CREATURE);
- color.setBlue(true);
- subtype.add("Bird");
- power = new MageInt(2);
- toughness = new MageInt(2);
- this.addAbility(FlyingAbility.getInstance());
- this.setOriginalExpansionSetCode("BNG");
- this.setTokenType(2);
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/a/AkoumStonewaker.java b/Mage.Sets/src/mage/cards/a/AkoumStonewaker.java
index 9b488d0db6..2cad7a0181 100644
--- a/Mage.Sets/src/mage/cards/a/AkoumStonewaker.java
+++ b/Mage.Sets/src/mage/cards/a/AkoumStonewaker.java
@@ -27,6 +27,7 @@
*/
package mage.cards.a;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.LandfallAbility;
@@ -34,16 +35,12 @@ import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.DoIfCostPaid;
-import mage.abilities.keyword.HasteAbility;
-import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.game.Game;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.AkoumStonewakerElementalToken;
/**
*
@@ -92,28 +89,12 @@ class AkoumStonewakerEffect extends OneShotEffect {
@Override
public boolean apply(Game game, Ability source) {
-
+
CreateTokenEffect effect = new CreateTokenEffect(new AkoumStonewakerElementalToken());
- if(effect.apply(game, source)) {
- effect.exileTokensCreatedAtNextEndStep(game, source);
+ if (effect.apply(game, source)) {
+ effect.exileTokensCreatedAtNextEndStep(game, source);
return true;
}
return false;
}
}
-
-class AkoumStonewakerElementalToken extends Token {
-
- public AkoumStonewakerElementalToken() {
- super("Elemental", "3/1 red Elemental creature token with trample and haste");
- cardType.add(CardType.CREATURE);
- color.setRed(true);
- subtype.add("Elemental");
- power = new MageInt(3);
- toughness = new MageInt(1);
- this.addAbility(TrampleAbility.getInstance());
- this.addAbility(HasteAbility.getInstance());
- this.setOriginalExpansionSetCode("BFZ");
- this.setTokenType(1);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/a/AkroanCrusader.java b/Mage.Sets/src/mage/cards/a/AkroanCrusader.java
index 7cde81a3e3..c885edcf08 100644
--- a/Mage.Sets/src/mage/cards/a/AkroanCrusader.java
+++ b/Mage.Sets/src/mage/cards/a/AkroanCrusader.java
@@ -27,16 +27,14 @@
*/
package mage.cards.a;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.keyword.HasteAbility;
import mage.abilities.keyword.HeroicAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.AkroanSoldierToken;
/**
*
@@ -45,7 +43,7 @@ import java.util.UUID;
public class AkroanCrusader extends CardImpl {
public AkroanCrusader(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{R}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}");
this.subtype.add("Human");
this.subtype.add("Soldier");
@@ -53,7 +51,7 @@ public class AkroanCrusader extends CardImpl {
this.toughness = new MageInt(1);
// Heroic Whenever you cast a spell that targets Akroan Crusader, create a 1/1 red Soldier creature token with haste.
- this.addAbility(new HeroicAbility(new CreateTokenEffect(new SoldierToken())));
+ this.addAbility(new HeroicAbility(new CreateTokenEffect(new AkroanSoldierToken())));
}
public AkroanCrusader(final AkroanCrusader card) {
@@ -65,19 +63,3 @@ public class AkroanCrusader extends CardImpl {
return new AkroanCrusader(this);
}
}
-
-
-class SoldierToken extends Token {
-
- public SoldierToken() {
- super("Soldier", "1/1 red Soldier creature token with haste");
- setTokenType(3);
- cardType.add(CardType.CREATURE);
- color.setRed(true);
- subtype.add("Soldier");
- power = new MageInt(1);
- toughness = new MageInt(1);
- this.addAbility(HasteAbility.getInstance());
- }
-
-}
diff --git a/Mage.Sets/src/mage/cards/a/AlliedReinforcements.java b/Mage.Sets/src/mage/cards/a/AlliedReinforcements.java
index 721b99c158..10d3747032 100644
--- a/Mage.Sets/src/mage/cards/a/AlliedReinforcements.java
+++ b/Mage.Sets/src/mage/cards/a/AlliedReinforcements.java
@@ -27,14 +27,12 @@
*/
package mage.cards.a;
-import mage.MageInt;
+import java.util.UUID;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.KnightAllyToken;
/**
*
@@ -43,7 +41,7 @@ import java.util.UUID;
public class AlliedReinforcements extends CardImpl {
public AlliedReinforcements(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{3}{W}");
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{W}");
// Create two 2/2 white Knight Ally creature tokens.
this.getSpellAbility().addEffect(new CreateTokenEffect(new KnightAllyToken(), 2));
@@ -58,17 +56,3 @@ public class AlliedReinforcements extends CardImpl {
return new AlliedReinforcements(this);
}
}
-
-class KnightAllyToken extends Token {
-
- public KnightAllyToken() {
- super("Knight Ally", "2/2 white Knight Ally creature token");
- this.setExpansionSetCodeForImage("BFZ");
- cardType.add(CardType.CREATURE);
- color.setWhite(true);
- subtype.add("Knight");
- subtype.add("Ally");
- power = new MageInt(2);
- toughness = new MageInt(2);
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/a/ArchitectOfTheUntamed.java b/Mage.Sets/src/mage/cards/a/ArchitectOfTheUntamed.java
index 1e1011249e..1115c656ef 100644
--- a/Mage.Sets/src/mage/cards/a/ArchitectOfTheUntamed.java
+++ b/Mage.Sets/src/mage/cards/a/ArchitectOfTheUntamed.java
@@ -27,6 +27,7 @@
*/
package mage.cards.a;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
@@ -38,9 +39,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
import mage.filter.common.FilterControlledLandPermanent;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.ArchitectOfTheUntamedBeastToken;
/**
*
@@ -49,7 +48,7 @@ import java.util.UUID;
public class ArchitectOfTheUntamed extends CardImpl {
public ArchitectOfTheUntamed(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
this.subtype.add("Elf");
this.subtype.add("Artificer");
this.subtype.add("Druid");
@@ -62,7 +61,7 @@ public class ArchitectOfTheUntamed extends CardImpl {
// Pay {E}{E}{E}{E}{E}{E}{E}{E}: Create a 6/6 colorless Beast artifact creature token.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new ArchitectOfTheUntamedBeastToken(), 1), new PayEnergyCost(8)));
}
-
+
public ArchitectOfTheUntamed(final ArchitectOfTheUntamed card) {
super(card);
}
@@ -72,15 +71,3 @@ public class ArchitectOfTheUntamed extends CardImpl {
return new ArchitectOfTheUntamed(this);
}
}
-
-class ArchitectOfTheUntamedBeastToken extends Token {
-
- ArchitectOfTheUntamedBeastToken() {
- super("Beast", "6/6 colorless Beast artifact creature token");
- cardType.add(CardType.ARTIFACT);
- cardType.add(CardType.CREATURE);
- subtype.add("Beast");
- power = new MageInt(6);
- toughness = new MageInt(6);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/b/BalduvianDead.java b/Mage.Sets/src/mage/cards/b/BalduvianDead.java
index e6bb072ed4..48eef9554c 100644
--- a/Mage.Sets/src/mage/cards/b/BalduvianDead.java
+++ b/Mage.Sets/src/mage/cards/b/BalduvianDead.java
@@ -27,6 +27,7 @@
*/
package mage.cards.b;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.DelayedTriggeredAbility;
@@ -37,7 +38,6 @@ import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.SacrificeTargetEffect;
-import mage.abilities.keyword.HasteAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -46,12 +46,10 @@ import mage.constants.Zone;
import mage.filter.common.FilterCreatureCard;
import mage.game.Game;
import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.BalduvianToken;
import mage.target.common.TargetCardInYourGraveyard;
import mage.target.targetpointer.FixedTarget;
-import java.util.UUID;
-
/**
*
* @author jeffwadsworth
@@ -59,7 +57,7 @@ import java.util.UUID;
public class BalduvianDead extends CardImpl {
public BalduvianDead(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}");
this.subtype.add("Zombie");
this.power = new MageInt(2);
this.toughness = new MageInt(3);
@@ -114,17 +112,3 @@ class BalduvianDeadEffect extends OneShotEffect {
return true;
}
}
-
-class BalduvianToken extends Token {
-
- public BalduvianToken() {
- super("Graveborn", "3/1 black and red Graveborn creature token with haste");
- cardType.add(CardType.CREATURE);
- color.setBlack(true);
- color.setRed(true);
- power = new MageInt(3);
- toughness = new MageInt(1);
- subtype.add("Graveborn");
- addAbility(HasteAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/b/BanthaHerd.java b/Mage.Sets/src/mage/cards/b/BanthaHerd.java
index 4c994d8d7c..08d0ca4985 100644
--- a/Mage.Sets/src/mage/cards/b/BanthaHerd.java
+++ b/Mage.Sets/src/mage/cards/b/BanthaHerd.java
@@ -27,6 +27,7 @@
*/
package mage.cards.b;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.BecomesMonstrousSourceTriggeredAbility;
@@ -38,11 +39,9 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.game.Game;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.TuskenRaiderToken;
import mage.players.Player;
-import java.util.UUID;
-
/**
*
* @author Styxo
@@ -98,15 +97,3 @@ class BathaHerdEffect extends OneShotEffect {
return false;
}
}
-
-class TuskenRaiderToken extends Token {
-
- public TuskenRaiderToken() {
- super("Tusken Raider", "white Tusken Raider creature token", 1, 1);
- this.setOriginalExpansionSetCode("SWS");
- cardType.add(CardType.CREATURE);
- color.setWhite(true);
- subtype.add("Tusken");
- subtype.add("Raider");
- }
-}
diff --git a/Mage.Sets/src/mage/cards/b/BaruFistOfKrosa.java b/Mage.Sets/src/mage/cards/b/BaruFistOfKrosa.java
index 2deff0a3b5..44adad6d64 100644
--- a/Mage.Sets/src/mage/cards/b/BaruFistOfKrosa.java
+++ b/Mage.Sets/src/mage/cards/b/BaruFistOfKrosa.java
@@ -27,6 +27,7 @@
*/
package mage.cards.b;
+import java.util.UUID;
import mage.MageInt;
import mage.ObjectColor;
import mage.abilities.Ability;
@@ -47,10 +48,9 @@ import mage.filter.predicate.mageobject.ColorPredicate;
import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.filter.predicate.permanent.ControllerPredicate;
import mage.game.Game;
+import mage.game.permanent.token.BaruFistOfKrosaToken;
import mage.game.permanent.token.Token;
-import java.util.UUID;
-
/**
*
* @author emerald000
@@ -120,15 +120,3 @@ class BaruFistOfKrosaEffect extends OneShotEffect {
return true;
}
}
-
-class BaruFistOfKrosaToken extends Token {
-
- BaruFistOfKrosaToken(int xValue) {
- super("Wurm", "X/X green Wurm creature token, where X is the number of lands you control");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- subtype.add("Wurm");
- power = new MageInt(xValue);
- toughness = new MageInt(xValue);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/b/BearsCompanion.java b/Mage.Sets/src/mage/cards/b/BearsCompanion.java
index 1ce849891d..3498916c01 100644
--- a/Mage.Sets/src/mage/cards/b/BearsCompanion.java
+++ b/Mage.Sets/src/mage/cards/b/BearsCompanion.java
@@ -27,15 +27,14 @@
*/
package mage.cards.b;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.BearsCompanionBearToken;
/**
*
@@ -44,7 +43,7 @@ import java.util.UUID;
public class BearsCompanion extends CardImpl {
public BearsCompanion(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}{U}{R}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}{U}{R}");
this.subtype.add("Human");
this.subtype.add("Warrior");
@@ -64,16 +63,3 @@ public class BearsCompanion extends CardImpl {
return new BearsCompanion(this);
}
}
-class BearsCompanionBearToken extends Token {
-
- public BearsCompanionBearToken() {
- super("Bear", "4/4 green Bear creature token");
- setOriginalExpansionSetCode("KTK");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- subtype.add("Bear");
- power = new MageInt(4);
- toughness = new MageInt(4);
- }
-
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/b/BeckonApparition.java b/Mage.Sets/src/mage/cards/b/BeckonApparition.java
index fbb7975f9d..bea453e9cd 100644
--- a/Mage.Sets/src/mage/cards/b/BeckonApparition.java
+++ b/Mage.Sets/src/mage/cards/b/BeckonApparition.java
@@ -27,26 +27,22 @@
*/
package mage.cards.b;
-import mage.MageInt;
+import java.util.UUID;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.ExileTargetEffect;
-import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.BeckonApparitionToken;
import mage.target.common.TargetCardInGraveyard;
-import java.util.UUID;
-
/**
* @author Loki
*/
public class BeckonApparition extends CardImpl {
public BeckonApparition(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{W/B}");
-
+ super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{W/B}");
this.getSpellAbility().addEffect(new ExileTargetEffect());
this.getSpellAbility().addTarget(new TargetCardInGraveyard());
@@ -62,18 +58,3 @@ public class BeckonApparition extends CardImpl {
return new BeckonApparition(this);
}
}
-
-
-class BeckonApparitionToken extends Token {
- BeckonApparitionToken() {
- super("Spirit", "1/1 white and black Spirit creature token with flying");
- this.setOriginalExpansionSetCode("GTC");
- cardType.add(CardType.CREATURE);
- color.setWhite(true);
- color.setBlack(true);
- subtype.add("Spirit");
- power = new MageInt(1);
- toughness = new MageInt(1);
- this.addAbility(FlyingAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/b/BloodlineKeeper.java b/Mage.Sets/src/mage/cards/b/BloodlineKeeper.java
index dff74ced11..ba7c64371c 100644
--- a/Mage.Sets/src/mage/cards/b/BloodlineKeeper.java
+++ b/Mage.Sets/src/mage/cards/b/BloodlineKeeper.java
@@ -27,9 +27,9 @@
*/
package mage.cards.b;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
-import mage.constants.ComparisonType;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
@@ -43,12 +43,11 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.cards.l.LordOfLineage;
import mage.constants.CardType;
+import mage.constants.ComparisonType;
import mage.constants.Zone;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.mageobject.SubtypePredicate;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.VampireToken;
/**
*
@@ -94,15 +93,3 @@ public class BloodlineKeeper extends CardImpl {
}
}
-
-class VampireToken extends Token {
- VampireToken() {
- super("Vampire", "2/2 black Vampire creature token with flying");
- cardType.add(CardType.CREATURE);
- color.setBlack(true);
- subtype.add("Vampire");
- power = new MageInt(2);
- toughness = new MageInt(2);
- addAbility(FlyingAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/b/BorisDevilboon.java b/Mage.Sets/src/mage/cards/b/BorisDevilboon.java
index 9fdfab72a2..048b7e6bbb 100644
--- a/Mage.Sets/src/mage/cards/b/BorisDevilboon.java
+++ b/Mage.Sets/src/mage/cards/b/BorisDevilboon.java
@@ -27,6 +27,7 @@
*/
package mage.cards.b;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
@@ -38,9 +39,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SuperType;
import mage.constants.Zone;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.MinorDemonToken;
/**
*
@@ -71,16 +70,3 @@ public class BorisDevilboon extends CardImpl {
return new BorisDevilboon(this);
}
}
-
-class MinorDemonToken extends Token {
-
- public MinorDemonToken() {
- super("Minor Demon", "1/1 black and red Demon creature token named Minor Demon");
- cardType.add(CardType.CREATURE);
- color.setBlack(true);
- color.setRed(true);
- subtype.add("Demon");
- power = new MageInt(1);
- toughness = new MageInt(1);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/b/BottleOfSuleiman.java b/Mage.Sets/src/mage/cards/b/BottleOfSuleiman.java
index a702d13947..5f2386afbd 100644
--- a/Mage.Sets/src/mage/cards/b/BottleOfSuleiman.java
+++ b/Mage.Sets/src/mage/cards/b/BottleOfSuleiman.java
@@ -27,24 +27,21 @@
*/
package mage.cards.b;
-import mage.MageInt;
+import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.OneShotEffect;
-import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.game.Game;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.DjinnToken;
import mage.players.Player;
-import java.util.UUID;
-
/**
*
* @author KholdFuzion
@@ -52,7 +49,7 @@ import java.util.UUID;
public class BottleOfSuleiman extends CardImpl {
public BottleOfSuleiman(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{4}");
+ super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}");
// {1}, Sacrifice Bottle of Suleiman: Flip a coin. If you lose the flip, Bottle of Suleiman deals 5 damage to you. If you win the flip, create a 5/5 colorless Djinn artifact creature token with flying.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BottleOfSuleimanEffect(), new GenericManaCost(1));
@@ -103,16 +100,3 @@ class BottleOfSuleimanEffect extends OneShotEffect {
return false;
}
}
-
-class DjinnToken extends Token {
-
- public DjinnToken() {
- super("Djinn", "5/5 colorless Djinn artifact creature token with flying");
- cardType.add(CardType.ARTIFACT);
- cardType.add(CardType.CREATURE);
- subtype.add("Djinn");
- power = new MageInt(5);
- toughness = new MageInt(5);
- addAbility(FlyingAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/b/BreedingPit.java b/Mage.Sets/src/mage/cards/b/BreedingPit.java
index d8c9a98731..33f3a6b9c4 100644
--- a/Mage.Sets/src/mage/cards/b/BreedingPit.java
+++ b/Mage.Sets/src/mage/cards/b/BreedingPit.java
@@ -27,7 +27,7 @@
*/
package mage.cards.b;
-import mage.MageInt;
+import java.util.UUID;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.common.BeginningOfYourEndStepTriggeredAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
@@ -38,9 +38,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.TargetController;
import mage.constants.Zone;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.ThrullToken;
/**
*
@@ -49,12 +47,11 @@ import java.util.UUID;
public class BreedingPit extends CardImpl {
public BreedingPit(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{B}");
-
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{B}");
// At the beginning of your upkeep, sacrifice Breeding Pit unless you pay {B}{B}.
this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new SacrificeSourceUnlessPaysEffect(new ManaCostsImpl("{B}{B}")), TargetController.YOU, false));
-
+
// At the beginning of your end step, create a 0/1 black Thrull creature token.
this.addAbility(new BeginningOfYourEndStepTriggeredAbility(new CreateTokenEffect(new ThrullToken()), false));
}
@@ -68,15 +65,3 @@ public class BreedingPit extends CardImpl {
return new BreedingPit(this);
}
}
-
-class ThrullToken extends Token {
-
- ThrullToken() {
- super("Thrull", "0/1 black Thrull creature token");
- cardType.add(CardType.CREATURE);
- color.setBlack(true);
- subtype.add("Thrull");
- power = new MageInt(0);
- toughness = new MageInt(1);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/b/BreyaEtheriumShaper.java b/Mage.Sets/src/mage/cards/b/BreyaEtheriumShaper.java
index b581ca9f34..86df708bfc 100644
--- a/Mage.Sets/src/mage/cards/b/BreyaEtheriumShaper.java
+++ b/Mage.Sets/src/mage/cards/b/BreyaEtheriumShaper.java
@@ -27,6 +27,7 @@
*/
package mage.cards.b;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.Mode;
@@ -38,7 +39,6 @@ import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.effects.common.continuous.BoostTargetEffect;
-import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -46,13 +46,11 @@ import mage.constants.Duration;
import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.common.FilterControlledArtifactPermanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.ThopterToken;
import mage.target.TargetPlayer;
import mage.target.common.TargetControlledPermanent;
import mage.target.common.TargetCreaturePermanent;
-import java.util.UUID;
-
/**
*
* @author fireshoes
@@ -100,17 +98,3 @@ public class BreyaEtheriumShaper extends CardImpl {
return new BreyaEtheriumShaper(this);
}
}
-
-class ThopterToken extends Token {
-
- ThopterToken() {
- super("Thopter", "1/1 blue Thopter artifact creature tokens with flying");
- cardType.add(CardType.CREATURE);
- cardType.add(CardType.ARTIFACT);
- color.setBlue(true);
- subtype.add("Thopter");
- power = new MageInt(1);
- toughness = new MageInt(1);
- this.addAbility(FlyingAbility.getInstance());
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/b/BrindleShoat.java b/Mage.Sets/src/mage/cards/b/BrindleShoat.java
index de484a9013..34fb347ba8 100644
--- a/Mage.Sets/src/mage/cards/b/BrindleShoat.java
+++ b/Mage.Sets/src/mage/cards/b/BrindleShoat.java
@@ -27,15 +27,14 @@
*/
package mage.cards.b;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.DiesTriggeredAbility;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.BoarToken;
/**
*
@@ -44,7 +43,7 @@ import java.util.UUID;
public class BrindleShoat extends CardImpl {
public BrindleShoat(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{G}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}");
this.subtype.add("Boar");
this.power = new MageInt(1);
@@ -63,14 +62,3 @@ public class BrindleShoat extends CardImpl {
return new BrindleShoat(this);
}
}
-
-class BoarToken extends Token {
- BoarToken() {
- super("Boar", "3/3 green Boar creature token");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- subtype.add("Boar");
- power = new MageInt(3);
- toughness = new MageInt(3);
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/b/BroodKeeper.java b/Mage.Sets/src/mage/cards/b/BroodKeeper.java
index 8b06fe15e7..975debc06d 100644
--- a/Mage.Sets/src/mage/cards/b/BroodKeeper.java
+++ b/Mage.Sets/src/mage/cards/b/BroodKeeper.java
@@ -27,22 +27,15 @@
*/
package mage.cards.b;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.AuraAttachedTriggeredAbility;
-import mage.abilities.common.SimpleActivatedAbility;
-import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.effects.common.continuous.BoostSourceEffect;
-import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.Duration;
-import mage.constants.Zone;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.BroodKeeperDragonToken;
/**
*
@@ -51,7 +44,7 @@ import java.util.UUID;
public class BroodKeeper extends CardImpl {
public BroodKeeper(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{R}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}");
this.subtype.add("Human");
this.subtype.add("Shaman");
@@ -74,19 +67,3 @@ public class BroodKeeper extends CardImpl {
return new BroodKeeper(this);
}
}
-
-class BroodKeeperDragonToken extends Token {
-
- public BroodKeeperDragonToken() {
- super("Dragon", "2/2 red Dragon creature token with flying. It has \"{R}: This creature gets +1/+0 until end of turn.\"");
- this.setOriginalExpansionSetCode("M15");
- cardType.add(CardType.CREATURE);
- color.setRed(true);
- subtype.add("Dragon");
- power = new MageInt(2);
- toughness = new MageInt(2);
-
- this.addAbility(FlyingAbility.getInstance());
- this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 0, Duration.EndOfTurn), new ManaCostsImpl("{R}")));
- }
-}
diff --git a/Mage.Sets/src/mage/cards/b/BudokaGardener.java b/Mage.Sets/src/mage/cards/b/BudokaGardener.java
index b9e52bd819..e662803602 100644
--- a/Mage.Sets/src/mage/cards/b/BudokaGardener.java
+++ b/Mage.Sets/src/mage/cards/b/BudokaGardener.java
@@ -27,30 +27,26 @@
*/
package mage.cards.b;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
-import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
-import mage.abilities.dynamicvalue.DynamicValue;
-import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.FlipSourceEffect;
import mage.abilities.effects.common.PutLandFromHandOntoBattlefieldEffect;
-import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.filter.common.FilterControlledLandPermanent;
import mage.filter.common.FilterControlledPermanent;
import mage.game.Game;
+import mage.game.permanent.token.DokaiWeaverofLifeToken;
import mage.game.permanent.token.Token;
import mage.players.Player;
-import java.util.UUID;
-
/**
* @author Loki
*/
@@ -85,6 +81,8 @@ public class BudokaGardener extends CardImpl {
class BudokaGardenerEffect extends OneShotEffect {
+ final static FilterControlledPermanent filterLands = new FilterControlledLandPermanent("lands you control");
+
BudokaGardenerEffect() {
super(Outcome.PutLandInPlay);
staticText = "If you control ten or more lands, flip {this}";
@@ -98,7 +96,7 @@ class BudokaGardenerEffect extends OneShotEffect {
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
- if (game.getBattlefield().count(DokaiWeaverofLifeToken.filterLands, source.getSourceId(), source.getControllerId(), game) >= 10) {
+ if (game.getBattlefield().count(filterLands, source.getSourceId(), source.getControllerId(), game) >= 10) {
new FlipSourceEffect(new DokaiWeaverofLife()).apply(game, source);
}
return true;
@@ -131,19 +129,3 @@ class DokaiWeaverofLife extends Token {
this.addAbility(ability);
}
}
-
-class DokaiWeaverofLifeToken extends Token {
-
- final static FilterControlledPermanent filterLands = new FilterControlledLandPermanent("lands you control");
-
- DokaiWeaverofLifeToken() {
- super("Elemental", "X/X green Elemental creature token, where X is the number of lands you control");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- subtype.add("Elemental");
- power = new MageInt(0);
- toughness = new MageInt(0);
- DynamicValue controlledLands = new PermanentsOnBattlefieldCount(filterLands);
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostSourceEffect(controlledLands, controlledLands, Duration.WhileOnBattlefield)));
- }
-}
diff --git a/Mage.Sets/src/mage/cards/c/CallOfTheNightwing.java b/Mage.Sets/src/mage/cards/c/CallOfTheNightwing.java
index 23bc3d53fc..0ceaa713dc 100644
--- a/Mage.Sets/src/mage/cards/c/CallOfTheNightwing.java
+++ b/Mage.Sets/src/mage/cards/c/CallOfTheNightwing.java
@@ -27,16 +27,13 @@
*/
package mage.cards.c;
-import mage.MageInt;
+import java.util.UUID;
import mage.abilities.effects.common.CipherEffect;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.NightwingHorrorToken;
/**
*
@@ -45,11 +42,10 @@ import java.util.UUID;
public class CallOfTheNightwing extends CardImpl {
public CallOfTheNightwing(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{U}{B}");
-
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{U}{B}");
// Create a 1/1 blue and black Horror creature token with flying.
- this.getSpellAbility().addEffect(new CreateTokenEffect(new NightwingHorrorToken(),1));
+ this.getSpellAbility().addEffect(new CreateTokenEffect(new NightwingHorrorToken(), 1));
// Cipher (Then you may exile this spell card encoded on a creature you control. Whenever that creature deals combat damage to a player, its controller may cast a copy of the encoded card without paying its mana cost.)
this.getSpellAbility().addEffect(new CipherEffect());
@@ -65,18 +61,3 @@ public class CallOfTheNightwing extends CardImpl {
return new CallOfTheNightwing(this);
}
}
-
-class NightwingHorrorToken extends Token {
- NightwingHorrorToken() {
- super("Horror", "1/1 blue and black Horror creature token with flying");
- cardType.add(CardType.CREATURE);
- this.color.setBlue(true);
- this.color.setBlack(true);
- this.subtype.add("Horror");
- this.power = new MageInt(1);
- this.toughness = new MageInt(1);
-
- // Flying
- this.addAbility(FlyingAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/c/CallTheSkybreaker.java b/Mage.Sets/src/mage/cards/c/CallTheSkybreaker.java
index a6ff59ccba..cfe922e21b 100644
--- a/Mage.Sets/src/mage/cards/c/CallTheSkybreaker.java
+++ b/Mage.Sets/src/mage/cards/c/CallTheSkybreaker.java
@@ -27,16 +27,13 @@
*/
package mage.cards.c;
-import mage.MageInt;
+import java.util.UUID;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.RetraceAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.CallTheSkyBreakerElementalToken;
/**
*
@@ -48,7 +45,7 @@ public class CallTheSkybreaker extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{5}{U/R}{U/R}");
// Create a 5/5 blue and red Elemental creature token with flying.
- this.getSpellAbility().addEffect(new CreateTokenEffect(new ElementalToken()));
+ this.getSpellAbility().addEffect(new CreateTokenEffect(new CallTheSkyBreakerElementalToken()));
// Retrace
this.addAbility(new RetraceAbility(this));
@@ -65,19 +62,3 @@ public class CallTheSkybreaker extends CardImpl {
}
}
-
-class ElementalToken extends Token {
- public ElementalToken() {
- super("Elemental", "5/5 blue and red Elemental creature token with flying");
- cardType.add(CardType.CREATURE);
- color.setBlue(true);
- color.setRed(true);
- subtype.add("Elemental");
- if (getOriginalExpansionSetCode() != null && getOriginalExpansionSetCode().equals("EMA")) {
- setTokenType(2);
- }
- power = new MageInt(5);
- toughness = new MageInt(5);
- this.addAbility(FlyingAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/c/CallowJushi.java b/Mage.Sets/src/mage/cards/c/CallowJushi.java
index 79ede1923e..82cb731d50 100644
--- a/Mage.Sets/src/mage/cards/c/CallowJushi.java
+++ b/Mage.Sets/src/mage/cards/c/CallowJushi.java
@@ -61,7 +61,7 @@ public class CallowJushi extends CardImpl {
private static final FilterSpiritOrArcaneCard filter = new FilterSpiritOrArcaneCard();
public CallowJushi(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{U}{U}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{U}");
this.subtype.add("Human");
this.subtype.add("Wizard");
diff --git a/Mage.Sets/src/mage/cards/c/CaribouRange.java b/Mage.Sets/src/mage/cards/c/CaribouRange.java
index b244e38af7..ecd11db88a 100644
--- a/Mage.Sets/src/mage/cards/c/CaribouRange.java
+++ b/Mage.Sets/src/mage/cards/c/CaribouRange.java
@@ -27,7 +27,7 @@
*/
package mage.cards.c;
-import mage.MageInt;
+import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility;
@@ -50,12 +50,10 @@ import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterControlledLandPermanent;
import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.filter.predicate.permanent.TokenPredicate;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.CaribouToken;
import mage.target.TargetPermanent;
import mage.target.common.TargetControlledCreaturePermanent;
-import java.util.UUID;
-
/**
*
* @author LoneFox
@@ -99,15 +97,3 @@ public class CaribouRange extends CardImpl {
return new CaribouRange(this);
}
}
-
-class CaribouToken extends Token {
-
- public CaribouToken() {
- super("Caribou", "0/1 white Caribou creature token");
- cardType.add(CardType.CREATURE);
- color.setWhite(true);
- subtype.add("Caribou");
- power = new MageInt(0);
- toughness = new MageInt(1);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/c/ChasmSkulker.java b/Mage.Sets/src/mage/cards/c/ChasmSkulker.java
index 480b4ccc77..00364e0697 100644
--- a/Mage.Sets/src/mage/cards/c/ChasmSkulker.java
+++ b/Mage.Sets/src/mage/cards/c/ChasmSkulker.java
@@ -27,6 +27,7 @@
*/
package mage.cards.c;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.DiesTriggeredAbility;
@@ -34,7 +35,6 @@ import mage.abilities.common.DrawCardControllerTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
-import mage.abilities.keyword.IslandwalkAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -43,11 +43,9 @@ import mage.constants.Zone;
import mage.counters.CounterType;
import mage.game.Game;
import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.ChasmSkulkerSquidToken;
import mage.players.Player;
-import java.util.UUID;
-
/**
*
* @author LevelX2
@@ -55,7 +53,7 @@ import java.util.UUID;
public class ChasmSkulker extends CardImpl {
public ChasmSkulker(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{U}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}");
this.subtype.add("Squid");
this.subtype.add("Horror");
@@ -111,19 +109,3 @@ class ChasmSkulkerEffect extends OneShotEffect {
return false;
}
}
-
-class ChasmSkulkerSquidToken extends Token {
-
- public ChasmSkulkerSquidToken() {
- super("Squid", "1/1 blue Squid creature token with islandwalk");
- this.setOriginalExpansionSetCode("M15");
- cardType.add(CardType.CREATURE);
- color.setBlue(true);
- subtype.add("Squid");
- power = new MageInt(1);
- toughness = new MageInt(1);
-
- this.addAbility(new IslandwalkAbility());
- }
-
-}
diff --git a/Mage.Sets/src/mage/cards/c/Cloudseeder.java b/Mage.Sets/src/mage/cards/c/Cloudseeder.java
index 1f15955224..faf8f4ba4d 100644
--- a/Mage.Sets/src/mage/cards/c/Cloudseeder.java
+++ b/Mage.Sets/src/mage/cards/c/Cloudseeder.java
@@ -27,9 +27,9 @@
*/
package mage.cards.c;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
-import mage.abilities.common.CanBlockOnlyFlyingAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.DiscardCardCost;
import mage.abilities.costs.common.TapSourceCost;
@@ -40,9 +40,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.CloudSpriteToken;
/**
*
@@ -75,19 +73,3 @@ public class Cloudseeder extends CardImpl {
return new Cloudseeder(this);
}
}
-
-class CloudSpriteToken extends Token {
-
- public CloudSpriteToken() {
- super("Cloud Sprite", "1/1 blue faerie creature token named Cloud Sprite with flying and \"Cloud Sprite can block only creatures with flying.\"");
- this.setOriginalExpansionSetCode("FUT");
- cardType.add(CardType.CREATURE);
- color.setBlue(true);
- subtype.add("Faerie");
- power = new MageInt(1);
- toughness = new MageInt(1);
-
- this.addAbility(FlyingAbility.getInstance());
- this.addAbility(new CanBlockOnlyFlyingAbility());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/c/CoralBarrier.java b/Mage.Sets/src/mage/cards/c/CoralBarrier.java
index 5dce0fb742..00fe2e40a8 100644
--- a/Mage.Sets/src/mage/cards/c/CoralBarrier.java
+++ b/Mage.Sets/src/mage/cards/c/CoralBarrier.java
@@ -27,17 +27,15 @@
*/
package mage.cards.c;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.keyword.DefenderAbility;
-import mage.abilities.keyword.IslandwalkAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.CoralBarrierSquidToken;
/**
*
@@ -46,7 +44,7 @@ import java.util.UUID;
public class CoralBarrier extends CardImpl {
public CoralBarrier(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{U}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}");
this.subtype.add("Wall");
this.power = new MageInt(1);
@@ -56,7 +54,7 @@ public class CoralBarrier extends CardImpl {
this.addAbility(DefenderAbility.getInstance());
// When Coral Barrier enters the battlefield, create a 1/1 blue Squid creature token with islandwalk.
this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new CoralBarrierSquidToken()), false));
-
+
}
public CoralBarrier(final CoralBarrier card) {
@@ -68,19 +66,3 @@ public class CoralBarrier extends CardImpl {
return new CoralBarrier(this);
}
}
-
-class CoralBarrierSquidToken extends Token {
-
- public CoralBarrierSquidToken() {
- super("Squid", "1/1 blue Squid creature token with islandwalk");
- this.setOriginalExpansionSetCode("M15");
- cardType.add(CardType.CREATURE);
- color.setBlue(true);
- subtype.add("Squid");
- power = new MageInt(1);
- toughness = new MageInt(1);
-
- this.addAbility(new IslandwalkAbility());
- }
-
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/c/Corpseweft.java b/Mage.Sets/src/mage/cards/c/Corpseweft.java
index 67b002e714..9b8c821d1a 100644
--- a/Mage.Sets/src/mage/cards/c/Corpseweft.java
+++ b/Mage.Sets/src/mage/cards/c/Corpseweft.java
@@ -27,7 +27,7 @@
*/
package mage.cards.c;
-import mage.MageInt;
+import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.Cost;
@@ -42,12 +42,10 @@ import mage.constants.Outcome;
import mage.constants.Zone;
import mage.filter.common.FilterCreatureCard;
import mage.game.Game;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.CorpseweftZombieToken;
import mage.players.Player;
import mage.target.common.TargetCardInYourGraveyard;
-import java.util.UUID;
-
/**
*
* @author LevelX2
@@ -107,16 +105,3 @@ class CorpseweftEffect extends OneShotEffect {
return false;
}
}
-
-class CorpseweftZombieToken extends Token {
-
- public CorpseweftZombieToken(int power, int toughness) {
- super("Zombie Horror", "X/X black Zombie Horror creature token, where X is twice the number of cards exiled this way");
- cardType.add(CardType.CREATURE);
- subtype.add("Zombie");
- subtype.add("Horror");
- color.setBlack(true);
- this.power = new MageInt(power);
- this.toughness = new MageInt(toughness);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/c/CreakwoodLiege.java b/Mage.Sets/src/mage/cards/c/CreakwoodLiege.java
index 6883c4d098..4c6629a4de 100644
--- a/Mage.Sets/src/mage/cards/c/CreakwoodLiege.java
+++ b/Mage.Sets/src/mage/cards/c/CreakwoodLiege.java
@@ -27,6 +27,7 @@
*/
package mage.cards.c;
+import java.util.UUID;
import mage.MageInt;
import mage.ObjectColor;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
@@ -41,9 +42,7 @@ import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.ColorPredicate;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.CreakwoodLiegeToken;
/**
*
@@ -59,12 +58,10 @@ public class CreakwoodLiege extends CardImpl {
filterGreenCreature.add(new ColorPredicate(ObjectColor.GREEN));
}
-
public CreakwoodLiege(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{B/G}{B/G}{B/G}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B/G}{B/G}{B/G}");
this.subtype.add("Horror");
-
this.power = new MageInt(2);
this.toughness = new MageInt(2);
@@ -85,16 +82,3 @@ public class CreakwoodLiege extends CardImpl {
return new CreakwoodLiege(this);
}
}
-
-class CreakwoodLiegeToken extends Token {
- CreakwoodLiegeToken() {
- super("Worm", "1/1 black and green Worm creature token");
- cardType.add(CardType.CREATURE);
- color.setBlack(true);
- color.setGreen(true);
- subtype.add("Worm");
- power = new MageInt(1);
- toughness = new MageInt(1);
- }
-}
-
diff --git a/Mage.Sets/src/mage/cards/c/CribSwap.java b/Mage.Sets/src/mage/cards/c/CribSwap.java
index 42fbf9f6d6..6abeb08548 100644
--- a/Mage.Sets/src/mage/cards/c/CribSwap.java
+++ b/Mage.Sets/src/mage/cards/c/CribSwap.java
@@ -27,7 +27,7 @@
*/
package mage.cards.c;
-import mage.MageInt;
+import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.ExileTargetEffect;
@@ -38,12 +38,10 @@ import mage.constants.CardType;
import mage.constants.Outcome;
import mage.game.Game;
import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.CribSwapShapeshifterWhiteToken;
import mage.players.Player;
import mage.target.common.TargetCreaturePermanent;
-import java.util.UUID;
-
/**
*
* @author LevelX2
@@ -51,7 +49,7 @@ import java.util.UUID;
public class CribSwap extends CardImpl {
public CribSwap(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.TRIBAL,CardType.INSTANT},"{2}{W}");
+ super(ownerId, setInfo, new CardType[]{CardType.TRIBAL, CardType.INSTANT}, "{2}{W}");
this.subtype.add("Shapeshifter");
// Changeling
@@ -102,16 +100,3 @@ class CribSwapEffect extends OneShotEffect {
return false;
}
}
-
-class CribSwapShapeshifterWhiteToken extends Token {
-
- public CribSwapShapeshifterWhiteToken() {
- super("Shapeshifter", "1/1 colorless Shapeshifter creature token with changeling");
- this.setOriginalExpansionSetCode("LRW");
- cardType.add(CardType.CREATURE);
- subtype.add("Shapeshifter");
- power = new MageInt(1);
- toughness = new MageInt(1);
- addAbility(ChangelingAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/c/CrushOfTentacles.java b/Mage.Sets/src/mage/cards/c/CrushOfTentacles.java
index bbf0db71dc..04c731d5dc 100644
--- a/Mage.Sets/src/mage/cards/c/CrushOfTentacles.java
+++ b/Mage.Sets/src/mage/cards/c/CrushOfTentacles.java
@@ -27,7 +27,7 @@
*/
package mage.cards.c;
-import mage.MageInt;
+import java.util.UUID;
import mage.abilities.condition.common.SurgedCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.Effect;
@@ -38,9 +38,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.common.FilterNonlandPermanent;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.CrushOfTentaclesToken;
/**
*
@@ -70,16 +68,3 @@ public class CrushOfTentacles extends CardImpl {
return new CrushOfTentacles(this);
}
}
-
-class CrushOfTentaclesToken extends Token {
-
- public CrushOfTentaclesToken() {
- super("Octopus", "8/8 blue Octopus creature");
- this.setExpansionSetCodeForImage("BFZ");
- this.cardType.add(CardType.CREATURE);
- this.color.setBlue(true);
- this.subtype.add("Octopus");
- this.power = new MageInt(8);
- this.toughness = new MageInt(8);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/c/CunningBandit.java b/Mage.Sets/src/mage/cards/c/CunningBandit.java
index d14a903175..404fd31917 100644
--- a/Mage.Sets/src/mage/cards/c/CunningBandit.java
+++ b/Mage.Sets/src/mage/cards/c/CunningBandit.java
@@ -61,7 +61,7 @@ public class CunningBandit extends CardImpl {
private static final FilterSpiritOrArcaneCard filter = new FilterSpiritOrArcaneCard();
public CunningBandit(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{R}{R}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}{R}");
this.subtype.add("Human");
this.subtype.add("Warrior");
diff --git a/Mage.Sets/src/mage/cards/c/CurseOfTheSwine.java b/Mage.Sets/src/mage/cards/c/CurseOfTheSwine.java
index 6bd976bec8..adf64195b9 100644
--- a/Mage.Sets/src/mage/cards/c/CurseOfTheSwine.java
+++ b/Mage.Sets/src/mage/cards/c/CurseOfTheSwine.java
@@ -27,7 +27,7 @@
*/
package mage.cards.c;
-import mage.MageInt;
+import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.effects.OneShotEffect;
@@ -37,11 +37,9 @@ import mage.constants.CardType;
import mage.constants.Outcome;
import mage.game.Game;
import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.CurseOfTheSwineBoarToken;
import mage.target.common.TargetCreaturePermanent;
-import java.util.UUID;
-
/**
*
* @author LevelX2
@@ -105,15 +103,3 @@ class CurseOfTheSwineEffect extends OneShotEffect {
return true;
}
}
-
-class CurseOfTheSwineBoarToken extends Token {
-
- CurseOfTheSwineBoarToken() {
- super("Boar", "2/2 green Boar creature token");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- subtype.add("Boar");
- power = new MageInt(2);
- toughness = new MageInt(2);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/d/DarettiIngeniousIconoclast.java b/Mage.Sets/src/mage/cards/d/DarettiIngeniousIconoclast.java
index 7d018ce125..45bb0f9592 100644
--- a/Mage.Sets/src/mage/cards/d/DarettiIngeniousIconoclast.java
+++ b/Mage.Sets/src/mage/cards/d/DarettiIngeniousIconoclast.java
@@ -27,7 +27,7 @@
*/
package mage.cards.d;
-import mage.MageInt;
+import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.LoyaltyAbility;
import mage.abilities.common.PlanswalkerEntersWithLoyalityCountersAbility;
@@ -37,7 +37,6 @@ import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.DestroyTargetEffect;
import mage.abilities.effects.common.DoIfCostPaid;
import mage.abilities.effects.common.PutTokenOntoBattlefieldCopyTargetEffect;
-import mage.abilities.keyword.DefenderAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -48,13 +47,11 @@ import mage.filter.common.FilterControlledArtifactPermanent;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.CardTypePredicate;
import mage.game.Game;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.DarettiConstructToken;
import mage.target.TargetPermanent;
import mage.target.common.TargetCardInGraveyardOrBattlefield;
import mage.target.common.TargetControlledPermanent;
-import java.util.UUID;
-
/**
*
* @author LevelX2
@@ -126,22 +123,3 @@ class DarettiIngeniousIconoclastEffect extends OneShotEffect {
return false;
}
}
-
-class DarettiConstructToken extends Token {
-
- public DarettiConstructToken() {
- this("CNS");
- }
-
- public DarettiConstructToken(String setCode) {
- super("Construct", "1/1 colorless Construct artifact creature token with defender");
- this.setOriginalExpansionSetCode(setCode);
- cardType.add(CardType.ARTIFACT);
- cardType.add(CardType.CREATURE);
- subtype.add("Construct");
- power = new MageInt(1);
- toughness = new MageInt(1);
-
- addAbility(DefenderAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/d/DarkDepths.java b/Mage.Sets/src/mage/cards/d/DarkDepths.java
index 795d33eacd..eb0c8f3b32 100644
--- a/Mage.Sets/src/mage/cards/d/DarkDepths.java
+++ b/Mage.Sets/src/mage/cards/d/DarkDepths.java
@@ -27,7 +27,7 @@
*/
package mage.cards.d;
-import mage.MageInt;
+import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.StateTriggeredAbility;
import mage.abilities.common.EntersBattlefieldAbility;
@@ -37,8 +37,6 @@ import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.SacrificeSourceEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.effects.common.counter.RemoveCounterSourceEffect;
-import mage.abilities.keyword.FlyingAbility;
-import mage.abilities.keyword.IndestructibleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -48,9 +46,7 @@ import mage.counters.CounterType;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.MaritLageToken;
/**
*
@@ -140,22 +136,3 @@ class DarkDepthsAbility extends StateTriggeredAbility {
}
}
-
-class MaritLageToken extends Token {
-
- public MaritLageToken() {
- super("Marit Lage", "legendary 20/20 black Avatar creature token with flying and indestructible named Marit Lage");
- this.setOriginalExpansionSetCode("CSP");
- cardType.add(CardType.CREATURE);
- subtype.add("Avatar");
- addSuperType(SuperType.LEGENDARY);
-
- color.setBlack(true);
- power = new MageInt(20);
- toughness = new MageInt(20);
-
- this.addAbility(FlyingAbility.getInstance());
- this.addAbility(IndestructibleAbility.getInstance());
-
- }
-}
diff --git a/Mage.Sets/src/mage/cards/d/DaxosTheReturned.java b/Mage.Sets/src/mage/cards/d/DaxosTheReturned.java
index f17640e5e7..2cbd014bee 100644
--- a/Mage.Sets/src/mage/cards/d/DaxosTheReturned.java
+++ b/Mage.Sets/src/mage/cards/d/DaxosTheReturned.java
@@ -27,14 +27,12 @@
*/
package mage.cards.d;
+import java.util.UUID;
import mage.MageInt;
-import mage.MageObjectReference;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
-import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
-import mage.abilities.effects.ContinuousEffectImpl;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.counter.AddCountersControllerEffect;
@@ -44,12 +42,7 @@ import mage.constants.*;
import mage.counters.CounterType;
import mage.filter.FilterSpell;
import mage.filter.predicate.mageobject.CardTypePredicate;
-import mage.game.Game;
-import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
-import mage.players.Player;
-
-import java.util.UUID;
+import mage.game.permanent.token.DaxosSpiritToken;
/**
*
@@ -64,7 +57,7 @@ public class DaxosTheReturned extends CardImpl {
}
public DaxosTheReturned(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}{B}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}{B}");
addSuperType(SuperType.LEGENDARY);
this.subtype.add("Zombie");
this.subtype.add("Soldier");
@@ -91,54 +84,3 @@ public class DaxosTheReturned extends CardImpl {
return new DaxosTheReturned(this);
}
}
-
-class DaxosSpiritToken extends Token {
-
- DaxosSpiritToken() {
- super("Spirit", "white and black Spirit enchantment creature token with \"This creature's power and toughness are each equal to the number of experience counters you have.\"");
- this.setOriginalExpansionSetCode("C15");
- setTokenType(2);
- cardType.add(CardType.ENCHANTMENT);
- cardType.add(CardType.CREATURE);
- color.setWhite(true);
- color.setBlack(true);
- subtype.add("Spirit");
- power = new MageInt(0);
- toughness = new MageInt(0);
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new DaxosSpiritSetPTEffect()));
- }
-}
-
-class DaxosSpiritSetPTEffect extends ContinuousEffectImpl {
-
- public DaxosSpiritSetPTEffect() {
- super(Duration.WhileOnBattlefield, Layer.PTChangingEffects_7, SubLayer.SetPT_7b, Outcome.BoostCreature);
- staticText = "This creature's power and toughness are each equal to the number of experience counters you have";
- }
-
- public DaxosSpiritSetPTEffect(final DaxosSpiritSetPTEffect effect) {
- super(effect);
- }
-
- @Override
- public DaxosSpiritSetPTEffect copy() {
- return new DaxosSpiritSetPTEffect(this);
- }
-
- @Override
- public boolean apply(Game game, Ability source) {
- Player controller = game.getPlayer(source.getControllerId());
- if (controller != null) {
- Permanent permanent = game.getPermanent(source.getSourceId());
- if (permanent != null && new MageObjectReference(source.getSourceObject(game), game).refersTo(permanent, game)) {
- int amount = controller.getCounters().getCount(CounterType.EXPERIENCE);
- permanent.getPower().setValue(amount);
- permanent.getToughness().setValue(amount);
- return true;
- } else {
- discard();
- }
- }
- return false;
- }
-}
diff --git a/Mage.Sets/src/mage/cards/d/DeadlyGrub.java b/Mage.Sets/src/mage/cards/d/DeadlyGrub.java
index a9d4a1b1c7..fd144f9749 100644
--- a/Mage.Sets/src/mage/cards/d/DeadlyGrub.java
+++ b/Mage.Sets/src/mage/cards/d/DeadlyGrub.java
@@ -27,6 +27,7 @@
*/
package mage.cards.d;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.DiesTriggeredAbility;
@@ -35,16 +36,13 @@ import mage.abilities.condition.common.LastTimeCounterRemovedCondition;
import mage.abilities.decorator.ConditionalTriggeredAbility;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
-import mage.abilities.keyword.ShroudAbility;
import mage.abilities.keyword.VanishingSacrificeAbility;
import mage.abilities.keyword.VanishingUpkeepAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.counters.CounterType;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.DeadlyGrubToken;
/**
*
@@ -53,7 +51,7 @@ import java.util.UUID;
public class DeadlyGrub extends CardImpl {
public DeadlyGrub(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}");
this.subtype.add("Insect");
this.power = new MageInt(3);
this.toughness = new MageInt(1);
@@ -66,7 +64,7 @@ public class DeadlyGrub extends CardImpl {
this.addAbility(new VanishingSacrificeAbility());
// When Deadly Grub dies, if it had no time counters on it, create a 6/1 green Insect creature token with shroud.
this.addAbility(new ConditionalTriggeredAbility(new DiesTriggeredAbility(new CreateTokenEffect(new DeadlyGrubToken(), 1)),
- LastTimeCounterRemovedCondition.instance, "When {this} dies, if it had no time counters on it, create a 6/1 green Insect creature token with shroud."));
+ LastTimeCounterRemovedCondition.instance, "When {this} dies, if it had no time counters on it, create a 6/1 green Insect creature token with shroud."));
}
public DeadlyGrub(final DeadlyGrub card) {
@@ -78,15 +76,3 @@ public class DeadlyGrub extends CardImpl {
return new DeadlyGrub(this);
}
}
-
-class DeadlyGrubToken extends Token {
- DeadlyGrubToken() {
- super("Insect", "6/1 green Insect creature token with shroud");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- subtype.add("Insect");
- power = new MageInt(6);
- toughness = new MageInt(1);
- this.addAbility(ShroudAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/d/DeathpactAngel.java b/Mage.Sets/src/mage/cards/d/DeathpactAngel.java
index a7f6e5fc67..cdbb65139a 100644
--- a/Mage.Sets/src/mage/cards/d/DeathpactAngel.java
+++ b/Mage.Sets/src/mage/cards/d/DeathpactAngel.java
@@ -28,26 +28,15 @@
*/
package mage.cards.d;
+import java.util.UUID;
import mage.MageInt;
-import mage.abilities.Ability;
import mage.abilities.common.DiesTriggeredAbility;
-import mage.abilities.common.SimpleActivatedAbility;
-import mage.abilities.costs.common.SacrificeSourceCost;
-import mage.abilities.costs.common.TapSourceCost;
-import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.Zone;
-import mage.filter.common.FilterCreatureCard;
-import mage.filter.predicate.mageobject.NamePredicate;
-import mage.game.permanent.token.Token;
-import mage.target.common.TargetCardInYourGraveyard;
-
-import java.util.UUID;
+import mage.game.permanent.token.DeathpactAngelToken;
/**
*
@@ -77,32 +66,3 @@ public class DeathpactAngel extends CardImpl {
return new DeathpactAngel(this);
}
}
-
-class DeathpactAngelToken extends Token {
-
- private static final FilterCreatureCard filter = new FilterCreatureCard("card named Deathpact Angel from your graveyard");
-
- static {
- filter.add(new NamePredicate("Deathpact Angel"));
- }
-
- public DeathpactAngelToken() {
- super("Cleric", "1/1 white and black Cleric creature token. It has \"{3}{W}{B}{B}, {T}, Sacrifice this creature: Return a card named Deathpact Angel from your graveyard to the battlefield.\"");
- cardType.add(CardType.CREATURE);
-
- color.setWhite(true);
- color.setBlack(true);
-
- subtype.add("Cleric");
-
- power = new MageInt(1);
- toughness = new MageInt(1);
-
- Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnFromGraveyardToBattlefieldTargetEffect(), new ManaCostsImpl("{3}{W}{B}{B}"));
- ability.addCost(new TapSourceCost());
- ability.addCost(new SacrificeSourceCost());
- ability.addTarget(new TargetCardInYourGraveyard(filter));
- this.addAbility(ability);
- }
-
-}
diff --git a/Mage.Sets/src/mage/cards/d/DesolationTwin.java b/Mage.Sets/src/mage/cards/d/DesolationTwin.java
index 528ad36515..1e51103922 100644
--- a/Mage.Sets/src/mage/cards/d/DesolationTwin.java
+++ b/Mage.Sets/src/mage/cards/d/DesolationTwin.java
@@ -27,6 +27,7 @@
*/
package mage.cards.d;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.effects.common.CreateTokenEffect;
@@ -35,13 +36,11 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
import mage.game.Game;
-import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
-import mage.game.permanent.token.Token;
+import mage.game.events.GameEvent;
+import mage.game.permanent.token.EldraziToken;
import mage.game.stack.Spell;
-import java.util.UUID;
-
/**
*
* @author fireshoes
@@ -49,7 +48,7 @@ import java.util.UUID;
public class DesolationTwin extends CardImpl {
public DesolationTwin(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{10}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{10}");
this.subtype.add("Eldrazi");
this.power = new MageInt(10);
this.toughness = new MageInt(10);
@@ -99,14 +98,3 @@ class DesolationTwinOnCastAbility extends TriggeredAbilityImpl {
return "When you cast {this}, " + super.getRule();
}
}
-
-class EldraziToken extends Token {
-
- public EldraziToken() {
- super("Eldrazi", "10/10 colorless Eldrazi creature token");
- cardType.add(CardType.CREATURE);
- subtype.add("Eldrazi");
- power = new MageInt(10);
- toughness = new MageInt(10);
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/d/DevastatingSummons.java b/Mage.Sets/src/mage/cards/d/DevastatingSummons.java
index 56f74298bf..e18ebed6e8 100644
--- a/Mage.Sets/src/mage/cards/d/DevastatingSummons.java
+++ b/Mage.Sets/src/mage/cards/d/DevastatingSummons.java
@@ -27,6 +27,7 @@
*/
package mage.cards.d;
+import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.costs.common.SacrificeXTargetCost;
import mage.abilities.dynamicvalue.common.GetXValue;
@@ -37,9 +38,7 @@ import mage.constants.CardType;
import mage.constants.Outcome;
import mage.filter.common.FilterControlledLandPermanent;
import mage.game.Game;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.DevastatingSummonsElementalToken;
/**
*
@@ -48,12 +47,11 @@ import java.util.UUID;
public class DevastatingSummons extends CardImpl {
public DevastatingSummons(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{R}");
-
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{R}");
// As an additional cost to cast Devastating Summons, sacrifice X lands.
this.getSpellAbility().addCost(new SacrificeXTargetCost(new FilterControlledLandPermanent("lands"), true));
-
+
// Create two X/X red Elemental creature tokens.
this.getSpellAbility().addEffect(new DevastatingSummonsEffect());
}
@@ -81,13 +79,13 @@ class DevastatingSummonsEffect extends OneShotEffect {
@Override
public boolean apply(Game game, Ability source) {
- ElementalToken token = new ElementalToken();
-
+ DevastatingSummonsElementalToken token = new DevastatingSummonsElementalToken();
+
token.getPower().modifyBaseValue(new GetXValue().calculate(game, source, this));
token.getToughness().modifyBaseValue(new GetXValue().calculate(game, source, this));
-
+
token.putOntoBattlefield(2, game, source.getSourceId(), source.getControllerId());
-
+
return true;
}
@@ -96,13 +94,4 @@ class DevastatingSummonsEffect extends OneShotEffect {
return new DevastatingSummonsEffect(this);
}
- static class ElementalToken extends Token {
-
- public ElementalToken() {
- super("Elemental", "X/X red Elemental creature");
- cardType.add(CardType.CREATURE);
- color.setRed(true);
- subtype.add("Elemental");
- }
- }
}
diff --git a/Mage.Sets/src/mage/cards/d/DinOfTheFireherd.java b/Mage.Sets/src/mage/cards/d/DinOfTheFireherd.java
index edc69d1620..52af8e5dd1 100644
--- a/Mage.Sets/src/mage/cards/d/DinOfTheFireherd.java
+++ b/Mage.Sets/src/mage/cards/d/DinOfTheFireherd.java
@@ -27,7 +27,7 @@
*/
package mage.cards.d;
-import mage.MageInt;
+import java.util.UUID;
import mage.ObjectColor;
import mage.abilities.Ability;
import mage.abilities.effects.Effect;
@@ -41,13 +41,12 @@ import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterControlledLandPermanent;
import mage.filter.predicate.mageobject.ColorPredicate;
import mage.game.Game;
+import mage.game.permanent.token.DinOfTheFireherdToken;
import mage.game.permanent.token.Token;
import mage.players.Player;
import mage.target.common.TargetOpponent;
import mage.target.targetpointer.FixedTarget;
-import java.util.UUID;
-
/**
*
* @author jeffwadsworth
@@ -119,16 +118,3 @@ class DinOfTheFireherdEffect extends OneShotEffect {
return applied;
}
}
-
-class DinOfTheFireherdToken extends Token {
-
- public DinOfTheFireherdToken() {
- super("", "5/5 black and red Elemental creature");
- cardType.add(CardType.CREATURE);
- subtype.add("Elemental");
- color.setBlack(true);
- color.setRed(true);
- power = new MageInt(5);
- toughness = new MageInt(5);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/d/Dovescape.java b/Mage.Sets/src/mage/cards/d/Dovescape.java
index 92e76a622f..9d63bde0fc 100644
--- a/Mage.Sets/src/mage/cards/d/Dovescape.java
+++ b/Mage.Sets/src/mage/cards/d/Dovescape.java
@@ -27,11 +27,10 @@
*/
package mage.cards.d;
-import mage.MageInt;
+import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SpellCastAllTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
-import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -41,11 +40,10 @@ import mage.filter.FilterSpell;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.CardTypePredicate;
import mage.game.Game;
+import mage.game.permanent.token.DovescapeToken;
import mage.game.permanent.token.Token;
import mage.game.stack.Spell;
-import java.util.UUID;
-
/**
*
* @author emerald000
@@ -53,13 +51,13 @@ import java.util.UUID;
public class Dovescape extends CardImpl {
private static final FilterSpell filter = new FilterSpell("a noncreature spell");
+
static {
filter.add(Predicates.not(new CardTypePredicate(CardType.CREATURE)));
}
public Dovescape(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{W/U}{W/U}{W/U}");
-
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{W/U}{W/U}{W/U}");
// Whenever a player casts a noncreature spell, counter that spell. That player creates X 1/1 white and blue Bird creature tokens with flying, where X is the spell's converted mana cost.
this.addAbility(new SpellCastAllTriggeredAbility(new DovescapeEffect(), filter, false, SetTargetPointer.SPELL));
@@ -106,16 +104,3 @@ class DovescapeEffect extends OneShotEffect {
return true;
}
}
-
-class DovescapeToken extends Token {
- DovescapeToken() {
- super("Bird", "1/1 white and blue Bird creature token with flying");
- cardType.add(CardType.CREATURE);
- color.setWhite(true);
- color.setBlue(true);
- subtype.add("Bird");
- power = new MageInt(1);
- toughness = new MageInt(1);
- this.addAbility(FlyingAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/d/DragonBroodmother.java b/Mage.Sets/src/mage/cards/d/DragonBroodmother.java
index de311fd610..211b795a99 100644
--- a/Mage.Sets/src/mage/cards/d/DragonBroodmother.java
+++ b/Mage.Sets/src/mage/cards/d/DragonBroodmother.java
@@ -27,19 +27,16 @@
*/
package mage.cards.d;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.effects.common.DevourEffect;
-import mage.abilities.keyword.DevourAbility;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.TargetController;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.DragonToken;
/**
*
@@ -70,18 +67,4 @@ public class DragonBroodmother extends CardImpl {
return new DragonBroodmother(this);
}
- class DragonToken extends Token {
-
- DragonToken() {
- super("Dragon", "1/1 red and green Dragon creature token with flying and devour 2");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- color.setRed(true);
- subtype.add("Dragon");
- power = new MageInt(1);
- toughness = new MageInt(1);
- addAbility(FlyingAbility.getInstance());
- addAbility(new DevourAbility(DevourEffect.DevourFactor.Devour2));
- }
- }
}
diff --git a/Mage.Sets/src/mage/cards/d/DragonEgg.java b/Mage.Sets/src/mage/cards/d/DragonEgg.java
index d7f4cdfeed..94ee82aad5 100644
--- a/Mage.Sets/src/mage/cards/d/DragonEgg.java
+++ b/Mage.Sets/src/mage/cards/d/DragonEgg.java
@@ -27,22 +27,15 @@
*/
package mage.cards.d;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.DiesTriggeredAbility;
-import mage.abilities.common.SimpleActivatedAbility;
-import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.abilities.keyword.DefenderAbility;
-import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.Duration;
-import mage.constants.Zone;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.DragonToken;
/**
*
@@ -51,7 +44,7 @@ import java.util.UUID;
public class DragonEgg extends CardImpl {
public DragonEgg(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{R}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}");
this.subtype.add("Dragon");
this.power = new MageInt(0);
@@ -74,19 +67,4 @@ public class DragonEgg extends CardImpl {
return new DragonEgg(this);
}
- class DragonToken extends Token {
-
- DragonToken() {
- super("Dragon", "2/2 red Dragon creature token with flying that has \"{R}: This creature gets +1/+0 until end of turn");
- this.setOriginalExpansionSetCode("M14");
- cardType.add(CardType.CREATURE);
- color.setRed(true);
- subtype.add("Dragon");
- power = new MageInt(2);
- toughness = new MageInt(2);
- addAbility(FlyingAbility.getInstance());
- addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 0, Duration.EndOfTurn), new ManaCostsImpl("{R}")));
-
- }
- }
}
diff --git a/Mage.Sets/src/mage/cards/d/DuneBroodNephilim.java b/Mage.Sets/src/mage/cards/d/DuneBroodNephilim.java
index c282d8519c..e36f10b916 100644
--- a/Mage.Sets/src/mage/cards/d/DuneBroodNephilim.java
+++ b/Mage.Sets/src/mage/cards/d/DuneBroodNephilim.java
@@ -27,6 +27,7 @@
*/
package mage.cards.d;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
@@ -36,9 +37,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.common.FilterControlledLandPermanent;
import mage.filter.common.FilterControlledPermanent;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.DuneBroodNephilimToken;
/**
* @author Loki
@@ -48,10 +47,9 @@ public class DuneBroodNephilim extends CardImpl {
final static FilterControlledPermanent filterLands = new FilterControlledLandPermanent();
public DuneBroodNephilim(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{B}{R}{G}{W}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{B}{R}{G}{W}");
this.subtype.add("Nephilim");
-
this.power = new MageInt(3);
this.toughness = new MageInt(3);
@@ -68,13 +66,3 @@ public class DuneBroodNephilim extends CardImpl {
return new DuneBroodNephilim(this);
}
}
-
-class DuneBroodNephilimToken extends Token {
- DuneBroodNephilimToken() {
- super("Sand", "1/1 colorless Sand creature token");
- cardType.add(CardType.CREATURE);
- subtype.add("Sand");
- power = new MageInt(1);
- toughness = new MageInt(1);
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/e/ElementalAppeal.java b/Mage.Sets/src/mage/cards/e/ElementalAppeal.java
index 5fe76f43ad..fe2254fbfa 100644
--- a/Mage.Sets/src/mage/cards/e/ElementalAppeal.java
+++ b/Mage.Sets/src/mage/cards/e/ElementalAppeal.java
@@ -27,7 +27,7 @@
*/
package mage.cards.e;
-import mage.MageInt;
+import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.condition.LockedInCondition;
import mage.abilities.condition.common.KickedCondition;
@@ -35,18 +35,14 @@ import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.continuous.BoostTargetEffect;
-import mage.abilities.keyword.HasteAbility;
import mage.abilities.keyword.KickerAbility;
-import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.game.Game;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.ElementalAppealElementalToken;
/**
*
@@ -55,7 +51,7 @@ import java.util.UUID;
public class ElementalAppeal extends CardImpl {
public ElementalAppeal(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{R}{R}{R}{R}");
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{R}{R}{R}{R}");
// Kicker {5}
this.addAbility(new KickerAbility("{5}"));
@@ -97,27 +93,13 @@ class ElementalAppealEffect extends OneShotEffect {
@Override
public boolean apply(Game game, Ability source) {
-
- CreateTokenEffect effect = new CreateTokenEffect(new ElementalToken());
- if(effect.apply(game, source))
- {
- effect.exileTokensCreatedAtNextEndStep(game, source);
+
+ CreateTokenEffect effect = new CreateTokenEffect(new ElementalAppealElementalToken());
+ if (effect.apply(game, source)) {
+ effect.exileTokensCreatedAtNextEndStep(game, source);
return true;
}
return false;
}
- class ElementalToken extends Token {
-
- public ElementalToken() {
- super("Elemental", "7/1 red Elemental creature token with trample and haste");
- cardType.add(CardType.CREATURE);
- color.setRed(true);
- subtype.add("Elemental");
- power = new MageInt(7);
- toughness = new MageInt(1);
- addAbility(TrampleAbility.getInstance());
- addAbility(HasteAbility.getInstance());
- }
- }
}
diff --git a/Mage.Sets/src/mage/cards/e/ElementalMastery.java b/Mage.Sets/src/mage/cards/e/ElementalMastery.java
index c10e74f8bb..96139252b1 100644
--- a/Mage.Sets/src/mage/cards/e/ElementalMastery.java
+++ b/Mage.Sets/src/mage/cards/e/ElementalMastery.java
@@ -27,7 +27,7 @@
*/
package mage.cards.e;
-import mage.MageInt;
+import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility;
@@ -37,7 +37,6 @@ import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
import mage.abilities.keyword.EnchantAbility;
-import mage.abilities.keyword.HasteAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.AttachmentType;
@@ -46,12 +45,10 @@ import mage.constants.Outcome;
import mage.constants.Zone;
import mage.game.Game;
import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.ElementalMasteryElementalToken;
import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent;
-import java.util.UUID;
-
/**
*
* @author jeffwadsworth
@@ -59,7 +56,7 @@ import java.util.UUID;
public class ElementalMastery extends CardImpl {
public ElementalMastery(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{R}");
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{R}");
this.subtype.add("Aura");
// Enchant creature
@@ -106,25 +103,13 @@ class ElementalMasteryEffect extends OneShotEffect {
if (creatureAttached != null) {
int power = creatureAttached.getPower().getValue();
if (power > 0) {
- CreateTokenEffect effect = new CreateTokenEffect(new ElementalToken(), power);
+ CreateTokenEffect effect = new CreateTokenEffect(new ElementalMasteryElementalToken(), power);
effect.apply(game, source);
- effect.exileTokensCreatedAtNextEndStep(game, source);
+ effect.exileTokensCreatedAtNextEndStep(game, source);
return true;
}
}
return false;
}
- class ElementalToken extends Token {
-
- public ElementalToken() {
- super("Elemental", "1/1 red Elemental creature token with haste");
- cardType.add(CardType.CREATURE);
- subtype.add("Elemental");
- color.setRed(true);
- power = new MageInt(1);
- toughness = new MageInt(1);
- addAbility(HasteAbility.getInstance());
- }
- }
}
diff --git a/Mage.Sets/src/mage/cards/e/EyesOfTheWisent.java b/Mage.Sets/src/mage/cards/e/EyesOfTheWisent.java
index dc8d4c446a..81b5475727 100644
--- a/Mage.Sets/src/mage/cards/e/EyesOfTheWisent.java
+++ b/Mage.Sets/src/mage/cards/e/EyesOfTheWisent.java
@@ -27,7 +27,7 @@
*/
package mage.cards.e;
-import mage.MageInt;
+import java.util.UUID;
import mage.ObjectColor;
import mage.abilities.common.SpellCastOpponentTriggeredAbility;
import mage.abilities.condition.common.MyTurnCondition;
@@ -38,9 +38,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.FilterSpell;
import mage.filter.predicate.mageobject.ColorPredicate;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.EyesOfTheWisentElementalToken;
/**
*
@@ -55,7 +53,7 @@ public class EyesOfTheWisent extends CardImpl {
}
public EyesOfTheWisent(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.TRIBAL,CardType.ENCHANTMENT},"{1}{G}");
+ super(ownerId, setInfo, new CardType[]{CardType.TRIBAL, CardType.ENCHANTMENT}, "{1}{G}");
this.subtype.add("Elemental");
// Whenever an opponent casts a blue spell during your turn, you may create a 4/4 green Elemental creature token.
@@ -75,18 +73,3 @@ public class EyesOfTheWisent extends CardImpl {
return new EyesOfTheWisent(this);
}
}
-
-class EyesOfTheWisentElementalToken extends Token {
-
- public EyesOfTheWisentElementalToken() {
- super("Elemental", "4/4 green Elemental creature token");
- this.setOriginalExpansionSetCode("MMA");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- subtype.add("Elemental");
- power = new MageInt(4);
- toughness = new MageInt(4);
- setTokenType(1);
- }
-
-}
diff --git a/Mage.Sets/src/mage/cards/f/FableOfWolfAndOwl.java b/Mage.Sets/src/mage/cards/f/FableOfWolfAndOwl.java
index f041edfb2f..d6af740157 100644
--- a/Mage.Sets/src/mage/cards/f/FableOfWolfAndOwl.java
+++ b/Mage.Sets/src/mage/cards/f/FableOfWolfAndOwl.java
@@ -27,21 +27,18 @@
*/
package mage.cards.f;
-import mage.MageInt;
+import java.util.UUID;
import mage.ObjectColor;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.FilterSpell;
import mage.filter.predicate.mageobject.ColorPredicate;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.OwlToken;
import mage.game.permanent.token.WolfToken;
-import java.util.UUID;
-
/**
* @author Loki
*/
@@ -56,8 +53,7 @@ public class FableOfWolfAndOwl extends CardImpl {
}
public FableOfWolfAndOwl(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{G/U}{G/U}{G/U}");
-
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{G/U}{G/U}{G/U}");
this.addAbility(new SpellCastControllerTriggeredAbility(new CreateTokenEffect(new WolfToken(), 1), filterGreenSpell, true));
this.addAbility(new SpellCastControllerTriggeredAbility(new CreateTokenEffect(new OwlToken(), 1), filterBlueSpell, true));
@@ -72,15 +68,3 @@ public class FableOfWolfAndOwl extends CardImpl {
return new FableOfWolfAndOwl(this);
}
}
-
-class OwlToken extends Token {
- OwlToken() {
- super("Bird", "1/1 blue Bird creature token with flying");
- cardType.add(CardType.CREATURE);
- color.setBlue(true);
- subtype.add("Bird");
- power = new MageInt(1);
- toughness = new MageInt(1);
- this.addAbility(FlyingAbility.getInstance());
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/f/FaithfulSquire.java b/Mage.Sets/src/mage/cards/f/FaithfulSquire.java
index 81a9861f59..acab18b099 100644
--- a/Mage.Sets/src/mage/cards/f/FaithfulSquire.java
+++ b/Mage.Sets/src/mage/cards/f/FaithfulSquire.java
@@ -63,7 +63,7 @@ public class FaithfulSquire extends CardImpl {
private static final FilterSpiritOrArcaneCard filter = new FilterSpiritOrArcaneCard();
public FaithfulSquire(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}{W}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}{W}");
this.subtype.add("Human");
this.subtype.add("Soldier");
diff --git a/Mage.Sets/src/mage/cards/f/FeudkillersVerdict.java b/Mage.Sets/src/mage/cards/f/FeudkillersVerdict.java
index 14f3b69439..4794d982d1 100644
--- a/Mage.Sets/src/mage/cards/f/FeudkillersVerdict.java
+++ b/Mage.Sets/src/mage/cards/f/FeudkillersVerdict.java
@@ -27,7 +27,7 @@
*/
package mage.cards.f;
-import mage.MageInt;
+import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect;
@@ -36,11 +36,9 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.game.Game;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.GiantWarriorToken;
import mage.players.Player;
-import java.util.UUID;
-
/**
*
* @author LevelX2
@@ -48,10 +46,9 @@ import java.util.UUID;
public class FeudkillersVerdict extends CardImpl {
public FeudkillersVerdict(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.TRIBAL,CardType.SORCERY},"{4}{W}{W}");
+ super(ownerId, setInfo, new CardType[]{CardType.TRIBAL, CardType.SORCERY}, "{4}{W}{W}");
this.subtype.add("Giant");
-
// You gain 10 life. Then if you have more life than an opponent, create a 5/5 white Giant Warrior creature token.
this.getSpellAbility().addEffect(new FeudkillersVerdictEffect());
}
@@ -88,7 +85,7 @@ class FeudkillersVerdictEffect extends OneShotEffect {
if (controller != null) {
controller.gainLife(10, game);
boolean moreLife = false;
- for (UUID opponentId :game.getOpponents(source.getControllerId())) {
+ for (UUID opponentId : game.getOpponents(source.getControllerId())) {
Player opponent = game.getPlayer(opponentId);
if (opponent != null) {
if (controller.getLife() > opponent.getLife()) {
@@ -106,15 +103,3 @@ class FeudkillersVerdictEffect extends OneShotEffect {
return false;
}
}
-
-class GiantWarriorToken extends Token {
- GiantWarriorToken() {
- super("Giant Warrior", "5/5 white Giant Warrior creature token");
- cardType.add(CardType.CREATURE);
- color.setWhite(true);
- subtype.add("Giant");
- subtype.add("Warrior");
- power = new MageInt(5);
- toughness = new MageInt(5);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/f/FirecatBlitz.java b/Mage.Sets/src/mage/cards/f/FirecatBlitz.java
index 9e0e6216ca..ee1417e5f4 100644
--- a/Mage.Sets/src/mage/cards/f/FirecatBlitz.java
+++ b/Mage.Sets/src/mage/cards/f/FirecatBlitz.java
@@ -27,7 +27,7 @@
*/
package mage.cards.f;
-import mage.MageInt;
+import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility;
import mage.abilities.costs.Cost;
@@ -38,7 +38,6 @@ import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.ExileTargetEffect;
import mage.abilities.keyword.FlashbackAbility;
-import mage.abilities.keyword.HasteAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -49,12 +48,10 @@ import mage.filter.common.FilterControlledLandPermanent;
import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.ElementalCatToken;
import mage.players.Player;
import mage.target.targetpointer.FixedTarget;
-import java.util.UUID;
-
/**
*
* @author Styxo
@@ -131,17 +128,3 @@ class FirecatBlitzEffect extends OneShotEffect {
return false;
}
}
-
-class ElementalCatToken extends Token {
-
- public ElementalCatToken() {
- super("Elemental Cat", "1/1 red Elemental Cat creature token");
- cardType.add(CardType.CREATURE);
- color.setRed(true);
- subtype.add("Elemental");
- subtype.add("Cat");
- addAbility(HasteAbility.getInstance());
- power = new MageInt(1);
- toughness = new MageInt(1);
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/f/Flamewright.java b/Mage.Sets/src/mage/cards/f/Flamewright.java
index aa0b24b753..7465f3ce27 100644
--- a/Mage.Sets/src/mage/cards/f/Flamewright.java
+++ b/Mage.Sets/src/mage/cards/f/Flamewright.java
@@ -27,6 +27,7 @@
*/
package mage.cards.f;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
@@ -43,12 +44,10 @@ import mage.constants.Zone;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.mageobject.AbilityPredicate;
import mage.filter.predicate.mageobject.CardTypePredicate;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.ConstructToken;
import mage.target.common.TargetControlledPermanent;
import mage.target.common.TargetCreatureOrPlayer;
-import java.util.UUID;
-
/**
*
* @author fireshoes
@@ -90,22 +89,3 @@ public class Flamewright extends CardImpl {
return new Flamewright(this);
}
}
-
-class ConstructToken extends Token {
-
- public ConstructToken() {
- this("CNS");
- }
-
- public ConstructToken(String setCode) {
- super("Construct", "1/1 colorless Construct artifact creature token with defender");
- this.setOriginalExpansionSetCode(setCode);
- cardType.add(CardType.ARTIFACT);
- cardType.add(CardType.CREATURE);
- subtype.add("Construct");
- power = new MageInt(1);
- toughness = new MageInt(1);
-
- addAbility(DefenderAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/f/FleshCarver.java b/Mage.Sets/src/mage/cards/f/FleshCarver.java
index 97d246aa96..156563f1d5 100644
--- a/Mage.Sets/src/mage/cards/f/FleshCarver.java
+++ b/Mage.Sets/src/mage/cards/f/FleshCarver.java
@@ -27,6 +27,7 @@
*/
package mage.cards.f;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.DiesTriggeredAbility;
@@ -49,12 +50,10 @@ import mage.filter.predicate.permanent.AnotherPredicate;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.FleshCarverHorrorToken;
import mage.players.Player;
import mage.target.common.TargetControlledPermanent;
-import java.util.UUID;
-
/**
*
* @author LevelX2
@@ -68,7 +67,7 @@ public class FleshCarver extends CardImpl {
}
public FleshCarver(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}");
this.subtype.add("Human");
this.subtype.add("Wizard");
@@ -97,6 +96,7 @@ public class FleshCarver extends CardImpl {
}
class FleshCarverAbility extends DiesTriggeredAbility {
+
public FleshCarverAbility() {
super(new FleshCarverEffect(), false);
}
@@ -114,8 +114,8 @@ class FleshCarverAbility extends DiesTriggeredAbility {
public boolean checkTrigger(GameEvent event, Game game) {
if (super.checkTrigger(event, game)) {
Permanent permanent = (Permanent) game.getLastKnownInformation(event.getTargetId(), Zone.BATTLEFIELD);
- if (permanent !=null) {
- for (Effect effect :this.getEffects()) {
+ if (permanent != null) {
+ for (Effect effect : this.getEffects()) {
effect.setValue("power", permanent.getPower().getValue());
}
return true;
@@ -157,17 +157,3 @@ class FleshCarverEffect extends OneShotEffect {
}
}
-
-class FleshCarverHorrorToken extends Token {
-
- public FleshCarverHorrorToken(int xValue) {
- super("Horror", "X/X black Horror creature token");
- setOriginalExpansionSetCode("C14");
- cardType.add(CardType.CREATURE);
- color.setBlack(true);
- subtype.add("Horror");
- power = new MageInt(xValue);
- toughness = new MageInt(xValue);
-
- }
-}
diff --git a/Mage.Sets/src/mage/cards/f/FlurryOfHorns.java b/Mage.Sets/src/mage/cards/f/FlurryOfHorns.java
index 078c046d04..fe2b21a8f7 100644
--- a/Mage.Sets/src/mage/cards/f/FlurryOfHorns.java
+++ b/Mage.Sets/src/mage/cards/f/FlurryOfHorns.java
@@ -27,16 +27,12 @@
*/
package mage.cards.f;
-import mage.MageInt;
-import mage.ObjectColor;
+import java.util.UUID;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.keyword.HasteAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.FlurryOfHornsMinotaurToken;
/**
*
@@ -45,8 +41,7 @@ import java.util.UUID;
public class FlurryOfHorns extends CardImpl {
public FlurryOfHorns(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{4}{R}");
-
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{R}");
// Create two 2/3 red Minotaur creature tokens with haste.
this.getSpellAbility().addEffect(new CreateTokenEffect(new FlurryOfHornsMinotaurToken(), 2));
@@ -61,17 +56,3 @@ public class FlurryOfHorns extends CardImpl {
return new FlurryOfHorns(this);
}
}
-
-class FlurryOfHornsMinotaurToken extends Token {
-
- public FlurryOfHornsMinotaurToken() {
- super("Minotaur", "2/3 red Minotaur creature tokens with haste");
- this.setOriginalExpansionSetCode("JOU");
- cardType.add(CardType.CREATURE);
- color.setColor(ObjectColor.RED);
- subtype.add("Minotaur");
- power = new MageInt(2);
- toughness = new MageInt(3);
- addAbility(HasteAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/f/FlurryOfWings.java b/Mage.Sets/src/mage/cards/f/FlurryOfWings.java
index 5af6470cdb..85f40aed42 100644
--- a/Mage.Sets/src/mage/cards/f/FlurryOfWings.java
+++ b/Mage.Sets/src/mage/cards/f/FlurryOfWings.java
@@ -27,17 +27,14 @@
*/
package mage.cards.f;
-import mage.MageInt;
+import java.util.UUID;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.common.FilterAttackingCreature;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.BirdSoldierToken;
/**
*
@@ -48,11 +45,7 @@ public class FlurryOfWings extends CardImpl {
private static final FilterAttackingCreature filter = new FilterAttackingCreature("the number of attacking creatures");
public FlurryOfWings(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{G}{W}{U}");
-
-
-
-
+ super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{G}{W}{U}");
this.getSpellAbility().addEffect(new CreateTokenEffect(new BirdSoldierToken(), new PermanentsOnBattlefieldCount(filter)));
}
@@ -66,18 +59,3 @@ public class FlurryOfWings extends CardImpl {
return new FlurryOfWings(this);
}
}
-
-class BirdSoldierToken extends Token {
-
- public BirdSoldierToken() {
- super("Bird Soldier", "1/1 white Bird Soldier creature with flying");
- cardType.add(CardType.CREATURE);
- subtype.add("Bird");
-
- color.setWhite(true);
- power = new MageInt(1);
- toughness = new MageInt(1);
-
- addAbility(FlyingAbility.getInstance());
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/f/ForlornPseudamma.java b/Mage.Sets/src/mage/cards/f/ForlornPseudamma.java
index 4add9e38f8..521ca507a2 100644
--- a/Mage.Sets/src/mage/cards/f/ForlornPseudamma.java
+++ b/Mage.Sets/src/mage/cards/f/ForlornPseudamma.java
@@ -27,6 +27,7 @@
*/
package mage.cards.f;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.CreateTokenEffect;
@@ -36,9 +37,7 @@ import mage.abilities.keyword.IntimidateAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.ForlornPseudammaZombieToken;
/**
*
@@ -47,7 +46,7 @@ import java.util.UUID;
public class ForlornPseudamma extends CardImpl {
public ForlornPseudamma(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}");
this.subtype.add("Zombie");
this.power = new MageInt(2);
@@ -68,17 +67,3 @@ public class ForlornPseudamma extends CardImpl {
return new ForlornPseudamma(this);
}
}
-
-class ForlornPseudammaZombieToken extends Token {
-
- public ForlornPseudammaZombieToken() {
- super("Zombie", "2/2 black Zombie enchantment creature token");
- cardType.add(CardType.ENCHANTMENT);
- cardType.add(CardType.CREATURE);
- color.setBlack(true);
- subtype.add("Zombie");
- power = new MageInt(2);
- toughness = new MageInt(2);
- this.setOriginalExpansionSetCode("BNG");
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/f/FreyaliseLlanowarsFury.java b/Mage.Sets/src/mage/cards/f/FreyaliseLlanowarsFury.java
index aa9d8bc273..a8f2eb3ac1 100644
--- a/Mage.Sets/src/mage/cards/f/FreyaliseLlanowarsFury.java
+++ b/Mage.Sets/src/mage/cards/f/FreyaliseLlanowarsFury.java
@@ -27,7 +27,7 @@
*/
package mage.cards.f;
-import mage.MageInt;
+import java.util.UUID;
import mage.ObjectColor;
import mage.abilities.LoyaltyAbility;
import mage.abilities.common.CanBeYourCommanderAbility;
@@ -36,18 +36,15 @@ import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.DestroyTargetEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
-import mage.abilities.mana.GreenManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.common.FilterArtifactOrEnchantmentPermanent;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.mageobject.ColorPredicate;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.FreyaliseLlanowarsFuryToken;
import mage.target.TargetPermanent;
-import java.util.UUID;
-
/**
*
* @author LevelX2
@@ -88,21 +85,3 @@ public class FreyaliseLlanowarsFury extends CardImpl {
return new FreyaliseLlanowarsFury(this);
}
}
-
-class FreyaliseLlanowarsFuryToken extends Token {
-
- FreyaliseLlanowarsFuryToken() {
- super("Elf Druid", "1/1 green Elf Druid creature token with \"{T}: Add {G} to your mana pool.\"");
- this.setOriginalExpansionSetCode("C14");
- this.cardType.add(CardType.CREATURE);
- this.color = ObjectColor.GREEN;
- this.subtype.add("Elf");
- this.subtype.add("Druid");
-
- this.power = new MageInt(1);
- this.toughness = new MageInt(1);
-
- // {T}: Add {G} to your mana pool.
- this.addAbility(new GreenManaAbility());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/g/GargoyleCastle.java b/Mage.Sets/src/mage/cards/g/GargoyleCastle.java
index a60b0075fe..69ab8a9efa 100644
--- a/Mage.Sets/src/mage/cards/g/GargoyleCastle.java
+++ b/Mage.Sets/src/mage/cards/g/GargoyleCastle.java
@@ -27,21 +27,18 @@
*/
package mage.cards.g;
-import mage.MageInt;
+import java.util.UUID;
import mage.abilities.ActivatedAbilityImpl;
import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.keyword.FlyingAbility;
import mage.abilities.mana.ColorlessManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.GargoyleToken;
/**
*
@@ -89,16 +86,3 @@ class GargoyleCastleAbility extends ActivatedAbilityImpl {
}
}
-
-class GargoyleToken extends Token {
-
- public GargoyleToken() {
- super("Gargoyle", "3/4 colorless Gargoyle artifact creature token with flying");
- cardType.add(CardType.CREATURE);
- cardType.add(CardType.ARTIFACT);
- subtype.add("Gargoyle");
- power = new MageInt(3);
- toughness = new MageInt(4);
- addAbility(FlyingAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/g/GarrukApexPredator.java b/Mage.Sets/src/mage/cards/g/GarrukApexPredator.java
index 367df8b3c2..c033d4d025 100644
--- a/Mage.Sets/src/mage/cards/g/GarrukApexPredator.java
+++ b/Mage.Sets/src/mage/cards/g/GarrukApexPredator.java
@@ -27,7 +27,7 @@
*/
package mage.cards.g;
-import mage.MageInt;
+import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.LoyaltyAbility;
import mage.abilities.common.AttackedByCreatureTriggeredAbility;
@@ -39,7 +39,6 @@ import mage.abilities.effects.common.DestroyTargetEffect;
import mage.abilities.effects.common.GetEmblemTargetPlayerEffect;
import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
-import mage.abilities.keyword.DeathtouchAbility;
import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@@ -50,14 +49,12 @@ import mage.filter.predicate.permanent.AnotherPredicate;
import mage.game.Game;
import mage.game.command.Emblem;
import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.GarrukApexPredatorBeastToken;
import mage.players.Player;
import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent;
import mage.target.common.TargetOpponent;
-import java.util.UUID;
-
/**
*
* @author LevelX2
@@ -138,24 +135,6 @@ class GarrukApexPredatorEffect3 extends OneShotEffect {
}
}
-class GarrukApexPredatorBeastToken extends Token {
-
- public GarrukApexPredatorBeastToken() {
- super("Beast", "3/3 black Beast creature token with deathtouch");
- setOriginalExpansionSetCode("M15");
- setTokenType(1);
- cardType.add(CardType.CREATURE);
- color.setBlack(true);
- subtype.add("Beast");
- power = new MageInt(3);
- toughness = new MageInt(3);
-
- abilities.add(DeathtouchAbility.getInstance());
-
- }
-
-}
-
/**
* Emblem with "Whenever a creature attacks you, it gets +5/+5 and gains trample
* until end of turn."
diff --git a/Mage.Sets/src/mage/cards/g/GeistSnatch.java b/Mage.Sets/src/mage/cards/g/GeistSnatch.java
index a0efdbdd78..e107045669 100644
--- a/Mage.Sets/src/mage/cards/g/GeistSnatch.java
+++ b/Mage.Sets/src/mage/cards/g/GeistSnatch.java
@@ -27,10 +27,9 @@
*/
package mage.cards.g;
-import mage.MageInt;
+import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
-import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -38,11 +37,10 @@ import mage.constants.Outcome;
import mage.filter.FilterSpell;
import mage.filter.predicate.mageobject.CardTypePredicate;
import mage.game.Game;
+import mage.game.permanent.token.SpiritBlueToken;
import mage.game.permanent.token.Token;
import mage.target.TargetSpell;
-import java.util.UUID;
-
/**
*
* @author noxx
@@ -56,8 +54,7 @@ public class GeistSnatch extends CardImpl {
}
public GeistSnatch(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{U}{U}");
-
+ super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{U}{U}");
// Counter target creature spell. Create a 1/1 blue Spirit creature token with flying.
this.getSpellAbility().addTarget(new TargetSpell(filter));
@@ -98,18 +95,3 @@ class GeistSnatchCounterTargetEffect extends OneShotEffect {
return true;
}
}
-
-class SpiritBlueToken extends Token {
-
- public SpiritBlueToken() {
- super("Spirit", "1/1 blue Spirit creature token with flying");
- cardType.add(CardType.CREATURE);
- subtype.add("Spirit");
- color.setBlue(true);
- power = new MageInt(1);
- toughness = new MageInt(1);
- setTokenType(2);
- addAbility(FlyingAbility.getInstance());
- }
-
-}
diff --git a/Mage.Sets/src/mage/cards/g/GiantCaterpillar.java b/Mage.Sets/src/mage/cards/g/GiantCaterpillar.java
index 18bf78a4ae..5ab647da3b 100644
--- a/Mage.Sets/src/mage/cards/g/GiantCaterpillar.java
+++ b/Mage.Sets/src/mage/cards/g/GiantCaterpillar.java
@@ -27,6 +27,7 @@
*/
package mage.cards.g;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
@@ -35,14 +36,11 @@ import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.ButterflyToken;
/**
*
@@ -73,16 +71,3 @@ public class GiantCaterpillar extends CardImpl {
return new GiantCaterpillar(this);
}
}
-
-class ButterflyToken extends Token {
-
- public ButterflyToken() {
- super("Butterfly", "1/1 green Insect creature token with flying named Butterfly");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- subtype.add("Insect");
- power = new MageInt(1);
- toughness = new MageInt(1);
- addAbility(FlyingAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/g/Giantbaiting.java b/Mage.Sets/src/mage/cards/g/Giantbaiting.java
index 7f679f2548..b2a6c5e001 100644
--- a/Mage.Sets/src/mage/cards/g/Giantbaiting.java
+++ b/Mage.Sets/src/mage/cards/g/Giantbaiting.java
@@ -27,20 +27,17 @@
*/
package mage.cards.g;
-import mage.MageInt;
+import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.keyword.ConspireAbility;
-import mage.abilities.keyword.HasteAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.game.Game;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.GiantBaitingGiantWarriorToken;
/**
*
@@ -49,7 +46,7 @@ import java.util.UUID;
public class Giantbaiting extends CardImpl {
public Giantbaiting(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{R/G}");
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{R/G}");
// Create a 4/4 red and green Giant Warrior creature token with haste. Exile it at the beginning of the next end step.
this.getSpellAbility().addEffect(new GiantbaitingEffect());
@@ -87,27 +84,11 @@ class GiantbaitingEffect extends OneShotEffect {
@Override
public boolean apply(Game game, Ability source) {
- CreateTokenEffect effect = new CreateTokenEffect(new GiantWarriorToken());
- if(effect.apply(game, source))
- {
+ CreateTokenEffect effect = new CreateTokenEffect(new GiantBaitingGiantWarriorToken());
+ if (effect.apply(game, source)) {
effect.exileTokensCreatedAtNextEndStep(game, source);
return true;
}
return false;
}
}
-
-class GiantWarriorToken extends Token {
-
- GiantWarriorToken() {
- super("Giant Warrior", "4/4 red and green Giant Warrior creature token with haste");
- cardType.add(CardType.CREATURE);
- color.setRed(true);
- color.setGreen(true);
- subtype.add("Giant");
- subtype.add("Warrior");
- power = new MageInt(4);
- toughness = new MageInt(4);
- this.addAbility(HasteAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/g/GoblinKaboomist.java b/Mage.Sets/src/mage/cards/g/GoblinKaboomist.java
index 7529a2d93d..09f1662157 100644
--- a/Mage.Sets/src/mage/cards/g/GoblinKaboomist.java
+++ b/Mage.Sets/src/mage/cards/g/GoblinKaboomist.java
@@ -27,32 +27,21 @@
*/
package mage.cards.g;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
-import mage.abilities.common.SimpleActivatedAbility;
-import mage.abilities.costs.common.SacrificeSourceCost;
-import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.effects.common.DamageTargetEffect;
-import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.TargetController;
-import mage.constants.Zone;
-import mage.filter.common.FilterAttackingCreature;
-import mage.filter.predicate.Predicates;
-import mage.filter.predicate.mageobject.AbilityPredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.LandMineToken;
import mage.players.Player;
-import mage.target.common.TargetCreaturePermanent;
-
-import java.util.UUID;
/**
*
@@ -117,23 +106,3 @@ class GoblinKaboomistFlipCoinEffect extends OneShotEffect {
}
}
-
-class LandMineToken extends Token {
-
- private static final FilterAttackingCreature filter = new FilterAttackingCreature("attacking creature without flying");
-
- static {
- filter.add(Predicates.not(new AbilityPredicate(FlyingAbility.class)));
- }
-
- public LandMineToken() {
- super("Land Mine", "colorless artifact token named Land Mine with \"{R}, Sacrifice this artifact: This artifact deals 2 damage to target attacking creature without flying.\"");
- this.setOriginalExpansionSetCode("M15");
- cardType.add(CardType.ARTIFACT);
-
- Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2), new ManaCostsImpl("{R}"));
- ability.addCost(new SacrificeSourceCost());
- ability.addTarget(new TargetCreaturePermanent(filter));
- this.addAbility(ability);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/g/GoblinScouts.java b/Mage.Sets/src/mage/cards/g/GoblinScouts.java
index a7ae2193a7..66715039b8 100644
--- a/Mage.Sets/src/mage/cards/g/GoblinScouts.java
+++ b/Mage.Sets/src/mage/cards/g/GoblinScouts.java
@@ -27,15 +27,12 @@
*/
package mage.cards.g;
-import mage.MageInt;
+import java.util.UUID;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.keyword.MountainwalkAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.GoblinScoutsToken;
/**
*
@@ -44,7 +41,7 @@ import java.util.UUID;
public class GoblinScouts extends CardImpl {
public GoblinScouts(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{3}{R}{R}");
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{R}{R}");
// Create three 1/1 red Goblin Scout creature tokens with mountainwalk.
this.getSpellAbility().addEffect(new CreateTokenEffect(new GoblinScoutsToken(), 3));
@@ -59,18 +56,3 @@ public class GoblinScouts extends CardImpl {
return new GoblinScouts(this);
}
}
-
-class GoblinScoutsToken extends Token {
-
- public GoblinScoutsToken() {
- super("Goblin Scout", "1/1 red Goblin Scout creature tokens with mountainwalk");
- cardType.add(CardType.CREATURE);
- color.setRed(true);
- subtype.add("Goblin");
- subtype.add("Scout");
- power = new MageInt(1);
- toughness = new MageInt(1);
-
- this.addAbility(new MountainwalkAbility());
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/g/GoblinSpymaster.java b/Mage.Sets/src/mage/cards/g/GoblinSpymaster.java
index fe6e768486..c82cca951d 100644
--- a/Mage.Sets/src/mage/cards/g/GoblinSpymaster.java
+++ b/Mage.Sets/src/mage/cards/g/GoblinSpymaster.java
@@ -27,25 +27,20 @@
*/
package mage.cards.g;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.BeginningOfEndStepTriggeredAbility;
-import mage.abilities.common.SimpleStaticAbility;
-import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect;
-import mage.abilities.effects.common.combat.AttacksIfAbleAllEffect;
import mage.abilities.keyword.FirstStrikeAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
-import mage.filter.common.FilterCreaturePermanent;
-import mage.filter.predicate.permanent.ControllerPredicate;
import mage.game.Game;
+import mage.game.permanent.token.SpyMasterGoblinToken;
import mage.game.permanent.token.Token;
import mage.players.Player;
-import java.util.UUID;
-
/**
*
* @author spjspj
@@ -105,24 +100,3 @@ class SpyMasterGoblinCreateTokenEffect extends OneShotEffect {
return true;
}
}
-
-class SpyMasterGoblinToken extends Token {
-
- private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures you control");
-
- static {
- filter.add(new ControllerPredicate(TargetController.YOU));
- }
-
- SpyMasterGoblinToken() {
- super("Goblin", "1/1 red Goblin creature token with \"Creatures you control attack each combat if able.\"");
- cardType.add(CardType.CREATURE);
- color.setRed(true);
- subtype.add("Goblin");
- power = new MageInt(1);
- toughness = new MageInt(1);
-
- Effect effect = new AttacksIfAbleAllEffect(filter, Duration.WhileOnBattlefield, true);
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect));
- }
-}
diff --git a/Mage.Sets/src/mage/cards/g/GoblinTrenches.java b/Mage.Sets/src/mage/cards/g/GoblinTrenches.java
index 1c03961eb0..906177655e 100644
--- a/Mage.Sets/src/mage/cards/g/GoblinTrenches.java
+++ b/Mage.Sets/src/mage/cards/g/GoblinTrenches.java
@@ -27,7 +27,7 @@
*/
package mage.cards.g;
-import mage.MageInt;
+import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.SacrificeTargetCost;
@@ -39,11 +39,9 @@ import mage.constants.CardType;
import mage.constants.Zone;
import mage.filter.common.FilterControlledLandPermanent;
import mage.filter.common.FilterControlledPermanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.GoblinTrenchesToken;
import mage.target.common.TargetControlledPermanent;
-import java.util.UUID;
-
/**
*
* @author Loki
@@ -52,10 +50,8 @@ public class GoblinTrenches extends CardImpl {
final static FilterControlledPermanent filter = new FilterControlledLandPermanent("a land");
- public GoblinTrenches(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{R}{W}");
-
-
+ public GoblinTrenches(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{R}{W}");
// {2}, Sacrifice a land: Create two 1/1 red and white Goblin Soldier creature tokens.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new GoblinTrenchesToken(), 2), new GenericManaCost(2));
@@ -72,18 +68,3 @@ public class GoblinTrenches extends CardImpl {
return new GoblinTrenches(this);
}
}
-
-class GoblinTrenchesToken extends Token {
- GoblinTrenchesToken() {
- super("Goblin Soldier", "1/1 red and white Goblin Soldier creature tokens");
- cardType.add(CardType.CREATURE);
- color.setRed(true);
- color.setWhite(true);
- subtype.add("Goblin");
- subtype.add("Soldier");
- power = new MageInt(1);
- toughness = new MageInt(1);
- }
-}
-
-
diff --git a/Mage.Sets/src/mage/cards/g/GodFavoredGeneral.java b/Mage.Sets/src/mage/cards/g/GodFavoredGeneral.java
index 56e88ed676..96f61d8c6a 100644
--- a/Mage.Sets/src/mage/cards/g/GodFavoredGeneral.java
+++ b/Mage.Sets/src/mage/cards/g/GodFavoredGeneral.java
@@ -27,6 +27,7 @@
*/
package mage.cards.g;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.CreateTokenEffect;
@@ -35,9 +36,7 @@ import mage.abilities.keyword.InspiredAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.GodFavoredGeneralSoldierToken;
/**
*
@@ -46,7 +45,7 @@ import java.util.UUID;
public class GodFavoredGeneral extends CardImpl {
public GodFavoredGeneral(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}");
this.subtype.add("Human");
this.subtype.add("Soldier");
@@ -54,7 +53,7 @@ public class GodFavoredGeneral extends CardImpl {
this.toughness = new MageInt(1);
// Inspired - Whenever God-Favored General becomes untapped, you may pay {2}{W}. If you do, create two 1/1 white Soldier enchantment creature tokens.
- this.addAbility(new InspiredAbility(new DoIfCostPaid(new CreateTokenEffect(new SoldierToken(), 2), new ManaCostsImpl("{2}{W}"))));
+ this.addAbility(new InspiredAbility(new DoIfCostPaid(new CreateTokenEffect(new GodFavoredGeneralSoldierToken(), 2), new ManaCostsImpl("{2}{W}"))));
}
public GodFavoredGeneral(final GodFavoredGeneral card) {
@@ -66,19 +65,3 @@ public class GodFavoredGeneral extends CardImpl {
return new GodFavoredGeneral(this);
}
}
-
-class SoldierToken extends Token {
-
- public SoldierToken() {
- super("Soldier", "1/1 white Soldier enchantment creature token");
- cardType.add(CardType.ENCHANTMENT);
- cardType.add(CardType.CREATURE);
- color.setWhite(true);
-
- subtype.add("Soldier");
- power = new MageInt(1);
- toughness = new MageInt(1);
- this.setOriginalExpansionSetCode("BNG");
- }
-
-}
diff --git a/Mage.Sets/src/mage/cards/g/Godsire.java b/Mage.Sets/src/mage/cards/g/Godsire.java
index 34310af336..938b99c8a7 100644
--- a/Mage.Sets/src/mage/cards/g/Godsire.java
+++ b/Mage.Sets/src/mage/cards/g/Godsire.java
@@ -25,9 +25,9 @@
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
-
package mage.cards.g;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.TapSourceCost;
@@ -37,9 +37,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.GodSireBeastToken;
/**
*
@@ -47,18 +45,17 @@ import java.util.UUID;
*/
public class Godsire extends CardImpl {
- public Godsire (UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{R}{G}{G}{W}");
+ public Godsire(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{R}{G}{G}{W}");
this.subtype.add("Beast");
-
this.power = new MageInt(8);
this.toughness = new MageInt(8);
this.addAbility(VigilanceAbility.getInstance());
- this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new BeastToken()), new TapSourceCost()));
+ this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new GodSireBeastToken()), new TapSourceCost()));
}
- public Godsire (final Godsire card) {
+ public Godsire(final Godsire card) {
super(card);
}
@@ -68,16 +65,3 @@ public class Godsire extends CardImpl {
}
}
-
-class BeastToken extends Token {
- BeastToken() {
- super("Beast", "8/8 Beast creature token that's red, green, and white");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- color.setWhite(true);
- color.setRed(true);
- subtype.add("Beast");
- power = new MageInt(8);
- toughness = new MageInt(8);
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/g/GoldmeadowLookout.java b/Mage.Sets/src/mage/cards/g/GoldmeadowLookout.java
index b18bf0a00d..9a925176ca 100644
--- a/Mage.Sets/src/mage/cards/g/GoldmeadowLookout.java
+++ b/Mage.Sets/src/mage/cards/g/GoldmeadowLookout.java
@@ -27,6 +27,7 @@
*/
package mage.cards.g;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
@@ -34,15 +35,11 @@ import mage.abilities.costs.common.DiscardCardCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.effects.common.TapTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
-import mage.game.permanent.token.Token;
-import mage.target.common.TargetCreaturePermanent;
-
-import java.util.UUID;
+import mage.game.permanent.token.GoldmeadowHarrierToken;
/**
*
@@ -73,22 +70,3 @@ public class GoldmeadowLookout extends CardImpl {
return new GoldmeadowLookout(this);
}
}
-
-class GoldmeadowHarrierToken extends Token {
-
- public GoldmeadowHarrierToken() {
- super("Goldmeadow Harrier", "1/1 white Kithkin Soldier creature token named Goldmeadow Harrier with \"{W}, {T}: Tap target creature.\"");
- this.setOriginalExpansionSetCode("FUT");
- cardType.add(CardType.CREATURE);
- color.setWhite(true);
- subtype.add("Kithkin");
- subtype.add("Soldier");
- power = new MageInt(1);
- toughness = new MageInt(1);
-
- Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new TapTargetEffect(), new ManaCostsImpl("{W}"));
- ability.addCost(new TapSourceCost());
- ability.addTarget(new TargetCreaturePermanent());
- this.addAbility(ability);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/g/GriffinGuide.java b/Mage.Sets/src/mage/cards/g/GriffinGuide.java
index a470b375a4..dc31ae3ab0 100644
--- a/Mage.Sets/src/mage/cards/g/GriffinGuide.java
+++ b/Mage.Sets/src/mage/cards/g/GriffinGuide.java
@@ -27,7 +27,7 @@
*/
package mage.cards.g;
-import mage.MageInt;
+import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.DiesAttachedTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
@@ -40,12 +40,10 @@ import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.GriffinToken;
import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent;
-import java.util.UUID;
-
/**
*
* @author LevelX2
@@ -53,10 +51,9 @@ import java.util.UUID;
public class GriffinGuide extends CardImpl {
public GriffinGuide(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{W}");
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{W}");
this.subtype.add("Aura");
-
// Enchant creature
TargetPermanent auraTarget = new TargetCreaturePermanent();
this.getSpellAbility().addTarget(auraTarget);
@@ -64,7 +61,7 @@ public class GriffinGuide extends CardImpl {
Ability ability = new EnchantAbility(auraTarget.getTargetName());
this.addAbility(ability);
// Enchanted creature gets +2/+2 and has flying.
- ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(2,2, Duration.WhileOnBattlefield));
+ ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(2, 2, Duration.WhileOnBattlefield));
ability.addEffect(new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA, Duration.WhileOnBattlefield, "and has flying"));
this.addAbility(ability);
// When enchanted creature dies, create a 2/2 white Griffin creature token with flying.
@@ -80,18 +77,3 @@ public class GriffinGuide extends CardImpl {
return new GriffinGuide(this);
}
}
-
-class GriffinToken extends Token {
-
- public GriffinToken() {
- super("Griffin", "2/2 white Griffin creature token with flying");
- cardType.add(CardType.CREATURE);
- color.setWhite(true);
-
- subtype.add("Griffin");
- power = new MageInt(2);
- toughness = new MageInt(2);
- this.addAbility(FlyingAbility.getInstance());
- }
-
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/g/GrovetenderDruids.java b/Mage.Sets/src/mage/cards/g/GrovetenderDruids.java
index 9fe2351778..51d504c9a0 100644
--- a/Mage.Sets/src/mage/cards/g/GrovetenderDruids.java
+++ b/Mage.Sets/src/mage/cards/g/GrovetenderDruids.java
@@ -27,6 +27,7 @@
*/
package mage.cards.g;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.AllyEntersBattlefieldTriggeredAbility;
@@ -39,11 +40,9 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.game.Game;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.GrovetenderDruidsPlantToken;
import mage.players.Player;
-import java.util.UUID;
-
/**
*
* @author fireshoes
@@ -51,7 +50,7 @@ import java.util.UUID;
public class GrovetenderDruids extends CardImpl {
public GrovetenderDruids(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}{W}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}{W}");
this.subtype.add("Elf");
this.subtype.add("Druid");
this.subtype.add("Ally");
@@ -92,10 +91,10 @@ class GrovetenderDruidsEffect extends OneShotEffect {
@Override
public boolean apply(Game game, Ability source) {
Player player = game.getPlayer(source.getControllerId());
- if(player != null) {
- if(player.chooseUse(Outcome.BoostCreature, "Do you want to to pay {1}?", source, game)) {
+ if (player != null) {
+ if (player.chooseUse(Outcome.BoostCreature, "Do you want to to pay {1}?", source, game)) {
Cost cost = new ManaCostsImpl("{1}");
- if(cost.pay(source, game, source.getSourceId(), source.getControllerId(), false, null)) {
+ if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false, null)) {
new CreateTokenEffect(new GrovetenderDruidsPlantToken()).apply(game, source);
}
return true;
@@ -104,16 +103,3 @@ class GrovetenderDruidsEffect extends OneShotEffect {
return false;
}
}
-
-class GrovetenderDruidsPlantToken extends Token {
-
- public GrovetenderDruidsPlantToken() {
- super("Plant", "1/1 green Plant creature");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- subtype.add("Plant");
- power = new MageInt(1);
- toughness = new MageInt(1);
- this.setOriginalExpansionSetCode("BFZ");
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/g/GutterGrime.java b/Mage.Sets/src/mage/cards/g/GutterGrime.java
index 170c8c3ddc..22cc5baeee 100644
--- a/Mage.Sets/src/mage/cards/g/GutterGrime.java
+++ b/Mage.Sets/src/mage/cards/g/GutterGrime.java
@@ -27,32 +27,25 @@
*/
package mage.cards.g;
-import mage.MageInt;
+import java.util.UUID;
import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.TriggeredAbilityImpl;
-import mage.abilities.common.SimpleStaticAbility;
-import mage.abilities.dynamicvalue.DynamicValue;
-import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect;
-import mage.abilities.effects.common.continuous.SetPowerToughnessSourceEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.counters.CounterType;
import mage.game.Game;
-import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
+import mage.game.events.GameEvent;
import mage.game.events.ZoneChangeEvent;
import mage.game.permanent.Permanent;
import mage.game.permanent.PermanentToken;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.GutterGrimeToken;
/**
*
@@ -61,8 +54,7 @@ import java.util.UUID;
public class GutterGrime extends CardImpl {
public GutterGrime(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{4}{G}");
-
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{4}{G}");
// Whenever a nontoken creature you control dies, put a slime counter on Gutter Grime, then create a green Ooze creature token with "This creature's power and toughness are each equal to the number of slime counters on Gutter Grime."
this.addAbility(new GutterGrimeTriggeredAbility());
@@ -109,8 +101,8 @@ class GutterGrimeTriggeredAbility extends TriggeredAbilityImpl {
if (zEvent.getFromZone() == Zone.BATTLEFIELD && zEvent.getToZone() == Zone.GRAVEYARD
&& permanent.getControllerId().equals(this.controllerId)
&& (targetId.equals(this.getSourceId())
- || (permanent.isCreature()
- && !(permanent instanceof PermanentToken)))) {
+ || (permanent.isCreature()
+ && !(permanent instanceof PermanentToken)))) {
return true;
}
}
@@ -123,7 +115,6 @@ class GutterGrimeTriggeredAbility extends TriggeredAbilityImpl {
}
}
-
class GutterGrimeEffect extends OneShotEffect {
public GutterGrimeEffect() {
@@ -147,49 +138,3 @@ class GutterGrimeEffect extends OneShotEffect {
}
}
-
-class GutterGrimeToken extends Token {
-
- public GutterGrimeToken(UUID sourceId) {
- super("Ooze", "green Ooze creature token with \"This creature's power and toughness are each equal to the number of slime counters on Gutter Grime.\"");
- cardType.add(CardType.CREATURE);
- subtype.add("Ooze");
- color.setGreen(true);
- power = new MageInt(0);
- toughness = new MageInt(0);
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SetPowerToughnessSourceEffect(new GutterGrimeCounters(sourceId), Duration.WhileOnBattlefield)));
- }
-}
-
-class GutterGrimeCounters implements DynamicValue {
-
- private final UUID sourceId;
-
- public GutterGrimeCounters(UUID sourceId) {
- this.sourceId = sourceId;
- }
-
- @Override
- public int calculate(Game game, Ability sourceAbility, Effect effect) {
- Permanent p = game.getPermanent(sourceId);
- if (p != null) {
- return p.getCounters(game).getCount(CounterType.SLIME);
- }
- return 0;
- }
-
- @Override
- public GutterGrimeCounters copy() {
- return this;
- }
-
- @Override
- public String getMessage() {
- return "slime counters on Gutter Grime";
- }
-
- @Override
- public String toString() {
- return "1";
- }
-}
diff --git a/Mage.Sets/src/mage/cards/h/HammerOfPurphoros.java b/Mage.Sets/src/mage/cards/h/HammerOfPurphoros.java
index 5ec84d8a59..1169812823 100644
--- a/Mage.Sets/src/mage/cards/h/HammerOfPurphoros.java
+++ b/Mage.Sets/src/mage/cards/h/HammerOfPurphoros.java
@@ -27,7 +27,7 @@
*/
package mage.cards.h;
-import mage.MageInt;
+import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility;
@@ -45,11 +45,9 @@ import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.common.FilterControlledLandPermanent;
import mage.filter.common.FilterCreaturePermanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.HammerOfPurphorosGolemToken;
import mage.target.common.TargetControlledPermanent;
-import java.util.UUID;
-
/**
*
* @author LevelX2
@@ -57,13 +55,13 @@ import java.util.UUID;
public class HammerOfPurphoros extends CardImpl {
public HammerOfPurphoros(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT,CardType.ARTIFACT},"{1}{R}{R}");
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.ARTIFACT}, "{1}{R}{R}");
addSuperType(SuperType.LEGENDARY);
// Creatures you control have haste.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD,
new GainAbilityControlledEffect(HasteAbility.getInstance(), Duration.WhileOnBattlefield, new FilterCreaturePermanent("Creatures"))));
-
+
// {2}{R}, {tap}, Sacrifice a land: Create a 3/3 colorless Golem enchantment artifact creature token.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new HammerOfPurphorosGolemToken()), new ManaCostsImpl("{2}{R}"));
ability.addCost(new TapSourceCost());
@@ -80,16 +78,3 @@ public class HammerOfPurphoros extends CardImpl {
return new HammerOfPurphoros(this);
}
}
-class HammerOfPurphorosGolemToken extends Token {
-
- public HammerOfPurphorosGolemToken() {
- super("Golem", "3/3 colorless Golem enchantment artifact creature token");
- setOriginalExpansionSetCode("THS");
- cardType.add(CardType.ENCHANTMENT);
- cardType.add(CardType.ARTIFACT);
- cardType.add(CardType.CREATURE);
- subtype.add("Golem");
- power = new MageInt(3);
- toughness = new MageInt(3);
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/h/HanweirGarrison.java b/Mage.Sets/src/mage/cards/h/HanweirGarrison.java
index 4cf5d31bc1..acb1cd7567 100644
--- a/Mage.Sets/src/mage/cards/h/HanweirGarrison.java
+++ b/Mage.Sets/src/mage/cards/h/HanweirGarrison.java
@@ -29,7 +29,6 @@ package mage.cards.h;
import java.util.UUID;
import mage.MageInt;
-import mage.ObjectColor;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.CreateTokenEffect;
@@ -38,7 +37,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.RedHumanToken;
/**
*
@@ -47,7 +46,7 @@ import mage.game.permanent.token.Token;
public class HanweirGarrison extends CardImpl {
public HanweirGarrison(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{R}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}");
this.subtype.add("Human");
this.subtype.add("Soldier");
this.power = new MageInt(2);
@@ -69,16 +68,3 @@ public class HanweirGarrison extends CardImpl {
return new HanweirGarrison(this);
}
}
-
-class RedHumanToken extends Token {
-
- public RedHumanToken() {
- super("Human", "1/1 red Human creature token");
- this.cardType.add(CardType.CREATURE);
- this.subtype.add("Human");
-
- this.color = ObjectColor.RED;
- this.power = new MageInt(1);
- this.toughness = new MageInt(1);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/h/HapatraVizierOfPoisons.java b/Mage.Sets/src/mage/cards/h/HapatraVizierOfPoisons.java
index 803d2decbe..79eee4b62a 100644
--- a/Mage.Sets/src/mage/cards/h/HapatraVizierOfPoisons.java
+++ b/Mage.Sets/src/mage/cards/h/HapatraVizierOfPoisons.java
@@ -35,7 +35,6 @@ import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
-import mage.abilities.keyword.DeathtouchAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -45,7 +44,7 @@ import mage.counters.CounterType;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.DeathtouchSnakeToken;
import mage.target.common.TargetCreaturePermanent;
/**
@@ -123,16 +122,3 @@ class HapatraVizierOfPoisonsTriggeredAbility extends TriggeredAbilityImpl {
return "Whenever you put one or more -1/-1 counters on a creature, " + super.getRule();
}
}
-
-class DeathtouchSnakeToken extends Token {
-
- public DeathtouchSnakeToken() {
- super("Snake", "1/1 green Snake creature token with deathtouch");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- subtype.add("Snake");
- power = new MageInt(1);
- toughness = new MageInt(1);
- addAbility(DeathtouchAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/h/HauntedAngel.java b/Mage.Sets/src/mage/cards/h/HauntedAngel.java
index 8f6f9760cf..81678aeb7d 100644
--- a/Mage.Sets/src/mage/cards/h/HauntedAngel.java
+++ b/Mage.Sets/src/mage/cards/h/HauntedAngel.java
@@ -39,17 +39,17 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.game.Game;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.HauntedAngelToken;
/**
*
* @author LoneFox
-
+ *
*/
public class HauntedAngel extends CardImpl {
public HauntedAngel(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}");
this.subtype.add("Angel");
this.power = new MageInt(3);
this.toughness = new MageInt(3);
@@ -92,23 +92,11 @@ class HauntedAngelEffect extends OneShotEffect {
public boolean apply(Game game, Ability source) {
UUID controllerId = source.getControllerId();
HauntedAngelToken token = new HauntedAngelToken();
- for(UUID playerId: game.getState().getPlayersInRange(controllerId, game)) {
- if(!playerId.equals(controllerId)) {
+ for (UUID playerId : game.getState().getPlayersInRange(controllerId, game)) {
+ if (!playerId.equals(controllerId)) {
token.putOntoBattlefield(1, game, source.getSourceId(), playerId);
}
}
return true;
}
}
-
-class HauntedAngelToken extends Token {
- public HauntedAngelToken() {
- super("Angel", "3/3 black Angel creature token with flying");
- cardType.add(CardType.CREATURE);
- color.setBlack(true);
- subtype.add("Angel");
- power = new MageInt(3);
- toughness = new MageInt(3);
- this.addAbility(FlyingAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/h/HazezonTamar.java b/Mage.Sets/src/mage/cards/h/HazezonTamar.java
index 9775d742ac..f360f8351a 100644
--- a/Mage.Sets/src/mage/cards/h/HazezonTamar.java
+++ b/Mage.Sets/src/mage/cards/h/HazezonTamar.java
@@ -27,6 +27,7 @@
*/
package mage.cards.h;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.DelayedTriggeredAbility;
@@ -47,11 +48,9 @@ import mage.filter.common.FilterControlledLandPermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.game.Game;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.HazezonTamarSandWarriorToken;
import mage.players.Player;
-import java.util.UUID;
-
/**
*
* @author LevelX2
@@ -66,7 +65,7 @@ public class HazezonTamar extends CardImpl {
}
public HazezonTamar(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{R}{G}{W}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{R}{G}{W}");
addSuperType(SuperType.LEGENDARY);
this.subtype.add("Human");
this.subtype.add("Warrior");
@@ -110,7 +109,7 @@ class HazezonTamarEntersEffect extends OneShotEffect {
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
- Effect effect = new CreateTokenEffect(new HazezonTamarSandWarrior(), new PermanentsOnBattlefieldCount(new FilterControlledLandPermanent()));
+ Effect effect = new CreateTokenEffect(new HazezonTamarSandWarriorToken(), new PermanentsOnBattlefieldCount(new FilterControlledLandPermanent()));
effect.setText("create X 1/1 Sand Warrior creature tokens that are red, green, and white, where X is the number of lands you control at that time");
DelayedTriggeredAbility delayedAbility = new AtTheBeginOfYourNextUpkeepDelayedTriggeredAbility(effect);
game.addDelayedTriggeredAbility(delayedAbility, source);
@@ -119,19 +118,3 @@ class HazezonTamarEntersEffect extends OneShotEffect {
return false;
}
}
-
-class HazezonTamarSandWarrior extends Token {
-
- public HazezonTamarSandWarrior() {
- super("Sand Warrior", "1/1 Sand Warrior creature tokens that are red, green, and white");
- cardType.add(CardType.CREATURE);
- color.setRed(true);
- color.setGreen(true);
- color.setWhite(true);
- subtype.add("Sand");
- subtype.add("Warrior");
- power = new MageInt(1);
- toughness = new MageInt(1);
- }
-
-}
diff --git a/Mage.Sets/src/mage/cards/h/HellionCrucible.java b/Mage.Sets/src/mage/cards/h/HellionCrucible.java
index b63878eb9f..38d1afcd2c 100644
--- a/Mage.Sets/src/mage/cards/h/HellionCrucible.java
+++ b/Mage.Sets/src/mage/cards/h/HellionCrucible.java
@@ -27,7 +27,7 @@
*/
package mage.cards.h;
-import mage.MageInt;
+import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.RemoveCountersSourceCost;
@@ -36,16 +36,13 @@ import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
-import mage.abilities.keyword.HasteAbility;
import mage.abilities.mana.ColorlessManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
import mage.counters.CounterType;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.HellionHasteToken;
/**
*
@@ -54,18 +51,18 @@ import java.util.UUID;
public class HellionCrucible extends CardImpl {
public HellionCrucible(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.LAND},"");
+ super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// {tap}: Add {C} to your mana pool.
this.addAbility(new ColorlessManaAbility());
-
+
// {1}{R}, {tap}: Put a pressure counter on Hellion Crucible.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.PRESSURE.createInstance()), new ManaCostsImpl("{1}{R}"));
ability.addCost(new TapSourceCost());
this.addAbility(ability);
-
+
// {1}{R}, {tap}, Remove two pressure counters from Hellion Crucible and sacrifice it: Create a 4/4 red Hellion creature token with haste.
- ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new HellionToken(), 1), new ManaCostsImpl("{1}{R}"));
+ ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new HellionHasteToken(), 1), new ManaCostsImpl("{1}{R}"));
ability.addCost(new TapSourceCost());
ability.addCost(new RemoveCountersSourceCost(CounterType.PRESSURE.createInstance(2)));
ability.addCost(new SacrificeSourceCost());
@@ -81,15 +78,4 @@ public class HellionCrucible extends CardImpl {
return new HellionCrucible(this);
}
- static class HellionToken extends Token {
- public HellionToken() {
- super("Hellion", "4/4 red Hellion creature token with haste");
- cardType.add(CardType.CREATURE);
- color.setRed(true);
- subtype.add("Hellion");
- power = new MageInt(4);
- toughness = new MageInt(4);
- addAbility(HasteAbility.getInstance());
- }
- }
}
diff --git a/Mage.Sets/src/mage/cards/h/HellionEruption.java b/Mage.Sets/src/mage/cards/h/HellionEruption.java
index 957e42f6e9..45e0c43766 100644
--- a/Mage.Sets/src/mage/cards/h/HellionEruption.java
+++ b/Mage.Sets/src/mage/cards/h/HellionEruption.java
@@ -27,7 +27,8 @@
*/
package mage.cards.h;
-import mage.MageInt;
+import java.util.List;
+import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.cards.CardImpl;
@@ -37,10 +38,7 @@ import mage.constants.Outcome;
import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game;
import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
-
-import java.util.List;
-import java.util.UUID;
+import mage.game.permanent.token.HellionToken;
/**
*
@@ -49,8 +47,7 @@ import java.util.UUID;
public class HellionEruption extends CardImpl {
public HellionEruption(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{5}{R}");
-
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{5}{R}");
// Sacrifice all creatures you control, then create that many 4/4 red Hellion creature tokens.
this.getSpellAbility().addEffect(new HellionEruptionEffect());
@@ -92,15 +89,4 @@ class HellionEruptionEffect extends OneShotEffect {
return true;
}
- static class HellionToken extends Token {
-
- HellionToken() {
- super("Hellion", "4/4 red Hellion creature token");
- this.cardType.add(CardType.CREATURE);
- this.color.setRed(true);
- this.subtype.add("Hellion");
- this.power = new MageInt(4);
- this.toughness = new MageInt(4);
- }
- }
}
diff --git a/Mage.Sets/src/mage/cards/h/HelmOfKaldra.java b/Mage.Sets/src/mage/cards/h/HelmOfKaldra.java
index 2374e42f4c..40af1b6fcb 100644
--- a/Mage.Sets/src/mage/cards/h/HelmOfKaldra.java
+++ b/Mage.Sets/src/mage/cards/h/HelmOfKaldra.java
@@ -27,7 +27,7 @@
*/
package mage.cards.h;
-import mage.MageInt;
+import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.Condition;
@@ -49,9 +49,7 @@ import mage.filter.common.FilterControlledArtifactPermanent;
import mage.filter.predicate.mageobject.NamePredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.KaldraToken;
/**
*
@@ -166,15 +164,3 @@ class HelmOfKaldraEffect extends OneShotEffect {
return false;
}
}
-
-class KaldraToken extends Token {
-
- public KaldraToken() {
- super("Kaldra", "legendary 4/4 colorless Avatar creature token named Kaldra");
- addSuperType(SuperType.LEGENDARY);
- cardType.add(CardType.CREATURE);
- subtype.add("Avatar");
- power = new MageInt(4);
- toughness = new MageInt(4);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/h/HomaridSpawningBed.java b/Mage.Sets/src/mage/cards/h/HomaridSpawningBed.java
index 9e260a8eb7..101c619b95 100644
--- a/Mage.Sets/src/mage/cards/h/HomaridSpawningBed.java
+++ b/Mage.Sets/src/mage/cards/h/HomaridSpawningBed.java
@@ -41,7 +41,7 @@ import mage.constants.CardType;
import mage.constants.Zone;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.mageobject.ColorPredicate;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.CamaridToken;
import mage.target.common.TargetControlledCreaturePermanent;
/**
@@ -49,18 +49,18 @@ import mage.target.common.TargetControlledCreaturePermanent;
* @author fireshoes
*/
public class HomaridSpawningBed extends CardImpl {
-
+
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("a blue creature");
-
+
static {
filter.add(new ColorPredicate(ObjectColor.BLUE));
}
public HomaridSpawningBed(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{U}{U}");
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{U}{U}");
// {1}{U}{U}, Sacrifice a blue creature: create X 1/1 blue Camarid creature tokens, where X is the sacrificed creature's converted mana cost.
- Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new CamaridToken(), new SacrificeCostConvertedMana("creature")),
+ Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new CamaridToken(), new SacrificeCostConvertedMana("creature")),
new ManaCostsImpl("{1}{U}{U}"));
ability.addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(filter)));
this.addAbility(ability);
@@ -75,16 +75,3 @@ public class HomaridSpawningBed extends CardImpl {
return new HomaridSpawningBed(this);
}
}
-
-class CamaridToken extends Token {
-
- CamaridToken() {
- super("Camarid", "1/1 blue Camarid creature tokens");
- this.setOriginalExpansionSetCode("FEM");
- this.getPower().modifyBaseValue(1);
- this.getToughness().modifyBaseValue(1);
- this.color.setBlue(true);
- this.getSubtype(null).add("Camarid");
- this.addCardType(CardType.CREATURE);
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/h/HoofprintsOfTheStag.java b/Mage.Sets/src/mage/cards/h/HoofprintsOfTheStag.java
index e4027aace8..dd1e4d8468 100644
--- a/Mage.Sets/src/mage/cards/h/HoofprintsOfTheStag.java
+++ b/Mage.Sets/src/mage/cards/h/HoofprintsOfTheStag.java
@@ -28,7 +28,6 @@
package mage.cards.h;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.common.DrawCardControllerTriggeredAbility;
@@ -37,13 +36,12 @@ import mage.abilities.costs.common.RemoveCountersSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
-import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
import mage.counters.CounterType;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.WhiteElementalToken;
/**
*
@@ -52,7 +50,7 @@ import mage.game.permanent.token.Token;
public class HoofprintsOfTheStag extends CardImpl {
public HoofprintsOfTheStag(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.TRIBAL,CardType.ENCHANTMENT},"{1}{W}");
+ super(ownerId, setInfo, new CardType[]{CardType.TRIBAL, CardType.ENCHANTMENT}, "{1}{W}");
this.subtype.add("Elemental");
// Whenever you draw a card, you may put a hoofprint counter on Hoofprints of the Stag.
@@ -72,17 +70,3 @@ public class HoofprintsOfTheStag extends CardImpl {
return new HoofprintsOfTheStag(this);
}
}
-
-class WhiteElementalToken extends Token {
-
- WhiteElementalToken() {
- super("Elemental", "4/4 white Elemental creature token with flying");
- cardType.add(CardType.CREATURE);
- color.setWhite(true);
- subtype.add("Elemental");
- power = new MageInt(4);
- toughness = new MageInt(4);
- setTokenType(2);
- this.addAbility(FlyingAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/h/HorncallersChant.java b/Mage.Sets/src/mage/cards/h/HorncallersChant.java
index 8ad04f9694..6496fa0632 100644
--- a/Mage.Sets/src/mage/cards/h/HorncallersChant.java
+++ b/Mage.Sets/src/mage/cards/h/HorncallersChant.java
@@ -28,14 +28,12 @@
package mage.cards.h;
import java.util.UUID;
-import mage.constants.CardType;
-import mage.MageInt;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.PopulateEffect;
-import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.game.permanent.token.Token;
+import mage.constants.CardType;
+import mage.game.permanent.token.RhinoToken;
/**
*
@@ -44,8 +42,7 @@ import mage.game.permanent.token.Token;
public class HorncallersChant extends CardImpl {
public HorncallersChant(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{7}{G}");
-
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{7}{G}");
// Create a 4/4 green Rhino creature token with trample, then populate.
// (Create a token that's a copy of a creature token you control.)
@@ -62,16 +59,3 @@ public class HorncallersChant extends CardImpl {
return new HorncallersChant(this);
}
}
-
-class RhinoToken extends Token {
-
- public RhinoToken() {
- super("Rhino", "4/4 green Rhino creature token with trample");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- subtype.add("Rhino");
- power = new MageInt(4);
- toughness = new MageInt(4);
- addAbility(TrampleAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/h/HornetNest.java b/Mage.Sets/src/mage/cards/h/HornetNest.java
index b264d2c9ca..9665ed4aa8 100644
--- a/Mage.Sets/src/mage/cards/h/HornetNest.java
+++ b/Mage.Sets/src/mage/cards/h/HornetNest.java
@@ -33,16 +33,14 @@ import mage.abilities.Ability;
import mage.abilities.common.DealtDamageToSourceTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.keyword.DeathtouchAbility;
import mage.abilities.keyword.DefenderAbility;
-import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.game.Game;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.HornetNestInsectToken;
import mage.players.Player;
/**
@@ -52,7 +50,7 @@ import mage.players.Player;
public class HornetNest extends CardImpl {
public HornetNest(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
this.subtype.add("Insect");
this.power = new MageInt(0);
@@ -102,19 +100,3 @@ class HornetNestDealDamageEffect extends OneShotEffect {
return false;
}
}
-
-class HornetNestInsectToken extends Token {
-
- public HornetNestInsectToken() {
- super("Insect", "1/1 green Insect creature tokens with flying and deathtouch");
- setOriginalExpansionSetCode("M15");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- subtype.add("Insect");
- power = new MageInt(1);
- toughness = new MageInt(1);
-
- this.addAbility(FlyingAbility.getInstance());
- this.addAbility(DeathtouchAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/h/HornetQueen.java b/Mage.Sets/src/mage/cards/h/HornetQueen.java
index b0b4367744..a4136e6d15 100644
--- a/Mage.Sets/src/mage/cards/h/HornetQueen.java
+++ b/Mage.Sets/src/mage/cards/h/HornetQueen.java
@@ -31,12 +31,12 @@ import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.DeathtouchAbility;
+import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.HornetQueenInsectToken;
/**
*
@@ -45,7 +45,7 @@ import mage.game.permanent.token.Token;
public class HornetQueen extends CardImpl {
public HornetQueen(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{G}{G}{G}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{G}{G}{G}");
this.subtype.add("Insect");
this.power = new MageInt(2);
@@ -68,17 +68,3 @@ public class HornetQueen extends CardImpl {
return new HornetQueen(this);
}
}
-class HornetQueenInsectToken extends Token {
-
- public HornetQueenInsectToken() {
- super("Insect", "1/1 green Insect creature token with flying and deathtouch");
- setOriginalExpansionSetCode("M15");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- subtype.add("Insect");
- power = new MageInt(1);
- toughness = new MageInt(1);
- addAbility(FlyingAbility.getInstance());
- addAbility(DeathtouchAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/h/HourOfNeed.java b/Mage.Sets/src/mage/cards/h/HourOfNeed.java
index d3bcac747f..ec971df313 100644
--- a/Mage.Sets/src/mage/cards/h/HourOfNeed.java
+++ b/Mage.Sets/src/mage/cards/h/HourOfNeed.java
@@ -28,11 +28,9 @@
package mage.cards.h;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.abilityword.StriveAbility;
import mage.abilities.effects.OneShotEffect;
-import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -40,6 +38,7 @@ import mage.constants.Outcome;
import mage.constants.Zone;
import mage.game.Game;
import mage.game.permanent.Permanent;
+import mage.game.permanent.token.HourOfNeedSphinxToken;
import mage.game.permanent.token.Token;
import mage.players.Player;
import mage.target.common.TargetCreaturePermanent;
@@ -51,8 +50,7 @@ import mage.target.common.TargetCreaturePermanent;
public class HourOfNeed extends CardImpl {
public HourOfNeed(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{U}");
-
+ super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{U}");
// Strive — Hour of Need costs {1}{U} more to cast for each target beyond the first.
this.addAbility(new StriveAbility("{1}{U}"));
@@ -91,7 +89,7 @@ class HourOfNeedExileEffect extends OneShotEffect {
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
- for(UUID creatureId: getTargetPointer().getTargets(game, source)) {
+ for (UUID creatureId : getTargetPointer().getTargets(game, source)) {
Permanent creature = game.getPermanent(creatureId);
if (creature != null) {
controller.moveCardToExileWithInfo(creature, null, null, source.getSourceId(), game, Zone.BATTLEFIELD, true);
@@ -104,17 +102,3 @@ class HourOfNeedExileEffect extends OneShotEffect {
return false;
}
}
-
-class HourOfNeedSphinxToken extends Token {
-
- public HourOfNeedSphinxToken() {
- super("Sphinx", "4/4 blue Sphinx creature token with flying");
- this.setOriginalExpansionSetCode("JOU");
- cardType.add(CardType.CREATURE);
- color.setBlue(true);
- subtype.add("Sphinx");
- power = new MageInt(4);
- toughness = new MageInt(4);
- addAbility(FlyingAbility.getInstance());
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/h/HuntedDragon.java b/Mage.Sets/src/mage/cards/h/HuntedDragon.java
index 08a92628a0..18b3eb91c4 100644
--- a/Mage.Sets/src/mage/cards/h/HuntedDragon.java
+++ b/Mage.Sets/src/mage/cards/h/HuntedDragon.java
@@ -28,17 +28,16 @@
package mage.cards.h;
import java.util.UUID;
-import mage.constants.CardType;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.common.CreateTokenTargetEffect;
-import mage.abilities.keyword.FirstStrikeAbility;
import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.HasteAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.game.permanent.token.Token;
+import mage.constants.CardType;
+import mage.game.permanent.token.HuntedDragonKnightToken;
import mage.target.Target;
import mage.target.common.TargetOpponent;
@@ -49,7 +48,7 @@ import mage.target.common.TargetOpponent;
public class HuntedDragon extends CardImpl {
public HuntedDragon(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{R}{R}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}{R}");
this.subtype.add("Dragon");
this.power = new MageInt(6);
@@ -58,7 +57,7 @@ public class HuntedDragon extends CardImpl {
this.addAbility(FlyingAbility.getInstance());
this.addAbility(HasteAbility.getInstance());
// When Hunted Dragon enters the battlefield, create three 2/2 white Knight creature tokens with first strike under target opponent's control.
- Ability ability = new EntersBattlefieldTriggeredAbility(new CreateTokenTargetEffect(new KnightToken(), 3), false);
+ Ability ability = new EntersBattlefieldTriggeredAbility(new CreateTokenTargetEffect(new HuntedDragonKnightToken(), 3), false);
Target target = new TargetOpponent();
ability.addTarget(target);
this.addAbility(ability);
@@ -73,16 +72,3 @@ public class HuntedDragon extends CardImpl {
return new HuntedDragon(this);
}
}
-
-class KnightToken extends Token {
- KnightToken() {
- super("Knight", "2/2 white Knight creature tokens with first strike");
- cardType.add(CardType.CREATURE);
- color.setWhite(true);
-
- subtype.add("Knight");
- power = new MageInt(2);
- toughness = new MageInt(2);
- this.addAbility(FirstStrikeAbility.getInstance());
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/h/HuntedHorror.java b/Mage.Sets/src/mage/cards/h/HuntedHorror.java
index 0e31960fc4..6f8483bcf2 100644
--- a/Mage.Sets/src/mage/cards/h/HuntedHorror.java
+++ b/Mage.Sets/src/mage/cards/h/HuntedHorror.java
@@ -28,18 +28,15 @@
package mage.cards.h;
import java.util.UUID;
-
-import mage.constants.CardType;
import mage.MageInt;
-import mage.ObjectColor;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.common.CreateTokenTargetEffect;
-import mage.abilities.keyword.ProtectionAbility;
import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.game.permanent.token.Token;
+import mage.constants.CardType;
+import mage.game.permanent.token.HuntedCentaurToken;
import mage.target.Target;
import mage.target.common.TargetOpponent;
@@ -50,7 +47,7 @@ import mage.target.common.TargetOpponent;
public class HuntedHorror extends CardImpl {
public HuntedHorror(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{B}{B}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{B}{B}");
this.subtype.add("Horror");
this.power = new MageInt(7);
@@ -58,7 +55,7 @@ public class HuntedHorror extends CardImpl {
this.addAbility(TrampleAbility.getInstance());
// When Hunted Horror enters the battlefield, create two 3/3 green Centaur creature tokens with protection from black under target opponent's control.
- Ability ability = new EntersBattlefieldTriggeredAbility(new CreateTokenTargetEffect(new CentaurToken(), 2), false);
+ Ability ability = new EntersBattlefieldTriggeredAbility(new CreateTokenTargetEffect(new HuntedCentaurToken(), 2), false);
Target target = new TargetOpponent();
ability.addTarget(target);
this.addAbility(ability);
@@ -73,16 +70,3 @@ public class HuntedHorror extends CardImpl {
return new HuntedHorror(this);
}
}
-
-class CentaurToken extends Token {
- CentaurToken() {
- super("Centaur", "3/3 green Centaur creature tokens with protection from black");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- subtype.add("Centaur");
- power = new MageInt(3);
- toughness = new MageInt(3);
- this.addAbility(ProtectionAbility.from(ObjectColor.BLACK));
- }
-}
-
diff --git a/Mage.Sets/src/mage/cards/h/HuntedLammasu.java b/Mage.Sets/src/mage/cards/h/HuntedLammasu.java
index c55affc7f3..ee29b16217 100644
--- a/Mage.Sets/src/mage/cards/h/HuntedLammasu.java
+++ b/Mage.Sets/src/mage/cards/h/HuntedLammasu.java
@@ -28,8 +28,6 @@
package mage.cards.h;
import java.util.UUID;
-
-import mage.constants.CardType;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@@ -37,7 +35,8 @@ import mage.abilities.effects.common.CreateTokenTargetEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.game.permanent.token.Token;
+import mage.constants.CardType;
+import mage.game.permanent.token.HorrorToken;
import mage.target.Target;
import mage.target.common.TargetOpponent;
@@ -47,7 +46,7 @@ import mage.target.common.TargetOpponent;
public class HuntedLammasu extends CardImpl {
public HuntedLammasu(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}{W}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}{W}");
this.subtype.add("Lammasu");
this.power = new MageInt(5);
@@ -70,14 +69,3 @@ public class HuntedLammasu extends CardImpl {
return new HuntedLammasu(this);
}
}
-
-class HorrorToken extends Token {
- HorrorToken() {
- super("Horror", "4/4 black Horror creature token");
- cardType.add(CardType.CREATURE);
- color.setBlack(true);
- subtype.add("Horror");
- power = new MageInt(4);
- toughness = new MageInt(4);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/h/HuntedTroll.java b/Mage.Sets/src/mage/cards/h/HuntedTroll.java
index 7019957aa1..32510549c5 100644
--- a/Mage.Sets/src/mage/cards/h/HuntedTroll.java
+++ b/Mage.Sets/src/mage/cards/h/HuntedTroll.java
@@ -28,8 +28,6 @@
package mage.cards.h;
import java.util.UUID;
-
-import mage.constants.CardType;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@@ -37,12 +35,12 @@ import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.ColoredManaCost;
import mage.abilities.effects.common.CreateTokenTargetEffect;
import mage.abilities.effects.common.RegenerateSourceEffect;
-import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.constants.CardType;
import mage.constants.ColoredManaSymbol;
import mage.constants.Zone;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.FaerieToken;
import mage.target.Target;
import mage.target.common.TargetOpponent;
@@ -53,7 +51,7 @@ import mage.target.common.TargetOpponent;
public class HuntedTroll extends CardImpl {
public HuntedTroll(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}{G}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}{G}");
this.subtype.add("Troll");
this.subtype.add("Warrior");
@@ -78,15 +76,3 @@ public class HuntedTroll extends CardImpl {
return new HuntedTroll(this);
}
}
-
-class FaerieToken extends Token {
- FaerieToken() {
- super("Faerie", "1/1 blue Faerie creature tokens with flying");
- cardType.add(CardType.CREATURE);
- color.setBlue(true);
- subtype.add("Faerie");
- power = new MageInt(1);
- toughness = new MageInt(1);
- this.addAbility(FlyingAbility.getInstance());
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/h/HydraBroodmaster.java b/Mage.Sets/src/mage/cards/h/HydraBroodmaster.java
index 4be46ae48e..5f1d5866bb 100644
--- a/Mage.Sets/src/mage/cards/h/HydraBroodmaster.java
+++ b/Mage.Sets/src/mage/cards/h/HydraBroodmaster.java
@@ -39,7 +39,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.game.Game;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.HydraBroodmasterToken;
import mage.players.Player;
/**
@@ -49,7 +49,7 @@ import mage.players.Player;
public class HydraBroodmaster extends CardImpl {
public HydraBroodmaster(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{G}{G}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{G}{G}");
this.subtype.add("Hydra");
this.power = new MageInt(7);
@@ -58,7 +58,7 @@ public class HydraBroodmaster extends CardImpl {
// {X}{X}{G}: Monstrosity X
this.addAbility(new MonstrosityAbility("{X}{X}{G}", Integer.MAX_VALUE));
// When Hydra Broodmaster becomes monstrous, create X X/X green Hydra creature tokens.
- this.addAbility(new BecomesMonstrousSourceTriggeredAbility(new HydraBroodmasterEffect()));
+ this.addAbility(new BecomesMonstrousSourceTriggeredAbility(new HydraBroodmasterEffect()));
}
public HydraBroodmaster(final HydraBroodmaster card) {
@@ -72,42 +72,28 @@ public class HydraBroodmaster extends CardImpl {
}
class HydraBroodmasterEffect extends OneShotEffect {
-
+
public HydraBroodmasterEffect() {
super(Outcome.PutCreatureInPlay);
this.staticText = "create X X/X green Hydra creature tokens";
}
-
+
public HydraBroodmasterEffect(final HydraBroodmasterEffect effect) {
super(effect);
}
-
+
@Override
public HydraBroodmasterEffect copy() {
return new HydraBroodmasterEffect(this);
}
-
+
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
int xValue = ((BecomesMonstrousSourceTriggeredAbility) source).getMonstrosityValue();
- return new CreateTokenEffect(new HydraBroodmasterToken(xValue, xValue), xValue).apply(game, source);
+ return new CreateTokenEffect(new HydraBroodmasterToken(xValue, xValue), xValue).apply(game, source);
}
return false;
}
}
-
-class HydraBroodmasterToken extends Token {
-
- public HydraBroodmasterToken(int power, int toughness) {
- super("Hydra", "green Hydra creature token");
- this.setOriginalExpansionSetCode("JOU");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- subtype.add("Hydra");
- this.power = new MageInt(power);
- this.toughness = new MageInt(toughness);
- }
-
-}
diff --git a/Mage.Sets/src/mage/cards/i/InfernalGenesis.java b/Mage.Sets/src/mage/cards/i/InfernalGenesis.java
index dcad9a7b30..f2b82678ab 100644
--- a/Mage.Sets/src/mage/cards/i/InfernalGenesis.java
+++ b/Mage.Sets/src/mage/cards/i/InfernalGenesis.java
@@ -28,17 +28,15 @@
package mage.cards.i;
import java.util.UUID;
-
-import mage.constants.*;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.constants.*;
import mage.game.Game;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.MinionToken;
import mage.players.Player;
/**
@@ -48,7 +46,7 @@ import mage.players.Player;
public class InfernalGenesis extends CardImpl {
public InfernalGenesis(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{4}{B}{B}");
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{4}{B}{B}");
// At the beginning of each player's upkeep, that player puts the top card of his or her library into his or her graveyard. Then he or she creates X 1/1 black Minion creature tokens, where X is that card's converted mana cost.
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new InfernalGenesisEffect(), TargetController.ANY, false));
@@ -96,15 +94,3 @@ class InfernalGenesisEffect extends OneShotEffect {
return new InfernalGenesisEffect(this);
}
}
-
-class MinionToken extends Token {
-
- public MinionToken() {
- super("Minion", "1/1 black Minion creature token");
- color.setBlack(true);
- cardType.add(CardType.CREATURE);
- this.subtype.add("Minion");
- power = new MageInt(1);
- toughness = new MageInt(1);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/i/IronFistOfTheEmpire.java b/Mage.Sets/src/mage/cards/i/IronFistOfTheEmpire.java
index 991b088e0d..87c9c3e822 100644
--- a/Mage.Sets/src/mage/cards/i/IronFistOfTheEmpire.java
+++ b/Mage.Sets/src/mage/cards/i/IronFistOfTheEmpire.java
@@ -35,12 +35,11 @@ import mage.abilities.condition.common.HateCondition;
import mage.abilities.decorator.ConditionalTriggeredAbility;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.GainLifeEffect;
-import mage.abilities.keyword.FirstStrikeAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.TargetController;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.RoyalGuardToken;
import mage.watchers.common.LifeLossOtherFromCombatWatcher;
/**
@@ -71,15 +70,3 @@ public class IronFistOfTheEmpire extends CardImpl {
return new IronFistOfTheEmpire(this);
}
}
-
-class RoyalGuardToken extends Token {
-
- public RoyalGuardToken() {
- super("Royal Guard", "2/2 red Soldier creature token with first strike named Royal Guard", 2, 2);
- this.setOriginalExpansionSetCode("SWS");
- cardType.add(CardType.CREATURE);
- color.setRed(true);
- addAbility(FirstStrikeAbility.getInstance());
- subtype.add("Soldier");
- }
-}
diff --git a/Mage.Sets/src/mage/cards/j/JabbaTheHutt.java b/Mage.Sets/src/mage/cards/j/JabbaTheHutt.java
index a6d1544d13..c9a1115440 100644
--- a/Mage.Sets/src/mage/cards/j/JabbaTheHutt.java
+++ b/Mage.Sets/src/mage/cards/j/JabbaTheHutt.java
@@ -27,6 +27,8 @@
*/
package mage.cards.j;
+
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
@@ -48,13 +50,12 @@ import mage.filter.common.FilterOpponentsCreaturePermanent;
import mage.filter.predicate.permanent.CounterPredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
+import mage.game.permanent.token.HunterToken;
import mage.game.permanent.token.Token;
import mage.players.Player;
import mage.target.common.TargetCreaturePermanent;
import mage.target.common.TargetOpponentsCreaturePermanent;
-import java.util.UUID;
-
/**
*
* @author Styxo
@@ -100,16 +101,6 @@ public class JabbaTheHutt extends CardImpl {
}
}
-class HunterToken extends Token {
-
- public HunterToken() {
- super("Hunter", "4/4 red Hunter creature token", 4, 4);
- this.setOriginalExpansionSetCode("SWS");
- cardType.add(CardType.CREATURE);
- color.setRed(true);
- subtype.add("Hunter");
- }
-}
class JabbaTheHuttEffect extends OneShotEffect {
diff --git a/Mage.Sets/src/mage/cards/j/JeditOjanenOfEfrava.java b/Mage.Sets/src/mage/cards/j/JeditOjanenOfEfrava.java
index f5cef06c09..c22c95a085 100644
--- a/Mage.Sets/src/mage/cards/j/JeditOjanenOfEfrava.java
+++ b/Mage.Sets/src/mage/cards/j/JeditOjanenOfEfrava.java
@@ -27,6 +27,7 @@
*/
package mage.cards.j;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.AttacksOrBlocksTriggeredAbility;
import mage.abilities.effects.common.CreateTokenEffect;
@@ -35,9 +36,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SuperType;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.CatWarriorToken;
/**
*
@@ -46,7 +45,7 @@ import java.util.UUID;
public class JeditOjanenOfEfrava extends CardImpl {
public JeditOjanenOfEfrava(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{G}{G}{G}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}{G}{G}");
addSuperType(SuperType.LEGENDARY);
this.subtype.add("Cat");
this.subtype.add("Warrior");
@@ -55,7 +54,7 @@ public class JeditOjanenOfEfrava extends CardImpl {
// Forestwalk
this.addAbility(new ForestwalkAbility());
-
+
// Whenever Jedit Ojanen of Efrava attacks or blocks, create a 2/2 green Cat Warrior creature token with forestwalk.
this.addAbility(new AttacksOrBlocksTriggeredAbility(new CreateTokenEffect(new CatWarriorToken()), false));
}
@@ -69,18 +68,3 @@ public class JeditOjanenOfEfrava extends CardImpl {
return new JeditOjanenOfEfrava(this);
}
}
-
-class CatWarriorToken extends Token {
-
- CatWarriorToken() {
- super("Cat Warrior", "2/2 green Cat Warrior creature token with forestwalk");
- this.setOriginalExpansionSetCode("PLC");
- this.getPower().modifyBaseValue(2);
- this.getToughness().modifyBaseValue(2);
- this.color.setGreen(true);
- this.getSubtype(null).add("Cat");
- this.getSubtype(null).add("Warrior");
- this.addCardType(CardType.CREATURE);
- this.addAbility(new ForestwalkAbility());
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/j/JoinTheRanks.java b/Mage.Sets/src/mage/cards/j/JoinTheRanks.java
index c08e0edf9f..a2bc07d611 100644
--- a/Mage.Sets/src/mage/cards/j/JoinTheRanks.java
+++ b/Mage.Sets/src/mage/cards/j/JoinTheRanks.java
@@ -25,16 +25,14 @@
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
-
package mage.cards.j;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.JoinTheRanksSoldierToken;
/**
*
@@ -42,15 +40,15 @@ import mage.game.permanent.token.Token;
*/
public class JoinTheRanks extends CardImpl {
- public JoinTheRanks (UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{3}{W}");
- this.color.setWhite(true);
-
+ public JoinTheRanks(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{3}{W}");
+ this.color.setWhite(true);
+
// Create two 1/1 white Soldier Ally creature tokens.
this.getSpellAbility().addEffect(new CreateTokenEffect(new JoinTheRanksSoldierToken(), 2));
}
- public JoinTheRanks (final JoinTheRanks card) {
+ public JoinTheRanks(final JoinTheRanks card) {
super(card);
}
@@ -60,17 +58,3 @@ public class JoinTheRanks extends CardImpl {
}
}
-class JoinTheRanksSoldierToken extends Token {
-
- public JoinTheRanksSoldierToken() {
- super("Soldier Ally", "1/1 white Soldier Ally creature token");
- this.setOriginalExpansionSetCode("WWK");
- cardType.add(CardType.CREATURE);
- color.setWhite(true);
- subtype.add("Soldier");
- subtype.add("Ally");
- power = new MageInt(1);
- toughness = new MageInt(1);
-
- }
-}
diff --git a/Mage.Sets/src/mage/cards/j/JunglePatrol.java b/Mage.Sets/src/mage/cards/j/JunglePatrol.java
index e86be6174d..476403510d 100644
--- a/Mage.Sets/src/mage/cards/j/JunglePatrol.java
+++ b/Mage.Sets/src/mage/cards/j/JunglePatrol.java
@@ -37,7 +37,6 @@ import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.BasicManaEffect;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.keyword.DefenderAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -45,7 +44,7 @@ import mage.constants.Zone;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.mageobject.NamePredicate;
import mage.filter.predicate.permanent.TokenPredicate;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.WoodToken;
import mage.target.common.TargetControlledPermanent;
/**
@@ -88,18 +87,3 @@ public class JunglePatrol extends CardImpl {
return new JunglePatrol(this);
}
}
-
-class WoodToken extends Token {
-
- public WoodToken() {
- super("Wood", "0/1 green Wall creature token with defender named Wood");
- this.setOriginalExpansionSetCode("MIR");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- subtype.add("Wall");
- power = new MageInt(0);
- toughness = new MageInt(1);
-
- this.addAbility(DefenderAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/k/KalitasBloodchiefOfGhet.java b/Mage.Sets/src/mage/cards/k/KalitasBloodchiefOfGhet.java
index c8803fd710..353bc8682e 100644
--- a/Mage.Sets/src/mage/cards/k/KalitasBloodchiefOfGhet.java
+++ b/Mage.Sets/src/mage/cards/k/KalitasBloodchiefOfGhet.java
@@ -27,6 +27,7 @@
*/
package mage.cards.k;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
@@ -42,11 +43,9 @@ import mage.constants.SuperType;
import mage.constants.Zone;
import mage.game.Game;
import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.KalitasVampireToken;
import mage.target.common.TargetCreaturePermanent;
-import java.util.UUID;
-
/**
*
* @author LevelX2
@@ -54,7 +53,7 @@ import java.util.UUID;
public class KalitasBloodchiefOfGhet extends CardImpl {
public KalitasBloodchiefOfGhet(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{5}{B}{B}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{B}{B}");
addSuperType(SuperType.LEGENDARY);
this.subtype.add("Vampire");
this.subtype.add("Warrior");
@@ -98,19 +97,9 @@ class KalitasDestroyEffect extends OneShotEffect {
public boolean apply(Game game, Ability source) {
Permanent permanent = game.getPermanent(getTargetPointer().getFirst(game, source));
if (permanent != null && permanent.destroy(source.getSourceId(), game, false)) { // if not destroyed or moved to other zone (replacement effect) it returns false
- new CreateTokenEffect(new VampireToken(permanent.getPower().getValue(), permanent.getToughness().getValue())).apply(game, source);
+ new CreateTokenEffect(new KalitasVampireToken(permanent.getPower().getValue(), permanent.getToughness().getValue())).apply(game, source);
}
return true;
}
- static class VampireToken extends Token {
- public VampireToken(int tokenPower, int tokenToughness) {
- super("Vampire", new StringBuilder(tokenPower).append('/').append(tokenToughness).append(" black Vampire creature token").toString());
- cardType.add(CardType.CREATURE);
- color.setBlack(true);
- subtype.add("Vampire");
- power = new MageInt(tokenPower);
- toughness = new MageInt(tokenToughness);
- }
- }
}
diff --git a/Mage.Sets/src/mage/cards/k/KalonianTwingrove.java b/Mage.Sets/src/mage/cards/k/KalonianTwingrove.java
index 471eca9c06..d70b3ad200 100644
--- a/Mage.Sets/src/mage/cards/k/KalonianTwingrove.java
+++ b/Mage.Sets/src/mage/cards/k/KalonianTwingrove.java
@@ -42,8 +42,7 @@ import mage.constants.Duration;
import mage.constants.Zone;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.mageobject.SubtypePredicate;
-import mage.game.permanent.token.Token;
-
+import mage.game.permanent.token.KalonianTwingroveTreefolkWarriorToken;
import static mage.cards.k.KalonianTwingrove.filterLands;
/**
@@ -51,7 +50,7 @@ import static mage.cards.k.KalonianTwingrove.filterLands;
* @author LevelX2
*/
public class KalonianTwingrove extends CardImpl {
-
+
final static FilterControlledPermanent filterLands = new FilterControlledPermanent("Forests you control");
static {
@@ -59,7 +58,7 @@ public class KalonianTwingrove extends CardImpl {
}
public KalonianTwingrove(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{5}{G}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{G}");
this.subtype.add("Treefolk");
this.subtype.add("Warrior");
@@ -71,7 +70,7 @@ public class KalonianTwingrove extends CardImpl {
// When Kalonian Twingrove enters the battlefield, create a green Treefolk Warrior creature token with "This creature's power and toughness are each equal to the number of Forests you control."
Effect effect = new CreateTokenEffect(new KalonianTwingroveTreefolkWarriorToken());
effect.setText("create a green Treefolk Warrior creature token with \"This creature's power and toughness are each equal to the number of Forests you control.\"");
- this.addAbility(new EntersBattlefieldTriggeredAbility(effect,false));
+ this.addAbility(new EntersBattlefieldTriggeredAbility(effect, false));
}
public KalonianTwingrove(final KalonianTwingrove card) {
@@ -83,19 +82,3 @@ public class KalonianTwingrove extends CardImpl {
return new KalonianTwingrove(this);
}
}
-
-class KalonianTwingroveTreefolkWarriorToken extends Token {
-
- public KalonianTwingroveTreefolkWarriorToken() {
- super("Treefolk Warrior", "green Treefolk Warrior creature token with \"This creature's power and toughness are each equal to the number of Forests you control.\"");
- this.setOriginalExpansionSetCode("M15");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- subtype.add("Treefolk");
- subtype.add("Warrior");
- power = new MageInt(0);
- toughness = new MageInt(0);
-
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SetPowerToughnessSourceEffect(new PermanentsOnBattlefieldCount(filterLands), Duration.WhileOnBattlefield)));
- }
-}
diff --git a/Mage.Sets/src/mage/cards/k/KariZevSkyshipRaider.java b/Mage.Sets/src/mage/cards/k/KariZevSkyshipRaider.java
index ffc7b7177a..4ece97bb7e 100644
--- a/Mage.Sets/src/mage/cards/k/KariZevSkyshipRaider.java
+++ b/Mage.Sets/src/mage/cards/k/KariZevSkyshipRaider.java
@@ -41,7 +41,7 @@ import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.SuperType;
import mage.game.Game;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.RagavanToken;
import mage.players.Player;
/**
@@ -106,17 +106,3 @@ class KariZevSkyshipRaiderEffect extends OneShotEffect {
return new KariZevSkyshipRaiderEffect(this);
}
}
-
-class RagavanToken extends Token {
-
- RagavanToken() {
- super("Ragavan", "legendary 2/1 red Monkey creature token named Ragavan");
- this.setOriginalExpansionSetCode("AER");
- this.addSuperType(SuperType.LEGENDARY);
- this.getPower().modifyBaseValue(2);
- this.getToughness().modifyBaseValue(1);
- this.color.setRed(true);
- this.getSubtype(null).add("Monkey");
- this.addCardType(CardType.CREATURE);
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/k/KazuulTyrantOfTheCliffs.java b/Mage.Sets/src/mage/cards/k/KazuulTyrantOfTheCliffs.java
index 945c3b4187..03396bddd0 100644
--- a/Mage.Sets/src/mage/cards/k/KazuulTyrantOfTheCliffs.java
+++ b/Mage.Sets/src/mage/cards/k/KazuulTyrantOfTheCliffs.java
@@ -27,6 +27,8 @@
*/
package mage.cards.k;
+import java.util.Objects;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.TriggeredAbilityImpl;
@@ -40,16 +42,13 @@ import mage.constants.Outcome;
import mage.constants.SuperType;
import mage.constants.Zone;
import mage.game.Game;
-import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
+import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.OgreToken;
import mage.players.Player;
import mage.target.targetpointer.FixedTarget;
-import java.util.Objects;
-import java.util.UUID;
-
/**
*
* @author jeffwadsworth
@@ -57,7 +56,7 @@ import java.util.UUID;
public class KazuulTyrantOfTheCliffs extends CardImpl {
public KazuulTyrantOfTheCliffs(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{R}{R}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}{R}");
addSuperType(SuperType.LEGENDARY);
this.subtype.add("Ogre");
this.subtype.add("Warrior");
@@ -149,15 +148,3 @@ class KazuulTyrantOfTheCliffsEffect extends OneShotEffect {
return new KazuulTyrantOfTheCliffsEffect(this);
}
}
-
-class OgreToken extends Token {
-
- OgreToken() {
- super("Ogre", "3/3 red Ogre creature");
- cardType.add(CardType.CREATURE);
- color.setRed(true);
- subtype.add("Ogre");
- power = new MageInt(3);
- toughness = new MageInt(3);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/k/KherKeep.java b/Mage.Sets/src/mage/cards/k/KherKeep.java
index 318995d19f..60b3e12c56 100644
--- a/Mage.Sets/src/mage/cards/k/KherKeep.java
+++ b/Mage.Sets/src/mage/cards/k/KherKeep.java
@@ -27,7 +27,7 @@
*/
package mage.cards.k;
-import mage.MageInt;
+import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.TapSourceCost;
@@ -39,9 +39,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SuperType;
import mage.constants.Zone;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.KherKeepKoboldToken;
/**
*
@@ -70,16 +68,3 @@ public class KherKeep extends CardImpl {
return new KherKeep(this);
}
}
-
-class KherKeepKoboldToken extends Token {
-
- public KherKeepKoboldToken() {
- super("Kobolds of Kher Keep", "0/1 red Kobold creature token named Kobolds of Kher Keep");
- cardType.add(CardType.CREATURE);
- color.setRed(true);
- subtype.add("Kobold");
- power = new MageInt(0);
- toughness = new MageInt(1);
- }
-
-}
diff --git a/Mage.Sets/src/mage/cards/k/KingMacarTheGoldCursed.java b/Mage.Sets/src/mage/cards/k/KingMacarTheGoldCursed.java
index 17ab8f8599..9af28f9736 100644
--- a/Mage.Sets/src/mage/cards/k/KingMacarTheGoldCursed.java
+++ b/Mage.Sets/src/mage/cards/k/KingMacarTheGoldCursed.java
@@ -75,16 +75,3 @@ public class KingMacarTheGoldCursed extends CardImpl {
}
//
-//class GoldToken extends Token {
-//
-// public GoldToken() {
-// super("Gold", "colorless artifact token named Gold. It has \"Sacrifice this artifact: Add one mana of any color to your mana pool.\"");
-// this.setOriginalExpansionSetCode("BNG");
-// cardType.add(CardType.ARTIFACT);
-// subtype.add("Gold");
-//
-// Ability ability = new SimpleManaAbility(Zone.BATTLEFIELD, new AddManaOfAnyColorEffect(), new SacrificeSourceCost());
-// ability.addChoice(new ChoiceColor());
-// this.addAbility(ability);
-// }
-//}
diff --git a/Mage.Sets/src/mage/cards/k/KioraMasterOfTheDepths.java b/Mage.Sets/src/mage/cards/k/KioraMasterOfTheDepths.java
index 398112f28d..ab1e72fa48 100644
--- a/Mage.Sets/src/mage/cards/k/KioraMasterOfTheDepths.java
+++ b/Mage.Sets/src/mage/cards/k/KioraMasterOfTheDepths.java
@@ -28,7 +28,6 @@
package mage.cards.k;
import java.util.UUID;
-import mage.MageInt;
import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.LoyaltyAbility;
@@ -54,7 +53,7 @@ import mage.filter.common.FilterLandPermanent;
import mage.game.Game;
import mage.game.command.Emblem;
import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.OctopusToken;
import mage.players.Player;
import mage.target.TargetCard;
import mage.target.common.TargetCreaturePermanent;
@@ -243,16 +242,3 @@ class KioraFightEffect extends OneShotEffect {
return new KioraFightEffect(this);
}
}
-
-class OctopusToken extends Token {
-
- public OctopusToken() {
- super("Octopus", "8/8 blue Octopus creature token");
- cardType.add(CardType.CREATURE);
- color.setBlue(true);
- subtype.add("Octopus");
- power = new MageInt(8);
- toughness = new MageInt(8);
- this.setOriginalExpansionSetCode("BFZ");
- }
-}
diff --git a/Mage.Sets/src/mage/cards/k/KioraTheCrashingWave.java b/Mage.Sets/src/mage/cards/k/KioraTheCrashingWave.java
index 2c1e964fea..73de5a06e4 100644
--- a/Mage.Sets/src/mage/cards/k/KioraTheCrashingWave.java
+++ b/Mage.Sets/src/mage/cards/k/KioraTheCrashingWave.java
@@ -28,7 +28,6 @@
package mage.cards.k;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.LoyaltyAbility;
import mage.abilities.common.BeginningOfEndStepTriggeredAbility;
@@ -51,7 +50,7 @@ import mage.game.command.Emblem;
import mage.game.events.DamageEvent;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.KioraKrakenToken;
import mage.target.TargetPermanent;
import mage.util.CardUtil;
@@ -169,16 +168,3 @@ class KioraEmblem extends Emblem {
this.getAbilities().add(ability);
}
}
-
-class KioraKrakenToken extends Token {
-
- public KioraKrakenToken() {
- super("Kraken", "9/9 blue Kraken creature token");
- cardType.add(CardType.CREATURE);
- color.setBlue(true);
- subtype.add("Kraken");
- power = new MageInt(9);
- toughness = new MageInt(9);
- this.setOriginalExpansionSetCode("BNG");
- }
-}
diff --git a/Mage.Sets/src/mage/cards/l/LeafdrakeRoost.java b/Mage.Sets/src/mage/cards/l/LeafdrakeRoost.java
index 03df84a190..86011206de 100644
--- a/Mage.Sets/src/mage/cards/l/LeafdrakeRoost.java
+++ b/Mage.Sets/src/mage/cards/l/LeafdrakeRoost.java
@@ -28,7 +28,6 @@
package mage.cards.l;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility;
@@ -38,7 +37,6 @@ import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
import mage.abilities.keyword.EnchantAbility;
-import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.AttachmentType;
@@ -46,7 +44,7 @@ import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.Zone;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.LeafdrakeRoostDrakeToken;
import mage.target.TargetPermanent;
import mage.target.common.TargetLandPermanent;
@@ -57,10 +55,9 @@ import mage.target.common.TargetLandPermanent;
public class LeafdrakeRoost extends CardImpl {
public LeafdrakeRoost(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{G}{U}");
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{G}{U}");
this.subtype.add("Aura");
-
// Enchant land
TargetPermanent auraTarget = new TargetLandPermanent();
this.getSpellAbility().addTarget(auraTarget);
@@ -85,18 +82,3 @@ public class LeafdrakeRoost extends CardImpl {
return new LeafdrakeRoost(this);
}
}
-
-class LeafdrakeRoostDrakeToken extends Token {
-
- public LeafdrakeRoostDrakeToken() {
- super("Drake", "2/2 green and blue Drake creature token with flying");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- color.setBlue(true);
- subtype.add("Drake");
- power = new MageInt(2);
- toughness = new MageInt(2);
- this.addAbility(FlyingAbility.getInstance());
- }
-
-}
diff --git a/Mage.Sets/src/mage/cards/l/LichLordOfUnx.java b/Mage.Sets/src/mage/cards/l/LichLordOfUnx.java
index 53df3d63c0..bd47f0f39f 100644
--- a/Mage.Sets/src/mage/cards/l/LichLordOfUnx.java
+++ b/Mage.Sets/src/mage/cards/l/LichLordOfUnx.java
@@ -25,12 +25,9 @@
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
-
package mage.cards.l;
import java.util.UUID;
-
-import mage.constants.CardType;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
@@ -42,10 +39,11 @@ import mage.abilities.effects.common.LoseLifeTargetEffect;
import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.constants.CardType;
import mage.constants.Zone;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.mageobject.SubtypePredicate;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.ZombieWizardToken;
import mage.target.TargetPlayer;
/**
@@ -53,19 +51,18 @@ import mage.target.TargetPlayer;
* @author Loki
*/
public class LichLordOfUnx extends CardImpl {
+
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Zombies you control");
static {
filter.add(new SubtypePredicate("Zombie"));
}
- public LichLordOfUnx (UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{U}{B}");
+ public LichLordOfUnx(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{B}");
this.subtype.add("Zombie");
this.subtype.add("Wizard");
-
-
this.power = new MageInt(2);
this.toughness = new MageInt(2);
@@ -78,7 +75,7 @@ public class LichLordOfUnx extends CardImpl {
this.addAbility(ability);
}
- public LichLordOfUnx (final LichLordOfUnx card) {
+ public LichLordOfUnx(final LichLordOfUnx card) {
super(card);
}
@@ -88,16 +85,3 @@ public class LichLordOfUnx extends CardImpl {
}
}
-
-class ZombieWizardToken extends Token {
- ZombieWizardToken() {
- super("Zombie Wizard", "1/1 blue and black Zombie Wizard creature token");
- cardType.add(CardType.CREATURE);
- color.setBlue(true);
- color.setBlack(true);
- subtype.add("Zombie");
- subtype.add("Wizard");
- power = new MageInt(1);
- toughness = new MageInt(1);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/l/LinvalaThePreserver.java b/Mage.Sets/src/mage/cards/l/LinvalaThePreserver.java
index aa656cfc4f..cd5d8193dc 100644
--- a/Mage.Sets/src/mage/cards/l/LinvalaThePreserver.java
+++ b/Mage.Sets/src/mage/cards/l/LinvalaThePreserver.java
@@ -27,6 +27,7 @@
*/
package mage.cards.l;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.condition.common.OpponentControlsMoreCondition;
@@ -40,9 +41,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SuperType;
import mage.filter.common.FilterCreaturePermanent;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.LinvalaAngelToken;
/**
*
@@ -51,7 +50,7 @@ import java.util.UUID;
public class LinvalaThePreserver extends CardImpl {
public LinvalaThePreserver(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{W}{W}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{W}{W}");
addSuperType(SuperType.LEGENDARY);
this.subtype.add("Angel");
this.power = new MageInt(5);
@@ -59,12 +58,12 @@ public class LinvalaThePreserver extends CardImpl {
// Flying
this.addAbility(FlyingAbility.getInstance());
-
+
// When Linvala, the Preserver enters the battlefield, if an opponent has more life than you, you gain 5 life.
- this.addAbility(new ConditionalTriggeredAbility(new EntersBattlefieldTriggeredAbility(new GainLifeEffect(5), false),
+ this.addAbility(new ConditionalTriggeredAbility(new EntersBattlefieldTriggeredAbility(new GainLifeEffect(5), false),
OpponentHasMoreLifeCondition.instance,
"When {this} enters the battlefield, if an opponent has more life than you, you gain 5 life."));
-
+
// When Linvala enters the battlefield, if an opponent controls more creatures than you, create a 3/3 white Angel creature token with flying.
this.addAbility(new ConditionalTriggeredAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new LinvalaAngelToken()), false),
new OpponentControlsMoreCondition(new FilterCreaturePermanent()),
@@ -80,17 +79,3 @@ public class LinvalaThePreserver extends CardImpl {
return new LinvalaThePreserver(this);
}
}
-
-class LinvalaAngelToken extends Token {
-
- public LinvalaAngelToken() {
- super("Angel", "3/3 white Angel creature token with flying");
- setOriginalExpansionSetCode("OGW");
- cardType.add(CardType.CREATURE);
- color.setWhite(true);
- subtype.add("Angel");
- power = new MageInt(3);
- toughness = new MageInt(3);
- addAbility(FlyingAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/l/LlanowarMentor.java b/Mage.Sets/src/mage/cards/l/LlanowarMentor.java
index 56b18645ef..230a0e42c7 100644
--- a/Mage.Sets/src/mage/cards/l/LlanowarMentor.java
+++ b/Mage.Sets/src/mage/cards/l/LlanowarMentor.java
@@ -35,12 +35,11 @@ import mage.abilities.costs.common.DiscardCardCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.mana.GreenManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.LlanowarElvesToken;
/**
*
@@ -71,19 +70,3 @@ public class LlanowarMentor extends CardImpl {
return new LlanowarMentor(this);
}
}
-
-class LlanowarElvesToken extends Token {
-
- public LlanowarElvesToken() {
- super("Llanowar Elves", "1/1 green Elf Druid creature token named Llanowar Elves with \"{T}: Add {G} to your mana pool.\"");
- this.setOriginalExpansionSetCode("FUT");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- subtype.add("Elf");
- subtype.add("Druid");
- power = new MageInt(1);
- toughness = new MageInt(1);
-
- this.addAbility(new GreenManaAbility());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/l/LordOfLineage.java b/Mage.Sets/src/mage/cards/l/LordOfLineage.java
index c7c25e6a96..58ae0f6938 100644
--- a/Mage.Sets/src/mage/cards/l/LordOfLineage.java
+++ b/Mage.Sets/src/mage/cards/l/LordOfLineage.java
@@ -42,13 +42,14 @@ import mage.constants.Duration;
import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.SubtypePredicate;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.VampireToken;
/**
*
* @author Loki
*/
public class LordOfLineage extends CardImpl {
+
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Other Vampire creatures");
static {
@@ -56,7 +57,7 @@ public class LordOfLineage extends CardImpl {
}
public LordOfLineage(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
this.subtype.add("Vampire");
this.color.setBlack(true);
@@ -83,15 +84,3 @@ public class LordOfLineage extends CardImpl {
return new LordOfLineage(this);
}
}
-
-class VampireToken extends Token {
- VampireToken() {
- super("Vampire", "2/2 black Vampire creature token with flying");
- cardType.add(CardType.CREATURE);
- color.setBlack(true);
- subtype.add("Vampire");
- power = new MageInt(2);
- toughness = new MageInt(2);
- addAbility(FlyingAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/l/LullmageMentor.java b/Mage.Sets/src/mage/cards/l/LullmageMentor.java
index 795085f1d1..fe070b4b7e 100644
--- a/Mage.Sets/src/mage/cards/l/LullmageMentor.java
+++ b/Mage.Sets/src/mage/cards/l/LullmageMentor.java
@@ -43,7 +43,7 @@ import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.filter.predicate.permanent.TappedPredicate;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.MerfolkToken;
import mage.target.TargetSpell;
import mage.target.common.TargetControlledCreaturePermanent;
@@ -87,15 +87,3 @@ public class LullmageMentor extends CardImpl {
return new LullmageMentor(this);
}
}
-
-class MerfolkToken extends Token {
-
- public MerfolkToken() {
- super("Merfolk", "1/1 blue Merfolk creature token");
- cardType.add(CardType.CREATURE);
- color.setBlue(true);
- subtype.add("Merfolk");
- power = new MageInt(1);
- toughness = new MageInt(1);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/m/MarathWillOfTheWild.java b/Mage.Sets/src/mage/cards/m/MarathWillOfTheWild.java
index 441c18a40e..56584fb3ab 100644
--- a/Mage.Sets/src/mage/cards/m/MarathWillOfTheWild.java
+++ b/Mage.Sets/src/mage/cards/m/MarathWillOfTheWild.java
@@ -27,6 +27,7 @@
*/
package mage.cards.m;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.Mode;
@@ -53,13 +54,12 @@ import mage.constants.Zone;
import mage.counters.CounterType;
import mage.game.Game;
import mage.game.permanent.Permanent;
+import mage.game.permanent.token.MarathWillOfTheWildElementalToken;
import mage.game.permanent.token.Token;
import mage.players.Player;
import mage.target.common.TargetCreatureOrPlayer;
import mage.target.common.TargetCreaturePermanent;
-import java.util.UUID;
-
/**
*
* @author LevelX2
@@ -67,7 +67,7 @@ import java.util.UUID;
public class MarathWillOfTheWild extends CardImpl {
public MarathWillOfTheWild(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{R}{G}{W}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}{G}{W}");
addSuperType(SuperType.LEGENDARY);
this.subtype.add("Elemental");
this.subtype.add("Beast");
@@ -99,7 +99,7 @@ public class MarathWillOfTheWild extends CardImpl {
ability.addMode(mode);
// X can't be 0.
- for (VariableCost cost: ability.getManaCosts().getVariableCosts()) {
+ for (VariableCost cost : ability.getManaCosts().getVariableCosts()) {
if (cost instanceof VariableManaCost) {
((VariableManaCost) cost).setMinX(1);
break;
@@ -115,7 +115,7 @@ public class MarathWillOfTheWild extends CardImpl {
if (sourcePermanent != null) {
int amount = sourcePermanent.getCounters(game).getCount(CounterType.P1P1);
if (amount > 0) {
- for (VariableCost cost: ability.getManaCostsToPay().getVariableCosts()) {
+ for (VariableCost cost : ability.getManaCostsToPay().getVariableCosts()) {
if (cost instanceof VariableManaCost) {
((VariableManaCost) cost).setMaxX(amount);
break;
@@ -136,7 +136,6 @@ public class MarathWillOfTheWild extends CardImpl {
}
}
-
class MarathWillOfTheWildCreateTokenEffect extends OneShotEffect {
public MarathWillOfTheWildCreateTokenEffect() {
@@ -168,17 +167,6 @@ class MarathWillOfTheWildCreateTokenEffect extends OneShotEffect {
}
}
-class MarathWillOfTheWildElementalToken extends Token {
- public MarathWillOfTheWildElementalToken() {
- super("Elemental", "X/X green Elemental creature token");
- cardType.add(CardType.CREATURE);
- subtype.add("Elemental");
- color.setGreen(true);
- power = new MageInt(0);
- toughness = new MageInt(0);
- }
-}
-
class MarathWillOfTheWildRemoveCountersCost extends CostImpl {
public MarathWillOfTheWildRemoveCountersCost() {
diff --git a/Mage.Sets/src/mage/cards/m/MarduStrikeLeader.java b/Mage.Sets/src/mage/cards/m/MarduStrikeLeader.java
index 618325857a..d1a5142c1f 100644
--- a/Mage.Sets/src/mage/cards/m/MarduStrikeLeader.java
+++ b/Mage.Sets/src/mage/cards/m/MarduStrikeLeader.java
@@ -35,7 +35,7 @@ import mage.abilities.keyword.DashAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.MarduStrikeLeaderWarriorToken;
/**
*
@@ -44,7 +44,7 @@ import mage.game.permanent.token.Token;
public class MarduStrikeLeader extends CardImpl {
public MarduStrikeLeader(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}");
this.subtype.add("Human");
this.subtype.add("Warrior");
this.power = new MageInt(3);
@@ -66,16 +66,3 @@ public class MarduStrikeLeader extends CardImpl {
return new MarduStrikeLeader(this);
}
}
-
-class MarduStrikeLeaderWarriorToken extends Token {
-
- public MarduStrikeLeaderWarriorToken() {
- super("Warrior", "2/1 black Warrior creature token");
- cardType.add(CardType.CREATURE);
- color.setBlack(true);
- subtype.add("Warrior");
- power = new MageInt(2);
- toughness = new MageInt(1);
- }
-
-}
diff --git a/Mage.Sets/src/mage/cards/m/MasterOfWaves.java b/Mage.Sets/src/mage/cards/m/MasterOfWaves.java
index 46187f9b93..c6e4314817 100644
--- a/Mage.Sets/src/mage/cards/m/MasterOfWaves.java
+++ b/Mage.Sets/src/mage/cards/m/MasterOfWaves.java
@@ -45,6 +45,7 @@ import mage.constants.Duration;
import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.SubtypePredicate;
+import mage.game.permanent.token.MasterOfWavesElementalToken;
import mage.game.permanent.token.Token;
/**
@@ -87,17 +88,3 @@ public class MasterOfWaves extends CardImpl {
return new MasterOfWaves(this);
}
}
-
-class MasterOfWavesElementalToken extends Token {
-
- public MasterOfWavesElementalToken() {
- super("Elemental", "1/0 blue Elemental creature");
- this.cardType.add(CardType.CREATURE);
- this.subtype.add("Elemental");
-
- this.color.setBlue(true);
-
- this.power = new MageInt(1);
- this.toughness = new MageInt(0);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/m/MelokuTheCloudedMirror.java b/Mage.Sets/src/mage/cards/m/MelokuTheCloudedMirror.java
index 3d94028bc5..0ef94d095f 100644
--- a/Mage.Sets/src/mage/cards/m/MelokuTheCloudedMirror.java
+++ b/Mage.Sets/src/mage/cards/m/MelokuTheCloudedMirror.java
@@ -25,9 +25,9 @@
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
-
package mage.cards.m;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
@@ -42,11 +42,9 @@ import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.common.FilterControlledLandPermanent;
import mage.filter.common.FilterControlledPermanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.MelokuTheCloudedMirrorToken;
import mage.target.common.TargetControlledPermanent;
-import java.util.UUID;
-
/**
* @author Loki
*/
@@ -55,7 +53,7 @@ public class MelokuTheCloudedMirror extends CardImpl {
private static final FilterControlledPermanent filter = new FilterControlledLandPermanent("land");
public MelokuTheCloudedMirror(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{U}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{U}");
addSuperType(SuperType.LEGENDARY);
this.subtype.add("Moonfolk");
this.subtype.add("Wizard");
@@ -64,7 +62,7 @@ public class MelokuTheCloudedMirror extends CardImpl {
this.toughness = new MageInt(4);
// Flying
this.addAbility(FlyingAbility.getInstance());
-
+
// {1}, Return a land you control to its owner's hand: Create a 1/1 blue Illusion creature token with flying.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new MelokuTheCloudedMirrorToken(), 1), new GenericManaCost(1));
ability.addCost(new ReturnToHandChosenControlledPermanentCost(new TargetControlledPermanent(filter)));
@@ -81,15 +79,3 @@ public class MelokuTheCloudedMirror extends CardImpl {
}
}
-
-class MelokuTheCloudedMirrorToken extends Token {
- MelokuTheCloudedMirrorToken() {
- super("Illusion", "1/1 blue Illusion creature token with flying");
- cardType.add(CardType.CREATURE);
- color.setBlue(true);
- subtype.add("Illusion");
- power = new MageInt(1);
- toughness = new MageInt(1);
- addAbility(FlyingAbility.getInstance());
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/m/MercyKilling.java b/Mage.Sets/src/mage/cards/m/MercyKilling.java
index f8c9dfef56..e1c5686fa6 100644
--- a/Mage.Sets/src/mage/cards/m/MercyKilling.java
+++ b/Mage.Sets/src/mage/cards/m/MercyKilling.java
@@ -28,19 +28,17 @@
package mage.cards.m;
import java.util.UUID;
-
-import mage.constants.CardType;
+import mage.abilities.Ability;
+import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.SacrificeTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.target.common.TargetCreaturePermanent;
-import mage.abilities.effects.OneShotEffect;
-import mage.game.Game;
-import mage.abilities.Ability;
-import mage.game.permanent.Permanent;
+import mage.constants.CardType;
import mage.constants.Outcome;
-import mage.game.permanent.token.Token;
-import mage.MageInt;
+import mage.game.Game;
+import mage.game.permanent.Permanent;
+import mage.game.permanent.token.MercyKillingToken;
+import mage.target.common.TargetCreaturePermanent;
/**
* @author duncant
@@ -48,8 +46,8 @@ import mage.MageInt;
public class MercyKilling extends CardImpl {
public MercyKilling(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{G/W}");
-
+ super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{G/W}");
+
// Target creature's controller sacrifices it, then creates X 1/1 green and white Elf Warrior creature tokens, where X is that creature's power.
this.getSpellAbility().addEffect(new SacrificeTargetEffect("Target creature's controller sacrifices it"));
this.getSpellAbility().addEffect(new MercyKillingTokenEffect());
@@ -93,17 +91,3 @@ class MercyKillingTokenEffect extends OneShotEffect {
}
}
-
-class MercyKillingToken extends Token {
-
- public MercyKillingToken() {
- super("Elf Warrior", "1/1 green and white Elf Warrior creature token");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- color.setWhite(true);
- subtype.add("Elf");
- subtype.add("Warrior");
- power = new MageInt(1);
- toughness = new MageInt(1);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/m/MetallurgicSummonings.java b/Mage.Sets/src/mage/cards/m/MetallurgicSummonings.java
index f237a240e2..56c3273bad 100644
--- a/Mage.Sets/src/mage/cards/m/MetallurgicSummonings.java
+++ b/Mage.Sets/src/mage/cards/m/MetallurgicSummonings.java
@@ -28,9 +28,7 @@
package mage.cards.m;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.Ability;
-import mage.constants.ComparisonType;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.common.ExileSourceCost;
@@ -41,6 +39,7 @@ import mage.abilities.effects.common.CreateTokenEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
+import mage.constants.ComparisonType;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.filter.FilterSpell;
@@ -49,11 +48,10 @@ import mage.filter.common.FilterInstantOrSorceryCard;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.CardTypePredicate;
import mage.game.Game;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.MetallurgicSummoningsConstructToken;
import mage.game.stack.Spell;
import mage.players.Player;
import mage.target.targetpointer.FixedTarget;
-import mage.util.RandomUtil;
/**
*
@@ -70,7 +68,7 @@ public class MetallurgicSummonings extends CardImpl {
}
public MetallurgicSummonings(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{U}{U}");
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{U}{U}");
// Whenever you cast an instant or sorcery spell, create an X/X colorless Construct artifact creature token, where X is that spell's converted mana cost.
this.addAbility(new SpellCastControllerTriggeredAbility(new MetallurgicSummoningsTokenEffect(), filter, false, true));
@@ -80,7 +78,7 @@ public class MetallurgicSummonings extends CardImpl {
new MetallurgicSummoningsReturnEffect(), new ManaCostsImpl("{3}{U}{U}"),
new PermanentsOnTheBattlefieldCondition(new FilterControlledArtifactPermanent(), ComparisonType.MORE_THAN, 5),
"{3}{U}{U}, Exile {this}: Return all instant and sorcery cards from your graveyard to your hand."
- + " Activate this ability only if you control six or more artifacts.");
+ + " Activate this ability only if you control six or more artifacts.");
ability.addCost(new ExileSourceCost());
this.addAbility(ability);
}
@@ -154,17 +152,3 @@ class MetallurgicSummoningsReturnEffect extends OneShotEffect {
return false;
}
}
-
-class MetallurgicSummoningsConstructToken extends Token {
-
- public MetallurgicSummoningsConstructToken(int xValue) {
- super("Construct", "X/X colorless Construct artifact creature token");
- setOriginalExpansionSetCode("KLD");
- setTokenType(RandomUtil.nextInt(2) + 1);
- cardType.add(CardType.ARTIFACT);
- cardType.add(CardType.CREATURE);
- subtype.add("Construct");
- power = new MageInt(xValue);
- toughness = new MageInt(xValue);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/m/Metrognome.java b/Mage.Sets/src/mage/cards/m/Metrognome.java
index 24dd4b6859..82aacf0dec 100644
--- a/Mage.Sets/src/mage/cards/m/Metrognome.java
+++ b/Mage.Sets/src/mage/cards/m/Metrognome.java
@@ -28,7 +28,6 @@
package mage.cards.m;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.DiscardedByOpponentTriggerAbility;
import mage.abilities.common.SimpleActivatedAbility;
@@ -39,7 +38,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.GnomeToken;
/**
*
@@ -68,15 +67,3 @@ public class Metrognome extends CardImpl {
return new Metrognome(this);
}
}
-
-class GnomeToken extends Token {
-
- public GnomeToken() {
- super("Gnome", "1/1 colorless Gnome artifact creature token");
- cardType.add(CardType.ARTIFACT);
- cardType.add(CardType.CREATURE);
- subtype.add("Gnome");
- power = new MageInt(1);
- toughness = new MageInt(1);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/m/MitoticSlime.java b/Mage.Sets/src/mage/cards/m/MitoticSlime.java
index 9fc1795455..ac16cc5311 100644
--- a/Mage.Sets/src/mage/cards/m/MitoticSlime.java
+++ b/Mage.Sets/src/mage/cards/m/MitoticSlime.java
@@ -34,8 +34,7 @@ import mage.abilities.effects.common.CreateTokenEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.game.permanent.token.OozeToken;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.Ooze2Token;
/**
*
@@ -63,16 +62,3 @@ public class MitoticSlime extends CardImpl {
}
}
-
-class Ooze2Token extends Token {
-
- public Ooze2Token() {
- super("Ooze", "2/2 green Ooze creature tokens with \"When this creature is put into a graveyard, create two 1/1 green Ooze creature tokens.\"");
- cardType.add(CardType.CREATURE);
- subtype.add("Ooze");
- color.setGreen(true);
- power = new MageInt(2);
- toughness = new MageInt(2);
- this.addAbility(new DiesTriggeredAbility(new CreateTokenEffect(new OozeToken(1, 1), 2), false));
- }
-}
diff --git a/Mage.Sets/src/mage/cards/m/MoltenBirth.java b/Mage.Sets/src/mage/cards/m/MoltenBirth.java
index 2eb11f78ed..3d70db0334 100644
--- a/Mage.Sets/src/mage/cards/m/MoltenBirth.java
+++ b/Mage.Sets/src/mage/cards/m/MoltenBirth.java
@@ -14,7 +14,7 @@
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIALs, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
@@ -27,7 +27,7 @@
*/
package mage.cards.m;
-import mage.MageInt;
+import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.cards.Card;
@@ -37,11 +37,8 @@ import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.game.Game;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.MoltenBirthElementalToken;
import mage.players.Player;
-import mage.util.RandomUtil;
-
-import java.util.UUID;
/**
*
@@ -50,12 +47,11 @@ import java.util.UUID;
public class MoltenBirth extends CardImpl {
public MoltenBirth(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{1}{R}{R}");
-
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{R}{R}");
// Create two 1/1 red Elemental creature tokens. Then flip a coin. If you win the flip, return Molten Birth to its owner's hand.
this.getSpellAbility().addEffect(new MoltenBirthEffect());
-
+
}
public MoltenBirth(final MoltenBirth card) {
@@ -89,28 +85,15 @@ class MoltenBirthEffect extends OneShotEffect {
Player controller = game.getPlayer(source.getControllerId());
Card molten = game.getCard(source.getSourceId());
if (controller != null) {
- ElementalToken token = new ElementalToken();
+ MoltenBirthElementalToken token = new MoltenBirthElementalToken();
token.putOntoBattlefield(2, game, source.getSourceId(), source.getControllerId());
if (controller.flipCoin(game)) {
molten.moveToZone(Zone.HAND, source.getSourceId(), game, true);
- game.informPlayers(controller.getLogName() + " won the flip. " + molten.getLogName() +" is returned to "+ controller.getLogName() + "'s hand.");
+ game.informPlayers(controller.getLogName() + " won the flip. " + molten.getLogName() + " is returned to " + controller.getLogName() + "'s hand.");
}
return true;
}
return false;
}
- static class ElementalToken extends Token {
-
- public ElementalToken() {
- super("Elemental", "1/1 red Elemental creature");
- this.setOriginalExpansionSetCode("M14");
- this.setTokenType(RandomUtil.nextInt(2) + 1);
- cardType.add(CardType.CREATURE);
- color.setRed(true);
- subtype.add("Elemental");
- power = new MageInt(1);
- toughness = new MageInt(1);
- }
- }
}
diff --git a/Mage.Sets/src/mage/cards/m/MonasteryMentor.java b/Mage.Sets/src/mage/cards/m/MonasteryMentor.java
index 19bdbdf4cb..62a43776bf 100644
--- a/Mage.Sets/src/mage/cards/m/MonasteryMentor.java
+++ b/Mage.Sets/src/mage/cards/m/MonasteryMentor.java
@@ -38,7 +38,7 @@ import mage.constants.CardType;
import mage.filter.FilterSpell;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.CardTypePredicate;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.MonasteryMentorToken;
/**
*
@@ -75,16 +75,3 @@ public class MonasteryMentor extends CardImpl {
return new MonasteryMentor(this);
}
}
-
-class MonasteryMentorToken extends Token {
-
- MonasteryMentorToken() {
- super("Monk", "1/1 white Monk creature token with prowess");
- cardType.add(CardType.CREATURE);
- color.setWhite(true);
- subtype.add("Monk");
- power = new MageInt(1);
- toughness = new MageInt(1);
- this.addAbility(new ProwessAbility());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/m/MonkeyCage.java b/Mage.Sets/src/mage/cards/m/MonkeyCage.java
index 5ddfd86eb9..3f8b29dc91 100644
--- a/Mage.Sets/src/mage/cards/m/MonkeyCage.java
+++ b/Mage.Sets/src/mage/cards/m/MonkeyCage.java
@@ -28,7 +28,6 @@
package mage.cards.m;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
@@ -43,7 +42,7 @@ import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game;
import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.ApeToken;
/**
*
@@ -52,11 +51,11 @@ import mage.game.permanent.token.Token;
public class MonkeyCage extends CardImpl {
public MonkeyCage(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{5}");
+ super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{5}");
// When a creature enters the battlefield, sacrifice Monkey Cage and create X 2/2 green Ape creature tokens, where X is that creature's converted mana cost.
Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new SacrificeSourceEffect(),
- new FilterCreaturePermanent("a creature"), false, SetTargetPointer.PERMANENT, "");
+ new FilterCreaturePermanent("a creature"), false, SetTargetPointer.PERMANENT, "");
ability.addEffect(new MonkeyCageEffect());
this.addAbility(ability);
}
@@ -88,22 +87,11 @@ class MonkeyCageEffect extends OneShotEffect {
}
public boolean apply(Game game, Ability source) {
- Permanent creature = game.getPermanentOrLKIBattlefield(getTargetPointer().getFirst(game, source));
- if(creature != null) {
- int cmc = creature.getConvertedManaCost();
- return new CreateTokenEffect(new ApeToken(), cmc).apply(game, source);
- }
- return false;
- }
-}
-
-class ApeToken extends Token {
- ApeToken() {
- super("Ape", "2/2 green Ape creature token");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- subtype.add("Ape");
- power = new MageInt(2);
- toughness = new MageInt(2);
+ Permanent creature = game.getPermanentOrLKIBattlefield(getTargetPointer().getFirst(game, source));
+ if (creature != null) {
+ int cmc = creature.getConvertedManaCost();
+ return new CreateTokenEffect(new ApeToken(), cmc).apply(game, source);
+ }
+ return false;
}
}
diff --git a/Mage.Sets/src/mage/cards/m/MysticGenesis.java b/Mage.Sets/src/mage/cards/m/MysticGenesis.java
index ae3f392604..51216b1973 100644
--- a/Mage.Sets/src/mage/cards/m/MysticGenesis.java
+++ b/Mage.Sets/src/mage/cards/m/MysticGenesis.java
@@ -28,16 +28,15 @@
package mage.cards.m;
import java.util.UUID;
-import mage.constants.CardType;
-import mage.constants.Outcome;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Outcome;
import mage.game.Game;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.MysticGenesisOozeToken;
import mage.game.stack.StackObject;
import mage.target.TargetSpell;
@@ -48,7 +47,7 @@ import mage.target.TargetSpell;
public class MysticGenesis extends CardImpl {
public MysticGenesis(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{G}{U}{U}");
+ super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{G}{U}{U}");
// Counter target spell. Create an X/X green Ooze creature token, where X is that spell's converted mana cost.
this.getSpellAbility().addTarget(new TargetSpell());
@@ -92,16 +91,3 @@ class MysticGenesisEffect extends OneShotEffect {
return false;
}
}
-
-class MysticGenesisOozeToken extends Token {
-
- public MysticGenesisOozeToken(int xValue) {
- super("Ooze", "X/X green Ooze creature token");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- subtype.add("Ooze");
- power = new MageInt(xValue);
- toughness = new MageInt(xValue);
- setOriginalExpansionSetCode("RTR");
- }
-}
diff --git a/Mage.Sets/src/mage/cards/n/NahiriTheLithomancer.java b/Mage.Sets/src/mage/cards/n/NahiriTheLithomancer.java
index 289300c2c2..342142832a 100644
--- a/Mage.Sets/src/mage/cards/n/NahiriTheLithomancer.java
+++ b/Mage.Sets/src/mage/cards/n/NahiriTheLithomancer.java
@@ -32,22 +32,13 @@ import mage.abilities.Ability;
import mage.abilities.LoyaltyAbility;
import mage.abilities.common.CanBeYourCommanderAbility;
import mage.abilities.common.PlanswalkerEntersWithLoyalityCountersAbility;
-import mage.abilities.common.SimpleStaticAbility;
-import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.effects.common.continuous.BoostEquippedEffect;
-import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
-import mage.abilities.keyword.DoubleStrikeAbility;
-import mage.abilities.keyword.EquipAbility;
-import mage.abilities.keyword.IndestructibleAbility;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.constants.AttachmentType;
import mage.constants.CardType;
-import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.filter.FilterCard;
@@ -56,6 +47,7 @@ import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.game.permanent.token.KorSoldierToken;
+import mage.game.permanent.token.NahiriTheLithomancerEquipmentToken;
import mage.game.permanent.token.Token;
import mage.players.Player;
import mage.target.Target;
@@ -202,20 +194,3 @@ class NahiriTheLithomancerSecondAbilityEffect extends OneShotEffect {
return false;
}
}
-
-class NahiriTheLithomancerEquipmentToken extends Token {
-
- NahiriTheLithomancerEquipmentToken() {
- super("Stoneforged Blade", "colorless Equipment artifact token named Stoneforged Blade with indestructible, \"Equipped creature gets +5/+5 and has double strike,\" and equip {0}");
- cardType.add(CardType.ARTIFACT);
- subtype.add("Equipment");
-
- this.addAbility(IndestructibleAbility.getInstance());
-
- Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(5, 5));
- ability.addEffect(new GainAbilityAttachedEffect(DoubleStrikeAbility.getInstance(), AttachmentType.EQUIPMENT, Duration.WhileOnBattlefield, "and has double strike"));
- this.addAbility(ability);
-
- this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(0)));
- }
-}
diff --git a/Mage.Sets/src/mage/cards/n/NestOfScarabs.java b/Mage.Sets/src/mage/cards/n/NestOfScarabs.java
index 55762b3cec..0e9c4a3e45 100644
--- a/Mage.Sets/src/mage/cards/n/NestOfScarabs.java
+++ b/Mage.Sets/src/mage/cards/n/NestOfScarabs.java
@@ -28,7 +28,6 @@
package mage.cards.n;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.dynamicvalue.common.EffectKeyValue;
import mage.abilities.effects.common.CreateTokenEffect;
@@ -40,7 +39,7 @@ import mage.counters.CounterType;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.NestOfScarabsBlackInsectToken;
/**
*
@@ -108,15 +107,3 @@ class NestOfScarabsTriggeredAbility extends TriggeredAbilityImpl {
return "Whenever you put one or more -1/-1 counters on a creature, create that many 1/1 black Insect tokens.";
}
}
-
-class NestOfScarabsBlackInsectToken extends Token {
-
- NestOfScarabsBlackInsectToken() {
- super("Insect", "1/1 black Insect token");
- cardType.add(CardType.CREATURE);
- color.setBlack(true);
- subtype.add("Insect");
- power = new MageInt(1);
- toughness = new MageInt(1);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/n/NezumiShortfang.java b/Mage.Sets/src/mage/cards/n/NezumiShortfang.java
index 148c8111ea..26a8603a79 100644
--- a/Mage.Sets/src/mage/cards/n/NezumiShortfang.java
+++ b/Mage.Sets/src/mage/cards/n/NezumiShortfang.java
@@ -89,7 +89,7 @@ class StabwhiskerTheOdious extends Token {
StabwhiskerTheOdious() {
super("Stabwhisker the Odious", "");
- addSuperType(SuperType.LEGENDARY);
+ addSuperType(SuperType.LEGENDARY);
cardType.add(CardType.CREATURE);
color.setBlack(true);
subtype.add("Rat");
diff --git a/Mage.Sets/src/mage/cards/n/NissaSageAnimist.java b/Mage.Sets/src/mage/cards/n/NissaSageAnimist.java
index 02ad58399d..8cee85476c 100644
--- a/Mage.Sets/src/mage/cards/n/NissaSageAnimist.java
+++ b/Mage.Sets/src/mage/cards/n/NissaSageAnimist.java
@@ -44,7 +44,7 @@ import mage.constants.*;
import mage.filter.common.FilterLandPermanent;
import mage.game.Game;
import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.NissaSageAnimistToken;
import mage.players.Player;
import mage.target.common.TargetLandPermanent;
@@ -122,20 +122,6 @@ class NissaSageAnimistPlusOneEffect extends OneShotEffect {
}
}
-class NissaSageAnimistToken extends Token {
-
- NissaSageAnimistToken() {
- super("Ashaya, the Awoken World", "legendary 4/4 green Elemental creature token named Ashaya, the Awoken World");
- this.setOriginalExpansionSetCode("ORI");
- this.addSuperType(SuperType.LEGENDARY);
- this.getPower().modifyBaseValue(4);
- this.getToughness().modifyBaseValue(4);
- this.color.setGreen(true);
- this.getSubtype(null).add("Elemental");
- this.addCardType(CardType.CREATURE);
- }
-}
-
class NissaSageAnimistMinusSevenEffect extends ContinuousEffectImpl {
NissaSageAnimistMinusSevenEffect() {
diff --git a/Mage.Sets/src/mage/cards/n/NuisanceEngine.java b/Mage.Sets/src/mage/cards/n/NuisanceEngine.java
index 5cc7c8701d..3da02be53c 100644
--- a/Mage.Sets/src/mage/cards/n/NuisanceEngine.java
+++ b/Mage.Sets/src/mage/cards/n/NuisanceEngine.java
@@ -28,9 +28,6 @@
package mage.cards.n;
import java.util.UUID;
-
-import mage.constants.CardType;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.TapSourceCost;
@@ -38,8 +35,9 @@ import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.constants.CardType;
import mage.constants.Zone;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.PestToken;
/**
* @author Loki
@@ -47,7 +45,7 @@ import mage.game.permanent.token.Token;
public class NuisanceEngine extends CardImpl {
public NuisanceEngine(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{3}");
+ super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}");
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new PestToken(), 1), new GenericManaCost(2));
ability.addCost(new TapSourceCost());
this.addAbility(ability);
@@ -62,15 +60,3 @@ public class NuisanceEngine extends CardImpl {
return new NuisanceEngine(this);
}
}
-
-class PestToken extends Token {
- public PestToken() {
- super("Pest", "0/1 colorless Pest artifact creature token");
- cardType.add(CardType.ARTIFACT);
- cardType.add(CardType.CREATURE);
- subtype.add("Pest");
- power = new MageInt(0);
- toughness = new MageInt(1);
- }
-
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/o/OjutaisSummons.java b/Mage.Sets/src/mage/cards/o/OjutaisSummons.java
index 090cc37e97..65895b4683 100644
--- a/Mage.Sets/src/mage/cards/o/OjutaisSummons.java
+++ b/Mage.Sets/src/mage/cards/o/OjutaisSummons.java
@@ -28,14 +28,12 @@
package mage.cards.o;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.ReboundAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.DjinnMonkToken;
/**
*
@@ -44,11 +42,11 @@ import mage.game.permanent.token.Token;
public class OjutaisSummons extends CardImpl {
public OjutaisSummons(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{3}{U}{U}");
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{U}{U}");
// Create a 2/2 blue Djinn Monk creature token with flying.
this.getSpellAbility().addEffect(new CreateTokenEffect(new DjinnMonkToken()));
-
+
// Rebound
this.addAbility(new ReboundAbility());
}
@@ -62,16 +60,3 @@ public class OjutaisSummons extends CardImpl {
return new OjutaisSummons(this);
}
}
-
-class DjinnMonkToken extends Token {
- DjinnMonkToken() {
- super("Djinn Monk", "2/2 blue Djinn Monk creature token with flying");
- cardType.add(CardType.CREATURE);
- color.setBlue(true);
- subtype.add("Djinn");
- subtype.add("Monk");
- power = new MageInt(2);
- toughness = new MageInt(2);
- addAbility(FlyingAbility.getInstance());
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/o/OmnathLocusOfRage.java b/Mage.Sets/src/mage/cards/o/OmnathLocusOfRage.java
index 1140cc4062..217a8a7da1 100644
--- a/Mage.Sets/src/mage/cards/o/OmnathLocusOfRage.java
+++ b/Mage.Sets/src/mage/cards/o/OmnathLocusOfRage.java
@@ -27,6 +27,7 @@
*/
package mage.cards.o;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.DiesThisOrAnotherCreatureTriggeredAbility;
@@ -41,11 +42,9 @@ import mage.constants.TargetController;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.filter.predicate.permanent.ControllerPredicate;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.OmnathElementalToken;
import mage.target.common.TargetCreatureOrPlayer;
-import java.util.UUID;
-
/**
*
* @author fireshoes
@@ -60,7 +59,7 @@ public class OmnathLocusOfRage extends CardImpl {
}
public OmnathLocusOfRage(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{R}{R}{G}{G}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}{R}{G}{G}");
addSuperType(SuperType.LEGENDARY);
this.subtype.add("Elemental");
this.power = new MageInt(5);
@@ -84,19 +83,3 @@ public class OmnathLocusOfRage extends CardImpl {
return new OmnathLocusOfRage(this);
}
}
-
-class OmnathElementalToken extends Token {
-
- OmnathElementalToken() {
- super("Elemental", "5/5 red and green Elemental creature token");
- setTokenType(2);
- setOriginalExpansionSetCode("BFZ");
- cardType.add(CardType.CREATURE);
- subtype.add("Elemental");
-
- color.setRed(true);
- color.setGreen(true);
- power = new MageInt(5);
- toughness = new MageInt(5);
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/o/OneDozenEyes.java b/Mage.Sets/src/mage/cards/o/OneDozenEyes.java
index 799bdda360..7157684dd4 100644
--- a/Mage.Sets/src/mage/cards/o/OneDozenEyes.java
+++ b/Mage.Sets/src/mage/cards/o/OneDozenEyes.java
@@ -28,7 +28,6 @@
package mage.cards.o;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.Mode;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.keyword.EntwineAbility;
@@ -36,7 +35,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.game.permanent.token.InsectToken;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.OneDozenEyesBeastToken;
/**
*
@@ -45,8 +44,7 @@ import mage.game.permanent.token.Token;
public class OneDozenEyes extends CardImpl {
public OneDozenEyes(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{5}{G}");
-
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{5}{G}");
// Choose one -
this.getSpellAbility().getModes().setMinModes(1);
@@ -55,7 +53,7 @@ public class OneDozenEyes extends CardImpl {
this.getSpellAbility().addEffect(new CreateTokenEffect(new OneDozenEyesBeastToken()));
// or create five 1/1 green Insect creature tokens.
Mode mode = new Mode();
- mode.getEffects().add(new CreateTokenEffect(new InsectToken(),5));
+ mode.getEffects().add(new CreateTokenEffect(new InsectToken(), 5));
this.getSpellAbility().addMode(mode);
// Entwine {G}{G}{G}
this.addAbility(new EntwineAbility("{G}{G}{G}"));
@@ -70,16 +68,3 @@ public class OneDozenEyes extends CardImpl {
return new OneDozenEyes(this);
}
}
-
-class OneDozenEyesBeastToken extends Token {
-
- public OneDozenEyesBeastToken() {
- super("Beast", "5/5 green Beast creature token");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- subtype.add("Beast");
- power = new MageInt(5);
- toughness = new MageInt(5);
- }
-
-}
diff --git a/Mage.Sets/src/mage/cards/o/OonaQueenOfTheFae.java b/Mage.Sets/src/mage/cards/o/OonaQueenOfTheFae.java
index 349bb6c16a..d6c4e4802d 100644
--- a/Mage.Sets/src/mage/cards/o/OonaQueenOfTheFae.java
+++ b/Mage.Sets/src/mage/cards/o/OonaQueenOfTheFae.java
@@ -44,7 +44,7 @@ import mage.constants.Outcome;
import mage.constants.SuperType;
import mage.constants.Zone;
import mage.game.Game;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.OonaQueenFaerieToken;
import mage.players.Player;
import mage.target.common.TargetOpponent;
@@ -55,7 +55,7 @@ import mage.target.common.TargetOpponent;
public class OonaQueenOfTheFae extends CardImpl {
public OonaQueenOfTheFae(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{U/B}{U/B}{U/B}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U/B}{U/B}{U/B}");
addSuperType(SuperType.LEGENDARY);
this.subtype.add("Faerie");
this.subtype.add("Wizard");
@@ -109,7 +109,7 @@ class OonaQueenOfTheFaeEffect extends OneShotEffect {
if (choice.getColor() != null) {
int cardsWithColor = 0;
int cardsToExile = Math.min(opponent.getLibrary().size(), source.getManaCostsToPay().getX());
- for(int i = 0; i < cardsToExile; i++) {
+ for (int i = 0; i < cardsToExile; i++) {
Card card = opponent.getLibrary().removeFromTop(game);
if (card != null) {
if (card.getColor(game).contains(choice.getColor())) {
@@ -121,23 +121,9 @@ class OonaQueenOfTheFaeEffect extends OneShotEffect {
if (cardsWithColor > 0) {
new CreateTokenEffect(new OonaQueenFaerieToken(), cardsWithColor).apply(game, source);
}
- game.informPlayers(new StringBuilder("Oona: ").append(cardsWithColor).append(" Token").append(cardsWithColor != 1?"s":"").append(" created").toString());
+ game.informPlayers(new StringBuilder("Oona: ").append(cardsWithColor).append(" Token").append(cardsWithColor != 1 ? "s" : "").append(" created").toString());
return true;
}
return false;
}
}
-
-class OonaQueenFaerieToken extends Token {
- OonaQueenFaerieToken() {
- super("Faerie Rogue", "1/1 blue and black Faerie Rogue creature token with flying");
- cardType.add(CardType.CREATURE);
- color.setBlue(true);
- color.setBlack(true);
- subtype.add("Faerie");
- subtype.add("Rogue");
- power = new MageInt(1);
- toughness = new MageInt(1);
- this.addAbility(FlyingAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/o/Ophiomancer.java b/Mage.Sets/src/mage/cards/o/Ophiomancer.java
index 3f5d4646fd..ea2e7d7d80 100644
--- a/Mage.Sets/src/mage/cards/o/Ophiomancer.java
+++ b/Mage.Sets/src/mage/cards/o/Ophiomancer.java
@@ -29,19 +29,18 @@ package mage.cards.o;
import java.util.UUID;
import mage.MageInt;
-import mage.constants.ComparisonType;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalTriggeredAbility;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.keyword.DeathtouchAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
+import mage.constants.ComparisonType;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.OphiomancerSnakeToken;
/**
*
@@ -73,17 +72,3 @@ public class Ophiomancer extends CardImpl {
return new Ophiomancer(this);
}
}
-
-class OphiomancerSnakeToken extends Token {
-
- public OphiomancerSnakeToken() {
- super("Snake", "1/1 black Snake creature token with deathtouch");
- cardType.add(CardType.CREATURE);
- color.setBlack(true);
- subtype.add("Snake");
- power = new MageInt(1);
- toughness = new MageInt(1);
- this.addAbility(DeathtouchAbility.getInstance());
- }
-
-}
diff --git a/Mage.Sets/src/mage/cards/o/OrderedMigration.java b/Mage.Sets/src/mage/cards/o/OrderedMigration.java
index 66c3c68451..179b6d6e62 100644
--- a/Mage.Sets/src/mage/cards/o/OrderedMigration.java
+++ b/Mage.Sets/src/mage/cards/o/OrderedMigration.java
@@ -28,14 +28,12 @@
package mage.cards.o;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.dynamicvalue.common.DomainValue;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.OrderedMigrationBirdToken;
/**
*
@@ -48,7 +46,7 @@ public class OrderedMigration extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{W}{U}");
// Domain - Create a 1/1 blue Bird creature token with flying for each basic land type among lands you control.
- this.getSpellAbility().addEffect(new CreateTokenEffect(new BirdToken(), new DomainValue()));
+ this.getSpellAbility().addEffect(new CreateTokenEffect(new OrderedMigrationBirdToken(), new DomainValue()));
}
public OrderedMigration(final OrderedMigration card) {
@@ -63,15 +61,3 @@ public class OrderedMigration extends CardImpl {
// TODO: There is a player rewards token for this (http://magiccards.info/extra/token/player-rewards-2001/bird.html),
// but player rewards tokens are not downloaded...
-class BirdToken extends Token {
-
- public BirdToken() {
- super("Bird", "1/1 blue Bird creature token with flying");
- cardType.add(CardType.CREATURE);
- color.setBlue(true);
- subtype.add("Bird");
- power = new MageInt(1);
- toughness = new MageInt(1);
- addAbility(FlyingAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/o/OviyaPashiriSageLifecrafter.java b/Mage.Sets/src/mage/cards/o/OviyaPashiriSageLifecrafter.java
index 4fd1551bf5..f8fabc040d 100644
--- a/Mage.Sets/src/mage/cards/o/OviyaPashiriSageLifecrafter.java
+++ b/Mage.Sets/src/mage/cards/o/OviyaPashiriSageLifecrafter.java
@@ -27,6 +27,7 @@
*/
package mage.cards.o;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
@@ -40,15 +41,11 @@ import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.SuperType;
import mage.constants.Zone;
-import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game;
+import mage.game.permanent.token.OviyaPashiriSageLifecrafterToken;
import mage.game.permanent.token.ServoToken;
-import mage.game.permanent.token.Token;
import mage.players.Player;
-import mage.util.RandomUtil;
-
-import java.util.UUID;
/**
*
@@ -57,7 +54,7 @@ import java.util.UUID;
public class OviyaPashiriSageLifecrafter extends CardImpl {
public OviyaPashiriSageLifecrafter(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{G}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}");
addSuperType(SuperType.LEGENDARY);
this.subtype.add("Human");
this.subtype.add("Artificer");
@@ -110,19 +107,3 @@ class OviyaPashiriSageLifecrafterEffect extends OneShotEffect {
return false;
}
}
-
-class OviyaPashiriSageLifecrafterToken extends Token {
-
- final static FilterControlledCreaturePermanent filterCreature = new FilterControlledCreaturePermanent("creatures you control");
-
- OviyaPashiriSageLifecrafterToken(int number) {
- super("Construct", "an X/X colorless Construct artifact creature token, where X is the number of creatures you control");
- cardType.add(CardType.ARTIFACT);
- cardType.add(CardType.CREATURE);
- subtype.add("Construct");
- setOriginalExpansionSetCode("KLD");
- setTokenType(RandomUtil.nextInt(2) + 1);
- power = new MageInt(number);
- toughness = new MageInt(number);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/o/OyobiWhoSplitTheHeavens.java b/Mage.Sets/src/mage/cards/o/OyobiWhoSplitTheHeavens.java
index 3da63d175b..5f885d8e9e 100644
--- a/Mage.Sets/src/mage/cards/o/OyobiWhoSplitTheHeavens.java
+++ b/Mage.Sets/src/mage/cards/o/OyobiWhoSplitTheHeavens.java
@@ -27,6 +27,7 @@
*/
package mage.cards.o;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.common.CreateTokenEffect;
@@ -36,9 +37,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SuperType;
import mage.filter.common.FilterSpiritOrArcaneCard;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.AnotherSpiritToken;
/**
* @author Loki
@@ -48,7 +47,7 @@ public class OyobiWhoSplitTheHeavens extends CardImpl {
private static final FilterSpiritOrArcaneCard filter = new FilterSpiritOrArcaneCard();
public OyobiWhoSplitTheHeavens(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{6}{W}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{6}{W}");
addSuperType(SuperType.LEGENDARY);
this.subtype.add("Spirit");
@@ -68,16 +67,3 @@ public class OyobiWhoSplitTheHeavens extends CardImpl {
return new OyobiWhoSplitTheHeavens(this);
}
}
-
-class AnotherSpiritToken extends Token {
- AnotherSpiritToken() {
- super("Spirit", "3/3 white Spirit creature token with flying");
- cardType.add(CardType.CREATURE);
- color.setWhite(true);
- subtype.add("Spirit");
- power = new MageInt(3);
- toughness = new MageInt(3);
- this.addAbility(FlyingAbility.getInstance());
- }
-
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/p/PactOfTheTitan.java b/Mage.Sets/src/mage/cards/p/PactOfTheTitan.java
index 21da8581c8..ce195f1a0e 100644
--- a/Mage.Sets/src/mage/cards/p/PactOfTheTitan.java
+++ b/Mage.Sets/src/mage/cards/p/PactOfTheTitan.java
@@ -28,7 +28,6 @@
package mage.cards.p;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.common.delayed.PactDelayedTriggeredAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect;
@@ -36,7 +35,7 @@ import mage.abilities.effects.common.CreateTokenEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.GiantToken;
/**
*
@@ -45,10 +44,10 @@ import mage.game.permanent.token.Token;
public class PactOfTheTitan extends CardImpl {
public PactOfTheTitan(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{0}");
+ super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{0}");
this.color.setRed(true);
-
+
// Create a 4/4 red Giant creature token.
this.getSpellAbility().addEffect(new CreateTokenEffect(new GiantToken()));
// At the beginning of your next upkeep, pay {4}{R}. If you don't, you lose the game.
@@ -64,16 +63,3 @@ public class PactOfTheTitan extends CardImpl {
return new PactOfTheTitan(this);
}
}
-
-class GiantToken extends Token {
-
- public GiantToken() {
- super("Giant", "4/4 red Giant creature token");
- cardType.add(CardType.CREATURE);
- subtype.add("Giant");
- color.setRed(true);
- power = new MageInt(4);
- toughness = new MageInt(4);
- }
-}
-
diff --git a/Mage.Sets/src/mage/cards/p/PatagiaViper.java b/Mage.Sets/src/mage/cards/p/PatagiaViper.java
index 29d6cac51b..9ab2a92521 100644
--- a/Mage.Sets/src/mage/cards/p/PatagiaViper.java
+++ b/Mage.Sets/src/mage/cards/p/PatagiaViper.java
@@ -38,7 +38,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.ColoredManaSymbol;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.PatagiaViperSnakeToken;
import mage.watchers.common.ManaSpentToCastWatcher;
/**
@@ -48,7 +48,7 @@ import mage.watchers.common.ManaSpentToCastWatcher;
public class PatagiaViper extends CardImpl {
public PatagiaViper(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{G}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}");
this.subtype.add("Snake");
this.power = new MageInt(2);
@@ -56,10 +56,10 @@ public class PatagiaViper extends CardImpl {
// Flying
this.addAbility(FlyingAbility.getInstance());
-
+
// When Patagia Viper enters the battlefield, create two 1/1 green and blue Snake creature tokens.
this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new PatagiaViperSnakeToken(), 2), false));
-
+
// When Patagia Viper enters the battlefield, sacrifice it unless {U} was spent to cast it.
this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeSourceUnlessConditionEffect(new ManaWasSpentCondition(ColoredManaSymbol.U)), false), new ManaSpentToCastWatcher());
}
@@ -73,17 +73,3 @@ public class PatagiaViper extends CardImpl {
return new PatagiaViper(this);
}
}
-
-class PatagiaViperSnakeToken extends Token {
-
- PatagiaViperSnakeToken() {
- super("Snake", "1/1 green and blue Snake creature token");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- color.setBlue(true);
- subtype.add("Snake");
- power = new MageInt(1);
- toughness = new MageInt(1);
- }
-
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/p/Pentavus.java b/Mage.Sets/src/mage/cards/p/Pentavus.java
index ce39ca2aff..5568b3300b 100644
--- a/Mage.Sets/src/mage/cards/p/Pentavus.java
+++ b/Mage.Sets/src/mage/cards/p/Pentavus.java
@@ -28,8 +28,6 @@
package mage.cards.p;
import java.util.UUID;
-
-import mage.constants.CardType;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility;
@@ -39,14 +37,14 @@ import mage.abilities.costs.common.SacrificeTargetCost;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
-import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.constants.CardType;
import mage.constants.Zone;
import mage.counters.CounterType;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.mageobject.SubtypePredicate;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.PentaviteToken;
import mage.target.common.TargetControlledPermanent;
/**
@@ -62,14 +60,14 @@ public class Pentavus extends CardImpl {
}
public Pentavus(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{7}");
+ super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{7}");
this.subtype.add("Construct");
this.power = new MageInt(0);
this.toughness = new MageInt(0);
// Pentavus enters the battlefield with five +1/+1 counters on it.
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(5)),
- "with five +1/+1 counters on it"));
+ "with five +1/+1 counters on it"));
// {1}, Remove a +1/+1 counter from Pentavus: Create a 1/1 colorless Pentavite artifact creature token with flying.
Ability firstAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new PentaviteToken(), 1), new GenericManaCost(1));
@@ -91,16 +89,3 @@ public class Pentavus extends CardImpl {
return new Pentavus(this);
}
}
-
-class PentaviteToken extends Token {
- public PentaviteToken() {
- super("Pentavite", "1/1 colorless Pentavite artifact creature token with flying");
- cardType.add(CardType.ARTIFACT);
- cardType.add(CardType.CREATURE);
- subtype.add("Pentavite");
- power = new MageInt(1);
- toughness = new MageInt(1);
- this.addAbility(FlyingAbility.getInstance());
- }
-
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/p/PenumbraBobcat.java b/Mage.Sets/src/mage/cards/p/PenumbraBobcat.java
index 8780ea5555..efa583fdd5 100644
--- a/Mage.Sets/src/mage/cards/p/PenumbraBobcat.java
+++ b/Mage.Sets/src/mage/cards/p/PenumbraBobcat.java
@@ -28,13 +28,13 @@
package mage.cards.p;
import java.util.UUID;
-import mage.constants.CardType;
import mage.MageInt;
import mage.abilities.common.DiesTriggeredAbility;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.game.permanent.token.Token;
+import mage.constants.CardType;
+import mage.game.permanent.token.PenumbraBobcatToken;
/**
*
@@ -43,7 +43,7 @@ import mage.game.permanent.token.Token;
public class PenumbraBobcat extends CardImpl {
public PenumbraBobcat(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
this.subtype.add("Cat");
this.power = new MageInt(2);
@@ -60,14 +60,3 @@ public class PenumbraBobcat extends CardImpl {
return new PenumbraBobcat(this);
}
}
-
-class PenumbraBobcatToken extends Token {
- PenumbraBobcatToken() {
- super("Cat", "2/1 black Cat creature token");
- cardType.add(CardType.CREATURE);
- color.setBlack(true);
- subtype.add("Cat");
- power = new MageInt(2);
- toughness = new MageInt(1);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/p/PenumbraKavu.java b/Mage.Sets/src/mage/cards/p/PenumbraKavu.java
index c06df0711e..c9f872aa7b 100644
--- a/Mage.Sets/src/mage/cards/p/PenumbraKavu.java
+++ b/Mage.Sets/src/mage/cards/p/PenumbraKavu.java
@@ -28,13 +28,13 @@
package mage.cards.p;
import java.util.UUID;
-import mage.constants.CardType;
import mage.MageInt;
import mage.abilities.common.DiesTriggeredAbility;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.game.permanent.token.Token;
+import mage.constants.CardType;
+import mage.game.permanent.token.PenumbraKavuToken;
/**
*
@@ -43,7 +43,7 @@ import mage.game.permanent.token.Token;
public class PenumbraKavu extends CardImpl {
public PenumbraKavu(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{G}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{G}");
this.subtype.add("Kavu");
this.power = new MageInt(3);
@@ -60,14 +60,3 @@ public class PenumbraKavu extends CardImpl {
return new PenumbraKavu(this);
}
}
-
-class PenumbraKavuToken extends Token {
- PenumbraKavuToken() {
- super("Kavu", "3/3 black Kavu creature token");
- cardType.add(CardType.CREATURE);
- color.setBlack(true);
- subtype.add("Kavu");
- power = new MageInt(3);
- toughness = new MageInt(3);
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/p/PenumbraSpider.java b/Mage.Sets/src/mage/cards/p/PenumbraSpider.java
index 14eed30be4..c3cb9f8570 100644
--- a/Mage.Sets/src/mage/cards/p/PenumbraSpider.java
+++ b/Mage.Sets/src/mage/cards/p/PenumbraSpider.java
@@ -35,7 +35,7 @@ import mage.abilities.keyword.ReachAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.PenumbraSpiderToken;
/**
*
@@ -44,7 +44,7 @@ import mage.game.permanent.token.Token;
public class PenumbraSpider extends CardImpl {
public PenumbraSpider(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}{G}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}{G}");
this.subtype.add("Spider");
this.power = new MageInt(2);
@@ -53,7 +53,7 @@ public class PenumbraSpider extends CardImpl {
// Reach
this.addAbility(ReachAbility.getInstance());
// When Penumbra Spider dies, create a 2/4 black Spider creature token with reach.
- this.addAbility(new DiesTriggeredAbility(new CreateTokenEffect(new SpiderToken()), false));
+ this.addAbility(new DiesTriggeredAbility(new CreateTokenEffect(new PenumbraSpiderToken()), false));
}
public PenumbraSpider(final PenumbraSpider card) {
@@ -65,16 +65,3 @@ public class PenumbraSpider extends CardImpl {
return new PenumbraSpider(this);
}
}
-
-class SpiderToken extends Token {
-
- public SpiderToken() {
- super("Spider", "2/4 black Spider creature token with reach");
- cardType.add(CardType.CREATURE);
- color.setBlack(true);
- subtype.add("Spider");
- power = new MageInt(2);
- toughness = new MageInt(4);
- addAbility(ReachAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/p/PenumbraWurm.java b/Mage.Sets/src/mage/cards/p/PenumbraWurm.java
index 9f46401fbb..d1ac7efa51 100644
--- a/Mage.Sets/src/mage/cards/p/PenumbraWurm.java
+++ b/Mage.Sets/src/mage/cards/p/PenumbraWurm.java
@@ -35,7 +35,7 @@ import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.PenumbraWurmToken;
/**
*
@@ -44,7 +44,7 @@ import mage.game.permanent.token.Token;
public class PenumbraWurm extends CardImpl {
public PenumbraWurm(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{5}{G}{G}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{G}{G}");
this.subtype.add("Wurm");
this.power = new MageInt(6);
@@ -66,16 +66,3 @@ public class PenumbraWurm extends CardImpl {
return new PenumbraWurm(this);
}
}
-
-class PenumbraWurmToken extends Token {
- PenumbraWurmToken() {
- super("Wurm", "6/6 black Wurm creature token with trample");
- cardType.add(CardType.CREATURE);
- color.setBlack(true);
- subtype.add("Wurm");
- power = new MageInt(6);
- toughness = new MageInt(6);
-
- this.addAbility(TrampleAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/p/PharikaGodOfAffliction.java b/Mage.Sets/src/mage/cards/p/PharikaGodOfAffliction.java
index 39d4c1ed02..3a62889442 100644
--- a/Mage.Sets/src/mage/cards/p/PharikaGodOfAffliction.java
+++ b/Mage.Sets/src/mage/cards/p/PharikaGodOfAffliction.java
@@ -27,6 +27,7 @@
*/
package mage.cards.p;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
@@ -36,7 +37,6 @@ import mage.abilities.dynamicvalue.common.DevotionCount;
import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.continuous.LoseCreatureTypeSourceEffect;
-import mage.abilities.keyword.DeathtouchAbility;
import mage.abilities.keyword.IndestructibleAbility;
import mage.cards.Card;
import mage.cards.CardImpl;
@@ -44,13 +44,11 @@ import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.filter.common.FilterCreatureCard;
import mage.game.Game;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.PharikaSnakeToken;
import mage.players.Player;
import mage.target.Target;
import mage.target.common.TargetCardInGraveyard;
-import java.util.UUID;
-
/**
*
* @author LevelX2
@@ -58,7 +56,7 @@ import java.util.UUID;
public class PharikaGodOfAffliction extends CardImpl {
public PharikaGodOfAffliction(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT,CardType.CREATURE},"{1}{B}{G}");
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "{1}{B}{G}");
addSuperType(SuperType.LEGENDARY);
this.subtype.add("God");
@@ -124,17 +122,3 @@ class PharikaExileEffect extends OneShotEffect {
}
}
-
-class PharikaSnakeToken extends Token {
-
- public PharikaSnakeToken() {
- super("Snake", "1/1 black and green Snake enchantment creature token with deathtouch", 1, 1);
- this.setOriginalExpansionSetCode("JOU");
- cardType.add(CardType.ENCHANTMENT);
- cardType.add(CardType.CREATURE);
- subtype.add("Snake");
- color.setBlack(true);
- color.setGreen(true);
- this.addAbility(DeathtouchAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/p/PhyrexianRebirth.java b/Mage.Sets/src/mage/cards/p/PhyrexianRebirth.java
index 8870e2879b..cbcb3af175 100644
--- a/Mage.Sets/src/mage/cards/p/PhyrexianRebirth.java
+++ b/Mage.Sets/src/mage/cards/p/PhyrexianRebirth.java
@@ -28,7 +28,6 @@
package mage.cards.p;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.cards.CardImpl;
@@ -38,7 +37,7 @@ import mage.constants.Outcome;
import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game;
import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.PhyrexianRebirthHorrorToken;
/**
*
@@ -47,7 +46,7 @@ import mage.game.permanent.token.Token;
public class PhyrexianRebirth extends CardImpl {
public PhyrexianRebirth(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{4}{W}{W}");
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{W}{W}");
// Destroy all creatures, then create an X/X colorless Horror artifact creature token, where X is the number of creatures destroyed this way.
this.getSpellAbility().addEffect(new PhyrexianRebirthEffect());
@@ -79,7 +78,7 @@ public class PhyrexianRebirth extends CardImpl {
for (Permanent permanent : game.getBattlefield().getActivePermanents(new FilterCreaturePermanent(), source.getControllerId(), game)) {
count += permanent.destroy(source.getSourceId(), game, false) ? 1 : 0;
}
- HorrorToken horrorToken = new HorrorToken();
+ PhyrexianRebirthHorrorToken horrorToken = new PhyrexianRebirthHorrorToken();
horrorToken.getPower().modifyBaseValue(count);
horrorToken.getToughness().modifyBaseValue(count);
horrorToken.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId());
@@ -93,15 +92,4 @@ public class PhyrexianRebirth extends CardImpl {
}
- class HorrorToken extends Token {
-
- public HorrorToken() {
- super("Horror", "X/X colorless Horror artifact creature token");
- cardType.add(CardType.ARTIFACT);
- cardType.add(CardType.CREATURE);
- subtype.add("Horror");
- power = new MageInt(0);
- toughness = new MageInt(0);
- }
- }
}
diff --git a/Mage.Sets/src/mage/cards/p/Pongify.java b/Mage.Sets/src/mage/cards/p/Pongify.java
index a0f9369650..984f8a58d5 100644
--- a/Mage.Sets/src/mage/cards/p/Pongify.java
+++ b/Mage.Sets/src/mage/cards/p/Pongify.java
@@ -28,8 +28,6 @@
package mage.cards.p;
import java.util.UUID;
-
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.DestroyTargetEffect;
@@ -39,7 +37,7 @@ import mage.constants.CardType;
import mage.constants.Outcome;
import mage.game.Game;
import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.PongifyApeToken;
import mage.target.common.TargetCreaturePermanent;
/**
@@ -49,8 +47,7 @@ import mage.target.common.TargetCreaturePermanent;
public class Pongify extends CardImpl {
public Pongify(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{U}");
-
+ super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{U}");
// Destroy target creature. It can't be regenerated. That creature's controller creates a 3/3 green Ape creature token.
this.getSpellAbility().addEffect(new DestroyTargetEffect(true));
@@ -92,7 +89,7 @@ class PongifyEffect extends OneShotEffect {
if (permanent != null) {
UUID controllerId = permanent.getControllerId();
if (controllerId != null) {
- new ApeToken().putOntoBattlefield(1, game, source.getSourceId(), controllerId);
+ new PongifyApeToken().putOntoBattlefield(1, game, source.getSourceId(), controllerId);
return true;
}
}
@@ -100,17 +97,3 @@ class PongifyEffect extends OneShotEffect {
return false;
}
}
-
-class ApeToken extends Token {
-
- public ApeToken() {
- super("Ape", "3/3 green Ape");
- this.setOriginalExpansionSetCode("PLC");
- cardType.add(CardType.CREATURE);
- subtype.add("Ape");
- color.setGreen(true);
- power = new MageInt(3);
- toughness = new MageInt(3);
- }
-
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/p/PredatoryAdvantage.java b/Mage.Sets/src/mage/cards/p/PredatoryAdvantage.java
index 5617f4faeb..be31794fba 100644
--- a/Mage.Sets/src/mage/cards/p/PredatoryAdvantage.java
+++ b/Mage.Sets/src/mage/cards/p/PredatoryAdvantage.java
@@ -28,21 +28,20 @@
package mage.cards.p;
import java.util.UUID;
-import mage.constants.CardType;
-import mage.constants.TargetController;
-import mage.constants.WatcherScope;
-import mage.constants.Zone;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.BeginningOfEndStepTriggeredAbility;
import mage.abilities.condition.Condition;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.TargetController;
+import mage.constants.WatcherScope;
+import mage.constants.Zone;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.LizardToken;
import mage.game.stack.Spell;
import mage.watchers.Watcher;
@@ -53,10 +52,7 @@ import mage.watchers.Watcher;
public class PredatoryAdvantage extends CardImpl {
public PredatoryAdvantage(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{R}{G}");
-
-
-
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{R}{G}");
// At the beginning of each opponent's end step, if that player didn't cast a creature spell this turn, create a 2/2 green Lizard creature token.
this.addAbility(new BeginningOfEndStepTriggeredAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new LizardToken()), TargetController.OPPONENT, new DidNotCastCreatureCondition(), false), new CastCreatureWatcher());
@@ -120,15 +116,3 @@ class CastCreatureWatcher extends Watcher {
return new CastCreatureWatcher(this);
}
}
-
-class LizardToken extends Token {
-
- public LizardToken() {
- super("Lizard", "2/2 green Lizard creature token");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- subtype.add("Lizard");
- power = new MageInt(2);
- toughness = new MageInt(2);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/p/PrincessLeia.java b/Mage.Sets/src/mage/cards/p/PrincessLeia.java
index d4c90d507b..36ba8248d0 100644
--- a/Mage.Sets/src/mage/cards/p/PrincessLeia.java
+++ b/Mage.Sets/src/mage/cards/p/PrincessLeia.java
@@ -27,6 +27,7 @@
*/
package mage.cards.p;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
@@ -45,9 +46,7 @@ import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.filter.predicate.permanent.AnotherPredicate;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.RebelToken;
/**
*
@@ -66,7 +65,7 @@ public class PrincessLeia extends CardImpl {
}
public PrincessLeia(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{G}{U}{W}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}{U}{W}");
addSuperType(SuperType.LEGENDARY);
this.subtype.add("Human");
this.subtype.add("Rebel");
@@ -94,14 +93,3 @@ public class PrincessLeia extends CardImpl {
return new PrincessLeia(this);
}
}
-
-class RebelToken extends Token {
-
- public RebelToken() {
- super("Rebel", "1/1 white Rebel creature token", 1, 1);
- this.setOriginalExpansionSetCode("SWS");
- cardType.add(CardType.CREATURE);
- color.setWhite(true);
- subtype.add("Rebel");
- }
-}
diff --git a/Mage.Sets/src/mage/cards/p/PromiseOfPower.java b/Mage.Sets/src/mage/cards/p/PromiseOfPower.java
index e57cfe6247..54e5574edf 100644
--- a/Mage.Sets/src/mage/cards/p/PromiseOfPower.java
+++ b/Mage.Sets/src/mage/cards/p/PromiseOfPower.java
@@ -28,7 +28,6 @@
package mage.cards.p;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.Mode;
import mage.abilities.effects.Effect;
@@ -37,13 +36,12 @@ import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.LoseLifeSourceControllerEffect;
import mage.abilities.keyword.EntwineAbility;
-import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.game.Game;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.PromiseOfPowerDemonToken;
import mage.players.Player;
/**
@@ -53,15 +51,14 @@ import mage.players.Player;
public class PromiseOfPower extends CardImpl {
public PromiseOfPower(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{B}{B}{B}");
-
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{B}{B}{B}");
// Choose one -
this.getSpellAbility().getModes().setMinModes(1);
this.getSpellAbility().getModes().setMaxModes(1);
-
+
// - You draw five cards and you lose 5 life.
- Effect effect = new DrawCardSourceControllerEffect(5);
+ Effect effect = new DrawCardSourceControllerEffect(5);
effect.setText("You draw five cards");
this.getSpellAbility().addEffect(effect);
effect = new LoseLifeSourceControllerEffect(5);
@@ -113,18 +110,3 @@ class PromiseOfPowerEffect extends OneShotEffect {
}
}
-class PromiseOfPowerDemonToken extends Token {
-
- public PromiseOfPowerDemonToken(int xValue) {
- super("Demon", "X/X black Demon creature token with flying");
- setOriginalExpansionSetCode("C14");
- setTokenType(2);
- cardType.add(CardType.CREATURE);
- color.setBlack(true);
- subtype.add("Demon");
- power = new MageInt(xValue);
- toughness = new MageInt(xValue);
-
- addAbility(FlyingAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/p/ProsshSkyraiderOfKher.java b/Mage.Sets/src/mage/cards/p/ProsshSkyraiderOfKher.java
index 9bc83aab48..48e6b838c8 100644
--- a/Mage.Sets/src/mage/cards/p/ProsshSkyraiderOfKher.java
+++ b/Mage.Sets/src/mage/cards/p/ProsshSkyraiderOfKher.java
@@ -27,6 +27,7 @@
*/
package mage.cards.p;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.SacrificeTargetCost;
@@ -43,11 +44,9 @@ import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.permanent.AnotherPredicate;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.ProsshKoboldToken;
import mage.target.common.TargetControlledCreaturePermanent;
-import java.util.UUID;
-
/**
*
* @author LevelX2
@@ -85,15 +84,3 @@ public class ProsshSkyraiderOfKher extends CardImpl {
return new ProsshSkyraiderOfKher(this);
}
}
-
-class ProsshKoboldToken extends Token {
-
- public ProsshKoboldToken() {
- super("Kobolds of Kher Keep", "0/1 red Kobold creature tokens");
- cardType.add(CardType.CREATURE);
- color.setRed(true);
- subtype.add("Kobold");
- power = new MageInt(0);
- toughness = new MageInt(1);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/p/PuppetConjurer.java b/Mage.Sets/src/mage/cards/p/PuppetConjurer.java
index c85aa83196..896d54cecf 100644
--- a/Mage.Sets/src/mage/cards/p/PuppetConjurer.java
+++ b/Mage.Sets/src/mage/cards/p/PuppetConjurer.java
@@ -28,8 +28,6 @@
package mage.cards.p;
import java.util.UUID;
-
-import mage.constants.CardType;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
@@ -40,11 +38,12 @@ import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.SacrificeEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.constants.CardType;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.mageobject.SubtypePredicate;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.HomunculusToken;
/**
*
@@ -53,12 +52,13 @@ import mage.game.permanent.token.Token;
public class PuppetConjurer extends CardImpl {
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Homunculus");
+
static {
filter.add(new SubtypePredicate("Homunculus"));
}
-
+
public PuppetConjurer(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{1}{B}");
+ super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{1}{B}");
this.subtype.add("Human");
this.subtype.add("Wizard");
@@ -72,7 +72,7 @@ public class PuppetConjurer extends CardImpl {
// At the beginning of your upkeep, sacrifice a Homunculus.
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new SacrificeEffect(filter, 1, ""), TargetController.ANY, false));
}
-
+
public PuppetConjurer(final PuppetConjurer card) {
super(card);
}
@@ -82,17 +82,3 @@ public class PuppetConjurer extends CardImpl {
return new PuppetConjurer(this);
}
}
-
-class HomunculusToken extends Token {
-
- public HomunculusToken() {
- super("Homunculus", "0/1 blue Homunculus artifact creature token");
- cardType.add(CardType.CREATURE);
- cardType.add(CardType.ARTIFACT);
- color.setBlue(true);
- subtype.add("Homunculus");
- power = new MageInt(0);
- toughness = new MageInt(1);
- }
-
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/q/QueenMarchesa.java b/Mage.Sets/src/mage/cards/q/QueenMarchesa.java
index ea968f102c..4a0fff3a60 100644
--- a/Mage.Sets/src/mage/cards/q/QueenMarchesa.java
+++ b/Mage.Sets/src/mage/cards/q/QueenMarchesa.java
@@ -27,6 +27,7 @@
*/
package mage.cards.q;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
@@ -43,9 +44,7 @@ import mage.constants.CardType;
import mage.constants.SuperType;
import mage.constants.TargetController;
import mage.game.Game;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.QueenMarchesaAssassinToken;
/**
*
@@ -100,17 +99,3 @@ enum OpponentIsMonarchCondition implements Condition {
return "an opponent is the monarch";
}
}
-
-class QueenMarchesaAssassinToken extends Token {
-
- QueenMarchesaAssassinToken() {
- super("Assassin", "1/1 black Assassin creature tokens with deathtouch and haste");
- cardType.add(CardType.CREATURE);
- color.setBlack(true);
- subtype.add("Assassin");
- power = new MageInt(1);
- toughness = new MageInt(1);
- addAbility(DeathtouchAbility.getInstance());
- addAbility(HasteAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/q/QuestForTheGravelord.java b/Mage.Sets/src/mage/cards/q/QuestForTheGravelord.java
index 6db4348655..a36773e696 100644
--- a/Mage.Sets/src/mage/cards/q/QuestForTheGravelord.java
+++ b/Mage.Sets/src/mage/cards/q/QuestForTheGravelord.java
@@ -28,9 +28,6 @@
package mage.cards.q;
import java.util.UUID;
-import mage.constants.CardType;
-import mage.constants.Zone;
-import mage.MageInt;
import mage.abilities.common.DiesCreatureTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.RemoveCountersSourceCost;
@@ -39,8 +36,10 @@ import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Zone;
import mage.counters.CounterType;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.QuestForTheGravelordZombieToken;
/**
*
@@ -49,13 +48,13 @@ import mage.game.permanent.token.Token;
public class QuestForTheGravelord extends CardImpl {
public QuestForTheGravelord(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{B}");
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{B}");
// Whenever a creature dies, you may put a quest counter on Quest for the Gravelord.
this.addAbility(new DiesCreatureTriggeredAbility(new AddCountersSourceEffect(CounterType.QUEST.createInstance()), true));
// Remove three quest counters from Quest for the Gravelord and sacrifice it: Create a 5/5 black Zombie Giant creature token.
SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
- new CreateTokenEffect(new ZombieToken()),
+ new CreateTokenEffect(new QuestForTheGravelordZombieToken()),
new RemoveCountersSourceCost(CounterType.QUEST.createInstance(3)));
ability.addCost(new SacrificeSourceCost());
this.addAbility(ability);
@@ -70,17 +69,3 @@ public class QuestForTheGravelord extends CardImpl {
return new QuestForTheGravelord(this);
}
}
-
-class ZombieToken extends Token {
-
- public ZombieToken() {
- super("Zombie Giant", "5/5 black Zombie Giant creature token");
- cardType.add(CardType.CREATURE);
- subtype.add("Zombie");
- subtype.add("Giant");
-
- color.setBlack(true);
- power = new MageInt(5);
- toughness = new MageInt(5);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/r/RakdosGuildmage.java b/Mage.Sets/src/mage/cards/r/RakdosGuildmage.java
index 1a8046b53c..ead3a004d0 100644
--- a/Mage.Sets/src/mage/cards/r/RakdosGuildmage.java
+++ b/Mage.Sets/src/mage/cards/r/RakdosGuildmage.java
@@ -36,7 +36,6 @@ import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.continuous.BoostTargetEffect;
-import mage.abilities.keyword.HasteAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -44,7 +43,7 @@ import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.game.Game;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.RakdosGuildmageGoblinToken;
import mage.target.common.TargetCreaturePermanent;
/**
@@ -54,7 +53,7 @@ import mage.target.common.TargetCreaturePermanent;
public class RakdosGuildmage extends CardImpl {
public RakdosGuildmage(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{B/R}{B/R}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{B/R}{B/R}");
this.subtype.add("Zombie");
this.subtype.add("Shaman");
this.power = new MageInt(2);
@@ -101,24 +100,10 @@ class RakdosGuildmageEffect extends OneShotEffect {
@Override
public boolean apply(Game game, Ability source) {
CreateTokenEffect effect = new CreateTokenEffect(new RakdosGuildmageGoblinToken());
- if (effect.apply(game, source))
- {
+ if (effect.apply(game, source)) {
effect.exileTokensCreatedAtNextEndStep(game, source);
return true;
}
return false;
}
}
-
-class RakdosGuildmageGoblinToken extends Token {
-
- RakdosGuildmageGoblinToken() {
- super("Goblin", "2/1 red Goblin creature token with haste");
- cardType.add(CardType.CREATURE);
- color.setRed(true);
- subtype.add("Goblin");
- power = new MageInt(2);
- toughness = new MageInt(1);
- this.addAbility(HasteAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/r/RakkaMar.java b/Mage.Sets/src/mage/cards/r/RakkaMar.java
index d30dc59cee..24aa26b385 100644
--- a/Mage.Sets/src/mage/cards/r/RakkaMar.java
+++ b/Mage.Sets/src/mage/cards/r/RakkaMar.java
@@ -25,9 +25,9 @@
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
-
package mage.cards.r;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
@@ -40,19 +40,18 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SuperType;
import mage.constants.Zone;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.RakkaMarElementalToken;
/**
*
* @author Loki
*/
public class RakkaMar extends CardImpl {
- private static ElementalToken token = new ElementalToken();
+
+ private RakkaMarElementalToken token = new RakkaMarElementalToken();
public RakkaMar(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{R}{R}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}{R}");
addSuperType(SuperType.LEGENDARY);
this.subtype.add("Human");
this.subtype.add("Shaman");
@@ -74,16 +73,4 @@ public class RakkaMar extends CardImpl {
return new RakkaMar(this);
}
- static class ElementalToken extends Token {
-
- public ElementalToken() {
- super("Elemental", "3/1 red Elemental creature with Haste");
- cardType.add(CardType.CREATURE);
- color.setRed(true);
- subtype.add("Elemental");
- power = new MageInt(3);
- toughness = new MageInt(1);
- addAbility(HasteAbility.getInstance());
- }
- }
}
diff --git a/Mage.Sets/src/mage/cards/r/RallyTheHorde.java b/Mage.Sets/src/mage/cards/r/RallyTheHorde.java
index 14b8a56730..88fad34d70 100644
--- a/Mage.Sets/src/mage/cards/r/RallyTheHorde.java
+++ b/Mage.Sets/src/mage/cards/r/RallyTheHorde.java
@@ -28,7 +28,6 @@
package mage.cards.r;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect;
@@ -39,7 +38,7 @@ import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.game.Game;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.RallyTheHordeWarriorToken;
import mage.players.Player;
/**
@@ -49,8 +48,7 @@ import mage.players.Player;
public class RallyTheHorde extends CardImpl {
public RallyTheHorde(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{5}{R}");
-
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{5}{R}");
// Exile the top card of your library. Exile the top card of your library. Exile the top card of your library. If the last card exiled isn't a land, repeat this process. Create a 1/1 red Warrior creature token for each nonland card exiled this way.
this.getSpellAbility().addEffect(new RallyTheHordeEffect());
@@ -87,7 +85,7 @@ class RallyTheHordeEffect extends OneShotEffect {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
int nonLandCardsExiled = 0;
- while(controller.getLibrary().hasCards()) {
+ while (controller.getLibrary().hasCards()) {
nonLandCardsExiled += checkIfNextLibCardIsNonLandAndExile(controller, source, game);
if (controller.getLibrary().hasCards()) {
nonLandCardsExiled += checkIfNextLibCardIsNonLandAndExile(controller, source, game);
@@ -110,20 +108,8 @@ class RallyTheHordeEffect extends OneShotEffect {
Card card = controller.getLibrary().getFromTop(game);
if (card != null) {
controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY, true);
- return card.isLand() ? 0:1;
+ return card.isLand() ? 0 : 1;
}
return 0;
}
}
-
-class RallyTheHordeWarriorToken extends Token {
-
- public RallyTheHordeWarriorToken() {
- super("Warrior", "1/1 red Warrior creature token");
- cardType.add(CardType.CREATURE);
- color.setRed(true);
- subtype.add("Warrior");
- power = new MageInt(1);
- toughness = new MageInt(1);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/r/RapidHybridization.java b/Mage.Sets/src/mage/cards/r/RapidHybridization.java
index 6e033f730c..e5318236a8 100644
--- a/Mage.Sets/src/mage/cards/r/RapidHybridization.java
+++ b/Mage.Sets/src/mage/cards/r/RapidHybridization.java
@@ -28,7 +28,6 @@
package mage.cards.r;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.DestroyTargetEffect;
@@ -38,7 +37,7 @@ import mage.constants.CardType;
import mage.constants.Outcome;
import mage.game.Game;
import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.RapidHybridizationToken;
import mage.target.common.TargetCreaturePermanent;
/**
@@ -48,7 +47,7 @@ import mage.target.common.TargetCreaturePermanent;
public class RapidHybridization extends CardImpl {
public RapidHybridization(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{U}");
+ super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{U}");
// Destroy target creature. It can't be regenerated. That creature's controller creates a 3/3 green Frog Lizard creature token.
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
@@ -93,21 +92,3 @@ class RapidHybridizationEffect extends OneShotEffect {
}
}
-
-class RapidHybridizationToken extends Token {
-
- public RapidHybridizationToken() {
- super("Frog Lizard", "3/3 green Frog Lizard creature token");
- this.setOriginalExpansionSetCode("GTC");
- cardType.add(CardType.CREATURE);
-
- color.setGreen(true);
-
- subtype.add("Frog");
- subtype.add("Lizard");
-
- power = new MageInt(3);
- toughness = new MageInt(3);
- }
-
-}
diff --git a/Mage.Sets/src/mage/cards/r/ReachOfBranches.java b/Mage.Sets/src/mage/cards/r/ReachOfBranches.java
index ea73a8d792..14df5f6472 100644
--- a/Mage.Sets/src/mage/cards/r/ReachOfBranches.java
+++ b/Mage.Sets/src/mage/cards/r/ReachOfBranches.java
@@ -28,7 +28,6 @@
package mage.cards.r;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.ReturnSourceFromGraveyardToHandEffect;
@@ -40,7 +39,7 @@ import mage.constants.Zone;
import mage.filter.common.FilterLandPermanent;
import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.filter.predicate.permanent.ControllerPredicate;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.TreefolkShamanToken;
/**
*
@@ -74,16 +73,3 @@ public class ReachOfBranches extends CardImpl {
return new ReachOfBranches(this);
}
}
-
-class TreefolkShamanToken extends Token {
-
- TreefolkShamanToken() {
- super("Treefolk Shaman", "2/5 green Treefolk Shaman creature token");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- subtype.add("Treefolk");
- subtype.add("Shaman");
- power = new MageInt(2);
- toughness = new MageInt(5);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/r/ReefWorm.java b/Mage.Sets/src/mage/cards/r/ReefWorm.java
index 91149c41b7..f29cf904e7 100644
--- a/Mage.Sets/src/mage/cards/r/ReefWorm.java
+++ b/Mage.Sets/src/mage/cards/r/ReefWorm.java
@@ -34,7 +34,7 @@ import mage.abilities.effects.common.CreateTokenEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.ReefWormFishToken;
/**
*
@@ -43,7 +43,7 @@ import mage.game.permanent.token.Token;
public class ReefWorm extends CardImpl {
public ReefWorm(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{U}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}");
this.subtype.add("Worm");
this.power = new MageInt(0);
@@ -62,46 +62,3 @@ public class ReefWorm extends CardImpl {
return new ReefWorm(this);
}
}
-
-class ReefWormFishToken extends Token {
-
- ReefWormFishToken() {
- super("Fish", "3/3 blue Fish creature token with \"When this creature dies, create a 6/6 blue Whale creature token with \"When this creature dies, create a 9/9 blue Kraken creature token.\"\"");
- setOriginalExpansionSetCode("C14");
- cardType.add(CardType.CREATURE);
- color.setBlue(true);
- subtype.add("Fish");
- power = new MageInt(3);
- toughness = new MageInt(3);
-
- addAbility(new DiesTriggeredAbility(new CreateTokenEffect(new ReefWormWhaleToken())));
- }
-}
-
-class ReefWormWhaleToken extends Token {
-
- ReefWormWhaleToken() {
- super("Whale", "6/6 blue Whale creature token with \"When this creature dies, create a 9/9 blue Kraken creature token.\"");
- setOriginalExpansionSetCode("C14");
- cardType.add(CardType.CREATURE);
- color.setBlue(true);
- subtype.add("Whale");
- power = new MageInt(6);
- toughness = new MageInt(6);
-
- addAbility(new DiesTriggeredAbility(new CreateTokenEffect(new ReefWormKrakenToken())));
- }
-}
-
-class ReefWormKrakenToken extends Token {
-
- ReefWormKrakenToken() {
- super("Kraken", "9/9 blue Kraken creature token");
- setOriginalExpansionSetCode("C14");
- cardType.add(CardType.CREATURE);
- color.setBlue(true);
- subtype.add("Kraken");
- power = new MageInt(9);
- toughness = new MageInt(9);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/r/ReignOfThePit.java b/Mage.Sets/src/mage/cards/r/ReignOfThePit.java
index 9a1b794e1b..040339bcb0 100644
--- a/Mage.Sets/src/mage/cards/r/ReignOfThePit.java
+++ b/Mage.Sets/src/mage/cards/r/ReignOfThePit.java
@@ -30,11 +30,9 @@ package mage.cards.r;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -42,7 +40,7 @@ import mage.constants.Outcome;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.game.Game;
import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.ReignOfThePitToken;
import mage.players.Player;
import mage.target.common.TargetControlledCreaturePermanent;
@@ -53,7 +51,7 @@ import mage.target.common.TargetControlledCreaturePermanent;
public class ReignOfThePit extends CardImpl {
public ReignOfThePit(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{4}{B}{B}");
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{B}{B}");
// Each player sacrifices a creature. Create an X/X black Demon creature token with flying, where X is the total power of the creatures sacrificed this way.
this.getSpellAbility().addEffect(new ReignOfThePitEffect());
@@ -70,21 +68,21 @@ public class ReignOfThePit extends CardImpl {
}
class ReignOfThePitEffect extends OneShotEffect {
-
+
ReignOfThePitEffect() {
super(Outcome.Sacrifice);
this.staticText = "Each player sacrifices a creature. Create an X/X black Demon creature token with flying, where X is the total power of the creatures sacrificed this way";
}
-
+
ReignOfThePitEffect(final ReignOfThePitEffect effect) {
super(effect);
}
-
+
@Override
public ReignOfThePitEffect copy() {
return new ReignOfThePitEffect(this);
}
-
+
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
@@ -118,16 +116,3 @@ class ReignOfThePitEffect extends OneShotEffect {
return true;
}
}
-
-class ReignOfThePitToken extends Token {
-
- ReignOfThePitToken(int xValue) {
- super("Demon", "X/X black Demon creature token with flying");
- power = new MageInt(xValue);
- toughness = new MageInt(xValue);
- color.setBlack(true);
- subtype.add("Demon");
- cardType.add(CardType.CREATURE);
- this.addAbility(FlyingAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/r/RenownedWeaver.java b/Mage.Sets/src/mage/cards/r/RenownedWeaver.java
index 251f9a7a6e..f9c30cfcb4 100644
--- a/Mage.Sets/src/mage/cards/r/RenownedWeaver.java
+++ b/Mage.Sets/src/mage/cards/r/RenownedWeaver.java
@@ -29,18 +29,16 @@ package mage.cards.r;
import java.util.UUID;
import mage.MageInt;
-import mage.ObjectColor;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.keyword.ReachAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.RenownedWeaverSpiderToken;
/**
*
@@ -72,18 +70,3 @@ public class RenownedWeaver extends CardImpl {
return new RenownedWeaver(this);
}
}
-
-class RenownedWeaverSpiderToken extends Token {
-
- public RenownedWeaverSpiderToken() {
- super("Spider", "1/3 green Spider enchantment creature token with reach");
- this.setOriginalExpansionSetCode("JOU");
- cardType.add(CardType.ENCHANTMENT);
- cardType.add(CardType.CREATURE);
- color.setColor(ObjectColor.GREEN);
- subtype.add("Spider");
- power = new MageInt(1);
- toughness = new MageInt(3);
- this.addAbility(ReachAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/r/RevelOfTheFallenGod.java b/Mage.Sets/src/mage/cards/r/RevelOfTheFallenGod.java
index 9fa1f44ed7..4c42ec676d 100644
--- a/Mage.Sets/src/mage/cards/r/RevelOfTheFallenGod.java
+++ b/Mage.Sets/src/mage/cards/r/RevelOfTheFallenGod.java
@@ -28,14 +28,11 @@
package mage.cards.r;
import java.util.UUID;
-import mage.MageInt;
-import mage.ObjectColor;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.keyword.HasteAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.RevelOfTheFallenGodSatyrToken;
/**
*
@@ -44,8 +41,7 @@ import mage.game.permanent.token.Token;
public class RevelOfTheFallenGod extends CardImpl {
public RevelOfTheFallenGod(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{3}{R}{R}{G}{G}");
-
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{R}{R}{G}{G}");
// Create four 2/2 red and green Satyr creature tokens with haste.
this.getSpellAbility().addEffect(new CreateTokenEffect(new RevelOfTheFallenGodSatyrToken(), 4));
@@ -61,18 +57,3 @@ public class RevelOfTheFallenGod extends CardImpl {
return new RevelOfTheFallenGod(this);
}
}
-
-class RevelOfTheFallenGodSatyrToken extends Token {
-
- public RevelOfTheFallenGodSatyrToken() {
- super("Satyr", "2/2 red and green Satyr creature tokens with haste");
- this.setOriginalExpansionSetCode("THS");
- cardType.add(CardType.CREATURE);
- color.setColor(ObjectColor.RED);
- color.setColor(ObjectColor.GREEN);
- subtype.add("Satyr");
- power = new MageInt(2);
- toughness = new MageInt(2);
- addAbility(HasteAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/r/RhysTheRedeemed.java b/Mage.Sets/src/mage/cards/r/RhysTheRedeemed.java
index 3d8d1f4928..e5e11655e6 100644
--- a/Mage.Sets/src/mage/cards/r/RhysTheRedeemed.java
+++ b/Mage.Sets/src/mage/cards/r/RhysTheRedeemed.java
@@ -47,7 +47,7 @@ import mage.filter.predicate.mageobject.CardTypePredicate;
import mage.filter.predicate.permanent.TokenPredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.RhysTheRedeemedToken;
import mage.players.Player;
import mage.target.targetpointer.FixedTarget;
@@ -58,7 +58,7 @@ import mage.target.targetpointer.FixedTarget;
public class RhysTheRedeemed extends CardImpl {
public RhysTheRedeemed(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{G/W}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G/W}");
this.addSuperType(SuperType.LEGENDARY);
this.subtype.add("Elf");
this.subtype.add("Warrior");
@@ -127,17 +127,3 @@ class RhysTheRedeemedEffect extends OneShotEffect {
return false;
}
}
-
-class RhysTheRedeemedToken extends Token {
-
- public RhysTheRedeemedToken() {
- super("Elf Warrior", "1/1 green and white Elf Warrior creature token");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- color.setWhite(true);
- subtype.add("Elf");
- subtype.add("Warrior");
- power = new MageInt(1);
- toughness = new MageInt(1);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/r/RiftmarkedKnight.java b/Mage.Sets/src/mage/cards/r/RiftmarkedKnight.java
index 85a7ba4a9b..15a3ffee16 100644
--- a/Mage.Sets/src/mage/cards/r/RiftmarkedKnight.java
+++ b/Mage.Sets/src/mage/cards/r/RiftmarkedKnight.java
@@ -27,13 +27,13 @@
*/
package mage.cards.r;
+import java.util.UUID;
import mage.MageInt;
import mage.ObjectColor;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.keyword.FlankingAbility;
-import mage.abilities.keyword.HasteAbility;
import mage.abilities.keyword.ProtectionAbility;
import mage.abilities.keyword.SuspendAbility;
import mage.cards.CardImpl;
@@ -42,11 +42,9 @@ import mage.constants.CardType;
import mage.constants.Zone;
import mage.counters.CounterType;
import mage.game.Game;
-import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.events.GameEvent;
+import mage.game.permanent.token.RiftmarkedKnightToken;
/**
*
@@ -56,7 +54,7 @@ public class RiftmarkedKnight extends CardImpl {
public RiftmarkedKnight(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}{W}");
-
+
this.subtype.add("Human");
this.subtype.add("Rebel");
this.subtype.add("Knight");
@@ -84,9 +82,13 @@ public class RiftmarkedKnight extends CardImpl {
class RiftmarkedKnightTriggeredAbility extends TriggeredAbilityImpl {
- public RiftmarkedKnightTriggeredAbility() { super(Zone.EXILED, new CreateTokenEffect(new RiftmarkedKnightToken()), false); }
+ public RiftmarkedKnightTriggeredAbility() {
+ super(Zone.EXILED, new CreateTokenEffect(new RiftmarkedKnightToken()), false);
+ }
- public RiftmarkedKnightTriggeredAbility(final RiftmarkedKnightTriggeredAbility ability) { super(ability); }
+ public RiftmarkedKnightTriggeredAbility(final RiftmarkedKnightTriggeredAbility ability) {
+ super(ability);
+ }
@Override
public boolean checkEventType(GameEvent event, Game game) {
@@ -104,19 +106,7 @@ class RiftmarkedKnightTriggeredAbility extends TriggeredAbilityImpl {
}
@Override
- public RiftmarkedKnightTriggeredAbility copy() { return new RiftmarkedKnightTriggeredAbility(this); }
-}
-
-class RiftmarkedKnightToken extends Token {
- public RiftmarkedKnightToken() {
- super("Knight", "2/2 black Knight creature token with flanking, protection from white, and haste");
- cardType.add(CardType.CREATURE);
- color.setBlack(true);
- subtype.add("Knight");
- power = new MageInt(2);
- toughness = new MageInt(2);
- this.addAbility(ProtectionAbility.from(ObjectColor.WHITE));
- this.addAbility(new FlankingAbility());
- this.addAbility(HasteAbility.getInstance());
+ public RiftmarkedKnightTriggeredAbility copy() {
+ return new RiftmarkedKnightTriggeredAbility(this);
}
-}
\ No newline at end of file
+}
diff --git a/Mage.Sets/src/mage/cards/r/RiptideReplicator.java b/Mage.Sets/src/mage/cards/r/RiptideReplicator.java
index ea8056323b..2c88743fd5 100644
--- a/Mage.Sets/src/mage/cards/r/RiptideReplicator.java
+++ b/Mage.Sets/src/mage/cards/r/RiptideReplicator.java
@@ -28,7 +28,6 @@
package mage.cards.r;
import java.util.UUID;
-import mage.MageInt;
import mage.ObjectColor;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility;
@@ -48,6 +47,7 @@ import mage.constants.Outcome;
import mage.constants.Zone;
import mage.counters.CounterType;
import mage.game.Game;
+import mage.game.permanent.token.RiptideReplicatorToken;
import mage.game.permanent.token.Token;
/**
@@ -57,7 +57,7 @@ import mage.game.permanent.token.Token;
public class RiptideReplicator extends CardImpl {
public RiptideReplicator(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{X}{4}");
+ super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{X}{4}");
// As Riptide Replicator enters the battlefield, choose a color and a creature type.
Ability ability = new EntersBattlefieldAbility(new ChooseColorEffect(Outcome.Neutral));
@@ -110,19 +110,3 @@ class RiptideReplicatorEffect extends OneShotEffect {
return token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId());
}
}
-
-class RiptideReplicatorToken extends Token {
-
- RiptideReplicatorToken(ObjectColor color, String type, int x) {
- super(type, "X/X creature token of the chosen color and type");
- cardType.add(CardType.CREATURE);
- if (color != null) {
- this.color.setColor(color);
- }
- if (type != null) {
- subtype.add(type);
- }
- power = new MageInt(x);
- toughness = new MageInt(x);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/r/RiseOfEagles.java b/Mage.Sets/src/mage/cards/r/RiseOfEagles.java
index b854f14a35..6ca45714fa 100644
--- a/Mage.Sets/src/mage/cards/r/RiseOfEagles.java
+++ b/Mage.Sets/src/mage/cards/r/RiseOfEagles.java
@@ -28,15 +28,12 @@
package mage.cards.r;
import java.util.UUID;
-import mage.MageInt;
-import mage.ObjectColor;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.keyword.ScryEffect;
-import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.RiseOfEaglesBirdToken;
/**
*
@@ -45,8 +42,7 @@ import mage.game.permanent.token.Token;
public class RiseOfEagles extends CardImpl {
public RiseOfEagles(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{4}{U}{U}");
-
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{U}{U}");
// Create two 2/2 blue Bird enchantment creature tokens with flying. Scry 1.
this.getSpellAbility().addEffect(new CreateTokenEffect(new RiseOfEaglesBirdToken(), 2));
@@ -62,19 +58,3 @@ public class RiseOfEagles extends CardImpl {
return new RiseOfEagles(this);
}
}
-
-class RiseOfEaglesBirdToken extends Token {
-
- public RiseOfEaglesBirdToken() {
- super("Bird", "2/2 blue Bird enchantment creature tokens with flying");
- this.setOriginalExpansionSetCode("BNG");
- this.setTokenType(2);
- cardType.add(CardType.ENCHANTMENT);
- cardType.add(CardType.CREATURE);
- color.setColor(ObjectColor.BLUE);
- subtype.add("Bird");
- power = new MageInt(2);
- toughness = new MageInt(2);
- addAbility(FlyingAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/r/RiseOfTheHobgoblins.java b/Mage.Sets/src/mage/cards/r/RiseOfTheHobgoblins.java
index 81c5c4c8fc..f480d83f2f 100644
--- a/Mage.Sets/src/mage/cards/r/RiseOfTheHobgoblins.java
+++ b/Mage.Sets/src/mage/cards/r/RiseOfTheHobgoblins.java
@@ -28,7 +28,6 @@
package mage.cards.r;
import java.util.UUID;
-import mage.MageInt;
import mage.ObjectColor;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@@ -53,6 +52,7 @@ import mage.filter.predicate.mageobject.CardTypePredicate;
import mage.filter.predicate.mageobject.ColorPredicate;
import mage.filter.predicate.permanent.ControllerPredicate;
import mage.game.Game;
+import mage.game.permanent.token.GoblinSoldierToken;
import mage.game.permanent.token.Token;
import mage.players.Player;
@@ -74,8 +74,7 @@ public class RiseOfTheHobgoblins extends CardImpl {
}
public RiseOfTheHobgoblins(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{R/W}{R/W}");
-
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{R/W}{R/W}");
// When Rise of the Hobgoblins enters the battlefield, you may pay {X}. If you do, create X 1/1 red and white Goblin Soldier creature tokens.
this.addAbility(new EntersBattlefieldTriggeredAbility(new RiseOfTheHobgoblinsEffect()));
@@ -126,17 +125,3 @@ class RiseOfTheHobgoblinsEffect extends OneShotEffect {
return false;
}
}
-
-class GoblinSoldierToken extends Token {
-
- GoblinSoldierToken() {
- super("Goblin Soldier", "1/1 red and white Goblin Soldier creature tokens");
- cardType.add(CardType.CREATURE);
- color.setRed(true);
- color.setWhite(true);
- subtype.add("Goblin");
- subtype.add("Soldier");
- power = new MageInt(1);
- toughness = new MageInt(1);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/r/RiteOfTheRagingStorm.java b/Mage.Sets/src/mage/cards/r/RiteOfTheRagingStorm.java
index 8b44a6e1ce..fccf097899 100644
--- a/Mage.Sets/src/mage/cards/r/RiteOfTheRagingStorm.java
+++ b/Mage.Sets/src/mage/cards/r/RiteOfTheRagingStorm.java
@@ -28,17 +28,12 @@
package mage.cards.r;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.Ability;
-import mage.abilities.common.BeginningOfEndStepTriggeredAbility;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect;
-import mage.abilities.effects.common.SacrificeSourceEffect;
import mage.abilities.effects.common.combat.CantAttackYouOrPlaneswalkerAllEffect;
-import mage.abilities.keyword.HasteAbility;
-import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -49,7 +44,7 @@ import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.NamePredicate;
import mage.game.Game;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.LightningRagerToken;
import mage.players.Player;
/**
@@ -113,20 +108,3 @@ class RiteOfTheRagingStormEffect extends OneShotEffect {
return new RiteOfTheRagingStormEffect(this);
}
}
-
-class LightningRagerToken extends Token {
-
- LightningRagerToken() {
- super("Lightning Rager", "5/1 red Elemental creature token named Lightning Rager."
- + "It has trample, haste, and \"At the beginning of the end step, sacrifice this creature.\"");
- this.setOriginalExpansionSetCode("C15");
- cardType.add(CardType.CREATURE);
- color.setRed(true);
- subtype.add("Elemental");
- power = new MageInt(5);
- toughness = new MageInt(1);
- addAbility(TrampleAbility.getInstance());
- addAbility(HasteAbility.getInstance());
- this.addAbility(new BeginningOfEndStepTriggeredAbility(new SacrificeSourceEffect(), TargetController.NEXT, false));
- }
-}
diff --git a/Mage.Sets/src/mage/cards/r/RitualOfTheReturned.java b/Mage.Sets/src/mage/cards/r/RitualOfTheReturned.java
index 5fcc47a897..32466b5951 100644
--- a/Mage.Sets/src/mage/cards/r/RitualOfTheReturned.java
+++ b/Mage.Sets/src/mage/cards/r/RitualOfTheReturned.java
@@ -28,7 +28,6 @@
package mage.cards.r;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect;
@@ -40,7 +39,7 @@ import mage.constants.Outcome;
import mage.constants.Zone;
import mage.filter.common.FilterCreatureCard;
import mage.game.Game;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.RitualOfTheReturnedZombieToken;
import mage.players.Player;
import mage.target.common.TargetCardInYourGraveyard;
@@ -51,8 +50,7 @@ import mage.target.common.TargetCardInYourGraveyard;
public class RitualOfTheReturned extends CardImpl {
public RitualOfTheReturned(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{3}{B}");
-
+ super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{3}{B}");
// Exile target creature card from your graveyard. Create a black Zombie creature token with power equal to the exiled card's power and toughness equal to the exiled card's toughness.
this.getSpellAbility().addEffect(new RitualOfTheReturnedExileEffect());
@@ -70,21 +68,21 @@ public class RitualOfTheReturned extends CardImpl {
}
class RitualOfTheReturnedExileEffect extends OneShotEffect {
-
+
public RitualOfTheReturnedExileEffect() {
super(Outcome.PutCreatureInPlay);
this.staticText = "Exile target creature card from your graveyard. Create a black Zombie creature token with power equal to the exiled card's power and toughness equal to the exiled card's toughness";
}
-
+
public RitualOfTheReturnedExileEffect(final RitualOfTheReturnedExileEffect effect) {
super(effect);
}
-
+
@Override
public RitualOfTheReturnedExileEffect copy() {
return new RitualOfTheReturnedExileEffect(this);
}
-
+
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
@@ -99,17 +97,3 @@ class RitualOfTheReturnedExileEffect extends OneShotEffect {
return false;
}
}
-
-class RitualOfTheReturnedZombieToken extends Token {
-
- public RitualOfTheReturnedZombieToken(int power, int toughness) {
- super("Zombie", "black Zombie creature token with power equal to the exiled card's power and toughness equal to the exiled card's toughness");
- this.setOriginalExpansionSetCode("JOU");
- cardType.add(CardType.CREATURE);
- color.setBlack(true);
- subtype.add("Zombie");
- this.power = new MageInt(power);
- this.toughness = new MageInt(toughness);
- }
-
-}
diff --git a/Mage.Sets/src/mage/cards/r/RocEgg.java b/Mage.Sets/src/mage/cards/r/RocEgg.java
index 5753e630fb..3b7c906151 100644
--- a/Mage.Sets/src/mage/cards/r/RocEgg.java
+++ b/Mage.Sets/src/mage/cards/r/RocEgg.java
@@ -25,19 +25,17 @@
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
-
package mage.cards.r;
import java.util.UUID;
-import mage.constants.CardType;
import mage.MageInt;
import mage.abilities.common.DiesTriggeredAbility;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.keyword.DefenderAbility;
-import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.game.permanent.token.Token;
+import mage.constants.CardType;
+import mage.game.permanent.token.RocEggToken;
/**
*
@@ -48,7 +46,7 @@ public class RocEgg extends CardImpl {
private static RocEggToken rocEggToken = new RocEggToken();
public RocEgg(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}");
this.subtype.add("Bird");
this.power = new MageInt(0);
@@ -68,15 +66,3 @@ public class RocEgg extends CardImpl {
}
}
-class RocEggToken extends Token {
-
- public RocEggToken() {
- super("Bird", "3/3 white Bird creature token with flying");
- cardType.add(CardType.CREATURE);
- subtype.add("Bird");
- color.setWhite(true);
- power = new MageInt(3);
- toughness = new MageInt(3);
- addAbility(FlyingAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/r/RukhEgg.java b/Mage.Sets/src/mage/cards/r/RukhEgg.java
index b925a7b653..4bf72415a2 100644
--- a/Mage.Sets/src/mage/cards/r/RukhEgg.java
+++ b/Mage.Sets/src/mage/cards/r/RukhEgg.java
@@ -35,11 +35,10 @@ import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbil
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.RukhEggBirdToken;
/**
*
@@ -54,7 +53,7 @@ public class RukhEgg extends CardImpl {
this.toughness = new MageInt(3);
// When Rukh Egg dies, create a 4/4 red Bird creature token with flying at the beginning of the next end step.
- Effect effect = new CreateDelayedTriggeredAbilityEffect(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new CreateTokenEffect(new BirdToken())));
+ Effect effect = new CreateDelayedTriggeredAbilityEffect(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new CreateTokenEffect(new RukhEggBirdToken())));
effect.setText("create a 4/4 red Bird creature token with flying at the beginning of the next end step");
Ability ability = new DiesTriggeredAbility(effect);
this.addAbility(ability);
@@ -69,23 +68,3 @@ public class RukhEgg extends CardImpl {
return new RukhEgg(this);
}
}
-
-class BirdToken extends Token {
-
- public BirdToken() {
- this("ARN"); //there is no such token in either ARN, 8ED or 9ED
- }
-
- public BirdToken(String setCode) {
- super("Bird", "4/4 red Bird creature token with flying");
- this.setOriginalExpansionSetCode(setCode);
- cardType.add(CardType.CREATURE);
- color.setRed(true);
-
- subtype.add("Bird");
- power = new MageInt(4);
- toughness = new MageInt(4);
- addAbility(FlyingAbility.getInstance());
-
- }
-}
diff --git a/Mage.Sets/src/mage/cards/s/SaprolingBurst.java b/Mage.Sets/src/mage/cards/s/SaprolingBurst.java
index c9e1f31808..0ffde66bec 100644
--- a/Mage.Sets/src/mage/cards/s/SaprolingBurst.java
+++ b/Mage.Sets/src/mage/cards/s/SaprolingBurst.java
@@ -33,24 +33,21 @@ import java.util.UUID;
import mage.MageObjectReference;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
-import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.common.ZoneChangeTriggeredAbility;
import mage.abilities.costs.common.RemoveCountersSourceCost;
-import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect;
-import mage.abilities.effects.common.continuous.SetPowerToughnessSourceEffect;
import mage.abilities.keyword.FadingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.counters.CounterType;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
+import mage.game.permanent.token.SaprolingBurstToken;
import mage.game.permanent.token.Token;
import mage.util.CardUtil;
@@ -122,54 +119,6 @@ class SaprolingBurstCreateTokenEffect extends OneShotEffect {
}
}
-class SaprolingBurstToken extends Token {
-
- SaprolingBurstToken(MageObjectReference saprolingBurstMOR) {
- super("Saproling", "green Saproling creature token with \"This creature's power and toughness are each equal to the number of fade counters on Saproling Burst.\"");
- this.color.setGreen(true);
- this.subtype.add("Saproling");
- this.cardType.add(CardType.CREATURE);
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SetPowerToughnessSourceEffect(new SaprolingBurstTokenDynamicValue(saprolingBurstMOR), Duration.WhileOnBattlefield)));
- }
-}
-
-class SaprolingBurstTokenDynamicValue implements DynamicValue {
-
- private final MageObjectReference saprolingBurstMOR;
-
- SaprolingBurstTokenDynamicValue(MageObjectReference saprolingBurstMOR) {
- this.saprolingBurstMOR = saprolingBurstMOR;
- }
-
- SaprolingBurstTokenDynamicValue(final SaprolingBurstTokenDynamicValue dynamicValue) {
- this.saprolingBurstMOR = dynamicValue.saprolingBurstMOR;
- }
-
- @Override
- public int calculate(Game game, Ability sourceAbility, Effect effect) {
- Permanent permanent = this.saprolingBurstMOR.getPermanent(game);
- if (permanent != null) {
- return permanent.getCounters(game).getCount(CounterType.FADE);
- }
- return 0;
- }
-
- @Override
- public SaprolingBurstTokenDynamicValue copy() {
- return new SaprolingBurstTokenDynamicValue(this);
- }
-
- @Override
- public String toString() {
- return "X";
- }
-
- @Override
- public String getMessage() {
- return "the number of fade counters on Saproling Burst";
- }
-}
-
class SaprolingBurstLeavesBattlefieldTriggeredAbility extends ZoneChangeTriggeredAbility {
SaprolingBurstLeavesBattlefieldTriggeredAbility() {
diff --git a/Mage.Sets/src/mage/cards/s/SarpadianEmpiresVolVii.java b/Mage.Sets/src/mage/cards/s/SarpadianEmpiresVolVii.java
index d2effe914a..7ad03a350c 100644
--- a/Mage.Sets/src/mage/cards/s/SarpadianEmpiresVolVii.java
+++ b/Mage.Sets/src/mage/cards/s/SarpadianEmpiresVolVii.java
@@ -28,7 +28,6 @@
package mage.cards.s;
import java.util.UUID;
-import mage.MageInt;
import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.common.AsEntersBattlefieldAbility;
@@ -43,6 +42,7 @@ import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.game.Game;
+import mage.game.permanent.token.CamaridToken;
import mage.game.permanent.token.CitizenToken;
import mage.game.permanent.token.GoblinToken;
import mage.game.permanent.token.SaprolingToken;
@@ -57,7 +57,7 @@ import mage.players.Player;
public class SarpadianEmpiresVolVii extends CardImpl {
public SarpadianEmpiresVolVii(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{3}");
+ super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}");
// As Sarpadian Empires, Vol. VII enters the battlefield, choose white Citizen, blue Camarid, black Thrull, red Goblin, or green Saproling.
this.addAbility(new AsEntersBattlefieldAbility(new ChooseTokenEffect()));
@@ -97,7 +97,7 @@ class ChooseTokenEffect extends OneShotEffect {
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
MageObject sourceObject = source.getSourceObject(game);
- if(sourceObject != null && controller != null) {
+ if (sourceObject != null && controller != null) {
ChoiceImpl choices = new ChoiceImpl(true);
choices.setMessage("Choose token type");
choices.getChoices().add("White Citizen");
@@ -105,7 +105,7 @@ class ChooseTokenEffect extends OneShotEffect {
choices.getChoices().add("Black Thrull");
choices.getChoices().add("Red Goblin");
choices.getChoices().add("Green Saproling");
- if(controller.choose(Outcome.Neutral, choices, game)) {
+ if (controller.choose(Outcome.Neutral, choices, game)) {
game.informPlayers(sourceObject.getLogName() + ": chosen token type is " + choices.getChoice());
game.getState().setValue(source.getSourceId().toString() + "_SarpadianEmpiresVolVii", choices.getChoice());
return true;
@@ -156,14 +156,3 @@ class CreateSelectedTokenEffect extends OneShotEffect {
return true;
}
}
-
-class CamaridToken extends Token {
- public CamaridToken() {
- super("Camarid", "1/1 blue Camarid creature token");
- cardType.add(CardType.CREATURE);
- subtype.add("Camarid");
- color.setBlue(true);
- power = new MageInt(1);
- toughness = new MageInt(1);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/s/SatyrNyxSmith.java b/Mage.Sets/src/mage/cards/s/SatyrNyxSmith.java
index f757d39fd2..10b5041003 100644
--- a/Mage.Sets/src/mage/cards/s/SatyrNyxSmith.java
+++ b/Mage.Sets/src/mage/cards/s/SatyrNyxSmith.java
@@ -37,7 +37,7 @@ import mage.abilities.keyword.InspiredAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.SatyrNyxSmithElementalToken;
/**
*
@@ -46,7 +46,7 @@ import mage.game.permanent.token.Token;
public class SatyrNyxSmith extends CardImpl {
public SatyrNyxSmith(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{R}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}");
this.subtype.add("Satyr");
this.subtype.add("Shaman");
@@ -69,18 +69,3 @@ public class SatyrNyxSmith extends CardImpl {
return new SatyrNyxSmith(this);
}
}
-
-class SatyrNyxSmithElementalToken extends Token {
-
- public SatyrNyxSmithElementalToken() {
- super("Elemental", "3/1 red Elemental enchantment creature token with haste");
- cardType.add(CardType.ENCHANTMENT);
- cardType.add(CardType.CREATURE);
- color.setRed(true);
- subtype.add("Elemental");
- power = new MageInt(3);
- toughness = new MageInt(1);
- this.addAbility(HasteAbility.getInstance());
- this.setOriginalExpansionSetCode("BNG");
- }
-}
diff --git a/Mage.Sets/src/mage/cards/s/SeedGuardian.java b/Mage.Sets/src/mage/cards/s/SeedGuardian.java
index 7d8f6cfe09..75f6bd97bd 100644
--- a/Mage.Sets/src/mage/cards/s/SeedGuardian.java
+++ b/Mage.Sets/src/mage/cards/s/SeedGuardian.java
@@ -40,7 +40,7 @@ import mage.constants.CardType;
import mage.constants.Outcome;
import mage.filter.common.FilterCreatureCard;
import mage.game.Game;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.SeedGuardianToken;
import mage.players.Player;
/**
@@ -50,7 +50,7 @@ import mage.players.Player;
public class SeedGuardian extends CardImpl {
public SeedGuardian(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}{G}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}{G}");
this.subtype.add("Elemental");
this.power = new MageInt(3);
this.toughness = new MageInt(4);
@@ -97,18 +97,3 @@ class SeedGuardianEffect extends OneShotEffect {
return false;
}
}
-
-class SeedGuardianToken extends Token {
-
- public SeedGuardianToken(int xValue) {
- super("Elemental", "X/X green Elemental creature token");
- setTokenType(2);
- setOriginalExpansionSetCode("OGW");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- subtype.add("Elemental");
- power = new MageInt(xValue);
- toughness = new MageInt(xValue);
-
- }
-}
diff --git a/Mage.Sets/src/mage/cards/s/SekKuarDeathkeeper.java b/Mage.Sets/src/mage/cards/s/SekKuarDeathkeeper.java
index 8c4506cf07..84f893c3e5 100644
--- a/Mage.Sets/src/mage/cards/s/SekKuarDeathkeeper.java
+++ b/Mage.Sets/src/mage/cards/s/SekKuarDeathkeeper.java
@@ -27,10 +27,10 @@
*/
package mage.cards.s;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.DiesCreatureTriggeredAbility;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.keyword.HasteAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -41,9 +41,7 @@ import mage.filter.predicate.Predicates;
import mage.filter.predicate.permanent.AnotherPredicate;
import mage.filter.predicate.permanent.ControllerPredicate;
import mage.filter.predicate.permanent.TokenPredicate;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.SekKuarDeathkeeperGravebornToken;
/**
*
@@ -52,6 +50,7 @@ import java.util.UUID;
public class SekKuarDeathkeeper extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("another nontoken creature you control");
+
static {
filter.add(new ControllerPredicate(TargetController.YOU));
filter.add(new AnotherPredicate());
@@ -59,7 +58,7 @@ public class SekKuarDeathkeeper extends CardImpl {
}
public SekKuarDeathkeeper(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}{R}{G}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}{R}{G}");
addSuperType(SuperType.LEGENDARY);
this.subtype.add("Orc");
this.subtype.add("Shaman");
@@ -68,7 +67,7 @@ public class SekKuarDeathkeeper extends CardImpl {
this.toughness = new MageInt(3);
// Whenever another nontoken creature you control dies, create a 3/1 black and red Graveborn creature token with haste.
- this.addAbility(new DiesCreatureTriggeredAbility(new CreateTokenEffect(new SekKuarDeathkeeperGravebornToken()),false, filter));
+ this.addAbility(new DiesCreatureTriggeredAbility(new CreateTokenEffect(new SekKuarDeathkeeperGravebornToken()), false, filter));
}
public SekKuarDeathkeeper(final SekKuarDeathkeeper card) {
@@ -80,17 +79,3 @@ public class SekKuarDeathkeeper extends CardImpl {
return new SekKuarDeathkeeper(this);
}
}
-
-class SekKuarDeathkeeperGravebornToken extends Token {
-
- public SekKuarDeathkeeperGravebornToken() {
- super("Graveborn", "3/1 black and red Graveborn creature token with haste");
- cardType.add(CardType.CREATURE);
- color.setBlack(true);
- color.setRed(true);
- subtype.add("Graveborn");
- power = new MageInt(3);
- toughness = new MageInt(1);
- this.addAbility(HasteAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/s/SengirAutocrat.java b/Mage.Sets/src/mage/cards/s/SengirAutocrat.java
index 4b8d245273..85b6a90a1b 100644
--- a/Mage.Sets/src/mage/cards/s/SengirAutocrat.java
+++ b/Mage.Sets/src/mage/cards/s/SengirAutocrat.java
@@ -40,23 +40,23 @@ import mage.constants.CardType;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.filter.predicate.permanent.TokenPredicate;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.SerfToken;
/**
*
* @author Quercitron
*/
public class SengirAutocrat extends CardImpl {
-
+
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Serf tokens");
static {
filter.add(new SubtypePredicate("Serf"));
filter.add(new TokenPredicate());
}
-
+
public SengirAutocrat(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}");
this.subtype.add("Human");
this.power = new MageInt(2);
@@ -79,14 +79,3 @@ public class SengirAutocrat extends CardImpl {
return new SengirAutocrat(this);
}
}
-
-class SerfToken extends Token {
- public SerfToken() {
- super("Serf", "0/1 black Serf creature token");
- cardType.add(CardType.CREATURE);
- color.setBlack(true);
- subtype.add("Serf");
- power = new MageInt(0);
- toughness = new MageInt(1);
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/s/SengirNosferatu.java b/Mage.Sets/src/mage/cards/s/SengirNosferatu.java
index 187080fd67..8d08ded9e3 100644
--- a/Mage.Sets/src/mage/cards/s/SengirNosferatu.java
+++ b/Mage.Sets/src/mage/cards/s/SengirNosferatu.java
@@ -32,7 +32,6 @@ import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.ExileSourceCost;
-import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect;
@@ -47,7 +46,7 @@ import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.filter.predicate.mageobject.NamePredicate;
import mage.game.Game;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.SengirNosferatuBatToken;
import mage.players.Player;
import mage.target.Target;
import mage.target.common.TargetCardInExile;
@@ -55,12 +54,12 @@ import mage.target.common.TargetCardInExile;
/**
*
* @author LoneFox
-
+ *
*/
public class SengirNosferatu extends CardImpl {
public SengirNosferatu(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}{B}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}{B}");
this.subtype.add("Vampire");
this.power = new MageInt(4);
this.toughness = new MageInt(4);
@@ -85,24 +84,6 @@ public class SengirNosferatu extends CardImpl {
}
}
-class SengirNosferatuBatToken extends Token {
-
- SengirNosferatuBatToken() {
- super("Bat", "1/2 black Bat creature token with flying");
- cardType.add(CardType.CREATURE);
- color.setBlack(true);
- subtype.add("Bat");
- power = new MageInt(1);
- toughness = new MageInt(2);
- this.addAbility(FlyingAbility.getInstance());
- ReturnSengirNosferatuEffect effect = new ReturnSengirNosferatuEffect();
- effect.setText("Return an exiled card named Sengir Nosferatu to the battlefield under its owner's control.");
- Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl("{1}{B}"));
- ability.addCost(new SacrificeSourceCost());
- this.addAbility(ability);
- }
-}
-
class ReturnSengirNosferatuEffect extends OneShotEffect {
private static final FilterCard filter = new FilterCard("exiled card named Sengir Nosferatu");
@@ -124,19 +105,19 @@ class ReturnSengirNosferatuEffect extends OneShotEffect {
return new ReturnSengirNosferatuEffect(this);
}
- @Override
+ @Override
public boolean apply(Game game, Ability source) {
UUID controllerId = source.getControllerId();
Target target = new TargetCardInExile(filter);
target.setNotTarget(true);
- if(!target.canChoose(source.getSourceId(), controllerId, game)) {
+ if (!target.canChoose(source.getSourceId(), controllerId, game)) {
return false;
}
Player player = game.getPlayer(controllerId);
- if(player != null) {
+ if (player != null) {
player.chooseTarget(Outcome.PutCreatureInPlay, target, source, game);
Card card = game.getCard(target.getTargets().get(0));
- if(card != null) {
+ if (card != null) {
return card.moveToZone(Zone.BATTLEFIELD, source.getSourceId(), game, false);
}
}
diff --git a/Mage.Sets/src/mage/cards/s/SerpentGenerator.java b/Mage.Sets/src/mage/cards/s/SerpentGenerator.java
index dee8e1f3cd..fa26198e32 100644
--- a/Mage.Sets/src/mage/cards/s/SerpentGenerator.java
+++ b/Mage.Sets/src/mage/cards/s/SerpentGenerator.java
@@ -28,20 +28,17 @@
package mage.cards.s;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.Ability;
-import mage.abilities.common.DealsDamageToAPlayerTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.effects.common.counter.AddPoisonCounterTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.SerpentGeneratorSnakeToken;
/**
*
@@ -50,10 +47,10 @@ import mage.game.permanent.token.Token;
public class SerpentGenerator extends CardImpl {
public SerpentGenerator(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{6}");
+ super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{6}");
// {4}, {tap}: Create a 1/1 colorless Snake artifact creature token. It has "Whenever this creature deals damage to a player, that player gets a poison counter."
- Effect effect = new CreateTokenEffect(new SnakeToken());
+ Effect effect = new CreateTokenEffect(new SerpentGeneratorSnakeToken());
effect.setText("Create a 1/1 colorless Snake artifact creature token. It has \"Whenever this creature deals damage to a player, that player gets a poison counter.\"");
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl("{4}"));
ability.addCost(new TapSourceCost());
@@ -69,19 +66,3 @@ public class SerpentGenerator extends CardImpl {
return new SerpentGenerator(this);
}
}
-
-class SnakeToken extends Token {
-
- public SnakeToken() {
- super("Snake", "1/1 colorless Snake artifact creature token with \"Whenever this creature deals damage to a player, that player gets a poison counter.\"");
- cardType.add(CardType.ARTIFACT);
- cardType.add(CardType.CREATURE);
- subtype.add("Snake");
- power = new MageInt(1);
- toughness = new MageInt(1);
-
- Effect effect = new AddPoisonCounterTargetEffect(1);
- effect.setText("that player gets a poison counter");
- this.addAbility(new DealsDamageToAPlayerTriggeredAbility(effect, false, true));
- }
-}
diff --git a/Mage.Sets/src/mage/cards/s/ShardingSphinx.java b/Mage.Sets/src/mage/cards/s/ShardingSphinx.java
index a6fa9468d6..5b3388f8c1 100644
--- a/Mage.Sets/src/mage/cards/s/ShardingSphinx.java
+++ b/Mage.Sets/src/mage/cards/s/ShardingSphinx.java
@@ -38,7 +38,7 @@ import mage.constants.CardType;
import mage.constants.SetTargetPointer;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.mageobject.CardTypePredicate;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.ThopterToken;
/**
*
@@ -47,13 +47,13 @@ import mage.game.permanent.token.Token;
public class ShardingSphinx extends CardImpl {
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("an artifact creature you control");
-
- static{
+
+ static {
filter.add(new CardTypePredicate(CardType.ARTIFACT));
}
public ShardingSphinx(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{4}{U}{U}");
+ super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{4}{U}{U}");
this.subtype.add("Sphinx");
this.power = new MageInt(4);
@@ -64,7 +64,7 @@ public class ShardingSphinx extends CardImpl {
// Whenever an artifact creature you control deals combat damage to a player, you may create a 1/1 blue Thopter artifact creature token with flying.
this.addAbility(new DealsDamageToAPlayerAllTriggeredAbility(
- new CreateTokenEffect(new ThopterToken()),
+ new CreateTokenEffect(new ThopterToken()),
filter, true, SetTargetPointer.NONE, true));
}
@@ -78,16 +78,3 @@ public class ShardingSphinx extends CardImpl {
return new ShardingSphinx(this);
}
}
-
-class ThopterToken extends Token {
- ThopterToken() {
- super("Thopter", "1/1 blue Thopter artifact creature token with flying");
- cardType.add(CardType.CREATURE);
- cardType.add(CardType.ARTIFACT);
- color.setBlue(true);
- subtype.add("Thopter");
- power = new MageInt(1);
- toughness = new MageInt(1);
- this.addAbility(FlyingAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/s/SkirkRidgeExhumer.java b/Mage.Sets/src/mage/cards/s/SkirkRidgeExhumer.java
index ee1e5227b6..b16ca59b7b 100644
--- a/Mage.Sets/src/mage/cards/s/SkirkRidgeExhumer.java
+++ b/Mage.Sets/src/mage/cards/s/SkirkRidgeExhumer.java
@@ -30,20 +30,16 @@ package mage.cards.s;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
-import mage.abilities.common.DiesTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.DiscardCardCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.Duration;
import mage.constants.Zone;
-import mage.game.permanent.token.Token;
-import mage.target.common.TargetCreaturePermanent;
+import mage.game.permanent.token.FesteringGoblinToken;
/**
*
@@ -74,21 +70,3 @@ public class SkirkRidgeExhumer extends CardImpl {
return new SkirkRidgeExhumer(this);
}
}
-
-class FesteringGoblinToken extends Token {
-
- public FesteringGoblinToken() {
- super("Festering Goblin", "1/1 black Zombie Goblin creature token named Festering Goblin with \"When Festering Goblin dies, target creature gets -1/-1 until end of turn.\"");
- this.setOriginalExpansionSetCode("FUT");
- cardType.add(CardType.CREATURE);
- color.setBlack(true);
- subtype.add("Zombie");
- subtype.add("Goblin");
- power = new MageInt(1);
- toughness = new MageInt(1);
-
- Ability ability = new DiesTriggeredAbility(new BoostTargetEffect(-1, -1, Duration.EndOfTurn), false);
- ability.addTarget(new TargetCreaturePermanent());
- this.addAbility(ability);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/s/SkywiseTeachings.java b/Mage.Sets/src/mage/cards/s/SkywiseTeachings.java
index a81bb117b2..a44e18ac5b 100644
--- a/Mage.Sets/src/mage/cards/s/SkywiseTeachings.java
+++ b/Mage.Sets/src/mage/cards/s/SkywiseTeachings.java
@@ -28,19 +28,17 @@
package mage.cards.s;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.DoIfCostPaid;
-import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.FilterSpell;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.CardTypePredicate;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.SkywiseTeachingsToken;
/**
*
@@ -55,7 +53,7 @@ public class SkywiseTeachings extends CardImpl {
}
public SkywiseTeachings(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{U}");
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{U}");
// Whenever you cast a noncreature spell, you may pay {1}{U}. If you do, create a 2/2 blue Djinn Monk creature token with flying.
this.addAbility(new SpellCastControllerTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new SkywiseTeachingsToken()), new ManaCostsImpl("{1}{U}")), filter, false));
@@ -71,17 +69,3 @@ public class SkywiseTeachings extends CardImpl {
return new SkywiseTeachings(this);
}
}
-
-class SkywiseTeachingsToken extends Token {
-
- SkywiseTeachingsToken() {
- super("Djinn Monk", "2/2 blue Djinn Monk creature token with flying");
- cardType.add(CardType.CREATURE);
- color.setBlue(true);
- this.subtype.add("Djinn");
- this.subtype.add("Monk");
- power = new MageInt(2);
- toughness = new MageInt(2);
- this.addAbility(FlyingAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/s/Sliversmith.java b/Mage.Sets/src/mage/cards/s/Sliversmith.java
index 84fcc25b49..5f5669393b 100644
--- a/Mage.Sets/src/mage/cards/s/Sliversmith.java
+++ b/Mage.Sets/src/mage/cards/s/Sliversmith.java
@@ -39,7 +39,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.SliversmithToken;
/**
*
@@ -69,16 +69,3 @@ public class Sliversmith extends CardImpl {
return new Sliversmith(this);
}
}
-
-class SliversmithToken extends Token {
-
- SliversmithToken() {
- super("Metallic Sliver", "1/1 colorless Sliver creature token named Metallic Sliver");
- cardType.add(CardType.CREATURE);
- cardType.add(CardType.ARTIFACT);
- subtype.add("Sliver");
- power = new MageInt(1);
- toughness = new MageInt(1);
- this.setOriginalExpansionSetCode("FUT");
- }
-}
diff --git a/Mage.Sets/src/mage/cards/s/SorinLordOfInnistrad.java b/Mage.Sets/src/mage/cards/s/SorinLordOfInnistrad.java
index 0a36d49a39..802904d610 100644
--- a/Mage.Sets/src/mage/cards/s/SorinLordOfInnistrad.java
+++ b/Mage.Sets/src/mage/cards/s/SorinLordOfInnistrad.java
@@ -28,7 +28,6 @@
package mage.cards.s;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.LoyaltyAbility;
import mage.abilities.common.PlanswalkerEntersWithLoyalityCountersAbility;
@@ -37,7 +36,6 @@ import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.GetEmblemEffect;
import mage.abilities.effects.common.continuous.BoostControlledEffect;
-import mage.abilities.keyword.LifelinkAbility;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@@ -51,7 +49,7 @@ import mage.filter.predicate.mageobject.CardTypePredicate;
import mage.game.Game;
import mage.game.command.Emblem;
import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.SorinLordOfInnistradVampireToken;
import mage.players.Player;
import mage.target.TargetPermanent;
@@ -76,7 +74,7 @@ public class SorinLordOfInnistrad extends CardImpl {
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(3));
// +1: Create a 1/1 black Vampire creature token with lifelink.
- this.addAbility(new LoyaltyAbility(new CreateTokenEffect(new VampireToken()), 1));
+ this.addAbility(new LoyaltyAbility(new CreateTokenEffect(new SorinLordOfInnistradVampireToken()), 1));
// -2: You get an emblem with "Creatures you control get +1/+0."
this.addAbility(new LoyaltyAbility(new GetEmblemEffect(new SorinLordOfInnistradEmblem()), -2));
@@ -97,19 +95,6 @@ public class SorinLordOfInnistrad extends CardImpl {
}
}
-class VampireToken extends Token {
-
- VampireToken() {
- super("Vampire", "1/1 black Vampire creature token with lifelink");
- cardType.add(CardType.CREATURE);
- color.setBlack(true);
- subtype.add("Vampire");
- power = new MageInt(1);
- toughness = new MageInt(1);
- addAbility(LifelinkAbility.getInstance());
- }
-}
-
class SorinLordOfInnistradEmblem extends Emblem {
public SorinLordOfInnistradEmblem() {
diff --git a/Mage.Sets/src/mage/cards/s/SorinSolemnVisitor.java b/Mage.Sets/src/mage/cards/s/SorinSolemnVisitor.java
index 0514b3ec45..78a2d8b501 100644
--- a/Mage.Sets/src/mage/cards/s/SorinSolemnVisitor.java
+++ b/Mage.Sets/src/mage/cards/s/SorinSolemnVisitor.java
@@ -28,7 +28,6 @@
package mage.cards.s;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.LoyaltyAbility;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
@@ -39,7 +38,6 @@ import mage.abilities.effects.common.GetEmblemEffect;
import mage.abilities.effects.common.SacrificeEffect;
import mage.abilities.effects.common.continuous.BoostControlledEffect;
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
-import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.LifelinkAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@@ -49,7 +47,7 @@ import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent;
import mage.game.command.Emblem;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.SorinSolemnVisitorVampireToken;
/**
*
@@ -102,17 +100,3 @@ class SorinSolemnVisitorEmblem extends Emblem {
this.getAbilities().add(ability);
}
}
-
-class SorinSolemnVisitorVampireToken extends Token {
-
- SorinSolemnVisitorVampireToken() {
- super("Vampire", "2/2 black Vampire creature token with flying");
- setOriginalExpansionSetCode("KTK");
- cardType.add(CardType.CREATURE);
- color.setBlack(true);
- subtype.add("Vampire");
- power = new MageInt(2);
- toughness = new MageInt(2);
- addAbility(FlyingAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/s/Sparkspitter.java b/Mage.Sets/src/mage/cards/s/Sparkspitter.java
index 13abfed3ee..fe70c4ed95 100644
--- a/Mage.Sets/src/mage/cards/s/Sparkspitter.java
+++ b/Mage.Sets/src/mage/cards/s/Sparkspitter.java
@@ -30,21 +30,16 @@ package mage.cards.s;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
-import mage.abilities.common.BeginningOfEndStepTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.DiscardCardCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.effects.common.SacrificeSourceEffect;
-import mage.abilities.keyword.HasteAbility;
-import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.TargetController;
import mage.constants.Zone;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.SparkElementalToken;
/**
*
@@ -53,7 +48,7 @@ import mage.game.permanent.token.Token;
public class Sparkspitter extends CardImpl {
public Sparkspitter(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{R}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}");
this.subtype.add("Elemental");
this.subtype.add("Spellshaper");
this.power = new MageInt(1);
@@ -75,20 +70,3 @@ public class Sparkspitter extends CardImpl {
return new Sparkspitter(this);
}
}
-
-class SparkElementalToken extends Token {
-
- public SparkElementalToken() {
- super("Spark Elemental", "3/1 red Elemental creature token named Spark Elemental with trample, haste, and \"At the beginning of the end step, sacrifice Spark Elemental.\"");
- this.setOriginalExpansionSetCode("FUT");
- cardType.add(CardType.CREATURE);
- color.setRed(true);
- subtype.add("Elemental");
- power = new MageInt(3);
- toughness = new MageInt(1);
-
- this.addAbility(TrampleAbility.getInstance());
- this.addAbility(HasteAbility.getInstance());
- this.addAbility(new BeginningOfEndStepTriggeredAbility(new SacrificeSourceEffect(), TargetController.ANY, false));
- }
-}
diff --git a/Mage.Sets/src/mage/cards/s/SpawningGrounds.java b/Mage.Sets/src/mage/cards/s/SpawningGrounds.java
index 7376a9cc14..59a6b7c592 100644
--- a/Mage.Sets/src/mage/cards/s/SpawningGrounds.java
+++ b/Mage.Sets/src/mage/cards/s/SpawningGrounds.java
@@ -28,7 +28,6 @@
package mage.cards.s;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility;
@@ -37,7 +36,6 @@ import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
import mage.abilities.keyword.EnchantAbility;
-import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.AttachmentType;
@@ -45,7 +43,7 @@ import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.Zone;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.SpawningGroundsBeastToken;
import mage.target.TargetPermanent;
import mage.target.common.TargetLandPermanent;
@@ -56,10 +54,9 @@ import mage.target.common.TargetLandPermanent;
public class SpawningGrounds extends CardImpl {
public SpawningGrounds(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{6}{G}{G}");
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{6}{G}{G}");
this.subtype.add("Aura");
-
// Enchant land
TargetPermanent auraTarget = new TargetLandPermanent();
this.getSpellAbility().addTarget(auraTarget);
@@ -82,17 +79,3 @@ public class SpawningGrounds extends CardImpl {
return new SpawningGrounds(this);
}
}
-
-class SpawningGroundsBeastToken extends Token {
-
- public SpawningGroundsBeastToken() {
- super("Beast", "5/5 green Beast creature token with trample");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- subtype.add("Beast");
- power = new MageInt(5);
- toughness = new MageInt(5);
- this.addAbility(TrampleAbility.getInstance());
- }
-
-}
diff --git a/Mage.Sets/src/mage/cards/s/SpawningPit.java b/Mage.Sets/src/mage/cards/s/SpawningPit.java
index 2fe57f71db..223e7635bf 100644
--- a/Mage.Sets/src/mage/cards/s/SpawningPit.java
+++ b/Mage.Sets/src/mage/cards/s/SpawningPit.java
@@ -25,13 +25,9 @@
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
-
package mage.cards.s;
import java.util.UUID;
-
-import mage.constants.CardType;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.RemoveCountersSourceCost;
@@ -41,9 +37,10 @@ import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.constants.CardType;
import mage.constants.Zone;
import mage.counters.CounterType;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.SpawningPitToken;
import mage.target.common.TargetControlledCreaturePermanent;
/**
@@ -52,15 +49,15 @@ import mage.target.common.TargetControlledCreaturePermanent;
*/
public class SpawningPit extends CardImpl {
- public SpawningPit (UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{2}");
+ public SpawningPit(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}");
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.CHARGE.createInstance()), new SacrificeTargetCost(new TargetControlledCreaturePermanent())));
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new SpawningPitToken()), new GenericManaCost(1));
ability.addCost(new RemoveCountersSourceCost(CounterType.CHARGE.createInstance(2)));
this.addAbility(ability);
}
- public SpawningPit (final SpawningPit card) {
+ public SpawningPit(final SpawningPit card) {
super(card);
}
@@ -70,15 +67,3 @@ public class SpawningPit extends CardImpl {
}
}
-
-class SpawningPitToken extends Token {
- public SpawningPitToken() {
- super("Spawn", "2/2 colorless Spawn artifact creature token");
- cardType.add(CardType.ARTIFACT);
- cardType.add(CardType.CREATURE);
- this.subtype.add("Spawn");
- power = new MageInt(2);
- toughness = new MageInt(2);
- }
-}
-
diff --git a/Mage.Sets/src/mage/cards/s/SpikeBreeder.java b/Mage.Sets/src/mage/cards/s/SpikeBreeder.java
index e9f7940e8e..c337ec0187 100644
--- a/Mage.Sets/src/mage/cards/s/SpikeBreeder.java
+++ b/Mage.Sets/src/mage/cards/s/SpikeBreeder.java
@@ -42,7 +42,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
import mage.counters.CounterType;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.SpikeToken;
import mage.target.common.TargetCreaturePermanent;
/**
@@ -52,25 +52,25 @@ import mage.target.common.TargetCreaturePermanent;
public class SpikeBreeder extends CardImpl {
public SpikeBreeder(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{G}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}");
this.subtype.add("Spike");
this.power = new MageInt(0);
this.toughness = new MageInt(0);
// Spike Breeder enters the battlefield with three +1/+1 counters on it.
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(3)), "with three +1/+1 counters on it"));
-
+
// {2}, Remove a +1/+1 counter from Spike Breeder: Put a +1/+1 counter on target creature.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.P1P1.createInstance()), new GenericManaCost(2));
ability.addCost(new RemoveCountersSourceCost(CounterType.P1P1.createInstance()));
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
-
+
// {2}, Remove a +1/+1 counter from Spike Breeder: Create a 1/1 green Spike creature token.
Ability ability2 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new SpikeToken()), new GenericManaCost(2));
ability2.addCost(new RemoveCountersSourceCost(CounterType.P1P1.createInstance()));
this.addAbility(ability2);
-
+
}
public SpikeBreeder(final SpikeBreeder card) {
@@ -82,15 +82,3 @@ public class SpikeBreeder extends CardImpl {
return new SpikeBreeder(this);
}
}
-
-class SpikeToken extends Token {
-
- SpikeToken() {
- super("Spike", "1/1 green Spike creature token");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- subtype.add("Spike");
- power = new MageInt(1);
- toughness = new MageInt(1);
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/s/SpiritMirror.java b/Mage.Sets/src/mage/cards/s/SpiritMirror.java
index a49fde06ff..9b34e4e8b5 100644
--- a/Mage.Sets/src/mage/cards/s/SpiritMirror.java
+++ b/Mage.Sets/src/mage/cards/s/SpiritMirror.java
@@ -28,10 +28,7 @@
package mage.cards.s;
import java.util.UUID;
-
-import mage.MageInt;
import mage.abilities.Ability;
-import mage.constants.ComparisonType;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
@@ -42,12 +39,13 @@ import mage.abilities.effects.common.DestroyTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
+import mage.constants.ComparisonType;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.FilterPermanent;
import mage.filter.predicate.mageobject.NamePredicate;
import mage.filter.predicate.permanent.TokenPredicate;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.ReflectionToken;
import mage.target.TargetPermanent;
/**
@@ -65,7 +63,6 @@ public class SpiritMirror extends CardImpl {
public SpiritMirror(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{W}{W}");
-
// At the beginning of your upkeep, if there are no Reflection tokens on the battlefield, create a 2/2 white Reflection creature token.
this.addAbility(new ConditionalTriggeredAbility(
new BeginningOfUpkeepTriggeredAbility(new CreateTokenEffect(new ReflectionToken()), TargetController.YOU, false),
@@ -87,16 +84,3 @@ public class SpiritMirror extends CardImpl {
return new SpiritMirror(this);
}
}
-
-class ReflectionToken extends Token {
-
- public ReflectionToken() {
- super("Reflection", "2/2 white Reflection creature token");
- this.setOriginalExpansionSetCode("TMP");
- cardType.add(CardType.CREATURE);
- color.setWhite(true);
- subtype.add("Reflection");
- power = new MageInt(2);
- toughness = new MageInt(2);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/s/SpoilsOfBlood.java b/Mage.Sets/src/mage/cards/s/SpoilsOfBlood.java
index d4244495c3..2bb2faa281 100644
--- a/Mage.Sets/src/mage/cards/s/SpoilsOfBlood.java
+++ b/Mage.Sets/src/mage/cards/s/SpoilsOfBlood.java
@@ -28,7 +28,6 @@
package mage.cards.s;
import java.util.UUID;
-import mage.MageInt;
import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
@@ -40,10 +39,10 @@ import mage.constants.Outcome;
import mage.constants.WatcherScope;
import mage.constants.Zone;
import mage.game.Game;
-import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
+import mage.game.events.GameEvent;
import mage.game.events.ZoneChangeEvent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.SpoilsOfBloodHorrorToken;
import mage.players.Player;
import mage.watchers.Watcher;
@@ -54,8 +53,7 @@ import mage.watchers.Watcher;
public class SpoilsOfBlood extends CardImpl {
public SpoilsOfBlood(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{B}");
-
+ super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{B}");
// Create an X/X black Horror creature token, where X is the number of creatures that died this turn.
this.getSpellAbility().addEffect(new SpoilsOfBloodEffect());
@@ -103,7 +101,6 @@ class SpoilsOfBloodEffect extends OneShotEffect {
}
-
class CreaturesDiedThisTurnWatcher extends Watcher {
public int creaturesDiedThisTurn = 0;
@@ -123,7 +120,7 @@ class CreaturesDiedThisTurnWatcher extends Watcher {
@Override
public void watch(GameEvent event, Game game) {
- if (event.getType() == EventType.ZONE_CHANGE && ((ZoneChangeEvent)event).isDiesEvent()) {
+ if (event.getType() == EventType.ZONE_CHANGE && ((ZoneChangeEvent) event).isDiesEvent()) {
MageObject mageObject = game.getLastKnownInformation(event.getTargetId(), Zone.BATTLEFIELD);
if (mageObject != null && mageObject.isCreature()) {
creaturesDiedThisTurn++;
@@ -138,16 +135,3 @@ class CreaturesDiedThisTurnWatcher extends Watcher {
}
}
-
-class SpoilsOfBloodHorrorToken extends Token {
-
- public SpoilsOfBloodHorrorToken(int xValue) {
- super("Horror", "X/X black Horror creature token");
- setOriginalExpansionSetCode("C14");
- cardType.add(CardType.CREATURE);
- color.setBlack(true);
- subtype.add("Horror");
- power = new MageInt(xValue);
- toughness = new MageInt(xValue);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/s/StitcherGeralf.java b/Mage.Sets/src/mage/cards/s/StitcherGeralf.java
index 30f71c35ee..6f4d0b54d5 100644
--- a/Mage.Sets/src/mage/cards/s/StitcherGeralf.java
+++ b/Mage.Sets/src/mage/cards/s/StitcherGeralf.java
@@ -27,6 +27,7 @@
*/
package mage.cards.s;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
@@ -41,12 +42,10 @@ import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.common.FilterCreatureCard;
import mage.game.Game;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.StitcherGeralfZombieToken;
import mage.players.Player;
import mage.target.TargetCard;
-import java.util.UUID;
-
/**
*
* @author LevelX2
@@ -54,7 +53,7 @@ import java.util.UUID;
public class StitcherGeralf extends CardImpl {
public StitcherGeralf(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{U}{U}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}{U}");
addSuperType(SuperType.LEGENDARY);
this.subtype.add("Human");
this.subtype.add("Wizard");
@@ -99,17 +98,17 @@ class StitcherGeralfEffect extends OneShotEffect {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
Cards cards = new CardsImpl();
- for (UUID playerId: game.getState().getPlayersInRange(controller.getId(), game)) {
+ for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) {
Player player = game.getPlayer(playerId);
if (player != null) {
cards.addAll(player.getLibrary().getTopCards(game, 3));
}
}
controller.moveCards(cards, Zone.GRAVEYARD, source, game);
- TargetCard target = new TargetCard(0,2,Zone.GRAVEYARD, new FilterCreatureCard("creature cards to exile"));
+ TargetCard target = new TargetCard(0, 2, Zone.GRAVEYARD, new FilterCreatureCard("creature cards to exile"));
controller.chooseTarget(outcome, cards, target, source, game);
int power = 0;
- for (UUID cardId: target.getTargets()) {
+ for (UUID cardId : target.getTargets()) {
Card card = game.getCard(cardId);
if (card != null) {
power += card.getPower().getValue();
@@ -121,17 +120,3 @@ class StitcherGeralfEffect extends OneShotEffect {
return false;
}
}
-
-class StitcherGeralfZombieToken extends Token {
-
- StitcherGeralfZombieToken(int xValue) {
- super("Zombie", "X/X blue Zombie creature token");
- setOriginalExpansionSetCode("C14");
- setTokenType(1);
- cardType.add(CardType.CREATURE);
- color.setBlue(true);
- subtype.add("Zombie");
- power = new MageInt(xValue);
- toughness = new MageInt(xValue);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/s/StitchersApprentice.java b/Mage.Sets/src/mage/cards/s/StitchersApprentice.java
index 1ea67910ab..bb8d4d320e 100644
--- a/Mage.Sets/src/mage/cards/s/StitchersApprentice.java
+++ b/Mage.Sets/src/mage/cards/s/StitchersApprentice.java
@@ -28,9 +28,6 @@
package mage.cards.s;
import java.util.UUID;
-import mage.constants.CardType;
-import mage.constants.Outcome;
-import mage.constants.Zone;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
@@ -40,10 +37,13 @@ import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Outcome;
+import mage.constants.Zone;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.game.Game;
import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.StitchersApprenticeHomunculusToken;
import mage.players.Player;
import mage.target.Target;
import mage.target.common.TargetControlledPermanent;
@@ -55,14 +55,14 @@ import mage.target.common.TargetControlledPermanent;
public class StitchersApprentice extends CardImpl {
public StitchersApprentice(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{U}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}");
this.subtype.add("Homunculus");
this.power = new MageInt(1);
this.toughness = new MageInt(2);
// {1}{U}, {tap}: Create a 2/2 blue Homunculus creature token, then sacrifice a creature.
- Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new HomunculusToken()), new ManaCostsImpl("{1}{U}"));
+ Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new StitchersApprenticeHomunculusToken()), new ManaCostsImpl("{1}{U}"));
ability.addCost(new TapSourceCost());
ability.addEffect(new StitchersApprenticeEffect());
this.addAbility(ability);
@@ -110,15 +110,3 @@ class StitchersApprenticeEffect extends OneShotEffect {
return false;
}
}
-
-class HomunculusToken extends Token {
-
- public HomunculusToken() {
- super("Homunculus", "2/2 blue Homunculus creature");
- cardType.add(CardType.CREATURE);
- color.setBlue(true);
- subtype.add("Homunculus");
- power = new MageInt(2);
- toughness = new MageInt(2);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/s/StoneIdolTrap.java b/Mage.Sets/src/mage/cards/s/StoneIdolTrap.java
index b7614c51a3..54a70db600 100644
--- a/Mage.Sets/src/mage/cards/s/StoneIdolTrap.java
+++ b/Mage.Sets/src/mage/cards/s/StoneIdolTrap.java
@@ -28,14 +28,12 @@
package mage.cards.s;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
-import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -46,7 +44,7 @@ import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.AttackingPredicate;
import mage.game.Game;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.StoneTrapIdolToken;
import mage.util.CardUtil;
/**
@@ -56,7 +54,7 @@ import mage.util.CardUtil;
public class StoneIdolTrap extends CardImpl {
public StoneIdolTrap(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{5}{R}");
+ super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{5}{R}");
this.subtype.add("Trap");
// Stone Idol Trap costs {1} less to cast for each attacking creature.
@@ -133,26 +131,12 @@ class StoneIdolTrapEffect extends OneShotEffect {
}
@Override
- public boolean apply(Game game, Ability source) {
+ public boolean apply(Game game, Ability source) {
CreateTokenEffect effect = new CreateTokenEffect(new StoneTrapIdolToken());
- if(effect.apply(game, source))
- {
+ if (effect.apply(game, source)) {
effect.exileTokensCreatedAtNextEndStep(game, source);
return true;
}
return false;
}
}
-
-class StoneTrapIdolToken extends Token {
-
- public StoneTrapIdolToken() {
- super("Construct", "6/12 colorless Construct artifact creature token with trample");
- cardType.add(CardType.CREATURE);
- cardType.add(CardType.ARTIFACT);
- subtype.add("Construct");
- power = new MageInt(6);
- toughness = new MageInt(12);
- addAbility(TrampleAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/s/SubterraneanTremors.java b/Mage.Sets/src/mage/cards/s/SubterraneanTremors.java
index 682aada72c..7ae67c657e 100644
--- a/Mage.Sets/src/mage/cards/s/SubterraneanTremors.java
+++ b/Mage.Sets/src/mage/cards/s/SubterraneanTremors.java
@@ -29,7 +29,6 @@ package mage.cards.s;
import java.util.List;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.keyword.FlyingAbility;
@@ -43,16 +42,16 @@ import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.AbilityPredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.SubterraneanTremorsLizardToken;
/**
*
* @author escplan9 (Derek Monturo - dmontur1 at gmail dot com)
*/
public class SubterraneanTremors extends CardImpl {
-
+
public SubterraneanTremors(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{X}{R}");
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{R}");
// Subterranean Tremors deals X damage to each creature without flying.
// If X is 4 or more, destroy all artifacts.
@@ -71,7 +70,7 @@ public class SubterraneanTremors extends CardImpl {
}
class SubterraneanTremorsEffect extends OneShotEffect {
-
+
private static final FilterCreaturePermanent filterCreatures = new FilterCreaturePermanent("creature without flying");
private static final FilterArtifactPermanent filterArtifacts = new FilterArtifactPermanent("all artifacts");
@@ -95,42 +94,30 @@ class SubterraneanTremorsEffect extends OneShotEffect {
@Override
public boolean apply(Game game, Ability source) {
-
+
int damage = source.getManaCostsToPay().getX();
UUID sourceId = source.getSourceId();
UUID controllerId = source.getControllerId();
-
+
// X damage to each creature without flying
List creaturePermanents = game.getBattlefield().getActivePermanents(filterCreatures, controllerId, game);
- for (Permanent permanent: creaturePermanents) {
+ for (Permanent permanent : creaturePermanents) {
permanent.damage(damage, sourceId, game, false, true);
}
-
+
// X 4 or more: destroy all artifacts
- if (damage >= 4) {
+ if (damage >= 4) {
List artifactPermanents = game.getBattlefield().getActivePermanents(filterArtifacts, controllerId, game);
- for (Permanent permanent: artifactPermanents) {
+ for (Permanent permanent : artifactPermanents) {
permanent.destroy(permanent.getId(), game, false);
}
}
// X 8 or more: create an 8/8 red lizard creature token on the battlefield
if (damage >= 8) {
- Token lizardToken = new LizardToken();
+ SubterraneanTremorsLizardToken lizardToken = new SubterraneanTremorsLizardToken();
lizardToken.putOntoBattlefield(1, game, sourceId, controllerId);
}
-
+
return true;
}
}
-
-class LizardToken extends Token {
-
- public LizardToken() {
- super("Lizard", "an 8/8 red Lizard creature token");
- cardType.add(CardType.CREATURE);
- color.setRed(true);
- subtype.add("Lizard");
- power = new MageInt(8);
- toughness = new MageInt(8);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/s/SummonersBane.java b/Mage.Sets/src/mage/cards/s/SummonersBane.java
index 631cbd3c3f..6a4ba14d8e 100644
--- a/Mage.Sets/src/mage/cards/s/SummonersBane.java
+++ b/Mage.Sets/src/mage/cards/s/SummonersBane.java
@@ -28,15 +28,14 @@
package mage.cards.s;
import java.util.UUID;
-import mage.constants.CardType;
-import mage.MageInt;
import mage.abilities.effects.common.CounterTargetEffect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.constants.CardType;
import mage.filter.FilterSpell;
import mage.filter.predicate.mageobject.CardTypePredicate;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.IllusionToken;
import mage.target.TargetSpell;
/**
@@ -52,8 +51,7 @@ public class SummonersBane extends CardImpl {
}
public SummonersBane(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{U}{U}");
-
+ super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{U}{U}");
this.getSpellAbility().addTarget(new TargetSpell(filter));
this.getSpellAbility().addEffect(new CounterTargetEffect());
@@ -69,16 +67,3 @@ public class SummonersBane extends CardImpl {
return new SummonersBane(this);
}
}
-
-class IllusionToken extends Token {
-
- public IllusionToken() {
- super("Illusion", "2/2 blue Illusion creature token");
- cardType.add(CardType.CREATURE);
- color.setBlue(true);
-
- subtype.add("Illusion");
- power = new MageInt(2);
- toughness = new MageInt(2);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/s/SummoningStation.java b/Mage.Sets/src/mage/cards/s/SummoningStation.java
index ba6e27daf7..0c396b7392 100644
--- a/Mage.Sets/src/mage/cards/s/SummoningStation.java
+++ b/Mage.Sets/src/mage/cards/s/SummoningStation.java
@@ -28,7 +28,6 @@
package mage.cards.s;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.common.PutIntoGraveFromBattlefieldAllTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.TapSourceCost;
@@ -39,7 +38,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
import mage.filter.common.FilterArtifactPermanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.PincherToken;
/**
*
@@ -48,12 +47,12 @@ import mage.game.permanent.token.Token;
public class SummoningStation extends CardImpl {
public SummoningStation(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{7}");
+ super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{7}");
// {tap}: Create a 2/2 colorless Pincher creature token.
- this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD,new CreateTokenEffect(new PincherToken()), new TapSourceCost()));
+ this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new PincherToken()), new TapSourceCost()));
// Whenever an artifact is put into a graveyard from the battlefield, you may untap Summoning Station.
- this.addAbility(new PutIntoGraveFromBattlefieldAllTriggeredAbility(new UntapSourceEffect(),true, new FilterArtifactPermanent(), false));
+ this.addAbility(new PutIntoGraveFromBattlefieldAllTriggeredAbility(new UntapSourceEffect(), true, new FilterArtifactPermanent(), false));
}
public SummoningStation(final SummoningStation card) {
@@ -65,17 +64,3 @@ public class SummoningStation extends CardImpl {
return new SummoningStation(this);
}
}
-
-class PincherToken extends Token {
-
- public PincherToken() {
- super("Pincher", "2/2 colorless Pincher creature token");
- setOriginalExpansionSetCode("5ND");
- cardType.add(CardType.CREATURE);
- subtype.add("Pincher");
- power = new MageInt(2);
- toughness = new MageInt(2);
-
- }
-
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/s/SwanSong.java b/Mage.Sets/src/mage/cards/s/SwanSong.java
index 9e6e6f9b71..c8f7780d09 100644
--- a/Mage.Sets/src/mage/cards/s/SwanSong.java
+++ b/Mage.Sets/src/mage/cards/s/SwanSong.java
@@ -28,10 +28,8 @@
package mage.cards.s;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
-import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -40,6 +38,7 @@ import mage.filter.FilterSpell;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.CardTypePredicate;
import mage.game.Game;
+import mage.game.permanent.token.SwanSongBirdToken;
import mage.game.permanent.token.Token;
import mage.game.stack.Spell;
import mage.target.TargetSpell;
@@ -51,15 +50,15 @@ import mage.target.TargetSpell;
public class SwanSong extends CardImpl {
private static final FilterSpell filter = new FilterSpell("enchantment, instant or sorcery spell");
+
static {
filter.add(Predicates.or(new CardTypePredicate(CardType.ENCHANTMENT),
- new CardTypePredicate(CardType.INSTANT),
- new CardTypePredicate(CardType.SORCERY)));
+ new CardTypePredicate(CardType.INSTANT),
+ new CardTypePredicate(CardType.SORCERY)));
}
public SwanSong(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{U}");
-
+ super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{U}");
// Counter target enchantment, instant or sorcery spell. Its controller creates a 2/2 blue Bird creature token with flying.
this.getSpellAbility().addEffect(new SwanSongEffect());
@@ -108,18 +107,3 @@ class SwanSongEffect extends OneShotEffect {
return countered;
}
}
-
-class SwanSongBirdToken extends Token {
- SwanSongBirdToken() {
- super("Bird", "2/2 blue Bird creature token with flying");
- cardType.add(CardType.CREATURE);
- color.setBlue(true);
- subtype.add("Bird");
- if (getOriginalExpansionSetCode() != null && getOriginalExpansionSetCode().equals("C16")) {
- setTokenType(2);
- }
- power = new MageInt(2);
- toughness = new MageInt(2);
- this.addAbility(FlyingAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/s/SylvanOffering.java b/Mage.Sets/src/mage/cards/s/SylvanOffering.java
index 7aa99d0e31..96c0571303 100644
--- a/Mage.Sets/src/mage/cards/s/SylvanOffering.java
+++ b/Mage.Sets/src/mage/cards/s/SylvanOffering.java
@@ -28,7 +28,6 @@
package mage.cards.s;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect;
@@ -39,7 +38,7 @@ import mage.constants.CardType;
import mage.constants.Outcome;
import mage.game.Game;
import mage.game.permanent.token.ElfToken;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.SylvanOfferingTreefolkToken;
import mage.players.Player;
import mage.target.Target;
import mage.target.common.TargetOpponent;
@@ -52,7 +51,7 @@ import mage.target.targetpointer.FixedTarget;
public class SylvanOffering extends CardImpl {
public SylvanOffering(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{X}{G}");
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{G}");
// Choose an opponent. You and that player each create an X/X green Treefolk creature token.
this.getSpellAbility().addEffect(new SylvanOfferingEffect1());
@@ -107,20 +106,6 @@ class SylvanOfferingEffect1 extends OneShotEffect {
}
}
-class SylvanOfferingTreefolkToken extends Token {
-
- public SylvanOfferingTreefolkToken(int xValue) {
- super("Treefolk", "X/X green Treefolk creature token");
- setOriginalExpansionSetCode("C14");
- cardType.add(CardType.CREATURE);
- subtype.add("Treefolk");
- color.setGreen(true);
- power = new MageInt(xValue);
- toughness = new MageInt(xValue);
-
- }
-}
-
class SylvanOfferingEffect2 extends OneShotEffect {
SylvanOfferingEffect2() {
diff --git a/Mage.Sets/src/mage/cards/t/TatsumasaTheDragonsFang.java b/Mage.Sets/src/mage/cards/t/TatsumasaTheDragonsFang.java
index f4df6dc7da..e6f849680e 100644
--- a/Mage.Sets/src/mage/cards/t/TatsumasaTheDragonsFang.java
+++ b/Mage.Sets/src/mage/cards/t/TatsumasaTheDragonsFang.java
@@ -27,7 +27,7 @@
*/
package mage.cards.t;
-import mage.MageInt;
+import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.DelayedTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
@@ -40,20 +40,17 @@ import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetEffect;
import mage.abilities.effects.common.continuous.BoostEquippedEffect;
import mage.abilities.keyword.EquipAbility;
-import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.game.Game;
-import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
+import mage.game.events.GameEvent;
import mage.game.events.ZoneChangeEvent;
import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.TatsumaDragonToken;
import mage.target.targetpointer.FixedTarget;
-import java.util.UUID;
-
/**
*
* @author LevelX2
@@ -61,7 +58,7 @@ import java.util.UUID;
public class TatsumasaTheDragonsFang extends CardImpl {
public TatsumasaTheDragonsFang(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{6}");
+ super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{6}");
addSuperType(SuperType.LEGENDARY);
this.subtype.add("Equipment");
@@ -161,17 +158,3 @@ class TatsumaTheDragonsFangTriggeredAbility extends DelayedTriggeredAbility {
return "Return {this} to the battlefield under its owner's control when that token dies.";
}
}
-
-class TatsumaDragonToken extends Token {
-
- public TatsumaDragonToken() {
- super("Dragon Spirit", "5/5 blue Dragon Spirit creature token with flying");
- cardType.add(CardType.CREATURE);
- color.setBlue(true);
- subtype.add("Dragon");
- subtype.add("Spirit");
- power = new MageInt(5);
- toughness = new MageInt(5);
- addAbility(FlyingAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/t/TemptWithVengeance.java b/Mage.Sets/src/mage/cards/t/TemptWithVengeance.java
index 4932c9ca5b..5c48e08471 100644
--- a/Mage.Sets/src/mage/cards/t/TemptWithVengeance.java
+++ b/Mage.Sets/src/mage/cards/t/TemptWithVengeance.java
@@ -28,15 +28,14 @@
package mage.cards.t;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
-import mage.abilities.keyword.HasteAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.game.Game;
+import mage.game.permanent.token.TemptWithVengeanceElementalToken;
import mage.game.permanent.token.Token;
import mage.players.Player;
@@ -107,17 +106,3 @@ class TemptWithVengeanceEffect extends OneShotEffect {
return false;
}
}
-
-class TemptWithVengeanceElementalToken extends Token {
-
- public TemptWithVengeanceElementalToken() {
- super("Elemental", "1/1 red Elemental creature tokens with haste");
- cardType.add(CardType.CREATURE);
- subtype.add("Elemental");
-
- color.setRed(true);
- power = new MageInt(1);
- toughness = new MageInt(1);
- this.addAbility(HasteAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/t/Tetravus.java b/Mage.Sets/src/mage/cards/t/Tetravus.java
index bf954c109e..7b3bfd2b8e 100644
--- a/Mage.Sets/src/mage/cards/t/Tetravus.java
+++ b/Mage.Sets/src/mage/cards/t/Tetravus.java
@@ -49,7 +49,7 @@ import mage.constants.Zone;
import mage.counters.CounterType;
import mage.filter.common.FilterControlledPermanent;
import mage.game.Game;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.TetraviteToken;
import mage.target.common.TargetControlledPermanent;
/**
@@ -88,21 +88,6 @@ public class Tetravus extends CardImpl {
}
}
-class TetraviteToken extends Token {
-
- public TetraviteToken() {
- super("Tetravite", "1/1 colorless Tetravite artifact creature token");
- cardType.add(CardType.CREATURE);
- cardType.add(CardType.ARTIFACT);
- subtype.add("Tetravite");
- power = new MageInt(1);
- toughness = new MageInt(1);
-
- this.addAbility(FlyingAbility.getInstance());
- this.addAbility(new CantBeEnchantedAbility());
- }
-}
-
class CantBeEnchantedAbility extends StaticAbility {
public CantBeEnchantedAbility() {
diff --git a/Mage.Sets/src/mage/cards/t/TeysaEnvoyOfGhosts.java b/Mage.Sets/src/mage/cards/t/TeysaEnvoyOfGhosts.java
index 0edc6e2cb9..6875e52268 100644
--- a/Mage.Sets/src/mage/cards/t/TeysaEnvoyOfGhosts.java
+++ b/Mage.Sets/src/mage/cards/t/TeysaEnvoyOfGhosts.java
@@ -27,11 +27,11 @@
*/
package mage.cards.t;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.DestroyTargetEffect;
-import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.ProtectionAbility;
import mage.abilities.keyword.VigilanceAbility;
import mage.cards.CardImpl;
@@ -44,11 +44,9 @@ import mage.game.Game;
import mage.game.events.DamagedPlayerEvent;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.TeysaEnvoyOfGhostsToken;
import mage.target.targetpointer.FixedTarget;
-import java.util.UUID;
-
/**
*
* @author LevelX2
@@ -56,7 +54,7 @@ import java.util.UUID;
public class TeysaEnvoyOfGhosts extends CardImpl {
public TeysaEnvoyOfGhosts(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{5}{W}{B}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{W}{B}");
addSuperType(SuperType.LEGENDARY);
this.subtype.add("Human");
this.subtype.add("Advisor");
@@ -126,17 +124,3 @@ class TeysaEnvoyOfGhostsTriggeredAbility extends TriggeredAbilityImpl {
}
}
-
-class TeysaEnvoyOfGhostsToken extends Token {
-
- TeysaEnvoyOfGhostsToken() {
- super("Spirit", "1/1 white and black Spirit creature token with flying");
- cardType.add(CardType.CREATURE);
- color.setWhite(true);
- color.setBlack(true);
- subtype.add("Spirit");
- power = new MageInt(1);
- toughness = new MageInt(1);
- this.addAbility(FlyingAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/t/TezzeretTheSchemer.java b/Mage.Sets/src/mage/cards/t/TezzeretTheSchemer.java
index 178e960415..0950c31ff1 100644
--- a/Mage.Sets/src/mage/cards/t/TezzeretTheSchemer.java
+++ b/Mage.Sets/src/mage/cards/t/TezzeretTheSchemer.java
@@ -32,19 +32,15 @@ import mage.abilities.Ability;
import mage.abilities.LoyaltyAbility;
import mage.abilities.common.BeginningOfCombatTriggeredAbility;
import mage.abilities.common.PlanswalkerEntersWithLoyalityCountersAbility;
-import mage.abilities.costs.common.SacrificeSourceCost;
-import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.dynamicvalue.common.SignInversionDynamicValue;
import mage.abilities.effects.Effect;
-import mage.abilities.effects.common.AddManaOfAnyColorEffect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.GetEmblemEffect;
import mage.abilities.effects.common.continuous.AddCardTypeTargetEffect;
import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.abilities.effects.common.continuous.SetPowerToughnessTargetEffect;
-import mage.abilities.mana.SimpleManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -53,7 +49,7 @@ import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.common.FilterControlledArtifactPermanent;
import mage.game.command.Emblem;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.EtheriumCellToken;
import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent;
@@ -109,17 +105,3 @@ class TezzeretTheSchemerEmblem extends Emblem {
this.getAbilities().add(ability);
}
}
-
-class EtheriumCellToken extends Token {
-
- public EtheriumCellToken() {
- super("Etherium Cell", "colorless artifact token named Etherium Cell which has \"{T}, Sacrifice this artifact: Add one mana of any color to your mana pool.\"");
- this.setOriginalExpansionSetCode("AER");
- cardType.add(CardType.ARTIFACT);
-
- Ability ability = new SimpleManaAbility(Zone.BATTLEFIELD, new AddManaOfAnyColorEffect(), new TapSourceCost());
- ability.addCost(new SacrificeSourceCost());
-
- this.addAbility(ability);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/t/ThatcherRevolt.java b/Mage.Sets/src/mage/cards/t/ThatcherRevolt.java
index 4f101c906a..dc7e6af178 100644
--- a/Mage.Sets/src/mage/cards/t/ThatcherRevolt.java
+++ b/Mage.Sets/src/mage/cards/t/ThatcherRevolt.java
@@ -29,20 +29,17 @@ package mage.cards.t;
import java.util.ArrayList;
import java.util.UUID;
-import mage.MageInt;
-import mage.ObjectColor;
import mage.abilities.Ability;
import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.SacrificeTargetEffect;
-import mage.abilities.keyword.HasteAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.game.Game;
import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.RedHumanToken;
import mage.target.targetpointer.FixedTargets;
/**
@@ -52,7 +49,7 @@ import mage.target.targetpointer.FixedTargets;
public class ThatcherRevolt extends CardImpl {
public ThatcherRevolt(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{R}");
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{R}");
// Create three 1/1 red Human creature tokens with haste. Sacrifice those tokens at the beginning of the next end step.
this.getSpellAbility().addEffect(new ThatcherRevoltEffect());
@@ -101,18 +98,3 @@ class ThatcherRevoltEffect extends OneShotEffect {
return true;
}
}
-
-class RedHumanToken extends Token {
-
- public RedHumanToken() {
- super("Human", "1/1 red Human creature token with haste");
- this.cardType.add(CardType.CREATURE);
- this.subtype.add("Human");
-
- this.color = ObjectColor.RED;
- this.power = new MageInt(1);
- this.toughness = new MageInt(1);
-
- this.addAbility(HasteAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/t/TheBattleOfHoth.java b/Mage.Sets/src/mage/cards/t/TheBattleOfHoth.java
index 2878197322..0173db6686 100644
--- a/Mage.Sets/src/mage/cards/t/TheBattleOfHoth.java
+++ b/Mage.Sets/src/mage/cards/t/TheBattleOfHoth.java
@@ -28,47 +28,32 @@
package mage.cards.t;
import java.util.UUID;
-import mage.abilities.common.DiesTriggeredAbility;
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.game.permanent.token.Token;
-import mage.game.permanent.token.TrooperToken;
+import mage.game.permanent.token.ATATToken;
/**
*
* @author Styxo
*/
public class TheBattleOfHoth extends CardImpl {
-
+
public TheBattleOfHoth(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{X}{X}{W}{W}{W}");
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{X}{W}{W}{W}");
// Create X 5/5 white artifact AT-AT creature tokens wiht "When this creature dies, create two 1/1 white Trooper creature tokens."
this.getSpellAbility().addEffect(new CreateTokenEffect(new ATATToken(), new ManacostVariableValue()));
}
-
+
public TheBattleOfHoth(final TheBattleOfHoth card) {
super(card);
}
-
+
@Override
public TheBattleOfHoth copy() {
return new TheBattleOfHoth(this);
}
}
-
-class ATATToken extends Token {
-
- public ATATToken() {
- super("AT-AT", "5/5 white artifact AT-AT creature tokens with \"When this creature dies, create two 1/1 white Trooper creature tokens.\"", 5, 5);
- this.setOriginalExpansionSetCode("SWS");
- cardType.add(CardType.CREATURE);
- cardType.add(CardType.ARTIFACT);
- color.setWhite(true);
- addAbility(new DiesTriggeredAbility(new CreateTokenEffect(new TrooperToken(), 2)));
- subtype.add("AT-AT");
- }
-}
diff --git a/Mage.Sets/src/mage/cards/t/TheHive.java b/Mage.Sets/src/mage/cards/t/TheHive.java
index a98ba10b09..3fb26a0321 100644
--- a/Mage.Sets/src/mage/cards/t/TheHive.java
+++ b/Mage.Sets/src/mage/cards/t/TheHive.java
@@ -28,19 +28,16 @@
package mage.cards.t;
import java.util.UUID;
-
-import mage.constants.CardType;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.constants.CardType;
import mage.constants.Zone;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.WaspToken;
/**
*
@@ -49,7 +46,7 @@ import mage.game.permanent.token.Token;
public class TheHive extends CardImpl {
public TheHive(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{5}");
+ super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{5}");
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new WaspToken(), 1), new GenericManaCost(5));
ability.addCost(new TapSourceCost());
this.addAbility(ability);
@@ -64,15 +61,3 @@ public class TheHive extends CardImpl {
return new TheHive(this);
}
}
-
-class WaspToken extends Token {
- WaspToken() {
- super("Wasp", "1/1 colorless Insect artifact creature token with flying");
- cardType.add(CardType.ARTIFACT);
- cardType.add(CardType.CREATURE);
- this.subtype.add("Insect");
- power = new MageInt(1);
- toughness = new MageInt(1);
- this.addAbility(FlyingAbility.getInstance());
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/t/ThopterFoundry.java b/Mage.Sets/src/mage/cards/t/ThopterFoundry.java
index a0c8db74b9..75954c64c3 100644
--- a/Mage.Sets/src/mage/cards/t/ThopterFoundry.java
+++ b/Mage.Sets/src/mage/cards/t/ThopterFoundry.java
@@ -28,14 +28,12 @@
package mage.cards.t;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.SacrificeTargetCost;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.GainLifeEffect;
-import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -44,7 +42,7 @@ import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.CardTypePredicate;
import mage.filter.predicate.permanent.TokenPredicate;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.ThopterToken;
import mage.target.common.TargetControlledPermanent;
/**
@@ -61,11 +59,7 @@ public class ThopterFoundry extends CardImpl {
}
public ThopterFoundry(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{W/B}{U}");
-
-
-
-
+ super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{W/B}{U}");
// {1}, Sacrifice a nontoken artifact: Create a 1/1 blue Thopter artifact creature token with flying. You gain 1 life.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new ThopterToken()), new GenericManaCost(1));
@@ -83,17 +77,3 @@ public class ThopterFoundry extends CardImpl {
return new ThopterFoundry(this);
}
}
-
-class ThopterToken extends Token {
-
- ThopterToken() {
- super("Thopter", "1/1 blue Thopter artifact creature token with flying");
- cardType.add(CardType.CREATURE);
- cardType.add(CardType.ARTIFACT);
- color.setBlue(true);
- subtype.add("Thopter");
- power = new MageInt(1);
- toughness = new MageInt(1);
- this.addAbility(FlyingAbility.getInstance());
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/t/Thunderheads.java b/Mage.Sets/src/mage/cards/t/Thunderheads.java
index c9c33c5d0c..8286b1dd57 100644
--- a/Mage.Sets/src/mage/cards/t/Thunderheads.java
+++ b/Mage.Sets/src/mage/cards/t/Thunderheads.java
@@ -28,19 +28,16 @@
package mage.cards.t;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.keyword.DefenderAbility;
-import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.ReplicateAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.game.Game;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.WeirdToken;
/**
*
@@ -49,7 +46,7 @@ import mage.game.permanent.token.Token;
public class Thunderheads extends CardImpl {
public Thunderheads(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{U}");
+ super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{U}");
// Replicate {2}{U}
this.addAbility(new ReplicateAbility(this, "{2}{U}"));
@@ -93,17 +90,3 @@ class ThunderheadsEffect extends OneShotEffect {
return false;
}
}
-
-class WeirdToken extends Token {
-
- WeirdToken() {
- super("Weird", "3/3 blue Weird create token with defender and flying");
- cardType.add(CardType.CREATURE);
- color.setBlue(true);
- subtype.add("Weird");
- power = new MageInt(3);
- toughness = new MageInt(3);
- this.addAbility(DefenderAbility.getInstance());
- this.addAbility(FlyingAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/t/TidalWave.java b/Mage.Sets/src/mage/cards/t/TidalWave.java
index e17d496d35..b24346e8ab 100644
--- a/Mage.Sets/src/mage/cards/t/TidalWave.java
+++ b/Mage.Sets/src/mage/cards/t/TidalWave.java
@@ -28,12 +28,10 @@
package mage.cards.t;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.SacrificeTargetEffect;
-import mage.abilities.keyword.DefenderAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -41,6 +39,7 @@ import mage.constants.Outcome;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.game.permanent.token.Token;
+import mage.game.permanent.token.TidalWaveWallToken;
import mage.target.targetpointer.FixedTarget;
/**
@@ -50,7 +49,7 @@ import mage.target.targetpointer.FixedTarget;
public class TidalWave extends CardImpl {
public TidalWave(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{U}");
+ super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{U}");
// Create a 5/5 blue Wall creature token with defender. Sacrifice it at the beginning of the next end step.
this.getSpellAbility().addEffect(new TidalWaveEffect());
@@ -84,7 +83,7 @@ class TidalWaveEffect extends OneShotEffect {
@Override
public boolean apply(Game game, Ability source) {
- Token token = new WallToken();
+ Token token = new TidalWaveWallToken();
if (token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId())) {
for (UUID tokenId : token.getLastAddedTokenIds()) {
Permanent tokenPermanent = game.getPermanent(tokenId);
@@ -99,16 +98,3 @@ class TidalWaveEffect extends OneShotEffect {
return false;
}
}
-
-class WallToken extends Token {
-
- WallToken() {
- super("Wall", "5/5 blue Wall creature token with defender");
- cardType.add(CardType.CREATURE);
- color.setBlue(true);
- subtype.add("Wall");
- power = new MageInt(5);
- toughness = new MageInt(5);
- this.addAbility(DefenderAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/t/TitanForge.java b/Mage.Sets/src/mage/cards/t/TitanForge.java
index aebb7efcbd..e4064612ba 100644
--- a/Mage.Sets/src/mage/cards/t/TitanForge.java
+++ b/Mage.Sets/src/mage/cards/t/TitanForge.java
@@ -25,13 +25,9 @@
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
-
package mage.cards.t;
import java.util.UUID;
-
-import mage.constants.CardType;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.RemoveCountersSourceCost;
@@ -41,9 +37,10 @@ import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.constants.CardType;
import mage.constants.Zone;
import mage.counters.CounterType;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.TitanForgeGolemToken;
/**
*
@@ -51,8 +48,8 @@ import mage.game.permanent.token.Token;
*/
public class TitanForge extends CardImpl {
- public TitanForge (UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{3}");
+ public TitanForge(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}");
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.CHARGE.createInstance()), new GenericManaCost(3));
ability.addCost(new TapSourceCost());
this.addAbility(ability);
@@ -63,7 +60,7 @@ public class TitanForge extends CardImpl {
}
- public TitanForge (final TitanForge card) {
+ public TitanForge(final TitanForge card) {
super(card);
}
@@ -73,14 +70,3 @@ public class TitanForge extends CardImpl {
}
}
-
-class TitanForgeGolemToken extends Token {
- TitanForgeGolemToken() {
- super("Golem", "9/9 colorless Golem artifact creature token");
- cardType.add(CardType.ARTIFACT);
- cardType.add(CardType.CREATURE);
- subtype.add("Golem");
- power = new MageInt(9);
- toughness = new MageInt(9);
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/t/TitaniaProtectorOfArgoth.java b/Mage.Sets/src/mage/cards/t/TitaniaProtectorOfArgoth.java
index 861d3ae86e..73abc5d9f2 100644
--- a/Mage.Sets/src/mage/cards/t/TitaniaProtectorOfArgoth.java
+++ b/Mage.Sets/src/mage/cards/t/TitaniaProtectorOfArgoth.java
@@ -27,8 +27,8 @@
*/
package mage.cards.t;
+import java.util.UUID;
import mage.MageInt;
-import mage.ObjectColor;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.common.PutIntoGraveFromBattlefieldAllTriggeredAbility;
@@ -42,11 +42,9 @@ import mage.constants.TargetController;
import mage.filter.common.FilterLandCard;
import mage.filter.common.FilterLandPermanent;
import mage.filter.predicate.permanent.ControllerPredicate;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.TitaniaProtectorOfArgothElementalToken;
import mage.target.common.TargetCardInYourGraveyard;
-import java.util.UUID;
-
/**
*
* @author LevelX2
@@ -60,7 +58,7 @@ public class TitaniaProtectorOfArgoth extends CardImpl {
}
public TitaniaProtectorOfArgoth(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{G}{G}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}{G}");
addSuperType(SuperType.LEGENDARY);
this.subtype.add("Elemental");
@@ -87,17 +85,3 @@ public class TitaniaProtectorOfArgoth extends CardImpl {
return new TitaniaProtectorOfArgoth(this);
}
}
-
-class TitaniaProtectorOfArgothElementalToken extends Token {
-
- TitaniaProtectorOfArgothElementalToken() {
- super("Elemental", "5/3 green Elemental creature token");
- this.setOriginalExpansionSetCode("C14");
- this.cardType.add(CardType.CREATURE);
- this.color = ObjectColor.GREEN;
- this.subtype.add("Elemental");
-
- this.power = new MageInt(5);
- this.toughness = new MageInt(3);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/t/TolsimirWolfblood.java b/Mage.Sets/src/mage/cards/t/TolsimirWolfblood.java
index ab3783ebd8..c2bc07fb26 100644
--- a/Mage.Sets/src/mage/cards/t/TolsimirWolfblood.java
+++ b/Mage.Sets/src/mage/cards/t/TolsimirWolfblood.java
@@ -27,6 +27,7 @@
*/
package mage.cards.t;
+import java.util.UUID;
import mage.MageInt;
import mage.ObjectColor;
import mage.abilities.common.SimpleActivatedAbility;
@@ -40,9 +41,7 @@ import mage.constants.*;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.ColorPredicate;
import mage.filter.predicate.permanent.ControllerPredicate;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.VojaToken;
/**
*
@@ -86,18 +85,3 @@ public class TolsimirWolfblood extends CardImpl {
return new TolsimirWolfblood(this);
}
}
-
-class VojaToken extends Token {
-
- public VojaToken() {
- super("Voja", "legendary 2/2 green and white Wolf creature token named Voja");
- this.cardType.add(CardType.CREATURE);
- addSuperType(SuperType.LEGENDARY);
- this.subtype.add("Wolf");
-
- this.color.setGreen(true);
- this.color.setWhite(true);
- this.power = new MageInt(2);
- this.toughness = new MageInt(2);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/t/TombOfUrami.java b/Mage.Sets/src/mage/cards/t/TombOfUrami.java
index 2d564d52c0..0ac7e519c7 100644
--- a/Mage.Sets/src/mage/cards/t/TombOfUrami.java
+++ b/Mage.Sets/src/mage/cards/t/TombOfUrami.java
@@ -28,7 +28,6 @@
package mage.cards.t;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.Cost;
@@ -37,7 +36,6 @@ import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.DamageControllerEffect;
-import mage.abilities.keyword.FlyingAbility;
import mage.abilities.mana.BlackManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@@ -47,7 +45,7 @@ import mage.constants.Zone;
import mage.filter.common.FilterControlledLandPermanent;
import mage.game.Game;
import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.UramiToken;
/**
*
@@ -114,20 +112,3 @@ class SacrificeAllLandCost extends CostImpl {
}
}
-
-class UramiToken extends Token {
-
- public UramiToken() {
- super("Urami", "legendary 5/5 black Demon Spirit creature token with flying named Urami");
- cardType.add(CardType.CREATURE);
- subtype.add("Demon");
- subtype.add("Spirit");
- addSuperType(SuperType.LEGENDARY);
-
- color.setBlack(true);
- power = new MageInt(5);
- toughness = new MageInt(5);
-
- this.addAbility(FlyingAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/t/ToothAndClaw.java b/Mage.Sets/src/mage/cards/t/ToothAndClaw.java
index d849f51832..df7d0b661c 100644
--- a/Mage.Sets/src/mage/cards/t/ToothAndClaw.java
+++ b/Mage.Sets/src/mage/cards/t/ToothAndClaw.java
@@ -28,16 +28,14 @@
package mage.cards.t;
import java.util.UUID;
-
-import mage.constants.CardType;
-import mage.MageInt;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.SacrificeTargetCost;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.constants.CardType;
import mage.constants.Zone;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.CarnivoreToken;
import mage.target.common.TargetControlledCreaturePermanent;
/**
@@ -47,7 +45,7 @@ import mage.target.common.TargetControlledCreaturePermanent;
public class ToothAndClaw extends CardImpl {
public ToothAndClaw(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{R}");
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{R}");
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new CarnivoreToken(), 1), new SacrificeTargetCost(new TargetControlledCreaturePermanent(2))));
}
@@ -61,14 +59,3 @@ public class ToothAndClaw extends CardImpl {
return new ToothAndClaw(this);
}
}
-
-class CarnivoreToken extends Token {
- CarnivoreToken() {
- super("Carnivore", "3/1 red Beast creature token");
- cardType.add(CardType.CREATURE);
- color.setRed(true);
- subtype.add("Beast");
- power = new MageInt(3);
- toughness = new MageInt(1);
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/t/Triskelavus.java b/Mage.Sets/src/mage/cards/t/Triskelavus.java
index eecfd5f98d..b6e26f800f 100644
--- a/Mage.Sets/src/mage/cards/t/Triskelavus.java
+++ b/Mage.Sets/src/mage/cards/t/Triskelavus.java
@@ -33,10 +33,8 @@ import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.RemoveCountersSourceCost;
-import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
@@ -44,8 +42,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
import mage.counters.CounterType;
-import mage.game.permanent.token.Token;
-import mage.target.common.TargetCreatureOrPlayer;
+import mage.game.permanent.token.TriskelaviteToken;
/**
*
@@ -54,7 +51,7 @@ import mage.target.common.TargetCreatureOrPlayer;
public class Triskelavus extends CardImpl {
public Triskelavus(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{7}");
+ super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{7}");
this.subtype.add("Construct");
this.power = new MageInt(1);
this.toughness = new MageInt(1);
@@ -80,22 +77,3 @@ public class Triskelavus extends CardImpl {
return new Triskelavus(this);
}
}
-
-class TriskelaviteToken extends Token {
-
- public TriskelaviteToken() {
- super("Triskelavite", "1/1 colorless Triskelavite artifact creature token with flying. It has \"Sacrifice this creature: This creature deals 1 damage to target creature or player.\"");
- this.setOriginalExpansionSetCode("TSP");
- cardType.add(CardType.ARTIFACT);
- cardType.add(CardType.CREATURE);
- subtype.add("Triskelavite");
- power = new MageInt(1);
- toughness = new MageInt(1);
-
- Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new SacrificeSourceCost());
- ability.addTarget(new TargetCreatureOrPlayer());
- this.addAbility(ability);
-
- addAbility(FlyingAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/t/TrostanisSummoner.java b/Mage.Sets/src/mage/cards/t/TrostanisSummoner.java
index 1a01038f3e..13e5b66f41 100644
--- a/Mage.Sets/src/mage/cards/t/TrostanisSummoner.java
+++ b/Mage.Sets/src/mage/cards/t/TrostanisSummoner.java
@@ -32,13 +32,12 @@ import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.game.permanent.token.CentaurToken;
import mage.game.permanent.token.KnightToken;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.RhinoToken;
/**
*
@@ -71,17 +70,3 @@ public class TrostanisSummoner extends CardImpl {
return new TrostanisSummoner(this);
}
}
-
-class RhinoToken extends Token {
-
- public RhinoToken() {
- super("Rhino", "4/4 green Rhino creature token with trample");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- subtype.add("Rhino");
- power = new MageInt(4);
- toughness = new MageInt(4);
- addAbility(TrampleAbility.getInstance());
- setOriginalExpansionSetCode("RTR");
- }
-}
diff --git a/Mage.Sets/src/mage/cards/t/TuktukTheExplorer.java b/Mage.Sets/src/mage/cards/t/TuktukTheExplorer.java
index cbee92a6a6..22459beb08 100644
--- a/Mage.Sets/src/mage/cards/t/TuktukTheExplorer.java
+++ b/Mage.Sets/src/mage/cards/t/TuktukTheExplorer.java
@@ -25,19 +25,18 @@
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
-
package mage.cards.t;
import java.util.UUID;
-import mage.constants.CardType;
import mage.MageInt;
import mage.abilities.common.DiesTriggeredAbility;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.keyword.HasteAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.constants.CardType;
import mage.constants.SuperType;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.TuktukTheReturnedToken;
/**
*
@@ -45,8 +44,8 @@ import mage.game.permanent.token.Token;
*/
public class TuktukTheExplorer extends CardImpl {
- public TuktukTheExplorer (UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{R}");
+ public TuktukTheExplorer(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}");
addSuperType(SuperType.LEGENDARY);
this.subtype.add("Goblin");
@@ -56,7 +55,7 @@ public class TuktukTheExplorer extends CardImpl {
this.addAbility(new DiesTriggeredAbility(new CreateTokenEffect(new TuktukTheReturnedToken(expansionSetCode))));
}
- public TuktukTheExplorer (final TuktukTheExplorer card) {
+ public TuktukTheExplorer(final TuktukTheExplorer card) {
super(card);
}
@@ -66,17 +65,3 @@ public class TuktukTheExplorer extends CardImpl {
}
}
-
-class TuktukTheReturnedToken extends Token {
-
- TuktukTheReturnedToken(String setCode) {
- super("Tuktuk the Returned", "legendary 5/5 colorless Goblin Golem artifact creature token");
- setOriginalExpansionSetCode(setCode);
- cardType.add(CardType.ARTIFACT);
- cardType.add(CardType.CREATURE);
- addSuperType(SuperType.LEGENDARY);
- subtype.add("Goblin");
- power = new MageInt(5);
- toughness = new MageInt(5);
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/toupdate.bat b/Mage.Sets/src/mage/cards/toupdate.bat
new file mode 100644
index 0000000000..7ba8e297a0
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/toupdate.bat
@@ -0,0 +1,258 @@
+@echo off
+mkdir update
+mklink update\AdmiralAckbar.java ..\A\AdmiralAckbar.java
+mklink update\AerieWorshippers.java ..\A\AerieWorshippers.java
+mklink update\AkkiLavarunner.java ..\A\AkkiLavarunner.java
+mklink update\AkoumStonewaker.java ..\A\AkoumStonewaker.java
+mklink update\AkroanCrusader.java ..\A\AkroanCrusader.java
+mklink update\AlliedReinforcements.java ..\A\AlliedReinforcements.java
+mklink update\ArchitectOfTheUntamed.java ..\A\ArchitectOfTheUntamed.java
+mklink update\BalduvianDead.java ..\B\BalduvianDead.java
+mklink update\BanthaHerd.java ..\B\BanthaHerd.java
+mklink update\BaruFistOfKrosa.java ..\B\BaruFistOfKrosa.java
+mklink update\BearsCompanion.java ..\B\BearsCompanion.java
+mklink update\BeckonApparition.java ..\B\BeckonApparition.java
+mklink update\BloodlineKeeper.java ..\B\BloodlineKeeper.java
+mklink update\BorisDevilboon.java ..\B\BorisDevilboon.java
+mklink update\BottleOfSuleiman.java ..\B\BottleOfSuleiman.java
+mklink update\BreedingPit.java ..\B\BreedingPit.java
+mklink update\BreyaEtheriumShaper.java ..\B\BreyaEtheriumShaper.java
+mklink update\BrindleShoat.java ..\B\BrindleShoat.java
+mklink update\BroodKeeper.java ..\B\BroodKeeper.java
+mklink update\BudokaGardener.java ..\B\BudokaGardener.java
+mklink update\BudokaPupil.java ..\B\BudokaPupil.java
+mklink update\BushiTenderfoot.java ..\B\BushiTenderfoot.java
+mklink update\CallOfTheNightwing.java ..\C\CallOfTheNightwing.java
+mklink update\CallTheSkybreaker.java ..\C\CallTheSkybreaker.java
+mklink update\CallowJushi.java ..\C\CallowJushi.java
+mklink update\CaribouRange.java ..\C\CaribouRange.java
+mklink update\ChasmSkulker.java ..\C\ChasmSkulker.java
+mklink update\Cloudseeder.java ..\C\Cloudseeder.java
+mklink update\CoralBarrier.java ..\C\CoralBarrier.java
+mklink update\Corpseweft.java ..\C\Corpseweft.java
+mklink update\CreakwoodLiege.java ..\C\CreakwoodLiege.java
+mklink update\CribSwap.java ..\C\CribSwap.java
+mklink update\CrushOfTentacles.java ..\C\CrushOfTentacles.java
+mklink update\CunningBandit.java ..\C\CunningBandit.java
+mklink update\CurseOfTheSwine.java ..\C\CurseOfTheSwine.java
+mklink update\DarettiIngeniousIconoclast.java ..\D\DarettiIngeniousIconoclast.java
+mklink update\DarkDepths.java ..\D\DarkDepths.java
+mklink update\DaxosTheReturned.java ..\D\DaxosTheReturned.java
+mklink update\DeadlyGrub.java ..\D\DeadlyGrub.java
+mklink update\DeathpactAngel.java ..\D\DeathpactAngel.java
+mklink update\DesolationTwin.java ..\D\DesolationTwin.java
+mklink update\DevastatingSummons.java ..\D\DevastatingSummons.java
+mklink update\DinOfTheFireherd.java ..\D\DinOfTheFireherd.java
+mklink update\Dovescape.java ..\D\Dovescape.java
+mklink update\DragonBroodmother.java ..\D\DragonBroodmother.java
+mklink update\DragonEgg.java ..\D\DragonEgg.java
+mklink update\DuneBroodNephilim.java ..\D\DuneBroodNephilim.java
+mklink update\ElementalAppeal.java ..\E\ElementalAppeal.java
+mklink update\ElementalMastery.java ..\E\ElementalMastery.java
+mklink update\ErayoSoratamiAscendant.java ..\E\ErayoSoratamiAscendant.java
+mklink update\EyesOfTheWisent.java ..\E\EyesOfTheWisent.java
+mklink update\FableOfWolfAndOwl.java ..\F\FableOfWolfAndOwl.java
+mklink update\FaithfulSquire.java ..\F\FaithfulSquire.java
+mklink update\FeudkillersVerdict.java ..\F\FeudkillersVerdict.java
+mklink update\FirecatBlitz.java ..\F\FirecatBlitz.java
+mklink update\Flamewright.java ..\F\Flamewright.java
+mklink update\FleshCarver.java ..\F\FleshCarver.java
+mklink update\FlurryOfHorns.java ..\F\FlurryOfHorns.java
+mklink update\FlurryOfWings.java ..\F\FlurryOfWings.java
+mklink update\ForlornPseudamma.java ..\F\ForlornPseudamma.java
+mklink update\FreyaliseLlanowarsFury.java ..\F\FreyaliseLlanowarsFury.java
+mklink update\GargoyleCastle.java ..\G\GargoyleCastle.java
+mklink update\GarrukApexPredator.java ..\G\GarrukApexPredator.java
+mklink update\GeistSnatch.java ..\G\GeistSnatch.java
+mklink update\GiantCaterpillar.java ..\G\GiantCaterpillar.java
+mklink update\Giantbaiting.java ..\G\Giantbaiting.java
+mklink update\GoblinKaboomist.java ..\G\GoblinKaboomist.java
+mklink update\GoblinScouts.java ..\G\GoblinScouts.java
+mklink update\GoblinSpymaster.java ..\G\GoblinSpymaster.java
+mklink update\GoblinTrenches.java ..\G\GoblinTrenches.java
+mklink update\GodFavoredGeneral.java ..\G\GodFavoredGeneral.java
+mklink update\Godsire.java ..\G\Godsire.java
+mklink update\GoldmeadowLookout.java ..\G\GoldmeadowLookout.java
+mklink update\GriffinGuide.java ..\G\GriffinGuide.java
+mklink update\GrovetenderDruids.java ..\G\GrovetenderDruids.java
+mklink update\GutterGrime.java ..\G\GutterGrime.java
+mklink update\HammerOfPurphoros.java ..\H\HammerOfPurphoros.java
+mklink update\HanweirGarrison.java ..\H\HanweirGarrison.java
+mklink update\HapatraVizierOfPoisons.java ..\H\HapatraVizierOfPoisons.java
+mklink update\HauntedAngel.java ..\H\HauntedAngel.java
+mklink update\HazezonTamar.java ..\H\HazezonTamar.java
+mklink update\HellionCrucible.java ..\H\HellionCrucible.java
+mklink update\HellionEruption.java ..\H\HellionEruption.java
+mklink update\HelmOfKaldra.java ..\H\HelmOfKaldra.java
+mklink update\HiredMuscle.java ..\H\HiredMuscle.java
+mklink update\HomaridSpawningBed.java ..\H\HomaridSpawningBed.java
+mklink update\HomuraHumanAscendant.java ..\H\HomuraHumanAscendant.java
+mklink update\HoofprintsOfTheStag.java ..\H\HoofprintsOfTheStag.java
+mklink update\HorncallersChant.java ..\H\HorncallersChant.java
+mklink update\HornetNest.java ..\H\HornetNest.java
+mklink update\HornetQueen.java ..\H\HornetQueen.java
+mklink update\HourOfNeed.java ..\H\HourOfNeed.java
+mklink update\HuntedDragon.java ..\H\HuntedDragon.java
+mklink update\HuntedHorror.java ..\H\HuntedHorror.java
+mklink update\HuntedLammasu.java ..\H\HuntedLammasu.java
+mklink update\HuntedTroll.java ..\H\HuntedTroll.java
+mklink update\HydraBroodmaster.java ..\H\HydraBroodmaster.java
+mklink update\InfernalGenesis.java ..\I\InfernalGenesis.java
+mklink update\InitiateOfBlood.java ..\I\InitiateOfBlood.java
+mklink update\IronFistOfTheEmpire.java ..\I\IronFistOfTheEmpire.java
+mklink update\JabbaTheHutt.java ..\J\JabbaTheHutt.java
+mklink update\JeditOjanenOfEfrava.java ..\J\JeditOjanenOfEfrava.java
+mklink update\JoinTheRanks.java ..\J\JoinTheRanks.java
+mklink update\JunglePatrol.java ..\J\JunglePatrol.java
+mklink update\JushiApprentice.java ..\J\JushiApprentice.java
+mklink update\KalitasBloodchiefOfGhet.java ..\K\KalitasBloodchiefOfGhet.java
+mklink update\KalonianTwingrove.java ..\K\KalonianTwingrove.java
+mklink update\KariZevSkyshipRaider.java ..\K\KariZevSkyshipRaider.java
+mklink update\KazuulTyrantOfTheCliffs.java ..\K\KazuulTyrantOfTheCliffs.java
+mklink update\KherKeep.java ..\K\KherKeep.java
+mklink update\KingMacarTheGoldCursed.java ..\K\KingMacarTheGoldCursed.java
+mklink update\KioraMasterOfTheDepths.java ..\K\KioraMasterOfTheDepths.java
+mklink update\KioraTheCrashingWave.java ..\K\KioraTheCrashingWave.java
+mklink update\KitsuneMystic.java ..\K\KitsuneMystic.java
+mklink update\KuonOgreAscendant.java ..\K\KuonOgreAscendant.java
+mklink update\LeafdrakeRoost.java ..\L\LeafdrakeRoost.java
+mklink update\LichLordOfUnx.java ..\L\LichLordOfUnx.java
+mklink update\LiegeOfTheTangle.java ..\L\LiegeOfTheTangle.java
+mklink update\LinvalaThePreserver.java ..\L\LinvalaThePreserver.java
+mklink update\LlanowarMentor.java ..\L\LlanowarMentor.java
+mklink update\LordOfLineage.java ..\L\LordOfLineage.java
+mklink update\LullmageMentor.java ..\L\LullmageMentor.java
+mklink update\MarathWillOfTheWild.java ..\M\MarathWillOfTheWild.java
+mklink update\MarduStrikeLeader.java ..\M\MarduStrikeLeader.java
+mklink update\MasterOfWaves.java ..\M\MasterOfWaves.java
+mklink update\MelokuTheCloudedMirror.java ..\M\MelokuTheCloudedMirror.java
+mklink update\MercyKilling.java ..\M\MercyKilling.java
+mklink update\MetallurgicSummonings.java ..\M\MetallurgicSummonings.java
+mklink update\Metrognome.java ..\M\Metrognome.java
+mklink update\MitoticSlime.java ..\M\MitoticSlime.java
+mklink update\MoltenBirth.java ..\M\MoltenBirth.java
+mklink update\MonasteryMentor.java ..\M\MonasteryMentor.java
+mklink update\MonkeyCage.java ..\M\MonkeyCage.java
+mklink update\MysticGenesis.java ..\M\MysticGenesis.java
+mklink update\NahiriTheLithomancer.java ..\N\NahiriTheLithomancer.java
+mklink update\NestOfScarabs.java ..\N\NestOfScarabs.java
+mklink update\NezumiGraverobber.java ..\N\NezumiGraverobber.java
+mklink update\NezumiShortfang.java ..\N\NezumiShortfang.java
+mklink update\NissaSageAnimist.java ..\N\NissaSageAnimist.java
+mklink update\NuisanceEngine.java ..\N\NuisanceEngine.java
+mklink update\OjutaisSummons.java ..\O\OjutaisSummons.java
+mklink update\OmnathLocusOfRage.java ..\O\OmnathLocusOfRage.java
+mklink update\OneDozenEyes.java ..\O\OneDozenEyes.java
+mklink update\OonaQueenOfTheFae.java ..\O\OonaQueenOfTheFae.java
+mklink update\Ophiomancer.java ..\O\Ophiomancer.java
+mklink update\OrderedMigration.java ..\O\OrderedMigration.java
+mklink update\OrochiEggwatcher.java ..\O\OrochiEggwatcher.java
+mklink update\OviyaPashiriSageLifecrafter.java ..\O\OviyaPashiriSageLifecrafter.java
+mklink update\OyobiWhoSplitTheHeavens.java ..\O\OyobiWhoSplitTheHeavens.java
+mklink update\PactOfTheTitan.java ..\P\PactOfTheTitan.java
+mklink update\PatagiaViper.java ..\P\PatagiaViper.java
+mklink update\Pentavus.java ..\P\Pentavus.java
+mklink update\PenumbraBobcat.java ..\P\PenumbraBobcat.java
+mklink update\PenumbraKavu.java ..\P\PenumbraKavu.java
+mklink update\PenumbraSpider.java ..\P\PenumbraSpider.java
+mklink update\PenumbraWurm.java ..\P\PenumbraWurm.java
+mklink update\PharikaGodOfAffliction.java ..\P\PharikaGodOfAffliction.java
+mklink update\PhyrexianRebirth.java ..\P\PhyrexianRebirth.java
+mklink update\Pongify.java ..\P\Pongify.java
+mklink update\PredatoryAdvantage.java ..\P\PredatoryAdvantage.java
+mklink update\PrincessLeia.java ..\P\PrincessLeia.java
+mklink update\PromiseOfPower.java ..\P\PromiseOfPower.java
+mklink update\ProsshSkyraiderOfKher.java ..\P\ProsshSkyraiderOfKher.java
+mklink update\PuppetConjurer.java ..\P\PuppetConjurer.java
+mklink update\QueenMarchesa.java ..\Q\QueenMarchesa.java
+mklink update\QuestForTheGravelord.java ..\Q\QuestForTheGravelord.java
+mklink update\RakdosGuildmage.java ..\R\RakdosGuildmage.java
+mklink update\RakkaMar.java ..\R\RakkaMar.java
+mklink update\RallyTheHorde.java ..\R\RallyTheHorde.java
+mklink update\RapidHybridization.java ..\R\RapidHybridization.java
+mklink update\ReachOfBranches.java ..\R\ReachOfBranches.java
+mklink update\ReefWorm.java ..\R\ReefWorm.java
+mklink update\ReignOfThePit.java ..\R\ReignOfThePit.java
+mklink update\RenownedWeaver.java ..\R\RenownedWeaver.java
+mklink update\RevelOfTheFallenGod.java ..\R\RevelOfTheFallenGod.java
+mklink update\RhysTheRedeemed.java ..\R\RhysTheRedeemed.java
+mklink update\RiftmarkedKnight.java ..\R\RiftmarkedKnight.java
+mklink update\RiptideReplicator.java ..\R\RiptideReplicator.java
+mklink update\RiseOfEagles.java ..\R\RiseOfEagles.java
+mklink update\RiseOfTheHobgoblins.java ..\R\RiseOfTheHobgoblins.java
+mklink update\RiteOfTheRagingStorm.java ..\R\RiteOfTheRagingStorm.java
+mklink update\RitualOfTheReturned.java ..\R\RitualOfTheReturned.java
+mklink update\RocEgg.java ..\R\RocEgg.java
+mklink update\RukhEgg.java ..\R\RukhEgg.java
+mklink update\RuneTailKitsuneAscendant.java ..\R\RuneTailKitsuneAscendant.java
+mklink update\SaprolingBurst.java ..\S\SaprolingBurst.java
+mklink update\SarpadianEmpiresVolVii.java ..\S\SarpadianEmpiresVolVii.java
+mklink update\SasayaOrochiAscendant.java ..\S\SasayaOrochiAscendant.java
+mklink update\SatyrNyxSmith.java ..\S\SatyrNyxSmith.java
+mklink update\SeedGuardian.java ..\S\SeedGuardian.java
+mklink update\SekKuarDeathkeeper.java ..\S\SekKuarDeathkeeper.java
+mklink update\SengirAutocrat.java ..\S\SengirAutocrat.java
+mklink update\SengirNosferatu.java ..\S\SengirNosferatu.java
+mklink update\SerpentGenerator.java ..\S\SerpentGenerator.java
+mklink update\ShardingSphinx.java ..\S\ShardingSphinx.java
+mklink update\SkirkRidgeExhumer.java ..\S\SkirkRidgeExhumer.java
+mklink update\SkywiseTeachings.java ..\S\SkywiseTeachings.java
+mklink update\Sliversmith.java ..\S\Sliversmith.java
+mklink update\SorinLordOfInnistrad.java ..\S\SorinLordOfInnistrad.java
+mklink update\SorinSolemnVisitor.java ..\S\SorinSolemnVisitor.java
+mklink update\Sparkspitter.java ..\S\Sparkspitter.java
+mklink update\SpawningGrounds.java ..\S\SpawningGrounds.java
+mklink update\SpawningPit.java ..\S\SpawningPit.java
+mklink update\SpikeBreeder.java ..\S\SpikeBreeder.java
+mklink update\SpiritMirror.java ..\S\SpiritMirror.java
+mklink update\SpoilsOfBlood.java ..\S\SpoilsOfBlood.java
+mklink update\StitcherGeralf.java ..\S\StitcherGeralf.java
+mklink update\StitchersApprentice.java ..\S\StitchersApprentice.java
+mklink update\StoneIdolTrap.java ..\S\StoneIdolTrap.java
+mklink update\StudentOfElements.java ..\S\StudentOfElements.java
+mklink update\SubterraneanTremors.java ..\S\SubterraneanTremors.java
+mklink update\SummonersBane.java ..\S\SummonersBane.java
+mklink update\SummoningStation.java ..\S\SummoningStation.java
+mklink update\SwanSong.java ..\S\SwanSong.java
+mklink update\SylvanOffering.java ..\S\SylvanOffering.java
+mklink update\TatsumasaTheDragonsFang.java ..\T\TatsumasaTheDragonsFang.java
+mklink update\TemptWithVengeance.java ..\T\TemptWithVengeance.java
+mklink update\Tetravus.java ..\T\Tetravus.java
+mklink update\TeysaEnvoyOfGhosts.java ..\T\TeysaEnvoyOfGhosts.java
+mklink update\TezzeretTheSchemer.java ..\T\TezzeretTheSchemer.java
+mklink update\ThatcherRevolt.java ..\T\ThatcherRevolt.java
+mklink update\TheBattleOfHoth.java ..\T\TheBattleOfHoth.java
+mklink update\TheHive.java ..\T\TheHive.java
+mklink update\ThopterFoundry.java ..\T\ThopterFoundry.java
+mklink update\Thunderheads.java ..\T\Thunderheads.java
+mklink update\TidalWave.java ..\T\TidalWave.java
+mklink update\TitanForge.java ..\T\TitanForge.java
+mklink update\TitaniaProtectorOfArgoth.java ..\T\TitaniaProtectorOfArgoth.java
+mklink update\TolsimirWolfblood.java ..\T\TolsimirWolfblood.java
+mklink update\TombOfUrami.java ..\T\TombOfUrami.java
+mklink update\ToothAndClaw.java ..\T\ToothAndClaw.java
+mklink update\Triskelavus.java ..\T\Triskelavus.java
+mklink update\TrostanisSummoner.java ..\T\TrostanisSummoner.java
+mklink update\TuktukTheExplorer.java ..\T\TuktukTheExplorer.java
+mklink update\UrzasFactory.java ..\U\UrzasFactory.java
+mklink update\UtvaraHellkite.java ..\U\UtvaraHellkite.java
+mklink update\VoiceOfResurgence.java ..\V\VoiceOfResurgence.java
+mklink update\VoiceOfTheWoods.java ..\V\VoiceOfTheWoods.java
+mklink update\VolrathsLaboratory.java ..\V\VolrathsLaboratory.java
+mklink update\VraskaTheUnseen.java ..\V\VraskaTheUnseen.java
+mklink update\WaitingInTheWeeds.java ..\W\WaitingInTheWeeds.java
+mklink update\WalkerOfTheGrove.java ..\W\WalkerOfTheGrove.java
+mklink update\WallOfKelp.java ..\W\WallOfKelp.java
+mklink update\WandOfTheElements.java ..\W\WandOfTheElements.java
+mklink update\WestvaleAbbey.java ..\W\WestvaleAbbey.java
+mklink update\WestvaleCultLeader.java ..\W\WestvaleCultLeader.java
+mklink update\WingmateRoc.java ..\W\WingmateRoc.java
+mklink update\WireflyHive.java ..\W\WireflyHive.java
+mklink update\WormHarvest.java ..\W\WormHarvest.java
+mklink update\WortTheRaidmother.java ..\W\WortTheRaidmother.java
+mklink update\Wurmcalling.java ..\W\Wurmcalling.java
+mklink update\WurmcoilEngine.java ..\W\WurmcoilEngine.java
+mklink update\XenagosTheReveler.java ..\X\XenagosTheReveler.java
+mklink update\YoungPyromancer.java ..\Y\YoungPyromancer.java
+mklink update\ZektarShrineExpedition.java ..\Z\ZektarShrineExpedition.java
+mklink update\ZendikarsRoil.java ..\Z\ZendikarsRoil.java
diff --git a/Mage.Sets/src/mage/cards/u/UrzasFactory.java b/Mage.Sets/src/mage/cards/u/UrzasFactory.java
index 59e1c41ff0..c0e88b5dbf 100644
--- a/Mage.Sets/src/mage/cards/u/UrzasFactory.java
+++ b/Mage.Sets/src/mage/cards/u/UrzasFactory.java
@@ -28,9 +28,6 @@
package mage.cards.u;
import java.util.UUID;
-
-import mage.constants.CardType;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.TapSourceCost;
@@ -39,8 +36,9 @@ import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.mana.ColorlessManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.constants.CardType;
import mage.constants.Zone;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.AssemblyWorkerToken;
/**
*
@@ -49,7 +47,7 @@ import mage.game.permanent.token.Token;
public class UrzasFactory extends CardImpl {
public UrzasFactory(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.LAND},"");
+ super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
this.subtype.add("Urza's");
// {tap}: Add {C} to your mana pool.
@@ -69,14 +67,3 @@ public class UrzasFactory extends CardImpl {
return new UrzasFactory(this);
}
}
-
-class AssemblyWorkerToken extends Token {
- AssemblyWorkerToken() {
- super("Assembly-Worker", "2/2 colorless Assembly-Worker artifact creature token");
- cardType.add(CardType.ARTIFACT);
- cardType.add(CardType.CREATURE);
- subtype.add("Assembly-Worker");
- power = new MageInt(2);
- toughness = new MageInt(2);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/u/UtvaraHellkite.java b/Mage.Sets/src/mage/cards/u/UtvaraHellkite.java
index b4cd68ac92..52c854f4ba 100644
--- a/Mage.Sets/src/mage/cards/u/UtvaraHellkite.java
+++ b/Mage.Sets/src/mage/cards/u/UtvaraHellkite.java
@@ -27,6 +27,7 @@
*/
package mage.cards.u;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.AttacksCreatureYouControlTriggeredAbility;
import mage.abilities.effects.common.CreateTokenEffect;
@@ -36,9 +37,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.mageobject.SubtypePredicate;
-import mage.game.permanent.token.Token;
-
-import java.util.UUID;
+import mage.game.permanent.token.UtvaraHellkiteDragonToken;
/**
*
@@ -47,12 +46,13 @@ import java.util.UUID;
public class UtvaraHellkite extends CardImpl {
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Dragon you control");
+
static {
filter.add(new SubtypePredicate("Dragon"));
}
public UtvaraHellkite(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{6}{R}{R}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{6}{R}{R}");
this.subtype.add("Dragon");
this.power = new MageInt(6);
@@ -62,7 +62,7 @@ public class UtvaraHellkite extends CardImpl {
this.addAbility(FlyingAbility.getInstance());
// Whenever a Dragon you control attacks, create a 6/6 red Dragon creature token with flying.
- this.addAbility(new AttacksCreatureYouControlTriggeredAbility(new CreateTokenEffect(new UtvaraHellkiteDragonToken()),false, filter));
+ this.addAbility(new AttacksCreatureYouControlTriggeredAbility(new CreateTokenEffect(new UtvaraHellkiteDragonToken()), false, filter));
}
public UtvaraHellkite(final UtvaraHellkite card) {
@@ -73,16 +73,4 @@ public class UtvaraHellkite extends CardImpl {
public UtvaraHellkite copy() {
return new UtvaraHellkite(this);
}
- public static class UtvaraHellkiteDragonToken extends Token {
-
- private UtvaraHellkiteDragonToken() {
- super("Dragon", "6/6 red Dragon creature token with flying");
- cardType.add(CardType.CREATURE);
- color.setRed(true);
- subtype.add("Dragon");
- power = new MageInt(6);
- toughness = new MageInt(6);
- addAbility(FlyingAbility.getInstance());
- }
- }
}
diff --git a/Mage.Sets/src/mage/cards/v/VoiceOfResurgence.java b/Mage.Sets/src/mage/cards/v/VoiceOfResurgence.java
index 3b83b95d52..42b813520d 100644
--- a/Mage.Sets/src/mage/cards/v/VoiceOfResurgence.java
+++ b/Mage.Sets/src/mage/cards/v/VoiceOfResurgence.java
@@ -30,21 +30,16 @@ package mage.cards.v;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.TriggeredAbilityImpl;
-import mage.abilities.common.SimpleStaticAbility;
-import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.effects.common.continuous.SetPowerToughnessSourceEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.Duration;
import mage.constants.Zone;
-import mage.filter.common.FilterControlledCreaturePermanent;
import mage.game.Game;
-import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
+import mage.game.events.GameEvent;
import mage.game.events.ZoneChangeEvent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.VoiceOfResurgenceToken;
import mage.game.stack.Spell;
/**
@@ -54,7 +49,7 @@ import mage.game.stack.Spell;
public class VoiceOfResurgence extends CardImpl {
public VoiceOfResurgence(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{G}{W}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}{W}");
this.subtype.add("Elemental");
this.power = new MageInt(2);
@@ -120,21 +115,3 @@ class VoiceOfResurgenceTriggeredAbility extends TriggeredAbilityImpl {
return new VoiceOfResurgenceTriggeredAbility(this);
}
}
-
-class VoiceOfResurgenceToken extends Token {
-
- public VoiceOfResurgenceToken() {
- super("Elemental", "X/X green and white Elemental creature with with \"This creature's power and toughness are each equal to the number of creatures you control.");
- setOriginalExpansionSetCode("DGM");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- color.setWhite(true);
- subtype.add("Elemental");
-
- power = new MageInt(0);
- toughness = new MageInt(0);
-
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SetPowerToughnessSourceEffect(
- new PermanentsOnBattlefieldCount(new FilterControlledCreaturePermanent()), Duration.EndOfGame)));
- }
-}
diff --git a/Mage.Sets/src/mage/cards/v/VoiceOfTheWoods.java b/Mage.Sets/src/mage/cards/v/VoiceOfTheWoods.java
index 7dacf2433c..25ee1de9f0 100644
--- a/Mage.Sets/src/mage/cards/v/VoiceOfTheWoods.java
+++ b/Mage.Sets/src/mage/cards/v/VoiceOfTheWoods.java
@@ -33,7 +33,6 @@ import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.TapTargetCost;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -42,7 +41,7 @@ import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.filter.predicate.permanent.TappedPredicate;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.VoiceOfTheWoodsElementalToken;
import mage.target.common.TargetControlledPermanent;
/**
@@ -59,7 +58,7 @@ public class VoiceOfTheWoods extends CardImpl {
}
public VoiceOfTheWoods(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{G}{G}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}{G}");
this.subtype.add("Elf");
this.power = new MageInt(2);
@@ -68,7 +67,7 @@ public class VoiceOfTheWoods extends CardImpl {
// Tap five untapped Elves you control: Create a 7/7 green Elemental creature token with trample.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
new CreateTokenEffect(new VoiceOfTheWoodsElementalToken()),
- new TapTargetCost(new TargetControlledPermanent(5,5, filter, false)));
+ new TapTargetCost(new TargetControlledPermanent(5, 5, filter, false)));
this.addAbility(ability);
}
@@ -81,19 +80,3 @@ public class VoiceOfTheWoods extends CardImpl {
return new VoiceOfTheWoods(this);
}
}
-
-class VoiceOfTheWoodsElementalToken extends Token {
-
- VoiceOfTheWoodsElementalToken() {
- super("Elemental", "7/7 green Elemental creature token with trample");
- this.setOriginalExpansionSetCode("EVG");
- cardType.add(CardType.CREATURE);
- subtype.add("Elemental");
-
- color.setGreen(true);
- power = new MageInt(7);
- toughness = new MageInt(7);
-
- addAbility(TrampleAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/v/VolrathsLaboratory.java b/Mage.Sets/src/mage/cards/v/VolrathsLaboratory.java
index 2540528357..a0e7e9948b 100644
--- a/Mage.Sets/src/mage/cards/v/VolrathsLaboratory.java
+++ b/Mage.Sets/src/mage/cards/v/VolrathsLaboratory.java
@@ -28,7 +28,6 @@
package mage.cards.v;
import java.util.UUID;
-import mage.MageInt;
import mage.ObjectColor;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility;
@@ -46,6 +45,7 @@ import mage.constants.Outcome;
import mage.constants.Zone;
import mage.game.Game;
import mage.game.permanent.token.Token;
+import mage.game.permanent.token.VolrathsLaboratoryToken;
/**
*
@@ -54,7 +54,7 @@ import mage.game.permanent.token.Token;
public class VolrathsLaboratory extends CardImpl {
public VolrathsLaboratory(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{5}");
+ super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{5}");
// As Volrath's Laboratory enters the battlefield, choose a color and a creature type.
Ability ability = new EntersBattlefieldAbility(new ChooseColorEffect(Outcome.Neutral));
@@ -103,19 +103,3 @@ class VolrathsLaboratoryEffect extends OneShotEffect {
return token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId());
}
}
-
-class VolrathsLaboratoryToken extends Token {
-
- VolrathsLaboratoryToken(ObjectColor color, String type) {
- super(type, "2/2 creature token of the chosen color and type");
- cardType.add(CardType.CREATURE);
- if (color != null) {
- this.color.setColor(color);
- }
- if (type != null) {
- subtype.add(type);
- }
- power = new MageInt(2);
- toughness = new MageInt(2);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/v/VraskaTheUnseen.java b/Mage.Sets/src/mage/cards/v/VraskaTheUnseen.java
index 2c20318561..41e4f823d7 100644
--- a/Mage.Sets/src/mage/cards/v/VraskaTheUnseen.java
+++ b/Mage.Sets/src/mage/cards/v/VraskaTheUnseen.java
@@ -28,17 +28,14 @@
package mage.cards.v;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.LoyaltyAbility;
import mage.abilities.TriggeredAbilityImpl;
-import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
import mage.abilities.common.PlanswalkerEntersWithLoyalityCountersAbility;
import mage.abilities.effects.ContinuousEffectImpl;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.DestroyTargetEffect;
-import mage.abilities.effects.common.LoseGameTargetPlayerEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -49,10 +46,10 @@ import mage.constants.SubLayer;
import mage.constants.Zone;
import mage.game.Game;
import mage.game.events.DamagedPlaneswalkerEvent;
-import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
+import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.AssassinToken;
import mage.target.common.TargetNonlandPermanent;
import mage.target.targetpointer.FixedTarget;
@@ -70,7 +67,7 @@ import mage.target.targetpointer.FixedTarget;
public class VraskaTheUnseen extends CardImpl {
public VraskaTheUnseen(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{3}{B}{G}");
+ super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{3}{B}{G}");
this.subtype.add("Vraska");
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(5));
@@ -146,19 +143,6 @@ class VraskaTheUnseenGainAbilityEffect extends ContinuousEffectImpl {
}
}
-class AssassinToken extends Token {
-
- AssassinToken() {
- super("Assassin", "1/1 black Assassin creature tokens with \"Whenever this creature deals combat damage to a player, that player loses the game.\"");
- cardType.add(CardType.CREATURE);
- color.setBlack(true);
- subtype.add("Assassin");
- power = new MageInt(1);
- toughness = new MageInt(1);
- addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new LoseGameTargetPlayerEffect(), false, true));
- }
-}
-
class VraskaTheUnseenTriggeredAbility extends TriggeredAbilityImpl {
public VraskaTheUnseenTriggeredAbility() {
diff --git a/Mage.Sets/src/mage/cards/w/WaitingInTheWeeds.java b/Mage.Sets/src/mage/cards/w/WaitingInTheWeeds.java
index f77aadb096..7a8bb9165f 100644
--- a/Mage.Sets/src/mage/cards/w/WaitingInTheWeeds.java
+++ b/Mage.Sets/src/mage/cards/w/WaitingInTheWeeds.java
@@ -28,7 +28,6 @@
package mage.cards.w;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.cards.CardImpl;
@@ -40,6 +39,7 @@ import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.filter.predicate.permanent.TappedPredicate;
import mage.game.Game;
+import mage.game.permanent.token.WaitingInTheWeedsCatToken;
import mage.game.permanent.token.Token;
import mage.players.Player;
@@ -50,8 +50,7 @@ import mage.players.Player;
public class WaitingInTheWeeds extends CardImpl {
public WaitingInTheWeeds(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{1}{G}{G}");
-
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{G}{G}");
// Each player creates a 1/1 green Cat creature token for each untapped Forest he or she controls.
this.getSpellAbility().addEffect(new WaitingInTheWeedsEffect());
@@ -70,7 +69,7 @@ public class WaitingInTheWeeds extends CardImpl {
class WaitingInTheWeedsEffect extends OneShotEffect {
private static final FilterPermanent filter = new FilterPermanent("untapped Forest he or she controls");
-
+
static {
filter.add(new SubtypePredicate("Forest"));
filter.add(Predicates.not(new TappedPredicate()));
@@ -95,7 +94,7 @@ class WaitingInTheWeedsEffect extends OneShotEffect {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) {
- Token token = new CatToken();
+ Token token = new WaitingInTheWeedsCatToken();
int amount = game.getBattlefield().getAllActivePermanents(filter, playerId, game).size();
token.putOntoBattlefield(amount, game, source.getSourceId(), playerId);
}
@@ -104,15 +103,3 @@ class WaitingInTheWeedsEffect extends OneShotEffect {
return false;
}
}
-
-class CatToken extends Token {
-
- public CatToken() {
- super("Cat", "1/1 green Cat creature token");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- subtype.add("Cat");
- power = new MageInt(1);
- toughness = new MageInt(1);
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/w/WalkerOfTheGrove.java b/Mage.Sets/src/mage/cards/w/WalkerOfTheGrove.java
index 2d9c514056..a2dd8ea2dc 100644
--- a/Mage.Sets/src/mage/cards/w/WalkerOfTheGrove.java
+++ b/Mage.Sets/src/mage/cards/w/WalkerOfTheGrove.java
@@ -28,14 +28,14 @@
package mage.cards.w;
import java.util.UUID;
-import mage.constants.CardType;
import mage.MageInt;
import mage.abilities.common.LeavesBattlefieldTriggeredAbility;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.keyword.EvokeAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.game.permanent.token.Token;
+import mage.constants.CardType;
+import mage.game.permanent.token.WalkerOfTheGroveToken;
/**
*
@@ -44,14 +44,14 @@ import mage.game.permanent.token.Token;
public class WalkerOfTheGrove extends CardImpl {
public WalkerOfTheGrove(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{6}{G}{G}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{6}{G}{G}");
this.subtype.add("Elemental");
this.power = new MageInt(7);
this.toughness = new MageInt(7);
// When Walker of the Grove leaves the battlefield, create a 4/4 green Elemental creature token.
- this.addAbility(new LeavesBattlefieldTriggeredAbility(new CreateTokenEffect(new WalkerOfTheGroveToken(),1),false));
+ this.addAbility(new LeavesBattlefieldTriggeredAbility(new CreateTokenEffect(new WalkerOfTheGroveToken(), 1), false));
// Evoke {4}{G}
this.addAbility(new EvokeAbility(this, "{4}{G}"));
}
@@ -65,14 +65,3 @@ public class WalkerOfTheGrove extends CardImpl {
return new WalkerOfTheGrove(this);
}
}
-
-class WalkerOfTheGroveToken extends Token {
- public WalkerOfTheGroveToken() {
- super("Elemental", "4/4 green Elemental creature token");
- cardType.add(CardType.CREATURE);
- this.subtype.add("Elemental");
- this.color.setGreen(true);
- power = new MageInt(4);
- toughness = new MageInt(4);
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/w/WallOfKelp.java b/Mage.Sets/src/mage/cards/w/WallOfKelp.java
index 8bfe49ae57..7b204f8b83 100644
--- a/Mage.Sets/src/mage/cards/w/WallOfKelp.java
+++ b/Mage.Sets/src/mage/cards/w/WallOfKelp.java
@@ -39,7 +39,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.KelpToken;
/**
*
@@ -72,19 +72,3 @@ public class WallOfKelp extends CardImpl {
return new WallOfKelp(this);
}
}
-
-class KelpToken extends Token {
-
- public KelpToken() {
- super("Kelp", "0/1 blue Plant Wall creature token with defender named Kelp");
- this.setOriginalExpansionSetCode("MIR");
- cardType.add(CardType.CREATURE);
- color.setBlue(true);
- subtype.add("Plant");
- subtype.add("Wall");
- power = new MageInt(0);
- toughness = new MageInt(1);
-
- this.addAbility(DefenderAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/w/WandOfTheElements.java b/Mage.Sets/src/mage/cards/w/WandOfTheElements.java
index 5eb38d8c60..b37a56b66e 100644
--- a/Mage.Sets/src/mage/cards/w/WandOfTheElements.java
+++ b/Mage.Sets/src/mage/cards/w/WandOfTheElements.java
@@ -25,25 +25,22 @@
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
-
package mage.cards.w;
import java.util.UUID;
-
-import mage.constants.CardType;
-import mage.constants.Zone;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.SacrificeTargetCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Zone;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.mageobject.SubtypePredicate;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.WandOfTheElementsFirstToken;
+import mage.game.permanent.token.WandOfTheElementsSecondToken;
import mage.target.common.TargetControlledPermanent;
/**
@@ -60,7 +57,7 @@ public class WandOfTheElements extends CardImpl {
}
public WandOfTheElements(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{4}");
+ super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}");
Ability firstAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new WandOfTheElementsFirstToken()), new TapSourceCost());
firstAbility.addCost(new SacrificeTargetCost(new TargetControlledPermanent(islandFilter)));
this.addAbility(firstAbility);
@@ -79,28 +76,3 @@ public class WandOfTheElements extends CardImpl {
return new WandOfTheElements(this);
}
}
-
-class WandOfTheElementsFirstToken extends Token {
- public WandOfTheElementsFirstToken() {
- super("Elemental", "2/2 blue Elemental creature token with flying");
- cardType.add(CardType.CREATURE);
- this.subtype.add("Elemental");
- this.color.setBlue(true);
- power = new MageInt(2);
- toughness = new MageInt(2);
- this.addAbility(FlyingAbility.getInstance());
- }
-}
-
-
-class WandOfTheElementsSecondToken extends Token {
- public WandOfTheElementsSecondToken() {
- super("Elemental", "3/3 red Elemental creature token");
- cardType.add(CardType.CREATURE);
- this.subtype.add("Elemental");
- this.color.setRed(true);
- power = new MageInt(3);
- toughness = new MageInt(3);
- }
-}
-
diff --git a/Mage.Sets/src/mage/cards/w/WestvaleAbbey.java b/Mage.Sets/src/mage/cards/w/WestvaleAbbey.java
index ff328782b1..af59a347ad 100644
--- a/Mage.Sets/src/mage/cards/w/WestvaleAbbey.java
+++ b/Mage.Sets/src/mage/cards/w/WestvaleAbbey.java
@@ -28,7 +28,6 @@
package mage.cards.w;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.PayLifeCost;
@@ -40,13 +39,13 @@ import mage.abilities.effects.common.TransformSourceEffect;
import mage.abilities.effects.common.UntapSourceEffect;
import mage.abilities.keyword.TransformAbility;
import mage.abilities.mana.ColorlessManaAbility;
-import mage.cards.o.OrmendahlProfanePrince;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.cards.o.OrmendahlProfanePrince;
import mage.constants.CardType;
import mage.constants.Zone;
import mage.filter.common.FilterControlledCreaturePermanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.HumanClericToken;
import mage.target.common.TargetControlledPermanent;
/**
@@ -56,7 +55,7 @@ import mage.target.common.TargetControlledPermanent;
public class WestvaleAbbey extends CardImpl {
public WestvaleAbbey(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.LAND},"");
+ super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
this.transformable = true;
this.secondSideCardClazz = OrmendahlProfanePrince.class;
@@ -88,16 +87,3 @@ public class WestvaleAbbey extends CardImpl {
return new WestvaleAbbey(this);
}
}
-class HumanClericToken extends Token {
-
- public HumanClericToken() {
- super("Human Cleric", "1/1 white and black Human Cleric creature token");
- cardType.add(CardType.CREATURE);
- subtype.add("Human");
- subtype.add("Cleric");
- color.setWhite(true);
- color.setBlack(true);
- power = new MageInt(1);
- toughness = new MageInt(1);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/w/WestvaleCultLeader.java b/Mage.Sets/src/mage/cards/w/WestvaleCultLeader.java
index 4338907dd2..43c205b692 100644
--- a/Mage.Sets/src/mage/cards/w/WestvaleCultLeader.java
+++ b/Mage.Sets/src/mage/cards/w/WestvaleCultLeader.java
@@ -41,6 +41,7 @@ import mage.constants.Duration;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.common.FilterControlledCreaturePermanent;
+import mage.game.permanent.token.HumanClericToken;
/**
*
diff --git a/Mage.Sets/src/mage/cards/w/WingmateRoc.java b/Mage.Sets/src/mage/cards/w/WingmateRoc.java
index dffbd3bfa2..51fc6ab2bb 100644
--- a/Mage.Sets/src/mage/cards/w/WingmateRoc.java
+++ b/Mage.Sets/src/mage/cards/w/WingmateRoc.java
@@ -41,7 +41,7 @@ import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.WingmateRocToken;
import mage.watchers.common.PlayerAttackedWatcher;
/**
@@ -51,7 +51,7 @@ import mage.watchers.common.PlayerAttackedWatcher;
public class WingmateRoc extends CardImpl {
public WingmateRoc(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{W}{W}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}{W}");
this.subtype.add("Bird");
this.power = new MageInt(3);
@@ -80,16 +80,3 @@ public class WingmateRoc extends CardImpl {
return new WingmateRoc(this);
}
}
-
-class WingmateRocToken extends Token {
-
- WingmateRocToken() {
- super("Bird", "3/4 white Bird creature token with flying");
- cardType.add(CardType.CREATURE);
- subtype.add("Bird");
- color.setWhite(true);
- power = new MageInt(3);
- toughness = new MageInt(4);
- addAbility(FlyingAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/w/WireflyHive.java b/Mage.Sets/src/mage/cards/w/WireflyHive.java
index e843b17b29..89b9b384de 100644
--- a/Mage.Sets/src/mage/cards/w/WireflyHive.java
+++ b/Mage.Sets/src/mage/cards/w/WireflyHive.java
@@ -35,14 +35,13 @@ import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.DestroyAllEffect;
import mage.abilities.effects.common.FlipCoinEffect;
-import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
import mage.filter.FilterPermanent;
import mage.filter.predicate.mageobject.NamePredicate;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.WireflyToken;
/**
*
@@ -71,17 +70,3 @@ public class WireflyHive extends CardImpl {
return new WireflyHive(this);
}
}
-
-class WireflyToken extends Token {
-
- WireflyToken() {
- super("Wirefly", "2/2 colorless Insect artifact creature token with flying named Wirefly");
- this.setOriginalExpansionSetCode("DST");
- this.getPower().modifyBaseValue(2);
- this.getToughness().modifyBaseValue(2);
- this.getSubtype(null).add("Insect");
- this.addCardType(CardType.ARTIFACT);
- this.addCardType(CardType.CREATURE);
- this.addAbility(FlyingAbility.getInstance());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/w/WormHarvest.java b/Mage.Sets/src/mage/cards/w/WormHarvest.java
index 611c2972a6..0de345c406 100644
--- a/Mage.Sets/src/mage/cards/w/WormHarvest.java
+++ b/Mage.Sets/src/mage/cards/w/WormHarvest.java
@@ -28,7 +28,6 @@
package mage.cards.w;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.keyword.RetraceAbility;
@@ -36,7 +35,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.common.FilterLandCard;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.WormHarvestToken;
/**
*
@@ -45,7 +44,7 @@ import mage.game.permanent.token.Token;
public class WormHarvest extends CardImpl {
public WormHarvest(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{B/G}{B/G}{B/G}");
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{B/G}{B/G}{B/G}");
// Create a 1/1 black and green Worm creature token for each land card in your graveyard.
CardsInControllerGraveyardCount value = new CardsInControllerGraveyardCount(new FilterLandCard());
@@ -64,15 +63,3 @@ public class WormHarvest extends CardImpl {
return new WormHarvest(this);
}
}
-
-class WormHarvestToken extends Token {
- WormHarvestToken() {
- super("Worm", "1/1 black and green Worm creature token");
- cardType.add(CardType.CREATURE);
- color.setBlack(true);
- color.setGreen(true);
- subtype.add("Worm");
- power = new MageInt(1);
- toughness = new MageInt(1);
- }
-}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/w/WortTheRaidmother.java b/Mage.Sets/src/mage/cards/w/WortTheRaidmother.java
index c19d807ae1..2fe89eab31 100644
--- a/Mage.Sets/src/mage/cards/w/WortTheRaidmother.java
+++ b/Mage.Sets/src/mage/cards/w/WortTheRaidmother.java
@@ -27,6 +27,7 @@
*/
package mage.cards.w;
+import java.util.UUID;
import mage.MageInt;
import mage.ObjectColor;
import mage.abilities.Ability;
@@ -42,12 +43,10 @@ import mage.filter.common.FilterInstantOrSorcerySpell;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.ColorPredicate;
import mage.game.Game;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.WortTheRaidmotherToken;
import mage.game.stack.Spell;
import mage.game.stack.StackObject;
-import java.util.UUID;
-
/**
*
* @author LevelX2
@@ -55,7 +54,7 @@ import java.util.UUID;
public class WortTheRaidmother extends CardImpl {
public WortTheRaidmother(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{R/G}{R/G}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{R/G}{R/G}");
addSuperType(SuperType.LEGENDARY);
this.subtype.add("Goblin");
this.subtype.add("Shaman");
@@ -118,17 +117,3 @@ class WortGainConspireEffect extends ContinuousEffectImpl {
return true;
}
}
-
-class WortTheRaidmotherToken extends Token {
-
- public WortTheRaidmotherToken() {
- super("Goblin Warrior", "1/1 red and green Goblin Warrior creature token");
- cardType.add(CardType.CREATURE);
- color.setRed(true);
- color.setGreen(true);
- subtype.add("Goblin");
- subtype.add("Warrior");
- power = new MageInt(1);
- toughness = new MageInt(1);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/w/Wurmcalling.java b/Mage.Sets/src/mage/cards/w/Wurmcalling.java
index 4f0aefd8ab..39de00f238 100644
--- a/Mage.Sets/src/mage/cards/w/Wurmcalling.java
+++ b/Mage.Sets/src/mage/cards/w/Wurmcalling.java
@@ -28,7 +28,6 @@
package mage.cards.w;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.keyword.BuybackAbility;
@@ -37,7 +36,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.game.Game;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.WurmCallingWurmToken;
/**
*
@@ -46,7 +45,7 @@ import mage.game.permanent.token.Token;
public class Wurmcalling extends CardImpl {
public Wurmcalling(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{X}{G}");
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{G}");
// Buyback {2}{G}
this.addAbility(new BuybackAbility("{2}{G}"));
@@ -78,7 +77,7 @@ class WurmcallingEffect extends OneShotEffect {
@Override
public boolean apply(Game game, Ability source) {
int count = source.getManaCostsToPay().getX();
- WurmToken token = new WurmToken();
+ WurmCallingWurmToken token = new WurmCallingWurmToken();
token.getPower().modifyBaseValue(count);
token.getToughness().modifyBaseValue(count);
token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId());
@@ -90,14 +89,3 @@ class WurmcallingEffect extends OneShotEffect {
return new WurmcallingEffect(this);
}
}
-
-class WurmToken extends Token {
- public WurmToken() {
- super("Wurm", "X/X green Wurm creature token");
- cardType.add(CardType.CREATURE);
- color.setGreen(true);
- subtype.add("Wurm");
- power = new MageInt(0);
- toughness = new MageInt(0);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/w/WurmcoilEngine.java b/Mage.Sets/src/mage/cards/w/WurmcoilEngine.java
index 1a3140b705..0bb96afffa 100644
--- a/Mage.Sets/src/mage/cards/w/WurmcoilEngine.java
+++ b/Mage.Sets/src/mage/cards/w/WurmcoilEngine.java
@@ -37,7 +37,8 @@ import mage.abilities.keyword.LifelinkAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.Wurm1Token;
+import mage.game.permanent.token.Wurm2Token;
/**
*
@@ -71,33 +72,3 @@ public class WurmcoilEngine extends CardImpl {
}
}
-
-class Wurm1Token extends Token {
-
- public Wurm1Token(String setCode) {
- super("Wurm", "3/3 colorless Wurm artifact creature token with deathtouch");
- setOriginalExpansionSetCode(setCode);
- cardType.add(CardType.ARTIFACT);
- cardType.add(CardType.CREATURE);
- subtype.add("Wurm");
- power = new MageInt(3);
- toughness = new MageInt(3);
- this.addAbility(DeathtouchAbility.getInstance());
- }
-}
-
-class Wurm2Token extends Token {
-
- public Wurm2Token(String setCode) {
- super("Wurm", "3/3 colorless Wurm artifact creature token with lifelink");
- setOriginalExpansionSetCode(setCode);
- cardType.add(CardType.ARTIFACT);
- cardType.add(CardType.CREATURE);
- subtype.add("Wurm");
- power = new MageInt(3);
- toughness = new MageInt(3);
- this.addAbility(LifelinkAbility.getInstance());
-
- setTokenType(2); // for image
- }
-}
diff --git a/Mage.Sets/src/mage/cards/x/XenagosTheReveler.java b/Mage.Sets/src/mage/cards/x/XenagosTheReveler.java
index 0a761cd441..027d3d9b0b 100644
--- a/Mage.Sets/src/mage/cards/x/XenagosTheReveler.java
+++ b/Mage.Sets/src/mage/cards/x/XenagosTheReveler.java
@@ -30,14 +30,12 @@ package mage.cards.x;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.UUID;
-import mage.MageInt;
import mage.Mana;
import mage.abilities.Ability;
import mage.abilities.LoyaltyAbility;
import mage.abilities.common.PlanswalkerEntersWithLoyalityCountersAbility;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect;
-import mage.abilities.keyword.HasteAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.cards.Cards;
@@ -52,7 +50,7 @@ import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.CardTypePredicate;
import mage.game.Game;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.XenagosSatyrToken;
import mage.players.Player;
import mage.target.TargetCard;
@@ -63,7 +61,7 @@ import mage.target.TargetCard;
public class XenagosTheReveler extends CardImpl {
public XenagosTheReveler(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},"{2}{R}{G}");
+ super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{2}{R}{G}");
this.subtype.add("Xenagos");
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(3));
@@ -143,22 +141,6 @@ class XenagosManaEffect extends OneShotEffect {
}
}
-class XenagosSatyrToken extends Token {
-
- public XenagosSatyrToken() {
- super("Satyr", "2/2 red and green Satyr creature token with haste");
- cardType.add(CardType.CREATURE);
- color.setRed(true);
- color.setGreen(true);
- subtype.add("Satyr");
- power = new MageInt(2);
- toughness = new MageInt(2);
-
- this.addAbility(HasteAbility.getInstance());
- }
-
-}
-
class XenagosExileEffect extends OneShotEffect {
public XenagosExileEffect() {
diff --git a/Mage.Sets/src/mage/cards/y/YoungPyromancer.java b/Mage.Sets/src/mage/cards/y/YoungPyromancer.java
index abe7e2040e..84f2f5867f 100644
--- a/Mage.Sets/src/mage/cards/y/YoungPyromancer.java
+++ b/Mage.Sets/src/mage/cards/y/YoungPyromancer.java
@@ -27,6 +27,7 @@
*/
package mage.cards.y;
+import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.common.CreateTokenEffect;
@@ -36,10 +37,7 @@ import mage.constants.CardType;
import mage.filter.FilterSpell;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.CardTypePredicate;
-import mage.game.permanent.token.Token;
-import mage.util.RandomUtil;
-
-import java.util.UUID;
+import mage.game.permanent.token.YoungPyromancerElementalToken;
/**
*
@@ -56,7 +54,7 @@ public class YoungPyromancer extends CardImpl {
}
public YoungPyromancer(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{R}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}");
this.subtype.add("Human");
this.subtype.add("Shaman");
@@ -64,7 +62,7 @@ public class YoungPyromancer extends CardImpl {
this.toughness = new MageInt(1);
// Whenever you cast an instant or sorcery spell, create a 1/1 red Elemental creature token.
- this.addAbility(new SpellCastControllerTriggeredAbility(new CreateTokenEffect(new ElementalToken()), filter, false));
+ this.addAbility(new SpellCastControllerTriggeredAbility(new CreateTokenEffect(new YoungPyromancerElementalToken()), filter, false));
}
@@ -77,21 +75,4 @@ public class YoungPyromancer extends CardImpl {
return new YoungPyromancer(this);
}
- static class ElementalToken extends Token {
-
- public ElementalToken() {
- super("Elemental", "1/1 red Elemental creature");
- if (getOriginalExpansionSetCode() != null && getOriginalExpansionSetCode().equals("M14")) {
- setTokenType(RandomUtil.nextInt(2) + 1);
- }
- if (getOriginalExpansionSetCode() != null && getOriginalExpansionSetCode().equals("EMA")) {
- setTokenType(1);
- }
- cardType.add(CardType.CREATURE);
- color.setRed(true);
- subtype.add("Elemental");
- power = new MageInt(1);
- toughness = new MageInt(1);
- }
- }
-}
\ No newline at end of file
+}
diff --git a/Mage.Sets/src/mage/cards/z/ZektarShrineExpedition.java b/Mage.Sets/src/mage/cards/z/ZektarShrineExpedition.java
index 4227a03fee..6183635974 100644
--- a/Mage.Sets/src/mage/cards/z/ZektarShrineExpedition.java
+++ b/Mage.Sets/src/mage/cards/z/ZektarShrineExpedition.java
@@ -28,7 +28,6 @@
package mage.cards.z;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.LandfallAbility;
import mage.abilities.common.SimpleActivatedAbility;
@@ -37,8 +36,6 @@ import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
-import mage.abilities.keyword.HasteAbility;
-import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -46,7 +43,7 @@ import mage.constants.Outcome;
import mage.constants.Zone;
import mage.counters.CounterType;
import mage.game.Game;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.ZektarShrineElementalToken;
/**
*
@@ -55,7 +52,7 @@ import mage.game.permanent.token.Token;
public class ZektarShrineExpedition extends CardImpl {
public ZektarShrineExpedition(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{R}");
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{R}");
// Landfall - Whenever a land enters the battlefield under your control, you may put a quest counter on Zektar Shrine Expedition.
this.addAbility(new LandfallAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.QUEST.createInstance()), true));
@@ -93,27 +90,13 @@ class ZektarShrineExpeditionEffect extends OneShotEffect {
@Override
public boolean apply(Game game, Ability source) {
-
- CreateTokenEffect effect = new CreateTokenEffect(new ElementalToken());
- if(effect.apply(game, source))
- {
- effect.exileTokensCreatedAtNextEndStep(game, source);
+
+ CreateTokenEffect effect = new CreateTokenEffect(new ZektarShrineElementalToken());
+ if (effect.apply(game, source)) {
+ effect.exileTokensCreatedAtNextEndStep(game, source);
return true;
}
return false;
}
- static class ElementalToken extends Token {
-
- public ElementalToken() {
- super("Elemental", "7/1 red Elemental creature token with trample and haste");
- cardType.add(CardType.CREATURE);
- color.setRed(true);
- subtype.add("Elemental");
- power = new MageInt(7);
- toughness = new MageInt(1);
- addAbility(TrampleAbility.getInstance());
- addAbility(HasteAbility.getInstance());
- }
- }
}
diff --git a/Mage.Sets/src/mage/cards/z/ZendikarsRoil.java b/Mage.Sets/src/mage/cards/z/ZendikarsRoil.java
index b938ab8344..81b7de88fb 100644
--- a/Mage.Sets/src/mage/cards/z/ZendikarsRoil.java
+++ b/Mage.Sets/src/mage/cards/z/ZendikarsRoil.java
@@ -28,7 +28,6 @@
package mage.cards.z;
import java.util.UUID;
-import mage.MageInt;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.CreateTokenEffect;
@@ -36,7 +35,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.common.FilterLandPermanent;
-import mage.game.permanent.token.Token;
+import mage.game.permanent.token.ZendikarsRoilElementalToken;
/**
*
@@ -45,7 +44,7 @@ import mage.game.permanent.token.Token;
public class ZendikarsRoil extends CardImpl {
public ZendikarsRoil(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{G}{G}");
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{G}{G}");
// Whenever a land enters the battlefield under your control, create a 2/2 green Elemental creature token.
Effect effect = new CreateTokenEffect(new ZendikarsRoilElementalToken());
@@ -61,17 +60,3 @@ public class ZendikarsRoil extends CardImpl {
return new ZendikarsRoil(this);
}
}
-
-class ZendikarsRoilElementalToken extends Token {
-
- public ZendikarsRoilElementalToken() {
- super("Elemental", "2/2 green Elemental creature token");
- cardType.add(CardType.CREATURE);
- setOriginalExpansionSetCode("ORI");
- subtype.add("Elemental");
- color.setGreen(true);
- power = new MageInt(2);
- toughness = new MageInt(2);
- }
-
-}
diff --git a/Mage/src/main/java/mage/game/permanent/token/ATATToken.java b/Mage/src/main/java/mage/game/permanent/token/ATATToken.java
new file mode 100644
index 0000000000..73e71fa468
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/ATATToken.java
@@ -0,0 +1,51 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+*/
+
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.abilities.common.DiesTriggeredAbility;
+import mage.abilities.effects.common.CreateTokenEffect;
+
+/**
+ *
+ * @author spjspj
+ */
+public class ATATToken extends Token {
+
+ public ATATToken() {
+ super("AT-AT", "5/5 white artifact AT-AT creature tokens with \"When this creature dies, create two 1/1 white Trooper creature tokens.\"", 5, 5);
+ this.setOriginalExpansionSetCode("SWS");
+ cardType.add(CardType.CREATURE);
+ cardType.add(CardType.ARTIFACT);
+ color.setWhite(true);
+ addAbility(new DiesTriggeredAbility(new CreateTokenEffect(new TrooperToken(), 2)));
+ subtype.add("AT-AT");
+ }
+}
+
diff --git a/Mage/src/main/java/mage/game/permanent/token/AbhorrentOverlordHarpyToken.java b/Mage/src/main/java/mage/game/permanent/token/AbhorrentOverlordHarpyToken.java
new file mode 100644
index 0000000000..f1acb99180
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/AbhorrentOverlordHarpyToken.java
@@ -0,0 +1,51 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class AbhorrentOverlordHarpyToken extends Token {
+
+ public AbhorrentOverlordHarpyToken() {
+ super("Harpy", "1/1 black Harpy creature tokens with flying");
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ subtype.add("Harpy");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+
+ this.addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/AerieWorshippersBirdToken.java b/Mage/src/main/java/mage/game/permanent/token/AerieWorshippersBirdToken.java
new file mode 100644
index 0000000000..fafc54defc
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/AerieWorshippersBirdToken.java
@@ -0,0 +1,55 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+*/
+
+
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class AerieWorshippersBirdToken extends Token {
+
+ public AerieWorshippersBirdToken() {
+ super("Bird", "2/2 blue Bird enchantment creature token with flying");
+ cardType.add(CardType.ENCHANTMENT);
+ cardType.add(CardType.CREATURE);
+ color.setBlue(true);
+ subtype.add("Bird");
+ power = new MageInt(2);
+ toughness = new MageInt(2);
+ this.addAbility(FlyingAbility.getInstance());
+ this.setOriginalExpansionSetCode("BNG");
+ this.setTokenType(2);
+ }
+}
+
diff --git a/Mage/src/main/java/mage/game/permanent/token/AkoumStonewakerElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/AkoumStonewakerElementalToken.java
new file mode 100644
index 0000000000..16858815e5
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/AkoumStonewakerElementalToken.java
@@ -0,0 +1,55 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+*/
+
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.HasteAbility;
+import mage.abilities.keyword.TrampleAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class AkoumStonewakerElementalToken extends Token {
+
+ public AkoumStonewakerElementalToken() {
+ super("Elemental", "3/1 red Elemental creature token with trample and haste");
+ cardType.add(CardType.CREATURE);
+ color.setRed(true);
+ subtype.add("Elemental");
+ power = new MageInt(3);
+ toughness = new MageInt(1);
+ this.addAbility(TrampleAbility.getInstance());
+ this.addAbility(HasteAbility.getInstance());
+ this.setOriginalExpansionSetCode("BFZ");
+ this.setTokenType(1);
+ }
+}
+
diff --git a/Mage/src/main/java/mage/game/permanent/token/AkroanSoldierToken.java b/Mage/src/main/java/mage/game/permanent/token/AkroanSoldierToken.java
new file mode 100644
index 0000000000..189f1be7d3
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/AkroanSoldierToken.java
@@ -0,0 +1,50 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.HasteAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class AkroanSoldierToken extends Token {
+
+ public AkroanSoldierToken() {
+ super("Soldier", "1/1 red Soldier creature token with haste");
+ setTokenType(3);
+ cardType.add(CardType.CREATURE);
+ color.setRed(true);
+ subtype.add("Soldier");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ this.addAbility(HasteAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/AngelTombToken.java b/Mage/src/main/java/mage/game/permanent/token/AngelTombToken.java
new file mode 100644
index 0000000000..fc4ed41799
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/AngelTombToken.java
@@ -0,0 +1,51 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class AngelTombToken extends Token {
+
+ public AngelTombToken() {
+ super("", "3/3 white Angel artifact creature with flying");
+ cardType.add(CardType.ARTIFACT);
+ cardType.add(CardType.CREATURE);
+ color.setWhite(true);
+
+ subtype.add("Angel");
+ power = new MageInt(3);
+ toughness = new MageInt(3);
+ addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/AnotherSpiritToken.java b/Mage/src/main/java/mage/game/permanent/token/AnotherSpiritToken.java
new file mode 100644
index 0000000000..b59d8097bf
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/AnotherSpiritToken.java
@@ -0,0 +1,50 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class AnotherSpiritToken extends Token {
+
+ public AnotherSpiritToken() {
+ super("Spirit", "3/3 white Spirit creature token with flying");
+ cardType.add(CardType.CREATURE);
+ color.setWhite(true);
+ subtype.add("Spirit");
+ power = new MageInt(3);
+ toughness = new MageInt(3);
+ this.addAbility(FlyingAbility.getInstance());
+ }
+
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/AnthousaWarriorToken.java b/Mage/src/main/java/mage/game/permanent/token/AnthousaWarriorToken.java
new file mode 100644
index 0000000000..657ab6ab59
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/AnthousaWarriorToken.java
@@ -0,0 +1,52 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+*/
+
+package mage.game.permanent.token;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class AnthousaWarriorToken extends Token {
+
+ public AnthousaWarriorToken() {
+ super("", "2/2 Warrior creatures");
+ cardType.add(CardType.CREATURE);
+ subtype.add("Warrior");
+ power = new MageInt(2);
+ toughness = new MageInt(2);
+ }
+
+}
+
diff --git a/Mage/src/main/java/mage/game/permanent/token/ApeToken.java b/Mage/src/main/java/mage/game/permanent/token/ApeToken.java
new file mode 100644
index 0000000000..f28ce8fc43
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/ApeToken.java
@@ -0,0 +1,47 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class ApeToken extends Token {
+
+ public ApeToken() {
+ super("Ape", "2/2 green Ape creature token");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ subtype.add("Ape");
+ power = new MageInt(2);
+ toughness = new MageInt(2);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/ArchitectOfTheUntamedBeastToken.java b/Mage/src/main/java/mage/game/permanent/token/ArchitectOfTheUntamedBeastToken.java
new file mode 100644
index 0000000000..2d72df573b
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/ArchitectOfTheUntamedBeastToken.java
@@ -0,0 +1,52 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+*/
+
+package mage.game.permanent.token;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class ArchitectOfTheUntamedBeastToken extends Token {
+
+ public ArchitectOfTheUntamedBeastToken() {
+ super("Beast", "6/6 colorless Beast artifact creature token");
+ cardType.add(CardType.ARTIFACT);
+ cardType.add(CardType.CREATURE);
+ subtype.add("Beast");
+ power = new MageInt(6);
+ toughness = new MageInt(6);
+ }
+}
+
diff --git a/Mage/src/main/java/mage/game/permanent/token/AssassinToken.java b/Mage/src/main/java/mage/game/permanent/token/AssassinToken.java
new file mode 100644
index 0000000000..026037100c
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/AssassinToken.java
@@ -0,0 +1,52 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+*/
+
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
+import mage.abilities.effects.common.LoseGameTargetPlayerEffect;
+
+/**
+ *
+ * @author spjspj
+ */
+public class AssassinToken extends Token {
+
+ public AssassinToken() {
+ super("Assassin", "1/1 black Assassin creature tokens with \"Whenever this creature deals combat damage to a player, that player loses the game.\"");
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ subtype.add("Assassin");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new LoseGameTargetPlayerEffect(), false, true));
+ }
+}
+
diff --git a/Mage/src/main/java/mage/game/permanent/token/AssemblyWorkerToken.java b/Mage/src/main/java/mage/game/permanent/token/AssemblyWorkerToken.java
new file mode 100644
index 0000000000..08ddc464d3
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/AssemblyWorkerToken.java
@@ -0,0 +1,47 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class AssemblyWorkerToken extends Token {
+
+ public AssemblyWorkerToken() {
+ super("Assembly-Worker", "2/2 Assembly-Worker artifact creature");
+ cardType.add(CardType.ARTIFACT);
+ cardType.add(CardType.CREATURE);
+ this.subtype.add("Assembly-Worker");
+ power = new MageInt(2);
+ toughness = new MageInt(2);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/AvatarToken.java b/Mage/src/main/java/mage/game/permanent/token/AvatarToken.java
new file mode 100644
index 0000000000..865f295706
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/AvatarToken.java
@@ -0,0 +1,88 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+*/
+
+package mage.game.permanent.token;
+
+import mage.abilities.Ability;
+import mage.constants.CardType;
+import mage.abilities.common.SimpleStaticAbility;
+import mage.abilities.effects.ContinuousEffectImpl;
+import mage.constants.Duration;
+import mage.constants.Layer;
+import mage.constants.Outcome;
+import mage.constants.SubLayer;
+import mage.constants.Zone;
+import mage.game.Game;
+import mage.game.permanent.Permanent;
+import mage.players.Player;
+
+/**
+ *
+ * @author spjspj
+ */
+public class AvatarToken extends Token {
+
+ public AvatarToken() {
+ super("Avatar", "white Avatar creature token with \"This creature's power and toughness are each equal to your life total.\"");
+ cardType.add(CardType.CREATURE);
+ subtype.add("Avatar");
+ color.setWhite(true);
+ this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new AvatarTokenEffect()));
+ }
+}
+
+class AvatarTokenEffect extends ContinuousEffectImpl {
+
+ public AvatarTokenEffect() {
+ super(Duration.WhileOnBattlefield, Layer.PTChangingEffects_7, SubLayer.SetPT_7b, Outcome.BoostCreature);
+ }
+
+ public AvatarTokenEffect(final AvatarTokenEffect effect) {
+ super(effect);
+ }
+
+ @Override
+ public AvatarTokenEffect copy() {
+ return new AvatarTokenEffect(this);
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ Permanent token = game.getPermanent(source.getSourceId());
+ if (token != null) {
+ Player controller = game.getPlayer(source.getControllerId());
+ if (controller != null) {
+ token.getPower().setValue(controller.getLife());
+ token.getToughness().setValue(controller.getLife());
+ return true;
+ }
+ }
+ return false;
+ }
+
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/BalduvianToken.java b/Mage/src/main/java/mage/game/permanent/token/BalduvianToken.java
new file mode 100644
index 0000000000..11f750fbd6
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/BalduvianToken.java
@@ -0,0 +1,50 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.HasteAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class BalduvianToken extends Token {
+
+ public BalduvianToken() {
+ super("Graveborn", "3/1 black and red Graveborn creature token with haste");
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ color.setRed(true);
+ power = new MageInt(3);
+ toughness = new MageInt(1);
+ subtype.add("Graveborn");
+ addAbility(HasteAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/BaruFistOfKrosaToken.java b/Mage/src/main/java/mage/game/permanent/token/BaruFistOfKrosaToken.java
new file mode 100644
index 0000000000..a2db539e2a
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/BaruFistOfKrosaToken.java
@@ -0,0 +1,56 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+*/
+
+package mage.game.permanent.token;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class BaruFistOfKrosaToken extends Token {
+
+ public BaruFistOfKrosaToken() {
+ this(1);
+ }
+
+ public BaruFistOfKrosaToken(int xValue) {
+ super("Wurm", "X/X green Wurm creature token, where X is the number of lands you control");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ subtype.add("Wurm");
+ power = new MageInt(xValue);
+ toughness = new MageInt(xValue);
+ }
+}
+
diff --git a/Mage/src/main/java/mage/game/permanent/token/BearsCompanionBearToken.java b/Mage/src/main/java/mage/game/permanent/token/BearsCompanionBearToken.java
new file mode 100644
index 0000000000..17c1627ad6
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/BearsCompanionBearToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class BearsCompanionBearToken extends Token {
+
+ public BearsCompanionBearToken() {
+ super("Bear", "4/4 green Bear creature token");
+ setOriginalExpansionSetCode("KTK");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ subtype.add("Bear");
+ power = new MageInt(4);
+ toughness = new MageInt(4);
+ }
+
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/BeckonApparitionToken.java b/Mage/src/main/java/mage/game/permanent/token/BeckonApparitionToken.java
new file mode 100644
index 0000000000..9e7753f75a
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/BeckonApparitionToken.java
@@ -0,0 +1,51 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class BeckonApparitionToken extends Token {
+
+ public BeckonApparitionToken() {
+ super("Spirit", "1/1 white and black Spirit creature token with flying");
+ this.setOriginalExpansionSetCode("GTC");
+ cardType.add(CardType.CREATURE);
+ color.setWhite(true);
+ color.setBlack(true);
+ subtype.add("Spirit");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ this.addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/BirdSoldierToken.java b/Mage/src/main/java/mage/game/permanent/token/BirdSoldierToken.java
new file mode 100644
index 0000000000..f32d1f99ad
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/BirdSoldierToken.java
@@ -0,0 +1,51 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class BirdSoldierToken extends Token {
+
+ public BirdSoldierToken() {
+ super("Bird Soldier", "1/1 white Bird Soldier creature with flying");
+ cardType.add(CardType.CREATURE);
+ subtype.add("Bird");
+
+ color.setWhite(true);
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+
+ addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/BoarToken.java b/Mage/src/main/java/mage/game/permanent/token/BoarToken.java
new file mode 100644
index 0000000000..baa19434d3
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/BoarToken.java
@@ -0,0 +1,47 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class BoarToken extends Token {
+
+ public BoarToken() {
+ super("Boar", "3/3 green Boar creature token");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ subtype.add("Boar");
+ power = new MageInt(3);
+ toughness = new MageInt(3);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/BroodKeeperDragonToken.java b/Mage/src/main/java/mage/game/permanent/token/BroodKeeperDragonToken.java
new file mode 100644
index 0000000000..05f0117755
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/BroodKeeperDragonToken.java
@@ -0,0 +1,57 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.common.SimpleActivatedAbility;
+import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.effects.common.continuous.BoostSourceEffect;
+import mage.abilities.keyword.FlyingAbility;
+import mage.constants.Duration;
+import mage.constants.Zone;
+
+/**
+ *
+ * @author spjspj
+ */
+public class BroodKeeperDragonToken extends Token {
+
+ public BroodKeeperDragonToken() {
+ super("Dragon", "2/2 red Dragon creature token with flying. It has \"{R}: This creature gets +1/+0 until end of turn.\"");
+ this.setOriginalExpansionSetCode("M15");
+ cardType.add(CardType.CREATURE);
+ color.setRed(true);
+ subtype.add("Dragon");
+ power = new MageInt(2);
+ toughness = new MageInt(2);
+
+ this.addAbility(FlyingAbility.getInstance());
+ this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 0, Duration.EndOfTurn), new ManaCostsImpl("{R}")));
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/ButterflyToken.java b/Mage/src/main/java/mage/game/permanent/token/ButterflyToken.java
new file mode 100644
index 0000000000..50f66be9d0
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/ButterflyToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class ButterflyToken extends Token {
+
+ public ButterflyToken() {
+ super("Butterfly", "1/1 green Insect creature token with flying named Butterfly");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ subtype.add("Insect");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/CallTheSkyBreakerElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/CallTheSkyBreakerElementalToken.java
new file mode 100644
index 0000000000..34a96baa0b
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/CallTheSkyBreakerElementalToken.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+import mage.constants.CardType;
+
+/**
+ *
+ * @author spjspj
+ */
+public class CallTheSkyBreakerElementalToken extends Token {
+
+ public CallTheSkyBreakerElementalToken() {
+ super("Elemental", "5/5 blue and red Elemental creature token with flying");
+ cardType.add(CardType.CREATURE);
+ color.setBlue(true);
+ color.setRed(true);
+ subtype.add("Elemental");
+ if (getOriginalExpansionSetCode() != null && getOriginalExpansionSetCode().equals("EMA")) {
+ setTokenType(2);
+ }
+ power = new MageInt(5);
+ toughness = new MageInt(5);
+ this.addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/CamaridToken.java b/Mage/src/main/java/mage/game/permanent/token/CamaridToken.java
new file mode 100644
index 0000000000..c6cd560223
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/CamaridToken.java
@@ -0,0 +1,47 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+
+/**
+ *
+ * @author spjspj
+ */
+public class CamaridToken extends Token {
+
+ public CamaridToken() {
+ super("Camarid", "1/1 blue Camarid creature tokens");
+ this.setOriginalExpansionSetCode("FEM");
+ this.getPower().modifyBaseValue(1);
+ this.getToughness().modifyBaseValue(1);
+ this.color.setBlue(true);
+ this.getSubtype(null).add("Camarid");
+ this.addCardType(CardType.CREATURE);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/CaribouToken.java b/Mage/src/main/java/mage/game/permanent/token/CaribouToken.java
new file mode 100644
index 0000000000..3116180784
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/CaribouToken.java
@@ -0,0 +1,47 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class CaribouToken extends Token {
+
+ public CaribouToken() {
+ super("Caribou", "0/1 white Caribou creature token");
+ cardType.add(CardType.CREATURE);
+ color.setWhite(true);
+ subtype.add("Caribou");
+ power = new MageInt(0);
+ toughness = new MageInt(1);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/CarnivoreToken.java b/Mage/src/main/java/mage/game/permanent/token/CarnivoreToken.java
new file mode 100644
index 0000000000..02541ca713
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/CarnivoreToken.java
@@ -0,0 +1,47 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class CarnivoreToken extends Token {
+
+ public CarnivoreToken() {
+ super("Carnivore", "3/1 red Beast creature token");
+ cardType.add(CardType.CREATURE);
+ color.setRed(true);
+ subtype.add("Beast");
+ power = new MageInt(3);
+ toughness = new MageInt(1);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/CatWarriorToken.java b/Mage/src/main/java/mage/game/permanent/token/CatWarriorToken.java
new file mode 100644
index 0000000000..4e2d45467d
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/CatWarriorToken.java
@@ -0,0 +1,50 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.abilities.keyword.ForestwalkAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class CatWarriorToken extends Token {
+
+ public CatWarriorToken() {
+ super("Cat Warrior", "2/2 green Cat Warrior creature token with forestwalk");
+ this.setOriginalExpansionSetCode("PLC");
+ this.getPower().modifyBaseValue(2);
+ this.getToughness().modifyBaseValue(2);
+ this.color.setGreen(true);
+ this.getSubtype(null).add("Cat");
+ this.getSubtype(null).add("Warrior");
+ this.addCardType(CardType.CREATURE);
+ this.addAbility(new ForestwalkAbility());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/ChasmSkulkerSquidToken.java b/Mage/src/main/java/mage/game/permanent/token/ChasmSkulkerSquidToken.java
new file mode 100644
index 0000000000..29fd4f40e2
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/ChasmSkulkerSquidToken.java
@@ -0,0 +1,52 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.IslandwalkAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class ChasmSkulkerSquidToken extends Token {
+
+ public ChasmSkulkerSquidToken() {
+ super("Squid", "1/1 blue Squid creature token with islandwalk");
+ this.setOriginalExpansionSetCode("M15");
+ cardType.add(CardType.CREATURE);
+ color.setBlue(true);
+ subtype.add("Squid");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+
+ this.addAbility(new IslandwalkAbility());
+ }
+
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/CloudSpriteToken.java b/Mage/src/main/java/mage/game/permanent/token/CloudSpriteToken.java
new file mode 100644
index 0000000000..370d543b6b
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/CloudSpriteToken.java
@@ -0,0 +1,53 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.common.CanBlockOnlyFlyingAbility;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class CloudSpriteToken extends Token {
+
+ public CloudSpriteToken() {
+ super("Cloud Sprite", "1/1 blue faerie creature token named Cloud Sprite with flying and \"Cloud Sprite can block only creatures with flying.\"");
+ this.setOriginalExpansionSetCode("FUT");
+ cardType.add(CardType.CREATURE);
+ color.setBlue(true);
+ subtype.add("Faerie");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+
+ this.addAbility(FlyingAbility.getInstance());
+ this.addAbility(new CanBlockOnlyFlyingAbility());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/ConstructToken.java b/Mage/src/main/java/mage/game/permanent/token/ConstructToken.java
new file mode 100644
index 0000000000..a746701226
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/ConstructToken.java
@@ -0,0 +1,55 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.DefenderAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class ConstructToken extends Token {
+
+ public ConstructToken() {
+ this("CNS");
+ }
+
+ public ConstructToken(String setCode) {
+ super("Construct", "1/1 colorless Construct artifact creature token with defender");
+ this.setOriginalExpansionSetCode(setCode);
+ cardType.add(CardType.ARTIFACT);
+ cardType.add(CardType.CREATURE);
+ subtype.add("Construct");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+
+ addAbility(DefenderAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/CoralBarrierSquidToken.java b/Mage/src/main/java/mage/game/permanent/token/CoralBarrierSquidToken.java
new file mode 100644
index 0000000000..5d05d69246
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/CoralBarrierSquidToken.java
@@ -0,0 +1,52 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.IslandwalkAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class CoralBarrierSquidToken extends Token {
+
+ public CoralBarrierSquidToken() {
+ super("Squid", "1/1 blue Squid creature token with islandwalk");
+ this.setOriginalExpansionSetCode("M15");
+ cardType.add(CardType.CREATURE);
+ color.setBlue(true);
+ subtype.add("Squid");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+
+ this.addAbility(new IslandwalkAbility());
+ }
+
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/CorpseweftZombieToken.java b/Mage/src/main/java/mage/game/permanent/token/CorpseweftZombieToken.java
new file mode 100644
index 0000000000..4aa0a16126
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/CorpseweftZombieToken.java
@@ -0,0 +1,52 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class CorpseweftZombieToken extends Token {
+
+ public CorpseweftZombieToken() {
+ this(2,2);
+ }
+
+ public CorpseweftZombieToken(int power, int toughness) {
+ super("Zombie Horror", "X/X black Zombie Horror creature token, where X is twice the number of cards exiled this way");
+ cardType.add(CardType.CREATURE);
+ subtype.add("Zombie");
+ subtype.add("Horror");
+ color.setBlack(true);
+ this.power = new MageInt(power);
+ this.toughness = new MageInt(toughness);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/CorruptedZendikonOozeToken.java b/Mage/src/main/java/mage/game/permanent/token/CorruptedZendikonOozeToken.java
new file mode 100644
index 0000000000..4f6f355fa0
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/CorruptedZendikonOozeToken.java
@@ -0,0 +1,48 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class CorruptedZendikonOozeToken extends Token {
+
+ public CorruptedZendikonOozeToken() {
+ super("Ooze", "3/3 black Ooze creature");
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ subtype.add("Ooze");
+ this.power = new MageInt(3);
+ this.toughness = new MageInt(3);
+ }
+
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/CreakwoodLiegeToken.java b/Mage/src/main/java/mage/game/permanent/token/CreakwoodLiegeToken.java
new file mode 100644
index 0000000000..9bf1f3a611
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/CreakwoodLiegeToken.java
@@ -0,0 +1,48 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class CreakwoodLiegeToken extends Token {
+
+ public CreakwoodLiegeToken() {
+ super("Worm", "1/1 black and green Worm creature token");
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ color.setGreen(true);
+ subtype.add("Worm");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/CribSwapShapeshifterWhiteToken.java b/Mage/src/main/java/mage/game/permanent/token/CribSwapShapeshifterWhiteToken.java
new file mode 100644
index 0000000000..7aa0150ecb
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/CribSwapShapeshifterWhiteToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.ChangelingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class CribSwapShapeshifterWhiteToken extends Token {
+
+ public CribSwapShapeshifterWhiteToken() {
+ super("Shapeshifter", "1/1 colorless Shapeshifter creature token with changeling");
+ this.setOriginalExpansionSetCode("LRW");
+ cardType.add(CardType.CREATURE);
+ subtype.add("Shapeshifter");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ addAbility(ChangelingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/CrushOfTentaclesToken.java b/Mage/src/main/java/mage/game/permanent/token/CrushOfTentaclesToken.java
new file mode 100644
index 0000000000..fb9c597372
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/CrushOfTentaclesToken.java
@@ -0,0 +1,48 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class CrushOfTentaclesToken extends Token {
+
+ public CrushOfTentaclesToken() {
+ super("Octopus", "8/8 blue Octopus creature");
+ this.setExpansionSetCodeForImage("BFZ");
+ this.cardType.add(CardType.CREATURE);
+ this.color.setBlue(true);
+ this.subtype.add("Octopus");
+ this.power = new MageInt(8);
+ this.toughness = new MageInt(8);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/CurseOfTheSwineBoarToken.java b/Mage/src/main/java/mage/game/permanent/token/CurseOfTheSwineBoarToken.java
new file mode 100644
index 0000000000..6c1afdf6ba
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/CurseOfTheSwineBoarToken.java
@@ -0,0 +1,52 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+*/
+
+package mage.game.permanent.token;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class CurseOfTheSwineBoarToken extends Token {
+
+ public CurseOfTheSwineBoarToken() {
+ super("Boar", "2/2 green Boar creature token");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ subtype.add("Boar");
+ power = new MageInt(2);
+ toughness = new MageInt(2);
+ }
+}
+
diff --git a/Mage/src/main/java/mage/game/permanent/token/DarettiConstructToken.java b/Mage/src/main/java/mage/game/permanent/token/DarettiConstructToken.java
new file mode 100644
index 0000000000..a0a5fe4db2
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/DarettiConstructToken.java
@@ -0,0 +1,55 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.DefenderAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class DarettiConstructToken extends Token {
+
+ public DarettiConstructToken() {
+ this("CNS");
+ }
+
+ public DarettiConstructToken(String setCode) {
+ super("Construct", "1/1 colorless Construct artifact creature token with defender");
+ this.setOriginalExpansionSetCode(setCode);
+ cardType.add(CardType.ARTIFACT);
+ cardType.add(CardType.CREATURE);
+ subtype.add("Construct");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+
+ addAbility(DefenderAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/DaxosSpiritToken.java b/Mage/src/main/java/mage/game/permanent/token/DaxosSpiritToken.java
new file mode 100644
index 0000000000..4403dd058b
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/DaxosSpiritToken.java
@@ -0,0 +1,99 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.MageObjectReference;
+import mage.abilities.Ability;
+import mage.abilities.common.SimpleStaticAbility;
+import mage.abilities.effects.ContinuousEffectImpl;
+import mage.constants.Duration;
+import mage.constants.Layer;
+import mage.constants.Outcome;
+import mage.constants.SubLayer;
+import mage.constants.Zone;
+import mage.counters.CounterType;
+import mage.game.Game;
+import mage.game.permanent.Permanent;
+import mage.players.Player;
+
+/**
+ *
+ * @author spjspj
+ */
+public class DaxosSpiritToken extends Token {
+
+ public DaxosSpiritToken() {
+ super("Spirit", "white and black Spirit enchantment creature token with \"This creature's power and toughness are each equal to the number of experience counters you have.\"");
+ this.setOriginalExpansionSetCode("C15");
+ setTokenType(2);
+ cardType.add(CardType.ENCHANTMENT);
+ cardType.add(CardType.CREATURE);
+ color.setWhite(true);
+ color.setBlack(true);
+ subtype.add("Spirit");
+ power = new MageInt(0);
+ toughness = new MageInt(0);
+ this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new DaxosSpiritSetPTEffect()));
+ }
+}
+
+class DaxosSpiritSetPTEffect extends ContinuousEffectImpl {
+
+ public DaxosSpiritSetPTEffect() {
+ super(Duration.WhileOnBattlefield, Layer.PTChangingEffects_7, SubLayer.SetPT_7b, Outcome.BoostCreature);
+ staticText = "This creature's power and toughness are each equal to the number of experience counters you have";
+ }
+
+ public DaxosSpiritSetPTEffect(final DaxosSpiritSetPTEffect effect) {
+ super(effect);
+ }
+
+ @Override
+ public DaxosSpiritSetPTEffect copy() {
+ return new DaxosSpiritSetPTEffect(this);
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ Player controller = game.getPlayer(source.getControllerId());
+ if (controller != null) {
+ Permanent permanent = game.getPermanent(source.getSourceId());
+ if (permanent != null && new MageObjectReference(source.getSourceObject(game), game).refersTo(permanent, game)) {
+ int amount = controller.getCounters().getCount(CounterType.EXPERIENCE);
+ permanent.getPower().setValue(amount);
+ permanent.getToughness().setValue(amount);
+ return true;
+ } else {
+ discard();
+ }
+ }
+ return false;
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/DeadlyGrubToken.java b/Mage/src/main/java/mage/game/permanent/token/DeadlyGrubToken.java
new file mode 100644
index 0000000000..8def318f67
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/DeadlyGrubToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.ShroudAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class DeadlyGrubToken extends Token {
+
+ public DeadlyGrubToken() {
+ super("Insect", "6/1 green Insect creature token with shroud");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ subtype.add("Insect");
+ power = new MageInt(6);
+ toughness = new MageInt(1);
+ this.addAbility(ShroudAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/DeathpactAngelToken.java b/Mage/src/main/java/mage/game/permanent/token/DeathpactAngelToken.java
new file mode 100644
index 0000000000..de9f456f91
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/DeathpactAngelToken.java
@@ -0,0 +1,74 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.SimpleActivatedAbility;
+import mage.abilities.costs.common.SacrificeSourceCost;
+import mage.abilities.costs.common.TapSourceCost;
+import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect;
+import mage.constants.Zone;
+import mage.filter.common.FilterCreatureCard;
+import mage.filter.predicate.mageobject.NamePredicate;
+import mage.target.common.TargetCardInYourGraveyard;
+
+/**
+ *
+ * @author spjspj
+ */
+public class DeathpactAngelToken extends Token {
+
+ private static final FilterCreatureCard filter = new FilterCreatureCard("card named Deathpact Angel from your graveyard");
+
+ static {
+ filter.add(new NamePredicate("Deathpact Angel"));
+ }
+
+ public DeathpactAngelToken() {
+ super("Cleric", "1/1 white and black Cleric creature token. It has \"{3}{W}{B}{B}, {T}, Sacrifice this creature: Return a card named Deathpact Angel from your graveyard to the battlefield.\"");
+ cardType.add(CardType.CREATURE);
+
+ color.setWhite(true);
+ color.setBlack(true);
+
+ subtype.add("Cleric");
+
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+
+ Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnFromGraveyardToBattlefieldTargetEffect(), new ManaCostsImpl("{3}{W}{B}{B}"));
+ ability.addCost(new TapSourceCost());
+ ability.addCost(new SacrificeSourceCost());
+ ability.addTarget(new TargetCardInYourGraveyard(filter));
+ this.addAbility(ability);
+ }
+
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/DeathtouchSnakeToken.java b/Mage/src/main/java/mage/game/permanent/token/DeathtouchSnakeToken.java
new file mode 100644
index 0000000000..e5486d6437
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/DeathtouchSnakeToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.DeathtouchAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class DeathtouchSnakeToken extends Token {
+
+ public DeathtouchSnakeToken() {
+ super("Snake", "1/1 green Snake creature token with deathtouch");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ subtype.add("Snake");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ addAbility(DeathtouchAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/DevastatingSummonsElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/DevastatingSummonsElementalToken.java
new file mode 100644
index 0000000000..2668ffe512
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/DevastatingSummonsElementalToken.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+
+/**
+ *
+ * @author spjspj
+ */
+public class DevastatingSummonsElementalToken extends Token {
+
+ public DevastatingSummonsElementalToken() {
+ super("Elemental", "X/X red Elemental creature");
+ cardType.add(CardType.CREATURE);
+ color.setRed(true);
+ subtype.add("Elemental");
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/DinOfTheFireherdToken.java b/Mage/src/main/java/mage/game/permanent/token/DinOfTheFireherdToken.java
new file mode 100644
index 0000000000..7c09739931
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/DinOfTheFireherdToken.java
@@ -0,0 +1,48 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class DinOfTheFireherdToken extends Token {
+
+ public DinOfTheFireherdToken() {
+ super("", "5/5 black and red Elemental creature");
+ cardType.add(CardType.CREATURE);
+ subtype.add("Elemental");
+ color.setBlack(true);
+ color.setRed(true);
+ power = new MageInt(5);
+ toughness = new MageInt(5);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/DjinnMonkToken.java b/Mage/src/main/java/mage/game/permanent/token/DjinnMonkToken.java
new file mode 100644
index 0000000000..c595f9ab0d
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/DjinnMonkToken.java
@@ -0,0 +1,50 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class DjinnMonkToken extends Token {
+
+ public DjinnMonkToken() {
+ super("Djinn Monk", "2/2 blue Djinn Monk creature token with flying");
+ cardType.add(CardType.CREATURE);
+ color.setBlue(true);
+ subtype.add("Djinn");
+ subtype.add("Monk");
+ power = new MageInt(2);
+ toughness = new MageInt(2);
+ addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/DjinnToken.java b/Mage/src/main/java/mage/game/permanent/token/DjinnToken.java
new file mode 100644
index 0000000000..c254a42481
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/DjinnToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class DjinnToken extends Token {
+
+ public DjinnToken() {
+ super("Djinn", "5/5 colorless Djinn artifact creature token with flying");
+ cardType.add(CardType.ARTIFACT);
+ cardType.add(CardType.CREATURE);
+ subtype.add("Djinn");
+ power = new MageInt(5);
+ toughness = new MageInt(5);
+ addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/DokaiWeaverofLifeToken.java b/Mage/src/main/java/mage/game/permanent/token/DokaiWeaverofLifeToken.java
new file mode 100644
index 0000000000..f79a1ff844
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/DokaiWeaverofLifeToken.java
@@ -0,0 +1,59 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.common.SimpleStaticAbility;
+import mage.abilities.dynamicvalue.DynamicValue;
+import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
+import mage.abilities.effects.common.continuous.BoostSourceEffect;
+import mage.constants.Duration;
+import mage.constants.Zone;
+import mage.filter.common.FilterControlledLandPermanent;
+import mage.filter.common.FilterControlledPermanent;
+
+/**
+ *
+ * @author spjspj
+ */
+public class DokaiWeaverofLifeToken extends Token {
+
+ final static FilterControlledPermanent filterLands = new FilterControlledLandPermanent("lands you control");
+
+ public DokaiWeaverofLifeToken() {
+ super("Elemental", "X/X green Elemental creature token, where X is the number of lands you control");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ subtype.add("Elemental");
+ power = new MageInt(0);
+ toughness = new MageInt(0);
+ DynamicValue controlledLands = new PermanentsOnBattlefieldCount(filterLands);
+ this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostSourceEffect(controlledLands, controlledLands, Duration.WhileOnBattlefield)));
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/DovescapeToken.java b/Mage/src/main/java/mage/game/permanent/token/DovescapeToken.java
new file mode 100644
index 0000000000..33c8652a10
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/DovescapeToken.java
@@ -0,0 +1,50 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class DovescapeToken extends Token {
+
+ public DovescapeToken() {
+ super("Bird", "1/1 white and blue Bird creature token with flying");
+ cardType.add(CardType.CREATURE);
+ color.setWhite(true);
+ color.setBlue(true);
+ subtype.add("Bird");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ this.addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/DuneBroodNephilimToken.java b/Mage/src/main/java/mage/game/permanent/token/DuneBroodNephilimToken.java
new file mode 100644
index 0000000000..6857258cf2
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/DuneBroodNephilimToken.java
@@ -0,0 +1,46 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class DuneBroodNephilimToken extends Token {
+
+ public DuneBroodNephilimToken() {
+ super("Sand", "1/1 colorless Sand creature token");
+ cardType.add(CardType.CREATURE);
+ subtype.add("Sand");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/EldraziToken.java b/Mage/src/main/java/mage/game/permanent/token/EldraziToken.java
new file mode 100644
index 0000000000..d999f56558
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/EldraziToken.java
@@ -0,0 +1,46 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class EldraziToken extends Token {
+
+ public EldraziToken() {
+ super("Eldrazi", "10/10 colorless Eldrazi creature token");
+ cardType.add(CardType.CREATURE);
+ subtype.add("Eldrazi");
+ power = new MageInt(10);
+ toughness = new MageInt(10);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/ElementalAppealElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/ElementalAppealElementalToken.java
new file mode 100644
index 0000000000..d0a755825d
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/ElementalAppealElementalToken.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.MageInt;
+import mage.abilities.keyword.HasteAbility;
+import mage.abilities.keyword.TrampleAbility;
+import mage.constants.CardType;
+
+/**
+ *
+ * @author spjspj
+ */
+public class ElementalAppealElementalToken extends Token {
+
+ public ElementalAppealElementalToken() {
+ super("Elemental", "7/1 red Elemental creature token with trample and haste");
+ cardType.add(CardType.CREATURE);
+ color.setRed(true);
+ subtype.add("Elemental");
+ power = new MageInt(7);
+ toughness = new MageInt(1);
+ addAbility(TrampleAbility.getInstance());
+ addAbility(HasteAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/ElementalCatToken.java b/Mage/src/main/java/mage/game/permanent/token/ElementalCatToken.java
new file mode 100644
index 0000000000..56bf2cd052
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/ElementalCatToken.java
@@ -0,0 +1,50 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.HasteAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class ElementalCatToken extends Token {
+
+ public ElementalCatToken() {
+ super("Elemental Cat", "1/1 red Elemental Cat creature token");
+ cardType.add(CardType.CREATURE);
+ color.setRed(true);
+ subtype.add("Elemental");
+ subtype.add("Cat");
+ addAbility(HasteAbility.getInstance());
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/ElementalMasteryElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/ElementalMasteryElementalToken.java
new file mode 100644
index 0000000000..343e54f558
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/ElementalMasteryElementalToken.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.MageInt;
+import mage.abilities.keyword.HasteAbility;
+import mage.constants.CardType;
+
+/**
+ *
+ * @author spjspj
+ */
+public class ElementalMasteryElementalToken extends Token {
+
+ public ElementalMasteryElementalToken() {
+ super("Elemental", "1/1 red Elemental creature token with haste");
+ cardType.add(CardType.CREATURE);
+ subtype.add("Elemental");
+ color.setRed(true);
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ addAbility(HasteAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/ElementalShamanToken.java b/Mage/src/main/java/mage/game/permanent/token/ElementalShamanToken.java
index f7d0fc9872..33c3b46e54 100644
--- a/Mage/src/main/java/mage/game/permanent/token/ElementalShamanToken.java
+++ b/Mage/src/main/java/mage/game/permanent/token/ElementalShamanToken.java
@@ -25,8 +25,8 @@
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
-package mage.game.permanent.token;
+package mage.game.permanent.token;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -45,6 +45,10 @@ public class ElementalShamanToken extends Token {
tokenImageSets.addAll(Arrays.asList("C15", "DD3JVC", "DD2", "LRW"));
}
+ public ElementalShamanToken() {
+ this("LRW");
+ }
+
public ElementalShamanToken(String setCode) {
super("Elemental Shaman", "3/1 red Elemental Shaman creature token");
availableImageSetCodes = tokenImageSets;
diff --git a/Mage/src/main/java/mage/game/permanent/token/ElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/ElementalToken.java
index 141a07a221..303f68c2fa 100644
--- a/Mage/src/main/java/mage/game/permanent/token/ElementalToken.java
+++ b/Mage/src/main/java/mage/game/permanent/token/ElementalToken.java
@@ -47,6 +47,10 @@ public class ElementalToken extends Token {
tokenImageSets.addAll(Arrays.asList("OGW", "CON", "DIS"));
}
+ public ElementalToken() {
+ this ("OGW", 0);
+ }
+
public ElementalToken(String setCode, int tokenType) {
super("Elemental", "3/1 red Elemental creature token");
availableImageSetCodes = tokenImageSets;
@@ -73,4 +77,4 @@ public class ElementalToken extends Token {
if (hasHaste) this.addAbility(HasteAbility.getInstance());
}
-}
\ No newline at end of file
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/EtheriumCellToken.java b/Mage/src/main/java/mage/game/permanent/token/EtheriumCellToken.java
new file mode 100644
index 0000000000..98441f97f5
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/EtheriumCellToken.java
@@ -0,0 +1,54 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.abilities.Ability;
+import mage.abilities.costs.common.SacrificeSourceCost;
+import mage.abilities.costs.common.TapSourceCost;
+import mage.abilities.effects.common.AddManaOfAnyColorEffect;
+import mage.abilities.mana.SimpleManaAbility;
+import mage.constants.Zone;
+
+/**
+ *
+ * @author spjspj
+ */
+public class EtheriumCellToken extends Token {
+
+ public EtheriumCellToken() {
+ super("Etherium Cell", "colorless artifact token named Etherium Cell which has \"{T}, Sacrifice this artifact: Add one mana of any color to your mana pool.\"");
+ this.setOriginalExpansionSetCode("AER");
+ cardType.add(CardType.ARTIFACT);
+
+ Ability ability = new SimpleManaAbility(Zone.BATTLEFIELD, new AddManaOfAnyColorEffect(), new TapSourceCost());
+ ability.addCost(new SacrificeSourceCost());
+
+ this.addAbility(ability);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/EwokToken.java b/Mage/src/main/java/mage/game/permanent/token/EwokToken.java
index 740a1a58d8..6e1e7d06c6 100644
--- a/Mage/src/main/java/mage/game/permanent/token/EwokToken.java
+++ b/Mage/src/main/java/mage/game/permanent/token/EwokToken.java
@@ -25,8 +25,8 @@
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
-package mage.game.permanent.token;
+package mage.game.permanent.token;
import java.util.Collections;
import mage.constants.CardType;
diff --git a/Mage/src/main/java/mage/game/permanent/token/EyesOfTheWisentElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/EyesOfTheWisentElementalToken.java
new file mode 100644
index 0000000000..6459e908a2
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/EyesOfTheWisentElementalToken.java
@@ -0,0 +1,50 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class EyesOfTheWisentElementalToken extends Token {
+
+ public EyesOfTheWisentElementalToken() {
+ super("Elemental", "4/4 green Elemental creature token");
+ this.setOriginalExpansionSetCode("MMA");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ subtype.add("Elemental");
+ power = new MageInt(4);
+ toughness = new MageInt(4);
+ setTokenType(1);
+ }
+
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/FaerieToken.java b/Mage/src/main/java/mage/game/permanent/token/FaerieToken.java
new file mode 100644
index 0000000000..5a99d3efa2
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/FaerieToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class FaerieToken extends Token {
+
+ public FaerieToken() {
+ super("Faerie", "1/1 blue Faerie creature tokens with flying");
+ cardType.add(CardType.CREATURE);
+ color.setBlue(true);
+ subtype.add("Faerie");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ this.addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/FesteringGoblinToken.java b/Mage/src/main/java/mage/game/permanent/token/FesteringGoblinToken.java
new file mode 100644
index 0000000000..d535e123e8
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/FesteringGoblinToken.java
@@ -0,0 +1,58 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.DiesTriggeredAbility;
+import mage.abilities.effects.common.continuous.BoostTargetEffect;
+import mage.constants.Duration;
+import mage.target.common.TargetCreaturePermanent;
+
+/**
+ *
+ * @author spjspj
+ */
+public class FesteringGoblinToken extends Token {
+
+ public FesteringGoblinToken() {
+ super("Festering Goblin", "1/1 black Zombie Goblin creature token named Festering Goblin with \"When Festering Goblin dies, target creature gets -1/-1 until end of turn.\"");
+ this.setOriginalExpansionSetCode("FUT");
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ subtype.add("Zombie");
+ subtype.add("Goblin");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+
+ Ability ability = new DiesTriggeredAbility(new BoostTargetEffect(-1, -1, Duration.EndOfTurn), false);
+ ability.addTarget(new TargetCreaturePermanent());
+ this.addAbility(ability);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/FleshCarverHorrorToken.java b/Mage/src/main/java/mage/game/permanent/token/FleshCarverHorrorToken.java
new file mode 100644
index 0000000000..bc4f45b568
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/FleshCarverHorrorToken.java
@@ -0,0 +1,53 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class FleshCarverHorrorToken extends Token {
+
+ public FleshCarverHorrorToken() {
+ this(1);
+ }
+
+ public FleshCarverHorrorToken(int xValue) {
+ super("Horror", "X/X black Horror creature token");
+ setOriginalExpansionSetCode("C14");
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ subtype.add("Horror");
+ power = new MageInt(xValue);
+ toughness = new MageInt(xValue);
+
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/FlurryOfHornsMinotaurToken.java b/Mage/src/main/java/mage/game/permanent/token/FlurryOfHornsMinotaurToken.java
new file mode 100644
index 0000000000..2b456bf73a
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/FlurryOfHornsMinotaurToken.java
@@ -0,0 +1,51 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.ObjectColor;
+import mage.abilities.keyword.HasteAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class FlurryOfHornsMinotaurToken extends Token {
+
+ public FlurryOfHornsMinotaurToken() {
+ super("Minotaur", "2/3 red Minotaur creature tokens with haste");
+ this.setOriginalExpansionSetCode("JOU");
+ cardType.add(CardType.CREATURE);
+ color.setColor(ObjectColor.RED);
+ subtype.add("Minotaur");
+ power = new MageInt(2);
+ toughness = new MageInt(3);
+ addAbility(HasteAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/ForlornPseudammaZombieToken.java b/Mage/src/main/java/mage/game/permanent/token/ForlornPseudammaZombieToken.java
new file mode 100644
index 0000000000..fb1f657524
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/ForlornPseudammaZombieToken.java
@@ -0,0 +1,54 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+*/
+
+package mage.game.permanent.token;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class ForlornPseudammaZombieToken extends Token {
+
+ public ForlornPseudammaZombieToken() {
+ super("Zombie", "2/2 black Zombie enchantment creature token");
+ cardType.add(CardType.ENCHANTMENT);
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ subtype.add("Zombie");
+ power = new MageInt(2);
+ toughness = new MageInt(2);
+ this.setOriginalExpansionSetCode("BNG");
+ }
+}
+
diff --git a/Mage/src/main/java/mage/game/permanent/token/FreyaliseLlanowarsFuryToken.java b/Mage/src/main/java/mage/game/permanent/token/FreyaliseLlanowarsFuryToken.java
new file mode 100644
index 0000000000..22e61a83e6
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/FreyaliseLlanowarsFuryToken.java
@@ -0,0 +1,55 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.ObjectColor;
+import mage.abilities.mana.GreenManaAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class FreyaliseLlanowarsFuryToken extends Token {
+
+ public FreyaliseLlanowarsFuryToken() {
+ super("Elf Druid", "1/1 green Elf Druid creature token with \"{T}: Add {G} to your mana pool.\"");
+ this.setOriginalExpansionSetCode("C14");
+ this.cardType.add(CardType.CREATURE);
+ this.color = ObjectColor.GREEN;
+ this.subtype.add("Elf");
+ this.subtype.add("Druid");
+
+ this.power = new MageInt(1);
+ this.toughness = new MageInt(1);
+
+ // {T}: Add {G} to your mana pool.
+ this.addAbility(new GreenManaAbility());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/GargoyleToken.java b/Mage/src/main/java/mage/game/permanent/token/GargoyleToken.java
new file mode 100644
index 0000000000..a00e94837a
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/GargoyleToken.java
@@ -0,0 +1,50 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class GargoyleToken extends Token {
+
+ public GargoyleToken() {
+ super("Gargoyle", "3/4 colorless Gargoyle artifact creature token with flying");
+ cardType.add(CardType.CREATURE);
+ cardType.add(CardType.ARTIFACT);
+ subtype.add("Gargoyle");
+ power = new MageInt(3);
+ toughness = new MageInt(4);
+ addAbility(FlyingAbility.getInstance());
+ }
+
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/GarrukApexPredatorBeastToken.java b/Mage/src/main/java/mage/game/permanent/token/GarrukApexPredatorBeastToken.java
new file mode 100644
index 0000000000..5de2f7ff4d
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/GarrukApexPredatorBeastToken.java
@@ -0,0 +1,54 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.DeathtouchAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class GarrukApexPredatorBeastToken extends Token {
+
+ public GarrukApexPredatorBeastToken() {
+ super("Beast", "3/3 black Beast creature token with deathtouch");
+ setOriginalExpansionSetCode("M15");
+ setTokenType(1);
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ subtype.add("Beast");
+ power = new MageInt(3);
+ toughness = new MageInt(3);
+
+ abilities.add(DeathtouchAbility.getInstance());
+
+ }
+
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/GiantBaitingGiantWarriorToken.java b/Mage/src/main/java/mage/game/permanent/token/GiantBaitingGiantWarriorToken.java
new file mode 100644
index 0000000000..dcd57edfd0
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/GiantBaitingGiantWarriorToken.java
@@ -0,0 +1,51 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.HasteAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class GiantBaitingGiantWarriorToken extends Token {
+
+ public GiantBaitingGiantWarriorToken() {
+ super("Giant Warrior", "4/4 red and green Giant Warrior creature token with haste");
+ cardType.add(CardType.CREATURE);
+ color.setRed(true);
+ color.setGreen(true);
+ subtype.add("Giant");
+ subtype.add("Warrior");
+ power = new MageInt(4);
+ toughness = new MageInt(4);
+ this.addAbility(HasteAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/GiantToken.java b/Mage/src/main/java/mage/game/permanent/token/GiantToken.java
new file mode 100644
index 0000000000..dd5e983164
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/GiantToken.java
@@ -0,0 +1,47 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class GiantToken extends Token {
+
+ public GiantToken() {
+ super("Giant", "4/4 red Giant creature token");
+ cardType.add(CardType.CREATURE);
+ subtype.add("Giant");
+ color.setRed(true);
+ power = new MageInt(4);
+ toughness = new MageInt(4);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/GiantWarriorToken.java b/Mage/src/main/java/mage/game/permanent/token/GiantWarriorToken.java
new file mode 100644
index 0000000000..2fdd315bc5
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/GiantWarriorToken.java
@@ -0,0 +1,48 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class GiantWarriorToken extends Token {
+
+ public GiantWarriorToken() {
+ super("Giant Warrior", "5/5 white Giant Warrior creature token");
+ cardType.add(CardType.CREATURE);
+ color.setWhite(true);
+ subtype.add("Giant");
+ subtype.add("Warrior");
+ power = new MageInt(5);
+ toughness = new MageInt(5);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/GnomeToken.java b/Mage/src/main/java/mage/game/permanent/token/GnomeToken.java
new file mode 100644
index 0000000000..626a219666
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/GnomeToken.java
@@ -0,0 +1,47 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class GnomeToken extends Token {
+
+ public GnomeToken() {
+ super("Gnome", "1/1 colorless Gnome artifact creature token");
+ cardType.add(CardType.ARTIFACT);
+ cardType.add(CardType.CREATURE);
+ subtype.add("Gnome");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/GoblinScoutsToken.java b/Mage/src/main/java/mage/game/permanent/token/GoblinScoutsToken.java
new file mode 100644
index 0000000000..629f8aaf1f
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/GoblinScoutsToken.java
@@ -0,0 +1,51 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.MountainwalkAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class GoblinScoutsToken extends Token {
+
+ public GoblinScoutsToken() {
+ super("Goblin Scout", "1/1 red Goblin Scout creature tokens with mountainwalk");
+ cardType.add(CardType.CREATURE);
+ color.setRed(true);
+ subtype.add("Goblin");
+ subtype.add("Scout");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+
+ this.addAbility(new MountainwalkAbility());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/GoblinSoldierToken.java b/Mage/src/main/java/mage/game/permanent/token/GoblinSoldierToken.java
new file mode 100644
index 0000000000..d30081a9ae
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/GoblinSoldierToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class GoblinSoldierToken extends Token {
+
+ public GoblinSoldierToken() {
+ super("Goblin Soldier", "1/1 red and white Goblin Soldier creature tokens");
+ cardType.add(CardType.CREATURE);
+ color.setRed(true);
+ color.setWhite(true);
+ subtype.add("Goblin");
+ subtype.add("Soldier");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/GoblinTrenchesToken.java b/Mage/src/main/java/mage/game/permanent/token/GoblinTrenchesToken.java
new file mode 100644
index 0000000000..9aa34f7a90
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/GoblinTrenchesToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class GoblinTrenchesToken extends Token {
+
+ public GoblinTrenchesToken() {
+ super("Goblin Soldier", "1/1 red and white Goblin Soldier creature tokens");
+ cardType.add(CardType.CREATURE);
+ color.setRed(true);
+ color.setWhite(true);
+ subtype.add("Goblin");
+ subtype.add("Soldier");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/GodFavoredGeneralSoldierToken.java b/Mage/src/main/java/mage/game/permanent/token/GodFavoredGeneralSoldierToken.java
new file mode 100644
index 0000000000..70297b0312
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/GodFavoredGeneralSoldierToken.java
@@ -0,0 +1,50 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class GodFavoredGeneralSoldierToken extends Token {
+
+ public GodFavoredGeneralSoldierToken() {
+ super("Soldier", "1/1 white Soldier enchantment creature token");
+ cardType.add(CardType.ENCHANTMENT);
+ cardType.add(CardType.CREATURE);
+ color.setWhite(true);
+
+ subtype.add("Soldier");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ this.setOriginalExpansionSetCode("BNG");
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/GodSireBeastToken.java b/Mage/src/main/java/mage/game/permanent/token/GodSireBeastToken.java
new file mode 100644
index 0000000000..f7528ad9e2
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/GodSireBeastToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class GodSireBeastToken extends Token {
+
+ public GodSireBeastToken() {
+ super("Beast", "8/8 Beast creature token that's red, green, and white");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ color.setWhite(true);
+ color.setRed(true);
+ subtype.add("Beast");
+ power = new MageInt(8);
+ toughness = new MageInt(8);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/GoldmeadowHarrierToken.java b/Mage/src/main/java/mage/game/permanent/token/GoldmeadowHarrierToken.java
new file mode 100644
index 0000000000..6d4dfbbea5
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/GoldmeadowHarrierToken.java
@@ -0,0 +1,61 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.SimpleActivatedAbility;
+import mage.abilities.costs.common.TapSourceCost;
+import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.effects.common.TapTargetEffect;
+import mage.constants.Zone;
+import mage.target.common.TargetCreaturePermanent;
+
+/**
+ *
+ * @author spjspj
+ */
+public class GoldmeadowHarrierToken extends Token {
+
+ public GoldmeadowHarrierToken() {
+ super("Goldmeadow Harrier", "1/1 white Kithkin Soldier creature token named Goldmeadow Harrier with \"{W}, {T}: Tap target creature.\"");
+ this.setOriginalExpansionSetCode("FUT");
+ cardType.add(CardType.CREATURE);
+ color.setWhite(true);
+ subtype.add("Kithkin");
+ subtype.add("Soldier");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+
+ Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new TapTargetEffect(), new ManaCostsImpl("{W}"));
+ ability.addCost(new TapSourceCost());
+ ability.addTarget(new TargetCreaturePermanent());
+ this.addAbility(ability);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/GriffinToken.java b/Mage/src/main/java/mage/game/permanent/token/GriffinToken.java
new file mode 100644
index 0000000000..6d978e8f36
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/GriffinToken.java
@@ -0,0 +1,51 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class GriffinToken extends Token {
+
+ public GriffinToken() {
+ super("Griffin", "2/2 white Griffin creature token with flying");
+ cardType.add(CardType.CREATURE);
+ color.setWhite(true);
+
+ subtype.add("Griffin");
+ power = new MageInt(2);
+ toughness = new MageInt(2);
+ this.addAbility(FlyingAbility.getInstance());
+ }
+
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/GrovetenderDruidsPlantToken.java b/Mage/src/main/java/mage/game/permanent/token/GrovetenderDruidsPlantToken.java
new file mode 100644
index 0000000000..9fd5cfca2b
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/GrovetenderDruidsPlantToken.java
@@ -0,0 +1,48 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class GrovetenderDruidsPlantToken extends Token {
+
+ public GrovetenderDruidsPlantToken() {
+ super("Plant", "1/1 green Plant creature");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ subtype.add("Plant");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ this.setOriginalExpansionSetCode("BFZ");
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/GuardianIdolGolemToken.java b/Mage/src/main/java/mage/game/permanent/token/GuardianIdolGolemToken.java
new file mode 100644
index 0000000000..fbe99a5acb
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/GuardianIdolGolemToken.java
@@ -0,0 +1,47 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class GuardianIdolGolemToken extends Token {
+
+ public GuardianIdolGolemToken() {
+ super("Golem", "2/2 Golem artifact creature token");
+ cardType.add(CardType.ARTIFACT);
+ cardType.add(CardType.CREATURE);
+ subtype.add("Golem");
+ power = new MageInt(2);
+ toughness = new MageInt(2);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/GutterGrimeToken.java b/Mage/src/main/java/mage/game/permanent/token/GutterGrimeToken.java
new file mode 100644
index 0000000000..a53903d1c5
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/GutterGrimeToken.java
@@ -0,0 +1,99 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import java.util.UUID;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.SimpleStaticAbility;
+import mage.abilities.dynamicvalue.DynamicValue;
+import mage.abilities.effects.Effect;
+import mage.abilities.effects.common.continuous.SetPowerToughnessSourceEffect;
+import mage.constants.Duration;
+import mage.constants.Zone;
+import mage.counters.CounterType;
+import mage.game.Game;
+import mage.game.permanent.Permanent;
+
+/**
+ *
+ * @author spjspj
+ */
+public class GutterGrimeToken extends Token {
+
+ public GutterGrimeToken() {
+ this (null);
+ power = new MageInt(3);
+ toughness = new MageInt(3);
+ }
+
+
+ public GutterGrimeToken(UUID sourceId) {
+ super("Ooze", "green Ooze creature token with \"This creature's power and toughness are each equal to the number of slime counters on Gutter Grime.\"");
+ cardType.add(CardType.CREATURE);
+ subtype.add("Ooze");
+ color.setGreen(true);
+ power = new MageInt(0);
+ toughness = new MageInt(0);
+ this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SetPowerToughnessSourceEffect(new GutterGrimeCounters(sourceId), Duration.WhileOnBattlefield)));
+ }
+
+ class GutterGrimeCounters implements DynamicValue {
+
+ private final UUID sourceId;
+
+ public GutterGrimeCounters(UUID sourceId) {
+ this.sourceId = sourceId;
+ }
+
+ @Override
+ public int calculate(Game game, Ability sourceAbility, Effect effect) {
+ Permanent p = game.getPermanent(sourceId);
+ if (p != null) {
+ return p.getCounters(game).getCount(CounterType.SLIME);
+ }
+ return 0;
+ }
+
+ @Override
+ public GutterGrimeCounters copy() {
+ return this;
+ }
+
+ @Override
+ public String getMessage() {
+ return "slime counters on Gutter Grime";
+ }
+
+ @Override
+ public String toString() {
+ return "1";
+ }
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/HammerOfPurphorosGolemToken.java b/Mage/src/main/java/mage/game/permanent/token/HammerOfPurphorosGolemToken.java
new file mode 100644
index 0000000000..52308b7b36
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/HammerOfPurphorosGolemToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class HammerOfPurphorosGolemToken extends Token {
+
+ public HammerOfPurphorosGolemToken() {
+ super("Golem", "3/3 colorless Golem enchantment artifact creature token");
+ setOriginalExpansionSetCode("THS");
+ cardType.add(CardType.ENCHANTMENT);
+ cardType.add(CardType.ARTIFACT);
+ cardType.add(CardType.CREATURE);
+ subtype.add("Golem");
+ power = new MageInt(3);
+ toughness = new MageInt(3);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/HauntedAngelToken.java b/Mage/src/main/java/mage/game/permanent/token/HauntedAngelToken.java
new file mode 100644
index 0000000000..6a2efff0e3
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/HauntedAngelToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class HauntedAngelToken extends Token {
+
+ public HauntedAngelToken() {
+ super("Angel", "3/3 black Angel creature token with flying");
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ subtype.add("Angel");
+ power = new MageInt(3);
+ toughness = new MageInt(3);
+ this.addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/HazezonTamarSandWarriorToken.java b/Mage/src/main/java/mage/game/permanent/token/HazezonTamarSandWarriorToken.java
new file mode 100644
index 0000000000..82d1961fd1
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/HazezonTamarSandWarriorToken.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.MageInt;
+import mage.constants.CardType;
+
+/**
+ *
+ * @author spjspj
+ */
+public class HazezonTamarSandWarriorToken extends Token {
+
+ public HazezonTamarSandWarriorToken() {
+ super("Sand Warrior", "1/1 Sand Warrior creature tokens that are red, green, and white");
+ cardType.add(CardType.CREATURE);
+ color.setRed(true);
+ color.setGreen(true);
+ color.setWhite(true);
+ subtype.add("Sand");
+ subtype.add("Warrior");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/HellionHasteToken.java b/Mage/src/main/java/mage/game/permanent/token/HellionHasteToken.java
new file mode 100644
index 0000000000..e746a497f5
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/HellionHasteToken.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.MageInt;
+import mage.abilities.keyword.HasteAbility;
+import mage.constants.CardType;
+
+/**
+ *
+ * @author spjspj
+ */
+public class HellionHasteToken extends Token {
+
+ public HellionHasteToken() {
+ super("Hellion", "4/4 red Hellion creature token with haste");
+ cardType.add(CardType.CREATURE);
+ color.setRed(true);
+ subtype.add("Hellion");
+ power = new MageInt(4);
+ toughness = new MageInt(4);
+ addAbility(HasteAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/HellionToken.java b/Mage/src/main/java/mage/game/permanent/token/HellionToken.java
new file mode 100644
index 0000000000..a4672fb64e
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/HellionToken.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.MageInt;
+import mage.constants.CardType;
+
+/**
+ *
+ * @author spjspj
+ */
+public class HellionToken extends Token {
+
+ public HellionToken() {
+ super("Hellion", "4/4 red Hellion creature token");
+ cardType.add(CardType.CREATURE);
+ color.setRed(true);
+ subtype.add("Hellion");
+ power = new MageInt(4);
+ toughness = new MageInt(4);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/HippoToken2.java b/Mage/src/main/java/mage/game/permanent/token/HippoToken2.java
index 38706a9332..2a820febe3 100644
--- a/Mage/src/main/java/mage/game/permanent/token/HippoToken2.java
+++ b/Mage/src/main/java/mage/game/permanent/token/HippoToken2.java
@@ -45,7 +45,7 @@ public class HippoToken2 extends Token {
super("Hippo", "3/3 green Hippo creature token");
cardType.add(CardType.CREATURE);
color.setGreen(true);
- subtype.add("Centaur");
+ subtype.add("Hippo");
power = new MageInt(3);
toughness = new MageInt(3);
}
diff --git a/Mage/src/main/java/mage/game/permanent/token/HomunculusToken.java b/Mage/src/main/java/mage/game/permanent/token/HomunculusToken.java
new file mode 100644
index 0000000000..71b9217ebf
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/HomunculusToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class HomunculusToken extends Token {
+
+ public HomunculusToken() {
+ super("Homunculus", "0/1 blue Homunculus artifact creature token");
+ cardType.add(CardType.CREATURE);
+ cardType.add(CardType.ARTIFACT);
+ color.setBlue(true);
+ subtype.add("Homunculus");
+ power = new MageInt(0);
+ toughness = new MageInt(1);
+ }
+
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/HornetNestInsectToken.java b/Mage/src/main/java/mage/game/permanent/token/HornetNestInsectToken.java
new file mode 100644
index 0000000000..1384db11d6
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/HornetNestInsectToken.java
@@ -0,0 +1,53 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.DeathtouchAbility;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class HornetNestInsectToken extends Token {
+
+ public HornetNestInsectToken() {
+ super("Insect", "1/1 green Insect creature tokens with flying and deathtouch");
+ setOriginalExpansionSetCode("M15");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ subtype.add("Insect");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+
+ this.addAbility(FlyingAbility.getInstance());
+ this.addAbility(DeathtouchAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/HornetQueenInsectToken.java b/Mage/src/main/java/mage/game/permanent/token/HornetQueenInsectToken.java
new file mode 100644
index 0000000000..cb89725f0d
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/HornetQueenInsectToken.java
@@ -0,0 +1,52 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.DeathtouchAbility;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class HornetQueenInsectToken extends Token {
+
+ public HornetQueenInsectToken() {
+ super("Insect", "1/1 green Insect creature token with flying and deathtouch");
+ setOriginalExpansionSetCode("M15");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ subtype.add("Insect");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ addAbility(FlyingAbility.getInstance());
+ addAbility(DeathtouchAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/HorrorToken.java b/Mage/src/main/java/mage/game/permanent/token/HorrorToken.java
new file mode 100644
index 0000000000..7fed898d0d
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/HorrorToken.java
@@ -0,0 +1,50 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class HorrorToken extends Token {
+
+ public HorrorToken() {
+ super("Horror", "4/4 black Horror creature token");
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ subtype.add("Horror");
+ power = new MageInt(4);
+ toughness = new MageInt(4);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/HoundToken.java b/Mage/src/main/java/mage/game/permanent/token/HoundToken.java
new file mode 100644
index 0000000000..1dad3e03c9
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/HoundToken.java
@@ -0,0 +1,48 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class HoundToken extends Token {
+
+ public HoundToken() {
+ super("Hound", "1/1 green Hound creature token");
+ cardType.add(CardType.CREATURE);
+ subtype.add("Hound");
+
+ color.setGreen(true);
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/HourOfNeedSphinxToken.java b/Mage/src/main/java/mage/game/permanent/token/HourOfNeedSphinxToken.java
new file mode 100644
index 0000000000..28cf0ee146
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/HourOfNeedSphinxToken.java
@@ -0,0 +1,50 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class HourOfNeedSphinxToken extends Token {
+
+ public HourOfNeedSphinxToken() {
+ super("Sphinx", "4/4 blue Sphinx creature token with flying");
+ this.setOriginalExpansionSetCode("JOU");
+ cardType.add(CardType.CREATURE);
+ color.setBlue(true);
+ subtype.add("Sphinx");
+ power = new MageInt(4);
+ toughness = new MageInt(4);
+ addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/HumanClericToken.java b/Mage/src/main/java/mage/game/permanent/token/HumanClericToken.java
new file mode 100644
index 0000000000..ff9f89465d
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/HumanClericToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class HumanClericToken extends Token {
+
+ public HumanClericToken() {
+ super("Human Cleric", "1/1 white and black Human Cleric creature token");
+ cardType.add(CardType.CREATURE);
+ subtype.add("Human");
+ subtype.add("Cleric");
+ color.setWhite(true);
+ color.setBlack(true);
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/HuntedCentaurToken.java b/Mage/src/main/java/mage/game/permanent/token/HuntedCentaurToken.java
new file mode 100644
index 0000000000..3ba3a48d1b
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/HuntedCentaurToken.java
@@ -0,0 +1,60 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.ObjectColor;
+import mage.abilities.keyword.ProtectionAbility;
+
+/**
+ *
+ * @author LevelX2
+ */
+public class HuntedCentaurToken extends Token {
+
+ final static private List tokenImageSets = new ArrayList<>();
+
+ static {
+ tokenImageSets.addAll(Arrays.asList("RTR", "MM3"));
+ }
+
+ public HuntedCentaurToken() {
+ super("Centaur", "3/3 green Centaur creature tokens with protection from black");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ subtype.add("Centaur");
+ power = new MageInt(3);
+ toughness = new MageInt(3);
+ this.addAbility(ProtectionAbility.from(ObjectColor.BLACK));
+ }
+
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/HuntedDragonKnightToken.java b/Mage/src/main/java/mage/game/permanent/token/HuntedDragonKnightToken.java
new file mode 100644
index 0000000000..52dde71d3f
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/HuntedDragonKnightToken.java
@@ -0,0 +1,32 @@
+package mage.game.permanent.token;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import mage.MageInt;
+import mage.abilities.keyword.FirstStrikeAbility;
+import mage.constants.CardType;
+
+/**
+ *
+ * @author spjspj
+ */
+public class HuntedDragonKnightToken extends Token {
+
+ final static private List tokenImageSets = new ArrayList<>();
+
+ static {
+ tokenImageSets.addAll(Arrays.asList("ORI", "RTR", "C15"));
+ }
+
+ public HuntedDragonKnightToken() {
+ super("Knight", "2/2 white Knight creature tokens with first strike");
+ cardType.add(CardType.CREATURE);
+ color.setWhite(true);
+
+ subtype.add("Knight");
+ power = new MageInt(2);
+ toughness = new MageInt(2);
+ this.addAbility(FirstStrikeAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/HunterToken.java b/Mage/src/main/java/mage/game/permanent/token/HunterToken.java
new file mode 100644
index 0000000000..9d48b56936
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/HunterToken.java
@@ -0,0 +1,51 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+*/
+
+package mage.game.permanent.token;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class HunterToken extends Token {
+
+ public HunterToken() {
+ super("Hunter", "4/4 red Hunter creature token", 4, 4);
+ this.setOriginalExpansionSetCode("SWS");
+ cardType.add(CardType.CREATURE);
+ color.setRed(true);
+ subtype.add("Hunter");
+ }
+}
+
diff --git a/Mage/src/main/java/mage/game/permanent/token/HydraBroodmasterToken.java b/Mage/src/main/java/mage/game/permanent/token/HydraBroodmasterToken.java
new file mode 100644
index 0000000000..0082d444cd
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/HydraBroodmasterToken.java
@@ -0,0 +1,58 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+*/
+
+package mage.game.permanent.token;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class HydraBroodmasterToken extends Token {
+
+ public HydraBroodmasterToken() {
+ this(1,1);
+ }
+
+ public HydraBroodmasterToken(int power, int toughness) {
+ super("Hydra", "green Hydra creature token");
+ this.setOriginalExpansionSetCode("JOU");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ subtype.add("Hydra");
+ this.power = new MageInt(power);
+ this.toughness = new MageInt(toughness);
+ }
+
+}
+
diff --git a/Mage/src/main/java/mage/game/permanent/token/IllusionToken.java b/Mage/src/main/java/mage/game/permanent/token/IllusionToken.java
new file mode 100644
index 0000000000..f1dce2ff38
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/IllusionToken.java
@@ -0,0 +1,48 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class IllusionToken extends Token {
+
+ public IllusionToken() {
+ super("Illusion", "2/2 blue Illusion creature token");
+ cardType.add(CardType.CREATURE);
+ color.setBlue(true);
+
+ subtype.add("Illusion");
+ power = new MageInt(2);
+ toughness = new MageInt(2);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/JoinTheRanksSoldierToken.java b/Mage/src/main/java/mage/game/permanent/token/JoinTheRanksSoldierToken.java
new file mode 100644
index 0000000000..fd480f44bb
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/JoinTheRanksSoldierToken.java
@@ -0,0 +1,50 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class JoinTheRanksSoldierToken extends Token {
+
+ public JoinTheRanksSoldierToken() {
+ super("Soldier Ally", "1/1 white Soldier Ally creature token");
+ this.setOriginalExpansionSetCode("WWK");
+ cardType.add(CardType.CREATURE);
+ color.setWhite(true);
+ subtype.add("Soldier");
+ subtype.add("Ally");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/KaldraToken.java b/Mage/src/main/java/mage/game/permanent/token/KaldraToken.java
new file mode 100644
index 0000000000..50543720dd
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/KaldraToken.java
@@ -0,0 +1,48 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.constants.SuperType;
+
+/**
+ *
+ * @author spjspj
+ */
+public class KaldraToken extends Token {
+
+ public KaldraToken() {
+ super("Kaldra", "legendary 4/4 colorless Avatar creature token named Kaldra");
+ addSuperType(SuperType.LEGENDARY);
+ cardType.add(CardType.CREATURE);
+ subtype.add("Avatar");
+ power = new MageInt(4);
+ toughness = new MageInt(4);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/KalitasVampireToken.java b/Mage/src/main/java/mage/game/permanent/token/KalitasVampireToken.java
new file mode 100644
index 0000000000..be89d7f739
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/KalitasVampireToken.java
@@ -0,0 +1,51 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class KalitasVampireToken extends Token {
+
+ public KalitasVampireToken() {
+ this(1,1);
+ }
+
+ public KalitasVampireToken(int tokenPower, int tokenToughness) {
+ super("Vampire", new StringBuilder(tokenPower).append('/').append(tokenToughness).append(" black Vampire creature token").toString());
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ subtype.add("Vampire");
+ power = new MageInt(tokenPower);
+ toughness = new MageInt(tokenToughness);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/KalonianTwingroveTreefolkWarriorToken.java b/Mage/src/main/java/mage/game/permanent/token/KalonianTwingroveTreefolkWarriorToken.java
new file mode 100644
index 0000000000..c285e7dbee
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/KalonianTwingroveTreefolkWarriorToken.java
@@ -0,0 +1,57 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.common.SimpleStaticAbility;
+import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
+import mage.abilities.effects.common.continuous.SetPowerToughnessSourceEffect;
+import mage.constants.Duration;
+import mage.constants.Zone;
+import static mage.game.permanent.token.DokaiWeaverofLifeToken.filterLands;
+
+/**
+ *
+ * @author spjspj
+ */
+public class KalonianTwingroveTreefolkWarriorToken extends Token {
+
+ public KalonianTwingroveTreefolkWarriorToken() {
+ super("Treefolk Warrior", "green Treefolk Warrior creature token with \"This creature's power and toughness are each equal to the number of Forests you control.\"");
+ this.setOriginalExpansionSetCode("M15");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ subtype.add("Treefolk");
+ subtype.add("Warrior");
+ power = new MageInt(0);
+ toughness = new MageInt(0);
+
+ this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SetPowerToughnessSourceEffect(new PermanentsOnBattlefieldCount(filterLands), Duration.WhileOnBattlefield)));
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/KamahlFistOfKrosaLandToken.java b/Mage/src/main/java/mage/game/permanent/token/KamahlFistOfKrosaLandToken.java
new file mode 100644
index 0000000000..6fb3e03097
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/KamahlFistOfKrosaLandToken.java
@@ -0,0 +1,46 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class KamahlFistOfKrosaLandToken extends Token {
+
+ public KamahlFistOfKrosaLandToken() {
+ super("", "1/1 creature");
+ this.cardType.add(CardType.CREATURE);
+
+ this.power = new MageInt(1);
+ this.toughness = new MageInt(1);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/KelpToken.java b/Mage/src/main/java/mage/game/permanent/token/KelpToken.java
new file mode 100644
index 0000000000..c908d153a1
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/KelpToken.java
@@ -0,0 +1,52 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.DefenderAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class KelpToken extends Token {
+
+ public KelpToken() {
+ super("Kelp", "0/1 blue Plant Wall creature token with defender named Kelp");
+ this.setOriginalExpansionSetCode("MIR");
+ cardType.add(CardType.CREATURE);
+ color.setBlue(true);
+ subtype.add("Plant");
+ subtype.add("Wall");
+ power = new MageInt(0);
+ toughness = new MageInt(1);
+
+ this.addAbility(DefenderAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/KherKeepKoboldToken.java b/Mage/src/main/java/mage/game/permanent/token/KherKeepKoboldToken.java
new file mode 100644
index 0000000000..8f4a95ecb3
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/KherKeepKoboldToken.java
@@ -0,0 +1,48 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class KherKeepKoboldToken extends Token {
+
+ public KherKeepKoboldToken() {
+ super("Kobolds of Kher Keep", "0/1 red Kobold creature token named Kobolds of Kher Keep");
+ cardType.add(CardType.CREATURE);
+ color.setRed(true);
+ subtype.add("Kobold");
+ power = new MageInt(0);
+ toughness = new MageInt(1);
+ }
+
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/KioraKrakenToken.java b/Mage/src/main/java/mage/game/permanent/token/KioraKrakenToken.java
new file mode 100644
index 0000000000..5795779147
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/KioraKrakenToken.java
@@ -0,0 +1,48 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class KioraKrakenToken extends Token {
+
+ public KioraKrakenToken() {
+ super("Kraken", "9/9 blue Kraken creature token");
+ cardType.add(CardType.CREATURE);
+ color.setBlue(true);
+ subtype.add("Kraken");
+ power = new MageInt(9);
+ toughness = new MageInt(9);
+ this.setOriginalExpansionSetCode("BNG");
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/KnightAllyToken.java b/Mage/src/main/java/mage/game/permanent/token/KnightAllyToken.java
new file mode 100644
index 0000000000..5964d9b230
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/KnightAllyToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class KnightAllyToken extends Token {
+
+ public KnightAllyToken() {
+ super("Knight Ally", "2/2 white Knight Ally creature token");
+ this.setExpansionSetCodeForImage("BFZ");
+ cardType.add(CardType.CREATURE);
+ color.setWhite(true);
+ subtype.add("Knight");
+ subtype.add("Ally");
+ power = new MageInt(2);
+ toughness = new MageInt(2);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/LandMineToken.java b/Mage/src/main/java/mage/game/permanent/token/LandMineToken.java
new file mode 100644
index 0000000000..bdef0d8c20
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/LandMineToken.java
@@ -0,0 +1,65 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.abilities.Ability;
+import mage.abilities.common.SimpleActivatedAbility;
+import mage.abilities.costs.common.SacrificeSourceCost;
+import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.effects.common.DamageTargetEffect;
+import mage.abilities.keyword.FlyingAbility;
+import mage.constants.Zone;
+import mage.filter.common.FilterAttackingCreature;
+import mage.filter.predicate.Predicates;
+import mage.filter.predicate.mageobject.AbilityPredicate;
+import mage.target.common.TargetCreaturePermanent;
+
+/**
+ *
+ * @author spjspj
+ */
+public class LandMineToken extends Token {
+
+ private static final FilterAttackingCreature filter = new FilterAttackingCreature("attacking creature without flying");
+
+ static {
+ filter.add(Predicates.not(new AbilityPredicate(FlyingAbility.class)));
+ }
+
+ public LandMineToken() {
+ super("Land Mine", "colorless artifact token named Land Mine with \"{R}, Sacrifice this artifact: This artifact deals 2 damage to target attacking creature without flying.\"");
+ this.setOriginalExpansionSetCode("M15");
+ cardType.add(CardType.ARTIFACT);
+
+ Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2), new ManaCostsImpl("{R}"));
+ ability.addCost(new SacrificeSourceCost());
+ ability.addTarget(new TargetCreaturePermanent(filter));
+ this.addAbility(ability);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/LeafdrakeRoostDrakeToken.java b/Mage/src/main/java/mage/game/permanent/token/LeafdrakeRoostDrakeToken.java
new file mode 100644
index 0000000000..5c8173a842
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/LeafdrakeRoostDrakeToken.java
@@ -0,0 +1,51 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class LeafdrakeRoostDrakeToken extends Token {
+
+ public LeafdrakeRoostDrakeToken() {
+ super("Drake", "2/2 green and blue Drake creature token with flying");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ color.setBlue(true);
+ subtype.add("Drake");
+ power = new MageInt(2);
+ toughness = new MageInt(2);
+ this.addAbility(FlyingAbility.getInstance());
+ }
+
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/LightningRagerToken.java b/Mage/src/main/java/mage/game/permanent/token/LightningRagerToken.java
new file mode 100644
index 0000000000..5de5d26cff
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/LightningRagerToken.java
@@ -0,0 +1,57 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.common.BeginningOfEndStepTriggeredAbility;
+import mage.abilities.effects.common.SacrificeSourceEffect;
+import mage.abilities.keyword.HasteAbility;
+import mage.abilities.keyword.TrampleAbility;
+import mage.constants.TargetController;
+
+/**
+ *
+ * @author spjspj
+ */
+public class LightningRagerToken extends Token {
+
+ public LightningRagerToken() {
+ super("Lightning Rager", "5/1 red Elemental creature token named Lightning Rager."
+ + "It has trample, haste, and \"At the beginning of the end step, sacrifice this creature.\"");
+ this.setOriginalExpansionSetCode("C15");
+ cardType.add(CardType.CREATURE);
+ color.setRed(true);
+ subtype.add("Elemental");
+ power = new MageInt(5);
+ toughness = new MageInt(1);
+ addAbility(TrampleAbility.getInstance());
+ addAbility(HasteAbility.getInstance());
+ this.addAbility(new BeginningOfEndStepTriggeredAbility(new SacrificeSourceEffect(), TargetController.NEXT, false));
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/LinvalaAngelToken.java b/Mage/src/main/java/mage/game/permanent/token/LinvalaAngelToken.java
new file mode 100644
index 0000000000..7aebab1cf9
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/LinvalaAngelToken.java
@@ -0,0 +1,50 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class LinvalaAngelToken extends Token {
+
+ public LinvalaAngelToken() {
+ super("Angel", "3/3 white Angel creature token with flying");
+ setOriginalExpansionSetCode("OGW");
+ cardType.add(CardType.CREATURE);
+ color.setWhite(true);
+ subtype.add("Angel");
+ power = new MageInt(3);
+ toughness = new MageInt(3);
+ addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/LizardToken.java b/Mage/src/main/java/mage/game/permanent/token/LizardToken.java
new file mode 100644
index 0000000000..4eb7a901d1
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/LizardToken.java
@@ -0,0 +1,47 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class LizardToken extends Token {
+
+ public LizardToken() {
+ super("Lizard", "2/2 green Lizard creature token");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ subtype.add("Lizard");
+ power = new MageInt(2);
+ toughness = new MageInt(2);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/LlanowarElvesToken.java b/Mage/src/main/java/mage/game/permanent/token/LlanowarElvesToken.java
new file mode 100644
index 0000000000..56db49cd84
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/LlanowarElvesToken.java
@@ -0,0 +1,52 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.mana.GreenManaAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class LlanowarElvesToken extends Token {
+
+ public LlanowarElvesToken() {
+ super("Llanowar Elves", "1/1 green Elf Druid creature token named Llanowar Elves with \"{T}: Add {G} to your mana pool.\"");
+ this.setOriginalExpansionSetCode("FUT");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ subtype.add("Elf");
+ subtype.add("Druid");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+
+ this.addAbility(new GreenManaAbility());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/MarathWillOfTheWildElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/MarathWillOfTheWildElementalToken.java
new file mode 100644
index 0000000000..4b6797dea4
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/MarathWillOfTheWildElementalToken.java
@@ -0,0 +1,47 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class MarathWillOfTheWildElementalToken extends Token {
+
+ public MarathWillOfTheWildElementalToken() {
+ super("Elemental", "X/X green Elemental creature token");
+ cardType.add(CardType.CREATURE);
+ subtype.add("Elemental");
+ color.setGreen(true);
+ power = new MageInt(0);
+ toughness = new MageInt(0);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/MarduStrikeLeaderWarriorToken.java b/Mage/src/main/java/mage/game/permanent/token/MarduStrikeLeaderWarriorToken.java
new file mode 100644
index 0000000000..15c79d2349
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/MarduStrikeLeaderWarriorToken.java
@@ -0,0 +1,48 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class MarduStrikeLeaderWarriorToken extends Token {
+
+ public MarduStrikeLeaderWarriorToken() {
+ super("Warrior", "2/1 black Warrior creature token");
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ subtype.add("Warrior");
+ power = new MageInt(2);
+ toughness = new MageInt(1);
+ }
+
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/MaritLageToken.java b/Mage/src/main/java/mage/game/permanent/token/MaritLageToken.java
new file mode 100644
index 0000000000..3c8223014f
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/MaritLageToken.java
@@ -0,0 +1,57 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+import mage.abilities.keyword.IndestructibleAbility;
+import mage.constants.SuperType;
+
+/**
+ *
+ * @author spjspj
+ */
+public class MaritLageToken extends Token {
+
+ public MaritLageToken() {
+ super("Marit Lage", "legendary 20/20 black Avatar creature token with flying and indestructible named Marit Lage");
+ this.setOriginalExpansionSetCode("CSP");
+ cardType.add(CardType.CREATURE);
+ subtype.add("Avatar");
+ addSuperType(SuperType.LEGENDARY);
+
+ color.setBlack(true);
+ power = new MageInt(20);
+ toughness = new MageInt(20);
+
+ this.addAbility(FlyingAbility.getInstance());
+ this.addAbility(IndestructibleAbility.getInstance());
+
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/MasterOfWavesElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/MasterOfWavesElementalToken.java
new file mode 100644
index 0000000000..b3d6e20e62
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/MasterOfWavesElementalToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class MasterOfWavesElementalToken extends Token {
+
+ public MasterOfWavesElementalToken() {
+ super("Elemental", "1/0 blue Elemental creature");
+ this.cardType.add(CardType.CREATURE);
+ this.subtype.add("Elemental");
+
+ this.color.setBlue(true);
+
+ this.power = new MageInt(1);
+ this.toughness = new MageInt(0);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/MelokuTheCloudedMirrorToken.java b/Mage/src/main/java/mage/game/permanent/token/MelokuTheCloudedMirrorToken.java
new file mode 100644
index 0000000000..e2be2f90a6
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/MelokuTheCloudedMirrorToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class MelokuTheCloudedMirrorToken extends Token {
+
+ public MelokuTheCloudedMirrorToken() {
+ super("Illusion", "1/1 blue Illusion creature token with flying");
+ cardType.add(CardType.CREATURE);
+ color.setBlue(true);
+ subtype.add("Illusion");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/MercyKillingToken.java b/Mage/src/main/java/mage/game/permanent/token/MercyKillingToken.java
new file mode 100644
index 0000000000..6f87dc5520
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/MercyKillingToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class MercyKillingToken extends Token {
+
+ public MercyKillingToken() {
+ super("Elf Warrior", "1/1 green and white Elf Warrior creature token");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ color.setWhite(true);
+ subtype.add("Elf");
+ subtype.add("Warrior");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/MerfolkToken.java b/Mage/src/main/java/mage/game/permanent/token/MerfolkToken.java
new file mode 100644
index 0000000000..b0676675cf
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/MerfolkToken.java
@@ -0,0 +1,47 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class MerfolkToken extends Token {
+
+ public MerfolkToken() {
+ super("Merfolk", "1/1 blue Merfolk creature token");
+ cardType.add(CardType.CREATURE);
+ color.setBlue(true);
+ subtype.add("Merfolk");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/MetallurgicSummoningsConstructToken.java b/Mage/src/main/java/mage/game/permanent/token/MetallurgicSummoningsConstructToken.java
new file mode 100644
index 0000000000..901ddfb8d1
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/MetallurgicSummoningsConstructToken.java
@@ -0,0 +1,53 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.util.RandomUtil;
+
+/**
+ *
+ * @author spjspj
+ */
+public class MetallurgicSummoningsConstructToken extends Token {
+
+ public MetallurgicSummoningsConstructToken() {
+ this (1);
+ }
+ public MetallurgicSummoningsConstructToken(int xValue) {
+ super("Construct", "X/X colorless Construct artifact creature token");
+ setOriginalExpansionSetCode("KLD");
+ setTokenType(RandomUtil.nextInt(2) + 1);
+ cardType.add(CardType.ARTIFACT);
+ cardType.add(CardType.CREATURE);
+ subtype.add("Construct");
+ power = new MageInt(xValue);
+ toughness = new MageInt(xValue);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/MinorDemonToken.java b/Mage/src/main/java/mage/game/permanent/token/MinorDemonToken.java
new file mode 100644
index 0000000000..97dca7a84c
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/MinorDemonToken.java
@@ -0,0 +1,48 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class MinorDemonToken extends Token {
+
+ public MinorDemonToken() {
+ super("Minor Demon", "1/1 black and red Demon creature token named Minor Demon");
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ color.setRed(true);
+ subtype.add("Demon");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/MoltenBirthElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/MoltenBirthElementalToken.java
new file mode 100644
index 0000000000..1aa59de1cd
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/MoltenBirthElementalToken.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.MageInt;
+import mage.constants.CardType;
+import mage.util.RandomUtil;
+
+/**
+ *
+ * @author spjspj
+ */
+public class MoltenBirthElementalToken extends Token {
+
+ public MoltenBirthElementalToken() {
+ super("Elemental", "1/1 red Elemental creature");
+ this.setOriginalExpansionSetCode("M14");
+ this.setTokenType(RandomUtil.nextInt(2) + 1);
+ cardType.add(CardType.CREATURE);
+ color.setRed(true);
+ subtype.add("Elemental");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/MonasteryMentorToken.java b/Mage/src/main/java/mage/game/permanent/token/MonasteryMentorToken.java
new file mode 100644
index 0000000000..14bf959e3c
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/MonasteryMentorToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.ProwessAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class MonasteryMentorToken extends Token {
+
+ public MonasteryMentorToken() {
+ super("Monk", "1/1 white Monk creature token with prowess");
+ cardType.add(CardType.CREATURE);
+ color.setWhite(true);
+ subtype.add("Monk");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ this.addAbility(new ProwessAbility());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/MysticGenesisOozeToken.java b/Mage/src/main/java/mage/game/permanent/token/MysticGenesisOozeToken.java
new file mode 100644
index 0000000000..a349569ae9
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/MysticGenesisOozeToken.java
@@ -0,0 +1,51 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class MysticGenesisOozeToken extends Token {
+
+ public MysticGenesisOozeToken() {
+ this(1);
+ }
+ public MysticGenesisOozeToken(int xValue) {
+ super("Ooze", "X/X green Ooze creature token");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ subtype.add("Ooze");
+ power = new MageInt(xValue);
+ toughness = new MageInt(xValue);
+ setOriginalExpansionSetCode("RTR");
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/NahiriTheLithomancerEquipmentToken.java b/Mage/src/main/java/mage/game/permanent/token/NahiriTheLithomancerEquipmentToken.java
new file mode 100644
index 0000000000..cb26e2870b
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/NahiriTheLithomancerEquipmentToken.java
@@ -0,0 +1,63 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.abilities.Ability;
+import mage.abilities.common.SimpleStaticAbility;
+import mage.abilities.costs.mana.GenericManaCost;
+import mage.abilities.effects.common.continuous.BoostEquippedEffect;
+import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
+import mage.abilities.keyword.DoubleStrikeAbility;
+import mage.abilities.keyword.EquipAbility;
+import mage.abilities.keyword.IndestructibleAbility;
+import mage.constants.AttachmentType;
+import mage.constants.Duration;
+import mage.constants.Outcome;
+import mage.constants.Zone;
+
+/**
+ *
+ * @author spjspj
+ */
+public class NahiriTheLithomancerEquipmentToken extends Token {
+
+ public NahiriTheLithomancerEquipmentToken() {
+ super("Stoneforged Blade", "colorless Equipment artifact token named Stoneforged Blade with indestructible, \"Equipped creature gets +5/+5 and has double strike,\" and equip {0}");
+ cardType.add(CardType.ARTIFACT);
+ subtype.add("Equipment");
+
+ this.addAbility(IndestructibleAbility.getInstance());
+
+ Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(5, 5));
+ ability.addEffect(new GainAbilityAttachedEffect(DoubleStrikeAbility.getInstance(), AttachmentType.EQUIPMENT, Duration.WhileOnBattlefield, "and has double strike"));
+ this.addAbility(ability);
+
+ this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(0)));
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/NestOfScarabsBlackInsectToken.java b/Mage/src/main/java/mage/game/permanent/token/NestOfScarabsBlackInsectToken.java
new file mode 100644
index 0000000000..8434fa6d65
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/NestOfScarabsBlackInsectToken.java
@@ -0,0 +1,47 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class NestOfScarabsBlackInsectToken extends Token {
+
+ public NestOfScarabsBlackInsectToken() {
+ super("Insect", "1/1 black Insect token");
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ subtype.add("Insect");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/NighteyesTheDesecratorToken.java b/Mage/src/main/java/mage/game/permanent/token/NighteyesTheDesecratorToken.java
new file mode 100644
index 0000000000..ec293c599f
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/NighteyesTheDesecratorToken.java
@@ -0,0 +1,61 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.SimpleActivatedAbility;
+import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect;
+import mage.constants.SuperType;
+import mage.constants.Zone;
+import mage.filter.common.FilterCreatureCard;
+import mage.target.common.TargetCardInGraveyard;
+
+/**
+ *
+ * @author spjspj
+ */
+public class NighteyesTheDesecratorToken extends Token {
+
+ public NighteyesTheDesecratorToken() {
+ super("Nighteyes the Desecrator", "");
+ addSuperType(SuperType.LEGENDARY);
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ subtype.add("Rat");
+ subtype.add("Wizard");
+ power = new MageInt(4);
+ toughness = new MageInt(2);
+ // {4}{B}: Put target creature card from a graveyard onto the battlefield under your control.
+ Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnFromGraveyardToBattlefieldTargetEffect(), new ManaCostsImpl("{4}{B}"));
+ ability.addTarget(new TargetCardInGraveyard(new FilterCreatureCard("creature card from a graveyard")));
+ this.addAbility(ability);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/NightwingHorrorToken.java b/Mage/src/main/java/mage/game/permanent/token/NightwingHorrorToken.java
new file mode 100644
index 0000000000..024625a8bb
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/NightwingHorrorToken.java
@@ -0,0 +1,52 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class NightwingHorrorToken extends Token {
+
+ public NightwingHorrorToken() {
+ super("Horror", "1/1 blue and black Horror creature token with flying");
+ cardType.add(CardType.CREATURE);
+ this.color.setBlue(true);
+ this.color.setBlack(true);
+ this.subtype.add("Horror");
+ this.power = new MageInt(1);
+ this.toughness = new MageInt(1);
+
+ // Flying
+ this.addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/NissaSageAnimistToken.java b/Mage/src/main/java/mage/game/permanent/token/NissaSageAnimistToken.java
new file mode 100644
index 0000000000..603856cc28
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/NissaSageAnimistToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.constants.SuperType;
+
+/**
+ *
+ * @author spjspj
+ */
+public class NissaSageAnimistToken extends Token {
+
+ public NissaSageAnimistToken() {
+ super("Ashaya, the Awoken World", "legendary 4/4 green Elemental creature token named Ashaya, the Awoken World");
+ this.setOriginalExpansionSetCode("ORI");
+ this.addSuperType(SuperType.LEGENDARY);
+ this.getPower().modifyBaseValue(4);
+ this.getToughness().modifyBaseValue(4);
+ this.color.setGreen(true);
+ this.getSubtype(null).add("Elemental");
+ this.addCardType(CardType.CREATURE);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/OctopusToken.java b/Mage/src/main/java/mage/game/permanent/token/OctopusToken.java
new file mode 100644
index 0000000000..590c25e35f
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/OctopusToken.java
@@ -0,0 +1,48 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class OctopusToken extends Token {
+
+ public OctopusToken() {
+ super("Octopus", "8/8 blue Octopus creature token");
+ cardType.add(CardType.CREATURE);
+ color.setBlue(true);
+ subtype.add("Octopus");
+ power = new MageInt(8);
+ toughness = new MageInt(8);
+ this.setOriginalExpansionSetCode("BFZ");
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/OgreToken.java b/Mage/src/main/java/mage/game/permanent/token/OgreToken.java
new file mode 100644
index 0000000000..b76a68fcc1
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/OgreToken.java
@@ -0,0 +1,47 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class OgreToken extends Token {
+
+ public OgreToken() {
+ super("Ogre", "3/3 red Ogre creature");
+ cardType.add(CardType.CREATURE);
+ color.setRed(true);
+ subtype.add("Ogre");
+ power = new MageInt(3);
+ toughness = new MageInt(3);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/OmnathElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/OmnathElementalToken.java
new file mode 100644
index 0000000000..6f9b1ac024
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/OmnathElementalToken.java
@@ -0,0 +1,51 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class OmnathElementalToken extends Token {
+
+ public OmnathElementalToken() {
+ super("Elemental", "5/5 red and green Elemental creature token");
+ setTokenType(2);
+ setOriginalExpansionSetCode("BFZ");
+ cardType.add(CardType.CREATURE);
+ subtype.add("Elemental");
+
+ color.setRed(true);
+ color.setGreen(true);
+ power = new MageInt(5);
+ toughness = new MageInt(5);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/OmnibianFrogToken.java b/Mage/src/main/java/mage/game/permanent/token/OmnibianFrogToken.java
new file mode 100644
index 0000000000..d101243838
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/OmnibianFrogToken.java
@@ -0,0 +1,44 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class OmnibianFrogToken extends Token {
+
+ public OmnibianFrogToken() {
+ super("", "3/3 Frog");
+ this.subtype.add("Frog");
+ this.power = new MageInt(3);
+ this.toughness = new MageInt(3);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/OneDozenEyesBeastToken.java b/Mage/src/main/java/mage/game/permanent/token/OneDozenEyesBeastToken.java
new file mode 100644
index 0000000000..39d703f1e7
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/OneDozenEyesBeastToken.java
@@ -0,0 +1,48 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class OneDozenEyesBeastToken extends Token {
+
+ public OneDozenEyesBeastToken() {
+ super("Beast", "5/5 green Beast creature token");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ subtype.add("Beast");
+ power = new MageInt(5);
+ toughness = new MageInt(5);
+ }
+
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/OonaQueenFaerieToken.java b/Mage/src/main/java/mage/game/permanent/token/OonaQueenFaerieToken.java
new file mode 100644
index 0000000000..bcbd37611a
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/OonaQueenFaerieToken.java
@@ -0,0 +1,51 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class OonaQueenFaerieToken extends Token {
+
+ public OonaQueenFaerieToken() {
+ super("Faerie Rogue", "1/1 blue and black Faerie Rogue creature token with flying");
+ cardType.add(CardType.CREATURE);
+ color.setBlue(true);
+ color.setBlack(true);
+ subtype.add("Faerie");
+ subtype.add("Rogue");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ this.addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/Ooze2Token.java b/Mage/src/main/java/mage/game/permanent/token/Ooze2Token.java
new file mode 100644
index 0000000000..b6026fab82
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/Ooze2Token.java
@@ -0,0 +1,50 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.common.DiesTriggeredAbility;
+import mage.abilities.effects.common.CreateTokenEffect;
+
+/**
+ *
+ * @author spjspj
+ */
+public class Ooze2Token extends Token {
+
+ public Ooze2Token() {
+ super("Ooze", "2/2 green Ooze creature tokens with \"When this creature is put into a graveyard, create two 1/1 green Ooze creature tokens.\"");
+ cardType.add(CardType.CREATURE);
+ subtype.add("Ooze");
+ color.setGreen(true);
+ power = new MageInt(2);
+ toughness = new MageInt(2);
+ this.addAbility(new DiesTriggeredAbility(new CreateTokenEffect(new OozeToken(1, 1), 2), false));
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/OphiomancerSnakeToken.java b/Mage/src/main/java/mage/game/permanent/token/OphiomancerSnakeToken.java
new file mode 100644
index 0000000000..004c3e85a2
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/OphiomancerSnakeToken.java
@@ -0,0 +1,50 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.DeathtouchAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class OphiomancerSnakeToken extends Token {
+
+ public OphiomancerSnakeToken() {
+ super("Snake", "1/1 black Snake creature token with deathtouch");
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ subtype.add("Snake");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ this.addAbility(DeathtouchAbility.getInstance());
+ }
+
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/OrderedMigrationBirdToken.java b/Mage/src/main/java/mage/game/permanent/token/OrderedMigrationBirdToken.java
new file mode 100644
index 0000000000..8ac9e9fa5b
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/OrderedMigrationBirdToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+import mage.constants.CardType;
+
+/**
+ *
+ * @author LoneFox
+ */
+public class OrderedMigrationBirdToken extends Token {
+
+ public OrderedMigrationBirdToken() {
+ super("Bird", "1/1 blue Bird creature token with flying");
+ cardType.add(CardType.CREATURE);
+ color.setBlue(true);
+ subtype.add("Bird");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/OviyaPashiriSageLifecrafterToken.java b/Mage/src/main/java/mage/game/permanent/token/OviyaPashiriSageLifecrafterToken.java
new file mode 100644
index 0000000000..9d8517320e
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/OviyaPashiriSageLifecrafterToken.java
@@ -0,0 +1,57 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.filter.common.FilterControlledCreaturePermanent;
+import mage.util.RandomUtil;
+
+/**
+ *
+ * @author spjspj
+ */
+public class OviyaPashiriSageLifecrafterToken extends Token {
+
+ final static FilterControlledCreaturePermanent filterCreature = new FilterControlledCreaturePermanent("creatures you control");
+
+ public OviyaPashiriSageLifecrafterToken() {
+ this(1);
+ }
+
+ public OviyaPashiriSageLifecrafterToken(int number) {
+ super("Construct", "an X/X colorless Construct artifact creature token, where X is the number of creatures you control");
+ cardType.add(CardType.ARTIFACT);
+ cardType.add(CardType.CREATURE);
+ subtype.add("Construct");
+ setOriginalExpansionSetCode("KLD");
+ setTokenType(RandomUtil.nextInt(2) + 1);
+ power = new MageInt(number);
+ toughness = new MageInt(number);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/OwlToken.java b/Mage/src/main/java/mage/game/permanent/token/OwlToken.java
new file mode 100644
index 0000000000..8534f57e3f
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/OwlToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class OwlToken extends Token {
+
+ public OwlToken() {
+ super("Bird", "1/1 blue Bird creature token with flying");
+ cardType.add(CardType.CREATURE);
+ color.setBlue(true);
+ subtype.add("Bird");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ this.addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/PatagiaViperSnakeToken.java b/Mage/src/main/java/mage/game/permanent/token/PatagiaViperSnakeToken.java
new file mode 100644
index 0000000000..81efe8f80c
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/PatagiaViperSnakeToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class PatagiaViperSnakeToken extends Token {
+
+ public PatagiaViperSnakeToken() {
+ super("Snake", "1/1 green and blue Snake creature token");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ color.setBlue(true);
+ subtype.add("Snake");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ }
+
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/PentaviteToken.java b/Mage/src/main/java/mage/game/permanent/token/PentaviteToken.java
new file mode 100644
index 0000000000..8159f18c69
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/PentaviteToken.java
@@ -0,0 +1,50 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class PentaviteToken extends Token {
+
+ public PentaviteToken() {
+ super("Pentavite", "1/1 colorless Pentavite artifact creature token with flying");
+ cardType.add(CardType.ARTIFACT);
+ cardType.add(CardType.CREATURE);
+ subtype.add("Pentavite");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ this.addAbility(FlyingAbility.getInstance());
+ }
+
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/PenumbraBobcatToken.java b/Mage/src/main/java/mage/game/permanent/token/PenumbraBobcatToken.java
new file mode 100644
index 0000000000..737d1a4cd0
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/PenumbraBobcatToken.java
@@ -0,0 +1,47 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class PenumbraBobcatToken extends Token {
+
+ public PenumbraBobcatToken() {
+ super("Cat", "2/1 black Cat creature token");
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ subtype.add("Cat");
+ power = new MageInt(2);
+ toughness = new MageInt(1);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/PenumbraKavuToken.java b/Mage/src/main/java/mage/game/permanent/token/PenumbraKavuToken.java
new file mode 100644
index 0000000000..15c5d9d4e0
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/PenumbraKavuToken.java
@@ -0,0 +1,47 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class PenumbraKavuToken extends Token {
+
+ public PenumbraKavuToken() {
+ super("Kavu", "3/3 black Kavu creature token");
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ subtype.add("Kavu");
+ power = new MageInt(3);
+ toughness = new MageInt(3);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/PenumbraSpiderToken.java b/Mage/src/main/java/mage/game/permanent/token/PenumbraSpiderToken.java
new file mode 100644
index 0000000000..234cd39899
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/PenumbraSpiderToken.java
@@ -0,0 +1,50 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.ReachAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class PenumbraSpiderToken extends Token {
+
+ public PenumbraSpiderToken() {
+
+ super("Spider", "2/4 black Spider creature token with reach");
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ subtype.add("Spider");
+ power = new MageInt(2);
+ toughness = new MageInt(4);
+ addAbility(ReachAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/PenumbraWurmToken.java b/Mage/src/main/java/mage/game/permanent/token/PenumbraWurmToken.java
new file mode 100644
index 0000000000..39d36774d0
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/PenumbraWurmToken.java
@@ -0,0 +1,50 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.TrampleAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class PenumbraWurmToken extends Token {
+
+ public PenumbraWurmToken() {
+ super("Wurm", "6/6 black Wurm creature token with trample");
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ subtype.add("Wurm");
+ power = new MageInt(6);
+ toughness = new MageInt(6);
+
+ this.addAbility(TrampleAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/PestToken.java b/Mage/src/main/java/mage/game/permanent/token/PestToken.java
new file mode 100644
index 0000000000..1d35449e68
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/PestToken.java
@@ -0,0 +1,48 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class PestToken extends Token {
+
+ public PestToken() {
+ super("Pest", "0/1 colorless Pest artifact creature token");
+ cardType.add(CardType.ARTIFACT);
+ cardType.add(CardType.CREATURE);
+ subtype.add("Pest");
+ power = new MageInt(0);
+ toughness = new MageInt(1);
+ }
+
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/PharikaSnakeToken.java b/Mage/src/main/java/mage/game/permanent/token/PharikaSnakeToken.java
new file mode 100644
index 0000000000..e692208ccb
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/PharikaSnakeToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.abilities.keyword.DeathtouchAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class PharikaSnakeToken extends Token {
+
+ public PharikaSnakeToken() {
+ super("Snake", "1/1 black and green Snake enchantment creature token with deathtouch", 1, 1);
+ this.setOriginalExpansionSetCode("JOU");
+ cardType.add(CardType.ENCHANTMENT);
+ cardType.add(CardType.CREATURE);
+ subtype.add("Snake");
+ color.setBlack(true);
+ color.setGreen(true);
+ this.addAbility(DeathtouchAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/PhyrexianRebirthHorrorToken.java b/Mage/src/main/java/mage/game/permanent/token/PhyrexianRebirthHorrorToken.java
new file mode 100644
index 0000000000..5fc615a7b9
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/PhyrexianRebirthHorrorToken.java
@@ -0,0 +1,47 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class PhyrexianRebirthHorrorToken extends Token {
+
+ public PhyrexianRebirthHorrorToken() {
+ super("Horror", "X/X colorless Horror artifact creature token");
+ cardType.add(CardType.ARTIFACT);
+ cardType.add(CardType.CREATURE);
+ subtype.add("Horror");
+ power = new MageInt(0);
+ toughness = new MageInt(0);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/PincherToken.java b/Mage/src/main/java/mage/game/permanent/token/PincherToken.java
new file mode 100644
index 0000000000..fe0e505b9a
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/PincherToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class PincherToken extends Token {
+
+ public PincherToken() {
+ super("Pincher", "2/2 colorless Pincher creature token");
+ setOriginalExpansionSetCode("5ND");
+ cardType.add(CardType.CREATURE);
+ subtype.add("Pincher");
+ power = new MageInt(2);
+ toughness = new MageInt(2);
+
+ }
+
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/PongifyApeToken.java b/Mage/src/main/java/mage/game/permanent/token/PongifyApeToken.java
new file mode 100644
index 0000000000..fb6b331300
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/PongifyApeToken.java
@@ -0,0 +1,47 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class PongifyApeToken extends Token {
+
+ public PongifyApeToken() {
+ super("Ape", "3/3 green Ape creature token");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ subtype.add("Ape");
+ power = new MageInt(3);
+ toughness = new MageInt(3);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/PromiseOfPowerDemonToken.java b/Mage/src/main/java/mage/game/permanent/token/PromiseOfPowerDemonToken.java
new file mode 100644
index 0000000000..fbbcceb2be
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/PromiseOfPowerDemonToken.java
@@ -0,0 +1,55 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class PromiseOfPowerDemonToken extends Token {
+
+ public PromiseOfPowerDemonToken() {
+ this(1);
+ }
+ public PromiseOfPowerDemonToken(int xValue) {
+ super("Demon", "X/X black Demon creature token with flying");
+ setOriginalExpansionSetCode("C14");
+ setTokenType(2);
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ subtype.add("Demon");
+ power = new MageInt(xValue);
+ toughness = new MageInt(xValue);
+
+ addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/ProsshKoboldToken.java b/Mage/src/main/java/mage/game/permanent/token/ProsshKoboldToken.java
new file mode 100644
index 0000000000..cc3a19aa1c
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/ProsshKoboldToken.java
@@ -0,0 +1,47 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class ProsshKoboldToken extends Token {
+
+ public ProsshKoboldToken() {
+ super("Kobolds of Kher Keep", "0/1 red Kobold creature tokens");
+ cardType.add(CardType.CREATURE);
+ color.setRed(true);
+ subtype.add("Kobold");
+ power = new MageInt(0);
+ toughness = new MageInt(1);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/QueenMarchesaAssassinToken.java b/Mage/src/main/java/mage/game/permanent/token/QueenMarchesaAssassinToken.java
new file mode 100644
index 0000000000..1bde202df4
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/QueenMarchesaAssassinToken.java
@@ -0,0 +1,51 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.DeathtouchAbility;
+import mage.abilities.keyword.HasteAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class QueenMarchesaAssassinToken extends Token {
+
+ public QueenMarchesaAssassinToken() {
+ super("Assassin", "1/1 black Assassin creature tokens with deathtouch and haste");
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ subtype.add("Assassin");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ addAbility(DeathtouchAbility.getInstance());
+ addAbility(HasteAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/QuestForTheGravelordZombieToken.java b/Mage/src/main/java/mage/game/permanent/token/QuestForTheGravelordZombieToken.java
new file mode 100644
index 0000000000..4090d51a07
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/QuestForTheGravelordZombieToken.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+
+import mage.MageInt;
+import mage.constants.CardType;
+
+/**
+ *
+ * spjspj
+ */
+public class QuestForTheGravelordZombieToken extends Token {
+
+ public QuestForTheGravelordZombieToken() {
+ super("Zombie Giant", "5/5 black Zombie Giant creature token");
+ cardType.add(CardType.CREATURE);
+ subtype.add("Zombie");
+ subtype.add("Giant");
+
+ color.setBlack(true);
+ power = new MageInt(5);
+ toughness = new MageInt(5);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/RagavanToken.java b/Mage/src/main/java/mage/game/permanent/token/RagavanToken.java
new file mode 100644
index 0000000000..d7cd2a0d67
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/RagavanToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.constants.SuperType;
+
+/**
+ *
+ * @author spjspj
+ */
+public class RagavanToken extends Token {
+
+ public RagavanToken() {
+ super("Ragavan", "legendary 2/1 red Monkey creature token named Ragavan");
+ this.setOriginalExpansionSetCode("AER");
+ this.addSuperType(SuperType.LEGENDARY);
+ this.getPower().modifyBaseValue(2);
+ this.getToughness().modifyBaseValue(1);
+ this.color.setRed(true);
+ this.getSubtype(null).add("Monkey");
+ this.addCardType(CardType.CREATURE);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/RakdosGuildmageGoblinToken.java b/Mage/src/main/java/mage/game/permanent/token/RakdosGuildmageGoblinToken.java
new file mode 100644
index 0000000000..4373ef988d
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/RakdosGuildmageGoblinToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.HasteAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class RakdosGuildmageGoblinToken extends Token {
+
+ public RakdosGuildmageGoblinToken() {
+ super("Goblin", "2/1 red Goblin creature token with haste");
+ cardType.add(CardType.CREATURE);
+ color.setRed(true);
+ subtype.add("Goblin");
+ power = new MageInt(2);
+ toughness = new MageInt(1);
+ this.addAbility(HasteAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/RakkaMarElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/RakkaMarElementalToken.java
new file mode 100644
index 0000000000..443391fd33
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/RakkaMarElementalToken.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.MageInt;
+import mage.abilities.keyword.HasteAbility;
+import mage.constants.CardType;
+
+/**
+ *
+ * @author spjspj
+ */
+public class RakkaMarElementalToken extends Token {
+
+ public RakkaMarElementalToken () {
+ super("Elemental", "3/1 red Elemental creature with Haste");
+ cardType.add(CardType.CREATURE);
+ color.setRed(true);
+ subtype.add("Elemental");
+ power = new MageInt(3);
+ toughness = new MageInt(1);
+ addAbility(HasteAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/RallyTheHordeWarriorToken.java b/Mage/src/main/java/mage/game/permanent/token/RallyTheHordeWarriorToken.java
new file mode 100644
index 0000000000..9e782a7188
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/RallyTheHordeWarriorToken.java
@@ -0,0 +1,47 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class RallyTheHordeWarriorToken extends Token {
+
+ public RallyTheHordeWarriorToken() {
+ super("Warrior", "1/1 red Warrior creature token");
+ cardType.add(CardType.CREATURE);
+ color.setRed(true);
+ subtype.add("Warrior");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/RapidHybridizationToken.java b/Mage/src/main/java/mage/game/permanent/token/RapidHybridizationToken.java
new file mode 100644
index 0000000000..d22e593f70
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/RapidHybridizationToken.java
@@ -0,0 +1,53 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class RapidHybridizationToken extends Token {
+
+ public RapidHybridizationToken() {
+ super("Frog Lizard", "3/3 green Frog Lizard creature token");
+ this.setOriginalExpansionSetCode("GTC");
+ cardType.add(CardType.CREATURE);
+
+ color.setGreen(true);
+
+ subtype.add("Frog");
+ subtype.add("Lizard");
+
+ power = new MageInt(3);
+ toughness = new MageInt(3);
+ }
+
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/RebelStarshipToken.java b/Mage/src/main/java/mage/game/permanent/token/RebelStarshipToken.java
new file mode 100644
index 0000000000..b35e418a8e
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/RebelStarshipToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.abilities.keyword.SpaceflightAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class RebelStarshipToken extends Token {
+
+ public RebelStarshipToken() {
+ super("B-Wing", "2/3 blue Rebel Starship artifact creature tokens with spaceflight name B-Wing", 2, 3);
+ this.setOriginalExpansionSetCode("SWS");
+ cardType.add(CardType.CREATURE);
+ cardType.add(CardType.ARTIFACT);
+ abilities.add(SpaceflightAbility.getInstance());
+ color.setBlue(true);
+ subtype.add("Rebel");
+ subtype.add("Starship");
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/RebelToken.java b/Mage/src/main/java/mage/game/permanent/token/RebelToken.java
new file mode 100644
index 0000000000..50699ac436
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/RebelToken.java
@@ -0,0 +1,45 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+
+/**
+ *
+ * @author spjspj
+ */
+public class RebelToken extends Token {
+
+ public RebelToken() {
+ super("Rebel", "1/1 white Rebel creature token", 1, 1);
+ this.setOriginalExpansionSetCode("SWS");
+ cardType.add(CardType.CREATURE);
+ color.setWhite(true);
+ subtype.add("Rebel");
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/RedHumanToken.java b/Mage/src/main/java/mage/game/permanent/token/RedHumanToken.java
new file mode 100644
index 0000000000..28348c4471
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/RedHumanToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.ObjectColor;
+
+/**
+ *
+ * @author spjspj
+ */
+public class RedHumanToken extends Token {
+
+ public RedHumanToken() {
+ super("Human", "1/1 red Human creature token");
+ this.cardType.add(CardType.CREATURE);
+ this.subtype.add("Human");
+
+ this.color = ObjectColor.RED;
+ this.power = new MageInt(1);
+ this.toughness = new MageInt(1);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/ReefWormFishToken.java b/Mage/src/main/java/mage/game/permanent/token/ReefWormFishToken.java
new file mode 100644
index 0000000000..cd00acba9c
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/ReefWormFishToken.java
@@ -0,0 +1,52 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.common.DiesTriggeredAbility;
+import mage.abilities.effects.common.CreateTokenEffect;
+
+/**
+ *
+ * @author spjspj
+ */
+public class ReefWormFishToken extends Token {
+
+ public ReefWormFishToken() {
+ super("Fish", "3/3 blue Fish creature token with \"When this creature dies, create a 6/6 blue Whale creature token with \"When this creature dies, create a 9/9 blue Kraken creature token.\"\"");
+ setOriginalExpansionSetCode("C14");
+ cardType.add(CardType.CREATURE);
+ color.setBlue(true);
+ subtype.add("Fish");
+ power = new MageInt(3);
+ toughness = new MageInt(3);
+
+ addAbility(new DiesTriggeredAbility(new CreateTokenEffect(new ReefWormWhaleToken())));
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/ReefWormKrakenToken.java b/Mage/src/main/java/mage/game/permanent/token/ReefWormKrakenToken.java
new file mode 100644
index 0000000000..625c23900b
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/ReefWormKrakenToken.java
@@ -0,0 +1,48 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class ReefWormKrakenToken extends Token {
+
+ public ReefWormKrakenToken() {
+ super("Kraken", "9/9 blue Kraken creature token");
+ setOriginalExpansionSetCode("C14");
+ cardType.add(CardType.CREATURE);
+ color.setBlue(true);
+ subtype.add("Kraken");
+ power = new MageInt(9);
+ toughness = new MageInt(9);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/ReefWormWhaleToken.java b/Mage/src/main/java/mage/game/permanent/token/ReefWormWhaleToken.java
new file mode 100644
index 0000000000..5cde984b63
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/ReefWormWhaleToken.java
@@ -0,0 +1,52 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.common.DiesTriggeredAbility;
+import mage.abilities.effects.common.CreateTokenEffect;
+
+/**
+ *
+ * @author spjspj
+ */
+public class ReefWormWhaleToken extends Token {
+
+ public ReefWormWhaleToken() {
+ super("Whale", "6/6 blue Whale creature token with \"When this creature dies, create a 9/9 blue Kraken creature token.\"");
+ setOriginalExpansionSetCode("C14");
+ cardType.add(CardType.CREATURE);
+ color.setBlue(true);
+ subtype.add("Whale");
+ power = new MageInt(6);
+ toughness = new MageInt(6);
+
+ addAbility(new DiesTriggeredAbility(new CreateTokenEffect(new ReefWormKrakenToken())));
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/ReflectionToken.java b/Mage/src/main/java/mage/game/permanent/token/ReflectionToken.java
new file mode 100644
index 0000000000..8c50d67b09
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/ReflectionToken.java
@@ -0,0 +1,48 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class ReflectionToken extends Token {
+
+ public ReflectionToken() {
+ super("Reflection", "2/2 white Reflection creature token");
+ this.setOriginalExpansionSetCode("TMP");
+ cardType.add(CardType.CREATURE);
+ color.setWhite(true);
+ subtype.add("Reflection");
+ power = new MageInt(2);
+ toughness = new MageInt(2);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/ReignOfThePitToken.java b/Mage/src/main/java/mage/game/permanent/token/ReignOfThePitToken.java
new file mode 100644
index 0000000000..2830ea3ec2
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/ReignOfThePitToken.java
@@ -0,0 +1,52 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class ReignOfThePitToken extends Token {
+
+ public ReignOfThePitToken() {
+ this(1);
+ }
+ public ReignOfThePitToken(int xValue) {
+ super("Demon", "X/X black Demon creature token with flying");
+ power = new MageInt(xValue);
+ toughness = new MageInt(xValue);
+ color.setBlack(true);
+ subtype.add("Demon");
+ cardType.add(CardType.CREATURE);
+ this.addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/RenownedWeaverSpiderToken.java b/Mage/src/main/java/mage/game/permanent/token/RenownedWeaverSpiderToken.java
new file mode 100644
index 0000000000..4a9d295748
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/RenownedWeaverSpiderToken.java
@@ -0,0 +1,52 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.ObjectColor;
+import mage.abilities.keyword.ReachAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class RenownedWeaverSpiderToken extends Token {
+
+ public RenownedWeaverSpiderToken() {
+ super("Spider", "1/3 green Spider enchantment creature token with reach");
+ this.setOriginalExpansionSetCode("JOU");
+ cardType.add(CardType.ENCHANTMENT);
+ cardType.add(CardType.CREATURE);
+ color.setColor(ObjectColor.GREEN);
+ subtype.add("Spider");
+ power = new MageInt(1);
+ toughness = new MageInt(3);
+ this.addAbility(ReachAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/RevelOfTheFallenGodSatyrToken.java b/Mage/src/main/java/mage/game/permanent/token/RevelOfTheFallenGodSatyrToken.java
new file mode 100644
index 0000000000..9701a858ff
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/RevelOfTheFallenGodSatyrToken.java
@@ -0,0 +1,52 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.ObjectColor;
+import mage.abilities.keyword.HasteAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class RevelOfTheFallenGodSatyrToken extends Token {
+
+ public RevelOfTheFallenGodSatyrToken() {
+ super("Satyr", "2/2 red and green Satyr creature tokens with haste");
+ this.setOriginalExpansionSetCode("THS");
+ cardType.add(CardType.CREATURE);
+ color.setColor(ObjectColor.RED);
+ color.setColor(ObjectColor.GREEN);
+ subtype.add("Satyr");
+ power = new MageInt(2);
+ toughness = new MageInt(2);
+ addAbility(HasteAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/RhinoToken.java b/Mage/src/main/java/mage/game/permanent/token/RhinoToken.java
new file mode 100644
index 0000000000..36a93b14ce
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/RhinoToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.TrampleAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class RhinoToken extends Token {
+
+ public RhinoToken() {
+ super("Rhino", "4/4 green Rhino creature token with trample");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ subtype.add("Rhino");
+ power = new MageInt(4);
+ toughness = new MageInt(4);
+ addAbility(TrampleAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/RhysTheRedeemedToken.java b/Mage/src/main/java/mage/game/permanent/token/RhysTheRedeemedToken.java
new file mode 100644
index 0000000000..300e7a359f
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/RhysTheRedeemedToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class RhysTheRedeemedToken extends Token {
+
+ public RhysTheRedeemedToken() {
+ super("Elf Warrior", "1/1 green and white Elf Warrior creature token");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ color.setWhite(true);
+ subtype.add("Elf");
+ subtype.add("Warrior");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/RiftmarkedKnightToken.java b/Mage/src/main/java/mage/game/permanent/token/RiftmarkedKnightToken.java
new file mode 100644
index 0000000000..10b4de59aa
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/RiftmarkedKnightToken.java
@@ -0,0 +1,54 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.ObjectColor;
+import mage.abilities.keyword.FlankingAbility;
+import mage.abilities.keyword.HasteAbility;
+import mage.abilities.keyword.ProtectionAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class RiftmarkedKnightToken extends Token {
+
+ public RiftmarkedKnightToken() {
+ super("Knight", "2/2 black Knight creature token with flanking, protection from white, and haste");
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ subtype.add("Knight");
+ power = new MageInt(2);
+ toughness = new MageInt(2);
+ this.addAbility(ProtectionAbility.from(ObjectColor.WHITE));
+ this.addAbility(new FlankingAbility());
+ this.addAbility(HasteAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/RiptideReplicatorToken.java b/Mage/src/main/java/mage/game/permanent/token/RiptideReplicatorToken.java
new file mode 100644
index 0000000000..fadefc1844
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/RiptideReplicatorToken.java
@@ -0,0 +1,55 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.ObjectColor;
+
+/**
+ *
+ * @author spjspj
+ */
+public class RiptideReplicatorToken extends Token {
+
+ public RiptideReplicatorToken() {
+ this(null, null, 1);
+ }
+ public RiptideReplicatorToken(ObjectColor color, String type, int x) {
+ super(type, "X/X creature token of the chosen color and type");
+ cardType.add(CardType.CREATURE);
+ if (color != null) {
+ this.color.setColor(color);
+ }
+ if (type != null) {
+ subtype.add(type);
+ }
+ power = new MageInt(x);
+ toughness = new MageInt(x);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/RiseOfEaglesBirdToken.java b/Mage/src/main/java/mage/game/permanent/token/RiseOfEaglesBirdToken.java
new file mode 100644
index 0000000000..ac6a182ddb
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/RiseOfEaglesBirdToken.java
@@ -0,0 +1,53 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.ObjectColor;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class RiseOfEaglesBirdToken extends Token {
+
+ public RiseOfEaglesBirdToken() {
+ super("Bird", "2/2 blue Bird enchantment creature tokens with flying");
+ this.setOriginalExpansionSetCode("BNG");
+ this.setTokenType(2);
+ cardType.add(CardType.ENCHANTMENT);
+ cardType.add(CardType.CREATURE);
+ color.setColor(ObjectColor.BLUE);
+ subtype.add("Bird");
+ power = new MageInt(2);
+ toughness = new MageInt(2);
+ addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/RitualOfTheReturnedZombieToken.java b/Mage/src/main/java/mage/game/permanent/token/RitualOfTheReturnedZombieToken.java
new file mode 100644
index 0000000000..5f682368f9
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/RitualOfTheReturnedZombieToken.java
@@ -0,0 +1,52 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class RitualOfTheReturnedZombieToken extends Token {
+
+ public RitualOfTheReturnedZombieToken() {
+ this(1,1);
+ }
+ public RitualOfTheReturnedZombieToken(int power, int toughness) {
+ super("Zombie", "black Zombie creature token with power equal to the exiled card's power and toughness equal to the exiled card's toughness");
+ this.setOriginalExpansionSetCode("JOU");
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ subtype.add("Zombie");
+ this.power = new MageInt(power);
+ this.toughness = new MageInt(toughness);
+ }
+
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/RocEggToken.java b/Mage/src/main/java/mage/game/permanent/token/RocEggToken.java
new file mode 100644
index 0000000000..2c4ee5efde
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/RocEggToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class RocEggToken extends Token {
+
+ public RocEggToken() {
+ super("Bird", "3/3 white Bird creature token with flying");
+ cardType.add(CardType.CREATURE);
+ subtype.add("Bird");
+ color.setWhite(true);
+ power = new MageInt(3);
+ toughness = new MageInt(3);
+ addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/RoyalGuardToken.java b/Mage/src/main/java/mage/game/permanent/token/RoyalGuardToken.java
new file mode 100644
index 0000000000..a50123ee9c
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/RoyalGuardToken.java
@@ -0,0 +1,47 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.abilities.keyword.FirstStrikeAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class RoyalGuardToken extends Token {
+
+ public RoyalGuardToken() {
+ super("Royal Guard", "2/2 red Soldier creature token with first strike named Royal Guard", 2, 2);
+ this.setOriginalExpansionSetCode("SWS");
+ cardType.add(CardType.CREATURE);
+ color.setRed(true);
+ addAbility(FirstStrikeAbility.getInstance());
+ subtype.add("Soldier");
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/RukhEggBirdToken.java b/Mage/src/main/java/mage/game/permanent/token/RukhEggBirdToken.java
new file mode 100644
index 0000000000..fbfa9422cc
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/RukhEggBirdToken.java
@@ -0,0 +1,56 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+import mage.constants.CardType;
+
+/**
+ *
+ * @author spjspj
+ */
+public class RukhEggBirdToken extends Token {
+
+ public RukhEggBirdToken() {
+ this("ARN"); //there is no such token in either ARN, 8ED or 9ED
+ }
+
+ public RukhEggBirdToken(String setCode) {
+ super("Bird", "4/4 red Bird creature token with flying");
+ this.setOriginalExpansionSetCode(setCode);
+ cardType.add(CardType.CREATURE);
+ color.setRed(true);
+
+ subtype.add("Bird");
+ power = new MageInt(4);
+ toughness = new MageInt(4);
+ addAbility(FlyingAbility.getInstance());
+ }
+
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/SaprolingBurstToken.java b/Mage/src/main/java/mage/game/permanent/token/SaprolingBurstToken.java
new file mode 100644
index 0000000000..e3eeebc51e
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/SaprolingBurstToken.java
@@ -0,0 +1,100 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.MageInt;
+import mage.constants.CardType;
+import mage.MageObjectReference;
+import mage.abilities.Ability;
+import mage.abilities.common.SimpleStaticAbility;
+import mage.abilities.dynamicvalue.DynamicValue;
+import mage.abilities.effects.Effect;
+import mage.abilities.effects.common.continuous.SetPowerToughnessSourceEffect;
+import mage.constants.Duration;
+import mage.constants.Zone;
+import mage.counters.CounterType;
+import mage.game.Game;
+import mage.game.permanent.Permanent;
+
+/**
+ *
+ * @author spjspj
+ */
+public class SaprolingBurstToken extends Token {
+
+ public SaprolingBurstToken() {
+ this(null);
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ }
+
+ public SaprolingBurstToken(MageObjectReference saprolingBurstMOR) {
+ super("Saproling", "green Saproling creature token with \"This creature's power and toughness are each equal to the number of fade counters on Saproling Burst.\"");
+ this.color.setGreen(true);
+ this.subtype.add("Saproling");
+ this.cardType.add(CardType.CREATURE);
+ this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SetPowerToughnessSourceEffect(new SaprolingBurstTokenDynamicValue(saprolingBurstMOR), Duration.WhileOnBattlefield)));
+ }
+}
+
+class SaprolingBurstTokenDynamicValue implements DynamicValue {
+
+ private final MageObjectReference saprolingBurstMOR;
+
+ SaprolingBurstTokenDynamicValue(MageObjectReference saprolingBurstMOR) {
+ this.saprolingBurstMOR = saprolingBurstMOR;
+ }
+
+ SaprolingBurstTokenDynamicValue(final SaprolingBurstTokenDynamicValue dynamicValue) {
+ this.saprolingBurstMOR = dynamicValue.saprolingBurstMOR;
+ }
+
+ @Override
+ public int calculate(Game game, Ability sourceAbility, Effect effect) {
+ Permanent permanent = this.saprolingBurstMOR.getPermanent(game);
+ if (permanent != null) {
+ return permanent.getCounters(game).getCount(CounterType.FADE);
+ }
+ return 0;
+ }
+
+ @Override
+ public SaprolingBurstTokenDynamicValue copy() {
+ return new SaprolingBurstTokenDynamicValue(this);
+ }
+
+ @Override
+ public String toString() {
+ return "X";
+ }
+
+ @Override
+ public String getMessage() {
+ return "the number of fade counters on Saproling Burst";
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/SatyrNyxSmithElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/SatyrNyxSmithElementalToken.java
new file mode 100644
index 0000000000..f18d31d183
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/SatyrNyxSmithElementalToken.java
@@ -0,0 +1,51 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.HasteAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class SatyrNyxSmithElementalToken extends Token {
+
+ public SatyrNyxSmithElementalToken() {
+ super("Elemental", "3/1 red Elemental enchantment creature token with haste");
+ cardType.add(CardType.ENCHANTMENT);
+ cardType.add(CardType.CREATURE);
+ color.setRed(true);
+ subtype.add("Elemental");
+ power = new MageInt(3);
+ toughness = new MageInt(1);
+ this.addAbility(HasteAbility.getInstance());
+ this.setOriginalExpansionSetCode("BNG");
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/SeedGuardianToken.java b/Mage/src/main/java/mage/game/permanent/token/SeedGuardianToken.java
new file mode 100644
index 0000000000..3b8147f55e
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/SeedGuardianToken.java
@@ -0,0 +1,53 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class SeedGuardianToken extends Token {
+
+ public SeedGuardianToken() {
+ this(1);
+ }
+ public SeedGuardianToken(int xValue) {
+ super("Elemental", "X/X green Elemental creature token");
+ setTokenType(2);
+ setOriginalExpansionSetCode("OGW");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ subtype.add("Elemental");
+ power = new MageInt(xValue);
+ toughness = new MageInt(xValue);
+
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/SekKuarDeathkeeperGravebornToken.java b/Mage/src/main/java/mage/game/permanent/token/SekKuarDeathkeeperGravebornToken.java
new file mode 100644
index 0000000000..7a1e075b3b
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/SekKuarDeathkeeperGravebornToken.java
@@ -0,0 +1,50 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.HasteAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class SekKuarDeathkeeperGravebornToken extends Token {
+
+ public SekKuarDeathkeeperGravebornToken() {
+ super("Graveborn", "3/1 black and red Graveborn creature token with haste");
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ color.setRed(true);
+ subtype.add("Graveborn");
+ power = new MageInt(3);
+ toughness = new MageInt(1);
+ this.addAbility(HasteAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/SengirNosferatuBatToken.java b/Mage/src/main/java/mage/game/permanent/token/SengirNosferatuBatToken.java
new file mode 100644
index 0000000000..688b77e2cc
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/SengirNosferatuBatToken.java
@@ -0,0 +1,110 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import java.util.UUID;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.SimpleActivatedAbility;
+import mage.abilities.costs.common.SacrificeSourceCost;
+import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.effects.OneShotEffect;
+import mage.abilities.keyword.FlyingAbility;
+import mage.cards.Card;
+import mage.constants.Outcome;
+import mage.constants.Zone;
+import mage.filter.FilterCard;
+import mage.filter.predicate.mageobject.NamePredicate;
+import mage.game.Game;
+import mage.players.Player;
+import mage.target.Target;
+import mage.target.common.TargetCardInExile;
+
+/**
+ *
+ * @author spjspj
+ */
+public class SengirNosferatuBatToken extends Token {
+
+ public SengirNosferatuBatToken() {
+ super("Bat", "1/2 black Bat creature token with flying");
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ subtype.add("Bat");
+ power = new MageInt(1);
+ toughness = new MageInt(2);
+ this.addAbility(FlyingAbility.getInstance());
+ ReturnSengirNosferatuEffect effect = new ReturnSengirNosferatuEffect();
+ effect.setText("Return an exiled card named Sengir Nosferatu to the battlefield under its owner's control.");
+ Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl("{1}{B}"));
+ ability.addCost(new SacrificeSourceCost());
+ this.addAbility(ability);
+ }
+}
+
+class ReturnSengirNosferatuEffect extends OneShotEffect {
+
+ private static final FilterCard filter = new FilterCard("exiled card named Sengir Nosferatu");
+
+ static {
+ filter.add(new NamePredicate("Sengir Nosferatu"));
+ }
+
+ public ReturnSengirNosferatuEffect() {
+ super(Outcome.Benefit);
+ }
+
+ public ReturnSengirNosferatuEffect(final ReturnSengirNosferatuEffect effect) {
+ super(effect);
+ }
+
+ @Override
+ public ReturnSengirNosferatuEffect copy() {
+ return new ReturnSengirNosferatuEffect(this);
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ UUID controllerId = source.getControllerId();
+ Target target = new TargetCardInExile(filter);
+ target.setNotTarget(true);
+ if (!target.canChoose(source.getSourceId(), controllerId, game)) {
+ return false;
+ }
+ Player player = game.getPlayer(controllerId);
+ if (player != null) {
+ player.chooseTarget(Outcome.PutCreatureInPlay, target, source, game);
+ Card card = game.getCard(target.getTargets().get(0));
+ if (card != null) {
+ return card.moveToZone(Zone.BATTLEFIELD, source.getSourceId(), game, false);
+ }
+ }
+ return false;
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/SerfToken.java b/Mage/src/main/java/mage/game/permanent/token/SerfToken.java
new file mode 100644
index 0000000000..40d8fb8f79
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/SerfToken.java
@@ -0,0 +1,47 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class SerfToken extends Token {
+
+ public SerfToken() {
+ super("Serf", "0/1 black Serf creature token");
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ subtype.add("Serf");
+ power = new MageInt(0);
+ toughness = new MageInt(1);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/SerpentGeneratorSnakeToken.java b/Mage/src/main/java/mage/game/permanent/token/SerpentGeneratorSnakeToken.java
new file mode 100644
index 0000000000..84576d8f31
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/SerpentGeneratorSnakeToken.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.MageInt;
+import mage.abilities.common.DealsDamageToAPlayerTriggeredAbility;
+import mage.abilities.effects.Effect;
+import mage.abilities.effects.common.counter.AddPoisonCounterTargetEffect;
+import mage.constants.CardType;
+
+/**
+ *
+ * @author BetaSteward_at_googlemail.com
+ */
+public class SerpentGeneratorSnakeToken extends Token {
+
+ public SerpentGeneratorSnakeToken() {
+ super("Snake", "1/1 colorless Snake artifact creature token with \"Whenever this creature deals damage to a player, that player gets a poison counter.\"");
+ cardType.add(CardType.ARTIFACT);
+ cardType.add(CardType.CREATURE);
+ subtype.add("Snake");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+
+ Effect effect = new AddPoisonCounterTargetEffect(1);
+ effect.setText("that player gets a poison counter");
+ this.addAbility(new DealsDamageToAPlayerTriggeredAbility(effect, false, true));
+ }
+
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/SkywiseTeachingsToken.java b/Mage/src/main/java/mage/game/permanent/token/SkywiseTeachingsToken.java
new file mode 100644
index 0000000000..5fb58a7465
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/SkywiseTeachingsToken.java
@@ -0,0 +1,50 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class SkywiseTeachingsToken extends Token {
+
+ public SkywiseTeachingsToken() {
+ super("Djinn Monk", "2/2 blue Djinn Monk creature token with flying");
+ cardType.add(CardType.CREATURE);
+ color.setBlue(true);
+ this.subtype.add("Djinn");
+ this.subtype.add("Monk");
+ power = new MageInt(2);
+ toughness = new MageInt(2);
+ this.addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/SliversmithToken.java b/Mage/src/main/java/mage/game/permanent/token/SliversmithToken.java
new file mode 100644
index 0000000000..3f9bb18771
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/SliversmithToken.java
@@ -0,0 +1,48 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class SliversmithToken extends Token {
+
+ public SliversmithToken() {
+ super("Metallic Sliver", "1/1 colorless Sliver creature token named Metallic Sliver");
+ cardType.add(CardType.CREATURE);
+ cardType.add(CardType.ARTIFACT);
+ subtype.add("Sliver");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ this.setOriginalExpansionSetCode("FUT");
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/SorinLordOfInnistradVampireToken.java b/Mage/src/main/java/mage/game/permanent/token/SorinLordOfInnistradVampireToken.java
new file mode 100644
index 0000000000..1ec1623d1d
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/SorinLordOfInnistradVampireToken.java
@@ -0,0 +1,50 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.LifelinkAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class SorinLordOfInnistradVampireToken extends Token {
+
+ public SorinLordOfInnistradVampireToken() {
+ super("Vampire", "1/1 black Vampire creature token with lifelink");
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ subtype.add("Vampire");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ addAbility(LifelinkAbility.getInstance());
+ }
+
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/SorinSolemnVisitorVampireToken.java b/Mage/src/main/java/mage/game/permanent/token/SorinSolemnVisitorVampireToken.java
new file mode 100644
index 0000000000..88411de49d
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/SorinSolemnVisitorVampireToken.java
@@ -0,0 +1,50 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class SorinSolemnVisitorVampireToken extends Token {
+
+ public SorinSolemnVisitorVampireToken() {
+ super("Vampire", "2/2 black Vampire creature token with flying");
+ setOriginalExpansionSetCode("KTK");
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ subtype.add("Vampire");
+ power = new MageInt(2);
+ toughness = new MageInt(2);
+ addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/SparkElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/SparkElementalToken.java
new file mode 100644
index 0000000000..6c36b99a51
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/SparkElementalToken.java
@@ -0,0 +1,57 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.common.BeginningOfEndStepTriggeredAbility;
+import mage.abilities.effects.common.SacrificeSourceEffect;
+import mage.abilities.keyword.HasteAbility;
+import mage.abilities.keyword.TrampleAbility;
+import mage.constants.TargetController;
+
+/**
+ *
+ * @author spjspj
+ */
+public class SparkElementalToken extends Token {
+
+ public SparkElementalToken() {
+ super("Spark Elemental", "3/1 red Elemental creature token named Spark Elemental with trample, haste, and \"At the beginning of the end step, sacrifice Spark Elemental.\"");
+ this.setOriginalExpansionSetCode("FUT");
+ cardType.add(CardType.CREATURE);
+ color.setRed(true);
+ subtype.add("Elemental");
+ power = new MageInt(3);
+ toughness = new MageInt(1);
+
+ this.addAbility(TrampleAbility.getInstance());
+ this.addAbility(HasteAbility.getInstance());
+ this.addAbility(new BeginningOfEndStepTriggeredAbility(new SacrificeSourceEffect(), TargetController.ANY, false));
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/SpawningGroundsBeastToken.java b/Mage/src/main/java/mage/game/permanent/token/SpawningGroundsBeastToken.java
new file mode 100644
index 0000000000..f403933e83
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/SpawningGroundsBeastToken.java
@@ -0,0 +1,50 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.TrampleAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class SpawningGroundsBeastToken extends Token {
+
+ public SpawningGroundsBeastToken() {
+ super("Beast", "5/5 green Beast creature token with trample");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ subtype.add("Beast");
+ power = new MageInt(5);
+ toughness = new MageInt(5);
+ this.addAbility(TrampleAbility.getInstance());
+ }
+
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/SpawningPitToken.java b/Mage/src/main/java/mage/game/permanent/token/SpawningPitToken.java
new file mode 100644
index 0000000000..28611d33ca
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/SpawningPitToken.java
@@ -0,0 +1,47 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class SpawningPitToken extends Token {
+
+ public SpawningPitToken() {
+ super("Spawn", "2/2 colorless Spawn artifact creature token");
+ cardType.add(CardType.ARTIFACT);
+ cardType.add(CardType.CREATURE);
+ this.subtype.add("Spawn");
+ power = new MageInt(2);
+ toughness = new MageInt(2);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/SpikeToken.java b/Mage/src/main/java/mage/game/permanent/token/SpikeToken.java
new file mode 100644
index 0000000000..520fec7534
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/SpikeToken.java
@@ -0,0 +1,47 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class SpikeToken extends Token {
+
+ public SpikeToken() {
+ super("Spike", "1/1 green Spike creature token");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ subtype.add("Spike");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/SpiritBlueToken.java b/Mage/src/main/java/mage/game/permanent/token/SpiritBlueToken.java
new file mode 100644
index 0000000000..f0d35ea44d
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/SpiritBlueToken.java
@@ -0,0 +1,51 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class SpiritBlueToken extends Token {
+
+ public SpiritBlueToken() {
+ super("Spirit", "1/1 blue Spirit creature token with flying");
+ cardType.add(CardType.CREATURE);
+ subtype.add("Spirit");
+ color.setBlue(true);
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ setTokenType(2);
+ addAbility(FlyingAbility.getInstance());
+ }
+
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/SpoilsOfBloodHorrorToken.java b/Mage/src/main/java/mage/game/permanent/token/SpoilsOfBloodHorrorToken.java
new file mode 100644
index 0000000000..6a8761563a
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/SpoilsOfBloodHorrorToken.java
@@ -0,0 +1,51 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class SpoilsOfBloodHorrorToken extends Token {
+
+ public SpoilsOfBloodHorrorToken() {
+ this(1);
+ }
+ public SpoilsOfBloodHorrorToken(int xValue) {
+ super("Horror", "X/X black Horror creature token");
+ setOriginalExpansionSetCode("C14");
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ subtype.add("Horror");
+ power = new MageInt(xValue);
+ toughness = new MageInt(xValue);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/SpyMasterGoblinToken.java b/Mage/src/main/java/mage/game/permanent/token/SpyMasterGoblinToken.java
new file mode 100644
index 0000000000..3c2d3aca43
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/SpyMasterGoblinToken.java
@@ -0,0 +1,64 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.common.SimpleStaticAbility;
+import mage.abilities.effects.Effect;
+import mage.abilities.effects.common.combat.AttacksIfAbleAllEffect;
+import mage.constants.Duration;
+import mage.constants.TargetController;
+import mage.constants.Zone;
+import mage.filter.common.FilterCreaturePermanent;
+import mage.filter.predicate.permanent.ControllerPredicate;
+
+/**
+ *
+ * @author spjspj
+ */
+public class SpyMasterGoblinToken extends Token {
+
+ private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures you control");
+
+ static {
+ filter.add(new ControllerPredicate(TargetController.YOU));
+ }
+
+ public SpyMasterGoblinToken() {
+ super("Goblin", "1/1 red Goblin creature token with \"Creatures you control attack each combat if able.\"");
+ cardType.add(CardType.CREATURE);
+ color.setRed(true);
+ subtype.add("Goblin");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+
+ Effect effect = new AttacksIfAbleAllEffect(filter, Duration.WhileOnBattlefield, true);
+ this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect));
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/StitcherGeralfZombieToken.java b/Mage/src/main/java/mage/game/permanent/token/StitcherGeralfZombieToken.java
new file mode 100644
index 0000000000..6b0318cacc
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/StitcherGeralfZombieToken.java
@@ -0,0 +1,52 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class StitcherGeralfZombieToken extends Token {
+
+ public StitcherGeralfZombieToken() {
+ this(1);
+ }
+ public StitcherGeralfZombieToken(int xValue) {
+ super("Zombie", "X/X blue Zombie creature token");
+ setOriginalExpansionSetCode("C14");
+ setTokenType(1);
+ cardType.add(CardType.CREATURE);
+ color.setBlue(true);
+ subtype.add("Zombie");
+ power = new MageInt(xValue);
+ toughness = new MageInt(xValue);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/StitchersApprenticeHomunculusToken.java b/Mage/src/main/java/mage/game/permanent/token/StitchersApprenticeHomunculusToken.java
new file mode 100644
index 0000000000..c7d255ebee
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/StitchersApprenticeHomunculusToken.java
@@ -0,0 +1,48 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class StitchersApprenticeHomunculusToken extends Token {
+
+ public StitchersApprenticeHomunculusToken() {
+ super("Homunculus", "2/2 blue Homunculus creature");
+ cardType.add(CardType.CREATURE);
+ color.setBlue(true);
+ subtype.add("Homunculus");
+ power = new MageInt(2);
+ toughness = new MageInt(2);
+ }
+
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/StoneTrapIdolToken.java b/Mage/src/main/java/mage/game/permanent/token/StoneTrapIdolToken.java
new file mode 100644
index 0000000000..40d56412f9
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/StoneTrapIdolToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.TrampleAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class StoneTrapIdolToken extends Token {
+
+ public StoneTrapIdolToken() {
+ super("Construct", "6/12 colorless Construct artifact creature token with trample");
+ cardType.add(CardType.CREATURE);
+ cardType.add(CardType.ARTIFACT);
+ subtype.add("Construct");
+ power = new MageInt(6);
+ toughness = new MageInt(12);
+ addAbility(TrampleAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/SubterraneanTremorsLizardToken.java b/Mage/src/main/java/mage/game/permanent/token/SubterraneanTremorsLizardToken.java
new file mode 100644
index 0000000000..6ffe45639c
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/SubterraneanTremorsLizardToken.java
@@ -0,0 +1,47 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class SubterraneanTremorsLizardToken extends Token {
+
+ public SubterraneanTremorsLizardToken() {
+ super("Lizard", "an 8/8 red Lizard creature token");
+ cardType.add(CardType.CREATURE);
+ color.setRed(true);
+ subtype.add("Lizard");
+ power = new MageInt(8);
+ toughness = new MageInt(8);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/SwanSongBirdToken.java b/Mage/src/main/java/mage/game/permanent/token/SwanSongBirdToken.java
new file mode 100644
index 0000000000..adbff44b4e
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/SwanSongBirdToken.java
@@ -0,0 +1,52 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class SwanSongBirdToken extends Token {
+
+ public SwanSongBirdToken() {
+ super("Bird", "2/2 blue Bird creature token with flying");
+ cardType.add(CardType.CREATURE);
+ color.setBlue(true);
+ subtype.add("Bird");
+ if (getOriginalExpansionSetCode() != null && getOriginalExpansionSetCode().equals("C16")) {
+ setTokenType(2);
+ }
+ power = new MageInt(2);
+ toughness = new MageInt(2);
+ this.addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/SylvanOfferingTreefolkToken.java b/Mage/src/main/java/mage/game/permanent/token/SylvanOfferingTreefolkToken.java
new file mode 100644
index 0000000000..729f3562b5
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/SylvanOfferingTreefolkToken.java
@@ -0,0 +1,52 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class SylvanOfferingTreefolkToken extends Token {
+
+ public SylvanOfferingTreefolkToken() {
+ this(1);
+ }
+ public SylvanOfferingTreefolkToken(int xValue) {
+ super("Treefolk", "X/X green Treefolk creature token");
+ setOriginalExpansionSetCode("C14");
+ cardType.add(CardType.CREATURE);
+ subtype.add("Treefolk");
+ color.setGreen(true);
+ power = new MageInt(xValue);
+ toughness = new MageInt(xValue);
+
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/TatsumaDragonToken.java b/Mage/src/main/java/mage/game/permanent/token/TatsumaDragonToken.java
new file mode 100644
index 0000000000..ca12f17821
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/TatsumaDragonToken.java
@@ -0,0 +1,50 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class TatsumaDragonToken extends Token {
+
+ public TatsumaDragonToken() {
+ super("Dragon Spirit", "5/5 blue Dragon Spirit creature token with flying");
+ cardType.add(CardType.CREATURE);
+ color.setBlue(true);
+ subtype.add("Dragon");
+ subtype.add("Spirit");
+ power = new MageInt(5);
+ toughness = new MageInt(5);
+ addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/TemptWithVengeanceElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/TemptWithVengeanceElementalToken.java
new file mode 100644
index 0000000000..f3a633e7de
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/TemptWithVengeanceElementalToken.java
@@ -0,0 +1,50 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.HasteAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class TemptWithVengeanceElementalToken extends Token {
+
+ public TemptWithVengeanceElementalToken() {
+ super("Elemental", "1/1 red Elemental creature tokens with haste");
+ cardType.add(CardType.CREATURE);
+ subtype.add("Elemental");
+
+ color.setRed(true);
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ this.addAbility(HasteAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/TetraviteToken.java b/Mage/src/main/java/mage/game/permanent/token/TetraviteToken.java
new file mode 100644
index 0000000000..77cb3670c0
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/TetraviteToken.java
@@ -0,0 +1,80 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.MageObject;
+import mage.abilities.StaticAbility;
+import mage.abilities.keyword.FlyingAbility;
+import mage.constants.Zone;
+import mage.game.Game;
+
+/**
+ *
+ * @author spjspj
+ */
+public class TetraviteToken extends Token {
+
+ public TetraviteToken() {
+ super("Tetravite", "1/1 colorless Tetravite artifact creature token");
+ cardType.add(CardType.CREATURE);
+ cardType.add(CardType.ARTIFACT);
+ subtype.add("Tetravite");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+
+ this.addAbility(FlyingAbility.getInstance());
+ this.addAbility(new CantBeEnchantedAbility());
+ }
+}
+
+class CantBeEnchantedAbility extends StaticAbility {
+
+ public CantBeEnchantedAbility() {
+ super(Zone.BATTLEFIELD, null);
+ }
+
+ public CantBeEnchantedAbility(final CantBeEnchantedAbility ability) {
+ super(ability);
+ }
+
+ @Override
+ public CantBeEnchantedAbility copy() {
+ return new CantBeEnchantedAbility(this);
+ }
+
+ public boolean canTarget(MageObject source, Game game) {
+ if (source.isEnchantment()
+ && source.hasSubtype("Aura", game)) {
+ return false;
+ }
+ return true;
+ }
+
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/TeysaEnvoyOfGhostsToken.java b/Mage/src/main/java/mage/game/permanent/token/TeysaEnvoyOfGhostsToken.java
new file mode 100644
index 0000000000..9cce86a93f
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/TeysaEnvoyOfGhostsToken.java
@@ -0,0 +1,50 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class TeysaEnvoyOfGhostsToken extends Token {
+
+ public TeysaEnvoyOfGhostsToken() {
+ super("Spirit", "1/1 white and black Spirit creature token with flying");
+ cardType.add(CardType.CREATURE);
+ color.setWhite(true);
+ color.setBlack(true);
+ subtype.add("Spirit");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ this.addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/ThopterToken.java b/Mage/src/main/java/mage/game/permanent/token/ThopterToken.java
new file mode 100644
index 0000000000..2f8b852b1d
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/ThopterToken.java
@@ -0,0 +1,50 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class ThopterToken extends Token {
+
+ public ThopterToken() {
+ super("Thopter", "1/1 blue Thopter artifact creature tokens with flying");
+ cardType.add(CardType.CREATURE);
+ cardType.add(CardType.ARTIFACT);
+ color.setBlue(true);
+ subtype.add("Thopter");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ this.addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/TidalWaveWallToken.java b/Mage/src/main/java/mage/game/permanent/token/TidalWaveWallToken.java
new file mode 100644
index 0000000000..75248c19fd
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/TidalWaveWallToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.DefenderAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class TidalWaveWallToken extends Token {
+
+ public TidalWaveWallToken() {
+ super("Wall", "5/5 blue Wall creature token with defender");
+ cardType.add(CardType.CREATURE);
+ color.setBlue(true);
+ subtype.add("Wall");
+ power = new MageInt(5);
+ toughness = new MageInt(5);
+ this.addAbility(DefenderAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/TitanForgeGolemToken.java b/Mage/src/main/java/mage/game/permanent/token/TitanForgeGolemToken.java
new file mode 100644
index 0000000000..9256c43ee8
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/TitanForgeGolemToken.java
@@ -0,0 +1,47 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class TitanForgeGolemToken extends Token {
+
+ public TitanForgeGolemToken() {
+ super("Golem", "9/9 colorless Golem artifact creature token");
+ cardType.add(CardType.ARTIFACT);
+ cardType.add(CardType.CREATURE);
+ subtype.add("Golem");
+ power = new MageInt(9);
+ toughness = new MageInt(9);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/TitaniaProtectorOfArgothElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/TitaniaProtectorOfArgothElementalToken.java
new file mode 100644
index 0000000000..cf8ca8b732
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/TitaniaProtectorOfArgothElementalToken.java
@@ -0,0 +1,50 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.ObjectColor;
+
+/**
+ *
+ * @author spjspj
+ */
+public class TitaniaProtectorOfArgothElementalToken extends Token {
+
+ public TitaniaProtectorOfArgothElementalToken() {
+ super("Elemental", "5/3 green Elemental creature token");
+ this.setOriginalExpansionSetCode("C14");
+ this.cardType.add(CardType.CREATURE);
+ this.color = ObjectColor.GREEN;
+ this.subtype.add("Elemental");
+
+ this.power = new MageInt(5);
+ this.toughness = new MageInt(3);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/TreefolkShamanToken.java b/Mage/src/main/java/mage/game/permanent/token/TreefolkShamanToken.java
new file mode 100644
index 0000000000..611c016ade
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/TreefolkShamanToken.java
@@ -0,0 +1,48 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class TreefolkShamanToken extends Token {
+
+ public TreefolkShamanToken() {
+ super("Treefolk Shaman", "2/5 green Treefolk Shaman creature token");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ subtype.add("Treefolk");
+ subtype.add("Shaman");
+ power = new MageInt(2);
+ toughness = new MageInt(5);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/TriskelaviteToken.java b/Mage/src/main/java/mage/game/permanent/token/TriskelaviteToken.java
new file mode 100644
index 0000000000..eeb361288d
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/TriskelaviteToken.java
@@ -0,0 +1,61 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.SimpleActivatedAbility;
+import mage.abilities.costs.common.SacrificeSourceCost;
+import mage.abilities.effects.common.DamageTargetEffect;
+import mage.abilities.keyword.FlyingAbility;
+import mage.constants.Zone;
+import mage.target.common.TargetCreatureOrPlayer;
+
+/**
+ *
+ * @author spjspj
+ */
+public class TriskelaviteToken extends Token {
+
+ public TriskelaviteToken() {
+ super("Triskelavite", "1/1 colorless Triskelavite artifact creature token with flying. It has \"Sacrifice this creature: This creature deals 1 damage to target creature or player.\"");
+ this.setOriginalExpansionSetCode("TSP");
+ cardType.add(CardType.ARTIFACT);
+ cardType.add(CardType.CREATURE);
+ subtype.add("Triskelavite");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+
+ Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new SacrificeSourceCost());
+ ability.addTarget(new TargetCreatureOrPlayer());
+ this.addAbility(ability);
+
+ addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/TuktukTheReturnedToken.java b/Mage/src/main/java/mage/game/permanent/token/TuktukTheReturnedToken.java
new file mode 100644
index 0000000000..d227c25b00
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/TuktukTheReturnedToken.java
@@ -0,0 +1,54 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.constants.SuperType;
+
+/**
+ *
+ * @author spjspj
+ */
+public class TuktukTheReturnedToken extends Token {
+
+ public TuktukTheReturnedToken() {
+ this("ZEN");
+ }
+
+ public TuktukTheReturnedToken(String setCode) {
+ super("Tuktuk the Returned", "legendary 5/5 colorless Goblin Golem artifact creature token");
+ setOriginalExpansionSetCode(setCode);
+ cardType.add(CardType.ARTIFACT);
+ cardType.add(CardType.CREATURE);
+ addSuperType(SuperType.LEGENDARY);
+ subtype.add("Goblin");
+ power = new MageInt(5);
+ toughness = new MageInt(5);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/TuskenRaiderToken.java b/Mage/src/main/java/mage/game/permanent/token/TuskenRaiderToken.java
new file mode 100644
index 0000000000..2b97409929
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/TuskenRaiderToken.java
@@ -0,0 +1,46 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+
+/**
+ *
+ * @author spjspj
+ */
+public class TuskenRaiderToken extends Token {
+
+ public TuskenRaiderToken() {
+ super("Tusken Raider", "white Tusken Raider creature token", 1, 1);
+ this.setOriginalExpansionSetCode("SWS");
+ cardType.add(CardType.CREATURE);
+ color.setWhite(true);
+ subtype.add("Tusken");
+ subtype.add("Raider");
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/UramiToken.java b/Mage/src/main/java/mage/game/permanent/token/UramiToken.java
new file mode 100644
index 0000000000..ba6f678aeb
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/UramiToken.java
@@ -0,0 +1,54 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+import mage.constants.SuperType;
+
+/**
+ *
+ * @author spjspj
+ */
+public class UramiToken extends Token {
+
+ public UramiToken() {
+ super("Urami", "legendary 5/5 black Demon Spirit creature token with flying named Urami");
+ cardType.add(CardType.CREATURE);
+ subtype.add("Demon");
+ subtype.add("Spirit");
+ addSuperType(SuperType.LEGENDARY);
+
+ color.setBlack(true);
+ power = new MageInt(5);
+ toughness = new MageInt(5);
+
+ this.addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/UtvaraHellkiteDragonToken.java b/Mage/src/main/java/mage/game/permanent/token/UtvaraHellkiteDragonToken.java
new file mode 100644
index 0000000000..24add4555b
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/UtvaraHellkiteDragonToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class UtvaraHellkiteDragonToken extends Token {
+
+ public UtvaraHellkiteDragonToken() {
+ super("Dragon", "6/6 red Dragon creature token with flying");
+ cardType.add(CardType.CREATURE);
+ color.setRed(true);
+ subtype.add("Dragon");
+ power = new MageInt(6);
+ toughness = new MageInt(6);
+ addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/VampireToken.java b/Mage/src/main/java/mage/game/permanent/token/VampireToken.java
new file mode 100644
index 0000000000..d415b9a969
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/VampireToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class VampireToken extends Token {
+
+ public VampireToken() {
+ super("Vampire", "2/2 black Vampire creature token with flying");
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ subtype.add("Vampire");
+ power = new MageInt(2);
+ toughness = new MageInt(2);
+ addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/VoiceOfResurgenceToken.java b/Mage/src/main/java/mage/game/permanent/token/VoiceOfResurgenceToken.java
new file mode 100644
index 0000000000..98bce08daf
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/VoiceOfResurgenceToken.java
@@ -0,0 +1,59 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.common.SimpleStaticAbility;
+import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
+import mage.abilities.effects.common.continuous.SetPowerToughnessSourceEffect;
+import mage.constants.Duration;
+import mage.constants.Zone;
+import mage.filter.common.FilterControlledCreaturePermanent;
+
+/**
+ *
+ * @author spjspj
+ */
+public class VoiceOfResurgenceToken extends Token {
+
+ public VoiceOfResurgenceToken() {
+ super("Elemental", "X/X green and white Elemental creature with with \"This creature's power and toughness are each equal to the number of creatures you control.");
+ setOriginalExpansionSetCode("DGM");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ color.setWhite(true);
+ subtype.add("Elemental");
+
+ power = new MageInt(0);
+ toughness = new MageInt(0);
+
+ this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SetPowerToughnessSourceEffect(
+ new PermanentsOnBattlefieldCount(new FilterControlledCreaturePermanent()), Duration.EndOfGame)));
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/VoiceOfTheWoodsElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/VoiceOfTheWoodsElementalToken.java
new file mode 100644
index 0000000000..a6f02b781d
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/VoiceOfTheWoodsElementalToken.java
@@ -0,0 +1,52 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.TrampleAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class VoiceOfTheWoodsElementalToken extends Token {
+
+ public VoiceOfTheWoodsElementalToken() {
+ super("Elemental", "7/7 green Elemental creature token with trample");
+ this.setOriginalExpansionSetCode("EVG");
+ cardType.add(CardType.CREATURE);
+ subtype.add("Elemental");
+
+ color.setGreen(true);
+ power = new MageInt(7);
+ toughness = new MageInt(7);
+
+ addAbility(TrampleAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/VojaToken.java b/Mage/src/main/java/mage/game/permanent/token/VojaToken.java
new file mode 100644
index 0000000000..32d81c47de
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/VojaToken.java
@@ -0,0 +1,51 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.constants.SuperType;
+
+/**
+ *
+ * @author spjspj
+ */
+public class VojaToken extends Token {
+
+ public VojaToken() {
+ super("Voja", "legendary 2/2 green and white Wolf creature token named Voja");
+ this.cardType.add(CardType.CREATURE);
+ addSuperType(SuperType.LEGENDARY);
+ this.subtype.add("Wolf");
+
+ this.color.setGreen(true);
+ this.color.setWhite(true);
+ this.power = new MageInt(2);
+ this.toughness = new MageInt(2);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/VolrathsLaboratoryToken.java b/Mage/src/main/java/mage/game/permanent/token/VolrathsLaboratoryToken.java
new file mode 100644
index 0000000000..a58e44e0fc
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/VolrathsLaboratoryToken.java
@@ -0,0 +1,55 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.ObjectColor;
+
+/**
+ *
+ * @author spjspj
+ */
+public class VolrathsLaboratoryToken extends Token {
+
+ public VolrathsLaboratoryToken() {
+ this(null, null);
+ }
+ public VolrathsLaboratoryToken(ObjectColor color, String type) {
+ super(type, "2/2 creature token of the chosen color and type");
+ cardType.add(CardType.CREATURE);
+ if (color != null) {
+ this.color.setColor(color);
+ }
+ if (type != null) {
+ subtype.add(type);
+ }
+ power = new MageInt(2);
+ toughness = new MageInt(2);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/WaitingInTheWeedsCatToken.java b/Mage/src/main/java/mage/game/permanent/token/WaitingInTheWeedsCatToken.java
new file mode 100644
index 0000000000..940e0b913b
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/WaitingInTheWeedsCatToken.java
@@ -0,0 +1,48 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.MageInt;
+import mage.constants.CardType;
+
+/**
+ *
+ * @author spjspj
+ */
+public class WaitingInTheWeedsCatToken extends Token {
+
+ public WaitingInTheWeedsCatToken() {
+ super("Cat", "1/1 green Cat creature token");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ subtype.add("Cat");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ }
+
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/WalkerOfTheGroveToken.java b/Mage/src/main/java/mage/game/permanent/token/WalkerOfTheGroveToken.java
new file mode 100644
index 0000000000..58273ff4d0
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/WalkerOfTheGroveToken.java
@@ -0,0 +1,47 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class WalkerOfTheGroveToken extends Token {
+
+ public WalkerOfTheGroveToken() {
+ super("Elemental", "4/4 green Elemental creature token");
+ cardType.add(CardType.CREATURE);
+ this.subtype.add("Elemental");
+ this.color.setGreen(true);
+ power = new MageInt(4);
+ toughness = new MageInt(4);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/WallToken.java b/Mage/src/main/java/mage/game/permanent/token/WallToken.java
new file mode 100644
index 0000000000..97c11904d6
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/WallToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.DefenderAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class WallToken extends Token {
+
+ public WallToken() {
+ super("", "2/6 white wall creature with defender");
+ cardType.add(CardType.CREATURE);
+ color.setWhite(true);
+ subtype.add("Wall");
+ power = new MageInt(2);
+ toughness = new MageInt(6);
+ this.addAbility(DefenderAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/WandOfTheElementsFirstToken.java b/Mage/src/main/java/mage/game/permanent/token/WandOfTheElementsFirstToken.java
new file mode 100644
index 0000000000..c89f41b77d
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/WandOfTheElementsFirstToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class WandOfTheElementsFirstToken extends Token {
+
+ public WandOfTheElementsFirstToken() {
+ super("Elemental", "2/2 blue Elemental creature token with flying");
+ cardType.add(CardType.CREATURE);
+ this.subtype.add("Elemental");
+ this.color.setBlue(true);
+ power = new MageInt(2);
+ toughness = new MageInt(2);
+ this.addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/WandOfTheElementsSecondToken.java b/Mage/src/main/java/mage/game/permanent/token/WandOfTheElementsSecondToken.java
new file mode 100644
index 0000000000..d897d79aa3
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/WandOfTheElementsSecondToken.java
@@ -0,0 +1,47 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class WandOfTheElementsSecondToken extends Token {
+
+ public WandOfTheElementsSecondToken() {
+ super("Elemental", "3/3 red Elemental creature token");
+ cardType.add(CardType.CREATURE);
+ this.subtype.add("Elemental");
+ this.color.setRed(true);
+ power = new MageInt(3);
+ toughness = new MageInt(3);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/WaspToken.java b/Mage/src/main/java/mage/game/permanent/token/WaspToken.java
new file mode 100644
index 0000000000..97c1e42c1d
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/WaspToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class WaspToken extends Token {
+
+ public WaspToken() {
+ super("Wasp", "1/1 colorless Insect artifact creature token with flying");
+ cardType.add(CardType.ARTIFACT);
+ cardType.add(CardType.CREATURE);
+ this.subtype.add("Insect");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ this.addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/WeirdToken.java b/Mage/src/main/java/mage/game/permanent/token/WeirdToken.java
new file mode 100644
index 0000000000..fe86f0e12e
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/WeirdToken.java
@@ -0,0 +1,51 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.DefenderAbility;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class WeirdToken extends Token {
+
+ public WeirdToken() {
+ super("Weird", "3/3 blue Weird create token with defender and flying");
+ cardType.add(CardType.CREATURE);
+ color.setBlue(true);
+ subtype.add("Weird");
+ power = new MageInt(3);
+ toughness = new MageInt(3);
+ this.addAbility(DefenderAbility.getInstance());
+ this.addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/WhiteElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/WhiteElementalToken.java
new file mode 100644
index 0000000000..307216bc78
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/WhiteElementalToken.java
@@ -0,0 +1,50 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class WhiteElementalToken extends Token {
+
+ public WhiteElementalToken() {
+ super("Elemental", "4/4 white Elemental creature token with flying");
+ cardType.add(CardType.CREATURE);
+ color.setWhite(true);
+ subtype.add("Elemental");
+ power = new MageInt(4);
+ toughness = new MageInt(4);
+ setTokenType(2);
+ this.addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/WingmateRocToken.java b/Mage/src/main/java/mage/game/permanent/token/WingmateRocToken.java
new file mode 100644
index 0000000000..35160cc87c
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/WingmateRocToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class WingmateRocToken extends Token {
+
+ public WingmateRocToken() {
+ super("Bird", "3/4 white Bird creature token with flying");
+ cardType.add(CardType.CREATURE);
+ subtype.add("Bird");
+ color.setWhite(true);
+ power = new MageInt(3);
+ toughness = new MageInt(4);
+ addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/WireflyToken.java b/Mage/src/main/java/mage/game/permanent/token/WireflyToken.java
new file mode 100644
index 0000000000..ff0800e20b
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/WireflyToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.abilities.keyword.FlyingAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class WireflyToken extends Token {
+
+ public WireflyToken() {
+ super("Wirefly", "2/2 colorless Insect artifact creature token with flying named Wirefly");
+ this.setOriginalExpansionSetCode("DST");
+ this.getPower().modifyBaseValue(2);
+ this.getToughness().modifyBaseValue(2);
+ this.getSubtype(null).add("Insect");
+ this.addCardType(CardType.ARTIFACT);
+ this.addCardType(CardType.CREATURE);
+ this.addAbility(FlyingAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/WoodToken.java b/Mage/src/main/java/mage/game/permanent/token/WoodToken.java
new file mode 100644
index 0000000000..30a94db9f1
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/WoodToken.java
@@ -0,0 +1,51 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.DefenderAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class WoodToken extends Token {
+
+ public WoodToken() {
+ super("Wood", "0/1 green Wall creature token with defender named Wood");
+ this.setOriginalExpansionSetCode("MIR");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ subtype.add("Wall");
+ power = new MageInt(0);
+ toughness = new MageInt(1);
+
+ this.addAbility(DefenderAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/WormHarvestToken.java b/Mage/src/main/java/mage/game/permanent/token/WormHarvestToken.java
new file mode 100644
index 0000000000..9a8758f6b3
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/WormHarvestToken.java
@@ -0,0 +1,48 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class WormHarvestToken extends Token {
+
+ public WormHarvestToken() {
+ super("Worm", "1/1 black and green Worm creature token");
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ color.setGreen(true);
+ subtype.add("Worm");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/WortTheRaidmotherToken.java b/Mage/src/main/java/mage/game/permanent/token/WortTheRaidmotherToken.java
new file mode 100644
index 0000000000..9da6bc318b
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/WortTheRaidmotherToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class WortTheRaidmotherToken extends Token {
+
+ public WortTheRaidmotherToken() {
+ super("Goblin Warrior", "1/1 red and green Goblin Warrior creature token");
+ cardType.add(CardType.CREATURE);
+ color.setRed(true);
+ color.setGreen(true);
+ subtype.add("Goblin");
+ subtype.add("Warrior");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/Wurm1Token.java b/Mage/src/main/java/mage/game/permanent/token/Wurm1Token.java
new file mode 100644
index 0000000000..46a488bfe3
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/Wurm1Token.java
@@ -0,0 +1,50 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.DeathtouchAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class Wurm1Token extends Token {
+
+ public Wurm1Token(String setCode) {
+ super("Wurm", "3/3 colorless Wurm artifact creature token with deathtouch");
+ setOriginalExpansionSetCode(setCode);
+ cardType.add(CardType.ARTIFACT);
+ cardType.add(CardType.CREATURE);
+ subtype.add("Wurm");
+ power = new MageInt(3);
+ toughness = new MageInt(3);
+ this.addAbility(DeathtouchAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/Wurm2Token.java b/Mage/src/main/java/mage/game/permanent/token/Wurm2Token.java
new file mode 100644
index 0000000000..67c919be21
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/Wurm2Token.java
@@ -0,0 +1,56 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.LifelinkAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class Wurm2Token extends Token {
+
+ public Wurm2Token() {
+ this("MBS");
+ }
+
+ public Wurm2Token(String setCode) {
+ super("Wurm", "3/3 colorless Wurm artifact creature token with lifelink");
+ setOriginalExpansionSetCode(setCode);
+ cardType.add(CardType.ARTIFACT);
+ cardType.add(CardType.CREATURE);
+ subtype.add("Wurm");
+ power = new MageInt(3);
+ toughness = new MageInt(3);
+ this.addAbility(LifelinkAbility.getInstance());
+
+ setTokenType(2); // for image
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/WurmCallingWurmToken.java b/Mage/src/main/java/mage/game/permanent/token/WurmCallingWurmToken.java
new file mode 100644
index 0000000000..94dbd14c33
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/WurmCallingWurmToken.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.MageInt;
+import mage.constants.CardType;
+
+/**
+ * @author spjspj
+ */
+public class WurmCallingWurmToken extends Token {
+
+ public WurmCallingWurmToken() {
+ super("Wurm", "X/X green Wurm creature token");
+ cardType.add(CardType.CREATURE);
+ color.setGreen(true);
+ subtype.add("Wurm");
+ power = new MageInt(0);
+ toughness = new MageInt(0);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/XenagosSatyrToken.java b/Mage/src/main/java/mage/game/permanent/token/XenagosSatyrToken.java
new file mode 100644
index 0000000000..19dc537d35
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/XenagosSatyrToken.java
@@ -0,0 +1,52 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+import mage.abilities.keyword.HasteAbility;
+
+/**
+ *
+ * @author spjspj
+ */
+public class XenagosSatyrToken extends Token {
+
+ public XenagosSatyrToken() {
+ super("Satyr", "2/2 red and green Satyr creature token with haste");
+ cardType.add(CardType.CREATURE);
+ color.setRed(true);
+ color.setGreen(true);
+ subtype.add("Satyr");
+ power = new MageInt(2);
+ toughness = new MageInt(2);
+
+ this.addAbility(HasteAbility.getInstance());
+ }
+
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/YoungPyromancerElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/YoungPyromancerElementalToken.java
new file mode 100644
index 0000000000..745e9e5424
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/YoungPyromancerElementalToken.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.MageInt;
+import mage.constants.CardType;
+import mage.util.RandomUtil;
+
+/**
+ *
+ * @author spjspj
+ */
+public class YoungPyromancerElementalToken extends Token {
+
+ public YoungPyromancerElementalToken() {
+ super("Elemental", "1/1 red Elemental creature");
+ if (getOriginalExpansionSetCode() != null && getOriginalExpansionSetCode().equals("M14")) {
+ setTokenType(RandomUtil.nextInt(2) + 1);
+ }
+ if (getOriginalExpansionSetCode() != null && getOriginalExpansionSetCode().equals("EMA")) {
+ setTokenType(1);
+ }
+ cardType.add(CardType.CREATURE);
+ color.setRed(true);
+ subtype.add("Elemental");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/ZektarShrineElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/ZektarShrineElementalToken.java
new file mode 100644
index 0000000000..3d1edf8f81
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/ZektarShrineElementalToken.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.game.permanent.token;
+
+import mage.MageInt;
+import mage.abilities.keyword.HasteAbility;
+import mage.abilities.keyword.TrampleAbility;
+import mage.constants.CardType;
+
+/**
+ *
+ * @author spjspj
+ */
+public class ZektarShrineElementalToken extends Token {
+
+ public ZektarShrineElementalToken() {
+ super("Elemental", "7/1 red Elemental creature token with trample and haste");
+ cardType.add(CardType.CREATURE);
+ color.setRed(true);
+ subtype.add("Elemental");
+ power = new MageInt(7);
+ toughness = new MageInt(1);
+ addAbility(TrampleAbility.getInstance());
+ addAbility(HasteAbility.getInstance());
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/ZendikarsRoilElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/ZendikarsRoilElementalToken.java
new file mode 100644
index 0000000000..aae4360cf8
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/ZendikarsRoilElementalToken.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class ZendikarsRoilElementalToken extends Token {
+
+ public ZendikarsRoilElementalToken() {
+ super("Elemental", "2/2 green Elemental creature token");
+ cardType.add(CardType.CREATURE);
+ setOriginalExpansionSetCode("ORI");
+ subtype.add("Elemental");
+ color.setGreen(true);
+ power = new MageInt(2);
+ toughness = new MageInt(2);
+ }
+
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/ZombieWizardToken.java b/Mage/src/main/java/mage/game/permanent/token/ZombieWizardToken.java
new file mode 100644
index 0000000000..cd56807817
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/ZombieWizardToken.java
@@ -0,0 +1,50 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com AS IS AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.game.permanent.token;
+
+import mage.constants.CardType;
+import mage.MageInt;
+
+/**
+ *
+ * @author spjspj
+ */
+public class ZombieWizardToken extends Token {
+
+ public ZombieWizardToken() {
+ super("Zombie Wizard", "1/1 blue and black Zombie Wizard creature token");
+ cardType.add(CardType.CREATURE);
+ color.setBlue(true);
+ color.setBlack(true);
+ subtype.add("Zombie");
+ subtype.add("Wizard");
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ }
+}