mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-15 10:18:01 +00:00
Jorn God of Winter and Kaldrin the Rimestaff
This commit is contained in:
committed by
Michael Kamensky
parent
006fcda2c8
commit
592f708c00
@@ -211,7 +211,9 @@ public class EffectEffect extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
if (sa.hasParam("ForgetOnMoved")) {
|
if (sa.hasParam("ForgetOnMoved")) {
|
||||||
addForgetOnMovedTrigger(eff, sa.getParam("ForgetOnMoved"));
|
addForgetOnMovedTrigger(eff, sa.getParam("ForgetOnMoved"));
|
||||||
addForgetOnCastTrigger(eff);
|
if (!"Stack".equals(sa.getParam("ForgetOnMoved"))) {
|
||||||
|
addForgetOnCastTrigger(eff);
|
||||||
|
}
|
||||||
} else if (sa.hasParam("ExileOnMoved")) {
|
} else if (sa.hasParam("ExileOnMoved")) {
|
||||||
addExileOnMovedTrigger(eff, sa.getParam("ExileOnMoved"));
|
addExileOnMovedTrigger(eff, sa.getParam("ExileOnMoved"));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,10 +3,7 @@ package forge.game.ability.effects;
|
|||||||
import forge.game.ability.SpellAbilityEffect;
|
import forge.game.ability.SpellAbilityEffect;
|
||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
import forge.game.spellability.SpellAbility;
|
import forge.game.spellability.SpellAbility;
|
||||||
import forge.game.spellability.TargetRestrictions;
|
import forge.util.Lang;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class TapEffect extends SpellAbilityEffect {
|
public class TapEffect extends SpellAbilityEffect {
|
||||||
|
|
||||||
@@ -22,11 +19,8 @@ public class TapEffect extends SpellAbilityEffect {
|
|||||||
card.clearRemembered();
|
card.clearRemembered();
|
||||||
}
|
}
|
||||||
|
|
||||||
final TargetRestrictions tgt = sa.getTargetRestrictions();
|
for (final Card tgtC : getTargetCards(sa)) {
|
||||||
final List<Card> tgtCards = getTargetCards(sa);
|
if (sa.usesTargeting() && !tgtC.canBeTargetedBy(sa)) {
|
||||||
|
|
||||||
for (final Card tgtC : tgtCards) {
|
|
||||||
if (tgt != null && !tgtC.canBeTargetedBy(sa)) {
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (tgtC.isInPlay()) {
|
if (tgtC.isInPlay()) {
|
||||||
@@ -47,8 +41,7 @@ public class TapEffect extends SpellAbilityEffect {
|
|||||||
final StringBuilder sb = new StringBuilder();
|
final StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
sb.append("Tap ");
|
sb.append("Tap ");
|
||||||
final List<Card> tgtCards = getTargetCards(sa);
|
sb.append(Lang.joinHomogenous(getTargetCards(sa)));
|
||||||
sb.append(StringUtils.join(tgtCards, ", "));
|
|
||||||
sb.append(".");
|
sb.append(".");
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,15 +8,10 @@ import forge.game.card.CardLists;
|
|||||||
import forge.game.card.CardPredicates.Presets;
|
import forge.game.card.CardPredicates.Presets;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.spellability.SpellAbility;
|
import forge.game.spellability.SpellAbility;
|
||||||
import forge.game.spellability.TargetRestrictions;
|
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
import forge.util.Lang;
|
||||||
import forge.util.Localizer;
|
import forge.util.Localizer;
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
|
|
||||||
public class UntapEffect extends SpellAbilityEffect {
|
public class UntapEffect extends SpellAbilityEffect {
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
@@ -33,8 +28,7 @@ public class UntapEffect extends SpellAbilityEffect {
|
|||||||
sb.append("up to ").append(sa.getParam("Amount")).append(" ");
|
sb.append("up to ").append(sa.getParam("Amount")).append(" ");
|
||||||
sb.append(sa.getParam("UntapType")).append("s");
|
sb.append(sa.getParam("UntapType")).append("s");
|
||||||
} else {
|
} else {
|
||||||
List<Card> tgtCards = getTargetCards(sa);
|
sb.append(Lang.joinHomogenous(getTargetCards(sa)));
|
||||||
sb.append(StringUtils.join(tgtCards, ", "));
|
|
||||||
}
|
}
|
||||||
sb.append(".");
|
sb.append(".");
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
@@ -42,20 +36,22 @@ public class UntapEffect extends SpellAbilityEffect {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void resolve(SpellAbility sa) {
|
public void resolve(SpellAbility sa) {
|
||||||
final TargetRestrictions tgt = sa.getTargetRestrictions();
|
|
||||||
|
|
||||||
if (sa.hasParam("UntapUpTo")) {
|
if (sa.hasParam("UntapUpTo")) {
|
||||||
untapChoose(sa, false);
|
untapChoose(sa, false);
|
||||||
} else if (sa.hasParam("UntapExactly")) {
|
} else if (sa.hasParam("UntapExactly")) {
|
||||||
untapChoose(sa, true);
|
untapChoose(sa, true);
|
||||||
} else {
|
} else {
|
||||||
|
for (final Card tgtC : getTargetCards(sa)) {
|
||||||
final List<Card> tgtCards = getTargetCards(sa);
|
if (sa.usesTargeting() && !tgtC.canBeTargetedBy(sa)) {
|
||||||
|
continue;
|
||||||
for (final Card tgtC : tgtCards) {
|
}
|
||||||
if (tgtC.isInPlay() && ((tgt == null) || tgtC.canBeTargetedBy(sa))) {
|
if (tgtC.isInPlay()) {
|
||||||
tgtC.untap();
|
tgtC.untap();
|
||||||
}
|
}
|
||||||
|
if (sa.hasParam("ETB")) {
|
||||||
|
// do not fire triggers
|
||||||
|
tgtC.setTapped(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -74,9 +70,7 @@ public class UntapEffect extends SpellAbilityEffect {
|
|||||||
final int num = Integer.parseInt(sa.getParam("Amount"));
|
final int num = Integer.parseInt(sa.getParam("Amount"));
|
||||||
final String valid = sa.getParam("UntapType");
|
final String valid = sa.getParam("UntapType");
|
||||||
|
|
||||||
final List<Player> definedPlayers = AbilityUtils.getDefinedPlayers(sa.getHostCard(), sa.getParam("Defined"), sa);
|
for (final Player p : AbilityUtils.getDefinedPlayers(sa.getHostCard(), sa.getParam("Defined"), sa)) {
|
||||||
|
|
||||||
for (final Player p : definedPlayers) {
|
|
||||||
CardCollectionView list = CardLists.getValidCards(p.getGame().getCardsIn(ZoneType.Battlefield),
|
CardCollectionView list = CardLists.getValidCards(p.getGame().getCardsIn(ZoneType.Battlefield),
|
||||||
valid, sa.getActivatingPlayer(), sa.getHostCard());
|
valid, sa.getActivatingPlayer(), sa.getHostCard());
|
||||||
list = CardLists.filter(list, Presets.TAPPED);
|
list = CardLists.filter(list, Presets.TAPPED);
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
Name:Jorn, God of Winter
|
||||||
|
ManaCost:2 G
|
||||||
|
Types:Legendary Snow Creature God
|
||||||
|
PT:3/3
|
||||||
|
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigUntapAllSnow | TriggerDescription$ Whenever CARDNAME attacks, untap each snow permanent you control.
|
||||||
|
SVar:TrigUntapAllSnow:DB$ UntapAll | ValidCards$ Permanent.Snow+YouCtrl
|
||||||
|
SVar:PlayMain1:TRUE
|
||||||
|
AlternateMode:Modal
|
||||||
|
DeckNeeds:Type$Snow
|
||||||
|
DeckHas:Ability$Graveyard
|
||||||
|
Oracle:Whenever Jorn attacks, untap each snow permanent you control.
|
||||||
|
|
||||||
|
ALTERNATE
|
||||||
|
|
||||||
|
Name:Kaldring, the Rimestaff
|
||||||
|
ManaCost:1 U B
|
||||||
|
Types:Legendary Snow Artifact
|
||||||
|
A:AB$ Effect | Cost$ T | TgtZone$ Graveyard | ValidTgts$ Permanent.Snow+YouCtrl | TgtPrompt$ Choose target snow permanent card in your graveyard | StaticAbilities$ STPlay | RememberObjects$ Targeted | ForgetOnMoved$ Graveyard | SubAbility$ DBEffect | SpellDescription$ You may play target snow permanent card from your graveyard this turn. If you do, it enters the battlefield tapped.
|
||||||
|
SVar:STPlay:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Graveyard | Description$ You may play target snow permanent card from your graveyard this turn.
|
||||||
|
SVar:DBEffect:DB$ Effect | RememberObjects$ ParentTarget | ForgetOnMoved$ Stack | ReplacementEffects$ ETBCreat | SVars$ DBTap,ToBattlefield,DBExile | References$ ETBCreat,DBTap,ToBattlefield,DBExile
|
||||||
|
SVar:ETBCreat:Event$ Moved | ValidCard$ Card.IsRemembered | Destination$ Battlefield | ReplaceWith$ DBTap | Description$ If you do, it enters the battlefield tapped.
|
||||||
|
SVar:DBTap:DB$ Tap | Defined$ ReplacedCard | ETB$ True | SubAbility$ ToBattlefield
|
||||||
|
SVar:ToBattlefield:DB$ InternalEtbReplacement | SubAbility$ DBExile
|
||||||
|
SVar:DBExile:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile
|
||||||
|
SVar:STTapped:Mode$ Continuous | Affected$ Card.IsRemembered | AddKeyword$ CARDNAME enters the battlefield tapped.
|
||||||
|
DeckNeeds:Type$Snow
|
||||||
|
DeckHas:Ability$Graveyard
|
||||||
|
Oracle:{T}: You may play target snow permanent card from your graveyard this turn. If you do, it enters the battlefield tapped.
|
||||||
Reference in New Issue
Block a user