Merge pull request #800 from zethfoxster/master

getting master
This commit is contained in:
zethfoxster
2016-07-27 23:03:37 -04:00
committed by GitHub
13 changed files with 97 additions and 41 deletions

View File

@@ -7356,6 +7356,7 @@ toughness=2
[/card]
[card]
name=Azamuki, Treachery Incarnate
doublefaced=kamiflip
auto={C(0/0,-1,Ki)}:target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)])) ueot
text=Remove a ki counter from Azamuki, Treachery Incarnate: Gain control of target creature until end of turn.
color=red
@@ -14349,6 +14350,7 @@ type=Artifact
[/card]
[card]
name=Budoka Gardener
doublefaced=kamiflip
auto={T}:all(this) transforms((,newability[if type(land|mybattlefield)~morethan~9 then flip(Dokai, Weaver of Life)],newability[may moveto(mybattlefield) notatarget(land|myhand)],newability[@movedto(land|mybattlefield) restriction{type:land:mybattlefield~morethan~9}:flip(Dokai, Weaver of Life)]))
text={T}: You may put a land card from your hand onto the battlefield. If you control ten or more lands, flip Budoka Gardener.
mana={1}{G}
@@ -14359,6 +14361,7 @@ toughness=1
[/card]
[card]
name=Budoka Pupil
doublefaced=kamiflip
auto=@movedTo(spirit,arcane|mystack):may counter(0/0,1,Ki)
auto=@each endofturn:this(counter{0/0.2.Ki}) flip(Ichiga, Who Topples Oaks)
text=Whenever you cast a Spirit or Arcane spell, you may put a ki counter on Budoka Pupil. -- At the beginning of the end step, if there are two or more ki counters on Budoka Pupil, you may flip it. -- ---- -- Ichiga, Who Topples Oaks -- Legendary Creature - Spirit -- 4/3 -- Trample -- Remove a ki counter from Ichiga, Who Topples Oaks: Target creature gets +2/+2 until end of turn.
@@ -14743,6 +14746,7 @@ type=Instant
[/card]
[card]
name=Bushi Tenderfoot
doublefaced=kamiflip
auto=@vampired(creature) from(this):all(trigger[from]) flip(Kenzo the Hardhearted)
text=When a creature dealt damage by Bushi Tenderfoot this turn is put into a graveyard, flip Bushi Tenderfoot.
mana={W}
@@ -15304,6 +15308,7 @@ toughness=3
[/card]
[card]
name=Callow Jushi
doublefaced=kamiflip
auto=@movedTo(spirit,arcane|mystack):may counter(0/0,1,Ki)
auto=@each endofturn:this(counter{0/0.2.Ki}) may flip(Jaraku the Interloper)
text=Whenever you cast a Spirit or Arcane spell, you may put a ki counter on Callow Jushi. -- At the beginning of the end step, if there are two or more ki counters on Callow Jushi, you may flip it.
@@ -22914,6 +22919,7 @@ toughness=1
[/card]
[card]
name=Cunning Bandit
doublefaced=kamiflip
auto=@movedTo(spirit,arcane|mystack):may counter(0/0,1,Ki)
auto=@each endofturn:this(counter{0/0.2.Ki}) flip(Azamuki, Treachery Incarnate)
text=Whenever you cast a Spirit or Arcane spell, you may put a ki counter on Cunning Bandit. -- At the beginning of the end step, if there are two or more ki counters on Cunning Bandit, you may flip it. -- ---- -- Azamuki, Treachery Incarnate -- Legendary Creature - Spirit -- 5/2 -- Remove a ki counter from Azamuki, Treachery Incarnate: Gain control of target creature until end of turn.
@@ -28101,6 +28107,7 @@ type=Instant
[/card]
[card]
name=Dokai, Weaver of Life
doublefaced=kamiflip
auto={4}{G}{G}{T}:token(Elemental,Creature Elemental,type:land:mybattlefield/type:land:mybattlefield,green) controller
text={4}{G}{G}, {T}: Put an X/X green Elemental creature token onto the battlefield, where X is the number of lands you control.
mana={1}{G}
@@ -33816,6 +33823,7 @@ type=Instant
[/card]
[card]
name=Erayo, Soratami Ascendant
doublefaced=kamiflip
abilities=flying
auto=@movedto(*|stack) restriction{thisturn(*|stack)~equalto~3}:flip(Erayo's Essence)
text=Flying -- Whenever the fourth spell of a turn is cast, flip Erayo, Soratami Ascendant.
@@ -33827,6 +33835,7 @@ toughness=1
[/card]
[card]
name=Erayo's Essence
doublefaced=kamiflip
auto=@movedto(*[-land]|opponentstack) restriction{thisturn(*[-land]|opponentstack)~equalto~0}:all(trigger[to]) transforms((,newability[fizzle])) forever
text=Whenever an opponent casts a spell for the first time in a turn, counter that spell.
mana={1}{U}
@@ -35567,6 +35576,7 @@ toughness=1
[/card]
[card]
name=Faithful Squire
doublefaced=kamiflip
auto=@movedTo(spirit,arcane|mystack):may counter(0/0,1,Ki)
auto=@each endofturn:this(counter{0/0.2.Ki}) flip(Kaiso, Memory of Loyalty)
text=Whenever you cast a Spirit or Arcane spell, you may put a ki counter on Faithful Squire. -- At the beginning of the end step, if there are two or more ki counters on Faithful Squire, you may flip it.
@@ -50401,6 +50411,7 @@ toughness=4
name=Hired Muscle
auto=@movedTo(spirit,arcane|mystack):may counter(0/0,1,Ki)
auto=@each endofturn:this(counter{0/0.2.Ki}) flip(Scarmaker)
doublefaced=kamiflip
text=Whenever you cast a Spirit or Arcane spell, you may put a ki counter on Hired Muscle. -- At the beginning of the end step, if there are two or more ki counters on Hired Muscle, you may flip it. -- ---- -- Scarmaker -- Legendary Creature - Spirit -- 4/4 -- Remove a ki counter from Scarmaker: Target creature gains fear until end of turn. (It can't be blocked except by artifact creatures and/or black creatures.)
mana={1}{B}{B}
type=Creature
@@ -50806,6 +50817,7 @@ type=Instant
[/card]
[card]
name=Homura, Human Ascendant
doublefaced=kamiflip
abilities=cantblock
auto=@movedTo(this|graveyard) from(battlefield):all(trigger[to]) transforms((,newability[moveTo(mybattlefield)],newability[flip(Homura's Essence)]))
text=Homura, Human Ascendant can't block. -- When Homura is put into a graveyard from the battlefield, return it to the battlefield flipped.
@@ -50817,6 +50829,7 @@ toughness=4
[/card]
[card]
name=Homura's Essence
doublefaced=kamiflip
auto=lord(creature|mybattlefield) 2/2
auto=lord(creature|mybattlefield) flying
auto=lord(creature|mybattlefield) {R}:1/0
@@ -52448,6 +52461,7 @@ type=Sorcery
[/card]
[card]
name=Ichiga, Who Topples Oaks
doublefaced=kamiflip
abilities=trample
auto={C(0/0,-1,Ki)}:2/2 target(creature) ueot
text=Trample -- Remove a ki counter from Ichiga, Who Topples Oaks: Target creature gets +2/+2 until end of turn.
@@ -55204,6 +55218,7 @@ type=Sorcery
[/card]
[card]
name=Jaraku the Interloper
doublefaced=kamiflip
auto={C(0/0,-1,Ki)}:name(counter spell) target(*|stack) transforms((,newability[pay[[{2}]] name(pay 2 mana) donothing?fizzle])) forever
text=Remove a ki counter from Jaraku the Interloper: Counter target spell unless its controller pays {2}.
color=blue
@@ -56233,6 +56248,7 @@ toughness=3
[/card]
[card]
name=Jushi Apprentice
doublefaced=kamiflip
auto={2}{U}{T}:draw:1 controller restriction{type(*|myhand)~lessthan~8}
auto={2}{U}{T}:draw:1 controller && flip(Tomoya the Revealer) restriction{type(*|myhand)~morethan~7}
text={2}{U}, {T}: Draw a card. If you have nine or more cards in hand, flip Jushi Apprentice.
@@ -56460,6 +56476,7 @@ abilities=defender
[/card]
[card]
name=Kaiso, Memory of Loyalty
doublefaced=kamiflip
abilities=flying
auto={C(0/0,-1,Ki)}:prevent:999 target(creature)
text=Flying -- Remove a ki counter from Kaiso, Memory of Loyalty: Prevent all damage that would be dealt to target creature this turn.
@@ -57700,6 +57717,7 @@ toughness=3
[/card]
[card]
name=Kenzo the Hardhearted
doublefaced=kamiflip
abilities=double strike
auto=bushido(2/2)
text=Double strike; bushido 2 (When this blocks or becomes blocked, it gets +2/+2 until end of turn.)
@@ -60081,6 +60099,7 @@ toughness=3
[/card]
[card]
name=Kuon, Ogre Ascendant
doublefaced=kamiflip
auto=@each my endofturn restriction{type(creature[fresh]|graveyard)~morethan~2}:flip(Kuon's Essence)
text=At the beginning of the end step, if three or more creatures were put into graveyards from the battlefield this turn, flip Kuon, Ogre Ascendant.
mana={B}{B}{B}
@@ -60091,6 +60110,7 @@ toughness=4
[/card]
[card]
name=Kuon's Essence
doublefaced=kamiflip
auto=@each opponent upkeep:ability$!choice notatarget(creature|mybattlefield) sacrifice !$ opponent
auto=@each my upkeep:notatarget(creature|mybattlefield) sacrifice
text=At the beginning of each player's upkeep, that player sacrifices a creature.
@@ -68962,7 +68982,7 @@ toughness=1
[/card]
[card]
name=Mirror Gallery
auto=lord(*|battlefield) nolegend
auto=lord(*|battlefield) legendruleremove
text=The "legend rule" doesn't apply.
mana={5}
type=Artifact
@@ -73479,6 +73499,7 @@ toughness=1
[/card]
[card]
name=Nezumi Graverobber
doublefaced=kamiflip
auto={1}{B}:target(*|opponentgraveyard) moveTo(exile) restriction{type(*|opponentgraveyard)~morethan~1}
auto={1}{B}:target(*|opponentgraveyard) moveTo(exile) && all(this) flip(Nighteyes the Desecrator) restriction{type(*|opponentgraveyard)~lessthan~2}
text={1}{B}: Exile target card from an opponent's graveyard. If no cards are in that graveyard, flip Nezumi Graverobber.
@@ -73510,6 +73531,7 @@ toughness=1
[/card]
[card]
name=Nezumi Shortfang
doublefaced=kamiflip
auto={1}{B}{T}:name(target opponent discard) target(opponent) deplete:0 && all(this) transforms((,newability[if type(*|opponenthand)~lessthan~1 then flip(Stabwhisker the Odious)],newability[ability$!reject notatarget(*|myhand)!$ targetedplayer],newability[@discarded(*|opponenthand) restriction{compare(ohandcount)~equalto~1} once:flip(Stabwhisker the Odious)]))
text={1}{B}, {T}: Target opponent discards a card. Then if that player has no cards in hand, flip Nezumi Shortfang.
mana={1}{B}
@@ -73676,6 +73698,7 @@ type=Instant
[/card]
[card]
name=Nighteyes the Desecrator
doublefaced=kamiflip
auto={4}{B}:moveTo(myBattlefield) target(creature|graveyard)
text={4}{B}: Put target creature card in a graveyard onto the battlefield under your control.
color=black
@@ -77023,6 +77046,7 @@ toughness=2
[/card]
[card]
name=Orochi Eggwatcher
doublefaced=kamiflip
auto={2}{G}{T}:token(Snake,Creature Snake,1/1,green) restriction{type(creature|mybattlefield)~lessthan~9}
auto={2}{G}{T}:token(Snake,Creature Snake,1/1,green) && flip(Shidako, Broodmistress) restriction{type(creature|mybattlefield)~morethan~8}
text={2}{G}, {T}: Put a 1/1 green Snake creature token onto the battlefield. If you control ten or more creatures, flip Orochi Eggwatcher.
@@ -90190,6 +90214,7 @@ toughness=6
[/card]
[card]
name=Rune-Tail, Kitsune Ascendant
doublefaced=kamiflip
auto=this(controllerlife > 29) transforms((,newability[flip(Rune-Tail's Essence)]))
text=When you have 30 or more life, flip Rune-Tail, Kitsune Ascendant.
mana={2}{W}
@@ -90200,6 +90225,7 @@ toughness=2
[/card]
[card]
name=Rune-Tail's Essence
doublefaced=kamiflip
auto=preventalldamage to(creature|mybattlefield)
text=Prevent all damage that would be dealt to creatures you control.
mana={2}{W}
@@ -92413,6 +92439,7 @@ toughness=2
[/card]
[card]
name=Scarmaker
doublefaced=kamiflip
auto={C(0/0,-1,Ki)}:fear target(creature)
text=Remove a ki counter from Scarmaker: Target creature gains fear until end of turn. (It can't be blocked except by artifact creatures and/or black creatures.)
color=black
@@ -96147,6 +96174,7 @@ toughness=3
[/card]
[card]
name=Shidako, Broodmistress
doublefaced=kamiflip
auto={G}{S(creature|myBattlefield)}:3/3 target(creature)
text={G}, Sacrifice a creature: Target creature gets +3/+3 until end of turn.
color=green
@@ -104309,6 +104337,7 @@ type=Instant
[/card]
[card]
name=Stabwhisker the Odious
doublefaced=kamiflip
auto=@each opponent upkeep restriction{type(*|opponenthand)~lessthan~1}:life:-3 opponent
auto=@each opponent upkeep restriction{type(*|opponenthand)~equalto~1}:life:-2 opponent
auto=@each opponent upkeep restriction{type(*|opponenthand)~equalto~2}:life:-1 opponent
@@ -106670,6 +106699,7 @@ type=Instant
[/card]
[card]
name=Student of Elements
doublefaced=kamiflip
auto=this( cantargetcard(*[flying]) ) flip(Tobita, Master of Winds)
text=When Student of Elements has flying, flip it.
mana={1}{U}
@@ -113326,6 +113356,7 @@ toughness=4
[/card]
[card]
name=Tobita, Master of Winds
doublefaced=kamiflip
auto=lord(creature|myBattlefield) flying
text=Creatures you control have flying.
mana={1}{U}
@@ -113492,6 +113523,7 @@ toughness=5
[/card]
[card]
name=Tomoya the Revealer
doublefaced=kamiflip
auto={3}{U}{U}{T}:foreach(*|myhand) draw:1 target(player)
text={3}{U}{U}, {T}: Target player draws X cards, where X is the number of cards in your hand.
color=blue

View File

@@ -1370,8 +1370,8 @@ public:
{
WEventCardSacrifice * e = dynamic_cast<WEventCardSacrifice *> (event);
if (!e) return 0;
if (e->istoken)
return 1;
//if (e->istoken)
// return 1;
MTGCardInstance * check = e->cardAfter;
MTGGameZone * oldZone = e->cardAfter->currentZone;
check->currentZone = check->previousZone;

View File

@@ -69,6 +69,9 @@ public:
int toughness;
int suspendedTime;
int dredgeAmount;
string doubleFaced;
void setdoubleFaced(const string& value);
const string& getdoubleFaced() const;
vector<int>types;
CardPrimitive();

View File

@@ -125,6 +125,7 @@ class GameObserver{
void enchantmentStatus();
void Affinity();
bool AffinityNeedsUpdate;
bool legendNeedUpdate;
void addObserver(MTGAbility * observer);
void checkLegendary(MTGCardInstance * card);
map<MTGCardInstance *,bool> cards;

View File

@@ -256,7 +256,8 @@ class Constants
SHACKLER = 134,
FLYERSONLY = 135,//can attack only if it has flying
TEMPFLASHBACK = 136,
NB_BASIC_ABILITIES = 137,
NOLEGENDRULE =137,
NB_BASIC_ABILITIES = 138,
RARITY_S = 'S', //Special Rarity
RARITY_M = 'M', //Mythics

View File

@@ -416,6 +416,12 @@ bool MTGRevealingCards::CheckUserInput(JButton key)
{
if (this->source->controller() != game->isInterrupting)
game->mLayers->stackLayer()->cancelInterruptOffer(ActionStack::DONT_INTERRUPT, false);
//if (game->currentActionPlayer->isAI() && key != JGE_BTN_OK)
//{
// key = JGE_BTN_NEXT;
// game->Update(0);
//}
}
if (JGE_BTN_SEC == key || JGE_BTN_PREV == key || JGE_BTN_NEXT == key || JGE_BTN_MENU == key)//android back button
{
@@ -432,6 +438,7 @@ bool MTGRevealingCards::CheckUserInput(JButton key)
{
abilityFirst->removeFromGame();
game->mLayers->stackLayer()->Remove(abilityFirst);
abilityFirst = NULL;
}
game->Update(0);
//remove it from the game, update, and remove it from stack if needed.
@@ -723,6 +730,11 @@ bool MTGScryCards::CheckUserInput(JButton key)
//in the future we will need a way to find out if the human is pressing the keys and which player.
if (this->source->controller() != game->isInterrupting)
game->mLayers->stackLayer()->cancelInterruptOffer(ActionStack::DONT_INTERRUPT, false);
//if (game->currentActionPlayer->isAI() && key != JGE_BTN_OK)
//{
// key = JGE_BTN_NEXT;
// game->Update(0);
//}
}
if (JGE_BTN_SEC == key || JGE_BTN_PREV == key || JGE_BTN_NEXT == key || JGE_BTN_MENU == key)
{
@@ -2718,13 +2730,11 @@ int AASacrificeCard::resolve()
Player * p = _target->controller();
MTGCardInstance * beforeCard = _target;
WEvent * e;
if(!_target->isToken)
e = NEW WEventCardSacrifice(beforeCard,_target);
else
e = NEW WEventCardSacrifice(beforeCard,_target,true);
p->game->putInGraveyard(_target);
while(_target->next)
_target = _target->next;
bool cardIsToken = _target->isToken ? true : false;
e = NEW WEventCardSacrifice(beforeCard, _target, cardIsToken);
game->receiveEvent(e);
if(andAbility)
{

View File

@@ -57,6 +57,7 @@ CardPrimitive::CardPrimitive(CardPrimitive * source)
formattedText = source->formattedText;
setName(source->name);
setdoubleFaced(source->doubleFaced);
power = source->power;
toughness = source->toughness;
restrictions = source->restrictions ? source->restrictions->clone() : NULL;
@@ -319,6 +320,18 @@ void CardPrimitive::addMagicText(string value, string key)
magicTexts[key].append(value);
}
void CardPrimitive::setdoubleFaced(const string& value)
{
std::transform(doubleFaced.begin(), doubleFaced.end(), doubleFaced.begin(), ::tolower);
doubleFaced = value;
}
const string& CardPrimitive::getdoubleFaced() const
{
return doubleFaced;
}
void CardPrimitive::setName(const string& value)
{
name = value;

View File

@@ -1289,12 +1289,10 @@ int SacrificeCost::doPay()
MTGCardInstance * beforeCard = target;
source->storedCard = target->createSnapShot();
WEvent * e;
if(!target->isToken)
e = NEW WEventCardSacrifice(beforeCard,target);
else
e = NEW WEventCardSacrifice(beforeCard,target,true);
target->controller()->game->putInGraveyard(target);
GameObserver * game = target->owner->getObserver();
bool cardIsToken = target->isToken ? true : false;
e = NEW WEventCardSacrifice(beforeCard, target, cardIsToken);
game->receiveEvent(e);
target = NULL;
if (tc)

View File

@@ -54,6 +54,7 @@ void GameObserver::cleanup()
gameTurn.clear();
OpenedDisplay = NULL;
AffinityNeedsUpdate = false;
legendNeedUpdate = false;
}
GameObserver::~GameObserver()
@@ -898,11 +899,15 @@ void GameObserver::gameStateBasedEffects()
//------------------------------
p->nomaxhandsize = (z->hasAbility(Constants::NOMAXHAND));
//legendary
for (int cl = 0; cl < nbcards; cl++)
if (legendNeedUpdate)
{
MTGCardInstance * c = z->cards[cl];
if(!c->isPhased && c->hasType(Subtypes::TYPE_LEGENDARY) && !c->has(Constants::NOLEGEND))
checkLegendary(c);
for (int cl = 0; cl < nbcards; cl++)
{
MTGCardInstance * c = z->cards[cl];
if (!c->isPhased && c->hasType(Subtypes::TYPE_LEGENDARY) && !c->has(Constants::NOLEGEND))
checkLegendary(c);
}
legendNeedUpdate = false;
}
/////////////////////////////////////////////////
//handle end of turn effects while we're at it.//
@@ -1126,6 +1131,7 @@ void GameObserver::Affinity()
}
}
///we handle trisnisphere seperately because its a desaster.
if(card->getManaCost())//make sure we check, abiliy$!/token dont have a mancost object.
if (card->has(Constants::TRINISPHERE))
{
for (int jj = card->getManaCost()->getConvertedCost(); jj < 3; jj++)

View File

@@ -3334,26 +3334,7 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
/*vector<string>FlipStats = split(splitFlipStat[1],'%');*/
flipStats = splitFlipStat[1];
}
if(flipStats == "Tomoya the Revealer" ||
flipStats == "Tok-Tok, Volcano Born" ||
flipStats == "Tobita, Master of Winds" ||
flipStats == "Stabwhisker the Odious" ||
flipStats == "Shidako, Broodmistress" ||
flipStats == "Sasaya's Essence" ||
flipStats == "Rune-Tail's Essence" ||
flipStats == "Nighteyes the Desecrator" ||
flipStats == "Kuon's Essence" ||
flipStats == "Kenzo the Hardhearted" ||
flipStats == "Kaiso, Memory of Loyalty" ||
flipStats == "Ichiga, Who Topples Oaks" ||
flipStats == "Homura's Essence" ||
flipStats == "Scarmaker" ||
flipStats == "Goka the Unjust" ||
flipStats == "Erayo's Essence" ||
flipStats == "Jaraku the Interloper" ||
flipStats == "Azamuki, Treachery Incarnate" ||
flipStats == "Autumn-Tail, Kitsune Sage" ||
flipStats == "Dokai, Weaver of Life" )
if(card->getdoubleFaced() == "kamiflip")
{//old flip cards kamigawa
MTGAbility * a = NEW AAFlip(observer, id, card, target,flipStats,true);
return a;

View File

@@ -140,8 +140,16 @@ int MTGAllCards::processConfLine(string &s, MTGCard *card, CardPrimitive * primi
}
}
break;
case 'd'://dredge
if (!primitive) primitive = NEW CardPrimitive();
case 'd'://double faced card /dredge
if (key == "doublefaced")
{
if (!primitive) primitive = NEW CardPrimitive();
{
primitive->setdoubleFaced(val);
break;
}
}
else if (!primitive) primitive = NEW CardPrimitive();
{
string value = val;
std::transform(value.begin(), value.end(), value.begin(), ::tolower);

View File

@@ -167,7 +167,8 @@ const char* Constants::MTGBasicAbilities[] = {
"overload",
"shackler",
"flyersonly",
"tempflashback"
"tempflashback",
"legendruleremove"
};
map<string,int> Constants::MTGBasicAbilitiesMap;

View File

@@ -3187,7 +3187,7 @@ int MTGLegendRule::canBeInList(MTGCardInstance * card)
return 0;
if (card->hasType(Subtypes::TYPE_LEGENDARY) && card->controller()->game->inPlay->hasCard(card))
{
if(card->has(Constants::NOLEGEND)||card->controller()->opponent()->inPlay()->hasName("Mirror Gallery")||card->controller()->inPlay()->hasName("Mirror Gallery"))
if(card->has(Constants::NOLEGEND)||card->controller()->opponent()->inPlay()->hasAbility(Constants::NOLEGENDRULE)||card->controller()->inPlay()->hasAbility(Constants::NOLEGENDRULE))
return 0;
else
return 1;
@@ -3233,8 +3233,10 @@ int MTGLegendRule::added(MTGCardInstance * card)
return 1;
}
int MTGLegendRule::removed(MTGCardInstance *)
int MTGLegendRule::removed(MTGCardInstance * card)
{
if (card->has(Constants::NOLEGENDRULE))
game->legendNeedUpdate = true;
return 0;
}