mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 19:28:01 +00:00
- Added Furnace Layer, Mirrored Depths and Kharasha Foothills(PC2 set is over 90% implemented)
This commit is contained in:
3
.gitattributes
vendored
3
.gitattributes
vendored
@@ -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_celebration.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_scamp.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_heart_expedition.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/kiki_jiki_mirror_breaker.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_universe.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/mirrorwood_treefolk.txt -text
|
||||
res/cardsfolder/m/mirrorworks.txt svneol=native#text/plain
|
||||
|
||||
13
res/cardsfolder/f/furnace_layer.txt
Normal file
13
res/cardsfolder/f/furnace_layer.txt
Normal 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
|
||||
15
res/cardsfolder/k/kharasha_foothills.txt
Normal file
15
res/cardsfolder/k/kharasha_foothills.txt
Normal 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
|
||||
13
res/cardsfolder/m/mirrored_depths.txt
Normal file
13
res/cardsfolder/m/mirrored_depths.txt
Normal 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
|
||||
@@ -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")) {
|
||||
final SpellAbility root = sa.getRootAbility();
|
||||
Object o = null;
|
||||
@@ -857,11 +861,9 @@ public class AbilityUtils {
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (defined.equals("NonReplacedPlayer")) {
|
||||
final SpellAbility root = sa.getRootAbility();
|
||||
Player p = (Player) root.getReplacingObject("Player");
|
||||
players.addAll(sa.getActivatingPlayer().getGame().getPlayers());
|
||||
players.remove(p);
|
||||
} else if (defined.startsWith("NonReplaced")) {
|
||||
players.addAll(game.getPlayers());
|
||||
players.removeAll(getDefinedPlayers(card, defined.substring(3), sa));
|
||||
} else if (defined.equals("EnchantedController")) {
|
||||
if (card.getEnchantingCard() == null) {
|
||||
return players;
|
||||
|
||||
@@ -15,6 +15,7 @@ import forge.Card;
|
||||
import forge.CardCharacteristicName;
|
||||
import forge.CardLists;
|
||||
import forge.Command;
|
||||
import forge.GameEntity;
|
||||
import forge.card.CardRulesPredicates;
|
||||
import forge.card.ability.AbilityUtils;
|
||||
import forge.card.ability.SpellAbilityEffect;
|
||||
@@ -57,6 +58,11 @@ public class CopyPermanentEffect extends SpellAbilityEffect {
|
||||
final Card hostCard = sa.getSourceCard();
|
||||
final Game game = hostCard.getGame();
|
||||
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")) {
|
||||
keywords.addAll(Arrays.asList(sa.getParam("Keywords").split(" & ")));
|
||||
}
|
||||
@@ -244,6 +250,14 @@ public class CopyPermanentEffect extends SpellAbilityEffect {
|
||||
if (sa.hasParam("RememberCopied")) {
|
||||
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) {
|
||||
|
||||
@@ -99,5 +99,6 @@ public class TriggerAttacks extends Trigger {
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Attacker", this.getRunParams().get("Attacker"));
|
||||
sa.setTriggeringObject("Defender", this.getRunParams().get("Attacked"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -747,7 +747,9 @@ public class AiController {
|
||||
// AI shouldn't mill itself
|
||||
return numCards < player.getZone(ZoneType.Library).size();
|
||||
|
||||
|
||||
case CopyPermanent:
|
||||
//TODO: add logic here
|
||||
return true;
|
||||
|
||||
default:
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user