Skip to content

Commit

Permalink
confirmAction: add Map Params
Browse files Browse the repository at this point in the history
  • Loading branch information
Hanmac committed Jun 22, 2022
1 parent a812c3b commit e92198c
Show file tree
Hide file tree
Showing 85 changed files with 142 additions and 105 deletions.
4 changes: 2 additions & 2 deletions forge-ai/src/main/java/forge/ai/AiController.java
Original file line number Diff line number Diff line change
Expand Up @@ -1326,7 +1326,7 @@ public CardCollection getCardsToDiscard(int min, final int max, final CardCollec
return discardList;
}

public boolean confirmAction(SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
if (mode == PlayerActionConfirmMode.AlternativeDamageAssignment) {
return true;
}
Expand All @@ -1339,7 +1339,7 @@ public boolean confirmAction(SpellAbility sa, PlayerActionConfirmMode mode, Stri
mode);
throw new IllegalArgumentException(exMsg);
}
return SpellApiToAi.Converter.get(api).confirmAction(player, sa, mode, message);
return SpellApiToAi.Converter.get(api).confirmAction(player, sa, mode, message, null);
}

public boolean confirmBidAction(SpellAbility sa, PlayerActionConfirmMode mode, String message, int bid, Player winner) {
Expand Down
4 changes: 2 additions & 2 deletions forge-ai/src/main/java/forge/ai/PlayerControllerAi.java
Original file line number Diff line number Diff line change
Expand Up @@ -269,8 +269,8 @@ public SpellAbility chooseSingleSpellForEffect(List<SpellAbility> spells, SpellA
}

@Override
public boolean confirmAction(SpellAbility sa, PlayerActionConfirmMode mode, String message) {
return getAi().confirmAction(sa, mode, message);
public boolean confirmAction(SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
return getAi().confirmAction(sa, mode, message, params);
}

@Override
Expand Down
2 changes: 1 addition & 1 deletion forge-ai/src/main/java/forge/ai/SpellAbilityAi.java
Original file line number Diff line number Diff line change
Expand Up @@ -305,7 +305,7 @@ public boolean chkDrawbackWithSubs(Player aiPlayer, AbilitySub ab) {
return SpellApiToAi.Converter.get(ab.getApi()).chkAIDrawback(ab, aiPlayer) && (subAb == null || chkDrawbackWithSubs(aiPlayer, subAb));
}

public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
System.err.println("Warning: default (ie. inherited from base class) implementation of confirmAction is used by " + sa.getHostCard().getName() + " for " + this.getClass().getName() + ". Consider declaring an overloaded method");
return true;
}
Expand Down
4 changes: 3 additions & 1 deletion forge-ai/src/main/java/forge/ai/ability/AlwaysPlayAi.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package forge.ai.ability;


import java.util.Map;

import forge.ai.SpellAbilityAi;
import forge.game.player.Player;
import forge.game.player.PlayerActionConfirmMode;
Expand All @@ -16,7 +18,7 @@ protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) {
}

@Override
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
return true;
}
}
2 changes: 1 addition & 1 deletion forge-ai/src/main/java/forge/ai/ability/AmassAi.java
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandator
}

@Override
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
return true;
}

Expand Down
2 changes: 1 addition & 1 deletion forge-ai/src/main/java/forge/ai/ability/AnimateAi.java
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean ma
}

@Override
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
return player.getGame().getPhaseHandler().getPhase().isBefore(PhaseType.MAIN2);
}

Expand Down
2 changes: 1 addition & 1 deletion forge-ai/src/main/java/forge/ai/ability/AttachAi.java
Original file line number Diff line number Diff line change
Expand Up @@ -1729,7 +1729,7 @@ public boolean chkAIDrawback(final SpellAbility sa, final Player ai) {
}

@Override
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
return true;
}

Expand Down
2 changes: 1 addition & 1 deletion forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java
Original file line number Diff line number Diff line change
Expand Up @@ -1739,7 +1739,7 @@ public boolean apply(final Card card) {
* @see forge.card.ability.SpellAbilityAi#confirmAction(forge.game.player.Player, forge.card.spellability.SpellAbility, forge.game.player.PlayerActionConfirmMode, java.lang.String)
*/
@Override
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
// AI was never asked
return true;
}
Expand Down
3 changes: 2 additions & 1 deletion forge-ai/src/main/java/forge/ai/ability/ChangeZoneAllAi.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package forge.ai.ability;

import java.util.Collections;
import java.util.Map;

import com.google.common.base.Predicates;
import com.google.common.collect.Iterables;
Expand Down Expand Up @@ -334,7 +335,7 @@ public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) {
* @see forge.card.ability.SpellAbilityAi#confirmAction(forge.game.player.Player, forge.card.spellability.SpellAbility, forge.game.player.PlayerActionConfirmMode, java.lang.String)
*/
@Override
public boolean confirmAction(Player ai, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player ai, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
final Card source = sa.getHostCard();
final String hostName = source.getName();
final ZoneType origin = ZoneType.listValueOf(sa.getParam("Origin")).get(0);
Expand Down
2 changes: 1 addition & 1 deletion forge-ai/src/main/java/forge/ai/ability/CloneAi.java
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ private boolean cloneTgtAI(final SpellAbility sa) {
* @see forge.card.ability.SpellAbilityAi#confirmAction(forge.game.player.Player, forge.card.spellability.SpellAbility, forge.game.player.PlayerActionConfirmMode, java.lang.String)
*/
@Override
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
if (sa.hasParam("AILogic") && (!sa.usesTargeting() || sa.isTargetNumberValid())) {
// Had a special logic for it and managed to target, so confirm if viable
if ("CloneBestCreature".equals(sa.getParam("AILogic"))) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,7 @@ public boolean apply(final Card c) {
* @see forge.card.ability.SpellAbilityAi#confirmAction(forge.game.player.Player, forge.card.spellability.SpellAbility, forge.game.player.PlayerActionConfirmMode, java.lang.String)
*/
@Override
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
//TODO: add logic here
return true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ public SpellAbility chooseSingleSpellAbility(Player player, SpellAbility sa, Lis
}

@Override
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
// Chain of Acid requires special attention here since otherwise the AI will confirm the copy and then
// run into the necessity of confirming a mandatory Destroy, thus destroying all of its own permanents.
if ("ChainOfAcid".equals(sa.getParam("AILogic"))) {
Expand Down
2 changes: 1 addition & 1 deletion forge-ai/src/main/java/forge/ai/ability/CountersPutAi.java
Original file line number Diff line number Diff line change
Expand Up @@ -913,7 +913,7 @@ protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandator
}

@Override
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
final Card source = sa.getHostCard();
if (mode == PlayerActionConfirmMode.Tribute) {
// add counter if that opponent has a giant creature
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package forge.ai.ability;

import java.util.List;
import java.util.Map;

import com.google.common.base.Predicate;
import com.google.common.collect.Lists;
Expand Down Expand Up @@ -151,7 +152,7 @@ public boolean chkAIDrawback(SpellAbility sa, Player ai) {
* @see forge.card.ability.SpellAbilityAi#confirmAction(forge.game.player.Player, forge.card.spellability.SpellAbility, forge.game.player.PlayerActionConfirmMode, java.lang.String)
*/
@Override
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
return player.getCreaturesInPlay().size() >= player.getWeakestOpponent().getCreaturesInPlay().size();
}

Expand Down
4 changes: 3 additions & 1 deletion forge-ai/src/main/java/forge/ai/ability/DayTimeAi.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package forge.ai.ability;

import java.util.Map;

import forge.ai.SpellAbilityAi;
import forge.game.phase.PhaseHandler;
import forge.game.phase.PhaseType;
Expand Down Expand Up @@ -30,7 +32,7 @@ protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean ma
}

@Override
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
return true;
}
}
2 changes: 1 addition & 1 deletion forge-ai/src/main/java/forge/ai/ability/DigAi.java
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ protected GameEntity chooseSinglePlayerOrPlaneswalker(Player ai, SpellAbility sa
* @see forge.card.ability.SpellAbilityAi#confirmAction(forge.card.spellability.SpellAbility, forge.game.player.PlayerActionConfirmMode, java.lang.String)
*/
@Override
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
Card topc = player.getZone(ZoneType.Library).get(0);

// AI actions for individual cards (until this AI can be generalized)
Expand Down
4 changes: 3 additions & 1 deletion forge-ai/src/main/java/forge/ai/ability/DigMultipleAi.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package forge.ai.ability;

import java.util.Map;

import forge.ai.AiAttackController;
import forge.ai.ComputerUtil;
import forge.ai.SpellAbilityAi;
Expand Down Expand Up @@ -94,7 +96,7 @@ protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandator
* @see forge.card.ability.SpellAbilityAi#confirmAction(forge.card.spellability.SpellAbility, forge.game.player.PlayerActionConfirmMode, java.lang.String)
*/
@Override
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
return true;
}
}
Expand Down
3 changes: 2 additions & 1 deletion forge-ai/src/main/java/forge/ai/ability/DigUntilAi.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package forge.ai.ability;

import java.util.List;
import java.util.Map;

import forge.ai.AiAttackController;
import forge.ai.ComputerUtilCost;
Expand Down Expand Up @@ -122,7 +123,7 @@ protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandator
* @see forge.card.ability.SpellAbilityAi#confirmAction(forge.card.spellability.SpellAbility, forge.game.player.PlayerActionConfirmMode, java.lang.String)
*/
@Override
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
if (sa.hasParam("AILogic")) {
final String logic = sa.getParam("AILogic");
if ("OathOfDruids".equals(logic)) {
Expand Down
5 changes: 3 additions & 2 deletions forge-ai/src/main/java/forge/ai/ability/DiscardAi.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import java.util.Collections;
import java.util.List;
import java.util.Map;

import forge.ai.ComputerUtil;
import forge.ai.ComputerUtilAbility;
Expand Down Expand Up @@ -211,11 +212,11 @@ public boolean chkAIDrawback(SpellAbility sa, Player ai) {
return true;
}

public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
if (mode == PlayerActionConfirmMode.Random) {
// TODO For now AI will always discard Random used currently with: Balduvian Horde and similar cards
return true;
}
return super.confirmAction(player, sa, mode, message);
return super.confirmAction(player, sa, mode, message, params);
}
}
4 changes: 3 additions & 1 deletion forge-ai/src/main/java/forge/ai/ability/DrawAi.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
*/
package forge.ai.ability;

import java.util.Map;

import forge.ai.AiCostDecision;
import forge.ai.AiProps;
import forge.ai.ComputerUtil;
Expand Down Expand Up @@ -541,7 +543,7 @@ protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandator
* @see forge.card.ability.SpellAbilityAi#confirmAction(forge.game.player.Player, forge.card.spellability.SpellAbility, forge.game.player.PlayerActionConfirmMode, java.lang.String)
*/
@Override
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
int numCards = sa.hasParam("NumCards") ? AbilityUtils.calculateAmount(sa.getHostCard(), sa.getParam("NumCards"), sa) : 1;
// AI shouldn't mill itself
if (numCards < player.getZone(ZoneType.Library).size())
Expand Down
2 changes: 1 addition & 1 deletion forge-ai/src/main/java/forge/ai/ability/EncodeAi.java
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ public boolean chkAIDrawback(SpellAbility sa, Player ai) {
* forge.game.player.PlayerActionConfirmMode, java.lang.String)
*/
@Override
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
// only try to encode if there is a creature it can be used on
return chooseCard(player, player.getCreaturesInPlay(), true) != null;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package forge.ai.ability;

import java.util.Map;

import com.google.common.base.Predicate;
import forge.ai.SpellAbilityAi;
import forge.game.card.Card;
Expand Down Expand Up @@ -42,7 +44,7 @@ protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean ma
}

@Override
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
return true;
}
}
4 changes: 3 additions & 1 deletion forge-ai/src/main/java/forge/ai/ability/InvestigateAi.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package forge.ai.ability;


import java.util.Map;

import forge.ai.SpellAbilityAi;
import forge.game.phase.PhaseHandler;
import forge.game.phase.PhaseType;
Expand All @@ -20,7 +22,7 @@ protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) {
}

@Override
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
return true;
}
}
4 changes: 3 additions & 1 deletion forge-ai/src/main/java/forge/ai/ability/LearnAi.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package forge.ai.ability;


import java.util.Map;

import forge.ai.ComputerUtilCard;
import forge.ai.PlayerControllerAi;
import forge.ai.SpellAbilityAi;
Expand Down Expand Up @@ -32,7 +34,7 @@ public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) {
}

@Override
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
return true;
}

Expand Down
2 changes: 1 addition & 1 deletion forge-ai/src/main/java/forge/ai/ability/ManifestAi.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandator
* @see forge.card.ability.SpellAbilityAi#confirmAction(forge.game.player.Player, forge.card.spellability.SpellAbility, forge.game.player.PlayerActionConfirmMode, java.lang.String)
*/
@Override
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
return true;
}

Expand Down
2 changes: 1 addition & 1 deletion forge-ai/src/main/java/forge/ai/ability/MillAi.java
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean ma
* @see forge.card.ability.SpellAbilityAi#confirmAction(forge.game.player.Player, forge.card.spellability.SpellAbility, forge.game.player.PlayerActionConfirmMode, java.lang.String)
*/
@Override
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
if ("TimmerianFiends".equals(sa.getParam("AILogic"))) {
return SpecialCardAi.TimmerianFiends.consider(player, sa);
}
Expand Down
2 changes: 1 addition & 1 deletion forge-ai/src/main/java/forge/ai/ability/MutateAi.java
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ protected Card chooseSingleCard(Player ai, SpellAbility sa, Iterable<Card> optio
}

@Override
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
return true;
}
}
4 changes: 3 additions & 1 deletion forge-ai/src/main/java/forge/ai/ability/PeekAndRevealAi.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package forge.ai.ability;

import java.util.Map;

import forge.ai.AiAttackController;
import forge.ai.SpellAbilityAi;
import forge.ai.SpellApiToAi;
Expand Down Expand Up @@ -70,7 +72,7 @@ protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) {
* @see forge.card.ability.SpellAbilityAi#confirmAction(forge.game.player.Player, forge.card.spellability.SpellAbility, forge.game.player.PlayerActionConfirmMode, java.lang.String)
*/
@Override
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
AbilitySub subAb = sa.getSubAbility();
return subAb != null && SpellApiToAi.Converter.get(subAb.getApi()).chkDrawbackWithSubs(player, subAb);
}
Expand Down
2 changes: 1 addition & 1 deletion forge-ai/src/main/java/forge/ai/ability/PlayAi.java
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ protected boolean doTriggerAINoCost(final Player ai, final SpellAbility sa, fina
}

@Override
public boolean confirmAction(Player ai, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player ai, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
return true;
}

Expand Down
3 changes: 2 additions & 1 deletion forge-ai/src/main/java/forge/ai/ability/PumpAi.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@

import java.util.Arrays;
import java.util.List;
import java.util.Map;

public class PumpAi extends PumpAiBase {

Expand Down Expand Up @@ -781,7 +782,7 @@ public boolean chkAIDrawback(SpellAbility sa, Player ai) {
}

@Override
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
//TODO Add logic here if necessary but I think the AI won't cast
//the spell in the first place if it would curse its own creature
//and the pump isn't mandatory
Expand Down
Loading

0 comments on commit e92198c

Please sign in to comment.