diff --git a/.gitattributes b/.gitattributes index 9047f66cc5c..4359bf126fe 100644 --- a/.gitattributes +++ b/.gitattributes @@ -6502,6 +6502,7 @@ forge-gui/res/cardsfolder/h/heartwood_dryad.txt svneol=native#text/plain forge-gui/res/cardsfolder/h/heartwood_giant.txt -text forge-gui/res/cardsfolder/h/heartwood_shard.txt svneol=native#text/plain forge-gui/res/cardsfolder/h/heartwood_storyteller.txt svneol=native#text/plain +forge-gui/res/cardsfolder/h/heartwood_storyteller_avatar.txt -text forge-gui/res/cardsfolder/h/heartwood_treefolk.txt svneol=native#text/plain forge-gui/res/cardsfolder/h/heat_of_battle.txt svneol=native#text/plain forge-gui/res/cardsfolder/h/heat_ray.txt svneol=native#text/plain diff --git a/forge-ai/src/main/java/forge/ai/ability/BidLifeAi.java b/forge-ai/src/main/java/forge/ai/ability/BidLifeAi.java index c8486e6805a..54c4926bd8b 100644 --- a/forge-ai/src/main/java/forge/ai/ability/BidLifeAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/BidLifeAi.java @@ -30,7 +30,11 @@ public class BidLifeAi extends SpellAbilityAi { return false; } Card c = ComputerUtilCard.getBestCreatureAI(list); - sa.getTargets().add(c); + if (sa.canTarget(c)) { + sa.getTargets().add(c); + } else { + return false; + } } else if (tgt.getZone().contains(ZoneType.Stack)) { if (game.getStack().isEmpty()) { return false; diff --git a/forge-game/src/main/java/forge/game/mana/ManaCostAdjustment.java b/forge-game/src/main/java/forge/game/mana/ManaCostAdjustment.java index 3642df43f38..0ec0b08d36c 100644 --- a/forge-game/src/main/java/forge/game/mana/ManaCostAdjustment.java +++ b/forge-game/src/main/java/forge/game/mana/ManaCostAdjustment.java @@ -212,6 +212,15 @@ public class ManaCostAdjustment { if (!sa.isSpell()) { return; } + if (params.containsKey("OnlyFirstSpell")) { + if (activator == null ) { + return; + } + if (CardLists.filterControlledBy(activator.getGame().getStack().getCardsCastThisTurn(), + activator).size() > 0) { + return; + } + } } else if (params.get("Type").equals("Ability")) { if (!(sa instanceof AbilityActivated)) { return; @@ -343,6 +352,15 @@ public class ManaCostAdjustment { if (!sa.isSpell()) { return; } + if (params.containsKey("OnlyFirstSpell")) { + if (activator == null ) { + return; + } + if (CardLists.filterControlledBy(activator.getGame().getStack().getCardsCastThisTurn(), + activator).size() > 0) { + return; + } + } } else if (params.get("Type").equals("Ability")) { if (!(sa instanceof AbilityActivated)) { return; diff --git a/forge-gui/res/cardsfolder/e/evangel_of_heliod.txt b/forge-gui/res/cardsfolder/e/evangel_of_heliod.txt index e2599b34a88..db6c06e631d 100644 --- a/forge-gui/res/cardsfolder/e/evangel_of_heliod.txt +++ b/forge-gui/res/cardsfolder/e/evangel_of_heliod.txt @@ -3,7 +3,7 @@ ManaCost:4 W W Types:Creature Human Cleric PT:1/3 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, put a number of 1/1 white Soldier creature tokens onto the battlefield equal to your devotion to white. -SVar:TrigToken:AB$ Token | Cost$ 0 | TokenAmount$ X | References$ X | TokenName$ Soldier | TokenTypes$ Creature,Soldier | TokenOwner$ You | TokenColors$ White | TokenPower$ 1 | TokenToughness$ 1 | TokenImage$ w_1_1_soldier2_ths | TokenAltImages$ w_1_1_soldier_ths +SVar:TrigToken:AB$ Token | Cost$ 0 | TokenAmount$ X | References$ X | TokenName$ Soldier | TokenTypes$ Creature,Soldier | TokenOwner$ You | TokenColors$ White | TokenPower$ 1 | TokenToughness$ 1 | TokenImage$ w_1_1_soldier2_ths SVar:X:Count$Devotion.W SVar:Picture:http://www.wizards.com/global/images/magic/general/evangel_of_heliod.jpg Oracle:When Evangel of Heliod enters the battlefield, put a number of 1/1 white Soldier creature tokens onto the battlefield equal to your devotion to white. (Each {W} in the mana costs of permanents you control counts toward your devotion to white.) \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/h/heartwood_storyteller_avatar.txt b/forge-gui/res/cardsfolder/h/heartwood_storyteller_avatar.txt new file mode 100644 index 00000000000..4f07e5072a9 --- /dev/null +++ b/forge-gui/res/cardsfolder/h/heartwood_storyteller_avatar.txt @@ -0,0 +1,8 @@ +Name:Heartwood Storyteller Avatar +ManaCost:no cost +Types:Vanguard +HandLifeModifier:-1/+4 +S:Mode$ ReduceCost | EffectZone$ Command | ValidCard$ Card.Creature | Activator$ You | Type$ Spell | OnlyFirstSpell$ True | Amount$ 1 | Description$ The first creature spell you cast each turn costs {1} less to cast. +S:Mode$ RaiseCost | EffectZone$ Command | ValidCard$ Card.nonCreature | Activator$ Player.Opponent | Type$ Spell | OnlyFirstSpell$ True | Amount$ 1 | Description$ The first noncreature spell each opponent casts each turn costs {1} more to cast. +SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/heartwood_storyteller_avatar.jpg +Oracle:Hand -1, life +4\nThe first creature spell you cast each turn costs {1} less to cast.\nThe first noncreature spell each opponent casts each turn costs {1} more to cast.