From 70051a59c260393517c4e090bb8a7617784ce301 Mon Sep 17 00:00:00 2001 From: beholder Date: Sun, 2 Oct 2011 13:24:58 +0200 Subject: [PATCH 1/3] added Abuna Acolyte and Acid Web Spider --- resources/magic/data/cards.txt | 25 ++++++ src/magic/card/Abuna_Acolyte.java | 83 +++++++++++++++++++ src/magic/card/Acid_Web_Spider.java | 46 ++++++++++ src/magic/model/choice/MagicTargetChoice.java | 5 ++ src/magic/model/target/MagicTargetFilter.java | 20 +++++ 5 files changed, 179 insertions(+) create mode 100644 src/magic/card/Abuna_Acolyte.java create mode 100644 src/magic/card/Acid_Web_Spider.java diff --git a/resources/magic/data/cards.txt b/resources/magic/data/cards.txt index 4eed10dd76..92e1bad904 100644 --- a/resources/magic/data/cards.txt +++ b/resources/magic/data/cards.txt @@ -11320,3 +11320,28 @@ converted=3 cost={1}{B}{B} pt=7/7 timing=main + +>Abuna Acolyte +image=http://magiccards.info/scans/en/som/1.jpg +value=2 +rarity=U +type=Creature +subtype=Cat,Cleric +color=w +converted=2 +cost={1}{W} +pt=1/1 +timing=main + +>Acid Web Spider +image=http://magiccards.info/scans/en/som/108.jpg +value=3 +rarity=U +type=Creature +subtype=Spider +color=g +converted=5 +cost={3}{G}{G} +pt=3/5 +ability=reach +timing=main diff --git a/src/magic/card/Abuna_Acolyte.java b/src/magic/card/Abuna_Acolyte.java new file mode 100644 index 0000000000..4618918bea --- /dev/null +++ b/src/magic/card/Abuna_Acolyte.java @@ -0,0 +1,83 @@ +package magic.card; + +import magic.model.MagicGame; +import magic.model.MagicPayedCost; +import magic.model.MagicPermanent; +import magic.model.MagicSource; +import magic.model.action.MagicPreventDamageAction; +import magic.model.action.MagicTargetAction; +import magic.model.choice.MagicTargetChoice; +import magic.model.condition.MagicCondition; +import magic.model.event.MagicActivationHints; +import magic.model.event.MagicEvent; +import magic.model.event.MagicPermanentActivation; +import magic.model.event.MagicTapEvent; +import magic.model.event.MagicTiming; +import magic.model.target.MagicPreventTargetPicker; +import magic.model.target.MagicTarget; + +public class Abuna_Acolyte { + public static final MagicPermanentActivation A1 = new MagicPermanentActivation( + new MagicCondition[]{MagicCondition.CAN_TAP_CONDITION}, + new MagicActivationHints(MagicTiming.Pump), + "Prevent 1") { + + @Override + public MagicEvent[] getCostEvent(final MagicSource source) { + return new MagicEvent[]{new MagicTapEvent((MagicPermanent)source)}; + } + + @Override + public MagicEvent getPermanentEvent(final MagicPermanent source,final MagicPayedCost payedCost) { + return new MagicEvent( + source, + source.getController(), + MagicTargetChoice.POS_TARGET_CREATURE_OR_PLAYER, + MagicPreventTargetPicker.getInstance(), + MagicEvent.NO_DATA, + this, + "Prevent the next 1 damage that would be dealt to target creature or player$ this turn."); + } + + @Override + public void executeEvent(final MagicGame game,final MagicEvent event,final Object[] data,final Object[] choiceResults) { + event.processTarget(game,choiceResults,0,new MagicTargetAction() { + public void doAction(final MagicTarget target) { + game.doAction(new MagicPreventDamageAction(target,1)); + } + }); + } + }; + + public static final MagicPermanentActivation A2 = new MagicPermanentActivation( + new MagicCondition[]{MagicCondition.CAN_TAP_CONDITION}, + new MagicActivationHints(MagicTiming.Pump), + "Prevent 2") { + + @Override + public MagicEvent[] getCostEvent(final MagicSource source) { + return new MagicEvent[]{new MagicTapEvent((MagicPermanent)source)}; + } + + @Override + public MagicEvent getPermanentEvent(final MagicPermanent source,final MagicPayedCost payedCost) { + return new MagicEvent( + source, + source.getController(), + MagicTargetChoice.POS_TARGET_ARTIFACT_CREATURE, + MagicPreventTargetPicker.getInstance(), + MagicEvent.NO_DATA, + this, + "Prevent the next 2 damage that would be dealt to target artifact creature$ this turn"); + } + + @Override + public void executeEvent(final MagicGame game,final MagicEvent event,final Object[] data,final Object[] choiceResults) { + event.processTarget(game,choiceResults,0,new MagicTargetAction() { + public void doAction(final MagicTarget target) { + game.doAction(new MagicPreventDamageAction(target,2)); + } + }); + } + }; +} diff --git a/src/magic/card/Acid_Web_Spider.java b/src/magic/card/Acid_Web_Spider.java new file mode 100644 index 0000000000..df02db173b --- /dev/null +++ b/src/magic/card/Acid_Web_Spider.java @@ -0,0 +1,46 @@ +package magic.card; + +import magic.model.MagicGame; +import magic.model.MagicPermanent; +import magic.model.MagicPlayer; +import magic.model.action.MagicDestroyAction; +import magic.model.action.MagicPermanentAction; +import magic.model.choice.MagicMayChoice; +import magic.model.choice.MagicTargetChoice; +import magic.model.event.MagicEvent; +import magic.model.target.MagicDestroyTargetPicker; +import magic.model.trigger.MagicWhenComesIntoPlayTrigger; + + +public class Acid_Web_Spider { + public static final MagicWhenComesIntoPlayTrigger T = new MagicWhenComesIntoPlayTrigger() { + @Override + public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicPlayer player) { + return new MagicEvent( + permanent, + player, + new MagicMayChoice( + "You may destroy target Equipment.", + MagicTargetChoice.NEG_TARGET_EQUIPMENT), + new MagicDestroyTargetPicker(false), + MagicEvent.NO_DATA, + this, + "You may$ destroy target Equipment$."); + } + + @Override + public void executeEvent( + final MagicGame game, + final MagicEvent event, + final Object data[], + final Object[] choiceResults) { + if (MagicMayChoice.isYesChoice(choiceResults[0])) { + event.processTargetPermanent(game,choiceResults,1,new MagicPermanentAction() { + public void doAction(final MagicPermanent permanent) { + game.doAction(new MagicDestroyAction(permanent)); + } + }); + } + } + }; +} diff --git a/src/magic/model/choice/MagicTargetChoice.java b/src/magic/model/choice/MagicTargetChoice.java index 4c2cad1948..7c0457605f 100644 --- a/src/magic/model/choice/MagicTargetChoice.java +++ b/src/magic/model/choice/MagicTargetChoice.java @@ -109,12 +109,17 @@ public class MagicTargetChoice extends MagicChoice { "target artifact or enchantment your opponent controls"); public static final MagicTargetChoice TARGET_ARTIFACT_OR_ENCHANTMENT_OR_LAND= new MagicTargetChoice(MagicTargetFilter.TARGET_ARTIFACT_OR_ENCHANTMENT_OR_LAND,true,MagicTargetHint.None,"target artifact, enchantment or land"); + public static final MagicTargetChoice POS_TARGET_ARTIFACT_CREATURE = + new MagicTargetChoice(MagicTargetFilter.TARGET_ARTIFACT_CREATURE,true,MagicTargetHint.Positive, + "target artifact creature"); public static final MagicTargetChoice TARGET_ENCHANTMENT = new MagicTargetChoice(MagicTargetFilter.TARGET_ENCHANTMENT,true,MagicTargetHint.None,"target enchantment"); public static final MagicTargetChoice NEG_TARGET_ENCHANTMENT = new MagicTargetChoice(MagicTargetFilter.TARGET_ENCHANTMENT,true,MagicTargetHint.Negative,"target enchantment"); public static final MagicTargetChoice NEG_TARGET_SPIRIT_OR_ENCHANTMENT = new MagicTargetChoice(MagicTargetFilter.TARGET_SPIRIT_OR_ENCHANTMENT,true,MagicTargetHint.Negative,"target Spirit or enchantment"); + public static final MagicTargetChoice NEG_TARGET_EQUIPMENT = + new MagicTargetChoice(MagicTargetFilter.TARGET_EQUIPMENT,true,MagicTargetHint.Negative,"target Equipment"); public static final MagicTargetChoice TARGET_CREATURE= new MagicTargetChoice(MagicTargetFilter.TARGET_CREATURE,true,MagicTargetHint.None,"target creature"); public static final MagicTargetChoice NEG_TARGET_CREATURE= diff --git a/src/magic/model/target/MagicTargetFilter.java b/src/magic/model/target/MagicTargetFilter.java index bb85c8a9d1..0c364fdc18 100644 --- a/src/magic/model/target/MagicTargetFilter.java +++ b/src/magic/model/target/MagicTargetFilter.java @@ -233,6 +233,17 @@ public interface MagicTargetFilter { } }; + MagicTargetFilter TARGET_ARTIFACT_CREATURE = new MagicTargetFilter() { + public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) { + final MagicPermanent targetPermanent = (MagicPermanent)target; + return targetPermanent.isArtifact() && + targetPermanent.isCreature(game); + } + public boolean acceptType(final MagicTargetType targetType) { + return targetType == MagicTargetType.Permanent; + } + }; + MagicTargetFilter TARGET_ARTIFACT_CREATURE_YOU_CONTROL = new MagicTargetFilter() { public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) { final MagicPermanent targetPermanent = (MagicPermanent)target; @@ -406,6 +417,15 @@ public interface MagicTargetFilter { } }; + MagicTargetFilter TARGET_EQUIPMENT = new MagicTargetFilter() { + public boolean accept(final MagicGame game,final MagicPlayer player,final MagicTarget target) { + final MagicPermanent targetPermanent = (MagicPermanent)target; + return targetPermanent.isEquipment(); + } + public boolean acceptType(final MagicTargetType targetType) { + return targetType == MagicTargetType.Permanent; + } + }; MagicTargetFilter TARGET_PERMANENT_YOU_CONTROL=new MagicTargetFilter() { From 64b40e202a4eca543861d5db1c188036e5d71294 Mon Sep 17 00:00:00 2001 From: beholder Date: Sun, 2 Oct 2011 13:47:34 +0200 Subject: [PATCH 2/3] added Argent Sphinx and Argentum Armor --- resources/magic/data/cards.txt | 25 +++++++++++++++ src/magic/card/Argent_Sphinx.java | 51 ++++++++++++++++++++++++++++++ src/magic/card/Argentum_Armor.java | 43 +++++++++++++++++++++++++ 3 files changed, 119 insertions(+) create mode 100644 src/magic/card/Argent_Sphinx.java create mode 100644 src/magic/card/Argentum_Armor.java diff --git a/resources/magic/data/cards.txt b/resources/magic/data/cards.txt index 92e1bad904..81859d1536 100644 --- a/resources/magic/data/cards.txt +++ b/resources/magic/data/cards.txt @@ -11345,3 +11345,28 @@ cost={3}{G}{G} pt=3/5 ability=reach timing=main + +>Argent Sphinx +image=http://magiccards.info/scans/en/som/28.jpg +value=4 +rarity=R +type=Creature +subtype=Sphinx +color=u +converted=4 +cost={2}{U}{U} +pt=4/3 +ability=flying +timing=main + +>Argentum Armor +image=http://magiccards.info/scans/en/som/137.jpg +value=5 +rarity=R +type=Artifact +subtype=Equipment +converted=6 +cost={6} +equip={6} +given_pt=6/6 +timing=equipment diff --git a/src/magic/card/Argent_Sphinx.java b/src/magic/card/Argent_Sphinx.java new file mode 100644 index 0000000000..87dd14cc12 --- /dev/null +++ b/src/magic/card/Argent_Sphinx.java @@ -0,0 +1,51 @@ +package magic.card; + +import magic.model.MagicGame; +import magic.model.MagicManaCost; +import magic.model.MagicPayedCost; +import magic.model.MagicPermanent; +import magic.model.MagicPlayer; +import magic.model.MagicSource; +import magic.model.action.MagicExileUntilEndOfTurnAction; +import magic.model.condition.MagicCondition; +import magic.model.event.MagicActivationHints; +import magic.model.event.MagicEvent; +import magic.model.event.MagicPayManaCostEvent; +import magic.model.event.MagicPermanentActivation; +import magic.model.event.MagicTiming; + + +public class Argent_Sphinx { + public static final MagicPermanentActivation A =new MagicPermanentActivation( + new MagicCondition[]{ + MagicManaCost.BLUE.getCondition(), + MagicCondition.METALCRAFT_CONDITION + }, + new MagicActivationHints(MagicTiming.Removal,false,1), + "Exile") { + @Override + public MagicEvent[] getCostEvent(final MagicSource source) { + final MagicPlayer player=source.getController(); + return new MagicEvent[]{ + new MagicPayManaCostEvent(source,player,MagicManaCost.BLUE)}; + } + @Override + public MagicEvent getPermanentEvent(final MagicPermanent source,final MagicPayedCost payedCost) { + return new MagicEvent( + source, + source.getController(), + new Object[]{source}, + this, + "Exile " + source + ". Return it to the battlefield " + + "under your control at the end of turn."); + } + @Override + public void executeEvent( + final MagicGame game, + final MagicEvent event, + final Object[] data, + final Object[] choiceResults) { + game.doAction(new MagicExileUntilEndOfTurnAction((MagicPermanent)data[0])); + } + }; +} diff --git a/src/magic/card/Argentum_Armor.java b/src/magic/card/Argentum_Armor.java new file mode 100644 index 0000000000..2d939a2e1b --- /dev/null +++ b/src/magic/card/Argentum_Armor.java @@ -0,0 +1,43 @@ +package magic.card; + +import magic.model.MagicGame; +import magic.model.MagicPermanent; +import magic.model.action.MagicDestroyAction; +import magic.model.action.MagicPermanentAction; +import magic.model.choice.MagicTargetChoice; +import magic.model.event.MagicEvent; +import magic.model.target.MagicDestroyTargetPicker; +import magic.model.trigger.MagicWhenAttacksTrigger; + + +public class Argentum_Armor { + public static final MagicWhenAttacksTrigger T =new MagicWhenAttacksTrigger(1) { + @Override + public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicPermanent creature) { + final MagicPermanent equippedCreature = permanent.getEquippedCreature(); + return (equippedCreature.isValid() && + equippedCreature == creature) ? + new MagicEvent( + permanent, + permanent.getController(), + MagicTargetChoice.NEG_TARGET_PERMANENT, + new MagicDestroyTargetPicker(false), + MagicEvent.NO_DATA, + this, + "Destroy target permanent$."): + MagicEvent.NONE; + } + @Override + public void executeEvent( + final MagicGame game, + final MagicEvent event, + final Object data[], + final Object[] choiceResults) { + event.processTargetPermanent(game,choiceResults,0,new MagicPermanentAction() { + public void doAction(final MagicPermanent permanent) { + game.doAction(new MagicDestroyAction(permanent)); + } + }); + } + }; +} From 8841f11d75b30aea57651114a69c56c381c93e9f Mon Sep 17 00:00:00 2001 From: wait321 Date: Sun, 2 Oct 2011 10:06:29 -0700 Subject: [PATCH 3/3] deck limit decreased to 40. auto generated deck sizes set back to 40 --- src/magic/model/MagicDeckConstructionRule.java | 8 +++++--- src/magic/model/MagicPlayerDefinition.java | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/magic/model/MagicDeckConstructionRule.java b/src/magic/model/MagicDeckConstructionRule.java index 947a649eec..2abe78e710 100644 --- a/src/magic/model/MagicDeckConstructionRule.java +++ b/src/magic/model/MagicDeckConstructionRule.java @@ -5,10 +5,12 @@ import java.util.List; public enum MagicDeckConstructionRule { - Min60Cards("Decks must have a least 60 cards."), + MinDeckSize("Decks must have a least 40 cards."), FourCopyLimit("With the exception of basic lands, a deck must have no more than 4 copies of a card.") ; + public static final int MIN_DECK_SIZE = 40; + private final String text; private MagicDeckConstructionRule(final String text) { @@ -22,8 +24,8 @@ public enum MagicDeckConstructionRule { public static List checkDeck(MagicDeck deck) { ArrayList brokenRules = new ArrayList(); - if(deck.size() < 60) { - brokenRules.add(Min60Cards); + if(deck.size() < MIN_DECK_SIZE) { + brokenRules.add(MinDeckSize); } List countedDeck = MagicDeckCardDefinition.condenseCopyCardList(deck); diff --git a/src/magic/model/MagicPlayerDefinition.java b/src/magic/model/MagicPlayerDefinition.java index cf485860e1..2a2bd5be07 100644 --- a/src/magic/model/MagicPlayerDefinition.java +++ b/src/magic/model/MagicPlayerDefinition.java @@ -7,7 +7,7 @@ import java.util.Properties; public class MagicPlayerDefinition { - private static final int DECK_SIZE=60; + private static final int DECK_SIZE=40; private static final int MIN_SOURCE=16; private static final String NAME="name";