This is a working workaround for the Reveal and Scry (and probably Fateseal) mechanics, minus the actual revealing part since it would involve messing with the GUI. There is a lot of code-fu involved to minimise unnecessary triggers, mainly hand->graveyard. The exile->somewhere and library->exile/hand triggers are liberally used since there are no cards in recent memory that checks those triggers anyway. When targeted cards are "moveto"-ed zones, they should not allow for interrupts but the engine does not set this by default so you CAN interrupt the move to the top/bottom of library and mess them up.
Anyway, the mechanics involved in the example card code given are pretty involved so it is best for me to entertain queries rather than try to explain everything here.
Code: Select all
[card]
name=Temple of Abandon
auto=tap
auto={T}:add{R}
auto={T}:add{G}
auto=all(*[pos=1]|mylibrary) moveto(exile) and!( transforms((,newability[choice name(top of library) moveto(mylibrary)],newability[choice bottomoflibrary])) oneshot )!
text=Temple of Abandon enters the battlefield tapped. -- When Temple of Abandon 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 {R} or {G} to your mana pool.
type=Land
[/card]
[card]
name=Magma Jet
target=creature,player
auto=damage:2
auto=all(*[pos=2]|mylibrary) moveto(myhand)
auto=name(scry 2) target(<2>*[pos=2]|myhand) moveto(exile) and!( transforms((,newability[choice name(top of library) moveto(mylibrary)],newability[choice bottomoflibrary])) oneshot )!
text=Magma Jet deals 2 damage to target creature or player. -- Scry 2. (To scry 2, look at the top two cards of your library, then put any number of them on the bottom of your library and the rest on top in any order.)
mana={1}{R}
type=Instant
[/card]
[card]
name=Grisly Salvage
auto=if type(*[creature;land;pos=5]|mylibrary)~morethan~0 then target(*[creature;land;pos=5]|mylibrary) transforms((,newability[choice name(put into hand) moveto(myhand) && deplete:4 controller],newability[choice name(cancel) deplete:5 controller)) oneshot else deplete:5 controller
text=Reveal the top five cards of your library. You may put a creature or land card from among them into your hand. Put the rest into your graveyard.
mana={B}{G}
type=Instant
[/card]
[card]
name=Borborygmos Enraged
abilities=trample
auto=aslongas(land|myhand) {discard(land|myhand)}:damage:3 target(creature,player)
auto=@combatdamaged(player) from(this):all(*[pos=3]|mylibrary) transforms((,newability[if cantargetcard(land|*) then moveto(myhand) else moveto(mygraveyard)]))
text=Trample -- Whenever Borborygmos Enraged deals combat damage to a player, reveal the top three cards of your library. Put all land cards revealed this way into your hand and the rest into your graveyard. -- Discard a land card: Borborygmos Enraged deals 3 damage to target creature or player.
mana={4}{R}{R}{G}{G}
type=Legendary Creature
subtype=Cyclops
power=7
toughness=6
[/card]
[card]
name=Domri Rade
auto=counter(0/0,3,loyalty)
auto={C(0/0,1,Loyalty)}:name(reveal) all(creature[pos=1]|mylibrary) moveto(myhand)
auto={C(0/0,-2,Loyalty)}:name(fight) target(creature|mybattlefield) transforms((,newability[target(other creature) dynamicability<!powerstrike eachother!>])) ueot
auto={C(0/0,-7,Loyalty)}:name(emblem) emblem transforms((,newability[lord(creature|mybattlefield) double strike],newability[lord(creature|mybattlefield) trample],newability[lord(creature|mybattlefield) opponentshroud],newability[lord(creature|mybattlefield) haste])) forever dontremove
text=+1: Look at the top card of your library. If it's a creature card, you may reveal it and put it into your hand. -- -2: Target creature you control fights another target creature. -- -7: You get an emblem with "Creatures you control have double strike, trample, hexproof, and haste."
mana={1}{R}{G}
type=Planeswalker
subtype=Domri
[/card]
[card]
name=Garruk, Caller of Beasts
auto=counter(0/0,4,loyalty)
auto={C(0/0,1,Loyalty)}:name(reveal) all(*[pos=5]|mylibrary) moveto(exile) and!( transforms((,newability[if cantargetcard(creature|exile) then moveto(myhand) else bottomoflibrary])) )!
auto={C(0/0,-3,Loyalty)}:moveto(mybattlefield) target(creature[green]|myhand)
auto={C(0/0,-7,Loyalty)}:name(emblem) emblem transforms((,newability[@movedto(creature|mystack):may moveto(mybattlefield) target(creature|mylibrary)])) forever dontremove
text=+1: Reveal the top five cards of your library. Put all creature cards revealed this way into your hand and the rest on the bottom of your library in any order. -- -3: You may put a green creature card from your hand onto the battlefield. -- -7: You get an emblem with "Whenever you cast a creature spell, you may search your library for a creature card, put it onto the battlefield, then shuffle your library."
mana={4}{G}{G}
type=Planeswalker
subtype=Garruk
[/card]
Code: Select all
CardDescriptor.h
line 50: int zonePosition;
CardDescriptor.cpp
line 15: zonePosition = 0;
line 191:
//Position in zone for reveal
if ( zonePosition ) {
vector< MTGCardInstance* > zoneCards = card->currentZone->cards;
int nZoneCards = static_cast< int >( zoneCards.size() );
bool posFound = false;
for ( int i = 1; i <= zonePosition; i++ ) {
if ( zoneCards[ nZoneCards - i ] == card ) {
posFound = true;
break;
}
}
if ( !posFound ) {
return NULL;
}
}
TargetChooser.cpp
line 361:
if ( attribute.find( "pos" ) != string::npos ) {
cd->zonePosition = comparisonCriterion;
continue; //prevent "pos" from being added as a type
}