- Moving a bunch of the src files into organized packages.

This commit is contained in:
jendave
2011-08-06 20:15:45 +00:00
parent 7c6a591dda
commit 24443dc892
139 changed files with 1595 additions and 452 deletions

194
.gitattributes vendored
View File

@@ -7873,34 +7873,6 @@ src/com/cloudgarden/layout/AnchorConstraint.java -text svneol=native#text/plain
src/com/cloudgarden/layout/AnchorLayout.java -text svneol=native#text/plain
src/com/esotericsoftware/minlog/Log.java svneol=native#text/plain
src/forge/AIPlayer.java -text svneol=native#text/plain
src/forge/Ability.java svneol=native#text/plain
src/forge/AbilityFactory.java -text svneol=native#text/plain
src/forge/AbilityFactory_AlterLife.java -text svneol=native#text/plain
src/forge/AbilityFactory_Animate.java -text svneol=native#text/plain
src/forge/AbilityFactory_Bounce.java -text svneol=native#text/plain
src/forge/AbilityFactory_ChangeZone.java -text svneol=native#text/plain
src/forge/AbilityFactory_Clash.java -text svneol=native#text/plain
src/forge/AbilityFactory_Combat.java -text svneol=native#text/plain
src/forge/AbilityFactory_CounterMagic.java -text svneol=native#text/plain
src/forge/AbilityFactory_Counters.java -text svneol=native#text/plain
src/forge/AbilityFactory_DealDamage.java -text svneol=native#text/plain
src/forge/AbilityFactory_Destroy.java -text svneol=native#text/plain
src/forge/AbilityFactory_Fetch.java -text svneol=native#text/plain
src/forge/AbilityFactory_GainControl.java -text svneol=native#text/plain
src/forge/AbilityFactory_Mana.java -text svneol=native#text/plain
src/forge/AbilityFactory_PermanentState.java -text svneol=native#text/plain
src/forge/AbilityFactory_Pump.java -text svneol=native#text/plain
src/forge/AbilityFactory_Regenerate.java -text svneol=native#text/plain
src/forge/AbilityFactory_Sacrifice.java -text svneol=native#text/plain
src/forge/AbilityFactory_Token.java -text svneol=native#text/plain
src/forge/AbilityFactory_Turns.java -text svneol=native#text/plain
src/forge/AbilityFactory_ZoneAffecting.java -text svneol=native#text/plain
src/forge/Ability_Activated.java svneol=native#text/plain
src/forge/Ability_Cost.java -text svneol=native#text/plain
src/forge/Ability_Mana.java -text svneol=native#text/plain
src/forge/Ability_Static.java -text svneol=native#text/plain
src/forge/Ability_Sub.java -text svneol=native#text/plain
src/forge/Ability_Triggered.java svneol=native#text/plain
src/forge/AllZone.java svneol=native#text/plain
src/forge/AllZoneUtil.java -text svneol=native#text/plain
src/forge/BackgroundPanel.java -text svneol=native#text/plain
@@ -7911,15 +7883,6 @@ src/forge/BoosterPack.java svneol=native#text/plain
src/forge/ButtonUtil.java svneol=native#text/plain
src/forge/Card.java -text svneol=native#text/plain
src/forge/CardContainer.java svneol=native#text/plain
src/forge/CardFactory.java -text svneol=native#text/plain
src/forge/CardFactoryUtil.java -text svneol=native#text/plain
src/forge/CardFactory_Auras.java -text svneol=native#text/plain
src/forge/CardFactory_Creatures.java -text svneol=native#text/plain
src/forge/CardFactory_Equipment.java -text svneol=native#text/plain
src/forge/CardFactory_Instants.java -text svneol=native#text/plain
src/forge/CardFactory_Lands.java -text svneol=native#text/plain
src/forge/CardFactory_Planeswalkers.java -text svneol=native#text/plain
src/forge/CardFactory_Sorceries.java -text svneol=native#text/plain
src/forge/CardFilter.java -text svneol=native#text/plain
src/forge/CardList.java -text svneol=native#text/plain
src/forge/CardListFilter.java svneol=native#text/plain
@@ -7944,7 +7907,6 @@ src/forge/ComputerUtil_Block2.java svneol=native#text/plain
src/forge/Computer_Race.java svneol=native#text/plain
src/forge/Constant.java svneol=native#text/plain
src/forge/CopyFiles.java -text svneol=native#text/plain
src/forge/Cost_Payment.java -text svneol=native#text/plain
src/forge/Counters.java svneol=native#text/plain
src/forge/Deck.java svneol=native#text/plain
src/forge/DeckIO.java svneol=native#text/plain
@@ -7963,13 +7925,6 @@ src/forge/GUI_Quest_Filter.java -text svneol=native#text/plain
src/forge/GameAction.java svneol=native#text/plain
src/forge/GameActionUtil.java -text svneol=native#text/plain
src/forge/GameInfo.java -text svneol=native#text/plain
src/forge/Generate2ColorDeck.java -text svneol=native#text/plain
src/forge/Generate3ColorDeck.java -text svneol=native#text/plain
src/forge/GenerateConstructedDeck.java -text svneol=native#text/plain
src/forge/GenerateConstructedMultiColorDeck.java -text svneol=native#text/plain
src/forge/GenerateDraftDeck.java svneol=native#text/plain
src/forge/GenerateSealedDeck.java svneol=native#text/plain
src/forge/GenerateThemeDeck.java -text svneol=native#text/plain
src/forge/GuiDisplay.java svneol=native#text/plain
src/forge/GuiDisplay2.java svneol=native#text/plain
src/forge/GuiDisplay3.java svneol=native#text/plain
@@ -8000,29 +7955,10 @@ src/forge/HumanPlayer.java -text svneol=native#text/plain
src/forge/IO.java svneol=native#text/plain
src/forge/ImageCache.java svneol=native#text/plain
src/forge/ImagePreviewPanel.java -text svneol=native#text/plain
src/forge/Input.java svneol=native#text/plain
src/forge/InputControl.java svneol=native#text/plain
src/forge/Input_Attack.java svneol=native#text/plain
src/forge/Input_Block.java svneol=native#text/plain
src/forge/Input_Cleanup.java svneol=native#text/plain
src/forge/Input_Mulligan.java svneol=native#text/plain
src/forge/Input_PassPriority.java -text svneol=native#text/plain
src/forge/Input_PayManaCost.java svneol=native#text/plain
src/forge/Input_PayManaCostUtil.java svneol=native#text/plain
src/forge/Input_PayManaCost_Ability.java svneol=native#text/plain
src/forge/KeyListenerTest.java -text svneol=native#text/plain
src/forge/ListProperties.java -text svneol=native#text/plain
src/forge/MP3Player.java -text svneol=native#text/plain
src/forge/MagicStack.java svneol=native#text/plain
src/forge/Mana.java -text svneol=native#text/plain
src/forge/ManaCost.java -text svneol=native#text/plain
src/forge/ManaPool.java svneol=native#text/plain
src/forge/Mana_Part.java svneol=native#text/plain
src/forge/Mana_PartColor.java svneol=native#text/plain
src/forge/Mana_PartColorless.java svneol=native#text/plain
src/forge/Mana_PartSnow.java svneol=native#text/plain
src/forge/Mana_PartSplit.java svneol=native#text/plain
src/forge/Mana_PartTest.java svneol=native#text/plain
src/forge/MenuItem_HowToPlay.java svneol=native#text/plain
src/forge/Move.java svneol=native#text/plain
src/forge/MoveAttack.java svneol=native#text/plain
@@ -8059,52 +7995,106 @@ src/forge/RunTest.java svneol=native#text/plain
src/forge/SetInfo.java -text svneol=native#text/plain
src/forge/SetInfoUtil.java -text svneol=native#text/plain
src/forge/SimpleCombat.java svneol=native#text/plain
src/forge/Spell.java svneol=native#text/plain
src/forge/SpellAbility.java -text svneol=native#text/plain
src/forge/SpellAbilityList.java svneol=native#text/plain
src/forge/SpellAbilityUtil.java svneol=native#text/plain
src/forge/SpellAbility_Requirements.java -text svneol=native#text/plain
src/forge/SpellAbility_Restriction.java -text svneol=native#text/plain
src/forge/Spell_Evoke.java svneol=native#text/plain
src/forge/Spell_Permanent.java svneol=native#text/plain
src/forge/StaticEffect.java -text svneol=native#text/plain
src/forge/StaticEffects.java -text svneol=native#text/plain
src/forge/TableModel.java -text svneol=native#text/plain
src/forge/TableSorter.java svneol=native#text/plain
src/forge/Target.java -text svneol=native#text/plain
src/forge/Target_Selection.java -text svneol=native#text/plain
src/forge/TempRun.java svneol=native#text/plain
src/forge/Test.java svneol=native#text/plain
src/forge/TestMove.java svneol=native#text/plain
src/forge/TestPanel.java svneol=native#text/plain
src/forge/Time.java svneol=native#text/plain
src/forge/Trigger.java -text svneol=native#text/plain
src/forge/TriggerHandler.java -text svneol=native#text/plain
src/forge/Trigger_AttackerBlocked.java -text svneol=native#text/plain
src/forge/Trigger_AttackerUnblocked.java -text svneol=native#text/plain
src/forge/Trigger_Attacks.java -text svneol=native#text/plain
src/forge/Trigger_Blocks.java -text svneol=native#text/plain
src/forge/Trigger_ChangesZone.java -text svneol=native#text/plain
src/forge/Trigger_CounterAdded.java -text svneol=native#text/plain
src/forge/Trigger_Cycled.java -text svneol=native#text/plain
src/forge/Trigger_DamageDone.java -text svneol=native#text/plain
src/forge/Trigger_Discarded.java -text svneol=native#text/plain
src/forge/Trigger_Drawn.java -text svneol=native#text/plain
src/forge/Trigger_LandPlayed.java -text svneol=native#text/plain
src/forge/Trigger_LifeGained.java -text svneol=native#text/plain
src/forge/Trigger_LifeLost.java -text svneol=native#text/plain
src/forge/Trigger_Phase.java -text svneol=native#text/plain
src/forge/Trigger_Sacrificed.java -text svneol=native#text/plain
src/forge/Trigger_Shuffled.java -text svneol=native#text/plain
src/forge/Trigger_SpellAbilityCast.java -text svneol=native#text/plain
src/forge/Trigger_Taps.java -text svneol=native#text/plain
src/forge/Trigger_TurnFaceUp.java -text svneol=native#text/plain
src/forge/Trigger_Unequip.java -text svneol=native#text/plain
src/forge/Trigger_Untaps.java -text svneol=native#text/plain
src/forge/UndoCommand.java svneol=native#text/plain
src/forge/Wait.java svneol=native#text/plain
src/forge/WinLose.java svneol=native#text/plain
src/forge/ZCTrigger.java svneol=native#text/plain
src/forge/card/abilityFactory/AbilityFactory.java -text svneol=native#text/plain
src/forge/card/abilityFactory/AbilityFactory_AlterLife.java -text svneol=native#text/plain
src/forge/card/abilityFactory/AbilityFactory_Animate.java -text svneol=native#text/plain
src/forge/card/abilityFactory/AbilityFactory_Bounce.java -text svneol=native#text/plain
src/forge/card/abilityFactory/AbilityFactory_ChangeZone.java -text svneol=native#text/plain
src/forge/card/abilityFactory/AbilityFactory_Clash.java -text svneol=native#text/plain
src/forge/card/abilityFactory/AbilityFactory_Combat.java -text svneol=native#text/plain
src/forge/card/abilityFactory/AbilityFactory_CounterMagic.java -text svneol=native#text/plain
src/forge/card/abilityFactory/AbilityFactory_Counters.java -text svneol=native#text/plain
src/forge/card/abilityFactory/AbilityFactory_DealDamage.java -text svneol=native#text/plain
src/forge/card/abilityFactory/AbilityFactory_Destroy.java -text svneol=native#text/plain
src/forge/card/abilityFactory/AbilityFactory_Fetch.java -text svneol=native#text/plain
src/forge/card/abilityFactory/AbilityFactory_GainControl.java -text svneol=native#text/plain
src/forge/card/abilityFactory/AbilityFactory_Mana.java -text svneol=native#text/plain
src/forge/card/abilityFactory/AbilityFactory_PermanentState.java -text svneol=native#text/plain
src/forge/card/abilityFactory/AbilityFactory_Pump.java -text svneol=native#text/plain
src/forge/card/abilityFactory/AbilityFactory_Regenerate.java -text svneol=native#text/plain
src/forge/card/abilityFactory/AbilityFactory_Sacrifice.java -text svneol=native#text/plain
src/forge/card/abilityFactory/AbilityFactory_Token.java -text svneol=native#text/plain
src/forge/card/abilityFactory/AbilityFactory_Turns.java -text svneol=native#text/plain
src/forge/card/abilityFactory/AbilityFactory_ZoneAffecting.java -text svneol=native#text/plain
src/forge/card/cardFactory/CardFactory.java -text svneol=native#text/plain
src/forge/card/cardFactory/CardFactoryUtil.java -text svneol=native#text/plain
src/forge/card/cardFactory/CardFactory_Auras.java -text svneol=native#text/plain
src/forge/card/cardFactory/CardFactory_Creatures.java -text svneol=native#text/plain
src/forge/card/cardFactory/CardFactory_Equipment.java -text svneol=native#text/plain
src/forge/card/cardFactory/CardFactory_Instants.java -text svneol=native#text/plain
src/forge/card/cardFactory/CardFactory_Lands.java -text svneol=native#text/plain
src/forge/card/cardFactory/CardFactory_Planeswalkers.java -text svneol=native#text/plain
src/forge/card/cardFactory/CardFactory_Sorceries.java -text svneol=native#text/plain
src/forge/card/mana/Mana.java -text svneol=native#text/plain
src/forge/card/mana/ManaCost.java -text svneol=native#text/plain
src/forge/card/mana/ManaPool.java svneol=native#text/plain
src/forge/card/mana/Mana_Part.java svneol=native#text/plain
src/forge/card/mana/Mana_PartColor.java svneol=native#text/plain
src/forge/card/mana/Mana_PartColorless.java svneol=native#text/plain
src/forge/card/mana/Mana_PartSnow.java svneol=native#text/plain
src/forge/card/mana/Mana_PartSplit.java svneol=native#text/plain
src/forge/card/mana/Mana_PartTest.java svneol=native#text/plain
src/forge/card/spellability/Ability.java svneol=native#text/plain
src/forge/card/spellability/Ability_Activated.java svneol=native#text/plain
src/forge/card/spellability/Ability_Mana.java -text svneol=native#text/plain
src/forge/card/spellability/Ability_Static.java -text svneol=native#text/plain
src/forge/card/spellability/Ability_Sub.java -text svneol=native#text/plain
src/forge/card/spellability/Ability_Triggered.java svneol=native#text/plain
src/forge/card/spellability/Cost.java -text svneol=native#text/plain
src/forge/card/spellability/Cost_Payment.java -text svneol=native#text/plain
src/forge/card/spellability/Spell.java svneol=native#text/plain
src/forge/card/spellability/SpellAbility.java -text svneol=native#text/plain
src/forge/card/spellability/SpellAbilityList.java svneol=native#text/plain
src/forge/card/spellability/SpellAbilityUtil.java svneol=native#text/plain
src/forge/card/spellability/SpellAbility_Requirements.java -text svneol=native#text/plain
src/forge/card/spellability/SpellAbility_Restriction.java -text svneol=native#text/plain
src/forge/card/spellability/Spell_Evoke.java svneol=native#text/plain
src/forge/card/spellability/Spell_Permanent.java svneol=native#text/plain
src/forge/card/spellability/Target.java -text svneol=native#text/plain
src/forge/card/spellability/Target_Selection.java -text svneol=native#text/plain
src/forge/card/trigger/Trigger.java -text svneol=native#text/plain
src/forge/card/trigger/TriggerHandler.java -text svneol=native#text/plain
src/forge/card/trigger/Trigger_AttackerBlocked.java -text svneol=native#text/plain
src/forge/card/trigger/Trigger_AttackerUnblocked.java -text svneol=native#text/plain
src/forge/card/trigger/Trigger_Attacks.java -text svneol=native#text/plain
src/forge/card/trigger/Trigger_Blocks.java -text svneol=native#text/plain
src/forge/card/trigger/Trigger_ChangesZone.java -text svneol=native#text/plain
src/forge/card/trigger/Trigger_CounterAdded.java -text svneol=native#text/plain
src/forge/card/trigger/Trigger_Cycled.java -text svneol=native#text/plain
src/forge/card/trigger/Trigger_DamageDone.java -text svneol=native#text/plain
src/forge/card/trigger/Trigger_Discarded.java -text svneol=native#text/plain
src/forge/card/trigger/Trigger_Drawn.java -text svneol=native#text/plain
src/forge/card/trigger/Trigger_LandPlayed.java -text svneol=native#text/plain
src/forge/card/trigger/Trigger_LifeGained.java -text svneol=native#text/plain
src/forge/card/trigger/Trigger_LifeLost.java -text svneol=native#text/plain
src/forge/card/trigger/Trigger_Phase.java -text svneol=native#text/plain
src/forge/card/trigger/Trigger_Sacrificed.java -text svneol=native#text/plain
src/forge/card/trigger/Trigger_Shuffled.java -text svneol=native#text/plain
src/forge/card/trigger/Trigger_SpellAbilityCast.java -text svneol=native#text/plain
src/forge/card/trigger/Trigger_Taps.java -text svneol=native#text/plain
src/forge/card/trigger/Trigger_TurnFaceUp.java -text svneol=native#text/plain
src/forge/card/trigger/Trigger_Unequip.java -text svneol=native#text/plain
src/forge/card/trigger/Trigger_Untaps.java -text svneol=native#text/plain
src/forge/deck/generate/Generate2ColorDeck.java -text svneol=native#text/plain
src/forge/deck/generate/Generate3ColorDeck.java -text svneol=native#text/plain
src/forge/deck/generate/GenerateConstructedDeck.java -text svneol=native#text/plain
src/forge/deck/generate/GenerateConstructedMultiColorDeck.java -text svneol=native#text/plain
src/forge/deck/generate/GenerateDraftDeck.java svneol=native#text/plain
src/forge/deck/generate/GenerateSealedDeck.java svneol=native#text/plain
src/forge/deck/generate/GenerateThemeDeck.java -text svneol=native#text/plain
src/forge/error/ErrorViewer.java svneol=native#text/plain
src/forge/error/ExceptionHandler.java -text svneol=native#text/plain
src/forge/gui/ForgeAction.java svneol=native#text/plain
@@ -8115,6 +8105,16 @@ src/forge/gui/MultiLineLabelUI.java svneol=native#text/plain
src/forge/gui/game/CardDetailPanel.java svneol=native#text/plain
src/forge/gui/game/CardPanel.java svneol=native#text/plain
src/forge/gui/game/CardPicturePanel.java svneol=native#text/plain
src/forge/gui/input/Input.java svneol=native#text/plain
src/forge/gui/input/InputControl.java svneol=native#text/plain
src/forge/gui/input/Input_Attack.java svneol=native#text/plain
src/forge/gui/input/Input_Block.java svneol=native#text/plain
src/forge/gui/input/Input_Cleanup.java svneol=native#text/plain
src/forge/gui/input/Input_Mulligan.java svneol=native#text/plain
src/forge/gui/input/Input_PassPriority.java -text svneol=native#text/plain
src/forge/gui/input/Input_PayManaCost.java svneol=native#text/plain
src/forge/gui/input/Input_PayManaCostUtil.java svneol=native#text/plain
src/forge/gui/input/Input_PayManaCost_Ability.java svneol=native#text/plain
src/forge/properties/ForgePreferences.java svneol=native#text/plain
src/forge/properties/ForgeProps.java svneol=native#text/plain
src/forge/properties/NewConstants.java svneol=native#text/plain

View File

@@ -3,6 +3,9 @@ package forge;
import java.util.Random;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.spellability.SpellAbility;
public class AIPlayer extends Player{

View File

@@ -1,6 +1,10 @@
package forge;
import forge.card.cardFactory.CardFactory;
import forge.card.mana.ManaPool;
import forge.card.trigger.TriggerHandler;
import forge.gui.input.InputControl;
import forge.properties.ForgeProps;
import forge.properties.NewConstants;

View File

@@ -4,6 +4,7 @@ package forge;
import java.util.ArrayList;
import forge.card.cardFactory.CardFactoryUtil;
import forge.gui.GuiUtils;
/**

View File

@@ -12,6 +12,15 @@ import java.util.Map.Entry;
import com.esotericsoftware.minlog.Log;
import forge.card.cardFactory.CardFactory;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.mana.ManaCost;
import forge.card.spellability.Ability_Mana;
import forge.card.spellability.Ability_Triggered;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Spell_Permanent;
import forge.card.trigger.Trigger;
public class Card extends MyObservable {
private static int nextUniqueNumber;
private int uniqueNumber = nextUniqueNumber++;

View File

@@ -7,6 +7,8 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import forge.card.cardFactory.CardFactoryUtil;
public class CardList implements Iterable<Card> {

View File

@@ -4,6 +4,8 @@ import java.util.Comparator;
import com.esotericsoftware.minlog.Log;
import forge.card.cardFactory.CardFactoryUtil;
public class CardListUtil
{
public static CardList filterToughness(CardList in, int atLeastToughness)

View File

@@ -9,6 +9,9 @@ import java.util.Map;
import java.util.Random;
import java.util.Set;
import forge.card.mana.ManaCost;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.SpellAbilityList;
import forge.properties.ForgeProps;
import forge.properties.NewConstants;

View File

@@ -3,6 +3,8 @@ package forge;
import java.util.ArrayList;
import java.util.EnumSet;
import forge.card.mana.ManaCost;
public class Card_Color {
// takes care of individual card color, for global color change effects use AllZone.GameInfo.getColorChanges()
private EnumSet<Color> col;

View File

@@ -2,6 +2,8 @@ package forge;
import java.util.EnumSet;
import forge.card.mana.ManaCost;
public enum Color {
Colorless(0),
White(1),

View File

@@ -9,11 +9,16 @@ import java.util.regex.Pattern;
import com.esotericsoftware.minlog.Log;
import forge.card.abilityFactory.AbilityFactory;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.spellability.Ability;
import forge.card.trigger.Trigger;
import forge.gui.GuiUtils;
import forge.gui.input.Input_PayManaCost_Ability;
public class CombatUtil {
static boolean Lorthos_Cancelled;
private static boolean Lorthos_Cancelled;
//can the creature block given the combat state?
@@ -1781,7 +1786,7 @@ public class CombatUtil {
CardList Silence = AllZoneUtil.getPlayerCardsInPlay(c.getController().getOpponent());
Silence = Silence.getName("Linvala, Keeper of Silence");
if(Silence.size() == 0) {
Lorthos_Cancelled = false;
setLorthosCancelled(false);
if(c.getController().equals(AllZone.HumanPlayer)) {
AllZone.InputControl.setInput(new Input_PayManaCost_Ability("Activate " + c.getName() + "'s ability: " + "\r\n",
ability.getManaCost(), paidCommand, unpaidCommand));
@@ -2404,4 +2409,14 @@ public class CombatUtil {
}
}
public static void setLorthosCancelled(boolean lorthos_Cancelled) {
Lorthos_Cancelled = lorthos_Cancelled;
}
public static boolean isLorthosCancelled() {
return Lorthos_Cancelled;
}
}//Class CombatUtil

View File

@@ -5,6 +5,9 @@ import java.util.ArrayList;
import com.esotericsoftware.minlog.Log;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.spellability.SpellAbility;
public class ComputerAI_General implements Computer {

View File

@@ -3,6 +3,8 @@ package forge;
import com.esotericsoftware.minlog.Log;
import forge.gui.input.Input;
public class ComputerAI_Input extends Input {
private static final long serialVersionUID = -3091338639571662216L;

View File

@@ -2,6 +2,9 @@ package forge;
import java.util.ArrayList;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.spellability.SpellAbility;
public class ComputerAI_counterSpells2 {
public static ArrayList<String> KeywordedCounterspells = new ArrayList<String>();

View File

@@ -3,6 +3,16 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import forge.card.abilityFactory.AbilityFactory;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.mana.ManaCost;
import forge.card.spellability.Ability;
import forge.card.spellability.Ability_Mana;
import forge.card.spellability.Cost;
import forge.card.spellability.Cost_Payment;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
public class ComputerUtil
{
@@ -30,7 +40,7 @@ public class ComputerUtil
if(sa.isSpell() && !source.isCopiedSpell())
AllZone.GameAction.moveToStack(source);
Ability_Cost cost = sa.getPayCosts();
Cost cost = sa.getPayCosts();
Target tgt = sa.getTarget();
if (cost == null){
@@ -187,12 +197,12 @@ public class ComputerUtil
ManaCost cost = new ManaCost(mana);
// Tack xMana Payments into mana here if X is a set value
if (sa.getPayCosts() != null && cost.xcounter > 0){
if (sa.getPayCosts() != null && cost.getXcounter() > 0){
String xSvar = card.getSVar("X").equals("Count$xPaid") ? "PayX" : "X";
// For Count$xPaid set PayX in the AFs then use that here
// Else calculate it as appropriate.
if (!card.getSVar(xSvar).equals("")){
int manaToAdd = AbilityFactory.calculateAmount(card, xSvar, sa) * cost.xcounter;
int manaToAdd = AbilityFactory.calculateAmount(card, xSvar, sa) * cost.getXcounter();
cost.increaseColorlessMana(manaToAdd);
}
}
@@ -272,7 +282,7 @@ public class ComputerUtil
static public boolean canPayAdditionalCosts(SpellAbility sa)
{
// Add additional cost checks here before attempting to activate abilities
Ability_Cost cost = sa.getPayCosts();
Cost cost = sa.getPayCosts();
if (cost == null)
return true;
Card card = sa.getSourceCard();
@@ -480,7 +490,7 @@ public class ComputerUtil
Card card = sa.getSourceCard();
// Tack xMana Payments into mana here if X is a set value
if (sa.getPayCosts() != null && cost.xcounter > 0){
if (sa.getPayCosts() != null && cost.getXcounter() > 0){
String xSvar = card.getSVar("X").equals("Count$xPaid") ? "PayX" : "X";
// For Count$xPaid set PayX in the AFs then use that here
// Else calculate it as appropriate.
@@ -489,7 +499,7 @@ public class ComputerUtil
manaToAdd = Integer.parseInt(card.getSVar(xSvar));
}
else{
manaToAdd = AbilityFactory.calculateAmount(card, xSvar, sa) * cost.xcounter;
manaToAdd = AbilityFactory.calculateAmount(card, xSvar, sa) * cost.getXcounter();
}
cost.increaseColorlessMana(manaToAdd);
@@ -833,7 +843,7 @@ public class ComputerUtil
Arrays.sort(sa, c);
}//sortSpellAbilityByCost()
static void sacrificePermanents(int amount, CardList list) {
static public void sacrificePermanents(int amount, CardList list) {
// used in Annihilator and AF_Sacrifice
int max = list.size();
if (max > amount)

View File

@@ -3,6 +3,8 @@ package forge;
import java.util.ArrayList;
import java.util.Random;
import forge.card.cardFactory.CardFactoryUtil;
//doesHumanAttackAndWin() uses the global variable AllZone.ComputerPlayer
public class ComputerUtil_Attack2 {

View File

@@ -3,6 +3,8 @@ package forge;
import java.util.ArrayList;
import forge.card.cardFactory.CardFactoryUtil;
public class ComputerUtil_Block2
{

View File

@@ -1,5 +1,8 @@
package forge;
import forge.card.spellability.Ability;
import forge.card.spellability.SpellAbility;
//handles "until end of turn" and "at end of turn" commands from cards
public class EndOfTurn implements java.io.Serializable
{

View File

@@ -2,7 +2,24 @@
package forge;
import forge.card.cardFactory.CardFactory;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.mana.ManaCost;
import forge.card.mana.ManaPool;
import forge.card.spellability.Ability;
import forge.card.spellability.Ability_Static;
import forge.card.spellability.Cost;
import forge.card.spellability.Cost_Payment;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.SpellAbility_Requirements;
import forge.card.spellability.Target_Selection;
import forge.card.trigger.Trigger;
import forge.deck.generate.GenerateConstructedDeck;
import forge.gui.GuiUtils;
import forge.gui.input.Input_Mulligan;
import forge.gui.input.Input_PayManaCost;
import forge.gui.input.Input_PayManaCost_Ability;
import forge.properties.ForgeProps;
import forge.properties.NewConstants.LANG.GameAction.GAMEACTION_TEXT;
@@ -201,7 +218,7 @@ public class GameAction {
};
String recoverCost = recoverable.getKeyword().get(recoverable.getKeywordPosition("Recover")).split(":")[1];
Ability_Cost abCost = new Ability_Cost(recoverCost,recoverable.getName(),false);
Cost abCost = new Cost(recoverCost,recoverable.getName(),false);
abRecover.setPayCosts(abCost);
StringBuilder question = new StringBuilder("Recover ");
@@ -735,7 +752,7 @@ public class GameAction {
}
}
static boolean MultiTarget_Cancelled = false;
private static boolean MultiTarget_Cancelled = false;
public void runWheneverKeyword(Card c, String Event, Object[] Custom_Parameters) {
/**
* Custom_Parameters Info:
@@ -1041,7 +1058,7 @@ public class GameAction {
private static final long serialVersionUID = -83034517601871955L;
public void execute() {
MultiTarget_Cancelled = false;
setMultiTargetCancelled(false);
for(int i = 0; i < F_Multiple_Targets; i++) {
AllZone.InputControl.setInput(CardFactoryUtil.input_MultitargetCreatureOrPlayer(F_SpellAbility , i , F_Amount[0]*F_Multiple_Targets,new Command() {
@@ -2228,7 +2245,7 @@ public class GameAction {
Constant.Quest.fantasyQuest[0] = true;
}
boolean Start_Cut = false;
private boolean Start_Cut = false;
boolean StaticEffectKeywordReset = true;
public void newGame(Deck humanDeck, Deck computerDeck) {
// AllZone.Computer = new ComputerAI_Input(new ComputerAI_General());
@@ -2405,7 +2422,7 @@ public class GameAction {
if (Constant.Runtime.matchState.countWinLose() == 0)
{
// New code to determine who goes first. Delete this if it doesn't work properly
if(Start_Cut)
if(isStartCut())
seeWhoPlaysFirst();
else
seeWhoPlaysFirst_CoinToss();
@@ -2424,7 +2441,7 @@ public class GameAction {
AllZone.Human_Battlefield.add(mp);
AllZone.InputControl.setInput(new Input_Mulligan());
Phase.GameBegins = 1;
Phase.setGameBegins(1);
}//newGame()
//this is where the computer cheats
@@ -2586,8 +2603,8 @@ public class GameAction {
}
}//seeWhoPlaysFirst_CoinToss()
Card HumanCut = null;
Card ComputerCut = null;
private Card HumanCut = null;
private Card ComputerCut = null;
public void seeWhoPlaysFirst() {
@@ -2611,7 +2628,7 @@ public class GameAction {
if(Starter_Determined == true) break;
if(HLibrary.size() > 0)
HumanCut = HLibrary.get(MyRandom.random.nextInt(HLibrary.size()));
setHumanCut(HLibrary.get(MyRandom.random.nextInt(HLibrary.size())));
else {
computerStartsGame();
JOptionPane.showMessageDialog(null, ForgeProps.getLocalized(GAMEACTION_TEXT.HUMAN_MANA_COST) + "\r\n" + ForgeProps.getLocalized(GAMEACTION_TEXT.COMPUTER_STARTS), "", JOptionPane.INFORMATION_MESSAGE);
@@ -2619,26 +2636,26 @@ public class GameAction {
}
if(CLibrary.size() > 0)
ComputerCut = CLibrary.get(MyRandom.random.nextInt(CLibrary.size()));
setComputerCut(CLibrary.get(MyRandom.random.nextInt(CLibrary.size())));
else {
JOptionPane.showMessageDialog(null, ForgeProps.getLocalized(GAMEACTION_TEXT.COMPUTER_MANA_COST) + "\r\n" + ForgeProps.getLocalized(GAMEACTION_TEXT.HUMAN_STARTS), "", JOptionPane.INFORMATION_MESSAGE);
return;
}
Cut_Count = Cut_Count + 1;
AllZone.GameAction.moveTo(AllZone.getZone(Constant.Zone.Library, AllZone.HumanPlayer),AllZone.GameAction.HumanCut);
AllZone.GameAction.moveTo(AllZone.getZone(Constant.Zone.Library, AllZone.ComputerPlayer),AllZone.GameAction.ComputerCut);
AllZone.GameAction.moveTo(AllZone.getZone(Constant.Zone.Library, AllZone.HumanPlayer),AllZone.GameAction.getHumanCut());
AllZone.GameAction.moveTo(AllZone.getZone(Constant.Zone.Library, AllZone.ComputerPlayer),AllZone.GameAction.getComputerCut());
StringBuilder sb = new StringBuilder();
sb.append(ForgeProps.getLocalized(GAMEACTION_TEXT.HUMAN_CUT) + HumanCut.getName() + " (" + HumanCut.getManaCost() + ")" + "\r\n");
sb.append(ForgeProps.getLocalized(GAMEACTION_TEXT.COMPUTER_CUT) + ComputerCut.getName() + " (" + ComputerCut.getManaCost() + ")" + "\r\n");
sb.append(ForgeProps.getLocalized(GAMEACTION_TEXT.HUMAN_CUT) + getHumanCut().getName() + " (" + getHumanCut().getManaCost() + ")" + "\r\n");
sb.append(ForgeProps.getLocalized(GAMEACTION_TEXT.COMPUTER_CUT) + getComputerCut().getName() + " (" + getComputerCut().getManaCost() + ")" + "\r\n");
sb.append("\r\n" + "Number of times the deck has been cut: " + Cut_Count + "\r\n");
if(CardUtil.getConvertedManaCost(ComputerCut.getManaCost()) > CardUtil.getConvertedManaCost(HumanCut.getManaCost())){
if(CardUtil.getConvertedManaCost(getComputerCut().getManaCost()) > CardUtil.getConvertedManaCost(getHumanCut().getManaCost())){
computerStartsGame();
JOptionPane.showMessageDialog(null, sb + ForgeProps.getLocalized(GAMEACTION_TEXT.COMPUTER_STARTS), "", JOptionPane.INFORMATION_MESSAGE);
return;
}
else if(CardUtil.getConvertedManaCost(ComputerCut.getManaCost()) < CardUtil.getConvertedManaCost(HumanCut.getManaCost())) {
else if(CardUtil.getConvertedManaCost(getComputerCut().getManaCost()) < CardUtil.getConvertedManaCost(getHumanCut().getManaCost())) {
JOptionPane.showMessageDialog(null, sb + ForgeProps.getLocalized(GAMEACTION_TEXT.HUMAN_STARTS), "", JOptionPane.INFORMATION_MESSAGE);
return;
}
@@ -2856,7 +2873,7 @@ public class GameAction {
} // isSpell
// Get Cost Reduction
if(Phase.GameBegins == 1) { // Remove GameBegins from Phase and into The starting game code
if(Phase.getGameBegins() == 1) { // Remove GameBegins from Phase and into The starting game code
CardList Cards_In_Play = new CardList();
Cards_In_Play.addAll(AllZone.getZone(Constant.Zone.Battlefield, AllZone.HumanPlayer).getCards());
Cards_In_Play.addAll(AllZone.getZone(Constant.Zone.Battlefield, AllZone.ComputerPlayer).getCards());
@@ -3218,7 +3235,7 @@ public class GameAction {
Cost_Payment payment = null;
if(sa.getPayCosts() == null)
{
payment = new Cost_Payment(new Ability_Cost("0",sa.getSourceCard().getName(),sa.isAbility()), sa);
payment = new Cost_Payment(new Cost("0",sa.getSourceCard().getName(),sa.isAbility()), sa);
}
else
{
@@ -3480,4 +3497,36 @@ public class GameAction {
}
}//for
}
public static void setMultiTargetCancelled(boolean multiTarget_Cancelled) {
MultiTarget_Cancelled = multiTarget_Cancelled;
}
public static boolean isMultiTargetCancelled() {
return MultiTarget_Cancelled;
}
public void setComputerCut(Card computerCut) {
ComputerCut = computerCut;
}
public Card getComputerCut() {
return ComputerCut;
}
public void setStartCut(boolean start_Cut) {
Start_Cut = start_Cut;
}
public boolean isStartCut() {
return Start_Cut;
}
public void setHumanCut(Card humanCut) {
HumanCut = humanCut;
}
public Card getHumanCut() {
return HumanCut;
}
}

View File

@@ -7,7 +7,21 @@ import java.util.HashMap;
import javax.swing.JOptionPane;
import forge.card.abilityFactory.AbilityFactory;
import forge.card.cardFactory.CardFactory;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.spellability.Ability;
import forge.card.spellability.Ability_Activated;
import forge.card.spellability.Ability_Mana;
import forge.card.spellability.Ability_Static;
import forge.card.spellability.Cost;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.gui.GuiUtils;
import forge.gui.input.Input;
import forge.gui.input.Input_PayManaCostUtil;
import forge.gui.input.Input_PayManaCost_Ability;
public class GameActionUtil {
@@ -390,7 +404,7 @@ public class GameActionUtil {
Card source = sa.getSourceCard();
if(!source.isCopiedSpell() && source.getKeyword().contains("Storm"))
{
int StormNumber = Phase.StormCount - 1;
int StormNumber = Phase.getStormCount() - 1;
for(int i = 0; i < StormNumber; i++)
AllZone.CardFactory.copySpellontoStack(source, source, sa, true);
}
@@ -5962,7 +5976,7 @@ public class GameActionUtil {
}
if(!hasAbility) {
Ability_Cost abCost = new Ability_Cost("T", c.getName(), true);
Cost abCost = new Cost("T", c.getName(), true);
Target target = new Target(c,"TgtCP");
final Ability_Activated ability = new Ability_Activated(c, abCost, target)
{
@@ -6705,7 +6719,7 @@ public class GameActionUtil {
PlayerZone opponentPlayZone = AllZone.getZone(Constant.Zone.Battlefield,AllZone.ComputerPlayer);
CardList opponentCreatureList = new CardList(opponentPlayZone.getCards());
opponentCreatureList = opponentCreatureList.getType("Creature");
if(Phase.Sac_Dauntless_Escort == true) {
if(Phase.isSacDauntlessEscort() == true) {
if(PlayerCreatureList.size() != 0) {
for(int i = 0; i < PlayerCreatureList.size(); i++) {
Card c = PlayerCreatureList.get(i);
@@ -6738,7 +6752,7 @@ public class GameActionUtil {
opponentPlayZone = AllZone.getZone(Constant.Zone.Battlefield,AllZone.HumanPlayer);
opponentCreatureList = new CardList(opponentPlayZone.getCards());
opponentCreatureList = opponentCreatureList.getType("Creature");
if(Phase.Sac_Dauntless_Escort_Comp == true) {
if(Phase.isSacDauntlessEscortAI() == true) {
if(PlayerCreatureList.size() != 0) {
for(int i = 0; i < PlayerCreatureList.size(); i++) {
Card c = PlayerCreatureList.get(i);
@@ -7180,7 +7194,7 @@ public class GameActionUtil {
CardList next = new CardList();
public void execute() {
if(Phase.GameBegins == 1) {
if(Phase.getGameBegins() == 1) {
// reset creatures
removeSwampwalk(old);
@@ -7247,7 +7261,7 @@ public class GameActionUtil {
CardList next = new CardList();
public void execute() {
if(Phase.GameBegins == 1) {
if(Phase.getGameBegins() == 1) {
// reset creatures
removeFirstStrike(old);
@@ -7314,7 +7328,7 @@ public class GameActionUtil {
CardList next = new CardList();
public void execute() {
if(Phase.GameBegins == 1) {
if(Phase.getGameBegins() == 1) {
// reset creatures
removeHaste(old);
@@ -7381,7 +7395,7 @@ public class GameActionUtil {
CardList next = new CardList();
public void execute() {
if(Phase.GameBegins == 1) {
if(Phase.getGameBegins() == 1) {
// reset creatures
removeFlying(old);
@@ -7448,7 +7462,7 @@ public class GameActionUtil {
CardList next = new CardList();
public void execute() {
if(Phase.GameBegins == 1) {
if(Phase.getGameBegins() == 1) {
// reset creatures
removeTrample(old);

View File

@@ -2,6 +2,8 @@ package forge;
import java.util.ArrayList;
import forge.card.mana.ManaCost;
public class GameInfo {
private boolean computerStartedThisGame = false;

View File

@@ -2,12 +2,18 @@
package forge;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.spellability.SpellAbility;
import forge.error.ErrorViewer;
import forge.gui.ForgeAction;
import forge.gui.GuiUtils;
import forge.gui.game.CardDetailPanel;
import forge.gui.game.CardPanel;
import forge.gui.game.CardPicturePanel;
import forge.gui.input.Input_Attack;
import forge.gui.input.Input_Block;
import forge.gui.input.Input_PayManaCost;
import forge.gui.input.Input_PayManaCost_Ability;
import forge.properties.ForgePreferences;
import forge.properties.ForgeProps;
import forge.properties.NewConstants;

View File

@@ -5,11 +5,17 @@ import arcane.ui.HandArea;
import arcane.ui.PlayArea;
import arcane.ui.ViewPanel;
import arcane.ui.util.Animation;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.spellability.SpellAbility;
import forge.error.ErrorViewer;
import forge.gui.ForgeAction;
import forge.gui.GuiUtils;
import forge.gui.game.CardDetailPanel;
import forge.gui.game.CardPanel;
import forge.gui.input.Input_Attack;
import forge.gui.input.Input_Block;
import forge.gui.input.Input_PayManaCost;
import forge.gui.input.Input_PayManaCost_Ability;
import forge.properties.ForgePreferences;
import forge.properties.ForgeProps;
import forge.properties.NewConstants;

View File

@@ -21,6 +21,9 @@ import javax.swing.event.MouseInputAdapter;
import arcane.ui.PlayArea;
import arcane.ui.util.Animation;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.mana.ManaPool;
import forge.card.spellability.Ability_Mana;
import forge.gui.game.CardPanel;
import forge.properties.NewConstants;
@@ -913,7 +916,7 @@ public class GuiDisplayUtil implements NewConstants {
p.repaint();
}
static void updateGUI() {
public static void updateGUI() {
AllZone.Computer_Battlefield.updateObservers();
AllZone.Human_Battlefield.updateObservers();
AllZone.Human_Hand.updateObservers();

View File

@@ -5,6 +5,8 @@ package forge;
import java.util.Observable;
import java.util.Observer;
import forge.gui.input.Input;
public class GuiInput extends MyObservable implements Observer {
Input input;

View File

@@ -30,6 +30,7 @@ import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import javax.swing.filechooser.FileFilter;
import forge.deck.generate.GenerateConstructedDeck;
import forge.error.ErrorViewer;
import forge.gui.GuiUtils;
import forge.properties.ForgeProps;

View File

@@ -266,7 +266,7 @@ public class Gui_DownloadSetPictures_LQ extends DefaultBoundedRangeModel impleme
// pause
try
{
Thread.sleep(2442);
Thread.sleep(150);
}
catch (InterruptedException e)
{

View File

@@ -3,6 +3,13 @@ package forge;
import arcane.ui.util.ManaSymbols;
import arcane.util.MultiplexOutputStream;
import com.esotericsoftware.minlog.Log;
import forge.deck.generate.Generate2ColorDeck;
import forge.deck.generate.Generate3ColorDeck;
import forge.deck.generate.GenerateConstructedDeck;
import forge.deck.generate.GenerateConstructedMultiColorDeck;
import forge.deck.generate.GenerateSealedDeck;
import forge.deck.generate.GenerateThemeDeck;
import forge.error.ErrorViewer;
import forge.error.ExceptionHandler;
import forge.gui.GuiUtils;

View File

@@ -117,7 +117,7 @@ public class Gui_WinLose extends JFrame implements NewConstants {
private void setup() {
AllZone.GameInfo.clearColorChanges();
QuestMatchState winLose = Constant.Runtime.matchState;
Phase.GameBegins = 0;
Phase.setGameBegins(0);
//3 is the match length, 3 is the number of games
//disable buttons if match is up, or human player won 2 or lost 2 games already
if((winLose.countWinLose() == 3) || (winLose.getWin() == 2) || (winLose.getLose() == 2)) {

View File

@@ -1,7 +1,10 @@
package forge;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.spellability.SpellAbility;
import forge.gui.GuiUtils;
import forge.gui.input.Input;
public class HumanPlayer extends Player{

View File

@@ -6,6 +6,19 @@ import java.util.Iterator;
import com.esotericsoftware.minlog.Log;
import forge.card.abilityFactory.AbilityFactory;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.mana.ManaCost;
import forge.card.spellability.Ability;
import forge.card.spellability.Ability_Mana;
import forge.card.spellability.Ability_Static;
import forge.card.spellability.Ability_Triggered;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Spell_Permanent;
import forge.card.spellability.Target;
import forge.gui.input.Input;
import forge.gui.input.Input_PayManaCost_Ability;
public class MagicStack extends MyObservable {
private ArrayList<SpellAbility> stack = new ArrayList<SpellAbility>();
private ArrayList<SpellAbility> frozenStack = new ArrayList<SpellAbility>();
@@ -253,7 +266,7 @@ public class MagicStack extends MyObservable {
push(sp);
}
else if (sp.payCosts != null){
else if (sp.getPayCosts() != null){
push(sp);
}
@@ -602,7 +615,7 @@ public class MagicStack extends MyObservable {
this.updateObservers();
if (sp.isSpell() && !sp.getSourceCard().isCopiedSpell()) {
Phase.StormCount = Phase.StormCount + 1;
Phase.setStormCount(Phase.getStormCount() + 1);
if (sp.getSourceCard().getController() == AllZone.HumanPlayer) {
Phase.PlayerSpellCount = Phase.PlayerSpellCount + 1;
if (sp.getSourceCard().isCreature()) {

View File

@@ -6,6 +6,7 @@ import java.util.Map;
import java.util.StringTokenizer;
import java.util.Map.Entry;
import forge.card.spellability.SpellAbility;
import forge.error.ErrorViewer;
import forge.properties.ForgeProps;
import forge.properties.NewConstants;

View File

@@ -12,21 +12,21 @@ public class Phase extends MyObservable
private int phaseIndex;
private int turn;
static int GameBegins = 0;
static int StormCount;
static CardList HighTides = new CardList();
private static int GameBegins = 0;
private static int StormCount;
private static CardList HighTides = new CardList();
static int PlayerSpellCount;
static int PlayerCreatureSpellCount;
static int ComputerSpellCount;
static int ComputerCreatureSpellCount;
static boolean Sac_Dauntless_Escort;
static boolean Sac_Dauntless_Escort_Comp;
private static boolean Sac_Dauntless_Escort;
private static boolean Sac_Dauntless_Escort_Comp;
//Not sure these should be here but I can't think of a better place
static ArrayList<Integer> ManaDrain_BonusMana_Human = new ArrayList<Integer>();
static ArrayList<Integer> ManaDrain_BonusMana_AI = new ArrayList<Integer>();
static CardList ManaDrain_Source_Human = new CardList();
static CardList ManaDrain_Source_AI = new CardList();
private static ArrayList<Integer> ManaDrain_BonusMana_Human = new ArrayList<Integer>();
private static ArrayList<Integer> ManaDrain_BonusMana_AI = new ArrayList<Integer>();
private static CardList ManaDrain_Source_Human = new CardList();
private static CardList ManaDrain_Source_AI = new CardList();
private Stack<Player> extraTurns = new Stack<Player>();
@@ -136,7 +136,7 @@ public class Phase extends MyObservable
resetPriority();
bPhaseEffects = true;
needToNextPhase = false;
GameBegins = 0;
setGameBegins(0);
phaseIndex = 0;
extraTurns.clear();
nCombatsThisTurn = 0;
@@ -147,8 +147,8 @@ public class Phase extends MyObservable
}
public void turnReset(){
StormCount = 0;
HighTides.clear();
setStormCount(0);
getHighTides().clear();
PlayerSpellCount = 0;
PlayerCreatureSpellCount = 0;
ComputerSpellCount = 0;
@@ -178,22 +178,22 @@ public class Phase extends MyObservable
// TODO: Move the function to Player class, and use gainManaDrainMana() instead
// turn.gainManaDrainMana();
if (turn.isHuman() && Phase.ManaDrain_BonusMana_Human.size() != 0){
for(int i=0;i<Phase.ManaDrain_BonusMana_Human.size();i++)
AllZone.ManaPool.addManaToFloating(Integer.toString(Phase.ManaDrain_BonusMana_Human.get(i)), Phase.ManaDrain_Source_Human.get(i) );
if (turn.isHuman() && Phase.getManaDrain_BonusMana_Human().size() != 0){
for(int i=0;i<Phase.getManaDrain_BonusMana_Human().size();i++)
AllZone.ManaPool.addManaToFloating(Integer.toString(Phase.getManaDrain_BonusMana_Human().get(i)), Phase.getManaDrain_Source_Human().get(i) );
Phase.ManaDrain_BonusMana_Human.clear();
Phase.ManaDrain_Source_Human.clear();
Phase.getManaDrain_BonusMana_Human().clear();
Phase.getManaDrain_Source_Human().clear();
}
if(turn.isComputer() && Phase.ManaDrain_BonusMana_AI.size() != 0){
if(turn.isComputer() && Phase.getManaDrain_BonusMana_AI().size() != 0){
//for(int i=0;i<Phase.ManaDrain_BonusMana_AI.size();i++)
// AllZone.ManaPool.addManaToFloating(Integer.toString(Phase.ManaDrain_BonusMana_AI.get(i)), Phase.ManaDrain_Source_AI.get(i) );
// Mana is currently lost for AI. The above commented code was adding to the Human's mana pool
Phase.ManaDrain_BonusMana_AI.clear();
Phase.ManaDrain_Source_AI.clear();
Phase.getManaDrain_BonusMana_AI().clear();
Phase.getManaDrain_Source_AI().clear();
}
}
@@ -602,4 +602,78 @@ public class Phase extends MyObservable
phase.nextPhase();
}
}
public static void setSacDauntlessEscort(boolean sac_Dauntless_Escort) {
Sac_Dauntless_Escort = sac_Dauntless_Escort;
}
public static boolean isSacDauntlessEscort() {
return Sac_Dauntless_Escort;
}
public static void setSacDauntlessEscortAI(boolean sac_Dauntless_Escort_Comp) {
Sac_Dauntless_Escort_Comp = sac_Dauntless_Escort_Comp;
}
public static boolean isSacDauntlessEscortAI() {
return Sac_Dauntless_Escort_Comp;
}
public static void setStormCount(int stormCount) {
StormCount = stormCount;
}
public static int getStormCount() {
return StormCount;
}
public static void setHighTides(CardList highTides) {
HighTides = highTides;
}
public static CardList getHighTides() {
return HighTides;
}
public static void setManaDrain_BonusMana_Human(
ArrayList<Integer> manaDrain_BonusMana_Human) {
ManaDrain_BonusMana_Human = manaDrain_BonusMana_Human;
}
public static ArrayList<Integer> getManaDrain_BonusMana_Human() {
return ManaDrain_BonusMana_Human;
}
public static void setManaDrain_Source_Human(CardList manaDrain_Source_Human) {
ManaDrain_Source_Human = manaDrain_Source_Human;
}
public static CardList getManaDrain_Source_Human() {
return ManaDrain_Source_Human;
}
public static void setManaDrain_BonusMana_AI(
ArrayList<Integer> manaDrain_BonusMana_AI) {
ManaDrain_BonusMana_AI = manaDrain_BonusMana_AI;
}
public static ArrayList<Integer> getManaDrain_BonusMana_AI() {
return ManaDrain_BonusMana_AI;
}
public static void setManaDrain_Source_AI(CardList manaDrain_Source_AI) {
ManaDrain_Source_AI = manaDrain_Source_AI;
}
public static CardList getManaDrain_Source_AI() {
return ManaDrain_Source_AI;
}
public static void setGameBegins(int gameBegins) {
GameBegins = gameBegins;
}
public static int getGameBegins() {
return GameBegins;
}
}

View File

@@ -2,6 +2,9 @@ package forge;
import java.util.ArrayList;
import forge.card.cardFactory.CardFactoryUtil;
import forge.gui.input.Input;
public class PhaseUtil {
// ******* UNTAP PHASE *****
private static boolean skipUntap(Player p) {

View File

@@ -9,6 +9,10 @@ import java.util.Random;
import javax.swing.JOptionPane;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.spellability.Ability;
import forge.card.spellability.SpellAbility;
public abstract class Player extends MyObservable{
protected String name;

View File

@@ -1,12 +1,16 @@
package forge;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.spellability.Ability;
import forge.card.spellability.SpellAbility;
public class PlayerZone_ComesIntoPlay extends DefaultPlayerZone {
private static final long serialVersionUID = 5750837078903423978L;
private boolean trigger = true;
private boolean leavesTrigger = true;
static boolean SimultaneousEntry = false; // For Cards with Multiple Token Entry. Only Affects Allies at the moment.
private static boolean SimultaneousEntry = false; // For Cards with Multiple Token Entry. Only Affects Allies at the moment.
static int SimultaneousEntryCounter = 1; // For Cards with Multiple Token Entry. Only Affects Allies at the moment.
public PlayerZone_ComesIntoPlay(String zone, Player player) {
@@ -322,4 +326,12 @@ public class PlayerZone_ComesIntoPlay extends DefaultPlayerZone {
trigger = b;
leavesTrigger = b;
}
public static void setSimultaneousEntry(boolean simultaneousEntry) {
SimultaneousEntry = simultaneousEntry;
}
public static boolean isSimultaneousEntry() {
return SimultaneousEntry;
}
}

View File

@@ -2,6 +2,10 @@ package forge;
import java.util.ArrayList;
import forge.card.spellability.Ability_Activated;
import forge.card.spellability.Cost;
import forge.card.spellability.SpellAbility;
@Deprecated
@SuppressWarnings("deprecation")
public class QuestUtil {
@@ -146,7 +150,7 @@ public class QuestUtil {
if (level == 6)
{
final Card crd = c;
Ability_Cost abCost = new Ability_Cost("T", crd.getName(), true);
Cost abCost = new Cost("T", crd.getName(), true);
final SpellAbility ability = new Ability_Activated(crd, abCost, null){
private static final long serialVersionUID = 7546242087593613719L;

View File

@@ -10,6 +10,7 @@ import java.util.StringTokenizer;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import forge.card.trigger.TriggerHandler;
import forge.error.ErrorViewer;
import forge.properties.ForgeProps;
import forge.properties.NewConstants;

View File

@@ -3,6 +3,10 @@ import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import forge.card.cardFactory.CardFactory;
import forge.card.mana.ManaCost;
import forge.gui.input.Input_PayManaCostUtil;
public class RunTest
{
//@SuppressWarnings("unchecked") // HashSet needs <type>

View File

@@ -3,6 +3,8 @@ import java.util.HashMap;
import com.esotericsoftware.minlog.Log;
import forge.card.cardFactory.CardFactoryUtil;
public class StaticEffects
{

View File

@@ -1,5 +1,5 @@
package forge;
interface UndoCommand extends Command
public interface UndoCommand extends Command
{
public void execute();
public void undo();

View File

@@ -1,8 +1,22 @@
package forge;
package forge.card.abilityFactory;
import java.util.ArrayList;
import java.util.HashMap;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.Card;
import forge.CardList;
import forge.ComputerAI_counterSpells2;
import forge.Constant;
import forge.Player;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.spellability.Ability_Sub;
import forge.card.spellability.Cost;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.SpellAbility_Restriction;
import forge.card.spellability.Target;
public class AbilityFactory {
private Card hostC = null;
@@ -37,9 +51,9 @@ public class AbilityFactory {
return isDb;
}
private Ability_Cost abCost = null;
private Cost abCost = null;
public Ability_Cost getAbCost()
public Cost getAbCost()
{
return abCost;
}
@@ -148,7 +162,7 @@ public class AbilityFactory {
if (!isDb){
if (!mapParams.containsKey("Cost"))
throw new RuntimeException("AbilityFactory : getAbility -- no Cost in " + hostCard.getName());
abCost = new Ability_Cost(mapParams.get("Cost"), hostCard.getName(), isAb);
abCost = new Cost(mapParams.get("Cost"), hostCard.getName(), isAb);
}
if (mapParams.containsKey("ValidTgts"))

View File

@@ -1,9 +1,23 @@
package forge;
package forge.card.abilityFactory;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Random;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.Card;
import forge.ComputerUtil;
import forge.Counters;
import forge.Player;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.spellability.Ability_Activated;
import forge.card.spellability.Ability_Sub;
import forge.card.spellability.Cost;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
public class AbilityFactory_AlterLife {
// An AbilityFactory subclass for Gaining, Losing, or Setting Life totals.
@@ -144,7 +158,7 @@ public class AbilityFactory_AlterLife {
public static boolean gainLifeCanPlayAI(final AbilityFactory af, final SpellAbility sa){
Random r = new Random();
HashMap<String,String> params = af.getMapParams();
Ability_Cost abCost = sa.getPayCosts();
Cost abCost = sa.getPayCosts();
final Card source = sa.getSourceCard();
int life = AllZone.ComputerPlayer.getLife();
int lifeAmount = AbilityFactory.calculateAmount(af.getHostCard(), params.get("LifeAmount"), sa);
@@ -397,7 +411,7 @@ public class AbilityFactory_AlterLife {
public static boolean loseLifeCanPlayAI(final AbilityFactory af, final SpellAbility sa){
Random r = new Random();
Ability_Cost abCost = sa.getPayCosts();
Cost abCost = sa.getPayCosts();
final Card source = sa.getSourceCard();
int humanLife = AllZone.HumanPlayer.getLife();
int aiLife = AllZone.ComputerPlayer.getLife();
@@ -717,7 +731,7 @@ public class AbilityFactory_AlterLife {
}
private static boolean poisonCanPlayAI(final AbilityFactory af, final SpellAbility sa, final String amountStr){
Ability_Cost abCost = sa.getPayCosts();
Cost abCost = sa.getPayCosts();
//int humanPoison = AllZone.HumanPlayer.getPoisonCounters();
int humanLife = AllZone.HumanPlayer.getLife();
//int aiPoison = AllZone.ComputerPlayer.getPoisonCounters();

View File

@@ -1,10 +1,24 @@
package forge;
package forge.card.abilityFactory;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Arrays;
import forge.AllZone;
import forge.Card;
import forge.Command;
import forge.ComputerUtil;
import forge.Constant;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.spellability.Ability_Activated;
import forge.card.spellability.Ability_Sub;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.card.trigger.Trigger;
import forge.card.trigger.TriggerHandler;
public class AbilityFactory_Animate {
//**************************************************************
@@ -132,6 +146,7 @@ public class AbilityFactory_Animate {
if(tgts.size() == 1) sb.append("s a");
//if power is -1, we'll assume it's not just setting toughness
if(power != -1) sb.append(" ").append(power).append("/").append(toughness);
if(colors.size() > 0) sb.append(" ");
for(int i = 0; i < colors.size(); i++) {
sb.append(colors.get(i));
@@ -365,8 +380,8 @@ public class AbilityFactory_Animate {
}
private static long doAnimate(Card c, AbilityFactory af, int power, int toughness, ArrayList<String> types, String colors, ArrayList<String> keywords) {
if(power != -1) c.setBaseAttack(power);
if(toughness != -1) c.setBaseDefense(toughness);
if (power != -1) c.setBaseAttack(power);
if (toughness != -1) c.setBaseDefense(toughness);
if(null != af && af.getMapParams().containsKey("OverwriteTypes")) c.clearAllTypes();
for(String r : types) {

View File

@@ -1,4 +1,4 @@
package forge;
package forge.card.abilityFactory;
public class AbilityFactory_Bounce {
// An AbilityFactory subclass for bouncing and exiling permanents

View File

@@ -1,9 +1,25 @@
package forge;
package forge.card.abilityFactory;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Random;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.Card;
import forge.CardList;
import forge.ComputerUtil;
import forge.Constant;
import forge.GameActionUtil;
import forge.Player;
import forge.PlayerZone;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.spellability.Ability_Activated;
import forge.card.spellability.Ability_Sub;
import forge.card.spellability.Cost;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.gui.GuiUtils;
public class AbilityFactory_ChangeZone {
@@ -185,7 +201,7 @@ public class AbilityFactory_ChangeZone {
private static boolean changeHiddenOriginCanPlayAI(AbilityFactory af, SpellAbility sa){
// Fetching should occur fairly often as it helps cast more spells, and have access to more mana
Ability_Cost abCost = af.getAbCost();
Cost abCost = af.getAbCost();
Card source = af.getHostCard();
HashMap<String,String> params = af.getMapParams();
//String destination = params.get("Destination");
@@ -705,7 +721,7 @@ public class AbilityFactory_ChangeZone {
private static boolean changeKnownOriginCanPlayAI(AbilityFactory af, SpellAbility sa){
// Retrieve either this card, or target Cards in Graveyard
Ability_Cost abCost = af.getAbCost();
Cost abCost = af.getAbCost();
final Card source = af.getHostCard();
HashMap<String,String> params = af.getMapParams();
@@ -1236,7 +1252,7 @@ public class AbilityFactory_ChangeZone {
private static boolean changeZoneAllCanPlayAI(AbilityFactory af, SpellAbility sa){
// Change Zone All, can be any type moving from one zone to another
Ability_Cost abCost = af.getAbCost();
Cost abCost = af.getAbCost();
Card source = af.getHostCard();
HashMap<String,String> params = af.getMapParams();
String destination = params.get("Destination");

View File

@@ -1,12 +1,16 @@
package forge;
package forge.card.abilityFactory;
import java.util.Random;
import forge.card.spellability.Ability_Activated;
import forge.card.spellability.Ability_Sub;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
public class AbilityFactory_Clash {
public static SpellAbility getAbility(final AbilityFactory AF)
{
final SpellAbility abClash = new Ability_Activated(AF.getHostCard(),AF.getAbCost(),AF.getAbTgt()) {
private static final long serialVersionUID = -8019637116128196248L;
@Override
public boolean canPlayAI()
@@ -45,6 +49,7 @@ public class AbilityFactory_Clash {
public static SpellAbility getSpell(final AbilityFactory AF)
{
final SpellAbility spClash = new Spell(AF.getHostCard(),AF.getAbCost(),AF.getAbTgt()) {
private static final long serialVersionUID = -4991665176268317172L;
@Override
public boolean canPlayAI()
@@ -83,6 +88,7 @@ public class AbilityFactory_Clash {
public static SpellAbility getDrawback(final AbilityFactory AF)
{
final SpellAbility dbClash = new Ability_Sub(AF.getHostCard(),AF.getAbTgt()) {
private static final long serialVersionUID = -3850086157052881360L;
@Override
public boolean canPlayAI()

View File

@@ -1,7 +1,18 @@
package forge;
package forge.card.abilityFactory;
import java.util.HashMap;
import forge.AllZone;
import forge.Card;
import forge.CombatUtil;
import forge.ComputerUtil;
import forge.Constant;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.spellability.Ability_Activated;
import forge.card.spellability.Ability_Sub;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
public class AbilityFactory_Combat {
//**************************************************************
// ****************************** FOG **************************

View File

@@ -1,9 +1,26 @@
package forge;
package forge.card.abilityFactory;
import java.util.ArrayList;
import java.util.HashMap;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.Card;
import forge.CardList;
import forge.CardListFilter;
import forge.Command;
import forge.ComputerUtil;
import forge.Constant;
import forge.GameActionUtil;
import forge.Player;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.spellability.Ability;
import forge.card.spellability.Ability_Activated;
import forge.card.spellability.Ability_Sub;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.gui.GuiUtils;
import forge.gui.input.Input;
//Type - Spell or Ability or SpellOrAbility
//CounterValid - a "valid" expression for types to counter

View File

@@ -1,10 +1,29 @@
package forge;
package forge.card.abilityFactory;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Random;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.ButtonUtil;
import forge.Card;
import forge.CardList;
import forge.CardListFilter;
import forge.ComputerUtil;
import forge.Constant;
import forge.Counters;
import forge.Player;
import forge.PlayerZone;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.spellability.Ability_Activated;
import forge.card.spellability.Ability_Sub;
import forge.card.spellability.Cost;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.gui.GuiUtils;
import forge.gui.input.Input;
public class AbilityFactory_Counters {
// An AbilityFactory subclass for Putting or Removing Counters on Cards.
@@ -138,7 +157,7 @@ public class AbilityFactory_Counters {
public static boolean putCanPlayAI(final AbilityFactory af, final SpellAbility sa){
// AI needs to be expanded, since this function can be pretty complex based on what the expected targets could be
Random r = new Random();
Ability_Cost abCost = sa.getPayCosts();
Cost abCost = sa.getPayCosts();
Target abTgt = sa.getTarget();
final Card source = sa.getSourceCard();
CardList list;
@@ -610,7 +629,7 @@ public class AbilityFactory_Counters {
public static boolean removeCanPlayAI(final AbilityFactory af, final SpellAbility sa){
// AI needs to be expanded, since this function can be pretty complex based on what the expected targets could be
Random r = new Random();
Ability_Cost abCost = sa.getPayCosts();
Cost abCost = sa.getPayCosts();
//Target abTgt = sa.getTarget();
final Card source = sa.getSourceCard();
//CardList list;
@@ -1145,7 +1164,7 @@ public class AbilityFactory_Counters {
// AI needs to be expanded, since this function can be pretty complex based on what the expected targets could be
Random r = new Random();
HashMap<String,String> params = af.getMapParams();
Ability_Cost abCost = sa.getPayCosts();
Cost abCost = sa.getPayCosts();
final Card source = sa.getSourceCard();
CardList hList;
CardList cList;

View File

@@ -1,10 +1,27 @@
package forge;
package forge.card.abilityFactory;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Random;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.Card;
import forge.CardList;
import forge.CardListFilter;
import forge.ComputerUtil;
import forge.Constant;
import forge.Counters;
import forge.Player;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.spellability.Ability_Activated;
import forge.card.spellability.Ability_Sub;
import forge.card.spellability.Cost;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
public class AbilityFactory_DealDamage {
private AbilityFactory AF = null;
@@ -665,7 +682,7 @@ public class AbilityFactory_DealDamage {
private boolean damageAllCanPlayAI(final AbilityFactory af, final SpellAbility sa){
// AI needs to be expanded, since this function can be pretty complex based on what the expected targets could be
Random r = new Random();
Ability_Cost abCost = sa.getPayCosts();
Cost abCost = sa.getPayCosts();
final Card source = sa.getSourceCard();
final HashMap<String,String> params = af.getMapParams();

View File

@@ -1,9 +1,23 @@
package forge;
package forge.card.abilityFactory;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Random;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.Card;
import forge.CardList;
import forge.CardListFilter;
import forge.ComputerUtil;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.spellability.Ability_Activated;
import forge.card.spellability.Ability_Sub;
import forge.card.spellability.Cost;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
public class AbilityFactory_Destroy {
// An AbilityFactory subclass for destroying permanents
// *********************************************************************************
@@ -96,7 +110,7 @@ public class AbilityFactory_Destroy {
public static boolean destroyCanPlayAI(final AbilityFactory af, final SpellAbility sa){
// AI needs to be expanded, since this function can be pretty complex based on what the expected targets could be
Random r = new Random();
Ability_Cost abCost = sa.getPayCosts();
Cost abCost = sa.getPayCosts();
Target abTgt = sa.getTarget();
final Card source = sa.getSourceCard();
final boolean noRegen = af.getMapParams().containsKey("NoRegen");
@@ -501,7 +515,7 @@ public class AbilityFactory_Destroy {
public static boolean destroyAllCanPlayAI(final AbilityFactory af, final SpellAbility sa, final boolean noRegen){
// AI needs to be expanded, since this function can be pretty complex based on what the expected targets could be
Random r = new Random();
Ability_Cost abCost = sa.getPayCosts();
Cost abCost = sa.getPayCosts();
final Card source = sa.getSourceCard();
final HashMap<String,String> params = af.getMapParams();
String Valid = "";

View File

@@ -1,4 +1,4 @@
package forge;
package forge.card.abilityFactory;
public class AbilityFactory_Fetch {
// An AbilityFactory subclass for Fetching Cards from Places

View File

@@ -1,10 +1,25 @@
package forge;
package forge.card.abilityFactory;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Hashtable;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.Card;
import forge.CardList;
import forge.CardListFilter;
import forge.Command;
import forge.Constant;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.spellability.Ability;
import forge.card.spellability.Ability_Activated;
import forge.card.spellability.Ability_Sub;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
//AB:GainControl|ValidTgts$Creature|TgtPrompt$Select target legendary creature|LoseControl$Untap,LoseControl|SpellDescription$Gain control of target xxxxxxx
//GainControl specific params:

View File

@@ -1,9 +1,23 @@
package forge;
package forge.card.abilityFactory;
import java.util.ArrayList;
import java.util.HashMap;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.Card;
import forge.CardList;
import forge.Constant;
import forge.Counters;
import forge.Player;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.spellability.Ability_Mana;
import forge.card.spellability.Ability_Sub;
import forge.card.spellability.Cost;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.gui.GuiUtils;
import forge.gui.input.Input_PayManaCostUtil;
public class AbilityFactory_Mana {
// ****************************** MANA ************************
@@ -39,7 +53,7 @@ public class AbilityFactory_Mana {
final AbilityFactory af = AF;
// To get the mana to resolve properly, we need the spell to contain an Ability_Mana
Ability_Cost tmp = new Ability_Cost("0", AF.getHostCard().getName(), false);
Cost tmp = new Cost("0", AF.getHostCard().getName(), false);
Ability_Mana tmpMana = new Ability_Mana(AF.getHostCard(), tmp, produced){
private static final long serialVersionUID = 1454043766057140491L;
@@ -78,7 +92,7 @@ public class AbilityFactory_Mana {
final AbilityFactory af = AF;
// To get the mana to resolve properly, we need the spell to contain an Ability_Mana
Ability_Cost tmp = new Ability_Cost("0", AF.getHostCard().getName(), false);
Cost tmp = new Cost("0", AF.getHostCard().getName(), false);
Ability_Mana tmpMana = new Ability_Mana(AF.getHostCard(), tmp, produced){
private static final long serialVersionUID = 1454043766057140491L;
@@ -140,7 +154,7 @@ public class AbilityFactory_Mana {
public static void manaResolve(Ability_Mana abMana, AbilityFactory af, SpellAbility sa){
// Spells are not undoable
abMana.undoable = af.isAbility() && abMana.isUndoable();
abMana.setUndoable(af.isAbility() && abMana.isUndoable());
HashMap<String,String> params = af.getMapParams();
Card card = af.getHostCard();
@@ -149,7 +163,7 @@ public class AbilityFactory_Mana {
// convert these to SubAbilities when appropriate
if (params.containsKey("Stuck")){
abMana.undoable = false;
abMana.setUndoable(false);
card.addExtrinsicKeyword("This card doesn't untap during your next untap step.");
}
@@ -157,7 +171,7 @@ public class AbilityFactory_Mana {
if (deplete != null){
int num = card.getCounters(Counters.getType(deplete));
if (num == 0){
abMana.undoable = false;
abMana.setUndoable(false);
AllZone.GameAction.sacrifice(card);
}
}
@@ -186,10 +200,10 @@ public class AbilityFactory_Mana {
try{
if (params.get("Amount") != null && amount != Integer.parseInt(params.get("Amount")))
abMana.undoable = false;
abMana.setUndoable(false);
}
catch(NumberFormatException n){
abMana.undoable = false;
abMana.setUndoable(false);
}
StringBuilder sb = new StringBuilder();
@@ -247,7 +261,7 @@ public class AbilityFactory_Mana {
final AbilityFactory af = AF;
// To get the mana to resolve properly, we need the spell to contain an Ability_Mana
Ability_Cost tmp = new Ability_Cost("0", AF.getHostCard().getName(), false);
Cost tmp = new Cost("0", AF.getHostCard().getName(), false);
Ability_Mana tmpMana = new Ability_Mana(AF.getHostCard(), tmp, produced){
private static final long serialVersionUID = 1454043766057140491L;
@@ -282,7 +296,7 @@ public class AbilityFactory_Mana {
public static void manaReflectedResolve(Ability_Mana abMana, AbilityFactory af){
// Spells are not undoable
abMana.undoable = af.isAbility() && abMana.isUndoable();
abMana.setUndoable(af.isAbility() && abMana.isUndoable());
Card card = af.getHostCard();
@@ -458,7 +472,7 @@ public class AbilityFactory_Mana {
// if mana production has any type of SubAbility, undoable=false
if (af.hasSubAbility()){
abMana.undoable = false;
abMana.setUndoable(false);
Ability_Sub abSub = abMana.getSubAbility();
if (abSub != null){
abSub.resolve();

View File

@@ -1,9 +1,21 @@
package forge;
package forge.card.abilityFactory;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Random;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.Card;
import forge.CardList;
import forge.CardListFilter;
import forge.ComputerUtil;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.spellability.Ability_Activated;
import forge.card.spellability.Ability_Sub;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.gui.GuiUtils;
public class AbilityFactory_PermanentState {

View File

@@ -1,9 +1,26 @@
package forge;
package forge.card.abilityFactory;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Random;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.Card;
import forge.CardList;
import forge.CardListFilter;
import forge.Command;
import forge.ComputerUtil;
import forge.Constant;
import forge.Counters;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.spellability.Ability_Activated;
import forge.card.spellability.Ability_Sub;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.SpellAbility_Restriction;
import forge.card.spellability.Target;
public class AbilityFactory_Pump {
private final ArrayList<String> Keywords = new ArrayList<String>();

View File

@@ -1,9 +1,25 @@
package forge;
package forge.card.abilityFactory;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.Card;
import forge.CardList;
import forge.CardListUtil;
import forge.CombatUtil;
import forge.Command;
import forge.ComputerUtil;
import forge.Constant;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.spellability.Ability_Activated;
import forge.card.spellability.Ability_Sub;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
public class AbilityFactory_Regenerate {
// Ex: A:SP$Regenerate | Cost$W | Tgt$TgtC | SpellDescription$Regenerate target creature.

View File

@@ -1,8 +1,22 @@
package forge;
package forge.card.abilityFactory;
import java.util.ArrayList;
import java.util.HashMap;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.Card;
import forge.CardList;
import forge.ComputerUtil;
import forge.Constant;
import forge.Player;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.spellability.Ability_Activated;
import forge.card.spellability.Ability_Sub;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
public class AbilityFactory_Sacrifice {
//**************************************************************
// *************************** Sacrifice ***********************

View File

@@ -1,8 +1,25 @@
package forge;
package forge.card.abilityFactory;
import java.util.HashMap;
import java.util.Random;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.Card;
import forge.CardList;
import forge.Command;
import forge.ComputerUtil;
import forge.Player;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.spellability.Ability_Activated;
import forge.card.spellability.Ability_Sub;
import forge.card.spellability.Cost;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.card.trigger.Trigger;
import forge.card.trigger.TriggerHandler;
public class AbilityFactory_Token extends AbilityFactory {
private AbilityFactory AF = null;
@@ -184,7 +201,7 @@ public class AbilityFactory_Token extends AbilityFactory {
}
private boolean tokenCanPlayAI(SpellAbility sa){
Ability_Cost cost = sa.getPayCosts();
Cost cost = sa.getPayCosts();
if (!ComputerUtil.canPayCost(sa)) // If there is a cost payment it's usually not mandatory
return false;

View File

@@ -1,8 +1,19 @@
package forge;
package forge.card.abilityFactory;
import java.util.ArrayList;
import java.util.HashMap;
import forge.AllZone;
import forge.Card;
import forge.ComputerUtil;
import forge.Player;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.spellability.Ability_Activated;
import forge.card.spellability.Ability_Sub;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
public class AbilityFactory_Turns {
// *************************************************************************
// ************************* ADD TURN **************************************

View File

@@ -1,9 +1,28 @@
package forge;
package forge.card.abilityFactory;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Random;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.Card;
import forge.CardList;
import forge.CardListUtil;
import forge.CardUtil;
import forge.ComputerUtil;
import forge.Constant;
import forge.Counters;
import forge.GameActionUtil;
import forge.Player;
import forge.PlayerZone;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.spellability.Ability_Activated;
import forge.card.spellability.Ability_Sub;
import forge.card.spellability.Cost;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.gui.GuiUtils;
public class AbilityFactory_ZoneAffecting {
@@ -144,7 +163,7 @@ public class AbilityFactory_ZoneAffecting {
Target tgt = af.getAbTgt();
Card source = sa.getSourceCard();
Ability_Cost abCost = af.getAbCost();
Cost abCost = af.getAbCost();
if (abCost != null){
// AI currently disabled for these costs
@@ -498,7 +517,7 @@ public class AbilityFactory_ZoneAffecting {
return false;
Card source = sa.getSourceCard();
Ability_Cost abCost = af.getAbCost();
Cost abCost = af.getAbCost();
if (abCost != null){
// AI currently disabled for these costs
@@ -929,7 +948,7 @@ public class AbilityFactory_ZoneAffecting {
Target tgt = af.getAbTgt();
Card source = sa.getSourceCard();
Ability_Cost abCost = af.getAbCost();
Cost abCost = af.getAbCost();
if (abCost != null){
// AI currently disabled for these costs

View File

@@ -1,4 +1,4 @@
package forge;
package forge.card.cardFactory;
import java.io.File;
@@ -13,8 +13,40 @@ import javax.swing.JOptionPane;
import com.esotericsoftware.minlog.Log;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.ButtonUtil;
import forge.Card;
import forge.CardList;
import forge.CardListFilter;
import forge.CardListUtil;
import forge.CardUtil;
import forge.Command;
import forge.ComputerAI_counterSpells2;
import forge.ComputerUtil;
import forge.Constant;
import forge.Counters;
import forge.FileUtil;
import forge.GameActionUtil;
import forge.HandSizeOp;
import forge.Player;
import forge.PlayerZone;
import forge.ReadCard;
import forge.card.abilityFactory.AbilityFactory;
import forge.card.mana.ManaCost;
import forge.card.spellability.Ability;
import forge.card.spellability.Ability_Activated;
import forge.card.spellability.Ability_Mana;
import forge.card.spellability.Ability_Static;
import forge.card.spellability.Cost;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Spell_Permanent;
import forge.card.spellability.Target;
import forge.error.ErrorViewer;
import forge.gui.GuiUtils;
import forge.gui.input.Input;
import forge.gui.input.Input_PayManaCostUtil;
import forge.properties.ForgeProps;
import forge.properties.NewConstants;
@@ -188,7 +220,7 @@ public class CardFactory implements NewConstants {
}
final void copySpellontoStack(Card source, Card original, SpellAbility sa, boolean bCopyDetails) {
public final void copySpellontoStack(Card source, Card original, SpellAbility sa, boolean bCopyDetails) {
if (sa.getPayCosts() == null){
copySpellontoStack(source, source, bCopyDetails);
return;
@@ -227,7 +259,7 @@ public class CardFactory implements NewConstants {
}
final void copySpellontoStack(Card source, Card original, boolean bCopyDetails) {
public final void copySpellontoStack(Card source, Card original, boolean bCopyDetails) {
SpellAbility[] sas = original.getSpellAbility();
SpellAbility sa = null;
for(int i = 0; i < sas.length; i++) {
@@ -313,7 +345,7 @@ public class CardFactory implements NewConstants {
return getCard2(cardName, owner);
}
final static int hasKeyword(Card c, String k) {
public final static int hasKeyword(Card c, String k) {
ArrayList<String> a = c.getKeyword();
for(int i = 0; i < a.size(); i++)
if(a.get(i).toString().startsWith(k)) return i;
@@ -4686,8 +4718,8 @@ public class CardFactory implements NewConstants {
{
SpellAbility bbSA = sa.copy();
String newCost = CardUtil.addManaCosts(card.getManaCost(), bbCost);
if (bbSA.payCosts != null)
bbSA.payCosts = new Ability_Cost(newCost, sa.getSourceCard().getName(), false); // create new abCost
if (bbSA.getPayCosts() != null)
bbSA.setPayCosts(new Cost(newCost, sa.getSourceCard().getName(), false)); // create new abCost
StringBuilder sb = new StringBuilder();
sb.append("Buyback ").append(bbCost).append(" (You may pay an additional ").append(bbCost);
sb.append(" as you cast this spell. If you do, put this card into your hand as it resolves.)");
@@ -4852,7 +4884,7 @@ public class CardFactory implements NewConstants {
final String col = color;
//card.setChosenType(input[0]);
Ability_Cost a1Cost = new Ability_Cost("3 T", cardName, true);
Cost a1Cost = new Cost("3 T", cardName, true);
final Ability_Activated a1 = new Ability_Activated(card, a1Cost, null) {
private static final long serialVersionUID = -2114111483117171609L;
@@ -4972,7 +5004,7 @@ public class CardFactory implements NewConstants {
//*************** START *********** START **************************
else if(cardName.equals("That Which Was Taken")) {
Ability_Cost abCost = new Ability_Cost("4 T", cardName, true);
Cost abCost = new Cost("4 T", cardName, true);
Target target = new Target(card,"Select target permanent other than "+cardName, new String[] {"Permanent.Other"});
final Ability_Activated ability = new Ability_Activated(card, abCost, target) {
private static final long serialVersionUID = -8996435083734446340L;
@@ -5373,7 +5405,7 @@ public class CardFactory implements NewConstants {
//*************** START *********** START **************************
else if(cardName.equals("Volrath's Dungeon")) {
Ability_Cost dungeonCost = new Ability_Cost("Discard<1/Card>", cardName, true);
Cost dungeonCost = new Cost("Discard<1/Card>", cardName, true);
Target dungeonTgt = new Target(card,"Volrath's Dungeon - Target player" , "player".split(","));
final SpellAbility dungeon = new Ability_Activated(card, dungeonCost, dungeonTgt){
@@ -5410,7 +5442,7 @@ public class CardFactory implements NewConstants {
};//SpellAbility dungeon
Ability_Cost bailCost = new Ability_Cost("PayLife<5>", cardName, true);
Cost bailCost = new Cost("PayLife<5>", cardName, true);
final SpellAbility bail = new Ability_Activated(card, bailCost, null){
private static final long serialVersionUID = -8990402917139817175L;
@@ -5547,7 +5579,7 @@ public class CardFactory implements NewConstants {
else if(cardName.equals("Ashnod's Transmogrant")) {
final String[] Tgts = { "Creature.nonArtifact" };
Ability_Cost abCost = new Ability_Cost("T Sac<1/CARDNAME>", cardName, true);
Cost abCost = new Cost("T Sac<1/CARDNAME>", cardName, true);
Target abTgt = new Target(card,"Select target nonartifact creature to Transmogrify", Tgts);
final Ability_Activated ability = new Ability_Activated(card, abCost, abTgt){
@@ -5592,7 +5624,7 @@ public class CardFactory implements NewConstants {
//*************** START *********** START **************************
else if(cardName.equals("Door to Nothingness")) {
Target target = new Target(card,"Select target player", new String[] {"Player"});
Ability_Cost abCost = new Ability_Cost("G G R R B B U U W W T Sac<1/CARDNAME>", cardName, true);
Cost abCost = new Cost("G G R R B B U U W W T Sac<1/CARDNAME>", cardName, true);
Ability_Activated ab1 = new Ability_Activated(card, abCost, target) {
private static final long serialVersionUID = 6665327569823149191L;
@@ -5653,7 +5685,7 @@ public class CardFactory implements NewConstants {
//*************** START *********** START **************************
else if(cardName.equals("Goblin Charbelcher")) {
Ability_Cost abCost = new Ability_Cost("3 T", cardName, true);
Cost abCost = new Cost("3 T", cardName, true);
final Ability_Activated ability = new Ability_Activated(card, abCost, new Target(card,"TgtCP")) {
private static final long serialVersionUID = -840041589720758423L;
@@ -5757,7 +5789,7 @@ public class CardFactory implements NewConstants {
//*************** START *********** START **************************
else if(cardName.equals("Isochron Scepter"))
{
Ability_Cost abCost = new Ability_Cost("2 T", cardName, true);
Cost abCost = new Cost("2 T", cardName, true);
final Ability_Activated freeCast = new Ability_Activated(card, abCost, null)
{
@@ -5906,7 +5938,7 @@ public class CardFactory implements NewConstants {
* put a 5/5 colorless Djinn artifact creature token with flying
* onto the battlefield.
*/
Ability_Cost abCost = new Ability_Cost("1 Sac<1/CARDNAME>", cardName, true);
Cost abCost = new Cost("1 Sac<1/CARDNAME>", cardName, true);
final SpellAbility ability = new Ability_Activated(card, abCost, null) {
private static final long serialVersionUID = -5741302550353410000L;
@@ -5948,7 +5980,7 @@ public class CardFactory implements NewConstants {
* turn's upkeep.
*/
Ability_Cost abCost = new Ability_Cost("1 T Sac<1/CARDNAME>", cardName, true);
Cost abCost = new Cost("1 T Sac<1/CARDNAME>", cardName, true);
Target target = new Target(card,"Select target player", new String[]{"Player"});
final Ability_Activated ability = new Ability_Activated(card, abCost, target) {
private static final long serialVersionUID = -6711849408085138636L;
@@ -6015,7 +6047,7 @@ public class CardFactory implements NewConstants {
//*************** START *********** START **************************
else if(cardName.equals("Grindstone")) {
Target target = new Target(card,"Select target player", new String[] {"Player"});
Ability_Cost abCost = new Ability_Cost("3 T", cardName, true);
Cost abCost = new Cost("3 T", cardName, true);
Ability_Activated ab1 = new Ability_Activated(card, abCost, target) {
private static final long serialVersionUID = -6281219446216L;
@@ -6071,7 +6103,7 @@ public class CardFactory implements NewConstants {
* cards in that player's graveyard.
*/
Target target = new Target(card,"Select target player", new String[] {"Player"});
Ability_Cost abCost = new Ability_Cost("5 T", cardName, true);
Cost abCost = new Cost("5 T", cardName, true);
Ability_Activated ab1 = new Ability_Activated(card, abCost, target) {
private static final long serialVersionUID = -6282104343089446216L;
@@ -6102,7 +6134,7 @@ public class CardFactory implements NewConstants {
//*************** START *********** START **************************
else if(cardName.equals("Glasses of Urza")) {
Target target = new Target(card,"Select target player", new String[] {"Player"});
Ability_Cost abCost = new Ability_Cost("T", cardName, true);
Cost abCost = new Cost("T", cardName, true);
final Ability_Activated ability = new Ability_Activated(card, abCost, target) {
private static final long serialVersionUID = -3857979945891501990L;
@@ -6235,7 +6267,7 @@ public class CardFactory implements NewConstants {
* Tap, Sacrifice Tormod's Crypt: Exile all cards from target player's graveyard.
*/
Target target = new Target(card,"Select target player", new String[] {"Player"});
Ability_Cost abCost = new Ability_Cost("T Sac<1/CARDNAME>", cardName, true);
Cost abCost = new Cost("T Sac<1/CARDNAME>", cardName, true);
final Ability_Activated ability = new Ability_Activated(card, abCost, target) {
private static final long serialVersionUID = -8877371657709894494L;
@@ -6274,7 +6306,7 @@ public class CardFactory implements NewConstants {
* Tap, Sacrifice Mirror Universe: Exchange life totals with
* target opponent. Activate this ability only during your upkeep.
*/
Ability_Cost abCost = new Ability_Cost("T Sac<1/CARDNAME>", cardName, true);
Cost abCost = new Cost("T Sac<1/CARDNAME>", cardName, true);
final Ability_Activated ability = new Ability_Activated(card, abCost, null) {
private static final long serialVersionUID = -1409850598108909739L;
@@ -6358,7 +6390,7 @@ public class CardFactory implements NewConstants {
final String Tgts[] = {"Creature"};
Target target= new Target(card,"Select target creature.", Tgts, "1", "1");
final Ability_Cost cost = new Ability_Cost("3", card.getName(), true);
final Cost cost = new Cost("3", card.getName(), true);
final SpellAbility ability = new Ability_Activated(card, cost, target) {
private static final long serialVersionUID = 8941566961041310961L;
@@ -6418,7 +6450,7 @@ public class CardFactory implements NewConstants {
return false;
}
};
abMana.undoable = false;
abMana.setUndoable(false);
final Ability addMana = new Ability(card, "0", desc.toString()) {
private static final long serialVersionUID = -5356224416791741957L;
@@ -6480,7 +6512,7 @@ public class CardFactory implements NewConstants {
* 2, Tap: Flip a coin. If you win the flip, sacrifice Sorcerer's
* Strongbox and draw three cards.
*/
Ability_Cost abCost = new Ability_Cost("2 T", cardName, true);
Cost abCost = new Cost("2 T", cardName, true);
final SpellAbility ability = new Ability_Activated(card, abCost, null) {
private static final long serialVersionUID = 5152381570537520053L;
@@ -6515,7 +6547,7 @@ public class CardFactory implements NewConstants {
* to the number of time counters on it to each creature and
* each player.
*/
Ability_Cost abCost = new Ability_Cost("1 T Sac<1/CARDNAME>", cardName, true);
Cost abCost = new Cost("1 T Sac<1/CARDNAME>", cardName, true);
final Ability_Activated ability = new Ability_Activated(card, abCost, null) {
private static final long serialVersionUID = 7550743617522146304L;
@@ -6683,7 +6715,7 @@ public class CardFactory implements NewConstants {
//*************** START *********** START **************************
else if(cardName.equals("Scroll Rack")) {
Ability_Cost abCost = new Ability_Cost("1 T", cardName, true);
Cost abCost = new Cost("1 T", cardName, true);
final Ability_Activated ability = new Ability_Activated(card, abCost, null) {
private static final long serialVersionUID = -5588587187720068547L;
@@ -6759,7 +6791,7 @@ public class CardFactory implements NewConstants {
* 3, Tap: Name a card. Reveal a card at random from your hand. If it's the named card,
* Cursed Scroll deals 2 damage to target creature or player.
*/
Ability_Cost abCost = new Ability_Cost("3 T", cardName, true);
Cost abCost = new Cost("3 T", cardName, true);
final Ability_Activated ability = new Ability_Activated(card, abCost, new Target(card,"TgtCP")) {
private static final long serialVersionUID = 7550743617522146304L;
@@ -6862,7 +6894,7 @@ public class CardFactory implements NewConstants {
freeCast.setDescription("Play the previously revealed top card of your library for free.");
freeCast.setStackDescription(cardName+" - play card without paying its mana cost.");
Ability_Cost abCost = new Ability_Cost("5 T", cardName, true);
Cost abCost = new Cost("5 T", cardName, true);
final Ability_Activated ability = new Ability_Activated(card, abCost, null) {
private static final long serialVersionUID = -7328518969488588777L;
@@ -7366,8 +7398,8 @@ public class CardFactory implements NewConstants {
{
SpellAbility altCostSA = sa.copy();
Ability_Cost abCost = new Ability_Cost(altCost, card.getName(), altCostSA.isAbility());
altCostSA.payCosts = abCost;
Cost abCost = new Cost(altCost, card.getName(), altCostSA.isAbility());
altCostSA.setPayCosts(abCost);
StringBuilder sb = new StringBuilder();

View File

@@ -1,4 +1,4 @@
package forge;
package forge.card.cardFactory;
import java.util.ArrayList;
@@ -11,7 +11,39 @@ import java.util.Map.Entry;
import com.esotericsoftware.minlog.Log;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.ButtonUtil;
import forge.Card;
import forge.CardList;
import forge.CardListFilter;
import forge.CardListUtil;
import forge.CardUtil;
import forge.Card_Color;
import forge.Combat;
import forge.CombatUtil;
import forge.Command;
import forge.CommandArgs;
import forge.ComputerUtil;
import forge.Constant;
import forge.Counters;
import forge.GameAction;
import forge.GameActionUtil;
import forge.Phase;
import forge.Player;
import forge.PlayerZone;
import forge.card.spellability.Ability;
import forge.card.spellability.Ability_Activated;
import forge.card.spellability.Ability_Mana;
import forge.card.spellability.Ability_Static;
import forge.card.spellability.Cost;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.SpellAbility_Restriction;
import forge.card.spellability.Target;
import forge.gui.GuiUtils;
import forge.gui.input.Input;
import forge.gui.input.Input_PayManaCost;
public class CardFactoryUtil {
@@ -825,7 +857,7 @@ public class CardFactoryUtil {
public static SpellAbility ability_Untap(final Card sourceCard, String cost) {
Ability_Cost abCost = new Ability_Cost(cost, sourceCard.getName(), true);
Cost abCost = new Cost(cost, sourceCard.getName(), true);
final SpellAbility a1 = new Ability_Activated(sourceCard, abCost, null) {
private static final long serialVersionUID = -8604400186962948654L;
@@ -851,7 +883,7 @@ public class CardFactoryUtil {
}
public static SpellAbility ability_Flashback(final Card sourceCard, String cost) {
Ability_Cost fbCost = new Ability_Cost(cost,sourceCard.getName(),true);
Cost fbCost = new Cost(cost,sourceCard.getName(),true);
final SpellAbility flashback = new Spell(sourceCard) {
private static final long serialVersionUID = -4196027546564209412L;
@@ -884,7 +916,7 @@ public class CardFactoryUtil {
};
flashback.payCosts = fbCost;
flashback.setPayCosts(fbCost);
String costString = fbCost.toString().replace(":", ".");
@@ -903,7 +935,7 @@ public class CardFactoryUtil {
public static Ability_Activated ability_Unearth(final Card sourceCard, String manaCost) {
Ability_Cost cost = new Ability_Cost(manaCost, sourceCard.getName(), true);
Cost cost = new Cost(manaCost, sourceCard.getName(), true);
final Ability_Activated unearth = new Ability_Activated(sourceCard, cost, null) {
private static final long serialVersionUID = -5633945565395478009L;
@@ -1054,7 +1086,7 @@ public class CardFactoryUtil {
public static SpellAbility ability_Merc_Search(final Card sourceCard, String cost) {
final int intCost = Integer.parseInt(cost);
final Ability_Cost abCost = new Ability_Cost("T", sourceCard.getName(), true);
final Cost abCost = new Cost("T", sourceCard.getName(), true);
abCost.setMana(cost);
final SpellAbility ability = new Ability_Activated(sourceCard, abCost, null){
private static final long serialVersionUID = 4988299801575232348L;
@@ -1143,7 +1175,7 @@ public class CardFactoryUtil {
public static SpellAbility ability_Rebel_Search(final Card sourceCard, String cost) {
final int converted = Integer.parseInt(cost) - 1;
final Ability_Cost abCost = new Ability_Cost("T", sourceCard.getName(), true);
final Cost abCost = new Cost("T", sourceCard.getName(), true);
abCost.setMana(cost);
final SpellAbility ability = new Ability_Activated(sourceCard, abCost, null){
private static final long serialVersionUID = 7219065355049285681L;
@@ -1197,7 +1229,6 @@ public class CardFactoryUtil {
CardList rebels = new CardList();
CardList list = new CardList(lib.getCards());
list = list.getType("Rebel");
list = list.getPermanents();
if(list.size() == 0) return;
@@ -1254,7 +1285,7 @@ public class CardFactoryUtil {
public static SpellAbility ability_cycle(final Card sourceCard, String cycleCost) {
cycleCost += " Discard<1/CARDNAME>";
Ability_Cost abCost = new Ability_Cost(cycleCost, sourceCard.getName(), true);
Cost abCost = new Cost(cycleCost, sourceCard.getName(), true);
final SpellAbility cycle = new Ability_Activated(sourceCard, abCost, null) {
private static final long serialVersionUID = -4960704261761785512L;
@@ -1343,7 +1374,7 @@ public class CardFactoryUtil {
public static SpellAbility ability_typecycle(final Card sourceCard, String cycleCost, final String type) {
String description;
cycleCost += " Discard<1/CARDNAME>";
Ability_Cost abCost = new Ability_Cost(cycleCost, sourceCard.getName(), true);
Cost abCost = new Cost(cycleCost, sourceCard.getName(), true);
final SpellAbility cycle = new Ability_Activated(sourceCard, abCost, null) {
private static final long serialVersionUID = -4960704261761785512L;
@@ -1421,7 +1452,7 @@ public class CardFactoryUtil {
public static SpellAbility ability_transmute(final Card sourceCard, String transmuteCost) {
transmuteCost += " Discard<1/CARDNAME>";
Ability_Cost abCost = new Ability_Cost(transmuteCost, sourceCard.getName(), true);
Cost abCost = new Cost(transmuteCost, sourceCard.getName(), true);
final SpellAbility transmute = new Ability_Activated(sourceCard, abCost, null) {
private static final long serialVersionUID = -4960704261761785512L;
@@ -1523,7 +1554,7 @@ public class CardFactoryUtil {
return suspend;
}//ability_suspend()
public static SpellAbility eqPump_Equip(final Card sourceCard, final int Power, final int Tough, final String[] extrinsicKeywords, final Ability_Cost abCost) {
public static SpellAbility eqPump_Equip(final Card sourceCard, final int Power, final int Tough, final String[] extrinsicKeywords, final Cost abCost) {
Target target = new Target(sourceCard, "Select target creature you control", "Creature.YouCtrl".split(","));
final SpellAbility equip = new Ability_Activated(sourceCard, abCost, target) {
private static final long serialVersionUID = -4960704261761785512L;
@@ -1631,7 +1662,7 @@ public class CardFactoryUtil {
return equip;
}//eqPump_Equip() ( was vanila_equip() )
public static Command eqPump_onEquip(final Card sourceCard, final int Power, final int Tough, final String[] extrinsicKeywords, final Ability_Cost abCost) {
public static Command eqPump_onEquip(final Card sourceCard, final int Power, final int Tough, final String[] extrinsicKeywords, final Cost abCost) {
Command onEquip = new Command() {
@@ -1657,7 +1688,7 @@ public class CardFactoryUtil {
return onEquip;
}//eqPump_onEquip ( was vanila_onequip() )
public static Command eqPump_unEquip(final Card sourceCard, final int Power, final int Tough, final String[] extrinsicKeywords, final Ability_Cost abCost) {
public static Command eqPump_unEquip(final Card sourceCard, final int Power, final int Tough, final String[] extrinsicKeywords, final Cost abCost) {
Command onUnEquip = new Command() {
@@ -1984,7 +2015,7 @@ public class CardFactoryUtil {
public static Ability_Mana getEldraziSpawnAbility(final Card c)
{
Ability_Cost cost = new Ability_Cost("Sac<1/CARDNAME>", c.getName(), true);
Cost cost = new Cost("Sac<1/CARDNAME>", c.getName(), true);
Ability_Mana mana = new Ability_Mana(c, cost, "1"){
private static final long serialVersionUID = -2478676548112738019L;
};
@@ -2495,14 +2526,14 @@ public class CardFactoryUtil {
@Override
public void showMessage() {
if(GameAction.MultiTarget_Cancelled == true) stop();
if(GameAction.isMultiTargetCancelled() == true) stop();
if(i == 0) AllZone.Display.showMessage("Select target creature or player: " + (i_max) + " more damage to deal");
else AllZone.Display.showMessage("Select target creature or player: " + (i) + " more damage to deal");
}
@Override
public void selectButtonCancel() {
GameAction.MultiTarget_Cancelled = true;
GameAction.setMultiTargetCancelled(true);
stop();
}
@@ -2534,14 +2565,14 @@ public class CardFactoryUtil {
@Override
public void showMessage() {
if(CombatUtil.Lorthos_Cancelled == true) stop();
if(CombatUtil.isLorthosCancelled() == true) stop();
AllZone.Display.showMessage("Select target Permanents for Lorthos: " + (i + 1) + " more to pick");
ButtonUtil.enableOnlyCancel();
}
@Override
public void selectButtonCancel() {
CombatUtil.Lorthos_Cancelled = true;
CombatUtil.setLorthosCancelled(true);
stop();
}

View File

@@ -1,5 +1,5 @@
package forge;
package forge.card.cardFactory;
import java.util.ArrayList;
@@ -8,7 +8,28 @@ import java.util.StringTokenizer;
import com.esotericsoftware.minlog.Log;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.ButtonUtil;
import forge.Card;
import forge.CardList;
import forge.CardListFilter;
import forge.CardListUtil;
import forge.CardUtil;
import forge.Command;
import forge.Constant;
import forge.Player;
import forge.PlayerZone;
import forge.card.spellability.Ability;
import forge.card.spellability.Ability_Activated;
import forge.card.spellability.Ability_Mana;
import forge.card.spellability.Cost;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Spell_Permanent;
import forge.card.spellability.Target;
import forge.gui.GuiUtils;
import forge.gui.input.Input;
class CardFactory_Auras {
@@ -112,7 +133,7 @@ class CardFactory_Auras {
card.clearSpellAbility();
card.addSpellAbility(spell);
Ability_Cost abCost = new Ability_Cost("W W T", spell.getTargetCard() != null ? spell.getTargetCard().getName(): "", true);
Cost abCost = new Cost("W W T", spell.getTargetCard() != null ? spell.getTargetCard().getName(): "", true);
final Ability_Activated produceCaribou = new Ability_Activated(spell.getTargetCard(), abCost, null) {
private static final long serialVersionUID = 1358032097310954750L;
@@ -304,7 +325,7 @@ class CardFactory_Auras {
card.clearSpellAbility();
card.addSpellAbility(spell);
Ability_Cost abCost = new Ability_Cost("G U T", spell.getTargetCard() != null ? spell.getTargetCard().getName(): "", true);
Cost abCost = new Cost("G U T", spell.getTargetCard() != null ? spell.getTargetCard().getName(): "", true);
final Ability_Activated produceDrakes = new Ability_Activated(spell.getTargetCard(), abCost, null) {
private static final long serialVersionUID = -3849765771560556442L;
@@ -1435,7 +1456,7 @@ class CardFactory_Auras {
tgt.setZone(Constant.Zone.Graveyard);
animate.setTarget(tgt);
Ability_Cost cost = new Ability_Cost("1 B", cardName, false);
Cost cost = new Cost("1 B", cardName, false);
animate.setPayCosts(cost);
animate.getRestrictions().setActivateZone(Constant.Zone.Hand);
@@ -1533,7 +1554,7 @@ class CardFactory_Auras {
costString = "5 U U";
else if(cardName.equals("Confiscate"))
costString = "4 U U";
Ability_Cost cost = new Ability_Cost(costString, cardName, false);
Cost cost = new Cost(costString, cardName, false);
Target tgt = new Target(card,"Select target Permanent", "Permanent".split(","));
final SpellAbility spell = new Spell(card, cost, tgt) {

View File

@@ -1,5 +1,5 @@
package forge;
package forge.card.cardFactory;
import java.util.ArrayList;
@@ -13,7 +13,42 @@ import javax.swing.JOptionPane;
import com.esotericsoftware.minlog.Log;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.ButtonUtil;
import forge.Card;
import forge.CardList;
import forge.CardListFilter;
import forge.CardListUtil;
import forge.CardUtil;
import forge.Combat;
import forge.Command;
import forge.CommandReturn;
import forge.ComputerUtil;
import forge.Constant;
import forge.Counters;
import forge.GameActionUtil;
import forge.MyRandom;
import forge.Player;
import forge.PlayerZone;
import forge.PlayerZone_ComesIntoPlay;
import forge.Phase;
import forge.card.spellability.Ability;
import forge.card.spellability.Ability_Activated;
import forge.card.spellability.Ability_Mana;
import forge.card.spellability.Ability_Static;
import forge.card.spellability.Ability_Sub;
import forge.card.spellability.Cost;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Spell_Permanent;
import forge.card.spellability.Target;
import forge.card.trigger.Trigger;
import forge.card.trigger.TriggerHandler;
import forge.gui.GuiUtils;
import forge.gui.input.Input;
import forge.gui.input.Input_PayManaCost;
import forge.gui.input.Input_PayManaCost_Ability;
public class CardFactory_Creatures {
@@ -63,7 +98,7 @@ public class CardFactory_Creatures {
//*************** START *********** START **************************
if(cardName.equals("Lurking Informant")) {
Target target = new Target(card,"Select target player", new String[] {"Player"});
Ability_Cost abCost = new Ability_Cost("2 T", cardName, true);
Cost abCost = new Cost("2 T", cardName, true);
final SpellAbility a1 = new Ability_Activated(card, abCost, target) {
private static final long serialVersionUID = 1446529067071763245L;
@@ -176,7 +211,7 @@ public class CardFactory_Creatures {
//*************** START *********** START **************************
else if(cardName.equals("Kiki-Jiki, Mirror Breaker")) {
final CardFactory cfact = cf;
Ability_Cost abCost = new Ability_Cost("T", cardName, true);
Cost abCost = new Cost("T", cardName, true);
Target target = new Target(card,"Select target nonlegendary creature you control.", new String[] {"Creature.nonLegendary+YouCtrl"});
final Ability_Activated ability = new Ability_Activated(card, abCost, target) {
private static final long serialVersionUID = -943706942500499644L;
@@ -318,7 +353,7 @@ public class CardFactory_Creatures {
//*************** START *********** START **************************
else if(cardName.equals("Loxodon Hierarch")) {
Ability_Cost abCost = new Ability_Cost("G W Sac<1/CARDNAME>", cardName, true);
Cost abCost = new Cost("G W Sac<1/CARDNAME>", cardName, true);
final Ability_Activated ability = new Ability_Activated(card, abCost, null) {
private static final long serialVersionUID = 6606519504236074186L;
@@ -356,7 +391,7 @@ public class CardFactory_Creatures {
//*************** START *********** START **************************
else if(cardName.equals("Gilder Bairn")) {
Ability_Cost abCost = new Ability_Cost("2 GU Untap", cardName, true);
Cost abCost = new Cost("2 GU Untap", cardName, true);
Target tgt = new Target(card,"Select target permanent.", new String[]{"Permanent"});
final Ability_Activated a1 = new Ability_Activated(card, abCost, tgt) {
private static final long serialVersionUID = -1847685865277129366L;
@@ -1872,7 +1907,7 @@ public class CardFactory_Creatures {
//*************** START *********** START **************************
else if (cardName.equals("Disciple of Kangee")) {
Ability_Cost abCost = new Ability_Cost("U T", cardName, true);
Cost abCost = new Cost("U T", cardName, true);
final Ability_Activated ability = new Ability_Activated(card, abCost, new Target(card,"TgtC")) {
private static final long serialVersionUID = -5169389637917649036L;
@@ -2090,7 +2125,7 @@ public class CardFactory_Creatures {
//*************** START *********** START **************************
else if(cardName.equals("Hermit Druid")) {
Ability_Cost abCost = new Ability_Cost("G T", cardName, true);
Cost abCost = new Cost("G T", cardName, true);
final Ability_Activated ability = new Ability_Activated(card, abCost, null) {
private static final long serialVersionUID = 5884624727757154056L;
@@ -2142,7 +2177,7 @@ public class CardFactory_Creatures {
//*************** START *********** START **************************
else if(cardName.equals("Sorceress Queen") || cardName.equals("Serendib Sorcerer")) {
Ability_Cost abCost = new Ability_Cost("T", cardName, true);
Cost abCost = new Cost("T", cardName, true);
Target target = new Target(card,"Select target creature other than "+cardName, new String[] {"Creature.Other"});
final Ability_Activated ability = new Ability_Activated(card, abCost, target) {
private static final long serialVersionUID = -6853184726011448677L;
@@ -2304,7 +2339,7 @@ public class CardFactory_Creatures {
PlayerZone opponentPlayZone = AllZone.getZone(Constant.Zone.Battlefield, AllZone.HumanPlayer);
CardList opponentCreatureList = new CardList(opponentPlayZone.getCards());
opponentCreatureList = opponentCreatureList.getType("Creature");
return ((PlayerCreatureList.size() + 1 > 2* opponentCreatureList.size() + 1) && (Phase.Sac_Dauntless_Escort_Comp == false) && (AllZone.Phase.getPhase().equals(Constant.Phase.Main1))) ;
return ((PlayerCreatureList.size() + 1 > 2* opponentCreatureList.size() + 1) && (Phase.isSacDauntlessEscortAI() == false) && (AllZone.Phase.getPhase().equals(Constant.Phase.Main1))) ;
}
final Command untilEOT = new Command() {
@@ -2312,9 +2347,9 @@ public class CardFactory_Creatures {
public void execute() {
if(card.getController() == AllZone.HumanPlayer) {
Phase.Sac_Dauntless_Escort = false;
Phase.setSacDauntlessEscort(false);
} else {
Phase.Sac_Dauntless_Escort_Comp = false;
Phase.setSacDauntlessEscortAI(false);
}
PlayerZone PlayerPlayZone = AllZone.getZone(Constant.Zone.Battlefield, card.getController());
CardList PlayerCreatureList = new CardList(PlayerPlayZone.getCards());
@@ -2331,9 +2366,9 @@ public class CardFactory_Creatures {
public void resolve() {
AllZone.GameAction.sacrifice(card);
if(card.getController() == AllZone.HumanPlayer) {
Phase.Sac_Dauntless_Escort = true;
Phase.setSacDauntlessEscort(true);
}
else Phase.Sac_Dauntless_Escort_Comp = true;
else Phase.setSacDauntlessEscortAI(true);
AllZone.EndOfTurn.addUntil(untilEOT);
}
@@ -2345,7 +2380,7 @@ public class CardFactory_Creatures {
//*************** START *********** START **************************
else if(cardName.equals("Wojek Embermage")) {
Ability_Cost abCost = new Ability_Cost("T", cardName, true);
Cost abCost = new Cost("T", cardName, true);
Target tgt = new Target(card,"TgtC");
final Ability_Activated ability = new Ability_Activated(card, abCost, tgt) {
private static final long serialVersionUID = -1208482961653326721L;
@@ -2434,7 +2469,7 @@ public class CardFactory_Creatures {
}
};
Ability_Cost abCost = new Ability_Cost("T", cardName, true);
Cost abCost = new Cost("T", cardName, true);
Target tgt = new Target(card,"Target creature other than "+cardName, "Creature.Other".split(","));
final Ability_Activated ability = new Ability_Activated(card, abCost, tgt){
private static final long serialVersionUID = -8454685126878522607L;
@@ -2468,7 +2503,7 @@ public class CardFactory_Creatures {
//*************** START *********** START **************************
else if(cardName.equals("Mayael the Anima")) {
Ability_Cost abCost = new Ability_Cost("3 R G W T", cardName, true);
Cost abCost = new Cost("3 R G W T", cardName, true);
final Ability_Activated ability = new Ability_Activated(card, abCost, null) {
private static final long serialVersionUID = -9076784333448226913L;
@@ -2564,7 +2599,7 @@ public class CardFactory_Creatures {
//*************** START *********** START **************************
else if(cardName.equals("Helldozer")) {
Ability_Cost abCost = new Ability_Cost("B B B T", cardName, true);
Cost abCost = new Cost("B B B T", cardName, true);
Target target = new Target(card,"Select target land.", new String[]{"Land"});
final Ability_Activated ability = new Ability_Activated(card, abCost, target) {
private static final long serialVersionUID = 6426884086364885861L;
@@ -2670,7 +2705,7 @@ public class CardFactory_Creatures {
final String[] color = new String[1];
final long[] timeStamp = new long[1];
final Ability_Cost abCost = new Ability_Cost("Discard<1/Card>", cardName, true);
final Cost abCost = new Cost("Discard<1/Card>", cardName, true);
//mana tap ability
final SpellAbility ability = new Ability_Activated(card, abCost, null) {
@@ -2758,7 +2793,7 @@ public class CardFactory_Creatures {
final long[] timeStamp = new long[1];
//color change ability
Ability_Cost abCost = new Ability_Cost("G", cardName, true);
Cost abCost = new Cost("G", cardName, true);
final Ability_Activated ability = new Ability_Activated(card, abCost, null) {
private static final long serialVersionUID = -5362934962417382279L;
@@ -3149,7 +3184,7 @@ public class CardFactory_Creatures {
//*************** START *********** START **************************
else if(cardName.equals("Goldmeadow Lookout")) {
final Ability_Cost lookCost = new Ability_Cost("W T Discard<1/Card>", card.getName(), true);
final Cost lookCost = new Cost("W T Discard<1/Card>", card.getName(), true);
final SpellAbility ability = new Ability_Activated(card, lookCost, null){
private static final long serialVersionUID = -8413409735529340094L;
@@ -3163,7 +3198,7 @@ public class CardFactory_Creatures {
card.getController(), "W", new String[] {"Creature", "Kithkin", "Soldier"}, 1, 1, new String[] {""});
for(final Card c:cl) {
final Ability_Cost abCost = new Ability_Cost("W T", c.getName(), true);
final Cost abCost = new Cost("W T", c.getName(), true);
final Target tgt = new Target(card,"TgtC");
final SpellAbility tokenAbility = new Ability_Activated(card, abCost, tgt){
private static final long serialVersionUID = -7327585136675896817L;
@@ -3288,7 +3323,7 @@ public class CardFactory_Creatures {
//*************** START *********** START **************************
else if(cardName.equals("Rhys the Redeemed")) {
Ability_Cost abCost = new Ability_Cost("4 GW GW T", card.getName(), true);
Cost abCost = new Cost("4 GW GW T", card.getName(), true);
final Ability_Activated copyTokens1 = new Ability_Activated(card, abCost, null) {
private static final long serialVersionUID = 6297992502069547478L;
@@ -3635,7 +3670,7 @@ public class CardFactory_Creatures {
//*************** START *********** START **************************
else if(cardName.equals("Master of the Wild Hunt")) {
final Ability_Cost abCost = new Ability_Cost("T", cardName, true);
final Cost abCost = new Cost("T", cardName, true);
final Target abTgt = new Target(card,"Target a creature to Hunt", "Creature".split(","));
final Ability_Activated ability = new Ability_Activated(card, abCost, abTgt) {
private static final long serialVersionUID = 35050145102566898L;
@@ -3781,7 +3816,7 @@ public class CardFactory_Creatures {
//*************** START *********** START **************************
else if(cardName.equals("Scarblade Elite")) {
Ability_Cost abCost = new Ability_Cost("T", cardName, true);
Cost abCost = new Cost("T", cardName, true);
final Ability_Activated ability = new Ability_Activated(card, abCost, new Target(card,"TgtC")) {
private static final long serialVersionUID = 3505019464802566898L;
@@ -3864,7 +3899,7 @@ public class CardFactory_Creatures {
//*************** START *********** START **************************
else if(cardName.equals("Gilt-Leaf Archdruid")) {
Ability_Cost abCost = new Ability_Cost("tapXType<7/Druid>", cardName, true);
Cost abCost = new Cost("tapXType<7/Druid>", cardName, true);
Target tgt = new Target(card,"Select a player to gain lands from", "Player".split(","));
final SpellAbility stealLands = new Ability_Activated(card, abCost, tgt){
private static final long serialVersionUID = 636594487143500891L;
@@ -4247,7 +4282,7 @@ public class CardFactory_Creatures {
//*************** START *********** START **************************
else if(cardName.equals("Molten Hydra")) {
Target target = new Target(card,"TgtCP");
Ability_Cost abCost = new Ability_Cost("T", cardName, true);
Cost abCost = new Cost("T", cardName, true);
final Ability_Activated ability2 = new Ability_Activated(card, abCost, target) {
private static final long serialVersionUID = 2626619319289064289L;
@@ -4891,11 +4926,11 @@ public class CardFactory_Creatures {
PlayerZone play = AllZone.getZone(Constant.Zone.Battlefield, getSourceCard().getController());
CardList DoublingSeasons = new CardList(play.getCards());
DoublingSeasons = DoublingSeasons.getName("Doubling Season");
PlayerZone_ComesIntoPlay.SimultaneousEntry = true;
PlayerZone_ComesIntoPlay.setSimultaneousEntry(true);
double Count = DoublingSeasons.size();
Count = Math.pow(2,Count);
for(int i = 0; i < Count; i++) {
if(i + 1 == Count) PlayerZone_ComesIntoPlay.SimultaneousEntry = false;
if(i + 1 == Count) PlayerZone_ComesIntoPlay.setSimultaneousEntry(false);
Card Copy = AllZone.CardFactory.copyCardintoNew(getSourceCard());
Copy.setToken(true);
Copy.setController(getSourceCard().getController());
@@ -4936,7 +4971,7 @@ public class CardFactory_Creatures {
//*************** START *********** START **************************
else if(cardName.equals("Thoughtcutter Agent")) {
Target target = new Target(card,"Select target player", new String[] {"Player"});
Ability_Cost abCost = new Ability_Cost("U B T", cardName, true);
Cost abCost = new Cost("U B T", cardName, true);
final Ability_Activated ability = new Ability_Activated(card, abCost, target) {
private static final long serialVersionUID = -3880035465617987801L;
@@ -5020,7 +5055,7 @@ public class CardFactory_Creatures {
}
};
Ability_Cost abCost = new Ability_Cost("0", cardName, true);
Cost abCost = new Cost("0", cardName, true);
final Ability_Activated ability = new Ability_Activated(card, abCost, null) {
private static final long serialVersionUID = -8345060615720565828L;
@@ -5407,11 +5442,11 @@ public class CardFactory_Creatures {
public boolean canPlayAI() {
CardList human = AllZoneUtil.getCreaturesInPlay(AllZone.HumanPlayer);
CardListUtil.sortAttack(human);
return (human.get(0).getNetAttack() < Phase.StormCount && Phase.StormCount > 1);
return (human.get(0).getNetAttack() < Phase.getStormCount() && Phase.getStormCount() > 1);
}
@Override
public void resolve() {
for(int i = 0; i < Phase.StormCount - 1; i++) {
for(int i = 0; i < Phase.getStormCount() - 1; i++) {
card.addCounter(Counters.P1P1, 1);
}
}
@@ -5570,7 +5605,7 @@ public class CardFactory_Creatures {
//*************** START *********** START **************************
else if (cardName.equals("Kargan Dragonlord"))
{
Ability_Cost abCost = new Ability_Cost("R", cardName, true);
Cost abCost = new Cost("R", cardName, true);
final SpellAbility ability = new Ability_Activated(card, abCost, null) {
private static final long serialVersionUID = -2252408767635375616L;
@@ -5705,7 +5740,7 @@ public class CardFactory_Creatures {
final String Tgts[] = {"Creature.attacking"};
Target target = new Target(card,"Select target attacking creature.", Tgts);
final Ability_Cost cost = new Ability_Cost("T", card.getName(), true);
final Cost cost = new Cost("T", card.getName(), true);
final SpellAbility ability = new Ability_Activated(card, cost, target) {
private static final long serialVersionUID = 3750045284339229395L;
@@ -5837,7 +5872,7 @@ public class CardFactory_Creatures {
* player, and half X damage, rounded up, to you.
*/
Ability_Cost abCost = new Ability_Cost("X T", cardName, true);
Cost abCost = new Cost("X T", cardName, true);
Target tgt = new Target(card,"TgtCP");
final Ability_Activated ability = new Ability_Activated(card, abCost, tgt) {
@@ -5901,7 +5936,7 @@ public class CardFactory_Creatures {
//*************** START *********** START **************************
else if(cardName.equals("Metalworker")) {
final Ability_Cost abCost = new Ability_Cost("T", card.getName(), true);
final Cost abCost = new Cost("T", card.getName(), true);
final SpellAbility ability = new Ability_Activated(card, abCost, null) {
private static final long serialVersionUID = 6661308920885136284L;
@@ -5953,7 +5988,7 @@ public class CardFactory_Creatures {
Ability_Mana abMana = new Ability_Mana(card, "0", "1", 2*revealed.size()) {
private static final long serialVersionUID = -2182129023960978132L;
};
abMana.undoable = false;
abMana.setUndoable(false);
abMana.produceMana();
stop();
@@ -6085,7 +6120,7 @@ public class CardFactory_Creatures {
//*************** START *********** START **************************
else if(cardName.equals("Phyrexian Scuta")) {
Ability_Cost abCost = new Ability_Cost("3 B PayLife<3>", cardName, false);
Cost abCost = new Cost("3 B PayLife<3>", cardName, false);
final SpellAbility kicker = new Spell(card, abCost, null) {
private static final long serialVersionUID = -6420757044982294960L;
@@ -6401,7 +6436,7 @@ public class CardFactory_Creatures {
* Then that player discards all cards with that name revealed this way.
* Activate this ability only during your turn.
*/
Ability_Cost abCost = new Ability_Cost("X T", cardName, true);
Cost abCost = new Cost("X T", cardName, true);
Target target = new Target(card,"Select target opponent", "Opponent".split(","));
Ability_Activated discard = new Ability_Activated(card, abCost, target) {
private static final long serialVersionUID = 4839778470534392198L;
@@ -6475,7 +6510,7 @@ public class CardFactory_Creatures {
}
};
final Ability_Cost abCost = new Ability_Cost("Discard<2/Card>", cardName, true);
final Cost abCost = new Cost("Discard<2/Card>", cardName, true);
final Ability_Activated toExile = new Ability_Activated(card, abCost, null) {
private static final long serialVersionUID = 7850843970664800204L;
@@ -6581,7 +6616,7 @@ public class CardFactory_Creatures {
}
};
Ability_Cost abCost = new Ability_Cost("T", cardName, true);
Cost abCost = new Cost("T", cardName, true);
Target t1 = new Target(card, "Select target equipment you control", "Equipment.YouCtrl".split(","));
final Ability_Activated ability = new Ability_Activated(card, abCost, t1) {
private static final long serialVersionUID = 3818559481920103914L;
@@ -6604,7 +6639,7 @@ public class CardFactory_Creatures {
//*************** START *********** START **************************
else if(cardName.equals("Gore Vassal")) {
Ability_Cost abCost = new Ability_Cost("Sac<1/CARDNAME>", cardName, true);
Cost abCost = new Cost("Sac<1/CARDNAME>", cardName, true);
final Ability_Activated ability = new Ability_Activated(card, abCost, new Target(card, "TgtC")) {
private static final long serialVersionUID = 3689290210743241201L;
@@ -6644,7 +6679,7 @@ public class CardFactory_Creatures {
//*************** START *********** START **************************
else if (cardName.equals("Orcish Captain")) {
Ability_Cost abCost = new Ability_Cost("1", cardName, true);
Cost abCost = new Cost("1", cardName, true);
Target target = new Target(card, "Select target Orc creature", "Creature.Orc".split(","));
final Ability_Activated ability = new Ability_Activated(card, abCost, target) {
private static final long serialVersionUID = 6724781940648179318L;
@@ -6695,7 +6730,7 @@ public class CardFactory_Creatures {
//*************** START *********** START **************************
else if(cardName.equals("Orcish Spy")) {
Target target = new Target(card,"Select target player", new String[] {"Player"});
Ability_Cost abCost = new Ability_Cost("T", cardName, true);
Cost abCost = new Cost("T", cardName, true);
final Ability_Activated ability = new Ability_Activated(card, abCost, target) {
private static final long serialVersionUID = -7781215422160018196L;

View File

@@ -1,9 +1,26 @@
package forge;
package forge.card.cardFactory;
import java.util.ArrayList;
import forge.AllZone;
import forge.Card;
import forge.CardList;
import forge.CardListFilter;
import forge.CardUtil;
import forge.Command;
import forge.Constant;
import forge.Counters;
import forge.Phase;
import forge.Player;
import forge.card.spellability.Ability;
import forge.card.spellability.Ability_Activated;
import forge.card.spellability.Cost;
import forge.card.spellability.Target;
import forge.card.trigger.Trigger;
import forge.card.trigger.TriggerHandler;
class CardFactory_Equipment {
@@ -22,7 +39,7 @@ class CardFactory_Equipment {
//*************** START *********** START **************************
if (cardName.equals("Umbral Mantle")) {
Ability_Cost abCost = new Ability_Cost("0", cardName, true);
Cost abCost = new Cost("0", cardName, true);
Target target = new Target(card, "Select target creature you control", "Creature.YouCtrl".split(","));
final Ability_Activated equip = new Ability_Activated(card, abCost, target) {
private static final long serialVersionUID = -6122939616068165612L;
@@ -360,7 +377,7 @@ class CardFactory_Equipment {
String extrinsicKeywords[] = {"none"}; // for equips with no keywords to add
//final String manaCost = tmpCost.trim();
final Ability_Cost abCost = new Ability_Cost(tmpCost.trim(), card.getName(), true);
final Cost abCost = new Cost(tmpCost.trim(), card.getName(), true);
int Power = 0;
int Tough = 0;

View File

@@ -1,10 +1,35 @@
package forge;
package forge.card.cardFactory;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.ButtonUtil;
import forge.Card;
import forge.CardList;
import forge.CardListFilter;
import forge.CardListUtil;
import forge.CardUtil;
import forge.Combat;
import forge.Command;
import forge.ComputerUtil;
import forge.Constant;
import forge.GameActionUtil;
import forge.MyRandom;
import forge.PhaseUtil;
import forge.Player;
import forge.PlayerZone;
import forge.Phase;
import forge.card.spellability.Ability_Activated;
import forge.card.spellability.Cost;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.gui.GuiUtils;
import forge.gui.input.Input;
import forge.gui.input.Input_PayManaCost;
public class CardFactory_Instants {
@@ -925,7 +950,7 @@ public class CardFactory_Instants {
@Override
public void resolve() {
final Card creature = getTargetCard();
Ability_Cost abCost = new Ability_Cost("T", creature.getName(), true);
Cost abCost = new Cost("T", creature.getName(), true);
Target tgt = new Target(card,"Select target nonland permanent", new String[] {"Permanent.nonLand"});
final Ability_Activated tBanish = new Ability_Activated(creature, abCost, tgt) {
private static final long serialVersionUID = -1008113001678623984L;
@@ -1087,7 +1112,7 @@ public class CardFactory_Instants {
@Override
public void resolve() {
Phase.HighTides.add(this.getSourceCard());
Phase.getHighTides().add(this.getSourceCard());
}//resolve()
};//SpellAbility
card.clearSpellAbility();
@@ -1459,13 +1484,13 @@ public class CardFactory_Instants {
if(card.getController().equals(AllZone.HumanPlayer))
{
Phase.ManaDrain_BonusMana_Human.add(CardUtil.getConvertedManaCost(sa.getSourceCard()));
Phase.ManaDrain_Source_Human.add(card);
Phase.getManaDrain_BonusMana_Human().add(CardUtil.getConvertedManaCost(sa.getSourceCard()));
Phase.getManaDrain_Source_Human().add(card);
}
else if(card.getController().equals(AllZone.ComputerPlayer))
{
Phase.ManaDrain_BonusMana_AI.add(CardUtil.getConvertedManaCost(sa.getSourceCard()));
Phase.ManaDrain_Source_AI.add(card);
Phase.getManaDrain_BonusMana_AI().add(CardUtil.getConvertedManaCost(sa.getSourceCard()));
Phase.getManaDrain_Source_AI().add(card);
}
}
@@ -2116,7 +2141,7 @@ public class CardFactory_Instants {
* creature has infect, Burn the Impure deals 3 damage to that
* creature's controller.
*/
Ability_Cost abCost = new Ability_Cost("1 R", cardName, false);
Cost abCost = new Cost("1 R", cardName, false);
final SpellAbility spell = new Spell(card, abCost, new Target(card, "TgtC")) {
private static final long serialVersionUID = -3069135027502686218L;
int damage = 3;
@@ -2182,7 +2207,7 @@ public class CardFactory_Instants {
* type target player controls, or untap all tapped permanents of that type that
* player controls.
*/
Ability_Cost abCost = new Ability_Cost("2 U U", cardName, false);
Cost abCost = new Cost("2 U U", cardName, false);
Target target = new Target(card, "Select target player", "Player".split(","));
final SpellAbility spell = new Spell(card, abCost, target) {
private static final long serialVersionUID = -2175586347805121896L;

View File

@@ -1,11 +1,32 @@
package forge;
package forge.card.cardFactory;
import java.util.HashMap;
import javax.swing.JOptionPane;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.ButtonUtil;
import forge.Card;
import forge.CardList;
import forge.CardListFilter;
import forge.CardUtil;
import forge.Command;
import forge.Constant;
import forge.Counters;
import forge.GameActionUtil;
import forge.MyRandom;
import forge.Player;
import forge.PlayerZone;
import forge.card.spellability.Ability;
import forge.card.spellability.Ability_Activated;
import forge.card.spellability.Ability_Mana;
import forge.card.spellability.Cost;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.gui.GuiUtils;
import forge.gui.input.Input;
class CardFactory_Lands {
@@ -27,7 +48,7 @@ class CardFactory_Lands {
}
};
Ability_Cost abCost = new Ability_Cost("T", card.getName(), true);
Cost abCost = new Cost("T", card.getName(), true);
final SpellAbility ability = new Ability_Activated(card, abCost, null){
private static final long serialVersionUID = 1416258136308898492L;
@@ -313,7 +334,7 @@ class CardFactory_Lands {
}
};
Ability_Cost abCost = new Ability_Cost("G U T", cardName, true);
Cost abCost = new Cost("G U T", cardName, true);
Ability_Activated ability = new Ability_Activated(card, abCost, null) {
private static final long serialVersionUID = 1416258136308898492L;
@@ -548,7 +569,7 @@ class CardFactory_Lands {
/*
* Tap: The power of target creature with flying becomes 0 until end of turn.
*/
Ability_Cost abCost = new Ability_Cost("T", cardName, true);
Cost abCost = new Cost("T", cardName, true);
final String Tgts[] = {"Creature.withFlying"};
Target target = new Target(card,"Select target creature with flying.", Tgts);
final Ability_Activated ability = new Ability_Activated(card, abCost, target) {
@@ -633,7 +654,7 @@ class CardFactory_Lands {
return false;
}
};
abMana.undoable = false;
abMana.setUndoable(false);
final Ability addMana = new Ability(card, "0", desc.toString()) {
private static final long serialVersionUID = -7805885635696245285L;
@@ -793,7 +814,7 @@ class CardFactory_Lands {
return false;
}
};
abMana.undoable = false;
abMana.setUndoable(false);
final Ability addMana = new Ability(card, "1", description.toString()) {
private static final long serialVersionUID = 7177960799748450242L;
@@ -818,7 +839,7 @@ class CardFactory_Lands {
@Override
public void resolve() {
abMana.undoable = false;
abMana.setUndoable(false);
abMana.produceMana(mana());
}
};

View File

@@ -1,12 +1,35 @@
package forge;
package forge.card.cardFactory;
import java.util.HashMap;
import com.esotericsoftware.minlog.Log;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.ButtonUtil;
import forge.Card;
import forge.CardList;
import forge.CardListFilter;
import forge.CardListUtil;
import forge.CardUtil;
import forge.CombatUtil;
import forge.Command;
import forge.Constant;
import forge.Counters;
import forge.GameActionUtil;
import forge.Player;
import forge.PlayerZone;
import forge.Phase;
import forge.card.spellability.Ability;
import forge.card.spellability.Ability_Activated;
import forge.card.spellability.Ability_Mana;
import forge.card.spellability.Cost;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.gui.GuiUtils;
import forge.gui.input.Input;
class CardFactory_Planeswalkers {
@@ -678,7 +701,7 @@ class CardFactory_Planeswalkers {
else if(cardName.equals("Ajani Vengeant")) {
//ability3
Ability_Cost cost = new Ability_Cost("SubCounter<7/LOYALTY>", cardName, true);
Cost cost = new Cost("SubCounter<7/LOYALTY>", cardName, true);
final SpellAbility ability3 = new Ability_Activated(card, cost, new Target(card,"P")){
private static final long serialVersionUID = -1200172251117224702L;
@@ -1367,7 +1390,7 @@ class CardFactory_Planeswalkers {
Ability_Mana abMana = new Ability_Mana(card, "0", "R", list.size()) {
private static final long serialVersionUID = -2182129023960978132L;
};
abMana.undoable = false;
abMana.setUndoable(false);
abMana.produceMana();
}//resolve()
@@ -1827,7 +1850,7 @@ class CardFactory_Planeswalkers {
* from among them and put it into your hand. Put the rest on the bottom of your
* library in any order.
*/
Ability_Cost abCost1 = new Ability_Cost("AddCounter<1/LOYALTY>", cardName, true);
Cost abCost1 = new Cost("AddCounter<1/LOYALTY>", cardName, true);
final SpellAbility ability1 = new Ability_Activated(card, abCost1, null) {
private static final long serialVersionUID = 3817068914199871827L;
@@ -1905,7 +1928,7 @@ class CardFactory_Planeswalkers {
/*
* -1: Target artifact becomes a 5/5 artifact creature.
*/
Ability_Cost abCost2 = new Ability_Cost("SubCounter<1/LOYALTY>", cardName, true);
Cost abCost2 = new Cost("SubCounter<1/LOYALTY>", cardName, true);
Target target = new Target(card, "Select target artifact", "Artifact".split(","));
final SpellAbility ability2 = new Ability_Activated(card, abCost2, target) {
private static final long serialVersionUID = -669957056327870077L;
@@ -1942,7 +1965,7 @@ class CardFactory_Planeswalkers {
/*
* Target player loses X life and you gain X life, where X is twice the number of artifacts you control.
*/
Ability_Cost abCost3 = new Ability_Cost("SubCounter<4/LOYALTY>", cardName, true);
Cost abCost3 = new Cost("SubCounter<4/LOYALTY>", cardName, true);
Target target2 = new Target(card, "Select target player", "Player".split(","));
final SpellAbility ability3 = new Ability_Activated(card, abCost3, target2) {
private static final long serialVersionUID = 4407137815355315502L;

View File

@@ -1,4 +1,4 @@
package forge;
package forge.card.cardFactory;
import java.util.ArrayList;
import java.util.Arrays;
@@ -11,7 +11,35 @@ import javax.swing.JOptionPane;
import com.esotericsoftware.minlog.Log;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.ButtonUtil;
import forge.Card;
import forge.CardList;
import forge.CardListFilter;
import forge.CardListUtil;
import forge.CardUtil;
import forge.Command;
import forge.ComputerUtil;
import forge.Constant;
import forge.Counters;
import forge.GameActionUtil;
import forge.HandSizeOp;
import forge.Player;
import forge.PlayerZone;
import forge.PlayerZone_ComesIntoPlay;
import forge.card.spellability.Ability;
import forge.card.spellability.Ability_Activated;
import forge.card.spellability.Ability_Mana;
import forge.card.spellability.Cost;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Spell_Permanent;
import forge.card.spellability.Target;
import forge.card.trigger.Trigger;
import forge.gui.GuiUtils;
import forge.gui.input.Input;
import forge.gui.input.Input_PayManaCost;
public class CardFactory_Sorceries {
@@ -359,7 +387,7 @@ public class CardFactory_Sorceries {
//*************** START *********** START **************************
else if(cardName.equals("Cruel Ultimatum")) {
Ability_Cost abCost = new Ability_Cost("U U B B B R R", cardName, false);
Cost abCost = new Cost("U U B B B R R", cardName, false);
Target tgt = new Target(card,"Select target opponent", "Opponent".split(","));
final SpellAbility spell = new Spell(card,abCost, tgt) {
@@ -2144,10 +2172,10 @@ public class CardFactory_Sorceries {
if(AllZone.GameAction.isCardInPlay(getTargetCard())
&& CardFactoryUtil.canTarget(card, getTargetCard())) {
PlayerZone_ComesIntoPlay.SimultaneousEntry = true;
PlayerZone_ComesIntoPlay.setSimultaneousEntry(true);
double Count = AllZoneUtil.getDoublingSeasonMagnitude(card.getController());
for(int i = 0; i < Count; i++) {
if(i + 1 == Count) PlayerZone_ComesIntoPlay.SimultaneousEntry = false;
if(i + 1 == Count) PlayerZone_ComesIntoPlay.setSimultaneousEntry(false);
final Card Copy = AllZone.CardFactory.copyCardintoNew(getTargetCard());
//Slight hack for copying stuff that has triggered abilities
@@ -2233,10 +2261,10 @@ public class CardFactory_Sorceries {
card.setKicked(true);
if(AllZone.GameAction.isCardInPlay(getTargetCard())
&& CardFactoryUtil.canTarget(card, getTargetCard())) {
PlayerZone_ComesIntoPlay.SimultaneousEntry = true;
PlayerZone_ComesIntoPlay.setSimultaneousEntry(true);
int Count = 5 * AllZoneUtil.getDoublingSeasonMagnitude(card.getController());
for(int i = 0; i < Count; i++) {
if(i + 1 == Count) PlayerZone_ComesIntoPlay.SimultaneousEntry = false;
if(i + 1 == Count) PlayerZone_ComesIntoPlay.setSimultaneousEntry(false);
final Card Copy = AllZone.CardFactory.copyCardintoNew(getTargetCard());
//Slight hack for copying stuff that has triggered abilities
@@ -3461,7 +3489,7 @@ public class CardFactory_Sorceries {
* Tap target untapped creature you control. If you do, add X to
* your mana pool, where X is that creature's converted mana cost.
*/
Ability_Cost cost = new Ability_Cost("U", cardName, false);
Cost cost = new Cost("U", cardName, false);
Target tgt = new Target(card,"Select an untapped creature you control", "Creature.untapped+YouCtrl".split(","));
final SpellAbility spell = new Spell(card, cost, tgt) {
@@ -4172,7 +4200,7 @@ public class CardFactory_Sorceries {
//*************** START *********** START **************************
else if(cardName.equals("Choking Sands")) {
Ability_Cost abCost = new Ability_Cost("1 B B", cardName, false);
Cost abCost = new Cost("1 B B", cardName, false);
Target target = new Target(card,"Select target non-Swamp land.", new String[]{"Land.nonSwamp"});
final SpellAbility spell = new Spell(card, abCost, target) {
private static final long serialVersionUID = 6499378648382900112L;
@@ -4228,7 +4256,7 @@ public class CardFactory_Sorceries {
* When you cycle Decree of Justice, you may pay X. If you do, put X 1/1
* white Soldier creature tokens onto the battlefield.
*/
Ability_Cost abCost = new Ability_Cost("X", cardName, false);
Cost abCost = new Cost("X", cardName, false);
final SpellAbility ability = new Ability_Activated(card, abCost, null) {
private static final long serialVersionUID = -7995897172138409120L;

View File

@@ -1,4 +1,8 @@
package forge;
package forge.card.mana;
import forge.Card;
import forge.Constant;
import forge.gui.input.Input_PayManaCostUtil;
public class Mana {
private String color;

View File

@@ -1,16 +1,19 @@
package forge;
package forge.card.mana;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.StringTokenizer;
import forge.Constant;
import forge.gui.input.Input_PayManaCostUtil;
public class ManaCost {
//holds Mana_Part objects
//ManaPartColor is stored before ManaPartColorless
private ArrayList<Object> manaPart;
private HashMap<String,Integer> sunburstMap = new HashMap<String,Integer>();
int xcounter = 0;
private int xcounter = 0;
//manaCost can be like "0", "3", "G", "GW", "10", "3 GW", "10 GW"
//or "split hybrid mana" like "2/G 2/G", "2/B 2/B 2/B"
@@ -25,7 +28,7 @@ public class ManaCost {
manaCost = "0";
else
manaCost = manaCost.substring(2);
xcounter++;
setXcounter(getXcounter() + 1);
}
manaPart = split(manaCost);
}
@@ -203,7 +206,7 @@ public class ManaCost {
//need to reverse everything since the colored mana is stored first
Collections.reverse(list);
for(int i = 0; i < xcounter; i++)
for(int i = 0; i < getXcounter(); i++)
sb.append(" ").append("X");
for(int i = 0; i < list.size(); i++) {
@@ -239,7 +242,7 @@ public class ManaCost {
}
}
cmc += 0.00001* xcounter;
cmc += 0.00001* getXcounter();
return cmc;
}
@@ -290,4 +293,12 @@ public class ManaCost {
return new Mana_PartColor(partCost);
}
}
public void setXcounter(int xcounter) {
this.xcounter = xcounter;
}
public int getXcounter() {
return xcounter;
}
}

View File

@@ -1,11 +1,19 @@
package forge;
package forge.card.mana;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import forge.AllZoneUtil;
import forge.Card;
import forge.CardUtil;
import forge.Constant;
import forge.Player;
import forge.card.spellability.Ability_Mana;
import forge.card.spellability.SpellAbility;
import forge.gui.GuiUtils;
import forge.gui.input.Input_PayManaCostUtil;
public class ManaPool extends Card {
@@ -118,7 +126,6 @@ public class ManaPool extends Card {
for(Mana m : manaList){
addManaToPool(floatingMana, m);
}
AllZone.GameAction.checkStateEffects();
}
public static ArrayList<Mana> convertStringToMana(String manaStr, Card card){

View File

@@ -1,5 +1,5 @@
package forge;
package forge.card.mana;
public abstract class Mana_Part {

View File

@@ -1,5 +1,7 @@
package forge;
package forge.card.mana;
import forge.gui.input.Input_PayManaCostUtil;
public class Mana_PartColor extends Mana_Part {

View File

@@ -1,4 +1,4 @@
package forge;
package forge.card.mana;
import forge.error.ErrorViewer;

View File

@@ -1,4 +1,4 @@
package forge;
package forge.card.mana;
public class Mana_PartSnow extends Mana_Part {
private boolean isPaid = false;

View File

@@ -1,5 +1,7 @@
package forge;
package forge.card.mana;
import forge.gui.input.Input_PayManaCostUtil;
//handles mana costs like 2/R or 2/B

View File

@@ -1,4 +1,8 @@
package forge;
package forge.card.mana;
import forge.Card;
import forge.Constant;
public class Mana_PartTest
{
static void testPayManaCost()

View File

@@ -1,8 +1,14 @@
package forge;
package forge.card.spellability;
import com.esotericsoftware.minlog.Log;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.Card;
import forge.CardList;
import forge.CardListFilter;
abstract public class Ability extends SpellAbility {
//Slight hack for Pithing Needle

View File

@@ -1,11 +1,18 @@
package forge;
package forge.card.spellability;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.Card;
import forge.CardList;
import forge.CardListFilter;
import forge.Constant;
abstract public class Ability_Activated extends SpellAbility implements java.io.Serializable {
private static final long serialVersionUID = 1L;
public Ability_Activated(Card sourceCard, Ability_Cost abCost, Target tgt) {
public Ability_Activated(Card sourceCard, Cost abCost, Target tgt) {
super(SpellAbility.Ability, sourceCard);
setManaCost(abCost.getTotalMana());
setPayCosts(abCost);

View File

@@ -1,7 +1,13 @@
package forge;
package forge.card.spellability;
import java.util.ArrayList;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.Card;
import forge.CardList;
import forge.Phase;
import forge.card.cardFactory.CardFactoryUtil;
import forge.gui.GuiUtils;
abstract public class Ability_Mana extends Ability_Activated implements java.io.Serializable {
@@ -18,14 +24,14 @@ abstract public class Ability_Mana extends Ability_Activated implements java.io.
}
public Ability_Mana(Card sourceCard, String parse, String produced, int num) {
this(sourceCard, new Ability_Cost(parse, sourceCard.getName(), true), produced, num);
this(sourceCard, new Cost(parse, sourceCard.getName(), true), produced, num);
}
public Ability_Mana(Card sourceCard, Ability_Cost cost, String produced) {
public Ability_Mana(Card sourceCard, Cost cost, String produced) {
this(sourceCard, cost, produced, 1);
}
public Ability_Mana(Card sourceCard, Ability_Cost cost, String produced, int num) {
public Ability_Mana(Card sourceCard, Cost cost, String produced, int num) {
super(sourceCard, cost, null);
origProduced = produced;
@@ -84,10 +90,10 @@ abstract public class Ability_Mana extends Ability_Activated implements java.io.
if (source.getType().contains("Island")){
// If High Tide triggers, make mana undoable
int size = Phase.HighTides.size();
int size = Phase.getHighTides().size();
for(int i = 0; i < size; i++){
this.undoable = false;
AllZone.ManaPool.addManaToFloating("U", Phase.HighTides.get(i));
AllZone.ManaPool.addManaToFloating("U", Phase.getHighTides().get(i));
}
}

View File

@@ -1,7 +1,9 @@
package forge;
package forge.card.spellability;
import com.esotericsoftware.minlog.Log;
import forge.Card;
abstract public class Ability_Static extends Ability {
public Ability_Static(Card sourceCard, String manaCost) {
super(sourceCard, manaCost);

View File

@@ -1,4 +1,6 @@
package forge;
package forge.card.spellability;
import forge.Card;
abstract public class Ability_Sub extends SpellAbility implements java.io.Serializable {
private static final long serialVersionUID = 4650634415821733134L;

View File

@@ -1,9 +1,14 @@
package forge;
package forge.card.spellability;
import java.util.Arrays;
import forge.Card;
import forge.CardList;
import forge.Command;
import forge.ZCTrigger;
public class Ability_Triggered extends Ability implements Command {

View File

@@ -1,8 +1,13 @@
package forge;
package forge.card.spellability;
import java.util.regex.Pattern;
public class Ability_Cost {
import forge.AllZone;
import forge.Card;
import forge.Counters;
import forge.card.mana.ManaCost;
public class Cost {
private boolean isAbility = true;
private boolean sacCost = false;
@@ -116,7 +121,7 @@ public class Ability_Cost {
private String name;
public Ability_Cost(String parse, String cardName, boolean bAbility)
public Cost(String parse, String cardName, boolean bAbility)
{
isAbility = bAbility;
// when adding new costs for cost string, place them here

View File

@@ -1,16 +1,31 @@
package forge;
package forge.card.spellability;
import javax.swing.JOptionPane;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.ButtonUtil;
import forge.Card;
import forge.CardList;
import forge.CardListFilter;
import forge.ComputerUtil;
import forge.Constant;
import forge.Counters;
import forge.Phase;
import forge.PlayerZone;
import forge.card.abilityFactory.AbilityFactory;
import forge.card.mana.ManaCost;
import forge.gui.GuiUtils;
import forge.gui.input.Input;
import forge.gui.input.Input_PayManaCostUtil;
public class Cost_Payment {
private Ability_Cost cost = null;
private Cost cost = null;
private SpellAbility ability = null;
private Card card = null;
private SpellAbility_Requirements req = null;
public Ability_Cost getCost() { return cost; }
public Cost getCost() { return cost; }
public SpellAbility getAbility() { return ability; }
public Card getCard() { return card; }
@@ -53,7 +68,7 @@ public class Cost_Payment {
public void setPayTapXType(boolean bTapX) { payTapXType = bTapX; }
public void setPayReturn(boolean bReturn){ payReturn = bReturn; }
public Cost_Payment(Ability_Cost cost, SpellAbility abil){
public Cost_Payment(Cost cost, SpellAbility abil){
this.cost = cost;
this.ability = abil;
card = this.ability.getSourceCard();
@@ -73,7 +88,7 @@ public class Cost_Payment {
payReturn = !cost.getReturnCost();
}
public static boolean canPayAdditionalCosts(Ability_Cost cost, SpellAbility ability){
public static boolean canPayAdditionalCosts(Cost cost, SpellAbility ability){
if (cost == null)
return true;
@@ -500,7 +515,7 @@ public class Cost_Payment {
if (cost.getExileFromHandThis())
exileFromHandCard.add(card);
else
exileFromHandCard = ComputerUtil.chooseExileFromHandType(cost.getExileFromHandType(), card, ability.getTargetCard(), cost.getExileFromHandAmount());
exileFromHandCard = ComputerUtil.chooseExileType(cost.getExileFromHandType(), card, ability.getTargetCard(), cost.getExileFromHandAmount());
if (exileFromHandCard.size() != cost.getExileFromHandAmount()){
System.out.println("Couldn't find a valid card to exile for: "+card.getName());
@@ -648,7 +663,7 @@ public class Cost_Payment {
public static Input input_payMana(final SpellAbility sa, final Cost_Payment payment, int manaToAdd){
final ManaCost manaCost;
if(Phase.GameBegins == 1) {
if(Phase.getGameBegins() == 1) {
if(sa.getSourceCard().isCopiedSpell() && sa.isSpell()) {
manaCost = new ManaCost("0");
} else {

View File

@@ -1,4 +1,8 @@
package forge;
package forge.card.spellability;
import forge.AllZone;
import forge.Card;
import forge.Constant;
import forge.Phase;
import forge.error.ErrorViewer;
@@ -14,7 +18,7 @@ abstract public class Spell extends SpellAbility implements java.io.Serializable
getRestrictions().setActivateZone(Constant.Zone.Hand);
}
public Spell(Card sourceCard, Ability_Cost abCost, Target abTgt) {
public Spell(Card sourceCard, Cost abCost, Target abTgt) {
super(SpellAbility.Spell, sourceCard);
setManaCost(sourceCard.getManaCost());

View File

@@ -1,8 +1,17 @@
package forge;
package forge.card.spellability;
import java.util.ArrayList;
import forge.Card;
import forge.CardList;
import forge.Command;
import forge.CommandArgs;
import forge.Player;
import forge.card.abilityFactory.AbilityFactory;
import forge.card.mana.Mana;
import forge.gui.input.Input;
//only SpellAbility can go on the stack
//override any methods as needed
@@ -47,7 +56,7 @@ public abstract class SpellAbility {
private Input afterResolve;
private Input afterPayMana;
protected Ability_Cost payCosts = null;
protected Cost payCosts = null;
protected Target chosenTarget = null;
private SpellAbility_Restriction restrictions = new SpellAbility_Restriction();
@@ -258,11 +267,11 @@ public abstract class SpellAbility {
afterPayMana = in;
}
public Ability_Cost getPayCosts() {
public Cost getPayCosts() {
return payCosts;
}
public void setPayCosts(Ability_Cost abCost) {
public void setPayCosts(Cost abCost) {
payCosts = abCost;
}

View File

@@ -1,9 +1,11 @@
package forge;
package forge.card.spellability;
import java.util.ArrayList;
import forge.ComputerUtil;
public class SpellAbilityList {
private ArrayList<SpellAbility> list = new ArrayList<SpellAbility>();

View File

@@ -1,6 +1,14 @@
package forge;
package forge.card.spellability;
import java.util.ArrayList;
import forge.AllZoneUtil;
import forge.Card;
import forge.CardList;
import forge.CardListFilter;
import forge.CardUtil;
import forge.Player;
import forge.UndoCommand;
public class SpellAbilityUtil
{
//only works for MONO-COLORED spells

View File

@@ -1,7 +1,11 @@
package forge;
package forge.card.spellability;
import java.util.ArrayList;
import forge.AllZone;
import forge.Card;
import forge.PlayerZone;
public class SpellAbility_Requirements {
private SpellAbility ability = null;
private Target_Selection select = null;

View File

@@ -1,7 +1,16 @@
package forge;
package forge.card.spellability;
import java.util.ArrayList;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.Card;
import forge.CardList;
import forge.Constant;
import forge.Phase;
import forge.Player;
import forge.card.cardFactory.CardFactoryUtil;
public class SpellAbility_Restriction {
// A class for handling SpellAbility Restrictions. These restrictions include:
// Zone, Phase, OwnTurn, Speed (instant/sorcery), Amount per Turn, Player,
@@ -128,7 +137,7 @@ public class SpellAbility_Restriction {
int levelMax = 0;
*/
SpellAbility_Restriction(){ }
public SpellAbility_Restriction(){ }
public boolean canPlay(Card c, SpellAbility sa){
if (!AllZone.getZone(c).getZoneName().equals(activateZone))

View File

@@ -1,5 +1,8 @@
package forge;
package forge.card.spellability;
import forge.AllZone;
import forge.Card;
public class Spell_Evoke extends Spell_Permanent {

View File

@@ -1,5 +1,18 @@
package forge;
package forge.card.spellability;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.ButtonUtil;
import forge.Card;
import forge.CardList;
import forge.Command;
import forge.CommandReturn;
import forge.Constant;
import forge.Player;
import forge.card.cardFactory.CardFactory;
import forge.card.cardFactory.CardFactoryUtil;
import forge.gui.input.Input;
public class Spell_Permanent extends Spell {

View File

@@ -1,7 +1,14 @@
package forge;
package forge.card.spellability;
import java.util.ArrayList;
import forge.AllZone;
import forge.Card;
import forge.Constant;
import forge.Player;
import forge.card.abilityFactory.AbilityFactory;
import forge.card.cardFactory.CardFactoryUtil;
public class Target {
private boolean bMandatory = false;
private Card srcCard;

View File

@@ -1,8 +1,18 @@
package forge;
package forge.card.spellability;
import java.util.ArrayList;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.ButtonUtil;
import forge.Card;
import forge.CardList;
import forge.Constant;
import forge.Player;
import forge.PlayerZone;
import forge.card.cardFactory.CardFactoryUtil;
import forge.gui.GuiUtils;
import forge.gui.input.Input;
public class Target_Selection {
private Target target = null;

View File

@@ -1,8 +1,16 @@
package forge;
package forge.card.trigger;
import java.util.ArrayList;
import java.util.HashMap;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.Card;
import forge.CardList;
import forge.Player;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.spellability.SpellAbility;
public abstract class Trigger {
protected String name;
@@ -167,7 +175,7 @@ public abstract class Trigger {
{
return false;
}
else if(mapParams.get("PlayersPoisoned").equals("Each") && !(hostCard.getController().poisonCounters != 0 && hostCard.getController().getPoisonCounters() != 0 ))
else if(mapParams.get("PlayersPoisoned").equals("Each") && !(hostCard.getController().getPoisonCounters() != 0 && hostCard.getController().getPoisonCounters() != 0 ))
{
return false;
}
@@ -222,7 +230,7 @@ public abstract class Trigger {
return true;
}
protected boolean matchesValid(Object o,String[] valids,Card srcCard)
public boolean matchesValid(Object o,String[] valids,Card srcCard)
{
if(o instanceof Card)
{

View File

@@ -1,8 +1,26 @@
package forge;
package forge.card.trigger;
import java.util.ArrayList;
import java.util.HashMap;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.Card;
import forge.CardList;
import forge.Command;
import forge.CommandArgs;
import forge.ComputerUtil;
import forge.GameActionUtil;
import forge.Player;
import forge.card.abilityFactory.AbilityFactory;
import forge.card.spellability.Ability;
import forge.card.spellability.Ability_Sub;
import forge.card.spellability.Cost;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.SpellAbility_Restriction;
import forge.card.spellability.Target;
import forge.gui.input.Input;
public class TriggerHandler {
private ArrayList<Trigger> registeredTriggers = new ArrayList<Trigger>();
@@ -750,7 +768,7 @@ public class TriggerHandler {
}
@Override
public void setPayCosts(Ability_Cost abCost)
public void setPayCosts(Cost abCost)
{
sa[0].setPayCosts(abCost);
}

Some files were not shown because too many files have changed in this diff Show More