- Added Harsh Mercy and Kamahl's Summons

- Vanguard: Karona, False God Avatar
This commit is contained in:
swordshine
2013-04-04 10:41:09 +00:00
parent 4ab1ace4d3
commit 90e3a9cefc
8 changed files with 61 additions and 12 deletions

3
.gitattributes vendored
View File

@@ -4728,6 +4728,7 @@ res/cardsfolder/h/harrow.txt svneol=native#text/plain
res/cardsfolder/h/harrowing_journey.txt -text res/cardsfolder/h/harrowing_journey.txt -text
res/cardsfolder/h/harsh_deceiver.txt -text res/cardsfolder/h/harsh_deceiver.txt -text
res/cardsfolder/h/harsh_justice.txt -text res/cardsfolder/h/harsh_justice.txt -text
res/cardsfolder/h/harsh_mercy.txt -text
res/cardsfolder/h/haru_onna.txt svneol=native#text/plain res/cardsfolder/h/haru_onna.txt svneol=native#text/plain
res/cardsfolder/h/harvest_gwyllion.txt svneol=native#text/plain res/cardsfolder/h/harvest_gwyllion.txt svneol=native#text/plain
res/cardsfolder/h/harvest_pyre.txt -text res/cardsfolder/h/harvest_pyre.txt -text
@@ -5545,6 +5546,7 @@ res/cardsfolder/k/kamahl_fist_of_krosa.txt svneol=native#text/plain
res/cardsfolder/k/kamahl_pit_fighter.txt svneol=native#text/plain res/cardsfolder/k/kamahl_pit_fighter.txt svneol=native#text/plain
res/cardsfolder/k/kamahls_desire.txt svneol=native#text/plain res/cardsfolder/k/kamahls_desire.txt svneol=native#text/plain
res/cardsfolder/k/kamahls_sledge.txt -text res/cardsfolder/k/kamahls_sledge.txt -text
res/cardsfolder/k/kamahls_summons.txt -text
res/cardsfolder/k/kami_of_ancient_law.txt svneol=native#text/plain res/cardsfolder/k/kami_of_ancient_law.txt svneol=native#text/plain
res/cardsfolder/k/kami_of_empty_graves.txt svneol=native#text/plain res/cardsfolder/k/kami_of_empty_graves.txt svneol=native#text/plain
res/cardsfolder/k/kami_of_false_hope.txt svneol=native#text/plain res/cardsfolder/k/kami_of_false_hope.txt svneol=native#text/plain
@@ -5571,6 +5573,7 @@ res/cardsfolder/k/karn_liberated.txt -text
res/cardsfolder/k/karn_silver_golem.txt svneol=native#text/plain res/cardsfolder/k/karn_silver_golem.txt svneol=native#text/plain
res/cardsfolder/k/karns_touch.txt svneol=native#text/plain res/cardsfolder/k/karns_touch.txt svneol=native#text/plain
res/cardsfolder/k/karona_false_god.txt -text res/cardsfolder/k/karona_false_god.txt -text
res/cardsfolder/k/karona_false_god_avatar.txt -text
res/cardsfolder/k/karonas_zealot.txt -text res/cardsfolder/k/karonas_zealot.txt -text
res/cardsfolder/k/karoo.txt svneol=native#text/plain res/cardsfolder/k/karoo.txt svneol=native#text/plain
res/cardsfolder/k/karoo_meerkat.txt svneol=native#text/plain res/cardsfolder/k/karoo_meerkat.txt svneol=native#text/plain

View File

@@ -0,0 +1,11 @@
Name:Harsh Mercy
ManaCost:2 W
Types:Sorcery
A:SP$ RepeatEach | Cost$ 2 W | RepeatPlayers$ Player | RepeatSubAbility$ DBChooseType | SubAbility$ DBDestroyAll | StackDescription$ SpellDescription | SpellDescription$ Each player chooses a creature type. Destroy all creatures that aren't of a type chosen this way. They can't be regenerated.
SVar:DBChooseType:DB$ ChooseType | Defined$ Player.IsRemembered | Type$ Creature | AILogic$ MostProminentComputerControls | SubAbility$ DBRemember
SVar:DBRemember:DB$ PumpAll | ValidCards$ Creature.ChosenType | RememberAllPumped$ True
SVar:DBDestroyAll:DB$ DestroyAll | ValidCards$ Creature.IsNotRemembered | NoRegen$ True | SubAbility$ DBCleanup | StackDescription$ None
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:Picture:http://www.wizards.com/global/images/magic/general/harsh_mercy.jpg
Oracle:Each player chooses a creature type. Destroy all creatures that aren't of a type chosen this way. They can't be regenerated.
SetInfo:ONS Rare

View File

@@ -0,0 +1,14 @@
Name:Kamahl's Summons
ManaCost:3 G
Types:Sorcery
A:SP$ RepeatEach | Cost$ 3 G | RepeatPlayers$ Player | RepeatSubAbility$ DBChoose | StackDescription$ SpellDescription | SubAbility$ DBRepeatToken | SpellDescription$ Each player may reveal any number of creature cards from his or her hand. Then each player puts a 2/2 green Bear creature token onto the battlefield for each card he or she revealed this way.
SVar:DBChoose:DB$ Reveal | Defined$ Player.IsRemembered | AnyNumber$ True | RevealValid$ Creature | RememberRevealed$ True
SVar:DBRepeatToken:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ DBToken | SubAbility$ DBCleanup
SVar:DBToken:DB$ Token | TokenAmount$ X | References$ X | TokenName$ Bear | TokenTypes$ Creature,Bear | TokenOwner$ Player.IsRemembered | TokenColors$ Green | TokenPower$ 2 | TokenToughness$ 2
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:X:Count$ValidHand Card.IsRemembered+RememberedPlayerCtrl
SVar:NeedsToPlayVar:Y GE3
SVar:Y:Count$ValidHand Creature.YouCtrl
SVar:Picture:http://www.wizards.com/global/images/magic/general/kamahls_summons.jpg
Oracle:Each player may reveal any number of creature cards from his or her hand. Then each player puts a 2/2 green Bear creature token onto the battlefield for each card he or she revealed this way.
SetInfo:ONS Uncommon

View File

@@ -0,0 +1,12 @@
Name:Karona, False God Avatar
ManaCost:no cost
Types:Vanguard
HandLifeModifier:-1/+8
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Command | Execute$ TrigExchangeChoose | TriggerDescription$ At the beginning of your upkeep, exchange control of a permanent you control chosen at random and a permanent target opponent controls chosen at random.
SVar:TrigExchangeChoose:AB$ ChooseCard | Cost$ 0 | ValidTgts$ Opponent | Choices$ Permanent.TargetedPlayerCtrl | AtRandom$ True | Amount$ 1 | RememberChosen$ True | SubAbility$ ChooseYou
SVar:ChooseYou:DB$ ChooseCard | Choices$ Permanent.YouCtrl | Amount$ 1 | AtRandom$ True | RememberChosen$ True | SubAbility$ DBExchange
SVar:DBExchange:DB$ ExchangeControl | Defined$ Remembered | BothDefined$ True | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/karona_false_god_avatar.jpg
Oracle:Hand -1, life +8\nAt the beginning of your upkeep, exchange control of a permanent you control chosen at random and a permanent target opponent controls chosen at random.
SetInfo:VAN Special

View File

@@ -46,7 +46,7 @@ public class ChooseColorEffect extends SpellAbilityEffect {
for (final Player p : tgtPlayers) { for (final Player p : tgtPlayers) {
if ((tgt == null) || p.canBeTargetedBy(sa)) { if ((tgt == null) || p.canBeTargetedBy(sa)) {
if (sa.getActivatingPlayer().isHuman()) { if (p.isHuman()) {
if (sa.hasParam("OrColors")) { if (sa.hasParam("OrColors")) {
ImmutableList<String> choices = Constant.Color.ONLY_COLORS; ImmutableList<String> choices = Constant.Color.ONLY_COLORS;
final List<String> o = GuiChoose.getChoices("Choose a color or colors", 1, choices.size(), choices); final List<String> o = GuiChoose.getChoices("Choose a color or colors", 1, choices.size(), choices);

View File

@@ -68,7 +68,7 @@ public class ChooseNumberEffect extends SpellAbilityEffect {
for (final Player p : tgtPlayers) { for (final Player p : tgtPlayers) {
if ((tgt == null) || p.canBeTargetedBy(sa)) { if ((tgt == null) || p.canBeTargetedBy(sa)) {
if (sa.getActivatingPlayer().isHuman()) { if (p.isHuman()) {
int chosen; int chosen;
if (random) { if (random) {
final Random randomGen = new Random(); final Random randomGen = new Random();

View File

@@ -60,7 +60,7 @@ public class ChooseTypeEffect extends SpellAbilityEffect {
} }
boolean valid = false; boolean valid = false;
while (!valid) { while (!valid) {
if (sa.getActivatingPlayer().isHuman()) { if (p.isHuman()) {
final Object o = GuiChoose.one("Choose a card type", validTypes); final Object o = GuiChoose.one("Choose a card type", validTypes);
if (null == o) { if (null == o) {
return; return;
@@ -82,14 +82,14 @@ public class ChooseTypeEffect extends SpellAbilityEffect {
String chosenType = ""; String chosenType = "";
boolean valid = false; boolean valid = false;
while (!valid) { while (!valid) {
if (sa.getActivatingPlayer().isHuman()) { if (p.isHuman()) {
final ArrayList<String> validChoices = CardType.getCreatureTypes(); final ArrayList<String> validChoices = CardType.getCreatureTypes();
for (final String s : invalidTypes) { for (final String s : invalidTypes) {
validChoices.remove(s); validChoices.remove(s);
} }
chosenType = GuiChoose.one("Choose a creature type", validChoices); chosenType = GuiChoose.one("Choose a creature type", validChoices);
} else { } else {
Player ai = sa.getActivatingPlayer(); Player ai = p;
Player opp = ai.getOpponent(); Player opp = ai.getOpponent();
String chosen = ""; String chosen = "";
if (sa.hasParam("AILogic")) { if (sa.hasParam("AILogic")) {
@@ -128,7 +128,7 @@ public class ChooseTypeEffect extends SpellAbilityEffect {
} else if (type.equals("Basic Land")) { } else if (type.equals("Basic Land")) {
boolean valid = false; boolean valid = false;
while (!valid) { while (!valid) {
if (sa.getActivatingPlayer().isHuman()) { if (p.isHuman()) {
final String choice = GuiChoose.one("Choose a basic land type", CardType.getBasicTypes()); final String choice = GuiChoose.one("Choose a basic land type", CardType.getBasicTypes());
if (null == choice) { if (null == choice) {
return; return;
@@ -138,7 +138,7 @@ public class ChooseTypeEffect extends SpellAbilityEffect {
card.setChosenType(choice); card.setChosenType(choice);
} }
} else { } else {
Player ai = sa.getActivatingPlayer(); Player ai = p;
String chosen = ""; String chosen = "";
if (sa.hasParam("AILogic")) { if (sa.hasParam("AILogic")) {
final String logic = sa.getParam("AILogic"); final String logic = sa.getParam("AILogic");
@@ -176,7 +176,7 @@ public class ChooseTypeEffect extends SpellAbilityEffect {
} else if (type.equals("Land")) { } else if (type.equals("Land")) {
boolean valid = false; boolean valid = false;
while (!valid) { while (!valid) {
if (sa.getActivatingPlayer().isHuman()) { if (p.isHuman()) {
final String choice = GuiChoose final String choice = GuiChoose
.one("Choose a land type", CardType.getLandTypes()); .one("Choose a land type", CardType.getLandTypes());
if (null == choice) { if (null == choice) {

View File

@@ -1,5 +1,6 @@
package forge.card.ability.effects; package forge.card.ability.effects;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import forge.Card; import forge.Card;
@@ -21,12 +22,16 @@ public class ControlExchangeEffect extends SpellAbilityEffect {
Card object1 = null; Card object1 = null;
Card object2 = null; Card object2 = null;
final Target tgt = sa.getTarget(); final Target tgt = sa.getTarget();
List<Card> tgts = tgt.getTargetCards(); List<Card> tgts = tgt == null ? new ArrayList<Card>() : tgt.getTargetCards();
if (tgts.size() > 0) { if (tgts.size() > 0) {
object1 = tgts.get(0); object1 = tgts.get(0);
} }
if (sa.hasParam("Defined")) { if (sa.hasParam("Defined")) {
object2 = AbilityUtils.getDefinedCards(sa.getSourceCard(), sa.getParam("Defined"), sa).get(0); List<Card> cards = AbilityUtils.getDefinedCards(sa.getSourceCard(), sa.getParam("Defined"), sa);
object2 = cards.isEmpty() ? null : cards.get(0);
if (cards.size() > 1 && sa.hasParam("BothDefined")) {
object1 = cards.get(1);
}
} else if (tgts.size() > 1) { } else if (tgts.size() > 1) {
object2 = tgts.get(1); object2 = tgts.get(1);
} }
@@ -42,12 +47,16 @@ public class ControlExchangeEffect extends SpellAbilityEffect {
Card object1 = null; Card object1 = null;
Card object2 = null; Card object2 = null;
final Target tgt = sa.getTarget(); final Target tgt = sa.getTarget();
List<Card> tgts = tgt.getTargetCards(); List<Card> tgts = tgt == null ? new ArrayList<Card>() : tgt.getTargetCards();
if (tgts.size() > 0) { if (tgts.size() > 0) {
object1 = tgts.get(0); object1 = tgts.get(0);
} }
if (sa.hasParam("Defined")) { if (sa.hasParam("Defined")) {
object2 = AbilityUtils.getDefinedCards(sa.getSourceCard(), sa.getParam("Defined"), sa).get(0); final List<Card> cards = AbilityUtils.getDefinedCards(sa.getSourceCard(), sa.getParam("Defined"), sa);
object2 = cards.isEmpty() ? null : cards.get(0);
if (cards.size() > 1 && sa.hasParam("BothDefined")) {
object1 = cards.get(1);
}
} else if (tgts.size() > 1) { } else if (tgts.size() > 1) {
object2 = tgts.get(1); object2 = tgts.get(1);
} }