diff --git a/.gitattributes b/.gitattributes index 6548b5d09ca..d8f84f9c44e 100644 --- a/.gitattributes +++ b/.gitattributes @@ -12402,6 +12402,7 @@ res/cardsfolder/v/volcanic_spray.txt svneol=native#text/plain res/cardsfolder/v/volcanic_strength.txt svneol=native#text/plain res/cardsfolder/v/volcanic_submersion.txt svneol=native#text/plain res/cardsfolder/v/volcanic_wind.txt -text +res/cardsfolder/v/volcano_hellion.txt -text res/cardsfolder/v/volcano_imp.txt svneol=native#text/plain res/cardsfolder/v/volition_reins.txt svneol=native#text/plain res/cardsfolder/v/volley_of_boulders.txt -text diff --git a/res/cardsfolder/v/volcano_hellion.txt b/res/cardsfolder/v/volcano_hellion.txt new file mode 100644 index 00000000000..63aebf509a3 --- /dev/null +++ b/res/cardsfolder/v/volcano_hellion.txt @@ -0,0 +1,14 @@ +Name:Volcano Hellion +ManaCost:2 R R +Types:Creature Hellion +PT:6/5 +Text:CARDNAME has echo X, where X is your life total. +K:Echo:X +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDmg | TriggerDescription$ When CARDNAME enters the battlefield, it deals an amount of damage of your choice to you and target creature. The damage can't be prevented. +SVar:TrigDmg:AB$ ChooseNumber | Cost$ 0 | ListTitle$ Choose an amount of damage to you and target creature | SubAbility$ DBDmg | AILogic$ Min +SVar:DBDmg:DB$ DealDamage | ValidTgts$ Creature | NumDmg$ Y | References$ Y | NoPrevention$ True | SubAbility$ DmgYou +SVar:DmgYou:DB$ DealDamage | Defined$ You | NumDmg$ Y | References$ Y | NoPrevention$ True +SVar:X:Count$YourLifeTotal +SVar:Y:Count$ChosenNumber +SVar:RemAIDeck:True +SVar:Picture:http://www.wizards.com/global/images/magic/general/volcano_hellion.jpg \ No newline at end of file diff --git a/src/main/java/forge/card/ability/effects/PumpEffect.java b/src/main/java/forge/card/ability/effects/PumpEffect.java index 1d57e43768a..a78614b4573 100644 --- a/src/main/java/forge/card/ability/effects/PumpEffect.java +++ b/src/main/java/forge/card/ability/effects/PumpEffect.java @@ -31,7 +31,7 @@ public class PumpEffect extends SpellAbilityEffect { final Game game = sa.getActivatingPlayer().getGame(); final long timestamp = game.getNextTimestamp(); final ArrayList kws = new ArrayList(); - + for (String kw : keywords) { if (kw.startsWith("HIDDEN")) { applyTo.addHiddenExtrinsicKeyword(kw); @@ -67,7 +67,7 @@ public class PumpEffect extends SpellAbilityEffect { } applyTo.removeChangedCardKeywords(timestamp); } - + game.fireEvent(new GameEventCardStatsChanged(applyTo)); } }; @@ -179,18 +179,19 @@ public class PumpEffect extends SpellAbilityEffect { @Override public void resolve(SpellAbility sa) { - + final ArrayList untargetedCards = new ArrayList(); final TargetRestrictions tgt = sa.getTargetRestrictions(); final Game game = sa.getActivatingPlayer().getGame(); - + final Card host = sa.getSourceCard(); + String pumpRemembered = null; String pumpForget = null; String pumpImprint = null; - + List keywords = sa.hasParam("KW") ? Arrays.asList(sa.getParam("KW").split(" & ")) : new ArrayList(); - final int a = AbilityUtils.calculateAmount(sa.getSourceCard(), sa.getParam("NumAtt"), sa); - final int d = AbilityUtils.calculateAmount(sa.getSourceCard(), sa.getParam("NumDef"), sa); + final int a = AbilityUtils.calculateAmount(host, sa.getParam("NumAtt"), sa); + final int d = AbilityUtils.calculateAmount(host, sa.getParam("NumDef"), sa); List tgts = new ArrayList(); List tgtCards = getTargetCards(sa); @@ -200,7 +201,7 @@ public class PumpEffect extends SpellAbilityEffect { if (sa.hasParam("DefinedChosenKW")) { if (sa.getParam("DefinedChosenKW").equals("Type")) { - final String t = sa.getSourceCard().getChosenType(); + final String t = host.getChosenType(); for (int i = 0; i < keywords.size(); i++) { keywords.set(i, keywords.get(i).replaceAll("ChosenType", t)); } @@ -208,7 +209,7 @@ public class PumpEffect extends SpellAbilityEffect { } if (sa.hasParam("RandomKeyword")) { final String num = sa.hasParam("RandomKWNum") ? sa.getParam("RandomKWNum") : "1"; - final int numkw = AbilityUtils.calculateAmount(sa.getSourceCard(), num, sa); + final int numkw = AbilityUtils.calculateAmount(host, num, sa); List choice = new ArrayList(); List total = new ArrayList(keywords); if (sa.hasParam("NoRepetition")) { @@ -227,7 +228,7 @@ public class PumpEffect extends SpellAbilityEffect { } keywords = choice; } - + if (sa.hasParam("Optional")) { final String targets = Lang.joinHomogenous(tgtCards); final String message = sa.hasParam("OptionQuestion") ? sa.getParam("OptionQuestion").replace("TARGETS", targets) : "Apply pump to " + targets + "?"; @@ -241,9 +242,9 @@ public class PumpEffect extends SpellAbilityEffect { } if (pumpRemembered != null) { - for (final Object o : AbilityUtils.getDefinedObjects(sa.getSourceCard(), pumpRemembered, sa)) { - if (!sa.getSourceCard().getRemembered().contains(o)) { - sa.getSourceCard().addRemembered(o); + for (final Object o : AbilityUtils.getDefinedObjects(host, pumpRemembered, sa)) { + if (!host.getRemembered().contains(o)) { + host.addRemembered(o); } } } @@ -253,9 +254,9 @@ public class PumpEffect extends SpellAbilityEffect { } if (pumpForget != null) { - for (final Object o : AbilityUtils.getDefinedObjects(sa.getSourceCard(), pumpForget, sa)) { - if (sa.getSourceCard().getRemembered().contains(o)) { - sa.getSourceCard().removeRemembered(o); + for (final Object o : AbilityUtils.getDefinedObjects(host, pumpForget, sa)) { + if (host.getRemembered().contains(o)) { + host.removeRemembered(o); } } } @@ -264,23 +265,23 @@ public class PumpEffect extends SpellAbilityEffect { } if (pumpImprint != null) { - for (final Card c : AbilityUtils.getDefinedCards(sa.getSourceCard(), pumpImprint, sa)) { - if (!sa.getSourceCard().getImprinted().contains(c)) { - sa.getSourceCard().addImprinted(c); + for (final Card c : AbilityUtils.getDefinedCards(host, pumpImprint, sa)) { + if (!host.getImprinted().contains(c)) { + host.addImprinted(c); } } } - + if (sa.hasParam("ForgetImprinted")) { - for (final Card c : AbilityUtils.getDefinedCards(sa.getSourceCard(), sa.getParam("ForgetImprinted"), sa)) { - if (sa.getSourceCard().getImprinted().contains(c)) { - sa.getSourceCard().removeImprinted(c); + for (final Card c : AbilityUtils.getDefinedCards(host, sa.getParam("ForgetImprinted"), sa)) { + if (host.getImprinted().contains(c)) { + host.removeImprinted(c); } } } - + if (sa.hasParam("Radiance")) { - for (final Card c : CardUtil.getRadiance(sa.getSourceCard(), tgtCards.get(0), sa.getParam("ValidTgts") + for (final Card c : CardUtil.getRadiance(host, tgtCards.get(0), sa.getParam("ValidTgts") .split(","))) { untargetedCards.add(c); } diff --git a/src/main/java/forge/game/ai/AiController.java b/src/main/java/forge/game/ai/AiController.java index cab67024740..ccc6e7991c3 100644 --- a/src/main/java/forge/game/ai/AiController.java +++ b/src/main/java/forge/game/ai/AiController.java @@ -900,6 +900,9 @@ public class AiController { return min; } } + if ("Min".equals(sa.getParam("AILogic"))) { + return min; + } return max; } } diff --git a/src/main/java/forge/game/phase/Upkeep.java b/src/main/java/forge/game/phase/Upkeep.java index c5b0d748e5c..359f7faf612 100644 --- a/src/main/java/forge/game/phase/Upkeep.java +++ b/src/main/java/forge/game/phase/Upkeep.java @@ -166,9 +166,10 @@ public class Upkeep extends Phase { if (c.hasStartOfKeyword("(Echo unpaid)")) { final StringBuilder sb = new StringBuilder(); sb.append("Echo for ").append(c).append("\n"); - + String ref = "X".equals(c.getEchoCost()) ? " | References$ X" : ""; String effect = "AB$ Sacrifice | Cost$ 0 | SacValid$ Self | " - + "UnlessPayer$ You | UnlessCost$ " + c.getEchoCost(); + + "UnlessPayer$ You | UnlessCost$ " + c.getEchoCost() + + ref; SpellAbility sacAbility = AbilityFactory.getAbility(effect, c); sacAbility.setTrigger(true);