mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-15 18:28:00 +00:00
Merge pull request #1724 from Northmoc/botcounters
BOT: Jetfire and related improvements
This commit is contained in:
@@ -5,6 +5,7 @@ import static forge.util.TextUtil.toManaString;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import forge.util.Lang;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
import forge.card.ColorSet;
|
import forge.card.ColorSet;
|
||||||
@@ -264,9 +265,16 @@ public class ManaEffect extends SpellAbilityEffect {
|
|||||||
@Override
|
@Override
|
||||||
protected String getStackDescription(SpellAbility sa) {
|
protected String getStackDescription(SpellAbility sa) {
|
||||||
final StringBuilder sb = new StringBuilder();
|
final StringBuilder sb = new StringBuilder();
|
||||||
|
final List<Player> tgtPlayers = getDefinedPlayersOrTargeted(sa);
|
||||||
String mana = !sa.hasParam("Amount") || StringUtils.isNumeric(sa.getParam("Amount"))
|
String mana = !sa.hasParam("Amount") || StringUtils.isNumeric(sa.getParam("Amount"))
|
||||||
? GameActionUtil.generatedMana(sa) : "mana";
|
? GameActionUtil.generatedMana(sa) : "mana";
|
||||||
sb.append("Add ").append(toManaString(mana)).append(".");
|
String manaDesc = "";
|
||||||
|
if (mana.equals("mana") && sa.hasParam("Produced") && sa.hasParam("AmountDesc")) {
|
||||||
|
mana = sa.getParam("Produced");
|
||||||
|
manaDesc = sa.getParam("AmountDesc");
|
||||||
|
}
|
||||||
|
sb.append(Lang.joinHomogenous(tgtPlayers)).append(tgtPlayers.size() == 1 ? " adds " : " add ");
|
||||||
|
sb.append(toManaString(mana)).append(manaDesc).append(".");
|
||||||
if (sa.hasParam("RestrictValid")) {
|
if (sa.hasParam("RestrictValid")) {
|
||||||
sb.append(" ");
|
sb.append(" ");
|
||||||
final String desc = sa.getDescription();
|
final String desc = sa.getDescription();
|
||||||
|
|||||||
@@ -289,13 +289,18 @@ public class Cost implements Serializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (parse.startsWith("SubCounter<")) {
|
if (parse.startsWith("SubCounter<")) {
|
||||||
// SubCounter<NumCounters/CounterType>
|
// SubCounter<NumCounters/CounterType/{Type/Description/Zone}>
|
||||||
final String[] splitStr = abCostParse(parse, 5);
|
final String[] splitStr = abCostParse(parse, 5);
|
||||||
final String type = splitStr.length > 2 ? splitStr[2] : "CARDNAME";
|
final String type = splitStr.length > 2 ? splitStr[2] : "CARDNAME";
|
||||||
final String description = splitStr.length > 3 ? splitStr[3] : null;
|
final String description = splitStr.length > 3 ? splitStr[3] : null;
|
||||||
final ZoneType zone = splitStr.length > 4 ? ZoneType.smartValueOf(splitStr[4]) : ZoneType.Battlefield;
|
final ZoneType zone = splitStr.length > 4 ? ZoneType.smartValueOf(splitStr[4]) : ZoneType.Battlefield;
|
||||||
|
boolean oneOrMore = false;
|
||||||
|
if (splitStr[0].equals("X1+")) {
|
||||||
|
oneOrMore = true;
|
||||||
|
splitStr[0] = "X";
|
||||||
|
}
|
||||||
|
|
||||||
return new CostRemoveCounter(splitStr[0], CounterType.getType(splitStr[1]), type, description, zone);
|
return new CostRemoveCounter(splitStr[0], CounterType.getType(splitStr[1]), type, description, zone, oneOrMore);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (parse.startsWith("AddCounter<")) {
|
if (parse.startsWith("AddCounter<")) {
|
||||||
@@ -401,7 +406,12 @@ public class Cost implements Serializable {
|
|||||||
if (parse.startsWith("RemoveAnyCounter<")) {
|
if (parse.startsWith("RemoveAnyCounter<")) {
|
||||||
final String[] splitStr = abCostParse(parse, 4);
|
final String[] splitStr = abCostParse(parse, 4);
|
||||||
final String description = splitStr.length > 3 ? splitStr[3] : null;
|
final String description = splitStr.length > 3 ? splitStr[3] : null;
|
||||||
return new CostRemoveAnyCounter(splitStr[0], CounterType.getType(splitStr[1]), splitStr[2], description);
|
boolean oneOrMore = false;
|
||||||
|
if (splitStr[0].equals("X1+")) {
|
||||||
|
oneOrMore = true;
|
||||||
|
splitStr[0] = "X";
|
||||||
|
}
|
||||||
|
return new CostRemoveAnyCounter(splitStr[0], CounterType.getType(splitStr[1]), splitStr[2], description, oneOrMore);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (parse.startsWith("Exile<")) {
|
if (parse.startsWith("Exile<")) {
|
||||||
@@ -916,7 +926,7 @@ public class Cost implements Serializable {
|
|||||||
if (counters < 0) {
|
if (counters < 0) {
|
||||||
costParts.add(new CostPutCounter(String.valueOf(counters *-1), CounterType.get(CounterEnumType.LOYALTY), part.getType(), part.getTypeDescription()));
|
costParts.add(new CostPutCounter(String.valueOf(counters *-1), CounterType.get(CounterEnumType.LOYALTY), part.getType(), part.getTypeDescription()));
|
||||||
} else {
|
} else {
|
||||||
costParts.add(new CostRemoveCounter(String.valueOf(counters), CounterType.get(CounterEnumType.LOYALTY), part.getType(), part.getTypeDescription(), ZoneType.Battlefield));
|
costParts.add(new CostRemoveCounter(String.valueOf(counters), CounterType.get(CounterEnumType.LOYALTY), part.getType(), part.getTypeDescription(), ZoneType.Battlefield, false));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -41,10 +41,11 @@ public class CostRemoveAnyCounter extends CostPart {
|
|||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
// RemoveAnyCounter<Num/Type/{TypeDescription}>
|
// RemoveAnyCounter<Num/Type/{TypeDescription}>
|
||||||
// Power Conduit and Chisei, Heart of Oceans
|
// things like "Remove a counter from a permanent you control"
|
||||||
// Both cards have "Remove a counter from a permanent you control"
|
// or "Remove one or more +1/+1 counters from among artifacts you control"
|
||||||
|
|
||||||
public final CounterType counter;
|
public final CounterType counter;
|
||||||
|
public final Boolean oneOrMore;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instantiates a new cost CostRemoveAnyCounter.
|
* Instantiates a new cost CostRemoveAnyCounter.
|
||||||
@@ -52,9 +53,10 @@ public class CostRemoveAnyCounter extends CostPart {
|
|||||||
* @param amount
|
* @param amount
|
||||||
* the amount
|
* the amount
|
||||||
*/
|
*/
|
||||||
public CostRemoveAnyCounter(final String amount, final CounterType counter, final String type, final String description) {
|
public CostRemoveAnyCounter(final String amount, final CounterType counter, final String type, final String description, final boolean oneOrMore) {
|
||||||
super(amount, type, description);
|
super(amount, type, description);
|
||||||
this.counter = counter;
|
this.counter = counter;
|
||||||
|
this.oneOrMore = oneOrMore;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -99,12 +101,16 @@ public class CostRemoveAnyCounter extends CostPart {
|
|||||||
public final String toString() {
|
public final String toString() {
|
||||||
final StringBuilder sb = new StringBuilder();
|
final StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
String counters = this.counter == null ? "counter" : this.counter.getName().toLowerCase() + " counter";
|
final String counters = this.counter == null ? "counter" : this.counter.getName().toLowerCase() + " counter";
|
||||||
|
final String desc = this.getTypeDescription() == null ? this.getType() : this.getTypeDescription();
|
||||||
|
|
||||||
sb.append("Remove ");
|
sb.append("Remove ");
|
||||||
sb.append(Cost.convertAmountTypeToWords(this.convertAmount(), this.getAmount(), counters));
|
if (oneOrMore) {
|
||||||
sb.append(this.getAmount().equals("1") ? "" : "s");
|
sb.append("one or more ").append(counters).append("s");
|
||||||
final String desc = this.getTypeDescription() == null ? this.getType() : this.getTypeDescription();
|
} else {
|
||||||
|
sb.append(Cost.convertAmountTypeToWords(this.convertAmount(), this.getAmount(), counters));
|
||||||
|
sb.append(this.getAmount().equals("1") ? "" : "s");
|
||||||
|
}
|
||||||
sb.append(" from ").append(desc);
|
sb.append(" from ").append(desc);
|
||||||
|
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
|
|||||||
@@ -35,18 +35,13 @@ import forge.game.zone.ZoneType;
|
|||||||
public class CostRemoveCounter extends CostPart {
|
public class CostRemoveCounter extends CostPart {
|
||||||
// SubCounter<Num/Counter/{Type/TypeDescription/Zone}>
|
// SubCounter<Num/Counter/{Type/TypeDescription/Zone}>
|
||||||
|
|
||||||
// Here are the cards that have RemoveCounter<Type>
|
|
||||||
// Ion Storm, Noviken Sages, Ghave, Guru of Spores, Power Conduit (any
|
|
||||||
// Counter is tough),
|
|
||||||
// Quillspike, Rift Elemental, Sage of Fables, Spike Rogue
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Serializables need a version ID.
|
* Serializables need a version ID.
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
public final CounterType counter;
|
public final CounterType counter;
|
||||||
public final ZoneType zone;
|
public final ZoneType zone;
|
||||||
|
public final Boolean oneOrMore;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instantiates a new cost remove counter.
|
* Instantiates a new cost remove counter.
|
||||||
@@ -61,11 +56,12 @@ public class CostRemoveCounter extends CostPart {
|
|||||||
* the description
|
* the description
|
||||||
* @param zone the zone.
|
* @param zone the zone.
|
||||||
*/
|
*/
|
||||||
public CostRemoveCounter(final String amount, final CounterType counter, final String type, final String description, ZoneType zone) {
|
public CostRemoveCounter(final String amount, final CounterType counter, final String type, final String description, final ZoneType zone, final boolean oneOrMore) {
|
||||||
super(amount, type, description);
|
super(amount, type, description);
|
||||||
|
|
||||||
this.counter = counter;
|
this.counter = counter;
|
||||||
this.zone = zone;
|
this.zone = zone;
|
||||||
|
this.oneOrMore = oneOrMore;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -108,7 +104,12 @@ public class CostRemoveCounter extends CostPart {
|
|||||||
} else {
|
} else {
|
||||||
sb.append("Remove ");
|
sb.append("Remove ");
|
||||||
if (this.getAmount().equals("X")) {
|
if (this.getAmount().equals("X")) {
|
||||||
sb.append("any number of counters");
|
if (oneOrMore) {
|
||||||
|
sb.append("one or more ");
|
||||||
|
} else {
|
||||||
|
sb.append("any number of ");
|
||||||
|
}
|
||||||
|
sb.append(this.counter.getName().toLowerCase()).append(" counters");
|
||||||
} else if (this.getAmount().equals("All")) {
|
} else if (this.getAmount().equals("All")) {
|
||||||
sb.append("all ").append(this.counter.getName().toLowerCase()).append(" counters");
|
sb.append("all ").append(this.counter.getName().toLowerCase()).append(" counters");
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ Name:Black Mana Battery
|
|||||||
ManaCost:4
|
ManaCost:4
|
||||||
Types:Artifact
|
Types:Artifact
|
||||||
A:AB$ PutCounter | Cost$ 2 T | CounterType$ CHARGE | CounterNum$ 1 | SpellDescription$ Put a charge counter on CARDNAME.
|
A:AB$ PutCounter | Cost$ 2 T | CounterType$ CHARGE | CounterNum$ 1 | SpellDescription$ Put a charge counter on CARDNAME.
|
||||||
A:AB$ Mana | Cost$ T SubCounter<X/CHARGE> | Produced$ B | CostDesc$ {T}, Remove any number of charge counters from CARDNAME: | AILogic$ ManaRitualBattery.1 | AINoRecursiveCheck$ True | SubAbility$ DBMana | SpellDescription$ Add {B}, then add an additional {B} for each charge counter removed this way.
|
A:AB$ Mana | Cost$ T SubCounter<X/CHARGE> | Produced$ B | AILogic$ ManaRitualBattery.1 | AINoRecursiveCheck$ True | SubAbility$ DBMana | SpellDescription$ Add {B}, then add an additional {B} for each charge counter removed this way.
|
||||||
SVar:DBMana: DB$ Mana | Produced$ B | Amount$ X
|
SVar:DBMana: DB$ Mana | Produced$ B | Amount$ X
|
||||||
SVar:X:Count$xPaid
|
SVar:X:Count$xPaid
|
||||||
AI:RemoveDeck:Random
|
AI:RemoveDeck:Random
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ Name:Blue Mana Battery
|
|||||||
ManaCost:4
|
ManaCost:4
|
||||||
Types:Artifact
|
Types:Artifact
|
||||||
A:AB$ PutCounter | Cost$ 2 T | CounterType$ CHARGE | CounterNum$ 1 | SpellDescription$ Put a charge counter on CARDNAME.
|
A:AB$ PutCounter | Cost$ 2 T | CounterType$ CHARGE | CounterNum$ 1 | SpellDescription$ Put a charge counter on CARDNAME.
|
||||||
A:AB$ Mana | Cost$ T SubCounter<X/CHARGE> | Produced$ U | CostDesc$ {T}, Remove any number of charge counters from CARDNAME: | AILogic$ ManaRitualBattery.1 | AINoRecursiveCheck$ True | SubAbility$ DBMana | SpellDescription$ Add {U}, then add an additional {U} for each charge counter removed this way.
|
A:AB$ Mana | Cost$ T SubCounter<X/CHARGE> | Produced$ U | AILogic$ ManaRitualBattery.1 | AINoRecursiveCheck$ True | SubAbility$ DBMana | SpellDescription$ Add {U}, then add an additional {U} for each charge counter removed this way.
|
||||||
SVar:DBMana: DB$ Mana | Produced$ U | Amount$ X
|
SVar:DBMana: DB$ Mana | Produced$ U | Amount$ X
|
||||||
SVar:X:Count$xPaid
|
SVar:X:Count$xPaid
|
||||||
AI:RemoveDeck:Random
|
AI:RemoveDeck:Random
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ K:CARDNAME enters the battlefield tapped.
|
|||||||
K:You may choose not to untap CARDNAME during your untap step.
|
K:You may choose not to untap CARDNAME during your untap step.
|
||||||
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | IsPresent$ Card.Self+tapped | Execute$ TrigStore | TriggerDescription$ At the beginning of your upkeep, if CARDNAME is tapped, put a storage counter on it.
|
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | IsPresent$ Card.Self+tapped | Execute$ TrigStore | TriggerDescription$ At the beginning of your upkeep, if CARDNAME is tapped, put a storage counter on it.
|
||||||
SVar:TrigStore:DB$ PutCounter | Defined$ Self | CounterType$ STORAGE | CounterNum$ 1
|
SVar:TrigStore:DB$ PutCounter | Defined$ Self | CounterType$ STORAGE | CounterNum$ 1
|
||||||
A:AB$ Mana | Cost$ T SubCounter<X/STORAGE> | Produced$ B | Amount$ X | CostDesc$ {T}, Remove any number of storage counters from CARDNAME: | AILogic$ ManaRitualBattery | SpellDescription$ Add {B} for each storage counter removed this way.
|
A:AB$ Mana | Cost$ T SubCounter<X/STORAGE> | Produced$ B | Amount$ X | AILogic$ ManaRitualBattery | SpellDescription$ Add {B} for each storage counter removed this way.
|
||||||
SVar:X:Count$xPaid
|
SVar:X:Count$xPaid
|
||||||
AI:RemoveDeck:All
|
AI:RemoveDeck:All
|
||||||
Oracle:Bottomless Vault enters the battlefield tapped.\nYou may choose not to untap Bottomless Vault during your untap step.\nAt the beginning of your upkeep, if Bottomless Vault is tapped, put a storage counter on it.\n{T}, Remove any number of storage counters from Bottomless Vault: Add {B} for each storage counter removed this way.
|
Oracle:Bottomless Vault enters the battlefield tapped.\nYou may choose not to untap Bottomless Vault during your untap step.\nAt the beginning of your upkeep, if Bottomless Vault is tapped, put a storage counter on it.\n{T}, Remove any number of storage counters from Bottomless Vault: Add {B} for each storage counter removed this way.
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ K:Reach
|
|||||||
T:Mode$ Attacks | ValidCard$ Creature.Self | Execute$ TrigPutCounter | TriggerDescription$ Whenever CARDNAME attacks, put a +1/+1 counter on it for each Equipment attached to it.
|
T:Mode$ Attacks | ValidCard$ Creature.Self | Execute$ TrigPutCounter | TriggerDescription$ Whenever CARDNAME attacks, put a +1/+1 counter on it for each Equipment attached to it.
|
||||||
SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ Y
|
SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ Y
|
||||||
SVar:Y:Count$Valid Equipment.Attached
|
SVar:Y:Count$Valid Equipment.Attached
|
||||||
A:AB$ DealDamage | Cost$ 1 SubCounter<All/P1P1//NICKNAME> | NumDmg$ X | ValidTgts$ Creature.attacking+OppCtrl,Creature.blocking+OppCtrl | TgtPrompt$ Select target attacking or blocking creature an opponent controls | SpellDescription$ It deals X damage to target attacking or blocking creature an opponent controls, where X is the number of counters removed this way.
|
A:AB$ DealDamage | Cost$ 1 SubCounter<All/P1P1/NICKNAME> | NumDmg$ X | ValidTgts$ Creature.attacking+OppCtrl,Creature.blocking+OppCtrl | TgtPrompt$ Select target attacking or blocking creature an opponent controls | SpellDescription$ It deals X damage to target attacking or blocking creature an opponent controls, where X is the number of counters removed this way.
|
||||||
SVar:X:SVar$CostCountersRemoved
|
SVar:X:SVar$CostCountersRemoved
|
||||||
SVar:HasAttackEffect:TRUE
|
SVar:HasAttackEffect:TRUE
|
||||||
SVar:EquipMe:Multiple
|
SVar:EquipMe:Multiple
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ K:CARDNAME enters the battlefield tapped.
|
|||||||
K:You may choose not to untap CARDNAME during your untap step.
|
K:You may choose not to untap CARDNAME during your untap step.
|
||||||
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | IsPresent$ Card.Self+tapped | Execute$ TrigStore | TriggerDescription$ At the beginning of your upkeep, if CARDNAME is tapped, put a storage counter on it.
|
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | IsPresent$ Card.Self+tapped | Execute$ TrigStore | TriggerDescription$ At the beginning of your upkeep, if CARDNAME is tapped, put a storage counter on it.
|
||||||
SVar:TrigStore:DB$ PutCounter | Defined$ Self | CounterType$ STORAGE | CounterNum$ 1
|
SVar:TrigStore:DB$ PutCounter | Defined$ Self | CounterType$ STORAGE | CounterNum$ 1
|
||||||
A:AB$ Mana | Cost$ T SubCounter<X/STORAGE> | Produced$ R | Amount$ X | CostDesc$ {T}, Remove any number of storage counters from CARDNAME: | AILogic$ ManaRitualBattery | SpellDescription$ Add {R} for each storage counter removed this way.
|
A:AB$ Mana | Cost$ T SubCounter<X/STORAGE> | Produced$ R | Amount$ X | AILogic$ ManaRitualBattery | SpellDescription$ Add {R} for each storage counter removed this way.
|
||||||
SVar:X:Count$xPaid
|
SVar:X:Count$xPaid
|
||||||
AI:RemoveDeck:All
|
AI:RemoveDeck:All
|
||||||
Oracle:Dwarven Hold enters the battlefield tapped.\nYou may choose not to untap Dwarven Hold during your untap step.\nAt the beginning of your upkeep, if Dwarven Hold is tapped, put a storage counter on it.\n{T}, Remove any number of storage counters from Dwarven Hold: Add {R} for each storage counter removed this way.
|
Oracle:Dwarven Hold enters the battlefield tapped.\nYou may choose not to untap Dwarven Hold during your untap step.\nAt the beginning of your upkeep, if Dwarven Hold is tapped, put a storage counter on it.\n{T}, Remove any number of storage counters from Dwarven Hold: Add {R} for each storage counter removed this way.
|
||||||
|
|||||||
@@ -3,6 +3,6 @@ ManaCost:no cost
|
|||||||
Types:Land
|
Types:Land
|
||||||
K:CARDNAME enters the battlefield tapped.
|
K:CARDNAME enters the battlefield tapped.
|
||||||
A:AB$ PutCounter | Cost$ T | Defined$ Self | CounterType$ STORAGE | CounterNum$ 1 | SpellDescription$ Put a storage counter on CARDNAME.
|
A:AB$ PutCounter | Cost$ T | Defined$ Self | CounterType$ STORAGE | CounterNum$ 1 | SpellDescription$ Put a storage counter on CARDNAME.
|
||||||
A:AB$ Mana | Cost$ T SubCounter<X/STORAGE> | Produced$ W | Amount$ X | CostDesc$ {T}, Remove any number of storage counters from CARDNAME: | AILogic$ ManaRitualBattery | AINoRecursiveCheck$ True | SpellDescription$ Add {W} for each storage counter removed this way.
|
A:AB$ Mana | Cost$ T SubCounter<X/STORAGE> | Produced$ W | Amount$ X | AILogic$ ManaRitualBattery | AINoRecursiveCheck$ True | SpellDescription$ Add {W} for each storage counter removed this way.
|
||||||
SVar:X:Count$xPaid
|
SVar:X:Count$xPaid
|
||||||
Oracle:Fountain of Cho enters the battlefield tapped.\n{T}: Put a storage counter on Fountain of Cho.\n{T}, Remove any number of storage counters from Fountain of Cho: Add {W} for each storage counter removed this way.
|
Oracle:Fountain of Cho enters the battlefield tapped.\n{T}: Put a storage counter on Fountain of Cho.\n{T}, Remove any number of storage counters from Fountain of Cho: Add {W} for each storage counter removed this way.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ Name:Green Mana Battery
|
|||||||
ManaCost:4
|
ManaCost:4
|
||||||
Types:Artifact
|
Types:Artifact
|
||||||
A:AB$ PutCounter | Cost$ 2 T | CounterType$ CHARGE | CounterNum$ 1 | SpellDescription$ Put a charge counter on CARDNAME.
|
A:AB$ PutCounter | Cost$ 2 T | CounterType$ CHARGE | CounterNum$ 1 | SpellDescription$ Put a charge counter on CARDNAME.
|
||||||
A:AB$ Mana | Cost$ T SubCounter<X/CHARGE> | Produced$ G | CostDesc$ {T}, Remove any number of charge counters from CARDNAME: | AILogic$ ManaRitualBattery.1 | AINoRecursiveCheck$ True | SubAbility$ DBMana | SpellDescription$ Add {G}, then add an additional {G} for each charge counter removed this way.
|
A:AB$ Mana | Cost$ T SubCounter<X/CHARGE> | Produced$ G | AILogic$ ManaRitualBattery.1 | AINoRecursiveCheck$ True | SubAbility$ DBMana | SpellDescription$ Add {G}, then add an additional {G} for each charge counter removed this way.
|
||||||
SVar:DBMana: DB$ Mana | Produced$ G | Amount$ X
|
SVar:DBMana: DB$ Mana | Produced$ G | Amount$ X
|
||||||
SVar:X:Count$xPaid
|
SVar:X:Count$xPaid
|
||||||
AI:RemoveDeck:Random
|
AI:RemoveDeck:Random
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ K:CARDNAME enters the battlefield tapped.
|
|||||||
K:You may choose not to untap CARDNAME during your untap step.
|
K:You may choose not to untap CARDNAME during your untap step.
|
||||||
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | IsPresent$ Card.Self+tapped | Execute$ TrigStore | TriggerDescription$ At the beginning of your upkeep, if CARDNAME is tapped, put a storage counter on it.
|
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | IsPresent$ Card.Self+tapped | Execute$ TrigStore | TriggerDescription$ At the beginning of your upkeep, if CARDNAME is tapped, put a storage counter on it.
|
||||||
SVar:TrigStore:DB$ PutCounter | Defined$ Self | CounterType$ STORAGE | CounterNum$ 1
|
SVar:TrigStore:DB$ PutCounter | Defined$ Self | CounterType$ STORAGE | CounterNum$ 1
|
||||||
A:AB$ Mana | Cost$ T SubCounter<X/STORAGE> | Produced$ G | Amount$ X | CostDesc$ {T}, Remove any number of storage counters from CARDNAME: | AILogic$ ManaRitualBattery | SpellDescription$ Add {G} for each storage counter removed this way.
|
A:AB$ Mana | Cost$ T SubCounter<X/STORAGE> | Produced$ G | Amount$ X | AILogic$ ManaRitualBattery | SpellDescription$ Add {G} for each storage counter removed this way.
|
||||||
SVar:X:Count$xPaid
|
SVar:X:Count$xPaid
|
||||||
AI:RemoveDeck:All
|
AI:RemoveDeck:All
|
||||||
Oracle:Hollow Trees enters the battlefield tapped.\nYou may choose not to untap Hollow Trees during your untap step.\nAt the beginning of your upkeep, if Hollow Trees is tapped, put a storage counter on it.\n{T}, Remove any number of storage counters from Hollow Trees: Add {G} for each storage counter removed this way.
|
Oracle:Hollow Trees enters the battlefield tapped.\nYou may choose not to untap Hollow Trees during your untap step.\nAt the beginning of your upkeep, if Hollow Trees is tapped, put a storage counter on it.\n{T}, Remove any number of storage counters from Hollow Trees: Add {G} for each storage counter removed this way.
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ K:CARDNAME enters the battlefield tapped.
|
|||||||
K:You may choose not to untap CARDNAME during your untap step.
|
K:You may choose not to untap CARDNAME during your untap step.
|
||||||
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | IsPresent$ Card.Self+tapped | Execute$ TrigStore | TriggerDescription$ At the beginning of your upkeep, if CARDNAME is tapped, put a storage counter on it.
|
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | IsPresent$ Card.Self+tapped | Execute$ TrigStore | TriggerDescription$ At the beginning of your upkeep, if CARDNAME is tapped, put a storage counter on it.
|
||||||
SVar:TrigStore:DB$ PutCounter | Defined$ Self | CounterType$ STORAGE | CounterNum$ 1
|
SVar:TrigStore:DB$ PutCounter | Defined$ Self | CounterType$ STORAGE | CounterNum$ 1
|
||||||
A:AB$ Mana | Cost$ T SubCounter<X/STORAGE> | Produced$ W | Amount$ X | CostDesc$ {T}, Remove any number of storage counters from CARDNAME: | AILogic$ ManaRitualBattery | SpellDescription$ Add {W} for each storage counter removed this way.
|
A:AB$ Mana | Cost$ T SubCounter<X/STORAGE> | Produced$ W | Amount$ X | AILogic$ ManaRitualBattery | SpellDescription$ Add {W} for each storage counter removed this way.
|
||||||
SVar:X:Count$xPaid
|
SVar:X:Count$xPaid
|
||||||
AI:RemoveDeck:All
|
AI:RemoveDeck:All
|
||||||
Oracle:Icatian Store enters the battlefield tapped.\nYou may choose not to untap Icatian Store during your untap step.\nAt the beginning of your upkeep, if Icatian Store is tapped, put a storage counter on it.\n{T}, Remove any number of storage counters from Icatian Store: Add {W} for each storage counter removed this way.
|
Oracle:Icatian Store enters the battlefield tapped.\nYou may choose not to untap Icatian Store during your untap step.\nAt the beginning of your upkeep, if Icatian Store is tapped, put a storage counter on it.\n{T}, Remove any number of storage counters from Icatian Store: Add {W} for each storage counter removed this way.
|
||||||
|
|||||||
@@ -3,6 +3,6 @@ ManaCost:no cost
|
|||||||
Types:Land
|
Types:Land
|
||||||
A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}.
|
A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}.
|
||||||
A:AB$ PutCounter | Cost$ 1 T | CounterType$ STORAGE | CounterNum$ 1 | SpellDescription$ Put a storage counter on CARDNAME.
|
A:AB$ PutCounter | Cost$ 1 T | CounterType$ STORAGE | CounterNum$ 1 | SpellDescription$ Put a storage counter on CARDNAME.
|
||||||
A:AB$ Mana | Cost$ T SubCounter<X/STORAGE> | Produced$ C | Amount$ X | CostDesc$ {T}, Remove X storage counters from CARDNAME: | AILogic$ ManaRitualBattery | AINoRecursiveCheck$ True | SpellDescription$ Add {C} for each storage counter removed this way.
|
A:AB$ Mana | Cost$ T SubCounter<X/STORAGE> | Produced$ C | Amount$ X | AILogic$ ManaRitualBattery | AINoRecursiveCheck$ True | SpellDescription$ Add {C} for each storage counter removed this way.
|
||||||
SVar:X:Count$xPaid
|
SVar:X:Count$xPaid
|
||||||
Oracle:{T}: Add {C}.\n{1}, {T}: Put a storage counter on Mage-Ring Network.\n{T}, Remove any number of storage counters from Mage-Ring Network: Add {C} for each storage counter removed this way.
|
Oracle:{T}: Add {C}.\n{1}, {T}: Put a storage counter on Mage-Ring Network.\n{T}, Remove any number of storage counters from Mage-Ring Network: Add {C} for each storage counter removed this way.
|
||||||
|
|||||||
@@ -3,6 +3,6 @@ ManaCost:no cost
|
|||||||
Types:Land
|
Types:Land
|
||||||
K:CARDNAME enters the battlefield tapped.
|
K:CARDNAME enters the battlefield tapped.
|
||||||
A:AB$ PutCounter | Cost$ T | Defined$ Self | CounterType$ STORAGE | CounterNum$ 1 | SpellDescription$ Put a storage counter on CARDNAME.
|
A:AB$ PutCounter | Cost$ T | Defined$ Self | CounterType$ STORAGE | CounterNum$ 1 | SpellDescription$ Put a storage counter on CARDNAME.
|
||||||
A:AB$ Mana | Cost$ T SubCounter<X/STORAGE> | Produced$ R | Amount$ X | CostDesc$ {T}, Remove any number of storage counters from CARDNAME: | AILogic$ ManaRitualBattery | AINoRecursiveCheck$ True | SpellDescription$ Add {R} for each storage counter removed this way.
|
A:AB$ Mana | Cost$ T SubCounter<X/STORAGE> | Produced$ R | Amount$ X | AILogic$ ManaRitualBattery | AINoRecursiveCheck$ True | SpellDescription$ Add {R} for each storage counter removed this way.
|
||||||
SVar:X:Count$xPaid
|
SVar:X:Count$xPaid
|
||||||
Oracle:Mercadian Bazaar enters the battlefield tapped.\n{T}: Put a storage counter on Mercadian Bazaar.\n{T}, Remove any number of storage counters from Mercadian Bazaar: Add {R} for each storage counter removed this way.
|
Oracle:Mercadian Bazaar enters the battlefield tapped.\n{T}: Put a storage counter on Mercadian Bazaar.\n{T}, Remove any number of storage counters from Mercadian Bazaar: Add {R} for each storage counter removed this way.
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Name:Ooze Flux
|
Name:Ooze Flux
|
||||||
ManaCost:3 G
|
ManaCost:3 G
|
||||||
Types:Enchantment
|
Types:Enchantment
|
||||||
A:AB$ Token | Cost$ XCantBe0 1 G RemoveAnyCounter<X/P1P1/Creature.YouCtrl/among creatures you control> | TokenAmount$ 1 | TokenScript$ g_x_x_ooze | TokenOwner$ You | TokenPower$ X | TokenToughness$ X | SpellDescription$ Create an X/X green Ooze creature token, where X is the number of +1/+1 counters removed this way.
|
A:AB$ Token | Cost$ XCantBe0 1 G RemoveAnyCounter<X1+/P1P1/Creature.YouCtrl/among creatures you control> | TokenAmount$ 1 | TokenScript$ g_x_x_ooze | TokenOwner$ You | TokenPower$ X | TokenToughness$ X | SpellDescription$ Create an X/X green Ooze creature token, where X is the number of +1/+1 counters removed this way.
|
||||||
SVar:X:Count$xPaid
|
SVar:X:Count$xPaid
|
||||||
AI:RemoveDeck:All
|
AI:RemoveDeck:All
|
||||||
DeckHints:Ability$Counters
|
DeckHints:Ability$Counters
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ PT:4/1
|
|||||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigCounter | TriggerDescription$ When CARDNAME enters the battlefield, put a dream counter on it for each opponent you have. Each opponent creates a 1/1 red Goblin creature token.
|
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigCounter | TriggerDescription$ When CARDNAME enters the battlefield, put a dream counter on it for each opponent you have. Each opponent creates a 1/1 red Goblin creature token.
|
||||||
SVar:TrigCounter:DB$ PutCounter | CounterType$ DREAM | CounterNum$ Y | SubAbility$ DBToken
|
SVar:TrigCounter:DB$ PutCounter | CounterType$ DREAM | CounterNum$ Y | SubAbility$ DBToken
|
||||||
SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ r_1_1_goblin | TokenOwner$ Opponent
|
SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ r_1_1_goblin | TokenOwner$ Opponent
|
||||||
A:AB$ Mana | Cost$ XCantBe0 T SubCounter<X/DREAM> | Produced$ C | Amount$ X | SpellDescription$ Add that much {C}.
|
A:AB$ Mana | Cost$ T SubCounter<X1+/DREAM/NICKNAME> | Produced$ C | Amount$ X | XCantBe0$ True | SpellDescription$ Add that much {C}.
|
||||||
A:AB$ Token | Cost$ T SubCounter<1/DREAM> | TokenScript$ w_2_2_knight_pro_red | SpellDescription$ Create a 2/2 white Knight creature token with protection from red.
|
A:AB$ Token | Cost$ T SubCounter<1/DREAM/NICKNAME> | TokenScript$ w_2_2_knight_pro_red | SpellDescription$ Create a 2/2 white Knight creature token with protection from red.
|
||||||
SVar:Y:PlayerCountOpponents$Amount
|
SVar:Y:PlayerCountOpponents$Amount
|
||||||
SVar:X:Count$xPaid
|
SVar:X:Count$xPaid
|
||||||
DeckHas:Ability$Counters|Token
|
DeckHas:Ability$Counters|Token
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ Name:Red Mana Battery
|
|||||||
ManaCost:4
|
ManaCost:4
|
||||||
Types:Artifact
|
Types:Artifact
|
||||||
A:AB$ PutCounter | Cost$ 2 T | CounterType$ CHARGE | CounterNum$ 1 | SpellDescription$ Put a charge counter on CARDNAME.
|
A:AB$ PutCounter | Cost$ 2 T | CounterType$ CHARGE | CounterNum$ 1 | SpellDescription$ Put a charge counter on CARDNAME.
|
||||||
A:AB$ Mana | Cost$ T SubCounter<X/CHARGE> | Produced$ R | CostDesc$ {T}, Remove any number of charge counters from CARDNAME: | AILogic$ ManaRitualBattery.1 | AINoRecursiveCheck$ True | SubAbility$ DBMana | SpellDescription$ Add {R}, then add an additional {R} for each charge counter removed this way.
|
A:AB$ Mana | Cost$ T SubCounter<X/CHARGE> | Produced$ R | AILogic$ ManaRitualBattery.1 | AINoRecursiveCheck$ True | SubAbility$ DBMana | SpellDescription$ Add {R}, then add an additional {R} for each charge counter removed this way.
|
||||||
SVar:DBMana: DB$ Mana | Produced$ R | Amount$ X
|
SVar:DBMana: DB$ Mana | Produced$ R | Amount$ X
|
||||||
SVar:X:Count$xPaid
|
SVar:X:Count$xPaid
|
||||||
AI:RemoveDeck:Random
|
AI:RemoveDeck:Random
|
||||||
|
|||||||
@@ -3,6 +3,6 @@ ManaCost:no cost
|
|||||||
Types:Land
|
Types:Land
|
||||||
K:CARDNAME enters the battlefield tapped.
|
K:CARDNAME enters the battlefield tapped.
|
||||||
A:AB$ PutCounter | Cost$ T | Defined$ Self | CounterType$ STORAGE | CounterNum$ 1 | SpellDescription$ Put a storage counter on CARDNAME.
|
A:AB$ PutCounter | Cost$ T | Defined$ Self | CounterType$ STORAGE | CounterNum$ 1 | SpellDescription$ Put a storage counter on CARDNAME.
|
||||||
A:AB$ Mana | Cost$ T SubCounter<X/STORAGE> | Produced$ G | Amount$ X | CostDesc$ {T}, Remove any number of storage counters from CARDNAME: | AILogic$ ManaRitualBattery | AINoRecursiveCheck$ True | SpellDescription$ Add {G} for each storage counter removed this way.
|
A:AB$ Mana | Cost$ T SubCounter<X/STORAGE> | Produced$ G | Amount$ X | AILogic$ ManaRitualBattery | AINoRecursiveCheck$ True | SpellDescription$ Add {G} for each storage counter removed this way.
|
||||||
SVar:X:Count$xPaid
|
SVar:X:Count$xPaid
|
||||||
Oracle:Rushwood Grove enters the battlefield tapped.\n{T}: Put a storage counter on Rushwood Grove.\n{T}, Remove any number of storage counters from Rushwood Grove: Add {G} for each storage counter removed this way.
|
Oracle:Rushwood Grove enters the battlefield tapped.\n{T}: Put a storage counter on Rushwood Grove.\n{T}, Remove any number of storage counters from Rushwood Grove: Add {G} for each storage counter removed this way.
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ K:CARDNAME enters the battlefield tapped.
|
|||||||
K:You may choose not to untap CARDNAME during your untap step.
|
K:You may choose not to untap CARDNAME during your untap step.
|
||||||
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | IsPresent$ Card.Self+tapped | Execute$ TrigStore | TriggerDescription$ At the beginning of your upkeep, if CARDNAME is tapped, put a storage counter on it.
|
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | IsPresent$ Card.Self+tapped | Execute$ TrigStore | TriggerDescription$ At the beginning of your upkeep, if CARDNAME is tapped, put a storage counter on it.
|
||||||
SVar:TrigStore:DB$ PutCounter | Defined$ Self | CounterType$ STORAGE | CounterNum$ 1
|
SVar:TrigStore:DB$ PutCounter | Defined$ Self | CounterType$ STORAGE | CounterNum$ 1
|
||||||
A:AB$ Mana | Cost$ T SubCounter<X/STORAGE> | Produced$ U | Amount$ X | CostDesc$ {T}, Remove any number of storage counters from CARDNAME: | AILogic$ ManaRitualBattery | SpellDescription$ Add {U} for each storage counter removed this way.
|
A:AB$ Mana | Cost$ T SubCounter<X/STORAGE> | Produced$ U | Amount$ X | AILogic$ ManaRitualBattery | SpellDescription$ Add {U} for each storage counter removed this way.
|
||||||
SVar:X:Count$xPaid
|
SVar:X:Count$xPaid
|
||||||
AI:RemoveDeck:All
|
AI:RemoveDeck:All
|
||||||
Oracle:Sand Silos enters the battlefield tapped.\nYou may choose not to untap Sand Silos during your untap step.\nAt the beginning of your upkeep, if Sand Silos is tapped, put a storage counter on it.\n{T}, Remove any number of storage counters from Sand Silos: Add {U} for each storage counter removed this way.
|
Oracle:Sand Silos enters the battlefield tapped.\nYou may choose not to untap Sand Silos during your untap step.\nAt the beginning of your upkeep, if Sand Silos is tapped, put a storage counter on it.\n{T}, Remove any number of storage counters from Sand Silos: Add {U} for each storage counter removed this way.
|
||||||
|
|||||||
@@ -3,6 +3,6 @@ ManaCost:no cost
|
|||||||
Types:Land
|
Types:Land
|
||||||
K:CARDNAME enters the battlefield tapped.
|
K:CARDNAME enters the battlefield tapped.
|
||||||
A:AB$ PutCounter | Cost$ T | Defined$ Self | CounterType$ STORAGE | CounterNum$ 1 | SpellDescription$ Put a storage counter on CARDNAME.
|
A:AB$ PutCounter | Cost$ T | Defined$ Self | CounterType$ STORAGE | CounterNum$ 1 | SpellDescription$ Put a storage counter on CARDNAME.
|
||||||
A:AB$ Mana | Cost$ T SubCounter<X/STORAGE> | Produced$ U | Amount$ X | CostDesc$ {T}, Remove any number of storage counters from CARDNAME: | AILogic$ ManaRitualBattery | AINoRecursiveCheck$ True | SpellDescription$ Add {U} for each storage counter removed this way.
|
A:AB$ Mana | Cost$ T SubCounter<X/STORAGE> | Produced$ U | Amount$ X | AILogic$ ManaRitualBattery | AINoRecursiveCheck$ True | SpellDescription$ Add {U} for each storage counter removed this way.
|
||||||
SVar:X:Count$xPaid
|
SVar:X:Count$xPaid
|
||||||
Oracle:Saprazzan Cove enters the battlefield tapped.\n{T}: Put a storage counter on Saprazzan Cove.\n{T}, Remove any number of storage counters from Saprazzan Cove: Add {U} for each storage counter removed this way.
|
Oracle:Saprazzan Cove enters the battlefield tapped.\n{T}: Put a storage counter on Saprazzan Cove.\n{T}, Remove any number of storage counters from Saprazzan Cove: Add {U} for each storage counter removed this way.
|
||||||
|
|||||||
@@ -3,6 +3,6 @@ ManaCost:no cost
|
|||||||
Types:Land
|
Types:Land
|
||||||
K:CARDNAME enters the battlefield tapped.
|
K:CARDNAME enters the battlefield tapped.
|
||||||
A:AB$ PutCounter | Cost$ T | Defined$ Self | CounterType$ STORAGE | CounterNum$ 1 | SpellDescription$ Put a storage counter on CARDNAME.
|
A:AB$ PutCounter | Cost$ T | Defined$ Self | CounterType$ STORAGE | CounterNum$ 1 | SpellDescription$ Put a storage counter on CARDNAME.
|
||||||
A:AB$ Mana | Cost$ T SubCounter<X/STORAGE> | Produced$ B | Amount$ X | CostDesc$ {T}, Remove any number of storage counters from CARDNAME: | AILogic$ ManaRitualBattery | AINoRecursiveCheck$ True | SpellDescription$ Add {B} for each storage counter removed this way.
|
A:AB$ Mana | Cost$ T SubCounter<X/STORAGE> | Produced$ B | Amount$ X | AILogic$ ManaRitualBattery | AINoRecursiveCheck$ True | SpellDescription$ Add {B} for each storage counter removed this way.
|
||||||
SVar:X:Count$xPaid
|
SVar:X:Count$xPaid
|
||||||
Oracle:Subterranean Hangar enters the battlefield tapped.\n{T}: Put a storage counter on Subterranean Hangar.\n{T}, Remove any number of storage counters from Subterranean Hangar: Add {B} for each storage counter removed this way.
|
Oracle:Subterranean Hangar enters the battlefield tapped.\n{T}: Put a storage counter on Subterranean Hangar.\n{T}, Remove any number of storage counters from Subterranean Hangar: Add {B} for each storage counter removed this way.
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
Name:Jetfire, Ingenious Scientist
|
||||||
|
ManaCost:4 U
|
||||||
|
Types:Legendary Artifact Creature Robot
|
||||||
|
PT:3/4
|
||||||
|
K:More Than Meets the Eye:3 U
|
||||||
|
K:Flying
|
||||||
|
A:AB$ Mana | Cost$ RemoveAnyCounter<X1+/P1P1/Artifact.YouCtrl/among artifacts you control> | ValidTgts$ Player | Produced$ C | Amount$ X | AmountDesc$ for each counter removed | XCantBe0$ True | RestrictValid$ CantCastNonArtifactSpells | SpellDescription$ Target player adds that much {C}. This mana can't be spent to cast nonartifact spells.
|
||||||
|
SVar:DBConvert:DB$ SetState | Mode$ Convert | StackDescription$ SpellDescription | SpellDescription$ Convert NICKNAME.
|
||||||
|
SVar:X:Count$xPaid
|
||||||
|
AlternateMode:Convert
|
||||||
|
AI:RemoveDeck:All
|
||||||
|
DeckHints:Ability$Counters & Keyword$Adapt|Modular
|
||||||
|
Oracle:More Than Meets the Eye {3}{U} (You may cast this card converted for {3}{U}.)\nFlying\nRemove one or more +1/+1 counters from among artifacts you control: Target player adds that much {C}. This mana can't be spent to cast nonartifact spells. Convert Jetfire.
|
||||||
|
|
||||||
|
ALTERNATE
|
||||||
|
|
||||||
|
Name:Jetfire, Air Guardian
|
||||||
|
ManaCost:no cost
|
||||||
|
Colors:blue
|
||||||
|
Types:Legendary Artifact Vehicle
|
||||||
|
PT:3/4
|
||||||
|
K:Living metal
|
||||||
|
K:Flying
|
||||||
|
A:AB$ SetState | Cost$ U U U | Mode$ Convert | SubAbility$ DBAdapt | StackDescription$ Convert NICKNAME, | SpellDescription$ Convert NICKNAME, then adapt 3. (If it has no +1/+1 counters on it, put three +1/+1 counters on it.)
|
||||||
|
SVar:DBAdapt:DB$ PutCounter | Adapt$ True | CounterNum$ 3 | CounterType$ P1P1 | StackDescription$ then adapt 3.
|
||||||
|
DeckHas:Ability$Counters
|
||||||
|
Oracle:Living metal (As long as it's your turn, this Vehicle is also a creature.)\nFlying\n{U}{U}{U}: Convert Jetfire, then adapt 3. (If it has no +1/+1 counters on it, put three +1/+1 counters on it.)
|
||||||
@@ -2,7 +2,7 @@ Name:White Mana Battery
|
|||||||
ManaCost:4
|
ManaCost:4
|
||||||
Types:Artifact
|
Types:Artifact
|
||||||
A:AB$ PutCounter | Cost$ 2 T | CounterType$ CHARGE | CounterNum$ 1 | SpellDescription$ Put a charge counter on CARDNAME.
|
A:AB$ PutCounter | Cost$ 2 T | CounterType$ CHARGE | CounterNum$ 1 | SpellDescription$ Put a charge counter on CARDNAME.
|
||||||
A:AB$ Mana | Cost$ T SubCounter<X/CHARGE> | Produced$ W | CostDesc$ {T}, Remove any number of charge counters from CARDNAME: | AILogic$ ManaRitualBattery.1 | AINoRecursiveCheck$ True | SubAbility$ DBMana | SpellDescription$ Add {W}, then add an additional {W} for each charge counter removed this way.
|
A:AB$ Mana | Cost$ T SubCounter<X/CHARGE> | Produced$ W | AILogic$ ManaRitualBattery.1 | AINoRecursiveCheck$ True | SubAbility$ DBMana | SpellDescription$ Add {W}, then add an additional {W} for each charge counter removed this way.
|
||||||
SVar:DBMana: DB$ Mana | Produced$ W | Amount$ X
|
SVar:DBMana: DB$ Mana | Produced$ W | Amount$ X
|
||||||
SVar:X:Count$xPaid
|
SVar:X:Count$xPaid
|
||||||
AI:RemoveDeck:Random
|
AI:RemoveDeck:Random
|
||||||
|
|||||||
@@ -2410,6 +2410,7 @@ lblSelectNMoreTypeCardsTpReveal=Wähle {0} weitere {1} Karte(n) zum Vorzeigen.
|
|||||||
lblSelectTargetCounter=Wähle {0} um Marke zu entfernen
|
lblSelectTargetCounter=Wähle {0} um Marke zu entfernen
|
||||||
lblRemoveCounterFromCard=Entferne Marke von Karte
|
lblRemoveCounterFromCard=Entferne Marke von Karte
|
||||||
lblRemoveAllCountersConfirm=Entferne alle Marken?
|
lblRemoveAllCountersConfirm=Entferne alle Marken?
|
||||||
|
lblRemoveNTargetCounterFromCardPayCostSelect=Select {2} to remove {0}{1} counter(s) from
|
||||||
lblRemoveNTargetCounterFromCardPayCostConfirm=Zahle Kosten: Entferne {0}{1}-Marken von {2}?
|
lblRemoveNTargetCounterFromCardPayCostConfirm=Zahle Kosten: Entferne {0}{1}-Marken von {2}?
|
||||||
lblRemoveCountersFromAInZoneCard=Entferne Marke(n) von einer Karte in {0}
|
lblRemoveCountersFromAInZoneCard=Entferne Marke(n) von einer Karte in {0}
|
||||||
lblSacrificeCardConfirm=Opfere {0}?
|
lblSacrificeCardConfirm=Opfere {0}?
|
||||||
|
|||||||
@@ -2408,7 +2408,8 @@ lblSelectNMoreTypeCardsTpReveal=Select {0} more {1} card(s) to reveal.
|
|||||||
lblSelectTargetCounter=Select {0} to remove a counter
|
lblSelectTargetCounter=Select {0} to remove a counter
|
||||||
lblRemoveCounterFromCard=remove counter from card
|
lblRemoveCounterFromCard=remove counter from card
|
||||||
lblRemoveAllCountersConfirm=Remove all counters?
|
lblRemoveAllCountersConfirm=Remove all counters?
|
||||||
lblRemoveNTargetCounterFromCardPayCostConfirm=Select {2} to remove {0}{1} counter(s) from
|
lblRemoveNTargetCounterFromCardPayCostSelect=Select {2} to remove {0}{1} counter(s) from
|
||||||
|
lblRemoveNTargetCounterFromCardPayCostConfirm=Remove {0} {1} counter(s) from {2}?
|
||||||
lblRemoveCountersFromAInZoneCard=Remove counter(s) from a card in {0}
|
lblRemoveCountersFromAInZoneCard=Remove counter(s) from a card in {0}
|
||||||
lblSacrificeCardConfirm=Sacrifice {0}?
|
lblSacrificeCardConfirm=Sacrifice {0}?
|
||||||
lblSelectATargetToSacrifice=Select {0} to sacrifice ({1} left)
|
lblSelectATargetToSacrifice=Select {0} to sacrifice ({1} left)
|
||||||
|
|||||||
@@ -2408,7 +2408,8 @@ lblSelectNMoreTypeCardsTpReveal=Selecciona {0} más {1} carta(s) para mostrar.
|
|||||||
lblSelectTargetCounter=Selecciona {0} para quitar un contador
|
lblSelectTargetCounter=Selecciona {0} para quitar un contador
|
||||||
lblRemoveCounterFromCard=quitar contador de la carta
|
lblRemoveCounterFromCard=quitar contador de la carta
|
||||||
lblRemoveAllCountersConfirm=¿Quitar todos los contadores?
|
lblRemoveAllCountersConfirm=¿Quitar todos los contadores?
|
||||||
lblRemoveNTargetCounterFromCardPayCostConfirm=Paga el coste: ¿Quitar el contador de {0}{1} de {2}?
|
lblRemoveNTargetCounterFromCardPayCostSelect=Selecciona {2} para quitar {0}{1} contador(es) de
|
||||||
|
lblRemoveNTargetCounterFromCardPayCostConfirm=Paga el coste: ¿Quitar el contador de {0} {1} de {2}?
|
||||||
lblRemoveCountersFromAInZoneCard=Quitar contador(es) de una carta en {0}
|
lblRemoveCountersFromAInZoneCard=Quitar contador(es) de una carta en {0}
|
||||||
lblSacrificeCardConfirm=¿Sacrificar {0}?
|
lblSacrificeCardConfirm=¿Sacrificar {0}?
|
||||||
lblSelectATargetToSacrifice=Selecciona un {0} para sacrificar ({1} pendiente)
|
lblSelectATargetToSacrifice=Selecciona un {0} para sacrificar ({1} pendiente)
|
||||||
|
|||||||
@@ -2410,7 +2410,8 @@ lblSelectNMoreTypeCardsTpReveal=Sélectionnez {0} plus {1} carte(s) à révéler
|
|||||||
lblSelectTargetCounter=Sélectionnez {0} pour supprimer un compteur
|
lblSelectTargetCounter=Sélectionnez {0} pour supprimer un compteur
|
||||||
lblRemoveCounterFromCard=supprimer le compteur de la carte
|
lblRemoveCounterFromCard=supprimer le compteur de la carte
|
||||||
lblRemoveAllCountersConfirm=Supprimer tous les compteurs ?
|
lblRemoveAllCountersConfirm=Supprimer tous les compteurs ?
|
||||||
lblRemoveNTargetCounterFromCardPayCostConfirm=Sélectionnez {2} pour supprimer {0}{1} compteur(s) de
|
lblRemoveNTargetCounterFromCardPayCostSelect=Sélectionnez {2} pour supprimer {0} {1} compteur(s) de
|
||||||
|
lblRemoveNTargetCounterFromCardPayCostConfirm=Supprimer {0} {1} compteur(s) de {2}?
|
||||||
lblRemoveCountersFromAInZoneCard=Supprimer le(s) compteur(s) d''une carte dans {0}
|
lblRemoveCountersFromAInZoneCard=Supprimer le(s) compteur(s) d''une carte dans {0}
|
||||||
lblSacrificeCardConfirm=Sacrifice {0} ?
|
lblSacrificeCardConfirm=Sacrifice {0} ?
|
||||||
lblSelectATargetToSacrifice=Sélectionnez {0} à sacrifier ({1} à gauche)
|
lblSelectATargetToSacrifice=Sélectionnez {0} à sacrifier ({1} à gauche)
|
||||||
|
|||||||
@@ -2407,6 +2407,7 @@ lblSelectNMoreTypeCardsTpReveal=Seleziona ancora {0} carta/e {1} da rivelare.
|
|||||||
lblSelectTargetCounter=Seleziona una carta {0} da cui rimuovere un segnalino
|
lblSelectTargetCounter=Seleziona una carta {0} da cui rimuovere un segnalino
|
||||||
lblRemoveCounterFromCard=rimuovi un segnalino dalla carta
|
lblRemoveCounterFromCard=rimuovi un segnalino dalla carta
|
||||||
lblRemoveAllCountersConfirm=Vuoi rimuovere tutti i segnalini?
|
lblRemoveAllCountersConfirm=Vuoi rimuovere tutti i segnalini?
|
||||||
|
lblRemoveNTargetCounterFromCardPayCostSelect=Select {2} to remove {0}{1} counter(s) from
|
||||||
lblRemoveNTargetCounterFromCardPayCostConfirm=Paga il costot: Vuoi rimuovere {0} segnalini {1} da {2}?
|
lblRemoveNTargetCounterFromCardPayCostConfirm=Paga il costot: Vuoi rimuovere {0} segnalini {1} da {2}?
|
||||||
lblRemoveCountersFromAInZoneCard=Rimuovi segnalini da una carta in {0}
|
lblRemoveCountersFromAInZoneCard=Rimuovi segnalini da una carta in {0}
|
||||||
lblSacrificeCardConfirm=Vuoi sacrificare {0}?
|
lblSacrificeCardConfirm=Vuoi sacrificare {0}?
|
||||||
|
|||||||
@@ -2407,6 +2407,7 @@ lblSelectNMoreTypeCardsTpReveal=公開するもっと {0}枚の {1}カードを
|
|||||||
lblSelectTargetCounter=カウンターを取り除く {0}を選ぶ
|
lblSelectTargetCounter=カウンターを取り除く {0}を選ぶ
|
||||||
lblRemoveCounterFromCard=カードからカウンターを取り除く
|
lblRemoveCounterFromCard=カードからカウンターを取り除く
|
||||||
lblRemoveAllCountersConfirm=すべてのカウンターを取り除きますか?
|
lblRemoveAllCountersConfirm=すべてのカウンターを取り除きますか?
|
||||||
|
lblRemoveNTargetCounterFromCardPayCostSelect=Select {2} to remove {0}{1} counter(s) from
|
||||||
lblRemoveNTargetCounterFromCardPayCostConfirm=支払い:{2}から {0}個の {1}カウンターを取り除きますか?
|
lblRemoveNTargetCounterFromCardPayCostConfirm=支払い:{2}から {0}個の {1}カウンターを取り除きますか?
|
||||||
lblRemoveCountersFromAInZoneCard={0}の 1枚のカードからカウンターを取り除きます
|
lblRemoveCountersFromAInZoneCard={0}の 1枚のカードからカウンターを取り除きます
|
||||||
lblSacrificeCardConfirm={0}を生け贄に捧げますか?
|
lblSacrificeCardConfirm={0}を生け贄に捧げますか?
|
||||||
|
|||||||
@@ -2483,7 +2483,8 @@ lblSelectNMoreTypeCardsTpReveal=Escolha mais {0} carta(s) {1} para revelar.
|
|||||||
lblSelectTargetCounter=Selecione {0} para remover um marcador
|
lblSelectTargetCounter=Selecione {0} para remover um marcador
|
||||||
lblRemoveCounterFromCard=remover marcador do cartão
|
lblRemoveCounterFromCard=remover marcador do cartão
|
||||||
lblRemoveAllCountersConfirm=Remover todos os marcadores?
|
lblRemoveAllCountersConfirm=Remover todos os marcadores?
|
||||||
lblRemoveNTargetCounterFromCardPayCostConfirm=Remover {0}{1} contador(es) de {2}?
|
lblRemoveNTargetCounterFromCardPayCostSelect=Select {2} to remove {0}{1} counter(s) from
|
||||||
|
lblRemoveNTargetCounterFromCardPayCostConfirm=Remover {0} {1} contador(es) de {2}?
|
||||||
lblRemoveCountersFromAInZoneCard=Remover marcador(es) de uma carta em {0}
|
lblRemoveCountersFromAInZoneCard=Remover marcador(es) de uma carta em {0}
|
||||||
lblSacrificeCardConfirm=Sacrificar {0}?
|
lblSacrificeCardConfirm=Sacrificar {0}?
|
||||||
lblSelectATargetToSacrifice=Selecione {0} para sacrificar ({1} restantes)
|
lblSelectATargetToSacrifice=Selecione {0} para sacrificar ({1} restantes)
|
||||||
|
|||||||
@@ -2409,6 +2409,7 @@ lblSelectNMoreTypeCardsTpReveal=在选择{0}张{1}牌进行展示。
|
|||||||
lblSelectTargetCounter=选择{0}移去一个指示物
|
lblSelectTargetCounter=选择{0}移去一个指示物
|
||||||
lblRemoveCounterFromCard=从牌上移去指示物
|
lblRemoveCounterFromCard=从牌上移去指示物
|
||||||
lblRemoveAllCountersConfirm=移去所有指示物?
|
lblRemoveAllCountersConfirm=移去所有指示物?
|
||||||
|
lblRemoveNTargetCounterFromCardPayCostSelect=Select {2} to remove {0}{1} counter(s) from
|
||||||
lblRemoveNTargetCounterFromCardPayCostConfirm=支付费用:从{2}上移去{0}个{1}指示物?
|
lblRemoveNTargetCounterFromCardPayCostConfirm=支付费用:从{2}上移去{0}个{1}指示物?
|
||||||
lblRemoveCountersFromAInZoneCard=从一个{0}中的牌移去指示物
|
lblRemoveCountersFromAInZoneCard=从一个{0}中的牌移去指示物
|
||||||
lblSacrificeCardConfirm=牺牲{0}?
|
lblSacrificeCardConfirm=牺牲{0}?
|
||||||
|
|||||||
@@ -839,11 +839,11 @@ public class HumanCostDecision extends CostDecisionMakerBase {
|
|||||||
this.validChoices = validCards;
|
this.validChoices = validCards;
|
||||||
counterType = cType;
|
counterType = cType;
|
||||||
String fromWhat = costPart.getDescriptiveType();
|
String fromWhat = costPart.getDescriptiveType();
|
||||||
if (fromWhat.equals("CARDNAME")) {
|
if (fromWhat.equals("CARDNAME") || fromWhat.equals("NICKNAME")) {
|
||||||
fromWhat = sa.getHostCard().getName();
|
fromWhat = CardTranslation.getTranslatedName(sa.getHostCard().getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
setMessage(Localizer.getInstance().getMessage("lblRemoveNTargetCounterFromCardPayCostConfirm",
|
setMessage(Localizer.getInstance().getMessage("lblRemoveNTargetCounterFromCardPayCostSelect",
|
||||||
"%d", counterType == null ? "" : " " + counterType.getName().toLowerCase(), fromWhat));
|
"%d", counterType == null ? "" : " " + counterType.getName().toLowerCase(), fromWhat));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user