From d1676f086865bf706874ae7bd54063aa188bf1de Mon Sep 17 00:00:00 2001 From: jendave Date: Sat, 6 Aug 2011 03:18:43 +0000 Subject: [PATCH] - Planeswalkers get counters as they enter the battlefield (necessary for Doubling Season). - Sparkspitter tokens should have trample and haste now. - Vanishing uses Time counters instead of Age counters now (not sure why they were age counters). - Mass destroy effects (WoG, ...) will try to take out cards like Timber Protector LAST. - Finished makeToken() in CardFactory_Creatures.java. --- res/main.properties | 2 +- src/forge/Card.java | 2 +- src/forge/CardFactory.java | 6 +- src/forge/CardFactoryUtil.java | 21 +- src/forge/CardFactory_Creatures.java | 609 +++++------------------ src/forge/CardFactory_Planeswalkers.java | 36 +- src/forge/CardListUtil.java | 23 + src/forge/GameActionUtil.java | 20 +- 8 files changed, 190 insertions(+), 529 deletions(-) diff --git a/res/main.properties b/res/main.properties index 934dd734f71..b760ac37bc6 100644 --- a/res/main.properties +++ b/res/main.properties @@ -1,6 +1,6 @@ program/mail=mtgerror@yahoo.com program/forum=http://www.slightlymagic.net/forum/viewforum.php?f=26 -program/version=Forge -- official beta: 10/01/17, SVN revision: 321 +program/version=Forge -- official beta: 10/01/17, SVN revision: 322 tokens--file=AllTokens.txt diff --git a/src/forge/Card.java b/src/forge/Card.java index d340b3f31e4..ca350158c8a 100644 --- a/src/forge/Card.java +++ b/src/forge/Card.java @@ -2,7 +2,7 @@ package forge; import java.util.*; enum Counters { - AGE, BLAZE, CHARGE, DIVINITY, FADE, HOOFPRINT, ICE, LOYALTY, M1M1, MANA, P0M1, P1P1, QUEST, SPORE + AGE, BLAZE, CHARGE, DIVINITY, FADE, HOOFPRINT, ICE, LOYALTY, M1M1, MANA, P0M1, P1P1, QUEST, SPORE, TIME } public class Card extends MyObservable diff --git a/src/forge/CardFactory.java b/src/forge/CardFactory.java index 98333752b44..4433a3ad7eb 100644 --- a/src/forge/CardFactory.java +++ b/src/forge/CardFactory.java @@ -8094,6 +8094,7 @@ public class CardFactory implements NewConstants { return c.isPermanent() && !c.isArtifact(); } }); + CardListUtil.sortByIndestructible(all); CardListUtil.sortByDestroyEffect(all); for (int i = 0; i < all.size(); i++) @@ -8165,6 +8166,7 @@ public class CardFactory implements NewConstants { all.addAll(AllZone.Computer_Play.getCards()); all = all.getType("Creature"); + CardListUtil.sortByIndestructible(all); CardListUtil.sortByDestroyEffect(all); for (int i = 0; i < all.size(); i++) @@ -8288,6 +8290,7 @@ public class CardFactory implements NewConstants { all.addAll(AllZone.Human_Play.getCards()); all.addAll(AllZone.Computer_Play.getCards()); all = all.getType("Enchantment"); + CardListUtil.sortByIndestructible(all); CardListUtil.sortByDestroyEffect(all); for (int i = 0; i < all.size(); i++) @@ -8828,6 +8831,7 @@ public class CardFactory implements NewConstants { CardList all = new CardList(); all.addAll(AllZone.Human_Play.getCards()); all.addAll(AllZone.Computer_Play.getCards()); + CardListUtil.sortByIndestructible(all); CardListUtil.sortByDestroyEffect(all); for(int i = 0; i < all.size(); i++) @@ -17100,7 +17104,6 @@ return land.size() > 1 && CardFactoryUtil.AI_isMainPhase(); String k[] = parse.split(":"); final String manacost = k[1]; - card.addSpellAbility(CardFactoryUtil.soul_desc(card, manacost)); card.addDestroyCommand(CardFactoryUtil.ability_Soulshift(card, manacost)); @@ -17136,6 +17139,7 @@ return land.size() > 1 && CardFactoryUtil.AI_isMainPhase(); c.setBaseDefense(sim.getBaseDefense()); c.setIntrinsicKeyword(sim.getKeyword()); c.setName(sim.getName()); + c.setImageName(sim.getImageName()); c.setType(sim.getType()); c.setText(sim.getSpellText()); c.setManaCost(sim.getManaCost()); diff --git a/src/forge/CardFactoryUtil.java b/src/forge/CardFactoryUtil.java index 2f7211da463..ebdbaa77823 100644 --- a/src/forge/CardFactoryUtil.java +++ b/src/forge/CardFactoryUtil.java @@ -1450,6 +1450,20 @@ public class CardFactoryUtil return onUnEquip; }//vanila_unequip() + + public static Command entersBattleFieldWithCounters(final Card c, final Counters type, final int n) + { + Command addCounters = new Command() + { + private static final long serialVersionUID = 4825430555490333062L; + + public void execute() + { + c.addCounter(type, n); + } + }; + return addCounters; + } public static Command vanishing(final Card sourceCard, final int Power) { @@ -1462,7 +1476,7 @@ public class CardFactoryUtil //testAndSet - only needed when comes into play. if(firstTime){ - sourceCard.setCounter(Counters.AGE, Power); + sourceCard.addCounter(Counters.TIME, Power); } firstTime = false; } @@ -3150,9 +3164,10 @@ public class CardFactoryUtil list.add(creatureLands[i]); return list; } - + + public static CardList makeToken(String name, String imageName, Card source, String manaCost, String[] types, int baseAttack, int baseDefense, - String[] intrinsicKeywords) + String[] intrinsicKeywords) { CardList list = new CardList(); Card c = new Card(); diff --git a/src/forge/CardFactory_Creatures.java b/src/forge/CardFactory_Creatures.java index 21f5ca6277c..bf2b9df9868 100644 --- a/src/forge/CardFactory_Creatures.java +++ b/src/forge/CardFactory_Creatures.java @@ -9480,63 +9480,74 @@ public class CardFactory_Creatures { void makeToken() { + + //CardList cl = CardFactoryUtil.makeToken("Elemental", "R 3 1 Elemental", card, "R", new String[]{"Creature", "Elemental"}, 1, 1, String[] {"Trample", "Haste"}); + + //Cannot use the generic CardFactoryUtil.makeToken yet (token has CIP and destroy commands). PlayerZone play = AllZone.getZone(Constant.Zone.Play, card.getController()); - final Card c = new Card(); - c.setOwner(card.getController()); - c.setController(card.getController()); - - c.setManaCost("R"); - c.setToken(true); - - c.addType("Creature"); - c.addType("Elemental"); - c.setBaseAttack(3); - c.setBaseDefense(1); - - //custom settings - c.setName("Spark Elemental"); - c.setImageName("R 3 1 Spark Elemental"); - - - final SpellAbility spell = new Ability(card, "0") - { - public void resolve() + int multiplier = 1; + int doublingSeasons = CardFactoryUtil.getCards("Doubling Season", card.getController()).size(); + if (doublingSeasons > 0) + multiplier = (int) Math.pow(2, doublingSeasons); + + for (int i=0;i 0) + multiplier = (int) Math.pow(2, doublingSeasons); + for (int i=0;i arrList = new ArrayList(); + arrList.add("Timber Protector"); + arrList.add("Eldrazi Monument"); + + Comparator com = new Comparator() + { + public int compare(Card a, Card b) + { + if( arrList.contains(a.getName()) && arrList.contains(b.getName())) + return 0; + else if(arrList.contains(a.getName())) + return 1; + else if(arrList.contains(b.getName())) + return -1; + + return 0; + } + }; + list.sort(com); + } + public static void sortByTapped(CardList list) { Comparator com = new Comparator() diff --git a/src/forge/GameActionUtil.java b/src/forge/GameActionUtil.java index 1eeaf8a5198..636dbbd1e9f 100644 --- a/src/forge/GameActionUtil.java +++ b/src/forge/GameActionUtil.java @@ -6472,9 +6472,9 @@ public class GameActionUtil { public void resolve() { - card.setCounter(Counters.AGE, - card.getCounters(Counters.AGE) - 1); - if (card.getCounters(Counters.AGE) <= 0) + card.setCounter(Counters.TIME, + card.getCounters(Counters.TIME) - 1); + if (card.getCounters(Counters.TIME) <= 0) { AllZone.GameAction.sacrifice(card); } @@ -6483,7 +6483,7 @@ public class GameActionUtil ability.setStackDescription(card.getName() + " - Vanishing - remove a time counter from it. When the last is removed, sacrifice it.)"); AllZone.Stack.add(ability); - } + } } } @@ -6500,9 +6500,9 @@ public class GameActionUtil for (int i = 0; i < list.size(); i++) { Card card = list.get(i); - card.setCounter(Counters.AGE, - card.getCounters(Counters.AGE) - 1); - if (card.getCounters(Counters.AGE) <= 0) + card.setCounter(Counters.TIME, + card.getCounters(Counters.TIME) - 1); + if (card.getCounters(Counters.TIME) <= 0) { AllZone.GameAction.sacrifice(card); } @@ -6521,9 +6521,9 @@ public class GameActionUtil for (int i = 0; i < list.size(); i++) { Card card = list.get(i); - card.setCounter(Counters.AGE, - card.getCounters(Counters.AGE) - 1); - if (card.getCounters(Counters.AGE) <= 0) + card.setCounter(Counters.TIME, + card.getCounters(Counters.TIME) - 1); + if (card.getCounters(Counters.TIME) <= 0) { AllZone.GameAction.sacrifice(card); }