diff --git a/forge-game/src/main/java/forge/game/ability/effects/DamageAllEffect.java b/forge-game/src/main/java/forge/game/ability/effects/DamageAllEffect.java index 390918c079b..c17351cdcb4 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/DamageAllEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/DamageAllEffect.java @@ -23,7 +23,8 @@ public class DamageAllEffect extends DamageBaseEffect { protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - final String desc = sa.getParamOrDefault("ValidDescription", ""); + final String desc = sa.getParamOrDefault("ValidDescription", + sa.getParamOrDefault("ValidCards", "something")); final String damage = sa.getParam("NumDmg"); final int dmg = AbilityUtils.calculateAmount(sa.getHostCard(), damage, sa); @@ -39,7 +40,7 @@ public class DamageAllEffect extends DamageBaseEffect { sb.append("Deals"); } - sb.append(" ").append(dmg).append(" damage to ").append(desc); + sb.append(" ").append(dmg).append(" damage to ").append(desc).append(desc.endsWith(".") ? "" : "."); return sb.toString(); } diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index b58cf1d741c..c8da2f8b259 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -5412,6 +5412,10 @@ public class Card extends GameEntity implements Comparable, IHasSVars { if (!isEmblem()) { return testFailed; } + } else if (incR[0].equals("Boon")) { + if (!isBoon()) { + return testFailed; + } } else if (incR[0].equals("card") || incR[0].equals("Card")) { if (isImmutable()) { return testFailed; diff --git a/forge-gui/res/cardsfolder/k/karlach_raging_tiefling.txt b/forge-gui/res/cardsfolder/k/karlach_raging_tiefling.txt index 3124af2e097..4ed1ae150d7 100644 --- a/forge-gui/res/cardsfolder/k/karlach_raging_tiefling.txt +++ b/forge-gui/res/cardsfolder/k/karlach_raging_tiefling.txt @@ -2,7 +2,7 @@ Name:Karlach, Raging Tiefling ManaCost:1 R Types:Legendary Creature Tiefling Barbarian PT:2/2 -K:First strike +K:First Strike K:Specialize:6:Rage Beyond Death:You may also activate this ability if CARDNAME is in your graveyard.:AdditionalActivationZone$ Graveyard AlternateMode:Specialize DeckHas:Ability$Graveyard @@ -14,7 +14,7 @@ Name:Karlach, Tiefling Zealot ManaCost:1 R W Types:Legendary Creature Tiefling Barbarian PT:4/4 -K:First strike +K:First Strike K:Haste T:Mode$ Specializes | ValidCard$ Card.Self | TriggerZones$ Graveyard | Execute$ TrigReturn | TriggerDescription$ When this card specializes from your graveyard, return it from your graveyard to the battlefield. It perpetually gains "This creature can't block." SVar:TrigReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Defined$ TriggeredCard | SubAbility$ DBEffect @@ -32,7 +32,7 @@ Name:Karlach, Tiefling Spellrager ManaCost:1 U R Types:Legendary Creature Tiefling Barbarian PT:4/4 -K:First strike +K:First Strike K:Haste T:Mode$ Specializes | ValidCard$ Card.Self | TriggerZones$ Graveyard | Execute$ TrigReturn | TriggerDescription$ When this card specializes from your graveyard, return it from your graveyard to the battlefield. It perpetually gains "This creature can't block." SVar:TrigReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Defined$ TriggeredCard | SubAbility$ DBEffect @@ -52,7 +52,7 @@ Name:Karlach, Tiefling Punisher ManaCost:1 B R Types:Legendary Creature Tiefling Barbarian PT:4/4 -K:First strike +K:First Strike K:Haste T:Mode$ Specializes | ValidCard$ Card.Self | TriggerZones$ Graveyard | Execute$ TrigReturn | TriggerDescription$ When this card specializes from your graveyard, return it from your graveyard to the battlefield. It perpetually gains "This creature can't block." SVar:TrigReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Defined$ TriggeredCard | SubAbility$ DBEffect @@ -70,7 +70,7 @@ Name:Karlach, Tiefling Berserker ManaCost:1 R R Types:Legendary Creature Tiefling Barbarian PT:4/4 -K:First strike +K:First Strike K:Haste T:Mode$ Specializes | ValidCard$ Card.Self | TriggerZones$ Graveyard | Execute$ TrigReturn | TriggerDescription$ When this card specializes from your graveyard, return it from your graveyard to the battlefield. It perpetually gains "This creature can't block." SVar:TrigReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Defined$ TriggeredCard | SubAbility$ DBEffect @@ -86,7 +86,7 @@ Name:Karlach, Tiefling Guardian ManaCost:1 R G Types:Legendary Creature Tiefling Barbarian PT:4/4 -K:First strike +K:First Strike K:Haste T:Mode$ Specializes | ValidCard$ Card.Self | TriggerZones$ Graveyard | Execute$ TrigReturn | TriggerDescription$ When this card specializes from your graveyard, return it from your graveyard to the battlefield. It perpetually gains "This creature can't block." SVar:TrigReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Defined$ TriggeredCard | SubAbility$ DBEffect diff --git a/forge-gui/res/cardsfolder/n/nahiri_heir_of_the_ancients.txt b/forge-gui/res/cardsfolder/n/nahiri_heir_of_the_ancients.txt index 5dec8533b3c..3274995bc88 100644 --- a/forge-gui/res/cardsfolder/n/nahiri_heir_of_the_ancients.txt +++ b/forge-gui/res/cardsfolder/n/nahiri_heir_of_the_ancients.txt @@ -2,10 +2,9 @@ Name:Nahiri, Heir of the Ancients ManaCost:2 R W Types:Legendary Planeswalker Nahiri Loyalty:4 -A:AB$ Token | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | TokenAmount$ 1 | TokenScript$ w_1_1_kor_warrior | TokenOwner$ You | RememberTokens$ True | SubAbility$ DBChooseToken | SpellDescription$ Create a 1/1 white Kor Warrior creature token. You may attach an Equipment you control to it. -SVar:DBChooseToken:DB$ ChooseCard | DefinedCards$ Remembered | Mandatory$ True | ChoiceTitle$ Choose a token | SubAbility$ DBAttach | StackDescription$ None -SVar:DBAttach:DB$ Attach | Optional$ True | Choices$ Equipment.YouCtrl | ChoiceTitle$ Choose an Equipment you control | Defined$ ChosenCard | SubAbility$ DBCleanup | StackDescription$ None -SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearChosenCard$ True +A:AB$ Token | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | TokenScript$ w_1_1_kor_soldier | RememberTokens$ True | SubAbility$ DBAttach | SpellDescription$ Create a 1/1 white Kor Soldier creature token. You may attach an Equipment you control to it. +SVar:DBAttach:DB$ Attach | Optional$ True | Choices$ Equipment.YouCtrl | ChoiceTitle$ Choose an Equipment you control | Defined$ Remembered | SubAbility$ DBCleanup | StackDescription$ None +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True A:AB$ Dig | Cost$ SubCounter<2/LOYALTY> | Planeswalker$ True | DigNum$ 6 | ChangeNum$ 1 | Optional$ True | ForceRevealToController$ True | ChangeValid$ Card.Warrior,Card.Equipment | RestRandomOrder$ True | SpellDescription$ Look at the top six cards of your library. You may reveal a Warrior or Equipment card from among them and put it into your hand. Put the rest on the bottom of your library in a random order. A:AB$ DealDamage | Cost$ SubCounter<3/LOYALTY> | Planeswalker$ True | Ultimate$ True | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Select target creature or planeswalker | NumDmg$ X | SpellDescription$ CARDNAME deals damage to target creature or planeswalker equal to twice the number of Equipment you control. SVar:X:Count$Valid Equipment.YouCtrl/Twice diff --git a/forge-gui/res/cardsfolder/s/scouring_sands.txt b/forge-gui/res/cardsfolder/s/scouring_sands.txt index 4584dbdee06..4b4d9b185f7 100644 --- a/forge-gui/res/cardsfolder/s/scouring_sands.txt +++ b/forge-gui/res/cardsfolder/s/scouring_sands.txt @@ -1,6 +1,6 @@ Name:Scouring Sands ManaCost:1 R Types:Sorcery -A:SP$ DamageAll | Cost$ 1 R | ValidCards$ Creature.OppCtrl | NumDmg$ 1 | SubAbility$ DBScry | SpellDescription$ CARDNAME deals 1 damage to each creature your opponents control. Scry 1. -SVar:DBScry:DB$ Scry | ScryNum$ 1 +A:SP$ DamageAll | ValidCards$ Creature.OppCtrl | ValidDescription$ each creature your opponents control | NumDmg$ 1 | SubAbility$ DBScry | SpellDescription$ CARDNAME deals 1 damage to each creature your opponents control. +SVar:DBScry:DB$ Scry | ScryNum$ 1 | SpellDescription$ Scry 1. Oracle:Scouring Sands deals 1 damage to each creature your opponents control. Scry 1. (Look at the top card of your library. You may put that card on the bottom of your library.) diff --git a/forge-gui/res/cardsfolder/upcoming/cerise_slayer_of_fear.txt b/forge-gui/res/cardsfolder/upcoming/cerise_slayer_of_fear.txt new file mode 100644 index 00000000000..03a85dc1199 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/cerise_slayer_of_fear.txt @@ -0,0 +1,13 @@ +Name:Cerise, Slayer of Fear +ManaCost:3 W W +Types:Legendary Creature Human Cleric Knight +PT:5/5 +K:First Strike +K:Lifelink +T:Mode$ Phase | Phase$ Main2 | ValidPlayer$ You | CheckSVar$ X | TriggerZones$ Battlefield | Execute$ TrigSeek | TriggerDescription$ At the beginning of your postcombat main phase, if you gained life this turn, seek a card with the highest mana value among cards in your library with mana value less than or equal to the amount of life you gained this turn. +SVar:TrigSeek:DB$ Seek | Type$ Card.cmcEQY +SVar:X:Count$LifeYouGainedThisTurn +SVar:Y:Count$ValidLibrary Card.YouOwn+cmcLEX$GreatestCMC +DeckHas:Ability$LifeGain +DeckHints:Ability$LifeGain +Oracle:First strike, lifelink\nAt the beginning of your postcombat main phase, if you gained life this turn, seek a card with the highest mana value among cards in your library with mana value less than or equal to the amount of life you gained this turn. diff --git a/forge-gui/res/cardsfolder/upcoming/dunbarrow_revivalist.txt b/forge-gui/res/cardsfolder/upcoming/dunbarrow_revivalist.txt index e16e0a66a41..f60b14aeebf 100644 --- a/forge-gui/res/cardsfolder/upcoming/dunbarrow_revivalist.txt +++ b/forge-gui/res/cardsfolder/upcoming/dunbarrow_revivalist.txt @@ -5,7 +5,7 @@ PT:3/1 K:Bargain T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigBoon | TriggerDescription$ When CARDNAME enters the battlefield, you get a one-time boon with "When one or more creatures enter the battlefield under your control, create a Wicked Role token attached to one of them." Then if CARDNAME was bargained, return a creature card from your graveyard to your hand. SVar:TrigBoon:DB$ Effect | Boon$ True | Duration$ Permanent | Triggers$ ChangeZoneTrig | SubAbility$ DBBargained -SVar:ChangeZoneTrig:Mode$ ChangesZoneAll | ValidCards$ Creature.YouCtrl | Destination$ Battlefield | TriggerZones$ Command | OneOff$ True | Execute$ TrigChoose | TriggerDescription$ When one or more creatures enter the battlefield under your control, create a Wicked Role token attached to one of them +SVar:ChangeZoneTrig:Mode$ ChangesZoneAll | ValidCards$ Creature.YouCtrl | Destination$ Battlefield | TriggerZones$ Command | OneOff$ True | Execute$ TrigChoose | TriggerDescription$ When one or more creatures enter the battlefield under your control, create a Wicked Role token attached to one of them. SVar:TrigChoose:DB$ ChooseCard | Defined$ You | Choices$ Card.TriggeredCards | ChoiceTitle$ Choose one of the cards that entered the battlefield | Mandatory$ True | SubAbility$ DBToken SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ role_wicked | TokenOwner$ You | AttachedTo$ ChosenCard SVar:DBBargained:DB$ ChangeZone | Condition$ Bargain | Origin$ Graveyard | Destination$ Hand | Hidden$ True | ChangeType$ Creature.YouOwn | ChangeNum$ 1 diff --git a/forge-gui/res/cardsfolder/upcoming/underbridge_warlock.txt b/forge-gui/res/cardsfolder/upcoming/underbridge_warlock.txt new file mode 100644 index 00000000000..70749f14ba4 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/underbridge_warlock.txt @@ -0,0 +1,18 @@ +Name:Underbridge Warlock +ManaCost:3 B B +Types:Creature Ogre Warlock +PT:5/4 +K:Deathtouch +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigBoon | TriggerDescription$ When CARDNAME enters the battlefield, you get a one-time boon with "At the beginning of your end step, if three or more creatures died this turn, each opponent loses 5 life and you gain 5 life." +SVar:TrigBoon:DB$ Effect | Boon$ True | Duration$ Permanent | Triggers$ EndStepTrig +SVar:EndStepTrig:Mode$ Phase | Phase$ End of Turn | CheckSVar$ Morbid | SVarCompare$ GE3 | ValidPlayer$ You | TriggerZones$ Command | Execute$ TrigDrain | OneOff$ True | TriggerDescription$ At the beginning of your end step, if three or more creatures died this turn, each opponent loses 5 life and you gain 5 life. +SVar:TrigDrain:DB$ LoseLife | Defined$ Opponent | LifeAmount$ 5 | SubAbility$ DBGainLife +SVar:DBGainLife:DB$ GainLife | LifeAmount$ 5 +SVar:Morbid:Count$ThisTurnEntered_Graveyard_from_Battlefield_Creature +T:Mode$ Phase | Phase$ End of Turn | IsPresent$ Boon.YouOwn | PresentZone$ Command | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigMill | TriggerDescription$ At the beginning of your end step, if you have a boon, you mill three cards, draw a card, and lose 2 life. +SVar:TrigMill:DB$ Mill | NumCards$ 3 | SubAbility$ DBDraw +SVar:DBDraw:DB$ Draw | SubAbility$ DBLoseLife +SVar:DBLoseLife:DB$ LoseLife | LifeAmount$ 2 +DeckHas:Ability$LifeGain|Mill +DeckHints:Ability$Graveyard|Sacrifice|Token +Oracle:Deathtouch\nWhen Underbridge Warlock enters the battlefield, you get a one-time boon with "At the beginning of your end step, if three or more creatures died this turn, each opponent loses 5 life and you gain 5 life."\nAt the beginning of your end step, if you have a boon, you mill three cards, draw a card, and lose 2 life.