diff --git a/.gitattributes b/.gitattributes index 2e7a85ac43f..acd2dae1c3b 100644 --- a/.gitattributes +++ b/.gitattributes @@ -8774,6 +8774,7 @@ src/forge/card/abilityFactory/AbilityFactory_Copy.java -text svneol=native#text/ src/forge/card/abilityFactory/AbilityFactory_CounterMagic.java -text svneol=native#text/plain src/forge/card/abilityFactory/AbilityFactory_Counters.java -text svneol=native#text/plain src/forge/card/abilityFactory/AbilityFactory_DealDamage.java -text svneol=native#text/plain +src/forge/card/abilityFactory/AbilityFactory_DelayedTrigger.java -text svneol=native#text/plain src/forge/card/abilityFactory/AbilityFactory_Destroy.java -text svneol=native#text/plain src/forge/card/abilityFactory/AbilityFactory_Effect.java -text svneol=native#text/plain src/forge/card/abilityFactory/AbilityFactory_EndGameCondition.java -text svneol=native#text/plain diff --git a/src/forge/card/abilityFactory/AbilityFactory.java b/src/forge/card/abilityFactory/AbilityFactory.java index 81268204b20..28690b3ae2c 100644 --- a/src/forge/card/abilityFactory/AbilityFactory.java +++ b/src/forge/card/abilityFactory/AbilityFactory.java @@ -665,7 +665,12 @@ public class AbilityFactory { else if(isDb) SA = AbilityFactory_Clash.getDrawbackFlip(this); } - + + if(API.equals("DelayedTrigger")) { + if(isDb) + SA = AbilityFactory_DelayedTrigger.getDrawback(this); + } + if (SA == null) throw new RuntimeException("AbilityFactory : SpellAbility was not created for "+hostCard.getName()+". Looking for API: "+API); diff --git a/src/forge/card/abilityFactory/AbilityFactory_CounterMagic.java b/src/forge/card/abilityFactory/AbilityFactory_CounterMagic.java index 02c0117c043..2bf82f604bf 100644 --- a/src/forge/card/abilityFactory/AbilityFactory_CounterMagic.java +++ b/src/forge/card/abilityFactory/AbilityFactory_CounterMagic.java @@ -266,6 +266,14 @@ public class AbilityFactory_CounterMagic { sas = AbilityFactory.getDefinedSpellAbilities(sa.getSourceCard(), params.get("Defined"), sa); } + if(params.containsKey("ForgetOtherTargets")) + { + if(params.get("ForgetOtherTargets").equals("True")) + { + af.getHostCard().clearRemembered(); + } + } + for(final SpellAbility tgtSA : sas){ Card tgtSACard = tgtSA.getSourceCard(); if (AllZone.Stack.contains(tgtSA) && !tgtSACard.keywordsContain("CARDNAME can't be countered.")){ @@ -313,6 +321,14 @@ public class AbilityFactory_CounterMagic { if(tgtSA.isAbility() && params.containsKey("DestroyPermanent")) { AllZone.GameAction.destroy(tgtSACard); } + + if(params.containsKey("RememberTargets")) + { + if(params.get("RememberTargets").equals("True")) + { + af.getHostCard().addRemembered(tgtSACard); + } + } } } diff --git a/src/forge/card/abilityFactory/AbilityFactory_DelayedTrigger.java b/src/forge/card/abilityFactory/AbilityFactory_DelayedTrigger.java new file mode 100644 index 00000000000..87d573933fd --- /dev/null +++ b/src/forge/card/abilityFactory/AbilityFactory_DelayedTrigger.java @@ -0,0 +1,62 @@ +package forge.card.abilityFactory; + +import forge.AllZone; +import forge.card.spellability.Ability_Sub; +import forge.card.spellability.SpellAbility; +import forge.card.trigger.Trigger; +import forge.card.trigger.TriggerHandler; + +import java.util.HashMap; + +/** + * Created by IntelliJ IDEA. + * User: Administrator + * Date: 5/18/11 + * Time: 8:53 PM + * To change this template use File | Settings | File Templates. + */ +public class AbilityFactory_DelayedTrigger { + public static Ability_Sub getDrawback(final AbilityFactory AF) + { + final Ability_Sub drawback = new Ability_Sub(AF.getHostCard(),AF.getAbTgt()) { + @Override + public boolean chkAI_Drawback() { + return false; //To change body of implemented methods use File | Settings | File Templates. + } + + @Override + public boolean doTrigger(boolean mandatory) { + return false; //To change body of implemented methods use File | Settings | File Templates. + } + + @Override + public void resolve() { + doResolve(AF,this); + } + }; + + return drawback; + } + + private static void doResolve(AbilityFactory AF,SpellAbility SA) + { + HashMap mapParams = AF.getMapParams(); + + if(mapParams.containsKey("Cost")) + mapParams.remove("Cost"); + + if(mapParams.containsKey("SpellDescription")) + { + mapParams.put("TriggerDescription",mapParams.get("SpellDescription")); + mapParams.remove("SpellDescription"); + } + + Trigger delTrig = TriggerHandler.parseTrigger(mapParams,AF.getHostCard()); + + AllZone.TriggerHandler.registerDelayedTrigger(delTrig); + + if(AF.hasSubAbility()) + if(SA.getSubAbility() != null) + SA.getSubAbility().resolve(); + } +}