Fix Blaze of Glory (#10734)

* Rename DefendingPlayerControlsPredicate to explicitly indicate that the source must be attacking.

I did check all the cards, they all use the predicate inside an attack trigger, or under the condition that the source is attacking.

* Fix Blaze of Glory, rework False Orders with it.
This commit is contained in:
Susucre 2023-08-04 04:33:52 +02:00 committed by GitHub
parent 63706942db
commit f366f3097e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
41 changed files with 197 additions and 128 deletions

View file

@ -0,0 +1,75 @@
package mage.filter.predicate.permanent;
import mage.constants.TurnPhase;
import mage.filter.predicate.ObjectSourcePlayer;
import mage.filter.predicate.ObjectSourcePlayerPredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
/**
* DefendingPlayerControlsSourceAttackingPredicate is maybe what you are looking for,
* for modern usage of "defending player", inside an attack trigger, where the 'defending
* player' makes sense, it is the player attacked by the source of the ability.
* <p>
* If not, let's go for a ride on rule interpretation of very old cards hiding in
* a corner of a gray area of the rules.
* <p>
* 506.2. During the combat phase, the active player is the attacking player; creatures that player controls
* may attack. During the combat phase of a two-player game, the nonactive player is the defending
* player; that player, planeswalkers they control, and battles they protect may be attacked.
* 506.2a During the combat phase of a multiplayer game, there may be one or more defending
* players, depending on the variant being played and the options chosen for it. Unless all the
* attacking players opponents automatically become defending players during the combat phase,
* the attacking player chooses one of their opponents as a turn-based action during the beginning
* of combat step. (Note that the choice may be dictated by the variant being played or the options
* chosen for it.) That player becomes the defending player. See rule 802, Attack Multiple Players
* Option, rule 803, Attack Left and Attack Right Options, and rule 809, Emperor Varian
* <p>
* 802. Attack Multiple Players Option
* 802.1. Some multiplayer games allow the active player to attack multiple other players. If this option is
* used, a player can also choose to attack only one player during a particular combat.
* 802.2. As the combat phase starts, the attacking player doesnt choose an opponent to become the
* defending player. Instead, all the attacking players opponents are defending players during the
* combat phase.
* 802.2a Any rule, object, or effect that refers to a defending player refers to one specific defending
* player, not to all of the defending players. If an ability of an attacking creature refers to a
* defending player, or a spell or ability refers to both an attacking creature and a defending player,
* then unless otherwise specified, the defending player its referring to is the player that creature
* is attacking, the controller of the planeswalker that creature is attacking, or the protector of the
* battle that player is attacking. If that creature is no longer attacking, the defending player its
* referring to is the player that creature was attacking before it was removed from combat, the
* controller of the planeswalker that creature was attacking before it was removed from combat,
* or the protector of the battle that player was attacking before it was removed from combat. If a
* spell or ability could apply to multiple attacking creatures, the appropriate defending player is
* individually determined for each of those attacking creatures. If there are multiple defending
* players that could be chosen, the controller of the spell or ability chooses one.
* <p>
* So after those walls of text, let's go back to the weird case of effects mentioning
* 'defending player', when the source is not attacking.
* <p>
* For instance with: Blaze of Glory
* Instant {W}
* Cast this spell only during combat before blockers are declared.
* Target creature defending player controls can block any number of creatures this turn. It blocks each attacking creature this turn if able.
* <p>
* <p>
* For that card, it does not matter (at least I'm interpreting it that way) that an opponent of the active player
* be attacked for their creatures to be targettable by Blaze of Glory, as long as it is during the combat step.
*
* @author Susucr
*/
public enum DefendingPlayerControlsNoSourcePredicate implements ObjectSourcePlayerPredicate<Permanent> {
instance;
@Override
public boolean apply(ObjectSourcePlayer<Permanent> input, Game game) {
return game.getState().getTurnPhaseType() == TurnPhase.COMBAT &&
game.getOpponents(game.getActivePlayerId())
.contains(input.getObject().getControllerId());
}
@Override
public String toString() {
return "";
}
}

View file

@ -6,9 +6,14 @@ import mage.game.Game;
import mage.game.permanent.Permanent;
/**
* @author TheElk801
* This predicate can only apply when source is an attacking creature.
* <p>
* It should be used when the source is an attacking creature during an effect
* e.g. 'when {this} attacks, target creature defending player controls can't block this turn.'
*
* @author Susucr
*/
public enum DefendingPlayerControlsPredicate implements ObjectSourcePlayerPredicate<Permanent> {
public enum DefendingPlayerControlsSourceAttackingPredicate implements ObjectSourcePlayerPredicate<Permanent> {
instance;
@Override