From 2fad4324e9a30068fcbe79db48be95fd5f906194 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Sat, 4 Feb 2023 18:24:14 +0100 Subject: [PATCH] CardFactoryUtil: More Than Meets the Eye create there instead --- .../src/main/java/forge/ai/GameState.java | 2 -- .../main/java/forge/card/CardSplitType.java | 1 - .../src/main/java/forge/item/PaperCard.java | 2 +- .../main/java/forge/game/GameActionUtil.java | 22 -------------- .../ability/effects/ChangeZoneEffect.java | 8 ----- .../src/main/java/forge/game/card/Card.java | 29 +------------------ .../java/forge/game/card/CardFactoryUtil.java | 14 +++++++++ .../game/spellability/SpellPermanent.java | 11 +++++-- ...cee_sharpshooter_arcee_acrobatic_coupe.txt | 6 ++-- ...aster_combat_dj_blaster_morale_booster.txt | 6 ++-- ...tormentor_blitzwing_adaptive_assailant.txt | 6 ++-- ...saboteur_cyclonus_cybertronian_fighter.txt | 6 ++-- ..._veteran_flamewar_streetwise_operative.txt | 6 ++-- ...g_humanitys_ally_goldbug_scrappy_scout.txt | 6 ++-- ...genious_scientist_jetfire_air_guardian.txt | 6 ++-- ...tron_tyrant_megatron_destructive_force.txt | 6 ++-- ...rime_hero_optimus_prime_autobot_leader.txt | 4 +-- ...tchet_field_medic_ratchet_rescue_racer.txt | 6 ++-- ...ed_muscle_slicer_high_speed_antagonist.txt | 6 ++-- ...e_sonic_spy_soundwave_superior_captain.txt | 8 ++--- ..._power_hungry_starscream_seeker_leader.txt | 6 ++-- ...tactician_ultra_magnus_armored_carrier.txt | 6 ++-- .../forge/player/PlayerControllerHuman.java | 3 +- 23 files changed, 68 insertions(+), 108 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/GameState.java b/forge-ai/src/main/java/forge/ai/GameState.java index 56dc02ed8c7..bce031ef042 100644 --- a/forge-ai/src/main/java/forge/ai/GameState.java +++ b/forge-ai/src/main/java/forge/ai/GameState.java @@ -305,8 +305,6 @@ public abstract class GameState { newText.append("|Meld"); } else if (c.getCurrentStateName().equals(CardStateName.Modal)) { newText.append("|Modal"); - } else if (c.getCurrentStateName().equals(CardStateName.Converted)) { - newText.append("|Converted"); } if (c.getPlayerAttachedTo() != null) { diff --git a/forge-core/src/main/java/forge/card/CardSplitType.java b/forge-core/src/main/java/forge/card/CardSplitType.java index ef4dbd70d67..69c6aea1814 100644 --- a/forge-core/src/main/java/forge/card/CardSplitType.java +++ b/forge-core/src/main/java/forge/card/CardSplitType.java @@ -5,7 +5,6 @@ import forge.card.CardFace.FaceSelectionMethod; public enum CardSplitType { None(FaceSelectionMethod.USE_PRIMARY_FACE, null), - Convert(FaceSelectionMethod.USE_ACTIVE_FACE, CardStateName.Converted), Transform(FaceSelectionMethod.USE_ACTIVE_FACE, CardStateName.Transformed), Meld(FaceSelectionMethod.USE_ACTIVE_FACE, CardStateName.Meld), Split(FaceSelectionMethod.COMBINE, CardStateName.RightSplit), diff --git a/forge-core/src/main/java/forge/item/PaperCard.java b/forge-core/src/main/java/forge/item/PaperCard.java index b835109f866..fd62fdefa34 100644 --- a/forge-core/src/main/java/forge/item/PaperCard.java +++ b/forge-core/src/main/java/forge/item/PaperCard.java @@ -403,7 +403,7 @@ public class PaperCard implements Comparable, InventoryItemFromSet, public boolean hasBackFace(){ CardSplitType cst = this.rules.getSplitType(); return cst == CardSplitType.Transform || cst == CardSplitType.Flip || cst == CardSplitType.Meld - || cst == CardSplitType.Modal || cst == CardSplitType.Convert; + || cst == CardSplitType.Modal; } // Return true if card is one of the five basic lands that can be added for free diff --git a/forge-game/src/main/java/forge/game/GameActionUtil.java b/forge-game/src/main/java/forge/game/GameActionUtil.java index 3a7b2dffba9..7f84108c135 100644 --- a/forge-game/src/main/java/forge/game/GameActionUtil.java +++ b/forge-game/src/main/java/forge/game/GameActionUtil.java @@ -275,28 +275,6 @@ public final class GameActionUtil { foretold.setPayCosts(new Cost(k[1], false)); alternatives.add(foretold); - } else if (keyword.startsWith("More Than Meets the Eye")) { - final String[] k = keyword.split(":"); - final Cost convertCost = new Cost(k[1], true); - - final SpellAbility newSA = new SpellPermanent(source); - newSA.setCardState(source.getAlternateState()); - newSA.setPayCosts(convertCost); - newSA.setActivatingPlayer(activator); - - newSA.putParam("PrecostDesc", k[0] + " "); - newSA.putParam("CostDesc", convertCost.toString()); - - // makes new SpellDescription - final StringBuilder desc = new StringBuilder(); - desc.append(newSA.getCostDescription()); - desc.append("(").append(inst.getReminderText()).append(")"); - newSA.setDescription(desc.toString()); - newSA.putParam("AfterDescription", "(Converted)"); - - newSA.setAlternativeCost(AlternativeCost.MTMtE); - - alternatives.add(newSA); } } diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java index 325e145281c..b5c23c8c53a 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java @@ -604,14 +604,6 @@ public class ChangeZoneEffect extends SpellAbilityEffect { continue; } } - if (sa.hasParam("Converted")) { - if (gameCard.isConvertable()) { - gameCard.changeCardState("Convert", null, sa); - } else { - // If it can't convert, don't change zones. - continue; - } - } if (sa.hasParam("WithCountersType")) { CounterType cType = CounterType.getType(sa.getParam("WithCountersType")); int cAmount = AbilityUtils.calculateAmount(hostCard, sa.getParamOrDefault("WithCountersAmount", "1"), sa); 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 da04b667e22..4b9c7b0e565 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -636,29 +636,6 @@ public class Card extends GameEntity implements Comparable, IHasSVars { return retResult; - } else if (mode.equals("Convert") && (isConvertable() || hasMergedCard())) { - // Need to remove mutated states, otherwise the changeToState() will fail - if (hasMergedCard()) { - removeMutatedStates(); - } - CardCollectionView cards = hasMergedCard() ? getMergedCards() : new CardCollection(this); - boolean retResult = false; - for (final Card c : cards) { - if (!c.isConvertable()) { - continue; - } - c.backside = !c.backside; - - boolean result = c.changeToState(c.backside ? CardStateName.Converted : CardStateName.Original); - retResult = retResult || result; - } - if (hasMergedCard()) { - rebuildMutatedStates(cause); - game.getTriggerHandler().clearActiveTriggers(this, null); - game.getTriggerHandler().registerActiveTrigger(this, false); - } - return retResult; - } else if (mode.equals("Flip")) { // 709.4. Flipping a permanent is a one-way process. if (isFlipped()) { @@ -963,16 +940,12 @@ public class Card extends GameEntity implements Comparable, IHasSVars { return getRules() != null && getRules().getSplitType() == CardSplitType.Meld; } - public final boolean isConvertable() { - return getRules() != null && getRules().getSplitType() == CardSplitType.Convert; - } - public final boolean isModal() { return getRules() != null && getRules().getSplitType() == CardSplitType.Modal; } public final boolean hasBackSide() { - return isDoubleFaced() || isMeldable() || isModal() || isConvertable(); + return isDoubleFaced() || isMeldable() || isModal(); } public final boolean isFlipCard() { diff --git a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java index ac3ade1694c..e8cc13f9e85 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -67,6 +67,7 @@ import forge.game.spellability.OptionalCost; import forge.game.spellability.Spell; import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbilityRestriction; +import forge.game.spellability.SpellPermanent; import forge.game.staticability.StaticAbility; import forge.game.staticability.StaticAbilityCantBeCast; import forge.game.trigger.Trigger; @@ -3128,6 +3129,19 @@ public class CardFactoryUtil { inst.addSpellAbility(abilityMorphDown(card)); inst.addSpellAbility(abilityMorphUp(card, k[1], true)); + } else if (keyword.startsWith("More Than Meets the Eye")) { + final String[] n = keyword.split(":"); + final Cost convertCost = new Cost(n[1], false); + + final SpellAbility sa = new SpellPermanent(host, host.getAlternateState(), convertCost); + sa.setCardState(host.getAlternateState()); + sa.setAlternativeCost(AlternativeCost.MTMtE); + + sa.putParam("PrecostDesc", n[0] + " "); + sa.putParam("CostDesc", convertCost.toString()); + sa.putParam("AfterDescription", "(Converted)"); + sa.setIntrinsic(intrinsic); + inst.addSpellAbility(sa); } else if (keyword.startsWith("Multikicker")) { final String[] n = keyword.split(":"); final SpellAbility sa = card.getFirstSpellAbility(); diff --git a/forge-game/src/main/java/forge/game/spellability/SpellPermanent.java b/forge-game/src/main/java/forge/game/spellability/SpellPermanent.java index b9bcf6a7721..4e7efc7f7af 100644 --- a/forge-game/src/main/java/forge/game/spellability/SpellPermanent.java +++ b/forge-game/src/main/java/forge/game/spellability/SpellPermanent.java @@ -24,6 +24,7 @@ import com.google.common.collect.Maps; import forge.game.ability.ApiType; import forge.game.ability.SpellApiBased; import forge.game.card.Card; +import forge.game.card.CardState; import forge.game.cost.Cost; /** @@ -47,8 +48,14 @@ public class SpellPermanent extends SpellApiBased { * a {@link forge.game.card.Card} object. */ public SpellPermanent(final Card sourceCard) { - super(sourceCard.isCreature() ? ApiType.PermanentCreature : ApiType.PermanentNoncreature, sourceCard, - new Cost(sourceCard.getManaCost(), false), null, Maps.newHashMap()); + this(sourceCard, sourceCard.getCurrentState(), new Cost(sourceCard.getManaCost(), false)); + } + public SpellPermanent(final Card sourceCard, final CardState cardstate) { + this(sourceCard, cardstate, new Cost(cardstate.getManaCost(), false)); + } + public SpellPermanent(final Card sourceCard, final CardState cardstate, final Cost cost) { + super(cardstate.getType().isCreature() ? ApiType.PermanentCreature : ApiType.PermanentNoncreature, sourceCard, + cost, null, Maps.newHashMap()); // reset StackDescription for something with Text this.setStackDescription(""); diff --git a/forge-gui/res/cardsfolder/a/arcee_sharpshooter_arcee_acrobatic_coupe.txt b/forge-gui/res/cardsfolder/a/arcee_sharpshooter_arcee_acrobatic_coupe.txt index 9c5cd96e1a7..3452946c666 100644 --- a/forge-gui/res/cardsfolder/a/arcee_sharpshooter_arcee_acrobatic_coupe.txt +++ b/forge-gui/res/cardsfolder/a/arcee_sharpshooter_arcee_acrobatic_coupe.txt @@ -5,9 +5,9 @@ PT:2/2 K:More Than Meets the Eye:R W K:First Strike A:AB$ DealDamage | Cost$ 1 XCantBe0 SubCounter | ValidTgts$ Creature | NumDmg$ X | SubAbility$ DBConvert | SpellDescription$ It deals that much damage to target creature. -SVar:DBConvert:DB$ SetState | Mode$ Convert | StackDescription$ SpellDescription | SpellDescription$ Convert NICKNAME. +SVar:DBConvert:DB$ SetState | Mode$ Transform | StackDescription$ SpellDescription | SpellDescription$ Convert NICKNAME. SVar:X:Count$xPaid -AlternateMode:Convert +AlternateMode:DoubleFaced DeckNeeds:Ability$Counters Oracle:More Than Meets the Eye {R}{W} (You may cast this card converted for {R}{W}.)\nFirst strike\n{1}, Remove one or more +1/+1 counters from Arcee: It deals that much damage to target creature. Convert Arcee. @@ -21,7 +21,7 @@ PT:2/2 K:Living metal T:Mode$ SpellCast | ValidActivatingPlayer$ You | TargetsValid$ Creature.YouCtrl,Vehicle.YouCtrl | Execute$ TrigPutCounters | TriggerDescription$ Whenever you cast a spell that targets one or more creatures or Vehicles you control, put that many +1/+1 counters on NICKNAME. Convert NICKNAME. SVar:TrigPutCounters:DB$ PutCounter | CounterType$ P1P1 | CounterNum$ X | SubAbility$ DBConvert -SVar:DBConvert:DB$ SetState | Mode$ Convert +SVar:DBConvert:DB$ SetState | Mode$ Transform SVar:X:TriggerObjectsSpellAbilityTargets$Valid Creature.YouCtrl,Vehicle.YouCtrl DeckHas:Ability$Counters Oracle:Living metal (As long as it's your turn, this Vehicle is also a creature.)\nWhenever you cast a spell that targets one or more creatures or Vehicles you control, put that many +1/+1 counters on Arcee. Convert Arcee. diff --git a/forge-gui/res/cardsfolder/b/blaster_combat_dj_blaster_morale_booster.txt b/forge-gui/res/cardsfolder/b/blaster_combat_dj_blaster_morale_booster.txt index ef26bc819e7..0bed87a78a6 100644 --- a/forge-gui/res/cardsfolder/b/blaster_combat_dj_blaster_morale_booster.txt +++ b/forge-gui/res/cardsfolder/b/blaster_combat_dj_blaster_morale_booster.txt @@ -5,8 +5,8 @@ PT:3/3 K:More Than Meets the Eye:1 R G S:Mode$ Continuous | Affected$ Artifact.Creature+Other+YouCtrl+nonToken,Vehicle.Other+YouCtrl+nonToken | AddKeyword$ Modular:1 | Description$ Other nontoken artifact creatures and Vehicles you control have modular 1. (They enter the battlefield with an additional +1/+1 counter on them. When they die, you may put their +1/+1 counters on target artifact creature.) T:Mode$ CounterAddedOnce | CounterType$ P1P1 | ValidSource$ You | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigConvert | TriggerDescription$ Whenever you put one or more +1/+1 counters on NICKNAME, convert it. -SVar:TrigConvert:DB$ SetState | Mode$ Convert -AlternateMode:Convert +SVar:TrigConvert:DB$ SetState | Mode$ Transform +AlternateMode:DoubleFaced DeckHas:Ability$Counters & Keyword$Modular DeckHints:Type$Vehicle|Artifact Oracle:More Than Meets the Eye {1}{R}{G} (You may cast this card converted for {1}{R}{G}.)\nOther nontoken artifact creatures and Vehicles you control have modular 1. (They enter the battlefield with an additional +1/+1 counter on them. When they die, you may put their +1/+1 counters on target artifact creature.)\nWhenever you put one or more +1/+1 counters on Blaster, convert it. @@ -20,7 +20,7 @@ Types:Legendary Artifact K:Modular:3 A:AB$ MoveCounter | Cost$ X T | Source$ Self | ValidTgts$ Artifact.Other | TgtPrompt$ Select another target artifact to get counters | CounterType$ P1P1 | CounterNum$ X | SorcerySpeed$ True | SubAbility$ DBPump | SpellDescription$ Move X +1/+1 counters from NICKNAME onto another target artifact. Activate only as a sorcery. SVar:DBPump:DB$ Pump | Defined$ Targeted | KW$ Haste | SubAbility$ DBConvert | SpellDescription$ That artifact gains haste until end of turn. -SVar:DBConvert:DB$ SetState | Mode$ Convert | ConditionPresent$ Card.Self+counters_EQ0_P1P1 | StackDescription$ If NICKNAME has no +1/+1 counters on it, convert it. +SVar:DBConvert:DB$ SetState | Mode$ Transform | ConditionPresent$ Card.Self+counters_EQ0_P1P1 | StackDescription$ If NICKNAME has no +1/+1 counters on it, convert it. SVar:X:Count$xPaid DeckHas:Ability$Counters Oracle:Modular 3\n{X}, {T}: Move X +1/+1 counters from Blaster onto another target artifact. That artifact gains haste until end of turn. If Blaster has no +1/+1 counters on it, convert it. Activate only as a sorcery. diff --git a/forge-gui/res/cardsfolder/b/blitzwing_cruel_tormentor_blitzwing_adaptive_assailant.txt b/forge-gui/res/cardsfolder/b/blitzwing_cruel_tormentor_blitzwing_adaptive_assailant.txt index 76964ca0b13..52a0f13a19f 100644 --- a/forge-gui/res/cardsfolder/b/blitzwing_cruel_tormentor_blitzwing_adaptive_assailant.txt +++ b/forge-gui/res/cardsfolder/b/blitzwing_cruel_tormentor_blitzwing_adaptive_assailant.txt @@ -5,11 +5,11 @@ PT:6/5 K:More Than Meets the Eye:3 B T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigLoseLife | TriggerDescription$ At the beginning of your end step, target opponent loses life equal to the life that player lost this turn. If no life is lost this way, convert NICKNAME. SVar:TrigLoseLife:DB$ LoseLife | ValidTgts$ Opponent | LifeAmount$ X | SubAbility$ DBConvert -SVar:DBConvert:DB$ SetState | Mode$ Convert | ConditionCheckSVar$ AFLifeLost | ConditionSVarCompare$ EQ0 +SVar:DBConvert:DB$ SetState | Mode$ Transform | ConditionCheckSVar$ AFLifeLost | ConditionSVarCompare$ EQ0 SVar:X:TargetedPlayer$LifeLostThisTurn SVar:AFLifeLost:Number$0 #AFLifeLost will be set by LoseLife -AlternateMode:Convert +AlternateMode:DoubleFaced Oracle:More Than Meets the Eye {3}{B} (You may cast this card converted for {3}{B}.)\nAt the beginning of your end step, target opponent loses life equal to the life that player lost this turn. If no life is lost this way, convert Blitzwing. ALTERNATE @@ -23,7 +23,7 @@ K:Living metal T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | Execute$ TrigRandomPump | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of combat on your turn, choose flying or indestructible at random. NICKNAME gains that ability until end of turn. SVar:TrigRandomPump:DB$ Pump | Defined$ Self | KW$ Flying & Indestructible | RandomKeyword$ True T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | TriggerZones$ Battlefield | Execute$ TrigConvert | TriggerDescription$ Whenever NICKNAME deals combat damage to a player, convert it. -SVar:TrigConvert:DB$ SetState | Mode$ Convert +SVar:TrigConvert:DB$ SetState | Mode$ Transform DeckHas:Keyword$Flying|Indestructible SVar:HasAttackEffect:TRUE Oracle:Living metal (As long as it's your turn, this Vehicle is also a creature.)\nAt the beginning of combat on your turn, choose flying or indestructible at random. Blitzwing gains that ability until end of turn.\nWhenever Blitzwing deals combat damage to a player, convert it. diff --git a/forge-gui/res/cardsfolder/c/cyclonus_the_saboteur_cyclonus_cybertronian_fighter.txt b/forge-gui/res/cardsfolder/c/cyclonus_the_saboteur_cyclonus_cybertronian_fighter.txt index db3e791f073..c9e3ce70279 100644 --- a/forge-gui/res/cardsfolder/c/cyclonus_the_saboteur_cyclonus_cybertronian_fighter.txt +++ b/forge-gui/res/cardsfolder/c/cyclonus_the_saboteur_cyclonus_cybertronian_fighter.txt @@ -6,8 +6,8 @@ K:More Than Meets the Eye:5 U B K:Flying T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Opponent | CombatDamage$ True | TriggerZones$ Battlefield | Execute$ TrigConnive | TriggerDescription$ Whenever NICKNAME deals combat damage to a player, it connives. Then if NICKNAME's power is 5 or greater, convert it. (To have a creature connive, draw a card, then discard a card. If you discarded a nonland card, put a +1/+1 counter on that creature.) SVar:TrigConnive:DB$ Connive | SubAbility$ DBConvert -SVar:DBConvert:DB$ SetState | Mode$ Convert | ConditionPresent$ Card.Self+powerGE5 -AlternateMode:Convert +SVar:DBConvert:DB$ SetState | Mode$ Transform | ConditionPresent$ Card.Self+powerGE5 +AlternateMode:DoubleFaced SVar:HasAttackEffect:TRUE DeckHas:Ability$Graveyard|Discard Oracle:More Than Meets the Eye {5}{U}{B} (You may cast this card converted for {5}{U}{B}.)\nFlying\nWhenever Cyclonus deals combat damage to a player, it connives. Then if Cyclonus's power is 5 or greater, convert it. (To have a creature connive, draw a card, then discard a card. If you discarded a nonland card, put a +1/+1 counter on that creature.) @@ -22,7 +22,7 @@ PT:5/5 K:Living metal K:Flying T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Opponent | CombatDamage$ True | TriggerZones$ Battlefield | Execute$ TrigConvert | TriggerDescription$ Whenever NICKNAME deals combat damage to a player, convert it. If you do, there is an additional beginning phase after this phase. (The beginning phase includes the untap, upkeep, and draw steps.) -SVar:TrigConvert:DB$ SetState | Mode$ Convert | SubAbility$ ExtraBeginningPhase | RememberChanged$ True +SVar:TrigConvert:DB$ SetState | Mode$ Transform | SubAbility$ ExtraBeginningPhase | RememberChanged$ True SVar:ExtraBeginningPhase:DB$ AddPhase | ExtraPhase$ Beginning | ConditionDefined$ Remembered | ConditionPresent$ Card.Self | ConditionCompare$ GE1 | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:HasAttackEffect:TRUE diff --git a/forge-gui/res/cardsfolder/f/flamewar_brash_veteran_flamewar_streetwise_operative.txt b/forge-gui/res/cardsfolder/f/flamewar_brash_veteran_flamewar_streetwise_operative.txt index 8461f4c9b60..f122f31f840 100644 --- a/forge-gui/res/cardsfolder/f/flamewar_brash_veteran_flamewar_streetwise_operative.txt +++ b/forge-gui/res/cardsfolder/f/flamewar_brash_veteran_flamewar_streetwise_operative.txt @@ -4,11 +4,11 @@ Types:Legendary Artifact Creature Robot PT:3/2 K:More Than Meets the Eye:B R A:AB$ PutCounter | Cost$ Sac<1/Artifact.Other/another artifact> | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 | SorcerySpeed$ True | SubAbility$ DBConvert | AILogic$ AristocratCounters | SpellDescription$ Put a +1/+1 counter on NICKNAME and convert it. Activate only as a sorcery. -SVar:DBConvert:DB$ SetState | Mode$ Convert | StackDescription$ Convert NICKNAME +SVar:DBConvert:DB$ SetState | Mode$ Transform | StackDescription$ Convert NICKNAME A:AB$ ChangeZoneAll | Cost$ 1 Discard<1/Hand> | ChangeType$ Card.YouOwn+counters_GE1_INTEL | Origin$ Exile | Destination$ Hand | SpellDescription$ Put all exiled cards you own with intel counters on them into your hand. DeckHints:Ability$Counters DeckHas:Ability$Sacrifice|Discard|Counters -AlternateMode:Convert +AlternateMode:DoubleFaced Oracle:More Than Meets the Eye {B}{R} (You may cast this card converted for {B}{R}.)\nSacrifice another artifact: Put a +1/+1 counter on Flamewar and convert it. Activate only as a sorcery.\n{1}, Discard your hand: Put all exiled cards you own with intel counters on them into your hand. ALTERNATE @@ -23,7 +23,7 @@ K:Menace K:Deathtouch T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | TriggerZones$ Battlefield | Execute$ TrigDig | TriggerDescription$ Whenever NICKNAME deals combat damage to a player, exile that many cards from the top of your library face down. Put an intel counter on each of them. Convert NICKNAME. SVar:TrigDig:DB$ Dig | DigNum$ X | ChangeNum$ All | DestinationZone$ Exile | ExileFaceDown$ True | ExileWithCounter$ INTEL | SubAbility$ DBConvert -SVar:DBConvert:DB$ SetState | Mode$ Convert +SVar:DBConvert:DB$ SetState | Mode$ Transform SVar:X:TriggerCount$DamageAmount SVar:HasAttackEffect:TRUE Oracle:Living metal (As long as it's your turn, this Vehicle is also a creature.)\nMenace, deathtouch\nWhenever Flamewar deals combat damage to a player, exile that many cards from the top of your library face down. Put an intel counter on each of them. Convert Flamewar. diff --git a/forge-gui/res/cardsfolder/g/goldbug_humanitys_ally_goldbug_scrappy_scout.txt b/forge-gui/res/cardsfolder/g/goldbug_humanitys_ally_goldbug_scrappy_scout.txt index 42ffa95ab52..79b876a056b 100644 --- a/forge-gui/res/cardsfolder/g/goldbug_humanitys_ally_goldbug_scrappy_scout.txt +++ b/forge-gui/res/cardsfolder/g/goldbug_humanitys_ally_goldbug_scrappy_scout.txt @@ -6,9 +6,9 @@ K:More Than Meets the Eye:W U R:Event$ DamageDone | ActiveZones$ Battlefield | Prevent$ True | ValidTarget$ Human.attacking+YouCtrl | IsCombat$ True | Description$ Prevent all combat damage that would be dealt to attacking Humans you control. SVar:NonStackingEffect:True T:Mode$ SpellCast | ValidCard$ Card.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigConvert | CheckSVar$ YouCastThisTurn | SVarCompare$ EQ2 | NoResolvingCheck$ True | TriggerDescription$ Whenever you cast your second spell each turn, convert NICKNAME. -SVar:TrigConvert:DB$ SetState | Mode$ Convert +SVar:TrigConvert:DB$ SetState | Mode$ Transform SVar:YouCastThisTurn:Count$ThisTurnCast_Card.YouCtrl -AlternateMode:Convert +AlternateMode:DoubleFaced DeckHints:Type$Human Oracle:More Than Meets the Eye {W}{U} (You may cast this card converted for {W}{U}.)\nPrevent all combat damage that would be dealt to attacking Humans you control.\nWhenever you cast your second spell each turn, convert Goldbug. @@ -23,6 +23,6 @@ K:Living metal S:Mode$ Continuous | Affected$ Human.YouCtrl | AddHiddenKeyword$ This spell can't be countered. | AffectedZone$ Stack | Description$ Human spells you control can't be countered. T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | IsPresent$ Human.attacking+Other | Execute$ TrigDraw | TriggerDescription$ Whenever NICKNAME and at least one Human attack, draw a card and convert NICKNAME. SVar:TrigDraw:DB$ Draw | SubAbility$ DBConvert -SVar:DBConvert:DB$ SetState | Mode$ Convert +SVar:DBConvert:DB$ SetState | Mode$ Transform DeckNeeds:Type$Human Oracle:Living metal (As long as it's your turn, this Vehicle is also a creature.)\nHuman spells you control can't be countered\nWhenever Goldbug and at least one Human attack, draw a card and convert Goldbug. diff --git a/forge-gui/res/cardsfolder/j/jetfire_ingenious_scientist_jetfire_air_guardian.txt b/forge-gui/res/cardsfolder/j/jetfire_ingenious_scientist_jetfire_air_guardian.txt index 1d730b348c4..2691359f2f1 100644 --- a/forge-gui/res/cardsfolder/j/jetfire_ingenious_scientist_jetfire_air_guardian.txt +++ b/forge-gui/res/cardsfolder/j/jetfire_ingenious_scientist_jetfire_air_guardian.txt @@ -5,9 +5,9 @@ PT:3/4 K:More Than Meets the Eye:3 U K:Flying A:AB$ Mana | Cost$ RemoveAnyCounter | ValidTgts$ Player | Produced$ C | Amount$ X | AmountDesc$ for each counter removed | XCantBe0$ True | RestrictValid$ CantCastNonArtifactSpells | SpellDescription$ Target player adds that much {C}. This mana can't be spent to cast nonartifact spells. -SVar:DBConvert:DB$ SetState | Mode$ Convert | StackDescription$ SpellDescription | SpellDescription$ Convert NICKNAME. +SVar:DBConvert:DB$ SetState | Mode$ Transform | StackDescription$ SpellDescription | SpellDescription$ Convert NICKNAME. SVar:X:Count$xPaid -AlternateMode:Convert +AlternateMode:DoubleFaced AI:RemoveDeck:All DeckHints:Ability$Counters & Keyword$Adapt|Modular Oracle:More Than Meets the Eye {3}{U} (You may cast this card converted for {3}{U}.)\nFlying\nRemove one or more +1/+1 counters from among artifacts you control: Target player adds that much {C}. This mana can't be spent to cast nonartifact spells. Convert Jetfire. @@ -21,7 +21,7 @@ Types:Legendary Artifact Vehicle PT:3/4 K:Living metal K:Flying -A:AB$ SetState | Cost$ U U U | Mode$ Convert | SubAbility$ DBAdapt | StackDescription$ Convert NICKNAME, | SpellDescription$ Convert NICKNAME, then adapt 3. (If it has no +1/+1 counters on it, put three +1/+1 counters on it.) +A:AB$ SetState | Cost$ U U U | Mode$ Transform | SubAbility$ DBAdapt | StackDescription$ Convert NICKNAME, | SpellDescription$ Convert NICKNAME, then adapt 3. (If it has no +1/+1 counters on it, put three +1/+1 counters on it.) SVar:DBAdapt:DB$ PutCounter | Adapt$ True | CounterNum$ 3 | CounterType$ P1P1 | StackDescription$ then adapt 3. DeckHas:Ability$Counters Oracle:Living metal (As long as it's your turn, this Vehicle is also a creature.)\nFlying\n{U}{U}{U}: Convert Jetfire, then adapt 3. (If it has no +1/+1 counters on it, put three +1/+1 counters on it.) diff --git a/forge-gui/res/cardsfolder/m/megatron_tyrant_megatron_destructive_force.txt b/forge-gui/res/cardsfolder/m/megatron_tyrant_megatron_destructive_force.txt index 5017ed843ca..de19d707450 100644 --- a/forge-gui/res/cardsfolder/m/megatron_tyrant_megatron_destructive_force.txt +++ b/forge-gui/res/cardsfolder/m/megatron_tyrant_megatron_destructive_force.txt @@ -5,11 +5,11 @@ PT:7/5 K:More Than Meets the Eye:1 R W B S:Mode$ CantBeCast | ValidCard$ Card | Caster$ Opponent | Phases$ BeginCombat->EndCombat | Description$ Your opponents can't cast spells during combat. T:Mode$ Phase | Phase$ Main2 | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigConvert | OptionalDecider$ You | TriggerDescription$ At the beginning of your postcombat main phase, you may convert NICKNAME. If you do, add {C} for each 1 life your opponents have lost this turn. -SVar:TrigConvert:DB$ SetState | Mode$ Convert | RememberChanged$ True | SubAbility$ DBMana +SVar:TrigConvert:DB$ SetState | Mode$ Transform | RememberChanged$ True | SubAbility$ DBMana SVar:DBMana:DB$ Mana | ConditionDefined$ Remembered | ConditionPresent$ Card | Produced$ C | Amount$ X | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Count$LifeOppsLostThisTurn -AlternateMode:Convert +AlternateMode:DoubleFaced Oracle:More Than Meets the Eye {1}{R}{W}{B} (You may cast this card converted for {1}{R}{W}{B}.)\nYour opponents can't cast spells during combat.\nAt the beginning of your postcombat main phase, you may convert Megatron. If you do, add {C} for each 1 life your opponents have lost this turn. ALTERNATE @@ -23,7 +23,7 @@ K:Living metal T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigImmediate | TriggerDescription$ Whenever NICKNAME attacks, you may sacrifice another artifact. When you do, NICKNAME deals damage equal to the sacrificed artifact's mana value to target creature. If excess damage would be dealt to that creature this way, instead that damage is dealt to that creature's controller and you convert NICKNAME. SVar:TrigImmediate:AB$ ImmediateTrigger | Cost$ Sac<1/Artifact.Other/another artifact> | RememberObjects$ Sacrificed | Execute$ TrigDamage | AILogic$ SacForDamage.cmc | TriggerDescription$ When you do, NICKNAME deals damage equal to the sacrificed artifact's mana value to target creature. If excess damage would be dealt to that creature this way, instead that damage is dealt to that creature's controller and you convert NICKNAME. SVar:TrigDamage:DB$ DealDamage | ValidTgts$ Creature | NumDmg$ X | ExcessSVar$ Excess | ExcessDamage$ TargetedController | SubAbility$ DBConvert -SVar:DBConvert:DB$ SetState | ConditionCheckSVar$ Excess | Mode$ Convert +SVar:DBConvert:DB$ SetState | ConditionCheckSVar$ Excess | Mode$ Transform SVar:X:TriggerRemembered$CardManaCost SVar:HasAttackEffect:TRUE DeckHas:Ability$Sacrifice diff --git a/forge-gui/res/cardsfolder/o/optimus_prime_hero_optimus_prime_autobot_leader.txt b/forge-gui/res/cardsfolder/o/optimus_prime_hero_optimus_prime_autobot_leader.txt index f2ee8ebbbf1..29148ccdca2 100644 --- a/forge-gui/res/cardsfolder/o/optimus_prime_hero_optimus_prime_autobot_leader.txt +++ b/forge-gui/res/cardsfolder/o/optimus_prime_hero_optimus_prime_autobot_leader.txt @@ -7,7 +7,7 @@ T:Mode$ Phase | Phase$ End of Turn | TriggerZones$ Battlefield | Execute$ TrigBo SVar:TrigBolster:DB$ PutCounter | Bolster$ True | CounterType$ P1P1 T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigReturn | TriggerDescription$ When NICKNAME dies, return it to the battlefield converted under its owner's control. SVar:TrigReturn:DB$ ChangeZone | Defined$ TriggeredNewCardLKICopy | Origin$ Graveyard | Destination$ Battlefield | Converted$ True -AlternateMode:Convert +AlternateMode:DoubleFaced DeckHas:Ability$Counters Oracle:More Than Meets the Eye {2}{U}{R}{W} (You may cast this card converted for {2}{U}{R}{W}.)\nAt the beginning of each end step, bolster 1. (Choose a creature with the least toughness among creatures you control and put a +1/+1 counter on it.)\nWhen Optimus Prime dies, return it to the battlefield converted under its owner's control. @@ -24,6 +24,6 @@ T:Mode$ AttackersDeclared | AttackingPlayer$ You | TriggerZones$ Battlefield | E SVar:TrigBolster:DB$ PutCounter | Bolster$ True | CounterType$ P1P1 | CounterNum$ 2 | RememberPut$ True | SubAbility$ DBPump SVar:DBPump:DB$ Pump | Defined$ Remembered | KW$ Trample | SubAbility$ DBDelayedTrigger SVar:DBDelayedTrigger:DB$ DelayedTrigger | Mode$ DamageDone | RememberObjects$ Remembered | ValidSource$ Card.IsTriggerRemembered | ValidTarget$ Player | CombatDamage$ True | ThisTurn$ True | Execute$ TrigConvert | TriggerDescription$ When that creature deals combat damage to a player this turn, convert NICKNAME. -SVar:TrigConvert:DB$ SetState | Mode$ Convert | SubAbility$ DBCleanup +SVar:TrigConvert:DB$ SetState | Mode$ Transform | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True Oracle:Living metal (As long as it's your turn, this Vehicle is also a creature.)\nTrample\nWhenever you attack, bolster 2. The chosen creature gains trample until end of turn. When that creature deals combat damage to a player this turn, convert Optimus Prime. diff --git a/forge-gui/res/cardsfolder/r/ratchet_field_medic_ratchet_rescue_racer.txt b/forge-gui/res/cardsfolder/r/ratchet_field_medic_ratchet_rescue_racer.txt index 09d39399162..745bbf017cf 100644 --- a/forge-gui/res/cardsfolder/r/ratchet_field_medic_ratchet_rescue_racer.txt +++ b/forge-gui/res/cardsfolder/r/ratchet_field_medic_ratchet_rescue_racer.txt @@ -4,13 +4,13 @@ Types:Legendary Artifact Creature Robot PT:2/4 K:More Than Meets the Eye:1 W T:Mode$ LifeGained | TriggerZones$ Battlefield | ValidPlayer$ You | OptionalDecider$ You | NoResolvingCheck$ True | Execute$ TrigConvert | TriggerDescription$ Whenever you gain life, you may convert NICKNAME. When you do, return target artifact card with mana value less than or equal to the amount of life you gained this turn from your graveyard to the battlefield tapped. -SVar:TrigConvert:DB$ SetState | Mode$ Convert | SubAbility$ DBImmediateTrig | RememberChanged$ True +SVar:TrigConvert:DB$ SetState | Mode$ Transform | SubAbility$ DBImmediateTrig | RememberChanged$ True SVar:DBImmediateTrig:DB$ ImmediateTrigger | ConditionDefined$ Remembered | ConditionPresent$ Card.Self | ConditionCompare$ GE1 | Execute$ DBReturn | TriggerDescription$ When you do, return target artifact card with mana value less than or equal to the amount of life you gained this turn from your graveyard to the battlefield tapped. SVar:DBReturn:DB$ ChangeZone | ValidTgts$ Artifact.cmcLEX+YouOwn | TgtPrompt$ Select target artifact card with mana value equal or less than the amount of life you gained this turn from your graveyard | Origin$ Graveyard | Destination$ Battlefield | Tapped$ True | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Count$LifeYouGainedThisTurn DeckHas:Ability$LifeGain|Graveyard -AlternateMode:Convert +AlternateMode:DoubleFaced Oracle:More Than Meets the Eye {1}{W} (You may cast this card converted for {1}{W}.)\nLifelink\nWhenever you gain life, you may convert Ratchet. When you do, return target artifact card with mana value less than or equal to the amount of life you gained this turn from your graveyard to the battlefield tapped. ALTERNATE @@ -23,7 +23,7 @@ PT:1/4 K:Living metal K:Lifelink T:Mode$ ChangesZoneAll | ValidCards$ Artifact.YouCtrl+nonToken | Origin$ Battlefield | Destination$ Graveyard | TriggerZones$ Battlefield | ActivationLimit$ 1 | Execute$ TrigConvert | TriggerDescription$ Whenever one or more nontoken artifacts you control are put into a graveyard from the battlefield, convert NICKNAME. This ability triggers only once each turn. -SVar:TrigConvert:DB$ SetState | Mode$ Convert +SVar:TrigConvert:DB$ SetState | Mode$ Transform DeckHas:Ability$LifeGain DeckHints:Type$Artifact Oracle:Living metal (As long as it's your turn, this Vehicle is also a creature.)\nLifelink\nWhenever one or more nontoken artifacts you control are put into a graveyard from the battlefield, convert Ratchet. This ability triggers only once each turn. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/s/slicer_hired_muscle_slicer_high_speed_antagonist.txt b/forge-gui/res/cardsfolder/s/slicer_hired_muscle_slicer_high_speed_antagonist.txt index 8f556579fde..47bc5d3caf6 100644 --- a/forge-gui/res/cardsfolder/s/slicer_hired_muscle_slicer_high_speed_antagonist.txt +++ b/forge-gui/res/cardsfolder/s/slicer_hired_muscle_slicer_high_speed_antagonist.txt @@ -10,9 +10,9 @@ SVar:TrigGainControl:DB$ GainControl | Optional$ True | NewController$ Triggered SVar:DBGoad:DB$ Goad | Defined$ Remembered | SubAbility$ DBEffect SVar:DBEffect:DB$ Effect | RememberObjects$ Remembered | ForgetOnMoved$ Battlefield | EffectOwner$ TriggeredPlayer | StaticAbilities$ CantSac | SubAbility$ DBConvert SVar:CantSac:Mode$ CantSacrifice | ValidCard$ Card.IsRemembered | Description$ EFFECTSOURCE can't be sacrificed this turn. -SVar:DBConvert:DB$ SetState | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ EQ0 | Mode$ Convert | SubAbility$ DBCleanup +SVar:DBConvert:DB$ SetState | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ EQ0 | Mode$ Transform | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True -AlternateMode:Convert +AlternateMode:DoubleFaced Oracle:More Than Meets the Eye {2}{R} (You may cast this card converted for {2}{R}.)\nDouble strike, haste\nAt the beginning of each opponent's upkeep, you may have that player gain control of Slicer until end of turn. If you do, untap Slicer, goad it, and it can't be sacrificed this turn. If you don't, convert it. ALTERNATE @@ -27,5 +27,5 @@ K:First Strike K:Haste T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | TriggerZones$ Battlefield | CombatDamage$ True | Execute$ TrigDelTrig | TriggerDescription$ Whenever NICKNAME deals combat damage to a player, convert it at end of combat. SVar:TrigDelTrig:DB$ DelayedTrigger | Mode$ Phase | Phase$ EndCombat | ValidPlayer$ Player | Execute$ TrigConvert | TriggerDescription$ Convert NICKNAME at end of combat. -SVar:TrigConvert:DB$ SetState | Mode$ Convert +SVar:TrigConvert:DB$ SetState | Mode$ Transform Oracle:Living metal (As long as it's your turn, this Vehicle is also a creature.)\nFirst strike, haste\nWhenever Slicer deals combat damage to a player, convert it at end of combat. diff --git a/forge-gui/res/cardsfolder/s/soundwave_sonic_spy_soundwave_superior_captain.txt b/forge-gui/res/cardsfolder/s/soundwave_sonic_spy_soundwave_superior_captain.txt index 06664308715..67c06b1151e 100644 --- a/forge-gui/res/cardsfolder/s/soundwave_sonic_spy_soundwave_superior_captain.txt +++ b/forge-gui/res/cardsfolder/s/soundwave_sonic_spy_soundwave_superior_captain.txt @@ -6,10 +6,10 @@ K:More Than Meets the Eye:2 W U B T:Mode$ DamageDoneOnce | CombatDamage$ True | ValidSource$ Creature.token+YouCtrl | TriggerZones$ Battlefield | ValidTarget$ Player | Execute$ TrigCast | TriggerDescription$ Whenever one or more creature tokens you control deal combat damage to a player, exile target instant or sorcery card with mana value equal to the damage dealt from their graveyard. Copy it. You may cast the copy without paying its mana cost. If you do, convert NICKNAME. SVar:TrigCast:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | TgtPrompt$ Choose target instant or sorcery card in that player's graveyard | ValidTgts$ Instant.cmcEQX+OwnedBy TriggeredTarget,Sorcery.cmcEQX+OwnedBy TriggeredTarget | RememberChanged$ True | SubAbility$ DBPlay SVar:DBPlay:DB$ Play | Valid$ Card.IsRemembered | ValidZone$ Exile | Controller$ You | CopyCard$ True | WithoutManaCost$ True | ValidSA$ Spell | Optional$ True | ImprintPlayed$ True | SubAbility$ DBConvert -SVar:DBConvert:DB$ SetState | Mode$ Convert | ConditionDefined$ Imprinted | ConditionPresent$ Card | ConditionCompare$ EQ1 | SubAbility$ DBCleanup +SVar:DBConvert:DB$ SetState | Mode$ Transform | ConditionDefined$ Imprinted | ConditionPresent$ Card | ConditionCompare$ EQ1 | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearImprinted$ True | ClearRemembered$ True SVar:X:TriggerCount$DamageAmount -AlternateMode:Convert +AlternateMode:DoubleFaced DeckHas:Ability$Graveyard DeckHints:Type$Instant|Sorcery DeckNeeds:Ability$Token @@ -22,10 +22,10 @@ ManaCost:no cost Colors:white,blue,black Types:Legendary Artifact T:Mode$ SpellCast | ValidCard$ Card.cmcOdd | ValidActivatingPlayer$ You | Execute$ TrigConvertRavage | TriggerZones$ Battlefield | TriggerDescription$ Whenever you cast a spell with an odd mana value, convert NICKNAME. If you do, create Ravage, a legendary 3/3 black Robot artifact creature token with menace and deathtouch. -SVar:TrigConvertRavage:DB$ SetState | Mode$ Convert | RememberChanged$ True | SubAbility$ DBTokenRavage +SVar:TrigConvertRavage:DB$ SetState | Mode$ Transform | RememberChanged$ True | SubAbility$ DBTokenRavage SVar:DBTokenRavage:DB$ Token | TokenScript$ ravage | ConditionDefined$ Remembered | ConditionPresent$ Card.Self | ConditionCompare$ GE1 | SubAbility$ DBCleanup T:Mode$ SpellCast | ValidCard$ Card.cmcEven | ValidActivatingPlayer$ You | Execute$ TrigConvertLaserbeak | TriggerZones$ Battlefield | TriggerDescription$ Whenever you cast a spell with an even mana value, convert NICKNAME. If you do, create Laserbeak, a legendary 2/2 blue Robot artifact creature token with flying and hexproof. -SVar:TrigConvertLaserbeak:DB$ SetState | Mode$ Convert | RememberChanged$ True | SubAbility$ DBTokenLaserbeak +SVar:TrigConvertLaserbeak:DB$ SetState | Mode$ Transform | RememberChanged$ True | SubAbility$ DBTokenLaserbeak SVar:DBTokenLaserbeak:DB$ Token | TokenScript$ laserbeak | ConditionDefined$ Remembered | ConditionPresent$ Card.Self | ConditionCompare$ GE1 | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True DeckHas:Ability$Token & Keyword$Flying|Hexproof|Menace|Deathtouch diff --git a/forge-gui/res/cardsfolder/s/starscream_power_hungry_starscream_seeker_leader.txt b/forge-gui/res/cardsfolder/s/starscream_power_hungry_starscream_seeker_leader.txt index ff4b1fe55de..0c9ae8526f2 100644 --- a/forge-gui/res/cardsfolder/s/starscream_power_hungry_starscream_seeker_leader.txt +++ b/forge-gui/res/cardsfolder/s/starscream_power_hungry_starscream_seeker_leader.txt @@ -7,8 +7,8 @@ K:Flying T:Mode$ Drawn | ValidCard$ Card.YouCtrl | Condition$ Monarch | TriggerZones$ Battlefield | Execute$ TrigDrain | TriggerDescription$ Whenever you draw a card, if you're the monarch, target opponent loses 2 life. SVar:TrigDrain:DB$ LoseLife | ValidTgts$ Opponent | LifeAmount$ 2 T:Mode$ DamageDoneOnce | ValidSource$ Creature | TriggerZones$ Battlefield | ValidTarget$ You | CombatDamage$ True | Execute$ TrigConvert | TriggerDescription$ Whenever one or more creatures deal combat damage to you, convert NICKNAME. -SVar:TrigConvert:DB$ SetState | Mode$ Convert -AlternateMode:Convert +SVar:TrigConvert:DB$ SetState | Mode$ Transform +AlternateMode:DoubleFaced Oracle:More Than Meets the Eye {2}{B} (You may cast this card converted for {2}{B}.)\nFlying\nWhenever you draw a card, if you're the monarch, target opponent loses 2 life.\nWhenever one or more creatures deal combat damage to you, convert Starscream. ALTERNATE @@ -25,6 +25,6 @@ K:Haste T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CheckSVar$ Monarch | SVarCompare$ EQ0 | CombatDamage$ True | Execute$ TrigMonarch | TriggerZones$ Battlefield | TriggerDescription$ Whenever NICKNAME deals combat damage to a player, if there is no monarch, that player becomes the monarch. SVar:TrigMonarch:DB$ BecomeMonarch | Defined$ TriggeredTarget T:Mode$ BecomeMonarch | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigConvert | TriggerDescription$ Whenever you become the monarch, convert NICKNAME. -SVar:TrigConvert:DB$ SetState | Mode$ Convert +SVar:TrigConvert:DB$ SetState | Mode$ Transform SVar:Monarch:PlayerCountPlayers$HasPropertyisMonarch Oracle:Living metal (As long as it's your turn, this Vehicle is also a creature.)\nFlying, menace, haste\nWhenever Starscream deals combat damage to a player, if there is no monarch, that player becomes the monarch.\nWhenever you become the monarch, convert Starscream. diff --git a/forge-gui/res/cardsfolder/u/ultra_magnus_tactician_ultra_magnus_armored_carrier.txt b/forge-gui/res/cardsfolder/u/ultra_magnus_tactician_ultra_magnus_armored_carrier.txt index ee968b26e16..e2776172efb 100644 --- a/forge-gui/res/cardsfolder/u/ultra_magnus_tactician_ultra_magnus_armored_carrier.txt +++ b/forge-gui/res/cardsfolder/u/ultra_magnus_tactician_ultra_magnus_armored_carrier.txt @@ -7,10 +7,10 @@ K:Ward:2 T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigChange | TriggerZones$ Battlefield | OptionalDecider$ You | TriggerDescription$ Whenever NICKNAME attacks, you may put an artifact creature card from your hand onto the battlefield tapped and attacking. If you do, convert NICKNAME at end of combat. SVar:TrigChange:DB$ ChangeZone | Origin$ Hand | Destination$ Battlefield | ChangeType$ Artifact.Creature | Tapped$ True | Attacking$ True | RememberChanged$ True | SubAbility$ DBDelayedTrigger SVar:DBDelayedTrigger:DB$ DelayedTrigger | ConditionDefined$ Remembered | ConditionPresent$ Card | Mode$ Phase | Phase$ EndCombat | ValidPlayer$ Player | Execute$ TrigConvert | SubAbility$ DBCleanup | TriggerDescription$ If you do, convert NICKNAME at end of combat. -SVar:TrigConvert:DB$ SetState | Mode$ Convert +SVar:TrigConvert:DB$ SetState | Mode$ Transform SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:HasAttackEffect:TRUE -AlternateMode:Convert +AlternateMode:DoubleFaced Oracle:More Than Meets the Eye {2}{R}{G}{W} (You may cast this card converted for {2}{R}{G}{W}.)\nWard {2}\nWhenever Ultra Magnus attacks, you may put an artifact creature card from your hand onto the battlefield tapped and attacking. If you do, convert Ultra Magnus at end of combat. ALTERNATE @@ -24,7 +24,7 @@ K:Living metal K:Haste T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPump | TriggerZones$ Battlefield | TriggerDescription$ Formidable — Whenever NICKNAME attacks, attacking creatures you control gain indestructible until end of turn. If those creatures have total power 8 or greater, convert NICKNAME. SVar:TrigPump:DB$ PumpAll | ValidCards$ Creature.attacking+YouCtrl | KW$ Indestructible | SubAbility$ DBConvert -SVar:DBConvert:DB$ SetState | Mode$ Convert | ConditionCheckSVar$ FormidableTest | ConditionSVarCompare$ GE8 +SVar:DBConvert:DB$ SetState | Mode$ Transform | ConditionCheckSVar$ FormidableTest | ConditionSVarCompare$ GE8 SVar:FormidableTest:Count$SumPower_Creature.attacking+YouCtrl SVar:HasAttackEffect:TRUE Oracle:Living metal (As long as it's your turn, this Vehicle is also a creature.)\nHaste\nFormidable — Whenever Ultra Magnus attacks, attacking creatures you control gain indestructible until end of turn. If those creatures have total power 8 or greater, convert Ultra Magnus. diff --git a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java index 2d9bcb4f7f7..8d82c930d4d 100644 --- a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java +++ b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java @@ -2794,8 +2794,7 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont if (!forgeCard.getName().equals(f.getName())) { forgeCard.changeToState(forgeCard.getRules().getSplitType().getChangedStateName()); if (forgeCard.getCurrentStateName().equals(CardStateName.Transformed) || - forgeCard.getCurrentStateName().equals(CardStateName.Modal) || - forgeCard.getCurrentStateName().equals(CardStateName.Converted)) { + forgeCard.getCurrentStateName().equals(CardStateName.Modal)) { forgeCard.setBackSide(true); } }