diff --git a/.gitattributes b/.gitattributes index 1d1a5e5d17e..7767eea88f9 100644 --- a/.gitattributes +++ b/.gitattributes @@ -34,6 +34,27 @@ res/pics/BookIcon.png -text svneol=unset#image/png res/pics/BoxIcon.png -text svneol=unset#image/png res/pics/GoldIcon.png -text svneol=unset#image/png res/pics/HeartIcon.png -text svneol=unset#image/png +res/pics/icons/BookIcon.png -text svneol=unset#image/png +res/pics/icons/BottlesIconSmall.png -text svneol=unset#image/png +res/pics/icons/BoxIcon.png -text svneol=unset#image/png +res/pics/icons/BoxIconSmall.png -text svneol=unset#image/png +res/pics/icons/CoinIconSmall.jpg -text svneol=unset#image/jpeg +res/pics/icons/ElixirIcon.png -text svneol=unset#image/png +res/pics/icons/FoxIconSmall.png -text svneol=unset#image/png +res/pics/icons/GoldIcon.png -text svneol=unset#image/png +res/pics/icons/GoldIconLarge.png -text svneol=unset#image/png +res/pics/icons/GoldIconSmall.png -text svneol=unset#image/png +res/pics/icons/HeartIcon.png -text svneol=unset#image/png +res/pics/icons/LeafIconSmall.png -text svneol=unset#image/png +res/pics/icons/MapIcon.png -text svneol=unset#image/png +res/pics/icons/g_0_1_plant_wall_small.jpg -text svneol=unset#image/jpeg +res/pics/icons/g_0_2_plant_wall_small.jpg -text svneol=unset#image/jpeg +res/pics/icons/g_0_3_plant_wall_small.jpg -text svneol=unset#image/jpeg +res/pics/icons/g_1_1_wolf_pet_small.jpg -text svneol=unset#image/jpeg +res/pics/icons/g_1_2_wolf_pet_small.jpg -text svneol=unset#image/jpeg +res/pics/icons/g_2_2_wolf_pet_flanking_small.jpg -text svneol=unset#image/jpeg +res/pics/icons/g_2_2_wolf_pet_small.jpg -text svneol=unset#image/jpeg +res/pics/icons/notesIcon.png -text svneol=unset#image/png res/pics_link/card-pictures_a.txt -text svneol=native#text/plain res/pics_link/card-pictures_b.txt -text svneol=native#text/plain res/pics_link/card-pictures_c.txt -text svneol=native#text/plain @@ -64,12 +85,118 @@ res/pics_link/card-pictures_y.txt -text svneol=native#text/plain res/pics_link/card-pictures_z.txt -text svneol=native#text/plain res/quest/all-prices.txt -text svneol=native#text/plain res/quest/common.txt -text svneol=native#text/plain +res/quest/decks/Abraham[!!-~]Lincoln.dck -text +res/quest/decks/Albert[!!-~]Einstein[!!-~]2.dck -text +res/quest/decks/Albert[!!-~]Einstein[!!-~]3.dck -text +res/quest/decks/Bart[!!-~]Simpson[!!-~]1.dck -text +res/quest/decks/Bart[!!-~]Simpson[!!-~]2.dck -text +res/quest/decks/Bart[!!-~]Simpson[!!-~]3.dck -text +res/quest/decks/Batman.dck -text +res/quest/decks/Bela[!!-~]Lugosi.dck -text +res/quest/decks/Blackbeard.dck -text +res/quest/decks/Boba[!!-~]Fett.dck -text +res/quest/decks/Buffy[!!-~]1.dck -text +res/quest/decks/Buffy[!!-~]2.dck -text +res/quest/decks/Buffy[!!-~]3.dck -text +res/quest/decks/C3PO.dck -text +res/quest/decks/Catwoman[!!-~]1.dck -text +res/quest/decks/Catwoman[!!-~]2.dck -text +res/quest/decks/Comic[!!-~]Book[!!-~]Guy.dck -text +res/quest/decks/Crocodile[!!-~]Dundee[!!-~]1.dck -text +res/quest/decks/Crocodile[!!-~]Dundee[!!-~]2.dck -text +res/quest/decks/Crocodile[!!-~]Dundee[!!-~]3.dck -text +res/quest/decks/Cyclops.dck -text +res/quest/decks/Da[!!-~]Vinci[!!-~]1.dck -text +res/quest/decks/Da[!!-~]Vinci[!!-~]2.dck -text +res/quest/decks/Da[!!-~]Vinci[!!-~]3.dck -text +res/quest/decks/Darth[!!-~]Vador.dck -text +res/quest/decks/Data.dck -text +res/quest/decks/Doc[!!-~]Holiday[!!-~]1.dck -text +res/quest/decks/Doc[!!-~]Holiday[!!-~]2.dck -text +res/quest/decks/Doc[!!-~]Holiday[!!-~]3.dck -text +res/quest/decks/Dr[!!-~]No.dck -text +res/quest/decks/Fat[!!-~]Albert[!!-~]1.dck -text +res/quest/decks/Fat[!!-~]Albert[!!-~]2.dck -text +res/quest/decks/Fat[!!-~]Albert[!!-~]3.dck -text +res/quest/decks/Frodo[!!-~]1.dck -text +res/quest/decks/Frodo[!!-~]2.dck -text +res/quest/decks/Frodo[!!-~]3.dck -text +res/quest/decks/Genghis[!!-~]Khan[!!-~]1.dck -text +res/quest/decks/Genghis[!!-~]Khan[!!-~]2.dck -text +res/quest/decks/Genghis[!!-~]Khan[!!-~]3.dck -text +res/quest/decks/Gold[!!-~]Finger.dck -text +res/quest/decks/Green[!!-~]Lantern.dck -text +res/quest/decks/Han[!!-~]Solo.dck -text +res/quest/decks/Harry[!!-~]Potter.dck -text +res/quest/decks/Homer[!!-~]Simpson[!!-~]1.dck -text +res/quest/decks/Homer[!!-~]Simpson[!!-~]2.dck -text +res/quest/decks/Homer[!!-~]Simpson[!!-~]3.dck -text +res/quest/decks/Iceman.dck -text +res/quest/decks/Indiana[!!-~]Jones[!!-~]1.dck -text +res/quest/decks/Indiana[!!-~]Jones[!!-~]2.dck -text +res/quest/decks/Indiana[!!-~]Jones[!!-~]3.dck -text +res/quest/decks/Jabba[!!-~]the[!!-~]Hut.dck -text +res/quest/decks/James[!!-~]Bond[!!-~]1.dck -text +res/quest/decks/James[!!-~]Bond[!!-~]2.dck -text +res/quest/decks/James[!!-~]Bond[!!-~]3.dck -text +res/quest/decks/James[!!-~]T[!!-~]Kirk.dck -text +res/quest/decks/King[!!-~]Edward[!!-~]1.dck -text +res/quest/decks/King[!!-~]Edward[!!-~]2.dck -text +res/quest/decks/King[!!-~]Edward[!!-~]3.dck -text +res/quest/decks/Kojak[!!-~]1.dck -text +res/quest/decks/Kojak[!!-~]2.dck -text +res/quest/decks/Kojak[!!-~]3.dck -text +res/quest/decks/Lisa[!!-~]Simpson.dck -text +res/quest/decks/Luke[!!-~]Skywalker.dck -text +res/quest/decks/Magneto.dck -text +res/quest/decks/Marge[!!-~]Simpson.dck -text +res/quest/decks/Morpheus.dck -text +res/quest/decks/Napoleon.dck -text +res/quest/decks/Neo.dck -text +res/quest/decks/Newton.dck -text +res/quest/decks/Picard.dck -text +res/quest/decks/Pinky[!!-~]and[!!-~]the[!!-~]Brain.dck -text +res/quest/decks/Professor[!!-~]X.dck -text +res/quest/decks/R2-D2.dck -text +res/quest/decks/Rocky[!!-~]1.dck -text +res/quest/decks/Rocky[!!-~]2.dck -text +res/quest/decks/Rocky[!!-~]3.dck -text +res/quest/decks/Rogue.dck -text +res/quest/decks/Scooby[!!-~]Doo.dck -text +res/quest/decks/Scotty.dck -text +res/quest/decks/Seabiscuit[!!-~]1.dck -text +res/quest/decks/Seabiscuit[!!-~]2.dck -text +res/quest/decks/Seabiscuit[!!-~]3.dck -text +res/quest/decks/Sherlock[!!-~]Holmes[!!-~]1.dck -text +res/quest/decks/Sherlock[!!-~]Holmes[!!-~]2.dck -text +res/quest/decks/Sherlock[!!-~]Holmes[!!-~]3.dck -text +res/quest/decks/Silver[!!-~]Surfer.dck -text +res/quest/decks/Spiderman.dck -text +res/quest/decks/Spock.dck -text +res/quest/decks/Storm[!!-~]1.dck -text +res/quest/decks/Storm[!!-~]2.dck -text +res/quest/decks/Storm[!!-~]3.dck -text +res/quest/decks/Superman[!!-~]1.dck -text +res/quest/decks/Superman[!!-~]2.dck -text +res/quest/decks/Tarzan[!!-~]1.dck -text +res/quest/decks/Tarzan[!!-~]2.dck -text +res/quest/decks/Terminator.dck -text +res/quest/decks/Uncle[!!-~]Owen.dck -text +res/quest/decks/Wolverine.dck -text +res/quest/decks/Wyatt[!!-~]Earp[!!-~]1.dck -text +res/quest/decks/Wyatt[!!-~]Earp[!!-~]2.dck -text +res/quest/decks/Wyatt[!!-~]Earp[!!-~]3.dck -text +res/quest/decks/quest1.dck -text +res/quest/decks/quest2.dck -text +res/quest/decks/quest3.dck -text +res/quest/decks/quest8.dck -text res/quest/easy.txt -text svneol=native#text/plain res/quest/hard.txt -text svneol=native#text/plain res/quest/medium.txt -text svneol=native#text/plain res/quest/price.txt -text svneol=native#text/plain res/quest/quest.properties svneol=native#text/plain res/quest/questData -text svneol=unset#unset +res/quest/quests.txt -text svneol=native#text/plain res/quest/rare.txt -text svneol=native#text/plain res/quest/uncommon.txt -text svneol=native#text/plain res/rare.txt -text svneol=native#text/plain @@ -172,14 +299,20 @@ src/forge/Gui_DeckEditorNew.java -text svneol=native#text/plain src/forge/Gui_DeckEditor_Menu.java svneol=native#text/plain src/forge/Gui_DownloadPictures.java svneol=native#text/plain src/forge/Gui_DownloadPictures_LQ.java -text svneol=native#text/plain +src/forge/Gui_ElixirShop.java -text svneol=native#text/plain src/forge/Gui_MultipleBlockers.java svneol=native#text/plain src/forge/Gui_NewGame.java svneol=native#text/plain +src/forge/Gui_PetShop.java -text svneol=native#text/plain +src/forge/Gui_PlantShop.java -text svneol=native#text/plain src/forge/Gui_Quest.java svneol=native#text/plain src/forge/Gui_QuestOptions.java svneol=native#text/plain +src/forge/Gui_Quest_Assignments.java -text svneol=native#text/plain src/forge/Gui_Quest_DeckEditor.java -text svneol=native#text/plain src/forge/Gui_Quest_DeckEditor_Menu.java -text svneol=native#text/plain src/forge/Gui_SealedDeck.java svneol=native#text/plain src/forge/Gui_SetEditor.java svneol=native#text/plain +src/forge/Gui_Shops.java -text svneol=native#text/plain +src/forge/Gui_Treasury.java -text svneol=native#text/plain src/forge/Gui_Welcome.java svneol=native#text/plain src/forge/Gui_WinLose.java svneol=native#text/plain src/forge/IO.java svneol=native#text/plain @@ -245,10 +378,13 @@ src/forge/PrintCardPictures.java svneol=native#text/plain src/forge/QuestData.java svneol=native#text/plain src/forge/QuestData_BoosterPack.java svneol=native#text/plain src/forge/QuestData_State.java svneol=native#text/plain +src/forge/QuestUtil.java -text svneol=native#text/plain +src/forge/Quest_Assignment.java -text svneol=native#text/plain src/forge/ReadBoosterPack.java svneol=native#text/plain src/forge/ReadCard.java svneol=native#text/plain src/forge/ReadDraftBoosterPack.java -text svneol=native#text/plain src/forge/ReadPriceList.java -text svneol=native#text/plain +src/forge/ReadQuest_Assignment.java -text svneol=native#text/plain src/forge/Run.java svneol=native#text/plain src/forge/RunTest.java svneol=native#text/plain src/forge/SimpleCombat.java svneol=native#text/plain diff --git a/res/main.properties b/res/main.properties index 19817c7b879..ee4eaa700af 100644 --- a/res/main.properties +++ b/res/main.properties @@ -55,4 +55,5 @@ lang--transparent-properties=lang/lang.properties image/base--file=pics image/token--file=pics/tokens +image/icon--file=pics/icons sound/base--file=sound \ No newline at end of file diff --git a/res/pics/icons/BookIcon.png b/res/pics/icons/BookIcon.png new file mode 100644 index 00000000000..30d49b3a1e9 Binary files /dev/null and b/res/pics/icons/BookIcon.png differ diff --git a/res/pics/icons/BottlesIconSmall.png b/res/pics/icons/BottlesIconSmall.png new file mode 100644 index 00000000000..ccf947ad704 Binary files /dev/null and b/res/pics/icons/BottlesIconSmall.png differ diff --git a/res/pics/icons/BoxIcon.png b/res/pics/icons/BoxIcon.png new file mode 100644 index 00000000000..46066a8a887 Binary files /dev/null and b/res/pics/icons/BoxIcon.png differ diff --git a/res/pics/icons/BoxIconSmall.png b/res/pics/icons/BoxIconSmall.png new file mode 100644 index 00000000000..a847060ecda Binary files /dev/null and b/res/pics/icons/BoxIconSmall.png differ diff --git a/res/pics/icons/CoinIconSmall.jpg b/res/pics/icons/CoinIconSmall.jpg new file mode 100644 index 00000000000..413208e33aa Binary files /dev/null and b/res/pics/icons/CoinIconSmall.jpg differ diff --git a/res/pics/icons/ElixirIcon.png b/res/pics/icons/ElixirIcon.png new file mode 100644 index 00000000000..c0548de793d Binary files /dev/null and b/res/pics/icons/ElixirIcon.png differ diff --git a/res/pics/icons/FoxIconSmall.png b/res/pics/icons/FoxIconSmall.png new file mode 100644 index 00000000000..ec27257e321 Binary files /dev/null and b/res/pics/icons/FoxIconSmall.png differ diff --git a/res/pics/icons/GoldIcon.png b/res/pics/icons/GoldIcon.png new file mode 100644 index 00000000000..14464757ced Binary files /dev/null and b/res/pics/icons/GoldIcon.png differ diff --git a/res/pics/icons/GoldIconLarge.png b/res/pics/icons/GoldIconLarge.png new file mode 100644 index 00000000000..69303512054 Binary files /dev/null and b/res/pics/icons/GoldIconLarge.png differ diff --git a/res/pics/icons/GoldIconSmall.png b/res/pics/icons/GoldIconSmall.png new file mode 100644 index 00000000000..9faf7e04c9b Binary files /dev/null and b/res/pics/icons/GoldIconSmall.png differ diff --git a/res/pics/icons/HeartIcon.png b/res/pics/icons/HeartIcon.png new file mode 100644 index 00000000000..8337955e043 Binary files /dev/null and b/res/pics/icons/HeartIcon.png differ diff --git a/res/pics/icons/LeafIconSmall.png b/res/pics/icons/LeafIconSmall.png new file mode 100644 index 00000000000..513c4d6dcad Binary files /dev/null and b/res/pics/icons/LeafIconSmall.png differ diff --git a/res/pics/icons/MapIcon.png b/res/pics/icons/MapIcon.png new file mode 100644 index 00000000000..c882a8822c1 Binary files /dev/null and b/res/pics/icons/MapIcon.png differ diff --git a/res/pics/icons/g_0_1_plant_wall_small.jpg b/res/pics/icons/g_0_1_plant_wall_small.jpg new file mode 100644 index 00000000000..77227fe6412 Binary files /dev/null and b/res/pics/icons/g_0_1_plant_wall_small.jpg differ diff --git a/res/pics/icons/g_0_2_plant_wall_small.jpg b/res/pics/icons/g_0_2_plant_wall_small.jpg new file mode 100644 index 00000000000..97afd25052e Binary files /dev/null and b/res/pics/icons/g_0_2_plant_wall_small.jpg differ diff --git a/res/pics/icons/g_0_3_plant_wall_small.jpg b/res/pics/icons/g_0_3_plant_wall_small.jpg new file mode 100644 index 00000000000..f073867d7df Binary files /dev/null and b/res/pics/icons/g_0_3_plant_wall_small.jpg differ diff --git a/res/pics/icons/g_1_1_wolf_pet_small.jpg b/res/pics/icons/g_1_1_wolf_pet_small.jpg new file mode 100644 index 00000000000..1dd1bfdab49 Binary files /dev/null and b/res/pics/icons/g_1_1_wolf_pet_small.jpg differ diff --git a/res/pics/icons/g_1_2_wolf_pet_small.jpg b/res/pics/icons/g_1_2_wolf_pet_small.jpg new file mode 100644 index 00000000000..8f9692e0c42 Binary files /dev/null and b/res/pics/icons/g_1_2_wolf_pet_small.jpg differ diff --git a/res/pics/icons/g_2_2_wolf_pet_flanking_small.jpg b/res/pics/icons/g_2_2_wolf_pet_flanking_small.jpg new file mode 100644 index 00000000000..19604d5b003 Binary files /dev/null and b/res/pics/icons/g_2_2_wolf_pet_flanking_small.jpg differ diff --git a/res/pics/icons/g_2_2_wolf_pet_small.jpg b/res/pics/icons/g_2_2_wolf_pet_small.jpg new file mode 100644 index 00000000000..77234166a35 Binary files /dev/null and b/res/pics/icons/g_2_2_wolf_pet_small.jpg differ diff --git a/res/pics/icons/notesIcon.png b/res/pics/icons/notesIcon.png new file mode 100644 index 00000000000..fdf7d1a225d Binary files /dev/null and b/res/pics/icons/notesIcon.png differ diff --git a/res/pics_link/card-pictures_n.txt b/res/pics_link/card-pictures_n.txt index 3f7c90b9578..0ca305cd4e1 100644 --- a/res/pics_link/card-pictures_n.txt +++ b/res/pics_link/card-pictures_n.txt @@ -36,7 +36,7 @@ natural_affinity.jpg http://[server]/9E/Natural%20Affinity.full.jpg natural_balance.jpg http://[server]/MI/Natural%20Balance.full.jpg natural_emergence.jpg http://[server]/PS/Natural%20Emergence.full.jpg natural_order.jpg http://[server]/VI/Natural%20Order.full.jpg -natural_selection.jpg http://[server]/U/Natural%20Selection.full.jpg +natural_selection.jpg http://[server]/B/Natural%20Selection.full.jpg natural_spring.jpg http://[server]/10E/Natural%20Spring.full.jpg naturalize.jpg http://[server]/M10/Naturalize.full.jpg natures_blessing.jpg http://[server]/AL/Nature's%20Blessing.full.jpg diff --git a/res/pics_link/card-pictures_p.txt b/res/pics_link/card-pictures_p.txt index ece1556b638..1318c06cd66 100644 --- a/res/pics_link/card-pictures_p.txt +++ b/res/pics_link/card-pictures_p.txt @@ -223,7 +223,7 @@ phyrexian_tribute.jpg http://[server]/MI/Phyrexian%20Tribute.full.jpg phyrexian_tyranny.jpg http://[server]/PS/Phyrexian%20Tyranny.full.jpg phyrexian_vault.jpg http://[server]/10E/Phyrexian%20Vault.full.jpg phyrexian_walker.jpg http://[server]/VI/Phyrexian%20Walker.full.jpg -phyrexian_war_beast.jpg http://[server]/AL/Phyrexian%20War%20Beast1.full.jpg +phyrexian_war_beast.jpg http://[server]/AL/Phyrexian%20War%20Beast.full.jpg phytohydra.jpg http://[server]/RAV/Phytohydra.full.jpg pianna_nomad_captain.jpg http://[server]/OD/Pianna,%20Nomad%20Captain.full.jpg piety.jpg http://[server]/4E/Piety.full.jpg diff --git a/res/quest/decks/Abraham Lincoln.dck b/res/quest/decks/Abraham Lincoln.dck new file mode 100644 index 00000000000..5744b1ce693 --- /dev/null +++ b/res/quest/decks/Abraham Lincoln.dck @@ -0,0 +1,33 @@ +Abraham Lincoln +[general] +constructed +[main] +1 Radiant, Archangel +4 Plateau +2 Disenchant +2 Deft Duelist +1 Indomitable Ancients +2 Sky Spirit +3 Festival of Trokin +3 Flamebreak +2 Boros Recruit +3 Island +1 Ancestral Recall +1 Mox Pearl +1 Ryusei, the Falling Star +4 Tundra +2 Skyknight Legionnaire +1 Mox Sapphire +2 Lightning Angel +3 Plains +3 Concentrate +2 Silver Knight +2 Swords to Plowshares +1 Mox Ruby +2 Coral Eel +4 Volcanic Island +2 Serra Avenger +2 Cerodon Yearling +1 Archon of Justice +3 Mountain +[sideboard] diff --git a/res/quest/decks/Albert Einstein 2.dck b/res/quest/decks/Albert Einstein 2.dck new file mode 100644 index 00000000000..77ca60018db --- /dev/null +++ b/res/quest/decks/Albert Einstein 2.dck @@ -0,0 +1,28 @@ +Albert Einstein 2 +[general] +constructed +[main] +1 Isamaru, Hound of Konda +2 Ancient Spider +3 Rib Cage Spider +1 Tromp the Domains +2 Charging Troll +9 Plains +2 Temple Garden +2 Retribution of the Meek +2 Savannah Lions +1 Garruk Wildspeaker +2 Watchwolf +2 Harmonize +9 Forest +3 Voice of Duty +2 Needle Storm +2 Steward of Valeron +2 Weathered Wayfarer +1 Regrowth +1 Mirri, Cat Warrior +4 Savannah +2 Warrior's Charge +2 Wilt-Leaf Cavaliers +3 Crib Swap +[sideboard] diff --git a/res/quest/decks/Albert Einstein 3.dck b/res/quest/decks/Albert Einstein 3.dck new file mode 100644 index 00000000000..af323b801da --- /dev/null +++ b/res/quest/decks/Albert Einstein 3.dck @@ -0,0 +1,26 @@ +Albert Einstein 3 +[general] +constructed +[main] +1 Isamaru, Hound of Konda +4 Ancient Spider +3 Penumbra Spider +1 Mox Emerald +2 Festival of Trokin +3 Noble Panther +2 Temple Garden +7 Plains +3 Retribution of the Meek +2 Savannah Lions +3 Watchwolf +2 Garruk Wildspeaker +3 Harmonize +8 Forest +3 Swords to Plowshares +1 Mox Pearl +3 Needle Storm +2 Steward of Valeron +2 Weathered Wayfarer +1 Mirri, Cat Warrior +4 Savannah +[sideboard] diff --git a/res/quest/decks/Bart Simpson 1.dck b/res/quest/decks/Bart Simpson 1.dck new file mode 100644 index 00000000000..7c5abb0336b --- /dev/null +++ b/res/quest/decks/Bart Simpson 1.dck @@ -0,0 +1,29 @@ +Bart Simpson 1 +[general] +constructed +[main] +4 Underground Sea +1 Gnarled Mass +3 Scavenged Weaponry +4 Tropical Island +2 Wanderbrine Rootcutters +3 Wall of Air +4 Swamp +2 Minister of Impediments +1 Grappler Spider +4 Island +1 Ancestral Recall +4 Forest +3 Flight +1 Moonglove Winnower +2 Rathi Trapper +1 Yavimaya Enchantress +4 Paralyzing Grasp +4 Bayou +4 Wall of Blossoms +1 Time Walk +1 Ambassador Oak +1 Simic Ragworm +1 Abomination +4 Glimmerdust Nap +[sideboard] diff --git a/res/quest/decks/Bart Simpson 2.dck b/res/quest/decks/Bart Simpson 2.dck new file mode 100644 index 00000000000..7e018324244 --- /dev/null +++ b/res/quest/decks/Bart Simpson 2.dck @@ -0,0 +1,31 @@ +Bart Simpson 2 +[general] +constructed +[main] +1 Gnarled Mass +4 Tropical Island +1 Wall of Air +4 Island +1 Ancestral Recall +2 Flight +1 Trokin High Guard +1 Trained Armodon +4 Tundra +1 Serra Angel +1 Court Archers +4 Savannah +1 Skyshroud Troll +2 Fruition +3 Minister of Impediments +4 Plains +4 Forest +1 Yavimaya Enchantress +4 Paralyzing Grasp +1 Moorish Cavalry +4 Wall of Blossoms +1 Time Walk +2 Squall Drifter +1 White Knight +3 Dehydration +4 Glimmerdust Nap +[sideboard] diff --git a/res/quest/decks/Bart Simpson 3.dck b/res/quest/decks/Bart Simpson 3.dck new file mode 100644 index 00000000000..89e4789b669 --- /dev/null +++ b/res/quest/decks/Bart Simpson 3.dck @@ -0,0 +1,33 @@ +Bart Simpson 3 +[general] +constructed +[main] +4 Tropical Island +1 Mox Emerald +1 Wall of Air +1 Frostweb Spider +3 Island +1 Ancestral Recall +1 Battle Hurda +1 Mox Pearl +1 Hillcomber Giant +4 Tundra +1 Serra Angel +4 Savannah +1 Daggerback Basilisk +1 Skyshroud Troll +2 Fruition +1 Mox Sapphire +3 Minister of Impediments +3 Plains +3 Entangling Vines +3 Forest +1 Yavimaya Enchantress +4 Paralyzing Grasp +1 Whipcorder +1 Time Walk +4 Wall of Blossoms +2 Squall Drifter +3 Dehydration +4 Glimmerdust Nap +[sideboard] diff --git a/res/quest/decks/Batman.dck b/res/quest/decks/Batman.dck new file mode 100644 index 00000000000..4e7ba44136c --- /dev/null +++ b/res/quest/decks/Batman.dck @@ -0,0 +1,24 @@ +Batman +[general] +constructed +[main] +3 Metathran Soldier +3 Phantom Warrior +4 Guardians of Akrasa +2 Armageddon +1 Mox Sapphire +7 Plains +2 Arcanis the Omnipotent +3 Covert Operative +4 Darksteel Ingot +4 Outrider of Jhess +9 Island +1 Ancestral Recall +3 Wrath of God +1 Tidal Kraken +1 Mox Pearl +4 Aven Squire +2 Battlegrace Angel +4 Tundra +2 Plasma Elemental +[sideboard] diff --git a/res/quest/decks/Bela Lugosi.dck b/res/quest/decks/Bela Lugosi.dck new file mode 100644 index 00000000000..cb6a76caf4d --- /dev/null +++ b/res/quest/decks/Bela Lugosi.dck @@ -0,0 +1,15 @@ +Bela Lugosi +[general] +constructed +[main] +4 Anowon, the Ruin Sage +4 Malakir Bloodwitch +4 Quag Vampires +4 Child of Night +26 Swamp +4 Vampire Nighthawk +4 Bloodghast +4 Ruthless Cullblade +4 Guul Draz Vampire +2 Pulse Tracker +[sideboard] diff --git a/res/quest/decks/Blackbeard.dck b/res/quest/decks/Blackbeard.dck new file mode 100644 index 00000000000..7deff1a57c5 --- /dev/null +++ b/res/quest/decks/Blackbeard.dck @@ -0,0 +1,19 @@ +Blackbeard +[general] +constructed +[main] +4 Aven Riftwatcher +3 Armageddon +15 Plains +4 Glorious Anthem +4 Preeminent Captain +4 Veteran Armorer +3 Wrath of God +4 Akrasan Squire +4 Swords to Plowshares +1 Mox Pearl +2 Ranger of Eos +4 Tithe +4 Marble Diamond +4 Soltari Foot Soldier +[sideboard] diff --git a/res/quest/decks/Boba Fett.dck b/res/quest/decks/Boba Fett.dck new file mode 100644 index 00000000000..e09d43764c7 --- /dev/null +++ b/res/quest/decks/Boba Fett.dck @@ -0,0 +1,27 @@ +Boba Fett +[general] +constructed +[main] +2 Sacred Foundry +2 Chandra Nalaar +4 Plateau +2 Invincible Hymn +4 Lightning Helix +1 Henge Guardian +8 Plains +3 Flamebreak +4 Tarox Bladewing +1 Brimstone Dragon +2 Dragon Roost +1 Wheel of Fortune +3 Crucible of Fire +1 Mox Ruby +1 Mox Pearl +1 Ryusei, the Falling Star +4 Volcanic Dragon +4 Feudkiller's Verdict +1 Rorix Bladewing +1 Beacon of Destruction +2 Hunted Dragon +8 Mountain +[sideboard] diff --git a/res/quest/decks/Buffy 1.dck b/res/quest/decks/Buffy 1.dck new file mode 100644 index 00000000000..2469429a76f --- /dev/null +++ b/res/quest/decks/Buffy 1.dck @@ -0,0 +1,32 @@ +Buffy 1 +[general] +constructed +[main] +3 Aggressive Urge +4 Taiga +1 Jabari's Banner +2 Blightspeaker +3 Boggart Ram-Gang +2 Threaten +1 Sorceress Queen +2 Sengir Vampire +1 Flying Carpet +4 Bayou +1 Regrowth +2 Bog Imp +1 Moss Diamond +1 Arrogant Vampire +3 Swamp +3 Sengir Bats +3 Wildsize +3 Dakmor Bat +3 Forest +4 Badlands +2 Stone-Throwing Devils +2 Animate Dead +1 Fire Diamond +1 Charcoal Diamond +2 Raise Dead +3 Smoldering Butcher +2 Mountain +[sideboard] diff --git a/res/quest/decks/Buffy 2.dck b/res/quest/decks/Buffy 2.dck new file mode 100644 index 00000000000..1566d9d05ae --- /dev/null +++ b/res/quest/decks/Buffy 2.dck @@ -0,0 +1,31 @@ +Buffy 2 +[general] +constructed +[main] +4 Taiga +3 Harmonize +3 Boggart Ram-Gang +2 Threaten +1 Sorceress Queen +2 Hypnotic Specter +1 Beacon of Unrest +2 Sengir Vampire +3 Cinderbones +4 Bayou +1 Demonic Tutor +1 Foxfire Oak +1 Regrowth +4 Ostracize +1 Mirri the Cursed +1 Moss Diamond +3 Swamp +4 Distress +3 Sickle Ripper +3 Dakmor Bat +3 Forest +4 Badlands +1 Fire Diamond +1 Charcoal Diamond +2 Scuzzback Scrapper +2 Mountain +[sideboard] diff --git a/res/quest/decks/Buffy 3.dck b/res/quest/decks/Buffy 3.dck new file mode 100644 index 00000000000..fdaec5e70bb --- /dev/null +++ b/res/quest/decks/Buffy 3.dck @@ -0,0 +1,33 @@ +Buffy 3 +[general] +constructed +[main] +4 Underground Sea +2 Island +2 Threaten +1 Ancestral Recall +1 Sorceress Queen +1 Beacon of Unrest +2 Tendrils of Corruption +3 Sengir Vampire +3 Cinderbones +1 Bad Moon +1 Mox Jet +1 Mirri the Cursed +1 Garza Zol, Plague Queen +1 Mox Sapphire +2 Swamp +3 Sengir Bats +2 Concentrate +3 Sickle Ripper +2 Douse in Gloom +3 Darksteel Ingot +3 Dakmor Bat +4 Badlands +2 Nocturnal Raid +1 Mox Ruby +2 Animate Dead +4 Volcanic Island +3 Smoldering Butcher +2 Mountain +[sideboard] diff --git a/res/quest/decks/C3PO.dck b/res/quest/decks/C3PO.dck new file mode 100644 index 00000000000..6fee10b4a35 --- /dev/null +++ b/res/quest/decks/C3PO.dck @@ -0,0 +1,24 @@ +C3PO +[general] +constructed +[main] +4 Mogg Fanatic +1 Wort, Boggart Auntie +4 Mad Auntie +4 Goblin Deathraiders +6 Swamp +4 Prickly Boggart +1 Kiki-Jiki, Mirror Breaker +4 Goblin Ringleader +3 Path of Anger's Flame +1 Squee, Goblin Nabob +4 Badlands +4 Lightning Bolt +1 Mox Ruby +1 Sensation Gorger +4 Mudbutton Torchrunner +1 Demonic Tutor +1 Imperial Recruiter +1 Mox Jet +11 Mountain +[sideboard] diff --git a/res/quest/decks/Catwoman 1.dck b/res/quest/decks/Catwoman 1.dck new file mode 100644 index 00000000000..bc21874ae04 --- /dev/null +++ b/res/quest/decks/Catwoman 1.dck @@ -0,0 +1,24 @@ +Catwoman 1 +[general] +constructed +[main] +4 Elite Cat Warrior +4 Kjeldoran War Cry +3 Jungle Lion +4 Temple Garden +6 Plains +3 Commune with Nature +3 Savannah Lions +2 Unyaro Bee Sting +4 Penumbra Bobcat +6 Forest +4 Horned Cheetah +2 Marble Diamond +4 King Cheetah +1 Regrowth +1 Jedit Ojanen of Efrava +1 Mirri, Cat Warrior +2 Sunlance +4 Savannah +2 Moss Diamond +[sideboard] diff --git a/res/quest/decks/Catwoman 2.dck b/res/quest/decks/Catwoman 2.dck new file mode 100644 index 00000000000..03286e14013 --- /dev/null +++ b/res/quest/decks/Catwoman 2.dck @@ -0,0 +1,28 @@ +Catwoman 2 +[general] +constructed +[main] +4 Plateau +4 Taiga +2 Elite Cat Warrior +4 Kjeldoran War Cry +4 Lightning Helix +3 Plains +3 Savannah Lions +3 Commune with Nature +4 Penumbra Bobcat +3 Forest +2 Canyon Wildcat +4 Horned Cheetah +2 Obelisk of Naya +1 Marble Diamond +2 King Cheetah +1 Regrowth +1 Jedit Ojanen of Efrava +1 Mirri, Cat Warrior +2 Raging Cougar +4 Savannah +1 Moss Diamond +3 Wild Nacatl +2 Mountain +[sideboard] diff --git a/res/quest/decks/Comic Book Guy.dck b/res/quest/decks/Comic Book Guy.dck new file mode 100644 index 00000000000..daba8eaaebc --- /dev/null +++ b/res/quest/decks/Comic Book Guy.dck @@ -0,0 +1,29 @@ +Comic Book Guy +[general] +constructed +[main] +3 Sacred Foundry +2 Chandra Nalaar +4 Plateau +2 Invincible Hymn +3 Lightning Helix +7 Plains +1 Fervor +3 Flamebreak +4 Tarox Bladewing +1 Brimstone Dragon +4 Enlightened Tutor +1 Moat +1 Crucible of Fire +3 Lightning Bolt +1 Mox Ruby +1 Mox Pearl +1 Serra's Blessing +1 Ryusei, the Falling Star +3 Volcanic Dragon +2 Feudkiller's Verdict +1 Rorix Bladewing +1 Beacon of Destruction +2 Hunted Dragon +8 Mountain +[sideboard] diff --git a/res/quest/decks/Crocodile Dundee 1.dck b/res/quest/decks/Crocodile Dundee 1.dck new file mode 100644 index 00000000000..3079a47071a --- /dev/null +++ b/res/quest/decks/Crocodile Dundee 1.dck @@ -0,0 +1,31 @@ +Crocodile Dundee 1 +[general] +constructed +[main] +4 Plateau +2 Sky Spirit +1 Rakka Mar +2 Staunch Defenders +3 Riptide Crab +4 Reviving Dose +2 Vedalken Outlander +2 Boros Recruit +4 Island +1 Calciderm +1 Ancestral Recall +1 Zodiac Goat +1 Enlightened Tutor +4 Tundra +3 Virtuous Charge +2 Viashino Fangtail +3 Psionic Blast +2 Skyknight Legionnaire +1 Lightning Angel +4 Plains +1 River Merfolk +1 Mobilization +2 Serendib Efreet +4 Volcanic Island +1 Tobias Andrion +4 Mountain +[sideboard] diff --git a/res/quest/decks/Crocodile Dundee 2.dck b/res/quest/decks/Crocodile Dundee 2.dck new file mode 100644 index 00000000000..cb2c769c92c --- /dev/null +++ b/res/quest/decks/Crocodile Dundee 2.dck @@ -0,0 +1,32 @@ +Crocodile Dundee 2 +[general] +constructed +[main] +1 Bull Cerodon +4 Plateau +1 Hoofprints of the Stag +2 Sky Spirit +2 Riptide Crab +3 Reviving Dose +3 Vedalken Outlander +2 Boros Recruit +4 Island +1 Ancestral Recall +1 Zodiac Goat +1 Enlightened Tutor +1 Canyon Wildcat +1 Hillcomber Giant +4 Tundra +2 Skyknight Legionnaire +3 Crib Swap +3 Tor Giant +2 Lightning Angel +4 Plains +1 Concentrate +2 Serendib Efreet +1 Kamahl, Pit Fighter +4 Volcanic Island +1 Tobias Andrion +2 Valorous Charge +4 Mountain +[sideboard] diff --git a/res/quest/decks/Crocodile Dundee 3.dck b/res/quest/decks/Crocodile Dundee 3.dck new file mode 100644 index 00000000000..206273a001b --- /dev/null +++ b/res/quest/decks/Crocodile Dundee 3.dck @@ -0,0 +1,34 @@ +Crocodile Dundee 3 +[general] +constructed +[main] +1 Bull Cerodon +4 Plateau +2 Hoofprints of the Stag +2 Sky Spirit +2 Riptide Crab +3 Vedalken Outlander +2 Boros Recruit +3 Island +1 Ancestral Recall +1 Zodiac Goat +1 Enlightened Tutor +1 Goblin Spelunkers +1 Mox Pearl +4 Tundra +2 Virtuous Charge +1 Mountain Yeti +2 Skyknight Legionnaire +1 Mox Sapphire +3 Oblivion Ring +3 Lightning Angel +3 Plains +3 Concentrate +1 River Merfolk +3 Hill Giant +1 Kamahl, Pit Fighter +1 Mox Ruby +4 Volcanic Island +1 Tobias Andrion +3 Mountain +[sideboard] diff --git a/res/quest/decks/Cyclops.dck b/res/quest/decks/Cyclops.dck new file mode 100644 index 00000000000..100181115ff --- /dev/null +++ b/res/quest/decks/Cyclops.dck @@ -0,0 +1,44 @@ +Cyclops +[general] +constructed +[main] +3 Underground Sea +3 Plateau +1 Vampiric Tutor +3 Taiga +1 Mox Emerald +1 Nevinyrral's Disk +1 Muscle Sliver +1 Horned Sliver +1 Ancestral Recall +1 Blade Sliver +1 Mox Pearl +1 Watcher Sliver +3 Venser's Sliver +3 Tundra +3 Bayou +1 Demonic Tutor +1 Regrowth +1 Breath of Life +1 Naturalize +1 Mox Jet +3 Savannah +1 Fury Sliver +1 Heart Sliver +3 Metallic Sliver +1 Mox Sapphire +3 Concentrate +1 Synchronous Sliver +2 Winged Sliver +1 Plated Sliver +1 Might Sliver +1 Darksteel Ingot +1 Battering Sliver +2 Gemhide Sliver +1 Bonesplitter Sliver +1 Sinew Sliver +1 Mox Ruby +1 Essence Sliver +2 Raise Dead +1 Reflex Sliver +[sideboard] diff --git a/res/quest/decks/Da Vinci 1.dck b/res/quest/decks/Da Vinci 1.dck new file mode 100644 index 00000000000..878016b92a3 --- /dev/null +++ b/res/quest/decks/Da Vinci 1.dck @@ -0,0 +1,26 @@ +Da Vinci 1 +[general] +constructed +[main] +2 Branchsnap Lorian +3 Birds of Paradise +2 Hystrodon +4 Swamp +3 Sootfeather Flock +2 Plains +3 Spined Basher +3 Hedge Troll +3 Harmonize +4 Scrubland +3 Forest +2 Duress +4 Bayou +1 Mire Boa +2 Spitting Gourna +4 Ostracize +1 Plague Beetle +2 Daru Lancer +4 Savannah +4 Thoughtseize +4 Gerrard's Verdict +[sideboard] diff --git a/res/quest/decks/Da Vinci 2.dck b/res/quest/decks/Da Vinci 2.dck new file mode 100644 index 00000000000..e80cf57d788 --- /dev/null +++ b/res/quest/decks/Da Vinci 2.dck @@ -0,0 +1,31 @@ +Da Vinci 2 +[general] +constructed +[main] +2 Festival of Trokin +3 Spined Basher +3 Hedge Troll +2 Harmonize +1 Enlightened Tutor +4 Scrubland +3 Tendrils of Corruption +4 Bayou +1 Mtenda Herder +2 Spitting Gourna +1 Exploration +2 Daru Lancer +4 Savannah +2 Branchsnap Lorian +2 Hystrodon +3 Birds of Paradise +2 Phyrexian Arena +1 Marsh Boa +3 Swamp +1 Stalker Hag +3 Plains +2 Sootfeather Flock +2 Exalted Angel +3 Douse in Gloom +3 Forest +1 Mire Boa +[sideboard] diff --git a/res/quest/decks/Da Vinci 3.dck b/res/quest/decks/Da Vinci 3.dck new file mode 100644 index 00000000000..6d34dfd996a --- /dev/null +++ b/res/quest/decks/Da Vinci 3.dck @@ -0,0 +1,35 @@ +Da Vinci 3 +[general] +constructed +[main] +1 Angel of Despair +2 Archon of Justice +3 Birds of Paradise +1 Golden Bear +3 Hedge Troll +2 Hystrodon +1 Mire Boa +1 Muck Rats +1 Plague Beetle +1 Pygmy Allosaurus +3 Sootfeather Flock +3 Spined Basher +1 Stalker Hag +1 Trained Armodon +1 Demonic Tutor +3 Disenchant +3 Harmonize +1 Mox Emerald +1 Mox Jet +1 Mox Pearl +2 Nevinyrral's Disk +1 Regrowth +1 Resurrection +3 Vindicate +4 Bayou +3 Forest +2 Plains +4 Savannah +4 Scrubland +2 Swamp +[sideboard] diff --git a/res/quest/decks/Darth Vador.dck b/res/quest/decks/Darth Vador.dck new file mode 100644 index 00000000000..9658cd9b4a4 --- /dev/null +++ b/res/quest/decks/Darth Vador.dck @@ -0,0 +1,61 @@ +Darth Vador +[general] +constructed +[main] +4 Aven Riftwatcher +1 Mox Emerald +4 Savannah Lions +1 Library of Alexandria +4 Intrepid Hero +1 Ancestral Recall +4 Arcane Sanctum +1 Mox Pearl +1 Mikokoro, Center of the Sea +2 Mulldrifter +4 Sigiled Paladin +4 Tundra +4 Psionic Blast +4 Meadowboon +2 Elspeth, Knight-Errant +1 Timetwister +4 Sower of Temptation +4 Darksteel Ingot +4 Wonder +4 Mobilization +2 Obelisk of Esper +4 Wrath of God +4 Resurrection +4 Swords to Plowshares +1 Mox Ruby +4 Bribery +2 Obelisk of Bant +4 Coastal Tower +4 Air Elemental +4 Control Magic +41 Island +4 Hallowed Fountain +4 Enlightened Tutor +4 Battlegrace Angel +4 Tithe +4 Serra Angel +4 Sky Diamond +4 Prodigal Sorcerer +1 Mox Jet +4 Crib Swap +4 Evacuation +1 Keiga, the Tide Star +4 Thieving Magpie +1 Mox Sapphire +1 Mawcor +4 Concentrate +41 Plains +2 Ajani Goldmane +1 Arcanis the Omnipotent +4 Battle of Wits +4 Solemn Simulacrum +4 Soul Warden +4 Marble Diamond +4 Repulse +4 Mox Diamond +4 Man-o'-War +[sideboard] diff --git a/res/quest/decks/Data.dck b/res/quest/decks/Data.dck new file mode 100644 index 00000000000..dc795262457 --- /dev/null +++ b/res/quest/decks/Data.dck @@ -0,0 +1,21 @@ +Data +[general] +constructed +[main] +4 Korlash, Heir to Blackblade +21 Swamp +2 Hymn to Tourach +3 Distress +4 Expunge +3 Will-o'-the-Wisp +2 Beacon of Unrest +2 Guiltfeeder +3 Corrupt +1 Visara the Dreadful +3 Sengir Vampire +2 Urborg Syphon-Mage +2 Liliana Vess +4 Charcoal Diamond +3 Bad Moon +1 Mox Jet +[sideboard] diff --git a/res/quest/decks/Doc Holiday 1.dck b/res/quest/decks/Doc Holiday 1.dck new file mode 100644 index 00000000000..d1a3cae91be --- /dev/null +++ b/res/quest/decks/Doc Holiday 1.dck @@ -0,0 +1,27 @@ +Doc Holiday 1 +[general] +constructed +[main] +1 Isamaru, Hound of Konda +2 Branchsnap Lorian +3 Hystrodon +2 Ancient Spider +2 Obelisk of Bant +1 Blind Phantasm +4 Tropical Island +4 Reviving Dose +2 Scornful Egotist +3 Plains +3 Savannah Lions +2 Hedge Troll +2 Watchwolf +3 Island +2 Serendib Efreet +4 Forest +2 Ascending Aven +4 Guided Strike +2 Ranger en-Vec +4 Tundra +4 Savannah +4 Psionic Blast +[sideboard] diff --git a/res/quest/decks/Doc Holiday 2.dck b/res/quest/decks/Doc Holiday 2.dck new file mode 100644 index 00000000000..7bfc2491d5c --- /dev/null +++ b/res/quest/decks/Doc Holiday 2.dck @@ -0,0 +1,32 @@ +Doc Holiday 2 +[general] +constructed +[main] +1 Isamaru, Hound of Konda +2 Obelisk of Bant +4 Tropical Island +1 Scornful Egotist +3 Savannah Lions +2 Revered Dead +3 Hedge Troll +3 Island +2 Watchwolf +1 Ancestral Recall +1 Enlightened Tutor +4 Tundra +1 Serra Angel +4 Savannah +3 Daru Lancer +3 Branchsnap Lorian +2 Ancient Spider +3 Plains +3 Wildsize +2 Giant Growth +1 Mobilization +2 Kodama's Reach +4 Forest +1 Serendib Efreet +2 Ascending Aven +1 Serra's Blessing +1 Defense of the Heart +[sideboard] diff --git a/res/quest/decks/Doc Holiday 3.dck b/res/quest/decks/Doc Holiday 3.dck new file mode 100644 index 00000000000..892e61f40e3 --- /dev/null +++ b/res/quest/decks/Doc Holiday 3.dck @@ -0,0 +1,31 @@ +Doc Holiday 3 +[general] +constructed +[main] +1 Isamaru, Hound of Konda +2 Obelisk of Bant +4 Tropical Island +2 Savannah Lions +2 Revered Dead +3 Hedge Troll +3 Island +2 Watchwolf +1 Ancestral Recall +1 Enlightened Tutor +4 Tundra +3 Daru Lancer +4 Savannah +3 Branchsnap Lorian +2 Ancient Spider +3 Gaea's Skyfolk +3 Plains +2 Concentrate +2 Exalted Angel +1 Mobilization +2 Kodama's Reach +4 Forest +1 Serra's Blessing +1 Ancient Silverback +1 Defense of the Heart +3 Righteous Charge +[sideboard] diff --git a/res/quest/decks/Dr No.dck b/res/quest/decks/Dr No.dck new file mode 100644 index 00000000000..db283205f21 --- /dev/null +++ b/res/quest/decks/Dr No.dck @@ -0,0 +1,28 @@ +Dr No +[general] +constructed +[main] +4 Underground Sea +2 Megrim +1 Mox Sapphire +4 Wall of Air +3 The Rack +2 Swamp +4 Hymn to Tourach +4 Drowned Catacomb +2 Distress +1 Enlightened Tutor +2 Glacial Fortress +4 Scrubland +2 Duress +1 Mox Pearl +4 Tundra +2 Mind Twist +4 Coercion +2 Ostracize +1 Mox Jet +2 Thoughtseize +1 Balance +4 Gerrard's Verdict +4 Propaganda +[sideboard] diff --git a/res/quest/decks/Fat Albert 1.dck b/res/quest/decks/Fat Albert 1.dck new file mode 100644 index 00000000000..9d70efd14ce --- /dev/null +++ b/res/quest/decks/Fat Albert 1.dck @@ -0,0 +1,27 @@ +Fat Albert 1 +[general] +constructed +[main] +3 Druid of the Anima +4 Taiga +4 Tropical Island +3 Urborg Elf +4 Dosan's Oldest Chant +1 Ancestral Recall +3 Harmonize +3 Keldon Warlord +1 Enlightened Tutor +7 Forest +1 Spidersilk Armor +4 Gemhide Sliver +2 Fecundity +4 Bayou +2 Winter Orb +1 Phyrexian Gargantua +2 Naturalize +4 Savannah +1 Territorial Baloth +1 Lu Meng, Wu General +4 Elvish Harbinger +1 Samurai Enforcers +[sideboard] diff --git a/res/quest/decks/Fat Albert 2.dck b/res/quest/decks/Fat Albert 2.dck new file mode 100644 index 00000000000..b07adf8b327 --- /dev/null +++ b/res/quest/decks/Fat Albert 2.dck @@ -0,0 +1,27 @@ +Fat Albert 2 +[general] +constructed +[main] +3 Druid of the Anima +4 Taiga +4 Tropical Island +2 Windstorm +3 Urborg Elf +1 Juzam Djinn +4 Dosan's Oldest Chant +1 Ancestral Recall +3 Keldon Warlord +1 Enlightened Tutor +1 Lichenthrope +7 Forest +1 Spidersilk Armor +4 Gemhide Sliver +2 Fecundity +1 Drifting Djinn +4 Bayou +3 Winter Orb +1 Baneslayer Angel +2 Naturalize +4 Savannah +4 Elvish Harbinger +[sideboard] diff --git a/res/quest/decks/Fat Albert 3.dck b/res/quest/decks/Fat Albert 3.dck new file mode 100644 index 00000000000..2a7aa0a71cd --- /dev/null +++ b/res/quest/decks/Fat Albert 3.dck @@ -0,0 +1,33 @@ +Fat Albert 3 +[general] +constructed +[main] +1 Scepter of Insight +3 Druid of the Anima +4 Taiga +4 Tropical Island +1 Mox Emerald +2 Windstorm +3 Urborg Elf +1 Ancestral Recall +1 Deathless Angel +1 Enlightened Tutor +1 Spidersilk Armor +1 Mox Pearl +4 Bayou +4 Winter Orb +1 Seizan, Perverter of Truth +2 Naturalize +4 Savannah +1 Mox Jet +4 Elvish Harbinger +1 Winding Wurm +1 Vizzerdrix +1 Mox Sapphire +1 Mystical Tutor +4 Keldon Warlord +3 Forest +4 Gemhide Sliver +1 Mox Ruby +1 Fecundity +[sideboard] diff --git a/res/quest/decks/Frodo 1.dck b/res/quest/decks/Frodo 1.dck new file mode 100644 index 00000000000..00f16e3dc88 --- /dev/null +++ b/res/quest/decks/Frodo 1.dck @@ -0,0 +1,23 @@ +Frodo 1 +[general] +constructed +[main] +4 Plateau +4 Taiga +2 Kird Ape +4 Striped Bears +6 Plains +4 Grizzled Leotau +4 Savannah Lions +2 Castle Raptors +2 Forest +4 Swords to Plowshares +4 Nacatl Outlander +2 Lightning Bolt +2 Loam Lion +2 Serra's Blessing +4 Barbary Apes +4 Savannah +2 Wild Nacatl +4 Mountain +[sideboard] diff --git a/res/quest/decks/Frodo 2.dck b/res/quest/decks/Frodo 2.dck new file mode 100644 index 00000000000..8c68de2b22b --- /dev/null +++ b/res/quest/decks/Frodo 2.dck @@ -0,0 +1,24 @@ +Frodo 2 +[general] +constructed +[main] +4 Plateau +4 Taiga +3 Kird Ape +4 Striped Bears +2 Lightning Helix +6 Plains +4 Savannah Lions +1 Glorious Anthem +3 Plated Geopede +2 Forest +3 Swords to Plowshares +2 Lightning Bolt +3 Loam Lion +2 Serra's Blessing +4 Barbary Apes +2 Steppe Lynx +4 Savannah +3 Wild Nacatl +4 Mountain +[sideboard] diff --git a/res/quest/decks/Frodo 3.dck b/res/quest/decks/Frodo 3.dck new file mode 100644 index 00000000000..c6df091c62c --- /dev/null +++ b/res/quest/decks/Frodo 3.dck @@ -0,0 +1,24 @@ +Frodo 3 +[general] +constructed +[main] +4 Plateau +4 Taiga +4 Kird Ape +1 Mox Emerald +4 Armageddon +3 Lightning Helix +3 Plains +4 Glorious Anthem +4 Plated Geopede +1 Forest +4 Swords to Plowshares +4 Lightning Bolt +1 Mox Ruby +1 Mox Pearl +4 Loam Lion +4 Steppe Lynx +4 Savannah +4 Wild Nacatl +2 Mountain +[sideboard] diff --git a/res/quest/decks/Genghis Khan 1.dck b/res/quest/decks/Genghis Khan 1.dck new file mode 100644 index 00000000000..8396aff96f0 --- /dev/null +++ b/res/quest/decks/Genghis Khan 1.dck @@ -0,0 +1,27 @@ +Genghis Khan 1 +[general] +constructed +[main] +4 Plateau +3 Birds of Paradise +4 Taiga +3 Druid of the Anima +3 Kird Ape +1 Armageddon +2 Eternal Witness +2 Plains +3 Hedge Troll +3 Watchwolf +3 Harmonize +2 Forest +2 Kodama's Reach +3 Quirion Dryad +3 Obelisk of Naya +3 Tithe +3 Cloudcrown Oak +4 Savannah +2 Llanowar Behemoth +3 Skyknight Legionnaire +2 Mountain +2 Meadowboon +[sideboard] diff --git a/res/quest/decks/Genghis Khan 2.dck b/res/quest/decks/Genghis Khan 2.dck new file mode 100644 index 00000000000..f80284cdaf1 --- /dev/null +++ b/res/quest/decks/Genghis Khan 2.dck @@ -0,0 +1,28 @@ +Genghis Khan 2 +[general] +constructed +[main] +4 Birds of Paradise +3 Obelisk of Bant +4 Tropical Island +2 Armageddon +2 Eternal Witness +2 Plains +1 Jugan, the Rising Star +2 Hedge Troll +3 Watchwolf +3 Harmonize +2 Forest +2 Kodama's Reach +4 Wistful Selkie +2 Tithe +4 Tundra +1 Serra Avenger +3 Cloudcrown Oak +4 Noble Hierarch +2 Archon of Justice +4 Savannah +2 Llanowar Behemoth +2 Mountain +2 Meadowboon +[sideboard] diff --git a/res/quest/decks/Genghis Khan 3.dck b/res/quest/decks/Genghis Khan 3.dck new file mode 100644 index 00000000000..6397d1d30f9 --- /dev/null +++ b/res/quest/decks/Genghis Khan 3.dck @@ -0,0 +1,30 @@ +Genghis Khan 3 +[general] +constructed +[main] +4 Plateau +4 Taiga +4 Druid of the Anima +1 Mox Emerald +3 Armageddon +1 Jugan, the Rising Star +3 Watchwolf +3 Harmonize +2 Quirion Dryad +1 Mox Pearl +2 Tithe +4 Savannah +2 Llanowar Behemoth +2 Hystrodon +4 Birds of Paradise +1 Elspeth, Knight-Errant +2 Plains +2 Woolly Thoctar +2 Kodama's Reach +2 Forest +1 Mox Ruby +3 Cloudcrown Oak +2 Archon of Justice +3 Wild Nacatl +2 Mountain +[sideboard] diff --git a/res/quest/decks/Gold Finger.dck b/res/quest/decks/Gold Finger.dck new file mode 100644 index 00000000000..78b40e0cbbc --- /dev/null +++ b/res/quest/decks/Gold Finger.dck @@ -0,0 +1,15 @@ +Gold Finger +[general] +constructed +[main] +4 Remove Soul +4 Serra Sphinx +4 Essence Scatter +2 Ivory Tower +4 Memnarch +4 Counterspell +4 Preemptive Strike +4 Wall of Spears +26 Island +4 False Summoning +[sideboard] diff --git a/res/quest/decks/Green Lantern.dck b/res/quest/decks/Green Lantern.dck new file mode 100644 index 00000000000..821483af8ee --- /dev/null +++ b/res/quest/decks/Green Lantern.dck @@ -0,0 +1,32 @@ +Green Lantern +[general] +constructed +[main] +4 Underground Sea +2 Watery Grave +2 Razorfin Hunter +3 Dark Banishing +1 Rakka Mar +3 Soul Feast +3 Oubliette +1 Island +1 Ancestral Recall +3 Lightning Bolt +1 Pardic Collaborator +2 Blood Crypt +3 Nicol Bolas, Planeswalker +2 Ridgetop Raptor +2 Overwhelming Forces +1 Mox Jet +2 Ashes to Ashes +3 Strangling Soot +3 Nameless Inversion +3 Swamp +1 Mox Sapphire +4 Badlands +1 Mox Ruby +2 Bribery +4 Volcanic Island +2 Shatter +1 Mountain +[sideboard] diff --git a/res/quest/decks/Han Solo.dck b/res/quest/decks/Han Solo.dck new file mode 100644 index 00000000000..2df4662568e --- /dev/null +++ b/res/quest/decks/Han Solo.dck @@ -0,0 +1,24 @@ +Han Solo +[general] +constructed +[main] +3 Enchantress's Presence +1 Mox Emerald +2 Eternal Witness +4 Oblivion Ring +9 Plains +3 Harmonize +3 Enlightened Tutor +9 Forest +4 Land Tax +1 Mox Pearl +2 Sigil of the Empty Throne +4 Battlegrace Angel +1 Gaea's Anthem +4 Wall of Blossoms +1 Vitu-Ghazi, the City-Tree +2 Defense of the Heart +1 Greener Pastures +4 Savannah +4 Lucent Liminid +[sideboard] diff --git a/res/quest/decks/Harry Potter.dck b/res/quest/decks/Harry Potter.dck new file mode 100644 index 00000000000..099e8b099b0 --- /dev/null +++ b/res/quest/decks/Harry Potter.dck @@ -0,0 +1,23 @@ +Harry Potter +[general] +constructed +[main] +4 Underground Sea +4 Remove Soul +4 Glimpse the Unthinkable +1 Mox Sapphire +4 Hedron Crab +3 Mind Funeral +7 Swamp +2 Damnation +11 Island +1 Ancestral Recall +2 Divination +2 Jace, the Mind Sculptor +3 Tome Scour +2 Nemesis of Reason +1 Time Walk +4 Howling Mine +4 Counterspell +1 Mox Jet +[sideboard] diff --git a/res/quest/decks/Homer Simpson 1.dck b/res/quest/decks/Homer Simpson 1.dck new file mode 100644 index 00000000000..ca304bd9b6a --- /dev/null +++ b/res/quest/decks/Homer Simpson 1.dck @@ -0,0 +1,31 @@ +Homer Simpson 1 +[general] +constructed +[main] +4 Underground Sea +1 Flametongue Kavu +3 Flying Men +1 Scornful Egotist +1 Air Elemental +2 Obelisk of Grixis +3 Spined Basher +3 Island +1 Ancestral Recall +1 Wheel of Fortune +2 Hypnotic Specter +1 Fire Elemental +1 Water Elemental +3 Swamp +2 Sootfeather Flock +2 Damnation +1 Timetwister +4 Badlands +3 Animate Dead +3 Sedge Troll +4 Volcanic Island +2 Fire Imp +4 Raise Dead +2 Drowned +2 Battering Craghorn +4 Mountain +[sideboard] diff --git a/res/quest/decks/Homer Simpson 2.dck b/res/quest/decks/Homer Simpson 2.dck new file mode 100644 index 00000000000..9c2f19686c8 --- /dev/null +++ b/res/quest/decks/Homer Simpson 2.dck @@ -0,0 +1,31 @@ +Homer Simpson 2 +[general] +constructed +[main] +4 Underground Sea +1 Flametongue Kavu +3 Flying Men +1 Scornful Egotist +1 Air Elemental +2 Obelisk of Grixis +3 Spined Basher +3 Island +1 Ancestral Recall +1 Wheel of Fortune +2 Hypnotic Specter +1 Fire Elemental +1 Water Elemental +3 Swamp +2 Sootfeather Flock +2 Damnation +1 Timetwister +4 Badlands +3 Animate Dead +3 Sedge Troll +4 Volcanic Island +2 Fire Imp +4 Raise Dead +2 Drowned +2 Battering Craghorn +4 Mountain +[sideboard] diff --git a/res/quest/decks/Homer Simpson 3.dck b/res/quest/decks/Homer Simpson 3.dck new file mode 100644 index 00000000000..1b55e96353d --- /dev/null +++ b/res/quest/decks/Homer Simpson 3.dck @@ -0,0 +1,32 @@ +Homer Simpson 3 +[general] +constructed +[main] +4 Underground Sea +1 Grinning Demon +2 Blistering Firecat +2 Desperate Charge +1 Flametongue Kavu +3 Flying Men +1 Air Elemental +2 Scare Tactics +2 Obelisk of Grixis +3 Spined Basher +3 Island +1 Ancestral Recall +2 Threaten +1 Wheel of Fortune +2 Hypnotic Specter +3 Swamp +2 Concentrate +2 Sootfeather Flock +1 Timetwister +1 Dance of Shadows +4 Badlands +3 Sedge Troll +4 Volcanic Island +2 Fire Imp +2 Drowned +2 Battering Craghorn +4 Mountain +[sideboard] diff --git a/res/quest/decks/Iceman.dck b/res/quest/decks/Iceman.dck new file mode 100644 index 00000000000..cff6d844b18 --- /dev/null +++ b/res/quest/decks/Iceman.dck @@ -0,0 +1,29 @@ +Iceman +[general] +constructed +[main] +4 Underground Sea +3 Watery Grave +1 Vampiric Tutor +3 Thieving Magpie +1 Mox Sapphire +1 Cruel Tutor +7 Swamp +2 Concentrate +2 Serpent Warrior +2 Shadowmage Infiltrator +1 Timetwister +2 Sower of Temptation +2 Control Magic +8 Island +4 Floating-Dream Zubera +1 Ancestral Recall +2 Diabolic Tutor +3 Boomerang +3 Fledgling Djinn +3 Repulse +1 Bribery +1 Demonic Tutor +1 Mox Jet +2 Man-o'-War +[sideboard] diff --git a/res/quest/decks/Indiana Jones 1.dck b/res/quest/decks/Indiana Jones 1.dck new file mode 100644 index 00000000000..08ea47f398e --- /dev/null +++ b/res/quest/decks/Indiana Jones 1.dck @@ -0,0 +1,28 @@ +Indiana Jones 1 +[general] +constructed +[main] +4 Underground Sea +3 Wind Drake +3 Viashino Warrior +3 Goblin Cavaliers +2 Zombie Outlander +2 Canyon Minotaur +1 Roc of Kher Ridges +2 Muck Rats +4 Swamp +2 Concentrate +3 Scare Tactics +2 Obelisk of Grixis +3 Island +1 Ancestral Recall +3 Giant Octopus +3 Dakmor Bat +4 Badlands +2 Nocturnal Raid +4 Volcanic Island +3 Bad Moon +2 Shivan Zombie +3 Mountain +1 Sol'kanar the Swamp King +[sideboard] diff --git a/res/quest/decks/Indiana Jones 2.dck b/res/quest/decks/Indiana Jones 2.dck new file mode 100644 index 00000000000..5a4a70bc2e1 --- /dev/null +++ b/res/quest/decks/Indiana Jones 2.dck @@ -0,0 +1,30 @@ +Indiana Jones 2 +[general] +constructed +[main] +4 Underground Sea +2 Mourning Thrull +1 Vampiric Tutor +2 Obsidian Giant +1 Air Elemental +2 Obelisk of Grixis +3 Island +1 Ancestral Recall +1 Demonic Tutor +3 Bad Moon +2 Python +3 Vodalian Zombie +2 Roc of Kher Ridges +4 Swamp +2 Concentrate +2 Ogre Berserker +2 Dakmor Bat +2 Blood Knight +4 Badlands +2 Stone-Throwing Devils +3 Sedge Troll +4 Volcanic Island +4 Raise Dead +3 Mountain +1 Sol'kanar the Swamp King +[sideboard] diff --git a/res/quest/decks/Indiana Jones 3.dck b/res/quest/decks/Indiana Jones 3.dck new file mode 100644 index 00000000000..8530f88dbc5 --- /dev/null +++ b/res/quest/decks/Indiana Jones 3.dck @@ -0,0 +1,33 @@ +Indiana Jones 3 +[general] +constructed +[main] +4 Underground Sea +1 Vampiric Tutor +2 Flametongue Kavu +1 Air Elemental +2 Wasp Lancer +3 Island +1 Ancestral Recall +2 Black Knight +1 Demonic Tutor +3 Bad Moon +1 Mox Jet +3 Python +1 Needlepeak Spider +4 Terminate +2 Zombie Outlander +2 Roc of Kher Ridges +3 Swamp +1 Mox Sapphire +2 Concentrate +2 Dakmor Bat +4 Badlands +1 Mox Ruby +3 Sedge Troll +4 Volcanic Island +1 Earth Elemental +2 Goblin Outlander +3 Mountain +1 Sol'kanar the Swamp King +[sideboard] diff --git a/res/quest/decks/Jabba the Hut.dck b/res/quest/decks/Jabba the Hut.dck new file mode 100644 index 00000000000..77c945aa4c9 --- /dev/null +++ b/res/quest/decks/Jabba the Hut.dck @@ -0,0 +1,33 @@ +Jabba the Hut +[general] +constructed +[main] +2 Disenchant +1 Mox Emerald +4 Tropical Island +1 River Bear +1 Elite Cat Warrior +1 Jhessian Infiltrator +3 Island +1 Ancestral Recall +1 Wild Ox +1 Mox Pearl +1 Hillcomber Giant +1 Soltari Crusader +2 Battlegrace Angel +4 Tundra +2 Rhox Charger +2 Rafiq of the Many +4 Noble Hierarch +4 Savannah +3 Court Archers +4 Guardians of Akrasa +1 Mox Sapphire +3 Plains +2 Concentrate +2 Exalted Angel +1 Arcanis the Omnipotent +3 Forest +4 Swords to Plowshares +1 Zodiac Rooster +[sideboard] diff --git a/res/quest/decks/James Bond 1.dck b/res/quest/decks/James Bond 1.dck new file mode 100644 index 00000000000..5e58df0cde0 --- /dev/null +++ b/res/quest/decks/James Bond 1.dck @@ -0,0 +1,19 @@ +James Bond 1 +[general] +constructed +[main] +4 Elvish Warrior +2 Oblivion Ring +9 Plains +2 Temple Garden +4 Wildsize +4 Plated Sliver +4 Giant Growth +4 Muscle Sliver +2 Avian Changeling +9 Forest +4 Wild Mongrel +4 Sinew Sliver +4 Elvish Archers +4 Savannah +[sideboard] diff --git a/res/quest/decks/James Bond 2.dck b/res/quest/decks/James Bond 2.dck new file mode 100644 index 00000000000..5c9c0543191 --- /dev/null +++ b/res/quest/decks/James Bond 2.dck @@ -0,0 +1,20 @@ +James Bond 2 +[general] +constructed +[main] +4 Oblivion Ring +7 Plains +2 Temple Garden +4 Savannah Lions +2 Glorious Anthem +4 Wildsize +4 Plated Sliver +4 Giant Growth +4 Muscle Sliver +4 Avian Changeling +5 Forest +4 Wild Mongrel +4 Sinew Sliver +4 Dryad Arbor +4 Savannah +[sideboard] diff --git a/res/quest/decks/James Bond 3.dck b/res/quest/decks/James Bond 3.dck new file mode 100644 index 00000000000..f2205b029f8 --- /dev/null +++ b/res/quest/decks/James Bond 3.dck @@ -0,0 +1,21 @@ +James Bond 3 +[general] +constructed +[main] +4 Isamaru, Hound of Konda +4 Plateau +4 Taiga +2 Lightning Helix +4 Oblivion Ring +3 Plains +4 Savannah Lions +4 Glorious Anthem +4 Giant Growth +4 Muscle Sliver +3 Forest +4 Wild Mongrel +4 Akrasan Squire +4 Dryad Arbor +4 Sinew Sliver +4 Savannah +[sideboard] diff --git a/res/quest/decks/James T Kirk.dck b/res/quest/decks/James T Kirk.dck new file mode 100644 index 00000000000..91601c53cdf --- /dev/null +++ b/res/quest/decks/James T Kirk.dck @@ -0,0 +1,20 @@ +James T Kirk +[general] +constructed +[main] +3 Megrim +17 Swamp +1 Keening Banshee +2 Hymn to Tourach +1 Lim-Dul's High Guard +2 Distress +1 Wit's End +1 Hypnotic Specter +2 Duress +2 Animate Dead +1 Liliana Vess +2 Coercion +2 Ostracize +1 Dusk Imp +2 Thoughtseize +[sideboard] diff --git a/res/quest/decks/King Edward 1.dck b/res/quest/decks/King Edward 1.dck new file mode 100644 index 00000000000..9c63ad80443 --- /dev/null +++ b/res/quest/decks/King Edward 1.dck @@ -0,0 +1,29 @@ +King Edward 1 +[general] +constructed +[main] +4 Underground Sea +4 Birds of Paradise +4 Taiga +2 Lightning Elemental +2 Briarhorn +3 Shriekmaw +1 Tribal Flames +1 Ancestral Recall +2 Harmonize +1 Beacon of Unrest +4 Scrubland +3 Spark Elemental +2 Inner-Flame Acolyte +3 Cinderbones +3 Tithe +2 Eladamri's Call +2 Thunder Spirit +4 Volcanic Island +1 Regrowth +1 Breath of Life +4 Savannah +2 Naturalize +2 Greater Forgeling +3 Cloud Elemental +[sideboard] diff --git a/res/quest/decks/King Edward 2.dck b/res/quest/decks/King Edward 2.dck new file mode 100644 index 00000000000..58a795ea854 --- /dev/null +++ b/res/quest/decks/King Edward 2.dck @@ -0,0 +1,31 @@ +King Edward 2 +[general] +constructed +[main] +4 Underground Sea +4 Taiga +2 Lightning Elemental +2 Primal Plasma +1 Air Elemental +1 Nevinyrral's Disk +2 Ashenmoor Gouger +1 Ancestral Recall +2 Harmonize +1 Beacon of Unrest +4 Scrubland +3 Spark Elemental +2 Inner-Flame Acolyte +3 Cinderbones +1 Regrowth +1 Breath of Life +4 Savannah +2 Cloud Elemental +3 Brute Force +1 Warrior's Charge +4 Birds of Paradise +2 Briarhorn +2 Sickle Ripper +2 Tribal Flames +2 Thunder Spirit +4 Volcanic Island +[sideboard] diff --git a/res/quest/decks/King Edward 3.dck b/res/quest/decks/King Edward 3.dck new file mode 100644 index 00000000000..f6ec50bbba9 --- /dev/null +++ b/res/quest/decks/King Edward 3.dck @@ -0,0 +1,37 @@ +King Edward 3 +[general] +constructed +[main] +3 Plateau +3 Taiga +2 Primal Plasma +1 Mox Emerald +3 Tropical Island +2 Air Elemental +1 Scare Tactics +1 Nevinyrral's Disk +1 Ancestral Recall +1 Beacon of Unrest +3 Scrubland +2 Inner-Flame Acolyte +2 Spark Elemental +2 Tendrils of Corruption +1 Mox Pearl +3 Tundra +1 Mox Jet +2 Naturalize +2 Meadowboon +2 Briarhorn +1 Mox Sapphire +2 Shriekmaw +2 Concentrate +1 Darksteel Ingot +3 Sickle Ripper +2 Spawnwrithe +3 Tribal Flames +3 Badlands +1 Thornling +1 Mox Ruby +2 Thunder Spirit +1 Horde of Notions +[sideboard] diff --git a/res/quest/decks/Kojak 1.dck b/res/quest/decks/Kojak 1.dck new file mode 100644 index 00000000000..9bfbe70edbc --- /dev/null +++ b/res/quest/decks/Kojak 1.dck @@ -0,0 +1,29 @@ +Kojak 1 +[general] +constructed +[main] +1 Cold-Eyed Selkie +3 Assault Zeppelid +3 Gnarled Mass +2 Gaea's Skyfolk +4 Tropical Island +1 Yavimaya Wurm +1 Air Elemental +2 Nettletooth Djinn +3 Urborg Elf +1 Wings of Velis Vel +7 Island +7 Forest +4 Kodama's Reach +3 Wistful Selkie +1 Deeptread Merrow +4 Repulse +2 Plated Spider +1 Prodigal Sorcerer +1 Defense of the Heart +1 Exploration +1 Greener Pastures +3 Breeding Pool +3 Wandering Stream +1 Brawn +[sideboard] diff --git a/res/quest/decks/Kojak 2.dck b/res/quest/decks/Kojak 2.dck new file mode 100644 index 00000000000..1f653322a70 --- /dev/null +++ b/res/quest/decks/Kojak 2.dck @@ -0,0 +1,33 @@ +Kojak 2 +[general] +constructed +[main] +2 Gnarled Mass +4 Tropical Island +1 Air Elemental +1 Jabari's Banner +3 Urborg Elf +7 Island +1 Ancestral Recall +1 Bull Hippo +1 Prodigal Sorcerer +1 Exploration +3 Breeding Pool +1 Water Elemental +1 Cold-Eyed Selkie +2 Assault Zeppelid +2 Gaea's Skyfolk +1 Yavimaya Wurm +2 Concentrate +1 Timetwister +2 Nettletooth Djinn +1 Centaur Glade +7 Forest +3 Wistful Selkie +1 Bear Cub +1 Deeptread Merrow +4 Repulse +3 Plated Spider +1 Defense of the Heart +2 Wandering Stream +[sideboard] diff --git a/res/quest/decks/Kojak 3.dck b/res/quest/decks/Kojak 3.dck new file mode 100644 index 00000000000..f0e2ff09d89 --- /dev/null +++ b/res/quest/decks/Kojak 3.dck @@ -0,0 +1,38 @@ +Kojak 3 +[general] +constructed +[main] +4 Underground Sea +3 Gnarled Mass +1 Mox Emerald +4 Tropical Island +1 Air Elemental +1 Jabari's Banner +2 Wasp Lancer +3 Urborg Elf +2 Island +1 Ancestral Recall +2 Black Knight +1 Rootwater Commando +4 Bayou +1 Exploration +1 Mox Jet +1 Water Elemental +1 Cold-Eyed Selkie +2 Assault Zeppelid +2 Gaea's Skyfolk +1 Mox Sapphire +2 Swamp +1 Yavimaya Wurm +2 Concentrate +1 Timetwister +1 Centaur Glade +2 Forest +3 Wistful Selkie +4 Repulse +1 Phyrexian Gargantua +1 Shore Snapper +2 Plated Spider +1 Defense of the Heart +1 Zodiac Horse +[sideboard] diff --git a/res/quest/decks/Lisa Simpson.dck b/res/quest/decks/Lisa Simpson.dck new file mode 100644 index 00000000000..6ae07682fd5 --- /dev/null +++ b/res/quest/decks/Lisa Simpson.dck @@ -0,0 +1,20 @@ +Lisa Simpson +[general] +constructed +[main] +3 Disenchant +3 Kjeldoran Outpost +4 Wood Elves +12 Plains +3 Skullmulcher +2 Borderland Ranger +2 Angel's Mercy +1 Enlightened Tutor +2 Reinforcements +12 Forest +4 Squirrel Nest +3 Reprisal +4 Kor Cartographer +3 Gluttonous Slime +2 Sakura-Tribe Elder +[sideboard] diff --git a/res/quest/decks/Luke Skywalker.dck b/res/quest/decks/Luke Skywalker.dck new file mode 100644 index 00000000000..b94eaafd841 --- /dev/null +++ b/res/quest/decks/Luke Skywalker.dck @@ -0,0 +1,26 @@ +Luke Skywalker +[general] +constructed +[main] +4 Birds of Paradise +4 Druid of the Anima +1 Mox Emerald +4 Tropical Island +4 Gaea's Skyfolk +4 Eternal Witness +1 Mox Sapphire +1 Timetwister +3 Giant Growth +4 Watchwolf +3 Garruk Wildspeaker +1 Ancestral Recall +2 Harmonize +4 Forest +2 Force of Savagery +3 Dryad Arbor +1 Mox Pearl +2 Pulse of the Tangle +4 Gaea's Anthem +4 Tundra +4 Savannah +[sideboard] diff --git a/res/quest/decks/Magneto.dck b/res/quest/decks/Magneto.dck new file mode 100644 index 00000000000..333e9ecbd34 --- /dev/null +++ b/res/quest/decks/Magneto.dck @@ -0,0 +1,25 @@ +Magneto +[general] +constructed +[main] +1 Royal Assassin +20 Swamp +2 Hymn to Tourach +3 Shriekmaw +1 Nevinyrral's Disk +3 Expunge +3 Maggot Carrier +2 Diabolic Tutor +4 Highway Robber +1 Beacon of Unrest +3 Tendrils of Corruption +1 Rathi Assassin +3 Sengir Vampire +2 Animate Dead +1 Liliana Vess +3 Charcoal Diamond +1 Demonic Tutor +4 Gravedigger +1 Mox Jet +1 Bitterblossom +[sideboard] diff --git a/res/quest/decks/Marge Simpson.dck b/res/quest/decks/Marge Simpson.dck new file mode 100644 index 00000000000..a5b3ec7e990 --- /dev/null +++ b/res/quest/decks/Marge Simpson.dck @@ -0,0 +1,20 @@ +Marge Simpson +[general] +constructed +[main] +4 Jund Battlemage +4 Rampant Growth +2 Solemn Simulacrum +12 Forest +4 Kodama's Reach +4 Carven Caryatid +4 Squirrel Nest +2 Predator Dragon +1 Gorger Wurm +4 Wall of Blossoms +2 Thunder-Thrash Elder +2 Goblin Offensive +1 Dragon Broodmother +2 Thorn-Thrash Viashino +12 Mountain +[sideboard] diff --git a/res/quest/decks/Morpheus.dck b/res/quest/decks/Morpheus.dck new file mode 100644 index 00000000000..ea8dfae377a --- /dev/null +++ b/res/quest/decks/Morpheus.dck @@ -0,0 +1,23 @@ +Morpheus +[general] +constructed +[main] +2 Wellwisher +3 Norwood Archers +1 Mox Emerald +3 Immaculate Magistrate +3 Sylvan Messenger +2 Nevinyrral's Disk +1 Wolf-Skull Shaman +3 Harmonize +3 Overrun +19 Forest +1 Winnower Patrol +3 Timberwatch Elf +3 Gaea's Anthem +2 Naturalize +2 Moss Diamond +4 Llanowar Elves +3 Imperious Perfect +2 Essence Warden +[sideboard] diff --git a/res/quest/decks/Napoleon.dck b/res/quest/decks/Napoleon.dck new file mode 100644 index 00000000000..c58d11cacc9 --- /dev/null +++ b/res/quest/decks/Napoleon.dck @@ -0,0 +1,28 @@ +Napoleon +[general] +constructed +[main] +4 Enchantress's Presence +4 Angelic Wall +1 Mox Emerald +2 Swamp +4 Shield Sphere +2 Plains +2 Glorious Anthem +3 Darksteel Ingot +4 Rolling Stones +2 Forest +4 Scrubland +1 Mox Pearl +2 Gaea's Anthem +4 Bayou +2 Vindicate +1 Convalescent Care +2 Phyrexian Walker +4 Wall of Blossoms +1 Convalescence +4 Savannah +3 Vine Trellis +1 Mox Jet +3 Doran, the Siege Tower +[sideboard] diff --git a/res/quest/decks/Neo.dck b/res/quest/decks/Neo.dck new file mode 100644 index 00000000000..88037f51c52 --- /dev/null +++ b/res/quest/decks/Neo.dck @@ -0,0 +1,21 @@ +Neo +[general] +constructed +[main] +4 Birds of Paradise +4 Taiga +4 Blistering Firecat +1 Mox Emerald +2 Eternal Witness +4 Ball Lightning +4 Darksteel Ingot +3 Kiki-Jiki, Mirror Breaker +4 Groundbreaker +3 Harmonize +7 Forest +4 Spark Elemental +4 Feral Lightning +1 Mox Ruby +7 Mountain +4 Joiner Adept +[sideboard] diff --git a/res/quest/decks/Newton.dck b/res/quest/decks/Newton.dck new file mode 100644 index 00000000000..f51484253a7 --- /dev/null +++ b/res/quest/decks/Newton.dck @@ -0,0 +1,23 @@ +Newton +[general] +constructed +[main] +2 Disenchant +1 Mox Emerald +2 Eternal Witness +2 Swamp +2 Plains +2 Glorious Anthem +2 Darksteel Ingot +4 Harmonize +15 Relentless Rats +2 Forest +4 Scrubland +1 Mox Pearl +4 Bayou +4 Wall of Blossoms +4 Savannah +1 Mox Jet +4 Ratcatcher +4 Aluren +[sideboard] diff --git a/res/quest/decks/Picard.dck b/res/quest/decks/Picard.dck new file mode 100644 index 00000000000..29b063b9053 --- /dev/null +++ b/res/quest/decks/Picard.dck @@ -0,0 +1,30 @@ +Picard +[general] +constructed +[main] +2 Wellwisher +1 Mox Emerald +4 Tropical Island +3 Immaculate Magistrate +2 Island +1 Ancestral Recall +3 Overrun +1 Mox Pearl +4 Tundra +3 Gaea's Anthem +4 Savannah +3 Imperious Perfect +2 Essence Warden +3 Gaea's Skyfolk +1 Mox Sapphire +2 Plains +2 Concentrate +2 Sylvan Messenger +3 Darksteel Ingot +1 Wolf-Skull Shaman +3 Forest +1 Winnower Patrol +3 Timberwatch Elf +2 Rune-Cervin Rider +4 Llanowar Elves +[sideboard] diff --git a/res/quest/decks/Pinky and the Brain.dck b/res/quest/decks/Pinky and the Brain.dck new file mode 100644 index 00000000000..53547d3b1bb --- /dev/null +++ b/res/quest/decks/Pinky and the Brain.dck @@ -0,0 +1,26 @@ +Pinky and the Brain +[general] +constructed +[main] +4 Royal Assassin +10 Swamp +5 Plains +1 Damnation +1 Nevinyrral's Disk +4 Expunge +4 Terror +2 Intrepid Hero +1 Wrath of God +2 Beacon of Unrest +4 Scrubland +4 Tendrils of Corruption +2 Visara the Dreadful +2 Animate Dead +1 Mox Pearl +3 Godless Shrine +2 Angel of Despair +2 Liliana Vess +4 Vindicate +1 Mox Jet +1 Magus of the Disk +[sideboard] diff --git a/res/quest/decks/Professor X.dck b/res/quest/decks/Professor X.dck new file mode 100644 index 00000000000..13c34d04932 --- /dev/null +++ b/res/quest/decks/Professor X.dck @@ -0,0 +1,34 @@ +Professor X +[general] +constructed +[main] +3 Underground Sea +1 Vampiric Tutor +1 Mox Emerald +4 Master of Etherium +3 Ancient Den +1 Windwright Mage +3 Seat of the Synod +2 Enlightened Tutor +3 Coiled Tinviper +3 Scrubland +3 Ornithopter +1 Flying Carpet +1 Mox Pearl +3 Tundra +1 Demonic Tutor +3 Vault of Whispers +1 Mox Jet +2 War Chariot +3 Dancing Scimitar +3 Tower Gargoyle +1 Mox Sapphire +3 Darklit Gargoyle +1 Vectis Agents +1 Mox Ruby +1 Hanna, Ship's Navigator +3 Vedalken Archmage +2 Arachnoid +1 Iron Lance +2 Esper Cormorants +[sideboard] diff --git a/res/quest/decks/R2-D2.dck b/res/quest/decks/R2-D2.dck new file mode 100644 index 00000000000..c93ecfffeb1 --- /dev/null +++ b/res/quest/decks/R2-D2.dck @@ -0,0 +1,23 @@ +R2-D2 +[general] +constructed +[main] +2 Disenchant +3 Evacuation +4 Aven Envoy +1 Mox Sapphire +7 Plains +3 Black Vise +3 Darksteel Ingot +7 Island +3 Echoing Truth +4 Ornithopter +3 Boomerang +1 Mox Pearl +3 Words of Wisdom +4 Tundra +3 Repulse +3 Howling Mine +3 Regress +3 Man-o'-War +[sideboard] diff --git a/res/quest/decks/Rocky 1.dck b/res/quest/decks/Rocky 1.dck new file mode 100644 index 00000000000..1ff1b3d727b --- /dev/null +++ b/res/quest/decks/Rocky 1.dck @@ -0,0 +1,29 @@ +Rocky 1 +[general] +constructed +[main] +3 Goblin Cavaliers +4 Plateau +2 Obsidian Giant +1 Air Elemental +3 Plains +2 Seashell Cameo +1 Flamebreak +1 Tremor +3 Island +2 Threaten +2 Giant Octopus +3 Kabuto Moth +2 Galina's Knight +2 Disciple of Law +2 Talon Trooper +2 Shield Wall +3 Guided Strike +4 Venerable Monk +3 Shu Elite Infantry +4 Tundra +4 Volcanic Island +2 Howling Mine +1 Pyroclasm +4 Mountain +[sideboard] diff --git a/res/quest/decks/Rocky 2.dck b/res/quest/decks/Rocky 2.dck new file mode 100644 index 00000000000..9d302d6f25b --- /dev/null +++ b/res/quest/decks/Rocky 2.dck @@ -0,0 +1,28 @@ +Rocky 2 +[general] +constructed +[main] +2 Goblin Cavaliers +4 Plateau +2 Obsidian Giant +1 Serra Sphinx +3 Plains +2 Seashell Cameo +2 Narwhal +2 Flamebreak +2 Tremor +3 Island +4 Echoing Truth +2 Giant Octopus +3 Kabuto Moth +2 Galina's Knight +2 Disciple of Law +2 Talon Trooper +2 Spark Elemental +3 Shu Elite Infantry +4 Tundra +4 Volcanic Island +2 Pyroclasm +3 Teroh's Faithful +4 Mountain +[sideboard] diff --git a/res/quest/decks/Rocky 3.dck b/res/quest/decks/Rocky 3.dck new file mode 100644 index 00000000000..008e3059211 --- /dev/null +++ b/res/quest/decks/Rocky 3.dck @@ -0,0 +1,30 @@ +Rocky 3 +[general] +constructed +[main] +4 Plateau +3 Shu Soldier-Farmers +2 Narwhal +2 Flamebreak +3 Island +1 Ancestral Recall +3 Kabuto Moth +2 Galina's Knight +1 Mox Pearl +3 Trokin High Guard +4 Tundra +2 Fomori Nomad +3 Pyroclasm +1 Serra Sphinx +1 Mox Sapphire +3 Plains +2 Concentrate +3 Tremor +3 Giant Octopus +2 Disciple of Law +2 Talon Trooper +2 Silver Knight +1 Mox Ruby +4 Volcanic Island +3 Mountain +[sideboard] diff --git a/res/quest/decks/Rogue.dck b/res/quest/decks/Rogue.dck new file mode 100644 index 00000000000..879888f8116 --- /dev/null +++ b/res/quest/decks/Rogue.dck @@ -0,0 +1,20 @@ +Rogue +[general] +constructed +[main] +4 Mogg Fanatic +2 Chandra Nalaar +4 Shivan Dragon +4 Tarox Bladewing +1 Dragon Roost +4 Darksteel Ingot +4 Solemn Simulacrum +4 Lightning Bolt +1 Mox Ruby +4 Fire Diamond +3 Ryusei, the Falling Star +2 Macetail Hystrodon +3 Imperial Hellkite +3 Vulshok Sorcerer +17 Mountain +[sideboard] diff --git a/res/quest/decks/Scooby Doo.dck b/res/quest/decks/Scooby Doo.dck new file mode 100644 index 00000000000..e34b24d485c --- /dev/null +++ b/res/quest/decks/Scooby Doo.dck @@ -0,0 +1,25 @@ +Scooby Doo +[general] +constructed +[main] +2 Callous Giant +1 Changeling Berserker +1 Dragonmaster Outcast +2 Siege-Gang Commander +1 Honden of Infinite Rage +2 Obsidian Fireheart +1 Demigod of Revenge +4 Bonesplitter +3 Tectonic Fiend +1 Battle-Mad Ronin +3 Kamahl, Pit Fighter +1 Mox Ruby +2 Ronin Houndmaster +2 Basalt Gargoyle +1 Flamecore Elemental +2 Mudbrawler Cohort +1 Goblin Offensive +2 Goblin Sharpshooter +1 Rakdos Pit Dragon +27 Mountain +[sideboard] diff --git a/res/quest/decks/Scotty.dck b/res/quest/decks/Scotty.dck new file mode 100644 index 00000000000..1880b32a9ff --- /dev/null +++ b/res/quest/decks/Scotty.dck @@ -0,0 +1,29 @@ +Scotty +[general] +constructed +[main] +3 Penumbra Spider +3 Eternal Witness +2 Swamp +2 Plains +3 Penumbra Wurm +2 Nevinyrral's Disk +3 Penumbra Bobcat +3 Caller of the Claw +2 Castle +3 Darksteel Ingot +2 Harmonize +1 Enlightened Tutor +3 Penumbra Kavu +2 Guiltfeeder +2 Forest +4 Scrubland +4 Bayou +1 Marble Diamond +1 Charcoal Diamond +3 Gravedigger +4 Life Burst +2 Pestilence +4 Savannah +1 Moss Diamond +[sideboard] diff --git a/res/quest/decks/Seabiscuit 1.dck b/res/quest/decks/Seabiscuit 1.dck new file mode 100644 index 00000000000..49eb745b961 --- /dev/null +++ b/res/quest/decks/Seabiscuit 1.dck @@ -0,0 +1,29 @@ +Seabiscuit 1 +[general] +constructed +[main] +4 Underground Sea +1 Hooded Kavu +2 Razorfin Hunter +3 Zombie Outlander +4 Swamp +1 Air Elemental +1 Shadowmage Infiltrator +1 Timetwister +2 Wasp Lancer +2 Obelisk of Grixis +4 Standstill +3 Island +1 Ancestral Recall +2 Giant Octopus +4 Echoing Truth +1 Wheel of Fortune +4 Badlands +3 Sedge Troll +4 Volcanic Island +1 Demonic Tutor +2 Lowland Giant +3 Shivan Zombie +4 Regress +3 Mountain +[sideboard] diff --git a/res/quest/decks/Seabiscuit 2.dck b/res/quest/decks/Seabiscuit 2.dck new file mode 100644 index 00000000000..78a039f7417 --- /dev/null +++ b/res/quest/decks/Seabiscuit 2.dck @@ -0,0 +1,33 @@ +Seabiscuit 2 +[general] +constructed +[main] +4 Underground Sea +1 Hooded Kavu +1 Do or Die +2 Razorfin Hunter +1 Shadowmage Infiltrator +2 Scare Tactics +2 Wasp Lancer +2 Nevinyrral's Disk +2 Obelisk of Grixis +3 Island +1 Ancestral Recall +1 Wheel of Fortune +2 Shadow Rider +1 Demonic Tutor +2 Gerrard's Irregulars +4 Hatching Plans +2 Needlepeak Spider +2 Roc of Kher Ridges +1 Garza Zol, Plague Queen +4 Swamp +1 Shriekmaw +1 Timetwister +1 Path of Anger's Flame +4 Badlands +3 Stone-Throwing Devils +3 Sedge Troll +4 Volcanic Island +3 Mountain +[sideboard] diff --git a/res/quest/decks/Seabiscuit 3.dck b/res/quest/decks/Seabiscuit 3.dck new file mode 100644 index 00000000000..c5eb664d5df --- /dev/null +++ b/res/quest/decks/Seabiscuit 3.dck @@ -0,0 +1,35 @@ +Seabiscuit 3 +[general] +constructed +[main] +4 Underground Sea +2 Razorfin Hunter +2 Fervor +1 Shadowmage Infiltrator +2 Wasp Lancer +1 Prickly Boggart +2 Control Magic +3 Island +1 Ancestral Recall +4 Threaten +1 Wheel of Fortune +1 Demonic Tutor +1 Mox Jet +1 Skeletal Snake +2 Roc of Kher Ridges +1 Garza Zol, Plague Queen +3 Swamp +2 Keening Banshee +1 Mox Sapphire +1 Shriekmaw +1 Timetwister +2 Skeletal Crocodile +1 Dross Prowler +4 Badlands +1 Mox Ruby +3 Stone-Throwing Devils +3 Sedge Troll +4 Volcanic Island +2 Lowland Giant +3 Mountain +[sideboard] diff --git a/res/quest/decks/Sherlock Holmes 1.dck b/res/quest/decks/Sherlock Holmes 1.dck new file mode 100644 index 00000000000..4553cf9e642 --- /dev/null +++ b/res/quest/decks/Sherlock Holmes 1.dck @@ -0,0 +1,28 @@ +Sherlock Holmes 1 +[general] +constructed +[main] +2 Aggressive Urge +3 Norwood Archers +1 Arrogant Vampire +7 Swamp +3 Overgrown Tomb +2 Damnation +3 Urborg Elf +2 Hornet Cobra +1 Jukai Messenger +2 Wildsize +3 Night's Whisper +3 Highway Robber +1 Rushwood Dryad +7 Forest +2 Pulse of the Tangle +4 Bayou +2 Nessian Courser +1 Demonic Tutor +1 Regrowth +3 Cloudcrown Oak +2 Twinblade Slasher +2 Ironroot Treefolk +3 Dancing Scimitar +[sideboard] diff --git a/res/quest/decks/Sherlock Holmes 2.dck b/res/quest/decks/Sherlock Holmes 2.dck new file mode 100644 index 00000000000..84bb68736f4 --- /dev/null +++ b/res/quest/decks/Sherlock Holmes 2.dck @@ -0,0 +1,29 @@ +Sherlock Holmes 2 +[general] +constructed +[main] +3 Norwood Archers +2 Pongify +2 Assault Zeppelid +2 Blind Phantasm +3 Gaea's Skyfolk +4 Tropical Island +1 Air Elemental +1 Timetwister +1 Nevinyrral's Disk +3 Urborg Elf +7 Island +7 Forest +1 Rushwood Dryad +1 Lynx +4 Sleight of Hand +1 Duskdale Wurm +3 Wistful Selkie +1 Zodiac Rabbit +1 Prodigal Sorcerer +2 Twinblade Slasher +3 Psionic Blast +3 Breeding Pool +2 Blastoderm +2 Wandering Stream +[sideboard] diff --git a/res/quest/decks/Sherlock Holmes 3.dck b/res/quest/decks/Sherlock Holmes 3.dck new file mode 100644 index 00000000000..954d37fa7b2 --- /dev/null +++ b/res/quest/decks/Sherlock Holmes 3.dck @@ -0,0 +1,38 @@ +Sherlock Holmes 3 +[general] +constructed +[main] +2 Norwood Archers +4 Underground Sea +1 Mox Emerald +4 Tropical Island +1 Virtue's Ruin +1 Nevinyrral's Disk +2 Wasp Lancer +3 Urborg Elf +2 Island +1 Spiritmonger +1 Ancestral Recall +1 Nath of the Gilt-Leaf +1 Eladamri, Lord of Leaves +4 Bayou +1 Heartwood Treefolk +1 Willow Dryad +1 Mox Jet +1 Simic Sky Swallower +1 Ashes to Ashes +3 Gaea's Skyfolk +1 Zodiac Monkey +2 Swamp +1 Mox Sapphire +1 Stalker Hag +1 Slinking Serpent +1 Timetwister +1 Veldrane of Sengir +3 Forest +4 Sleight of Hand +3 Wistful Selkie +2 Pulse of the Tangle +2 Twinblade Slasher +2 Wandering Stream +[sideboard] diff --git a/res/quest/decks/Silver Surfer.dck b/res/quest/decks/Silver Surfer.dck new file mode 100644 index 00000000000..a3265ac5bdf --- /dev/null +++ b/res/quest/decks/Silver Surfer.dck @@ -0,0 +1,25 @@ +Silver Surfer +[general] +constructed +[main] +1 Mox Emerald +2 Briarhorn +2 Rootwalla +1 Kavu Climber +1 Spawnwrithe +4 Giant Growth +4 Baru, Fist of Krosa +3 Groundbreaker +2 Harmonize +4 Overrun +20 Forest +3 Kodama's Reach +3 Kaysa +1 Thornling +2 Rhox Charger +1 Jedit Ojanen of Efrava +2 Mirri, Cat Warrior +1 River Boa +2 Might of Oaks +1 Epic Proportions +[sideboard] diff --git a/res/quest/decks/Spiderman.dck b/res/quest/decks/Spiderman.dck new file mode 100644 index 00000000000..621b2e328bc --- /dev/null +++ b/res/quest/decks/Spiderman.dck @@ -0,0 +1,23 @@ +Spiderman +[general] +constructed +[main] +2 Isamaru, Hound of Konda +2 Aven Riftwatcher +1 Elspeth, Knight-Errant +2 Armageddon +15 Plains +4 Savannah Lions +4 Glorious Anthem +1 Ajani Goldmane +3 Mass Calcify +2 Knight of the White Orchid +4 Flagstones of Trokair +4 Wrath of God +4 Swords to Plowshares +2 Soul Warden +1 Mox Pearl +1 Ranger of Eos +4 Serra Avenger +4 Valorous Charge +[sideboard] diff --git a/res/quest/decks/Spock.dck b/res/quest/decks/Spock.dck new file mode 100644 index 00000000000..0c83dcaf8b3 --- /dev/null +++ b/res/quest/decks/Spock.dck @@ -0,0 +1,23 @@ +Spock +[general] +constructed +[main] +1 Norwood Archers +1 Elvish Warrior +1 Llanowar Mentor +1 Stonewood Invoker +1 Immaculate Magistrate +1 Fyndhorn Elves +1 Caller of the Claw +4 Wolf-Skull Shaman +1 Leaf Gilder +17 Forest +1 Skyshroud Troopers +4 Winnower Patrol +1 Elvish Archers +1 Viridian Shaman +1 Thelonite Hermit +1 Llanowar Elves +1 Essence Warden +1 Elvish Ranger +[sideboard] diff --git a/res/quest/decks/Storm 1.dck b/res/quest/decks/Storm 1.dck new file mode 100644 index 00000000000..63abf13b255 --- /dev/null +++ b/res/quest/decks/Storm 1.dck @@ -0,0 +1,30 @@ +Storm 1 +[general] +constructed +[main] +2 Disenchant +4 Plateau +2 Fervor +3 Knight of Meadowgrain +2 Ashenmoor Gouger +3 Youthful Knight +2 Hobgoblin Dragoon +1 Enlightened Tutor +4 Scrubland +2 El-Hajjaj +1 Brion Stoutarm +2 Phyrexian Arena +3 Lightning Helix +2 Warrior Angel +2 Pegasus Charger +4 Swamp +4 Plains +1 Exalted Angel +2 Echoing Decay +2 Flowstone Charger +2 Darksteel Ingot +4 Badlands +2 Essence Sliver +2 Serra's Blessing +2 Mountain +[sideboard] diff --git a/res/quest/decks/Storm 2.dck b/res/quest/decks/Storm 2.dck new file mode 100644 index 00000000000..ecff4b86adf --- /dev/null +++ b/res/quest/decks/Storm 2.dck @@ -0,0 +1,30 @@ +Storm 2 +[general] +constructed +[main] +4 Plateau +4 Taiga +1 Desperate Charge +2 Noble Panther +2 Fervor +2 Youthful Knight +4 Scrubland +4 Bayou +2 Virtuous Charge +4 Savannah +2 El-Hajjaj +1 Brion Stoutarm +4 Birds of Paradise +2 Kird Ape +2 Phyrexian Arena +2 Warrior Angel +1 Zombify +2 Pegasus Charger +2 Exalted Angel +2 Tribal Flames +2 Horned Cheetah +3 Essence Sliver +2 Serra's Blessing +2 Zebra Unicorn +2 Raise Dead +[sideboard] diff --git a/res/quest/decks/Storm 3.dck b/res/quest/decks/Storm 3.dck new file mode 100644 index 00000000000..75486f7f57d --- /dev/null +++ b/res/quest/decks/Storm 3.dck @@ -0,0 +1,34 @@ +Storm 3 +[general] +constructed +[main] +3 Underground Sea +3 Plateau +1 Mox Emerald +2 Fervor +2 Windwright Mage +2 Knight of Meadowgrain +2 Oubliette +1 Mox Pearl +3 Bayou +3 Tundra +1 Mox Jet +3 Savannah +2 El-Hajjaj +1 Brion Stoutarm +3 Phyrexian Arena +2 Warrior Angel +1 Mox Sapphire +2 Oblivion Ring +2 Exalted Angel +2 Darksteel Ingot +3 Tribal Flames +2 Kjeldoran Gargoyle +3 Badlands +2 Horned Cheetah +1 Mox Ruby +2 Essence Sliver +2 Rhox War Monk +2 Serra's Blessing +2 Zebra Unicorn +[sideboard] diff --git a/res/quest/decks/Superman 1.dck b/res/quest/decks/Superman 1.dck new file mode 100644 index 00000000000..95e37ba644b --- /dev/null +++ b/res/quest/decks/Superman 1.dck @@ -0,0 +1,33 @@ +Superman 1 +[general] +constructed +[main] +4 Underground Sea +4 Taiga +1 Horned Sliver +1 Muscle Sliver +4 Scrubland +2 Blade Sliver +1 Watcher Sliver +4 Venser's Sliver +2 Breath of Life +4 Savannah +1 Fury Sliver +1 Heart Sliver +1 Crystalline Sliver +4 Metallic Sliver +3 Concentrate +1 Sidewinder Sliver +2 Synchronous Sliver +1 Winged Sliver +1 Might Sliver +1 Plated Sliver +1 Battering Sliver +4 Gemhide Sliver +1 Bonesplitter Sliver +1 Sinew Sliver +1 Essence Sliver +4 Volcanic Island +4 Raise Dead +1 Reflex Sliver +[sideboard] diff --git a/res/quest/decks/Superman 2.dck b/res/quest/decks/Superman 2.dck new file mode 100644 index 00000000000..67668990df8 --- /dev/null +++ b/res/quest/decks/Superman 2.dck @@ -0,0 +1,31 @@ +Superman 2 +[general] +constructed +[main] +4 Plateau +3 Tropical Island +1 Terror +2 Muscle Sliver +2 Horned Sliver +2 Avian Changeling +2 Blade Sliver +2 Watcher Sliver +2 Bayou +4 Tundra +1 Regrowth +4 Savannah +1 Fury Sliver +2 Crystalline Sliver +2 Zombify +1 Oblivion Ring +4 Sidewinder Sliver +1 Synchronous Sliver +2 Winged Sliver +3 Might Sliver +2 Tribal Flames +3 Badlands +4 Gemhide Sliver +2 Sinew Sliver +2 Essence Sliver +2 Repulse +[sideboard] diff --git a/res/quest/decks/Tarzan 1.dck b/res/quest/decks/Tarzan 1.dck new file mode 100644 index 00000000000..dd98d971501 --- /dev/null +++ b/res/quest/decks/Tarzan 1.dck @@ -0,0 +1,32 @@ +Tarzan 1 +[general] +constructed +[main] +3 Aggressive Urge +2 Tree Monkey +2 Jungle Lion +2 Savannah Lions +2 Gorilla Warrior +1 Kaysa +2 Iron Tusk Elephant +2 Flying Carpet +2 Barbary Apes +1 Heartwood Shard +1 Breath of Life +1 Naturalize +4 Savannah +1 Moss Diamond +5 Plains +4 Temple Garden +4 Utopia Tree +2 Pygmy Razorback +2 Wildsize +2 Giant Growth +1 Torsten Von Ursus +5 Forest +2 Horned Cheetah +2 Wild Elephant +1 Marble Diamond +2 Gorilla Chieftain +2 Zebra Unicorn +[sideboard] diff --git a/res/quest/decks/Tarzan 2.dck b/res/quest/decks/Tarzan 2.dck new file mode 100644 index 00000000000..962fcce9b66 --- /dev/null +++ b/res/quest/decks/Tarzan 2.dck @@ -0,0 +1,33 @@ +Tarzan 2 +[general] +constructed +[main] +1 Tree Monkey +3 Aggressive Urge +2 Jungle Lion +2 Savannah Lions +1 Jabari's Banner +3 Gorilla Warrior +1 Kaysa +1 Flying Carpet +1 Eladamri's Call +2 Barbary Apes +1 Heartwood Shard +1 Breath of Life +1 Naturalize +4 Savannah +1 Moss Diamond +4 Temple Garden +5 Plains +4 Utopia Tree +2 Wildsize +2 Giant Growth +1 Torsten Von Ursus +5 Forest +2 Horned Cheetah +3 Wild Elephant +1 Marble Diamond +2 Gorilla Chieftain +2 Zebra Unicorn +2 Silverback Ape +[sideboard] diff --git a/res/quest/decks/Terminator.dck b/res/quest/decks/Terminator.dck new file mode 100644 index 00000000000..f0218dda65c --- /dev/null +++ b/res/quest/decks/Terminator.dck @@ -0,0 +1,22 @@ +Terminator +[general] +constructed +[main] +4 Master of Etherium +1 Mox Sapphire +3 Concentrate +4 Shield Sphere +2 Stuffy Doll +1 Timetwister +4 Sarcomite Myr +2 Control Magic +17 Island +1 Ancestral Recall +4 Solemn Simulacrum +1 Bribery +4 Sky Diamond +2 Memnarch +4 Psionic Blast +2 Darksteel Gargoyle +4 Cloudheath Drake +[sideboard] diff --git a/res/quest/decks/Uncle Owen.dck b/res/quest/decks/Uncle Owen.dck new file mode 100644 index 00000000000..c04b3b2ccd4 --- /dev/null +++ b/res/quest/decks/Uncle Owen.dck @@ -0,0 +1,28 @@ +Uncle Owen +[general] +constructed +[main] +4 Underground Sea +4 Pongify +1 Keiga, the Tide Star +1 Mox Sapphire +4 Devour in Shadow +2 Swamp +4 Concentrate +2 Plains +2 Shadowmage Infiltrator +2 Sower of Temptation +4 Terror +4 Control Magic +2 Island +1 Ancestral Recall +3 Obelisk of Esper +4 Scrubland +4 Swords to Plowshares +1 Mox Pearl +1 Liliana Vess +4 Tundra +1 Bribery +1 Mox Jet +4 Crib Swap +[sideboard] diff --git a/res/quest/decks/Wolverine.dck b/res/quest/decks/Wolverine.dck new file mode 100644 index 00000000000..1eedc0d7529 --- /dev/null +++ b/res/quest/decks/Wolverine.dck @@ -0,0 +1,26 @@ +Wolverine +[general] +constructed +[main] +1 Mox Emerald +1 Korlash, Heir to Blackblade +3 Nightmare +13 Swamp +1 Kokusho, the Evening Star +4 Overgrown Tomb +3 Morsel Theft +3 Douse in Gloom +3 Soul Feast +1 Forest +1 Beacon of Unrest +4 Hypnotic Specter +4 Kodama's Reach +2 Corrupt +3 Tendrils of Corruption +1 Visara the Dreadful +4 Bayou +3 Phyrexian Gargantua +1 Seizan, Perverter of Truth +1 Mox Jet +3 Phyrexian Rager +[sideboard] diff --git a/res/quest/decks/Wyatt Earp 1.dck b/res/quest/decks/Wyatt Earp 1.dck new file mode 100644 index 00000000000..618cb4c1902 --- /dev/null +++ b/res/quest/decks/Wyatt Earp 1.dck @@ -0,0 +1,30 @@ +Wyatt Earp 1 +[general] +constructed +[main] +4 Plateau +3 Druid of the Anima +4 Taiga +4 Reviving Dose +1 Jabari's Banner +2 Tranquility +1 Wheel of Fortune +2 Lightning Bolt +2 Eladamri's Call +1 Regrowth +3 Ghost Warden +1 Sabertooth Nishoba +4 Savannah +3 Skyknight Legionnaire +2 Kird Ape +2 Ancient Spider +3 Charging Troll +3 Plains +2 Nettletooth Djinn +2 Hill Giant +3 Forest +1 Resurrection +2 Angel of Light +2 Zodiac Rooster +3 Mountain +[sideboard] diff --git a/res/quest/decks/Wyatt Earp 2.dck b/res/quest/decks/Wyatt Earp 2.dck new file mode 100644 index 00000000000..b2d4e9c5b28 --- /dev/null +++ b/res/quest/decks/Wyatt Earp 2.dck @@ -0,0 +1,34 @@ +Wyatt Earp 2 +[general] +constructed +[main] +1 Bull Cerodon +4 Plateau +2 Yavimaya Barbarian +3 Druid of the Anima +4 Taiga +1 Cinder Storm +2 Tranquility +2 Gerrard's Command +2 Harmonize +2 Boggart Ram-Gang +1 Boil +1 Wheel of Fortune +2 Eladamri's Call +1 Regrowth +4 Savannah +3 Skyknight Legionnaire +1 Argothian Swine +2 Kird Ape +2 Ancient Spider +1 Scalebane's Elite +3 Plains +2 Nettletooth Djinn +3 Forest +1 Resurrection +2 Angel of Light +2 Zodiac Rooster +1 Righteous Avengers +3 Mountain +2 Wandering Stream +[sideboard] diff --git a/res/quest/decks/Wyatt Earp 3.dck b/res/quest/decks/Wyatt Earp 3.dck new file mode 100644 index 00000000000..3292f655fbc --- /dev/null +++ b/res/quest/decks/Wyatt Earp 3.dck @@ -0,0 +1,36 @@ +Wyatt Earp 3 +[general] +constructed +[main] +1 Bull Cerodon +4 Plateau +3 Druid of the Anima +4 Taiga +1 Cinder Storm +1 Mox Emerald +2 Tranquility +2 Gerrard's Command +3 Harmonize +2 Boil +1 Wheel of Fortune +1 Tolsimir Wolfblood +2 Nacatl Outlander +2 Quirion Dryad +2 Trokin High Guard +1 Mox Pearl +2 Eladamri's Call +1 Regrowth +4 Savannah +3 Skyknight Legionnaire +1 Scalebane's Elite +2 Plains +2 Forest +1 Resurrection +2 Angel of Light +1 Mox Ruby +3 Zodiac Rooster +1 Giant Solifuge +1 Righteous Avengers +2 Mountain +2 Wilt-Leaf Cavaliers +[sideboard] diff --git a/res/quest/decks/quest1.dck b/res/quest/decks/quest1.dck new file mode 100644 index 00000000000..c4440f7bd9b --- /dev/null +++ b/res/quest/decks/quest1.dck @@ -0,0 +1,18 @@ +quest1 +[general] +constructed +[main] +2 Elspeth, Knight-Errant +19 Plains +4 Field Marshal +2 Raise the Alarm +4 Preeminent Captain +4 Mobilization +4 Swords to Plowshares +4 Captain of the Watch +1 Mox Pearl +4 Path to Exile +4 Veteran Swordsmith +4 Honor of the Pure +4 Veteran Armorsmith +[sideboard] diff --git a/res/quest/decks/quest2.dck b/res/quest/decks/quest2.dck new file mode 100644 index 00000000000..17bc0bb3b75 --- /dev/null +++ b/res/quest/decks/quest2.dck @@ -0,0 +1,20 @@ +quest2 +[general] +constructed +[main] +2 Keiga, the Tide Star +1 Mox Sapphire +4 Concentrate +4 Sower of Temptation +2 Arcanis the Omnipotent +4 Control Magic +17 Island +1 Ancestral Recall +4 Echoing Truth +4 Boomerang +4 Sky Diamond +4 Repulse +3 Bribery +2 Memnarch +4 Man-o'-War +[sideboard] diff --git a/res/quest/decks/quest3.dck b/res/quest/decks/quest3.dck new file mode 100644 index 00000000000..3d0f89af791 --- /dev/null +++ b/res/quest/decks/quest3.dck @@ -0,0 +1,21 @@ +quest3 +[general] +constructed +[main] +4 Dark Ritual +2 Anowon, the Ruin Sage +3 Gatekeeper of Malakir +2 Phyrexian Arena +20 Swamp +4 Douse in Gloom +2 Pulse Tracker +1 Shizo, Death's Storehouse +4 Malakir Bloodwitch +4 Vampire Nighthawk +4 Bad Moon +3 Bloodghast +1 Mox Jet +4 Doom Blade +1 Mirri the Cursed +1 Volrath's Stronghold +[sideboard] diff --git a/res/quest/decks/quest8.dck b/res/quest/decks/quest8.dck new file mode 100644 index 00000000000..9688ccc80ab --- /dev/null +++ b/res/quest/decks/quest8.dck @@ -0,0 +1,21 @@ +quest8 +[general] +constructed +[main] +1 Windswept Heath +1 Mox Emerald +2 Arctic Wolves +2 Wolfbriar Elemental +1 Plains +4 Wyluli Wolf +4 Rampant Growth +4 Watchwolf +1 Overrun +4 Howl of the Night Pack +18 Forest +4 Kodama's Reach +2 Muraganda Petroglyphs +4 Bestial Menace +4 Tundra Wolves +4 Savannah +[sideboard] diff --git a/res/quest/quest.properties b/res/quest/quest.properties index 3214bf56a81..f582cfea5d8 100644 --- a/res/quest/quest.properties +++ b/res/quest/quest.properties @@ -3,9 +3,12 @@ uncommon--file=uncommon.txt rare--file=rare.txt price--file=all-prices.txt +quests--file=quests.txt easy--file=easy.txt medium--file=medium.txt hard--file=hard.txt -data--file=questData \ No newline at end of file +data--file=questData + +decks-dir--file=decks \ No newline at end of file diff --git a/res/quest/questData b/res/quest/questData index 7fe549ea23d..cc5f231cdf9 100644 Binary files a/res/quest/questData and b/res/quest/questData differ diff --git a/res/quest/quests.txt b/res/quest/quests.txt new file mode 100644 index 00000000000..934de54dfee --- /dev/null +++ b/res/quest/quests.txt @@ -0,0 +1,82 @@ +1 +Dungeoncrawling (White) +Guarded by white creatures +Medium +Repeatable +25 +Three white rares +100 + +2 +Dungeoncrawling (Blue) +Guarded by blue creatures. +Medium +Repeatable +25 +Three blue rares +100 + +3 +Dungeoncrawling (Black) +Guarded by black creatures. +Medium +Repeatable +25 +Three black rares +100 + +4 +Dungeoncrawling (Red) +Guarded by red creatures. +Medium +Repeatable +25 +Three red rares +100 + +5 +Dungeoncrawling (Green) +Guarded by green creatures. +Medium +Repeatable +25 +Three green rares +100 + +6 +Dungeoncrawling (Colorless) +Guarded by artifact creatures. +Hard +Repeatable +35 +Three colorless rares +150 + +7 +Dungeoncrawling (Gold) +Guarded by gold creatures. +Hard +Repeatable +35 +Three multi-colored rares +150 + +8 +A Wolf in Sheep's Clothing +The local sheep farm is under attack by a pack of wolves. Kill the wolves, save the sheep! +Medium +Not Repeatable +35 +Three random rares +200 + +9 +Bushwhacked! +You find yourself surrounded by carnivorous plants and poisonous vines. Cut your way out of this foresty mess and make it home safe. +Hard +Not Repeatable +50 +Four green rares +225 + +End \ No newline at end of file diff --git a/src/QuestData_State.java b/src/QuestData_State.java index fab745075a0..de61d67cbb1 100644 --- a/src/QuestData_State.java +++ b/src/QuestData_State.java @@ -23,9 +23,12 @@ public class QuestData_State implements Serializable { private static final long serialVersionUID = 7007940230351051937L; int rankIndex, win, lost; + int plantLevel, wolfPetLevel, life, estatesLevel, questsPlayed; long credits; - String difficulty; + String difficulty, mode; + + ArrayList availableQuests, completedQuests; ArrayList cardPool, shopList; HashMap myDecks, aiDecks; @@ -40,6 +43,6 @@ public class QuestData_State implements Serializable { for(Entry deck:this.aiDecks.entrySet()) { aiDecks.put(deck.getKey(), deck.getValue().migrate()); } - return new forge.QuestData_State(rankIndex, win, lost, credits, difficulty, cardPool, shopList, myDecks, aiDecks); + return new forge.QuestData_State(rankIndex, win, lost, plantLevel, wolfPetLevel, life, estatesLevel, questsPlayed, availableQuests, completedQuests,credits, difficulty, mode, cardPool, shopList, myDecks, aiDecks); } } diff --git a/src/forge/AllZone.java b/src/forge/AllZone.java index d04e22492b1..ec2c580c9df 100644 --- a/src/forge/AllZone.java +++ b/src/forge/AllZone.java @@ -14,6 +14,7 @@ public class AllZone implements NewConstants { // public static final IO IO = new IO("all-decks"); public static QuestData QuestData = null; + public static Quest_Assignment QuestAssignment = null; public static final NameChanger NameChanger = new NameChanger(); public static EndOfTurn EndOfTurn = new EndOfTurn(); diff --git a/src/forge/Constant.java b/src/forge/Constant.java index 3b51aa2f272..8c1755a57bc 100644 --- a/src/forge/Constant.java +++ b/src/forge/Constant.java @@ -10,7 +10,7 @@ import javax.swing.ImageIcon; public interface Constant { - public static final String ProgramName = "Forge - 10/2009 - http://mtgrares.blogspot.com"; + public static final String ProgramName = "Forge - 04/2010 - http://mtgrares.blogspot.com"; //used to pass information between the GUI screens public interface Runtime { @@ -121,6 +121,20 @@ public interface Constant { public static final String Snow = "snow"; public static final String ManaColors[] = {White, Blue, Black, Red, Green, Colorless, Snow}; } + + public interface Quest { + public static final boolean[] fantasyQuest = new boolean[1]; + + //public static final Quest_Assignment[] qa = new Quest_Assignment[1]; + + public static final CardList[] humanList = new CardList[1]; + public static final CardList[] computerList = new CardList[1]; + + public static final int[] humanLife = new int[1]; + public static final int[] computerLife = new int[1]; + } + + }//Constant /* diff --git a/src/forge/GameAction.java b/src/forge/GameAction.java index 0d4627f377c..1b52bcab3f6 100644 --- a/src/forge/GameAction.java +++ b/src/forge/GameAction.java @@ -16,6 +16,14 @@ import javax.swing.JOptionPane; public class GameAction { // private StaticEffects staticEffects = new StaticEffects(); + + //private CardList humanList; + //private CardList computerList; + + //private int humanLife; + //private int computerLife; + + //private boolean fantasyQuest = false; //returns null if playes does not have a Planeswalker public Card getPlaneswalker(String player) { @@ -416,7 +424,11 @@ public class GameAction { if(stop) { frame.dispose(); - new Gui_WinLose(); + if (!Constant.Quest.fantasyQuest[0]) + new Gui_WinLose(); + else + new Gui_WinLose(Constant.Quest.humanList[0], Constant.Quest.computerList[0], + Constant.Quest.humanLife[0], Constant.Quest.computerLife[0]); return; } destroyPlaneswalkers(); @@ -458,7 +470,11 @@ public class GameAction { if(stop) { frame.dispose(); - new Gui_WinLose(); + if (!Constant.Quest.fantasyQuest[0]) + new Gui_WinLose(); + else + new Gui_WinLose(Constant.Quest.humanList[0], Constant.Quest.computerList[0], + Constant.Quest.humanLife[0], Constant.Quest.computerLife[0]); return; } //do this twice, sometimes creatures/permanents will survive when they shouldn't @@ -943,27 +959,42 @@ public class GameAction { } //for Quest fantasy mode - public void newGame(Deck humanDeck, Deck computerDeck, CardList human, CardList computer, int humanLife, int computerLife) + public void newGame(Deck humanDeck, Deck computerDeck, CardList human, CardList computer, int humanLife, int computerLife, Quest_Assignment qa) { this.newGame(humanDeck, computerDeck); - AllZone.Computer_Life.setLife(computerLife); - AllZone.Human_Life.setLife(humanLife); + AllZone.Computer_Life.setLife(computerLife); + AllZone.Human_Life.setLife(humanLife); + + if (qa != null) + { + //human.addAll(qa.getHuman().toArray()); + //computer.addAll(qa.getCompy().toArray()); + + computer.addAll(QuestUtil.getComputerCreatures(AllZone.QuestData, AllZone.QuestAssignment).toArray()); + } + + //Constant.Quest.computerList[0] = computer; + + for (Card c : human) + { + AllZone.Human_Play.add(c); + c.setSickness(true); + } - for (Card c : human) - { - AllZone.Human_Play.add(c); - } - - for (Card c: computer) - { - AllZone.Computer_Play.add(c); - } + for (Card c: computer) + { + AllZone.Computer_Play.add(c); + c.setSickness(true); + } + Constant.Quest.fantasyQuest[0] = true; } + public void newGame(Deck humanDeck, Deck computerDeck) { // AllZone.Computer = new ComputerAI_Input(new ComputerAI_General()); - + Constant.Quest.fantasyQuest[0] = false; + lastPlayerToDraw = Constant.Player.Human; AllZone.GameInfo.setComputerCanPlayNumberOfLands(1); @@ -1266,6 +1297,8 @@ public class GameAction { String[] ch = new String[choices.size()]; for(int i = 0; i < choices.size(); i++) { ch[i] = choices.get(i); + if (ch[i].contains("CARDNAME")) + ch[i] = ch[i].replace("CARDNAME", c.getName()); } String choice = AllZone.Display.getChoiceOptional("Choose", ch); @@ -1289,7 +1322,9 @@ public class GameAction { */ if(choices.length == 0) return; else if(choices.length == 1) sa = choices[0]; - else sa = AllZone.Display.getChoiceOptional("Choose", choices); + else { + sa = AllZone.Display.getChoiceOptional("Choose", choices); + } if(sa == null) return; diff --git a/src/forge/GuiDisplay3.java b/src/forge/GuiDisplay3.java index 847dd6b610e..bad8a817d3c 100644 --- a/src/forge/GuiDisplay3.java +++ b/src/forge/GuiDisplay3.java @@ -981,7 +981,16 @@ public class GuiDisplay3 extends JFrame implements CardContainer, Display, NewCo private void concede() { dispose(); Constant.Runtime.WinLose.addLose(); - new Gui_WinLose(); + if (!Constant.Quest.fantasyQuest[0]) + new Gui_WinLose(); + else { + //new Gui_WinLose(Constant.Quest.humanList[0], Constant.Quest.computerList[0],Constant.Quest.humanLife[0], Constant.Quest.computerLife[0]); + CardList humanList = QuestUtil.getHumanPlantAndPet(AllZone.QuestData); + CardList computerList = QuestUtil.getComputerCreatures(AllZone.QuestData); + + int humanLife = QuestUtil.getLife(AllZone.QuestData); + new Gui_WinLose(humanList, computerList, humanLife, 20); + } } public boolean stopEOT() { diff --git a/src/forge/Gui_CardShop.java b/src/forge/Gui_CardShop.java index b7c1cebe3c0..6ed37a55c50 100644 --- a/src/forge/Gui_CardShop.java +++ b/src/forge/Gui_CardShop.java @@ -358,6 +358,16 @@ public class Gui_CardShop extends JFrame implements CardContainer, DeckDisplay, multi = 0.20 + (0.001 *questData.getWin()); if (multi > 0.6) multi = 0.6; + + if (questData.getMode().equals("Fantasy")) + { + if (questData.getEstatesLevel()==1) + multi+=0.01; + else if (questData.getEstatesLevel()==2) + multi+=0.0175; + else if (questData.getEstatesLevel()==3) + multi+=0.025; + } addListeners(); diff --git a/src/forge/Gui_ElixirShop.java b/src/forge/Gui_ElixirShop.java new file mode 100644 index 00000000000..1cb6a4d275c --- /dev/null +++ b/src/forge/Gui_ElixirShop.java @@ -0,0 +1,219 @@ +package forge; + +import java.awt.Dimension; +import java.awt.Font; +import java.awt.Rectangle; +import java.awt.event.ActionEvent; +import java.awt.event.WindowEvent; +import java.io.File; + +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.SwingConstants; + +import forge.error.ErrorViewer; +import forge.properties.ForgeProps; +import forge.properties.NewConstants; + +public class Gui_ElixirShop extends JFrame implements NewConstants{ + + private static final long serialVersionUID = 2409591658245091210L; + + private JFrame shopsGUI; + private JLabel titleLabel = new JLabel(); + + private JLabel potionDescLabel = new JLabel(); + private JLabel potionStatsLabel = new JLabel(); + private JLabel potionPriceLabel = new JLabel(); + private JLabel potionIconLabel = new JLabel(); + + private JLabel creditsLabel = new JLabel(); + + private ImageIcon potionIcon = new ImageIcon(); + + private JButton buyPotionButton = new JButton(); + private JButton quitButton = new JButton(); + + private QuestData questData = AllZone.QuestData; + + public Gui_ElixirShop(JFrame parent) { + try { + jbInit(); + } catch(Exception ex) { + ErrorViewer.showError(ex); + } + + shopsGUI = parent; + + setup(); + + //for some reason, the Bazaar window does not return when closing with X + //for now, just disable X closing: + this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); + + Dimension screen = this.getToolkit().getScreenSize(); + setBounds(screen.width / 3, 100, //position + 530, 430); //size + setVisible(true); + + + } + + //only do this ONCE: + private void setup() { + buyPotionButton.setBounds(new Rectangle(10, 297, 120, 50)); + buyPotionButton.setText(getButtonText()); + //buyPlantButton.setIcon(icon); + buyPotionButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(ActionEvent e) { + try { + buyPotionButton_actionPerformed(e); + } catch (Exception e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + } + }); + + }//setup(); + + private String getDesc() + { + StringBuilder sb = new StringBuilder(); + sb.append(""); + + sb.append("Gives +1 to max Life.
"); + sb.append("Current life:" + questData.getLife()); + + sb.append(""); + return sb.toString(); + } + + private long getPrice() + { + long l = 0; + if (questData.getLife() < 20) + l = 250; + else if (questData.getLife() < 25) + l = 500; + + return l; + } + + private String getButtonText() + { + return "Buy Elixir"; + } + + private String getStats() + { + return "Elixir of Health"; + } + + private String getImageString() + { + return "ElixirIcon.png"; + } + + private void jbInit() throws Exception { + titleLabel.setFont(new java.awt.Font("sserif", Font.BOLD, 22)); + titleLabel.setHorizontalAlignment(SwingConstants.CENTER); + titleLabel.setText("Apothecary"); + titleLabel.setBounds(new Rectangle(130, 5, 198, 60)); + this.getContentPane().setLayout(null); + + potionStatsLabel.setFont(new Font("sserif", Font.BOLD, 12)); + potionStatsLabel.setText(getStats()); + potionStatsLabel.setBounds(new Rectangle(10, 65, 100, 15)); + + potionDescLabel.setFont(new Font("sserif", 0, 12)); + potionDescLabel.setText(getDesc()); + potionDescLabel.setBounds(new Rectangle(10, 80, 300, 150)); + + potionPriceLabel.setFont(new Font("sserif", 0, 12)); + potionPriceLabel.setText("Price: " + getPrice() + " credits"); + potionPriceLabel.setBounds(new Rectangle(10, 230, 150, 15)); + + creditsLabel.setFont(new Font("sserif", 0, 12)); + creditsLabel.setText("Credits: " + questData.getCredits()); + creditsLabel.setBounds(new Rectangle(10, 265, 150, 15)); + + potionIcon = getIcon(getImageString()); + potionIconLabel.setText(""); + potionIconLabel.setIcon(potionIcon); + potionIconLabel.setBounds(new Rectangle(280, 65, 201, 280)); + potionIconLabel.setIconTextGap(0); + + //String fileName = "LeafIconSmall.png"; + //ImageIcon icon = getIcon(fileName); + + buyPotionButton.setEnabled(true); + if (questData.getCredits() < getPrice()) + buyPotionButton.setEnabled(false); + + quitButton.setBounds(new Rectangle(140, 297, 120, 50)); + quitButton.setText("Quit"); + quitButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(ActionEvent e) { + quitButton_actionPerformed(e); + } + }); + + + //jPanel2.add(quitButton, null); + this.getContentPane().add(buyPotionButton, null); + this.getContentPane().add(titleLabel, null); + this.getContentPane().add(potionStatsLabel, null); + this.getContentPane().add(potionDescLabel, null); + this.getContentPane().add(potionIconLabel, null); + this.getContentPane().add(potionPriceLabel, null); + this.getContentPane().add(creditsLabel, null); + this.getContentPane().add(quitButton,null); + } + + void editDeckButton_actionPerformed(ActionEvent e) { + Command exit = new Command() { + private static final long serialVersionUID = 4735992294414389187L; + + public void execute() { + new Gui_WinLose(); + } + }; + Gui_DeckEditor editor = new Gui_DeckEditor(); + + editor.show(exit); + + dispose(); + }//editDeckButton_actionPerformed() + + void buyPotionButton_actionPerformed(ActionEvent e) throws Exception { + questData.subtractCredits(getPrice()); + questData.addLife(1); + QuestData.saveData(questData); + jbInit(); + } + + private ImageIcon getIcon(String fileName) + { + File base = ForgeProps.getFile(IMAGE_ICON); + File file = new File(base, fileName); + ImageIcon icon = new ImageIcon(file.toString()); + return icon; + } + + void quitButton_actionPerformed(ActionEvent e) { + QuestData.saveData(questData); + //new Gui_Shops(); + shopsGUI.setVisible(true); + + dispose(); + + } + + void this_windowClosing(WindowEvent e) { + quitButton_actionPerformed(null); + } + +} diff --git a/src/forge/Gui_PetShop.java b/src/forge/Gui_PetShop.java new file mode 100644 index 00000000000..e85c732114b --- /dev/null +++ b/src/forge/Gui_PetShop.java @@ -0,0 +1,282 @@ +package forge; + +import java.awt.Dimension; +import java.awt.Font; +import java.awt.Rectangle; +import java.awt.event.ActionEvent; +import java.awt.event.WindowEvent; +import java.io.File; + +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.SwingConstants; + +import forge.error.ErrorViewer; +import forge.properties.ForgeProps; +import forge.properties.NewConstants; + +public class Gui_PetShop extends JFrame implements NewConstants{ + + private static final long serialVersionUID = -2910767196498677881L; + private JFrame shopsGUI; + private JLabel titleLabel = new JLabel(); + + private JLabel wolfPetDescLabel = new JLabel(); + private JLabel wolfPetStatsLabel = new JLabel(); + private JLabel wolfPetPriceLabel = new JLabel(); + private JLabel wolfPetIconLabel = new JLabel(); + + private JLabel creditsLabel = new JLabel(); + + private ImageIcon wolfPetIcon = new ImageIcon(); + + private JButton buyWolfPetButton = new JButton(); + private JButton quitButton = new JButton(); + + private QuestData questData = AllZone.QuestData; + + public Gui_PetShop(JFrame parent) { + try { + jbInit(); + } catch(Exception ex) { + ErrorViewer.showError(ex); + } + + shopsGUI = parent; + + setup(); + + //for some reason, the Bazaar window does not return when closing with X + //for now, just disable X closing: + this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); + + Dimension screen = this.getToolkit().getScreenSize(); + setBounds(screen.width / 3, 100, //position + 530, 430); //size + setVisible(true); + + + } + + //only do this ONCE: + private void setup() { + //String fileName = "LeafIconSmall.png"; + //ImageIcon icon = getIcon(fileName); + buyWolfPetButton.setBounds(new Rectangle(10, 297, 120, 50)); + buyWolfPetButton.setText(getButtonText("Wolf")); + //buyPlantButton.setIcon(icon); + buyWolfPetButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(ActionEvent e) { + try { + buyPetButton_actionPerformed(e); + } catch (Exception e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + } + }); + + }//setup(); + + private String getDesc() + { + StringBuilder sb = new StringBuilder(); + sb.append(""); + if (questData.getWolfPetLevel() == 0) + { + sb.append("This ferocious animal may have been raised
in captivity, but it has been trained to kill.
"); + sb.append("Eats goblins for breakfast.

"); + sb.append("Level 1: 1/1
"); + sb.append("Next Level: 1/2
"); + sb.append("Can learn: Flanking"); + } + else if (questData.getWolfPetLevel() == 1) + { + sb.append("Improve the toughness of your wolf.
"); + sb.append("Level 2: 1/2
"); + sb.append("Next Level: 2/2
"); + sb.append("Can learn: Flanking"); + } + else if (questData.getWolfPetLevel() == 2) + { + sb.append("Improve the attack power of your wolf.
"); + sb.append("Level 3: 2/2
"); + sb.append("Next Level: Flanking
"); + sb.append("Can learn: Flanking"); + } + else if (questData.getWolfPetLevel() == 3) + { + sb.append("Gives Flanking to your Wolf.
"); + sb.append("Level 4: 2/2 Flanking
"); + } + + sb.append(""); + return sb.toString(); + } + + private long getPrice() + { + long l = 0; + if (questData.getWolfPetLevel() == 0) + l = 250; + else if (questData.getWolfPetLevel() == 1) + l = 250; + else if (questData.getWolfPetLevel() == 2) + l = 500; + else if (questData.getWolfPetLevel() == 3) + l = 550; + return l; + } + + private String getButtonText(String pet) + { + String s = ""; + if (pet.equals("Wolf")) { + if (questData.getWolfPetLevel() == 0) + s = "Buy " + pet; + else + s = "Train " + pet; + } + return s; + } + + private String getWolfStats() + { + StringBuilder sb = new StringBuilder(); + if (questData.getWolfPetLevel() == 0) + sb.append("1/1"); + else if (questData.getWolfPetLevel() == 1) + sb.append("1/2"); + else if (questData.getWolfPetLevel() == 2) + sb.append("2/2"); + else if (questData.getWolfPetLevel() == 3) + sb.append("2/2"); + + sb.append(" Wolf Pet"); + + return sb.toString(); + } + + private String getImageString() + { + String s = ""; + if (questData.getWolfPetLevel() == 0) + s = "g_1_1_wolf_pet_small.jpg"; + else if (questData.getWolfPetLevel() == 1) + s = "g_1_2_wolf_pet_small.jpg"; + else if (questData.getWolfPetLevel() == 2) + s = "g_2_2_wolf_pet_small.jpg"; + else if (questData.getWolfPetLevel() == 3) + s = "g_2_2_wolf_pet_flanking_small.jpg"; + + return s; + } + + private void jbInit() throws Exception { + titleLabel.setFont(new java.awt.Font("sserif", Font.BOLD, 22)); + titleLabel.setHorizontalAlignment(SwingConstants.CENTER); + titleLabel.setText("Beast Emporium"); + titleLabel.setBounds(new Rectangle(150, 5, 198, 60)); + this.getContentPane().setLayout(null); + + wolfPetStatsLabel.setFont(new Font("sserif", Font.BOLD, 12)); + wolfPetStatsLabel.setText(getWolfStats()); + wolfPetStatsLabel.setBounds(new Rectangle(10, 65, 100, 15)); + + wolfPetDescLabel.setFont(new Font("sserif", 0, 12)); + wolfPetDescLabel.setText(getDesc()); + wolfPetDescLabel.setBounds(new Rectangle(10, 80, 300, 150)); + + wolfPetPriceLabel.setFont(new Font("sserif", 0, 12)); + wolfPetPriceLabel.setText("Price: " + getPrice() + " credits"); + wolfPetPriceLabel.setBounds(new Rectangle(10, 230, 150, 15)); + + creditsLabel.setFont(new Font("sserif", 0, 12)); + creditsLabel.setText("Credits: " + questData.getCredits()); + creditsLabel.setBounds(new Rectangle(10, 265, 150, 15)); + + wolfPetIcon = getIcon(getImageString()); + wolfPetIconLabel.setText(""); + wolfPetIconLabel.setIcon(wolfPetIcon); + wolfPetIconLabel.setBounds(new Rectangle(280, 65, 201, 280)); + wolfPetIconLabel.setIconTextGap(0); + + buyWolfPetButton.setEnabled(true); + if (questData.getCredits() < getPrice()) + buyWolfPetButton.setEnabled(false); + + quitButton.setBounds(new Rectangle(140, 297, 120, 50)); + quitButton.setText("Quit"); + quitButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(ActionEvent e) { + quitButton_actionPerformed(e); + } + }); + + + //jPanel2.add(quitButton, null); + this.getContentPane().add(buyWolfPetButton, null); + this.getContentPane().add(titleLabel, null); + this.getContentPane().add(wolfPetStatsLabel, null); + this.getContentPane().add(wolfPetDescLabel, null); + this.getContentPane().add(wolfPetIconLabel, null); + this.getContentPane().add(wolfPetPriceLabel, null); + this.getContentPane().add(creditsLabel, null); + this.getContentPane().add(quitButton,null); + } + + void editDeckButton_actionPerformed(ActionEvent e) { + Command exit = new Command() { + private static final long serialVersionUID = 4735992294414389187L; + + public void execute() { + new Gui_WinLose(); + } + }; + Gui_DeckEditor editor = new Gui_DeckEditor(); + + editor.show(exit); + + dispose(); + }//editDeckButton_actionPerformed() + + void buyPetButton_actionPerformed(ActionEvent e) throws Exception { + questData.subtractCredits(getPrice()); + questData.addWolfPetLevel(); + QuestData.saveData(questData); + jbInit(); + } + + void restartButton_actionPerformed(ActionEvent e) { + Constant.Runtime.WinLose.reset(); + AllZone.GameAction.newGame(Constant.Runtime.HumanDeck[0], Constant.Runtime.ComputerDeck[0]); + AllZone.Display.setVisible(true); + + dispose(); + } + + private ImageIcon getIcon(String fileName) + { + File base = ForgeProps.getFile(IMAGE_ICON); + File file = new File(base, fileName); + ImageIcon icon = new ImageIcon(file.toString()); + return icon; + } + + void quitButton_actionPerformed(ActionEvent e) { + QuestData.saveData(questData); + //new Gui_Shops(); + shopsGUI.setVisible(true); + + + dispose(); + + } + + void this_windowClosing(WindowEvent e) { + quitButton_actionPerformed(null); + } + +} diff --git a/src/forge/Gui_PlantShop.java b/src/forge/Gui_PlantShop.java new file mode 100644 index 00000000000..f2434fb0191 --- /dev/null +++ b/src/forge/Gui_PlantShop.java @@ -0,0 +1,288 @@ +package forge; + +import java.awt.Dimension; +import java.awt.Font; +import java.awt.Rectangle; +import java.awt.event.ActionEvent; +import java.awt.event.WindowEvent; +import java.io.File; + +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.SwingConstants; + +import forge.error.ErrorViewer; +import forge.properties.ForgeProps; +import forge.properties.NewConstants; + +public class Gui_PlantShop extends JFrame implements NewConstants{ + + private static final long serialVersionUID = 2409591658245091210L; + private JFrame shopsGUI; + private JLabel titleLabel = new JLabel(); + + private JLabel plantDescLabel = new JLabel(); + private JLabel plantStatsLabel = new JLabel(); + private JLabel plantPriceLabel = new JLabel(); + private JLabel plantIconLabel = new JLabel(); + + private JLabel creditsLabel = new JLabel(); + + private ImageIcon plantIcon = new ImageIcon(); + + private JButton buyPlantButton = new JButton(); + private JButton quitButton = new JButton(); + + private QuestData questData = AllZone.QuestData; + + public Gui_PlantShop(JFrame parent) { + try { + jbInit(); + } catch(Exception ex) { + ErrorViewer.showError(ex); + } + + shopsGUI = parent; + + setup(); + + //for some reason, the Bazaar window does not return when closing with X + //for now, just disable X closing: + this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); + + Dimension screen = this.getToolkit().getScreenSize(); + setBounds(screen.width / 3, 100, //position + 530, 430); //size + setVisible(true); + + } + + private void setup() { + //buyPlantButton.setIcon(icon); + buyPlantButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(ActionEvent e) { + try { + buyPlantButton_actionPerformed(e); + } catch (Exception e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + } + }); + + }//setup(); + + private String getDesc() + { + StringBuilder sb = new StringBuilder(); + sb.append(""); + if (questData.getPlantLevel() == 0) + { + sb.append("Start each of your battles with this lush,
verdant plant on your side.
"); + sb.append("Excellent at blocking the nastiest of critters!

"); + sb.append("Level 1: 0/1
"); + sb.append("Next Level: 0/2
"); + sb.append("Can learn: Deathtouch"); + } + else if (questData.getPlantLevel() == 1) + { + sb.append("Improve the toughness of your plant.
"); + sb.append("Level 2: 0/2
"); + sb.append("Next Level: 0/3
"); + sb.append("Can learn: Deathtouch"); + } + else if (questData.getPlantLevel() == 2) + { + sb.append("Improve the toughness of your plant.
"); + sb.append("Level 3: 0/3
"); + sb.append("Next Level: 1/3
"); + sb.append("Can learn: Deathtouch"); + } + else if (questData.getPlantLevel() == 3) + { + sb.append("Improve the power of your plant.
"); + sb.append("Level 4: 1/3
"); + sb.append("Next Level: Deathtouch
"); + sb.append("Can learn: Deathtouch"); + } + else if (questData.getPlantLevel() == 4) + { + sb.append("Grow venomous thorns on your plant.
"); + sb.append("Level 5: Deathtouch
"); + } + + sb.append(""); + return sb.toString(); + } + + private long getPrice() + { + long l = 0; + if (questData.getPlantLevel() == 0) + l = 100; + else if (questData.getPlantLevel() == 1) + l = 150; + else if (questData.getPlantLevel() == 2) + l = 200; + else if (questData.getPlantLevel() == 3) + l = 300; + else if (questData.getPlantLevel() == 4) + l = 750; + return l; + } + + private String getButtonText() + { + String s = ""; + if (questData.getPlantLevel() == 0) + s = "Buy Plant"; + else + s = "Upgrade Plant"; + return s; + } + + private String getStats() + { + StringBuilder sb = new StringBuilder(); + if (questData.getPlantLevel() == 0) + sb.append("0/1"); + else if (questData.getPlantLevel() == 1) + sb.append("0/2"); + else if (questData.getPlantLevel() == 2) + sb.append("0/3"); + else if (questData.getPlantLevel() == 3) + sb.append("1/3"); + + sb.append(" Plant Wall"); + + return sb.toString(); + } + + private String getImageString() + { + String s = ""; + if (questData.getPlantLevel() == 0) + s = "g_0_1_plant_wall_small.jpg"; + else if (questData.getPlantLevel() == 1) + s = "g_0_2_plant_wall_small.jpg"; + else if (questData.getPlantLevel() == 2) + s = "g_0_3_plant_wall_small.jpg"; + else if (questData.getPlantLevel() == 3) + s = "g_1_3_plant_wall_small.jpg"; + + return s; + } + + private void jbInit() throws Exception { + titleLabel.setFont(new java.awt.Font("sserif", Font.BOLD, 22)); + titleLabel.setHorizontalAlignment(SwingConstants.CENTER); + titleLabel.setText("Plant Nursery"); + titleLabel.setBounds(new Rectangle(130, 5, 198, 60)); + this.getContentPane().setLayout(null); + + plantStatsLabel.setFont(new Font("sserif", Font.BOLD, 12)); + plantStatsLabel.setText(getStats()); + plantStatsLabel.setBounds(new Rectangle(10, 65, 100, 15)); + + plantDescLabel.setFont(new Font("sserif", 0, 12)); + plantDescLabel.setText(getDesc()); + plantDescLabel.setBounds(new Rectangle(10, 80, 300, 150)); + + plantPriceLabel.setFont(new Font("sserif", 0, 12)); + plantPriceLabel.setText("Price: " + getPrice() + " credits"); + plantPriceLabel.setBounds(new Rectangle(10, 230, 150, 15)); + + creditsLabel.setFont(new Font("sserif", 0, 12)); + creditsLabel.setText("Credits: " + questData.getCredits()); + creditsLabel.setBounds(new Rectangle(10, 265, 150, 15)); + + plantIcon = getIcon(getImageString()); + plantIconLabel.setText(""); + plantIconLabel.setIcon(plantIcon); + plantIconLabel.setBounds(new Rectangle(280, 65, 201, 280)); + plantIconLabel.setIconTextGap(0); + + //String fileName = "LeafIconSmall.png"; + //ImageIcon icon = getIcon(fileName); + buyPlantButton.setBounds(new Rectangle(10, 297, 120, 50)); + buyPlantButton.setText(getButtonText()); + + + buyPlantButton.setEnabled(true); + if (questData.getCredits() < getPrice()) + buyPlantButton.setEnabled(false); + + quitButton.setBounds(new Rectangle(140, 297, 120, 50)); + quitButton.setText("Quit"); + quitButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(ActionEvent e) { + quitButton_actionPerformed(e); + } + }); + + + //jPanel2.add(quitButton, null); + this.getContentPane().add(buyPlantButton, null); + this.getContentPane().add(titleLabel, null); + this.getContentPane().add(plantStatsLabel, null); + this.getContentPane().add(plantDescLabel, null); + this.getContentPane().add(plantIconLabel, null); + this.getContentPane().add(plantPriceLabel, null); + this.getContentPane().add(creditsLabel, null); + this.getContentPane().add(quitButton,null); + } + + void editDeckButton_actionPerformed(ActionEvent e) { + Command exit = new Command() { + private static final long serialVersionUID = 4735992294414389187L; + + public void execute() { + new Gui_WinLose(); + } + }; + Gui_DeckEditor editor = new Gui_DeckEditor(); + + editor.show(exit); + + dispose(); + }//editDeckButton_actionPerformed() + + void buyPlantButton_actionPerformed(ActionEvent e) throws Exception { + questData.subtractCredits(getPrice()); + questData.addPlantLevel(); + jbInit(); + } + + void restartButton_actionPerformed(ActionEvent e) { + Constant.Runtime.WinLose.reset(); + AllZone.GameAction.newGame(Constant.Runtime.HumanDeck[0], Constant.Runtime.ComputerDeck[0]); + AllZone.Display.setVisible(true); + + dispose(); + } + + private ImageIcon getIcon(String fileName) + { + File base = ForgeProps.getFile(IMAGE_ICON); + File file = new File(base, fileName); + ImageIcon icon = new ImageIcon(file.toString()); + return icon; + } + + void quitButton_actionPerformed(ActionEvent e) { + QuestData.saveData(questData); + //new Gui_Shops(); + shopsGUI.setVisible(true); + + + dispose(); + + } + + void this_windowClosing(WindowEvent e) { + quitButton_actionPerformed(null); + } + +} diff --git a/src/forge/Gui_Quest.java b/src/forge/Gui_Quest.java index 61f76800845..4c6a49ee265 100644 --- a/src/forge/Gui_Quest.java +++ b/src/forge/Gui_Quest.java @@ -5,45 +5,56 @@ import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; +import java.io.File; import java.util.ArrayList; import java.util.Collections; import javax.swing.BorderFactory; import javax.swing.ButtonGroup; +import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; +import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JRadioButton; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; import javax.swing.SwingConstants; import javax.swing.border.Border; import javax.swing.border.TitledBorder; import forge.error.ErrorViewer; +import forge.properties.ForgeProps; +import forge.properties.NewConstants; //presumes AllZone.QuestData is not null //AllZone.QuestData should be set by Gui_QuestOptions -public class Gui_Quest extends JFrame { +public class Gui_Quest extends JFrame implements NewConstants{ private static final long serialVersionUID = -6432089669283627896L; private QuestData questData; private JLabel jLabel1 = new JLabel(); - private JLabel difficultlyLabel = new JLabel(); + private JLabel difficultyLabel = new JLabel(); private JLabel winLostLabel = new JLabel(); private JLabel rankLabel = new JLabel(); private JLabel creditsLabel = new JLabel(); + private JLabel lifeLabel = new JLabel(); @SuppressWarnings("unused") // border1 private Border border1; private TitledBorder titledBorder1; + private JButton infoButton = new JButton(); + private JButton otherShopsButton = new JButton(); private JButton cardShopButton = new JButton(); private JButton deckEditorButton = new JButton(); private JPanel jPanel2 = new JPanel(); private JButton playGameButton = new JButton(); + private JButton questsButton = new JButton(); private JRadioButton oppTwoRadio = new JRadioButton(); private JRadioButton oppOneRadio = new JRadioButton(); private JRadioButton oppThreeRadio = new JRadioButton(); @@ -59,13 +70,13 @@ public class Gui_Quest extends JFrame { } public Gui_Quest() { - try { + questData = AllZone.QuestData; + + try { jbInit(); } catch(Exception ex) { ErrorViewer.showError(ex); } - - questData = AllZone.QuestData; setup(); setVisible(true); @@ -75,7 +86,7 @@ public class Gui_Quest extends JFrame { //center window on the screen Dimension screen = this.getToolkit().getScreenSize(); setBounds(screen.width / 4, 50, //position - 500, 610); //size + 500, 660); //size //if user closes this window, go back to "Quest Options" screen this.addWindowListener(new WindowAdapter() { @@ -87,10 +98,18 @@ public class Gui_Quest extends JFrame { }); //set labels - difficultlyLabel.setText(questData.getDifficulty()); + difficultyLabel.setText(questData.getDifficulty() + " - " + questData.getMode()); rankLabel.setText(questData.getRank()); creditsLabel.setText("Credits: " + questData.getCredits()); + if (questData.getMode().equals("Fantasy")) + { + int life = questData.getLife(); + if (life<15) + questData.setLife(15); + lifeLabel.setText("Max Life: "+questData.getLife()); + } + String s = questData.getWin() + " wins / " + questData.getLost() + " losses"; winLostLabel.setText(s); @@ -120,10 +139,10 @@ public class Gui_Quest extends JFrame { this.setResizable(false); this.setTitle("Quest Mode"); this.getContentPane().setLayout(null); - difficultlyLabel.setText("Medium"); - difficultlyLabel.setBounds(new Rectangle(1, 52, 453, 41)); - difficultlyLabel.setFont(new java.awt.Font("Dialog", 0, 25)); - difficultlyLabel.setHorizontalAlignment(SwingConstants.CENTER); + difficultyLabel.setText("Medium"); + difficultyLabel.setBounds(new Rectangle(1, 52, 453, 41)); + difficultyLabel.setFont(new java.awt.Font("Dialog", 0, 25)); + difficultyLabel.setHorizontalAlignment(SwingConstants.CENTER); winLostLabel.setText("23 wins / 10 losses"); winLostLabel.setBounds(new Rectangle(1, 130, 453, 43)); winLostLabel.setFont(new java.awt.Font("Dialog", 0, 25)); @@ -133,12 +152,50 @@ public class Gui_Quest extends JFrame { rankLabel.setBounds(new Rectangle(1, 93, 453, 37)); rankLabel.setFont(new java.awt.Font("Dialog", 0, 25)); rankLabel.setHorizontalAlignment(SwingConstants.CENTER); - creditsLabel.setBounds(new Rectangle(1, 170, 453, 37)); + creditsLabel.setBounds(new Rectangle(1, 175, 453, 15)); //creditsLabel.setText("Credits: 1000"); creditsLabel.setHorizontalAlignment(SwingConstants.CENTER); creditsLabel.setHorizontalTextPosition(SwingConstants.CENTER); - cardShopButton.setBounds(new Rectangle(291, 100, 142, 38)); + + infoButton.setBounds(new Rectangle(15, 25, 142, 28)); + infoButton.setFont(new java.awt.Font("Dialog", 0, 14)); + infoButton.setText("Opponent Notes"); + infoButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(ActionEvent e) { + infoButton_actionPerformed(e); + } + }); + + //if (questData.getMode().equals("Fantasy")) + if ("Fantasy".equals(questData.getMode())) + { + + lifeLabel.setBounds(new Rectangle(1, 195, 453, 15)); + lifeLabel.setHorizontalAlignment(SwingConstants.CENTER); + lifeLabel.setHorizontalTextPosition(SwingConstants.CENTER); + + otherShopsButton.setBounds(new Rectangle(291, 60, 142, 38)); + otherShopsButton.setFont(new java.awt.Font("Dialog", 0, 18)); + otherShopsButton.setText("Bazaar"); + otherShopsButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(ActionEvent e) { + otherShopsButton_actionPerformed(e); + } + }); + + questsButton.setBounds(new Rectangle(150, 558, 161, 37)); + questsButton.setFont(new java.awt.Font("Dialog", 0, 18)); + questsButton.setText("Quests"); + questsButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(ActionEvent e) { + questsButton_actionPerformed(e); + } + }); + + } + + cardShopButton.setBounds(new Rectangle(291, 104, 142, 38)); cardShopButton.setFont(new java.awt.Font("Dialog", 0, 18)); cardShopButton.setText("Card Shop"); cardShopButton.addActionListener(new java.awt.event.ActionListener() { @@ -166,6 +223,8 @@ public class Gui_Quest extends JFrame { playGameButton_actionPerformed(e); } }); + + oppTwoRadio.setText("Bob"); oppTwoRadio.setBounds(new Rectangle(15, 75, 250, 41)); oppOneRadio.setSelected(true); @@ -187,14 +246,20 @@ public class Gui_Quest extends JFrame { //resizeCheckbox.setSelected(true); this.getContentPane().add(rankLabel, null); this.getContentPane().add(jLabel1, null); - this.getContentPane().add(difficultlyLabel, null); + this.getContentPane().add(difficultyLabel, null); this.getContentPane().add(winLostLabel, null); this.getContentPane().add(creditsLabel,null); jPanel2.add(jLabel5, null); + jPanel2.add(infoButton, null); jPanel2.add(deckComboBox, null); jPanel2.add(oppOneRadio, null); jPanel2.add(oppTwoRadio, null); jPanel2.add(oppThreeRadio, null); + if ("Fantasy".equals(questData.getMode())) { + jPanel2.add(otherShopsButton, null); + this.getContentPane().add(lifeLabel,null); + this.getContentPane().add(questsButton, null); + } jPanel2.add(cardShopButton, null); jPanel2.add(deckEditorButton, null); this.getContentPane().add(playGameButton, null); @@ -207,6 +272,245 @@ public class Gui_Quest extends JFrame { oppGroup.add(oppThreeRadio); } + void refreshCredits() + { + creditsLabel.setText("Credits: " + questData.getCredits()); + } + + void refreshLife() + { + lifeLabel.setText("Max Life: " + questData.getLife()); + } + + //make sure credits/life get updated after shopping at bazaar + public void setVisible(boolean b) + { + refreshCredits(); + refreshLife(); + super.setVisible(b); + } + + void infoButton_actionPerformed(ActionEvent e) + { + + + StringBuilder sb = new StringBuilder(); + sb.append("Abraham Lincoln hard Some flying creatures with Flamebreak and life gaining"); + sb.append("\r\n"); + sb.append("Albert Einstein 2 medium Garruk Wildspeaker, W+G creatures with Needle Storm and Retribution of the Meek"); + sb.append("\r\n"); + sb.append("Albert Einstein 3 hard Stronger version of the above deck"); + sb.append("\r\n"); + sb.append("Bart Simpson 1 easy AI has creatures that will tap your creatures and will use auras to keep them tapped"); + sb.append("\r\n"); + sb.append("Bart Simpson 2 medium AI has creatures that will tap your creatures and will use auras to keep them tapped"); + sb.append("\r\n"); + sb.append("Bart Simpson 3 hard AI has creatures that will tap your creatures and will use auras to keep them tapped"); + sb.append("\r\n"); + sb.append("Batman hard Creatures with Exalted and Unblockable abilities, WoG and Armageddon"); + sb.append("\r\n"); + sb.append("Bela Lugosi hard Rares' Vampire deck, B creatures, little to no spells"); + sb.append("\r\n"); + sb.append("Blackbeard hard Soldiers with Preeminent Captain, WoG and Armageddon"); + sb.append("\r\n"); + sb.append("Boba Fett hard Dragons, Chandra Nalaar, Crucible of Fire and Dragon Roost"); + sb.append("\r\n"); + sb.append("Buffy 1 easy Vampires and creatures with wither + Sorceress Queen"); + sb.append("\r\n"); + sb.append("Buffy 2 medium Vampires and creatures with wither + Sorceress Queen"); + sb.append("\r\n"); + sb.append("Buffy 3 hard Vampires and creatures with wither + Sorceress Queen"); + sb.append("\r\n"); + sb.append("C3PO hard Goblins, Goblin Ringleader, Kiki-Jiki, Mad Auntie and Sensation Gorger"); + sb.append("\r\n"); + sb.append("Catwoman 1 easy Cat creatures G+W"); + sb.append("\r\n"); + sb.append("Catwoman 2 medium Cats creatures G+W+R with Lightning Helix"); + sb.append("\r\n"); + sb.append("Comic Book Guy hard Dragons, Chandra Nalaar, Crucible of Fire + Enlightened Tutor, Moat"); + sb.append("\r\n"); + sb.append("Crocodile Dundee 1 easy Some Mountainwalk creatures, Rakka Mar"); + sb.append("\r\n"); + sb.append("Crocodile Dundee 2 medium Some Mountainwalk creatures, Kamahl, Pit Fighter"); + sb.append("\r\n"); + sb.append("Crocodile Dundee 3 hard Some Mountainwalk creatures, Kamahl, Pit Fighter"); + sb.append("\r\n"); + sb.append("Cyclops hard Slivers mainly, some spells"); + sb.append("\r\n"); + sb.append("Da Vinci 1 easy Some Swampwalk creatures, Morph creatures + discard spells"); + sb.append("\r\n"); + sb.append("Da Vinci 2 medium Some Swampwalk creatures, Morph creatures + drain/gain life spells"); + sb.append("\r\n"); + sb.append("Da Vinci 3 hard Some Swampwalk creatures, Morph creatures + Angel of Despair"); + sb.append("\r\n"); + sb.append("Darth Vader hard UW Battle of Wits style alternate win type deck, WoG"); + sb.append("\r\n"); + sb.append("Data hard Korlash, Heir to Blackblade, Liliana Vess"); + sb.append("\r\n"); + sb.append("Doc Holiday 1 easy Morph + Regenerate GWU creatures"); + sb.append("\r\n"); + sb.append("Doc Holiday 2 medium Morph + Regenerate GWU creatures"); + sb.append("\r\n"); + sb.append("Doc Holiday 3 hard Morph + Regenerate GWU creatures"); + sb.append("\r\n"); + sb.append("Dr No hard The Rack, Balance, Propaganda, discard spells"); + sb.append("\r\n"); + sb.append("Fat Albert 1 easy Winter Orb, Keldon Warlord, mana Elves/Slivers + several 4/4 creatures"); + sb.append("\r\n"); + sb.append("Fat Albert 2 medium Winter Orb, Keldon Warlord, mana Elves/Slivers + several 5/5 creatures"); + sb.append("\r\n"); + sb.append("Fat Albert 3 hard Winter Orb, Keldon Warlord, mana Elves/Slivers + several 6/6 creatures"); + sb.append("\r\n"); + sb.append("Frodo 1 easy New, Apthaven's AI Zoo Easy, some creature removal"); + sb.append("\r\n"); + sb.append("Frodo 2 medium New, Apthaven's AI Zoo Medium, some creature removal + Glorious Anthem"); + sb.append("\r\n"); + sb.append("Frodo 3 hard New, Apthaven's AI Zoo Hard, more creature removal + Glorious Anthems"); + sb.append("\r\n"); + sb.append("Genghis Khan 1 easy Mana Elves + Birds + Armageddon, Llanowar Behemoth"); + sb.append("\r\n"); + sb.append("Genghis Khan 2 medium Mana Elves + Birds + Armageddon, Llanowar Behemoth"); + sb.append("\r\n"); + sb.append("Genghis Khan 3 hard Mana Elves + Birds + Armageddon, Llanowar Behemoth + Elspeth, Knight-Errant"); + sb.append("\r\n"); + sb.append("Gold Finger hard Rares' U control deck, various counter spells and Serra Sphinx + Memnarch"); + sb.append("\r\n"); + sb.append("Green Lantern hard Nicol Bolas, Planeswalker + threat removal and several creatures"); + sb.append("\r\n"); + sb.append("Harry Potter hard Beached As' deck, various milling cards, some speed up and counter spells"); + sb.append("\r\n"); + sb.append("Han Solo hard WG enchantments deck with Sigil of the Empty Throne"); + sb.append("\r\n"); + sb.append("Homer Simpson 1 easy Morph + Regenerate BRU creatures, + Raise Dead"); + sb.append("\r\n"); + sb.append("Homer Simpson 2 medium Morph + Regenerate BRU creatures, + Raise Dead"); + sb.append("\r\n"); + sb.append("Homer Simpson 3 hard Morph + Regenerate BRU creatures, + card draw and creature buff"); + sb.append("\r\n"); + sb.append("Iceman hard BU Bounce and Control style deck"); + sb.append("\r\n"); + sb.append("Indiana Jones 1 easy Sol'kanar + buff"); + sb.append("\r\n"); + sb.append("Indiana Jones 2 medium Sol'kanar + buff + Raise Dead"); + sb.append("\r\n"); + sb.append("Indiana Jones 3 hard Sol'kanar + buff + Terminate"); + sb.append("\r\n"); + sb.append("Jabba the Hut hard Creatures with exalted and land walking abilities"); + sb.append("\r\n"); + sb.append("James Bond 1 easy gohongohon's easy WG Agro with several Slivers"); + sb.append("\r\n"); + sb.append("James Bond 2 medium gohongohon's Medium WG Agro with several Slivers + Glorious Anthem"); + sb.append("\r\n"); + sb.append("James Bond 3 hard gohongohon's Hard WGR Agro"); + sb.append("\r\n"); + sb.append("James T Kirk hard Rares 40 card black discard deck + Liliana Vess"); + sb.append("\r\n"); + sb.append("King Edward 1 easy Elementals, 5 color deck with Tribal Flames"); + sb.append("\r\n"); + sb.append("King Edward 2 medium Elementals, 5 color deck with Tribal Flames"); + sb.append("\r\n"); + sb.append("King Edward 3 hard Elementals, 5 color deck with Tribal Flames featuring Horde of Notions"); + sb.append("\r\n"); + sb.append("Kojak 1 easy Some Islandwalk creatures GU + filler"); + sb.append("\r\n"); + sb.append("Kojak 2 medium Some Islandwalk creatures GU + filler"); + sb.append("\r\n"); + sb.append("Kojak 3 hard Some Islandwalk creatures GUB + filler"); + sb.append("\r\n"); + sb.append("Lisa Simpson hard GW deck, creates tokens which are devoured by Skullmulcher and Gluttonous Slime"); + sb.append("\r\n"); + sb.append("Luke Skywalker hard GWU weenie style deck with Garruk Wildspeaker and Gaea's Anthem"); + sb.append("\r\n"); + sb.append("Magneto hard Shriekmaw, Assassins, creature removal + Liliana Vess"); + sb.append("\r\n"); + sb.append("Marge Simpson hard RG deck, creates tokens which are devoured by R and RG creatures with devour"); + sb.append("\r\n"); + sb.append("Morpheus hard Elves with Overrun, Gaea's Anthem, Imperious Perfect and other pumps"); + sb.append("\r\n"); + sb.append("Napoleon hard Walls, Rolling Stones and Doran, the Siege Tower"); + sb.append("\r\n"); + sb.append("Neo hard RG with Groundbreaker and other attack once then sacrifice at EoT creatures"); + sb.append("\r\n"); + sb.append("Newton hard Relentless Rats, Ratcatcher, Aluren and Harmonize"); + sb.append("\r\n"); + sb.append("Picard hard UWG Elf deck similar to Morpheus but also has flying elves"); + sb.append("\r\n"); + sb.append("Pinky and the Brain hard Royal Assassin, WoG + Damnation, Liliana Vess, Beacon of Unrest"); + sb.append("\r\n"); + sb.append("Professor X hard Master of Etherium + Vedalken Archmage and many artifacts"); + sb.append("\r\n"); + sb.append("R2-D2 hard Black Vise, bounce (Boomerang) spells, Howling Mine"); + sb.append("\r\n"); + sb.append("Rocky 1 easy Pro red, Flamebreak + Tremor + Pyroclasm but no Pyrohemia"); + sb.append("\r\n"); + sb.append("Rocky 2 medium Pro red, Flamebreak + Tremor + Pyroclasm but no Pyrohemia"); + sb.append("\r\n"); + sb.append("Rocky 3 hard Pro red, Flamebreak + Tremor + Pyroclasm but no Pyrohemia"); + sb.append("\r\n"); + sb.append("Rogue hard Dragons including Tarox Bladewing, Dragon Roost, Chandra Nalaar"); + sb.append("\r\n"); + sb.append("Scooby Doo hard Rares' Red deck, Dragonmaster Outcast, Rakdos Pit Dragon, Kamahl, Pit Fighter"); + sb.append("\r\n"); + sb.append("Scotty medium Pestilence + Castle + Penumbra Kavu/Spider/Wurm but no pro black"); + sb.append("\r\n"); + sb.append("Seabiscuit 1 easy Some Fear creatures, bounce and draw card spells"); + sb.append("\r\n"); + sb.append("Seabiscuit 2 medium Some Fear creatures, Garza Zol, Plague Queen + draw card spells"); + sb.append("\r\n"); + sb.append("Seabiscuit 3 hard Some Fear creatures, Garza Zol, Plague Queen + draw card & control spells"); + sb.append("\r\n"); + sb.append("Sherlock Holmes 1 easy Some Forestwalk creatures, Damnation + pump spells"); + sb.append("\r\n"); + sb.append("Sherlock Holmes 2 medium Some Forestwalk creatures, gain life + threat removal spells"); + sb.append("\r\n"); + sb.append("Sherlock Holmes 3 hard Some Forestwalk creatures, gain life + threat removal spells + Eladamri, Lord of Leaves"); + sb.append("\r\n"); + sb.append("Silver Surfer hard Green creature beat down deck with several pump spells"); + sb.append("\r\n"); + sb.append("Spiderman medium White weenies with WoG, Armageddon, Mass Calcify"); + sb.append("\r\n"); + sb.append("Spock medium Rares elf deck with just a single copy of most of the elves"); + sb.append("\r\n"); + sb.append("Storm 1 easy Creatures with Lifelink + filler"); + sb.append("\r\n"); + sb.append("Storm 2 medium Creatures with Lifelink + filler"); + sb.append("\r\n"); + sb.append("Storm 3 hard Creatures with Lifelink + filler"); + sb.append("\r\n"); + sb.append("Superman 1 easy Vecc\'s easy Slivers deck, Raise Dead + Breath of Life"); + sb.append("\r\n"); + sb.append("Superman 2 medium Vecc\'s medium Slivers deck, Zombify + Tribal Flames"); + sb.append("\r\n"); + sb.append("Tarzan 1 easy Jungle creatures + pump spells"); + sb.append("\r\n"); + sb.append("Tarzan 2 medium Tarzan with Silverback Ape + pump spells"); + sb.append("\r\n"); + sb.append("Terminator hard Master of Etherium + Control Magic and Memnarch + many artifacts"); + sb.append("\r\n"); + sb.append("Uncle Owen hard Creature removal/control with Liliana Vess"); + sb.append("\r\n"); + sb.append("Wolverine hard Nightmare + Korlash, Heir to Blackblade + Kodama's Reach"); + sb.append("\r\n"); + sb.append("Wyatt Earp 1 easy Some Plainswalk creatures + filler"); + sb.append("\r\n"); + sb.append("Wyatt Earp 2 medium Some Plainswalk creatures + filler"); + sb.append("\r\n"); + sb.append("Wyatt Earp 3 hard Some Plainswalk creatures + filler"); + + File base = ForgeProps.getFile(IMAGE_ICON); + File file = new File(base, "notesIcon.png"); + ImageIcon icon = new ImageIcon(file.toString()); + + JTextArea area = new JTextArea(sb.toString(), 35, 70); + area.setWrapStyleWord(true); + area.setLineWrap(true); + area.setEditable(false); + + area.setOpaque(false); + + JOptionPane.showMessageDialog(null, new JScrollPane(area), "Opponent Deck Notes", JOptionPane.INFORMATION_MESSAGE, icon); + } + void deckEditorButton_actionPerformed(ActionEvent e) { Command exit = new Command() { private static final long serialVersionUID = -5110231879441074581L; @@ -227,6 +531,14 @@ public class Gui_Quest extends JFrame { this.dispose(); }//deck editor button + void otherShopsButton_actionPerformed(ActionEvent e) + { + Gui_Shops g = new Gui_Shops(this); + g.setVisible(true); + + this.dispose(); + } + void cardShopButton_actionPerformed(ActionEvent e) { Command exit = new Command() { private static final long serialVersionUID = 8567193482568076362L; @@ -252,7 +564,7 @@ public class Gui_Quest extends JFrame { if(check == null || getOpponent().equals("")) return; Deck human = questData.getDeck(check.toString()); - Deck computer = questData.ai_getDeck(getOpponent()); + Deck computer = questData.ai_getDeckNewFormat(getOpponent()); Constant.Runtime.HumanDeck[0] = human; Constant.Runtime.ComputerDeck[0] = computer; @@ -271,7 +583,16 @@ public class Gui_Quest extends JFrame { else Constant.Runtime.Mill[0] = false; - AllZone.GameAction.newGame(human, computer); + if (questData.getMode().equals("Realistic")) + AllZone.GameAction.newGame(human, computer); + else + { + CardList hCl = QuestUtil.getHumanPlantAndPet(questData); + int hLife = QuestUtil.getLife(questData); + AllZone.GameAction.newGame(human, computer, hCl, new CardList(), hLife, 20, null); + } + + AllZone.Display.setVisible(true); //end - you can change stuff after this @@ -280,6 +601,28 @@ public class Gui_Quest extends JFrame { }//play game button + void questsButton_actionPerformed(ActionEvent e) + { + Object check = deckComboBox.getSelectedItem(); + if(check == null) return; + + Deck human = questData.getDeck(check.toString()); + + if(smoothLandCheckBox.isSelected()) Constant.Runtime.Smooth[0] = true; + else Constant.Runtime.Smooth[0] = false; + + if(millLoseCheckBox.isSelected()) + Constant.Runtime.Mill[0] = true; + else + Constant.Runtime.Mill[0] = false; + + + Gui_Quest_Assignments g = new Gui_Quest_Assignments(this, human); + g.setVisible(true); + + this.dispose(); + } + String getOpponent() { if(oppOneRadio.isSelected()) return oppOneRadio.getText(); diff --git a/src/forge/Gui_QuestOptions.java b/src/forge/Gui_QuestOptions.java index 20fb0b9a626..8f1c6807894 100644 --- a/src/forge/Gui_QuestOptions.java +++ b/src/forge/Gui_QuestOptions.java @@ -41,9 +41,12 @@ public class Gui_QuestOptions extends JFrame { private JRadioButton hardRadio = new JRadioButton(); private JRadioButton mediumRadio = new JRadioButton(); private JRadioButton veryHardRadio = new JRadioButton(); + private JRadioButton fantasyRadio = new JRadioButton(); + private JRadioButton realisticRadio = new JRadioButton(); private JButton newQuestButton = new JButton(); private JTextArea jTextArea1 = new JTextArea(); private ButtonGroup buttonGroup1 = new ButtonGroup(); + private ButtonGroup buttonGroup2 = new ButtonGroup(); private JPanel jPanel3 = new JPanel(); private Border border2; private TitledBorder titledBorder2; @@ -121,14 +124,22 @@ public class Gui_QuestOptions extends JFrame { jPanel1.setBorder(titledBorder1); jPanel1.setBounds(new Rectangle(67, 63, 303, 259)); jPanel1.setLayout(null); + jPanel2.setBounds(new Rectangle(12, 27, 271, 101)); jPanel2.setLayout(gridLayout1); - gridLayout1.setColumns(1); + + gridLayout1.setColumns(2); gridLayout1.setRows(4); + easyRadio.setText("Easy - 50 games"); hardRadio.setText("Hard - 200 games"); mediumRadio.setText("Medium - 100 games"); veryHardRadio.setText("Very Hard - 300 games"); + realisticRadio.setText("Realistic"); + fantasyRadio.setText("Fantasy"); + + realisticRadio.setSelected(true); + newQuestButton.setBounds(new Rectangle(78, 206, 145, 38)); newQuestButton.setFont(new java.awt.Font("Dialog", 0, 18)); newQuestButton.setText("New Quest"); @@ -145,13 +156,19 @@ public class Gui_QuestOptions extends JFrame { jTextArea1.setLineWrap(true); jTextArea1.setWrapStyleWord(true); jTextArea1.setBounds(new Rectangle(13, 141, 274, 50)); + jPanel3.setBorder(titledBorder2); jPanel3.setBounds(new Rectangle(68, 338, 289, 86)); jPanel3.setLayout(null); + jPanel2.add(easyRadio, null); + jPanel2.add(realisticRadio,null); jPanel2.add(mediumRadio, null); + jPanel2.add(fantasyRadio, null); jPanel2.add(hardRadio, null); + jPanel2.add(new JLabel("")); // for empty cell jPanel2.add(veryHardRadio, null); + jPanel1.add(newQuestButton, null); jPanel1.add(jTextArea1, null); this.getContentPane().add(jPanel1, null); @@ -163,6 +180,9 @@ public class Gui_QuestOptions extends JFrame { buttonGroup1.add(mediumRadio); buttonGroup1.add(hardRadio); buttonGroup1.add(veryHardRadio); + + buttonGroup2.add(realisticRadio); + buttonGroup2.add(fantasyRadio); } void continueQuestButton_actionPerformed(ActionEvent e) { @@ -174,6 +194,11 @@ public class Gui_QuestOptions extends JFrame { void newQuestButton_actionPerformed(ActionEvent e) { String difficulty = ""; + + String mode = "Realistic"; + + if (fantasyRadio.isSelected()) + mode = "Fantasy"; if(easyRadio.isSelected()) difficulty = questData.EASY; @@ -187,7 +212,7 @@ public class Gui_QuestOptions extends JFrame { return; //give the user a few cards to build a deck - questData.newGame(difficulty); + questData.newGame(difficulty, mode); copyAIDecks(questData, QuestData.loadData()); QuestData.saveData(questData); diff --git a/src/forge/Gui_Quest_Assignments.java b/src/forge/Gui_Quest_Assignments.java new file mode 100644 index 00000000000..49c003b88b5 --- /dev/null +++ b/src/forge/Gui_Quest_Assignments.java @@ -0,0 +1,289 @@ +package forge; + +import java.awt.Dimension; +import java.awt.Font; +import java.awt.Rectangle; +import java.awt.event.ActionEvent; +import java.awt.event.WindowEvent; +import java.io.File; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Enumeration; + +import javax.swing.AbstractButton; +import javax.swing.ButtonGroup; +import javax.swing.ButtonModel; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JRadioButton; +import javax.swing.SwingConstants; + +import forge.error.ErrorViewer; +import forge.properties.ForgeProps; +import forge.properties.NewConstants; + +public class Gui_Quest_Assignments extends JFrame implements NewConstants{ + + private static final long serialVersionUID = 2409591658245091210L; + + private JFrame questGui; + private JLabel titleLabel = new JLabel(); + + private JButton startQuestButton = new JButton(); + private JButton quitButton = new JButton(); + + private ButtonGroup buttonGroup = new ButtonGroup(); + + private QuestData questData; + + private Deck hDeck; + + private ReadQuest_Assignment read; + + public Gui_Quest_Assignments(JFrame parent, Deck humanDeck) { + try { + jbInit(); + } catch(Exception ex) { + ErrorViewer.showError(ex); + } + + questGui = parent; + hDeck = humanDeck; + + setup(); + + this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); + + setSize(1024, 768); + this.setResizable(false); + Dimension screen = getToolkit().getScreenSize(); + Rectangle bounds = getBounds(); + bounds.width = 1024; + bounds.height = 768; + bounds.x = (screen.width - bounds.width) / 2; + bounds.y = (screen.height - bounds.height) / 2; + setBounds(bounds); + + + } + + //only do this ONCE: + private void setup() { + questData = AllZone.QuestData; + startQuestButton.setBounds(new Rectangle(10, 650, 120, 50)); + startQuestButton.setText("Start Quest"); + //buyPlantButton.setIcon(icon); + startQuestButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(ActionEvent e) { + try { + startQuestButton_actionPerformed(e); + } catch (Exception e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + } + }); + + read = new ReadQuest_Assignment(ForgeProps.getFile(QUEST.QUESTS), questData); + read.run(); + + ArrayList questsToDisplay = new ArrayList(); + + if (questData.getAvailableQuests()!= null && questData.getAvailableQuests().size() > 0) + { + ArrayList availableQuests = read.getQuestsByIds(questData.getAvailableQuests()); + questsToDisplay = availableQuests; + + /* + for (Quest_Assignment qa : availableQuests) + { + System.out.println(qa.getId() + " : " + qa.getName()); + }*/ + + //System.out.println("Not null"); + } + else //generate some random quests + { + //System.out.println("null"); + ArrayList allAvailableQuests = read.getQuests(); + + ArrayList availableInts = new ArrayList(); + + int maxQuests = questData.getWin() / 10; + if (maxQuests > 8) maxQuests = 8; + if (allAvailableQuests.size() < maxQuests) maxQuests = allAvailableQuests.size(); + + Collections.shuffle(allAvailableQuests); + + for (int i=0;iThis quest is "); + if (qa.isRepeatable()) + sb.append("repeatable"); + else + sb.append("not repeatable"); + sb.append(""); + + repeatable = new JLabel(); + repeatable.setFont(new Font("sserif", 0, 12)); + repeatable.setText(sb.toString()); + repeatable.setBounds(new Rectangle(115, y+40, 200, 25)); + + sb = new StringBuilder(); + sb.append("Reward: "); + sb.append(qa.getCardReward()); + sb.append(", "); + sb.append(qa.getCreditsReward()); + sb.append(" credits"); + + reward = new JLabel(); + reward.setFont(new Font("sserif", 0, 12)); + reward.setText(sb.toString()); + reward.setBounds(new Rectangle(320, y+40, 500, 25)); + + buttonGroup.add(radio); + + this.getContentPane().add(radio); + this.getContentPane().add(description); + this.getContentPane().add(difficulty); + this.getContentPane().add(repeatable); + this.getContentPane().add(reward); + + y+=80; + }//for + + + }//setup(); + + private void jbInit() throws Exception { + titleLabel.setFont(new java.awt.Font("sserif", Font.BOLD, 22)); + titleLabel.setHorizontalAlignment(SwingConstants.CENTER); + titleLabel.setText("Quests"); + titleLabel.setBounds(new Rectangle(400, 5, 300, 60)); + ImageIcon icon = getIcon("MapIcon.png"); + titleLabel.setIcon(icon); + this.getContentPane().setLayout(null); + + //String fileName = "LeafIconSmall.png"; + //ImageIcon icon = getIcon(fileName); + + startQuestButton.setEnabled(true); + + quitButton.setBounds(new Rectangle(140, 650, 120, 50)); + quitButton.setText("Quit"); + quitButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(ActionEvent e) { + quitButton_actionPerformed(e); + } + }); + + + //jPanel2.add(quitButton, null); + this.getContentPane().add(startQuestButton, null); + this.getContentPane().add(titleLabel, null); + this.getContentPane().add(quitButton,null); + } + + void startQuestButton_actionPerformed(ActionEvent e) throws Exception { + + Quest_Assignment selectedQuest = new Quest_Assignment(); + + ButtonModel bm = buttonGroup.getSelection(); + if (bm == null) + System.out.println("no button is selected!"); + else + { + for (Enumeration en=buttonGroup.getElements(); en.hasMoreElements(); ) + { + JRadioButton b = (JRadioButton)en.nextElement(); + if (b.getModel() == buttonGroup.getSelection()) + { + //System.out.println(b.getName()); + selectedQuest = read.getQuestById(Integer.parseInt(b.getName())); + } + } + } + + //DeckIO deckIO = new NewDeckIO(ForgeProps.getFile(QUEST.DECKS)); + //Deck computerDeck = deckIO.readDeck("quest"+selectedQuest.getId()); + Deck computerDeck = questData.ai_getDeckNewFormat("quest"+selectedQuest.getId()); + + System.out.println(computerDeck.getName()); + + Constant.Runtime.HumanDeck[0] = hDeck; + Constant.Runtime.ComputerDeck[0] = computerDeck; + + //Constant.Quest.qa[0] = selectedQuest; + AllZone.QuestAssignment = selectedQuest; + + + AllZone.GameAction.newGame(hDeck, computerDeck, QuestUtil.getHumanPlantAndPet(questData, selectedQuest), new CardList(), questData.getLife(), + selectedQuest.getComputerLife(), selectedQuest); + + AllZone.Display = new GuiDisplay3(); + AllZone.Display.setVisible(true); + dispose(); + } + + private ImageIcon getIcon(String fileName) + { + File base = ForgeProps.getFile(IMAGE_ICON); + File file = new File(base, fileName); + ImageIcon icon = new ImageIcon(file.toString()); + return icon; + } + + void quitButton_actionPerformed(ActionEvent e) { + //QuestData.saveData(questData); + //new Gui_Shops(); + questGui.setVisible(true); + + dispose(); + + } + + void this_windowClosing(WindowEvent e) { + quitButton_actionPerformed(null); + } + +} + diff --git a/src/forge/Gui_Shops.java b/src/forge/Gui_Shops.java new file mode 100644 index 00000000000..aa6e9d98d1d --- /dev/null +++ b/src/forge/Gui_Shops.java @@ -0,0 +1,225 @@ + +package forge; + + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Rectangle; +import java.awt.event.ActionEvent; +import java.awt.event.WindowEvent; +import java.io.File; + +import javax.swing.BorderFactory; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.SwingConstants; +import javax.swing.border.Border; +import javax.swing.border.TitledBorder; + +import forge.error.ErrorViewer; +import forge.properties.ForgeProps; +import forge.properties.NewConstants; + + +public class Gui_Shops extends JFrame implements NewConstants { + + private static final long serialVersionUID = 5462223825071747531L; + + private JFrame questGUI; + + private JLabel titleLabel = new JLabel(); + private JButton petShopButton = new JButton(); + private JButton plantShopButton = new JButton(); + private JButton healthShopButton = new JButton(); + private JButton bankButton = new JButton(); + private JButton quitButton = new JButton(); + + private JPanel jPanel2 = new JPanel(); + @SuppressWarnings("unused") + // titledBorder1 + private TitledBorder titledBorder1; + @SuppressWarnings("unused") + // border1 + private Border border1; + + + public Gui_Shops(JFrame questGUI) { + try { + jbInit(); + } catch(Exception ex) { + ErrorViewer.showError(ex); + } + + this.questGUI = questGUI; + + setup(); + + //for some reason, the Bazaar window does not return when closing with X + //for now, just disable X closing: + this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); + + Dimension screen = this.getToolkit().getScreenSize(); + setBounds(screen.width / 3, 100, //position + 286, 630); //size + setVisible(true); + } + + private void setup() { + ; + + }//setup(); + + private void jbInit() throws Exception { + titledBorder1 = new TitledBorder(""); + border1 = BorderFactory.createEtchedBorder(Color.white, new Color(148, 145, 140)); + titleLabel.setFont(new java.awt.Font("Dialog", 0, 22)); + titleLabel.setHorizontalAlignment(SwingConstants.CENTER); + titleLabel.setText("Bazaar"); + titleLabel.setBounds(new Rectangle(40, 0, 198, 60)); + this.getContentPane().setLayout(null); + + String fileName = "FoxIconSmall.png"; + ImageIcon icon = getIcon(fileName); + petShopButton.setBounds(new Rectangle(25, 20, 180, 77)); + petShopButton.setText("Beasts"); + petShopButton.setIcon(icon); + petShopButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(ActionEvent e) { + petShopButton_actionPerformed(e); + } + }); + fileName = "LeafIconSmall.png"; + icon = getIcon(fileName); + plantShopButton.setBounds(new Rectangle(25, 105, 180, 77)); + plantShopButton.setText("Nursery"); + plantShopButton.setIcon(icon); + plantShopButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(ActionEvent e) { + plantShopButton_actionPerformed(e); + } + }); + + fileName = "BottlesIconSmall.png"; + icon = getIcon(fileName); + healthShopButton.setBounds(new Rectangle(25, 190, 180, 77)); + healthShopButton.setText("Apothecary"); + healthShopButton.setIcon(icon); + healthShopButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(ActionEvent e) { + healthShopButton_actionPerformed(e); + } + }); + + fileName = "BoxIconSmall.png"; + icon = getIcon(fileName); + bankButton.setBounds(new Rectangle(25, 275, 180, 77)); + bankButton.setText("Treasury"); + bankButton.setIcon(icon); + bankButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(ActionEvent e) { + treasuryButton_actionPerformed(e); + } + }); + + quitButton.setBounds(new Rectangle(45, 445, 180, 77)); + quitButton.setText("Quit"); + quitButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(ActionEvent e) { + quitButton_actionPerformed(e); + } + }); + + jPanel2.setBorder(BorderFactory.createLineBorder(Color.black)); + jPanel2.setBounds(new Rectangle(20, 50, 230, 375)); + jPanel2.setLayout(null); + this.addWindowListener(new java.awt.event.WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + this_windowClosing(e); + } + }); + + this.getContentPane().add(jPanel2, null); + jPanel2.add(plantShopButton, null); + jPanel2.add(bankButton, null); + jPanel2.add(healthShopButton, null); + //jPanel2.add(quitButton, null); + jPanel2.add(petShopButton, null); + this.getContentPane().add(titleLabel, null); + this.getContentPane().add(quitButton, null); + } + + void editDeckButton_actionPerformed(ActionEvent e) { + Command exit = new Command() { + private static final long serialVersionUID = 4735992294414389187L; + + public void execute() { + new Gui_WinLose(); + } + }; + Gui_DeckEditor editor = new Gui_DeckEditor(); + + editor.show(exit); + + dispose(); + }//editDeckButton_actionPerformed() + + void continueButton_actionPerformed(ActionEvent e) { + //open up "Game" screen +// AllZone.Computer_Play.reset();//sometimes computer has creature in play in the 2nd game of the match + AllZone.GameAction.newGame(Constant.Runtime.HumanDeck[0], Constant.Runtime.ComputerDeck[0]); + AllZone.Display.setVisible(true); + + dispose(); + } + + void petShopButton_actionPerformed(ActionEvent e) { + Gui_PetShop g = new Gui_PetShop(this); + g.setVisible(true); + + dispose(); + } + + void plantShopButton_actionPerformed(ActionEvent e) { + Gui_PlantShop g = new Gui_PlantShop(this); + g.setVisible(true); + + dispose(); + } + + void healthShopButton_actionPerformed(ActionEvent e) { + Gui_ElixirShop g = new Gui_ElixirShop(this); + g.setVisible(true); + + dispose(); + + } + + void treasuryButton_actionPerformed(ActionEvent e){ + Gui_Treasury g = new Gui_Treasury(this); + g.setVisible(true); + + dispose(); + } + + private ImageIcon getIcon(String fileName) + { + File base = ForgeProps.getFile(IMAGE_ICON); + File file = new File(base, fileName); + ImageIcon icon = new ImageIcon(file.toString()); + return icon; + } + + void quitButton_actionPerformed(ActionEvent e) { + questGUI.setVisible(true); + dispose(); + + } + + void this_windowClosing(WindowEvent e) { + quitButton_actionPerformed(null); + } +} diff --git a/src/forge/Gui_Treasury.java b/src/forge/Gui_Treasury.java new file mode 100644 index 00000000000..1232f1fe1bd --- /dev/null +++ b/src/forge/Gui_Treasury.java @@ -0,0 +1,225 @@ +package forge; + +import java.awt.Dimension; +import java.awt.Font; +import java.awt.Rectangle; +import java.awt.event.ActionEvent; +import java.awt.event.WindowEvent; +import java.io.File; + +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.SwingConstants; + +import forge.error.ErrorViewer; +import forge.properties.ForgeProps; +import forge.properties.NewConstants; + +public class Gui_Treasury extends JFrame implements NewConstants{ + + private static final long serialVersionUID = 2409591658245091210L; + + private JFrame shopsGUI; + private JLabel titleLabel = new JLabel(); + + private JLabel estatesDescLabel = new JLabel(); + //private JLabel estatesStatsLabel = new JLabel(); + private JLabel estatesPriceLabel = new JLabel(); + private JLabel estatesIconLabel = new JLabel(); + + private JLabel creditsLabel = new JLabel(); + + private ImageIcon estatesIcon = new ImageIcon(); + + private JButton learnEstatesButton= new JButton(); + private JButton quitButton = new JButton(); + + private QuestData questData = AllZone.QuestData; + + public Gui_Treasury(JFrame parent) { + try { + jbInit(); + } catch(Exception ex) { + ErrorViewer.showError(ex); + } + + shopsGUI = parent; + + setup(); + + //for some reason, the Bazaar window does not return when closing with X + //for now, just disable X closing: + this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); + + Dimension screen = this.getToolkit().getScreenSize(); + setBounds(screen.width / 3, 100, //position + 530, 430); //size + setVisible(true); + + + } + + //only do this ONCE: + private void setup() { + learnEstatesButton.setBounds(new Rectangle(10, 297, 120, 50)); + learnEstatesButton.setText(getButtonText()); + //buyPlantButton.setIcon(icon); + learnEstatesButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(ActionEvent e) { + try { + learnEstatesButton_actionPerformed(e); + } catch (Exception e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + } + }); + + }//setup(); + + private String getDesc() + { + StringBuilder sb = new StringBuilder(); + sb.append(""); + + if (questData.getEstatesLevel() == 0) + { + sb.append("Level 1 Estates
"); + sb.append("Gives a bonus of 10% to match winnings.
"); + sb.append("Improves sell percentage by 1.0%."); + } + else if (questData.getEstatesLevel() == 1) + { + sb.append("Level 2 Estates
"); + sb.append("Gives a bonus of 15% to match winnings.
"); + sb.append("Improves sell percentage by 1.75%."); + } + else if (questData.getEstatesLevel() == 2) + { + sb.append("Level 3 Estates
"); + sb.append("Gives a bonus of 20% to match winnings.
"); + sb.append("Improves sell percentage by 2.5%."); + } + else + { + sb.append("Estates Level Maxed out.
"); + sb.append("Current Level:
"); + sb.append("Gives a bonus of 20% to match winnings.
"); + sb.append("Improves sell percentage by 2.5%."); + } + + sb.append(""); + return sb.toString(); + } + + private long getPrice() + { + long l = 0; + if (questData.getEstatesLevel() == 0) + l = 500; + else if (questData.getEstatesLevel() == 1) + l = 750; + else if (questData.getEstatesLevel() == 2) + l = 1000; + + return l; + } + + private String getButtonText() + { + return "Learn Estates"; + } + + private String getImageString() + { + return "GoldIconLarge.png"; + } + + private void jbInit() throws Exception { + titleLabel.setFont(new java.awt.Font("sserif", Font.BOLD, 22)); + titleLabel.setHorizontalAlignment(SwingConstants.CENTER); + titleLabel.setText("Treasury"); + titleLabel.setBounds(new Rectangle(130, 5, 198, 60)); + this.getContentPane().setLayout(null); + + /* + potionStatsLabel.setFont(new Font("sserif", Font.BOLD, 12)); + potionStatsLabel.setText(getStats()); + potionStatsLabel.setBounds(new Rectangle(10, 65, 100, 15)); + */ + + estatesDescLabel.setFont(new Font("sserif", 0, 12)); + estatesDescLabel.setText(getDesc()); + estatesDescLabel.setBounds(new Rectangle(10, 80, 300, 150)); + + estatesPriceLabel.setFont(new Font("sserif", 0, 12)); + estatesPriceLabel.setText("Price: " + getPrice() + " credits"); + estatesPriceLabel.setBounds(new Rectangle(10, 230, 150, 15)); + + creditsLabel.setFont(new Font("sserif", 0, 12)); + creditsLabel.setText("Credits: " + questData.getCredits()); + creditsLabel.setBounds(new Rectangle(10, 265, 150, 15)); + + estatesIcon = getIcon(getImageString()); + estatesIconLabel.setText(""); + estatesIconLabel.setIcon(estatesIcon); + estatesIconLabel.setBounds(new Rectangle(255, 65, 256, 256)); + estatesIconLabel.setIconTextGap(0); + + //String fileName = "LeafIconSmall.png"; + //ImageIcon icon = getIcon(fileName); + + learnEstatesButton.setEnabled(true); + if (questData.getCredits() < getPrice() || questData.getEstatesLevel() > 3) + learnEstatesButton.setEnabled(false); + + quitButton.setBounds(new Rectangle(140, 297, 120, 50)); + quitButton.setText("Quit"); + quitButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(ActionEvent e) { + quitButton_actionPerformed(e); + } + }); + + + //jPanel2.add(quitButton, null); + this.getContentPane().add(learnEstatesButton, null); + this.getContentPane().add(titleLabel, null); + this.getContentPane().add(estatesDescLabel, null); + this.getContentPane().add(estatesIconLabel, null); + this.getContentPane().add(estatesPriceLabel, null); + this.getContentPane().add(creditsLabel, null); + this.getContentPane().add(quitButton,null); + } + + void learnEstatesButton_actionPerformed(ActionEvent e) throws Exception { + questData.subtractCredits(getPrice()); + questData.addEstatesLevel(1); + QuestData.saveData(questData); + jbInit(); + } + + private ImageIcon getIcon(String fileName) + { + File base = ForgeProps.getFile(IMAGE_ICON); + File file = new File(base, fileName); + ImageIcon icon = new ImageIcon(file.toString()); + return icon; + } + + void quitButton_actionPerformed(ActionEvent e) { + QuestData.saveData(questData); + //new Gui_Shops(); + shopsGUI.setVisible(true); + + dispose(); + + } + + void this_windowClosing(WindowEvent e) { + quitButton_actionPerformed(null); + } + +} diff --git a/src/forge/Gui_WinLose.java b/src/forge/Gui_WinLose.java index 82047d11aef..6310326fde9 100644 --- a/src/forge/Gui_WinLose.java +++ b/src/forge/Gui_WinLose.java @@ -28,6 +28,14 @@ import forge.properties.NewConstants; public class Gui_WinLose extends JFrame implements NewConstants { private static final long serialVersionUID = -5800412940994975483L; + //private CardList humanList; + //private CardList computerList; + + //private int humanLife; + //private int computerLife; + + //private boolean fantasyQuest = false; + private JLabel titleLabel = new JLabel(); private JButton continueButton = new JButton(); private JButton restartButton = new JButton(); @@ -61,8 +69,42 @@ public class Gui_WinLose extends JFrame implements NewConstants { new Gui_WinLose(); } + public Gui_WinLose(CardList human, CardList computer, int hLife, int cLife) { + /* + fantasyQuest = true; + + humanList = human; + computerList = computer; + + humanLife = hLife; + computerLife= cLife; + */ + try { + jbInit(); + } catch(Exception ex) { + ErrorViewer.showError(ex); + } + + setup(); + + Dimension screen = this.getToolkit().getScreenSize(); + setBounds(screen.width / 3, 100, //position + 215, 370); //size + setVisible(true); + } + public Gui_WinLose() { - try { + /* + fantasyQuest = false; + + humanList = new CardList(); + computerList = new CardList(); + + humanLife = 20; + computerLife= 20; + */ + + try { jbInit(); } catch(Exception ex) { ErrorViewer.showError(ex); @@ -166,8 +208,23 @@ public class Gui_WinLose extends JFrame implements NewConstants { void continueButton_actionPerformed(ActionEvent e) { //open up "Game" screen -// AllZone.Computer_Play.reset();//sometimes computer has creature in play in the 2nd game of the match - AllZone.GameAction.newGame(Constant.Runtime.HumanDeck[0], Constant.Runtime.ComputerDeck[0]); + //AllZone.Computer_Play.reset();//sometimes computer has creature in play in the 2nd game of the match + + if (!Constant.Quest.fantasyQuest[0]) + AllZone.GameAction.newGame(Constant.Runtime.HumanDeck[0], Constant.Runtime.ComputerDeck[0]); + else{ + //AllZone.GameAction.newGame(Constant.Runtime.HumanDeck[0], Constant.Runtime.ComputerDeck[0], humanList, computerList, humanLife, computerLife); + CardList humanList = QuestUtil.getHumanPlantAndPet(AllZone.QuestData, AllZone.QuestAssignment); + CardList computerList = new CardList(); + + + int humanLife = QuestUtil.getLife(AllZone.QuestData); + int computerLife = 20; + if (AllZone.QuestAssignment!=null) + computerLife = AllZone.QuestAssignment.getComputerLife(); + + AllZone.GameAction.newGame(Constant.Runtime.HumanDeck[0], Constant.Runtime.ComputerDeck[0], humanList, computerList, humanLife, computerLife, AllZone.QuestAssignment); + } AllZone.Display.setVisible(true); dispose(); @@ -175,40 +232,77 @@ public class Gui_WinLose extends JFrame implements NewConstants { void restartButton_actionPerformed(ActionEvent e) { Constant.Runtime.WinLose.reset(); - AllZone.GameAction.newGame(Constant.Runtime.HumanDeck[0], Constant.Runtime.ComputerDeck[0]); + + if (!Constant.Quest.fantasyQuest[0]) + AllZone.GameAction.newGame(Constant.Runtime.HumanDeck[0], Constant.Runtime.ComputerDeck[0]); + else{ + //AllZone.GameAction.newGame(Constant.Runtime.HumanDeck[0], Constant.Runtime.ComputerDeck[0], humanList, computerList, humanLife, computerLife); + + CardList humanList = QuestUtil.getHumanPlantAndPet(AllZone.QuestData, AllZone.QuestAssignment); + CardList computerList = QuestUtil.getComputerCreatures(AllZone.QuestData, AllZone.QuestAssignment); + + int humanLife = QuestUtil.getLife(AllZone.QuestData); + int computerLife = 20; + + if (AllZone.QuestAssignment!=null) + computerLife = AllZone.QuestAssignment.getComputerLife(); + + AllZone.GameAction.newGame(Constant.Runtime.HumanDeck[0], Constant.Runtime.ComputerDeck[0], humanList, computerList, humanLife, computerLife, AllZone.QuestAssignment); + } AllZone.Display.setVisible(true); dispose(); } - private String getWinText(long creds, WinLose winLose) + private String getWinText(long creds, WinLose winLose, QuestData q) { StringBuilder sb = new StringBuilder(); String[] wins = winLose.getWinMethods(); + sb.append(""); for (String s : wins) { if (s != null) { if (s.equals("Poison Counters") || s.equals("Milled") || s.equals("Battle of Wits") || s.equals("Felidar Sovereign") || s.equals("Helix Pinnacle") || s.equals("Epic Struggle") || - s.equals("Door to Nothingness") || s.equals("Barren Glory")) { + s.equals("Door to Nothingness") || s.equals("Barren Glory") || s.equals("Near-Death Experience") ) { sb.append("Alternate win condition: "); + sb.append(""); sb.append(s); - sb.append("! Bonus: +100 credits.\r\n"); + sb.append(""); + sb.append("! Bonus: +100 credits.
"); } } } if (winLose.getLose()==0) - sb.append("You have not lost once! Bonus: +10 credits.\r\n"); - sb.append("You have earned " + creds + " credits in total."); + sb.append("You have not lost once! Bonus: +10 credits.
"); + + if(q.getEstatesLevel() == 1) + sb.append("Estates bonus: 10%.
"); + else if(q.getEstatesLevel() == 2) + sb.append("Estates bonus: 15%.
"); + else if(q.getEstatesLevel() == 3) + sb.append("Estates bonus: 20%.
"); + + sb.append("You have earned " + creds + " credits in total."); + + sb.append(""); return sb.toString(); } + private ImageIcon getCardIcon(String fileName) + { + File base = ForgeProps.getFile(IMAGE_BASE); + File file = new File(base, fileName); + ImageIcon icon = new ImageIcon(file.toString()); + return icon; + } + private ImageIcon getIcon(String fileName) { - File base = ForgeProps.getFile(IMAGE_BASE); + File base = ForgeProps.getFile(IMAGE_ICON); File file = new File(base, fileName); ImageIcon icon = new ImageIcon(file.toString()); return icon; @@ -230,6 +324,9 @@ public class Gui_WinLose extends JFrame implements NewConstants { if(AllZone.QuestData.getShopList()!= null) AllZone.QuestData.clearShopList(); + if(AllZone.QuestData.getAvailableQuests()!= null) + AllZone.QuestData.clearAvailableQuests(); + if(quest.shouldAddCards(winLose.didWinRecently())) { quest.addCards(); String fileName = "BookIcon.png"; @@ -242,7 +339,7 @@ public class Gui_WinLose extends JFrame implements NewConstants { { long creds = quest.getCreditsToAdd(winLose); - String s = getWinText(creds, winLose); + String s = getWinText(creds, winLose, quest); String fileName = "GoldIcon.png"; ImageIcon icon = getIcon(fileName); @@ -255,6 +352,36 @@ public class Gui_WinLose extends JFrame implements NewConstants { icon = getIcon(fileName); JOptionPane.showMessageDialog(null, "You just won 10 random rares!", "", JOptionPane.INFORMATION_MESSAGE, icon); } + + if (AllZone.QuestAssignment!=null) + { + Quest_Assignment qa = AllZone.QuestAssignment; + + StringBuilder sb = new StringBuilder(); + sb.append("Quest Completed - \r\n"); + + if (qa.getCardRewardList()!= null) + { + sb.append("You won the following cards:\r\n\r\n"); + for (String cardName:qa.getCardRewardList()) + { + sb.append(cardName); + sb.append("\r\n"); + + AllZone.QuestData.addCard(cardName); + } + sb.append("\r\n"); + } + sb.append("Quest Bounty: "); + sb.append(qa.getCreditsReward()); + + AllZone.QuestData.addCredits(qa.getCreditsReward()); + + fileName = "BoxIcon.png"; + icon = getIcon(fileName); + JOptionPane.showMessageDialog(null, sb.toString(), "Quest Rewards for " +qa.getName() , JOptionPane.INFORMATION_MESSAGE, icon); + } + } else { @@ -267,13 +394,15 @@ public class Gui_WinLose extends JFrame implements NewConstants { if(quest.shouldAddAdditionalCards(winLose.didWinRecently())) { String fileName = quest.addRandomRare() + ".jpg"; - ImageIcon icon = getIcon(fileName); + ImageIcon icon = getCardIcon(fileName); JOptionPane.showMessageDialog(null, "", "You have won a random rare.", JOptionPane.INFORMATION_MESSAGE, icon); } winLose.reset(); + AllZone.QuestAssignment = null; + QuestData.saveData(quest); new Gui_Quest(); }//else - on quest diff --git a/src/forge/Input_Draw.java b/src/forge/Input_Draw.java index b6b4094169c..b06d9aec346 100644 --- a/src/forge/Input_Draw.java +++ b/src/forge/Input_Draw.java @@ -53,7 +53,7 @@ public class Input_Draw extends Input { } }//if(0 < getDredge().size()) - if(drawCard) AllZone.GameAction.drawCard(Constant.Player.Human); + if(drawCard && AllZone.Phase.getTurn() > 1) AllZone.GameAction.drawCard(Constant.Player.Human); if(AllZone.Phase.getPhase().equals(Constant.Phase.Draw)) { //Input_Main.canPlayLand = true; diff --git a/src/forge/Input_Untap.java b/src/forge/Input_Untap.java index 36ced30e555..2372c040ddc 100644 --- a/src/forge/Input_Untap.java +++ b/src/forge/Input_Untap.java @@ -12,8 +12,11 @@ public class Input_Untap extends Input { PlayerZone p = AllZone.getZone(Constant.Zone.Play, AllZone.Phase.getActivePlayer()); Card[] c = p.getCards(); - for(int i = 0; i < c.length; i++) - c[i].setSickness(false); + if (AllZone.Phase.getTurn() != 1) + { + for(int i = 0; i < c.length; i++) + c[i].setSickness(false); + } //if(isMarbleTitanInPlay()) marbleUntap(); //if(!isStasisInPlay()) doUntap(); diff --git a/src/forge/NewDeckIO.java b/src/forge/NewDeckIO.java index c18486b84b0..cbfce046f5e 100755 --- a/src/forge/NewDeckIO.java +++ b/src/forge/NewDeckIO.java @@ -72,6 +72,26 @@ public class NewDeckIO implements DeckIO { this.boosterMap.putAll(boosterMap); } + public NewDeckIO(File dir, boolean quest) + { + if(dir == null) throw new IllegalArgumentException("No deck directory specified"); + try { + this.dir = dir; + + if(dir.isFile()) { + throw new IOException("Not a directory"); + } else { + dir.mkdirs(); + if(!dir.isDirectory()) throw new IOException("Directory can't be created"); + this.deckList = new ArrayList(); + readQuestFile(); + } + } catch(IOException ex) { + ErrorViewer.showError(ex); + throw new RuntimeException("DeckIO : write() error, " + ex.getMessage()); + } + } + public boolean isUnique(String deckName) { Deck d; for(int i = 0; i < deckList.size(); i++) { @@ -173,6 +193,23 @@ public class NewDeckIO implements DeckIO { writeFile(); } + public void readQuestFile() { + try { + deckList.clear(); + + File[] files; + files = dir.listFiles(dck); + for(File file:files) { + BufferedReader in = new BufferedReader(new FileReader(file)); + deckList.add(read(in)); + in.close(); + } + } catch(IOException ex) { + ErrorViewer.showError(ex); + throw new RuntimeException("DeckIO : read() error, " + ex.getMessage()); + } + } + public void readFile() { try { deckList.clear(); diff --git a/src/forge/QuestData.java b/src/forge/QuestData.java index 2f2f288e8f5..f7328b85c6b 100644 --- a/src/forge/QuestData.java +++ b/src/forge/QuestData.java @@ -50,10 +50,18 @@ public class QuestData implements NewConstants { private int win; private int lost; + private int plantLevel; + private int wolfPetLevel; + + private int life; + private int estatesLevel; + + private int questsPlayed; + private long credits; private String difficulty; - + private String mode = ""; private ArrayList easyAIDecks; private ArrayList mediumAIDecks; @@ -67,6 +75,9 @@ public class QuestData implements NewConstants { private ArrayList newCardList = new ArrayList(); private ArrayList shopList = new ArrayList(); + private ArrayList availableQuests = new ArrayList(); + private ArrayList completedQuests = new ArrayList(); + private QuestData_BoosterPack boosterPack = new QuestData_BoosterPack(); //used by shouldAddAdditionalCards() @@ -114,7 +125,7 @@ public class QuestData implements NewConstants { //adds cards to card pool and sets difficulty @SuppressWarnings("unchecked") - public void newGame(String difficulty) { + public void newGame(String difficulty, String m) { setDifficulty(difficulty); int[][] totals = { {45, 20, 10}, //easy, 45 common, 20 uncommon, 10 rares @@ -132,6 +143,12 @@ public class QuestData implements NewConstants { //because cardPool already has basic land added to it cardPool.addAll(list); credits = 250; + + mode = m; + if (mode.equals("Fantasy")) + life = 15; + else + life = 20; } @@ -156,13 +173,20 @@ public class QuestData implements NewConstants { }//getOpponents() - static public void readAIQuestDeckFiles(QuestData data, ArrayList aiDeckNames) { + static public void readAIQuestDeckFiles(QuestData data, ArrayList aiDeckNames) { data.easyAIDecks = readFile(ForgeProps.getFile(QUEST.EASY), aiDeckNames); data.mediumAIDecks = readFile(ForgeProps.getFile(QUEST.MEDIUM), aiDeckNames); data.hardAIDecks = readFile(ForgeProps.getFile(QUEST.HARD), aiDeckNames); } + public void refreshAIQuestDeckFiles(ArrayList aiDeckNames) { + easyAIDecks = readFile(ForgeProps.getFile(QUEST.EASY), aiDeckNames); + mediumAIDecks = readFile(ForgeProps.getFile(QUEST.MEDIUM), aiDeckNames); + hardAIDecks = readFile(ForgeProps.getFile(QUEST.HARD), aiDeckNames); + + } + public String[] getOpponents(ArrayList aiDeck) { Collections.shuffle(aiDeck); @@ -170,7 +194,7 @@ public class QuestData implements NewConstants { }//getOpponents() - private static ArrayList readFile(File file, ArrayList aiDecks) { + private static ArrayList readFile(File file, ArrayList aiDecks) { ArrayList list = FileUtil.readFile(file); //remove any blank lines @@ -188,9 +212,13 @@ public class QuestData implements NewConstants { for(int i = 0; i < list.size(); i++) - if(!aiDecks.contains(list.get(i).toString())) ErrorViewer.showError(new Exception(), + /*if(!aiDecks.contains(list.get(i).toString())) ErrorViewer.showError(new Exception(), "QuestData : readFile() error, file %s contains the invalid ai deck name: %s", file, - list.get(i)); + list.get(i));*/ + if (!aiDecks.contains(list.get(i).toString())) + { + aiDecks.add(list.get(i).toString()); + } return list; @@ -212,11 +240,23 @@ public class QuestData implements NewConstants { QuestData data = new QuestData(); + data.win = state.win; data.lost = state.lost; data.credits = state.credits; data.rankIndex = state.rankIndex; data.difficulty = state.difficulty; + data.mode = state.mode; + if (data.mode == null) + data.mode = "Realistic"; + + data.plantLevel = state.plantLevel; + data.wolfPetLevel = state.wolfPetLevel; + data.life = state.life; + data.estatesLevel = state.estatesLevel; + data.questsPlayed = state.questsPlayed; + data.availableQuests = state.availableQuests; + data.completedQuests = state.completedQuests; data.shopList = state.shopList; data.cardPool = state.cardPool; @@ -252,6 +292,37 @@ public class QuestData implements NewConstants { shopList = list; } + + public ArrayList getAvailableQuests() { + if (availableQuests != null) + return new ArrayList(availableQuests); + else + return null; + } + + public void setAvailableQuests(ArrayList list) + { + availableQuests = list; + } + + public void clearAvailableQuests() + { + availableQuests.clear(); + } + + public ArrayList getCompletedQuests() { + if (completedQuests != null) + return new ArrayList(completedQuests); + else + return null; + } + + public void setCompletedQuests(ArrayList list) + { + completedQuests = list; + } + + public void clearShopList() { shopList.clear(); } @@ -305,6 +376,12 @@ public class QuestData implements NewConstants { return getDeckFromMap(aiDecks, deckName); } + public Deck ai_getDeckNewFormat(String deckName) { + DeckIO deckIO = new NewDeckIO(ForgeProps.getFile(QUEST.DECKS), true); + Deck aiDeck = deckIO.readDeck(deckName); + return aiDeck; + } + private Deck getDeckFromMap(Map map, String deckName) { if(!map.containsKey(deckName)) ErrorViewer.showError(new Exception(), @@ -362,6 +439,19 @@ public class QuestData implements NewConstants { }//addCards() + public ArrayList getRandomRares(int n, int colorIndex) + { + ArrayList newCards = new ArrayList(); + newCards.addAll(boosterPack.getRare(n, colorIndex)); + + /* + for(String s : newCards ) { + Card c = AllZone.CardFactory.getCard(s, Constant.Player.Human); + list.add(c); + }*/ + return newCards; + } + public void addRandomRare(int n) { ArrayList newCards = new ArrayList(); @@ -370,8 +460,7 @@ public class QuestData implements NewConstants { cardPool.addAll(newCards); newCardList.addAll(newCards); } - - + public String addRandomRare() { ArrayList newCards = new ArrayList(); @@ -388,6 +477,11 @@ public class QuestData implements NewConstants { cardPool.add(c.getName()); } + public void addCard(String s) + { + cardPool.add(s); + } + public void removeCard(Card c) { @@ -439,12 +533,19 @@ public class QuestData implements NewConstants { if (s != null) { if (s.equals("Poison Counters") || s.equals("Milled") || s.equals("Battle of Wits") || s.equals("Felidar Sovereign") || s.equals("Helix Pinnacle") || s.equals("Epic Struggle") || - s.equals("Door to Nothingness") || s.equals("Barren Glory")) { + s.equals("Door to Nothingness") || s.equals("Barren Glory") || s.equals("Near-Death Experience")) { creds+=100; } } } + if (getEstatesLevel() == 1) + creds*=1.1; + else if (getEstatesLevel() == 2) + creds*=1.15; + else if (getEstatesLevel() == 3) + creds*=1.2; + this.addCredits(creds); return creds; @@ -501,6 +602,65 @@ public class QuestData implements NewConstants { return lost; } + //********************FANTASY STUFF START*********************** + + public void addPlantLevel() + { + plantLevel++; + } + + public int getPlantLevel() + { + return plantLevel; + } + + public void addWolfPetLevel() + { + wolfPetLevel++; + } + + public int getWolfPetLevel() + { + return wolfPetLevel; + } + + public void setLife(int n) + { + life = n; + } + + public int getLife() + { + return life; + } + + public void addLife(int n) + { + life+=n; + } + + public int getEstatesLevel() + { + return estatesLevel; + } + + public void addEstatesLevel(int n) + { + estatesLevel+=n; + } + + public int getQuestsPlayed() + { + return questsPlayed; + } + + public void addQuestsPlayed() + { + questsPlayed++; + } + + //********************FANTASY STUFF END*********************** + public void addCredits(long c) { credits+=c; @@ -516,6 +676,12 @@ public class QuestData implements NewConstants { public long getCredits() { return credits; } + + public String getMode() { + if (mode == null) + return ""; + return mode; + } //should be called first, because the difficultly won't change public String getDifficulty() { return difficulty; @@ -594,14 +760,21 @@ public class QuestData implements NewConstants { state.lost = q.lost; state.credits = q.credits; state.difficulty = q.difficulty; + state.mode = q.mode; state.rankIndex = q.rankIndex; + state.plantLevel = q.plantLevel; + state.wolfPetLevel = q.wolfPetLevel; + state.life = q.life; + state.estatesLevel = q.estatesLevel; + state.questsPlayed = q.questsPlayed; + state.availableQuests = q.availableQuests; + state.cardPool = q.cardPool; state.shopList = q.shopList; state.myDecks = q.myDecks; state.aiDecks = q.aiDecks; - //write object ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(ForgeProps.getFile(QUEST.DATA))); out.writeObject(state); diff --git a/src/forge/QuestData_BoosterPack.java b/src/forge/QuestData_BoosterPack.java index 77f146dc180..df2c2aae8df 100644 --- a/src/forge/QuestData_BoosterPack.java +++ b/src/forge/QuestData_BoosterPack.java @@ -167,6 +167,20 @@ public class QuestData_BoosterPack implements NewConstants { return getRandom(n, bag); }//getRare() + public ArrayList getRare(int n, int colorIndex) { + ArrayList bag = new ArrayList(); + String c; + int stop = getLoopStop(n); + + for(int i = 0; i < stop; i++) { + c = colors[colorIndex]; + + bag.add(getColor(c, rareCreature)); + bag.add(getColor(c, rareSpell)); + } + return getRandom(n, bag); + }//getRare() + //returns String of the card name that matches the paramater "color" @SuppressWarnings("unchecked") private String getColor(String color, ArrayList list) { diff --git a/src/forge/QuestData_State.java b/src/forge/QuestData_State.java index 1286e4bc10a..70b36f7a37b 100644 --- a/src/forge/QuestData_State.java +++ b/src/forge/QuestData_State.java @@ -24,9 +24,11 @@ public class QuestData_State implements Serializable { private static final long serialVersionUID = 7007940230351051937L; int rankIndex, win, lost; + int plantLevel, wolfPetLevel, life, estatesLevel, questsPlayed; long credits; - String difficulty; + String difficulty, mode; + ArrayList availableQuests, completedQuests; ArrayList cardPool, shopList; Map myDecks, aiDecks; @@ -36,12 +38,22 @@ public class QuestData_State implements Serializable { * This constructor is used by QestData_State in the default package to create a replacement object for the * obsolete class. */ - public QuestData_State(int rankIndex, int win, int lost, long credits, String difficulty, ArrayList cardPool, ArrayList shopList, Map myDecks, Map aiDecks) { + public QuestData_State(int rankIndex, int win, int lost, int plantLevel, int wolfPetLevel, int life, int estatesLevel, int questsPlayed, + ArrayList availableQuests, ArrayList completedQuests, long credits, String difficulty, String mode, + ArrayList cardPool, ArrayList shopList, Map myDecks, Map aiDecks) { this.rankIndex = rankIndex; this.win = win; this.lost = lost; + this.plantLevel = plantLevel; + this.wolfPetLevel = wolfPetLevel; + this.life = life; + this.estatesLevel = estatesLevel; + this.questsPlayed = questsPlayed; + this.availableQuests = availableQuests; + this.completedQuests = completedQuests; this.credits = credits; this.difficulty = difficulty; + this.mode = mode; this.cardPool = cardPool; this.shopList = shopList; this.myDecks = myDecks; diff --git a/src/forge/QuestUtil.java b/src/forge/QuestUtil.java new file mode 100644 index 00000000000..9d7cdf8594d --- /dev/null +++ b/src/forge/QuestUtil.java @@ -0,0 +1,225 @@ +package forge; + +import java.util.ArrayList; + +public class QuestUtil { + + public static int getLife(QuestData qd) + { + return qd.getLife(); + } + + public static CardList getComputerCreatures(QuestData qd) + { + return new CardList(); + } + + public static CardList getComputerCreatures(QuestData qd, Quest_Assignment qa) + { + CardList list = new CardList(); + if (qa!=null) + { + ArrayList compCards = qa.getCompy(); + + for (String s:compCards) + { + Card c = AllZone.CardFactory.getCard(s, Constant.Player.Computer); + list.add(c); + } + } + return list; + } + + public static CardList getHumanPlantAndPet(QuestData qd) + { + CardList list = new CardList(); + + if (qd.getWolfPetLevel() > 0) + list.add(getWolfPetToken(qd.getWolfPetLevel())); + + if (qd.getPlantLevel() > 0) + list.add(getPlantToken(qd.getPlantLevel())); + + return list; + } + + public static CardList getHumanPlantAndPet(QuestData qd, Quest_Assignment qa) + { + CardList list = getHumanPlantAndPet(qd); + + if (qa!=null) + list.addAll(qa.getHuman().toArray()); + + return list; + } + + //makeToken(String name, String imageName, Card source, String manaCost, String[] types, int baseAttack, int baseDefense, String[] intrinsicKeywords) { + + public static Card getPlantToken(int level) + { + String imageName = ""; + int baseAttack = 0; + int baseDefense = 0; + + if (level == 1) + { + imageName = "G 0 1 Plant Wall"; + baseDefense = 1; + } + else if (level == 2) + { + imageName = "G 0 2 Plant Wall"; + baseDefense = 2; + } + else if (level == 3) + { + imageName = "G 0 3 Plant Wall"; + baseDefense = 3; + } + else if (level == 4) + { + imageName = "G 1 3 Plant Wall"; + baseDefense = 3; + baseAttack = 1; + } + + + Card c = new Card(); + c.setName("Plant Wall"); + + c.setImageName(imageName); + + c.setController(Constant.Player.Human); + c.setOwner(Constant.Player.Human); + + c.setManaCost("G"); + c.setToken(true); + + c.addType("Creature"); + c.addType("Plant"); + c.addType("Wall"); + + c.addIntrinsicKeyword("Defender"); + + c.setBaseAttack(baseAttack); + c.setBaseDefense(baseDefense); + + return c; + }//getPlantToken + + public static Card getWolfPetToken(int level) + { + String imageName = ""; + int baseAttack = 0; + int baseDefense = 0; + + if (level == 1) + { + imageName = "G 1 1 Wolf Pet"; + baseDefense = 1; + baseAttack = 1; + } + else if (level == 2) + { + imageName = "G 1 2 Wolf Pet"; + baseDefense = 2; + baseAttack = 1; + } + else if (level == 3) + { + imageName = "G 2 2 Wolf Pet"; + baseDefense = 2; + baseAttack = 2; + } + else if (level == 4) + { + imageName = "G 2 2 Wolf Pet Flanking"; + baseDefense = 2; + baseAttack = 2; + } + + + Card c = new Card(); + c.setName("Wolf Pet"); + + c.setImageName(imageName); + + c.setController(Constant.Player.Human); + c.setOwner(Constant.Player.Human); + + c.setManaCost("G"); + c.setToken(true); + + c.addType("Creature"); + c.addType("Wolf"); + c.addType("Pet"); + + if (level == 4) + c.addIntrinsicKeyword("Flanking"); + + c.setBaseAttack(baseAttack); + c.setBaseDefense(baseDefense); + + return c; + }//getWolfPetToken + + public static void setupQuest(Quest_Assignment qa) + { + /* + * Gold = 0 + * Colorless = 1 + * Black = 2 + * Blue = 3 + * Green = 4 + * Red = 5 + * White = 6 + */ + + QuestData_BoosterPack pack = new QuestData_BoosterPack(); + + int id = qa.getId(); + if (id == 1) //White Dungeon + { + for (int i=0;i<2;i++) + { + qa.addCompy("Savannah Lions"); + } + qa.setCardRewardList(pack.getRare(3, 6)); + } + else if (id == 2) //Blue Dungeon + { + qa.setCardRewardList(pack.getRare(3, 3)); + } + else if (id == 3) //Black Dungeon + { + qa.setCardRewardList(pack.getRare(3, 2)); + } + else if (id == 4) //Red Dungeon + { + qa.setCardRewardList(pack.getRare(3, 5)); + } + else if (id == 5) //Green Dungeon + { + qa.setCardRewardList(pack.getRare(3, 4)); + } + else if (id == 6) //Colorless Dungeon + { + qa.setCardRewardList(pack.getRare(3, 1)); + } + else if (id == 7) //Gold Dungeon + { + CardList humanList = new CardList(); + Card c = AllZone.CardFactory.getCard("Trailblazer's Boots", Constant.Player.Human); + humanList.add(c); + + qa.setHuman(humanList); + qa.setCardRewardList(pack.getRare(3, 0)); + } + else if (id == 8) + { + + } + } + + +}//QuestUtil diff --git a/src/forge/Quest_Assignment.java b/src/forge/Quest_Assignment.java new file mode 100644 index 00000000000..b2f2ea94e9c --- /dev/null +++ b/src/forge/Quest_Assignment.java @@ -0,0 +1,119 @@ +package forge; + +import java.util.ArrayList; + +public class Quest_Assignment { + private int id; + private int requiredNumberWins; + private int computerLife; + + private long creditsReward; + + private String name; + private String desc; + private String difficulty; + private String cardReward; + + private boolean repeatable; + + private ArrayList cardRewardList = new ArrayList(); + + private CardList human = new CardList(); + private ArrayList compy = new ArrayList(); + + public void setId(int id) { + this.id = id; + } + + public int getId() { + return id; + } + + public void setCreditsReward(long creditsReward) { + this.creditsReward = creditsReward; + } + + public long getCreditsReward() { + return creditsReward; + } + + public void setName(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + public String getDesc() { + return desc; + } + + public void setDifficulty(String difficulty) { + this.difficulty = difficulty; + } + + public String getDifficulty() { + return difficulty; + } + + public void setRepeatable(boolean repeatable) { + this.repeatable = repeatable; + } + + public boolean isRepeatable() { + return repeatable; + } + + public void setRequiredNumberWins(int requiredNumberWins) { + this.requiredNumberWins = requiredNumberWins; + } + + public int getRequiredNumberWins() { + return requiredNumberWins; + } + + public void setComputerLife(int computerLife) { + this.computerLife = computerLife; + } + + public int getComputerLife() { + return computerLife; + } + + public void setCardReward(String cardReward) { + this.cardReward = cardReward; + } + + public String getCardReward() { + return cardReward; + } + + public void setHuman(CardList human) { + this.human = human; + } + + public CardList getHuman() { + return human; + } + + public void addCompy(String s) { + this.compy.add(s); + } + + public ArrayList getCompy() { + return compy; + } + + public void setCardRewardList(ArrayList cardRewardList) { + this.cardRewardList = cardRewardList; + } + + public ArrayList getCardRewardList() { + return cardRewardList; + } +} diff --git a/src/forge/ReadQuest_Assignment.java b/src/forge/ReadQuest_Assignment.java new file mode 100644 index 00000000000..3c63f8897f9 --- /dev/null +++ b/src/forge/ReadQuest_Assignment.java @@ -0,0 +1,187 @@ +package forge; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.util.ArrayList; + +import forge.error.ErrorViewer; +import forge.properties.ForgeProps; +import forge.properties.NewConstants; + + + +public class ReadQuest_Assignment implements Runnable, NewConstants { + private BufferedReader in; + private ArrayList allQuests = new ArrayList(); + + private int totalWins; + private ArrayList completedQuests = new ArrayList(); + + public static void main(String args[]) throws Exception { + try { + ReadQuest_Assignment read = new ReadQuest_Assignment(ForgeProps.getFile(QUEST.QUESTS), null); + + javax.swing.SwingUtilities.invokeAndWait(read); + // read.run(); + + Quest_Assignment qa[] = new Quest_Assignment[read.allQuests.size()]; + read.allQuests.toArray(qa); + for(int i = 0; i < qa.length; i++) { + System.out.println(qa[i].getId()); + System.out.println(qa[i].getName()); + System.out.println(qa[i].getDesc()); + System.out.println(qa[i].getDifficulty()); + System.out.println(qa[i].isRepeatable()); + System.out.println(qa[i].getRequiredNumberWins()); + } + } catch(Exception ex) { + ErrorViewer.showError(ex); + System.out.println("Error reading file " + ex); + } + } + + public ArrayList getQuests() { + return new ArrayList(allQuests); + } + + public ArrayList getQuestsByIds(ArrayList availableQuestIds) { + ArrayList quests = new ArrayList(); + + for(Quest_Assignment qa:allQuests) + { + if (availableQuestIds.contains(qa.getId())) + quests.add(qa); + } + + return quests; + } + + public Quest_Assignment getQuestById(int i) + { + for(Quest_Assignment qa:allQuests) + { + if (qa.getId() == i) + return qa; + } + return null; + } + + /* + public Quest_Assignment getQuestById(int id) { + return allQuests.get(id); + } + */ + + public ReadQuest_Assignment(String filename, QuestData questData) { + this(new File(filename), questData); + } + + public ReadQuest_Assignment(File file, QuestData questData) { + + if (questData != null) { + totalWins = questData.getWin(); + if (questData.getCompletedQuests() != null) + completedQuests = questData.getCompletedQuests(); + else + completedQuests = new ArrayList(); + } + + if(!file.exists()) + throw new RuntimeException("ReadQuest_Assignment : constructor error -- file not found -- filename is " + + file.getAbsolutePath()); + + //makes the checked exception, into an unchecked runtime exception + try { + in = new BufferedReader(new FileReader(file)); + } catch(Exception ex) { + ErrorViewer.showError(ex, "File \"%s\" not found", file.getAbsolutePath()); + throw new RuntimeException("ReadQuest_Assignment : constructor error -- file not found -- filename is " + + file.getPath()); + } + }//ReadCard() + + /* id + * name + * desc + * difficulty + * repeatable + * numberWinsRequired + * cardReward + * creditsReward + */ + + public void run() { + Quest_Assignment qa; + String s = readLine(); + ArrayList ids = new ArrayList(); + + while(!s.equals("End")) { + qa = new Quest_Assignment(); + if(s.equals("")) throw new RuntimeException("ReadQuest_Assignment : run() reading error, id is blank"); + int id = Integer.parseInt(s); + qa.setId(id); + + s = readLine(); + qa.setName(s); + + s = readLine(); + qa.setDesc(s); + + + s = readLine(); + qa.setDifficulty(s); + if (qa.getDifficulty().equals("Medium")) + qa.setComputerLife(25); + else if (qa.getDifficulty().equals("Hard")) + qa.setComputerLife(30); + else if (qa.getDifficulty().equals("Very Hard")) + qa.setComputerLife(35); + + s = readLine(); + if (s.equals("Repeatable")) + qa.setRepeatable(true); + else + qa.setRepeatable(false); + + s = readLine(); + int wins = Integer.valueOf(s); + qa.setRequiredNumberWins(wins); + + s = readLine(); + qa.setCardReward(s); + + s = readLine(); + long reward = Long.parseLong(s.trim()); + qa.setCreditsReward(reward); + + //s = readLine(); + s = readLine(); + + if(ids.contains(qa.getId())) { + System.out.println("ReadQuest_Assignment:run() error - duplicate card name: " + qa.getId()); + throw new RuntimeException("ReadQuest_Assignment:run() error - duplicate card name: " + qa.getId()); + } + + ids.add(qa.getId()); + if (qa.getRequiredNumberWins() <= totalWins && !completedQuests.contains(qa.getId()) ) { + QuestUtil.setupQuest(qa); + allQuests.add(qa); + } + + //id: + s = readLine(); + } + }//run() + + private String readLine() { + //makes the checked exception, into an unchecked runtime exception + try { + String s = in.readLine(); + if(s != null) s = s.trim(); + return s; + } catch(Exception ex) { + ErrorViewer.showError(ex); + throw new RuntimeException("ReadQuest_Assignment: readLine(Quest_Assignment) error"); + } + }//readLine(Quest_Assignment) +} \ No newline at end of file diff --git a/src/forge/SpellAbility.java b/src/forge/SpellAbility.java index 568e4e11516..7080cb729f8 100644 --- a/src/forge/SpellAbility.java +++ b/src/forge/SpellAbility.java @@ -247,6 +247,8 @@ public abstract class SpellAbility { @Override public String toString() { + if (description.contains("CARDNAME")) + description = description.replace("CARDNAME", this.getSourceCard().getName()); return description; } diff --git a/src/forge/properties/NewConstants.java b/src/forge/properties/NewConstants.java index 44fa8ad629f..6d388b073d7 100644 --- a/src/forge/properties/NewConstants.java +++ b/src/forge/properties/NewConstants.java @@ -62,7 +62,8 @@ public interface NewConstants { public static final String IMAGE_BASE = "image/base"; public static final String IMAGE_TOKEN = "image/token"; - public static final String SOUND_BASE = "sound/base"; + public static final String IMAGE_ICON = "image/icon"; + public static final String SOUND_BASE = "sound/base"; /** * properties for regular game @@ -90,12 +91,15 @@ public interface NewConstants { public static final String RARE = "quest/rare"; public static final String PRICE = "quest/price"; + public static final String QUESTS = "quest/quests"; public static final String EASY = "quest/easy"; public static final String MEDIUM = "quest/medium"; public static final String HARD = "quest/hard"; public static final String DATA = "quest/data"; + + public static final String DECKS = "quest/decks-dir"; } /**