Now it's possible to use toughness target filtering even for planeswalkers and battles, added some new primitives from MOM set.

This commit is contained in:
Vittorio Alfieri
2023-05-15 23:04:24 +02:00
parent 546c755185
commit 0a0c541f07
2 changed files with 48 additions and 5 deletions

View File

@@ -44180,7 +44180,7 @@ backside=Rooftop Saboteurs
restriction=compare(isflipped)~equalto~0
anyzone={0}:doubleside(backside)
auto=counter(0/0.4.Defense)
auto=ability$!name(Tap creature or artifact) name(Tap creature or artifact) target(*[creature;artifact]|opponentbattlefield) counter(0/0.1.Stun)!$ controller
auto=ability$!name(Tap creature or artifact) name(Tap creature or artifact) target(*[creature;artifact]|opponentbattlefield) transforms((,newability[tap],newability[counter(0/0.1.Stun)])) oneshot!$ controller
auto=moveto(opponentbattlefield)
auto=@counterremoved(0/0,1,Defense) from(this) restriction{compare(hascntdefense)~equalto~0}:name(Exile and transforms) name(Exile and transforms) moveto(ownerexile) and!( flip(backside) forcetype(Creature Moonfolk Ninja) )! asSorcery
text=(As a Siege enters, choose an opponent to protect it. You and others can attack it. When it's defeated, exile it, then cast it transformed.) -- When Invasion of Kamigawa enters the battlefield, tap target artifact or creature an opponent controls and put a stun counter on it. (If a permanent with a stun counter would become untapped, remove one from it instead.)
@@ -57050,6 +57050,19 @@ mana={1}{R}
type=Instant
[/card]
[card]
name=Nahiri's Warcrafting
target=creature,planeswalker,battle
aicode=activate transforms((,newability[target(*[zpos<=3]|mylibrary) moveto(myexile) and!( transforms((,newability[canplayfromexile],newability[all(*[zpos<=3]|mylibrary) moveto(myreveal) and!( bottomoflibrary )!])) ueot )!])) oneshot
auto=if cantargetcard(*[toughness=1]|*) then name(Look top 4 cards) name(Look top 4 cards) reveal:4 optionone name(Exile a card) target(<upto:1>*|reveal) moveto(myexile) and!( transforms((,newability[canplayfromexile])) ueot )! optiononeend optiontwo name(Put on bottom) target(<1>*|reveal) bottomoflibrary and!( all(*|reveal) bottomoflibrary )! optiontwoend revealend
auto=if cantargetcard(*[toughness=2]|*) then name(Look top 3 cards) name(Look top 3 cards) reveal:3 optionone name(Exile a card) target(<upto:1>*|reveal) moveto(myexile) and!( transforms((,newability[canplayfromexile])) ueot )! optiononeend optiontwo name(Put on bottom) target(<1>*|reveal) bottomoflibrary and!( all(*|reveal) bottomoflibrary )! optiontwoend revealend
auto=if cantargetcard(*[toughness=3]|*) then name(Look top 2 cards) name(Look top 2 cards) reveal:2 optionone name(Exile a card) target(<upto:1>*|reveal) moveto(myexile) and!( transforms((,newability[canplayfromexile])) ueot )! optiononeend optiontwo name(Put on bottom) target(<1>*|reveal) bottomoflibrary and!( all(*|reveal) bottomoflibrary )! optiontwoend revealend
auto=if cantargetcard(*[toughness=4]|*) then name(Look top card) name(Look top card) reveal:1 optionone name(Exile a card) target(<upto:1>*|reveal) moveto(myexile) and!( transforms((,newability[canplayfromexile])) ueot )! optiononeend optiontwo name(Put on bottom) target(<1>*|reveal) bottomoflibrary and!( all(*|reveal) bottomoflibrary )! optiontwoend revealend
auto=damage:5
text=Nahiri's Warcrafting deals 5 damage to target creature, planeswalker, or battle. Look at the top X cards of your library, where X is the excess damage dealt this way. You may exile one of those cards. Put the rest on the bottom of your library in a random order. You may play the exiled card this turn.
mana={1}{R}{R}
type=Sorcery
[/card]
[card]
name=Naiad of Hidden Coves
auto=aslongas opponentturnonly: (*|mycastingzone) changecost(colorless:-1)
text=As long as it's not your turn, spells you cast cost {1} less to cast.
@@ -74624,6 +74637,16 @@ power=1
toughness=1
[/card]
[card]
name=Searing Barb
target=player,creature,planeswalker
auto=damage:2
auto=if cantargetcard(*[creature]|*) then transforms((,newability[cantblock])) ueot
auto=name(Incubate 1) name(Incubate 1) activate castcard(noevent costx!:1:! named!:Incubator:!)
text=Searing Barb deals 2 damage to any target. If it's a creature, it can't block this turn. Incubate 1. (Create an Incubator token with a +1/+1 counter on it and "{2}: Transform this artifact." It transforms into a 0/0 Phyrexian artifact creature.)
mana={2}{R}
type=Sorcery
[/card]
[card]
name=Searing Barrage
target=creature
auto=damage:5

View File

@@ -181,8 +181,18 @@ MTGCardInstance * CardDescriptor::match_or(MTGCardInstance * card)
return NULL;
if (powerComparisonMode && !valueInRange(powerComparisonMode, card->getPower(), power))
return NULL;
if (toughnessComparisonMode && !valueInRange(toughnessComparisonMode, card->getToughness(), toughness))
return NULL;
if (toughnessComparisonMode){ // Toughness has different meaning for creatures, planeswalkers and battles
if(card->isCreature() && !valueInRange(toughnessComparisonMode, card->getToughness(), toughness))
return NULL;
else if(card->counters && (card->hasType(Subtypes::TYPE_PLANESWALKER) || card->hasType(Subtypes::TYPE_BATTLE))){
for(size_t i = 0; i < card->counters->counters.size(); ++i){
if((card->counters->counters[i]->name == "loyalty" && card->hasType(Subtypes::TYPE_PLANESWALKER)) || (card->counters->counters[i]->name == "defense" && card->hasType(Subtypes::TYPE_BATTLE))){
if(!valueInRange(toughnessComparisonMode, card->counters->counters[i]->nb, toughness))
return NULL;
}
}
}
}
if (manacostComparisonMode && !valueInRange(manacostComparisonMode, card->myconvertedcost, convertedManacost))
return NULL;
if (zposComparisonMode && !valueInRange(zposComparisonMode, card->zpos, zposition))
@@ -229,8 +239,18 @@ MTGCardInstance * CardDescriptor::match_and(MTGCardInstance * card)
match = NULL;
if (powerComparisonMode && !valueInRange(powerComparisonMode, card->getPower(), power))
match = NULL;
if (toughnessComparisonMode && !valueInRange(toughnessComparisonMode, card->getToughness(), toughness))
match = NULL;
if (toughnessComparisonMode){ // Toughness has different meaning for creatures, planeswalkers and battles
if(card->isCreature() && !valueInRange(toughnessComparisonMode, card->getToughness(), toughness))
return NULL;
else if(card->counters && (card->hasType(Subtypes::TYPE_PLANESWALKER) || card->hasType(Subtypes::TYPE_BATTLE))){
for(size_t i = 0; i < card->counters->counters.size(); ++i){
if((card->counters->counters[i]->name == "loyalty" && card->hasType(Subtypes::TYPE_PLANESWALKER)) || (card->counters->counters[i]->name == "defense" && card->hasType(Subtypes::TYPE_BATTLE))){
if(!valueInRange(toughnessComparisonMode, card->counters->counters[i]->nb, toughness))
return NULL;
}
}
}
}
if (manacostComparisonMode && !valueInRange(manacostComparisonMode, card->myconvertedcost, convertedManacost))
match = NULL;
if (zposComparisonMode && !valueInRange(zposComparisonMode, card->zpos, zposition))