mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 02:38:02 +00:00
Merge branch 'cleanup' into 'master'
Remove some redundancy See merge request core-developers/forge!5945
This commit is contained in:
@@ -955,7 +955,6 @@ public class Game {
|
|||||||
Multimap<Player, Card> anteed = ArrayListMultimap.create();
|
Multimap<Player, Card> anteed = ArrayListMultimap.create();
|
||||||
|
|
||||||
if (matchRarity) {
|
if (matchRarity) {
|
||||||
|
|
||||||
boolean onePlayerHasTimeShifted = false;
|
boolean onePlayerHasTimeShifted = false;
|
||||||
|
|
||||||
List<CardRarity> validRarities = new ArrayList<>(Arrays.asList(CardRarity.values()));
|
List<CardRarity> validRarities = new ArrayList<>(Arrays.asList(CardRarity.values()));
|
||||||
@@ -1018,7 +1017,6 @@ public class Game {
|
|||||||
} else {
|
} else {
|
||||||
chooseRandomCardsForAnte(player, anteed);
|
chooseRandomCardsForAnte(player, anteed);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
@@ -43,7 +43,6 @@ public class GameView extends TrackableObject {
|
|||||||
|
|
||||||
set(TrackableProperty.GameLog, game.getGameLog());
|
set(TrackableProperty.GameLog, game.getGameLog());
|
||||||
set(TrackableProperty.NumPlayedGamesInMatch, game.getMatch().getOutcomes().size());
|
set(TrackableProperty.NumPlayedGamesInMatch, game.getMatch().getOutcomes().size());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Match getMatch() {
|
public Match getMatch() {
|
||||||
|
|||||||
@@ -176,16 +176,12 @@ public class AnimateEffect extends AnimateEffectBase {
|
|||||||
|
|
||||||
// give Remembered
|
// give Remembered
|
||||||
if (animateRemembered != null) {
|
if (animateRemembered != null) {
|
||||||
for (final Object o : AbilityUtils.getDefinedObjects(source, animateRemembered, sa)) {
|
c.addRemembered(AbilityUtils.getDefinedObjects(source, animateRemembered, sa));
|
||||||
c.addRemembered(o);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// give Imprinted
|
// give Imprinted
|
||||||
if (animateImprinted != null) {
|
if (animateImprinted != null) {
|
||||||
for (final Card imprintedCard : AbilityUtils.getDefinedCards(source, animateImprinted, sa)) {
|
c.addImprintedCards(AbilityUtils.getDefinedCards(source, animateImprinted, sa));
|
||||||
c.addImprintedCard(imprintedCard);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
game.fireEvent(new GameEventCardStatsChanged(c));
|
game.fireEvent(new GameEventCardStatsChanged(c));
|
||||||
|
|||||||
@@ -212,19 +212,13 @@ public class ChooseCardEffect extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
host.setChosenCards(chosen);
|
host.setChosenCards(chosen);
|
||||||
if (sa.hasParam("RememberChosen")) {
|
if (sa.hasParam("RememberChosen")) {
|
||||||
for (final Card rem : chosen) {
|
host.addRemembered(chosen);
|
||||||
host.addRemembered(rem);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (sa.hasParam("ForgetChosen")) {
|
if (sa.hasParam("ForgetChosen")) {
|
||||||
for (final Card rem : chosen) {
|
host.removeRemembered(chosen);
|
||||||
host.removeRemembered(rem);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (sa.hasParam("ImprintChosen")) {
|
if (sa.hasParam("ImprintChosen")) {
|
||||||
for (final Card imp : chosen) {
|
host.addImprintedCards(chosen);
|
||||||
host.addImprintedCard(imp);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,9 +56,7 @@ public class DelayedTriggerEffect extends SpellAbilityEffect {
|
|||||||
|
|
||||||
if (sa.hasParam("RememberObjects")) {
|
if (sa.hasParam("RememberObjects")) {
|
||||||
for (final String rem : sa.getParam("RememberObjects").split(",")) {
|
for (final String rem : sa.getParam("RememberObjects").split(",")) {
|
||||||
for (final Object o : AbilityUtils.getDefinedEntities(sa.getHostCard(), rem, sa)) {
|
delTrig.addRemembered(AbilityUtils.getDefinedEntities(sa.getHostCard(), rem, sa));
|
||||||
delTrig.addRemembered(o);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -177,14 +177,10 @@ public class DigEffect extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (sa.hasParam("RememberRevealed") && !sa.hasParam("RevealValid") && hasRevealed) {
|
if (sa.hasParam("RememberRevealed") && !sa.hasParam("RevealValid") && hasRevealed) {
|
||||||
for (final Card one : top) {
|
host.addRemembered(top);
|
||||||
host.addRemembered(one);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (sa.hasParam("ImprintRevealed") && hasRevealed) {
|
if (sa.hasParam("ImprintRevealed") && hasRevealed) {
|
||||||
for (final Card one : top) {
|
host.addImprintedCards(top);
|
||||||
host.addImprintedCard(one);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (sa.hasParam("Choser")) {
|
if (sa.hasParam("Choser")) {
|
||||||
final FCollectionView<Player> choosers = AbilityUtils.getDefinedPlayers(host, sa.getParam("Choser"), sa);
|
final FCollectionView<Player> choosers = AbilityUtils.getDefinedPlayers(host, sa.getParam("Choser"), sa);
|
||||||
|
|||||||
@@ -204,14 +204,10 @@ public class DigUntilEffect extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (sa.hasParam("RememberRevealed")) {
|
if (sa.hasParam("RememberRevealed")) {
|
||||||
for (final Card c : revealed) {
|
host.addRemembered(revealed);
|
||||||
host.addRemembered(c);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (sa.hasParam("ImprintRevealed")) {
|
if (sa.hasParam("ImprintRevealed")) {
|
||||||
for (final Card c : revealed) {
|
host.addImprintedCards(revealed);
|
||||||
host.addImprintedCard(c);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (sa.hasParam("RevealRandomOrder")) {
|
if (sa.hasParam("RevealRandomOrder")) {
|
||||||
Collections.shuffle(revealed, MyRandom.getRandom());
|
Collections.shuffle(revealed, MyRandom.getRandom());
|
||||||
|
|||||||
@@ -127,9 +127,6 @@ public class DiscardEffect extends SpellAbilityEffect {
|
|||||||
for (final Player p : discarders) {
|
for (final Player p : discarders) {
|
||||||
CardCollectionView toBeDiscarded = new CardCollection();
|
CardCollectionView toBeDiscarded = new CardCollection();
|
||||||
if ((mode.equals("RevealTgtChoose") && firstTarget != null) || !sa.usesTargeting() || p.canBeTargetedBy(sa)) {
|
if ((mode.equals("RevealTgtChoose") && firstTarget != null) || !sa.usesTargeting() || p.canBeTargetedBy(sa)) {
|
||||||
if (sa.hasParam("RememberDiscarder") && p.canDiscardBy(sa, true)) {
|
|
||||||
source.addRemembered(p);
|
|
||||||
}
|
|
||||||
final int numCardsInHand = p.getCardsIn(ZoneType.Hand).size();
|
final int numCardsInHand = p.getCardsIn(ZoneType.Hand).size();
|
||||||
if (mode.equals("Defined")) {
|
if (mode.equals("Defined")) {
|
||||||
if (!p.canDiscardBy(sa, true)) {
|
if (!p.canDiscardBy(sa, true)) {
|
||||||
|
|||||||
@@ -79,9 +79,7 @@ public class DrawEffect extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (sa.hasParam("RememberDrawn")) {
|
if (sa.hasParam("RememberDrawn")) {
|
||||||
for (final Card c : drawn) {
|
source.addRemembered(drawn);
|
||||||
source.addRemembered(c);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
sa.setSVar("AFNotDrawnNum_" + p.getId(), "Number$" + drawn.size());
|
sa.setSVar("AFNotDrawnNum_" + p.getId(), "Number$" + drawn.size());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,10 +53,7 @@ public class FightEffect extends DamageBaseEffect {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (sa.hasParam("RememberObjects")) {
|
if (sa.hasParam("RememberObjects")) {
|
||||||
final String remembered = sa.getParam("RememberObjects");
|
host.addRemembered(AbilityUtils.getDefinedObjects(host, sa.getParam("RememberObjects"), sa));
|
||||||
for (final Object o : AbilityUtils.getDefinedObjects(host, remembered, sa)) {
|
|
||||||
host.addRemembered(o);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Player controller = host.getController();
|
Player controller = host.getController();
|
||||||
|
|||||||
@@ -59,9 +59,7 @@ public class ImmediateTriggerEffect extends SpellAbilityEffect {
|
|||||||
|
|
||||||
if (sa.hasParam("RememberObjects")) {
|
if (sa.hasParam("RememberObjects")) {
|
||||||
for (final String rem : sa.getParam("RememberObjects").split(",")) {
|
for (final String rem : sa.getParam("RememberObjects").split(",")) {
|
||||||
for (final Object o : AbilityUtils.getDefinedEntities(sa.getHostCard(), rem, sa)) {
|
immediateTrig.addRemembered(AbilityUtils.getDefinedEntities(sa.getHostCard(), rem, sa));
|
||||||
immediateTrig.addRemembered(o);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -68,14 +68,10 @@ public class MillEffect extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (sa.hasParam("RememberMilled")) {
|
if (sa.hasParam("RememberMilled")) {
|
||||||
for (final Card c : milled) {
|
source.addRemembered(milled);
|
||||||
source.addRemembered(c);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (sa.hasParam("Imprint")) {
|
if (sa.hasParam("Imprint")) {
|
||||||
for (final Card c : milled) {
|
source.addImprintedCards(milled);
|
||||||
source.addImprintedCard(c);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -86,7 +86,6 @@ public class MustAttackEffect extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} // mustAttackResolve()
|
} // mustAttackResolve()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -324,9 +324,7 @@ public class PumpEffect extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (sa.hasParam("RememberObjects")) {
|
if (sa.hasParam("RememberObjects")) {
|
||||||
for (final Object o : AbilityUtils.getDefinedObjects(host, sa.getParam("RememberObjects"), sa)) {
|
host.addRemembered(AbilityUtils.getDefinedObjects(host, sa.getParam("RememberObjects"), sa));
|
||||||
host.addRemembered(o);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sa.hasParam("NoteCardsFor")) {
|
if (sa.hasParam("NoteCardsFor")) {
|
||||||
@@ -338,21 +336,15 @@ public class PumpEffect extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (sa.hasParam("ForgetObjects")) {
|
if (sa.hasParam("ForgetObjects")) {
|
||||||
for (final Object o : AbilityUtils.getDefinedObjects(host, sa.getParam("ForgetObjects"), sa)) {
|
host.removeRemembered(AbilityUtils.getDefinedObjects(host, sa.getParam("ForgetObjects"), sa));
|
||||||
host.removeRemembered(o);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sa.hasParam("ImprintCards")) {
|
if (sa.hasParam("ImprintCards")) {
|
||||||
for (final Card c : AbilityUtils.getDefinedCards(host, sa.getParam("ImprintCards"), sa)) {
|
host.addImprintedCards(AbilityUtils.getDefinedCards(host, sa.getParam("ImprintCards"), sa));
|
||||||
host.addImprintedCard(c);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sa.hasParam("ForgetImprinted")) {
|
if (sa.hasParam("ForgetImprinted")) {
|
||||||
for (final Card c : AbilityUtils.getDefinedCards(host, sa.getParam("ForgetImprinted"), sa)) {
|
host.removeImprintedCards(AbilityUtils.getDefinedCards(host, sa.getParam("ForgetImprinted"), sa));
|
||||||
host.removeImprintedCard(c);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
final ZoneType pumpZone = sa.hasParam("PumpZone") ? ZoneType.smartValueOf(sa.getParam("PumpZone"))
|
final ZoneType pumpZone = sa.hasParam("PumpZone") ? ZoneType.smartValueOf(sa.getParam("PumpZone"))
|
||||||
|
|||||||
@@ -50,14 +50,10 @@ public class RevealHandEffect extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
sa.getActivatingPlayer().getController().reveal(hand, ZoneType.Hand, p);
|
sa.getActivatingPlayer().getController().reveal(hand, ZoneType.Hand, p);
|
||||||
if (sa.hasParam("RememberRevealed")) {
|
if (sa.hasParam("RememberRevealed")) {
|
||||||
for (final Card c : hand) {
|
host.addRemembered(hand);
|
||||||
host.addRemembered(c);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (sa.hasParam("ImprintRevealed")) {
|
if (sa.hasParam("ImprintRevealed")) {
|
||||||
for (final Card c : hand) {
|
host.addImprintedCards(hand);
|
||||||
host.addImprintedCard(c);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (sa.hasParam("RememberRevealedPlayer")) {
|
if (sa.hasParam("RememberRevealedPlayer")) {
|
||||||
host.addRemembered(p);
|
host.addRemembered(p);
|
||||||
|
|||||||
@@ -203,10 +203,7 @@ public abstract class TokenEffectBase extends SpellAbilityEffect {
|
|||||||
moved.addRemembered(host);
|
moved.addRemembered(host);
|
||||||
}
|
}
|
||||||
if (sa.hasParam("TokenRemembered")) {
|
if (sa.hasParam("TokenRemembered")) {
|
||||||
final String remembered = sa.getParam("TokenRemembered");
|
moved.addRemembered(AbilityUtils.getDefinedObjects(host, sa.getParam("TokenRemembered"), sa));
|
||||||
for (final Object o : AbilityUtils.getDefinedObjects(host, remembered, sa)) {
|
|
||||||
moved.addRemembered(o);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
allTokens.add(moved);
|
allTokens.add(moved);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -142,9 +142,7 @@ public class TwoPilesEffect extends SpellAbilityEffect {
|
|||||||
|
|
||||||
// take action on the chosen pile
|
// take action on the chosen pile
|
||||||
if (sa.hasParam("ChosenPile")) {
|
if (sa.hasParam("ChosenPile")) {
|
||||||
for (final Card z : chosenPile) {
|
card.addRemembered(chosenPile);
|
||||||
card.addRemembered(z);
|
|
||||||
}
|
|
||||||
|
|
||||||
SpellAbility sub = sa.getAdditionalAbility("ChosenPile");
|
SpellAbility sub = sa.getAdditionalAbility("ChosenPile");
|
||||||
if (sub != null) {
|
if (sub != null) {
|
||||||
@@ -155,9 +153,7 @@ public class TwoPilesEffect extends SpellAbilityEffect {
|
|||||||
// take action on the unchosen pile
|
// take action on the unchosen pile
|
||||||
if (sa.hasParam("UnchosenPile")) {
|
if (sa.hasParam("UnchosenPile")) {
|
||||||
card.clearRemembered();
|
card.clearRemembered();
|
||||||
for (final Card z : unchosenPile) {
|
card.addRemembered(unchosenPile);
|
||||||
card.addRemembered(z);
|
|
||||||
}
|
|
||||||
|
|
||||||
SpellAbility sub = sa.getAdditionalAbility("UnchosenPile");
|
SpellAbility sub = sa.getAdditionalAbility("UnchosenPile");
|
||||||
if (sub != null) {
|
if (sub != null) {
|
||||||
|
|||||||
@@ -333,7 +333,6 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
game.getTriggerHandler().runTrigger(TriggerType.SetInMotion, runParams, false);
|
game.getTriggerHandler().runTrigger(TriggerType.SetInMotion, runParams, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* returns all opponents.
|
* returns all opponents.
|
||||||
* Should keep player relations somewhere in the match structure
|
* Should keep player relations somewhere in the match structure
|
||||||
@@ -533,8 +532,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
game.getTriggerHandler().runTrigger(TriggerType.LifeGained, runParams, false);
|
game.getTriggerHandler().runTrigger(TriggerType.LifeGained, runParams, false);
|
||||||
|
|
||||||
game.fireEvent(new GameEventPlayerLivesChanged(this, oldLife, life));
|
game.fireEvent(new GameEventPlayerLivesChanged(this, oldLife, life));
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
System.out.println("Player - trying to gain negative or 0 life");
|
System.out.println("Player - trying to gain negative or 0 life");
|
||||||
}
|
}
|
||||||
return newLifeSet;
|
return newLifeSet;
|
||||||
@@ -616,7 +614,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
if (lifePayment > 0 && life < lifePayment) {
|
if (lifePayment > 0 && life < lifePayment) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return (lifePayment <= 0) || !StaticAbilityCantGainLosePayLife.anyCantPayLife(this, effect, cause);
|
return lifePayment <= 0 || !StaticAbilityCantGainLosePayLife.anyCantPayLife(this, effect, cause);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final boolean payLife(final int lifePayment, final SpellAbility cause, final boolean effect) {
|
public final boolean payLife(final int lifePayment, final SpellAbility cause, final boolean effect) {
|
||||||
@@ -2019,7 +2017,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public final boolean cantLoseForZeroOrLessLife() {
|
public final boolean cantLoseForZeroOrLessLife() {
|
||||||
return (hasKeyword("You don't lose the game for having 0 or less life."));
|
return hasKeyword("You don't lose the game for having 0 or less life.");
|
||||||
}
|
}
|
||||||
|
|
||||||
public final boolean cantWin() {
|
public final boolean cantWin() {
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ public class TriggerSpellAbilityCastOrCopy extends Trigger {
|
|||||||
}
|
}
|
||||||
if (hasParam("ActivatorThisTurnCast")) {
|
if (hasParam("ActivatorThisTurnCast")) {
|
||||||
final String compare = getParam("ActivatorThisTurnCast");
|
final String compare = getParam("ActivatorThisTurnCast");
|
||||||
final String valid = hasParam("ValidCard") ? getParam("ValidCard") : "Card";
|
final String valid = getParamOrDefault("ValidCard", "Card");
|
||||||
List<Card> thisTurnCast = CardUtil.getThisTurnCast(valid, getHostCard(), this);
|
List<Card> thisTurnCast = CardUtil.getThisTurnCast(valid, getHostCard(), this);
|
||||||
thisTurnCast = CardLists.filterControlledBy(thisTurnCast, si.getSpellAbility(true).getActivatingPlayer());
|
thisTurnCast = CardLists.filterControlledBy(thisTurnCast, si.getSpellAbility(true).getActivatingPlayer());
|
||||||
int left = thisTurnCast.size();
|
int left = thisTurnCast.size();
|
||||||
|
|||||||
@@ -51,11 +51,12 @@ public enum VSubmenuOnlineLobby implements IVSubmenu<CSubmenuOnlineLobby>, IOnli
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void reset() {
|
public void reset() {
|
||||||
onClosing(null);
|
if (onClosing(null)) {
|
||||||
this.client = null;
|
this.client = null;
|
||||||
this.lobby = null;
|
this.lobby = null;
|
||||||
populate();
|
populate();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void setClient(final FGameClient client) {
|
public void setClient(final FGameClient client) {
|
||||||
this.client = client;
|
this.client = client;
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ Name:Tsabo's Decree
|
|||||||
ManaCost:5 B
|
ManaCost:5 B
|
||||||
Types:Instant
|
Types:Instant
|
||||||
A:SP$ ChooseType | Cost$ 5 B | Defined$ You | Type$ Creature | SubAbility$ TsabosDiscard | StackDescription$ None | SpellDescription$ Choose a creature type. Target player reveals their hand and discards all creature cards of that type. Then destroy all creatures of that type that player controls. They can't be regenerated.
|
A:SP$ ChooseType | Cost$ 5 B | Defined$ You | Type$ Creature | SubAbility$ TsabosDiscard | StackDescription$ None | SpellDescription$ Choose a creature type. Target player reveals their hand and discards all creature cards of that type. Then destroy all creatures of that type that player controls. They can't be regenerated.
|
||||||
SVar:TsabosDiscard:DB$ Discard | ValidTgts$ Player | ForgetOtherTargets$ True | RememberTargets$ True | RememberDiscarder$ True | Mode$ RevealDiscardAll | DiscardValid$ Creature.ChosenType | SubAbility$ TsabosDestroy
|
SVar:TsabosDiscard:DB$ Discard | ValidTgts$ Player | Mode$ RevealDiscardAll | DiscardValid$ Creature.ChosenType | SubAbility$ TsabosDestroy
|
||||||
SVar:TsabosDestroy:DB$ DestroyAll | ValidCards$ Creature.ChosenType+RememberedPlayerCtrl | NoRegen$ True
|
SVar:TsabosDestroy:DB$ DestroyAll | ValidCards$ Creature.ChosenType+TargetedPlayerCtrl | NoRegen$ True
|
||||||
AI:RemoveDeck:All
|
AI:RemoveDeck:All
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/tsabos_decree.jpg
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/tsabos_decree.jpg
|
||||||
Oracle:Choose a creature type. Target player reveals their hand and discards all creature cards of that type. Then destroy all creatures of that type that player controls. They can't be regenerated.
|
Oracle:Choose a creature type. Target player reveals their hand and discards all creature cards of that type. Then destroy all creatures of that type that player controls. They can't be regenerated.
|
||||||
|
|||||||
Reference in New Issue
Block a user