From 02107b5b6bc974bcd7189744fdf75407347a560f Mon Sep 17 00:00:00 2001 From: jendave Date: Sat, 6 Aug 2011 03:36:43 +0000 Subject: [PATCH] - Fixed a bug with the AI using Isochron Scepter. - Added Fog, Respite, Holy Day, Darkness, Moment's Peace, Lull, Angelsong (all unusable by AI for now). --- res/cards.txt | 37 ++++++++++++++++++ src/forge/CardFactory.java | 64 +++++++++++++++++++++++-------- src/forge/EndOfTurn.java | 1 + src/forge/GameAction.java | 2 + src/forge/Input_CombatDamage.java | 3 +- 5 files changed, 91 insertions(+), 16 deletions(-) diff --git a/res/cards.txt b/res/cards.txt index 41ae6cf3f03..74a0f6216b0 100644 --- a/res/cards.txt +++ b/res/cards.txt @@ -1,3 +1,40 @@ +Angelsong +1 W +Instant +Prevent all combat damage that would be dealt this turn. +Cycling:2 + +Lull +1 G +Instant +Prevent all combat damage that would be dealt this turn. +Cycling:2 + +Holy Day +W +Instant +Prevent all combat damage that would be dealt this turn. + +Moment's Peace +1 G +Instant +Prevent all combat damage that would be dealt this turn. + +Darkness +B +Instant +Prevent all combat damage that would be dealt this turn. + +Respite +1 G +Instant +Prevent all combat damage that would be dealt this turn. You gain 1 life for each attacking creature. + +Fog +G +Instant +Prevent all combat damage that would be dealt this turn. + Wall of Reverence 3 W Creature Spirit Wall diff --git a/src/forge/CardFactory.java b/src/forge/CardFactory.java index 501eda4f880..52e8accad1a 100644 --- a/src/forge/CardFactory.java +++ b/src/forge/CardFactory.java @@ -16720,6 +16720,8 @@ public class CardFactory implements NewConstants { } public boolean canPlayAI() { + if (getSourceCard().getAttachedCards().length == 0) + return false; for(SpellAbility sa:getSourceCard().getAttachedCards()[0].getSpellAbility()) if(sa.canPlayAI()) return true; @@ -17236,26 +17238,58 @@ public class CardFactory implements NewConstants { { private static final long serialVersionUID = -3413999403234892711L; - - public void resolve() - { - PlayerZone play = AllZone.getZone(Constant.Zone.Play, card.getController()); - CardList land = new CardList(play.getCards()); - land = land.getType("Forest"); - makeToken(); - for(int i = 1; i < land.size(); i++) - makeToken(); - }//resolve() - - public void makeToken() - { - CardFactoryUtil.makeToken("Wolf", "G 2 2 Wolf", card, "G", new String[]{"Creature", "Wolf"}, 2, 2, new String[] {""}); - } + + public void resolve() + { + PlayerZone play = AllZone.getZone(Constant.Zone.Play, card.getController()); + CardList land = new CardList(play.getCards()); + land = land.getType("Forest"); + makeToken(); + for(int i = 1; i < land.size(); i++) + makeToken(); + }//resolve() + + public void makeToken() + { + CardFactoryUtil.makeToken("Wolf", "G 2 2 Wolf", card, "G", new String[]{"Creature", "Wolf"}, 2, 2, new String[] {""}); + } }; card.clearSpellAbility(); card.addSpellAbility(spell); }//*************** END ************ END ************************** + //*************** START *********** START ************************** + else if(cardName.equals("Fog") || cardName.equals("Angelsong") || cardName.equals("Darkness") || + cardName.equals("Holy Day") || cardName.equals("Lull") || cardName.equals("Moment's Peace") || + cardName.equals("Respite")) + { + SpellAbility spell = new Spell(card) + { + private static final long serialVersionUID = -493504450911948985L; + + public void resolve() + { + AllZone.GameInfo.setPreventCombatDamageThisTurn(true); + + if (cardName.equals("Respite")) + { + CardList attackers = new CardList(); + attackers.addAll(AllZone.Combat.getAttackers()); + attackers.addAll(AllZone.pwCombat.getAttackers()); + AllZone.GameAction.addLife(card.getController(), attackers.size()); + } + } + public boolean canPlayAI() + { + return false; + } + }; + card.clearSpellAbility(); + card.addSpellAbility(spell); + if (cardName.equals("Moment's Peace")) + card.addSpellAbility(CardFactoryUtil.ability_Flashback(card, "2 G", "0")); + }//*************** END ************ END ************************** + // Cards with Cycling abilities // -1 means keyword "Cycling" not found diff --git a/src/forge/EndOfTurn.java b/src/forge/EndOfTurn.java index dfe3aa976ba..be430c28e03 100644 --- a/src/forge/EndOfTurn.java +++ b/src/forge/EndOfTurn.java @@ -37,6 +37,7 @@ public class EndOfTurn implements java.io.Serializable //GameActionUtil.removeExaltedEffects(); GameActionUtil.removeAttackedBlockedThisTurn(); + AllZone.GameInfo.setPreventCombatDamageThisTurn(false); AllZone.StaticEffects.rePopulateStateBasedList(); diff --git a/src/forge/GameAction.java b/src/forge/GameAction.java index 50294d5d9bd..e4b729dc668 100644 --- a/src/forge/GameAction.java +++ b/src/forge/GameAction.java @@ -825,6 +825,8 @@ public class GameAction { AllZone.GameInfo.setComputerCanPlayNumberOfLands(1); AllZone.GameInfo.setHumanCanPlayNumberOfLands(1); + AllZone.GameInfo.setPreventCombatDamageThisTurn(false); + AllZone.Human_PoisonCounter.setPoisonCounters(0); AllZone.Computer_PoisonCounter.setPoisonCounters(0); diff --git a/src/forge/Input_CombatDamage.java b/src/forge/Input_CombatDamage.java index 3b79425163e..4917c03b24a 100644 --- a/src/forge/Input_CombatDamage.java +++ b/src/forge/Input_CombatDamage.java @@ -25,7 +25,8 @@ public class Input_CombatDamage extends Input { @Override public void selectButtonOK() { - damageCreatureAndPlayer(); + if (!AllZone.GameInfo.isPreventCombatDamageThisTurn()) + damageCreatureAndPlayer(); AllZone.GameAction.checkStateEffects();