mirror of
https://github.com/correl/mage.git
synced 2024-12-24 03:00:14 +00:00
Elspeth vs Tezzeret started, SOM cards, static text support for abilities
This commit is contained in:
parent
a314c40206
commit
3710f275db
15 changed files with 705 additions and 21 deletions
|
@ -14,7 +14,7 @@ public class GathererSets implements Iterable<DownloadJob> {
|
|||
private static final File outDir = new File("plugins/images/sets");
|
||||
private static final String[] symbols = {"DIS", "GPT", "RAV", "MRD",
|
||||
"10E", "HOP"};
|
||||
private static final String[] withMythics = {"ALA", "CFX", "ARB", "ZEN", "WWK", "ROE", "SOM", "M10","M11"};
|
||||
private static final String[] withMythics = {"ALA", "CFX", "ARB", "ZEN", "WWK", "ROE", "SOM", "M10", "M11", "DDF"};
|
||||
|
||||
@Override
|
||||
public Iterator<DownloadJob> iterator() {
|
||||
|
|
18
Mage.Sets/src/mage/sets/ElspethvsTezzeret.java
Normal file
18
Mage.Sets/src/mage/sets/ElspethvsTezzeret.java
Normal file
|
@ -0,0 +1,18 @@
|
|||
package mage.sets;
|
||||
|
||||
import mage.Constants;
|
||||
import mage.cards.ExpansionSet;
|
||||
|
||||
import java.util.GregorianCalendar;
|
||||
|
||||
public class ElspethvsTezzeret extends ExpansionSet {
|
||||
private static final ElspethvsTezzeret fINSTANCE = new ElspethvsTezzeret();
|
||||
|
||||
public static ElspethvsTezzeret getInstance() {
|
||||
return fINSTANCE;
|
||||
}
|
||||
|
||||
private ElspethvsTezzeret() {
|
||||
super("Duel Decks: Elspeth vs. Tezzeret", "DDF", "", "mage.sets.elspethvstezzeret", new GregorianCalendar(2010, 8, 3).getTime(), Constants.SetType.REPRINT);
|
||||
}
|
||||
}
|
|
@ -64,6 +64,7 @@ public class Sets extends HashMap<String, ExpansionSet> {
|
|||
this.addSet(AlaraReborn.getInstance());
|
||||
this.addSet(Conflux.getInstance());
|
||||
this.addSet(Dissension.getInstance());
|
||||
this.addSet(ElspethvsTezzeret.getInstance());
|
||||
this.addSet(Guildpact.getInstance());
|
||||
this.addSet(Magic2010.getInstance());
|
||||
this.addSet(Magic2011.getInstance());
|
||||
|
|
54
Mage.Sets/src/mage/sets/elspethvstezzeret/EliteVanguard.java
Normal file
54
Mage.Sets/src/mage/sets/elspethvstezzeret/EliteVanguard.java
Normal file
|
@ -0,0 +1,54 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
|
||||
package mage.sets.elspethvstezzeret;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Loki
|
||||
*/
|
||||
public class EliteVanguard extends mage.sets.magic2010.EliteVanguard {
|
||||
|
||||
public EliteVanguard (UUID ownerId) {
|
||||
super(ownerId);
|
||||
this.expansionSetCode = "DDF";
|
||||
this.cardNumber = 2;
|
||||
}
|
||||
|
||||
public EliteVanguard (final EliteVanguard card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EliteVanguard copy() {
|
||||
return new EliteVanguard(this);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
|
||||
package mage.sets.elspethvstezzeret;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Loki
|
||||
*/
|
||||
public class ElspethKnightErrant extends mage.sets.shardsofalara.ElspethKnightErrant {
|
||||
|
||||
public ElspethKnightErrant (UUID ownerId) {
|
||||
super(ownerId);
|
||||
this.expansionSetCode = "DDF";
|
||||
this.cardNumber = 1;
|
||||
}
|
||||
|
||||
public ElspethKnightErrant (final ElspethKnightErrant card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElspethKnightErrant copy() {
|
||||
return new ElspethKnightErrant(this);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,78 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
|
||||
package mage.sets.scarsofmirrodin;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.Constants.CardType;
|
||||
import mage.Constants.Duration;
|
||||
import mage.Constants.Rarity;
|
||||
import mage.Constants.Zone;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.common.GainAbilityControlledEffect;
|
||||
import mage.abilities.keyword.IntimidateAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.filter.Filter;
|
||||
import mage.filter.FilterPermanent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Loki
|
||||
*/
|
||||
public class BellowingTanglewurm extends CardImpl<BellowingTanglewurm> {
|
||||
private static final FilterPermanent filter = new FilterPermanent("green creatures");
|
||||
|
||||
static {
|
||||
filter.getCardType().add(CardType.CREATURE);
|
||||
filter.setScopeCardType(Filter.ComparisonScope.Any);
|
||||
filter.setUseColor(true);
|
||||
filter.getColor().setGreen(true);
|
||||
}
|
||||
|
||||
public BellowingTanglewurm (UUID ownerId) {
|
||||
super(ownerId, 111, "Bellowing Tanglewurm", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{G}{G}");
|
||||
this.expansionSetCode = "SOM";
|
||||
this.subtype.add("Wurm");
|
||||
this.color.setGreen(true);
|
||||
this.power = new MageInt(4);
|
||||
this.toughness = new MageInt(4);
|
||||
this.addAbility(IntimidateAbility.getInstance());
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(IntimidateAbility.getInstance(), Duration.WhileOnBattlefield, filter, true)));
|
||||
}
|
||||
|
||||
public BellowingTanglewurm (final BellowingTanglewurm card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BellowingTanglewurm copy() {
|
||||
return new BellowingTanglewurm(this);
|
||||
}
|
||||
|
||||
}
|
67
Mage.Sets/src/mage/sets/scarsofmirrodin/BlunttheAssault.java
Normal file
67
Mage.Sets/src/mage/sets/scarsofmirrodin/BlunttheAssault.java
Normal file
|
@ -0,0 +1,67 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
|
||||
package mage.sets.scarsofmirrodin;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import mage.Constants;
|
||||
import mage.Constants.CardType;
|
||||
import mage.Constants.Rarity;
|
||||
import mage.Constants.Zone;
|
||||
import mage.abilities.dynamicvalue.common.CreaturesOnBattlefieldCount;
|
||||
import mage.abilities.effects.common.GainLifeEffect;
|
||||
import mage.abilities.effects.common.PreventAllCombatDamageEffect;
|
||||
import mage.cards.CardImpl;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Loki
|
||||
*/
|
||||
public class BlunttheAssault extends CardImpl<BlunttheAssault> {
|
||||
|
||||
public BlunttheAssault (UUID ownerId) {
|
||||
super(ownerId, 113, "Blunt the Assault", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{3}{G}");
|
||||
this.expansionSetCode = "SOM";
|
||||
this.color.setGreen(true);
|
||||
GainLifeEffect effect = new GainLifeEffect(new CreaturesOnBattlefieldCount());
|
||||
effect.setStaticText("You gain 1 life for each creature on the battlefield");
|
||||
this.getSpellAbility().addEffect(effect);
|
||||
this.getSpellAbility().addEffect(new PreventAllCombatDamageEffect(Constants.Duration.EndOfTurn));
|
||||
}
|
||||
|
||||
public BlunttheAssault (final BlunttheAssault card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlunttheAssault copy() {
|
||||
return new BlunttheAssault(this);
|
||||
}
|
||||
|
||||
}
|
105
Mage.Sets/src/mage/sets/scarsofmirrodin/MeltTerrain.java
Normal file
105
Mage.Sets/src/mage/sets/scarsofmirrodin/MeltTerrain.java
Normal file
|
@ -0,0 +1,105 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
|
||||
package mage.sets.scarsofmirrodin;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import mage.Constants;
|
||||
import mage.Constants.CardType;
|
||||
import mage.Constants.Rarity;
|
||||
import mage.Constants.Zone;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.DestroyTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
import mage.target.common.TargetLandPermanent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Loki
|
||||
*/
|
||||
public class MeltTerrain extends CardImpl<MeltTerrain> {
|
||||
|
||||
public MeltTerrain (UUID ownerId) {
|
||||
super(ownerId, 97, "Melt Terrain", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{2}{R}{R}");
|
||||
this.expansionSetCode = "SOM";
|
||||
this.color.setRed(true);
|
||||
this.getSpellAbility().addEffect(new DestroyTargetEffect());
|
||||
this.getSpellAbility().addEffect(new MeltTerrainEffect());
|
||||
this.getSpellAbility().addTarget(new TargetLandPermanent());
|
||||
}
|
||||
|
||||
public MeltTerrain (final MeltTerrain card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MeltTerrain copy() {
|
||||
return new MeltTerrain(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class MeltTerrainEffect extends OneShotEffect<MeltTerrainEffect> {
|
||||
MeltTerrainEffect() {
|
||||
super(Constants.Outcome.Damage);
|
||||
}
|
||||
|
||||
MeltTerrainEffect(final MeltTerrainEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Permanent p = game.getBattlefield().getPermanent(source.getFirstTarget());
|
||||
if (p == null) {
|
||||
p = (Permanent) game.getLastKnownInformation(source.getFirstTarget(), Zone.BATTLEFIELD);
|
||||
}
|
||||
if (p != null) {
|
||||
Player player = game.getPlayer(p.getControllerId());
|
||||
if (player != null) {
|
||||
player.damage(2, source.getSourceId(), game, false, true);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MeltTerrainEffect copy() {
|
||||
return new MeltTerrainEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getText(Ability source) {
|
||||
return "Melt Terrain deals 2 damage to that land's controller";
|
||||
}
|
||||
}
|
109
Mage.Sets/src/mage/sets/scarsofmirrodin/MyrGalvanizer.java
Normal file
109
Mage.Sets/src/mage/sets/scarsofmirrodin/MyrGalvanizer.java
Normal file
|
@ -0,0 +1,109 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
|
||||
package mage.sets.scarsofmirrodin;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import mage.Constants;
|
||||
import mage.Constants.CardType;
|
||||
import mage.Constants.Duration;
|
||||
import mage.Constants.Rarity;
|
||||
import mage.Constants.Zone;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.BoostControlledEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.filter.Filter;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Loki
|
||||
*/
|
||||
public class MyrGalvanizer extends CardImpl<MyrGalvanizer> {
|
||||
static FilterCreaturePermanent filter = new FilterCreaturePermanent();
|
||||
|
||||
static {
|
||||
filter.getSubtype().add("Myr");
|
||||
filter.setScopeSubtype(Filter.ComparisonScope.Any);
|
||||
}
|
||||
|
||||
public MyrGalvanizer (UUID ownerId) {
|
||||
super(ownerId, 181, "Myr Galvanizer", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{3}");
|
||||
this.expansionSetCode = "SOM";
|
||||
this.subtype.add("Myr");
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(2);
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, filter, true)));
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MyrGalvanizerEffect(), new TapSourceCost());
|
||||
ability.addCost(new GenericManaCost(1));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
public MyrGalvanizer (final MyrGalvanizer card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MyrGalvanizer copy() {
|
||||
return new MyrGalvanizer(this);
|
||||
}
|
||||
}
|
||||
|
||||
class MyrGalvanizerEffect extends OneShotEffect<MyrGalvanizerEffect> {
|
||||
|
||||
MyrGalvanizerEffect() {
|
||||
super(Constants.Outcome.Untap);
|
||||
}
|
||||
|
||||
MyrGalvanizerEffect(final MyrGalvanizerEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
for (Permanent permanent: game.getBattlefield().getActivePermanents(MyrGalvanizer.filter, source.getControllerId(), game)) {
|
||||
if (!permanent.getId().equals(source.getSourceId()))
|
||||
permanent.untap(game);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MyrGalvanizerEffect copy() {
|
||||
return new MyrGalvanizerEffect(this);
|
||||
}
|
||||
}
|
140
Mage.Sets/src/mage/sets/scarsofmirrodin/VigilfortheLost.java
Normal file
140
Mage.Sets/src/mage/sets/scarsofmirrodin/VigilfortheLost.java
Normal file
|
@ -0,0 +1,140 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
|
||||
package mage.sets.scarsofmirrodin;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import mage.Constants;
|
||||
import mage.Constants.CardType;
|
||||
import mage.Constants.Duration;
|
||||
import mage.Constants.Rarity;
|
||||
import mage.Constants.Zone;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.costs.VariableCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.costs.mana.VariableManaCost;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.events.TableEvent;
|
||||
import mage.game.events.ZoneChangeEvent;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Loki
|
||||
*/
|
||||
public class VigilfortheLost extends CardImpl<VigilfortheLost> {
|
||||
|
||||
public VigilfortheLost (UUID ownerId) {
|
||||
super(ownerId, 26, "Vigil for the Lost", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT}, "{3}{W}");
|
||||
this.expansionSetCode = "SOM";
|
||||
this.color.setWhite(true);
|
||||
this.addAbility(new VigilfortheLostTriggeredAbility());
|
||||
}
|
||||
|
||||
public VigilfortheLost (final VigilfortheLost card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public VigilfortheLost copy() {
|
||||
return new VigilfortheLost(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class VigilfortheLostTriggeredAbility extends TriggeredAbilityImpl<VigilfortheLostTriggeredAbility> {
|
||||
VigilfortheLostTriggeredAbility() {
|
||||
super(Zone.BATTLEFIELD, new VigilfortheLostEffect());
|
||||
}
|
||||
|
||||
VigilfortheLostTriggeredAbility(final VigilfortheLostTriggeredAbility ability) {
|
||||
super(ability);
|
||||
}
|
||||
|
||||
@Override
|
||||
public VigilfortheLostTriggeredAbility copy() {
|
||||
return new VigilfortheLostTriggeredAbility(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
if (event.getType() == GameEvent.EventType.ZONE_CHANGE &&
|
||||
((ZoneChangeEvent)event).getToZone() == Zone.GRAVEYARD &&
|
||||
((ZoneChangeEvent)event).getFromZone() == Zone.BATTLEFIELD) {
|
||||
Permanent p = (Permanent) game.getLastKnownInformation(event.getTargetId(), Zone.BATTLEFIELD);
|
||||
if (p.getControllerId().equals(this.getControllerId())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Whenever a creature you control is put into a graveyard from the battlefield, you may pay {X}. If you do, you gain X life.";
|
||||
}
|
||||
}
|
||||
|
||||
class VigilfortheLostEffect extends OneShotEffect<VigilfortheLostEffect> {
|
||||
VigilfortheLostEffect() {
|
||||
super(Constants.Outcome.GainLife);
|
||||
}
|
||||
|
||||
VigilfortheLostEffect(final VigilfortheLostEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
ManaCostsImpl cost = new ManaCostsImpl("{X}");
|
||||
cost.clearPaid();
|
||||
if (cost.pay(game, source.getId(), source.getControllerId(), false)) {
|
||||
Player player = game.getPlayer(source.getControllerId());
|
||||
player.gainLife(((VariableCost)cost.getVariableCosts().get(0)).getAmount(), game);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public VigilfortheLostEffect copy() {
|
||||
return new VigilfortheLostEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getText(Ability source) {
|
||||
return "you may pay {X}. If you do, you gain X life";
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
package mage.abilities.dynamicvalue.common;
|
||||
|
||||
import mage.Constants;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.filter.Filter;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.game.Game;
|
||||
|
||||
public class CreaturesOnBattlefieldCount implements DynamicValue {
|
||||
private static final FilterPermanent filter = new FilterPermanent();
|
||||
|
||||
static {
|
||||
filter.getCardType().add(Constants.CardType.CREATURE);
|
||||
filter.setScopeCardType(Filter.ComparisonScope.Any);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int calculate(Game game, Ability sourceAbility) {
|
||||
return game.getBattlefield().countAll(filter);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DynamicValue clone() {
|
||||
return new CreaturesOnBattlefieldCount();
|
||||
}
|
||||
}
|
|
@ -42,6 +42,7 @@ public abstract class EffectImpl<T extends Effect<T>> implements Effect<T> {
|
|||
protected UUID id;
|
||||
protected final Outcome outcome;
|
||||
protected EffectType effectType;
|
||||
protected String staticText = "";
|
||||
|
||||
public EffectImpl(Outcome outcome) {
|
||||
this.id = UUID.randomUUID();
|
||||
|
@ -52,6 +53,7 @@ public abstract class EffectImpl<T extends Effect<T>> implements Effect<T> {
|
|||
this.id = effect.id;
|
||||
this.outcome = effect.outcome;
|
||||
this.effectType = effect.effectType;
|
||||
this.staticText = effect.staticText;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -61,9 +63,21 @@ public abstract class EffectImpl<T extends Effect<T>> implements Effect<T> {
|
|||
|
||||
@Override
|
||||
public String getText(Ability source) {
|
||||
return "";
|
||||
if (staticText.equals("")) {
|
||||
return getDynamicText(source);
|
||||
} else {
|
||||
return staticText;
|
||||
}
|
||||
}
|
||||
|
||||
protected String getDynamicText(Ability source) {
|
||||
return "";
|
||||
}
|
||||
|
||||
public void setStaticText(String staticText) {
|
||||
this.staticText = staticText;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Outcome getOutcome() {
|
||||
return outcome;
|
||||
|
|
|
@ -33,6 +33,8 @@ import mage.Constants.Layer;
|
|||
import mage.Constants.Outcome;
|
||||
import mage.Constants.SubLayer;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.dynamicvalue.common.StaticValue;
|
||||
import mage.abilities.effects.ContinuousEffectImpl;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
|
@ -42,20 +44,23 @@ import mage.game.permanent.Permanent;
|
|||
* @author BetaSteward_at_googlemail.com
|
||||
*/
|
||||
public class BoostSourceEffect extends ContinuousEffectImpl<BoostSourceEffect> {
|
||||
|
||||
private int power;
|
||||
private int toughness;
|
||||
private DynamicValue power;
|
||||
private DynamicValue toughness;
|
||||
|
||||
public BoostSourceEffect(int power, int toughness, Duration duration) {
|
||||
super(duration, Layer.PTChangingEffects_7, SubLayer.ModifyPT_7c, Outcome.BoostCreature);
|
||||
this.power = power;
|
||||
this.toughness = toughness;
|
||||
this(new StaticValue(power), new StaticValue(toughness), duration);
|
||||
}
|
||||
|
||||
public BoostSourceEffect(DynamicValue power, DynamicValue toughness, Duration duration) {
|
||||
super(duration, Layer.PTChangingEffects_7, SubLayer.ModifyPT_7c, Outcome.BoostCreature);
|
||||
this.power = power;
|
||||
this.toughness = toughness;
|
||||
}
|
||||
|
||||
public BoostSourceEffect(final BoostSourceEffect effect) {
|
||||
super(effect);
|
||||
this.power = effect.power;
|
||||
this.toughness = effect.toughness;
|
||||
this.power = effect.power.clone();
|
||||
this.toughness = effect.toughness.clone();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -65,18 +70,18 @@ public class BoostSourceEffect extends ContinuousEffectImpl<BoostSourceEffect> {
|
|||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Permanent target = (Permanent) game.getPermanent(source.getSourceId());
|
||||
Permanent target = game.getPermanent(source.getSourceId());
|
||||
if (target != null) {
|
||||
target.addPower(power);
|
||||
target.addToughness(toughness);
|
||||
target.addPower(power.calculate(game, source));
|
||||
target.addToughness(toughness.calculate(game, source));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getText(Ability source) {
|
||||
return "{this} gets " + String.format("%1$+d/%2$+d", power, toughness) + " " + duration.toString();
|
||||
public String getDynamicText(Ability source) {
|
||||
return "{this} gets " + power.toString() + "/" + toughness.toString() + " " + duration.toString();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -30,6 +30,8 @@ package mage.abilities.effects.common;
|
|||
|
||||
import mage.Constants.Outcome;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.dynamicvalue.common.StaticValue;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
|
@ -40,16 +42,20 @@ import mage.players.Player;
|
|||
*/
|
||||
public class GainLifeEffect extends OneShotEffect<GainLifeEffect> {
|
||||
|
||||
private int life;
|
||||
private DynamicValue life;
|
||||
|
||||
public GainLifeEffect(int life) {
|
||||
public GainLifeEffect(int life) {
|
||||
this(new StaticValue(life));
|
||||
}
|
||||
|
||||
public GainLifeEffect(DynamicValue life) {
|
||||
super(Outcome.GainLife);
|
||||
this.life = life;
|
||||
}
|
||||
|
||||
public GainLifeEffect(final GainLifeEffect effect) {
|
||||
super(effect);
|
||||
this.life = effect.life;
|
||||
this.life = effect.life.clone();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -61,14 +67,14 @@ public class GainLifeEffect extends OneShotEffect<GainLifeEffect> {
|
|||
public boolean apply(Game game, Ability source) {
|
||||
Player player = game.getPlayer(source.getControllerId());
|
||||
if (player != null) {
|
||||
player.gainLife(life, game);
|
||||
player.gainLife(life.calculate(game, source), game);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getText(Ability source) {
|
||||
return "you gain " + Integer.toString(life) + " life";
|
||||
public String getDynamicText(Ability source) {
|
||||
return "you gain " + life.toString() + " life";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -121,6 +121,8 @@ $fulltoshort{'Worldwake'} = 'WWK';
|
|||
$fulltoshort{'Zendikar'} = 'ZEN';
|
||||
$fulltoshort{'Archenemy'} = 'ARC';
|
||||
$fulltoshort{'Scars of Mirrodin'} = 'SOM';
|
||||
$fulltoshort{'From the Vault: Relics'} = 'FVR';
|
||||
$fulltoshort{'Duel Decks: Elspeth vs. Tezzeret'} = 'DDF';
|
||||
|
||||
my %wizardstous;
|
||||
$wizardstous{'6E'} = '6ED';
|
||||
|
@ -203,6 +205,8 @@ $wizardstous{'LGN'} = 'LGN';
|
|||
$wizardstous{'AN'} = 'ARN';
|
||||
$wizardstous{'WWK'} = 'WWK';
|
||||
$wizardstous{'SOM'} = 'SOM';
|
||||
$wizardstous{'V10'} = 'FVR';
|
||||
$wizardstous{'DDF'} = 'DDF';
|
||||
|
||||
my %knownSets;
|
||||
$knownSets{'ARB'} = 'alarareborn';
|
||||
|
@ -219,6 +223,8 @@ $knownSets{'ZEN'} = 'zendikar';
|
|||
$knownSets{'SOM'} = 'scarsofmirrodin';
|
||||
$knownSets{'GPT'} = 'guildpact';
|
||||
$knownSets{'DIS'} = 'dissension';
|
||||
$knownSets{'MRD'} = 'mirrodin';
|
||||
$knownSets{'DDF'} = 'elspethvstezzeret';
|
||||
|
||||
my %raritiesConversion;
|
||||
$raritiesConversion{'C'} = 'COMMON';
|
||||
|
|
Loading…
Reference in a new issue