- Added Furnace Layer, Mirrored Depths and Kharasha Foothills(PC2 set is over 90% implemented)

This commit is contained in:
swordshine
2013-06-01 00:43:15 +00:00
parent ef6d584f0a
commit 735bcaef21
8 changed files with 70 additions and 7 deletions

3
.gitattributes vendored
View File

@@ -4030,6 +4030,7 @@ res/cardsfolder/f/furious_resistance.txt -text
res/cardsfolder/f/furnace_brood.txt svneol=native#text/plain res/cardsfolder/f/furnace_brood.txt svneol=native#text/plain
res/cardsfolder/f/furnace_celebration.txt svneol=native#text/plain res/cardsfolder/f/furnace_celebration.txt svneol=native#text/plain
res/cardsfolder/f/furnace_dragon.txt svneol=native#text/plain res/cardsfolder/f/furnace_dragon.txt svneol=native#text/plain
res/cardsfolder/f/furnace_layer.txt -text
res/cardsfolder/f/furnace_of_rath.txt svneol=native#text/plain res/cardsfolder/f/furnace_of_rath.txt svneol=native#text/plain
res/cardsfolder/f/furnace_scamp.txt svneol=native#text/plain res/cardsfolder/f/furnace_scamp.txt svneol=native#text/plain
res/cardsfolder/f/furnace_spirit.txt svneol=native#text/plain res/cardsfolder/f/furnace_spirit.txt svneol=native#text/plain
@@ -5784,6 +5785,7 @@ res/cardsfolder/k/khalni_garden.txt svneol=native#text/plain
res/cardsfolder/k/khalni_gem.txt svneol=native#text/plain res/cardsfolder/k/khalni_gem.txt svneol=native#text/plain
res/cardsfolder/k/khalni_heart_expedition.txt svneol=native#text/plain res/cardsfolder/k/khalni_heart_expedition.txt svneol=native#text/plain
res/cardsfolder/k/khalni_hydra.txt svneol=native#text/plain res/cardsfolder/k/khalni_hydra.txt svneol=native#text/plain
res/cardsfolder/k/kharasha_foothills.txt -text
res/cardsfolder/k/kher_keep.txt svneol=native#text/plain res/cardsfolder/k/kher_keep.txt svneol=native#text/plain
res/cardsfolder/k/kiki_jiki_mirror_breaker.txt svneol=native#text/plain res/cardsfolder/k/kiki_jiki_mirror_breaker.txt svneol=native#text/plain
res/cardsfolder/k/kiku_nights_flower.txt svneol=native#text/plain res/cardsfolder/k/kiku_nights_flower.txt svneol=native#text/plain
@@ -6879,6 +6881,7 @@ res/cardsfolder/m/mirror_sigil_sergeant.txt svneol=native#text/plain
res/cardsfolder/m/mirror_strike.txt -text res/cardsfolder/m/mirror_strike.txt -text
res/cardsfolder/m/mirror_universe.txt svneol=native#text/plain res/cardsfolder/m/mirror_universe.txt svneol=native#text/plain
res/cardsfolder/m/mirror_wall.txt svneol=native#text/plain res/cardsfolder/m/mirror_wall.txt svneol=native#text/plain
res/cardsfolder/m/mirrored_depths.txt -text
res/cardsfolder/m/mirrorweave.txt -text res/cardsfolder/m/mirrorweave.txt -text
res/cardsfolder/m/mirrorwood_treefolk.txt -text res/cardsfolder/m/mirrorwood_treefolk.txt -text
res/cardsfolder/m/mirrorworks.txt svneol=native#text/plain res/cardsfolder/m/mirrorworks.txt svneol=native#text/plain

View File

@@ -0,0 +1,13 @@
Name:Furnace Layer
ManaCost:no cost
Types:Plane New Phyrexia
T:Mode$ PlaneswalkedTo | ValidCard$ Plane.Self | TriggerZones$ Command | Execute$ FurnaceDiscard | TriggerDescription$ When you planeswalk to CARDNAME or at the beginning of your upkeep, select target player at random. That player discards a card. If that player discards a land card this way, he or she loses 3 life.
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ FurnaceDiscard | TriggerZones$ Command | Secondary$ True | TriggerDescription$ When you planeswalk to CARDNAME or at the beginning of your upkeep, select target player at random. That player discards a card. If that player discards a land card this way, he or she loses 3 life.
SVar:FurnaceDiscard:AB$ Discard | Cost$ 0 | ValidTgts$ Player | TargetsAtRandom$ True | NumCards$ 1 | Mode$ TgtChoose | RememberDiscarded$ True | SubAbility$ DBLoseLife
SVar:DBLoseLife:DB$ LoseLife | Defined$ Targeted | LifeAmount$ 3 | ConditionDefined$ Remembered | ConditionPresent$ Land | ConditionCompare$ GE1 | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | OptionalDecider$ You | TriggerDescription$ Whenever you roll Chaos, you may destroy target nonland permanent.
SVar:RolledChaos:AB$ Destroy | Cost$ 0 | ValidTgts$ Permanent.nonLand | TgtPrompt$ Select target nonland permanent to destroy
SVar:Picture:http://www.wizards.com/global/images/magic/general/furnace_layer.jpg
Oracle:When you planeswalk to Furnace Layer or at the beginning of your upkeep, select target player at random. That player discards a card. If that player discards a land card this way, he or she loses 3 life.\nWhenever you roll {C}, you may destroy target nonland permanent.
SetInfo:PC2 Common

View File

@@ -0,0 +1,15 @@
Name:Kharasha Foothills
ManaCost:no cost
Types:Plane Mongseng
T:Mode$ Attacks | ValidCard$ Creature.YouCtrl | TriggerZones$ Command | Attacked$ Player | Execute$ TrigCopy | TriggerDescription$ Whenever a creature you control attacks a player, for each other opponent, you may put a token that's a copy of that creature onto the battlefield tapped and attacking that opponent. Exile those tokens at the beginning of the next end step.
SVar:TrigCopy:AB$ RepeatEach | Cost$ 0 | RepeatPlayers$ OppNonTriggeredDefender | RepeatSubAbility$ DBCopy
SVar:DBCopy:DB$ CopyPermanent | Defined$ TriggeredAttacker | NumCopies$ 1 | CopyAttacking$ Remembered | Tapped$ True | AtEOT$ Exile | Optional$ True
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ you may sacrifice any number of creatures. If you do, CARDNAME deals that much damage to target creature.
SVar:RolledChaos:AB$ Sacrifice | Cost$ 0 | Defined$ You | Amount$ SacX | References$ SacX | SacValid$ Creature | RememberSacrificed$ True | Optional$ True | SubAbility$ DBDmg
SVar:SacX:Count$Valid Creature.YouCtrl
SVar:DBDmg:DB$ DealDamage | ValidTgts$ Creature | NumDmg$ DmgX | References$ DmgX | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:DmgX:Remembered$Amount
SVar:Picture:http://www.wizards.com/global/images/magic/general/kharasha_foothills.jpg
Oracle:Whenever a creature you control attacks a player, for each other opponent, you may put a token that's a copy of that creature onto the battlefield tapped and attacking that opponent. Exile those tokens at the beginning of the next end step.\nWhenever you roll {C}, you may sacrifice any number of creatures. If you do, Kharasha Foothills deals that much damage to target creature.
SetInfo:PC2 Common

View File

@@ -0,0 +1,13 @@
Name:Mirrored Depths
ManaCost:no cost
Types:Plane Karsus
T:Mode$ SpellCast | ValidCard$ Card | ValidActivatingPlayer$ Player | TriggerZones$ Command | Execute$ TrigFlip | TriggerDescription$ Whenever a player casts a spell, that player flips a coin. If he or she loses the flip, counter that spell.
SVar:TrigFlip:AB$ FlipACoin | Cost$ 0 | Caller$ TriggeredActivator | LoseSubAbility$ DBCounter
SVar:DBCounter:DB$ Counter | Defined$ TriggeredSpellAbility
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll Chaos, target player reveals the top card of his or her library. If it's a nonland card, you may cast it without paying its mana cost.
SVar:RolledChaos:AB$ Dig | Cost$ 0 | DigNum$ 1 | ValidTgts$ Player | NoMove$ True | Reveal$ True | RememberRevealed$ True | SubAbility$ DBPlay
SVar:DBPlay:DB$ Play | Defined$ Remembered | WithoutManaCost$ True | Optional$ True | ConditionDefined$ Remembered | ConditionPresent$ Card.nonLand | ConditionCompare$ EQ1 | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:Picture:http://www.wizards.com/global/images/magic/general/mirrored_depths.jpg
Oracle:Whenever a player casts a spell, that player flips a coin. If he or she loses the flip, counter that spell.\nWhenever you roll {C}, target player reveals the top card of his or her library. If it's a nonland card, you may cast it without paying its mana cost.
SetInfo:HOP Common

View File

@@ -815,6 +815,10 @@ public class AbilityUtils {
} }
} }
} }
} else if (defined.startsWith("OppNonTriggered")) {
players.addAll(sa.getActivatingPlayer().getOpponents());
players.removeAll(getDefinedPlayers(card, defined.substring(6), sa));
} else if (defined.startsWith("Replaced")) { } else if (defined.startsWith("Replaced")) {
final SpellAbility root = sa.getRootAbility(); final SpellAbility root = sa.getRootAbility();
Object o = null; Object o = null;
@@ -857,11 +861,9 @@ public class AbilityUtils {
} }
} }
} }
} else if (defined.equals("NonReplacedPlayer")) { } else if (defined.startsWith("NonReplaced")) {
final SpellAbility root = sa.getRootAbility(); players.addAll(game.getPlayers());
Player p = (Player) root.getReplacingObject("Player"); players.removeAll(getDefinedPlayers(card, defined.substring(3), sa));
players.addAll(sa.getActivatingPlayer().getGame().getPlayers());
players.remove(p);
} else if (defined.equals("EnchantedController")) { } else if (defined.equals("EnchantedController")) {
if (card.getEnchantingCard() == null) { if (card.getEnchantingCard() == null) {
return players; return players;

View File

@@ -15,6 +15,7 @@ import forge.Card;
import forge.CardCharacteristicName; import forge.CardCharacteristicName;
import forge.CardLists; import forge.CardLists;
import forge.Command; import forge.Command;
import forge.GameEntity;
import forge.card.CardRulesPredicates; import forge.card.CardRulesPredicates;
import forge.card.ability.AbilityUtils; import forge.card.ability.AbilityUtils;
import forge.card.ability.SpellAbilityEffect; import forge.card.ability.SpellAbilityEffect;
@@ -57,6 +58,11 @@ public class CopyPermanentEffect extends SpellAbilityEffect {
final Card hostCard = sa.getSourceCard(); final Card hostCard = sa.getSourceCard();
final Game game = hostCard.getGame(); final Game game = hostCard.getGame();
final ArrayList<String> keywords = new ArrayList<String>(); final ArrayList<String> keywords = new ArrayList<String>();
if (sa.hasParam("Optional")) {
if (!sa.getActivatingPlayer().getController().confirmAction(sa, null, "Copy this permanent?")) {
return;
}
}
if (sa.hasParam("Keywords")) { if (sa.hasParam("Keywords")) {
keywords.addAll(Arrays.asList(sa.getParam("Keywords").split(" & "))); keywords.addAll(Arrays.asList(sa.getParam("Keywords").split(" & ")));
} }
@@ -244,6 +250,14 @@ public class CopyPermanentEffect extends SpellAbilityEffect {
if (sa.hasParam("RememberCopied")) { if (sa.hasParam("RememberCopied")) {
hostCard.addRemembered(copy); hostCard.addRemembered(copy);
} }
if (sa.hasParam("Tapped")) {
copy.setTapped(true);
}
if (sa.hasParam("CopyAttacking")) {
final GameEntity defender = (GameEntity) AbilityUtils.getDefinedPlayers(hostCard,
sa.getParam("CopyAttacking"), sa).get(0);
game.getCombat().addAttacker(copy, defender);
}
} }
if (wasInAlt) { if (wasInAlt) {

View File

@@ -99,5 +99,6 @@ public class TriggerAttacks extends Trigger {
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Attacker", this.getRunParams().get("Attacker")); sa.setTriggeringObject("Attacker", this.getRunParams().get("Attacker"));
sa.setTriggeringObject("Defender", this.getRunParams().get("Attacked"));
} }
} }

View File

@@ -746,8 +746,10 @@ public class AiController {
int numCards = sa.hasParam("NumCards") ? AbilityUtils.calculateAmount(sa.getSourceCard(), sa.getParam("NumCards"), sa) : 1; int numCards = sa.hasParam("NumCards") ? AbilityUtils.calculateAmount(sa.getSourceCard(), sa.getParam("NumCards"), sa) : 1;
// AI shouldn't mill itself // AI shouldn't mill itself
return numCards < player.getZone(ZoneType.Library).size(); return numCards < player.getZone(ZoneType.Library).size();
case CopyPermanent:
//TODO: add logic here
return true;
default: default:
} }