diff --git a/forge-game/src/main/java/forge/game/GameActionUtil.java b/forge-game/src/main/java/forge/game/GameActionUtil.java index 5eb1118cb08..6830d9b4fc9 100644 --- a/forge-game/src/main/java/forge/game/GameActionUtil.java +++ b/forge-game/src/main/java/forge/game/GameActionUtil.java @@ -544,6 +544,9 @@ public final class GameActionUtil { if (sa.hasParam("ReduceCost")) { result.putParam("ReduceCost", sa.getParam("ReduceCost")); } + if (sa.hasParam("RaiseCost")) { + result.putParam("RaiseCost", sa.getParam("RaiseCost")); + } for (OptionalCostValue v : list) { result.getPayCosts().add(v.getCost()); result.addOptionalCost(v.getType()); diff --git a/forge-game/src/main/java/forge/game/ability/effects/PlayEffect.java b/forge-game/src/main/java/forge/game/ability/effects/PlayEffect.java index 36a6c6564c8..138c30fa7e9 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/PlayEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/PlayEffect.java @@ -396,6 +396,10 @@ public class PlayEffect extends SpellAbilityEffect { tgtSA.setSVar(reduce, sa.getSVar(reduce)); } } + if (sa.hasParam("PlayRaiseCost")) { + String raise = sa.getParam("PlayRaiseCost"); + tgtSA.putParam("RaiseCost", raise); + } if (sa.hasParam("Madness")) { tgtSA.setAlternativeCost(AlternativeCost.Madness); @@ -509,7 +513,7 @@ public class PlayEffect extends SpellAbilityEffect { final Card hostCard = sa.getHostCard(); final Game game = hostCard.getGame(); final Player controller = sa.getActivatingPlayer(); - final String name = hostCard.getName() + "'s Effect"; + final String name = hostCard + "'s Effect"; final String image = hostCard.getImageKey(); final Card eff = createEffect(sa, controller, name, image); diff --git a/forge-game/src/main/java/forge/game/cost/CostAdjustment.java b/forge-game/src/main/java/forge/game/cost/CostAdjustment.java index 6493c8138fd..69e621f6d4e 100644 --- a/forge-game/src/main/java/forge/game/cost/CostAdjustment.java +++ b/forge-game/src/main/java/forge/game/cost/CostAdjustment.java @@ -81,8 +81,14 @@ public class CostAdjustment { } } if (sa.hasParam("RaiseCost")) { - int n = AbilityUtils.calculateAmount(host, sa.getParam("RaiseCost"), sa); - result.add(new Cost(ManaCost.get(n), false)); + String raise = sa.getParam("RaiseCost"); + ManaCost mc; + if (StringUtils.isNumeric(raise)) { + mc = ManaCost.get(AbilityUtils.calculateAmount(host, raise, sa)); + } else { + mc = new ManaCost(new ManaCostParser(raise)); + } + result.add(new Cost(mc, false)); } // Raise cost diff --git a/forge-gui/res/cardsfolder/upcoming/ogre_battlecaster.txt b/forge-gui/res/cardsfolder/upcoming/ogre_battlecaster.txt new file mode 100644 index 00000000000..22ebba8e926 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/ogre_battlecaster.txt @@ -0,0 +1,16 @@ +Name:Ogre Battlecaster +ManaCost:2 R +Types:Creature Ogre Shaman +PT:3/3 +K:First Strike +T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigDT | TriggerDescription$ Whenever CARDNAME attacks, you may cast target instant or sorcery card from your graveyard by paying {R}{R} in addition to its other costs. If that spell would be put into a graveyard, exile it instead. When you cast that spell, CARDNAME gets +X/+0 until end of turn, where X is that spell's mana value. +SVar:TrigDT:DB$ DelayedTrigger | ValidTgts$ Instant.YouOwn,Sorcery.YouOwn | TgtZone$ Graveyard | TgtPrompt$ Select target instant or sorcery card | Mode$ SpellCast | ValidCard$ Card.IsTriggerRemembered | Execute$ TrigPump | RememberObjects$ Targeted | SubAbility$ DBPlay | TriggerDescription$ When you cast that spell, CARDNAME gets +X/+0 until end of turn, where X is that spell's mana value. +SVar:DBPlay:DB$ Play | Defined$ Targeted | ValidSA$ Spell | ReplaceGraveyard$ Exile | PlayRaiseCost$ R R | Optional$ True | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearTriggered$ True +SVar:TrigPump:DB$ Pump | Defined$ Self | NumAtt$ +X +SVar:X:TriggeredStackInstance$CardManaCostLKI +AI:RemoveDeck:All +SVar:HasAttackEffect:TRUE +DeckHints:Type$Instant|Sorcery +DeckHas:Ability$Graveyard +Oracle:First strike\nWhenever Ogre Battlecaster attacks, you may cast target instant or sorcery card from your graveyard by paying {R}{R} in addition to its other costs. If that spell would be put into a graveyard, exile it instead. When you cast that spell, Ogre Battlecaster gets +X/+0 until end of turn, where X is that spell's mana value.