added epic cards, fixed maxcast bug
maxcast(*)0 - checks for the current action player of that turn, but when you passes the turn to the opponent, you can cast instant or cards with flash instead because you are not the current player, it mustcheck the controller of the card with play restriction if he can play it or not whether it your turn or the opponents turn.
This commit is contained in:
@@ -16398,10 +16398,10 @@ type=Land
|
||||
[/card]
|
||||
[card]
|
||||
name=City of Solitude
|
||||
auto=this(variable{controllerturn}) maxCast(*)0 opponent
|
||||
auto=this(variable{controllerturn}) lord(*|opponentbattlefield) noactivatedability
|
||||
auto=this(variable{opponentturn}) maxCast(*)0 controller
|
||||
auto=this(variable{opponentturn}) lord(*|mybattlefield) noactivatedability
|
||||
auto=this(variable{controllerturn}>0) maxCast(*)0 opponent
|
||||
auto=this(variable{controllerturn}>0) lord(*|opponentbattlefield) noactivatedability
|
||||
auto=this(variable{opponentturn}>0) maxCast(*)0 controller
|
||||
auto=this(variable{opponentturn}>0) lord(*|mybattlefield) noactivatedability
|
||||
text=Players can cast spells and activate abilities only during their own turns.
|
||||
mana={2}{G}
|
||||
type=Enchantment
|
||||
@@ -24860,8 +24860,8 @@ type=Land
|
||||
[/card]
|
||||
[card]
|
||||
name=Dosan the Falling Leaf
|
||||
auto=this(variable{controllerturn}) maxCast(*)0 opponent
|
||||
auto=this(variable{opponentturn}) maxCast(*)0 controller
|
||||
auto=this(variable{controllerturn}>0) maxCast(*)0 opponent
|
||||
auto=this(variable{opponentturn}>0) maxCast(*)0 controller
|
||||
text=Players can cast spells only during their own turns.
|
||||
mana={1}{G}{G}
|
||||
type=Legendary Creature
|
||||
@@ -29061,6 +29061,14 @@ type=Enchantment
|
||||
subtype=Aura
|
||||
[/card]
|
||||
[card]
|
||||
name=Endless Swarm
|
||||
auto=token(Snake,Creature Snake,1/1,green)*phandcount
|
||||
auto=if compare(epicactivated)~lessthan~1 then emblem transforms((,newability[epic controller],newability[@each my upkeep:castcard(copied named!:Endless Swarm:!)])) forever dontremove
|
||||
text=Put a 1/1 green Snake creature token onto the battlefield for each card in your hand. -- Epic (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.)
|
||||
mana={5}{G}{G}{G}
|
||||
type=Sorcery
|
||||
[/card]
|
||||
[card]
|
||||
name=Endless Whispers
|
||||
auto=@each endofturn:moveto(mybattlefield) all(creature[fresh]|opponentgraveyard)
|
||||
auto=@each endofturn:moveto(opponentbattlefield) all(creature[fresh]|mygraveyard)
|
||||
@@ -29113,6 +29121,14 @@ mana={3}{W}{W}
|
||||
type=Instant
|
||||
[/card]
|
||||
[card]
|
||||
name=Enduring Ideal
|
||||
auto=moveto(mybattlefield) notatarget(enchantment|mylibrary) and!( transforms((,newability[if cantargetcard(aura) then retarget target(creature|mybattlefield)])) )!
|
||||
auto=if compare(epicactivated)~lessthan~1 then emblem transforms((,newability[epic controller],newability[@each my upkeep:castcard(copied named!:Enduring Ideal:!)])) forever dontremove
|
||||
text=Search your library for an enchantment card and put it onto the battlefield. Then shuffle your library. -- Epic (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.)
|
||||
mana={5}{W}{W}
|
||||
type=Sorcery
|
||||
[/card]
|
||||
[card]
|
||||
name=Enemy of the Guildpact
|
||||
auto=protection from(*[multicolor])
|
||||
text=Protection from multicolored
|
||||
@@ -29981,6 +29997,15 @@ power=0
|
||||
toughness=0
|
||||
[/card]
|
||||
[card]
|
||||
name=Eternal Dominion
|
||||
target=opponent
|
||||
auto=target(*[artifact;creature;enchantment;land]|targetedpersonslibrary) moveto(mybattlefield)
|
||||
auto=if compare(epicactivated)~lessthan~1 then emblem transforms((,newability[epic controller],newability[@each my upkeep:castcard(copied named!:Eternal Dominion:!)])) forever dontremove
|
||||
text=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. -- Epic (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.)
|
||||
mana={7}{U}{U}{U}
|
||||
type=Sorcery
|
||||
[/card]
|
||||
[card]
|
||||
name=Eternal Dragon
|
||||
abilities=flying
|
||||
autohand={2}{cycle}:name(plainscycling) moveTo(myhand) target(plains|mylibrary)
|
||||
@@ -38047,8 +38072,8 @@ toughness=3
|
||||
[/card]
|
||||
[card]
|
||||
name=Glory of Warfare
|
||||
auto=this(variable{controllerturn}) lord(creature|mybattlefield) 2/0
|
||||
auto=this(variable{opponentturn}) lord(creature|mybattlefield) 0/2
|
||||
auto=this(variable{controllerturn}>0) lord(creature|mybattlefield) 2/0
|
||||
auto=this(variable{opponentturn}>0) lord(creature|mybattlefield) 0/2
|
||||
text=As long as it's your turn, creatures you control get +2/+0. -- As long as it's not your turn, creatures you control get +0/+2.
|
||||
mana={2}{R}{W}
|
||||
type=Enchantment
|
||||
@@ -39827,8 +39852,8 @@ type=Artifact
|
||||
[/card]
|
||||
[card]
|
||||
name=Grand Abolisher
|
||||
auto=this(variable{controllerturn}) maxCast(*)0 opponent
|
||||
auto=this(variable{controllerturn}) lord(*[artifact;enchantment;creature]|opponentbattlefield) noactivatedability
|
||||
auto=this(variable{controllerturn}>0) maxCast(*)0 opponent
|
||||
auto=this(variable{controllerturn}>0) lord(*[artifact;enchantment;creature]|opponentbattlefield) noactivatedability
|
||||
text=During your turn, your opponents can't cast spells or activate abilities of artifacts, creatures, or enchantments.
|
||||
mana={W}{W}
|
||||
type=Creature
|
||||
@@ -64511,6 +64536,15 @@ mana={1}{U}
|
||||
type=Instant
|
||||
[/card]
|
||||
[card]
|
||||
name=Neverending Torment
|
||||
target=player
|
||||
auto=moveto(exile) target(<phandcount>*|targetedpersonslibrary)
|
||||
auto=if compare(epicactivated)~lessthan~1 then emblem transforms((,newability[epic controller],newability[@each my upkeep:castcard(copied named!:Neverending Torment:!)])) forever dontremove
|
||||
text=Search target player's library for X cards, where X is the number of cards in your hand, and exile them. Then that player shuffles his or her library. -- Epic (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.)
|
||||
mana={4}{B}{B}
|
||||
type=Sorcery
|
||||
[/card]
|
||||
[card]
|
||||
name=Nevermaker
|
||||
abilities=flying
|
||||
other={3}{U} name(Evoke)
|
||||
@@ -65912,7 +65946,7 @@ subtype=Equipment
|
||||
[/card]
|
||||
[card]
|
||||
name=Oak Street Innkeeper
|
||||
auto=this(variable{opponentturn}) lord(creature[tapped]|mybattlefield) opponentshroud
|
||||
auto=this(variable{opponentturn}>0) lord(creature[tapped]|mybattlefield) opponentshroud
|
||||
text=As long as it's not your turn, tapped creatures you control have hexproof.
|
||||
mana={2}{G}
|
||||
type=Creature
|
||||
@@ -66036,7 +66070,7 @@ type=Artifact
|
||||
[/card]
|
||||
[card]
|
||||
name=Ob Nixilis, the Fallen
|
||||
auto=@movedTo(land|myBattlefield):may counter(1/1,3) && life:-3 opponent
|
||||
auto=@movedTo(land|myBattlefield):may life:-3 target(player) && counter(1/1,3) all(this)
|
||||
text=Landfall - Whenever a land enters the battlefield under your control, you may have target player lose 3 life. If you do, put three +1/+1 counters on Ob Nixilis, the Fallen.
|
||||
mana={3}{B}{B}
|
||||
type=Legendary Creature
|
||||
@@ -104694,8 +104728,8 @@ toughness=4
|
||||
[/card]
|
||||
[card]
|
||||
name=Vibrating Sphere
|
||||
auto=this(variable{controllerturn}) lord(creature|mybattlefield) 2/0
|
||||
auto=this(variable{opponentturn}) lord(creature|mybattlefield) 0/-2
|
||||
auto=this(variable{controllerturn}>0) lord(creature|mybattlefield) 2/0
|
||||
auto=this(variable{opponentturn}>0) lord(creature|mybattlefield) 0/-2
|
||||
text=As long as it's your turn, creatures you control get +2/+0. -- As long as it's not your turn, creatures you control get -0/-2.
|
||||
mana={4}
|
||||
type=Artifact
|
||||
@@ -111952,7 +111986,7 @@ toughness=1
|
||||
[card]
|
||||
name=Zurgo Helmsmasher
|
||||
abilities=haste,mustattack
|
||||
auto=this(variable{controllerturn}) indestructible
|
||||
auto=this(variable{controllerturn}>0) indestructible
|
||||
auto=@vampired(creature) from(this):counter(1/1,1) all(this)
|
||||
text=Haste. -- Zurgo Helmsmasher attacks each combat if able. -- Zurgo Helmsmasher has indestructible as long as it is your turn. -- Whenever a creature dealt damage by Zurgo Helmsmasher dies, put a +1/+1 counter on Zurgo Helmsmasher.
|
||||
mana={2}{R}{W}{B}
|
||||
|
||||
@@ -4509,24 +4509,12 @@ mana={3}{W}
|
||||
type=Enchantment
|
||||
[/card]
|
||||
[card]
|
||||
name=Endless Swarm
|
||||
text=Put a 1/1 green Snake creature token onto the battlefield for each card in your hand. -- Epic (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.)
|
||||
mana={5}{G}{G}{G}
|
||||
type=Sorcery
|
||||
[/card]
|
||||
[card]
|
||||
name=Endoskeleton
|
||||
text=You may choose not to untap Endoskeleton during your untap step. -- {2}, {T}: Target creature gets +0/+3 for as long as Endoskeleton remains tapped.
|
||||
mana={2}
|
||||
type=Artifact
|
||||
[/card]
|
||||
[card]
|
||||
name=Enduring Ideal
|
||||
text=Search your library for an enchantment card and put it onto the battlefield. Then shuffle your library. -- Epic (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.)
|
||||
mana={5}{W}{W}
|
||||
type=Sorcery
|
||||
[/card]
|
||||
[card]
|
||||
name=Enduring Renewal
|
||||
text=Play with your hand revealed. -- If you would draw a card, reveal the top card of your library instead. If it's a creature card, put it into your graveyard. Otherwise, draw a card. -- Whenever a creature is put into your graveyard from the battlefield, return it to your hand.
|
||||
mana={2}{W}{W}
|
||||
@@ -4707,12 +4695,6 @@ type=Enchantment
|
||||
subtype=Aura
|
||||
[/card]
|
||||
[card]
|
||||
name=Eternal Dominion
|
||||
text=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. -- Epic (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.)
|
||||
mana={7}{U}{U}{U}
|
||||
type=Sorcery
|
||||
[/card]
|
||||
[card]
|
||||
name=Etherium-Horn Sorcerer
|
||||
text={1}{U}{R}: Return Etherium-Horn Sorcerer to its owner's hand. -- Cascade (When you cast this spell, exile cards from the top of your library until you exile a nonland card that costs less. You may cast it without paying its mana cost. Put the exiled cards on the bottom in a random order.)
|
||||
mana={4}{U}{R}
|
||||
@@ -10798,12 +10780,6 @@ power=2
|
||||
toughness=2
|
||||
[/card]
|
||||
[card]
|
||||
name=Neverending Torment
|
||||
text=Search target player's library for X cards, where X is the number of cards in your hand, and exile them. Then that player shuffles his or her library. -- Epic (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.)
|
||||
mana={4}{B}{B}
|
||||
type=Sorcery
|
||||
[/card]
|
||||
[card]
|
||||
name=New Benalia
|
||||
text=New Benalia enters the battlefield tapped. -- When New Benalia enters the battlefield, scry 1. (To scry 1, look at the top card of your library, then you may put that card on the bottom of your library.) -- {T}: Add {W} to your mana pool.
|
||||
type=Land
|
||||
|
||||
@@ -599,6 +599,10 @@ private:
|
||||
{
|
||||
intValue = target->controller()->opponent()->drawCounter;
|
||||
}
|
||||
else if (s == "epicactivated")
|
||||
{
|
||||
intValue = target->controller()->epic;
|
||||
}
|
||||
else if (s == "p" || s == "power")
|
||||
{
|
||||
intValue = target->getPower();
|
||||
@@ -1335,6 +1339,16 @@ public:
|
||||
AAFakeAbility * clone() const;
|
||||
};
|
||||
|
||||
class AAEPIC: public ActivatedAbility
|
||||
{
|
||||
public:
|
||||
string named;
|
||||
AAEPIC(GameObserver* observer, int id, MTGCardInstance * source, MTGCardInstance * target,string _newName, ManaCost * cost = NULL);
|
||||
int resolve();
|
||||
const string getMenuText();
|
||||
AAEPIC * clone() const;
|
||||
};
|
||||
|
||||
class AAFizzler: public ActivatedAbility
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -42,6 +42,7 @@ public:
|
||||
int skippingTurn;
|
||||
int extraTurn;
|
||||
int drawCounter;
|
||||
int epic;
|
||||
vector<string> prowledTypes;
|
||||
vector<MTGCardInstance*>curses;
|
||||
Player(GameObserver *observer, string deckFile, string deckFileSmall, MTGDeck * deck = NULL);
|
||||
|
||||
@@ -1328,6 +1328,31 @@ AAFakeAbility * AAFakeAbility::clone() const
|
||||
return NEW AAFakeAbility(*this);
|
||||
}
|
||||
|
||||
//EPIC
|
||||
AAEPIC::AAEPIC(GameObserver* observer, int id, MTGCardInstance * source, MTGCardInstance * _target, string _named,ManaCost * cost):
|
||||
ActivatedAbility(observer, id, source, cost, 0),named(_named)
|
||||
{
|
||||
this->target = _target;
|
||||
}
|
||||
int AAEPIC::resolve()
|
||||
{
|
||||
MTGCardInstance * _target = (MTGCardInstance *)target;
|
||||
_target->controller()->epic = 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
const string AAEPIC::getMenuText()
|
||||
{
|
||||
if(named.size())
|
||||
return named.c_str();
|
||||
return "EPIC";
|
||||
}
|
||||
|
||||
AAEPIC * AAEPIC::clone() const
|
||||
{
|
||||
return NEW AAEPIC(*this);
|
||||
}
|
||||
|
||||
// Fizzler
|
||||
AAFizzler::AAFizzler(GameObserver* observer, int _id, MTGCardInstance * card, Spell * _target, ManaCost * _cost) :
|
||||
ActivatedAbility(observer, _id, card, _cost, 0)
|
||||
|
||||
@@ -2408,7 +2408,7 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
|
||||
return a;
|
||||
}
|
||||
|
||||
//Reset damages on cards
|
||||
//Do nothing
|
||||
found = s.find("donothing");
|
||||
if (found != string::npos)
|
||||
{
|
||||
@@ -2418,6 +2418,16 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
|
||||
return a;
|
||||
}
|
||||
|
||||
//Epic
|
||||
found = s.find("epic");
|
||||
if (found != string::npos)
|
||||
{
|
||||
|
||||
MTGAbility * a = NEW AAEPIC(observer, id, card, target,newName);
|
||||
a->oneShot = 1;
|
||||
return a;
|
||||
}
|
||||
|
||||
//Damage
|
||||
vector<string> splitDamage = parseBetween(s, "damage:", " ", false);
|
||||
if (splitDamage.size())
|
||||
|
||||
@@ -318,13 +318,15 @@ int MTGPutInPlayRule::isReactingToClick(MTGCardInstance * card, ManaCost *)
|
||||
}
|
||||
}
|
||||
else if ((card->hasType(Subtypes::TYPE_INSTANT)) || card->has(Constants::FLASH)
|
||||
|| (player == currentPlayer && !game->isInterrupting
|
||||
|| (player == card->controller() && !game->isInterrupting
|
||||
&& (game->getCurrentGamePhase() == MTG_PHASE_FIRSTMAIN
|
||||
|| game->getCurrentGamePhase() == MTG_PHASE_SECONDMAIN))
|
||||
)
|
||||
{
|
||||
if(card->controller()->epic)
|
||||
return 0;
|
||||
|
||||
if (game->currentActionPlayer->game->playRestrictions->canPutIntoZone(card, game->currentActionPlayer->game->stack) == PlayRestriction::CANT_PLAY)
|
||||
if (card->controller()->game->playRestrictions->canPutIntoZone(card, game->currentActionPlayer->game->stack) == PlayRestriction::CANT_PLAY)
|
||||
return 0;
|
||||
ManaCost * playerMana = player->getManaPool();
|
||||
ManaCost * cost = card->getManaCost();
|
||||
@@ -650,12 +652,14 @@ int MTGAlternativeCostRule::isReactingToClick(MTGCardInstance * card, ManaCost *
|
||||
return 1;
|
||||
}
|
||||
else if ((card->hasType(Subtypes::TYPE_INSTANT)) || card->has(Constants::FLASH)
|
||||
|| (player == currentPlayer && !game->isInterrupting
|
||||
|| (player == card->controller() && !game->isInterrupting
|
||||
&& (game->getCurrentGamePhase() == MTG_PHASE_FIRSTMAIN
|
||||
|| game->getCurrentGamePhase() == MTG_PHASE_SECONDMAIN))
|
||||
)
|
||||
{
|
||||
if (game->currentActionPlayer->game->playRestrictions->canPutIntoZone(card, game->currentActionPlayer->game->stack) == PlayRestriction::CANT_PLAY)
|
||||
if(card->controller()->epic)
|
||||
return 0;
|
||||
if (card->controller()->game->playRestrictions->canPutIntoZone(card, card->controller()->game->stack) == PlayRestriction::CANT_PLAY)
|
||||
return 0;
|
||||
ManaCost * playerMana = player->getManaPool();
|
||||
|
||||
@@ -1035,14 +1039,16 @@ int MTGMorphCostRule::isReactingToClick(MTGCardInstance * card, ManaCost *)
|
||||
return 0;
|
||||
if(!allowedToAltCast(card,player))
|
||||
return 0;
|
||||
if(card->controller()->epic)//zoetic cavern... morph is casted for a cost...
|
||||
return 0;
|
||||
//note lands can morph too, this is different from other cost types.
|
||||
if ((card->hasType(Subtypes::TYPE_INSTANT)) || card->has(Constants::FLASH) || (player == currentPlayer
|
||||
if ((card->hasType(Subtypes::TYPE_INSTANT)) || card->has(Constants::FLASH) || (player == card->controller()
|
||||
&& !game->isInterrupting
|
||||
&& (game->getCurrentGamePhase() == MTG_PHASE_FIRSTMAIN
|
||||
|| game->getCurrentGamePhase() == MTG_PHASE_SECONDMAIN))
|
||||
)
|
||||
{
|
||||
if (game->currentActionPlayer->game->playRestrictions->canPutIntoZone(card, game->currentActionPlayer->game->stack) == PlayRestriction::CANT_PLAY)
|
||||
if (card->controller()->game->playRestrictions->canPutIntoZone(card, card->controller()->game->stack) == PlayRestriction::CANT_PLAY)
|
||||
return 0;
|
||||
ManaCost * playerMana = player->getManaPool();
|
||||
ManaCost * morph = card->getManaCost()->getMorph();
|
||||
|
||||
@@ -33,6 +33,7 @@ Player::Player(GameObserver *observer, string file, string fileSmall, MTGDeck *
|
||||
skippingTurn = 0;
|
||||
extraTurn = 0;
|
||||
drawCounter = 0;
|
||||
epic = 0;
|
||||
prowledTypes.clear();
|
||||
doesntEmpty = NEW ManaCost();
|
||||
poolDoesntEmpty = NEW ManaCost();
|
||||
|
||||
Reference in New Issue
Block a user