Merge pull request #631 from kevlahnota/master

Auraward,  unattach event and statebased action for protection from quality
This commit is contained in:
Anthony Calosa
2015-09-22 20:29:28 +08:00
10 changed files with 104 additions and 3 deletions

View File

@@ -9246,6 +9246,7 @@ type=Artifact
[/card]
[card]
name=Black Ward
abilities=auraward
target=creature
auto=protection from black
text=Enchant creature -- Enchanted creature has protection from black. This effect doesn't remove Black Ward.
@@ -10887,6 +10888,7 @@ type=Instant
[/card]
[card]
name=Blue Ward
abilities=auraward
target=creature
auto=protection from blue
text=Enchant creature -- Enchanted creature has protection from blue. This effect doesn't remove Blue Ward.
@@ -16532,6 +16534,7 @@ toughness=2
[/card]
[card]
name=Cho-Manno's Blessing
abilities=auraward
target=creature
abilities=flash
auto=chooseacolor teach(creature) protection from(*[chosencolor]) chooseend
@@ -26107,7 +26110,7 @@ type=Sorcery
[/card]
[card]
name=Dragon Grip
other={2}{R} Name(cast anytime)
other={2}{R} name(cast anytime)
otherrestriction=type(creature[power>=4]|mybattlefield)~morethan~0
abilities=spellmastery
target=creature
@@ -35073,6 +35076,7 @@ toughness=2
[/card]
[card]
name=Flickering Ward
abilities=auraward
target=creature
auto=chooseacolor teach(creature) protection from(*[chosencolor]) chooseend
auto={W}:moveTo(ownerhand)
@@ -35150,6 +35154,7 @@ toughness=2
[/card]
[card]
name=Floating Shield
abilities=auraward
target=creature
auto=chooseacolor teach(creature) protection from(*[chosencolor]) chooseend
auto={S}:protection from white target(creature)
@@ -42027,6 +42032,7 @@ subtype=Aura
[/card]
[card]
name=Green Ward
abilities=auraward
target=creature
auto=protection from green
text=Enchant creature -- Enchanted creature has protection from green. This effect doesn't remove Green Ward.
@@ -71570,6 +71576,7 @@ toughness=3
[/card]
[card]
name=Pentarch Ward
abilities=auraward
target=creature
auto=chooseacolor teach(creature) protection from(*[chosencolor]) chooseend
auto=draw:1
@@ -73677,6 +73684,7 @@ type=Sorcery
[/card]
[card]
name=Pledge of Loyalty
abilities=auraward
target=creature
auto=aslongas(*[red]|mybattlefield) protection from red
auto=aslongas(*[green]|mybattlefield) protection from green
@@ -78553,6 +78561,7 @@ type=Sorcery
[/card]
[card]
name=Red Ward
abilities=auraward
target=creature
auto=protection from red
text=Enchant creature -- Enchanted creature has protection from red. This effect doesn't remove Red Ward.
@@ -99792,6 +99801,7 @@ toughness=1
[/card]
[card]
name=Tattoo Ward
abilities=auraward
target=creature
auto=1/1
auto=protection from(enchantment)
@@ -112787,6 +112797,7 @@ type=Instant
[/card]
[card]
name=White Ward
abilities=auraward
target=creature
auto=protection from white
text=Enchant creature -- Enchanted creature has protection from white. This effect doesn't remove White Ward.

View File

@@ -526,6 +526,7 @@ pillory_of_the_sleepless2_i188.txt
pillory_of_the_sleepless3_i188.txt
pillory_of_the_sleepless4_i188.txt
plague_rats.txt
pledge_protection.txt
plumes_of_peace_i260.txt
pouncing_jaguar_i425.txt
power_armor.txt

View File

@@ -0,0 +1,46 @@
#Testing Protection
#702.16c A permanent or player with protection cant be enchanted by Auras that have the stated
#quality. Such Auras attached to the permanent or player with protection will be put into their
#owners graveyards as a state-based action.
#
#702.16d A permanent with protection cant be equipped by Equipment that have the stated quality
#or fortified by Fortifications that have the stated quality. Such Equipment or Fortifications
#become unattached from that permanent as a state-based action, but remain on the battlefield.
[INIT]
FIRSTMAIN
[PLAYER1]
hand:Pledge of Loyalty, Shuko, Holy Strength, Shifting Sky
inplay:Crimson Acolyte
manapool:{W}{W}{W}{W}{U}{U}{U}
[PLAYER2]
[DO]
Holy Strength
Crimson Acolyte
#crimson acolyte becomes 2/3
Shuko
Shuko
Crimson Acolyte
#crimson acolyte becomes 3/3
Pledge of Loyalty
Crimson Acolyte
#crimson acolyte becomes 2/1 since you have white permanents, pledge of loyalty grants protection from white
#holy strength is put into the graveyard as state based action :)
Shifting Sky
choice 0
choice 2
#after casting shifting sky, choose the color red, and all nonland permanents becomes red
#since shuko becomes red and crimson has protection from red, it will be unattached
#as state based action, pledge of loyalty stays on the creature :)
next
next
Crimson Acolyte
next
eot
[ASSERT]
UNTAP
[PLAYER1]
inplay:Crimson Acolyte, Pledge of Loyalty, Shuko, Shifting Sky
graveyard:Holy Strength
[PLAYER2]
life:19
[END]

View File

@@ -229,7 +229,8 @@ class Constants
SPELLMASTERY = 111,
NOLIFEGAIN = 112,
NOLIFEGAINOPPONENT = 113,
NB_BASIC_ABILITIES = 114,
AURAWARD = 114,
NB_BASIC_ABILITIES = 115,
RARITY_S = 'S', //Special Rarity

View File

@@ -273,6 +273,12 @@ struct WEventEmptyManaPool : public WEvent {
WEventEmptyManaPool(ManaPool * source);
};
//event when card-equipment unattached
struct WEventCardUnattached : public WEventCardUpdate {
WEventCardUnattached(MTGCardInstance * card);
virtual Targetable * getTarget(int target);
};
std::ostream& operator<<(std::ostream&, const WEvent&);
#endif

View File

@@ -5428,6 +5428,8 @@ int AEquip::unequip()
game->removeObserver(currentAbilities[i]);
}
currentAbilities.clear();
WEvent * e = NEW WEventCardUnattached(source);
game->receiveEvent(e);
return 1;
}

View File

@@ -617,6 +617,24 @@ void GameObserver::gameStateBasedEffects()
card->myPair->myPair = NULL;
card->myPair = NULL;
}
////////////////////////////////////////////////////
//Unattach Equipments that dont have valid targets//
////////////////////////////////////////////////////
if ((card->target) && card->hasType(Subtypes::TYPE_EQUIPMENT))
{
if(card->target && isInPlay(card->target) && (card->target)->protectedAgainst(card))//protection from quality
{
for (size_t i = 1; i < mLayers->actionLayer()->mObjects.size(); i++)
{
MTGAbility * a = ((MTGAbility *) mLayers->actionLayer()->mObjects[i]);
AEquip * eq = dynamic_cast<AEquip*> (a);
if (eq && eq->source == card)
{
((AEquip*)a)->unequip();
}
}
}
}
///////////////////////////////////////////////////////
//Remove auras that don't have a valid target anymore//
///////////////////////////////////////////////////////
@@ -624,6 +642,8 @@ void GameObserver::gameStateBasedEffects()
{
if(card->target && !isInPlay(card->target))
players[i]->game->putInGraveyard(card);
if(card->target && isInPlay(card->target) && (card->target)->protectedAgainst(card) && !card->has(Constants::AURAWARD))//protection from quality except aura cards like flickering ward
players[i]->game->putInGraveyard(card);
}
card->enchanted = false;
if (card->target && isInPlay(card->target) && !card->hasType(Subtypes::TYPE_EQUIPMENT) && card->hasSubtype(Subtypes::TYPE_AURA))

View File

@@ -406,6 +406,8 @@ int GuiPlay::receiveEventPlus(WEvent * e)
}
else if (dynamic_cast<WEventCardChangeType*> (e))
Replace();
else if (dynamic_cast<WEventCardUnattached*> (e))
Replace();
Replace();
return 0;
}

View File

@@ -142,7 +142,8 @@ const char* Constants::MTGBasicAbilities[] = {
"evadebigger",
"spellmastery",
"nolifegain",
"nolifegainopponent"
"nolifegainopponent",
"auraward"
};
map<string,int> Constants::MTGBasicAbilitiesMap;

View File

@@ -157,6 +157,11 @@ WEventEmptyManaPool::WEventEmptyManaPool(ManaPool * source) :
{
}
WEventCardUnattached::WEventCardUnattached(MTGCardInstance * card) :
WEventCardUpdate(card)
{
}
WEventCombatStepChange::WEventCombatStepChange(CombatStep step) :
WEvent(), step(step)
{
@@ -305,6 +310,12 @@ Targetable * WEventcardDraw::getTarget(Player * player)
return NULL;
}
Targetable * WEventCardUnattached::getTarget(int target)
{
if (target) return card;
return NULL;
}
std::ostream& WEvent::toString(std::ostream& out) const
{
return out << "EVENT";