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;
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);

View File

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

View File

@@ -220,7 +220,6 @@ public class Card extends GameEntity implements Comparable<Card>, 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<Card>, 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;
}

View File

@@ -590,12 +590,12 @@ public class CardView extends GameEntityView {
return Iterables.any(viewers, new Predicate<PlayerView>() {
@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);

View File

@@ -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.

View File

@@ -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.