mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 18:58:00 +00:00
Airbend spells
This commit is contained in:
@@ -11,6 +11,7 @@ import forge.game.card.Card;
|
|||||||
import forge.game.card.CardZoneTable;
|
import forge.game.card.CardZoneTable;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.spellability.SpellAbility;
|
import forge.game.spellability.SpellAbility;
|
||||||
|
import forge.game.spellability.SpellAbilityStackInstance;
|
||||||
import forge.game.trigger.TriggerType;
|
import forge.game.trigger.TriggerType;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.util.Lang;
|
import forge.util.Lang;
|
||||||
@@ -55,21 +56,27 @@ public class AirbendEffect extends SpellAbilityEffect {
|
|||||||
if (gameCard == null || !c.equalsWithGameTimestamp(gameCard) || gameCard.isPhasedOut()) {
|
if (gameCard == null || !c.equalsWithGameTimestamp(gameCard) || gameCard.isPhasedOut()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gameCard.canExiledBy(sa, true)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
handleExiledWith(gameCard, sa);
|
handleExiledWith(gameCard, sa);
|
||||||
|
|
||||||
Map<AbilityKey, Object> moveParams = AbilityKey.newMap();
|
Map<AbilityKey, Object> moveParams = AbilityKey.newMap();
|
||||||
AbilityKey.addCardZoneTableParams(moveParams, triggerList);
|
AbilityKey.addCardZoneTableParams(moveParams, triggerList);
|
||||||
|
|
||||||
Card movedCard = game.getAction().exile(gameCard, sa, moveParams);
|
SpellAbilityStackInstance si = null;
|
||||||
|
if (gameCard.isInZone(ZoneType.Stack)) {
|
||||||
|
SpellAbility stackSA = game.getStack().getSpellMatchingHost(gameCard);
|
||||||
|
si = game.getStack().getInstanceMatchingSpellAbilityID(stackSA);
|
||||||
|
}
|
||||||
|
|
||||||
|
Card movedCard = game.getAction().exile(gameCard, sa, moveParams);
|
||||||
if (movedCard == null || !movedCard.isInZone(ZoneType.Exile)) {
|
if (movedCard == null || !movedCard.isInZone(ZoneType.Exile)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (si != null) {
|
||||||
|
// GameAction.changeZone should really take care of cleaning up SASI when a card from the stack is removed.
|
||||||
|
game.getStack().remove(si);
|
||||||
|
}
|
||||||
|
|
||||||
// Effect to cast for 2 from exile
|
// Effect to cast for 2 from exile
|
||||||
Card eff = createEffect(sa, movedCard.getOwner(), "Airbend" + movedCard, hostCard.getImageKey());
|
Card eff = createEffect(sa, movedCard.getOwner(), "Airbend" + movedCard, hostCard.getImageKey());
|
||||||
eff.addRemembered(movedCard);
|
eff.addRemembered(movedCard);
|
||||||
@@ -84,6 +91,7 @@ public class AirbendEffect extends SpellAbilityEffect {
|
|||||||
|
|
||||||
game.getAction().moveToCommand(eff, sa);
|
game.getAction().moveToCommand(eff, sa);
|
||||||
}
|
}
|
||||||
|
|
||||||
triggerList.triggerChangesZoneAll(game, sa);
|
triggerList.triggerChangesZoneAll(game, sa);
|
||||||
handleExiledWith(triggerList.allCards(), sa);
|
handleExiledWith(triggerList.allCards(), sa);
|
||||||
|
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ PT:2/3
|
|||||||
K:Flash
|
K:Flash
|
||||||
K:Flying
|
K:Flying
|
||||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigAirbend | TriggerDescription$ When NICKNAME enters, airbend up to one other target creature or spell. (Exile it. While it's exiled, its owner may cast it for {2} rather than its mana cost.)
|
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigAirbend | TriggerDescription$ When NICKNAME enters, airbend up to one other target creature or spell. (Exile it. While it's exiled, its owner may cast it for {2} rather than its mana cost.)
|
||||||
SVar:TrigAirbend:DB$ Airbend | ValidTgts$ Creature.Other,Card.inZoneStack | TgtPrompt$ Select another target creature or spell
|
SVar:TrigAirbend:DB$ Airbend | ValidTgts$ Creature.Other,Card.inZoneStack | TgtPrompt$ Select up to another target creature or spell | TgtZone$ Battlefield,Stack | TargetMin$ 0
|
||||||
A:AB$ SetState | Cost$ Waterbend<8> |Defined$ Self | Mode$ Transform | SpellDescription$ Transform NICKNAME.
|
A:AB$ SetState | Cost$ Waterbend<8> | Defined$ Self | Mode$ Transform | SpellDescription$ Transform NICKNAME.
|
||||||
AlternateMode:DoubleFaced
|
AlternateMode:DoubleFaced
|
||||||
Oracle:Flash\nFlying\nWhen Aang enters, airbend up to one other target creature or spell. (Exile it. While it's exiled, its owner may cast it for {2} rather than its mana cost.)\nWaterbend {8}: Transform Aang.
|
Oracle:Flash\nFlying\nWhen Aang enters, airbend up to one other target creature or spell. (Exile it. While it's exiled, its owner may cast it for {2} rather than its mana cost.)\nWaterbend {8}: Transform Aang.
|
||||||
|
|
||||||
@@ -20,4 +20,4 @@ K:Reach
|
|||||||
K:Trample
|
K:Trample
|
||||||
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPutCounterAll | TriggerDescription$ Whenever NICKNAME attack, put a +1/+1 counter on each tapped creature you control.
|
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPutCounterAll | TriggerDescription$ Whenever NICKNAME attack, put a +1/+1 counter on each tapped creature you control.
|
||||||
SVar:TrigPutCounterAll:DB$ PutCounterAll | ValidCards$ Creature.YouCtrl+tapped | CounterType$ P1P1 | CounterNum$ 1
|
SVar:TrigPutCounterAll:DB$ PutCounterAll | ValidCards$ Creature.YouCtrl+tapped | CounterType$ P1P1 | CounterNum$ 1
|
||||||
Oracle:Reach, trample\nWhenever Aang and La attack, put a +1/+1 counter on each tapped creature you control.
|
Oracle:Reach, trample\nWhenever Aang and La attack, put a +1/+1 counter on each tapped creature you control.
|
||||||
Reference in New Issue
Block a user