- RemAIDeck update: next iteration.

This commit is contained in:
Agetian
2017-10-07 05:04:05 +00:00
parent fd1f686469
commit cc0fdb302b
23 changed files with 51 additions and 37 deletions

View File

@@ -700,7 +700,7 @@ public class ChangeZoneAi extends SpellAbilityAi {
protected boolean checkPhaseRestrictions(Player ai, SpellAbility sa, PhaseHandler ph) {
String aiLogic = sa.getParamOrDefault("AILogic", "");
if (aiLogic.equals("SurvivalOfTheFittest")) {
if (aiLogic.equals("SurvivalOfTheFittest") || aiLogic.equals("AtOppEOT")) {
return ph.getNextTurn().equals(ai) && ph.is(PhaseType.END_OF_TURN);
}
@@ -809,6 +809,14 @@ public class ChangeZoneAi extends SpellAbilityAi {
if (sa.hasParam("AITgts")) {
list = CardLists.getValidCards(list, sa.getParam("AITgts"), ai, source);
}
if (sa.hasParam("AITgtsOnlyBetterThanSelf")) {
list = CardLists.filter(list, new Predicate<Card>() {
@Override
public boolean apply(Card card) {
return ComputerUtilCard.evaluateCreature(card) > ComputerUtilCard.evaluateCreature(source) + 30;
}
});
}
if (source.isInZone(ZoneType.Hand)) {
list = CardLists.filter(list, Predicates.not(CardPredicates.nameEquals(source.getName()))); // Don't get the same card back.
}
@@ -1381,7 +1389,7 @@ public class ChangeZoneAi extends SpellAbilityAi {
String logic = sa.getParam("AILogic");
if ("NeverBounceItself".equals(logic)) {
Card source = sa.getHostCard();
if (fetchList.contains(source) && fetchList.size() > 1) {
if (fetchList.contains(source) && (fetchList.size() > 1 || sa.getTriggeringAbility().isMandatory())) {
// For cards that should never be bounced back to hand with their own [e.g. triggered] abilities, such as guild lands.
fetchList.remove(source);
}

View File

@@ -537,6 +537,10 @@ public class PumpAi extends PumpAiBase {
}));
}
if (sa.hasParam("AITgts")) {
list = CardLists.getValidCards(list, sa.getParam("AITgts"), sa.getActivatingPlayer(), source);
}
if (list.isEmpty()) {
if (ComputerUtil.activateForCost(sa, ai)) {
return pumpMandatoryTarget(ai, sa);

View File

@@ -1,14 +1,6 @@
package forge.game.card;
import java.util.Collections;
import java.util.List;
import forge.card.CardStateName;
import forge.util.TextUtil;
import org.apache.commons.lang3.StringUtils;
import com.google.common.collect.Iterables;
import forge.card.ColorSet;
import forge.card.MagicColor;
import forge.game.Direction;
@@ -25,7 +17,12 @@ import forge.game.trigger.Trigger;
import forge.game.zone.Zone;
import forge.game.zone.ZoneType;
import forge.util.Expressions;
import forge.util.TextUtil;
import forge.util.collect.FCollectionView;
import org.apache.commons.lang3.StringUtils;
import java.util.Collections;
import java.util.List;
public class CardProperty {
@@ -848,6 +845,14 @@ public class CardProperty {
if (!card.canProduceSameManaTypeWith(source)) {
return false;
}
} else if (property.startsWith("canProduceManaColor")) {
final String color = property.split("canProduceManaColor ")[1];
for (SpellAbility ma : card.getManaAbilities()) {
if (ma.getManaPart().canProduce(MagicColor.toShortString(color))) {
return true;
}
}
return false;
} else if (property.startsWith("sharesNameWith")) {
if (property.equals("sharesNameWith")) {
if (!card.sharesNameWith(source)) {
@@ -1291,6 +1296,10 @@ public class CardProperty {
if (!card.isEquipping()) {
return false;
}
} else if (property.startsWith("notEquipping")) {
if (card.isEquipping()) {
return false;
}
} else if (property.startsWith("token")) {
if (!card.isToken()) {
return false;

View File

@@ -4,6 +4,5 @@ Types:Legendary Creature Human Druid
PT:4/3
A:AB$ Animate | Cost$ G | ValidTgts$ Land | TgtPrompt$ Select target land | Power$ 1 | Toughness$ 1 | Types$ Creature | SpellDescription$ Target land becomes a 1/1 creature until end of turn. It's still a land.
A:AB$ PumpAll | Cost$ 2 G G G | ValidCards$ Creature.YouCtrl | NumAtt$ +3 | NumDef$ +3 | KW$ Trample | SpellDescription$ Creatures you control get +3/+3 and gain trample until end of turn.
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/kamahl_fist_of_krosa.jpg
Oracle:{G}: Target land becomes a 1/1 creature until end of turn. It's still a land.\n{2}{G}{G}{G}: Creatures you control get +3/+3 and gain trample until end of turn.

View File

@@ -2,7 +2,6 @@ Name:Kami of Twisted Reflection
ManaCost:1 U U
Types:Creature Spirit
PT:2/2
A:AB$ ChangeZone | Cost$ Sac<1/CARDNAME> | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | Origin$ Battlefield | Destination$ Hand | SpellDescription$ Return target creature you control to its owner's hand.
SVar:RemAIDeck:True
A:AB$ ChangeZone | Cost$ Sac<1/CARDNAME> | ValidTgts$ Creature.YouCtrl | AITgts$ Creature.Other+YouCtrl | AITgtsOnlyBetterThanSelf$ True | TgtPrompt$ Select target creature you control | Origin$ Battlefield | Destination$ Hand | SpellDescription$ Return target creature you control to its owner's hand.
SVar:Picture:http://www.wizards.com/global/images/magic/general/kami_of_twisted_reflection.jpg
Oracle:Sacrifice Kami of Twisted Reflection: Return target creature you control to its owner's hand.

View File

@@ -4,10 +4,9 @@ Types:Enchantment Aura
K:Enchant creature
A:SP$ Attach | Cost$ 1 G | ValidTgts$ Creature | AILogic$ Pump
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ When CARDNAME enters the battlefield, draw a card.
SVar:TrigDraw:AB$ Draw | Cost$ 0 | NumCards$ 1
SVar:TrigDraw:DB$ Draw | NumCards$ 1
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddAbility$ AnyMana | Description$ Enchanted creature has "{T}: Add one mana of any color to your mana pool."
SVar:AnyMana:AB$ Mana | Cost$ T | Produced$ Any | SpellDescription$ Add one mana of any color to your mana pool.
SVar:NonStackingAttachEffect:True
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/karametras_favor.jpg
Oracle:Enchant creature\nWhen Karametra's Favor enters the battlefield, draw a card.\nEnchanted creature has "{T}: Add one mana of any color to your mana pool."

View File

@@ -5,6 +5,6 @@ K:CARDNAME enters the battlefield tapped.
A:AB$ Mana | Cost$ T | Produced$ C W | SpellDescription$ Add {C}{W} to your mana pool.
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSacUnless | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you return an untapped Plains you control to its owner's hand.
SVar:TrigSacUnless:DB$ Sacrifice | Defined$ Self | UnlessCost$ Return<1/Plains.untapped/untapped Plains> | UnlessPayer$ You
SVar:RemAIDeck:True
SVar:NeedsToPlay:Plains.YouCtrl+inZoneBattlefield+untapped
SVar:Picture:http://www.wizards.com/global/images/magic/general/karoo.jpg
Oracle:Karoo enters the battlefield tapped.\nWhen Karoo enters the battlefield, sacrifice it unless you return an untapped Plains you control to its owner's hand.\n{T}: Add {C}{W} to your mana pool.

View File

@@ -4,9 +4,9 @@ Types:Creature Minotaur Warrior
PT:3/3
K:Cumulative upkeep:FlipCoin<1>:Flip a coin.
T:Mode$ FlippedCoin | ValidPlayer$ You | ValidResult$ Win | TriggerZones$ Battlefield | Execute$ TrigYouDmg | TriggerDescription$ Whenever you win a coin flip, CARDNAME deals 1 damage to target creature or player.
SVar:TrigYouDmg:AB$ DealDamage | Cost$ 0 | NumDmg$ 1 | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player
SVar:TrigYouDmg:DB$ DealDamage | NumDmg$ 1 | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player
T:Mode$ FlippedCoin | ValidPlayer$ You | ValidResult$ Lose | TriggerZones$ Battlefield | Execute$ TrigOppDmg | TriggerDescription$ Whenever you lose a coin flip, CARDNAME deals 1 damage to target creature or player of an opponent's choice.
SVar:TrigOppDmg:AB$ DealDamage | Cost$ 0 | NumDmg$ 1 | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player | TargetingPlayer$ Opponent
SVar:TrigOppDmg:DB$ DealDamage | NumDmg$ 1 | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player | TargetingPlayer$ Opponent
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/karplusan_minotaur.jpg
Oracle:Cumulative upkeep—Flip a coin. (At the beginning of your upkeep, put an age counter on this permanent, then sacrifice it unless you pay its upkeep cost for each age counter on it.)\nWhenever you win a coin flip, Karplusan Minotaur deals 1 damage to target creature or player.\nWhenever you lose a coin flip, Karplusan Minotaur deals 1 damage to target creature or player of an opponent's choice.

View File

@@ -2,7 +2,7 @@ Name:Kazuul's Toll Collector
ManaCost:2 R
Types:Creature Ogre Warrior
PT:3/2
A:AB$ Pump | Cost$ 0 | ValidTgts$ Equipment.YouCtrl | TgtPrompt$ Select target Equipment you control | SubAbility$ KazuulAttach | SorcerySpeed$ True | StackDescription$ None | SpellDescription$ Attach target Equipment you control to Kazuul's Toll Collector.
A:AB$ Pump | Cost$ 0 | ValidTgts$ Equipment.YouCtrl | AITgts$ Equipment.YouCtrl+notEquipping | TgtPrompt$ Select target Equipment you control | SubAbility$ KazuulAttach | SorcerySpeed$ True | StackDescription$ None | SpellDescription$ Attach target Equipment you control to Kazuul's Toll Collector.
SVar:KazuulAttach:DB$ Attach | Object$ ParentTarget | Defined$ Self
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/kazuuls_toll_collector.jpg

View File

@@ -3,6 +3,6 @@ ManaCost:2 U
Types:Instant
A:SP$ Draw | Cost$ 2 U | NumCards$ X | References$ X | SpellDescription$ Draw a card for each attacking creature.
SVar:X:Count$Valid Creature.attacking
SVar:RemAIDeck:True
SVar:NeedsToPlay:Creature.attacking
SVar:Picture:http://www.wizards.com/global/images/magic/general/keep_watch.jpg
Oracle:Draw a card for each attacking creature.

View File

@@ -3,7 +3,6 @@ ManaCost:2 U
Types:Creature Bird Wizard
PT:1/2
K:Flying
A:AB$ ChangeZone | Cost$ T tapXType<2/Bird> | ValidTgts$ Permanent | TgtPrompt$ Select target permanent | Origin$ Battlefield | Destination$ Hand | SpellDescription$ Return target permanent to its owner's hand.
SVar:RemAIDeck:True
A:AB$ ChangeZone | Cost$ T tapXType<2/Bird> | ValidTgts$ Permanent | TgtPrompt$ Select target permanent | Origin$ Battlefield | Destination$ Hand | AILogic$ AtOppEOT | SpellDescription$ Return target permanent to its owner's hand.
SVar:Picture:http://www.wizards.com/global/images/magic/general/keeper_of_the_nine_gales.jpg
Oracle:Flying\n{T}, Tap two untapped Birds you control: Return target permanent to its owner's hand.

View File

@@ -4,6 +4,5 @@ Types:Land
A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C} to your mana pool.
A:AB$ Pump | Cost$ X R G T | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ +X | KW$ Trample | References$ X | SpellDescription$ Target creature gets +X/+0 and gains trample until end of turn.
SVar:X:Count$xPaid
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/kessig_wolf_run.jpg
Oracle:{T}: Add {C} to your mana pool.\n{X}{R}{G}, {T}: Target creature gets +X/+0 and gains trample until end of turn.

View File

@@ -7,6 +7,6 @@ SVar:TrigChangZone:AB$ ChangeZone | Cost$ 2 B | ChangeType$ Creature.YouCtrl | O
SVar:DBUnearthed:DB$ Animate | Defined$ Remembered | Keywords$ Flying & Trample & Haste | LeaveBattlefield$ Exile | sVars$ KheruMustAttack | Permanent$ True | SubAbility$ DBCleanup | AtEOT$ Exile | StackDescription$ It gains flying, trample, and haste. Exile that card at the beginning of your next end step. If it would leave the battlefield, exile it instead of putting it anywhere else.
SVar:KheruMustAttack:SVar:MustAttack:True
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:RemAIDeck:True
SVar:RemRandomDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/kheru_lich_lord.jpg
Oracle:At the beginning of your upkeep, you may pay {2}{B}. If you do, return a creature card at random from your graveyard to the battlefield. It gains flying, trample, and haste. Exile that card at the beginning of your next end step. If it would leave the battlefield, exile it instead of putting it anywhere else.

View File

@@ -5,7 +5,8 @@ A:SP$ ChooseType | Cost$ 5 G G | Defined$ You | Type$ Creature | SubAbility$ DBD
SVar:DBDigUntil:DB$ DigUntil | Amount$ X | References$ X | ConditionCheckSVar$ X | ConditionSVarCompare$ GE1 | Valid$ Creature.ChosenType+YouOwn | ValidDescription$ creature with chosen type | RevealedDestination$ Library | RevealedLibraryPosition$ -1 | FoundDestination$ Battlefield | SubAbility$ DBShuffle
SVar:DBShuffle:DB$ Shuffle | Defined$ You
SVar:X:Count$Valid Creature.ChosenType+YouCtrl
SVar:RemAIDeck:True
SVar:NeedsToPlay:Creature
SVar:RemRandomDeck:True
#TODO: This could benefit from something like "Creature.YouCtrl+sharesCreatureTypeWithAnotherCreature" (doesn't exist in code yet)
SVar:NeedsToPlay:Creature.YouCtrl+inZoneBattlefield
SVar:Picture:http://www.wizards.com/global/images/magic/general/kindred_summons.jpg
Oracle:Choose a creature type. Reveal cards from the top of your library until you reveal X creature cards of the chosen type, where X is the number of creatures you control of that type. Put those cards onto the battlefield, then shuffle the rest of the revealed cards into your library.

View File

@@ -3,6 +3,5 @@ ManaCost:W
Types:Creature Fox Cleric
PT:0/1
A:AB$ Tap | Cost$ T | ValidTgts$ Spirit | TgtPrompt$ Select target Spirit | SpellDescription$ Tap target Spirit.
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/kitsune_diviner.jpg
Oracle:{T}: Tap target Spirit.

View File

@@ -7,6 +7,5 @@ SVar:EliteGuardEffect:DB$ Effect | Name$ Elite Guard Escort | Triggers$ LostTheG
SVar:LostTheGuarded:Mode$ ChangesZone | ValidCard$ Card.IsRemembered | Origin$ Battlefield | Destination$ Any | Execute$ EliteDefence | TriggerDescription$ When the targeted creature leaves the battlefield this turn, sacrifice Kjeldoran Elite Guard.
SVar:EliteDefence:DB$ SacrificeAll | Defined$ Imprinted | SubAbility$ ExileEffect
SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/kjeldoran_elite_guard.jpg
Oracle:{T}: Target creature gets +2/+2 until end of turn. When that creature leaves the battlefield this turn, sacrifice Kjeldoran Elite Guard. Activate this ability only during combat.

View File

@@ -7,6 +7,5 @@ SVar:KjeldoranGuardEffect:DB$ Effect | Name$ Kjeldoran Guard Effect | Triggers$
SVar:TrigSacGuard:Mode$ ChangesZone | ValidCard$ Card.IsRemembered | Origin$ Battlefield | Destination$ Any | Execute$ EliteDefence | TriggerDescription$ When the targeted creature leaves the battlefield this turn, sacrifice Kjeldoran Elite Guard.
SVar:EliteDefence:DB$ SacrificeAll | Defined$ Imprinted | SubAbility$ ExileEffect
SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/kjeldoran_guard.jpg
Oracle:{T}: Target creature gets +1/+1 until end of turn. When that creature leaves the battlefield this turn, sacrifice Kjeldoran Guard. Activate this ability only during combat and only if defending player controls no snow lands.

View File

@@ -4,7 +4,5 @@ Types:Creature Human Knight
PT:2/2
K:First Strike
A:AB$ Protection | Cost$ W W | Defined$ Self | Gains$ Choice | Choices$ AnyColor | SpellDescription$ CARDNAME gains protection from the color of your choice until end of turn.
#Computer isn't very good at picking a color to get protection from yet
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/knight_of_dawn.jpg
Oracle:First strike\n{W}{W}: Knight of Dawn gains protection from the color of your choice until end of turn.

View File

@@ -3,6 +3,6 @@ ManaCost:no cost
Types:Legendary Land
A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C} to your mana pool.
A:AB$ Pump | Cost$ 1 W T | KW$ Prevent all combat damage that would be dealt by CARDNAME. | IsCurse$ True | ValidTgts$ Creature.attacking | TgtPrompt$ Select target attacking creature | SpellDescription$ Prevent all combat damage that would be dealt by target attacking creature this turn.
SVar:RemAIDeck:True
DeckNeeds:Color$White
SVar:Picture:http://www.wizards.com/global/images/magic/general/kor_haven.jpg
Oracle:{T}: Add {C} to your mana pool.\n{1}{W}, {T}: Prevent all combat damage that would be dealt by target attacking creature this turn.

View File

@@ -4,7 +4,7 @@ Types:Creature Kor Soldier
PT:2/3
K:Flying
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Self | Execute$ TrigChange | TriggerDescription$ When CARDNAME enters the battlefield, return a permanent you control to its owner's hand.
SVar:TrigChange:AB$ChangeZone | Origin$ Battlefield | Destination$ Hand | Cost$ 0 | Hidden$ True | Mandatory$ True | ChangeType$ Permanent.YouCtrl
SVar:RemAIDeck:True
SVar:TrigChange:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | Hidden$ True | Mandatory$ True | ChangeType$ Permanent.YouCtrl | AIlogic$ NeverBounceItself
SVar:NeedsToPlay:Creature.YouCtrl+cmcLE2+inZoneBattlefield,Permanent.nonLand+YouCtrl+cmcLE1
SVar:Picture:http://www.wizards.com/global/images/magic/general/kor_skyfisher.jpg
Oracle:Flying\nWhen Kor Skyfisher enters the battlefield, return a permanent you control to its owner's hand.

View File

@@ -2,6 +2,7 @@ Name:Kuldotha Rebirth
ManaCost:R
Types:Sorcery
A:SP$ Token | Cost$ R Sac<1/Artifact> | TokenAmount$ 3 | TokenOwner$ You | TokenName$ Goblin | TokenTypes$ Creature,Goblin | TokenColors$ Red | TokenPower$ 1 | TokenToughness$ 1 | TokenImage$ r 1 1 goblin SOM | SpellDescription$ Create three 1/1 red Goblin creature tokens.
SVar:RemAIDeck:True
SVar:RemRandomDeck:True
SVar:AIPreference:SacCost$Artifact.token,Artifact.cmcEQ1
SVar:Picture:http://www.wizards.com/global/images/magic/general/kuldotha_rebirth.jpg
Oracle:As an additional cost to cast Kuldotha Rebirth, sacrifice an artifact.\nCreate three 1/1 red Goblin creature tokens.

View File

@@ -3,7 +3,9 @@ ManaCost:6 B B B
Types:Legendary Creature Demon Spirit
PT:9/9
K:UpkeepCost:B B B B
#TODO: the AI can be improved for this, it'll currently only use it to finish off creatures with toughness 1
A:AB$ Pump | Cost$ PayLife<1> | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ -1 | NumDef$ -1 | IsCurse$ True | SpellDescription$ Target creature gets -1/-1 until end of turn.
SVar:RemAIDeck:True
SVar:NeedsToPlayVar:Z GE4
SVar:Z:Count$Valid Card.YouCtrl+inZoneBattlefield+canProduceManaColor Black
SVar:Picture:http://www.wizards.com/global/images/magic/general/kuro_pitlord.jpg
Oracle:At the beginning of your upkeep, sacrifice Kuro, Pitlord unless you pay {B}{B}{B}{B}.\nPay 1 life: Target creature gets -1/-1 until end of turn.

View File

@@ -28,6 +28,5 @@ A:AB$ Pump | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | ValidTgts$ Creat
SVar:DBUntap:DB$ Untap | Defined$ Targeted
A:AB$ Animate | Cost$ AddCounter<0/LOYALTY> | Defined$ Self | Power$ 4 | Toughness$ 4 | Types$ Creature,Human,Soldier | Keywords$ Indestructible | SubAbility$ DBPrevent | Planeswalker$ True | Ultimate$ True | SpellDescription$ Until end of turn, CARDNAME becomes a 4/4 Human Soldier creature with indestructible that's still a planeswalker. Prevent all damage that would be dealt to him this turn.
SVar:DBPrevent:DB$ Pump | Defined$ Self | KW$ Prevent all damage that would be dealt to CARDNAME.
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/gideon_battle_forged.jpg
Oracle:[+2]: Up to one target creature an opponent controls attacks Gideon, Battle-Forged during its controller's next turn if able.\n[+1]: Until your next turn, target creature gains indestructible. Untap that creature.\n[0]: Until end of turn, Gideon, Battle-Forged becomes a 4/4 Human Soldier creature with indestructible that's still a planeswalker. Prevent all damage that would be dealt to him this turn.