mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 19:28:01 +00:00
*Added Epic keyword.
*Added Endless Swarm Enduring Ideal Eternal Dominion Neverending Torment Undying Flames can't be done in script currently.
This commit is contained in:
4
.gitattributes
vendored
4
.gitattributes
vendored
@@ -2411,8 +2411,10 @@ res/cardsfolder/e/endangered_armodon.txt svneol=native#text/plain
|
|||||||
res/cardsfolder/e/endbringers_revel.txt svneol=native#text/plain
|
res/cardsfolder/e/endbringers_revel.txt svneol=native#text/plain
|
||||||
res/cardsfolder/e/endless_cockroaches.txt svneol=native#text/plain
|
res/cardsfolder/e/endless_cockroaches.txt svneol=native#text/plain
|
||||||
res/cardsfolder/e/endless_ranks_of_the_dead.txt -text
|
res/cardsfolder/e/endless_ranks_of_the_dead.txt -text
|
||||||
|
res/cardsfolder/e/endless_swarm.txt -text
|
||||||
res/cardsfolder/e/endoskeleton.txt svneol=native#text/plain
|
res/cardsfolder/e/endoskeleton.txt svneol=native#text/plain
|
||||||
res/cardsfolder/e/endure.txt -text
|
res/cardsfolder/e/endure.txt -text
|
||||||
|
res/cardsfolder/e/enduring_ideal.txt -text
|
||||||
res/cardsfolder/e/enemy_of_the_guildpact.txt svneol=native#text/plain
|
res/cardsfolder/e/enemy_of_the_guildpact.txt svneol=native#text/plain
|
||||||
res/cardsfolder/e/energizer.txt svneol=native#text/plain
|
res/cardsfolder/e/energizer.txt svneol=native#text/plain
|
||||||
res/cardsfolder/e/energy_arc.txt svneol=native#text/plain
|
res/cardsfolder/e/energy_arc.txt svneol=native#text/plain
|
||||||
@@ -2484,6 +2486,7 @@ res/cardsfolder/e/essence_warden.txt svneol=native#text/plain
|
|||||||
res/cardsfolder/e/etched_champion.txt svneol=native#text/plain
|
res/cardsfolder/e/etched_champion.txt svneol=native#text/plain
|
||||||
res/cardsfolder/e/etched_monstrosity.txt svneol=native#text/plain
|
res/cardsfolder/e/etched_monstrosity.txt svneol=native#text/plain
|
||||||
res/cardsfolder/e/etched_oracle.txt svneol=native#text/plain
|
res/cardsfolder/e/etched_oracle.txt svneol=native#text/plain
|
||||||
|
res/cardsfolder/e/eternal_dominion.txt -text
|
||||||
res/cardsfolder/e/eternal_dragon.txt svneol=native#text/plain
|
res/cardsfolder/e/eternal_dragon.txt svneol=native#text/plain
|
||||||
res/cardsfolder/e/eternal_flame.txt svneol=native#text/plain
|
res/cardsfolder/e/eternal_flame.txt svneol=native#text/plain
|
||||||
res/cardsfolder/e/eternal_warrior.txt svneol=native#text/plain
|
res/cardsfolder/e/eternal_warrior.txt svneol=native#text/plain
|
||||||
@@ -5409,6 +5412,7 @@ res/cardsfolder/n/neurok_invisimancer.txt svneol=native#text/plain
|
|||||||
res/cardsfolder/n/neurok_prodigy.txt svneol=native#text/plain
|
res/cardsfolder/n/neurok_prodigy.txt svneol=native#text/plain
|
||||||
res/cardsfolder/n/neurok_replica.txt svneol=native#text/plain
|
res/cardsfolder/n/neurok_replica.txt svneol=native#text/plain
|
||||||
res/cardsfolder/n/neurok_spy.txt svneol=native#text/plain
|
res/cardsfolder/n/neurok_spy.txt svneol=native#text/plain
|
||||||
|
res/cardsfolder/n/neverending_torment.txt -text
|
||||||
res/cardsfolder/n/nevermaker.txt svneol=native#text/plain
|
res/cardsfolder/n/nevermaker.txt svneol=native#text/plain
|
||||||
res/cardsfolder/n/nevinyrrals_disk.txt svneol=native#text/plain
|
res/cardsfolder/n/nevinyrrals_disk.txt svneol=native#text/plain
|
||||||
res/cardsfolder/n/new_benalia.txt svneol=native#text/plain
|
res/cardsfolder/n/new_benalia.txt svneol=native#text/plain
|
||||||
|
|||||||
@@ -11,4 +11,5 @@ SVar:Rarity:Common
|
|||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/dream_thief.jpg
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/dream_thief.jpg
|
||||||
SetInfo:EVE|Common|http://magiccards.info/scans/en/eve/20.jpg
|
SetInfo:EVE|Common|http://magiccards.info/scans/en/eve/20.jpg
|
||||||
Oracle:Flying\nWhen Dream Thief enters the battlefield, draw a card if you've cast another blue spell this turn.
|
Oracle:Flying\nWhen Dream Thief enters the battlefield, draw a card if you've cast another blue spell this turn.
|
||||||
|
Oracle:Flying\nWhen Dream Thief enters the battlefield, draw a card if you've cast another blue spell this turn.
|
||||||
End
|
End
|
||||||
13
res/cardsfolder/e/endless_swarm.txt
Normal file
13
res/cardsfolder/e/endless_swarm.txt
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
Name:Endless Swarm
|
||||||
|
ManaCost:5 G G G
|
||||||
|
Types:Sorcery
|
||||||
|
Text:no text
|
||||||
|
K:Epic
|
||||||
|
A:SP$ Token | Cost$ 5 G G G | TokenAmount$ X | TokenName$ Snake | TokenTypes$ Creature,Snake | TokenOwner$ You | TokenColors$ Green | TokenPower$ 1 | TokenToughness$ 1 | SpellDescription$ Put a 1/1 green Snake creature token onto the battlefield for each card in your hand.
|
||||||
|
SVar:X:Count$InYourHand
|
||||||
|
SVar:Rarity:Rare
|
||||||
|
SVar:RemAIDeck:True
|
||||||
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/endless_swarm.jpg
|
||||||
|
SetInfo:SOK|Rare|http://magiccards.info/scans/en/sok/129.jpg
|
||||||
|
Oracle:Put a 1/1 green Snake creature token onto the battlefield for each card in your hand.\nEpic (For the rest of the game, you can't cast spells. At the beginning of each of your upkeeps, copy this spell except for its epic ability.)
|
||||||
|
End
|
||||||
12
res/cardsfolder/e/enduring_ideal.txt
Normal file
12
res/cardsfolder/e/enduring_ideal.txt
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
Name:Enduring Ideal
|
||||||
|
ManaCost:5 W W
|
||||||
|
Types:Sorcery
|
||||||
|
Text:no text
|
||||||
|
K:Epic
|
||||||
|
A:SP$ChangeZone | Cost$ 5 W W | Origin$ Library | Destination$ Battlefield | ChangeType$ Enchantment | ChangeNum$ 1 | SpellDescription$ Search your library for an enchantment card and put it onto the battlefield. Then shuffle your library.
|
||||||
|
SVar:Rarity:Rare
|
||||||
|
SVar:RemAIDeck:True
|
||||||
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/enduring_ideal.jpg
|
||||||
|
Oracle:Search your library for an enchantment card and put it onto the battlefield. Then shuffle your library.\nEpic (For the rest of the game, you can't cast spells. At the beginning of each of your upkeeps, copy this spell except for its epic ability.)
|
||||||
|
SetInfo:SOK|Rare|http://magiccards.info/scans/en/sok/9.jpg
|
||||||
|
End
|
||||||
12
res/cardsfolder/e/eternal_dominion.txt
Normal file
12
res/cardsfolder/e/eternal_dominion.txt
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
Name:Eternal Dominion
|
||||||
|
ManaCost:7 U U U
|
||||||
|
Types:Sorcery
|
||||||
|
Text:no text
|
||||||
|
K:Epic
|
||||||
|
A:SP$ ChangeZone | Cost$ 3 U U | Origin$ Library | Destination$ Battlefield | ValidTgts$ Opponent | ChangeType$ Artifact,Creature,Enchantment,Land | ChangeNum$ 1 | GainControl$ True | IsCurse$ True | SpellDescription$ Search target opponent's library for a creature card and put that card onto the battlefield under your control. Then that player shuffles his or her library.
|
||||||
|
SVar:Rarity:Rare
|
||||||
|
SVar:RemAIDeck:True
|
||||||
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/eternal_dominion.jpg
|
||||||
|
Oracle:Search target opponent's library for an artifact, creature, enchantment, or land card. Put that card onto the battlefield under your control. Then that player shuffles his or her library.\nEpic (For the rest of the game, you can't cast spells. At the beginning of each of your upkeeps, copy this spell except for its epic ability. You may choose a new target for the copy.)
|
||||||
|
SetInfo:SOK|Rare|http://magiccards.info/scans/en/sok/36.jpg
|
||||||
|
End
|
||||||
11
res/cardsfolder/n/neverending_torment.txt
Normal file
11
res/cardsfolder/n/neverending_torment.txt
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
Name:Neverending Torment
|
||||||
|
ManaCost:4 B B
|
||||||
|
Types:Sorcery
|
||||||
|
Text:no text
|
||||||
|
K:Epic
|
||||||
|
A:SP$ ChangeZone | Cost$ 4 B B | Origin$ Library | Destination$ Exile | ValidTgts$ Player | ChangeType$ Card | ChangeNum$ X | IsCurse$ True | SpellDescription$ Search target player's library for X cards, where X is the number of cards in your hand, and exile it. Then that player shuffles his or her library.
|
||||||
|
SVar:X:Count$InYourHand
|
||||||
|
SVar:Rarity:Rare
|
||||||
|
SVar:RemAIDeck:True
|
||||||
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/neverending_torment.jpg
|
||||||
|
End
|
||||||
@@ -1160,6 +1160,8 @@ public class GameAction {
|
|||||||
canShowWinLose = true;
|
canShowWinLose = true;
|
||||||
forge.card.trigger.Trigger.resetIDs();
|
forge.card.trigger.Trigger.resetIDs();
|
||||||
AllZone.getTriggerHandler().clearTriggerSettings();
|
AllZone.getTriggerHandler().clearTriggerSettings();
|
||||||
|
AllZone.getHumanPlayer().setEpicSpell(null);
|
||||||
|
AllZone.getComputerPlayer().setEpicSpell(null);
|
||||||
|
|
||||||
{ //re-number cards just so their unique numbers are low, just for user friendliness
|
{ //re-number cards just so their unique numbers are low, just for user friendliness
|
||||||
CardFactoryInterface c = AllZone.getCardFactory();
|
CardFactoryInterface c = AllZone.getCardFactory();
|
||||||
|
|||||||
@@ -49,6 +49,8 @@ public abstract class Player extends GameEntity {
|
|||||||
|
|
||||||
Map<Constant.Zone, PlayerZone> zones = new EnumMap<Constant.Zone, PlayerZone>(Constant.Zone.class);
|
Map<Constant.Zone, PlayerZone> zones = new EnumMap<Constant.Zone, PlayerZone>(Constant.Zone.class);
|
||||||
public final static List<Zone> ALL_ZONES = Collections.unmodifiableList(Arrays.asList(Zone.Battlefield, Zone.Library, Zone.Graveyard, Zone.Hand, Zone.Exile, Zone.Command));
|
public final static List<Zone> ALL_ZONES = Collections.unmodifiableList(Arrays.asList(Zone.Battlefield, Zone.Library, Zone.Graveyard, Zone.Hand, Zone.Exile, Zone.Command));
|
||||||
|
|
||||||
|
private SpellAbility epicSpell = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Constructor for Player.</p>
|
* <p>Constructor for Player.</p>
|
||||||
@@ -1914,4 +1916,18 @@ public abstract class Player extends GameEntity {
|
|||||||
return p1.getName().equals(getName());
|
return p1.getName().equals(getName());
|
||||||
} else return false;
|
} else return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the epicSpell
|
||||||
|
*/
|
||||||
|
public SpellAbility getEpicSpell() {
|
||||||
|
return epicSpell;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param epicSpell0 the epicSpell to set
|
||||||
|
*/
|
||||||
|
public void setEpicSpell(SpellAbility epicSpell0) {
|
||||||
|
this.epicSpell = epicSpell0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4981,6 +4981,57 @@ public class CardFactoryUtil {
|
|||||||
card.setSVar("ProvokeAbility", abString);
|
card.setSVar("ProvokeAbility", abString);
|
||||||
card.setSVar("DBUntap", dbString);
|
card.setSVar("DBUntap", dbString);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(card.hasKeyword("Epic")) {
|
||||||
|
final SpellAbility origSA = card.getSpellAbilities().get(0);
|
||||||
|
|
||||||
|
SpellAbility newSA = new Spell(card,origSA.getPayCosts(),origSA.getTarget()) {
|
||||||
|
private static final long serialVersionUID = -7934420043356101045L;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void resolve() {
|
||||||
|
card.getController().setEpicSpell(origSA);
|
||||||
|
|
||||||
|
//Create Epic emblem
|
||||||
|
Card eff = new Card();
|
||||||
|
eff.setName(card.toString() + " Epic");
|
||||||
|
eff.addType("Effect"); // Or Emblem
|
||||||
|
eff.setToken(true); // Set token to true, so when leaving play it gets nuked
|
||||||
|
eff.addController(card.getController());
|
||||||
|
eff.setOwner(card.getController());
|
||||||
|
eff.setImageName(card.getImageName());
|
||||||
|
eff.setColor(card.getColor());
|
||||||
|
eff.setImmutable(true);
|
||||||
|
|
||||||
|
eff.addStaticAbility("Mode$ CantBeCast | ValidCard$ Card | Caster$ You | Description$ For the rest of the game, you can't cast spells.");
|
||||||
|
|
||||||
|
Trigger copyTrigger = forge.card.trigger.TriggerHandler.parseTrigger("Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerDescription$ At the beginning of each of your upkeeps, copy " + card.toString() + " except for its epic ability.", card, false);
|
||||||
|
|
||||||
|
copyTrigger.setOverridingAbility(origSA);
|
||||||
|
|
||||||
|
eff.addTrigger(copyTrigger);
|
||||||
|
AllZone.getTriggerHandler().registerTrigger(copyTrigger);
|
||||||
|
|
||||||
|
AllZone.getTriggerHandler().suppressMode("ChangesZone");
|
||||||
|
AllZone.getGameAction().moveToPlay(eff);
|
||||||
|
AllZone.getTriggerHandler().clearSuppression("ChangesZone");
|
||||||
|
|
||||||
|
if(card.getController().isHuman()) {
|
||||||
|
AllZone.getGameAction().playSpellAbility_NoStack(origSA, false);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ComputerUtil.playNoStack(origSA);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
newSA.setDescription(origSA.getDescription());
|
||||||
|
|
||||||
|
origSA.setPayCosts(null);
|
||||||
|
origSA.setManaCost("0");
|
||||||
|
|
||||||
|
card.clearSpellAbility();
|
||||||
|
card.addSpellAbility(newSA);
|
||||||
|
}
|
||||||
|
|
||||||
return card;
|
return card;
|
||||||
}
|
}
|
||||||
@@ -5424,6 +5475,7 @@ public class CardFactoryUtil {
|
|||||||
|
|
||||||
card.addTrigger(stormTrigger);
|
card.addTrigger(stormTrigger);
|
||||||
} // Storm
|
} // Storm
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} //end class CardFactoryUtil
|
} //end class CardFactoryUtil
|
||||||
|
|||||||
@@ -56,6 +56,10 @@ abstract public class Spell extends SpellAbility implements java.io.Serializable
|
|||||||
@Override
|
@Override
|
||||||
public boolean canPlay() {
|
public boolean canPlay() {
|
||||||
if (AllZone.getStack().isSplitSecondOnStack()) return false;
|
if (AllZone.getStack().isSplitSecondOnStack()) return false;
|
||||||
|
|
||||||
|
if(getSourceCard().getController().getEpicSpell() != null) {
|
||||||
|
return false; //Player has cast an Epic spell and can't cast more this game.
|
||||||
|
}
|
||||||
|
|
||||||
Card card = getSourceCard();
|
Card card = getSourceCard();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user