diff --git a/.gitattributes b/.gitattributes
index 6f989786377..47e63baca1c 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -17335,6 +17335,7 @@ forge-gui/res/cardsfolder/upcoming/tishana_voice_of_thunder.txt -text
forge-gui/res/cardsfolder/upcoming/tishanas_wayfinder.txt -text
forge-gui/res/cardsfolder/upcoming/tocatli_honor_guard.txt -text
forge-gui/res/cardsfolder/upcoming/treasure_map_treasure_cove.txt -text
+forge-gui/res/cardsfolder/upcoming/trove_of_temptation.txt -text
forge-gui/res/cardsfolder/upcoming/unclaimed_territory.txt -text
forge-gui/res/cardsfolder/upcoming/unfriendly_fire.txt -text
forge-gui/res/cardsfolder/upcoming/vanquishers_banner.txt -text
diff --git a/forge-game/src/main/java/forge/game/combat/AttackConstraints.java b/forge-game/src/main/java/forge/game/combat/AttackConstraints.java
index 55ec882f20b..b0c29a10041 100644
--- a/forge-game/src/main/java/forge/game/combat/AttackConstraints.java
+++ b/forge-game/src/main/java/forge/game/combat/AttackConstraints.java
@@ -1,41 +1,24 @@
package forge.game.combat;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-
-import org.apache.commons.lang3.tuple.Pair;
-
import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
+import com.google.common.collect.*;
import com.google.common.primitives.Ints;
-
import forge.card.MagicColor;
import forge.game.Game;
import forge.game.GameEntity;
-import forge.game.card.Card;
-import forge.game.card.CardCollection;
-import forge.game.card.CardCollectionView;
-import forge.game.card.CardLists;
-import forge.game.card.CardPredicates;
-import forge.game.card.CounterType;
+import forge.game.card.*;
import forge.game.zone.ZoneType;
import forge.util.collect.FCollection;
import forge.util.collect.FCollectionView;
-import forge.util.maps.MapToAmountUtil;
import forge.util.maps.LinkedHashMapToAmount;
import forge.util.maps.MapToAmount;
+import forge.util.maps.MapToAmountUtil;
+import org.apache.commons.lang3.tuple.Pair;
+
+import java.util.*;
+import java.util.Map.Entry;
public class AttackConstraints {
@@ -180,7 +163,9 @@ public class AttackConstraints {
// Now try all others (plus empty attack) and count their violations
final FCollection
*
- * @param player
+ * @param attackingPlayer
* the {@link Player} declaring attack.
* @return a {@link GlobalAttackRestrictions} object.
*/
public static GlobalAttackRestrictions getGlobalRestrictions(final Player attackingPlayer, final FCollectionView possibleDefenders) {
int max = -1;
final MapToAmount defenderMax = new LinkedHashMapToAmount(possibleDefenders.size());
+ final PlayerCollection mustBeAttacked = new PlayerCollection();
final Game game = attackingPlayer.getGame();
if (game.getStaticEffects().getGlobalRuleChange(GlobalRuleChange.onlyOneAttackerATurn)) {
@@ -132,6 +170,14 @@ public class GlobalAttackRestrictions {
}
}
+ for (final Card card : game.getCardsIn(ZoneType.Battlefield)) {
+ if (card.hasKeyword("Each opponent must attack you or a planeswalker you control with at least one creature each combat if able.")) {
+ if (attackingPlayer.isOpponentOf(card.getController())) {
+ mustBeAttacked.add(card.getController());
+ }
+ }
+ }
+
for (final GameEntity defender : possibleDefenders) {
final int defMax = getMaxAttackTo(defender);
if (defMax != -1) {
@@ -142,7 +188,8 @@ public class GlobalAttackRestrictions {
// maximum on each defender, global maximum is sum of these
max = Ints.min(max, defenderMax.countAll());
}
- return new GlobalAttackRestrictions(max, defenderMax);
+
+ return new GlobalAttackRestrictions(max, defenderMax, mustBeAttacked);
}
/**
diff --git a/forge-gui/res/cardsfolder/upcoming/trove_of_temptation.txt b/forge-gui/res/cardsfolder/upcoming/trove_of_temptation.txt
new file mode 100644
index 00000000000..ac04a299955
--- /dev/null
+++ b/forge-gui/res/cardsfolder/upcoming/trove_of_temptation.txt
@@ -0,0 +1,11 @@
+Name:Trove of Temptation
+ManaCost:3 R
+Types:Enchantment
+K:Each opponent must attack you or a planeswalker you control with at least one creature each combat if able.
+T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ DBTreasureToken | TriggerDescription$ At the beginning of your end step, create a colorless Treasure artifact token with "{T}, Sacrifice this artifact: Add one mana of any color to your mana pool.
+# TODO: How many Treasure tokens with different art are there?
+SVar:DBTreasureToken:DB$ Token | TokenAmount$ 1 | TokenName$ Treasure | TokenTypes$ Artifact,Treasure | TokenOwner$ You | TokenColors$ Colorless | TokenImage$ c treasure | TokenAbilities$ ABTreasureMana | TokenAltImages$ c_treasure2,c_treasure3
+SVar:ABTreasureMana:AB$ Mana | Cost$ T Sac<1/CARDNAME> | Produced$ Any | Amount$ 1 | SpellDescription$ Add one mana of any color to your mana pool.
+DeckHas:Ability$Token
+SVar:Picture:http://www.wizards.com/global/images/magic/general/trove_of_temptation.jpg
+Oracle:Each opponent must attack you or a planeswalker you control with at least one creature each combat if able.\nAt the beginning of your end step, create a colorless Treasure artifact token with "{T}, Sacrifice this artifact: Add one mana of any color to your mana pool.