Small combat fixes for Planeswalkers

This commit is contained in:
tool4EvEr
2021-08-10 21:10:45 +02:00
parent b049c8c09b
commit 805e65d30c
6 changed files with 21 additions and 8 deletions

View File

@@ -477,7 +477,7 @@ public final class CardType implements Comparable<CardType>, CardTypeView {
}
// we assume that changes are already correctly ordered (taken from TreeMap.values())
for (final CardChangedType ct : changedCardTypes) {
if(null == newType)
if (null == newType)
newType = new CardType(CardType.this);
if (ct.isRemoveCardTypes()) {

View File

@@ -2456,11 +2456,11 @@ public class AbilityUtils {
partyTypes.removeAll(chosenParty.keySet());
// Here I'm left with just the party types that I haven't selected.
for(Card multi : multityped.keySet()) {
for (Card multi : multityped.keySet()) {
Set<String> types = multityped.get(multi);
types.retainAll(partyTypes);
for(String type : types) {
for (String type : types) {
chosenParty.put(type, multi);
partyTypes.remove(type);
break;

View File

@@ -3501,7 +3501,13 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
if (changedCardTypes.isEmpty() && changedCardTypesCharacterDefining.isEmpty()) {
return state.getType();
}
return state.getType().getTypeWithChanges(getChangedCardTypes());
// CR 506.4 attacked planeswalkers leave combat
boolean checkCombat = state.getType().isPlaneswalker() && game.getCombat() != null && !game.getCombat().getAttackersOf(this).isEmpty();
CardTypeView types = state.getType().getTypeWithChanges(getChangedCardTypes());
if (checkCombat && !types.isPlaneswalker()) {
game.getCombat().removeFromCombat(this);
}
return types;
}
public Iterable<CardChangedType> getChangedCardTypes() {
@@ -3569,7 +3575,6 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
final boolean removeLandTypes, final boolean removeCreatureTypes, final boolean removeArtifactTypes,
final boolean removeEnchantmentTypes,
final long timestamp, final boolean updateView, final boolean cda) {
(cda ? changedCardTypesCharacterDefining : changedCardTypes).put(timestamp, new CardChangedType(
addType, removeType, removeSuperTypes, removeCardTypes, removeSubTypes,
removeLandTypes, removeCreatureTypes, removeArtifactTypes, removeEnchantmentTypes));

View File

@@ -1428,7 +1428,14 @@ public class CardProperty {
}
}
if (property.equals("attackingYouOrYourPW")) {
Player defender = combat.getDefenderPlayerByAttacker(card);
GameEntity defender = combat.getDefenderByAttacker(card);
if (defender instanceof Card) {
// attack on a planeswalker that was removed from combat
if (!((Card)defender).isPlaneswalker()) {
return false;
}
defender = ((Card)defender).getController();
}
if (!sourceController.equals(defender)) {
return false;
}

View File

@@ -602,7 +602,7 @@ public class Combat {
for (Card pw : getDefendingPlaneswalkers()) {
if (pw.equals(c)) {
Multimap<GameEntity, AttackingBand> attackerBuffer = ArrayListMultimap.create();
Collection<AttackingBand> bands = attackedByBands.get(pw);
Collection<AttackingBand> bands = attackedByBands.get(c);
for (AttackingBand abPW : bands) {
unregisterDefender(c, abPW);
// Rule 506.4c workaround to keep creatures in combat
@@ -613,6 +613,7 @@ public class Combat {
}
bands.clear();
attackedByBands.putAll(attackerBuffer);
break;
}
}

View File

@@ -1,6 +1,6 @@
Name:Soul Snare
ManaCost:W
Types:Enchantment
A:AB$ ChangeZone | Cost$ W Sac<1/CARDNAME> | ValidTgts$ Creature.attacking+OppCtrl | TgtPrompt$ Select target creature that's attacking you or a planeswalker you control. | Origin$ Battlefield | Destination$ Exile | SpellDescription$ Exile target creature that's attacking you or a planeswalker you control.
A:AB$ ChangeZone | Cost$ W Sac<1/CARDNAME> | ValidTgts$ Creature.attackingYouOrYourPW | TgtPrompt$ Select target creature that's attacking you or a planeswalker you control. | Origin$ Battlefield | Destination$ Exile | SpellDescription$ Exile target creature that's attacking you or a planeswalker you control.
SVar:Picture:http://www.wizards.com/global/images/magic/general/soul_snare.jpg
Oracle:{W}, Sacrifice Soul Snare: Exile target creature that's attacking you or a planeswalker you control.