mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 20:28:00 +00:00
- Added Harsh Mercy and Kamahl's Summons
- Vanguard: Karona, False God Avatar
This commit is contained in:
3
.gitattributes
vendored
3
.gitattributes
vendored
@@ -4728,6 +4728,7 @@ res/cardsfolder/h/harrow.txt svneol=native#text/plain
|
||||
res/cardsfolder/h/harrowing_journey.txt -text
|
||||
res/cardsfolder/h/harsh_deceiver.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/harvest_gwyllion.txt svneol=native#text/plain
|
||||
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/kamahls_desire.txt svneol=native#text/plain
|
||||
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_empty_graves.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/karns_touch.txt svneol=native#text/plain
|
||||
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/karoo.txt svneol=native#text/plain
|
||||
res/cardsfolder/k/karoo_meerkat.txt svneol=native#text/plain
|
||||
|
||||
11
res/cardsfolder/h/harsh_mercy.txt
Normal file
11
res/cardsfolder/h/harsh_mercy.txt
Normal 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
|
||||
14
res/cardsfolder/k/kamahls_summons.txt
Normal file
14
res/cardsfolder/k/kamahls_summons.txt
Normal 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
|
||||
12
res/cardsfolder/k/karona_false_god_avatar.txt
Normal file
12
res/cardsfolder/k/karona_false_god_avatar.txt
Normal 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
|
||||
@@ -46,7 +46,7 @@ public class ChooseColorEffect extends SpellAbilityEffect {
|
||||
|
||||
for (final Player p : tgtPlayers) {
|
||||
if ((tgt == null) || p.canBeTargetedBy(sa)) {
|
||||
if (sa.getActivatingPlayer().isHuman()) {
|
||||
if (p.isHuman()) {
|
||||
if (sa.hasParam("OrColors")) {
|
||||
ImmutableList<String> choices = Constant.Color.ONLY_COLORS;
|
||||
final List<String> o = GuiChoose.getChoices("Choose a color or colors", 1, choices.size(), choices);
|
||||
|
||||
@@ -68,7 +68,7 @@ public class ChooseNumberEffect extends SpellAbilityEffect {
|
||||
|
||||
for (final Player p : tgtPlayers) {
|
||||
if ((tgt == null) || p.canBeTargetedBy(sa)) {
|
||||
if (sa.getActivatingPlayer().isHuman()) {
|
||||
if (p.isHuman()) {
|
||||
int chosen;
|
||||
if (random) {
|
||||
final Random randomGen = new Random();
|
||||
|
||||
@@ -60,7 +60,7 @@ public class ChooseTypeEffect extends SpellAbilityEffect {
|
||||
}
|
||||
boolean valid = false;
|
||||
while (!valid) {
|
||||
if (sa.getActivatingPlayer().isHuman()) {
|
||||
if (p.isHuman()) {
|
||||
final Object o = GuiChoose.one("Choose a card type", validTypes);
|
||||
if (null == o) {
|
||||
return;
|
||||
@@ -82,14 +82,14 @@ public class ChooseTypeEffect extends SpellAbilityEffect {
|
||||
String chosenType = "";
|
||||
boolean valid = false;
|
||||
while (!valid) {
|
||||
if (sa.getActivatingPlayer().isHuman()) {
|
||||
if (p.isHuman()) {
|
||||
final ArrayList<String> validChoices = CardType.getCreatureTypes();
|
||||
for (final String s : invalidTypes) {
|
||||
validChoices.remove(s);
|
||||
}
|
||||
chosenType = GuiChoose.one("Choose a creature type", validChoices);
|
||||
} else {
|
||||
Player ai = sa.getActivatingPlayer();
|
||||
Player ai = p;
|
||||
Player opp = ai.getOpponent();
|
||||
String chosen = "";
|
||||
if (sa.hasParam("AILogic")) {
|
||||
@@ -128,7 +128,7 @@ public class ChooseTypeEffect extends SpellAbilityEffect {
|
||||
} else if (type.equals("Basic Land")) {
|
||||
boolean valid = false;
|
||||
while (!valid) {
|
||||
if (sa.getActivatingPlayer().isHuman()) {
|
||||
if (p.isHuman()) {
|
||||
final String choice = GuiChoose.one("Choose a basic land type", CardType.getBasicTypes());
|
||||
if (null == choice) {
|
||||
return;
|
||||
@@ -138,7 +138,7 @@ public class ChooseTypeEffect extends SpellAbilityEffect {
|
||||
card.setChosenType(choice);
|
||||
}
|
||||
} else {
|
||||
Player ai = sa.getActivatingPlayer();
|
||||
Player ai = p;
|
||||
String chosen = "";
|
||||
if (sa.hasParam("AILogic")) {
|
||||
final String logic = sa.getParam("AILogic");
|
||||
@@ -176,7 +176,7 @@ public class ChooseTypeEffect extends SpellAbilityEffect {
|
||||
} else if (type.equals("Land")) {
|
||||
boolean valid = false;
|
||||
while (!valid) {
|
||||
if (sa.getActivatingPlayer().isHuman()) {
|
||||
if (p.isHuman()) {
|
||||
final String choice = GuiChoose
|
||||
.one("Choose a land type", CardType.getLandTypes());
|
||||
if (null == choice) {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package forge.card.ability.effects;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import forge.Card;
|
||||
@@ -21,12 +22,16 @@ public class ControlExchangeEffect extends SpellAbilityEffect {
|
||||
Card object1 = null;
|
||||
Card object2 = null;
|
||||
final Target tgt = sa.getTarget();
|
||||
List<Card> tgts = tgt.getTargetCards();
|
||||
List<Card> tgts = tgt == null ? new ArrayList<Card>() : tgt.getTargetCards();
|
||||
if (tgts.size() > 0) {
|
||||
object1 = tgts.get(0);
|
||||
}
|
||||
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) {
|
||||
object2 = tgts.get(1);
|
||||
}
|
||||
@@ -42,12 +47,16 @@ public class ControlExchangeEffect extends SpellAbilityEffect {
|
||||
Card object1 = null;
|
||||
Card object2 = null;
|
||||
final Target tgt = sa.getTarget();
|
||||
List<Card> tgts = tgt.getTargetCards();
|
||||
List<Card> tgts = tgt == null ? new ArrayList<Card>() : tgt.getTargetCards();
|
||||
if (tgts.size() > 0) {
|
||||
object1 = tgts.get(0);
|
||||
}
|
||||
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) {
|
||||
object2 = tgts.get(1);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user