mirror of
https://github.com/correl/mage.git
synced 2024-12-26 03:00:11 +00:00
[SOI] Fixed to Skulk and Investigate. Some minor tweaks to SOI cards.
This commit is contained in:
parent
2a92f5e77a
commit
60bc03e284
10 changed files with 44 additions and 88 deletions
|
@ -44,8 +44,7 @@ import mage.constants.CardType;
|
||||||
import mage.constants.Rarity;
|
import mage.constants.Rarity;
|
||||||
import mage.constants.TargetController;
|
import mage.constants.TargetController;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
import mage.filter.FilterCard;
|
import mage.filter.common.FilterCreatureCard;
|
||||||
import mage.filter.predicate.mageobject.CardTypePredicate;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
@ -53,11 +52,6 @@ import mage.filter.predicate.mageobject.CardTypePredicate;
|
||||||
*/
|
*/
|
||||||
public class DuskwatchRecruiter extends CardImpl {
|
public class DuskwatchRecruiter extends CardImpl {
|
||||||
|
|
||||||
private static final FilterCard filter = new FilterCard("a creature card");
|
|
||||||
static {
|
|
||||||
filter.add(new CardTypePredicate(CardType.CREATURE));
|
|
||||||
}
|
|
||||||
|
|
||||||
public DuskwatchRecruiter(UUID ownerId) {
|
public DuskwatchRecruiter(UUID ownerId) {
|
||||||
super(ownerId, 203, "Duskwatch Recruiter", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{G}");
|
super(ownerId, 203, "Duskwatch Recruiter", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{G}");
|
||||||
this.expansionSetCode = "SOI";
|
this.expansionSetCode = "SOI";
|
||||||
|
@ -74,7 +68,7 @@ public class DuskwatchRecruiter extends CardImpl {
|
||||||
// {2}{G}: Look at the top three cards of your library. You may reveal a creature card from among them and put it into your hand.
|
// {2}{G}: Look at the top three cards of your library. You may reveal a creature card from among them and put it into your hand.
|
||||||
// Put the rest on the bottom of your library in any order.
|
// Put the rest on the bottom of your library in any order.
|
||||||
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD,
|
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD,
|
||||||
new LookLibraryAndPickControllerEffect(new StaticValue(3), false, new StaticValue(1), filter, false),
|
new LookLibraryAndPickControllerEffect(new StaticValue(3), false, new StaticValue(1), new FilterCreatureCard("a creature card"), false),
|
||||||
new ManaCostsImpl("{2}{G}")));
|
new ManaCostsImpl("{2}{G}")));
|
||||||
|
|
||||||
// At the beginning of each upkeep, if no spells were cast last turn, transform Duskwatch Recruiter.
|
// At the beginning of each upkeep, if no spells were cast last turn, transform Duskwatch Recruiter.
|
||||||
|
|
|
@ -49,7 +49,7 @@ public class ExposeEvil extends CardImpl {
|
||||||
this.getSpellAbility().addEffect(new TapTargetEffect());
|
this.getSpellAbility().addEffect(new TapTargetEffect());
|
||||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent(0, 2));
|
this.getSpellAbility().addTarget(new TargetCreaturePermanent(0, 2));
|
||||||
|
|
||||||
// Investigate.
|
// Investigate (Put a colorless Clue artifact token onto the battlefield with \"{2}, Sacrifice this artifact: Draw a card.\")
|
||||||
this.getSpellAbility().addEffect(new InvestigateEffect());
|
this.getSpellAbility().addEffect(new InvestigateEffect());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -47,7 +47,7 @@ public class FurtiveHomunculus extends CardImpl {
|
||||||
this.power = new MageInt(2);
|
this.power = new MageInt(2);
|
||||||
this.toughness = new MageInt(1);
|
this.toughness = new MageInt(1);
|
||||||
|
|
||||||
// Skulk
|
// Skulk (This creature can't be blocked by creatures with greater power.)
|
||||||
this.addAbility(new SkulkAbility());
|
this.addAbility(new SkulkAbility());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,12 +29,14 @@ package mage.sets.shadowsoverinnistrad;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.SimpleStaticAbility;
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
import mage.abilities.condition.common.DeliriumCondition;
|
import mage.abilities.condition.common.DeliriumCondition;
|
||||||
import mage.abilities.decorator.ConditionalContinuousEffect;
|
import mage.abilities.decorator.ConditionalContinuousEffect;
|
||||||
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
||||||
import mage.abilities.keyword.MenaceAbility;
|
import mage.abilities.keyword.MenaceAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
|
import mage.constants.AbilityWord;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.Duration;
|
import mage.constants.Duration;
|
||||||
import mage.constants.Rarity;
|
import mage.constants.Rarity;
|
||||||
|
@ -46,7 +48,7 @@ import mage.constants.Zone;
|
||||||
*/
|
*/
|
||||||
public class HoundOfTheFarbogs extends CardImpl {
|
public class HoundOfTheFarbogs extends CardImpl {
|
||||||
|
|
||||||
final static private String rule = "{this} has menace as long as there are four or more card types among cards in your graveyard";
|
final static private String RULE = "{this} has menace as long as there are four or more card types among cards in your graveyard";
|
||||||
|
|
||||||
public HoundOfTheFarbogs(UUID ownerId) {
|
public HoundOfTheFarbogs(UUID ownerId) {
|
||||||
super(ownerId, 117, "Hound of the Farbogs", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{4}{B}");
|
super(ownerId, 117, "Hound of the Farbogs", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{4}{B}");
|
||||||
|
@ -57,8 +59,10 @@ public class HoundOfTheFarbogs extends CardImpl {
|
||||||
this.toughness = new MageInt(3);
|
this.toughness = new MageInt(3);
|
||||||
|
|
||||||
// <i>Delirium</i> — Hound of the Farborgs has menace as long as there are four or more card types among cards in your graveyard.
|
// <i>Delirium</i> — Hound of the Farborgs has menace as long as there are four or more card types among cards in your graveyard.
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD,
|
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD,
|
||||||
new ConditionalContinuousEffect(new GainAbilitySourceEffect(new MenaceAbility(), Duration.WhileOnBattlefield), new DeliriumCondition(), rule)));
|
new ConditionalContinuousEffect(new GainAbilitySourceEffect(new MenaceAbility(), Duration.WhileOnBattlefield), new DeliriumCondition(), RULE));
|
||||||
|
ability.setAbilityWord(AbilityWord.DELIRIUM);
|
||||||
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
||||||
public HoundOfTheFarbogs(final HoundOfTheFarbogs card) {
|
public HoundOfTheFarbogs(final HoundOfTheFarbogs card) {
|
||||||
|
|
|
@ -52,10 +52,10 @@ import mage.filter.predicate.mageobject.CardTypePredicate;
|
||||||
*/
|
*/
|
||||||
public class KrallenhordeHowler extends CardImpl {
|
public class KrallenhordeHowler extends CardImpl {
|
||||||
|
|
||||||
private static final FilterCard filter = new FilterCard("Creature spells");
|
private static final FilterCard FILTER = new FilterCard("Creature spells");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(Predicates.or(new CardTypePredicate(CardType.CREATURE)));
|
FILTER.add(Predicates.or(new CardTypePredicate(CardType.CREATURE)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public KrallenhordeHowler(UUID ownerId) {
|
public KrallenhordeHowler(UUID ownerId) {
|
||||||
|
@ -71,7 +71,7 @@ public class KrallenhordeHowler extends CardImpl {
|
||||||
this.canTransform = true;
|
this.canTransform = true;
|
||||||
|
|
||||||
// Creature spells you cast cost {1} less to cast.
|
// Creature spells you cast cost {1} less to cast.
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1)));
|
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(FILTER, 1)));
|
||||||
|
|
||||||
// At the beginning of each upkeep, if a player cast two or more spells last turn, transform Krallenhorde Howler.
|
// At the beginning of each upkeep, if a player cast two or more spells last turn, transform Krallenhorde Howler.
|
||||||
TriggeredAbility ability = new BeginningOfUpkeepTriggeredAbility(new TransformSourceEffect(false), TargetController.ANY, false);
|
TriggeredAbility ability = new BeginningOfUpkeepTriggeredAbility(new TransformSourceEffect(false), TargetController.ANY, false);
|
||||||
|
|
|
@ -28,19 +28,15 @@
|
||||||
package mage.sets.shadowsoverinnistrad;
|
package mage.sets.shadowsoverinnistrad;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.effects.Effect;
|
||||||
import mage.abilities.effects.OneShotEffect;
|
import mage.abilities.effects.common.DamageTargetControllerEffect;
|
||||||
|
import mage.abilities.effects.common.ExileTargetEffect;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.Outcome;
|
|
||||||
import mage.constants.Rarity;
|
import mage.constants.Rarity;
|
||||||
import mage.filter.FilterPermanent;
|
import mage.filter.FilterPermanent;
|
||||||
import mage.filter.predicate.Predicates;
|
import mage.filter.predicate.Predicates;
|
||||||
import mage.filter.predicate.mageobject.CardTypePredicate;
|
import mage.filter.predicate.mageobject.CardTypePredicate;
|
||||||
import mage.game.Game;
|
|
||||||
import mage.game.permanent.Permanent;
|
|
||||||
import mage.players.Player;
|
|
||||||
import mage.target.Target;
|
|
||||||
import mage.target.TargetPermanent;
|
import mage.target.TargetPermanent;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -49,10 +45,10 @@ import mage.target.TargetPermanent;
|
||||||
*/
|
*/
|
||||||
public class StructuralDistortion extends CardImpl {
|
public class StructuralDistortion extends CardImpl {
|
||||||
|
|
||||||
private static final FilterPermanent filter = new FilterPermanent("artifact or land");
|
private static final FilterPermanent FILTER = new FilterPermanent("artifact or land");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(Predicates.or(new CardTypePredicate(CardType.ARTIFACT),new CardTypePredicate(CardType.LAND)));
|
FILTER.add(Predicates.or(new CardTypePredicate(CardType.ARTIFACT), new CardTypePredicate(CardType.LAND)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public StructuralDistortion(UUID ownerId) {
|
public StructuralDistortion(UUID ownerId) {
|
||||||
|
@ -60,9 +56,11 @@ public class StructuralDistortion extends CardImpl {
|
||||||
this.expansionSetCode = "SOI";
|
this.expansionSetCode = "SOI";
|
||||||
|
|
||||||
// Exile target artifact or land. Structural Distortion deals 2 damage to that permanent's controller.
|
// Exile target artifact or land. Structural Distortion deals 2 damage to that permanent's controller.
|
||||||
this.getSpellAbility().addEffect(new StructuralDistortionEffect());
|
this.getSpellAbility().addEffect(new ExileTargetEffect());
|
||||||
Target target = new TargetPermanent(filter);
|
Effect effect = new DamageTargetControllerEffect(2);
|
||||||
this.getSpellAbility().addTarget(target);
|
effect.setText("{this} deals 2 damage to that permanent's controller");
|
||||||
|
this.getSpellAbility().addEffect(effect);
|
||||||
|
this.getSpellAbility().addTarget(new TargetPermanent(FILTER));
|
||||||
}
|
}
|
||||||
|
|
||||||
public StructuralDistortion(final StructuralDistortion card) {
|
public StructuralDistortion(final StructuralDistortion card) {
|
||||||
|
@ -74,34 +72,3 @@ public class StructuralDistortion extends CardImpl {
|
||||||
return new StructuralDistortion(this);
|
return new StructuralDistortion(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class StructuralDistortionEffect extends OneShotEffect {
|
|
||||||
|
|
||||||
public StructuralDistortionEffect() {
|
|
||||||
super(Outcome.DestroyPermanent);
|
|
||||||
this.staticText = "Exile target artifact or land. {this} deals 2 damage to that permanent's controller";
|
|
||||||
}
|
|
||||||
|
|
||||||
public StructuralDistortionEffect(final StructuralDistortionEffect effect) {
|
|
||||||
super(effect);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public StructuralDistortionEffect copy() {
|
|
||||||
return new StructuralDistortionEffect(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean apply(Game game, Ability source) {
|
|
||||||
Permanent permanent = game.getPermanent(this.getTargetPointer().getFirst(game, source));
|
|
||||||
if (permanent != null) {
|
|
||||||
permanent.moveToExile(source.getSourceId(), null, source.getSourceId(), game);
|
|
||||||
Player permController = game.getPlayer(permanent.getControllerId());
|
|
||||||
if (permController != null) {
|
|
||||||
permController.damage(2, source.getSourceId(), game, false, true);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -38,14 +38,14 @@ import mage.players.Player;
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* @author fireshoes
|
* @author fireshoes
|
||||||
*/
|
*/
|
||||||
public class DeliriumCondition implements Condition {
|
public class DeliriumCondition implements Condition {
|
||||||
|
|
||||||
private static DeliriumCondition fInstance = new DeliriumCondition();
|
private final static DeliriumCondition INSTANCE = new DeliriumCondition();
|
||||||
|
|
||||||
public static Condition getInstance() {
|
public static Condition getInstance() {
|
||||||
return fInstance;
|
return INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -9,22 +9,20 @@ import mage.abilities.Ability;
|
||||||
import mage.abilities.common.SimpleActivatedAbility;
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
import mage.abilities.costs.common.SacrificeSourceCost;
|
import mage.abilities.costs.common.SacrificeSourceCost;
|
||||||
import mage.abilities.costs.mana.GenericManaCost;
|
import mage.abilities.costs.mana.GenericManaCost;
|
||||||
import mage.abilities.effects.OneShotEffect;
|
import mage.abilities.effects.common.CreateTokenEffect;
|
||||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.Outcome;
|
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
import mage.game.Game;
|
|
||||||
import mage.game.permanent.token.Token;
|
import mage.game.permanent.token.Token;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author LevelX2
|
* @author LevelX2
|
||||||
*/
|
*/
|
||||||
public class InvestigateEffect extends OneShotEffect {
|
public class InvestigateEffect extends CreateTokenEffect {
|
||||||
|
|
||||||
public InvestigateEffect() {
|
public InvestigateEffect() {
|
||||||
super(Outcome.PutCreatureInPlay);
|
super(new ClueArtifactToken());
|
||||||
this.staticText = "Investigate. <i>(Put a colorless Clue artifact token onto the battlefield with \"{2}, Sacrifice this artifact: Draw a card.\")</i>";
|
this.staticText = "Investigate. <i>(Put a colorless Clue artifact token onto the battlefield with \"{2}, Sacrifice this artifact: Draw a card.\")</i>";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,10 +35,6 @@ public class InvestigateEffect extends OneShotEffect {
|
||||||
return new InvestigateEffect(this);
|
return new InvestigateEffect(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean apply(Game game, Ability source) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class ClueArtifactToken extends Token {
|
class ClueArtifactToken extends Token {
|
||||||
|
|
|
@ -52,13 +52,12 @@ class SkulkEffect extends RestrictionEffect {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean applies(Permanent permanent, Ability source, Game game) {
|
public boolean applies(Permanent permanent, Ability source, Game game) {
|
||||||
return !permanent.getControllerId().equals(source.getControllerId());
|
return permanent.getId().equals(source.getSourceId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canBeBlocked(Permanent attacker, Permanent blocker, Ability source, Game game) {
|
public boolean canBeBlocked(Permanent attacker, Permanent blocker, Ability source, Game game) {
|
||||||
return blocker.getId().equals(source.getSourceId())
|
return blocker.getPower().getValue() <= attacker.getPower().getValue();
|
||||||
&& blocker.getPower().getValue() >= attacker.getPower().getValue();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -27,8 +27,7 @@
|
||||||
*/
|
*/
|
||||||
package mage.game.permanent.token;
|
package mage.game.permanent.token;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.DiesTriggeredAbility;
|
import mage.abilities.common.DiesTriggeredAbility;
|
||||||
|
@ -43,17 +42,16 @@ import mage.target.common.TargetCreatureOrPlayer;
|
||||||
*/
|
*/
|
||||||
public class DevilToken extends Token {
|
public class DevilToken extends Token {
|
||||||
|
|
||||||
final static private List<String> tokenImageSets = new ArrayList<>();
|
|
||||||
|
|
||||||
public DevilToken() {
|
public DevilToken() {
|
||||||
super("Devil", "1/1 red Devil creature with \"When this creature dies, it deals 1 damage to target creature or player.\"");
|
super("Devil", "1/1 red Devil creature with \"When this creature dies, it deals 1 damage to target creature or player.\"");
|
||||||
|
availableImageSetCodes.addAll(Arrays.asList("SOI"));
|
||||||
cardType.add(CardType.CREATURE);
|
cardType.add(CardType.CREATURE);
|
||||||
subtype.add("Devil");
|
subtype.add("Devil");
|
||||||
color.setRed(true);
|
color.setRed(true);
|
||||||
power = new MageInt(1);
|
power = new MageInt(1);
|
||||||
toughness = new MageInt(1);
|
toughness = new MageInt(1);
|
||||||
Effect effect = new DamageTargetEffect(1);
|
Effect effect = new DamageTargetEffect(1);
|
||||||
effect.setText("When {this} dies, it deals 1 damage to target creature or player");
|
effect.setText("it deals 1 damage to target creature or player");
|
||||||
Ability ability = new DiesTriggeredAbility(effect);
|
Ability ability = new DiesTriggeredAbility(effect);
|
||||||
ability.addTarget(new TargetCreatureOrPlayer());
|
ability.addTarget(new TargetCreatureOrPlayer());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
Loading…
Reference in a new issue