mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 04:38:00 +00:00
Remove accidentally added files
This commit is contained in:
3
.gitattributes
vendored
3
.gitattributes
vendored
@@ -2122,7 +2122,6 @@ res/cardsfolder/d/desolation_angel.txt svneol=native#text/plain
|
||||
res/cardsfolder/d/desolation_giant.txt svneol=native#text/plain
|
||||
res/cardsfolder/d/desperate_charge.txt svneol=native#text/plain
|
||||
res/cardsfolder/d/desperate_ravings.txt -text
|
||||
res/cardsfolder/d/desperate_ritual.txt svneol=native#text/plain
|
||||
res/cardsfolder/d/despise.txt svneol=native#text/plain
|
||||
res/cardsfolder/d/despoil.txt svneol=native#text/plain
|
||||
res/cardsfolder/d/despondency.txt svneol=native#text/plain
|
||||
@@ -9077,7 +9076,6 @@ res/cardsfolder/t/throat_slitter.txt svneol=native#text/plain
|
||||
res/cardsfolder/t/throne_of_bone.txt svneol=native#text/plain
|
||||
res/cardsfolder/t/throne_of_empires.txt -text
|
||||
res/cardsfolder/t/throne_of_geth.txt svneol=native#text/plain
|
||||
res/cardsfolder/t/through_the_breach.txt svneol=native#text/plain
|
||||
res/cardsfolder/t/thrull_champion.txt svneol=native#text/plain
|
||||
res/cardsfolder/t/thrull_retainer.txt -text
|
||||
res/cardsfolder/t/thrull_surgeon.txt svneol=native#text/plain
|
||||
@@ -11048,7 +11046,6 @@ src/main/java/forge/card/abilityfactory/AbilityFactoryRegenerate.java svneol=nat
|
||||
src/main/java/forge/card/abilityfactory/AbilityFactoryReveal.java svneol=native#text/plain
|
||||
src/main/java/forge/card/abilityfactory/AbilityFactorySacrifice.java svneol=native#text/plain
|
||||
src/main/java/forge/card/abilityfactory/AbilityFactorySetState.java svneol=native#text/plain
|
||||
src/main/java/forge/card/abilityfactory/AbilityFactorySplice.java svneol=native#text/plain
|
||||
src/main/java/forge/card/abilityfactory/AbilityFactoryToken.java svneol=native#text/plain
|
||||
src/main/java/forge/card/abilityfactory/AbilityFactoryTurns.java svneol=native#text/plain
|
||||
src/main/java/forge/card/abilityfactory/AbilityFactoryZoneAffecting.java svneol=native#text/plain
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
Name:Desperate Ritual
|
||||
ManaCost:1 R
|
||||
Types:Instant Arcane
|
||||
Text:no text
|
||||
A:SP$ Mana | Cost$ R | Produced$ R | Amount$ 3 | SpellDescription$ Add R R R to your mana pool.
|
||||
S:Mode$ Continuous | Affected$ Arcane.YouCtrl | EffectZone$ Stack | AffectedZone$ Stack| AddAbility$ Mana | Description$ Splice onto Arcane {1}{R}
|
||||
SVar:Mana:SP$ Mana | Cost$ 1 R | Produced$ R | Amount$ 3 | SpellDescription$ Add R R R to your mana pool.
|
||||
SVar:RemAIDeck:True
|
||||
SVar:Rarity:Common
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/desperate_ritual.jpg
|
||||
SetInfo:CHK|Common|http://magiccards.info/scans/en/chk/163.jpg
|
||||
Oracle:Add {R}{R}{R} to your mana pool.
|
||||
End
|
||||
@@ -1,15 +0,0 @@
|
||||
Name:Through the Breach
|
||||
ManaCost:4 R
|
||||
Types:Instant Arcane
|
||||
Text:(Note: Splice onto Arcane is not properly implemented. It will create an instance of this spell on the stack rather than adding it to the first spell)
|
||||
A:SP$ ChangeZone | Cost$ 4 R | Origin$ Hand | Destination$ Battlefield | ChangeType$ Creature.YouCtrl | SubAbility$ DBPump | RememberChanged$ True | ForgetOtherRemembered$ True | SpellDescription$ You may put a creature card from your hand onto the battlefield. That creature gains haste. Sacrifice the creature at the beginning of the next end step.
|
||||
SVar:DBPump:DB$Pump | KW$ Haste & HIDDEN At the beginning of the end step, sacrifice CARDNAME. | Defined$ Remembered | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$Cleanup | ClearRemembered$ True
|
||||
T:Mode$ SpellCast | ValidCard$ Card.Arcane+YouCtrl | Execute$ TrigSplice | TriggerZones$ Hand | OptionalDecider$ You | TriggerDescription$ Splice onto Arcane 2 R R (As you cast an Arcane spell, you may reveal this card from your hand and pay its splice cost. If you do, add this card's effects to that spell.)
|
||||
SVar:TrigSplice:AB$ChangeZone | Cost$ 2 R R | Origin$ Hand | Destination$ Battlefield | ChangeType$ Creature.YouCtrl | SubAbility$ DBPump | RememberChanged$ True | ForgetOtherRemembered$ True | SpellDescription$ Splice CARDNAME onto Arcane.
|
||||
SVar:RemAIDeck:True
|
||||
SVar:Rarity:Rare
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/through_the_breach.jpg
|
||||
SetInfo:CHK|Rare|http://magiccards.info/scans/en/chk/193.jpg
|
||||
Oracle:You may put a creature card from your hand onto the battlefield. That creature gains haste. Sacrifice that creature at the beginning of the next end step.\nSplice onto Arcane {2}{R}{R} (As you cast an Arcane spell, you may reveal this card from your hand and pay its splice cost. If you do, add this card's effects to that spell.)
|
||||
End
|
||||
@@ -1,490 +0,0 @@
|
||||
/*
|
||||
* Forge: Play Magic: the Gathering.
|
||||
* Copyright (C) 2011 Forge Team
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package forge.card.abilityfactory;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
||||
import forge.AllZone;
|
||||
import forge.Card;
|
||||
import forge.ComputerUtil;
|
||||
import forge.card.cardfactory.CardFactoryUtil;
|
||||
import forge.card.cost.Cost;
|
||||
import forge.card.cost.CostUtil;
|
||||
import forge.card.spellability.AbilityActivated;
|
||||
import forge.card.spellability.AbilitySub;
|
||||
import forge.card.spellability.Spell;
|
||||
import forge.card.spellability.SpellAbility;
|
||||
import forge.card.spellability.SpellAbilityStackInstance;
|
||||
import forge.card.spellability.Target;
|
||||
import forge.card.spellability.TargetSelection;
|
||||
import forge.util.MyRandom;
|
||||
|
||||
//Examples:
|
||||
//A:SP$ Splice | Cost$ 1 G | TargetType$ Arcane | SpellDescription$ Counter target activated ability.
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* AbilityFactorySplice class.
|
||||
* </p>
|
||||
*
|
||||
* @author Forge
|
||||
* @version $Id$
|
||||
*/
|
||||
public class AbilityFactorySplice {
|
||||
|
||||
private AbilityFactory abilityFactory = null;
|
||||
private HashMap<String, String> params = null;
|
||||
private String unlessCost = null;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Constructor for AbilityFactorySplice.
|
||||
* </p>
|
||||
*
|
||||
* @param newAbilityFactory
|
||||
* a {@link forge.card.abilityfactory.AbilityFactory} object.
|
||||
*/
|
||||
public AbilityFactorySplice(final AbilityFactory newAbilityFactory) {
|
||||
this.abilityFactory = newAbilityFactory;
|
||||
this.params = this.abilityFactory.getMapParams();
|
||||
|
||||
if (this.params.containsKey("UnlessCost")) {
|
||||
this.unlessCost = this.params.get("UnlessCost").trim();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* getAbilitySplice.
|
||||
* </p>
|
||||
*
|
||||
* @param abilityFactory
|
||||
* a {@link forge.card.abilityfactory.AbilityFactory} object.
|
||||
* @return a {@link forge.card.spellability.SpellAbility} object.
|
||||
*/
|
||||
public final SpellAbility getAbilitySplice(final AbilityFactory abilityFactory) {
|
||||
final SpellAbility abilitySplice = new AbilityActivated(abilityFactory.getHostCard(), abilityFactory.getAbCost(),
|
||||
abilityFactory.getAbTgt()) {
|
||||
private static final long serialVersionUID = -3895990436431818899L;
|
||||
|
||||
@Override
|
||||
public String getStackDescription() {
|
||||
// when getStackDesc is called, just build exactly what is
|
||||
// happening
|
||||
return AbilityFactorySplice.this
|
||||
.spliceStackDescription(AbilityFactorySplice.this.abilityFactory, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canPlayAI() {
|
||||
return AbilityFactorySplice.this.spliceCanPlayAI(AbilityFactorySplice.this.abilityFactory, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resolve() {
|
||||
AbilityFactorySplice.this.spliceResolve(AbilityFactorySplice.this.abilityFactory, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean doTrigger(final boolean mandatory) {
|
||||
return AbilityFactorySplice.this.spliceCanPlayAI(AbilityFactorySplice.this.abilityFactory, this);
|
||||
}
|
||||
|
||||
};
|
||||
return abilitySplice;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* getSpellSplice.
|
||||
* </p>
|
||||
*
|
||||
* @param abilityFactory
|
||||
* a {@link forge.card.abilityfactory.AbilityFactory} object.
|
||||
* @return a {@link forge.card.spellability.SpellAbility} object.
|
||||
*/
|
||||
public final SpellAbility getSpellSplice(final AbilityFactory abilityFactory) {
|
||||
final SpellAbility spellAbilitySplice = new Spell(abilityFactory.getHostCard(), abilityFactory.getAbCost(),
|
||||
abilityFactory.getAbTgt()) {
|
||||
private static final long serialVersionUID = -4272851734871573693L;
|
||||
|
||||
@Override
|
||||
public String getStackDescription() {
|
||||
return AbilityFactorySplice.this
|
||||
.spliceStackDescription(AbilityFactorySplice.this.abilityFactory, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canPlayAI() {
|
||||
return AbilityFactorySplice.this.spliceCanPlayAI(AbilityFactorySplice.this.abilityFactory, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resolve() {
|
||||
AbilityFactorySplice.this.spliceResolve(AbilityFactorySplice.this.abilityFactory, this);
|
||||
}
|
||||
|
||||
};
|
||||
return spellAbilitySplice;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* getDrawbackSplice.
|
||||
* </p>
|
||||
*
|
||||
* @param abilityFactory
|
||||
* a {@link forge.card.abilityfactory.AbilityFactory} object.
|
||||
* @return a {@link forge.card.spellability.SpellAbility} object.
|
||||
*/
|
||||
public final SpellAbility getDrawbackSplice(final AbilityFactory abilityFactory) {
|
||||
final SpellAbility drawbackSplice = new AbilitySub(abilityFactory.getHostCard(), abilityFactory.getAbTgt()) {
|
||||
private static final long serialVersionUID = -4272851734871573693L;
|
||||
|
||||
@Override
|
||||
public String getStackDescription() {
|
||||
return AbilityFactorySplice.this
|
||||
.spliceStackDescription(AbilityFactorySplice.this.abilityFactory, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canPlayAI() {
|
||||
return AbilityFactorySplice.this.spliceCanPlayAI(AbilityFactorySplice.this.abilityFactory, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resolve() {
|
||||
AbilityFactorySplice.this.spliceResolve(AbilityFactorySplice.this.abilityFactory, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean chkAIDrawback() {
|
||||
return AbilityFactorySplice.this.spliceDoTriggerAI(AbilityFactorySplice.this.abilityFactory, this,
|
||||
true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean doTrigger(final boolean mandatory) {
|
||||
return AbilityFactorySplice.this.spliceDoTriggerAI(AbilityFactorySplice.this.abilityFactory, this,
|
||||
mandatory);
|
||||
}
|
||||
|
||||
};
|
||||
return drawbackSplice;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* spliceCanPlayAI.
|
||||
* </p>
|
||||
*
|
||||
* @param abilityFactory
|
||||
* a {@link forge.card.abilityfactory.AbilityFactory} object.
|
||||
* @param spellAbility
|
||||
* a {@link forge.card.spellability.SpellAbility} object.
|
||||
* @return a boolean.
|
||||
*/
|
||||
private boolean spliceCanPlayAI(final AbilityFactory abilityFactory, final SpellAbility spellAbility) {
|
||||
boolean toReturn = true;
|
||||
final Cost abCost = abilityFactory.getAbCost();
|
||||
final Card source = spellAbility.getSourceCard();
|
||||
if (AllZone.getStack().size() < 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (abCost != null) {
|
||||
// AI currently disabled for these costs
|
||||
if (!CostUtil.checkSacrificeCost(abCost, source)) {
|
||||
return false;
|
||||
}
|
||||
if (!CostUtil.checkLifeCost(abCost, source, 4)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
final Target tgt = spellAbility.getTarget();
|
||||
if (tgt != null) {
|
||||
|
||||
final SpellAbility topSA = AllZone.getStack().peekAbility();
|
||||
if (!CardFactoryUtil.isCounterable(topSA.getSourceCard()) || topSA.getActivatingPlayer().isComputer()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
tgt.resetTargets();
|
||||
if (TargetSelection.matchSpellAbility(spellAbility, topSA, tgt)) {
|
||||
tgt.addTarget(topSA);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (this.unlessCost != null) {
|
||||
// Is this Usable Mana Sources? Or Total Available Mana?
|
||||
final int usableManaSources = CardFactoryUtil.getUsableManaSources(AllZone.getHumanPlayer());
|
||||
int toPay = 0;
|
||||
boolean setPayX = false;
|
||||
if (this.unlessCost.equals("X") && source.getSVar(this.unlessCost).equals("Count$xPaid")) {
|
||||
setPayX = true;
|
||||
toPay = ComputerUtil.determineLeftoverMana(spellAbility);
|
||||
} else {
|
||||
toPay = AbilityFactory.calculateAmount(source, this.unlessCost, spellAbility);
|
||||
}
|
||||
|
||||
if (toPay == 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (toPay <= usableManaSources) {
|
||||
// If this is a reusable Resource, feel free to play it most of
|
||||
// the time
|
||||
if (!spellAbility.getPayCosts().isReusuableResource() || (MyRandom.getRandom().nextFloat() < .4)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (setPayX) {
|
||||
source.setSVar("PayX", Integer.toString(toPay));
|
||||
}
|
||||
}
|
||||
|
||||
// TODO Improve AI
|
||||
|
||||
// Will return true if this spell can counter (or is Reusable and can
|
||||
// force the Human into making decisions)
|
||||
|
||||
// But really it should be more picky about how it counters things
|
||||
|
||||
final AbilitySub subAb = spellAbility.getSubAbility();
|
||||
if (subAb != null) {
|
||||
toReturn &= subAb.chkAIDrawback();
|
||||
}
|
||||
|
||||
return toReturn;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* spliceDoTriggerAI.
|
||||
* </p>
|
||||
*
|
||||
* @param abilityFactory
|
||||
* a {@link forge.card.abilityfactory.AbilityFactory} object.
|
||||
* @param spellAbility
|
||||
* a {@link forge.card.spellability.SpellAbility} object.
|
||||
* @param mandatory
|
||||
* a boolean.
|
||||
* @return a boolean.
|
||||
*/
|
||||
private boolean spliceDoTriggerAI(final AbilityFactory abilityFactory, final SpellAbility spellAbility, final boolean mandatory) {
|
||||
boolean toReturn = true;
|
||||
if (AllZone.getStack().size() < 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
final Target tgt = spellAbility.getTarget();
|
||||
if (tgt != null) {
|
||||
final SpellAbility topSA = AllZone.getStack().peekAbility();
|
||||
if (!CardFactoryUtil.isCounterable(topSA.getSourceCard()) || topSA.getActivatingPlayer().isComputer()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
tgt.resetTargets();
|
||||
if (TargetSelection.matchSpellAbility(spellAbility, topSA, tgt)) {
|
||||
tgt.addTarget(topSA);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
final Card source = spellAbility.getSourceCard();
|
||||
if (this.unlessCost != null) {
|
||||
// Is this Usable Mana Sources? Or Total Available Mana?
|
||||
final int usableManaSources = CardFactoryUtil.getUsableManaSources(AllZone.getHumanPlayer());
|
||||
int toPay = 0;
|
||||
boolean setPayX = false;
|
||||
if (this.unlessCost.equals("X") && source.getSVar(this.unlessCost).equals("Count$xPaid")) {
|
||||
setPayX = true;
|
||||
toPay = ComputerUtil.determineLeftoverMana(spellAbility);
|
||||
} else {
|
||||
toPay = AbilityFactory.calculateAmount(source, this.unlessCost, spellAbility);
|
||||
}
|
||||
|
||||
if (toPay == 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (toPay <= usableManaSources) {
|
||||
// If this is a reusable Resource, feel free to play it most
|
||||
// of the time
|
||||
if (!spellAbility.getPayCosts().isReusuableResource() || (MyRandom.getRandom().nextFloat() < .4)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (setPayX) {
|
||||
source.setSVar("PayX", Integer.toString(toPay));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TODO Improve AI
|
||||
|
||||
// Will return true if this spell can counter (or is Reusable and can
|
||||
// force the Human into making decisions)
|
||||
|
||||
// But really it should be more picky about how it counters things
|
||||
|
||||
final AbilitySub subAb = spellAbility.getSubAbility();
|
||||
if (subAb != null) {
|
||||
toReturn &= subAb.chkAIDrawback();
|
||||
}
|
||||
|
||||
return toReturn;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* spliceResolve.
|
||||
* </p>
|
||||
*
|
||||
* @param abilityFactory
|
||||
* a {@link forge.card.abilityfactory.AbilityFactory} object.
|
||||
* @param spellAbility
|
||||
* a {@link forge.card.spellability.SpellAbility} object.
|
||||
*/
|
||||
private void spliceResolve(final AbilityFactory abilityFactory, final SpellAbility spellAbility) {
|
||||
|
||||
// TODO Before this resolves we should see if any of our targets are
|
||||
// still on the stack
|
||||
ArrayList<SpellAbility> sas;
|
||||
|
||||
final Target tgt = abilityFactory.getAbTgt();
|
||||
if (tgt != null) {
|
||||
sas = tgt.getTargetSAs();
|
||||
} else {
|
||||
sas = AbilityFactory.getDefinedSpellAbilities(spellAbility.getSourceCard(), this.params.get("Defined"), spellAbility);
|
||||
}
|
||||
|
||||
if (this.params.containsKey("ForgetOtherTargets")) {
|
||||
if (this.params.get("ForgetOtherTargets").equals("True")) {
|
||||
abilityFactory.getHostCard().clearRemembered();
|
||||
}
|
||||
}
|
||||
|
||||
for (final SpellAbility tgtSA : sas) {
|
||||
final Card tgtSACard = tgtSA.getSourceCard();
|
||||
|
||||
if (tgtSA.isSpell() && !CardFactoryUtil.isCounterable(tgtSACard)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
final SpellAbilityStackInstance si = AllZone.getStack().getInstanceFromSpellAbility(tgtSA);
|
||||
if (si == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
this.removeFromStack(tgtSA, spellAbility, si);
|
||||
|
||||
// Destroy Permanent may be able to be turned into a SubAbility
|
||||
if (tgtSA.isAbility() && this.params.containsKey("DestroyPermanent")) {
|
||||
AllZone.getGameAction().destroy(tgtSACard);
|
||||
}
|
||||
|
||||
if (this.params.containsKey("RememberTargets")) {
|
||||
if (this.params.get("RememberTargets").equals("True")) {
|
||||
abilityFactory.getHostCard().addRemembered(tgtSACard);
|
||||
}
|
||||
}
|
||||
}
|
||||
} // end spliceResolve
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* spliceStackDescription.
|
||||
* </p>
|
||||
*
|
||||
* @param abilityFactory
|
||||
* a {@link forge.card.abilityfactory.AbilityFactory} object.
|
||||
* @param spellAbility
|
||||
* a {@link forge.card.spellability.SpellAbility} object.
|
||||
* @return a {@link java.lang.String} object.
|
||||
*/
|
||||
private String spliceStackDescription(final AbilityFactory abilityFactory, final SpellAbility spellAbility) {
|
||||
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
|
||||
if (!(spellAbility instanceof AbilitySub)) {
|
||||
sb.append(spellAbility.getSourceCard().getName()).append(" - ");
|
||||
} else {
|
||||
sb.append(" ");
|
||||
}
|
||||
|
||||
ArrayList<SpellAbility> sas;
|
||||
|
||||
final Target tgt = abilityFactory.getAbTgt();
|
||||
if (tgt != null) {
|
||||
sas = tgt.getTargetSAs();
|
||||
} else {
|
||||
sas = AbilityFactory.getDefinedSpellAbilities(spellAbility.getSourceCard(), this.params.get("Defined"), spellAbility);
|
||||
}
|
||||
|
||||
sb.append("splicing");
|
||||
|
||||
boolean isAbility = false;
|
||||
for (final SpellAbility tgtSA : sas) {
|
||||
sb.append(" ");
|
||||
sb.append(tgtSA.getSourceCard());
|
||||
isAbility = tgtSA.isAbility();
|
||||
if (isAbility) {
|
||||
sb.append("'s ability");
|
||||
}
|
||||
}
|
||||
|
||||
if (isAbility && this.params.containsKey("DestroyPermanent")) {
|
||||
sb.append(" and destroy it");
|
||||
}
|
||||
|
||||
sb.append(".");
|
||||
|
||||
final AbilitySub abSub = spellAbility.getSubAbility();
|
||||
if (abSub != null) {
|
||||
sb.append(abSub.getStackDescription());
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
} // end spliceStackDescription
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* removeFromStack.
|
||||
* </p>
|
||||
*
|
||||
* @param targetSpellAbility
|
||||
* a {@link forge.card.spellability.SpellAbility} object.
|
||||
* @param sourceSpellAbility
|
||||
* a {@link forge.card.spellability.SpellAbility} object.
|
||||
* @param spellAbilityStackInstance
|
||||
* a {@link forge.card.spellability.SpellAbilityStackInstance}
|
||||
* object.
|
||||
*/
|
||||
private void removeFromStack(final SpellAbility targetSpellAbility, final SpellAbility sourceSpellAbility, final SpellAbilityStackInstance spellAbilityStackInstance) {
|
||||
AllZone.getStack().remove(spellAbilityStackInstance);
|
||||
}
|
||||
|
||||
} // end class AbilityFactorySplice
|
||||
Reference in New Issue
Block a user