diff --git a/release/Magarena/scripts/Cylian_Sunsinger.groovy b/release/Magarena/scripts/Cylian_Sunsinger.groovy new file mode 100644 index 0000000000..1192faeb6a --- /dev/null +++ b/release/Magarena/scripts/Cylian_Sunsinger.groovy @@ -0,0 +1,34 @@ +[ + new MagicPermanentActivation( + new MagicActivationHints(MagicTiming.Pump), + "Pump" + ) { + + @Override + public Iterable getCostEvent(final MagicPermanent source) { + return [new MagicPayManaCostEvent(source,"{R}{G}{W}")]; + } + + @Override + public MagicEvent getPermanentEvent(final MagicPermanent source,final MagicPayedCost payedCost) { + return new MagicEvent( + source, + this, + "SN and each other creature with the same name as it get +3/+3 until end of turn." + ); + } + @Override + public void executeEvent(final MagicGame game, final MagicEvent event) { + final MagicTargetFilter targetFilter = + new MagicTargetFilter.NameTargetFilter( + MagicTargetFilter.TARGET_CREATURE, + event.getPermanent().getName() + ); + final Collection targets = + game.filterPermanents(event.getPlayer(), targetFilter); + for (final MagicPermanent permanent : targets) { + game.doAction(new MagicChangeTurnPTAction(permanent,3,3)); + } + } + } +] diff --git a/release/Magarena/scripts/Cylian_Sunsinger.txt b/release/Magarena/scripts/Cylian_Sunsinger.txt new file mode 100644 index 0000000000..92b9e27de7 --- /dev/null +++ b/release/Magarena/scripts/Cylian_Sunsinger.txt @@ -0,0 +1,11 @@ +name=Cylian Sunsinger +url=http://magiccards.info/cfx/en/80.html +image=http://magiccards.info/scans/en/cfx/80.jpg +value=2.802 +rarity=R +type=Creature +subtype=Elf,Shaman +cost={1}{G} +pt=2/2 +timing=main +requires_groovy_code diff --git a/release/Magarena/scripts/Elvish_Branchbender.groovy b/release/Magarena/scripts/Elvish_Branchbender.groovy new file mode 100644 index 0000000000..3ca57b6305 --- /dev/null +++ b/release/Magarena/scripts/Elvish_Branchbender.groovy @@ -0,0 +1,49 @@ +def ST = new MagicStatic(MagicLayer.Type, MagicStatic.UntilEOT) { + @Override + public void modSubTypeFlags(final MagicPermanent permanent, final Set flags) { + flags.add(MagicSubType.Treefolk); + } + @Override + public int getTypeFlags(final MagicPermanent permanent,final int flags) { + return flags|MagicType.Creature.getMask(); + } +}; + +[ + new MagicPermanentActivation( + new MagicActivationHints(MagicTiming.Animate), + "Animate" + ) { + + @Override + public Iterable getCostEvent(final MagicPermanent source) { + return [new MagicTapEvent(source)]; + } + + @Override + public MagicEvent getPermanentEvent(final MagicPermanent source,final MagicPayedCost payedCost) { + return new MagicEvent( + source, + MagicTargetChoice.Positive("target Forest"), + this, + "Until end of turn, target Forest\$ becomes an X/X Treefolk creature in addition to its other types, " + + "where X is the number of Elves you control." + ); + } + + @Override + public void executeEvent(final MagicGame game, final MagicEvent event) { + event.processTargetPermanent(game, { + final MagicPermanent land -> + final int amount = event.getPlayer().getNrOfPermanents(MagicSubType.Elf); + final MagicStatic PT = new MagicStatic(MagicLayer.SetPT, MagicStatic.UntilEOT) { + @Override + public void modPowerToughness(final MagicPermanent source,final MagicPermanent permanent,final MagicPowerToughness pt) { + pt.set(amount,amount); + } + }; + game.doAction(new MagicBecomesCreatureAction(land,PT,ST)); + } as MagicPermanentAction); + } + } +] diff --git a/release/Magarena/scripts/Elvish_Branchbender.txt b/release/Magarena/scripts/Elvish_Branchbender.txt new file mode 100644 index 0000000000..ca214f77b1 --- /dev/null +++ b/release/Magarena/scripts/Elvish_Branchbender.txt @@ -0,0 +1,11 @@ +name=Elvish Branchbender +url=http://magiccards.info/lw/en/204.html +image=http://magiccards.info/scans/en/lw/204.jpg +value=3.500 +rarity=C +type=Creature +subtype=Elf,Druid +cost={2}{G} +pt=2/2 +timing=main +requires_groovy_code diff --git a/release/Magarena/scripts/Elvish_Hunter.groovy b/release/Magarena/scripts/Elvish_Hunter.groovy new file mode 100644 index 0000000000..a92c3991e7 --- /dev/null +++ b/release/Magarena/scripts/Elvish_Hunter.groovy @@ -0,0 +1,35 @@ +[ + new MagicPermanentActivation( + new MagicActivationHints(MagicTiming.Tapping), + "Paralyze" + ) { + @Override + public Iterable getCostEvent(final MagicPermanent source) { + return [ + new MagicPayManaCostTapEvent(source,"{1}{G}") + ]; + } + + @Override + public MagicEvent getPermanentEvent(final MagicPermanent source,final MagicPayedCost payedCost) { + return new MagicEvent( + source, + MagicTargetChoice.NEG_TARGET_CREATURE, + new MagicNoCombatTargetPicker(true,true,false), + this, + "Target creature\$ doesn't untap during its controller's next untap step." + ); + } + @Override + public void executeEvent(final MagicGame game, final MagicEvent event) { + event.processTargetPermanent(game,new MagicPermanentAction() { + public void doAction(final MagicPermanent creature) { + game.doAction(MagicChangeStateAction.Set( + creature, + MagicPermanentState.DoesNotUntapDuringNext + )); + } + }); + } + } +] diff --git a/release/Magarena/scripts/Elvish_Hunter.txt b/release/Magarena/scripts/Elvish_Hunter.txt new file mode 100644 index 0000000000..c8cff25dd3 --- /dev/null +++ b/release/Magarena/scripts/Elvish_Hunter.txt @@ -0,0 +1,11 @@ +name=Elvish Hunter +url=http://magiccards.info/me2/en/157.html +image=http://magiccards.info/scans/en/me2/157.jpg +value=3.058 +rarity=C +type=Creature +subtype=Elf,Archer +cost={1}{G} +pt=1/1 +timing=main +requires_groovy_code diff --git a/release/Magarena/scripts/Emmara_Tandris.groovy b/release/Magarena/scripts/Emmara_Tandris.groovy new file mode 100644 index 0000000000..37e95de485 --- /dev/null +++ b/release/Magarena/scripts/Emmara_Tandris.groovy @@ -0,0 +1,14 @@ +[ + new MagicIfDamageWouldBeDealtTrigger(MagicTrigger.PREVENT_DAMAGE) { + @Override + public MagicEvent executeTrigger(final MagicGame game, final MagicPermanent permanent, final MagicDamage damage) { + final MagicTarget target = damage.getTarget(); + if (target.isCreature() && + target.isToken() && + target.isFriend(permanent)) { + damage.prevent(); + } + return MagicEvent.NONE; + } + } +] diff --git a/release/Magarena/scripts/Emmara_Tandris.txt b/release/Magarena/scripts/Emmara_Tandris.txt new file mode 100644 index 0000000000..cdd02d84b0 --- /dev/null +++ b/release/Magarena/scripts/Emmara_Tandris.txt @@ -0,0 +1,11 @@ +name=Emmara Tandris +url=http://magiccards.info/dgm/en/68.html +image=http://magiccards.info/scans/en/dgm/68.jpg +value=1.454 +rarity=R +type=Legendary,Creature +subtype=Elf,Shaman +cost={5}{G}{W} +pt=5/7 +timing=main +requires_groovy_code diff --git a/release/Magarena/scripts/Eyeblight_s_Ending.groovy b/release/Magarena/scripts/Eyeblight_s_Ending.groovy new file mode 100644 index 0000000000..d68c8dc783 --- /dev/null +++ b/release/Magarena/scripts/Eyeblight_s_Ending.groovy @@ -0,0 +1,35 @@ +def NON_ELF_CREATURE = new MagicPermanentFilterImpl() { + public boolean accept(final MagicGame game,final MagicPlayer player,final MagicPermanent target) { + return target.isCreature() && + !target.hasSubType(MagicSubType.Elf); + } +}; + +def TARGET_NON_ELF_CREATURE = new MagicTargetChoice( + NON_ELF_CREATURE, + MagicTargetHint.Negative, + "target non-Elf creature" +); + +[ + new MagicSpellCardEvent() { + @Override + public MagicEvent getEvent(final MagicCardOnStack cardOnStack,final MagicPayedCost payedCost) { + return new MagicEvent( + cardOnStack, + TARGET_NON_ELF_CREATURE, + new MagicDestroyTargetPicker(false), + this, + "Destroy target non-Elf creature\$." + ); + } + @Override + public void executeEvent(final MagicGame game, final MagicEvent event) { + event.processTargetPermanent(game,new MagicPermanentAction() { + public void doAction(final MagicPermanent creature) { + game.doAction(new MagicDestroyAction(creature)); + } + }); + } + } +] diff --git a/release/Magarena/scripts/Eyeblight_s_Ending.txt b/release/Magarena/scripts/Eyeblight_s_Ending.txt new file mode 100644 index 0000000000..c18ebfc478 --- /dev/null +++ b/release/Magarena/scripts/Eyeblight_s_Ending.txt @@ -0,0 +1,10 @@ +name=Eyeblight's Ending +url=http://magiccards.info/lw/en/110.html +image=http://magiccards.info/scans/en/lw/110.jpg +value=4.074 +rarity=C +type=Tribal,Instant +subtype=Elf +cost={2}{B} +timing=removal +requires_groovy_code diff --git a/src/magic/model/MagicObject.java b/src/magic/model/MagicObject.java index 2d11712cb9..5405b176aa 100644 --- a/src/magic/model/MagicObject.java +++ b/src/magic/model/MagicObject.java @@ -1,6 +1,7 @@ package magic.model; public interface MagicObject extends MagicCopyable { + boolean isToken(); boolean isSpell(); boolean isSpell(MagicType type); boolean isInstantOrSorcerySpell(); diff --git a/src/magic/model/MagicObjectImpl.java b/src/magic/model/MagicObjectImpl.java index b725ccab33..88b90652fe 100644 --- a/src/magic/model/MagicObjectImpl.java +++ b/src/magic/model/MagicObjectImpl.java @@ -35,4 +35,9 @@ public abstract class MagicObjectImpl implements MagicObject { public boolean isSpell(MagicType type) { return isSpell() && hasType(type); } + + @Override + public boolean isToken() { + return isPermanent() && ((MagicPermanent)this).isToken(); + } }