diff --git a/forge-ai/src/main/java/forge/ai/AiBlockController.java b/forge-ai/src/main/java/forge/ai/AiBlockController.java index d1e09092537..5a7a7722c6c 100644 --- a/forge-ai/src/main/java/forge/ai/AiBlockController.java +++ b/forge-ai/src/main/java/forge/ai/AiBlockController.java @@ -1337,7 +1337,7 @@ public class AiBlockController { } int evalBlk; - if (blocker.isFaceDown() && blocker.getView().canFaceDownBeShownTo(ai.getView(), false) && blocker.getState(CardStateName.Original).getType().isCreature()) { + if (blocker.isFaceDown() && blocker.getView().canFaceDownBeShownTo(ai.getView()) && blocker.getState(CardStateName.Original).getType().isCreature()) { // if the blocker is a face-down creature (e.g. cast via Morph, Manifest), evaluate it // in relation to the original state, not to the Morph state evalBlk = ComputerUtilCard.evaluateCreature(Card.fromPaperCard(blocker.getPaperCard(), ai), false, true); diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java index b39898f6727..6bff2cd8d01 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java @@ -409,7 +409,7 @@ public class ComputerUtilCost { } /** - * Check creature sacrifice cost. + * Check TapType cost. * * @param cost * the cost diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index df7d5d4f924..e3675c82678 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -220,7 +220,6 @@ public class Card extends GameEntity implements Comparable, IHasSVars { private long bestowTimestamp = -1; private long transformedTimestamp = 0; - private long convertedTimestamp = 0; private long mutatedTimestamp = -1; private long prototypeTimestamp = -1; private int timesMutated = 0; @@ -394,9 +393,6 @@ public class Card extends GameEntity implements Comparable, IHasSVars { public long getTransformedTimestamp() { return transformedTimestamp; } public void incrementTransformedTimestamp() { this.transformedTimestamp++; } - public long getConvertedTimestamp() { return convertedTimestamp; } - public void incrementConvertedTimestamp() { this.convertedTimestamp++; } - public CardState getCurrentState() { return currentState; } diff --git a/forge-game/src/main/java/forge/game/card/CardView.java b/forge-game/src/main/java/forge/game/card/CardView.java index 830072011e5..a343f683b3f 100644 --- a/forge-game/src/main/java/forge/game/card/CardView.java +++ b/forge-game/src/main/java/forge/game/card/CardView.java @@ -590,12 +590,12 @@ public class CardView extends GameEntityView { return Iterables.any(viewers, new Predicate() { @Override public final boolean apply(final PlayerView input) { - return canFaceDownBeShownTo(input, false); + return canFaceDownBeShownTo(input); } }); } - public boolean canFaceDownBeShownTo(final PlayerView viewer, boolean skip) { + public boolean canFaceDownBeShownTo(final PlayerView viewer) { if (!isFaceDown()) { return true; } @@ -604,12 +604,10 @@ public class CardView extends GameEntityView { if (mayPlayerLook(viewer)) { return true; } - if (!skip) { - //if viewer is controlled by another player, also check if face can be shown to that player - final PlayerView mindSlaveMaster = viewer.getMindSlaveMaster(); - if (mindSlaveMaster != null) { - return canFaceDownBeShownTo(mindSlaveMaster, true); - } + //if viewer is controlled by another player, also check if face can be shown to that player + final PlayerView mindSlaveMaster = getController().getMindSlaveMaster(); + if (mindSlaveMaster != null && mindSlaveMaster != getController() && mindSlaveMaster == viewer) { + return canFaceDownBeShownTo(getController()); } return isInZone(EnumSet.of(ZoneType.Battlefield, ZoneType.Stack, ZoneType.Sideboard)) && getController().equals(viewer); diff --git a/forge-gui/res/cardsfolder/a/akoum_flameseeker.txt b/forge-gui/res/cardsfolder/a/akoum_flameseeker.txt index 13366311782..3458e94d8b2 100644 --- a/forge-gui/res/cardsfolder/a/akoum_flameseeker.txt +++ b/forge-gui/res/cardsfolder/a/akoum_flameseeker.txt @@ -2,7 +2,9 @@ Name:Akoum Flameseeker ManaCost:2 R Types:Creature Human Shaman Ally PT:3/2 -A:AB$ Draw | Cost$ T tapXType<1/Ally> | UnlessCost$ Discard<1/Card> | UnlessSwitched$ True | UnlessPayer$ You | PrecostDesc$ Cohort — | SpellDescription$ Discard a card. If you do, draw a card. +A:AB$ Discard | Cost$ T tapXType<1/Ally> | Defined$ You | NumCards$ 1 | Mode$ TgtChoose | RememberDiscarded$ True | SubAbility$ DBDraw | PrecostDesc$ Cohort — | SpellDescription$ Discard a card. If you do, draw a card. +SVar:DBDraw:DB$ Draw | NumCards$ 1 | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ GE1 | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True AI:RemoveDeck:All DeckHints:Type$Ally Oracle:Cohort — {T}, Tap an untapped Ally you control: Discard a card. If you do, draw a card. diff --git a/forge-gui/res/cardsfolder/c/captains_maneuver.txt b/forge-gui/res/cardsfolder/c/captains_maneuver.txt index 7947f101eba..8b264a83596 100644 --- a/forge-gui/res/cardsfolder/c/captains_maneuver.txt +++ b/forge-gui/res/cardsfolder/c/captains_maneuver.txt @@ -2,8 +2,8 @@ Name:Captain's Maneuver ManaCost:X R W Types:Instant # turn targeted creature or player into chosen -A:SP$ ChoosePlayer | Cost$ X R W | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | Choices$ TargetedPlayer | Defined$ You | SubAbility$ DBChooseCreature | StackDescription$ SpellDescription | SpellDescription$ The next X damage that would be dealt to target creature, planeswalker, or player this turn is dealt to another target creature, planeswalker, or player instead. -SVar:DBChooseCreature:DB$ ChooseCard | DefinedCards$ Targeted | Mandatory$ True | Defined$ You | SubAbility$ DBSetVarBefore +A:SP$ ChoosePlayer | Cost$ X R W | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | Choices$ ThisTargetedPlayer | Defined$ You | SubAbility$ DBChooseCreature | StackDescription$ SpellDescription | SpellDescription$ The next X damage that would be dealt to target creature, planeswalker, or player this turn is dealt to another target creature, planeswalker, or player instead. +SVar:DBChooseCreature:DB$ ChooseCard | DefinedCards$ ParentTargeted | Mandatory$ True | Defined$ You | SubAbility$ DBSetVarBefore SVar:DBSetVarBefore:DB$ StoreSVar | SVar$ Y | Type$ Calculate | Expression$ X | SubAbility$ DBEffect SVar:DBEffect:DB$ Effect | ValidTgts$ Creature,Player,Planeswalker | TargetUnique$ True | TgtPrompt$ Select another target to redirect the damage to | ReplacementEffects$ ManeuverDamage | Triggers$ OutOfSight | RememberObjects$ ThisTargetedCard,ThisTargetedPlayer | SubAbility$ DBCleanup SVar:ManeuverDamage:Event$ DamageDone | ValidTarget$ Card.Creature+ChosenCard,Card.Planeswalker+ChosenCard,Player.Chosen | ReplaceWith$ ManeuverDmg | DamageTarget$ Remembered | Description$ The next X damage that would be dealt to target creature, planeswalker, or player this turn is dealt to another target creature, planeswalker, or player instead.