mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-14 01:38:13 +00:00
Small combat fixes for Planeswalkers
This commit is contained in:
@@ -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()) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user