step one in separating user from program data

- define user/program/cache directories in NewConstants
- use directories where applicable
- merge lang and properties into constants
- create separate image lists for sealed products
- update howto document
- allow alternate file extensions for images
- a whole bunch of code cleanup
This commit is contained in:
myk
2013-03-08 02:41:44 +00:00
parent 58c936bf04
commit 7ef0f234df
232 changed files with 1300 additions and 3741 deletions

21
.gitattributes vendored
View File

@@ -12402,25 +12402,22 @@ res/decks/cube/RtRPromoIzzet.dck -text
res/decks/cube/RtRPromoRakdos.dck -text
res/decks/cube/RtRPromoSelesnya.dck -text
res/decks/cube/SkieraCube.dck -text
res/draft/common.txt svneol=native#text/plain
res/defaults/editor.preferences svneol=native#text/xml
res/defaults/editor.xml svneol=native#text/xml
res/defaults/home.xml svneol=native#text/xml
res/defaults/match.xml svneol=native#text/xml
res/draft/cube_juzamjedi.draft -text
res/draft/cube_skiera.draft -text
res/draft/draft.properties svneol=native#text/plain
res/draft/rankings.txt -text
res/draft/rare.txt svneol=native#text/plain
res/draft/uncommon.txt svneol=native#text/plain
res/gamedata/NonStackingKWList.txt svneol=native#text/plain
res/gamedata/TypeLists.txt svneol=native#text/plain
res/gauntlet/LOCKED_DotP[!!-~]Preconstructed.dat -text
res/gauntlet/LOCKED_Swimming[!!-~]With[!!-~]Sharks.dat -text
res/howto.txt svneol=native#text/plain
res/lang/de.properties svneol=native#text/plain
res/lang/en.properties svneol=native#text/plain
res/lang/howTo/de.properties svneol=native#text/plain
res/lang/howTo/en.properties svneol=native#text/plain
res/lang/lang.properties svneol=native#text/plain
res/layouts/editor_default.xml svneol=native#text/xml
res/layouts/home_default.xml svneol=native#text/xml
res/layouts/match_default.xml svneol=native#text/xml
res/licenses/java-yield-license.txt svneol=native#text/plain
res/licenses/log4j-license.txt svneol=native#text/plain
res/licenses/multiline-label-license.txt svneol=native#text/plain
@@ -12741,10 +12738,6 @@ res/pics_product/tournamentpacks/SHM.jpg -text
res/pics_product/tournamentpacks/TMP.jpg -text
res/pics_product/tournamentpacks/TSP.jpg -text
res/pics_product/tournamentpacks/USG.jpg -text
res/preferences/.project -text
res/preferences/editor.default.preferences svneol=native#text/xml
res/preferences/main.properties -text
res/product-images.txt -text
res/quest/all-prices.txt svneol=native#text/plain
res/quest/bazaar/ape_pet_l1.txt -text
res/quest/bazaar/ape_pet_l2.txt -text
@@ -13315,7 +13308,6 @@ res/quest/price.txt svneol=native#text/plain
res/quest/quest-opponent-icons.txt -text
res/quest/quest-pet-shop-icons.txt -text
res/quest/quest-pet-token-images.txt -text
res/quest/quest.properties svneol=native#text/plain
res/quest/themes/-1[!!-~]-1[!!-~]Counters[!!-~]BG.thm -text
res/quest/themes/Anti[!!-~]Black[!!-~]WB.thm -text
res/quest/themes/Anti[!!-~]Black[!!-~]WG.thm -text
@@ -14175,7 +14167,6 @@ src/main/java/forge/game/limited/BoosterDraftAI.java svneol=native#text/plain
src/main/java/forge/game/limited/CCnt.java svneol=native#text/plain
src/main/java/forge/game/limited/CardPoolLimitation.java -text
src/main/java/forge/game/limited/CardRankingComparator.java -text
src/main/java/forge/game/limited/CardRatings.java -text
src/main/java/forge/game/limited/CustomLimited.java svneol=native#text/plain
src/main/java/forge/game/limited/DeckColors.java svneol=native#text/plain
src/main/java/forge/game/limited/DraftRankCache.java -text
@@ -14445,7 +14436,6 @@ src/main/java/forge/model/package-info.java svneol=native#text/plain
src/main/java/forge/net/package-info.java -text
src/main/java/forge/package-info.java svneol=native#text/plain
src/main/java/forge/properties/ForgePreferences.java svneol=native#text/plain
src/main/java/forge/properties/ForgeProps.java svneol=native#text/plain
src/main/java/forge/properties/NewConstants.java svneol=native#text/plain
src/main/java/forge/properties/Preferences.java svneol=native#text/plain
src/main/java/forge/properties/SavePreferencesListener.java svneol=native#text/plain
@@ -14521,7 +14511,6 @@ src/main/java/forge/util/PredicateString.java -text
src/main/java/forge/util/ReflectionUtil.java -text
src/main/java/forge/util/TextUtil.java -text
src/main/java/forge/util/ThreadUtil.java svneol=native#text/plain
src/main/java/forge/util/TreeProperties.java svneol=native#text/plain
src/main/java/forge/util/XmlUtil.java -text
src/main/java/forge/util/package-info.java -text
src/main/java/forge/util/storage/IStorage.java -text

View File

@@ -0,0 +1,66 @@
UI_USE_OLD=false
UI_RANDOM_FOIL=false
UI_SMOOTH_LAND=false
UI_AVATARS=0,1
UI_CARD_OVERLAY=true
UI_UPLOAD_DRAFT=false
UI_SCALE_LARGER=true
UI_MAX_STACK=3
UI_STACK_OFFSET=tiny
UI_CARD_SIZE=small
UI_BUGZ_NAME=
UI_BUGZ_PWD=
UI_ANTE=false
UI_MANABURN=false
UI_SKIN=default
UI_PREFERRED_AVATARS_ONLY=false
UI_TARGETING_OVERLAY=2
UI_ENABLE_SOUNDS=true
UI_RANDOM_CARD_ART=false
SUBMENU_CURRENTMENU=HOME_CONSTRUCTED
SUBMENU_SANCTIONED=false
SUBMENU_GAUNTLET=false
SUBMENU_VARIANT=false
SUBMENU_QUEST=false
SUBMENU_SETTINGS=false
SUBMENU_UTILITIES=false
ENFORCE_DECK_LEGALITY=true
DEV_MODE_ENABLED=false
DEV_MILLING_LOSS=true
DEV_UNLIMITED_LAND=false
DECKGEN_SINGLETONS=false
DECKGEN_ARTIFACTS=false
DECKGEN_NOSMALL=false
PHASE_AI_UPKEEP=true
PHASE_AI_DRAW=true
PHASE_AI_MAIN1=true
PHASE_AI_BEGINCOMBAT=true
PHASE_AI_DECLAREATTACKERS=true
PHASE_AI_DECLAREBLOCKERS=true
PHASE_AI_FIRSTSTRIKE=true
PHASE_AI_COMBATDAMAGE=true
PHASE_AI_ENDCOMBAT=true
PHASE_AI_MAIN2=true
PHASE_AI_EOT=true
PHASE_AI_CLEANUP=true
PHASE_HUMAN_UPKEEP=true
PHASE_HUMAN_DRAW=true
PHASE_HUMAN_MAIN1=true
PHASE_HUMAN_BEGINCOMBAT=true
PHASE_HUMAN_DECLAREATTACKERS=true
PHASE_HUMAN_DECLAREBLOCKERS=true
PHASE_HUMAN_FIRSTSTRIKE=true
PHASE_HUMAN_COMBATDAMAGE=true
PHASE_HUMAN_ENDCOMBAT=true
PHASE_HUMAN_MAIN2=true
PHASE_HUMAN_EOT=true
PHASE_HUMAN_CLEANUP=true
SHORTCUT_SHOWSTACK=83
SHORTCUT_SHOWCOMBAT=67
SHORTCUT_SHOWCONSOLE=76
SHORTCUT_SHOWPLAYERS=80
SHORTCUT_SHOWDEV=68
SHORTCUT_CONCEDE=17
SHORTCUT_ENDTURN=69
SHORTCUT_ALPHASTRIKE=65
SHORTCUT_SHOWTARGETING=84

View File

@@ -1,106 +0,0 @@
Akrasan Squire
Alpha Myr
Anarchist
Aven Squire
Azorius Chancery
Battering Sliver
Blade of the Sixth Pride
Blastoderm
Blightning
Bonesplitter Sliver
Brainstorm
Brilliant Halo
Capsize
Carnophage
Cavern Harpy
Child of Night
Cloud of Faeries
Coiled Tinviper
Colossal Might
Corrupt
Dark Ritual
Darksteel Ingot
Dauthi Marauder
Dauthi Slayer
Deep Analysis
Deft Duelist
Diabolic Edict
Dimir Aqueduct
Disenchant
Divination
Drift of Phantasms
Duress
Elephant Ambush
Elvish Fury
Exclude
Faceless Butcher
False Defeat
Firebolt
Fledgling Djinn
Foul Imp
Frostling
Gemhide Sliver
Giant Spider
Gruul Turf
Guardians of Akrasa
Hymn to Tourach
Imperious Perfect
Impulse
Kindle
Kird Ape
Kitesail
Kodama's Reach
Kor Skyfisher
Lightning Blast
Lightning Bolt
Lignify
Llanowar Elves
Mana Leak
Metallic Sliver
Moaning Spirit
Molten Rain
Mudbutton Torchrunner
Mulldrifter
Multani's Acolyte
Muscle Sliver
Naturalize
Nightguard Patrol
Oblivion Ring
Order of the Ebon Hand
Pacifism
Pestermite
Phyrexian Rager
Plated Geopede
Plated Sliver
Pouncing Jaguar
Qasali Pridemage
Rakdos Carnarium
Rancor
Repulse
Rishadan Airship
River Boa
Selesnya Sanctuary
Serum Visions
Shock
Sign in Blood
Sinew Sliver
Snapping Drake
Sprout Swarm
Steppe Lynx
Stone Rain
Sunlance
Synchronous Sliver
Talruum Minotaur
Tarfire
Tendrils of Corruption
Trinket Mage
Vampire Lacerator
Veteran Armorer
Veteran Armorsmith
Veteran Swordsmith
Viashino Fangtail
Vulshok Morningstar
Vulshok Sorcerer
Wild Nacatl
Winged Sliver
Yavimaya Wurm

View File

@@ -1,3 +0,0 @@
common--file=common.txt
uncommon--file=uncommon.txt
rare--file=rare.txt

View File

@@ -1,68 +0,0 @@
Absorb
Armageddon
Badlands
Baneslayer Angel
Beacon of Destruction
Birds of Paradise
Bitterblossom
Bloodghast
Bribery
Captain of the Watch
Chameleon Colossus
Chandra Nalaar
Char
Day of Judgment
Dragon Roost
Elspeth, Knight-Errant
Gaea's Anthem
Garruk Wildspeaker
Goblin Guide
Goblin Piledriver
Honor of the Pure
Iona, Shield of Emeria
Jace, the Mind Sculptor
Jeska, Warrior Adept
Juzam Djinn
Keiga, the Tide Star
Knight of the White Orchid
Kokusho, the Evening Star
Liliana Vess
Loxodon Hierarch
Meloku the Clouded Mirror
Morphling
Mycoloth
Nantuko Shade
Nevinyrral's Disk
Noble Hierarch
Ob Nixilis, the Fallen
Paladin en-Vec
Phyrexian Arena
Rakka Mar
Rampaging Baloths
Rolling Earthquake
Rorix Bladewing
Sarkhan Vol
Savannah
Scion of Oona
Serendib Efreet
Shadowmage Infiltrator
Siege-Gang Commander
Solemn Simulacrum
Sower of Temptation
Sphinx of Jwar Isle
Squall Line
Survival of the Fittest
Taiga
Tarmogoyf
Thoughtseize
Time Warp
Troll Ascetic
Tundra
Umezawa's Jitte
Underground Sea
Vampiric Tutor
Vendilion Clique
Visara the Dreadful
Wall of Reverence
Wort, Boggart Auntie
Wrath of God

View File

@@ -1,60 +0,0 @@
Air Elemental
Animate Dead
Behemoth Sledge
Bituminous Blast
Blade Sliver
Blaze
Blood Knight
Briarhorn
Calciderm
Centaur Glade
Chainer's Edict
Cloud Djinn
Control Magic
Council of Advisors
Counterspell
Demonic Tutor
Dimir Guildmage
Elite Vanguard
Enlightened Tutor
Eternal Witness
Flame Javelin
Flametongue Kavu
Force of Will
Ghitu Encampment
Harmonize
Honden of Cleansing Fire
Honden of Infinite Rage
Honden of Life's Web
Honden of Night's Reach
Honden of Seeing Winds
Infest
Isochron Scepter
Ivory Tower
Jackal Pup
Keening Banshee
Knight of Meadowgrain
Knight of Stromgald
Magma Jet
Might Sliver
Path to Exile
Pillage
Regrowth
Sejiri Merfolk
Shriekmaw
Skullclamp
Smother
Sol Ring
Soltari Monk
Soltari Priest
Spectral Procession
Spell Snare
Swords to Plowshares
Thieving Magpie
Treetop Village
Twinblade Slasher
Vampire Nighthawk
Viridian Shaman
Volcanic Fallout
Wall of Blossoms
Wall of Denial

122
res/howto.txt Normal file
View File

@@ -0,0 +1,122 @@
How to Play
Introduction
1. This game is similar to many other trading card games. You start out with 20 life and your goal is to reduce your opponents life to zero by attacking with your creatures. The game will end when your life or the computer's life is reduced to zero. You play "matches" against the computer as a set of "best two out of three" games.
2. You use land to pay for spells. You can play one land a turn.
3. Each land produces a different magical energy. This magical energy is shortened to one letter on cards.
Forests make G
Swamps make B
Plains make W
Islands make U
Mountains make R
4. Each non-land card has a name and a cost. The cost looks like this "2GG" A cost like that would require two Forest lands and two other lands. The number 2 can be paid for by any land. A cost like "R", would require a Mountain land.
5. Creature cards stay in play and can attack on the turn AFTER they are played. A creature's attack and defense is shown like 2/4 meaning that the creature has an attack power of 2 and a defense of 4. If this creature receives 4 damage it is put into the graveyard.
6. When you attack with your creatures the computer has a chance to block with his creatures. When you attack you "tap" your creatures by turning them sideways. Your creatures will untap during your next turn. When you block, only untapped creatures can block. Usually a creature cannot attack and block during the same turn.
7. Sorcery and Instant cards have an effect on the game. After you play any card it goes on the stack to the left, click OK and the stack will clear. Sorcery cards can only be played during your turn and when the stack is empty. Instant cards can be played at any time and are more versatile.
8. If a card has a target, you get to choose that target. If the target is a player, click on that player's picture (next to their life points).
9. When you mulligan, the cards in your hand are shuffled into you deck and you are given 1 less card.
Legendary Cards
Legendary cards are powerful cards that can be either creatures, enchantments, lands, artifacts, or planeswalkers. These cards can only exist once in the battlefield, and if another copy of the legendary card is played, all copies of the card are destroyed and sent to the graveyard.
Planeswalkers
There are relatively few planeswalkers available in the game and they have specific rules for their special abilities.
You can only use one ability a turn. A planeswalker can be attacked, but you can also block with your creatures. For each 1 damage a planeswalker receives, you remove 1 counter. When a planeswalker doesn't have any counters, it goes to the graveyard.
Hybrid Mana and Multicolored Cards
1. Hybrid Mana Cards are unique in their casting cost as seen in the card. Instead of seeing a single color per mana symbol, these cards have 2 colors per mana symbol indicating that the player has the choice of playing either of the two. There are also cases where numbers and colors are combined together in one mana symbol, which indicates that either colorless or colored mana can be paid for each symbol. Hybrid cards are treated as two colors and as such can be said to be multicolored.
2. Multicolored Cards are slightly different than hybrid mana cards, as they require two or more different colors of mana, which may or not be in a single mana symbol. An example would be a card like Lightning Helix which requires one red and one white mana to be played.
Game Types
1. In Constructed Deck mode you can use any of the cards to make your deck. To make a constructed deck, select the "Deck Editor" button on the main screen.
2. In Sealed Deck mode you are given 75 cards and you have to make your deck from just those cards.
3. In Booster Draft mode you select 1 card at a time and then make your deck from just those cards. You can then play against the other 7 computer opponents that were drafting with you.
4. In Quest Mode you start out with just a few cards. As you complete matches in your quest you will win more cards. In easy mode you get more cards after every game, whether you win or lose. Your goal is to become world champion. Once you reach the end of your quest you can continue to play additional matches and win even more cards or you can start a new quest at anytime.
At the Quest Options screen you will be given a choice of four different difficulty levels. These difficulty levels control:
1) the length of the quest in matches
2) the hardness of the AI deck that you will face as an opponent
3) the number of wins or losses needed to get more cards
4) the number of wins needed to advance a player to the next rank
Quick Games
There may be occasions where you only have a few minutes to play a quick game or two. At the top of the list of submenus on the left, choose "Sanctioned Formats" and then "Constructed". For the least amount of setup, just accept the default settings for random decks, and click Start at the bottom of the page.
Abilities
There are three kinds of abilities: Activated, Triggered, and Static.
1. Activated abilities contain a colon that separates cost and effect, these can be played any time you could play an instant. An example is Elvish Piper's ability. That cost also contains the tap symbol. For creatures only, abilities containing the tap- or untap symbol can be played starting the turn after the creature came into play. Another common cost for an activated ability is sacrificing the card. You do that by putting it into your graveyard. Such abilities can only be played once.
2. Triggered abilities aren't played, they simply trigger when their condition occurs. An example is Angel of Mercy: You don't play the ability, but gain 3 life when it comes into play.
3. Static abilities are neither played, nor do they trigger. They still have an effect for as long as they are in play. An example is Glorious Anthem. There is no condition or cost, your creatures are just stronger.
Keyword Abilities
1. Flying: Creatures with flying are harder to block. Only creatures with flying or reach can block other flyers.
2. Haste: Haste lets a creature attack or use any abilities immediately during this turn.
3. Fear: Creatures with fear can only be blocked by artifact or black creatures. Creatures with fear are harder to block.
4. Cycling: When you cycle a card you pay some small cost (usually 2 or so) and then you discard that card and draw a new card. Cycling helps make your deck more versatile.
5. Vigilance: This means that the creature will not tap when attacking. This creature can both attack and block during the same turn.
6. Trample: If you use 2/1 creature to block an attacking 3/4 creature with trample, you will still receive 2 damage because the 3/4 trampled over your 2/1 creature. Trample damage is calculated by (attack - blocker's defense), in this case 3-1 which is 2.
7. Deathtouch: When a creatures with deathtouch deals damage to a creature, that creature is destroyed.
8. Defender: Creatures with defender can not attack, they can only block another attacker.
9. First Strike and Double Strike: Creatures with first strike deals their combat damage first. Creatures with double strike deals their combat damage first, and then deals their combat damage a second time during the combat damage step.
10. Flash: You can play a creature with flash anytime that you can play an Instant.
11. Landwalk: Allows your creature to attack without being blocked if your opponent controls the appropriate land type.
12. Lifelink: With lifeline you gain life equal to the amount of damage dealt.
13. Protection: Can not be damaged, blocked or targeted by sources that match the protection type.
14. Reach: Creatures with reach can block flying creatures.
15. Shroud: Permanents with shroud can not be targeted by abilities or spells.
16. Regenerate: Regenerate is an ability that some creatures have which prevents them from being destroyed and put into the graveyard. When you regenerate a creature, it acts like a shield until end of turn.
17. Morph: A creature with morph can be played by usually paying 3 mana of any color and be treated as a 2/2 creature with no abilities rather than playing the creature's actual cost. This creature is placed face down in the battlefield and can be flipped face up anytime as long as you pay its morph cost which is indicated on the card. Once flipped face up the card is treated as the original card, the one that you would normally play with its original-full casting cost.
Have fun!

View File

@@ -1,68 +0,0 @@
title=How to Play
message=How to Play - (Revised: September 2009.)\n\n\n\
Introduction\n\n\
1. This game is similar to many other trading card games. You start out with 20 life and your goal is to reduce your opponents life to zero by attacking with your creatures. The game will end when your life or the computer's life is reduced to zero. You play \"matches\" against the computer as a set of \"best two out of three\" games."\n\n\
2. You use land to pay for spells. You can play one land a turn.\n\n\
3. Each land produces a different magical energy. This magical energy is shortened to one letter on cards.\n\n\
\ Forests make G\n\
\ Swamps make B\n\
\ Plains make W\n\
\ Islands make U\n\
\ Mountains make R\n\n\
4. Each non-land card has a name and a cost. The cost looks like this \"2GG\" A cost like that would require two Forest lands and two other lands. The number 2 can be paid for by any land. A cost like \"R\", would require a Mountain land.\n\n\
5. Creature cards stay in play and can attack on the turn AFTER they are played. A creature's attack and defense is shown like 2/4 meaning that the creature has an attack power of 2 and a defense of 4. If this creature receives 4 damage it is put into the graveyard.\n\n\
6. When you attack with your creatures the computer has a chance to block with his creatures. When you attack you \"tap\" your creatures by turning them sideways. Your creatures will untap during your next turn. When you block, only untapped creatures can block. Usually a creature cannot attack and block during the same turn.\n\n\
7. Sorcery and Instant cards have an effect on the game. After you play any card it goes on the stack to the left, click OK and the stack will clear. Sorcery cards can only be played during your turn and when the stack is empty. Instant cards can be played at any time and are more versatile.\n\n\
8. If a card has a target, you get to choose that target. If the target is a player, click on that player's life points.\n\n\
9. When you mulligan, the cards in your hand are shuffled into you deck and you are given 1 less card.\n\n\n\
Legendary Cards\n\n\
Legendary cards are powerful cards that can be either creatures, enchantments, lands, artifacts or planeswalkers. These cards can only exist once in the battlefield, and if another copy of the legendary card is played, all copies of the card are destroyed and sent to the graveyard.\n\n\n\
Planeswalkers\n\n\
There are 7 planeswalkers (Ajani Goldmane; Liliana Vess; Garruk Wildspeaker; Chandra Nalaar; Nicol Bolas; Elspeth, Knight-Errant; Nissa Revane) and they have specific rules for their special abilities.\n\n\
You can only use one ability a turn. A planeswalker can be attacked, but you can also block with your creatures. For each 1 damage a planeswalker receives, you remove 1 counter. When a planeswalker doesn't have any counters, it goes to the graveyard.\n\n\n\
Hybrid Mana and Multicolored Cards\n\n\
1. Hybrid Mana Cards are unique in their casting cost as seen in the card. Instead of seeing a single color per mana symbol, these cards have 2 colors per mana symbol indicating that the player has the choice of playing either of the two. There are also cases where numbers and colors are combined together in one mana symbol, which indicates that either colorless or colored mana can be paid for each symbol. Hybrid cards are treated as two colors and as such can be said to be multicolored.\n\n\
2. Multicolored Cards are slightly different than hybrid mana cards, as they require two or more different colors of mana, which may or not be in a single mana symbol. An example would be a card like Lightning Helix which requires one red and one white mana to be played.\n\n\n\
Game Types\n\n\
1. In Constructed Deck mode you can use any of the cards to make your deck. To make a constructed deck, from the Deck Editor select \"New Deck \u2013 Constructed\". A list of all the cards will be displayed.\n\n\
2. In Sealed Deck mode you are given 75 cards and you have to make your deck from just those cards.\n\n\
3. In Booster Draft mode you select 1 card at a time and then make your deck from just those cards. After you are done drafting you have to type in a filename, then go to the Deck Editor and from the menu select \"Open Deck - Draft\" and find the filename. This will allow you to construct your deck. You can then play against the other 7 computer opponents that were drafting with you.\n\n\
4. In Quest Mode you start out with 275 cards, 200 are Basic Lands. As you complete matches in your quest you will win more cards. In easy mode you get more cards after every game, whether you win or lose. Your goal is to become world champion. Once you reach the end of your quest you can continue to play additional matches and win even more cards or you can start a new quest at anytime.\n\n\
At the Quest Options screen you will be given a choice of four different difficulty levels. These difficulty levels control:\n\n\
1) the length of the quest in matches,\n\
2) the hardness of the AI deck that you will face as an opponent,\n\
3) the number of wins or loses needed to get more cards,\n\
4) the number of wins needed to advance a player to the next rank.\n\n\n\
Quick Games\n\n\
There may be occasions where you only have a few minutes to play a quick game or two. At the top of the New Game window you will see the three different game types with radio buttons. Click on the Constructed (Easy) button and it will become highlighted.\n\n\
In the middle area of the New Game window you will see two menus, one labeled \"Your Deck\" and the other \"Opponent\". For a quick game you should select the \"Generate Deck\" or the \"Random\" option for both you and the computer.\n\n\
1. The \"Generate Deck\" option creates a 2 color deck. This option randomly picks cards and sometimes your mana curve may be too high.\n\n\
2. The \"Random\" option will randomly select one of the constructed decks that appear in the two deck menus. You either construct these decks in the Deck Editor or you imported a .deck file from the Deck Editor.\n\n\
If you select the \"Random\" option and click on the \"Start Game\" button and the match fails to begin \u2026 well, this happens if you fail to have any constructed decks saved to your all-decks2 file. You should choose the \"Generate Deck\" option instead.\n\n\n\
Resizable Game Area & Stack AI Land\n\n\
1. The \"Resizable Game Area\" check box should be set to on if your monitor will display more than 1024 x 768 pixels. The window containing the Battlefield and the informational displays will fill the entire screen.\n\n\
2. The \"Stack AI Land\" option will make the computer a more difficult opponent to beat. The computer will draw non-land cards from it's library after it has drawn enough lands to cover the cost of it's spells. Set the check box to on for a stronger opponent and set the check box to off for a weaker opponent.\n\n\
At times, you may notice that when you click the \"Start Game\" button that the match fails to begin. In this case you should turn the \"Stack AI Land\" option to off.\n\n\n\
Abilities\n\n\
There are three kinds of abilities: Activated, Triggered, and Static.\n\n\
1. Activated abilities contain a colon that separates cost and effect, these can be played any time you could play an instant. An example is Elvish Piper's ability. That cost also contains the tap symbol. For creatures only, abilities containing the tap- or untap symbol can be played starting the turn after the creature came into play. Another common cost for an activated ability is sacrificing the card. You do that by putting it into your graveyard. Such abilities can only be played once.\n\n\n\
2. Triggered abilities aren't played, they simply trigger when their condition occurs. An example is Angel of Mercy: You don't play the ability, but gain 3 life when it comes into play.\n\n\
3. Static abilities are neither played, nor do they trigger. They still have an effect for as long as they are in play. An example is Glorious Anthem. There is no condition or cost, your creatures are just stronger.\n\n\n\
Keyword Abilities\n\n\
1. Flying: Creatures with flying are harder to block. Only creatures with flying or reach can block other flyers.\n\n\
2. Haste: Haste lets a creature attack or use any abilities immediately during this turn.\n\n\
3. Fear: Creatures with fear can only be blocked by artifact or black creatures. Creatures with fear are harder to block.\n\n\
4. Cycling: When you cycle a card you pay some cost like 2 and then you discard that card, and then draw a new card. Cycling helps make your deck more versatile.\n\n\
5. Vigilance: This means that the creature will not tap when attacking. This creature can both attack and block during the same turn.\n\n\
6. Trample: If you use 2/1 creature to block an attacking 3/4 creature with trample, you will still receive 2 damage because the 3/4 trampled over your 2/1 creature. Trample damage is calculated by (attack - blocker's defense), in this case 3-1 which is 2.\n\n\
7. Deathtouch: When a creatures with deathtouch deals damage to a creature, that creature is destroyed.\n\n\
8. Defender: Creatures with defender can not attack, they can only block another attacker.\n\n\
9. First Strike and Double Strike: Creatures with first strike deals their combat damage first. Creatures with double strike deals their combat damage first, and then deals their combat damage a second time during the combat damage step.\n\n\
10. Flash: You can play a creature with flash anytime that you can play an Instant.\n\n\
11. Landwalk: Allows your creature to attack without being blocked if your opponent controls the appropriate land type.\n\n\
12. Lifelink: With lifeline you gain life equal to the amount of damage dealt.\n\n\
13. Protection: Can not be damaged, blocked or targeted by sources that match the protection type.\n\n\
14. Reach: Creatures with reach can block flying creatures.\n\n\
15. Shroud: Permanents with shroud can not be targeted by abilities or spells.\n\n\
16. Regenerate: Regenerate is an ability that some creatures have which prevents them from being destroyed and put into the graveyard. When you regenerate a creature, it acts like a shield until end of turn.\n\n\
17. Morph: A creature with morph can be played by usually paying 3 mana of any color and be treated as a 2/2 creature with no abilities rather than playing the creature's actual cost. This creature is placed face down in the battlefield and can be flipped face up anytime as long as you pay its morph cost which is indicated on the card. Once flipped face up the card is treated as the original card, the one that you would normally play with its original-full casting cost.

View File

@@ -1,11 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>preferences</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
</buildSpec>
<natures>
</natures>
</projectDescription>

View File

@@ -1,71 +0,0 @@
program/howToReportBugsURL=http://tinyurl.com/3zzrnyb
program/cardforgeURL=http://cardforge.org
showdeck/2color=false
showdeck/3color=false
showdeck/4color=false
showdeck/5color=false
tokens--file=AllTokens.txt
mtg-data--file=mtg-data.txt
decks--file=all-decks2
booster-decks--file=booster-deck
decks-dir--file=../decks
card-pictures--file=card-pictures.txt
token-images--file=../token-images.txt
card-pictures_a--file=../pics_link/card-pictures_a.txt
card-pictures_b--file=../pics_link/card-pictures_b.txt
card-pictures_c--file=../pics_link/card-pictures_c.txt
card-pictures_d--file=../pics_link/card-pictures_d.txt
card-pictures_e--file=../pics_link/card-pictures_e.txt
card-pictures_f--file=../pics_link/card-pictures_f.txt
card-pictures_g--file=../pics_link/card-pictures_g.txt
card-pictures_h--file=../pics_link/card-pictures_h.txt
card-pictures_i--file=../pics_link/card-pictures_i.txt
card-pictures_j--file=../pics_link/card-pictures_j.txt
card-pictures_k--file=../pics_link/card-pictures_k.txt
card-pictures_l--file=../pics_link/card-pictures_l.txt
card-pictures_m--file=../pics_link/card-pictures_m.txt
card-pictures_n--file=../pics_link/card-pictures_n.txt
card-pictures_o--file=../pics_link/card-pictures_o.txt
card-pictures_p--file=../pics_link/card-pictures_p.txt
card-pictures_q--file=../pics_link/card-pictures_q.txt
card-pictures_r--file=../pics_link/card-pictures_r.txt
card-pictures_s--file=../pics_link/card-pictures_s.txt
card-pictures_t--file=../pics_link/card-pictures_t.txt
card-pictures_u--file=../pics_link/card-pictures_u.txt
card-pictures_v--file=../pics_link/card-pictures_v.txt
card-pictures_w--file=../pics_link/card-pictures_w.txt
card-pictures_x--file=../pics_link/card-pictures_x.txt
card-pictures_y--file=../pics_link/card-pictures_y.txt
card-pictures_z--file=../pics_link/card-pictures_z.txt
card-pictures_other--file=../pics_link/card-pictures_other.txt
card-pictures_token_hq--file=../pics_link/card-pictures_token.txt
cards--file=cards.txt
cardsfolder--file=../cardsfolder
removed-cards--file=removedCards.txt
regular/common--file=common.txt
regular/uncommon--file=uncommon.txt
regular/rare--file=rare.txt
draft/rankings--file=../draft/rankings.txt
name-mutator--file=name-mutator.txt
quest--properties=../quest/quest.properties
draft--properties=../draft/draft.properties
lang--transparent-properties=../lang/lang.properties
image/base--file=../pics
image/token--file=../pics/tokens
image/icon--file=../pics/icons
image/product--file=../pics_product
pics/booster/images--file=../quest/booster-images.txt
quest/opponent/icons--file=../quest/quest-opponent-icons.txt
quest/pet/icons--file=../quest/quest-pet-shop-icons.txt
quest/pet/tokens--file=../quest/quest-pet-token-images.txt

View File

@@ -1,106 +0,0 @@
# Fat Packs
http://www.cardforge.org/fpics/products/fatpacks/5DN.jpg
http://www.cardforge.org/fpics/products/fatpacks/9ED.jpg
http://www.cardforge.org/fpics/products/fatpacks/10E.jpg
http://www.cardforge.org/fpics/products/fatpacks/ALA.jpg
http://www.cardforge.org/fpics/products/fatpacks/APC.jpg
http://www.cardforge.org/fpics/products/fatpacks/ARB.jpg
http://www.cardforge.org/fpics/products/fatpacks/BOK.jpg
http://www.cardforge.org/fpics/products/fatpacks/CFX.jpg
http://www.cardforge.org/fpics/products/fatpacks/CHK.jpg
http://www.cardforge.org/fpics/products/fatpacks/CSP.jpg
http://www.cardforge.org/fpics/products/fatpacks/DIS.jpg
http://www.cardforge.org/fpics/products/fatpacks/DKA.jpg
http://www.cardforge.org/fpics/products/fatpacks/DST.jpg
http://www.cardforge.org/fpics/products/fatpacks/EVE.jpg
http://www.cardforge.org/fpics/products/fatpacks/FUT.jpg
http://www.cardforge.org/fpics/products/fatpacks/GPT.jpg
http://www.cardforge.org/fpics/products/fatpacks/INV.jpg
http://www.cardforge.org/fpics/products/fatpacks/ISD.jpg
http://www.cardforge.org/fpics/products/fatpacks/JUD.jpg
http://www.cardforge.org/fpics/products/fatpacks/LGN.jpg
http://www.cardforge.org/fpics/products/fatpacks/LRW.jpg
http://www.cardforge.org/fpics/products/fatpacks/M10.jpg
http://www.cardforge.org/fpics/products/fatpacks/M10.png
http://www.cardforge.org/fpics/products/fatpacks/M11.jpg
http://www.cardforge.org/fpics/products/fatpacks/M11.png
http://www.cardforge.org/fpics/products/fatpacks/M12.jpg
http://www.cardforge.org/fpics/products/fatpacks/M12.png
http://www.cardforge.org/fpics/products/fatpacks/MBS.jpg
http://www.cardforge.org/fpics/products/fatpacks/MMQ.jpg
http://www.cardforge.org/fpics/products/fatpacks/MOR.jpg
http://www.cardforge.org/fpics/products/fatpacks/MRD.jpg
http://www.cardforge.org/fpics/products/fatpacks/NMS.jpg
http://www.cardforge.org/fpics/products/fatpacks/NPH.jpg
http://www.cardforge.org/fpics/products/fatpacks/ODY.jpg
http://www.cardforge.org/fpics/products/fatpacks/ONS.jpg
http://www.cardforge.org/fpics/products/fatpacks/PCY.jpg
http://www.cardforge.org/fpics/products/fatpacks/PLC.jpg
http://www.cardforge.org/fpics/products/fatpacks/PLS.JPG
http://www.cardforge.org/fpics/products/fatpacks/RAV.jpg
http://www.cardforge.org/fpics/products/fatpacks/ROE.jpg
http://www.cardforge.org/fpics/products/fatpacks/SCG.jpg
http://www.cardforge.org/fpics/products/fatpacks/SHM.jpg
http://www.cardforge.org/fpics/products/fatpacks/SOK.jpg
http://www.cardforge.org/fpics/products/fatpacks/SOM.jpg
http://www.cardforge.org/fpics/products/fatpacks/TOR.jpg
http://www.cardforge.org/fpics/products/fatpacks/TSP.jpg
http://www.cardforge.org/fpics/products/fatpacks/WWK.jpg
http://www.cardforge.org/fpics/products/fatpacks/ZEN.jpg
# Precons
http://www.cardforge.org/fpics/products/precons/bant_on_the_march.jpg
http://www.cardforge.org/fpics/products/precons/battle_cries.jpg
http://www.cardforge.org/fpics/products/precons/blood-and-fire.jpg
http://www.cardforge.org/fpics/products/precons/breath_of_fire.jpg
http://www.cardforge.org/fpics/products/precons/carnival_of_blood.jpg
http://www.cardforge.org/fpics/products/precons/dead_ahead.jpg
http://www.cardforge.org/fpics/products/precons/deadspread.jpg
http://www.cardforge.org/fpics/products/precons/deathfed.jpg
http://www.cardforge.org/fpics/products/precons/devouring_skies.jpg
http://www.cardforge.org/fpics/products/precons/doom_inevitable.jpg
http://www.cardforge.org/fpics/products/precons/eldritch_onslaught.jpg
http://www.cardforge.org/fpics/products/precons/esper_air_assault.jpg
http://www.cardforge.org/fpics/products/precons/feast_of_flesh.jpg
http://www.cardforge.org/fpics/products/precons/grab-for-power.jpg
http://www.cardforge.org/fpics/products/precons/grave_power.jpg
http://www.cardforge.org/fpics/products/precons/grixis_shambling_army.jpg
http://www.cardforge.org/fpics/products/precons/invading_spawn.jpg
http://www.cardforge.org/fpics/products/precons/jund_appetite_for_war.jpg
http://www.cardforge.org/fpics/products/precons/levelers_glory.jpg
http://www.cardforge.org/fpics/products/precons/myr_of_mirrodin.jpg
http://www.cardforge.org/fpics/products/precons/naya_domain.jpg
http://www.cardforge.org/fpics/products/precons/path_of_blight.jpg
http://www.cardforge.org/fpics/products/precons/phyrexian_poison.jpg
http://www.cardforge.org/fpics/products/precons/reign_of_vampirism.jpg
http://www.cardforge.org/fpics/products/precons/relentless_dead.jpg
http://www.cardforge.org/fpics/products/precons/relic_breaker.jpg
http://www.cardforge.org/fpics/products/precons/repel_the_dark.jpg
http://www.cardforge.org/fpics/products/precons/spectral_legions.jpg
http://www.cardforge.org/fpics/products/precons/swift_justice.jpg
http://www.cardforge.org/fpics/products/precons/totem_power.jpg
http://www.cardforge.org/fpics/products/precons/unnatural_schemes.jpg
# Tournament Packs
http://www.cardforge.org/fpics/products/tournamentpacks/2ED.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/3ED.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/4ED.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/5ED.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/6ED.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/ALA.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/CHK.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/ICE.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/INV.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/LEA.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/LEB.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/LRW.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/MIR.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/MMQ.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/MRD.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/ODY.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/ONS.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/RAV.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/SHM.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/TMP.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/TSP.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/USG.jpg

View File

@@ -0,0 +1,52 @@
http://www.cardforge.org/fpics/products/fatpacks/10E.jpg
http://www.cardforge.org/fpics/products/fatpacks/5DN.jpg
http://www.cardforge.org/fpics/products/fatpacks/9ED.jpg
http://www.cardforge.org/fpics/products/fatpacks/ALA.jpg
http://www.cardforge.org/fpics/products/fatpacks/APC.jpg
http://www.cardforge.org/fpics/products/fatpacks/ARB.jpg
http://www.cardforge.org/fpics/products/fatpacks/AVR.png
http://www.cardforge.org/fpics/products/fatpacks/BOK.jpg
http://www.cardforge.org/fpics/products/fatpacks/CFX.jpg
http://www.cardforge.org/fpics/products/fatpacks/CHK.jpg
http://www.cardforge.org/fpics/products/fatpacks/CSP.jpg
http://www.cardforge.org/fpics/products/fatpacks/DIS.jpg
http://www.cardforge.org/fpics/products/fatpacks/DKA.jpg
http://www.cardforge.org/fpics/products/fatpacks/DST.jpg
http://www.cardforge.org/fpics/products/fatpacks/EVE.jpg
http://www.cardforge.org/fpics/products/fatpacks/FUT.jpg
http://www.cardforge.org/fpics/products/fatpacks/GPT.jpg
http://www.cardforge.org/fpics/products/fatpacks/GTC.jpg
http://www.cardforge.org/fpics/products/fatpacks/INV.jpg
http://www.cardforge.org/fpics/products/fatpacks/ISD.jpg
http://www.cardforge.org/fpics/products/fatpacks/JUD.jpg
http://www.cardforge.org/fpics/products/fatpacks/LGN.jpg
http://www.cardforge.org/fpics/products/fatpacks/LRW.jpg
http://www.cardforge.org/fpics/products/fatpacks/M10.jpg
http://www.cardforge.org/fpics/products/fatpacks/M10.png
http://www.cardforge.org/fpics/products/fatpacks/M11.jpg
http://www.cardforge.org/fpics/products/fatpacks/M11.png
http://www.cardforge.org/fpics/products/fatpacks/M12.jpg
http://www.cardforge.org/fpics/products/fatpacks/M12.png
http://www.cardforge.org/fpics/products/fatpacks/M13.jpg
http://www.cardforge.org/fpics/products/fatpacks/MBS.jpg
http://www.cardforge.org/fpics/products/fatpacks/MMQ.jpg
http://www.cardforge.org/fpics/products/fatpacks/MOR.jpg
http://www.cardforge.org/fpics/products/fatpacks/MRD.jpg
http://www.cardforge.org/fpics/products/fatpacks/NMS.jpg
http://www.cardforge.org/fpics/products/fatpacks/NPH.jpg
http://www.cardforge.org/fpics/products/fatpacks/ODY.jpg
http://www.cardforge.org/fpics/products/fatpacks/ONS.jpg
http://www.cardforge.org/fpics/products/fatpacks/PCY.jpg
http://www.cardforge.org/fpics/products/fatpacks/PLC.jpg
http://www.cardforge.org/fpics/products/fatpacks/PLS.jpg
http://www.cardforge.org/fpics/products/fatpacks/RAV.jpg
http://www.cardforge.org/fpics/products/fatpacks/ROE.jpg
http://www.cardforge.org/fpics/products/fatpacks/RTR.jpg
http://www.cardforge.org/fpics/products/fatpacks/SCG.jpg
http://www.cardforge.org/fpics/products/fatpacks/SHM.jpg
http://www.cardforge.org/fpics/products/fatpacks/SOK.jpg
http://www.cardforge.org/fpics/products/fatpacks/SOM.jpg
http://www.cardforge.org/fpics/products/fatpacks/TOR.jpg
http://www.cardforge.org/fpics/products/fatpacks/TSP.jpg
http://www.cardforge.org/fpics/products/fatpacks/WWK.jpg
http://www.cardforge.org/fpics/products/fatpacks/ZEN.jpg

152
res/quest/precon-images.txt Normal file
View File

@@ -0,0 +1,152 @@
http://www.cardforge.org/fpics/products/precons/Bait_Bludgeon.jpg
http://www.cardforge.org/fpics/products/precons/Battle_Surge.jpg
http://www.cardforge.org/fpics/products/precons/Boggart_Feast.jpg
http://www.cardforge.org/fpics/products/precons/Bomber.jpg
http://www.cardforge.org/fpics/products/precons/Cho_Mannos_Resolve.jpg
http://www.cardforge.org/fpics/products/precons/Code_of_the_Orzhov.jpg
http://www.cardforge.org/fpics/products/precons/Critical_Mass.jpg
http://www.cardforge.org/fpics/products/precons/Crusher.jpg
http://www.cardforge.org/fpics/products/precons/Custom_Creatures.jpg
http://www.cardforge.org/fpics/products/precons/Dead_Again.jpg
http://www.cardforge.org/fpics/products/precons/Deaths_Minions.jpg
http://www.cardforge.org/fpics/products/precons/Decay.jpg
http://www.cardforge.org/fpics/products/precons/Deep_Freeze.jpg
http://www.cardforge.org/fpics/products/precons/Disrupter.jpg
http://www.cardforge.org/fpics/products/precons/Domain.jpg
http://www.cardforge.org/fpics/products/precons/Elvish_Rage.jpg
http://www.cardforge.org/fpics/products/precons/Evincars_Tyranny.jpg
http://www.cardforge.org/fpics/products/precons/Expulsion.jpg
http://www.cardforge.org/fpics/products/precons/Fangs_of_the_Bloodchief.jpg
http://www.cardforge.org/fpics/products/precons/Fate_Blaster.jpg
http://www.cardforge.org/fpics/products/precons/Fiendish_Nature.jpg
http://www.cardforge.org/fpics/products/precons/Golgari_Deathcreep.jpg
http://www.cardforge.org/fpics/products/precons/Golgari_Growth.jpg
http://www.cardforge.org/fpics/products/precons/Grave_Danger.jpg
http://www.cardforge.org/fpics/products/precons/Groundbreaker.jpg
http://www.cardforge.org/fpics/products/precons/Heavy_Hitters.jpg
http://www.cardforge.org/fpics/products/precons/Infestation.jpg
http://www.cardforge.org/fpics/products/precons/Izzet_Ingenuity.jpg
http://www.cardforge.org/fpics/products/precons/Kamahls_Temper.jpg
http://www.cardforge.org/fpics/products/precons/Kami_Reborn.jpg
http://www.cardforge.org/fpics/products/precons/Kithkin_Militia.jpg
http://www.cardforge.org/fpics/products/precons/Legion_Aloft.jpg
http://www.cardforge.org/fpics/products/precons/Life_Boost.jpg
http://www.cardforge.org/fpics/products/precons/Little_Bashers.jpg
http://www.cardforge.org/fpics/products/precons/Lofty_Heights.jpg
http://www.cardforge.org/fpics/products/precons/Master_Blaster.jpg
http://www.cardforge.org/fpics/products/precons/Mercenaries.jpg
http://www.cardforge.org/fpics/products/precons/Merrow_Riverways.jpg
http://www.cardforge.org/fpics/products/precons/Migraine.jpg
http://www.cardforge.org/fpics/products/precons/Molimos_Might.jpg
http://www.cardforge.org/fpics/products/precons/Phyrexian_Assault.jpg
http://www.cardforge.org/fpics/products/precons/Pummel.jpg
http://www.cardforge.org/fpics/products/precons/Radiants_Revenge.jpg
http://www.cardforge.org/fpics/products/precons/Rakdos_Bloodsport.jpg
http://www.cardforge.org/fpics/products/precons/Rakdos_Raid.jpg
http://www.cardforge.org/fpics/products/precons/Replicator.jpg
http://www.cardforge.org/fpics/products/precons/Rituals_of_Rebirth.jpg
http://www.cardforge.org/fpics/products/precons/Sacrificial_Bam.jpg
http://www.cardforge.org/fpics/products/precons/Selesnya_Surge.jpg
http://www.cardforge.org/fpics/products/precons/Selesnya_United.jpg
http://www.cardforge.org/fpics/products/precons/Shamanism.jpg
http://www.cardforge.org/fpics/products/precons/Sky_Slam.jpg
http://www.cardforge.org/fpics/products/precons/Sleeper.jpg
http://www.cardforge.org/fpics/products/precons/Sliver_Shivers.jpg
http://www.cardforge.org/fpics/products/precons/Snowscape.jpg
http://www.cardforge.org/fpics/products/precons/Spectral_Slam.jpg
http://www.cardforge.org/fpics/products/precons/Speed_Scorch.jpg
http://www.cardforge.org/fpics/products/precons/Spirit_Flames.jpg
http://www.cardforge.org/fpics/products/precons/Spiritcraft.jpg
http://www.cardforge.org/fpics/products/precons/Stampede.jpg
http://www.cardforge.org/fpics/products/precons/Sunburst.jpg
http://www.cardforge.org/fpics/products/precons/The_Spikes.jpg
http://www.cardforge.org/fpics/products/precons/The_Swarm.jpg
http://www.cardforge.org/fpics/products/precons/Time_Drain.jpg
http://www.cardforge.org/fpics/products/precons/Tombstone.jpg
http://www.cardforge.org/fpics/products/precons/Trounce-O-Matic.jpg
http://www.cardforge.org/fpics/products/precons/Truth_Seekers.jpg
http://www.cardforge.org/fpics/products/precons/Turnabout.jpg
http://www.cardforge.org/fpics/products/precons/Warriors_Code.jpg
http://www.cardforge.org/fpics/products/precons/Way_Wild.jpg
http://www.cardforge.org/fpics/products/precons/Wicked_Big.jpg
http://www.cardforge.org/fpics/products/precons/World_Aflame.jpg
http://www.cardforge.org/fpics/products/precons/Zombies_Unleashed.jpg
http://www.cardforge.org/fpics/products/precons/angelic_might.jpg
http://www.cardforge.org/fpics/products/precons/bant_exalted.jpg
http://www.cardforge.org/fpics/products/precons/bant_on_the_march.jpg
http://www.cardforge.org/fpics/products/precons/battle_blitz.jpg
http://www.cardforge.org/fpics/products/precons/battle_cries.jpg
http://www.cardforge.org/fpics/products/precons/blood_and_fire.jpg
http://www.cardforge.org/fpics/products/precons/bound_by_strength.jpg
http://www.cardforge.org/fpics/products/precons/breath_of_fire.jpg
http://www.cardforge.org/fpics/products/precons/carnival_of_blood.jpg
http://www.cardforge.org/fpics/products/precons/dark_sacrifice.jpg
http://www.cardforge.org/fpics/products/precons/dead_ahead.jpg
http://www.cardforge.org/fpics/products/precons/deadspread.jpg
http://www.cardforge.org/fpics/products/precons/deathfed.jpg
http://www.cardforge.org/fpics/products/precons/deathly_dominion.jpg
http://www.cardforge.org/fpics/products/precons/deaths_encroach.jpg
http://www.cardforge.org/fpics/products/precons/depths_of_power.jpg
http://www.cardforge.org/fpics/products/precons/devouring_skies.jpg
http://www.cardforge.org/fpics/products/precons/doom_inevitable.jpg
http://www.cardforge.org/fpics/products/precons/eldritch_onslaught.jpg
http://www.cardforge.org/fpics/products/precons/entangling_webs.jpg
http://www.cardforge.org/fpics/products/precons/esper_air_assault.jpg
http://www.cardforge.org/fpics/products/precons/esper_artifice.jpg
http://www.cardforge.org/fpics/products/precons/eternal_siege.jpg
http://www.cardforge.org/fpics/products/precons/feast_of_flesh.jpg
http://www.cardforge.org/fpics/products/precons/fiery_dawn.jpg
http://www.cardforge.org/fpics/products/precons/firebomber.jpg
http://www.cardforge.org/fpics/products/precons/flyover.jpg
http://www.cardforge.org/fpics/products/precons/gleeful_flames.jpg
http://www.cardforge.org/fpics/products/precons/grab-for-power.jpg
http://www.cardforge.org/fpics/products/precons/grave_power.jpg
http://www.cardforge.org/fpics/products/precons/grixis_shambling_army.jpg
http://www.cardforge.org/fpics/products/precons/grixis_undead.jpg
http://www.cardforge.org/fpics/products/precons/hold_the_line.jpg
http://www.cardforge.org/fpics/products/precons/infect_and_defile.jpg
http://www.cardforge.org/fpics/products/precons/into_the_breach.jpg
http://www.cardforge.org/fpics/products/precons/invading_spawn.jpg
http://www.cardforge.org/fpics/products/precons/jund_appetite_for_war.jpg
http://www.cardforge.org/fpics/products/precons/kor_armory.jpg
http://www.cardforge.org/fpics/products/precons/levelers_glory.jpg
http://www.cardforge.org/fpics/products/precons/levelers_scorn.jpg
http://www.cardforge.org/fpics/products/precons/metalcraft.jpg
http://www.cardforge.org/fpics/products/precons/mirromancy.jpg
http://www.cardforge.org/fpics/products/precons/mob_rule.jpg
http://www.cardforge.org/fpics/products/precons/monstrous_surprise.jpg
http://www.cardforge.org/fpics/products/precons/myr_of_mirrodin.jpg
http://www.cardforge.org/fpics/products/precons/mysterious_realms.jpg
http://www.cardforge.org/fpics/products/precons/mystical_might.jpg
http://www.cardforge.org/fpics/products/precons/naya_behemoths.jpg
http://www.cardforge.org/fpics/products/precons/naya_domain.jpg
http://www.cardforge.org/fpics/products/precons/path_of_blight.jpg
http://www.cardforge.org/fpics/products/precons/phyrexian_poison.jpg
http://www.cardforge.org/fpics/products/precons/presence_of_mind.jpg
http://www.cardforge.org/fpics/products/precons/primordial_jund.jpg
http://www.cardforge.org/fpics/products/precons/rapid_fire.jpg
http://www.cardforge.org/fpics/products/precons/ravaging_swarm.jpg
http://www.cardforge.org/fpics/products/precons/reign_of_vampirism.jpg
http://www.cardforge.org/fpics/products/precons/relentless_dead.jpg
http://www.cardforge.org/fpics/products/precons/relic_breaker.jpg
http://www.cardforge.org/fpics/products/precons/repeat_performance.jpg
http://www.cardforge.org/fpics/products/precons/repel_the_dark.jpg
http://www.cardforge.org/fpics/products/precons/rise_of_the_vampires.jpg
http://www.cardforge.org/fpics/products/precons/rot_from_within.jpg
http://www.cardforge.org/fpics/products/precons/rumbler.jpg
http://www.cardforge.org/fpics/products/precons/sacred_assault.jpg
http://www.cardforge.org/fpics/products/precons/slaughterhouse.jpg
http://www.cardforge.org/fpics/products/precons/sole_domination.jpg
http://www.cardforge.org/fpics/products/precons/solitary_fiends.jpg
http://www.cardforge.org/fpics/products/precons/spectral_legions.jpg
http://www.cardforge.org/fpics/products/precons/spiraling_doom.jpg
http://www.cardforge.org/fpics/products/precons/superabundance.jpg
http://www.cardforge.org/fpics/products/precons/sweet_revenge.jpg
http://www.cardforge.org/fpics/products/precons/swift_justice.jpg
http://www.cardforge.org/fpics/products/precons/the_adventurers.jpg
http://www.cardforge.org/fpics/products/precons/totem_power.jpg
http://www.cardforge.org/fpics/products/precons/unnatural_schemes.jpg
http://www.cardforge.org/fpics/products/precons/unstable_terrain.jpg
http://www.cardforge.org/fpics/products/precons/vampire_onslaught.jpg
http://www.cardforge.org/fpics/products/precons/war_of_attrition.jpg
http://www.cardforge.org/fpics/products/precons/wild_rush.jpg

View File

@@ -1,19 +0,0 @@
common--file=common.txt
uncommon--file=uncommon.txt
rare--file=rare.txt
price--file=all-prices.txt
boosterprice--file=booster-prices.txt
data-xml--file=questData.dat
data--file=questData
prefs--file=quest.preferences
duels-dir--file=duels
challenges-dir--file=challenges
world-dir--file=world
data-dir--file=data
precons-dir--file=precons
bazaar-dir--file=bazaar
bazaar--file=bazaar/index.xml

View File

@@ -0,0 +1,22 @@
http://www.cardforge.org/fpics/products/tournamentpacks/2ED.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/3ED.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/4ED.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/5ED.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/6ED.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/ALA.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/CHK.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/ICE.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/INV.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/LEA.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/LEB.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/LRW.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/MIR.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/MMQ.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/MRD.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/ODY.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/ONS.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/RAV.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/SHM.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/TMP.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/TSP.jpg
http://www.cardforge.org/fpics/products/tournamentpacks/USG.jpg

View File

@@ -42,8 +42,8 @@ import forge.card.ability.AbilityUtils;
import forge.card.ability.ApiType;
import forge.card.cardfactory.CardFactoryUtil;
import forge.card.cost.Cost;
import forge.card.mana.ManaCostBeingPaid;
import forge.card.mana.ManaCost;
import forge.card.mana.ManaCostBeingPaid;
import forge.card.replacement.ReplaceMoved;
import forge.card.replacement.ReplacementEffect;
import forge.card.replacement.ReplacementResult;
@@ -58,8 +58,8 @@ import forge.card.trigger.TriggerType;
import forge.card.trigger.ZCTrigger;
import forge.game.GameActionUtil;
import forge.game.GlobalRuleChange;
import forge.game.event.CounterAddedEvent;
import forge.game.event.CardEquippedEvent;
import forge.game.event.CounterAddedEvent;
import forge.game.event.CounterRemovedEvent;
import forge.game.event.SetTappedEvent;
import forge.game.phase.Combat;

View File

@@ -17,7 +17,6 @@
*/
package forge;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -39,7 +38,6 @@ import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.gui.GuiDisplayUtil;
import forge.item.IPaperCard;
import forge.properties.ForgeProps;
import forge.properties.NewConstants;
@@ -131,7 +129,7 @@ public final class CardUtil {
final String set = card.getCurSetCode();
CardInSet neededSet = card.getRules().getEditionInfo(set);
final int cntPictures = neededSet == null ? 1 : neededSet.getCopiesCount();
return CardUtil.buildFilename(card.getName(), card.getCurSetCode(), card.getRandomPicture(), cntPictures, token);
return CardUtil.buildFilename(GuiDisplayUtil.cleanString(card.getName()), card.getCurSetCode(), card.getRandomPicture(), cntPictures, token);
}
/**
@@ -146,7 +144,7 @@ public final class CardUtil {
final int maxIndex = cr.getEditionInfo(card.getEdition()).getCopiesCount();
// picture is named AssaultBattery.full.jpg
String imageName = cr.getSplitType() != CardSplitType.Split ? card.getName() : buildSplitCardFilename(cr);
return CardUtil.buildFilename(imageName, card.getEdition(), card.getArtIndex(), maxIndex, false);
return CardUtil.buildFilename(GuiDisplayUtil.cleanString(imageName), card.getEdition(), card.getArtIndex(), maxIndex, false);
}
public static String buildSplitCardFilename(CardRules cr) {
@@ -164,68 +162,18 @@ public final class CardUtil {
*/
public static String buildFilename(final IPaperCard card, final String nameToUse) {
final int maxIndex = card.getRules().getEditionInfo(card.getEdition()).getCopiesCount();
return CardUtil.buildFilename(nameToUse, card.getEdition(), card.getArtIndex(), maxIndex, false);
return CardUtil.buildFilename(GuiDisplayUtil.cleanString(nameToUse), card.getEdition(), card.getArtIndex(), maxIndex, false);
}
private static String buildFilename(final String cardName, final String setName, final int artIndex,
public static String buildFilename(final String cleanCardName, final String setName, final int artIndex,
final int artIndexMax, final boolean isToken) {
final File path = ForgeProps.getFile(isToken ? NewConstants.IMAGE_TOKEN : NewConstants.IMAGE_BASE);
final String nn = artIndexMax > 1 ? Integer.toString(artIndex + 1) : "";
final String cleanCardName = GuiDisplayUtil.cleanString(cardName);
File f = null;
if (StringUtils.isNotBlank(setName)) {
final String mwsCardName = GuiDisplayUtil.cleanStringMWS(cardName);
// First, try 3 letter set code with MWS filename format
final String mwsSet3 = String.format("%s/%s%s.full", setName, mwsCardName, nn);
f = new File(path, mwsSet3 + ".jpg");
if (f.exists()) {
return mwsSet3;
return String.format("%s%s%s%s.full",
isToken ? ImageCache.TOKEN_PREFIX : "",
StringUtils.isBlank(setName) ? "" : setName + "/",
cleanCardName,
artIndexMax <= 1 ? "" : String.valueOf(artIndex + 1));
}
// Second, try 2 letter set code with MWS filename format
final String mwsSet2 = String.format("%s/%s%s.full", Singletons.getModel().getEditions().getCode2ByCode(setName), mwsCardName, nn);
f = new File(path, mwsSet2 + ".jpg");
if (f.exists()) {
return mwsSet2;
}
// Third, try 3 letter set code with Forge filename format
final String forgeSet3 = String.format("%s/%s%s", setName, cleanCardName, nn);
f = new File(path, forgeSet3 + ".jpg");
if (f.exists()) {
return forgeSet3;
}
}
// Last, give up with set images, go with the old picture type
final String forgePlain = String.format("%s%s", cleanCardName, nn);
f = new File(path, forgePlain + ".jpg");
if (f.exists()) {
return forgePlain;
}
// give up with art index
f = new File(path, cleanCardName + ".jpg");
if (f.exists()) {
return cleanCardName;
}
// if still no file, download if option enabled?
return "none";
}
/**
* <p>
* getShortColorsString.
* </p>
*
* @param colors
* a {@link java.util.ArrayList} object.
* @return a {@link java.lang.String} object.
*/
public static String getShortColorsString(final ArrayList<String> colors) {
String colorDesc = "";
for (final String col : colors) {
@@ -412,7 +360,7 @@ public final class CardUtil {
ret.setName("");
ret.setType(types);
ret.setImageFilename(NewConstants.MORPH_IMAGE_FILE_NAME);
ret.setImageFilename(NewConstants.CACHE_MORPH_IMAGE_FILE);
return ret;
}

View File

@@ -22,9 +22,6 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import forge.properties.ForgeProps;
import forge.properties.NewConstants;
/**
* <p>
* Constant interface.
@@ -34,9 +31,6 @@ import forge.properties.NewConstants;
* @version $Id$
*/
public final class Constant {
/** Constant <code>ProgramName="Forge - http://cardforge.org"</code>. */
public static final String PROGRAM_NAME = "Forge - " + ForgeProps.getProperty(NewConstants.CARDFORGE_URL);
// used to pass information between the GUI screens
/**
* The Class Runtime.

View File

@@ -19,6 +19,7 @@ package forge;
import java.awt.image.BufferedImage;
import java.util.concurrent.ExecutionException;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader.InvalidCacheLoadException;
import com.google.common.cache.LoadingCache;
@@ -27,6 +28,7 @@ import com.mortennobel.imagescaling.ResampleOp;
import forge.gui.GuiDisplayUtil;
import forge.item.InventoryItem;
import forge.properties.ForgePreferences.FPref;
import forge.properties.NewConstants;
/**
* This class stores ALL card images in a cache with soft values. this means
@@ -43,18 +45,17 @@ import forge.properties.ForgePreferences.FPref;
* @version $Id$
*/
public class ImageCache {
/** Constant <code>imageCache</code>. */
static final LoadingCache<String, BufferedImage> CACHE = CacheBuilder.newBuilder().softValues().build(new ImageLoader());
/** Constant <code>FULL_SIZE</code>. */
// short prefixes to save memory
public static final String TOKEN_PREFIX = "t:";
public static final String BOOSTER_PREFIX = "b:";
public static final String FATPACK_PREFIX = "f:";
public static final String PRECON_PREFIX = "p:";
public static final String TOURNAMENTPACK_PREFIX = "o:";
public static final String SEALED_PRODUCT = "sealed://";
public static final String TOKEN = "token://";
static private final LoadingCache<String, BufferedImage> CACHE = CacheBuilder.newBuilder().softValues().build(new ImageLoader());
public static BufferedImage getImage(final Card card, final int width, final int height) {
//SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS");
//System.out.printf("%s - load '%s' (%d x %d)\n", sdf.format(new Date()), card.getImageFilename(), width, height );
final String key = card.canBeShownTo(Singletons.getControl().getPlayer()) ? ImageCache.getKey(card) : "Morph";
final String key = card.canBeShownTo(Singletons.getControl().getPlayer()) ? ImageCache.getKey(card) : NewConstants.CACHE_MORPH_IMAGE_FILE;
return scaleImage(key, width, height);
}
@@ -70,12 +71,6 @@ public class ImageCache {
return scaleImage(key, width, height);
}
/**
* TODO: Write javadoc for this method.
* @param original
* @param scale
* @return
*/
private static BufferedImage scaleImage(String key, final int width, final int height) {
if (3 > width || 3 > height) {
// picture too small; return a blank
@@ -118,10 +113,6 @@ public class ImageCache {
/**
* Returns the Image corresponding to the key.
*
* @param key
* a {@link java.lang.String} object.
* @return a {@link java.awt.image.BufferedImage} object.
*/
private static BufferedImage getImage(final String key) {
try {
@@ -140,14 +131,10 @@ public class ImageCache {
/**
* Returns the map key for a card, without any suffixes for the image size.
*
* @param card
* a {@link forge.Card} object.
* @return a {@link java.lang.String} object.
*/
public static String getKey(final Card card) {
if ((card.isToken() && !card.isCopiedToken()) || card.isFaceDown()) {
return ImageCache.TOKEN + GuiDisplayUtil.cleanString(card.getImageFilename());
return ImageCache.TOKEN_PREFIX + GuiDisplayUtil.cleanString(card.getImageFilename());
}
return card.getImageFilename(); // key;
}
@@ -155,5 +142,4 @@ public class ImageCache {
public static String getKey(final InventoryItem ii) {
return ii.getImageFilename();
}
}

View File

@@ -3,70 +3,76 @@ package forge;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import com.google.common.cache.CacheLoader;
import forge.error.BugReporter;
import forge.properties.ForgeProps;
import forge.properties.NewConstants;
/**
* TODO: Write javadoc for this type.
*
*/
final class ImageLoader extends CacheLoader<String, BufferedImage> {
// image file extensions for various formats in order of likelihood
private static final String[] _FILE_EXTENSIONS = { ".jpg", ".png" };
@Override
public BufferedImage load(String key) {
// original
File path;
String filename;
if (key.startsWith(ImageCache.TOKEN)) {
filename = key.substring(ImageCache.TOKEN.length());
path = ForgeProps.getFile(NewConstants.IMAGE_TOKEN);
} else if (key.startsWith(ImageCache.SEALED_PRODUCT)) {
filename = key.substring(ImageCache.SEALED_PRODUCT.length());
path = ForgeProps.getFile(NewConstants.IMAGE_SEALED_PRODUCT);
final String path;
final String filename;
if (key.startsWith(ImageCache.TOKEN_PREFIX)) {
filename = key.substring(ImageCache.TOKEN_PREFIX.length());
path = NewConstants.CACHE_TOKEN_PICS_DIR;
} else if (key.startsWith(ImageCache.BOOSTER_PREFIX)) {
filename = key.substring(ImageCache.BOOSTER_PREFIX.length());
path = NewConstants.CACHE_BOOSTER_PICS_DIR;
} else if (key.startsWith(ImageCache.FATPACK_PREFIX)) {
filename = key.substring(ImageCache.FATPACK_PREFIX.length());
path = NewConstants.CACHE_FATPACK_PICS_DIR;
} else if (key.startsWith(ImageCache.PRECON_PREFIX)) {
filename = key.substring(ImageCache.PRECON_PREFIX.length());
path = NewConstants.CACHE_PRECON_PICS_DIR;
} else if (key.startsWith(ImageCache.TOURNAMENTPACK_PREFIX)) {
filename = key.substring(ImageCache.TOURNAMENTPACK_PREFIX.length());
path = NewConstants.CACHE_TOURNAMENTPACK_PICS_DIR;
} else {
filename = key;
path = ForgeProps.getFile(NewConstants.IMAGE_BASE);
path = NewConstants.CACHE_CARD_PICS_DIR;
}
File file = null;
boolean isPng = filename.endsWith(".png");
final String fName = isPng || filename.endsWith(".jpg") ? filename : filename + ".jpg";
file = new File(path, fName);
if (!file.exists()) {
// DEBUG
//System.out.println("File not found, no image created: "
//+ file);
return null;
}
final BufferedImage image = getImage(file);
//ImageCache.IMAGE_CACHE.put(key, image);
return image;
BufferedImage ret = _findFile(key, path, filename);
// try without set prefix (if any)
if (null == ret && filename.contains("/")) {
ret = _findFile(key, path, filename.substring(filename.indexOf('/') + 1));
}
if (null == ret) {
System.out.println("File not found, no image created: " + key);
}
return ret;
}
/**
* <p>
* getImage.
* </p>
*
* @param file a {@link java.io.File} object.
* @return a {@link java.awt.image.BufferedImage} object.
* @throws IOException Signals that an I/O exception has occurred.
*/
public static BufferedImage getImage(final File file) {
//System.out.printf("Loading from disk: %s\n", file.toString());
BufferedImage image;
//int format = useAlpha ? BufferedImage.TYPE_INT_ARGB : BufferedImage.TYPE_INT_RGB;
BufferedImage image = null;;
try {
image = ImageIO.read(file);
} catch (IOException ex) {
BugReporter.reportException(ex, "Could not read image file " + file.getAbsolutePath() + " ");
return null;
}
return image;
}
private static BufferedImage _findFile(String key, String path, String filename) {
for (String ext : _FILE_EXTENSIONS) {
File file = new File(path, filename + ext);
if (file.exists()) {
System.out.println(String.format("Found %s at: %s", key, file.getAbsolutePath()));
return getImage(file);
}
}
return null;
}
}

View File

@@ -25,50 +25,22 @@ import forge.view.FView;
* Provides global/static access to singleton instances.
*/
public final class Singletons {
private static FModel model = null;
private static FView view = null;
private static FControl control = null;
/**
* Do not instantiate.
*/
private Singletons() {
// This line intentionally left blank.
}
/** @return {@link forge.model.FModel} */
public static FModel getModel() {
return Singletons.model;
}
/** @param model0 &emsp; {@link forge.model.FModel} */
public static void setModel(final FModel model0) {
Singletons.model = model0;
}
/**
* IMPORTANT - does not return view frame! Must call
* getFrame() from FView for that.
* @return {@link forge.model.JFrame} */
public static FView getView() {
return Singletons.view;
}
*/
public static FView getView() { return view; }
public static FControl getControl() { return control; }
public static FModel getModel() { return model; }
/** @param view0 &emsp; {@link forge.model.FView} */
public static void setView(final FView view0) {
Singletons.view = view0;
}
public static void setModel (FModel model0) { model = model0; }
public static void setView (FView view0) { view = view0; }
public static void setControl(FControl control0) { control = control0; }
/** @return {@link forge.control.FControl} */
public static FControl getControl() {
return Singletons.control;
}
/** @param control0 &emsp; {@link forge.control.FControl} */
public static void setControl(final FControl control0) {
Singletons.control = control0;
}
// disallow instantiation
private Singletons() { }
}

View File

@@ -28,9 +28,9 @@ import com.esotericsoftware.minlog.Log;
import forge.card.replacement.ReplacementEffect;
import forge.card.spellability.SpellAbility;
import forge.card.staticability.StaticAbility;
import forge.game.GlobalRuleChange;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.game.GlobalRuleChange;
/**
* <p>

View File

@@ -2,6 +2,7 @@ package forge.card;
import java.util.ArrayList;
import java.util.List;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.Iterables;

View File

@@ -23,9 +23,9 @@ import java.util.TreeMap;
import org.apache.commons.lang3.StringUtils;
import forge.card.mana.ManaCostShard;
import forge.card.mana.IParserManaCost;
import forge.card.mana.ManaCost;
import forge.card.mana.ManaCostShard;
/**
@@ -114,13 +114,10 @@ public class CardRulesReader {
* the line
*/
public final void parseLine(final String line) {
int colonPos = line.indexOf(':');
String key = colonPos > 0 ? line.substring(0, colonPos) : line;
String value = colonPos > 0 ? line.substring(1+colonPos).trim() : null;
switch(key.charAt(0)) {
case 'A':
if ("A".equals(key))

View File

@@ -20,6 +20,7 @@ package forge.card;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import forge.game.GameFormat;
import forge.util.FileSection;
import forge.util.storage.StorageReaderFile;

View File

@@ -21,9 +21,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import forge.Card;
import forge.card.cost.Cost;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;

View File

@@ -4,7 +4,99 @@ package forge.card.ability;
import java.util.Map;
import java.util.TreeMap;
import forge.card.ability.ai.*;
import forge.card.ability.ai.AddPhaseAi;
import forge.card.ability.ai.AddTurnAi;
import forge.card.ability.ai.AlwaysPlayAi;
import forge.card.ability.ai.AnimateAi;
import forge.card.ability.ai.AnimateAllAi;
import forge.card.ability.ai.AttachAi;
import forge.card.ability.ai.BondAi;
import forge.card.ability.ai.CanPlayAsDrawbackAi;
import forge.card.ability.ai.CannotPlayAi;
import forge.card.ability.ai.ChangeZoneAi;
import forge.card.ability.ai.ChangeZoneAllAi;
import forge.card.ability.ai.CharmAi;
import forge.card.ability.ai.ChooseCardAi;
import forge.card.ability.ai.ChooseCardNameAi;
import forge.card.ability.ai.ChooseColorAi;
import forge.card.ability.ai.ChoosePlayerAi;
import forge.card.ability.ai.ChooseSourceAi;
import forge.card.ability.ai.ChooseTypeAi;
import forge.card.ability.ai.ClashAi;
import forge.card.ability.ai.CloneAi;
import forge.card.ability.ai.ControlExchangeAi;
import forge.card.ability.ai.ControlGainAi;
import forge.card.ability.ai.CopyPermanentAi;
import forge.card.ability.ai.CounterAi;
import forge.card.ability.ai.CountersMoveAi;
import forge.card.ability.ai.CountersProliferateAi;
import forge.card.ability.ai.CountersPutAi;
import forge.card.ability.ai.CountersPutAllAi;
import forge.card.ability.ai.CountersRemoveAi;
import forge.card.ability.ai.DamageAllAi;
import forge.card.ability.ai.DamageDealAi;
import forge.card.ability.ai.DamageEachAi;
import forge.card.ability.ai.DamagePreventAi;
import forge.card.ability.ai.DamagePreventAllAi;
import forge.card.ability.ai.DebuffAi;
import forge.card.ability.ai.DebuffAllAi;
import forge.card.ability.ai.DelayedTriggerAi;
import forge.card.ability.ai.DestroyAi;
import forge.card.ability.ai.DestroyAllAi;
import forge.card.ability.ai.DigAi;
import forge.card.ability.ai.DigUntilAi;
import forge.card.ability.ai.DiscardAi;
import forge.card.ability.ai.DrainManaAi;
import forge.card.ability.ai.DrawAi;
import forge.card.ability.ai.EffectAi;
import forge.card.ability.ai.EncodeAi;
import forge.card.ability.ai.EndTurnAi;
import forge.card.ability.ai.FightAi;
import forge.card.ability.ai.FogAi;
import forge.card.ability.ai.GameLossAi;
import forge.card.ability.ai.GameWinAi;
import forge.card.ability.ai.LifeExchangeAi;
import forge.card.ability.ai.LifeGainAi;
import forge.card.ability.ai.LifeLoseAi;
import forge.card.ability.ai.LifeSetAi;
import forge.card.ability.ai.MillAi;
import forge.card.ability.ai.MustAttackAi;
import forge.card.ability.ai.MustBlockAi;
import forge.card.ability.ai.PeekAndRevealAi;
import forge.card.ability.ai.PermanentCreatureAi;
import forge.card.ability.ai.PermanentNoncreatureAi;
import forge.card.ability.ai.PhasesAi;
import forge.card.ability.ai.PlayAi;
import forge.card.ability.ai.PoisonAi;
import forge.card.ability.ai.ProtectAi;
import forge.card.ability.ai.ProtectAllAi;
import forge.card.ability.ai.PumpAi;
import forge.card.ability.ai.PumpAllAi;
import forge.card.ability.ai.RearrangeTopOfLibraryAi;
import forge.card.ability.ai.RegenerateAi;
import forge.card.ability.ai.RegenerateAllAi;
import forge.card.ability.ai.RemoveFromCombatAi;
import forge.card.ability.ai.RepeatAi;
import forge.card.ability.ai.RepeatEachAi;
import forge.card.ability.ai.RestartGameAi;
import forge.card.ability.ai.RevealAi;
import forge.card.ability.ai.RevealHandAi;
import forge.card.ability.ai.SacrificeAi;
import forge.card.ability.ai.SacrificeAllAi;
import forge.card.ability.ai.ScryAi;
import forge.card.ability.ai.SetStateAi;
import forge.card.ability.ai.SetStateAllAi;
import forge.card.ability.ai.ShuffleAi;
import forge.card.ability.ai.StoreSVarAi;
import forge.card.ability.ai.TapAi;
import forge.card.ability.ai.TapAllAi;
import forge.card.ability.ai.TapOrUntapAi;
import forge.card.ability.ai.TapOrUntapAllAi;
import forge.card.ability.ai.TokenAi;
import forge.card.ability.ai.TwoPilesAi;
import forge.card.ability.ai.UnattachAllAi;
import forge.card.ability.ai.UntapAi;
import forge.card.ability.ai.UntapAllAi;
import forge.card.ability.effects.*;
import forge.util.ReflectionUtil;

View File

@@ -19,10 +19,10 @@ package forge.card.ability.ai;
import java.util.List;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.card.ability.AbilityUtils;
import forge.card.ability.SpellAbilityAi;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.AIPlayer;
import forge.game.player.Player;

View File

@@ -13,9 +13,9 @@ import com.google.common.base.Predicates;
import forge.Card;
import forge.CardLists;
import forge.CardPredicates;
import forge.CardPredicates.Presets;
import forge.CardUtil;
import forge.Singletons;
import forge.CardPredicates.Presets;
import forge.card.ability.AbilityUtils;
import forge.card.ability.ApiType;
import forge.card.ability.SpellAbilityAi;

View File

@@ -17,8 +17,8 @@
*/
package forge.card.ability.ai;
import forge.card.spellability.SpellAbility;
import forge.card.ability.SpellAbilityAi;
import forge.card.spellability.SpellAbility;
import forge.game.player.AIPlayer;
/**

View File

@@ -12,10 +12,10 @@ import forge.Card;
import forge.CardCharacteristicName;
import forge.CardLists;
import forge.CardPredicates;
import forge.CardPredicates.Presets;
import forge.Constant;
import forge.GameEntity;
import forge.Singletons;
import forge.CardPredicates.Presets;
import forge.card.ability.AbilityUtils;
import forge.card.ability.ApiType;
import forge.card.ability.SpellAbilityAi;
@@ -28,10 +28,10 @@ import forge.card.spellability.SpellAbility;
import forge.card.spellability.SpellPermanent;
import forge.card.spellability.Target;
import forge.game.GlobalRuleChange;
import forge.game.ai.ComputerUtilCard;
import forge.game.ai.ComputerUtilCombat;
import forge.game.ai.ComputerUtil;
import forge.game.ai.ComputerUtilBlock;
import forge.game.ai.ComputerUtilCard;
import forge.game.ai.ComputerUtilCombat;
import forge.game.ai.ComputerUtilCost;
import forge.game.ai.ComputerUtilMana;
import forge.game.phase.Combat;

View File

@@ -5,7 +5,9 @@ import java.util.List;
import java.util.Random;
import org.apache.commons.lang.math.RandomUtils;
import forge.card.ability.SpellAbilityAi;import forge.card.ability.effects.CharmEffect;
import forge.card.ability.SpellAbilityAi;
import forge.card.ability.effects.CharmEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.game.player.AIPlayer;

View File

@@ -24,7 +24,6 @@ import java.util.Map;
import com.google.common.base.Predicate;
import forge.Card;
import forge.CardLists;
import forge.Singletons;
import forge.card.ability.AbilityUtils;

View File

@@ -8,8 +8,8 @@ import com.google.common.base.Predicate;
import forge.Card;
import forge.CardLists;
import forge.Singletons;
import forge.CardPredicates.Presets;
import forge.Singletons;
import forge.card.ability.SpellAbilityAi;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;

View File

@@ -22,7 +22,6 @@ import java.util.List;
import com.google.common.base.Predicate;
import forge.Card;
import forge.CardLists;
import forge.CounterType;
import forge.game.ai.ComputerUtilCard;

View File

@@ -22,9 +22,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import forge.Card;
import forge.Singletons;
import forge.card.ability.AbilityUtils;
import forge.card.ability.SpellAbilityAi;

View File

@@ -17,8 +17,8 @@
*/
package forge.card.ability.ai;
import forge.card.spellability.SpellAbility;
import forge.card.ability.SpellAbilityAi;
import forge.card.spellability.SpellAbility;
import forge.game.player.AIPlayer;
/**

View File

@@ -10,8 +10,8 @@ import forge.card.cost.Cost;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.ai.ComputerUtilCombat;
import forge.game.ai.ComputerUtil;
import forge.game.ai.ComputerUtilCombat;
import forge.game.ai.ComputerUtilCost;
import forge.game.ai.ComputerUtilMana;
import forge.game.phase.PhaseType;

View File

@@ -3,6 +3,7 @@ package forge.card.ability.ai;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.google.common.base.Predicate;
import forge.Card;

View File

@@ -3,12 +3,13 @@ package forge.card.ability.ai;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.google.common.base.Predicate;
import forge.Card;
import forge.CardLists;
import forge.Singletons;
import forge.CardPredicates.Presets;
import forge.Singletons;
import forge.card.ability.AbilityUtils;
import forge.card.ability.SpellAbilityAi;
import forge.card.cost.Cost;

View File

@@ -12,9 +12,9 @@ import forge.Singletons;
import forge.card.ability.AbilityUtils;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.ai.ComputerUtil;
import forge.game.ai.ComputerUtilCard;
import forge.game.ai.ComputerUtilCombat;
import forge.game.ai.ComputerUtil;
import forge.game.phase.CombatUtil;
import forge.game.phase.PhaseType;
import forge.game.player.AIPlayer;

View File

@@ -21,7 +21,6 @@ import java.util.ArrayList;
import java.util.List;
import forge.Card;
import forge.CardLists;
import forge.CardPredicates;
import forge.Singletons;

View File

@@ -7,8 +7,8 @@ import com.google.common.base.Predicate;
import forge.Card;
import forge.CardLists;
import forge.CounterType;
import forge.CardPredicates.Presets;
import forge.CounterType;
import forge.card.ability.SpellAbilityAi;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;

View File

@@ -1,6 +1,7 @@
package forge.card.ability.ai;
import java.util.List;
import forge.Card;
import forge.CardLists;
import forge.card.ability.AbilityUtils;

View File

@@ -4,8 +4,8 @@ import forge.Card;
import forge.Singletons;
import forge.card.ability.SpellAbilityAi;
import forge.card.spellability.SpellAbility;
import forge.game.ai.ComputerUtilCombat;
import forge.game.ai.ComputerUtil;
import forge.game.ai.ComputerUtilCombat;
import forge.game.player.AIPlayer;
public class StoreSVarAi extends SpellAbilityAi {

View File

@@ -8,8 +8,8 @@ import com.google.common.collect.Iterables;
import forge.Card;
import forge.CardLists;
import forge.CardPredicates;
import forge.Singletons;
import forge.CardPredicates.Presets;
import forge.Singletons;
import forge.card.ability.SpellAbilityAi;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;

View File

@@ -8,8 +8,8 @@ import com.google.common.collect.Iterables;
import forge.Card;
import forge.CardLists;
import forge.Singletons;
import forge.CardPredicates.Presets;
import forge.Singletons;
import forge.card.ability.SpellAbilityAi;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;

View File

@@ -5,8 +5,8 @@ import java.util.Random;
import forge.Card;
import forge.CardLists;
import forge.Singletons;
import forge.CardPredicates.Presets;
import forge.Singletons;
import forge.card.ability.AbilityUtils;
import forge.card.ability.SpellAbilityAi;
import forge.card.cost.Cost;

View File

@@ -18,8 +18,8 @@
package forge.card.ability.effects;
import java.util.ArrayList;
import forge.Card;
import forge.Card;
import forge.card.ability.SpellAbilityEffect;
import forge.card.spellability.SpellAbility;
import forge.card.staticability.StaticAbility;

View File

@@ -2,6 +2,7 @@ package forge.card.ability.effects;
import java.util.ArrayList;
import java.util.List;
import forge.Card;
import forge.CardLists;
import forge.Command;

View File

@@ -2,6 +2,7 @@ package forge.card.ability.effects;
import java.util.ArrayList;
import java.util.List;
import com.google.common.base.Predicates;
import forge.Card;

View File

@@ -2,6 +2,7 @@ package forge.card.ability.effects;
import java.util.ArrayList;
import java.util.List;
import forge.Card;
import forge.card.ability.AbilityFactory;
import forge.card.ability.SpellAbilityEffect;

View File

@@ -5,8 +5,8 @@ import java.util.List;
import forge.Card;
import forge.CardLists;
import forge.Singletons;
import forge.CardPredicates.Presets;
import forge.Singletons;
import forge.card.CardType;
import forge.card.ability.SpellAbilityEffect;
import forge.card.cardfactory.CardFactoryUtil;

View File

@@ -12,8 +12,8 @@ import com.google.common.collect.Lists;
import forge.Card;
import forge.CardLists;
import forge.Singletons;
import forge.CardPredicates.Presets;
import forge.Singletons;
import forge.card.CardRulesPredicates;
import forge.card.ability.SpellAbilityEffect;
import forge.card.spellability.SpellAbility;

View File

@@ -6,6 +6,7 @@ import java.util.Map;
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
import forge.Card;
import forge.card.ability.AbilityFactory;
import forge.card.ability.AbilityUtils;

View File

@@ -4,6 +4,8 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
import com.google.common.base.Predicate;
import forge.Card;
import forge.CardLists;
import forge.Singletons;
@@ -20,8 +22,6 @@ import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.gui.GuiChoose;
import com.google.common.base.Predicate;
public class ChooseSourceEffect extends SpellAbilityEffect {
@Override
protected String getStackDescription(SpellAbility sa) {

View File

@@ -2,6 +2,7 @@ package forge.card.ability.effects;
import java.util.ArrayList;
import java.util.List;
import forge.Card;
import forge.Singletons;
import forge.card.ability.SpellAbilityEffect;

View File

@@ -14,8 +14,8 @@ import forge.Singletons;
import forge.card.ability.AbilityUtils;
import forge.card.ability.SpellAbilityEffect;
import forge.card.cost.Cost;
import forge.card.cost.CostPartMana;
import forge.card.cost.CostPart;
import forge.card.cost.CostPartMana;
import forge.card.mana.ManaCost;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;

View File

@@ -3,6 +3,7 @@ package forge.card.ability.effects;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import forge.Card;
import forge.CardUtil;
import forge.Command;

View File

@@ -2,6 +2,7 @@ package forge.card.ability.effects;
import java.util.ArrayList;
import java.util.List;
import forge.Card;
import forge.CardLists;
import forge.Singletons;

View File

@@ -20,9 +20,7 @@ package forge.card.ability.effects;
import java.util.ArrayList;
import java.util.List;
import forge.Card;
import forge.card.ability.SpellAbilityEffect;
import forge.game.player.Player;
import forge.gui.GuiChoose;

View File

@@ -19,8 +19,8 @@ package forge.card.ability.effects;
import java.util.Arrays;
import java.util.List;
import forge.Card;
import forge.Card;
import forge.Singletons;
import forge.card.ability.AbilityFactory;
import forge.card.ability.AbilityUtils;

View File

@@ -2,6 +2,7 @@ package forge.card.ability.effects;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import forge.Card;

View File

@@ -1,12 +1,13 @@
package forge.card.ability.effects;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import forge.Card;
import forge.CardLists;
import forge.Singletons;
import forge.CardPredicates.Presets;
import forge.Singletons;
import forge.card.ability.AbilityUtils;
import forge.card.ability.SpellAbilityEffect;
import forge.card.cardfactory.CardFactoryUtil;

View File

@@ -17,7 +17,6 @@
*/
package forge.card.cardfactory;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -31,7 +30,6 @@ import forge.Color;
import forge.card.CardRules;
import forge.card.CardSplitType;
import forge.card.ICardFace;
import forge.card.ability.AbilityFactory;
import forge.card.cost.Cost;
import forge.card.mana.ManaCost;
import forge.card.replacement.ReplacementHandler;
@@ -46,7 +44,6 @@ import forge.game.player.Player;
import forge.gui.GuiUtils;
import forge.item.CardDb;
import forge.item.IPaperCard;
import forge.properties.ForgeProps;
import forge.properties.NewConstants;
/**
@@ -79,10 +76,10 @@ public class CardFactory {
*/
private final CardStorageReader reader;
public CardFactory(final File file) {
public CardFactory() {
GuiUtils.checkEDT("CardFactory$constructor", false);
reader = new CardStorageReader(ForgeProps.getFile(NewConstants.CARDSFOLDER), true);
reader = new CardStorageReader(NewConstants.CARD_DATA_DIR.defaultLoc, true);
try {
// this fills in our map of card names to Card instances.
final List<CardRules> listCardRules = reader.loadCards();

View File

@@ -7,7 +7,6 @@ import javax.swing.JOptionPane;
import forge.Card;
import forge.Command;
import forge.Singletons;
import forge.card.cost.Cost;
import forge.card.mana.ManaCost;

View File

@@ -19,6 +19,7 @@ package forge.card.cardfactory;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import com.google.common.base.Predicate;
@@ -27,7 +28,6 @@ import com.google.common.collect.Iterables;
import forge.Card;
import forge.CardCharacteristicName;
import forge.CardLists;
import forge.CardPredicates;
import forge.CardPredicates.Presets;

View File

@@ -22,7 +22,6 @@ import java.util.List;
import javax.swing.JOptionPane;
import forge.Card;
import forge.CardLists;
import forge.Command;
import forge.Singletons;

View File

@@ -42,8 +42,8 @@ import forge.card.cost.Cost;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.control.input.Input;
import forge.control.input.InputPayManaSimple;
import forge.control.input.InputPayManaExecuteCommands;
import forge.control.input.InputPayManaSimple;
import forge.game.GameState;
import forge.game.ai.ComputerUtil;
import forge.game.player.Player;

View File

@@ -31,7 +31,6 @@ import com.google.common.collect.Lists;
import forge.Card;
import forge.CardCharacteristicName;
import forge.CardLists;
import forge.CardPredicates;
import forge.CardPredicates.Presets;
@@ -46,9 +45,9 @@ import forge.card.ability.AbilityFactory;
import forge.card.ability.AbilityUtils;
import forge.card.ability.ApiType;
import forge.card.cost.Cost;
import forge.card.mana.ManaCost;
import forge.card.mana.ManaCostParser;
import forge.card.mana.ManaCostShard;
import forge.card.mana.ManaCost;
import forge.card.replacement.ReplacementEffect;
import forge.card.replacement.ReplacementHandler;
import forge.card.replacement.ReplacementLayer;
@@ -81,7 +80,6 @@ import forge.game.zone.ZoneType;
import forge.gui.GuiChoose;
import forge.gui.match.CMatchUI;
import forge.util.Aggregates;
import forge.view.ButtonUtil;
/**

View File

@@ -82,11 +82,13 @@ public class CardStorageReader {
* if true, attempts to load cards from a zip file, if one
* exists.
*/
public CardStorageReader(final File theCardsFolder, final boolean useZip) {
public CardStorageReader(String cardDataDir, final boolean useZip) {
// These read data for lightweight classes.
this.rulesReader = new CardRulesReader();
File theCardsFolder = new File(cardDataDir);
if (!theCardsFolder.exists()) {
throw new RuntimeException("CardReader : constructor error -- file not found -- filename is "
+ theCardsFolder.getAbsolutePath());

View File

@@ -24,9 +24,9 @@ import java.util.regex.Pattern;
import forge.Card;
import forge.CounterType;
import forge.Singletons;
import forge.card.mana.ManaCost;
import forge.card.mana.ManaCostBeingPaid;
import forge.card.mana.ManaCostParser;
import forge.card.mana.ManaCost;
import forge.card.spellability.SpellAbility;
import forge.game.zone.ZoneType;
import forge.util.TextUtil;

View File

@@ -23,10 +23,9 @@ import java.util.List;
import com.google.common.base.Predicate;
import forge.Card;
import forge.CardLists;
import forge.CardPredicates;
import forge.Singletons;
import forge.CardLists;
import forge.card.ability.AbilityUtils;
import forge.card.spellability.SpellAbility;
import forge.control.input.Input;

View File

@@ -22,7 +22,6 @@ import java.util.Iterator;
import java.util.List;
import forge.Card;
import forge.CardLists;
import forge.CardPredicates;
import forge.Singletons;

View File

@@ -22,7 +22,6 @@ import java.util.Iterator;
import java.util.List;
import forge.Card;
import forge.Singletons;
import forge.card.ability.AbilityUtils;
import forge.card.spellability.SpellAbility;

View File

@@ -21,7 +21,6 @@ import java.util.ArrayList;
import java.util.List;
import forge.Card;
import forge.CardUtil;
import forge.card.spellability.SpellAbility;

View File

@@ -20,7 +20,6 @@ package forge.card.cost;
import java.util.List;
import forge.Card;
import forge.CardLists;
import forge.CounterType;
import forge.Singletons;

View File

@@ -21,7 +21,6 @@ import java.util.ArrayList;
import java.util.List;
import forge.Card;
import forge.CardLists;
import forge.CounterType;
import forge.Singletons;

View File

@@ -23,7 +23,6 @@ import java.util.List;
import javax.swing.JOptionPane;
import forge.Card;
import forge.CardLists;
import forge.Singletons;
import forge.card.ability.AbilityUtils;

View File

@@ -21,9 +21,8 @@ import java.util.ArrayList;
import java.util.List;
import forge.Card;
import forge.Singletons;
import forge.CardLists;
import forge.Singletons;
import forge.card.ability.AbilityUtils;
import forge.card.spellability.SpellAbility;
import forge.control.input.Input;

View File

@@ -23,7 +23,6 @@ import java.util.List;
import javax.swing.JOptionPane;
import forge.Card;
import forge.CardLists;
import forge.Singletons;
import forge.card.ability.AbilityUtils;

View File

@@ -21,7 +21,6 @@ import java.util.ArrayList;
import java.util.List;
import forge.Card;
import forge.CardLists;
import forge.CardPredicates.Presets;
import forge.Singletons;

View File

@@ -20,7 +20,6 @@ package forge.card.cost;
import java.util.List;
import forge.Card;
import forge.CardLists;
import forge.CardPredicates.Presets;
import forge.Singletons;

View File

@@ -21,6 +21,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map.Entry;
import forge.Constant;
import forge.card.MagicColor;

View File

@@ -17,8 +17,8 @@
*/
package forge.card.mana;
import forge.card.MagicColor;
import forge.card.ColorSet;
import forge.card.MagicColor;
import forge.util.BinaryUtil;
/**

View File

@@ -21,7 +21,6 @@ import java.util.ArrayList;
import forge.Card;
import forge.Singletons;
import forge.card.cost.Cost;
import forge.card.cost.CostPayment;
import forge.card.staticability.StaticAbility;

View File

@@ -21,9 +21,8 @@ import java.util.ArrayList;
import java.util.List;
import forge.Card;
import forge.Singletons;
import forge.CardLists;
import forge.Singletons;
import forge.card.cardfactory.CardFactoryUtil;
import forge.card.cost.Cost;
import forge.card.cost.CostPayment;

View File

@@ -22,7 +22,6 @@ import java.util.List;
import java.util.Map;
import forge.Card;
import forge.CardLists;
import forge.Singletons;
import forge.card.ability.AbilityUtils;

View File

@@ -22,7 +22,6 @@ import java.util.List;
import java.util.Map;
import forge.Card;
import forge.CardLists;
import forge.Singletons;
import forge.card.ability.AbilityUtils;

View File

@@ -21,7 +21,6 @@ import java.util.HashMap;
import java.util.List;
import forge.Card;
import forge.game.player.Player;
/**

View File

@@ -25,7 +25,6 @@ import com.google.common.base.Supplier;
import com.google.common.collect.Iterables;
import forge.Card;
import forge.CardLists;
import forge.CardPredicates;
import forge.Command;

View File

@@ -24,9 +24,8 @@ import java.util.List;
import com.google.common.base.Predicate;
import forge.Card;
import forge.Singletons;
import forge.CardLists;
import forge.Singletons;
import forge.card.ability.AbilityUtils;
import forge.card.ability.ApiType;
import forge.control.input.Input;
@@ -34,7 +33,6 @@ import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.gui.GuiChoose;
import forge.gui.match.CMatchUI;
import forge.view.ButtonUtil;
/**

View File

@@ -23,10 +23,9 @@ import java.util.HashMap;
import java.util.List;
import forge.Card;
import forge.Singletons;
import forge.CardLists;
import forge.CardUtil;
import forge.Singletons;
import forge.StaticEffect;
import forge.StaticEffects;
import forge.card.CardType;

View File

@@ -23,7 +23,6 @@ import java.util.List;
import java.util.Map;
import forge.Card;
import forge.CardLists;
import forge.CardUtil;
import forge.Singletons;

View File

@@ -19,7 +19,6 @@ package forge.card.trigger;
import java.util.Map;
import forge.Card;
import forge.card.spellability.SpellAbility;

View File

@@ -19,7 +19,6 @@ package forge.card.trigger;
import java.util.Map;
import forge.Card;
import forge.card.spellability.SpellAbility;

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