From 5385678076ffa3a2481da87fa2ac670bcb4d9d9c Mon Sep 17 00:00:00 2001 From: Fulgur14 <54345051+Fulgur14@users.noreply.github.com> Date: Sat, 25 Jan 2025 14:56:39 +0100 Subject: [PATCH] 4 DFT + 7 DRC cards (#6850) * Support Aetheric Amplifier --- .../effects/CountersMultiplyEffect.java | 27 +++++++++++-------- .../upcoming/adaptive_omnitool.txt | 10 +++++++ .../upcoming/aetherflux_conduit.txt | 9 +++++++ .../upcoming/aetheric_amplifier.txt | 8 ++++++ .../upcoming/marshals_pathcruiser.txt | 10 +++++++ .../upcoming/nissa_worldsoul_speaker.txt | 8 ++++++ .../upcoming/peema_trailblazer.txt | 12 +++++++++ .../upcoming/possession_engine.txt | 9 +++++++ .../upcoming/rampaging_aetherhood.txt | 14 ++++++++++ .../upcoming/spotcycle_scouter.txt | 9 +++++++ .../upcoming/stridehangar_automaton.txt | 9 +++++++ .../cardsfolder/upcoming/wreck_remover.txt | 11 ++++++++ 12 files changed, 125 insertions(+), 11 deletions(-) create mode 100644 forge-gui/res/cardsfolder/upcoming/adaptive_omnitool.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/aetherflux_conduit.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/aetheric_amplifier.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/marshals_pathcruiser.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/nissa_worldsoul_speaker.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/peema_trailblazer.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/possession_engine.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/rampaging_aetherhood.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/spotcycle_scouter.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/stridehangar_automaton.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/wreck_remover.txt diff --git a/forge-game/src/main/java/forge/game/ability/effects/CountersMultiplyEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CountersMultiplyEffect.java index 60db88829e5..29116e35ad8 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CountersMultiplyEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CountersMultiplyEffect.java @@ -3,6 +3,7 @@ package forge.game.ability.effects; import java.util.Map; import forge.game.Game; +import forge.game.GameEntity; import forge.game.GameEntityCounterTable; import forge.game.ability.SpellAbilityEffect; import forge.game.card.Card; @@ -28,7 +29,7 @@ public class CountersMultiplyEffect extends SpellAbilityEffect { } sb.append(" on "); - sb.append(Lang.joinHomogenous(getTargetCards(sa))); + sb.append(Lang.joinHomogenous(getTargetEntities(sa))); sb.append("."); @@ -45,19 +46,23 @@ public class CountersMultiplyEffect extends SpellAbilityEffect { final int n = Integer.parseInt(sa.getParamOrDefault("Multiplier", "2")) - 1; GameEntityCounterTable table = new GameEntityCounterTable(); - for (final Card tgtCard : getTargetCards(sa)) { - Card gameCard = game.getCardState(tgtCard, null); - // gameCard is LKI in that case, the card is not in game anymore - // or the timestamp did change - // this should check Self too - if (gameCard == null || !tgtCard.equalsWithGameTimestamp(gameCard)) { - continue; + for (GameEntity ge : getTargetEntities(sa)) { + if (ge instanceof Card) { + Card gameCard = game.getCardState((Card) ge, null); + // gameCard is LKI in that case, the card is not in game anymore + // or the timestamp did change + // this should check Self too + if (gameCard == null || !((Card) ge).equalsWithGameTimestamp(gameCard)) { + continue; + } + ge = gameCard; } + if (counterType != null) { - gameCard.addCounter(counterType, gameCard.getCounters(counterType) * n, player, table); + ge.addCounter(counterType, ge.getCounters(counterType) * n, player, table); } else { - for (Map.Entry e : gameCard.getCounters().entrySet()) { - gameCard.addCounter(e.getKey(), e.getValue() * n, player, table); + for (Map.Entry e : ge.getCounters().entrySet()) { + ge.addCounter(e.getKey(), e.getValue() * n, player, table); } } } diff --git a/forge-gui/res/cardsfolder/upcoming/adaptive_omnitool.txt b/forge-gui/res/cardsfolder/upcoming/adaptive_omnitool.txt new file mode 100644 index 00000000000..66a4379f260 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/adaptive_omnitool.txt @@ -0,0 +1,10 @@ +Name:Adaptive Omnitool +ManaCost:2 +Types:Artifact Equipment +S:Mode$ Continuous | Affected$ Card.EquippedBy | AddPower$ X | AddToughness$ X | Description$ Equipped creature gets +1/+1 for each artifact you control. +T:Mode$ Attacks | ValidCard$ Card.EquippedBy | Execute$ TrigDig | TriggerDescription$ Whenever equipped creature attacks, look at the top six cards of your library. You may reveal an artifact card from among them and put it into your hand. Put the rest on the bottom of your library in a random order. +SVar:TrigDig:DB$ Dig | DigNum$ 6 | ChangeNum$ 1 | Optional$ True | ForceRevealToController$ True | ChangeValid$ Artifact | RestRandomOrder$ True +SVar:X:Count$Valid Artifact.YouCtrl +SVar:BuffedBy:Artifact +K:Equip:3 +Oracle:Equipped creature gets +1/+1 for each artifact you control.\nWhenever equipped creature attacks, look at the top six cards of your library. You may reveal an artifact card from among them and put it into your hand. Put the rest on the bottom of your library in a random order.\nEquip {3} \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/aetherflux_conduit.txt b/forge-gui/res/cardsfolder/upcoming/aetherflux_conduit.txt new file mode 100644 index 00000000000..b3e99429c89 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/aetherflux_conduit.txt @@ -0,0 +1,9 @@ +Name:Aetherflux Conduit +ManaCost:6 +Types:Artifact +T:Mode$ SpellCast | ValidCard$ Card | ValidActivatingPlayer$ You | Execute$ TrigEnergy | TriggerZones$ Battlefield | TriggerDescription$ Whenever you cast a spell, you get an amount of {E} (energy counters) equal to the amount of mana spent to cast that spell. +SVar:TrigEnergy:DB$ PutCounter | Defined$ You | CounterType$ ENERGY | CounterNum$ X +A:AB$ Draw | Cost$ PayEnergy<50> | NumCards$ 7 | SubAbility$ DBPlay | SpellDescription$ Draw seven cards. You may cast any number of spells from your hand without paying their mana costs. +SVar:DBPlay:DB$ Play | Valid$ Card.nonLand+YouOwn | ValidSA$ Spell | ValidZone$ Hand | WithoutManaCost$ True | Amount$ All | Controller$ You | Optional$ True +SVar:X:TriggeredCard$CastTotalManaSpent +Oracle:Whenever you cast a spell, you get an amount of {E} (energy counters) equal to the amount of mana spent to cast that spell.\n{T}, Pay fifty {E}: Draw seven cards. You may cast any number of spells from your hand without paying their mana costs. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/aetheric_amplifier.txt b/forge-gui/res/cardsfolder/upcoming/aetheric_amplifier.txt new file mode 100644 index 00000000000..b570bf541f3 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/aetheric_amplifier.txt @@ -0,0 +1,8 @@ +Name:Aetheric Amplifier +ManaCost:3 +Types:Artifact +A:AB$ Mana | Cost$ T | Produced$ Any | SpellDescription$ Add one mana of any color. +A:AB$ Charm | Cost$ 4 T | Choices$ DBPermanent,DBPlayer | CharmNum$ 1 | SorcerySpeed$ True | AdditionalDescription$ . Activate only as a sorcery. +SVar:DBPermanent:DB$ MultiplyCounter | ValidTgts$ Permanent | Multiplier$ 2 | SpellDescription$ Double the number of each kind of counter on target permanent. +SVar:DBPlayer:DB$ MultiplyCounter | Defined$ You | Multiplier$ 2 | SpellDescription$ Double the number of each kind of counter you have. +Oracle:{T}: Add one mana of any color.\n{4}, {T}: Choose one. Activate only as a sorcery.\n• Double the number of each kind of counter on target permanent.\n• Double the number of each kind of counter you have. diff --git a/forge-gui/res/cardsfolder/upcoming/marshals_pathcruiser.txt b/forge-gui/res/cardsfolder/upcoming/marshals_pathcruiser.txt new file mode 100644 index 00000000000..acc308c21da --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/marshals_pathcruiser.txt @@ -0,0 +1,10 @@ +Name:Marshals' Pathcruiser +ManaCost:3 +Types:Artifact Vehicle +PT:6/5 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When this Vehicle enters, search your library for a basic land card, reveal it, put it into your hand, then shuffle. +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic +A:AB$ Animate | Cost$ W U B R G | Defined$ Self | Types$ Artifact,Creature | Exhaust$ True | Duration$ Permanent | SubAbility$ DBPutCounter | SpellDescription$ This Vehicle becomes an artifact creature. Put two +1/+1 counters on it. (Activate each exhaust ability only once.) +SVar:DBPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 2 +K:Crew:5 +Oracle:When this Vehicle enters, search your library for a basic land card, reveal it, put it into your hand, then shuffle.\nExhaust — {W}{U}{B}{R}{G}: This Vehicle becomes an artifact creature. Put two +1/+1 counters on it. (Activate each exhaust ability only once.)\nCrew 5 \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/nissa_worldsoul_speaker.txt b/forge-gui/res/cardsfolder/upcoming/nissa_worldsoul_speaker.txt new file mode 100644 index 00000000000..4cf3064520f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/nissa_worldsoul_speaker.txt @@ -0,0 +1,8 @@ +Name:Nissa, Worldsoul Speaker +ManaCost:3 G +Types:Legendary Creature Elf Druid +PT:3/3 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | TriggerZones$ Battlefield | ValidCard$ Land.YouCtrl | Execute$ TrigEnergy | TriggerDescription$ Landfall — Whenever a land you control enters, you get {E}{E} (two energy counters). +SVar:TrigEnergy:DB$ PutCounter | Defined$ You | CounterType$ ENERGY | CounterNum$ 2 +S:Mode$ Continuous | Affected$ Card.YouCtrl+Permanent+nonLand | MayPlay$ True | MayPlayAltManaCost$ PayEnergy<8> | MayPlayDontGrantZonePermissions$ True | AffectedZone$ Hand,Graveyard,Exile,Library,Command | Description$ You may pay eight {E} rather than pay the mana cost for permanent spells you cast. +Oracle:Landfall — Whenever a land you control enters, you get {E}{E} (two energy counters).\nYou may pay eight {E} rather than pay the mana cost for permanent spells you cast. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/peema_trailblazer.txt b/forge-gui/res/cardsfolder/upcoming/peema_trailblazer.txt new file mode 100644 index 00000000000..09d5b17920e --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/peema_trailblazer.txt @@ -0,0 +1,12 @@ +Name:Peema Trailblazer +ManaCost:2 G +Types:Creature Elephant Warrior +PT:3/3 +K:Trample +T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigEnergy | TriggerDescription$ Whenever this creature deals combat damage to a player, you get that many {E} (energy counters). +SVar:TrigEnergy:DB$ PutCounter | Defined$ You | CounterType$ ENERGY | CounterNum$ TriggerCount$DamageAmount +A:AB$ PutCounter | Cost$ PayEnergy<6> | Defined$ Self | CounterType$ P1P1 | CounterNum$ 2 | Exhaust$ True | SubAbility$ DBDraw | SpellDescription$ Put two +1/+1 counters on this creature. Then draw cards equal to the greatest power among creatures you control. (Activate each exhaust ability only once.) +SVar:DBDraw:DB$ Draw | NumCards$ X +SVar:X:Count$Valid Creature.YouCtrl$GreatestPower +DeckHas:Ability$Counters +Oracle:Trample\nWhenever this creature deals combat damage to a player, you get that many {E} (energy counters).\nExhaust — Pay six {E}: Put two +1/+1 counters on this creature. Then draw cards equal to the greatest power among creatures you control. (Activate each exhaust ability only once.) \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/possession_engine.txt b/forge-gui/res/cardsfolder/upcoming/possession_engine.txt new file mode 100644 index 00000000000..8b806d7ed0f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/possession_engine.txt @@ -0,0 +1,9 @@ +Name:Possession Engine +ManaCost:3 U U +Types:Artifact Vehicle +PT:5/5 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When this Vehicle enters, gain control of target creature an opponent controls for as long as you control this Vehicle. That creature can't attack or block for as long as you control this Vehicle. +SVar:TrigChange:DB$ GainControl | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Choose target creature an opponent controls | LoseControl$ LeavesPlay,LoseControl | SubAbility$ DBPump +SVar:DBPump:DB$ Pump | KW$ HIDDEN CARDNAME can't attack or block. | Duration$ AsLongAsControl | Defined$ Targeted +K:Crew:3 +Oracle:When this Vehicle enters, gain control of target creature an opponent controls for as long as you control this Vehicle. That creature can't attack or block for as long as you control this Vehicle.\nCrew 3 diff --git a/forge-gui/res/cardsfolder/upcoming/rampaging_aetherhood.txt b/forge-gui/res/cardsfolder/upcoming/rampaging_aetherhood.txt new file mode 100644 index 00000000000..6411b89f687 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/rampaging_aetherhood.txt @@ -0,0 +1,14 @@ +Name:Rampaging Aetherhood +ManaCost:4 G +Types:Creature Snake Hydra +PT:4/4 +K:Trample +K:Ward:2 +T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigEnergy | TriggerDescription$ At the beginning of your upkeep, you get an amount of {E} (energy counters) equal to this creature's power. Then you may pay one or more {E}. If you do, put that many +1/+1 counters on this creature. +SVar:TrigEnergy:DB$ PutCounter | Defined$ You | CounterType$ ENERGY | CounterNum$ X | SubAbility$ DBChooseNumber +SVar:DBChooseNumber:DB$ ChooseNumber | Max$ Max | ListTitle$ amount of energy to pay | SubAbility$ DBPutCounter +SVar:DBPutCounter:DB$ PutCounter | Defined$ Self | UnlessCost$ PayEnergy | UnlessPayer$ You | UnlessSwitched$ True | CounterType$ P1P1 | CounterNum$ Y +SVar:X:Count$CardPower +SVar:Max:Count$YourCountersEnergy +SVar:Y:Count$ChosenNumber +Oracle:Trample, ward {2}\nAt the beginning of your upkeep, you get an amount of {E} (energy counters) equal to this creature's power. Then you may pay one or more {E}. If you do, put that many +1/+1 counters on this creature. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/spotcycle_scouter.txt b/forge-gui/res/cardsfolder/upcoming/spotcycle_scouter.txt new file mode 100644 index 00000000000..f0d0d356aff --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/spotcycle_scouter.txt @@ -0,0 +1,9 @@ +Name:Spotcycle Scouter +ManaCost:1 W +Types:Artifact Vehicle +PT:3/2 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigScry | TriggerDescription$ When this Vehicle enters, scry 2. (Look at the top two cards of your library, then put any number of them on the bottom and the rest on top in any order.) +SVar:TrigScry:DB$ Scry | ScryNum$ 2 +K:Crew:1 +DeckHas:Ability$Counters +Oracle:When this Vehicle enters, scry 2. (Look at the top two cards of your library, then put any number of them on the bottom and the rest on top in any order.)\nCrew 1 (Tap any number of creatures you control with total power 1 or more: This Vehicle becomes an artifact creature until end of turn.) \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/stridehangar_automaton.txt b/forge-gui/res/cardsfolder/upcoming/stridehangar_automaton.txt new file mode 100644 index 00000000000..588c7ed0ddb --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/stridehangar_automaton.txt @@ -0,0 +1,9 @@ +Name:Stridehangar Automaton +ManaCost:3 +Types:Artifact Creature Construct +PT:1/4 +S:Mode$ Continuous | Affected$ Thopter.YouCtrl | AddPower$ 1 | AddToughness$ 1 | Description$ Thopters you control get +1/+1. +R:Event$ CreateToken | ActiveZones$ Battlefield | ValidToken$ Artifact.YouCtrl | ReplaceWith$ DBReplace | Description$ If one or more artifact tokens would be created under your control, those tokens plus an additional 1/1 colorless Thopter artifact creature token with flying are created instead. +SVar:DBReplace:DB$ ReplaceToken | Type$ AddToken | Amount$ 1 | ValidCard$ Artifact.YouCtrl | TokenScript$ c_1_1_a_thopter_flying +DeckHas:Ability$Token +Oracle:Thopters you control get +1/+1.\nIf one or more artifact tokens would be created under your control, those tokens plus an additional 1/1 colorless Thopter artifact creature token with flying are created instead. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/wreck_remover.txt b/forge-gui/res/cardsfolder/upcoming/wreck_remover.txt new file mode 100644 index 00000000000..afd09d41bcf --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/wreck_remover.txt @@ -0,0 +1,11 @@ +Name:Wreck Remover +ManaCost:4 +Types:Artifact Creature Construct +PT:3/4 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChangeZone | TriggerDescription$ Whenever this creature enters or attacks, exile up to one target card from a graveyard. You gain 1 life. +T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigChangeZone | TriggerZones$ Battlefield | Secondary$ True | TriggerDescription$ Whenever this creature enters or attacks, exile up to one target card from a graveyard. You gain 1 life. +SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | ValidTgts$ Card | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select target card in a graveyard to exile | SubAbility$ DBGainLife +SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 1 +K:Cycling:2 +SVar:HasAttackEffect:TRUE +Oracle:Whenever this creature enters or attacks, exile up to one target card from a graveyard. You gain 1 life.\nCycling {2} ({2}, Discard this card: Draw a card.) \ No newline at end of file