mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-14 09:48:02 +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())
|
// we assume that changes are already correctly ordered (taken from TreeMap.values())
|
||||||
for (final CardChangedType ct : changedCardTypes) {
|
for (final CardChangedType ct : changedCardTypes) {
|
||||||
if(null == newType)
|
if (null == newType)
|
||||||
newType = new CardType(CardType.this);
|
newType = new CardType(CardType.this);
|
||||||
|
|
||||||
if (ct.isRemoveCardTypes()) {
|
if (ct.isRemoveCardTypes()) {
|
||||||
|
|||||||
@@ -2456,11 +2456,11 @@ public class AbilityUtils {
|
|||||||
partyTypes.removeAll(chosenParty.keySet());
|
partyTypes.removeAll(chosenParty.keySet());
|
||||||
|
|
||||||
// Here I'm left with just the party types that I haven't selected.
|
// 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);
|
Set<String> types = multityped.get(multi);
|
||||||
types.retainAll(partyTypes);
|
types.retainAll(partyTypes);
|
||||||
|
|
||||||
for(String type : types) {
|
for (String type : types) {
|
||||||
chosenParty.put(type, multi);
|
chosenParty.put(type, multi);
|
||||||
partyTypes.remove(type);
|
partyTypes.remove(type);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -3501,7 +3501,13 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
|
|||||||
if (changedCardTypes.isEmpty() && changedCardTypesCharacterDefining.isEmpty()) {
|
if (changedCardTypes.isEmpty() && changedCardTypesCharacterDefining.isEmpty()) {
|
||||||
return state.getType();
|
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() {
|
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 removeLandTypes, final boolean removeCreatureTypes, final boolean removeArtifactTypes,
|
||||||
final boolean removeEnchantmentTypes,
|
final boolean removeEnchantmentTypes,
|
||||||
final long timestamp, final boolean updateView, final boolean cda) {
|
final long timestamp, final boolean updateView, final boolean cda) {
|
||||||
|
|
||||||
(cda ? changedCardTypesCharacterDefining : changedCardTypes).put(timestamp, new CardChangedType(
|
(cda ? changedCardTypesCharacterDefining : changedCardTypes).put(timestamp, new CardChangedType(
|
||||||
addType, removeType, removeSuperTypes, removeCardTypes, removeSubTypes,
|
addType, removeType, removeSuperTypes, removeCardTypes, removeSubTypes,
|
||||||
removeLandTypes, removeCreatureTypes, removeArtifactTypes, removeEnchantmentTypes));
|
removeLandTypes, removeCreatureTypes, removeArtifactTypes, removeEnchantmentTypes));
|
||||||
|
|||||||
@@ -1428,7 +1428,14 @@ public class CardProperty {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (property.equals("attackingYouOrYourPW")) {
|
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)) {
|
if (!sourceController.equals(defender)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -602,7 +602,7 @@ public class Combat {
|
|||||||
for (Card pw : getDefendingPlaneswalkers()) {
|
for (Card pw : getDefendingPlaneswalkers()) {
|
||||||
if (pw.equals(c)) {
|
if (pw.equals(c)) {
|
||||||
Multimap<GameEntity, AttackingBand> attackerBuffer = ArrayListMultimap.create();
|
Multimap<GameEntity, AttackingBand> attackerBuffer = ArrayListMultimap.create();
|
||||||
Collection<AttackingBand> bands = attackedByBands.get(pw);
|
Collection<AttackingBand> bands = attackedByBands.get(c);
|
||||||
for (AttackingBand abPW : bands) {
|
for (AttackingBand abPW : bands) {
|
||||||
unregisterDefender(c, abPW);
|
unregisterDefender(c, abPW);
|
||||||
// Rule 506.4c workaround to keep creatures in combat
|
// Rule 506.4c workaround to keep creatures in combat
|
||||||
@@ -613,6 +613,7 @@ public class Combat {
|
|||||||
}
|
}
|
||||||
bands.clear();
|
bands.clear();
|
||||||
attackedByBands.putAll(attackerBuffer);
|
attackedByBands.putAll(attackerBuffer);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
Name:Soul Snare
|
Name:Soul Snare
|
||||||
ManaCost:W
|
ManaCost:W
|
||||||
Types:Enchantment
|
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
|
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.
|
Oracle:{W}, Sacrifice Soul Snare: Exile target creature that's attacking you or a planeswalker you control.
|
||||||
|
|||||||
Reference in New Issue
Block a user