From c93c9cd22c29dc18f2fddd1d9f13c3e15540e7ea Mon Sep 17 00:00:00 2001 From: jendave Date: Sat, 6 Aug 2011 11:09:22 +0000 Subject: [PATCH] - Converting MinTarget and MaxTarget to strings so they can be variable amounts. - Merged Footbottom Feast to AB_Retrieve --- res/cardsfolder/footbottom_feast.txt | 7 ++++--- src/forge/AbilityFactory.java | 4 ++-- src/forge/AbilityFactory_Bounce.java | 6 +++--- src/forge/AbilityFactory_Counters.java | 6 +++--- src/forge/AbilityFactory_DealDamage.java | 4 ++-- src/forge/AbilityFactory_Destroy.java | 6 +++--- src/forge/AbilityFactory_Fetch.java | 6 +++--- src/forge/AbilityFactory_GainControl.java | 4 ++-- src/forge/AbilityFactory_PermanentState.java | 22 ++++++++++---------- src/forge/AbilityFactory_Pump.java | 6 +++--- src/forge/CardFactory.java | 2 +- src/forge/Target.java | 20 +++++++++--------- src/forge/Target_Selection.java | 14 ++++++------- 13 files changed, 54 insertions(+), 53 deletions(-) diff --git a/res/cardsfolder/footbottom_feast.txt b/res/cardsfolder/footbottom_feast.txt index afe689ddd0e..2ef90e5c40e 100644 --- a/res/cardsfolder/footbottom_feast.txt +++ b/res/cardsfolder/footbottom_feast.txt @@ -1,9 +1,10 @@ Name:Footbottom Feast ManaCost:2 B Types:Instant -Text:Put any number of target creature cards from your graveyard on top of your library. -K:spReturnTgt:AnyNumber:Creature:TopofLibrary +Text:no text +A:SP$Retrieve | Cost$ 2 B | Destination$ Library | TargetMin$ 0 | TargetMax$ X | TgtPrompt$ Put any number of target creature cards from your graveyard on top of your library. K:Draw a card. +SVar:X:Count$TypeInYourYard.Creature SVar:Rarity:Common SVar:Picture:http://www.wizards.com/global/images/magic/general/footbottom_feast.jpg -End +End \ No newline at end of file diff --git a/src/forge/AbilityFactory.java b/src/forge/AbilityFactory.java index 30a1720e9c0..217bc130c67 100644 --- a/src/forge/AbilityFactory.java +++ b/src/forge/AbilityFactory.java @@ -151,8 +151,8 @@ public class AbilityFactory { if (isTargeted) { - int min = mapParams.containsKey("TargetMin") ? Integer.parseInt(mapParams.get("TargetMin")) : 1; - int max = mapParams.containsKey("TargetMax") ? Integer.parseInt(mapParams.get("TargetMax")) : 1; + String min = mapParams.containsKey("TargetMin") ? mapParams.get("TargetMin") : "1"; + String max = mapParams.containsKey("TargetMax") ? mapParams.get("TargetMax") : "1"; if (hasValid){ // TgtPrompt now optional diff --git a/src/forge/AbilityFactory_Bounce.java b/src/forge/AbilityFactory_Bounce.java index 3b5d76caa9c..5e812d1a43c 100644 --- a/src/forge/AbilityFactory_Bounce.java +++ b/src/forge/AbilityFactory_Bounce.java @@ -173,9 +173,9 @@ public class AbilityFactory_Bounce { if (abTgt != null){ abTgt.resetTargets(); // target loop - while(abTgt.getNumTargeted() < abTgt.getMaxTargets()){ + while(abTgt.getNumTargeted() < abTgt.getMaxTargets(sa.getSourceCard(), sa)){ if (list.size() == 0){ - if (abTgt.getNumTargeted() < abTgt.getMinTargets() || abTgt.getNumTargeted() == 0){ + if (abTgt.getNumTargeted() < abTgt.getMinTargets(sa.getSourceCard(), sa) || abTgt.getNumTargeted() == 0){ abTgt.resetTargets(); return false; } @@ -194,7 +194,7 @@ public class AbilityFactory_Bounce { choice = CardFactoryUtil.AI_getMostExpensivePermanent(list, af.getHostCard(), true); if (choice == null){ // can't find anything left - if (abTgt.getNumTargeted() < abTgt.getMinTargets() || abTgt.getNumTargeted() == 0){ + if (abTgt.getNumTargeted() < abTgt.getMinTargets(sa.getSourceCard(), sa) || abTgt.getNumTargeted() == 0){ abTgt.resetTargets(); return false; } diff --git a/src/forge/AbilityFactory_Counters.java b/src/forge/AbilityFactory_Counters.java index 23f1c790761..f772af19f5c 100644 --- a/src/forge/AbilityFactory_Counters.java +++ b/src/forge/AbilityFactory_Counters.java @@ -251,9 +251,9 @@ public class AbilityFactory_Counters { if (abTgt != null){ abTgt.resetTargets(); // target loop - while(abTgt.getNumTargeted() < abTgt.getMaxTargets()){ + while(abTgt.getNumTargeted() < abTgt.getMaxTargets(sa.getSourceCard(), sa)){ if (list.size() == 0){ - if (abTgt.getNumTargeted() < abTgt.getMinTargets() || abTgt.getNumTargeted() == 0){ + if (abTgt.getNumTargeted() < abTgt.getMinTargets(sa.getSourceCard(), sa) || abTgt.getNumTargeted() == 0){ abTgt.resetTargets(); return false; } @@ -295,7 +295,7 @@ public class AbilityFactory_Counters { } if (choice == null){ // can't find anything left - if (abTgt.getNumTargeted() < abTgt.getMinTargets() || abTgt.getNumTargeted() == 0){ + if (abTgt.getNumTargeted() < abTgt.getMinTargets(sa.getSourceCard(), sa) || abTgt.getNumTargeted() == 0){ abTgt.resetTargets(); return false; } diff --git a/src/forge/AbilityFactory_DealDamage.java b/src/forge/AbilityFactory_DealDamage.java index a48fe459cac..4e4bc30992c 100644 --- a/src/forge/AbilityFactory_DealDamage.java +++ b/src/forge/AbilityFactory_DealDamage.java @@ -288,7 +288,7 @@ import java.util.Random; tgt.resetTargets(); // target loop - while (tgt.getNumTargeted() < tgt.getMaxTargets()) { + while (tgt.getNumTargeted() < tgt.getMaxTargets(saMe.getSourceCard(), saMe)) { // TODO: Consider targeting the planeswalker if (tgt.canTgtCreatureAndPlayer()) { @@ -317,7 +317,7 @@ import java.util.Random; } } // fell through all the choices, no targets left? - if (tgt.getNumTargeted() < tgt.getMinTargets() + if (tgt.getNumTargeted() < tgt.getMinTargets(saMe.getSourceCard(), saMe) || tgt.getNumTargeted() == 0) { tgt.resetTargets(); return false; diff --git a/src/forge/AbilityFactory_Destroy.java b/src/forge/AbilityFactory_Destroy.java index 71575637c92..3c837aac7df 100644 --- a/src/forge/AbilityFactory_Destroy.java +++ b/src/forge/AbilityFactory_Destroy.java @@ -191,9 +191,9 @@ public class AbilityFactory_Destroy { if (abTgt != null){ abTgt.resetTargets(); // target loop - while(abTgt.getNumTargeted() < abTgt.getMaxTargets()){ + while(abTgt.getNumTargeted() < abTgt.getMaxTargets(sa.getSourceCard(), sa)){ if (list.size() == 0){ - if (abTgt.getNumTargeted() < abTgt.getMinTargets() || abTgt.getNumTargeted() == 0){ + if (abTgt.getNumTargeted() < abTgt.getMinTargets(sa.getSourceCard(), sa) || abTgt.getNumTargeted() == 0){ abTgt.resetTargets(); return false; } @@ -210,7 +210,7 @@ public class AbilityFactory_Destroy { choice = CardFactoryUtil.AI_getMostExpensivePermanent(list, af.getHostCard(), true); if (choice == null){ // can't find anything left - if (abTgt.getNumTargeted() < abTgt.getMinTargets() || abTgt.getNumTargeted() == 0){ + if (abTgt.getNumTargeted() < abTgt.getMinTargets(sa.getSourceCard(), sa) || abTgt.getNumTargeted() == 0){ abTgt.resetTargets(); return false; } diff --git a/src/forge/AbilityFactory_Fetch.java b/src/forge/AbilityFactory_Fetch.java index e85c32b0134..a9e6ae291d8 100644 --- a/src/forge/AbilityFactory_Fetch.java +++ b/src/forge/AbilityFactory_Fetch.java @@ -512,12 +512,12 @@ public class AbilityFactory_Fetch { return false; - while(tgt.getNumTargeted() < tgt.getMaxTargets()){ + while(tgt.getNumTargeted() < tgt.getMaxTargets(sa.getSourceCard(), sa)){ // AI Targeting Card choice; if (list.size() == 0){ - if (tgt.getNumTargeted() < tgt.getMinTargets() || tgt.getNumTargeted() == 0){ + if (tgt.getNumTargeted() < tgt.getMinTargets(sa.getSourceCard(), sa) || tgt.getNumTargeted() == 0){ tgt.resetTargets(); return false; } @@ -537,7 +537,7 @@ public class AbilityFactory_Fetch { choice = list.get(0); } if (choice == null){ // can't find anything left - if (tgt.getNumTargeted() < tgt.getMinTargets() || tgt.getNumTargeted() == 0){ + if (tgt.getNumTargeted() < tgt.getMinTargets(sa.getSourceCard(), sa) || tgt.getNumTargeted() == 0){ tgt.resetTargets(); return false; } diff --git a/src/forge/AbilityFactory_GainControl.java b/src/forge/AbilityFactory_GainControl.java index 4a0387a33d3..52eb44ec612 100644 --- a/src/forge/AbilityFactory_GainControl.java +++ b/src/forge/AbilityFactory_GainControl.java @@ -135,11 +135,11 @@ public class AbilityFactory_GainControl { if (list.isEmpty()) return false; - while(tgt.getNumTargeted() < tgt.getMaxTargets()){ + while(tgt.getNumTargeted() < tgt.getMaxTargets(sa.getSourceCard(), sa)){ Card t = null; if (list.isEmpty()){ - if (tgt.getNumTargeted() < tgt.getMinTargets() || tgt.getNumTargeted() == 0){ + if (tgt.getNumTargeted() < tgt.getMinTargets(sa.getSourceCard(), sa) || tgt.getNumTargeted() == 0){ tgt.resetTargets(); return false; } diff --git a/src/forge/AbilityFactory_PermanentState.java b/src/forge/AbilityFactory_PermanentState.java index 0076f545209..ddc330c8029 100644 --- a/src/forge/AbilityFactory_PermanentState.java +++ b/src/forge/AbilityFactory_PermanentState.java @@ -95,11 +95,11 @@ public class AbilityFactory_PermanentState { if (untapList.size() == 0) return false; - while(tgt.getNumTargeted() < tgt.getMaxTargets()){ + while(tgt.getNumTargeted() < tgt.getMaxTargets(sa.getSourceCard(), sa)){ Card choice = null; if (untapList.size() == 0){ - if (tgt.getNumTargeted() < tgt.getMinTargets() || tgt.getNumTargeted() == 0){ + if (tgt.getNumTargeted() < tgt.getMinTargets(sa.getSourceCard(), sa) || tgt.getNumTargeted() == 0){ tgt.resetTargets(); return false; } @@ -115,7 +115,7 @@ public class AbilityFactory_PermanentState { choice = CardFactoryUtil.AI_getMostExpensivePermanent(untapList, af.getHostCard(), false); if (choice == null){ // can't find anything left - if (tgt.getNumTargeted() < tgt.getMinTargets() || tgt.getNumTargeted() == 0){ + if (tgt.getNumTargeted() < tgt.getMinTargets(sa.getSourceCard(), sa) || tgt.getNumTargeted() == 0){ tgt.resetTargets(); return false; } @@ -143,7 +143,7 @@ public class AbilityFactory_PermanentState { tgtCards = tgt.getTargetCards(); else{ tgtCards = new ArrayList(); - tgtCards.add(card); + tgtCards.add(card); } for(Card tgtC : tgtCards){ @@ -152,10 +152,10 @@ public class AbilityFactory_PermanentState { } Card c = tgtCards.get(0); - - String DrawBack = params.get("SubAbility"); - if (af.hasSubAbility()) - CardFactoryUtil.doDrawBack(DrawBack, 0, card.getController(), card.getController().getOpponent(), card.getController(), card, c, sa); + + String DrawBack = params.get("SubAbility"); + if (af.hasSubAbility()) + CardFactoryUtil.doDrawBack(DrawBack, 0, card.getController(), card.getController().getOpponent(), card.getController(), card, c, sa); } @@ -251,11 +251,11 @@ public class AbilityFactory_PermanentState { if (tapList.size() == 0) return false; - while(tgt.getNumTargeted() < tgt.getMaxTargets()){ + while(tgt.getNumTargeted() < tgt.getMaxTargets(sa.getSourceCard(), sa)){ Card choice = null; if (tapList.size() == 0){ - if (tgt.getNumTargeted() < tgt.getMinTargets() || tgt.getNumTargeted() == 0){ + if (tgt.getNumTargeted() < tgt.getMinTargets(sa.getSourceCard(), sa) || tgt.getNumTargeted() == 0){ tgt.resetTargets(); return false; } @@ -271,7 +271,7 @@ public class AbilityFactory_PermanentState { choice = CardFactoryUtil.AI_getMostExpensivePermanent(tapList, af.getHostCard(), false); if (choice == null){ // can't find anything left - if (tgt.getNumTargeted() < tgt.getMinTargets() || tgt.getNumTargeted() == 0){ + if (tgt.getNumTargeted() < tgt.getMinTargets(sa.getSourceCard(), sa) || tgt.getNumTargeted() == 0){ tgt.resetTargets(); return false; } diff --git a/src/forge/AbilityFactory_Pump.java b/src/forge/AbilityFactory_Pump.java index 0a101e5d156..dd484e2d31e 100644 --- a/src/forge/AbilityFactory_Pump.java +++ b/src/forge/AbilityFactory_Pump.java @@ -296,12 +296,12 @@ public class AbilityFactory_Pump { if (list.isEmpty()) return false; - while(tgt.getNumTargeted() < tgt.getMaxTargets()){ + while(tgt.getNumTargeted() < tgt.getMaxTargets(sa.getSourceCard(), sa)){ Card t = null; boolean goodt = false; if (list.isEmpty()){ - if (tgt.getNumTargeted() < tgt.getMinTargets() || tgt.getNumTargeted() == 0){ + if (tgt.getNumTargeted() < tgt.getMinTargets(sa.getSourceCard(), sa) || tgt.getNumTargeted() == 0){ tgt.resetTargets(); return false; } @@ -329,7 +329,7 @@ public class AbilityFactory_Pump { } if (list.isEmpty()){ - if (tgt.getNumTargeted() < tgt.getMinTargets() || tgt.getNumTargeted() == 0){ + if (tgt.getNumTargeted() < tgt.getMinTargets(sa.getSourceCard(), sa) || tgt.getNumTargeted() == 0){ tgt.resetTargets(); return false; } diff --git a/src/forge/CardFactory.java b/src/forge/CardFactory.java index 6f6f27d3d9e..78735e33073 100644 --- a/src/forge/CardFactory.java +++ b/src/forge/CardFactory.java @@ -11146,7 +11146,7 @@ public class CardFactory implements NewConstants { //*************** START *********** START ************************** else if(cardName.equals("Barl's Cage")) { final String Tgts[] = {"Creature"}; - Target target= new Target("Select target creature.", Tgts, 1, 1); + Target target= new Target("Select target creature.", Tgts, "1", "1"); final Ability_Cost cost = new Ability_Cost("3", card.getName(), true); diff --git a/src/forge/Target.java b/src/forge/Target.java index f429f519ad9..a7aefc7dc73 100644 --- a/src/forge/Target.java +++ b/src/forge/Target.java @@ -11,13 +11,13 @@ public class Target { public String[] getValidTgts() { return ValidTgts; } public String getVTSelection() { return vtSelection; } - private int minTargets = 1; - public int getMinTargets() { return minTargets; } - private int maxTargets = 1; - public int getMaxTargets() { return maxTargets; } + private String minTargets; + private String maxTargets; + public int getMinTargets(Card c, SpellAbility sa) { return AbilityFactory.calculateAmount(c, minTargets, sa); } + public int getMaxTargets(Card c, SpellAbility sa) { return AbilityFactory.calculateAmount(c, maxTargets, sa); } - public boolean isMaxTargetsChosen() { return maxTargets == numTargeted; } - public boolean isMinTargetsChosen() { return minTargets <= numTargeted; } + public boolean isMaxTargetsChosen(Card c, SpellAbility sa) { return getMaxTargets(c, sa) == numTargeted; } + public boolean isMinTargetsChosen(Card c, SpellAbility sa) { return getMinTargets(c, sa) <= numTargeted; } private String tgtZone = Constant.Zone.Play; public void setZone(String tZone) { tgtZone = tZone; } @@ -84,10 +84,10 @@ public class Target { } public Target(String parse){ - this(parse, 1, 1); + this(parse, "1", "1"); } - public Target(String parse, int min, int max){ + public Target(String parse, String min, String max){ // parse=Tgt{C}{P} - Primarily used for Pump or Damage // C = Creature P=Player/Planeswalker // CP = All three @@ -126,10 +126,10 @@ public class Target { } public Target(String select, String[] valid){ - this(select, valid, 1, 1); + this(select, valid, "1", "1"); } - public Target(String select, String[] valid, int min, int max){ + public Target(String select, String[] valid, String min, String max){ tgtValid = true; vtSelection = select; ValidTgts = valid; diff --git a/src/forge/Target_Selection.java b/src/forge/Target_Selection.java index b7b36b908fc..16d59e5a3b8 100644 --- a/src/forge/Target_Selection.java +++ b/src/forge/Target_Selection.java @@ -42,12 +42,12 @@ public class Target_Selection { public boolean chooseTargets(){ // if not enough targets chosen, reset and cancel Ability - if (bCancel || (bDoneTarget && !target.isMinTargetsChosen())){ + if (bCancel || (bDoneTarget && !target.isMinTargetsChosen(card, ability))){ bCancel = true; req.finishedTargeting(); return false; } - else if (!doesTarget() || bDoneTarget && target.isMinTargetsChosen() || target.isMaxTargetsChosen()){ + else if (!doesTarget() || bDoneTarget && target.isMinTargetsChosen(card, ability) || target.isMaxTargetsChosen(card, ability)){ Ability_Sub abSub = ability.getSubAbility(); if (abSub == null){ @@ -109,7 +109,7 @@ public class Target_Selection { }//input_targetValid //CardList choices are the only cards the user can successful select - public static Input input_targetSpecific(final SpellAbility spell, final CardList choices, final String message, + public static Input input_targetSpecific(final SpellAbility sa, final CardList choices, final String message, final boolean targeted, final boolean bTgtPlayer, final Target_Selection select, final SpellAbility_Requirements req) { Input target = new Input() { private static final long serialVersionUID = -1091595663541356356L; @@ -128,7 +128,7 @@ public class Target_Selection { Target t = select.getTgt(); // If reached Minimum targets, enable OK button - if (t.getMinTargets() > t.getNumTargeted()) + if (t.getMinTargets(sa.getSourceCard(), sa) > t.getNumTargeted()) ButtonUtil.enableOnlyCancel(); else ButtonUtil.enableAll(); @@ -149,7 +149,7 @@ public class Target_Selection { @Override public void selectCard(Card card, PlayerZone zone) { - if(targeted && !CardFactoryUtil.canTarget(spell, card)) { + if(targeted && !CardFactoryUtil.canTarget(sa, card)) { AllZone.Display.showMessage("Cannot target this card (Shroud? Protection? Restrictions?)."); } else if(choices.contains(card)) { @@ -160,7 +160,7 @@ public class Target_Selection { @Override public void selectPlayer(Player player) { - if (bTgtPlayer && player.canTarget(spell.getSourceCard())){ + if (bTgtPlayer && player.canTarget(sa.getSourceCard())){ select.getTgt().addTarget(player); done(); } @@ -176,7 +176,7 @@ public class Target_Selection { }//input_targetSpecific() - public static Input input_cardFromList(final SpellAbility spell, final CardList choices, final String message, + public static Input input_cardFromList(final SpellAbility sa, final CardList choices, final String message, final boolean targeted, final Target_Selection select, final SpellAbility_Requirements req){ // Send in a list of valid cards, and popup a choice box to target Input target = new Input() {