mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 02:30:08 -08:00
[SPM] implement Scarlet Spider, Ben Reilly
This commit is contained in:
parent
8b6b90c8d8
commit
ed134cbfc6
4 changed files with 169 additions and 1 deletions
100
Mage.Sets/src/mage/cards/s/ScarletSpiderBenReilly.java
Normal file
100
Mage.Sets/src/mage/cards/s/ScarletSpiderBenReilly.java
Normal file
|
|
@ -0,0 +1,100 @@
|
||||||
|
package mage.cards.s;
|
||||||
|
|
||||||
|
import mage.MageInt;
|
||||||
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.common.EntersBattlefieldAbility;
|
||||||
|
import mage.abilities.condition.common.WebSlingingCondition;
|
||||||
|
import mage.abilities.costs.common.ReturnToHandChosenControlledPermanentCost;
|
||||||
|
import mage.abilities.dynamicvalue.DynamicValue;
|
||||||
|
import mage.abilities.effects.Effect;
|
||||||
|
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||||
|
import mage.abilities.keyword.TrampleAbility;
|
||||||
|
import mage.abilities.keyword.WebSlingingAbility;
|
||||||
|
import mage.cards.CardImpl;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
import mage.constants.SuperType;
|
||||||
|
import mage.counters.CounterType;
|
||||||
|
import mage.game.Game;
|
||||||
|
import mage.game.stack.Spell;
|
||||||
|
import mage.util.CardUtil;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Jmlundeen
|
||||||
|
*/
|
||||||
|
public final class ScarletSpiderBenReilly extends CardImpl {
|
||||||
|
|
||||||
|
public ScarletSpiderBenReilly(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}{G}");
|
||||||
|
|
||||||
|
this.supertype.add(SuperType.LEGENDARY);
|
||||||
|
this.subtype.add(SubType.SPIDER);
|
||||||
|
this.subtype.add(SubType.HUMAN);
|
||||||
|
this.subtype.add(SubType.HERO);
|
||||||
|
this.power = new MageInt(4);
|
||||||
|
this.toughness = new MageInt(3);
|
||||||
|
|
||||||
|
// Web-slinging {R}{G}
|
||||||
|
this.addAbility(new WebSlingingAbility(this, "{R}{G}"));
|
||||||
|
|
||||||
|
// Trample
|
||||||
|
this.addAbility(TrampleAbility.getInstance());
|
||||||
|
|
||||||
|
// Sensational Save -- If Scarlet Spider was cast using web-slinging, he enters with X +1/+1 counters on him, where X is the mana value of the returned creature.
|
||||||
|
String ruleText = CardUtil.italicizeWithEmDash("Sensational Save") + "If {this} was cast using web-slinging, " +
|
||||||
|
"he enters with X +1/+1 counters on him, where X is the mana value of the returned creature.";
|
||||||
|
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(),
|
||||||
|
ScarletSpiderBenReillyValue.instance, false),
|
||||||
|
WebSlingingCondition.THIS, ruleText, ""));
|
||||||
|
}
|
||||||
|
|
||||||
|
private ScarletSpiderBenReilly(final ScarletSpiderBenReilly card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ScarletSpiderBenReilly copy() {
|
||||||
|
return new ScarletSpiderBenReilly(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
enum ScarletSpiderBenReillyValue implements DynamicValue {
|
||||||
|
instance;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int calculate(Game game, Ability sourceAbility, Effect effect) {
|
||||||
|
|
||||||
|
Spell spell = game.getSpellOrLKIStack(sourceAbility.getSourceId());
|
||||||
|
if (spell == null || spell.getSpellAbility() == null) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ReturnToHandChosenControlledPermanentCost returnCost = (ReturnToHandChosenControlledPermanentCost) spell.getSpellAbility().getCosts().stream()
|
||||||
|
.filter(cost -> cost instanceof ReturnToHandChosenControlledPermanentCost)
|
||||||
|
.findFirst()
|
||||||
|
.orElse(null);
|
||||||
|
if (returnCost == null || returnCost.getPermanents().isEmpty()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return returnCost.getPermanents().get(0).getManaValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ScarletSpiderBenReillyValue copy() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "X";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getMessage() {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -168,6 +168,8 @@ public final class MarvelsSpiderMan extends ExpansionSet {
|
||||||
cards.add(new SetCardInfo("Sandman's Quicksand", 63, Rarity.UNCOMMON, mage.cards.s.SandmansQuicksand.class));
|
cards.add(new SetCardInfo("Sandman's Quicksand", 63, Rarity.UNCOMMON, mage.cards.s.SandmansQuicksand.class));
|
||||||
cards.add(new SetCardInfo("Sandman, Shifting Scoundrel", 112, Rarity.RARE, mage.cards.s.SandmanShiftingScoundrel.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Sandman, Shifting Scoundrel", 112, Rarity.RARE, mage.cards.s.SandmanShiftingScoundrel.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Sandman, Shifting Scoundrel", 266, Rarity.RARE, mage.cards.s.SandmanShiftingScoundrel.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Sandman, Shifting Scoundrel", 266, Rarity.RARE, mage.cards.s.SandmanShiftingScoundrel.class, NON_FULL_USE_VARIOUS));
|
||||||
|
cards.add(new SetCardInfo("Scarlet Spider, Ben Reilly", 142, Rarity.RARE, mage.cards.s.ScarletSpiderBenReilly.class, NON_FULL_USE_VARIOUS));
|
||||||
|
cards.add(new SetCardInfo("Scarlet Spider, Ben Reilly", 214, Rarity.RARE, mage.cards.s.ScarletSpiderBenReilly.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Scarlet Spider, Kaine", 143, Rarity.UNCOMMON, mage.cards.s.ScarletSpiderKaine.class));
|
cards.add(new SetCardInfo("Scarlet Spider, Kaine", 143, Rarity.UNCOMMON, mage.cards.s.ScarletSpiderKaine.class));
|
||||||
cards.add(new SetCardInfo("School Daze", 42, Rarity.UNCOMMON, mage.cards.s.SchoolDaze.class));
|
cards.add(new SetCardInfo("School Daze", 42, Rarity.UNCOMMON, mage.cards.s.SchoolDaze.class));
|
||||||
cards.add(new SetCardInfo("Scorpion's Sting", 65, Rarity.COMMON, mage.cards.s.ScorpionsSting.class));
|
cards.add(new SetCardInfo("Scorpion's Sting", 65, Rarity.COMMON, mage.cards.s.ScorpionsSting.class));
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,65 @@
|
||||||
|
package org.mage.test.cards.single.spm;
|
||||||
|
|
||||||
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
|
import mage.abilities.effects.common.TapAllEffect;
|
||||||
|
import mage.constants.PhaseStep;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
import mage.constants.Zone;
|
||||||
|
import mage.counters.CounterType;
|
||||||
|
import mage.filter.common.FilterCreaturePermanent;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.mage.test.serverside.base.CardTestPlayerBase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Jmlundeen
|
||||||
|
*/
|
||||||
|
public class ScarletSpiderBenReillyTest extends CardTestPlayerBase {
|
||||||
|
|
||||||
|
/*
|
||||||
|
Scarlet Spider, Ben Reilly
|
||||||
|
{1}{R}{G}
|
||||||
|
Legendary Creature - Spider Human Hero
|
||||||
|
Web-slinging {R}{G}
|
||||||
|
Trample
|
||||||
|
Sensational Save -- If Scarlet Spider was cast using web-slinging, he enters with X +1/+1 counters on him, where X is the mana value of the returned creature.
|
||||||
|
4/3
|
||||||
|
*/
|
||||||
|
private static final String scarletSpiderBenReilly = "Scarlet Spider, Ben Reilly";
|
||||||
|
|
||||||
|
/*
|
||||||
|
Bear Cub
|
||||||
|
{1}{G}
|
||||||
|
Creature - Bear
|
||||||
|
|
||||||
|
2/2
|
||||||
|
*/
|
||||||
|
private static final String bearCub = "Bear Cub";
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testScarletSpiderBenReilly() {
|
||||||
|
setStrictChooseMode(true);
|
||||||
|
|
||||||
|
addCustomCardWithAbility("tap all creatures", playerA, new SimpleActivatedAbility(
|
||||||
|
new TapAllEffect(new FilterCreaturePermanent(SubType.BEAR, "bears")),
|
||||||
|
new ManaCostsImpl<>("")
|
||||||
|
));
|
||||||
|
|
||||||
|
addCard(Zone.HAND, playerA, scarletSpiderBenReilly);
|
||||||
|
addCard(Zone.BATTLEFIELD, playerA, bearCub, 1);
|
||||||
|
addCard(Zone.BATTLEFIELD, playerA, "Taiga", 3);
|
||||||
|
|
||||||
|
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "tap all"); // tap bears, addCard command isn't working to set tapped
|
||||||
|
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||||
|
|
||||||
|
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, scarletSpiderBenReilly + " with Web-slinging");
|
||||||
|
setChoice(playerA, bearCub);
|
||||||
|
|
||||||
|
setStopAt(1, PhaseStep.END_TURN);
|
||||||
|
execute();
|
||||||
|
|
||||||
|
assertCounterCount(playerA, scarletSpiderBenReilly, CounterType.P1P1, 2);
|
||||||
|
assertHandCount(playerA, bearCub, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -10,7 +10,8 @@ import mage.util.CardUtil;
|
||||||
* @author TheElk801
|
* @author TheElk801
|
||||||
*/
|
*/
|
||||||
public enum WebSlingingCondition implements Condition {
|
public enum WebSlingingCondition implements Condition {
|
||||||
THEY("they were");
|
THEY("they were"),
|
||||||
|
THIS("{this}");
|
||||||
private final String message;
|
private final String message;
|
||||||
|
|
||||||
WebSlingingCondition(String message) {
|
WebSlingingCondition(String message) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue