diff --git a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java index 135a52ea213..f02787886e6 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -1795,7 +1795,7 @@ public class AbilityUtils { return doXMath(calculateAmount(c,sq[adamant ? 2 : 3], ctb), expr, c, ctb); } - if (l[0].startsWith("LastStateBattlefield")) { + if (sq[0].startsWith("LastStateBattlefield")) { final String[] k = l[0].split(" "); CardCollectionView list = null; if (sa.getLastStateBattlefield() != null) { @@ -1811,7 +1811,7 @@ public class AbilityUtils { } } - if (l[0].startsWith("LastStateGraveyard")) { + if (sq[0].startsWith("LastStateGraveyard")) { final String[] k = l[0].split(" "); CardCollectionView list = null; if (sa.getLastStateGraveyard() != null) { @@ -1953,7 +1953,7 @@ public class AbilityUtils { if (sq[0].startsWith("AltCost")) { return doXMath(calculateAmount(c, sq[c.isOptionalCostPaid(OptionalCost.AltCost) ? 1 : 2], ctb), expr, c, ctb); } - if (l[0].equals("ColorsColorIdentity")) { + if (sq[0].equals("ColorsColorIdentity")) { return doXMath(c.getController().getCommanderColorID().countColors(), expr, c, ctb); } @@ -2098,11 +2098,11 @@ public class AbilityUtils { return doXMath(ce == null ? 0 : ce.getCMC(), expr, c, ctb); } - if (l[0].startsWith("RememberedSize")) { + if (sq[0].startsWith("RememberedSize")) { return doXMath(c.getRememberedCount(), expr, c, ctb); } - if (l[0].startsWith("RememberedNumber")) { + if (sq[0].startsWith("RememberedNumber")) { int num = 0; for (final Object o : c.getRemembered()) { if (o instanceof Integer) { @@ -2112,7 +2112,7 @@ public class AbilityUtils { return doXMath(num, expr, c, ctb); } - if (l[0].startsWith("RememberedWithSharedCardType")) { + if (sq[0].startsWith("RememberedWithSharedCardType")) { int maxNum = 1; for (final Object o : c.getRemembered()) { if (o instanceof Card) { @@ -2212,7 +2212,7 @@ public class AbilityUtils { return doXMath(getCardTypesFromList(player.getCardsIn(ZoneType.listValueOf(sq[1]))), expr, c, ctb); } - if (l[0].startsWith("CommanderCastFromCommandZone")) { + if (sq[0].startsWith("CommanderCastFromCommandZone")) { // only used by Opal Palace, and it does add the trigger to the card return doXMath(player.getCommanderCast(c), expr, c, ctb); } @@ -2266,7 +2266,7 @@ public class AbilityUtils { return doXMath(player.getMaxOpponentAssignedDamage(), expr, c, ctb); } - if (sq[0].contains("YourDamageSourcesThisTurn")) { + if (sq[0].startsWith("YourDamageSourcesThisTurn")) { Iterable allSrc = player.getAssignedDamageSources(); String restriction = sq[0].split(" ")[1]; return doXMath(CardLists.getValidCardCount(allSrc, restriction, player, c, ctb), expr, c, ctb); @@ -2276,7 +2276,7 @@ public class AbilityUtils { return doXMath(player.getTurn(), expr, c, ctb); } - if (sq[0].contains("OppTypesInGrave")) { + if (sq[0].startsWith("OppTypesInGrave")) { final PlayerCollection opponents = player.getOpponents(); CardCollection oppCards = new CardCollection(); oppCards.addAll(opponents.getCardsIn(ZoneType.Graveyard)); @@ -2290,7 +2290,7 @@ public class AbilityUtils { return doXMath(cmc, expr, c, ctb); } - if (l[0].contains("ColorsCtrl")) { + if (sq[0].startsWith("ColorsCtrl")) { final String restriction = l[0].substring(11); final String[] rest = restriction.split(","); final CardCollection list = CardLists.getValidCards(player.getCardsIn(ZoneType.Battlefield), rest, player, c, ctb); @@ -2302,19 +2302,19 @@ public class AbilityUtils { } // Count$AttackersDeclared - if (sq[0].contains("AttackersDeclared")) { + if (sq[0].startsWith("AttackersDeclared")) { return doXMath(player.getAttackersDeclaredThisTurn(), expr, c, ctb); } // Count$CardAttackedThisTurn - if (sq[0].contains("CreaturesAttackedThisTurn")) { + if (sq[0].startsWith("CreaturesAttackedThisTurn")) { final String[] workingCopy = l[0].split(" ", 2); final String validFilter = workingCopy[1]; return doXMath(CardLists.getValidCardCount(player.getCreaturesAttackedThisTurn(), validFilter, player, c, ctb), expr, c, ctb); } // Manapool - if (l[0].startsWith("ManaPool")) { + if (sq[0].startsWith("ManaPool")) { final String color = l[0].split(":")[1]; int v = 0; if (color.equals("All")) { @@ -2339,7 +2339,7 @@ public class AbilityUtils { } //SacrificedThisTurn - if (l[0].startsWith("SacrificedThisTurn")) { + if (sq[0].startsWith("SacrificedThisTurn")) { CardCollectionView list = player.getSacrificedThisTurn(); if (l[0].contains(" ")) { String[] lparts = l[0].split(" ", 2); @@ -2452,7 +2452,7 @@ public class AbilityUtils { return doXMath(calculateAmount(c, sq[res.size() > 0 ? 1 : 2], ctb), expr, c, ctb); } - if (l[0].contains("CreatureType")) { + if (sq[0].startsWith("CreatureType")) { String[] sqparts = l[0].split(" ", 2); final String[] rest = sqparts[1].split(","); @@ -2472,7 +2472,7 @@ public class AbilityUtils { } // Count$Chroma. - if (sq[0].contains("Chroma")) { + if (sq[0].startsWith("Chroma")) { ZoneType sourceZone = sq[0].contains("ChromaInGrave") ? ZoneType.Graveyard : ZoneType.Battlefield; final CardCollectionView cards; if (sq[0].contains("ChromaSource")) { // Runs Chroma for passed in Source card @@ -2515,7 +2515,7 @@ public class AbilityUtils { return doXMath(game.getStack().getSpellsCastThisTurn().size() - 1, expr, c, ctb); } - if (l[0].startsWith("RolledThisTurn")) { + if (sq[0].startsWith("RolledThisTurn")) { return game.getPhaseHandler().getPlanarDiceRolledthisTurn(); } @@ -2542,7 +2542,7 @@ public class AbilityUtils { // Count$SumPower_valid - if (l[0].contains("SumPower")) { + if (sq[0].startsWith("SumPower")) { final String[] restrictions = l[0].split("_"); final String[] rest = restrictions[1].split(","); CardCollection filteredCards = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield), rest, player, c, ctb); @@ -2550,7 +2550,7 @@ public class AbilityUtils { } // Count$SumCMC_valid - if (sq[0].contains("SumCMC")) { + if (sq[0].startsWith("SumCMC")) { ZoneType zone = ZoneType.Battlefield; //graveyard support for Inferno Project (may need other zones or multi-zone in future) if (sq[0].contains("Graveyard")) @@ -2566,7 +2566,7 @@ public class AbilityUtils { // Count$TotalCounters._ - if (sq[0].contains("TotalCounters")) { + if (sq[0].startsWith("TotalCounters")) { final String[] restrictions = l[0].split("_"); final CounterType cType = CounterType.getType(restrictions[1]); final String[] validFilter = restrictions[2].split(","); @@ -2581,7 +2581,7 @@ public class AbilityUtils { // Count$ThisTurnCast // Count$LastTurnCast - if (sq[0].contains("ThisTurnCast") || sq[0].contains("LastTurnCast")) { + if (sq[0].startsWith("ThisTurnCast") || sq[0].startsWith("LastTurnCast")) { final String[] workingCopy = l[0].split("_"); final String validFilter = workingCopy[1]; @@ -2597,7 +2597,7 @@ public class AbilityUtils { } // Count$ThisTurnEntered [from ] - if (sq[0].contains("ThisTurnEntered")) { + if (sq[0].startsWith("ThisTurnEntered")) { final String[] workingCopy = l[0].split("_"); ZoneType destination = ZoneType.smartValueOf(workingCopy[1]); @@ -2613,7 +2613,7 @@ public class AbilityUtils { } // Count$LastTurnEntered [from ] - if (sq[0].contains("LastTurnEntered")) { + if (sq[0].startsWith("LastTurnEntered")) { final String[] workingCopy = l[0].split("_"); ZoneType destination = ZoneType.smartValueOf(workingCopy[1]); @@ -2628,7 +2628,7 @@ public class AbilityUtils { return doXMath(res.size(), expr, c, ctb); } - if (l[0].startsWith("CountersAddedThisTurn")) { + if (sq[0].startsWith("CountersAddedThisTurn")) { final String[] parts = l[0].split(" "); CounterType cType = CounterType.getType(parts[1]); @@ -2636,7 +2636,7 @@ public class AbilityUtils { } // count valid cards in any specified zone/s - if (l[0].startsWith("Valid")) { + if (sq[0].startsWith("Valid")) { String[] lparts = l[0].split(" ", 2); final CardCollectionView cardsInZones = lparts[0].length() > 5 @@ -2646,7 +2646,7 @@ public class AbilityUtils { return doXMath(CardLists.getValidCardCount(cardsInZones, lparts[1], player, c, ctb), expr, c, ctb); } - if (l[0].startsWith("GreatestPower")) { + if (sq[0].startsWith("GreatestPower")) { final String[] lparts = l[0].split("_", 2); final String[] rest = lparts[1].split(","); final CardCollectionView cardsInZones = lparts[0].length() > 13 @@ -2662,7 +2662,7 @@ public class AbilityUtils { return highest; } - if (l[0].startsWith("GreatestToughness_")) { + if (sq[0].startsWith("GreatestToughness_")) { final String restriction = l[0].substring(18); final String[] rest = restriction.split(","); CardCollection list = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield), rest, player, c, ctb); @@ -2675,7 +2675,7 @@ public class AbilityUtils { return highest; } - if (l[0].startsWith("HighestCMC_")) { + if (sq[0].startsWith("HighestCMC_")) { final String restriction = l[0].substring(11); final String[] rest = restriction.split(","); CardCollection list = CardLists.getValidCards(game.getCardsInGame(), rest, player, c, ctb); @@ -2689,7 +2689,7 @@ public class AbilityUtils { return highest; } - if (l[0].startsWith("MostCardName")) { + if (sq[0].startsWith("MostCardName")) { String[] lparts = l[0].split(" ", 2); final String[] rest = lparts[1].split(","); @@ -2714,7 +2714,7 @@ public class AbilityUtils { return max; } - if (l[0].startsWith("DifferentCardNames_")) { + if (sq[0].startsWith("DifferentCardNames_")) { final List crdname = Lists.newArrayList(); final String restriction = l[0].substring(19); final String[] rest = restriction.split(","); @@ -2729,7 +2729,7 @@ public class AbilityUtils { return doXMath(crdname.size(), expr, c, ctb); } - if (l[0].startsWith("DifferentPower_")) { + if (sq[0].startsWith("DifferentPower_")) { final List powers = Lists.newArrayList(); final String restriction = l[0].substring(15); final String[] rest = restriction.split(","); @@ -2744,20 +2744,20 @@ public class AbilityUtils { } - if (l[0].startsWith("MostProminentCreatureType")) { + if (sq[0].startsWith("MostProminentCreatureType")) { String restriction = l[0].split(" ")[1]; CardCollection list = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield), restriction, player, c, ctb); return doXMath(CardFactoryUtil.getMostProminentCreatureTypeSize(list), expr, c, ctb); } - if (l[0].startsWith("SecondMostProminentColor")) { + if (sq[0].startsWith("SecondMostProminentColor")) { String restriction = l[0].split(" ")[1]; CardCollection list = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield), restriction, player, c, ctb); int[] colorSize = CardFactoryUtil.SortColorsFromList(list); return doXMath(colorSize[colorSize.length - 2], expr, c, ctb); } - if (l[0].contains("ColorsCtrl")) { + if (sq[0].startsWith("ColorsCtrl")) { final String restriction = l[0].substring(11); final String[] rest = restriction.split(","); final CardCollection list = CardLists.getValidCards(player.getCardsIn(ZoneType.Battlefield), rest, player, c, ctb); @@ -2768,7 +2768,7 @@ public class AbilityUtils { return doXMath(ColorSet.fromMask(n).countColors(), expr, c, ctb); } - if (l[0].contains("CreatureType")) { + if (sq[0].startsWith("CreatureType")) { String[] sqparts = l[0].split(" ", 2); final String[] rest = sqparts[1].split(","); @@ -2789,7 +2789,7 @@ public class AbilityUtils { CardCollectionView someCards = getCardListForXCount(c, player, sq, ctb); // 1/10 - Count$MaxCMCYouCtrl - if (sq[0].contains("MaxCMC")) { + if (sq[0].startsWith("MaxCMC")) { int mmc = Aggregates.max(someCards, CardPredicates.Accessors.fnGetCmc); return doXMath(mmc, expr, c, ctb); } diff --git a/forge-gui/res/cardsfolder/s/shared_animosity.txt b/forge-gui/res/cardsfolder/s/shared_animosity.txt index 136d086f9f8..123b32ac746 100644 --- a/forge-gui/res/cardsfolder/s/shared_animosity.txt +++ b/forge-gui/res/cardsfolder/s/shared_animosity.txt @@ -2,9 +2,7 @@ Name:Shared Animosity ManaCost:2 R Types:Enchantment T:Mode$ Attacks | ValidCard$ Creature.YouCtrl | TriggerZones$ Battlefield | Execute$ AnimosityPump | TriggerDescription$ Whenever a creature you control attacks, it gets +1/+0 until end of turn for each other attacking creature that shares a creature type with it. -SVar:AnimosityPump:DB$ Pump | RememberObjects$ TriggeredAttacker | SubAbility$ AnimosityPump2 -SVar:AnimosityPump2:DB$ Pump | Defined$ Remembered | NumAtt$ X | SubAbility$ DBCleanup -SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True -SVar:X:Count$Valid Creature.attacking+IsNotRemembered+sharesCreatureTypeWith Remembered +SVar:AnimosityPump:DB$ Pump | Defined$ TriggeredAttacker | NumAtt$ X +SVar:X:Count$Valid Creature.attacking+NotTriggeredAttacker+sharesCreatureTypeWith TriggeredAttacker AI:RemoveDeck:Random Oracle:Whenever a creature you control attacks, it gets +1/+0 until end of turn for each other attacking creature that shares a creature type with it.