public Megrim(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{B}"); // Whenever an opponent discards a card, Megrim deals 2 damage to that player. this.addAbility(new DiscardsACardOpponentTriggeredAbility(new DamageTargetEffect(2, true, "that player"), false, SetTargetPointer.PLAYER)); }
@Override public boolean apply(Game game, Ability source) { int amount = (Integer) getValue("damage"); return new DamageTargetEffect(amount).apply(game, source); } }
public AetherFlash(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{R}{R}"); // Whenever a creature enters the battlefield, Aether Flash deals 2 damage to it. this.addAbility(new EntersBattlefieldAllTriggeredAbility( Zone.BATTLEFIELD, new DamageTargetEffect(2).setText("{this} deals 2 damage to it"), StaticFilters.FILTER_PERMANENT_A_CREATURE, false, SetTargetPointer.PERMANENT, null)); }
public Lunge(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{R}"); // Lunge deals 2 damage to target creature and 2 damage to target player. this.getSpellAbility().addEffect(new DamageTargetEffect(2).setUseOnlyTargetPointer(true)); this.getSpellAbility().addTarget(new TargetCreaturePermanent()); Effect effect = new DamageTargetEffect(2).setUseOnlyTargetPointer(true); effect.setTargetPointer(new SecondTargetPointer()); effect.setText("and 2 damage to target player"); this.getSpellAbility().addEffect(effect); this.getSpellAbility().addTarget(new TargetPlayerOrPlaneswalker()); }
@Override public boolean apply(Game game, Ability source) { Permanent errantMinion = game.getPermanentOrLKIBattlefield(source.getSourceId()); if (errantMinion == null) { return false; } Permanent enchantedCreature = game.getPermanentOrLKIBattlefield(errantMinion.getAttachedTo()); if (enchantedCreature == null) { return false; } Player controllerOfEnchantedCreature = game.getPlayer(enchantedCreature.getControllerId()); if (controllerOfEnchantedCreature != null) { int manaPaid = playerPaysXGenericMana(controllerOfEnchantedCreature, source, game); PreventDamageToTargetEffect effect = new PreventDamageToTargetEffect(Duration.OneUse, manaPaid); effect.setTargetPointer(new FixedTarget(controllerOfEnchantedCreature.getId())); game.addEffect(effect, source); DamageTargetEffect effect2 = new DamageTargetEffect(2); effect2.setTargetPointer(new FixedTarget(controllerOfEnchantedCreature.getId())); effect2.apply(game, source); return true; } return false; }
public AngrathsFury(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{B}{R}"); // Destroy target creature. this.getSpellAbility().addEffect(new DestroyTargetEffect()); this.getSpellAbility().addTarget(new TargetCreaturePermanent()); // Angrath's Fury deals 3 damage to target player. this.getSpellAbility().addEffect(new DamageTargetEffect(3).setTargetPointer(new SecondTargetPointer()) .setText("{this} deals 3 damage to target player or planeswalker")); this.getSpellAbility().addTarget(new TargetPlayerOrPlaneswalker()); // You may search your library and/or graveyard for a card named Angrath, Minotaur Pirate, reveal it, and put it into your hand. If you search your library this way, shuffle it. this.getSpellAbility().addEffect(new SearchLibraryGraveyardPutInHandEffect(filter) .setText("You may search your library and/or graveyard for a card named Angrath, Minotaur Pirate, reveal it, and put it into your hand. If you search your library this way, shuffle it")); }
@Override public boolean checkTrigger(GameEvent event, Game game) { if (event.getPlayerId().equals(this.controllerId)) { Spell spell = (Spell) game.getStack().getStackObject(event.getTargetId()); if (spell != null) { for (ManaCost cost : spell.getCard().getManaCost()) { if (cost instanceof PhyrexianManaCost) { ((DamageTargetEffect)getEffects().get(0)).setAmount(new StaticValue(spell.getConvertedManaCost())); return true; } } } } return false; }
@Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); if (player != null) { Cost cost = new GenericManaCost(1); if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false, null)) { super.apply(game, source); } return true; } return false; } }
private void playDamage(List<UUID> creatures, Game game) { for (UUID creatureId : creatures) { Permanent creature = game.getPermanent(creatureId); for (Card card : this.playableInstant) { if (card.getSpellAbility().canActivate(playerId, game).canActivate()) { for (Effect effect : card.getSpellAbility().getEffects()) { if (effect instanceof DamageTargetEffect) { if (card.getSpellAbility().getTargets().get(0).canTarget(creatureId, card.getSpellAbility(), game)) { if (((DamageTargetEffect) effect).getAmount() > (creature.getPower().getValue() - creature.getDamage())) { if (this.activateAbility(card.getSpellAbility(), game)) { return; } } } } } } } } }
for (UUID targetId : this.getTargetPointer().getTargets(game, source)) { Permanent permanent = game.getPermanent(targetId); if (permanent != null) {
public RecklessRage(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{R}"); // Reckless Rage deals 4 damage to target creature you don't control and 2 damage to target creature you control. FilterCreaturePermanent filter = new FilterCreaturePermanent("creature you don't control"); filter.add(new ControllerPredicate(TargetController.NOT_YOU)); this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter)); this.getSpellAbility().addEffect(new DamageTargetEffect(4).setUseOnlyTargetPointer(true)); this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); this.getSpellAbility().addEffect(new DamageTargetEffect(2).setUseOnlyTargetPointer(true) .setText("and 2 damage to target creature you control") .setTargetPointer(new SecondTargetPointer())); }
@Override public boolean checkTrigger(GameEvent event, Game game) { if (!event.getTargetId().equals(this.getSourceId())) { return false; } Permanent sourcePermanent = game.getPermanent(event.getSourceId()); if (sourcePermanent != null && FILTER_CREATURE.match(sourcePermanent, getSourceId(), getControllerId(), game)) { for (Effect effect : getEffects()) { if (effect instanceof DamageTargetEffect) { effect.setTargetPointer(new FixedTarget(sourcePermanent.getId())); ((DamageTargetEffect) effect).setAmount(new StaticValue(event.getAmount())); } } return true; } return false; }
public PaupersCage(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{3}"); // At the beginning of each opponent's upkeep, if that player has two or fewer cards in hand, Paupers' Cage deals 2 damage to him or her. TriggeredAbility ability = new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2), TargetController.OPPONENT, false, true); CardsInHandCondition condition = new CardsInHandCondition(ComparisonType.FEWER_THAN, 3); this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, condition, "At the beginning of each opponent's upkeep, if that player has two or fewer cards in hand, {this} deals 2 damage to him or her.")); }
@Override public boolean apply(Game game, Ability source) { DynamicValue value = MultikickerCount.instance; int damage = value.calculate(game, source, this) * 2; return new DamageTargetEffect(damage).apply(game, source); }
public SunCrownedHunters(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{R}{R}"); this.subtype.add(SubType.DINOSAUR); this.power = new MageInt(5); this.toughness = new MageInt(4); // <i>Enrage</i> — Whenever Sun-Crowned Hunters is dealt damage, it deals 3 damage to target opponent. Ability ability = new DealtDamageToSourceTriggeredAbility( Zone.BATTLEFIELD, new DamageTargetEffect(3).setText("it deals 3 damage to target opponent"), false, true ); ability.addTarget(new TargetOpponentOrPlaneswalker()); this.addAbility(ability); }
@Override public boolean checkTrigger(GameEvent event, Game game) { if (!event.getTargetId().equals(this.getSourceId())) { return false; } StackObject sourceSpell = game.getStack().getStackObject(event.getSourceId()); if (sourceSpell != null && StaticFilters.FILTER_SPELL.match(sourceSpell, getSourceId(), getControllerId(), game)) { for (Effect effect : getEffects()) { if (effect instanceof DamageTargetEffect) { effect.setTargetPointer(new FixedTarget(sourceSpell.getControllerId())); ((DamageTargetEffect) effect).setAmount(new StaticValue(event.getAmount())); } } return true; } return false; }
public CratersClaws(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{R}"); // Crater's Claws deals X damage to any target. // <i>Ferocious</i> — Crater's Claws deals X plus 2 damage to that creature or player instead if you control a creature with power 4 or greater. this.getSpellAbility().addEffect(new ConditionalOneShotEffect( new DamageTargetEffect(new IntPlusDynamicValue(2, ManacostVariableValue.instance)), new DamageTargetEffect(ManacostVariableValue.instance), FerociousCondition.instance, "{this} deals X damage to any target." + "<br><i>Ferocious</i> — {this} deals X plus 2 damage to that permanent or player instead if you control a creature with power 4 or greater")); this.getSpellAbility().addTarget(new TargetAnyTarget()); }
@Override public boolean apply(Game game, Ability source) { return new DamageTargetEffect((Integer) getValue("damage")).apply(game, source); }
public FrilledDeathspitter(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}"); this.subtype.add(SubType.DINOSAUR); this.power = new MageInt(3); this.toughness = new MageInt(2); // <i>Enrage</i> — Whenever Frilled Deathspitter is dealt damage, it deals 2 damage to target opponent. Ability ability = new DealtDamageToSourceTriggeredAbility( Zone.BATTLEFIELD, new DamageTargetEffect(2).setText("it deals 2 damage to target opponent or planeswalker"), false, true ); ability.addTarget(new TargetOpponentOrPlaneswalker()); this.addAbility(ability); }
@Override public boolean checkTrigger(GameEvent event, Game game) { if (game.isActivePlayer(getControllerId()) && super.checkTrigger(event, game)) { SentinelTowerWatcher watcher = game.getState().getWatcher(SentinelTowerWatcher.class); if (watcher == null) { return false; } List<MageObjectReference> spellsCast = watcher.getSpellsThisTurn(); MageObject object = game.getObject(event.getTargetId()); if (object == null || spellsCast == null) { return false; } int damageToDeal = 0; for (MageObjectReference mor : spellsCast) { damageToDeal++; if (mor.refersTo(object, game)) { break; } } for (Effect effect : this.getEffects()) { if (effect instanceof DamageTargetEffect) { ((DamageTargetEffect) effect).setAmount(new StaticValue(damageToDeal)); return true; } } } return false; }