diff --git a/forge-game/src/main/java/forge/game/CardTraitBase.java b/forge-game/src/main/java/forge/game/CardTraitBase.java index f751b4b5620..f6dddb1f8f2 100644 --- a/forge-game/src/main/java/forge/game/CardTraitBase.java +++ b/forge-game/src/main/java/forge/game/CardTraitBase.java @@ -64,7 +64,7 @@ public abstract class CardTraitBase extends GameObject implements IHasCardView, * Keys that should not changed */ private static final ImmutableList noChangeKeys = ImmutableList.builder() - .add("TokenScript", "LegacyImage", "TokenImage", "NewName").build(); + .add("TokenScript", "LegacyImage", "TokenImage", "NewName", "ChooseFromList").build(); /** *

diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChooseCardNameEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChooseCardNameEffect.java index 114d16ace3f..895a0e066f4 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChooseCardNameEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChooseCardNameEffect.java @@ -1,6 +1,7 @@ package forge.game.ability.effects; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -54,6 +55,7 @@ public class ChooseCardNameEffect extends SpellAbilityEffect { } boolean randomChoice = sa.hasParam("AtRandom"); + boolean draft = sa.hasParam("Draft"); //for digital "draft from spellbook" mechanic boolean chooseFromDefined = sa.hasParam("ChooseFromDefinedCards"); boolean chooseFromList = sa.hasParam("ChooseFromList"); boolean chooseFromOneTimeList = sa.hasParam("ChooseFromOneTimeList"); @@ -61,6 +63,8 @@ public class ChooseCardNameEffect extends SpellAbilityEffect { if (!randomChoice) { if (sa.hasParam("SelectPrompt")) { message = sa.getParam("SelectPrompt"); + } else if (draft) { + message = Localizer.getInstance().getMessage("lblChooseCardDraft"); } else if (null == validDesc) { message = Localizer.getInstance().getMessage("lblChooseACardName"); } else { @@ -105,8 +109,16 @@ public class ChooseCardNameEffect extends SpellAbilityEffect { chosen = p.getController().chooseCardName(sa, faces, message); } else if (chooseFromList) { String [] names = sa.getParam("ChooseFromList").split(","); + if (sa.hasParam("Draft")) { + List options = Arrays.asList(names); + Collections.shuffle(options); + List draftChoices = options.subList(0,3); + names = draftChoices.toArray(new String[0]); + } List faces = new ArrayList<>(); for (String name : names) { + // Cardnames that include "," must use ";" instead in ChooseFromList$ (i.e. Tovolar; Dire Overlord) + name = name.replace(";", ","); faces.add(StaticData.instance().getCommonCards().getFaceByName(name)); } if (randomChoice) { @@ -142,8 +154,10 @@ public class ChooseCardNameEffect extends SpellAbilityEffect { host.setNamedCard(chosen); if (!randomChoice) { - p.getGame().getAction().notifyOfValue(sa, host, Localizer.getInstance().getMessage("lblPlayerPickedChosen", p.getName(), chosen), p); p.setNamedCard(chosen); + if (!draft) { //drafting is secret + p.getGame().getAction().notifyOfValue(sa, host, Localizer.getInstance().getMessage("lblPlayerPickedChosen", p.getName(), chosen), p); + } } if (sa.hasParam("NoteFor")) { p.addNoteForName(sa.getParam("NoteFor"), "Name:" + chosen); diff --git a/forge-game/src/main/java/forge/game/ability/effects/MakeCardEffect.java b/forge-game/src/main/java/forge/game/ability/effects/MakeCardEffect.java index d7f49216730..a29fe2bb548 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/MakeCardEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/MakeCardEffect.java @@ -12,34 +12,47 @@ import forge.game.zone.ZoneType; public class MakeCardEffect extends SpellAbilityEffect { @Override public void resolve(SpellAbility sa) { - final Player player = sa.getActivatingPlayer(); - final Game game = player.getGame(); + for (final Player player : getTargetPlayers(sa)) { + final Game game = player.getGame(); - String name = sa.getParamOrDefault("Name", sa.getHostCard().getName()); - if (name.equals("ChosenName")) { - name = sa.getHostCard().getChosenName(); - } - final ZoneType zone = ZoneType.smartValueOf(sa.getParamOrDefault("Zone", "Library")); - int amount = sa.hasParam("Amount") ? Integer.parseInt(sa.getParam("Amount")) : 1; + String name = sa.getParamOrDefault("Name", ""); + if (name.equals("ChosenName")) { + if (sa.getHostCard().hasChosenName()) { + name = sa.getHostCard().getChosenName(); + } else { + continue; + } - CardCollection cards = new CardCollection(); - - while (amount > 0) { - Card card = Card.fromPaperCard(StaticData.instance().getCommonCards().getUniqueByName(name), player); - if (!sa.hasParam("NotToken")) { card.setTokenCard(true); } - game.getAction().moveTo(ZoneType.None, card, sa); - cards.add(card); - amount--; - } - - for (final Card c : cards) { - game.getAction().moveTo(zone, c, sa); - if (sa.hasParam("RememberMade")) { - sa.getHostCard().addRemembered(c); } - } - if (zone.equals(ZoneType.Library)) { - player.shuffle(sa); + final ZoneType zone = ZoneType.smartValueOf(sa.getParamOrDefault("Zone", "Library")); + int amount = sa.hasParam("Amount") ? Integer.parseInt(sa.getParam("Amount")) : 1; + + CardCollection cards = new CardCollection(); + + if (!name.equals("")) { + while (amount > 0) { + Card card = Card.fromPaperCard(StaticData.instance().getCommonCards().getUniqueByName(name), player); + if (!sa.hasParam("NotToken")) { + card.setTokenCard(true); + } + game.getAction().moveTo(ZoneType.None, card, sa); + cards.add(card); + amount--; + } + + for (final Card c : cards) { + game.getAction().moveTo(zone, c, sa); + if (sa.hasParam("RememberMade")) { + sa.getHostCard().addRemembered(c); + } + if (sa.hasParam("ImprintMade")) { + sa.getHostCard().addImprintedCard(c); + } + } + if (zone.equals(ZoneType.Library)) { + player.shuffle(sa); + } + } } } } diff --git a/forge-game/src/main/java/forge/game/ability/effects/RevealEffect.java b/forge-game/src/main/java/forge/game/ability/effects/RevealEffect.java index f852c632f84..44129de47d0 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/RevealEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/RevealEffect.java @@ -58,6 +58,8 @@ public class RevealEffect extends SpellAbilityEffect { } else if (sa.hasParam("RevealDefined")) { revealed.addAll(AbilityUtils.getDefinedCards(host, sa.getParam("RevealDefined"), sa)); + } else if (sa.hasParam("RevealAllValid")) { + revealed.addAll(CardLists.getValidCards(cardsInHand, sa.getParam("RevealAllValid"), p, host, sa)); } else { CardCollection valid = new CardCollection(cardsInHand); diff --git a/forge-game/src/main/java/forge/game/ability/effects/RevealHandEffect.java b/forge-game/src/main/java/forge/game/ability/effects/RevealHandEffect.java index df7e6aad4e3..c240c54cf98 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/RevealHandEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/RevealHandEffect.java @@ -2,9 +2,9 @@ package forge.game.ability.effects; import java.util.List; +import forge.game.ability.AbilityUtils; import forge.game.ability.SpellAbilityEffect; -import forge.game.card.Card; -import forge.game.card.CardCollectionView; +import forge.game.card.*; import forge.game.player.Player; import forge.game.spellability.SpellAbility; import forge.game.spellability.TargetRestrictions; @@ -45,7 +45,10 @@ public class RevealHandEffect extends SpellAbilityEffect { if (optional && !p.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoYouWantRevealYourHand"))) { continue; } - final CardCollectionView hand = p.getCardsIn(ZoneType.Hand); + CardCollectionView hand = p.getCardsIn(ZoneType.Hand); + if (sa.hasParam("RevealType")) { + hand = CardLists.filter(hand, CardPredicates.isType(sa.getParam("RevealType"))); + } sa.getActivatingPlayer().getController().reveal(hand, ZoneType.Hand, p); if (sa.hasParam("RememberRevealed")) { for (final Card c : hand) { diff --git a/forge-gui/res/cardsfolder/upcoming/arms_scavenger.txt b/forge-gui/res/cardsfolder/upcoming/arms_scavenger.txt new file mode 100644 index 00000000000..5e8d46d00eb --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/arms_scavenger.txt @@ -0,0 +1,11 @@ +Name:Arms Scavenger +ManaCost:1 R +Types:Creature Human Warrior +PT:2/2 +T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigDraft | TriggerDescription$ At the beginning of your upkeep, draft a card from CARDNAME's spellbook, then exile it. Until the end of turn, you may play that card. +SVar:TrigDraft:DB$ NameCard | Draft$ True | Defined$ You | ChooseFromList$ Boots of Speed,Cliffhaven Kitesail,Colossus Hammer,Dueling Rapier,Spare Dagger,Tormentor's Helm,Goldvein Pick,Jousting Lance,Mask of Immolation,Mirror Shield,Relic Axe,Rogue's Gloves,Scavenged Blade,Shield of the Realm,Ceremonial Knife | SubAbility$ DBMakeCard +SVar:DBMakeCard:DB$ MakeCard | Name$ ChosenName | Zone$ Exile | RememberMade$ True | SubAbility$ DBEffect +SVar:DBEffect:DB$ Effect | RememberObjects$ RememberedCard | StaticAbilities$ Play | ExileOnMoved$ Exile | SubAbility$ DBCleanup +SVar:Play:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ Until the end of turn, you may play that card. +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearNamedCard$ True +Oracle:At the beginning of your upkeep, draft a card from Arms Scavenger's spellbook, then exile it. Until the end of turn, you may play that card. diff --git a/forge-gui/res/cardsfolder/upcoming/break_expectations.txt b/forge-gui/res/cardsfolder/upcoming/break_expectations.txt new file mode 100644 index 00000000000..ecc9bf5ef28 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/break_expectations.txt @@ -0,0 +1,10 @@ +Name:Break Expectations +ManaCost:B +Types:Sorcery +A:SP$ Reveal | ValidTgts$ Player | TgtPrompt$ Select target player | RevealAllValid$ Card.cmcGE2+TargetedPlayerCtrl | SubAbility$ DBExile | StackDescription$ SpellDescription | SpellDescription$ Target player reveals all cards with mana value 2 or greater in their hand. You choose a card from among those cards. Exile that card. If a card was exiled this way, that player drafts a card from CARDNAME's spellbook and reveals it. +SVar:DBExile:DB$ ChangeZone | DefinedPlayer$ Targeted | Chooser$ You | Origin$ Hand | Destination$ Exile | ChangeNum$ 1 | ChangeType$ Card.cmcGE2+TargetedPlayerCtrl | Mandatory$ True | AlreadyRevealed$ True | RememberChanged$ True | AILogic$ BestCard | SubAbility$ DBDraft | StackDescription$ None +SVar:DBDraft:DB$ NameCard | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ GE1 | Draft$ True | Defined$ Targeted | ChooseFromList$ Colossal Plow,Millstone,Whirlermaker,Magistrate's Scepter,Replicating Ring,Raiders' Karve,Weapon Rack,Relic Amulet,Orazca Relic,Fifty Feet of Rope,Pyre of Heroes,Treasure Chest,Leather Armor,Spiked Pit Trap,Gingerbrute | SubAbility$ DBMakeCard | StackDescription$ None +SVar:DBMakeCard:DB$ MakeCard | Defined$ Targeted | Name$ ChosenName | Zone$ Hand | ImprintMade$ True | SubAbility$ DBReveal +SVar:DBReveal:DB$ Reveal | Defined$ Targeted | RevealDefined$ Imprinted | SubAbility$ DBCleanup | StackDescription$ None +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True | ClearNamedCard$ True +Oracle:Target player reveals all cards with mana value 2 or greater in their hand. You choose a card from among those cards. Exile that card. If a card was exiled this way, that player drafts a card from Break Expectations's spellbook and reveals it. diff --git a/forge-gui/res/cardsfolder/upcoming/cursebound_witch.txt b/forge-gui/res/cardsfolder/upcoming/cursebound_witch.txt new file mode 100644 index 00000000000..b29d312128f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/cursebound_witch.txt @@ -0,0 +1,10 @@ +Name:Cursebound Witch +ManaCost:B +Types:Creature Human Warlock +PT:1/2 +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigDraft | TriggerDescription$ When CARDNAME dies, draft a card from CARDNAME's spellbook. +SVar:TrigDraft:DB$ NameCard | Draft$ True | Defined$ You | ChooseFromList$ Witch's Cauldron,Witch's Vengeance,Witch's Oven,Witch's Cottage,Witch's Familiar,Curse of Leeches,Cauldron Familiar,Black Cat,Sorcerer's Broom,Bloodhunter Bat,Unwilling Ingredient,Expanded Anatomy,Cruel Reality,Torment of Scarabs,Trespasser's Curse | SubAbility$ DBMakeCard +SVar:DBMakeCard:DB$ MakeCard | Name$ ChosenName | Zone$ Hand | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearNamedCard$ True +SVar:SacMe:2 +Oracle:When Cursebound Witch dies, draft a card from Cursebound Witch's spellbook. diff --git a/forge-gui/res/cardsfolder/upcoming/faithful_disciple.txt b/forge-gui/res/cardsfolder/upcoming/faithful_disciple.txt new file mode 100644 index 00000000000..e0168859b52 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/faithful_disciple.txt @@ -0,0 +1,11 @@ +Name:Faithful Disciple +ManaCost:1 W +Types:Creature Human Cleric +PT:2/2 +K:Vigilance +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigDraft | TriggerDescription$ When CARDNAME dies, draft a card from CARDNAME's spellbook. +SVar:TrigDraft:DB$ NameCard | Draft$ True | Defined$ You | ChooseFromList$ Anointed Procession,Cathars' Crusade,Authority of the Consuls,Sigil of the Empty Throne,All That Glitters,Banishing Light,Divine Visitation,Duelist's Heritage,Glorious Anthem,Gauntlets of Light,Teleportation Circle,Angelic Gift,Spectral Steel,Cleric Class,Angelic Exaltation | SubAbility$ DBMakeCard +SVar:DBMakeCard:DB$ MakeCard | Name$ ChosenName | Zone$ Hand | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearNamedCard$ True +SVar:SacMe:2 +Oracle:Vigilance\nWhen Faithful Disciple dies, draft a card from Faithful Disciple's spellbook. diff --git a/forge-gui/res/cardsfolder/upcoming/ishkanah_broodmother.txt b/forge-gui/res/cardsfolder/upcoming/ishkanah_broodmother.txt new file mode 100644 index 00000000000..ec9d3b3e41d --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/ishkanah_broodmother.txt @@ -0,0 +1,11 @@ +Name:Ishkanah, Broodmother +ManaCost:3 G +Types:Legendary Creature Spider +PT:3/5 +K:Reach +S:Mode$ Continuous | Affected$ Creature.Spider+Other+YouCtrl | AddPower$ 1 | AddToughness$ 2 | Description$ Other Spiders you control get +1/+2. +A:AB$ NameCard | Cost$ 1 BG ExileFromGrave<2/card> | Draft$ True | Defined$ You | ChooseFromList$ Twin-Silk Spider,Drider,Brood Weaver,Glowstone Recluse,Gnottvold Recluse,Hatchery Spider,Mammoth Spider,Netcaster Spider,Sentinel Spider,Snarespinner,Sporecap Spider,Spidery Grasp,Spider Spawning,Prey Upon,Arachnoform | SubAbility$ DBMakeCard | SpellDescription$ Draft a card from CARDNAME's spellbook. +SVar:DBMakeCard:DB$ MakeCard | Name$ ChosenName | Zone$ Hand | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearNamedCard$ True +DeckHints:Type$Spider +Oracle:Reach\nOther Spiders you control get +1/+2.\n{1}{B/G}, Exile two cards from your graveyard: Draft a card from Ishkanah, Broodmother's spellbook. diff --git a/forge-gui/res/cardsfolder/upcoming/ominous_traveler.txt b/forge-gui/res/cardsfolder/upcoming/ominous_traveler.txt new file mode 100644 index 00000000000..b551d1e5d7f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/ominous_traveler.txt @@ -0,0 +1,13 @@ +Name:Ominous Traveler +ManaCost:2 +Types:Creature Human +PT:1/1 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDraft | TriggerDescription$ When CARDNAME enters the battlefield, draft a card from CARDNAME's spellbook. That card perpetually gains "You may spend mana as though it were mana of any color to cast this spell" and "When you cast this spell, return a card named Ominous Traveler you control to its owner's hand." +SVar:TrigDraft:DB$ NameCard | Draft$ True | Defined$ You | ChooseFromList$ Dominating Vampire,Vampire Socialite,Stromkirk Bloodthief,Falkenrath Pit Fighter,Wolfkin Outcast,Howlpack Piper,Tovolar; Dire Overlord,Patrician Geist,Shipwreck Sifters,Steelclad Spirit,Heron-Blessed Geist,Archghoul of Thraben,Champion of the Perished,Headless Rider,Bladestitched Skaab | SubAbility$ DBMakeCard +SVar:DBMakeCard:DB$ MakeCard | Name$ ChosenName | Zone$ Hand | RememberMade$ True | SubAbility$ DBEffect +SVar:DBEffect:DB$ Effect | RememberObjects$ Remembered | Triggers$ CastTrigger | StaticAbilities$ SpendAnyMana | Duration$ Permanent | Name$ Ominous Traveler's Perpetual Effect | SubAbility$ DBCleanup +SVar:SpendAnyMana:Mode$ Continuous | Affected$ Card.IsRemembered | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | AddHiddenKeyword$ May spend mana as though it were mana of any color to cast CARDNAME | Description$ You may spend mana as though it were mana of any color to cast this spell. +SVar:CastTrigger:Mode$ SpellCast | ValidCard$ Card.IsRemembered | Execute$ TrigReturn | TriggerDescription$ When you cast this spell, return a card named Ominous Traveler you control to its owner's hand. +SVar:TrigReturn:DB$ ChangeZone | ChangeType$ Card.namedOminous Traveler+YouCtrl | ChangeNum$ 1 | Origin$ Battlefield | Destination$ Hand | Hidden$ True | Mandatory$ True +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearNamedCard$ True +Oracle:When Ominous Traveler enters the battlefield, draft a card from Ominous Traveler's spellbook. That card perpetually gains "You may spend mana as though it were mana of any color to cast this spell" and "When you cast this spell, return a card named Ominous Traveler you control to its owner's hand." diff --git a/forge-gui/res/cardsfolder/upcoming/slayers_bounty.txt b/forge-gui/res/cardsfolder/upcoming/slayers_bounty.txt new file mode 100644 index 00000000000..b42993bff2e --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/slayers_bounty.txt @@ -0,0 +1,13 @@ +Name:Slayer's Bounty +ManaCost:W +Types:Legendary Artifact Clue +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPeek | TriggerDescription$ When CARDNAME enters the battlefield, look at the creature cards in target opponent's hand. +SVar:TrigPeek:DB$ RevealHand | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | RevealType$ Creature +T:Mode$ Sacrificed | ValidCard$ Clue.YouCtrl | Execute$ TrigDraft | TriggerZones$ Battlefield | TriggerDescription$ Whenever you CARDNAME or another Clue, draft a card from CARDNAME's spellbook. +SVar:TrigDraft:DB$ NameCard | Draft$ True | Defined$ You | ChooseFromList$ Bounty Agent,Outflank,Bound in Gold,Bring to Trial,Glass Casket,Reprobation,Collar the Culprit,Compulsory Rest,Expel,Fairgrounds Warden,Iron Verdict,Luminous Bonds,Raise the Alarm,Seal Away,Summary Judgment | SubAbility$ DBMakeCard +SVar:DBMakeCard:DB$ MakeCard | Name$ ChosenName | Zone$ Hand | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearNamedCard$ True +A:AB$ Draw | Cost$ 2 Sac<1/CARDNAME> | NumCards$ 1 | SpellDescription$ Draw a card. +DeckHas:Ability$Sacrifice +DeckHints:Ability$Investigate & Type$Clue +Oracle:When Slayer's Bounty enters the battlefield, look at the creature cards in target opponent's hand.\nWhenever you sacrifice Slayer's Bounty or another Clue, draft a card from Slayer's Bounty's spellbook.\n{2}, Sacrifice Slayer's Bounty: Draw a card. diff --git a/forge-gui/res/cardsfolder/upcoming/tibalt_wicked_tormenter.txt b/forge-gui/res/cardsfolder/upcoming/tibalt_wicked_tormenter.txt new file mode 100644 index 00000000000..1850ccd3fc7 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/tibalt_wicked_tormenter.txt @@ -0,0 +1,16 @@ +Name:Tibalt, Wicked Tormenter +ManaCost:3 R R +Types:Legendary Planeswalker Tibalt +Loyalty:3 +A:AB$ Mana | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | Produced$ R | Amount$ 2 | SubAbility$ DBDraft | SpellDescription$ Add {R}{R}. +SVar:DBDraft:DB$ NameCard | Draft$ True | Defined$ You | ChooseFromList$ Chained Brute,Charmbreaker Devils,Festival Crasher,Forge Devil,Frenzied Devils,Havoc Jester,Hellrider,Hobblefiend,Pitchburn Devils,Sin Prodder,Spiteful Prankster,Tibalt's Rager,Torch Fiend,Brimstone Vandal,Devil's Play | SubAbility$ DBMakeCard | StackDescription$ SpellDescription | SpellDescription$ Draft a card from CARDNAME's spellbook, then exile it. +SVar:DBMakeCard:DB$ MakeCard | Name$ ChosenName | Zone$ Exile | RememberMade$ True | SubAbility$ DBEffect +SVar:DBEffect:DB$ Effect | RememberObjects$ RememberedCard | StaticAbilities$ Play | ExileOnMoved$ Exile | SubAbility$ DBCleanup | SpellDescription$ Until end of turn, you may cast that card. +SVar:Play:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ Until the end of turn, you may cast that card. +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearNamedCard$ True +A:AB$ DealDamage | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Select target creature or planeswalker | NumDmg$ 3 | UnlessCost$ DamageYou<3> | UnlessPayer$ TargetedController | UnlessResolveSubs$ WhenPaid | SubAbility$ DBDiscardDraw | StackDescription$ CARDNAME deals 3 damage to {c:Targeted} unless {p:TargetedController} has NICKNAME deal 3 damage to them. | SpellDescription$ CARDNAME deals 3 damage to target creature or planeswalker unless its controller has NICKNAME deal 3 damage to them. +SVar:DBDiscardDraw:DB$ Draw | NumCards$ 1 | UnlessCost$ Discard<1/Card> | UnlessPayer$ You | UnlessSwitched$ True | OrString$ Draw a card. | StackDescription$ SpellDescription | SpellDescription$ If they do, you may discard a card. If you do, draw card. +A:AB$ Token | Cost$ SubCounter | Planeswalker$ True | TokenAmount$ X | TokenScript$ r_1_1_devil_burn | SpellDescription$ Create X 1/1 red Devil creature tokens with "When this creature dies, it deals 1 damage to any target." +SVar:X:Count$xPaid +DeckHas:Ability$Discard & Ability$Token +Oracle:[+1]: Add {R}{R}. Draft a card from Tibalt, Wicked Tormenter's spellbook, then exile it. Until end of turn, you may cast that card.\n[+1]: Tibalt, Wicked Tormenter deals 3 damage to target creature or planeswalker unless its controller has Tibalt deal 3 damage to them. If they do, you may discard a card. If you do, draw card.\n[−X]: Create X 1/1 red Devil creature tokens with "When this creature dies, it deals 1 damage to any target." diff --git a/forge-gui/res/cardsfolder/upcoming/tireless_angler.txt b/forge-gui/res/cardsfolder/upcoming/tireless_angler.txt new file mode 100644 index 00000000000..a5a93922d90 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/tireless_angler.txt @@ -0,0 +1,10 @@ +Name:Tireless Angler +ManaCost:2 U +Types:Creature Human Rogue +PT:1/4 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Island.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigDraft | TriggerDescription$ Whenever an Island enters the battlefield under your control, draft a card from CARDNAME's spellbook. +SVar:TrigDraft:DB$ NameCard | Draft$ True | Defined$ You | ChooseFromList$ Fleet Swallower,Moat Piranhas,Mystic Skyfish,Nadir Kraken,Pouncing Shoreshark,Sea-Dasher Octopus,Spined Megalodon,Stinging Lionfish,Voracious Greatshark,Archipelagore,Serpent of Yawning Depths,Wormhole Serpent,Sigiled Starfish,Riptide Turtle,Ruin Crab | SubAbility$ DBMakeCard +SVar:DBMakeCard:DB$ MakeCard | Name$ ChosenName | Zone$ Hand | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearNamedCard$ True +SVar:BuffedBy:Island +Oracle:Whenever an Island enters the battlefield under your control, draft a card from Tireless Angler's spellbook. diff --git a/forge-gui/res/languages/de-DE.properties b/forge-gui/res/languages/de-DE.properties index 55cdbcfa13b..d35997a6278 100644 --- a/forge-gui/res/languages/de-DE.properties +++ b/forge-gui/res/languages/de-DE.properties @@ -1837,6 +1837,7 @@ lblSelectCreatureWithTotalPowerLessOrEqualTo=Wähle Kreatur(en) mit Gesamtstärk lblTotalPowerNum=Gesamtstärke: {0} lblCancelChooseConfirm=Auswahl abbrechen? #ChooseCardNameEffect.java +lblChooseCardDraft=Choose a card to draft lblChooseACardName=Wähle einen Kartennamen lblChooseASpecificCard=Wähle einen {0} Kartenname. lblPlayerPickedChosen={0} wählt {1} diff --git a/forge-gui/res/languages/en-US.properties b/forge-gui/res/languages/en-US.properties index 7466df7d5e2..96716cea8c2 100644 --- a/forge-gui/res/languages/en-US.properties +++ b/forge-gui/res/languages/en-US.properties @@ -1838,6 +1838,7 @@ lblSelectCreatureWithTotalPowerLessOrEqualTo=Select creature(s) with total power lblTotalPowerNum=Total Power: {0} lblCancelChooseConfirm=Cancel Choose? #ChooseCardNameEffect.java +lblChooseCardDraft=Choose a card to draft lblChooseACardName=Choose a card name lblChooseASpecificCard=Choose a {0} card name. lblPlayerPickedChosen={0} picked {1} diff --git a/forge-gui/res/languages/es-ES.properties b/forge-gui/res/languages/es-ES.properties index 6918644bc44..97c06751a63 100644 --- a/forge-gui/res/languages/es-ES.properties +++ b/forge-gui/res/languages/es-ES.properties @@ -1836,6 +1836,7 @@ lblSelectCreatureWithTotalPowerLessOrEqualTo=Selecciona la(s) criatura(s) con un lblTotalPowerNum=Fuerza total: {0} lblCancelChooseConfirm=¿Cancelar elegir? #ChooseCardNameEffect.java +lblChooseCardDraft=Choose a card to draft lblChooseACardName=Elige un nombre de carta lblChooseASpecificCard=Elige un nombre de carta {0}. lblPlayerPickedChosen={0} escogió {1} diff --git a/forge-gui/res/languages/it-IT.properties b/forge-gui/res/languages/it-IT.properties index 7e6274e353b..29a945aeccf 100644 --- a/forge-gui/res/languages/it-IT.properties +++ b/forge-gui/res/languages/it-IT.properties @@ -1835,6 +1835,7 @@ lblSelectCreatureWithTotalPowerLessOrEqualTo=Seleziona creature con forza comple lblTotalPowerNum=Forza totale: {0} lblCancelChooseConfirm=Annulli la scelta? #ChooseCardNameEffect.java +lblChooseCardDraft=Choose a card to draft lblChooseACardName=Scegli il nome di una carta lblChooseASpecificCard=Scegli il nome di una carta {0}. lblPlayerPickedChosen={0} ha scelto {1} diff --git a/forge-gui/res/languages/ja-JP.properties b/forge-gui/res/languages/ja-JP.properties index 8e178df7c92..daac58d5a5f 100644 --- a/forge-gui/res/languages/ja-JP.properties +++ b/forge-gui/res/languages/ja-JP.properties @@ -1835,6 +1835,7 @@ lblSelectCreatureWithTotalPowerLessOrEqualTo=パワーの合計が {0}以下に lblTotalPowerNum=パワーの合計:{0} lblCancelChooseConfirm=選びを中止しますか? #ChooseCardNameEffect.java +lblChooseCardDraft=Choose a card to draft lblChooseACardName=カード名 1つを選ぶ lblChooseASpecificCard={0}カード名 1つを選ぶ lblPlayerPickedChosen={0}が {1}を選択した diff --git a/forge-gui/res/languages/zh-CN.properties b/forge-gui/res/languages/zh-CN.properties index cf68ba49c37..196d7d0157c 100644 --- a/forge-gui/res/languages/zh-CN.properties +++ b/forge-gui/res/languages/zh-CN.properties @@ -1839,6 +1839,7 @@ lblSelectCreatureWithTotalPowerLessOrEqualTo=选择一些生物其力量只和 lblTotalPowerNum=总力量:{0} lblCancelChooseConfirm=取消选择? #ChooseCardNameEffect.java +lblChooseCardDraft=Choose a card to draft lblChooseACardName=选择一个牌名 lblChooseASpecificCard=选择一个{0}牌名 lblPlayerPickedChosen={0}选取了{1}