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 562d76bb32a..cd9817f750f 100644 --- a/forge-game/src/main/java/forge/game/cost/CostAdjustment.java +++ b/forge-game/src/main/java/forge/game/cost/CostAdjustment.java @@ -223,7 +223,15 @@ public class CostAdjustment { // Reduce cost int sumGeneric = 0; if (sa.hasParam("ReduceCost")) { - sumGeneric += AbilityUtils.calculateAmount(originalCard, sa.getParam("ReduceCost"), sa); + String cst = sa.getParam("ReduceCost"); + String amt = sa.getParamOrDefault("ReduceAmount", cst); + int num = AbilityUtils.calculateAmount(originalCard, amt, sa); + + if (sa.hasParam("ReduceAmount") && num > 0) { + cost.subtractManaCost(new ManaCost(new ManaCostParser(Strings.repeat(cst + " ", num)))); + } else { + sumGeneric += num; + } } while (!reduceAbilities.isEmpty()) { diff --git a/forge-gui/res/cardsfolder/upcoming/eviscerators_insight.txt b/forge-gui/res/cardsfolder/upcoming/eviscerators_insight.txt new file mode 100644 index 00000000000..2651c2833d3 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/eviscerators_insight.txt @@ -0,0 +1,8 @@ +Name:Eviscerator's Insight +ManaCost:1 B +Types:Instant +A:SP$ Draw | Cost$ 1 B Sac<1/Artifact;Creature/artifact or creature> | NumCards$ 2 | SpellDescription$ Draw two cards. +K:Flashback:4 B +DeckHas:Ability$Sacrifice|Graveyard +DeckHints:Type$Artifact & Ability$Token +Oracle:As an additional cost to cast this spell, sacrifice an artifact or creature.\nDraw two cards.\nFlashback {4}{B} (You may cast this card from your graveyard for its flashback cost and any additional costs. Then exile it.) diff --git a/forge-gui/res/cardsfolder/upcoming/expel_the_unworthy.txt b/forge-gui/res/cardsfolder/upcoming/expel_the_unworthy.txt new file mode 100644 index 00000000000..d00ca4c3ce2 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/expel_the_unworthy.txt @@ -0,0 +1,11 @@ +Name:Expel the Unworthy +ManaCost:1 W +Types:Sorcery +K:Kicker:2 W +A:SP$ ChangeZone | Origin$ Battlefield | Destination$ Exile | TgtPrompt$ Select target creature with mana value 3 or less | ValidTgts$ Creature.cmcLE3 | TargetMin$ X | TargetMax$ X | SubAbility$ DBChangeZone | StackDescription$ None | SpellDescription$ Choose target creature with mana value 3 or less. +SVar:DBChangeZone:DB$ ChangeZone | TargetMin$ Y | TargetMax$ Y | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Creature | Condition$ Kicked | SubAbility$ DBGainLife | StackDescription$ Exile {c:Targeted}, | SpellDescription$ If this spell was kicked, instead choose target creature. Exile the chosen creature, +SVar:DBGainLife:DB$ GainLife | Defined$ TargetedController | LifeAmount$ Z | StackDescription$ SpellDescription | SpellDescription$ then its controller gains life equal to its mana value. +SVar:X:Count$Kicked.0.1 +SVar:Y:Count$Kicked.1.0 +SVar:Z:Targeted$CardManaCost +Oracle:Kicker {2}{W} (You may pay an additional {2}{W} as you cast this spell.)\nChoose target creature with mana value 3 or less. If this spell was kicked, instead choose target creature. Exile the chosen creature, then its controller gains life equal to its mana value. diff --git a/forge-gui/res/cardsfolder/upcoming/fangs_of_kalonia.txt b/forge-gui/res/cardsfolder/upcoming/fangs_of_kalonia.txt new file mode 100644 index 00000000000..9955db63715 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/fangs_of_kalonia.txt @@ -0,0 +1,9 @@ +Name:Fangs of Kalonia +ManaCost:1 G +Types:Sorcery +A:SP$ PutCounter | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | RememberPut$ True | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBPump | SpellDescription$ Put a +1/+1 counter on target creature you control, then double the number of +1/+1 counters on each creature that had a +1/+1 counter put on it this way. +SVar:DBPump:DB$ MultiplyCounter | Defined$ Remembered | CounterType$ P1P1 | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +K:Overload:4 G G +DeckHas:Ability$Counters +Oracle:Put a +1/+1 counter on target creature you control, then double the number of +1/+1 counters on each creature that had a +1/+1 counter put on it this way.\nOverload {4}{G}{G} (You may cast this spell for its overload cost. If you do, change "target" in its text to "each.") diff --git a/forge-gui/res/cardsfolder/upcoming/glimpse_the_impossible.txt b/forge-gui/res/cardsfolder/upcoming/glimpse_the_impossible.txt new file mode 100644 index 00000000000..57f670350d3 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/glimpse_the_impossible.txt @@ -0,0 +1,13 @@ +Name:Glimpse the Impossible +ManaCost:2 R +Types:Sorcery +A:SP$ Dig | Defined$ You | DigNum$ 3 | ChangeNum$ All | DestinationZone$ Exile | RememberChanged$ True | SubAbility$ DBEffect | SpellDescription$ Exile the top three cards of your library. You may play those cards this turn. At the beginning of the next end step, if any of those cards remain exiled, put them into your graveyard, then create a 0/1 colorless Eldrazi Spawn creature token for each card put into your graveyard this way. Those tokens have "Sacrifice this creature: Add {C}." +SVar:DBEffect:DB$ Effect | RememberObjects$ RememberedCard | StaticAbilities$ STPlay | SubAbility$ DBDelayTrig | ForgetOnMoved$ Exile +SVar:STPlay:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ You may play those cards this turn. +SVar:DBDelayTrig:DB$ DelayedTrigger | Mode$ Phase | RememberObjects$ Remembered | PresentZone$ Exile | IsPresent$ Card.IsTriggerRemembered | Phase$ End Of Turn | Execute$ TrigChangeAll | SubAbility$ DBCleanup | TriggerDescription$ At the beginning of the next end step, if any of those cards remain exiled, put them into your graveyard, then create a 0/1 colorless Eldrazi Spawn creature token for each card put into your graveyard this way. Those tokens have "Sacrifice this creature: Add {C}." +SVar:TrigChangeAll:DB$ ChangeZone | Defined$ DelayTriggerRememberedLKI | Origin$ Exile | Destination$ Graveyard | RememberChanged$ True | ForgetOtherRemembered$ True | SubAbility$ DBToken +SVar:DBToken:DB$ Token | TokenAmount$ X | TokenScript$ c_0_1_eldrazi_spawn_sac | TokenOwner$ You | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +DeckHas:Ability$Token & Type$Eldrazi|Spawn +SVar:X:Remembered$Amount +Oracle:Exile the top three cards of your library. You may play those cards this turn. \nAt the beginning of the next end step, if any of those cards remain exiled, put them into your graveyard, then create a 0/1 colorless Eldrazi Spawn creature token for each card put into your graveyard this way. Those tokens have "Sacrifice this creature: Add {C}." diff --git a/forge-gui/res/cardsfolder/upcoming/invert_polarity.txt b/forge-gui/res/cardsfolder/upcoming/invert_polarity.txt new file mode 100644 index 00000000000..947068daf00 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/invert_polarity.txt @@ -0,0 +1,8 @@ +Name:Invert Polarity +ManaCost:U U R +Types:Instant +A:SP$ FlipACoin | TargetType$ Spell | TgtZone$ Stack | WinSubAbility$ GainControl | LoseSubAbility$ CounterIt | ValidTgts$ Card | StackDescription$ SpellDescription | SpellDescription$ Choose target spell, then flip a coin. If you win the flip, gain control of that spell and you may choose new targets for it. If you lose the flip, counter that spell. +SVar:GainControl:DB$ ControlSpell | Defined$ Targeted | Mode$ Gain | SubAbility$ DBChooseTargets +SVar:DBChooseTargets:DB$ ChangeTargets | Defined$ Targeted | Optional$ True +SVar:CounterIt:DB$ Counter | Defined$ Targeted +Oracle:Choose target spell, then flip a coin. If you win the flip, gain control of that spell and you may choose new targets for it. If you lose the flip, counter that spell. diff --git a/forge-gui/res/cardsfolder/upcoming/jolted_awake.txt b/forge-gui/res/cardsfolder/upcoming/jolted_awake.txt new file mode 100644 index 00000000000..b9d10f8931c --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/jolted_awake.txt @@ -0,0 +1,9 @@ +Name:Jolted Awake +ManaCost:W +Types:Sorcery +A:SP$ PutCounter | Defined$ You | CounterType$ ENERGY | CounterNum$ 2 | ValidTgts$ Artifact.YouOwn,Creature.YouOwn | TgtPrompt$ Select up to one target artifact or creature from your graveyard | TargetMin$ 0 | TargetMax$ 1 | TgtZone$ Graveyard | SubAbility$ DBChange | SpellDescription$ Choose up to one target artifact or creature card in your graveyard. You get {E}{E} (two energy counters). Then you may pay an amount of {E} equal to that card's mana value. If you do, return it from your graveyard to the battlefield. +SVar:DBChange:DB$ ChangeZone | Defined$ Targeted | Origin$ Graveyard | Destination$ Battlefield | UnlessCost$ PayEnergy | UnlessPayer$ You | UnlessSwitched$ True +SVar:X:Targeted$CardManaCost +K:Cycling:2 +DeckHas:Ability$Discard|Graveyard +Oracle:Choose up to one target artifact or creature card in your graveyard. You get {E}{E} (two energy counters). Then you may pay an amount of {E} equal to that card's mana value. If you do, return it from your graveyard to the battlefield.\nCycling {2} ({2}, Discard this card: Draw a card.) diff --git a/forge-gui/res/cardsfolder/upcoming/kami_of_jealous_thirst.txt b/forge-gui/res/cardsfolder/upcoming/kami_of_jealous_thirst.txt new file mode 100644 index 00000000000..4b0b4b57f09 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/kami_of_jealous_thirst.txt @@ -0,0 +1,11 @@ +Name:Kami of Jealous Thirst +ManaCost:2 B +Types:Creature Spirit +PT:1/3 +K:Deathtouch +A:AB$ LoseLife | Cost$ 4 B | LifeAmount$ 2 | Defined$ Opponent | ReduceCost$ 4 B | ReduceAmount$ X | ActivationLimit$ 1 | SubAbility$ DBGainLife | SpellDescription$ Each opponent loses 2 life and you gain 2 life. This ability costs {4}{B} less to activate if you've drawn three or more cards this turn. Activate only once each turn. +SVar:DBGainLife:DB$ GainLife | LifeAmount$ 2 +SVar:X:Count$Compare Y GE3.1.0 +SVar:Y:Count$YouDrewThisTurn +DeckHas:Ability$LifeGain +Oracle:Deathtouch\n{4}{B}: Each opponent loses 2 life and you gain 2 life. This ability costs {4}{B} less to activate if you've drawn three or more cards this turn. Activate only once each turn. diff --git a/forge-gui/res/cardsfolder/upcoming/lethal_throwdown.txt b/forge-gui/res/cardsfolder/upcoming/lethal_throwdown.txt new file mode 100644 index 00000000000..b3ea017ec8c --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/lethal_throwdown.txt @@ -0,0 +1,7 @@ +Name:Lethal Throwdown +ManaCost:B +Types:Sorcery +A:SP$ Destroy | Cost$ B Sac<1/Creature/creature or sacrifice a modified creature> | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Select target creature or planeswalker | SubAbility$ DBDraw | SpellDescription$ Destroy target creature or planeswalker. +SVar:DBDraw:DB$ Draw | StackDescription$ SpellDescription | ConditionDefined$ Sacrificed | ConditionPresent$ Card.modified | SpellDescription$ If the modified creature was sacrificed, draw a card. (Equipment, Auras you control, and counters are modifications.) +DeckHas:Ability$Sacrifice +Oracle:As an additional cost to cast this spell, sacrifice a creature or sacrifice a modified creature. (Equipment, Auras you control, and counters are modifications.)\nDestroy target creature or planeswalker. If the modified creature was sacrificed, draw a card. diff --git a/forge-gui/res/cardsfolder/upcoming/party_thrasher.txt b/forge-gui/res/cardsfolder/upcoming/party_thrasher.txt new file mode 100644 index 00000000000..0a9e104ec50 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/party_thrasher.txt @@ -0,0 +1,12 @@ +Name:Party Thrasher +ManaCost:1 R +Types:Creature Lizard Wizard +PT:1/4 +S:Mode$ Continuous | Affected$ Card.YouCtrl+nonCreature+wasCastFromExile | AffectedZone$ Stack | AddKeyword$ Convoke | Description$ Noncreature spells you cast from exile have convoke. (Each creature you tap while casting a noncreature spell from exile pays for {1} or one mana of that creature's color.) +T:Mode$ Phase | Phase$ Main1 | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigExile | TriggerDescription$ At the beginning of your precombat main phase, you may discard a card. If you do, exile the top two cards of your library, then choose one of them. You may play that card this turn. +SVar:TrigExile:AB$ Dig | Cost$ Discard<1/Card> | DigNum$ 2 | ChangeNum$ All | DestinationZone$ Exile | RememberChanged$ True | SubAbility$ DBChoose +SVar:DBChoose:DB$ ChooseCard | Amount$ 1 | Mandatory$ True | Choices$ Card.IsRemembered | ChoiceZone$ Exile | ChoiceTitle$ Choose one of the exiled cards | SubAbility$ DBPlayEffect +SVar:DBPlayEffect:DB$ Effect | StaticAbilities$ STPlay | ExileOnMoved$ Exile | SubAbility$ DBClearChosen +SVar:STPlay:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.ChosenCard | AffectedZone$ Exile | Description$ You may play the chosen card this turn. +SVar:DBClearChosen:DB$ Cleanup | ClearChosenCard$ True | ClearRemembered$ True +Oracle:Noncreature spells you cast from exile have convoke. (Each creature you tap while casting a noncreature spell from exile pays for {1} or one mana of that creature's color.)\nAt the beginning of your precombat main phase, you may discard a card. If you do, exile the top two cards of your library, then choose one of them. You may play that card this turn.