Merge pull request #1892 from tool4ever/canFaceDownBeShownTo

Fix canFaceDownBeShownTo
This commit is contained in:
Anthony Calosa
2022-11-14 20:55:54 +08:00
committed by GitHub
6 changed files with 13 additions and 17 deletions

View File

@@ -1337,7 +1337,7 @@ public class AiBlockController {
} }
int evalBlk; 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 // 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 // in relation to the original state, not to the Morph state
evalBlk = ComputerUtilCard.evaluateCreature(Card.fromPaperCard(blocker.getPaperCard(), ai), false, true); evalBlk = ComputerUtilCard.evaluateCreature(Card.fromPaperCard(blocker.getPaperCard(), ai), false, true);

View File

@@ -409,7 +409,7 @@ public class ComputerUtilCost {
} }
/** /**
* Check creature sacrifice cost. * Check TapType cost.
* *
* @param cost * @param cost
* the cost * the cost

View File

@@ -220,7 +220,6 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
private long bestowTimestamp = -1; private long bestowTimestamp = -1;
private long transformedTimestamp = 0; private long transformedTimestamp = 0;
private long convertedTimestamp = 0;
private long mutatedTimestamp = -1; private long mutatedTimestamp = -1;
private long prototypeTimestamp = -1; private long prototypeTimestamp = -1;
private int timesMutated = 0; private int timesMutated = 0;
@@ -394,9 +393,6 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
public long getTransformedTimestamp() { return transformedTimestamp; } public long getTransformedTimestamp() { return transformedTimestamp; }
public void incrementTransformedTimestamp() { this.transformedTimestamp++; } public void incrementTransformedTimestamp() { this.transformedTimestamp++; }
public long getConvertedTimestamp() { return convertedTimestamp; }
public void incrementConvertedTimestamp() { this.convertedTimestamp++; }
public CardState getCurrentState() { public CardState getCurrentState() {
return currentState; return currentState;
} }

View File

@@ -590,12 +590,12 @@ public class CardView extends GameEntityView {
return Iterables.any(viewers, new Predicate<PlayerView>() { return Iterables.any(viewers, new Predicate<PlayerView>() {
@Override @Override
public final boolean apply(final PlayerView input) { 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()) { if (!isFaceDown()) {
return true; return true;
} }
@@ -604,12 +604,10 @@ public class CardView extends GameEntityView {
if (mayPlayerLook(viewer)) { if (mayPlayerLook(viewer)) {
return true; return true;
} }
if (!skip) { //if viewer is controlled by another player, also check if face can be shown to that player
//if viewer is controlled by another player, also check if face can be shown to that player final PlayerView mindSlaveMaster = getController().getMindSlaveMaster();
final PlayerView mindSlaveMaster = viewer.getMindSlaveMaster(); if (mindSlaveMaster != null && mindSlaveMaster != getController() && mindSlaveMaster == viewer) {
if (mindSlaveMaster != null) { return canFaceDownBeShownTo(getController());
return canFaceDownBeShownTo(mindSlaveMaster, true);
}
} }
return isInZone(EnumSet.of(ZoneType.Battlefield, ZoneType.Stack, ZoneType.Sideboard)) && getController().equals(viewer); return isInZone(EnumSet.of(ZoneType.Battlefield, ZoneType.Stack, ZoneType.Sideboard)) && getController().equals(viewer);

View File

@@ -2,7 +2,9 @@ Name:Akoum Flameseeker
ManaCost:2 R ManaCost:2 R
Types:Creature Human Shaman Ally Types:Creature Human Shaman Ally
PT:3/2 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 AI:RemoveDeck:All
DeckHints:Type$Ally DeckHints:Type$Ally
Oracle:Cohort — {T}, Tap an untapped Ally you control: Discard a card. If you do, draw a card. Oracle:Cohort — {T}, Tap an untapped Ally you control: Discard a card. If you do, draw a card.

View File

@@ -2,8 +2,8 @@ Name:Captain's Maneuver
ManaCost:X R W ManaCost:X R W
Types:Instant Types:Instant
# turn targeted creature or player into chosen # 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. 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$ Targeted | Mandatory$ True | Defined$ You | SubAbility$ DBSetVarBefore 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: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: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. 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.