protected void addAbility(Ability ability, Watcher watcher) { addAbility(ability); ability.addWatcher(watcher); }
public HeatStroke(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{R}"); // At end of combat, destroy each creature that blocked or was blocked this turn. Ability ability = new EndOfCombatTriggeredAbility(new HeatStrokeEffect(), false); ability.addWatcher(new BlockedThisTurnWatcher()); ability.addWatcher(new WasBlockedThisTurnWatcher()); this.addAbility(ability); }
public UphillBattle(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{R}"); // Creatures played by your opponents enter the battlefield tapped. Ability tapAbility = new SimpleStaticAbility(Zone.BATTLEFIELD, new UphillBattleTapEffect()); tapAbility.addWatcher(new CreatureWasCastWatcher()); tapAbility.addWatcher(new PlayCreatureLandWatcher()); addAbility(tapAbility); }
public SeasonOfTheWitch(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{B}{B}{B}"); // At the beginning of your upkeep, sacrifice Season of the Witch unless you pay 2 life. Cost cost = new PayLifeCost(2); cost.setText("2 life"); this.addAbility(new BeginningOfUpkeepTriggeredAbility(new SacrificeSourceUnlessPaysEffect(cost), TargetController.YOU, false)); // At the beginning of the end step, destroy all untapped creatures that didn't attack this turn, except for creatures that couldn't attack. Ability ability = new BeginningOfEndStepTriggeredAbility(new SeasonOfTheWitchEffect(), TargetController.ANY, false); ability.addWatcher(new AttackedThisTurnWatcher()); ability.addWatcher(new CouldAttackThisTurnWatcher()); this.addAbility(ability); }
public HeavyFog(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{G}"); // Cast Deep Wood only during the declare attackers step and only if you've been attacked this step. Ability ability = new CastOnlyDuringPhaseStepSourceAbility( TurnPhase.COMBAT, PhaseStep.DECLARE_ATTACKERS, AttackedThisStepCondition.instance, "Cast this spell only during the declare attackers step and only if you've been attacked this step." ); ability.addWatcher(new PlayerAttackedStepWatcher()); this.addAbility(ability); // Prevent all damage that would be dealt to you this turn by attacking creatures. this.getSpellAbility().addEffect(new HeavyFogEffect()); }
public DeepWood(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{G}"); // Cast Deep Wood only during the declare attackers step and only if you've been attacked this step. Ability ability = new CastOnlyDuringPhaseStepSourceAbility( TurnPhase.COMBAT, PhaseStep.DECLARE_ATTACKERS, AttackedThisStepCondition.instance, "Cast this spell only during the declare attackers step and only if you've been attacked this step." ); ability.addWatcher(new PlayerAttackedStepWatcher()); this.addAbility(ability); // Prevent all damage that would be dealt to you this turn by attacking creatures. this.getSpellAbility().addEffect(new DeepWoodEffect()); }
public MadDog(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}"); this.subtype.add(SubType.HOUND); this.power = new MageInt(2); this.toughness = new MageInt(2); // At the beginning of your end step, if Mad Dog didn't attack or come under your control this turn, sacrifice it. Ability ability = new ConditionalInterveningIfTriggeredAbility(new BeginningOfEndStepTriggeredAbility(new SacrificeSourceEffect(), TargetController.YOU, false), MadDogCondition.instance, "At the beginning of your end step, if {this} didn't attack or come under your control this turn, sacrifice it"); ability.addWatcher(new AttackedThisTurnWatcher()); ability.addWatcher(new PermanentsEnteredBattlefieldWatcher()); this.addAbility(ability); }
public RallyTheTroops(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{W}"); // Cast Rally the Troops only during the declare attackers step and only if you've been attacked this step. Ability ability = new CastOnlyDuringPhaseStepSourceAbility( TurnPhase.COMBAT, PhaseStep.DECLARE_ATTACKERS, AttackedThisStepCondition.instance, "Cast this spell only during the declare attackers step and only if you've been attacked this step." ); ability.addWatcher(new PlayerAttackedStepWatcher()); this.addAbility(ability); // Untap all creatures you control. this.getSpellAbility().addEffect(new UntapAllControllerEffect(StaticFilters.FILTER_PERMANENT_CREATURES)); }
public WarriorsStand(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{W}"); // Cast Warrior's Stand only during the declare attackers step and only if you've been attacked this step. Ability ability = new CastOnlyDuringPhaseStepSourceAbility( TurnPhase.COMBAT, PhaseStep.DECLARE_ATTACKERS, AttackedThisStepCondition.instance, "Cast this spell only during the declare attackers step and only if you've been attacked this step." ); ability.addWatcher(new PlayerAttackedStepWatcher()); this.addAbility(ability); // Creatures you control get +2/+2 until end of turn. this.getSpellAbility().addEffect(new BoostControlledEffect(2, 2, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES, false)); }
public TreetopDefense(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{G}"); // Cast Treetop Defense only during the declare attackers step and only if you've been attacked this step. Ability ability = new CastOnlyDuringPhaseStepSourceAbility( TurnPhase.COMBAT, PhaseStep.DECLARE_ATTACKERS, AttackedThisStepCondition.instance, "Cast this spell only during the declare attackers step and only if you've been attacked this step." ); ability.addWatcher(new PlayerAttackedStepWatcher()); this.addAbility(ability); // Creatures you control gain reach until end of turn. this.getSpellAbility().addEffect(new GainAbilityControlledEffect(ReachAbility.getInstance(), Duration.EndOfTurn)); }
public HarshJustice(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{W}"); // Cast Harsh Justice only during the declare attackers step and only if you've been attacked this step. Ability ability = new CastOnlyDuringPhaseStepSourceAbility( TurnPhase.COMBAT, PhaseStep.DECLARE_ATTACKERS, AttackedThisStepCondition.instance, "Cast this spell only during the declare attackers step and only if you've been attacked this step." ); ability.addWatcher(new PlayerAttackedStepWatcher()); this.addAbility(ability); // This turn, whenever an attacking creature deals combat damage to you, it deals that much damage to its controller. this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new HarshJusticeTriggeredAbility())); }
public ConfrontTheAssault(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{4}{W}"); // Cast this spell only if a creature is attacking you. Ability ability = new CastOnlyDuringPhaseStepSourceAbility( TurnPhase.COMBAT, PhaseStep.DECLARE_ATTACKERS, AttackedThisStepCondition.instance, "Cast this spell only if a creature is attacking you." ); ability.addWatcher(new PlayerAttackedStepWatcher()); this.addAbility(ability); // Create three 1/1 white Spirit creature tokens with flying. this.getSpellAbility().addEffect(new CreateTokenEffect(new SpiritWhiteToken("ANA"), 3)); }
public ScorchingWinds(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{R}"); // Cast Scorching Winds only during the declare attackers step and only if you've been attacked this step. Ability ability = new CastOnlyDuringPhaseStepSourceAbility( TurnPhase.COMBAT, PhaseStep.DECLARE_ATTACKERS, AttackedThisStepCondition.instance, "Cast this spell only during the declare attackers step and only if you've been attacked this step." ); ability.addWatcher(new PlayerAttackedStepWatcher()); this.addAbility(ability); // Scorching Winds deals 1 damage to each attacking creature. this.getSpellAbility().addEffect(new DamageAllEffect(1, new FilterAttackingCreature())); }
public TwinningGlass(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}"); // {1}, {tap}: You may cast a nonland card from your hand without paying its mana cost if it has the same name as a spell that was cast this turn. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new TwinningGlassEffect(), new ManaCostsImpl("{1}")); ability.addWatcher(new SpellsCastWatcher()); ability.addCost(new TapSourceCost()); this.addAbility(ability); }
public EightfoldMaze(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{W}"); // Cast Eightfold Maze only during the declare attackers step and only if you've been attacked this step. Ability ability = new CastOnlyDuringPhaseStepSourceAbility( TurnPhase.COMBAT, PhaseStep.DECLARE_ATTACKERS, AttackedThisStepCondition.instance, "Cast this spell only during the declare attackers step and only if you've been attacked this step." ); ability.addWatcher(new PlayerAttackedStepWatcher()); this.addAbility(ability); // Destroy target attacking creature. this.getSpellAbility().addEffect(new DestroyTargetEffect()); this.getSpellAbility().addTarget(new TargetAttackingCreature()); }
public JustFate(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{W}"); // Cast Just Fate only during the declare attackers step and only if you've been attacked this step. Ability ability = new CastOnlyDuringPhaseStepSourceAbility( TurnPhase.COMBAT, PhaseStep.DECLARE_ATTACKERS, AttackedThisStepCondition.instance, "Cast this spell only during the declare attackers step and only if you've been attacked this step." ); ability.addWatcher(new PlayerAttackedStepWatcher()); this.addAbility(ability); // Destroy target attacking creature. this.getSpellAbility().addEffect(new DestroyTargetEffect()); this.getSpellAbility().addTarget(new TargetAttackingCreature()); }
public ChampionsVictory(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{U}"); // Cast Champion's Victory only during the declare attackers step and only if you've been attacked this step. Ability ability = new CastOnlyDuringPhaseStepSourceAbility( TurnPhase.COMBAT, PhaseStep.DECLARE_ATTACKERS, AttackedThisStepCondition.instance, "Cast this spell only during the declare attackers step and only if you've been attacked this step." ); ability.addWatcher(new PlayerAttackedStepWatcher()); this.addAbility(ability); // Return target attacking creature to its owner's hand. this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); this.getSpellAbility().addTarget(new TargetAttackingCreature()); }
public Remove(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{U}"); // Cast Remove only during the declare attackers step and only if you've been attacked this step. Ability ability = new CastOnlyDuringPhaseStepSourceAbility( TurnPhase.COMBAT, PhaseStep.DECLARE_ATTACKERS, AttackedThisStepCondition.instance, "Cast this spell only during the declare attackers step and only if you've been attacked this step." ); ability.addWatcher(new PlayerAttackedStepWatcher()); this.addAbility(ability); // Return target attacking creature to its owner's hand. this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); this.getSpellAbility().addTarget(new TargetAttackingCreature()); }
public SeaTroll(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}"); this.subtype.add(SubType.TROLL); this.power = new MageInt(2); this.toughness = new MageInt(1); // {U}: Regenerate Sea Troll. Activate this ability only if Sea Troll blocked or was blocked by a blue creature this turn. Ability ability = new ConditionalActivatedAbility(Zone.BATTLEFIELD, new RegenerateSourceEffect(), new ManaCostsImpl("{U}"), new SeaTrollCondition()); ability.addWatcher(new SeaTrollWatcher()); this.addAbility(ability); }
public HiddenStockpile(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}{B}"); // <i>Revolt</i> — At the beginning of your end step, if a permanent you controlled left the battlefield this turn, create a 1/1 colorless Servo artifact creature token. Ability ability = new ConditionalInterveningIfTriggeredAbility(new BeginningOfYourEndStepTriggeredAbility(new CreateTokenEffect(new ServoToken()), false), RevoltCondition.instance, "<i>Revolt</i> — At the beginning of your end step, if a permanent you controlled left the battlefield this turn, create a 1/1 colorless Servo artifact creature token"); ability.setAbilityWord(AbilityWord.REVOLT); ability.addWatcher(new RevoltWatcher()); this.addAbility(ability); // {1}, Sacrifice a creature: Scry 1. ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ScryEffect(1), new GenericManaCost(1)); ability.addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(FILTER_CONTROLLED_CREATURE_SHORT_TEXT))); this.addAbility(ability); }