diff --git a/res/quest/world/shandalar/duels/Sorcerer 1.dck b/res/quest/world/shandalar/duels/Sorcerer 1.dck index 62370c3947a..4581dd2360c 100644 --- a/res/quest/world/shandalar/duels/Sorcerer 1.dck +++ b/res/quest/world/shandalar/duels/Sorcerer 1.dck @@ -11,6 +11,7 @@ Deck Type=constructed 3 Brass Man|ARN 4 Giant Strength|4ED 4 Goblin Balloon Brigade|4ED +4 Goblin Digging Team|DRK 3 Hurr Jackal|ARN 3 Immolation|LEG 4 Lightning Bolt|2ED @@ -18,5 +19,4 @@ Deck Type=constructed 4 Mons's Goblin Raiders|3ED 20 Mountain|4ED 4 Sisters of the Flame|DRK -4 Winds of Change|4ED [sideboard] diff --git a/res/quest/world/shandalar/duels/Sorcerer 2.dck b/res/quest/world/shandalar/duels/Sorcerer 2.dck index 49e7553ba43..0d5b9fc6d02 100644 --- a/res/quest/world/shandalar/duels/Sorcerer 2.dck +++ b/res/quest/world/shandalar/duels/Sorcerer 2.dck @@ -9,6 +9,7 @@ Deck Type=constructed [main] 3 Ali Baba|ARN 3 Ankh of Mishra|LEB +4 Black Vise|LEB 4 Giant Strength|4ED 4 Goblin Balloon Brigade|4ED 3 Hurr Jackal|ARN @@ -19,5 +20,4 @@ Deck Type=constructed 16 Mountain|4ED 4 Sisters of the Flame|DRK 4 Strip Mine|ATQ -4 Winds of Change|4ED [sideboard] diff --git a/res/quest/world/shandalar/duels/Sorceress 1.dck b/res/quest/world/shandalar/duels/Sorceress 1.dck index 422a54f98b5..211d3be8ad7 100644 --- a/res/quest/world/shandalar/duels/Sorceress 1.dck +++ b/res/quest/world/shandalar/duels/Sorceress 1.dck @@ -7,17 +7,18 @@ Difficulty=easy Description=Pumpable Red weenies with Dwarven Warriors and Meekstone. Deck Type=constructed [main] +1 Artifact Blast|ATQ 3 Ball Lightning|4ED 4 Bird Maiden|ARN -4 Blood Lust|LEG 2 Dragon Whelp|4ED 4 Dwarven Warriors|LEB +1 Eternal Warrior|LEG 4 Firebreathing|4ED 2 Hurloon Minotaur|LEB 4 Hurr Jackal|ARN 3 Iron Star|LEB -2 Meekstone|LEB +4 Meekstone|LEB +4 Mons's Goblin Raiders|3ED 23 Mountain|4ED 2 Shatter|4ED -3 The Brute|LEG [sideboard] diff --git a/res/quest/world/shandalar/duels/Sorceress 2.dck b/res/quest/world/shandalar/duels/Sorceress 2.dck index 7856b4e0b65..90148c128c1 100644 --- a/res/quest/world/shandalar/duels/Sorceress 2.dck +++ b/res/quest/world/shandalar/duels/Sorceress 2.dck @@ -9,7 +9,6 @@ Deck Type=constructed [main] 3 Ball Lightning|4ED 4 Bird Maiden|ARN -4 Blood Lust|LEG 3 Dragon Whelp|4ED 4 Dwarven Warriors|LEB 2 Fire Drake|CHR @@ -17,7 +16,8 @@ Deck Type=constructed 2 Hurloon Minotaur|LEB 4 Hurr Jackal|ARN 3 Iron Star|LEB -2 Meekstone|LEB +2 Lightning Bolt|2ED +4 Meekstone|LEB 23 Mountain|4ED 2 Shatter|4ED [sideboard] diff --git a/res/quest/world/shandalar/duels/Summoner 3.dck b/res/quest/world/shandalar/duels/Summoner 3.dck index 3e27664070b..f68240c94dd 100644 --- a/res/quest/world/shandalar/duels/Summoner 3.dck +++ b/res/quest/world/shandalar/duels/Summoner 3.dck @@ -8,17 +8,17 @@ Description=Big Green creatures with a splash of White. Deck Type=constructed [main] 4 Birds of Paradise|4ED -1 Channel|4ED 2 Colossus of Sardia|4ED 2 Disenchant|4ED 3 Force of Nature|2ED -20 Forest|4ED +16 Forest|4ED 3 Giant Growth|2ED -2 Healing Salve|2ED -3 Holy Strength|2ED +1 Healing Salve|2ED 4 Hurricane|4ED 4 Plains|4ED 4 Radjan Spirit|4ED +4 Savannah|LEB 4 Spirit Link|LEG +4 Swords to Plowshares|LEB 4 War Mammoth|2ED [sideboard] diff --git a/res/quest/world/shandalar/duels/Summoner 4.dck b/res/quest/world/shandalar/duels/Summoner 4.dck index 0ecfc56db1e..1a9d43128d1 100644 --- a/res/quest/world/shandalar/duels/Summoner 4.dck +++ b/res/quest/world/shandalar/duels/Summoner 4.dck @@ -7,23 +7,23 @@ Difficulty=very hard Description=Big Green creatures with a splash of White. Deck Type=constructed [main] -1 Channel|LEB -1 Colossus of Sardia|ATQ +4 Birds of Paradise|4ED 4 Desert Twister|4ED 2 Disenchant|4ED -2 Flying Carpet|ARN 3 Force of Nature|LEB -13 Forest|4ED -3 Giant Growth|2ED -2 Healing Salve|2ED -2 Holy Strength|4ED +11 Forest|4ED 4 Hurricane|4ED 4 Llanowar Elves|2ED -1 Mox Emerald|LEB -1 Mox Pearl|LEB -3 Plains|4ED -3 Radjan Spirit|LEG +1 Mox Emerald|2ED +1 Mox Jet|2ED +1 Mox Pearl|2ED +1 Mox Ruby|2ED +1 Mox Sapphire|2ED +4 Plains|4ED 4 Savannah|LEB -4 Spirit Link|LEG +4 Serra Angel|LEB +1 Sol Ring|LEB +2 Su-Chi|ATQ +4 Swords to Plowshares|LEB 4 War Mammoth|LEB [sideboard] diff --git a/res/quest/world/shandalar/duels/Thought Invoker 3.dck b/res/quest/world/shandalar/duels/Thought Invoker 3.dck index b55da81f231..b1df738c98f 100644 --- a/res/quest/world/shandalar/duels/Thought Invoker 3.dck +++ b/res/quest/world/shandalar/duels/Thought Invoker 3.dck @@ -7,17 +7,17 @@ Difficulty=hard Description=Big Blue fliers and effects to impede opponent's progress. Deck Type=constructed [main] +4 Air Elemental|LEB 2 Control Magic|LEB +3 Counterspell|LEB 2 Energy Flux|4ED -3 Feedback|LEB 4 Ghost Ship|DRK 4 Giant Tortoise|ARN 22 Island|4ED 2 Mahamoti Djinn|LEB -4 Mana Short|LEB 4 Phantom Monster|LEB 4 Power Sink|4ED 4 Psychic Venom|LEB 2 Time Elemental|LEG -3 Twiddle|LEB +3 Unsummon|LEB [sideboard] diff --git a/res/quest/world/shandalar/duels/Thought Invoker 4.dck b/res/quest/world/shandalar/duels/Thought Invoker 4.dck index f84cf559790..f9047729733 100644 --- a/res/quest/world/shandalar/duels/Thought Invoker 4.dck +++ b/res/quest/world/shandalar/duels/Thought Invoker 4.dck @@ -7,19 +7,18 @@ Difficulty=very hard Description=Big Blue fliers and effects to impede opponent's progress. Deck Type=constructed [main] +4 Air Elemental|LEB 1 Ancestral Recall|LEB -2 Control Magic|LEB -2 Energy Flux|4ED +4 Control Magic|LEB 4 Ghost Ship|DRK 4 Giant Tortoise|ARN 22 Island|4ED -2 Mahamoti Djinn|LEB -4 Mana Short|LEB +4 Mahamoti Djinn|LEB +4 Mana Drain|LEG 1 Mox Sapphire|LEB 4 Phantom Monster|LEB 4 Power Sink|4ED -4 Psychic Venom|LEB 1 Sol Ring|LEB 2 Time Elemental|LEG -3 Twiddle|LEB +1 Time Walk|LEB [sideboard] diff --git a/src/main/java/forge/card/ability/SpellAbilityAi.java b/src/main/java/forge/card/ability/SpellAbilityAi.java index 9bbd3e0a529..f6451d40f27 100644 --- a/src/main/java/forge/card/ability/SpellAbilityAi.java +++ b/src/main/java/forge/card/ability/SpellAbilityAi.java @@ -84,6 +84,12 @@ public abstract class SpellAbilityAi { if (sa.getRestrictions().getPlaneswalker() && Singletons.getModel().getGame().getPhaseHandler().is(PhaseType.MAIN2)) { return true; } + if (sa.isTrigger()) { + return true; + } + if (sa.isSpell() && !sa.isBuyBackAbility()) { + return false; + } PhaseHandler phase = Singletons.getModel().getGame().getPhaseHandler(); return phase.is(PhaseType.END_OF_TURN) && phase.getNextTurn().equals(ai); diff --git a/src/main/java/forge/card/ability/ai/ChangeZoneAi.java b/src/main/java/forge/card/ability/ai/ChangeZoneAi.java index 703011b7a44..acd6aacbcfc 100644 --- a/src/main/java/forge/card/ability/ai/ChangeZoneAi.java +++ b/src/main/java/forge/card/ability/ai/ChangeZoneAi.java @@ -747,7 +747,7 @@ public class ChangeZoneAi extends SpellAbilityAi { } } // Blink permanents with ETB triggers - else if (sa.isAbility() && (sa.getPayCosts() != null) && SpellAbilityAi.playReusable(ai, sa)) { + else if (SpellAbilityAi.playReusable(ai, sa)) { aiPermanents = CardLists.filter(aiPermanents, new Predicate() { @Override public boolean apply(final Card c) { diff --git a/src/main/java/forge/card/ability/ai/CounterAi.java b/src/main/java/forge/card/ability/ai/CounterAi.java index 3ceda11de74..9e084635dfb 100644 --- a/src/main/java/forge/card/ability/ai/CounterAi.java +++ b/src/main/java/forge/card/ability/ai/CounterAi.java @@ -80,7 +80,7 @@ public class CounterAi extends SpellAbilityAi { if (toPay <= usableManaSources) { // If this is a reusable Resource, feel free to play it most of // the time - if (!sa.getPayCosts().isReusuableResource() || sa.isSpell()) { + if (!SpellAbilityAi.playReusable(ai,sa)) { return false; } } @@ -148,7 +148,7 @@ public class CounterAi extends SpellAbilityAi { if (toPay <= usableManaSources) { // If this is a reusable Resource, feel free to play it most // of the time - if (!sa.getPayCosts().isReusuableResource() || (MyRandom.getRandom().nextFloat() < .4)) { + if (!SpellAbilityAi.playReusable(ai,sa) || (MyRandom.getRandom().nextFloat() < .4)) { return false; } } diff --git a/src/main/java/forge/card/ability/ai/CountersPutAllAi.java b/src/main/java/forge/card/ability/ai/CountersPutAllAi.java index 09ffc91f5d9..d63ac7b9e22 100644 --- a/src/main/java/forge/card/ability/ai/CountersPutAllAi.java +++ b/src/main/java/forge/card/ability/ai/CountersPutAllAi.java @@ -124,7 +124,7 @@ public class CountersPutAllAi extends SpellAbilityAi { } } - if (sa.isTrigger() || sa instanceof AbilitySub || SpellAbilityAi.playReusable(ai, sa)) { + if (SpellAbilityAi.playReusable(ai, sa)) { return chance; } diff --git a/src/main/java/forge/card/ability/ai/LifeLoseAi.java b/src/main/java/forge/card/ability/ai/LifeLoseAi.java index d552c0759d0..86e7a717cc4 100644 --- a/src/main/java/forge/card/ability/ai/LifeLoseAi.java +++ b/src/main/java/forge/card/ability/ai/LifeLoseAi.java @@ -132,7 +132,7 @@ public class LifeLoseAi extends SpellAbilityAi { } boolean randomReturn = r.nextFloat() <= .6667; - if (SpellAbilityAi.playReusable(ai, sa) || priority) { + if (priority || SpellAbilityAi.playReusable(ai, sa)) { randomReturn = true; } diff --git a/src/main/java/forge/card/ability/effects/DiscardEffect.java b/src/main/java/forge/card/ability/effects/DiscardEffect.java index 49fd91ea912..27aef564e8f 100644 --- a/src/main/java/forge/card/ability/effects/DiscardEffect.java +++ b/src/main/java/forge/card/ability/effects/DiscardEffect.java @@ -270,7 +270,7 @@ public class DiscardEffect extends RevealEffectBase { List chosen = getDiscardedList(p, dPChHand); for (Card c : chosen) { - dPChHand.remove(chosen); + dPChHand.remove(c); toBeDiscarded.add(c); } } else diff --git a/src/main/java/forge/card/cardfactory/CardFactory.java b/src/main/java/forge/card/cardfactory/CardFactory.java index 795dda16a00..fbbe564cbda 100644 --- a/src/main/java/forge/card/cardfactory/CardFactory.java +++ b/src/main/java/forge/card/cardfactory/CardFactory.java @@ -287,7 +287,9 @@ public class CardFactory { // this is the "default" spell for permanents like creatures and artifacts if (card.isPermanent() && !card.isAura() && !card.isLand()) { - card.addSpellAbility(new SpellPermanent(card)); + if (card.getRules().getSplitType() != CardSplitType.Split) { + card.addSpellAbility(new SpellPermanent(card)); // ignore the default spell for combined split cards + } } CardFactoryUtil.parseKeywords(card, cardName); @@ -358,6 +360,7 @@ public class CardFactory { if (card.isInAlternateState()) { card.setState(CardCharacteristicName.Original); } + if ( st == CardSplitType.Split ) { card.setName(rules.getName()); @@ -374,7 +377,8 @@ public class CardFactory { combinedCardColorArr.add(combinedCardColor); card.setColor(combinedCardColorArr); - // Combined abilities -- DOESN'T WORK AS DESIRED (?) + // Combined abilities -- DOESN'T DISPLAY THE ABILITY TEXT IN THE CHOICE BOX YET + card.getCharacteristics().getIntrinsicAbility().clear(); for (String a : rules.getMainPart().getAbilities()) { card.addIntrinsicAbility(a); } diff --git a/src/main/java/forge/card/cost/CostPutCounter.java b/src/main/java/forge/card/cost/CostPutCounter.java index 5659db410c9..84a6ae0fa21 100644 --- a/src/main/java/forge/card/cost/CostPutCounter.java +++ b/src/main/java/forge/card/cost/CostPutCounter.java @@ -78,7 +78,6 @@ public class CostPutCounter extends CostPartWithList { super(amount, type, description); this.counter = cntr; } - @Override public boolean isReusable() { return true; } diff --git a/src/main/java/forge/card/cost/CostReveal.java b/src/main/java/forge/card/cost/CostReveal.java index 7ad3d877dff..0714f8356a0 100644 --- a/src/main/java/forge/card/cost/CostReveal.java +++ b/src/main/java/forge/card/cost/CostReveal.java @@ -56,6 +56,9 @@ public class CostReveal extends CostPartWithList { super(amount, type, description); } + @Override + public boolean isReusable() { return true; } + /* * (non-Javadoc) * diff --git a/src/main/java/forge/card/cost/CostUnattach.java b/src/main/java/forge/card/cost/CostUnattach.java index 9019077a030..cec1332bbab 100644 --- a/src/main/java/forge/card/cost/CostUnattach.java +++ b/src/main/java/forge/card/cost/CostUnattach.java @@ -45,7 +45,7 @@ public class CostUnattach extends CostPartWithList { public boolean isUndoable() { return false; } @Override - public boolean isReusable() { return false; } + public boolean isReusable() { return true; } /* * (non-Javadoc)