mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 04:08:01 +00:00
- ORI:Added Liliana, Heretical Healer
This commit is contained in:
@@ -12,7 +12,6 @@ import forge.ai.PlayerControllerAi;
|
||||
import forge.ai.simulation.GameStateEvaluator.Score;
|
||||
import forge.game.Game;
|
||||
import forge.game.GameObject;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardCollection;
|
||||
import forge.game.player.Player;
|
||||
|
||||
@@ -442,6 +442,9 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
||||
if (sa.hasParam("Tapped") || sa.hasParam("Ninjutsu")) {
|
||||
tgtC.setTapped(true);
|
||||
}
|
||||
if (sa.hasParam("Transformed") && tgtC.isDoubleFaced()) {
|
||||
tgtC.changeCardState("Transform", null);
|
||||
}
|
||||
if (sa.hasParam("WithCounters")) {
|
||||
String[] parse = sa.getParam("WithCounters").split("_");
|
||||
tgtC.addCounter(CounterType.getType(parse[0]), Integer.parseInt(parse[1]), true);
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import forge.card.CardStateName;
|
||||
import forge.game.Game;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.Card;
|
||||
@@ -50,7 +49,7 @@ public class SetStateEffect extends SpellAbilityEffect {
|
||||
continue;
|
||||
}
|
||||
|
||||
boolean hasTransformed = changeCardState(tgt, sa.getParam("Mode"), sa.getParam("NewState"));
|
||||
boolean hasTransformed = tgt.changeCardState(sa.getParam("Mode"), sa.getParam("NewState"));
|
||||
if ( hasTransformed ) {
|
||||
game.fireEvent(new GameEventCardStatsChanged(tgt));
|
||||
}
|
||||
@@ -59,40 +58,4 @@ public class SetStateEffect extends SpellAbilityEffect {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean changeCardState(final Card tgt, final String mode, final String customState) {
|
||||
if (mode == null)
|
||||
return tgt.changeToState(CardStateName.smartValueOf(customState));
|
||||
|
||||
// flip and face-down don't overlap. That is there is no chance to turn face down a flipped permanent
|
||||
// and then any effect have it turn upface again and demand its former flip state to be restored
|
||||
// Proof: Morph cards never have ability that makes them flip, Ixidron does not suppose cards to be turned face up again,
|
||||
// Illusionary Mask affects cards in hand.
|
||||
CardStateName oldState = tgt.getCurrentStateName();
|
||||
if (mode.equals("Transform") && tgt.isDoubleFaced()) {
|
||||
if (tgt.hasKeyword("CARDNAME can't transform")) {
|
||||
return false;
|
||||
}
|
||||
CardStateName destState = oldState == CardStateName.Transformed ? CardStateName.Original : CardStateName.Transformed;
|
||||
return tgt.changeToState(destState);
|
||||
|
||||
} else if (mode.equals("Flip") && tgt.isFlipCard()) {
|
||||
CardStateName destState = oldState == CardStateName.Flipped ? CardStateName.Original : CardStateName.Flipped;
|
||||
return tgt.changeToState(destState);
|
||||
} else if (mode.equals("TurnFace")) {
|
||||
if (oldState == CardStateName.Original) {
|
||||
// Reset cloned state if Vesuvan Shapeshifter
|
||||
if (tgt.isCloned() && tgt.getState(CardStateName.Cloner).getName().equals("Vesuvan Shapeshifter")) {
|
||||
tgt.switchStates(CardStateName.Cloner, CardStateName.Original, false);
|
||||
tgt.setState(CardStateName.Original, false);
|
||||
tgt.clearStates(CardStateName.Cloner, false);
|
||||
}
|
||||
return tgt.turnFaceDown();
|
||||
} else if (oldState == CardStateName.FaceDown) {
|
||||
return tgt.turnFaceUp();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -410,6 +410,41 @@ public class Card extends GameEntity implements Comparable<Card> {
|
||||
preFaceDownState = preCharacteristic;
|
||||
}
|
||||
|
||||
public boolean changeCardState(final String mode, final String customState) {
|
||||
if (mode == null)
|
||||
return changeToState(CardStateName.smartValueOf(customState));
|
||||
|
||||
// flip and face-down don't overlap. That is there is no chance to turn face down a flipped permanent
|
||||
// and then any effect have it turn upface again and demand its former flip state to be restored
|
||||
// Proof: Morph cards never have ability that makes them flip, Ixidron does not suppose cards to be turned face up again,
|
||||
// Illusionary Mask affects cards in hand.
|
||||
CardStateName oldState = getCurrentStateName();
|
||||
if (mode.equals("Transform") && isDoubleFaced()) {
|
||||
if (hasKeyword("CARDNAME can't transform")) {
|
||||
return false;
|
||||
}
|
||||
CardStateName destState = oldState == CardStateName.Transformed ? CardStateName.Original : CardStateName.Transformed;
|
||||
return changeToState(destState);
|
||||
|
||||
} else if (mode.equals("Flip") && isFlipCard()) {
|
||||
CardStateName destState = oldState == CardStateName.Flipped ? CardStateName.Original : CardStateName.Flipped;
|
||||
return changeToState(destState);
|
||||
} else if (mode.equals("TurnFace")) {
|
||||
if (oldState == CardStateName.Original) {
|
||||
// Reset cloned state if Vesuvan Shapeshifter
|
||||
if (isCloned() && getState(CardStateName.Cloner).getName().equals("Vesuvan Shapeshifter")) {
|
||||
switchStates(CardStateName.Cloner, CardStateName.Original, false);
|
||||
setState(CardStateName.Original, false);
|
||||
clearStates(CardStateName.Cloner, false);
|
||||
}
|
||||
return turnFaceDown();
|
||||
} else if (oldState == CardStateName.FaceDown) {
|
||||
return turnFaceUp();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public Card manifest(Player p) {
|
||||
// Turn Face Down (even if it's DFC).
|
||||
CardState originalCard = this.getState(CardStateName.Original);
|
||||
|
||||
@@ -5,8 +5,7 @@ PT:2/2
|
||||
K:Vigilance
|
||||
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigDelay | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, return it to the battlefield transformed under your control at the beginning of the next end step.
|
||||
SVar:TrigDelay:AB$ DelayedTrigger | Cost$ 0 | Mode$ Phase | Phase$ End of Turn | Execute$ TrigReturn | RememberObjects$ TriggeredCard | TriggerDescription$ return CARDNAME to the battlefield transformed
|
||||
SVar:TrigReturn:AB$ ChangeZone | Cost$ 0 | Defined$ DelayTriggerRemembered | Origin$ Graveyard | Destination$ Battlefield | SubAbility$ TrigTransform
|
||||
SVar:TrigTransform:DB$ SetState | Cost$ 0 | Defined$ DelayTriggerRemembered | Mode$ Transform
|
||||
SVar:TrigReturn:AB$ ChangeZone | Cost$ 0 | Defined$ DelayTriggerRemembered | Origin$ Graveyard | Destination$ Battlefield | Transformed$ True | GainControl$ True
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/loyal_cathar.jpg
|
||||
AlternateMode:DoubleFaced
|
||||
Oracle:Vigilance\nWhen Loyal Cathar dies, return it to the battlefield transformed under your control at the beginning of the next end step.
|
||||
|
||||
@@ -287,6 +287,7 @@ Kiora
|
||||
Koth
|
||||
Liliana
|
||||
Nahiri
|
||||
Narset
|
||||
Nissa
|
||||
Nixilis
|
||||
Ral
|
||||
|
||||
Reference in New Issue
Block a user