mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 19:58:00 +00:00
Merge pull request #1892 from tool4ever/canFaceDownBeShownTo
Fix canFaceDownBeShownTo
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -409,7 +409,7 @@ public class ComputerUtilCost {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check creature sacrifice cost.
|
* Check TapType cost.
|
||||||
*
|
*
|
||||||
* @param cost
|
* @param cost
|
||||||
* the cost
|
* the cost
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
Reference in New Issue
Block a user