diff --git a/projects/mtg/bin/Res/sets/primitives/mtg.txt b/projects/mtg/bin/Res/sets/primitives/mtg.txt index 780d829f4..299fd1a21 100644 --- a/projects/mtg/bin/Res/sets/primitives/mtg.txt +++ b/projects/mtg/bin/Res/sets/primitives/mtg.txt @@ -67300,6 +67300,16 @@ power=1 toughness=1 [/card] [card] +name=Tidal Warrior +auto={T}:ueot loseabilities && losesubtypesof(land) && transforms((island)) target(land) +text={T}: Target land becomes an Island until end of turn. +mana={U} +type=Creature +subtype=Merfolk Warrior +power=1 +toughness=1 +[/card] +[card] name=Tidal Wave auto=token(Wall,Creature Wall,5/5,defender,treason,blue) text=Put a 5/5 blue Wall creature token with defender onto the battlefield. Sacrifice it at the beginning of the next end step. diff --git a/projects/mtg/bin/Res/test/_tests.txt b/projects/mtg/bin/Res/test/_tests.txt index 8c15bef1f..8dc7ce29d 100644 --- a/projects/mtg/bin/Res/test/_tests.txt +++ b/projects/mtg/bin/Res/test/_tests.txt @@ -539,6 +539,7 @@ thellon_of_havenwood.txt threaten.txt throne_of_bone.txt thunder-thrash_elder.txt +tidal_warrior_i646.txt titanic_ultimatum.txt tolsimir_wolfblood.txt torture.txt diff --git a/projects/mtg/bin/Res/test/tidal_warrior_i646.txt b/projects/mtg/bin/Res/test/tidal_warrior_i646.txt new file mode 100644 index 000000000..517f16a56 --- /dev/null +++ b/projects/mtg/bin/Res/test/tidal_warrior_i646.txt @@ -0,0 +1,18 @@ +#Testing Tidal Warrior's "target becomes island" ability +#see http://code.google.com/p/wagic/issues/detail?id=646 +[INIT] +FIRSTMAIN +[PLAYER1] +inplay:Forest, Tidal Warrior +[PLAYER2] +[DO] +Tidal Warrior +Forest +Forest +[ASSERT] +FIRSTMAIN +[PLAYER1] +inplay:Forest, Tidal Warrior +manapool:{U} +[PLAYER2] +[END] \ No newline at end of file diff --git a/projects/mtg/include/AllAbilities.h b/projects/mtg/include/AllAbilities.h index d7fe8262b..ec0561795 100644 --- a/projects/mtg/include/AllAbilities.h +++ b/projects/mtg/include/AllAbilities.h @@ -922,6 +922,7 @@ public: MultiAbility(int _id, MTGCardInstance * card, Targetable * _target, ManaCost * _cost); int Add(MTGAbility * ability); int resolve(); + int addToGame(); const char * getMenuText(); MultiAbility * clone() const; ~MultiAbility(); @@ -1747,6 +1748,7 @@ public: int addToGame() { ability->forceDestroy = -1; + ability->target = target; //Might have changed since initialization ability->addToGame(); return InstantAbility::addToGame(); } diff --git a/projects/mtg/src/AllAbilities.cpp b/projects/mtg/src/AllAbilities.cpp index c3bd10b37..108196cb2 100644 --- a/projects/mtg/src/AllAbilities.cpp +++ b/projects/mtg/src/AllAbilities.cpp @@ -2079,7 +2079,6 @@ int MultiAbility::resolve() continue; Targetable * backup = abilities[i]->target; - if (target && target != source && abilities[i]->target == abilities[i]->source) { abilities[i]->target = target; @@ -2087,16 +2086,27 @@ int MultiAbility::resolve() } abilities[i]->resolve(); abilities[i]->target = backup; - if(dynamic_cast (abilities[i])) - { - if(Phaseactiontarget != NULL) - dynamic_cast (abilities[i])->target = Phaseactiontarget; - } - + if(Phaseactiontarget && dynamic_cast (abilities[i])) + abilities[i]->target = Phaseactiontarget; } return 1; } +int MultiAbility::addToGame() +{ + for (unsigned int i = 0; i < abilities.size(); i++) + { + if (abilities[i] == NULL) + continue; + + MTGAbility * a = abilities[i]->clone(); + a->target = target; + a->addToGame(); + } + MTGAbility::addToGame(); + return 1; +} + const char * MultiAbility::getMenuText() { if (abilities.size())