diff --git a/.gitattributes b/.gitattributes index e8ca8fedd5d..cdcaa9bc2f6 100644 --- a/.gitattributes +++ b/.gitattributes @@ -12298,6 +12298,7 @@ res/cardsfolder/x/xira_arien.txt svneol=native#text/plain res/cardsfolder/x/xun_yu_wei_advisor.txt svneol=native#text/plain res/cardsfolder/y/yamabushis_flame.txt svneol=native#text/plain res/cardsfolder/y/yamabushis_storm.txt -text +res/cardsfolder/y/yare.txt -text res/cardsfolder/y/yavimaya_ancients.txt svneol=native#text/plain res/cardsfolder/y/yavimaya_ants.txt svneol=native#text/plain res/cardsfolder/y/yavimaya_barbarian.txt svneol=native#text/plain diff --git a/res/cardsfolder/y/yare.txt b/res/cardsfolder/y/yare.txt new file mode 100644 index 00000000000..448e1cde04c --- /dev/null +++ b/res/cardsfolder/y/yare.txt @@ -0,0 +1,8 @@ +Name:Yare +ManaCost:2 W +Types:Instant +A:SP$ Pump | Cost$ 2 W | ValidTgts$ Creature.DefenderCtrl | TgtPrompt$ Select target creature defending player controls | NumAtt$ 3 | KW$ HIDDEN CARDNAME can block an additional creature. & HIDDEN CARDNAME can block an additional creature. | SpellDescription$ Target creature defending player controls gets +3/+0 until end of turn. That creature can block up to two additional creatures this turn. +SVar:RemAIDeck:True +SVar:Picture:http://www.wizards.com/global/images/magic/general/yare.jpg +Oracle:Target creature defending player controls gets +3/+0 until end of turn. That creature can block up to two additional creatures this turn. +SetInfo:MIR Rare \ No newline at end of file diff --git a/src/main/java/forge/Card.java b/src/main/java/forge/Card.java index 23c9a1429b5..68193b5a34d 100644 --- a/src/main/java/forge/Card.java +++ b/src/main/java/forge/Card.java @@ -6358,12 +6358,10 @@ public class Card extends GameEntity implements Comparable { return false; } } else if (property.startsWith("DefenderCtrl")) { - Combat combat = Singletons.getModel().getGame().getCombat(); if (!Singletons.getModel().getGame().getPhaseHandler().inCombat()) { return false; } - Player defender = combat.getDefendingPlayerRelatedTo(source); - if (!this.getController().equals(defender)) { + if (!Singletons.getModel().getGame().getCombat().getDefendingPlayerRelatedTo(source).contains(this.getController())) { return false; } } else if (property.startsWith("EnchantedPlayerCtrl")) { diff --git a/src/main/java/forge/card/ability/AbilityUtils.java b/src/main/java/forge/card/ability/AbilityUtils.java index 380734a7365..61507715edb 100644 --- a/src/main/java/forge/card/ability/AbilityUtils.java +++ b/src/main/java/forge/card/ability/AbilityUtils.java @@ -855,10 +855,7 @@ public class AbilityUtils { players.add(p); } } else if (defined.equals("DefendingPlayer")) { - final Player p = Singletons.getModel().getGame().getCombat().getDefendingPlayerRelatedTo(card); - if (!players.contains(p)) { - players.add(p); - } + players.addAll(Singletons.getModel().getGame().getCombat().getDefendingPlayerRelatedTo(card)); } else if (defined.equals("ChosenPlayer")) { final Player p = card.getChosenPlayer(); if (!players.contains(p)) { diff --git a/src/main/java/forge/game/phase/Combat.java b/src/main/java/forge/game/phase/Combat.java index e593c54be6b..0feb0369a91 100644 --- a/src/main/java/forge/game/phase/Combat.java +++ b/src/main/java/forge/game/phase/Combat.java @@ -546,7 +546,8 @@ public class Combat { * a {@link forge.Card} object. * @return a {@link forge.Player} object. */ - public Player getDefendingPlayerRelatedTo(final Card source) { + public List getDefendingPlayerRelatedTo(final Card source) { + List players = new ArrayList(); Card attacker = source; if (source.isAura()) { attacker = source.getEnchantingCard(); @@ -554,13 +555,21 @@ public class Combat { attacker = source.getEquippingCard(); } + // return the corresponding defender Player defender = getDefenderPlayerByAttacker(attacker); - if (null == defender) { // too bad, have to choose now - // don't have ui, cannot choose - have to getOpponent - // that's inaccurate. That opponent may be not even a defender - defender = source.getController().getOpponent(); + if (null != defender) { + players.add(defender); + return players; } - return defender; + + // return all defenders + List defenders = this.getDefenders(); + for (GameEntity ge : defenders) { + if (ge instanceof Player) { + players.add((Player) ge); + } + } + return players; } /** diff --git a/src/main/java/forge/game/phase/CombatUtil.java b/src/main/java/forge/game/phase/CombatUtil.java index 0ada189912e..151e7cfd6ed 100644 --- a/src/main/java/forge/game/phase/CombatUtil.java +++ b/src/main/java/forge/game/phase/CombatUtil.java @@ -278,7 +278,10 @@ public class CombatUtil { } String valid = StringUtils.join(walkTypes, ","); - final Player defendingPlayer = Singletons.getModel().getGame().getCombat().getDefendingPlayerRelatedTo(attacker); + Player defendingPlayer = attacker.getController().getOpponent(); + if (attacker.isAttacking()) { + defendingPlayer = Singletons.getModel().getGame().getCombat().getDefendingPlayerRelatedTo(attacker).get(0); + } List defendingLands = defendingPlayer.getCardsIn(ZoneType.Battlefield); for (Card c : defendingLands) { if (c.isValid(valid.split(","), defendingPlayer, attacker)) { @@ -1225,7 +1228,7 @@ public class CombatUtil { @Override public void resolve() { this.api = ApiType.Sacrifice; - final Player opponent = Singletons.getModel().getGame().getCombat().getDefendingPlayerRelatedTo(c); + final Player opponent = Singletons.getModel().getGame().getCombat().getDefendingPlayerRelatedTo(c).get(0); //List list = AbilityUtils.filterListByType(opponent.getCardsIn(ZoneType.Battlefield), "Permanent", this); final List list = opponent.getCardsIn(ZoneType.Battlefield); List toSac = opponent.getController().choosePermanentsToSacrifice(list, a, this, false, false);