Re: Card Development Questions
Posted: 11 Mar 2014, 12:57
It worked in Dev mode. I added some basic logic so AI paid Join Forces of its Minds Aglow.friarsol wrote:Seems functional, but hackish. Does it work ok in practice?swordshine wrote:Join Forces cards are popular in Commander games. I tried to script these cards using RepeatEach->ChooseNumber(the mana will be paid)->StoreSVar(UnlessCost: the chosen number and UnlessSwitched)->Join Forces effect.
Sample:
Any suggestions?
Patch:
- Code: Select all
### Eclipse Workspace Patch 1.0
#P ForgeLocal
Index: forge-game/src/main/java/forge/game/cost/CostPayment.java
===================================================================
--- forge-game/src/main/java/forge/game/cost/CostPayment.java (revision 25142)
+++ forge-game/src/main/java/forge/game/cost/CostPayment.java (working copy)
@@ -153,7 +153,9 @@
public final boolean payComputerCosts(final CostDecisionMakerBase decisionMaker) {
// Just in case it wasn't set, but honestly it shouldn't have gotten
// here without being set
- this.ability.setActivatingPlayer(decisionMaker.getPlayer());
+ if (this.ability.getActivatingPlayer() == null) {
+ this.ability.setActivatingPlayer(decisionMaker.getPlayer());
+ }
Map<Class<? extends CostPart>, PaymentDecision> decisions = new HashMap<Class<? extends CostPart>, PaymentDecision>();
Index: forge-game/src/main/java/forge/game/ability/effects/ChooseNumberEffect.java
===================================================================
--- forge-game/src/main/java/forge/game/ability/effects/ChooseNumberEffect.java (revision 25142)
+++ forge-game/src/main/java/forge/game/ability/effects/ChooseNumberEffect.java (working copy)
@@ -32,6 +32,7 @@
//final int min = sa.containsKey("Min") ? Integer.parseInt(sa.get("Min")) : 0;
//final int max = sa.containsKey("Max") ? Integer.parseInt(sa.get("Max")) : 99;
final boolean random = sa.hasParam("Random");
+ final boolean anyNumber = sa.hasParam("ChooseAnyNumber");
final String sMin = sa.getParamOrDefault("Min", "0");
final int min = AbilityUtils.calculateAmount(card, sMin, sa);
@@ -50,7 +51,11 @@
p.getGame().getAction().nofityOfValue(sa, p, Integer.toString(chosen), null);
} else {
String title = sa.hasParam("ListTitle") ? sa.getParam("ListTitle") : "Choose a number";
- chosen = p.getController().chooseNumber(sa, title, min, max);
+ if (anyNumber) {
+ chosen = p.getController().announceRequirements(sa, title, true);
+ } else {
+ chosen = p.getController().chooseNumber(sa, title, min, max);
+ }
// don't notify here, because most scripts I've seen don't store that number in a long term
}
card.setChosenNumber(chosen);
Index: forge-ai/src/main/java/forge/ai/PlayerControllerAi.java
===================================================================
--- forge-ai/src/main/java/forge/ai/PlayerControllerAi.java (revision 25142)
+++ forge-ai/src/main/java/forge/ai/PlayerControllerAi.java (working copy)
@@ -110,6 +110,14 @@
@Override
public Integer announceRequirements(SpellAbility ability, String announce, boolean allowZero) {
// For now, these "announcements" are made within the AI classes of the appropriate SA effects
+ if (ability.getApi() != null) {
+ switch (ability.getApi()) {
+ case ChooseNumber:
+ return ability.getActivatingPlayer().isOpponentOf(player) ? 0 : ComputerUtilMana.determineLeftoverMana(ability, player);
+ default:
+ return null;
+ }
+ }
return null; // return incorrect value to indicate that
}
Index: forge-gui/res/cardsfolder/m/minds_aglow.txt
===================================================================
--- forge-gui/res/cardsfolder/m/minds_aglow.txt (revision 0)
+++ forge-gui/res/cardsfolder/m/minds_aglow.txt (working copy)
@@ -0,0 +1,11 @@
+Name:Minds Aglow
+ManaCost:U
+Types:Sorcery
+A:SP$ RepeatEach | Cost$ U | RepeatPlayers$ Player | StartingWithActivator$ True | RepeatSubAbility$ DBPay | SubAbility$ DBDraw | StackDescription$ SpellDescription | SpellDescription$ Join forces - Starting with you, each player may pay any amount of mana. Each player draws X cards, where X is the total amount of mana paid this way.
+SVar:DBPay:DB$ ChooseNumber | Defined$ Player.IsRemembered | ChooseAnyNumber$ True | ListTitle$ Pay Any Mana |SubAbility$ DBStore
+SVar:DBStore:DB$ StoreSVar | SVar$ JoinForcesAmount | Type$ CountSVar | Expression$ JoinForcesAmount/Plus.X | UnlessCost$ X | UnlessPayer$ Player.IsRemembered | UnlessSwitched$ True | UnlessAI$ OnlyOwn | References$ X,JoinForcesAmount
+SVar:DBDraw:DB$ Draw | Defined$ Each | NumCards$ JoinForcesAmount | SubAbility$ DBReset | References$ JoinForcesAmount | StackDescription$ None
+SVar:DBReset:DB$ StoreSVar | SVar$ JoinForcesAmount | Type$ Number | Expression$ 0 | References$ JoinForcesAmount
+SVar:X:Count$ChosenNumber
+SVar:JoinForcesAmount:Number$0
+SVar:Picture:http://www.wizards.com/global/images/magic/general/minds_aglow.jpg
\ No newline at end of file