Fixed primitives, improved Aftermath casting rule: now the casted card becomes instant or sorcery in the stack according to the casted half, fixed a bug with the previous zone of cards casted using the "putinplay" option of "castcard" keyword.
This commit is contained in:
@@ -2,8 +2,11 @@
|
|||||||
|
|
||||||
## [master] (https://github.com/WagicProject/wagic/tree/master)
|
## [master] (https://github.com/WagicProject/wagic/tree/master)
|
||||||
|
|
||||||
|
### 14/10/21
|
||||||
|
- *Committed:* Fixed primitives, improved Aftermath casting rule: now the casted card becomes instant or sorcery in the stack according to the casted half, fixed a bug with the previous zone of cards casted using the "putinplay" option of "castcard" keyword. ([Vitty85](https://github.com/Vitty85))
|
||||||
|
|
||||||
### 13/10/21
|
### 13/10/21
|
||||||
- *Committed:* Fixed primitives, added new ability "hasaftermath" to implement Aftermath cost with Flashback and refactored all cards with Aftermath cost (now they use a special version of Flashback but they don't count as flashback spell), added a new ability "spellmover" to implement all cards that have to target a spell on stack to move to some other zone (they are not real counters so they don't care about "nofizzle" or "nofizzlealternative" abilites of their target), fixed all primitives with "spellmover" ability, added a new keyword "storedname" to target card with a specifc previously stored name, improved "fizzleto" ability in order to allow to move the fizzled card on second place from the top or to exile and imprint the target name. ([Vitty85](https://github.com/Vitty85))
|
- *Committed:* Fixed primitives, added new ability "hasaftermath" to implement Aftermath cost with Flashback and refactored all cards with Aftermath cost (now they use a special version of Flashback but they don't count as flashback spell), added a new ability "spellmover" to implement all cards that have to target a spell on stack to move to some other zone (they are not real counters so they don't care about "nofizzle" or "nofizzlealternative" abilites of their target), fixed all primitives with "spellmover" ability, added a new keyword "storedname" to target card with a specifc previously stored name, improved "fizzleto" ability in order to allow to move the fizzled card on second place from the top or to exile and imprint the target name. https://github.com/WagicProject/wagic/commit/9c2eee7d7e74f0f494339b10f4f1c3279076bd50 ([Vitty85](https://github.com/Vitty85))
|
||||||
|
|
||||||
- *Committed:* Fixed primitives, fixed "proliferate" target chooser, improved "cycled" and "discarded" triggers, added new keywords "pcycledcount" and "ocycledcount" to calculate how may cards have been cycled this turn from a specific player, added new menu choices to instantly select/deselect and confirm all the possible targets (in any zone) during the target selection of an ability (e.g. Proliferation ability can target a lot of permanents and players so using that menu choice all the targets will be instantly chosen and then the current player will be able to remove any of them or confirm the entire selection). https://github.com/WagicProject/wagic/commit/fbcb1feb88072988dfe81b33d4e88e1e0f54563c ([Vitty85](https://github.com/Vitty85))
|
- *Committed:* Fixed primitives, fixed "proliferate" target chooser, improved "cycled" and "discarded" triggers, added new keywords "pcycledcount" and "ocycledcount" to calculate how may cards have been cycled this turn from a specific player, added new menu choices to instantly select/deselect and confirm all the possible targets (in any zone) during the target selection of an ability (e.g. Proliferation ability can target a lot of permanents and players so using that menu choice all the targets will be instantly chosen and then the current player will be able to remove any of them or confirm the entire selection). https://github.com/WagicProject/wagic/commit/fbcb1feb88072988dfe81b33d4e88e1e0f54563c ([Vitty85](https://github.com/Vitty85))
|
||||||
|
|
||||||
|
|||||||
@@ -12728,6 +12728,7 @@ type=Instant
|
|||||||
name=Commit // Memory
|
name=Commit // Memory
|
||||||
abilities=hasaftermath
|
abilities=hasaftermath
|
||||||
restriction=compare(type:*[-land]:battlefieldplustype:*:stackplusend)~morethan~0
|
restriction=compare(type:*[-land]:battlefieldplustype:*:stackplusend)~morethan~0
|
||||||
|
otherrestriction=can play sorcery
|
||||||
flashback={4}{U}{U} name(Memory)
|
flashback={4}{U}{U} name(Memory)
|
||||||
auto=ifnot paid(flashback) then if type(*[-land]|battlefield)~morethan~0 then choice name(Target non-land permanent) name(Target non-land permanent) name(Target non-land permanent) target(*[-land]|battlefield) placefromthetop(2)
|
auto=ifnot paid(flashback) then if type(*[-land]|battlefield)~morethan~0 then choice name(Target non-land permanent) name(Target non-land permanent) name(Target non-land permanent) target(*[-land]|battlefield) placefromthetop(2)
|
||||||
auto=ifnot paid(flashback) then if type(*|opponentstack)~morethan~0 then choice name(Target opponent spell) name(Target opponent spell) name(Target opponent spell) target(*|opponentstack) spellmover(librarysecond)
|
auto=ifnot paid(flashback) then if type(*|opponentstack)~morethan~0 then choice name(Target opponent spell) name(Target opponent spell) name(Target opponent spell) target(*|opponentstack) spellmover(librarysecond)
|
||||||
@@ -29746,7 +29747,6 @@ toughness=8
|
|||||||
name=Grind // Dust
|
name=Grind // Dust
|
||||||
abilities=hasaftermath
|
abilities=hasaftermath
|
||||||
flashback={3}{W} name(Dust)
|
flashback={3}{W} name(Dust)
|
||||||
otherrestriction=can play sorcery
|
|
||||||
auto=ifnot paid(flashback) then name(Put -1/-1 counter) target(<upto:2>creature) counter(-1/-1)
|
auto=ifnot paid(flashback) then name(Put -1/-1 counter) target(<upto:2>creature) counter(-1/-1)
|
||||||
auto=if paid(flashback) then target(<anyamount>creature[counter{-1/-1}]) moveto(exile)
|
auto=if paid(flashback) then target(<anyamount>creature[counter{-1/-1}]) moveto(exile)
|
||||||
text=Put a -1/-1 counter on each of up to two target creatures. -- Aftermath (Cast this spell only from your graveyard. Then exile it.) Exile any number of target creatures that have -1/-1 counters on them.
|
text=Put a -1/-1 counter on each of up to two target creatures. -- Aftermath (Cast this spell only from your graveyard. Then exile it.) Exile any number of target creatures that have -1/-1 counters on them.
|
||||||
@@ -54205,7 +54205,7 @@ flashback={2}{R} name(Rubble)
|
|||||||
restriction=type(*|stack)~morethan~0
|
restriction=type(*|stack)~morethan~0
|
||||||
otherrestriction=can play sorcery
|
otherrestriction=can play sorcery
|
||||||
auto=ifnot paid(flashback) then target(*|stack) transforms((,newability[pay[[{3}]] name(pay 3 mana) donothing?fizzle])) forever
|
auto=ifnot paid(flashback) then target(*|stack) transforms((,newability[pay[[{3}]] name(pay 3 mana) donothing?fizzle])) forever
|
||||||
auto=if paid(flashback) then target(<upto:3>land) freeze
|
auto=if paid(flashback) then target(<upto:3>land|battlefield) freeze
|
||||||
text=Counter target spell unless its controller pays {3}. -- Aftermath (Cast this spell only from your graveyard. Then exile it.) Up to three target lands don't untap during their controller's next untap step.
|
text=Counter target spell unless its controller pays {3}. -- Aftermath (Cast this spell only from your graveyard. Then exile it.) Up to three target lands don't untap during their controller's next untap step.
|
||||||
mana={2}{U}
|
mana={2}{U}
|
||||||
type=Instant
|
type=Instant
|
||||||
@@ -54248,11 +54248,11 @@ toughness=3
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Refuse // Cooperate
|
name=Refuse // Cooperate
|
||||||
abilities=hasaftermath
|
abilities=hasaftermath,asflash
|
||||||
flashback={2}{U} name(Cooperate)
|
flashback={2}{U} name(Cooperate)
|
||||||
restriction=type(*|stack)~morethan~0
|
restriction=type(*|stack)~morethan~0
|
||||||
otherrestriction=type(*[instant;sorcery]|stack)~morethan~0
|
otherrestriction=type(*[instant;sorcery]|stack)~morethan~0
|
||||||
auto=ifnot paid(flashback) then target(*|stack) transforms((.newability[damage:manacost])) oneshot
|
auto=ifnot paid(flashback) then target(*|stack) transforms((,newability[damage:manacost controller])) oneshot
|
||||||
auto=if paid(flashback) then target(*[instant;sorcery]|stack) castcard(copied noevent)
|
auto=if paid(flashback) then target(*[instant;sorcery]|stack) castcard(copied noevent)
|
||||||
text=Refuse deals damage to target spell's controller equal to that spell's converted mana cost. -- Aftermath (Cast this spell only from your graveyard. Then exile it.) Copy target instant or sorcery spell. You may choose new targets for the copy.
|
text=Refuse deals damage to target spell's controller equal to that spell's converted mana cost. -- Aftermath (Cast this spell only from your graveyard. Then exile it.) Copy target instant or sorcery spell. You may choose new targets for the copy.
|
||||||
mana={3}{R}
|
mana={3}{R}
|
||||||
@@ -56119,7 +56119,7 @@ abilities=hasaftermath
|
|||||||
flashback={1}{R}{R} name(Ruin)
|
flashback={1}{R}{R} name(Ruin)
|
||||||
otherrestriction=can play sorcery,type(creature|battlefield)~morethan~0
|
otherrestriction=can play sorcery,type(creature|battlefield)~morethan~0
|
||||||
auto=ifnot paid(flashback) then name(Search basic land) target(land[basic]|myLibrary) moveTo(myBattlefield) and!( transforms((,newability[tap(noevent)],newability[shuffle])) oneshot )!
|
auto=ifnot paid(flashback) then name(Search basic land) target(land[basic]|myLibrary) moveTo(myBattlefield) and!( transforms((,newability[tap(noevent)],newability[shuffle])) oneshot )!
|
||||||
auto=if paid(flashback) then target(creature|battlefield) damage:type:land:mybattlefield
|
auto=if paid(flashback) then name(Damage creature) target(creature|battlefield) damage:type:land:mybattlefield
|
||||||
text=Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. -- Aftermath (Cast this spell only from your graveyard. Then exile it.) Ruin deals damage to target creature equal to the number of lands you control.
|
text=Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. -- Aftermath (Cast this spell only from your graveyard. Then exile it.) Ruin deals damage to target creature equal to the number of lands you control.
|
||||||
mana={2}{G}
|
mana={2}{G}
|
||||||
type=Instant
|
type=Instant
|
||||||
@@ -65294,9 +65294,10 @@ type=Sorcery
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Spring // Mind
|
name=Spring // Mind
|
||||||
abilities=hasaftermath
|
abilities=hasaftermath,asflash
|
||||||
flashback={4}{U}{U} name(Mind)
|
flashback={4}{U}{U} name(Mind)
|
||||||
auto=ifnot paid(flashback) then target(land[basic]|myLibrary) moveTo(myBattlefield) and!( transforms((,newability[tap(noevent)],newability[shuffle])) oneshot )!
|
restriction=can play sorcery
|
||||||
|
auto=ifnot paid(flashback) then name(Search basic land) target(land[basic]|myLibrary) moveTo(myBattlefield) and!( transforms((,newability[tap(noevent)],newability[shuffle])) oneshot )!
|
||||||
auto=if paid(flashback) then draw:2 controller
|
auto=if paid(flashback) then draw:2 controller
|
||||||
text=Search your library for a basic land card, put it onto the battlefield tapped, then shuffle your library. -- Aftermath (Cast this spell only from your graveyard. Then exile it.) Draw two cards.
|
text=Search your library for a basic land card, put it onto the battlefield tapped, then shuffle your library. -- Aftermath (Cast this spell only from your graveyard. Then exile it.) Draw two cards.
|
||||||
mana={2}{G}
|
mana={2}{G}
|
||||||
@@ -65812,9 +65813,9 @@ type=Sorcery
|
|||||||
name=Start // Finish
|
name=Start // Finish
|
||||||
abilities=hasaftermath
|
abilities=hasaftermath
|
||||||
flashback={2}{B}{S(creature|mybattlefield)} name(Finish)
|
flashback={2}{B}{S(creature|mybattlefield)} name(Finish)
|
||||||
otherrestriction=can play sorcery,type(creature|myBattlefield)~morethan~0
|
otherrestriction=can play sorcery,type(creature|myBattlefield)~morethan~0,type(creature|battlefield)~morethan~1
|
||||||
auto=ifnot paid(flashback) then token(Warrior,creature Warrior,1/1,white,vigilance)*2
|
auto=ifnot paid(flashback) then token(Warrior,Creature Warrior,1/1,white,vigilance)*2
|
||||||
auto=if paid(flashback) then destroy target(creature)
|
auto=if paid(flashback) then destroy target(creature|battlefield)
|
||||||
text=Create two 1/1 white Warrior creature tokens with vigilance. -- Aftermath (Cast this spell only from your graveyard. Then exile it.) As an additional cost to cast Finish, sacrifice a creature. -- Destroy target creature.
|
text=Create two 1/1 white Warrior creature tokens with vigilance. -- Aftermath (Cast this spell only from your graveyard. Then exile it.) As an additional cost to cast Finish, sacrifice a creature. -- Destroy target creature.
|
||||||
mana={2}{W}
|
mana={2}{W}
|
||||||
type=Instant
|
type=Instant
|
||||||
@@ -66877,7 +66878,7 @@ abilities=hasaftermath
|
|||||||
flashback={1}{G} name(Survive)
|
flashback={1}{G} name(Survive)
|
||||||
restriction=type(creature|battlefield)~morethan~0
|
restriction=type(creature|battlefield)~morethan~0
|
||||||
otherrestriction=can play sorcery
|
otherrestriction=can play sorcery
|
||||||
auto=ifnot paid(flashback) then target(creature|battlefield) damage:type:land:myBattlefield
|
auto=ifnot paid(flashback) then target(creature|battlefield) damage:type:land:mybattlefield
|
||||||
auto=if paid(flashback) then all(*|mygraveyard) moveto(mylibrary) && shuffle
|
auto=if paid(flashback) then all(*|mygraveyard) moveto(mylibrary) && shuffle
|
||||||
auto=if paid(flashback) then all(*|opponentgraveyard) moveto(opponentlibrary) && shuffle opponent
|
auto=if paid(flashback) then all(*|opponentgraveyard) moveto(opponentlibrary) && shuffle opponent
|
||||||
text=Struggle deals damage to target creature equal to the number of lands you control. -- Aftermath (Cast this spell only from your graveyard. Then exile it.) Each player shuffles his or her graveyard into his or her library.
|
text=Struggle deals damage to target creature equal to the number of lands you control. -- Aftermath (Cast this spell only from your graveyard. Then exile it.) Each player shuffles his or her graveyard into his or her library.
|
||||||
|
|||||||
@@ -9872,9 +9872,9 @@ int AACastCard::resolveSpell()
|
|||||||
if ((normal || asNormalMadness)||(!_target->hasType(Subtypes::TYPE_INSTANT) && !_target->hasType(Subtypes::TYPE_SORCERY)))
|
if ((normal || asNormalMadness)||(!_target->hasType(Subtypes::TYPE_INSTANT) && !_target->hasType(Subtypes::TYPE_SORCERY)))
|
||||||
{
|
{
|
||||||
if (putinplay && (_target->hasType(Subtypes::TYPE_ARTIFACT)||_target->hasType(Subtypes::TYPE_CREATURE)||_target->hasType(Subtypes::TYPE_ENCHANTMENT)||_target->hasType(Subtypes::TYPE_PLANESWALKER)))
|
if (putinplay && (_target->hasType(Subtypes::TYPE_ARTIFACT)||_target->hasType(Subtypes::TYPE_CREATURE)||_target->hasType(Subtypes::TYPE_ENCHANTMENT)||_target->hasType(Subtypes::TYPE_PLANESWALKER)))
|
||||||
copy = _target->controller()->game->putInZone(_target, _target->currentZone, source->controller()->game->battlefield, noEvent);
|
copy = _target->controller()->game->putInZone(_target, _target->currentZone, source->controller()->game->reveal, noEvent); // Fixed a problem with previous zone of card, it cannot be directly battlefield.
|
||||||
else
|
else
|
||||||
copy = _target->controller()->game->putInZone(_target, _target->currentZone, source->controller()->game->stack, noEvent);
|
copy = _target->controller()->game->putInZone(_target, _target->currentZone, source->controller()->game->stack, noEvent);
|
||||||
copy->changeController(source->controller(),true);
|
copy->changeController(source->controller(),true);
|
||||||
if(asNormalMadness)
|
if(asNormalMadness)
|
||||||
copy->MadnessPlay = true;
|
copy->MadnessPlay = true;
|
||||||
@@ -9882,7 +9882,7 @@ int AACastCard::resolveSpell()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (putinplay && (_target->hasType(Subtypes::TYPE_ARTIFACT)||_target->hasType(Subtypes::TYPE_CREATURE)||_target->hasType(Subtypes::TYPE_ENCHANTMENT)||_target->hasType(Subtypes::TYPE_PLANESWALKER)))
|
if (putinplay && (_target->hasType(Subtypes::TYPE_ARTIFACT)||_target->hasType(Subtypes::TYPE_CREATURE)||_target->hasType(Subtypes::TYPE_ENCHANTMENT)||_target->hasType(Subtypes::TYPE_PLANESWALKER)))
|
||||||
copy = _target->controller()->game->putInZone(_target, _target->currentZone, source->controller()->game->battlefield, noEvent);
|
copy = _target->controller()->game->putInZone(_target, _target->currentZone, source->controller()->game->reveal, noEvent); // Fixed a problem with previous zone of card, it cannot be directly battlefield.
|
||||||
else
|
else
|
||||||
copy = _target->controller()->game->putInZone(_target, _target->currentZone, source->controller()->game->stack, noEvent);
|
copy = _target->controller()->game->putInZone(_target, _target->currentZone, source->controller()->game->stack, noEvent);
|
||||||
copy->changeController(source->controller(),true);
|
copy->changeController(source->controller(),true);
|
||||||
|
|||||||
@@ -730,8 +730,17 @@ MTGCardInstance * MTGPlayerCards::putInZone(MTGCardInstance * card, MTGGameZone
|
|||||||
if(shufflelibrary)
|
if(shufflelibrary)
|
||||||
copy->owner->game->library->shuffle();//shouldnt we only ever do this if you clicked close on your library gui??????
|
copy->owner->game->library->shuffle();//shouldnt we only ever do this if you clicked close on your library gui??????
|
||||||
|
|
||||||
if(copy->has(Constants::ADVENTURE) && copy->alternateCostPaid[ManaCost::MANA_PAID_WITH_ALTERNATIVE] == 1 && //Added to correctly set the adventure cards type.
|
if(copy->has(Constants::ADVENTURE) && copy->alternateCostPaid[ManaCost::MANA_PAID_WITH_ALTERNATIVE] == 1 && //Added to correctly set the adventure cards type on stack.
|
||||||
(to == g->players[0]->game->stack || to == g->players[1]->game->stack || to == g->players[0]->game->battlefield || to == g->players[1]->game->battlefield)){
|
(to == g->players[0]->game->stack || to == g->players[1]->game->stack)){
|
||||||
|
copy->types.clear();
|
||||||
|
if(copy->has(Constants::ASFLASH))
|
||||||
|
copy->types.push_back(Subtypes::TYPE_INSTANT);
|
||||||
|
else
|
||||||
|
copy->types.push_back(Subtypes::TYPE_SORCERY);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(copy->has(Constants::HASAFTERMATH) && copy->alternateCostPaid[ManaCost::MANA_PAID_WITH_FLASHBACK] == 1 && //Added to correctly set the aftermath cards type on stack.
|
||||||
|
(to == g->players[0]->game->stack || to == g->players[1]->game->stack)){
|
||||||
copy->types.clear();
|
copy->types.clear();
|
||||||
if(copy->has(Constants::ASFLASH))
|
if(copy->has(Constants::ASFLASH))
|
||||||
copy->types.push_back(Subtypes::TYPE_INSTANT);
|
copy->types.push_back(Subtypes::TYPE_INSTANT);
|
||||||
|
|||||||
Reference in New Issue
Block a user