Compare commits

...

10 Commits

Author SHA1 Message Date
tool4ever
bf5329aa68 Update fluxcharger.txt 2025-03-12 09:57:24 +01:00
Hans Mackowiak
878d991a69 Update twisted_reflection.txt 2025-03-12 09:57:24 +01:00
Hans Mackowiak
c6a0a9d52f Update twisted_image.txt 2025-03-12 09:57:24 +01:00
Hans Mackowiak
e13fb98018 Update mangled_soulrager.txt 2025-03-12 09:57:24 +01:00
Hans Mackowiak
1f7776d4ad Update inversion_behemoth.txt 2025-03-12 09:57:24 +01:00
Hans Mackowiak
503d789126 Update reverse_the_polarity.txt 2025-03-12 09:57:24 +01:00
Hans Mackowiak
03021f8b05 ~ removed Unswitched PT methods 2025-03-12 09:57:24 +01:00
Hans Mackowiak
529dbd532a PumpAi: check if creature would die through damage and check for regeneration 2025-03-12 09:57:24 +01:00
Hans Mackowiak
9d73f68239 first logic fo SwitchPT to kill opponent creatures 2025-03-12 09:57:24 +01:00
Hans Mackowiak
ac0087a2ef Card: add Table for SwitchPT 2025-03-12 09:57:24 +01:00
32 changed files with 179 additions and 103 deletions

View File

@@ -1735,6 +1735,11 @@ public class ComputerUtilCard {
pumped.setPTBoost(c.getPTBoostTable());
pumped.addPTBoost(power + berserkPower, toughness, timestamp, 0);
pumped.setSwitchPTTable(c.getSwitchPTTable());
if (sa.hasParam("SwitchPT")) {
pumped.addSwitchPT(timestamp, 0);
}
if (!kws.isEmpty()) {
pumped.addChangedCardKeywords(kws, null, false, timestamp, null, false);
}

View File

@@ -4,6 +4,7 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import forge.ai.*;
import forge.game.Game;
import forge.game.ability.AbilityKey;
import forge.game.ability.AbilityUtils;
import forge.game.ability.ApiType;
import forge.game.card.*;
@@ -14,6 +15,9 @@ import forge.game.phase.PhaseHandler;
import forge.game.phase.PhaseType;
import forge.game.player.Player;
import forge.game.player.PlayerActionConfirmMode;
import forge.game.replacement.ReplacementEffect;
import forge.game.replacement.ReplacementLayer;
import forge.game.replacement.ReplacementType;
import forge.game.spellability.SpellAbility;
import forge.game.spellability.TargetRestrictions;
import forge.game.zone.ZoneType;
@@ -57,12 +61,6 @@ public class PumpAi extends PumpAiBase {
return SpecialAiLogic.doAristocratLogic(ai, sa);
} else if (aiLogic.startsWith("AristocratCounters")) {
return SpecialAiLogic.doAristocratWithCountersLogic(ai, sa);
} else if (aiLogic.equals("SwitchPT")) {
// Some more AI would be even better, but this is a good start to prevent spamming
if (sa.isActivatedAbility() && sa.getActivationsThisTurn() > 0 && !sa.usesTargeting()) {
// Will prevent flipping back and forth
return false;
}
}
return super.checkAiLogic(ai, sa, aiLogic);
@@ -83,11 +81,6 @@ public class PumpAi extends PumpAiBase {
if (!ph.is(PhaseType.COMBAT_DECLARE_BLOCKERS) && !isThreatened) {
return false;
}
} else if (logic.equals("SwitchPT")) {
// Some more AI would be even better, but this is a good start to prevent spamming
if (ph.getPhase().isAfter(PhaseType.COMBAT_FIRST_STRIKE_DAMAGE) || !ph.inCombat()) {
return false;
}
}
return super.checkPhaseRestrictions(ai, sa, ph);
}
@@ -104,6 +97,12 @@ public class PumpAi extends PumpAiBase {
return false;
}
}
if (sa.hasParam("SwitchPT")) {
// Some more AI would be even better, but this is a good start to prevent spamming
if (ph.getPhase().isAfter(PhaseType.COMBAT_FIRST_STRIKE_DAMAGE) || !ph.inCombat()) {
return false;
}
}
if (game.getStack().isEmpty() && (ph.getPhase().isBefore(PhaseType.COMBAT_BEGIN)
|| ph.getPhase().isAfter(PhaseType.COMBAT_DECLARE_BLOCKERS))) {
// Instant-speed pumps should not be cast outside of combat when the
@@ -248,6 +247,14 @@ public class PumpAi extends PumpAiBase {
}
}
if (sa.hasParam("SwitchPT")) {
// Some more AI would be even better, but this is a good start to prevent spamming
if (sa.isActivatedAbility() && sa.getActivationsThisTurn() > 0 && !sa.usesTargeting()) {
// Will prevent flipping back and forth
return false;
}
}
if (ComputerUtil.preventRunAwayActivations(sa)) {
return false;
}
@@ -356,7 +363,7 @@ public class PumpAi extends PumpAiBase {
} // pumpPlayAI()
private boolean pumpTgtAI(final Player ai, final SpellAbility sa, final int defense, final int attack, final boolean mandatory,
boolean immediately) {
boolean immediately) {
final List<String> keywords = sa.hasParam("KW") ? Arrays.asList(sa.getParam("KW").split(" & "))
: Lists.newArrayList();
final Game game = ai.getGame();
@@ -466,6 +473,65 @@ public class PumpAi extends PumpAiBase {
}
}
if (sa.hasParam("SwitchPT")) {
// Logic to kill opponent creatures
CardCollection oppCreatures = CardLists.getTargetableCards(ai.getOpponents().getCreaturesInPlay(), sa);
if (!oppCreatures.isEmpty()) {
CardCollection oppCreaturesFiltered = CardLists.filter(oppCreatures, card -> {
// don't care about useless creatures
if (ComputerUtilCard.isUselessCreature(ai, card)
|| card.hasSVar("EndOfTurnLeavePlay")) {
return false;
}
// dies by target
if (card.getSVar("Targeting").equals("Dies")) {
return true;
}
// dies by state based action
if (card.getNetPower() <= 0) {
return true;
}
if (card.hasKeyword(Keyword.INDESTRUCTIBLE)) {
return false;
}
// check if switching PT causes it to be lethal
Card lki = CardCopyService.getLKICopy(card);
lki.addSwitchPT(-1, 0);
// check if creature could regenerate
Map<AbilityKey, Object> runParams = AbilityKey.mapFromAffected(card);
runParams.put(AbilityKey.Regeneration, true);
List<ReplacementEffect> repDestoryList = game.getReplacementHandler().getReplacementList(ReplacementType.Destroy, runParams, ReplacementLayer.Other);
// non-Regeneration one like Totem-Armor
// should do it anyway to destroy the aura?
if (repDestoryList.stream().anyMatch(r -> !r.hasParam("Regeneration"))) {
return false;
}
// TODO make it force to use regen?
// should check phase and make it before combat damage or better before blocker?
if (repDestoryList.stream().anyMatch(r -> r.hasParam("Regeneration")) && card.canBeShielded()) {
return false;
}
// maybe do it anyway to reduce its power?
if (card.getLethal() - card.getDamage() > 0) {
return false;
}
return true;
});
// the ones that die by switching PT
if (!oppCreaturesFiltered.isEmpty()) {
Card best = ComputerUtilCard.getBestCreatureAI(oppCreaturesFiltered);
if (best != null) {
sa.getTargets().add(best);
return true;
}
}
}
return false;
}
if (sa.isCurse()) {
for (final Player opp : ai.getOpponents()) {
if (sa.canTarget(opp)) {

View File

@@ -356,6 +356,7 @@ public class GameCopier {
newCard.setPTCharacterDefiningTable(c.getSetPTCharacterDefiningTable());
newCard.setPTBoost(c.getPTBoostTable());
newCard.setSwitchPTTable(c.getSwitchPTTable());
// TODO copy by map
newCard.setDamage(c.getDamage());
newCard.setDamageReceivedThisTurn(c.getDamageReceivedThisTurn());

View File

@@ -45,7 +45,11 @@ public class PumpAllEffect extends SpellAbilityEffect {
continue;
}
boolean redrawPT = false;
boolean redrawPT = sa.hasParam("SwitchPT");
if (sa.hasParam("SwitchPT")) {
tgtC.addSwitchPT(timestamp, 0);
}
if (a != 0 || d != 0) {
if (perpetual) {
@@ -89,6 +93,7 @@ public class PumpAllEffect extends SpellAbilityEffect {
@Override
public void run() {
tgtC.removeSwitchPT(timestamp, 0);
tgtC.removePTBoost(timestamp, 0);
tgtC.removeChangedCardKeywords(timestamp, 0);
tgtC.removeHiddenExtrinsicKeywords(timestamp, 0);

View File

@@ -47,16 +47,19 @@ public class PumpEffect extends SpellAbilityEffect {
final List<String> kws = Lists.newArrayList();
final List<String> hiddenKws = Lists.newArrayList();
boolean redrawPT = false;
boolean redrawPT = sa.hasParam("SwitchPT");
for (String kw : keywords) {
if (kw.startsWith("HIDDEN")) {
hiddenKws.add(kw.substring(7));
redrawPT |= kw.contains("CARDNAME's power and toughness are switched");
} else {
kws.add(kw);
}
}
if (sa.hasParam("SwitchPT")) {
gameCard.addSwitchPT(timestamp, 0);
}
if (a != 0 || d != 0) {
if (perpetual) {
Map <String, Object> params = new HashMap<>();
@@ -113,6 +116,7 @@ public class PumpEffect extends SpellAbilityEffect {
host.removeGainControlTargets(gameCard);
gameCard.removePTBoost(timestamp, 0);
gameCard.removeSwitchPT(timestamp, 0);
boolean updateText = gameCard.removeCanBlockAny(timestamp);
updateText |= gameCard.removeCanBlockAdditional(timestamp);

View File

@@ -265,6 +265,7 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars, ITr
private Table<Long, Long, Pair<Integer,Integer>> newPTCharacterDefining = TreeBasedTable.create(); // Layer 7a
private Table<Long, Long, Pair<Integer,Integer>> newPT = TreeBasedTable.create(); // Layer 7b
private Table<Long, Long, Pair<Integer,Integer>> boostPT = TreeBasedTable.create(); // Layer 7c
private Table<Long, Long, Boolean> switchPT = TreeBasedTable.create(); // Layer 7d
private CardDamageHistory damageHistory = new CardDamageHistory();
private final Map<Card, Integer> assignedDamageMap = Maps.newTreeMap();
@@ -4623,36 +4624,6 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars, ITr
return total;
}
public final StatBreakdown getUnswitchedPowerBreakdown() {
// 208.3 A noncreature permanent has no power or toughness
if (isInPlay() && !isCreature()) {
return new StatBreakdown();
}
return new StatBreakdown(getCurrentPower(), getTempPowerBoost(), getPowerBonusFromCounters());
}
public final int getUnswitchedPower() {
return getUnswitchedPowerBreakdown().getTotal();
}
public final int getPowerBonusFromCounters() {
return getCounters(CounterEnumType.P1P1) + getCounters(CounterEnumType.P1P2) + getCounters(CounterEnumType.P1P0)
- getCounters(CounterEnumType.M1M1) + 2 * getCounters(CounterEnumType.P2P2) - 2 * getCounters(CounterEnumType.M2M1)
- 2 * getCounters(CounterEnumType.M2M2) - getCounters(CounterEnumType.M1M0) + 2 * getCounters(CounterEnumType.P2P0);
}
public final StatBreakdown getNetPowerBreakdown() {
if (getAmountOfKeyword("CARDNAME's power and toughness are switched") % 2 != 0) {
return getUnswitchedToughnessBreakdown();
}
return getUnswitchedPowerBreakdown();
}
public final int getNetPower() {
if (getAmountOfKeyword("CARDNAME's power and toughness are switched") % 2 != 0) {
return getUnswitchedToughness();
}
return getUnswitchedPower();
}
public final int getCurrentToughness() {
int total = getBaseToughness();
for (Pair<Integer, Integer> p : getPTIterable()) {
@@ -4686,6 +4657,33 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars, ITr
}
}
public final StatBreakdown getUnswitchedPowerBreakdown() {
// 208.3 A noncreature permanent has no power or toughness
if (isInPlay() && !isCreature()) {
return new StatBreakdown();
}
return new StatBreakdown(getCurrentPower(), getTempPowerBoost(), getPowerBonusFromCounters());
}
public final int getPowerBonusFromCounters() {
if (!hasCounters()) {
return 0;
}
return getCounters(CounterEnumType.P1P1) + getCounters(CounterEnumType.P1P2) + getCounters(CounterEnumType.P1P0)
- getCounters(CounterEnumType.M1M1) + 2 * getCounters(CounterEnumType.P2P2) - 2 * getCounters(CounterEnumType.M2M1)
- 2 * getCounters(CounterEnumType.M2M2) - getCounters(CounterEnumType.M1M0) + 2 * getCounters(CounterEnumType.P2P0);
}
public final StatBreakdown getNetPowerBreakdown() {
if (isSwitchPT()) {
return getUnswitchedToughnessBreakdown();
}
return getUnswitchedPowerBreakdown();
}
public final int getNetPower() {
return getNetPowerBreakdown().getTotal();
}
public final StatBreakdown getUnswitchedToughnessBreakdown() {
// 208.3 A noncreature permanent has no power or toughness
if (isInPlay() && !isCreature()) {
@@ -4693,11 +4691,11 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars, ITr
}
return new StatBreakdown(getCurrentToughness(), getTempToughnessBoost(), getToughnessBonusFromCounters());
}
public final int getUnswitchedToughness() {
return getUnswitchedToughnessBreakdown().getTotal();
}
public final int getToughnessBonusFromCounters() {
if (!hasCounters()) {
return 0;
}
return getCounters(CounterEnumType.P1P1) + 2 * getCounters(CounterEnumType.P1P2) - getCounters(CounterEnumType.M1M1)
+ getCounters(CounterEnumType.P0P1) - 2 * getCounters(CounterEnumType.M0M2) + 2 * getCounters(CounterEnumType.P2P2)
- getCounters(CounterEnumType.M0M1) - getCounters(CounterEnumType.M2M1) - 2 * getCounters(CounterEnumType.M2M2)
@@ -4705,7 +4703,7 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars, ITr
}
public final StatBreakdown getNetToughnessBreakdown() {
if (getAmountOfKeyword("CARDNAME's power and toughness are switched") % 2 != 0) {
if (isSwitchPT()) {
return getUnswitchedPowerBreakdown();
}
return getUnswitchedToughnessBreakdown();
@@ -4729,26 +4727,14 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars, ITr
// for cards like Giant Growth, etc.
public final int getTempPowerBoost() {
int result = 0;
for (Pair<Integer, Integer> pair : boostPT.values()) {
if (pair.getLeft() != null) {
result += pair.getLeft();
}
}
return result;
return boostPT.values().stream().mapToInt(Pair::getLeft).sum();
}
public final int getTempToughnessBoost() {
int result = 0;
for (Pair<Integer, Integer> pair : boostPT.values()) {
if (pair.getRight() != null) {
result += pair.getRight();
}
}
return result;
return boostPT.values().stream().mapToInt(Pair::getRight).sum();
}
public void addPTBoost(final Integer power, final Integer toughness, final long timestamp, final long staticId) {
public void addPTBoost(final int power, final int toughness, final long timestamp, final long staticId) {
boostPT.put(timestamp, staticId, Pair.of(power, toughness));
}
@@ -4856,6 +4842,26 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars, ITr
}
}
public boolean isSwitchPT() {
return switchPT.values().size() % 2 != 0;
}
public void addSwitchPT(final long timestamp, final long staticId) {
switchPT.put(timestamp, staticId, Boolean.TRUE);
}
public void removeSwitchPT(final long timestamp, final long staticId) {
switchPT.remove(timestamp, staticId);
}
public Table<Long, Long, Boolean> getSwitchPTTable() {
return ImmutableTable.copyOf(switchPT);
}
public void setSwitchPTTable(Table<Long, Long, Boolean> table) {
switchPT.clear();
switchPT.putAll(table);
}
public final boolean isUntapped() {
return !tapped;
}

View File

@@ -301,6 +301,7 @@ public class CardCopyService {
// extra copy PT boost
newCopy.setPTBoost(copyFrom.getPTBoostTable());
newCopy.setSwitchPTTable(copyFrom.getSwitchPTTable());
newCopy.setCounters(Maps.newHashMap(copyFrom.getCounters()));

View File

@@ -1,6 +1,5 @@
Name:About Face
ManaCost:R
Types:Instant
A:SP$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ HIDDEN CARDNAME's power and toughness are switched | SpellDescription$ Switch target creature's power and toughness until end of turn.
AI:RemoveDeck:All
A:SP$ Pump | ValidTgts$ Creature | SwitchPT$ True | SpellDescription$ Switch target creature's power and toughness until end of turn.
Oracle:Switch target creature's power and toughness until end of turn.

View File

@@ -3,5 +3,5 @@ ManaCost:3 U
Types:Creature Elemental Beast
PT:2/4
K:Flying
A:AB$ Pump | Cost$ Discard<1/Card> | Defined$ Self | AILogic$ SwitchPT | KW$ HIDDEN CARDNAME's power and toughness are switched | SpellDescription$ Switch CARDNAME's power and toughness until end of turn.
A:AB$ Pump | Cost$ Discard<1/Card> | Defined$ Self | SwitchPT$ True | SpellDescription$ Switch CARDNAME's power and toughness until end of turn.
Oracle:Flying\nDiscard a card: Switch Aeromoeba's power and toughness until end of turn.

View File

@@ -2,6 +2,5 @@ Name:Aquamoeba
ManaCost:1 U
Types:Creature Elemental Beast
PT:1/3
A:AB$ Pump | Cost$ Discard<1/Card> | Defined$ Self | AILogic$ SwitchPT | KW$ HIDDEN CARDNAME's power and toughness are switched | SpellDescription$ Switch CARDNAME's power and toughness until end of turn.
AI:RemoveDeck:All
A:AB$ Pump | Cost$ Discard<1/Card> | Defined$ Self | SwitchPT$ True | SpellDescription$ Switch CARDNAME's power and toughness until end of turn.
Oracle:Discard a card: Switch Aquamoeba's power and toughness until end of turn.

View File

@@ -4,6 +4,5 @@ Types:Creature Turtle
PT:1/4
K:Shroud
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Land.YouCtrl | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigPump | TriggerDescription$ Landfall — Whenever a land you control enters, you may switch CARDNAME power and toughness until end of turn.
SVar:TrigPump:DB$ Pump | Defined$ Self | KW$ HIDDEN CARDNAME's power and toughness are switched
AI:RemoveDeck:All
SVar:TrigPump:DB$ Pump | Defined$ Self | SwitchPT$ True
Oracle:Shroud (This creature can't be the target of spells or abilities.)\nLandfall — Whenever a land you control enters, you may switch Calcite Snapper's power and toughness until end of turn.

View File

@@ -2,6 +2,6 @@ Name:Crag Puca
ManaCost:UR UR UR
Types:Creature Shapeshifter
PT:2/4
A:AB$ Pump | Cost$ UR | Defined$ Self | AILogic$ SwitchPT | KW$ HIDDEN CARDNAME's power and toughness are switched | SpellDescription$ Switch CARDNAME's power and toughness until end of turn.
A:AB$ Pump | Cost$ UR | Defined$ Self | SwitchPT$ True | SpellDescription$ Switch CARDNAME's power and toughness until end of turn.
AI:RemoveDeck:All
Oracle:{U/R}: Switch Crag Puca's power and toughness until end of turn.

View File

@@ -5,6 +5,5 @@ PT:3/1
K:Flash
K:Flying
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigPump | TriggerDescription$ When CARDNAME enters, switch target creature's power and toughness until end of turn.
SVar:TrigPump:DB$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ HIDDEN CARDNAME's power and toughness are switched
AI:RemoveDeck:All
SVar:TrigPump:DB$ Pump | ValidTgts$ Creature | SwitchPT$ True
Oracle:Flash\nFlying\nWhen Crookclaw Transmuter enters, switch target creature's power and toughness until end of turn.

View File

@@ -2,6 +2,6 @@ Name:Dwarven Thaumaturgist
ManaCost:2 R
Types:Creature Dwarf Shaman
PT:1/2
A:AB$ Pump | Cost$ T | ValidTgts$ Creature | KW$ HIDDEN CARDNAME's power and toughness are switched | TgtPrompt$ Select target creature. | SpellDescription$ Switch target creature's power and toughness until end of turn.
A:AB$ Pump | Cost$ T | ValidTgts$ Creature | SwitchPT$ True | SpellDescription$ Switch target creature's power and toughness until end of turn.
AI:RemoveDeck:All
Oracle:{T}: Switch target creature's power and toughness until end of turn.

View File

@@ -3,8 +3,7 @@ ManaCost:2 U R
Types:Creature Weird
PT:1/5
K:Flying
T:Mode$ SpellCast | ValidCard$ Instant,Sorcery | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigChangePT | OptionalDecider$ You | TriggerDescription$ Whenever you cast a instant or sorcery spell, you may switch CARDNAME's power and toughness until end of turn.
SVar:TrigChangePT:DB$ Pump | KW$ HIDDEN CARDNAME's power and toughness are switched | Defined$ Self
AI:RemoveDeck:All
T:Mode$ SpellCast | ValidCard$ Instant,Sorcery | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigChangePT | OptionalDecider$ You | TriggerDescription$ Whenever you cast an instant or sorcery spell, you may switch CARDNAME's power and toughness until end of turn.
SVar:TrigChangePT:DB$ Pump | Defined$ Self | SwitchPT$ True
DeckHints:Type$Instant|Sorcery
Oracle:Flying\nWhenever you cast an instant or sorcery spell, you may switch Fluxcharger's power and toughness until end of turn.

View File

@@ -1,7 +1,6 @@
Name:Inside Out
ManaCost:1 UR
Types:Instant
A:SP$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ HIDDEN CARDNAME's power and toughness are switched | SpellDescription$ Switch target creature's power and toughness until end of turn. | SubAbility$ DBDraw
A:SP$ Pump | ValidTgts$ Creature | SwitchPT$ True | SubAbility$ DBDraw | SpellDescription$ Switch target creature's power and toughness until end of turn.
SVar:DBDraw:DB$ Draw | NumCards$ 1 | SpellDescription$ Draw a card.
AI:RemoveDeck:All
Oracle:Switch target creature's power and toughness until end of turn.\nDraw a card.

View File

@@ -3,6 +3,6 @@ ManaCost:2 C C
Types:Creature Eldrazi
PT:2/9
T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ At the beginning of combat on your turn, switch the power and toughness of each of any number of target creatures until end of turn.
SVar:TrigPump:DB$ Pump | ValidTgts$ Creature | TargetMin$ 0 | TargetMax$ X | TgtPrompt$ Select any number of target creatures | KW$ HIDDEN CARDNAME's power and toughness are switched
SVar:TrigPump:DB$ Pump | ValidTgts$ Creature | TargetMin$ 0 | TargetMax$ X | TgtPrompt$ Select any number of target creatures | SwitchPT$ True
SVar:X:Count$Valid Creature
Oracle:At the beginning of combat on your turn, switch the power and toughness of each of any number of target creatures until end of turn.

View File

@@ -1,7 +1,7 @@
Name:Invert
ManaCost:UR
Types:Instant
A:SP$ Pump | ValidTgts$ Creature | TargetMin$ 0 | TargetMax$ 2 | TgtPrompt$ Select target creature | KW$ HIDDEN CARDNAME's power and toughness are switched | SpellDescription$ Switch the power and toughness of each of up to two target creatures until end of turn.
A:SP$ Pump | ValidTgts$ Creature | TargetMin$ 0 | TargetMax$ 2 | SwitchPT$ True | SpellDescription$ Switch the power and toughness of each of up to two target creatures until end of turn.
AlternateMode:Split
Oracle:Switch the power and toughness of each of up to two target creatures until end of turn.

View File

@@ -5,8 +5,8 @@ PT:1/4
K:Flying
K:Cycling:1 U
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPump | TriggerDescription$ When CARDNAME enters, switch the power and toughness of each creature on the battlefield. You get a twelve-time boon with "Whenever a creature you control enters, switch its power and toughness."
SVar:TrigPump:DB$ PumpAll | ValidCards$ Creature | PumpZone$ Battlefield | KW$ HIDDEN CARDNAME's power and toughness are switched | Duration$ Permanent | SubAbility$ DBBoon
SVar:TrigPump:DB$ PumpAll | ValidCards$ Creature | PumpZone$ Battlefield | SwitchPT$ True | Duration$ Permanent | SubAbility$ DBBoon
SVar:DBBoon:DB$ Effect | Boon$ True | Duration$ Permanent | Triggers$ CreatureETB
SVar:CreatureETB:Mode$ ChangesZone | ValidCards$ Creature.YouCtrl | Destination$ Battlefield | TriggerZones$ Battlefield | BoonAmount$ 12 | Execute$ TrigPumpETB | TriggerDescription$ Whenever a creature you control enters, switch its power and toughness.
SVar:TrigPumpETB:DB$ Pump | Defined$ TriggeredCardLKICopy | Duration$ Permanent | KW$ HIDDEN CARDNAME's power and toughness are switched
SVar:TrigPumpETB:DB$ Pump | Defined$ TriggeredCardLKICopy | Duration$ Permanent | SwitchPT$ True
Oracle:Flying\nWhen Mangled Soulrager enters, switch the power and toughness of each creature on the battlefield. You get a twelve-time boon with "Whenever a creature you control enters, switch its power and toughness."\nCycling {1}{U}

View File

@@ -2,6 +2,5 @@ Name:Mannichi, the Fevered Dream
ManaCost:2 R
Types:Legendary Creature Spirit
PT:1/2
A:AB$ PumpAll | Cost$ 1 R | ValidCards$ Creature | KW$ HIDDEN CARDNAME's power and toughness are switched | SpellDescription$ Switch each creature's power and toughness until end of turn.
AI:RemoveDeck:All
A:AB$ PumpAll | Cost$ 1 R | ValidCards$ Creature | SwitchPT$ True | SpellDescription$ Switch each creature's power and toughness until end of turn.
Oracle:{1}{R}: Switch each creature's power and toughness until end of turn.

View File

@@ -2,6 +2,5 @@ Name:Merfolk Thaumaturgist
ManaCost:2 U
Types:Creature Merfolk Wizard
PT:1/2
A:AB$ Pump | Cost$ T | ValidTgts$ Creature | KW$ HIDDEN CARDNAME's power and toughness are switched | TgtPrompt$ Select target creature. | SpellDescription$ Switch target creature's power and toughness until end of turn.
AI:RemoveDeck:All
A:AB$ Pump | Cost$ T | ValidTgts$ Creature | SwitchPT$ True | SpellDescription$ Switch target creature's power and toughness until end of turn.
Oracle:{T}: Switch target creature's power and toughness until end of turn.

View File

@@ -2,6 +2,6 @@ Name:Myr Quadropod
ManaCost:4
Types:Artifact Creature Myr
PT:1/4
A:AB$ Pump | Cost$ 3 | Defined$ Self | AILogic$ SwitchPT | KW$ HIDDEN CARDNAME's power and toughness are switched | SpellDescription$ Switch CARDNAME's power and toughness until end of turn.
A:AB$ Pump | Cost$ 3 | Defined$ Self | SwitchPT$ True | SpellDescription$ Switch CARDNAME's power and toughness until end of turn.
AI:RemoveDeck:All
Oracle:{3}: Switch Myr Quadropod's power and toughness until end of turn.

View File

@@ -3,5 +3,5 @@ ManaCost:3 B
Types:Creature Illusion
PT:1/5
A:AB$ Pump | Cost$ B | Defined$ Self | NumAtt$ +1 | NumDef$ -1 | SpellDescription$ CARDNAME gets +1/-1 until end of turn.
A:AB$ Pump | Cost$ 1 U | Defined$ Self | AILogic$ SwitchPT | KW$ HIDDEN CARDNAME's power and toughness are switched | SpellDescription$ Switch CARDNAME's power and toughness until end of turn.
A:AB$ Pump | Cost$ 1 U | Defined$ Self | SwitchPT$ True | SpellDescription$ Switch CARDNAME's power and toughness until end of turn.
Oracle:{B}: Phantasmal Fiend gets +1/-1 until end of turn.\n{1}{U}: Switch Phantasmal Fiend's power and toughness until end of turn.

View File

@@ -3,7 +3,7 @@ ManaCost:1 U U
Types:Instant
A:SP$ Charm | Choices$ DBCounter,DBSwitch,DBUnblockable
SVar:DBCounter:DB$ Counter | Defined$ ValidStack Spell.Other | SpellDescription$ Counter all other spells.
SVar:DBSwitch:DB$ PumpAll | ValidCards$ Creature | KW$ HIDDEN CARDNAME's power and toughness are switched | SpellDescription$ Switch each creature's power and toughness until end of turn.
SVar:DBSwitch:DB$ PumpAll | ValidCards$ Creature | SwitchPT$ True | SpellDescription$ Switch each creature's power and toughness until end of turn.
SVar:DBUnblockable:DB$ Effect | StaticAbilities$ Unblockable | SpellDescription$ Creatures can't be blocked this turn.
SVar:Unblockable:Mode$ CantBlockBy | ValidAttacker$ Creature | Description$ Creatures can't be blocked this turn.
Oracle:Choose one —\n• Counter all other spells.\n• Switch each creature's power and toughness until end of turn.\n• Creatures can't be blocked this turn.

View File

@@ -2,7 +2,6 @@ Name:Strange Inversion
ManaCost:2 R
Types:Instant Arcane
K:Splice:Arcane:1 R
A:SP$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ HIDDEN CARDNAME's power and toughness are switched | SpellDescription$ Switch target creature's power and toughness until end of turn.
AI:RemoveDeck:All
A:SP$ Pump | ValidTgts$ Creature | SwitchPT$ True | SpellDescription$ Switch target creature's power and toughness until end of turn.
DeckHints:Type$Arcane
Oracle:Switch target creature's power and toughness until end of turn.\nSplice onto Arcane {1}{R} (As you cast an Arcane spell, you may reveal this card from your hand and pay its splice cost. If you do, add this card's effects to that spell.)

View File

@@ -1,6 +1,5 @@
Name:Transmutation
ManaCost:1 B
Types:Instant
A:SP$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ HIDDEN CARDNAME's power and toughness are switched | SpellDescription$ Switch target creature's power and toughness until end of turn.
AI:RemoveDeck:All
A:SP$ Pump | ValidTgts$ Creature | SwitchPT$ True | SpellDescription$ Switch target creature's power and toughness until end of turn.
Oracle:Switch target creature's power and toughness until end of turn.

View File

@@ -3,6 +3,5 @@ ManaCost:3 U
Types:Creature Shapeshifter
PT:1/4
K:Changeling
A:AB$ Pump | Cost$ 1 U | Defined$ Self | AILogic$ SwitchPT | KW$ HIDDEN CARDNAME's power and toughness are switched | SpellDescription$ Switch CARDNAME's power and toughness until end of turn.
AI:RemoveDeck:All
A:AB$ Pump | Cost$ 1 U | Defined$ Self | SwitchPT$ True | SpellDescription$ Switch CARDNAME's power and toughness until end of turn.
Oracle:Changeling (This card is every creature type.)\n{1}{U}: Switch Turtleshell Changeling's power and toughness until end of turn.

View File

@@ -1,7 +1,6 @@
Name:Twisted Image
ManaCost:U
Types:Instant
A:SP$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ HIDDEN CARDNAME's power and toughness are switched | SpellDescription$ Switch target creature's power and toughness until end of turn. | SubAbility$ DBDraw
A:SP$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | SwitchPT$ True | SubAbility$ DBDraw | SpellDescription$ Switch target creature's power and toughness until end of turn.
SVar:DBDraw:DB$ Draw | NumCards$ 1 | SpellDescription$ Draw a card.
AI:RemoveDeck:All
Oracle:Switch target creature's power and toughness until end of turn.\nDraw a card.

View File

@@ -4,5 +4,5 @@ Types:Instant
K:Entwine:B
A:SP$ Charm | Choices$ DBCurse,DBSwitch
SVar:DBCurse:DB$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature to get -6/-0 | NumAtt$ -6 | IsCurse$ True | SpellDescription$ Target creature gets -6/-0 until end of turn.
SVar:DBSwitch:DB$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ HIDDEN CARDNAME's power and toughness are switched | SpellDescription$ Switch target creature's power and toughness until end of turn.
SVar:DBSwitch:DB$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | SwitchPT$ True | SpellDescription$ Switch target creature's power and toughness until end of turn.
Oracle:Choose one —\n• Target creature gets -6/-0 until end of turn.\n• Switch target creature's power and toughness until end of turn.\nEntwine {B} (Choose both if you pay the entwine cost.)

View File

@@ -3,6 +3,6 @@ ManaCost:4 R
Types:Creature Elemental Boar
PT:1/7
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME attacks, switch its power and toughness until end of turn.
SVar:TrigPump:DB$ Pump | Defined$ Self | KW$ HIDDEN CARDNAME's power and toughness are switched
SVar:TrigPump:DB$ Pump | Defined$ Self | SwitchPT$ True
AI:RemoveDeck:Random
Oracle:Whenever Valakut Fireboar attacks, switch its power and toughness until end of turn.

View File

@@ -5,5 +5,5 @@ R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplacementRe
SVar:ETBTapped:DB$ Tap | Defined$ Self | ETB$ True
A:AB$ Mana | Cost$ T | Produced$ Combo U R | SpellDescription$ Add {U} or {R}.
A:AB$ Animate | Cost$ 2 U R | Defined$ Self | Power$ 1 | Toughness$ 4 | Types$ Creature,Elemental | Colors$ Blue,Red | OverwriteColors$ True | Abilities$ ABPump | SpellDescription$ Until end of turn, CARDNAME becomes a 1/4 blue and red Elemental creature with "{0}: Switch this creature's power and toughness until end of turn." It's still a land.
SVar:ABPump:AB$ Pump | Cost$ 0 | Defined$ Self | AILogic$ SwitchPT | KW$ HIDDEN CARDNAME's power and toughness are switched | SpellDescription$ Switch this creature's power and toughness until end of turn.
SVar:ABPump:AB$ Pump | Cost$ 0 | Defined$ Self | SwitchPT$ True | SpellDescription$ Switch this creature's power and toughness until end of turn.
Oracle:Wandering Fumarole enters tapped.\n{T}: Add {U} or {R}.\n{2}{U}{R}: Until end of turn, Wandering Fumarole becomes a 1/4 blue and red Elemental creature with "{0}: Switch this creature's power and toughness until end of turn." It's still a land.

View File

@@ -5,6 +5,6 @@ PT:1/3
K:Flying
A:AB$ Pump | Cost$ W | Defined$ Self | KW$ Vigilance | SpellDescription$ CARDNAME gains vigilance until end of turn.
A:AB$ Pump | Cost$ W | Defined$ Self | NumDef$ +1 | SpellDescription$ CARDNAME gets +0/+1 until end of turn.
A:AB$ Pump | Cost$ U | Defined$ Self | AILogic$ SwitchPT | KW$ HIDDEN CARDNAME's power and toughness are switched | SpellDescription$ Switch CARDNAME's power and toughness until end of turn.
A:AB$ Pump | Cost$ U | Defined$ Self | SwitchPT$ True | SpellDescription$ Switch CARDNAME's power and toughness until end of turn.
A:AB$ ChangeZone | Cost$ U | Origin$ Battlefield | Destination$ Hand | SpellDescription$ Return CARDNAME to its owner's hand.
Oracle:Flying\n{W}: Windreaver gains vigilance until end of turn.\n{W}: Windreaver gets +0/+1 until end of turn.\n{U}: Switch Windreaver's power and toughness until end of turn.\n{U}: Return Windreaver to its owner's hand.