From 908459513513ada34b4071294e7886e194a56806 Mon Sep 17 00:00:00 2001 From: Styxo Date: Mon, 26 Sep 2016 18:43:04 +0200 Subject: [PATCH] Star Wars Set implemented --- Mage.Sets/src/mage/sets/StarWars.java | 58 +++++ Mage.Sets/src/mage/sets/starwars/AAT1.java | 122 ++++++++++ Mage.Sets/src/mage/sets/starwars/ATST.java | 75 ++++++ Mage.Sets/src/mage/sets/starwars/AWing.java | 80 +++++++ .../mage/sets/starwars/AcklayOfTheArena.java | 73 ++++++ .../src/mage/sets/starwars/AcquireTarget.java | 77 +++++++ .../src/mage/sets/starwars/AdmiralAckbar.java | 136 +++++++++++ .../mage/sets/starwars/AdroitHateflayer.java | 68 ++++++ .../mage/sets/starwars/AnakinSkywalker.java | 147 ++++++++++++ .../mage/sets/starwars/AncientHolocron.java | 75 ++++++ .../sets/starwars/AqualishBountyHunter.java | 68 ++++++ Mage.Sets/src/mage/sets/starwars/Arrest.java | 52 +++++ .../src/mage/sets/starwars/AsajjVentress.java | 90 ++++++++ .../sets/starwars/AurraSingBaneOfJedi.java | 195 ++++++++++++++++ .../src/mage/sets/starwars/BanthaHerd.java | 112 +++++++++ .../src/mage/sets/starwars/BatheInBacta.java | 73 ++++++ .../src/mage/sets/starwars/BattleTactics.java | 67 ++++++ .../src/mage/sets/starwars/BibFortuna.java | 75 ++++++ .../mage/sets/starwars/BlackMarketDealer.java | 96 ++++++++ .../src/mage/sets/starwars/BlindWorship.java | 88 ++++++++ .../src/mage/sets/starwars/BobaFett.java | 87 +++++++ Mage.Sets/src/mage/sets/starwars/Bossk.java | 124 ++++++++++ .../mage/sets/starwars/BountyCollector.java | 75 ++++++ .../src/mage/sets/starwars/BountySniper.java | 76 +++++++ .../src/mage/sets/starwars/BountySpotter.java | 82 +++++++ .../src/mage/sets/starwars/BullRancor.java | 76 +++++++ .../src/mage/sets/starwars/C3POAndR2D2.java | 75 ++++++ .../src/mage/sets/starwars/CantinaBand.java | 80 +++++++ Mage.Sets/src/mage/sets/starwars/Capture.java | 71 ++++++ .../mage/sets/starwars/CarboniteChamber.java | 122 ++++++++++ .../src/mage/sets/starwars/Chewbacca.java | 82 +++++++ .../src/mage/sets/starwars/ChiefChirpa.java | 100 ++++++++ .../mage/sets/starwars/CloakingDevice.java | 88 ++++++++ .../src/mage/sets/starwars/CommanderCody.java | 82 +++++++ Mage.Sets/src/mage/sets/starwars/Condemn.java | 52 +++++ .../mage/sets/starwars/CorellianCorvette.java | 67 ++++++ .../src/mage/sets/starwars/Crossfire.java | 65 ++++++ .../mage/sets/starwars/CrueltyOfTheSith.java | 89 ++++++++ .../mage/sets/starwars/CunningAbduction.java | 213 ++++++++++++++++++ .../mage/sets/starwars/DagobahMawSlug.java | 75 ++++++ .../sets/starwars/DarkApprenticeship.java | 70 ++++++ .../src/mage/sets/starwars/DarkDecision.java | 147 ++++++++++++ .../src/mage/sets/starwars/DarkTrooper.java | 63 ++++++ .../src/mage/sets/starwars/DarthMaul.java | 84 +++++++ .../sets/starwars/DarthSidiousSithLord.java | 95 ++++++++ .../src/mage/sets/starwars/DarthTyranus.java | 167 ++++++++++++++ .../src/mage/sets/starwars/DarthVader.java | 131 +++++++++++ .../src/mage/sets/starwars/DeathTrooper.java | 76 +++++++ .../mage/sets/starwars/DeployTheTroops.java | 60 +++++ .../src/mage/sets/starwars/DoomBlade.java | 54 +++++ .../src/mage/sets/starwars/DroidFactory.java | 105 +++++++++ .../src/mage/sets/starwars/DroidFoundry.java | 70 ++++++ .../src/mage/sets/starwars/Droideka.java | 73 ++++++ .../src/mage/sets/starwars/DroneHolocron.java | 95 ++++++++ .../src/mage/sets/starwars/EMPBlast.java | 94 ++++++++ .../mage/sets/starwars/EchoBaseCommando.java | 135 +++++++++++ .../src/mage/sets/starwars/EscapePod.java | 101 +++++++++ .../src/mage/sets/starwars/EwokAmbush.java | 107 +++++++++ .../mage/sets/starwars/EwokFiredancers.java | 71 ++++++ .../src/mage/sets/starwars/EwokVillage.java | 70 ++++++ .../src/mage/sets/starwars/Exogorth.java | 105 +++++++++ Mage.Sets/src/mage/sets/starwars/Explore.java | 52 +++++ .../starwars/FerocityOfTheUnderworld.java | 91 ++++++++ .../sets/starwars/FlamesOfRemembrance.java | 170 ++++++++++++++ .../src/mage/sets/starwars/ForceAdept.java | 124 ++++++++++ .../src/mage/sets/starwars/ForceChoke.java | 68 ++++++ .../src/mage/sets/starwars/ForceDenial.java | 80 +++++++ .../src/mage/sets/starwars/ForceDrain.java | 66 ++++++ .../src/mage/sets/starwars/ForceHealing.java | 65 ++++++ .../mage/sets/starwars/ForceLightning.java | 100 ++++++++ .../src/mage/sets/starwars/ForceMastery.java | 106 +++++++++ .../src/mage/sets/starwars/ForcePull.java | 73 ++++++ .../src/mage/sets/starwars/ForcePush.java | 64 ++++++ .../src/mage/sets/starwars/ForceScream.java | 73 ++++++ .../src/mage/sets/starwars/ForceSpark.java | 64 ++++++ Mage.Sets/src/mage/sets/starwars/Forest1.java | 51 +++++ Mage.Sets/src/mage/sets/starwars/Forest2.java | 51 +++++ Mage.Sets/src/mage/sets/starwars/Forest3.java | 51 +++++ .../mage/sets/starwars/FulfillContract.java | 69 ++++++ .../mage/sets/starwars/GamorreanEnforcer.java | 73 ++++++ .../sets/starwars/GamorreanPrisonGuard.java | 110 +++++++++ .../mage/sets/starwars/GeneralGrievous.java | 76 +++++++ .../mage/sets/starwars/GiftedInitiate.java | 77 +++++++ .../mage/sets/starwars/GrandMoffTarkin.java | 62 +++++ .../sets/starwars/GreaterKraytDragon.java | 75 ++++++ Mage.Sets/src/mage/sets/starwars/Greedo.java | 89 ++++++++ Mage.Sets/src/mage/sets/starwars/Gundark.java | 72 ++++++ .../src/mage/sets/starwars/GunganCaptain.java | 68 ++++++ Mage.Sets/src/mage/sets/starwars/HanSolo.java | 92 ++++++++ .../src/mage/sets/starwars/HazardTrooper.java | 77 +++++++ .../src/mage/sets/starwars/HeadHunting.java | 69 ++++++ .../src/mage/sets/starwars/HeavyTrooper.java | 74 ++++++ .../src/mage/sets/starwars/HotPursuit.java | 79 +++++++ .../mage/sets/starwars/HungryDragonsnake.java | 73 ++++++ .../mage/sets/starwars/HuntToExtinction.java | 81 +++++++ .../src/mage/sets/starwars/HuttCrimeLord.java | 65 ++++++ .../src/mage/sets/starwars/HuttPalace.java | 70 ++++++ Mage.Sets/src/mage/sets/starwars/IG88B.java | 114 ++++++++++ .../mage/sets/starwars/ImagesOfThePast.java | 103 +++++++++ .../mage/sets/starwars/ImperialGunner.java | 80 +++++++ .../src/mage/sets/starwars/ImperialSpy.java | 72 ++++++ .../sets/starwars/InsatiableRakghoul.java | 136 +++++++++++ .../src/mage/sets/starwars/Interrogation.java | 100 ++++++++ .../src/mage/sets/starwars/IonCannon.java | 75 ++++++ .../sets/starwars/IronFistOfTheEmpire.java | 86 +++++++ .../sets/starwars/IrresponsibleGambling.java | 62 +++++ Mage.Sets/src/mage/sets/starwars/Island1.java | 51 +++++ Mage.Sets/src/mage/sets/starwars/Island2.java | 51 +++++ Mage.Sets/src/mage/sets/starwars/Island3.java | 51 +++++ .../mage/sets/starwars/IthorianInitiate.java | 71 ++++++ .../src/mage/sets/starwars/JabbaTheHutt.java | 144 ++++++++++++ .../src/mage/sets/starwars/JangoFett.java | 81 +++++++ .../src/mage/sets/starwars/JarJarBinks.java | 208 +++++++++++++++++ .../sets/starwars/JarKaiBattleStance.java | 74 ++++++ .../mage/sets/starwars/JediBattleHealer.java | 73 ++++++ .../mage/sets/starwars/JediBattleMage.java | 74 ++++++ .../mage/sets/starwars/JediBattleSage.java | 77 +++++++ .../src/mage/sets/starwars/JediEnclave.java | 105 +++++++++ .../src/mage/sets/starwars/JediHolocron.java | 95 ++++++++ .../src/mage/sets/starwars/JediInquirer.java | 72 ++++++ .../mage/sets/starwars/JediInstructor.java | 81 +++++++ .../src/mage/sets/starwars/JediKnight.java | 82 +++++++ .../src/mage/sets/starwars/JediMindTrick.java | 61 +++++ .../src/mage/sets/starwars/JediReflex.java | 78 +++++++ .../mage/sets/starwars/JediStarfighter.java | 88 ++++++++ .../src/mage/sets/starwars/JediTemple.java | 71 ++++++ .../src/mage/sets/starwars/JediTraining.java | 117 ++++++++++ .../src/mage/sets/starwars/JumpTrooper.java | 128 +++++++++++ .../src/mage/sets/starwars/JungleVillage.java | 105 +++++++++ .../sets/starwars/KaminoCloningFacility.java | 83 +++++++ .../src/mage/sets/starwars/KiAdiMundi.java | 82 +++++++ .../src/mage/sets/starwars/LAATGunship.java | 74 ++++++ .../mage/sets/starwars/LandoCalrissian.java | 92 ++++++++ .../sets/starwars/LegacyOfTheBeloved.java | 118 ++++++++++ .../src/mage/sets/starwars/LightningBolt.java | 52 +++++ .../src/mage/sets/starwars/Lightsaber.java | 89 ++++++++ .../src/mage/sets/starwars/LoyalTauntaun.java | 80 +++++++ .../src/mage/sets/starwars/LukeSkywalker.java | 134 +++++++++++ .../src/mage/sets/starwars/MaceWindu.java | 86 +++++++ .../mage/sets/starwars/MaintenanceDroid.java | 164 ++++++++++++++ .../mage/sets/starwars/MaintenanceHangar.java | 169 ++++++++++++++ .../mage/sets/starwars/MantellianSavrip.java | 101 +++++++++ .../mage/sets/starwars/MarchOfTheDroids.java | 60 +++++ .../mage/sets/starwars/MightOfTheWild.java | 90 ++++++++ .../mage/sets/starwars/MillenniumFalcon.java | 75 ++++++ .../sets/starwars/MiracolousRecovery.java | 52 +++++ .../src/mage/sets/starwars/MoistureFarm.java | 75 ++++++ .../sets/starwars/MonCalamariCruiser.java | 68 ++++++ .../sets/starwars/MonCalamariInitiate.java | 69 ++++++ .../src/mage/sets/starwars/Mountain1.java | 51 +++++ .../src/mage/sets/starwars/Mountain2.java | 51 +++++ .../src/mage/sets/starwars/Mountain3.java | 51 +++++ .../src/mage/sets/starwars/N1Starfighter.java | 86 +++++++ .../sets/starwars/NeophyteHateflayer.java | 70 ++++++ .../src/mage/sets/starwars/NerfHerder.java | 81 +++++++ .../src/mage/sets/starwars/NexuStalker.java | 80 +++++++ .../src/mage/sets/starwars/Nightspider.java | 62 +++++ .../src/mage/sets/starwars/NoContest.java | 63 ++++++ .../sets/starwars/NoviceBountyHunter.java | 68 ++++++ .../src/mage/sets/starwars/NuteGunray.java | 91 ++++++++ .../src/mage/sets/starwars/ObiWanKenobi.java | 113 ++++++++++ .../sets/starwars/OrbitalBombardment.java | 67 ++++++ Mage.Sets/src/mage/sets/starwars/Order66.java | 71 ++++++ .../sets/starwars/OrtolanKeyboardist.java | 66 ++++++ .../mage/sets/starwars/OuterRimSlaver.java | 78 +++++++ .../mage/sets/starwars/OutlawHolocron.java | 95 ++++++++ .../sets/starwars/PersonalEnergyField.java | 106 +++++++++ Mage.Sets/src/mage/sets/starwars/Plain1.java | 51 +++++ Mage.Sets/src/mage/sets/starwars/Plain2.java | 51 +++++ Mage.Sets/src/mage/sets/starwars/Plain3.java | 51 +++++ Mage.Sets/src/mage/sets/starwars/PloKoon.java | 71 ++++++ .../mage/sets/starwars/PrecipiceOfMortis.java | 117 ++++++++++ .../mage/sets/starwars/PredatorsStrike.java | 56 +++++ .../src/mage/sets/starwars/Preordain.java | 55 +++++ .../src/mage/sets/starwars/PrimalInstict.java | 100 ++++++++ .../src/mage/sets/starwars/PrincessLeia.java | 106 +++++++++ .../src/mage/sets/starwars/ProbeDroid.java | 72 ++++++ .../mage/sets/starwars/PublicArrangement.java | 107 +++++++++ .../src/mage/sets/starwars/QuiGonJinn.java | 93 ++++++++ .../src/mage/sets/starwars/RagingReek.java | 66 ++++++ .../src/mage/sets/starwars/RallyingFire.java | 60 +++++ .../src/mage/sets/starwars/RavenousWampa.java | 117 ++++++++++ .../src/mage/sets/starwars/Regression.java | 69 ++++++ .../mage/sets/starwars/RepublicFrigate.java | 62 +++++ .../src/mage/sets/starwars/Repurpose.java | 72 ++++++ Mage.Sets/src/mage/sets/starwars/Revenge.java | 139 ++++++++++++ .../src/mage/sets/starwars/RidingRonto.java | 66 ++++++ .../src/mage/sets/starwars/RocketTrooper.java | 88 ++++++++ .../src/mage/sets/starwars/RoguesPassage.java | 30 +++ .../src/mage/sets/starwars/RuleOfTwo.java | 83 +++++++ .../src/mage/sets/starwars/Rumination.java | 105 +++++++++ .../src/mage/sets/starwars/RumorMonger.java | 76 +++++++ .../src/mage/sets/starwars/SabaccGame.java | 62 +++++ .../src/mage/sets/starwars/SalvageSquad.java | 68 ++++++ .../src/mage/sets/starwars/SandTrooper.java | 76 +++++++ .../src/mage/sets/starwars/SarlaccPit.java | 93 ++++++++ .../mage/sets/starwars/ScoutThePerimeter.java | 70 ++++++ .../src/mage/sets/starwars/ScoutTrooper.java | 76 +++++++ .../src/mage/sets/starwars/SecurityDroid.java | 68 ++++++ .../mage/sets/starwars/SenatorBailOrgana.java | 75 ++++++ .../mage/sets/starwars/SenatorLottDod.java | 167 ++++++++++++++ .../sets/starwars/SenatorOnacondaFarr.java | 71 ++++++ .../sets/starwars/SenatorPadmeAmidala.java | 66 ++++++ .../sets/starwars/SenatorPasselArgente.java | 65 ++++++ .../src/mage/sets/starwars/ShaakHerd.java | 67 ++++++ .../src/mage/sets/starwars/ShadowTrooper.java | 79 +++++++ .../src/mage/sets/starwars/ShockTrooper.java | 75 ++++++ .../mage/sets/starwars/ShowOfDominance.java | 137 +++++++++++ .../src/mage/sets/starwars/SithAssassin.java | 84 +++++++ .../src/mage/sets/starwars/SithCitadel.java | 71 ++++++ .../src/mage/sets/starwars/SithEvoker.java | 146 ++++++++++++ .../src/mage/sets/starwars/SithHolocron.java | 95 ++++++++ .../mage/sets/starwars/SithInquisitor.java | 74 ++++++ .../src/mage/sets/starwars/SithLord.java | 106 +++++++++ .../src/mage/sets/starwars/SithMagic.java | 184 +++++++++++++++ .../mage/sets/starwars/SithManipulator.java | 85 +++++++ .../src/mage/sets/starwars/SithMarauder.java | 74 ++++++ .../src/mage/sets/starwars/SithMindseer.java | 76 +++++++ .../src/mage/sets/starwars/SithRavager.java | 118 ++++++++++ .../src/mage/sets/starwars/SithRuins.java | 105 +++++++++ .../src/mage/sets/starwars/SithSorcerer.java | 77 +++++++ .../mage/sets/starwars/SithThoughtseeker.java | 75 ++++++ Mage.Sets/src/mage/sets/starwars/SlaveI.java | 74 ++++++ .../sets/starwars/SmashToSmithereens.java | 52 +++++ .../src/mage/sets/starwars/SnowTrooper.java | 76 +++++++ .../mage/sets/starwars/SpeederTrooper.java | 76 +++++++ .../src/mage/sets/starwars/StarDestroyer.java | 98 ++++++++ .../sets/starwars/StrikeTeamCommando.java | 80 +++++++ .../mage/sets/starwars/SuperBattleDroid.java | 62 +++++ .../mage/sets/starwars/SurpriseManeuver.java | 66 ++++++ Mage.Sets/src/mage/sets/starwars/Swamp1.java | 51 +++++ Mage.Sets/src/mage/sets/starwars/Swamp2.java | 51 +++++ Mage.Sets/src/mage/sets/starwars/Swamp3.java | 51 +++++ .../src/mage/sets/starwars/SwarmTheSkies.java | 59 +++++ .../src/mage/sets/starwars/TIEBomber.java | 72 ++++++ .../mage/sets/starwars/TIEInterceptor.java | 100 ++++++++ .../src/mage/sets/starwars/TankDroid.java | 72 ++++++ .../src/mage/sets/starwars/Terentatek.java | 150 ++++++++++++ .../mage/sets/starwars/TheBattleOfEndor.java | 115 ++++++++++ .../sets/starwars/TheBattleOfGeonosis.java | 83 +++++++ .../mage/sets/starwars/TheBattleOfHoth.java | 75 ++++++ .../mage/sets/starwars/TheBattleOfNaboo.java | 107 +++++++++ .../mage/sets/starwars/TheBattleOfYavin.java | 128 +++++++++++ .../src/mage/sets/starwars/TheDeathStar.java | 91 ++++++++ .../starwars/TradeFederationBattleship.java | 95 ++++++++ .../starwars/TreacherousBountyHunter.java | 106 +++++++++ .../src/mage/sets/starwars/TriFighter.java | 67 ++++++ .../src/mage/sets/starwars/TrooperArmor.java | 71 ++++++ .../mage/sets/starwars/TrooperCommando.java | 76 +++++++ .../mage/sets/starwars/TwilekSeductess.java | 63 ++++++ .../sets/starwars/UgnaughtScrapWorker.java | 73 ++++++ .../mage/sets/starwars/UnderworldSlums.java | 105 +++++++++ .../mage/sets/starwars/UnityOfTheDroids.java | 90 ++++++++ .../mage/sets/starwars/UnrulySureshot.java | 87 +++++++ Mage.Sets/src/mage/sets/starwars/VWing.java | 66 ++++++ .../src/mage/sets/starwars/VaporSnag.java | 53 +++++ .../sets/starwars/WeequayBeastmaster.java | 72 ++++++ .../src/mage/sets/starwars/WildHolocron.java | 95 ++++++++ .../mage/sets/starwars/WisdomOfTheJedi.java | 93 ++++++++ Mage.Sets/src/mage/sets/starwars/WompRat.java | 69 ++++++ .../sets/starwars/WookieeBountyHunter.java | 64 ++++++ .../src/mage/sets/starwars/WookieeMystic.java | 164 ++++++++++++++ .../mage/sets/starwars/WookieeRaidleader.java | 79 +++++++ Mage.Sets/src/mage/sets/starwars/XWing.java | 73 ++++++ Mage.Sets/src/mage/sets/starwars/YWing.java | 82 +++++++ .../mage/sets/starwars/YodaJediMaster.java | 149 ++++++++++++ .../src/mage/sets/starwars/ZamWessel.java | 63 ++++++ .../condition/common/HateCondition.java | 65 ++++++ .../counter/MoveCountersTargetsEffect.java | 104 +++++++++ .../mage/abilities/keyword/BountyAbility.java | 55 +++++ .../abilities/keyword/MeditateAbility.java | 106 +++++++++ .../mage/abilities/keyword/RepairAbility.java | 146 ++++++++++++ .../abilities/keyword/SpaceflightAbility.java | 102 +++++++++ .../main/java/mage/constants/AbilityWord.java | 1 + .../main/java/mage/counters/CounterType.java | 1 + .../main/java/mage/game/events/GameEvent.java | 1 + .../mage/game/permanent/token/DroidToken.java | 51 +++++ .../mage/game/permanent/token/EwokToken.java | 47 ++++ .../game/permanent/token/TIEFighterToken.java | 26 +++ .../game/permanent/token/TrooperToken.java | 51 +++++ .../common/NonCombatDamageWatcher.java | 89 ++++++++ 281 files changed, 23647 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/StarWars.java create mode 100644 Mage.Sets/src/mage/sets/starwars/AAT1.java create mode 100644 Mage.Sets/src/mage/sets/starwars/ATST.java create mode 100644 Mage.Sets/src/mage/sets/starwars/AWing.java create mode 100644 Mage.Sets/src/mage/sets/starwars/AcklayOfTheArena.java create mode 100644 Mage.Sets/src/mage/sets/starwars/AcquireTarget.java create mode 100644 Mage.Sets/src/mage/sets/starwars/AdmiralAckbar.java create mode 100644 Mage.Sets/src/mage/sets/starwars/AdroitHateflayer.java create mode 100644 Mage.Sets/src/mage/sets/starwars/AnakinSkywalker.java create mode 100644 Mage.Sets/src/mage/sets/starwars/AncientHolocron.java create mode 100644 Mage.Sets/src/mage/sets/starwars/AqualishBountyHunter.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Arrest.java create mode 100644 Mage.Sets/src/mage/sets/starwars/AsajjVentress.java create mode 100644 Mage.Sets/src/mage/sets/starwars/AurraSingBaneOfJedi.java create mode 100644 Mage.Sets/src/mage/sets/starwars/BanthaHerd.java create mode 100644 Mage.Sets/src/mage/sets/starwars/BatheInBacta.java create mode 100644 Mage.Sets/src/mage/sets/starwars/BattleTactics.java create mode 100644 Mage.Sets/src/mage/sets/starwars/BibFortuna.java create mode 100644 Mage.Sets/src/mage/sets/starwars/BlackMarketDealer.java create mode 100644 Mage.Sets/src/mage/sets/starwars/BlindWorship.java create mode 100644 Mage.Sets/src/mage/sets/starwars/BobaFett.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Bossk.java create mode 100644 Mage.Sets/src/mage/sets/starwars/BountyCollector.java create mode 100644 Mage.Sets/src/mage/sets/starwars/BountySniper.java create mode 100644 Mage.Sets/src/mage/sets/starwars/BountySpotter.java create mode 100644 Mage.Sets/src/mage/sets/starwars/BullRancor.java create mode 100644 Mage.Sets/src/mage/sets/starwars/C3POAndR2D2.java create mode 100644 Mage.Sets/src/mage/sets/starwars/CantinaBand.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Capture.java create mode 100644 Mage.Sets/src/mage/sets/starwars/CarboniteChamber.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Chewbacca.java create mode 100644 Mage.Sets/src/mage/sets/starwars/ChiefChirpa.java create mode 100644 Mage.Sets/src/mage/sets/starwars/CloakingDevice.java create mode 100644 Mage.Sets/src/mage/sets/starwars/CommanderCody.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Condemn.java create mode 100644 Mage.Sets/src/mage/sets/starwars/CorellianCorvette.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Crossfire.java create mode 100644 Mage.Sets/src/mage/sets/starwars/CrueltyOfTheSith.java create mode 100644 Mage.Sets/src/mage/sets/starwars/CunningAbduction.java create mode 100644 Mage.Sets/src/mage/sets/starwars/DagobahMawSlug.java create mode 100644 Mage.Sets/src/mage/sets/starwars/DarkApprenticeship.java create mode 100644 Mage.Sets/src/mage/sets/starwars/DarkDecision.java create mode 100644 Mage.Sets/src/mage/sets/starwars/DarkTrooper.java create mode 100644 Mage.Sets/src/mage/sets/starwars/DarthMaul.java create mode 100644 Mage.Sets/src/mage/sets/starwars/DarthSidiousSithLord.java create mode 100644 Mage.Sets/src/mage/sets/starwars/DarthTyranus.java create mode 100644 Mage.Sets/src/mage/sets/starwars/DarthVader.java create mode 100644 Mage.Sets/src/mage/sets/starwars/DeathTrooper.java create mode 100644 Mage.Sets/src/mage/sets/starwars/DeployTheTroops.java create mode 100644 Mage.Sets/src/mage/sets/starwars/DoomBlade.java create mode 100644 Mage.Sets/src/mage/sets/starwars/DroidFactory.java create mode 100644 Mage.Sets/src/mage/sets/starwars/DroidFoundry.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Droideka.java create mode 100644 Mage.Sets/src/mage/sets/starwars/DroneHolocron.java create mode 100644 Mage.Sets/src/mage/sets/starwars/EMPBlast.java create mode 100644 Mage.Sets/src/mage/sets/starwars/EchoBaseCommando.java create mode 100644 Mage.Sets/src/mage/sets/starwars/EscapePod.java create mode 100644 Mage.Sets/src/mage/sets/starwars/EwokAmbush.java create mode 100644 Mage.Sets/src/mage/sets/starwars/EwokFiredancers.java create mode 100644 Mage.Sets/src/mage/sets/starwars/EwokVillage.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Exogorth.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Explore.java create mode 100644 Mage.Sets/src/mage/sets/starwars/FerocityOfTheUnderworld.java create mode 100644 Mage.Sets/src/mage/sets/starwars/FlamesOfRemembrance.java create mode 100644 Mage.Sets/src/mage/sets/starwars/ForceAdept.java create mode 100644 Mage.Sets/src/mage/sets/starwars/ForceChoke.java create mode 100644 Mage.Sets/src/mage/sets/starwars/ForceDenial.java create mode 100644 Mage.Sets/src/mage/sets/starwars/ForceDrain.java create mode 100644 Mage.Sets/src/mage/sets/starwars/ForceHealing.java create mode 100644 Mage.Sets/src/mage/sets/starwars/ForceLightning.java create mode 100644 Mage.Sets/src/mage/sets/starwars/ForceMastery.java create mode 100644 Mage.Sets/src/mage/sets/starwars/ForcePull.java create mode 100644 Mage.Sets/src/mage/sets/starwars/ForcePush.java create mode 100644 Mage.Sets/src/mage/sets/starwars/ForceScream.java create mode 100644 Mage.Sets/src/mage/sets/starwars/ForceSpark.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Forest1.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Forest2.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Forest3.java create mode 100644 Mage.Sets/src/mage/sets/starwars/FulfillContract.java create mode 100644 Mage.Sets/src/mage/sets/starwars/GamorreanEnforcer.java create mode 100644 Mage.Sets/src/mage/sets/starwars/GamorreanPrisonGuard.java create mode 100644 Mage.Sets/src/mage/sets/starwars/GeneralGrievous.java create mode 100644 Mage.Sets/src/mage/sets/starwars/GiftedInitiate.java create mode 100644 Mage.Sets/src/mage/sets/starwars/GrandMoffTarkin.java create mode 100644 Mage.Sets/src/mage/sets/starwars/GreaterKraytDragon.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Greedo.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Gundark.java create mode 100644 Mage.Sets/src/mage/sets/starwars/GunganCaptain.java create mode 100644 Mage.Sets/src/mage/sets/starwars/HanSolo.java create mode 100644 Mage.Sets/src/mage/sets/starwars/HazardTrooper.java create mode 100644 Mage.Sets/src/mage/sets/starwars/HeadHunting.java create mode 100644 Mage.Sets/src/mage/sets/starwars/HeavyTrooper.java create mode 100644 Mage.Sets/src/mage/sets/starwars/HotPursuit.java create mode 100644 Mage.Sets/src/mage/sets/starwars/HungryDragonsnake.java create mode 100644 Mage.Sets/src/mage/sets/starwars/HuntToExtinction.java create mode 100644 Mage.Sets/src/mage/sets/starwars/HuttCrimeLord.java create mode 100644 Mage.Sets/src/mage/sets/starwars/HuttPalace.java create mode 100644 Mage.Sets/src/mage/sets/starwars/IG88B.java create mode 100644 Mage.Sets/src/mage/sets/starwars/ImagesOfThePast.java create mode 100644 Mage.Sets/src/mage/sets/starwars/ImperialGunner.java create mode 100644 Mage.Sets/src/mage/sets/starwars/ImperialSpy.java create mode 100644 Mage.Sets/src/mage/sets/starwars/InsatiableRakghoul.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Interrogation.java create mode 100644 Mage.Sets/src/mage/sets/starwars/IonCannon.java create mode 100644 Mage.Sets/src/mage/sets/starwars/IronFistOfTheEmpire.java create mode 100644 Mage.Sets/src/mage/sets/starwars/IrresponsibleGambling.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Island1.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Island2.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Island3.java create mode 100644 Mage.Sets/src/mage/sets/starwars/IthorianInitiate.java create mode 100644 Mage.Sets/src/mage/sets/starwars/JabbaTheHutt.java create mode 100644 Mage.Sets/src/mage/sets/starwars/JangoFett.java create mode 100644 Mage.Sets/src/mage/sets/starwars/JarJarBinks.java create mode 100644 Mage.Sets/src/mage/sets/starwars/JarKaiBattleStance.java create mode 100644 Mage.Sets/src/mage/sets/starwars/JediBattleHealer.java create mode 100644 Mage.Sets/src/mage/sets/starwars/JediBattleMage.java create mode 100644 Mage.Sets/src/mage/sets/starwars/JediBattleSage.java create mode 100644 Mage.Sets/src/mage/sets/starwars/JediEnclave.java create mode 100644 Mage.Sets/src/mage/sets/starwars/JediHolocron.java create mode 100644 Mage.Sets/src/mage/sets/starwars/JediInquirer.java create mode 100644 Mage.Sets/src/mage/sets/starwars/JediInstructor.java create mode 100644 Mage.Sets/src/mage/sets/starwars/JediKnight.java create mode 100644 Mage.Sets/src/mage/sets/starwars/JediMindTrick.java create mode 100644 Mage.Sets/src/mage/sets/starwars/JediReflex.java create mode 100644 Mage.Sets/src/mage/sets/starwars/JediStarfighter.java create mode 100644 Mage.Sets/src/mage/sets/starwars/JediTemple.java create mode 100644 Mage.Sets/src/mage/sets/starwars/JediTraining.java create mode 100644 Mage.Sets/src/mage/sets/starwars/JumpTrooper.java create mode 100644 Mage.Sets/src/mage/sets/starwars/JungleVillage.java create mode 100644 Mage.Sets/src/mage/sets/starwars/KaminoCloningFacility.java create mode 100644 Mage.Sets/src/mage/sets/starwars/KiAdiMundi.java create mode 100644 Mage.Sets/src/mage/sets/starwars/LAATGunship.java create mode 100644 Mage.Sets/src/mage/sets/starwars/LandoCalrissian.java create mode 100644 Mage.Sets/src/mage/sets/starwars/LegacyOfTheBeloved.java create mode 100644 Mage.Sets/src/mage/sets/starwars/LightningBolt.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Lightsaber.java create mode 100644 Mage.Sets/src/mage/sets/starwars/LoyalTauntaun.java create mode 100644 Mage.Sets/src/mage/sets/starwars/LukeSkywalker.java create mode 100644 Mage.Sets/src/mage/sets/starwars/MaceWindu.java create mode 100644 Mage.Sets/src/mage/sets/starwars/MaintenanceDroid.java create mode 100644 Mage.Sets/src/mage/sets/starwars/MaintenanceHangar.java create mode 100644 Mage.Sets/src/mage/sets/starwars/MantellianSavrip.java create mode 100644 Mage.Sets/src/mage/sets/starwars/MarchOfTheDroids.java create mode 100644 Mage.Sets/src/mage/sets/starwars/MightOfTheWild.java create mode 100644 Mage.Sets/src/mage/sets/starwars/MillenniumFalcon.java create mode 100644 Mage.Sets/src/mage/sets/starwars/MiracolousRecovery.java create mode 100644 Mage.Sets/src/mage/sets/starwars/MoistureFarm.java create mode 100644 Mage.Sets/src/mage/sets/starwars/MonCalamariCruiser.java create mode 100644 Mage.Sets/src/mage/sets/starwars/MonCalamariInitiate.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Mountain1.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Mountain2.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Mountain3.java create mode 100644 Mage.Sets/src/mage/sets/starwars/N1Starfighter.java create mode 100644 Mage.Sets/src/mage/sets/starwars/NeophyteHateflayer.java create mode 100644 Mage.Sets/src/mage/sets/starwars/NerfHerder.java create mode 100644 Mage.Sets/src/mage/sets/starwars/NexuStalker.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Nightspider.java create mode 100644 Mage.Sets/src/mage/sets/starwars/NoContest.java create mode 100644 Mage.Sets/src/mage/sets/starwars/NoviceBountyHunter.java create mode 100644 Mage.Sets/src/mage/sets/starwars/NuteGunray.java create mode 100644 Mage.Sets/src/mage/sets/starwars/ObiWanKenobi.java create mode 100644 Mage.Sets/src/mage/sets/starwars/OrbitalBombardment.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Order66.java create mode 100644 Mage.Sets/src/mage/sets/starwars/OrtolanKeyboardist.java create mode 100644 Mage.Sets/src/mage/sets/starwars/OuterRimSlaver.java create mode 100644 Mage.Sets/src/mage/sets/starwars/OutlawHolocron.java create mode 100644 Mage.Sets/src/mage/sets/starwars/PersonalEnergyField.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Plain1.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Plain2.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Plain3.java create mode 100644 Mage.Sets/src/mage/sets/starwars/PloKoon.java create mode 100644 Mage.Sets/src/mage/sets/starwars/PrecipiceOfMortis.java create mode 100644 Mage.Sets/src/mage/sets/starwars/PredatorsStrike.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Preordain.java create mode 100644 Mage.Sets/src/mage/sets/starwars/PrimalInstict.java create mode 100644 Mage.Sets/src/mage/sets/starwars/PrincessLeia.java create mode 100644 Mage.Sets/src/mage/sets/starwars/ProbeDroid.java create mode 100644 Mage.Sets/src/mage/sets/starwars/PublicArrangement.java create mode 100644 Mage.Sets/src/mage/sets/starwars/QuiGonJinn.java create mode 100644 Mage.Sets/src/mage/sets/starwars/RagingReek.java create mode 100644 Mage.Sets/src/mage/sets/starwars/RallyingFire.java create mode 100644 Mage.Sets/src/mage/sets/starwars/RavenousWampa.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Regression.java create mode 100644 Mage.Sets/src/mage/sets/starwars/RepublicFrigate.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Repurpose.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Revenge.java create mode 100644 Mage.Sets/src/mage/sets/starwars/RidingRonto.java create mode 100644 Mage.Sets/src/mage/sets/starwars/RocketTrooper.java create mode 100644 Mage.Sets/src/mage/sets/starwars/RoguesPassage.java create mode 100644 Mage.Sets/src/mage/sets/starwars/RuleOfTwo.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Rumination.java create mode 100644 Mage.Sets/src/mage/sets/starwars/RumorMonger.java create mode 100644 Mage.Sets/src/mage/sets/starwars/SabaccGame.java create mode 100644 Mage.Sets/src/mage/sets/starwars/SalvageSquad.java create mode 100644 Mage.Sets/src/mage/sets/starwars/SandTrooper.java create mode 100644 Mage.Sets/src/mage/sets/starwars/SarlaccPit.java create mode 100644 Mage.Sets/src/mage/sets/starwars/ScoutThePerimeter.java create mode 100644 Mage.Sets/src/mage/sets/starwars/ScoutTrooper.java create mode 100644 Mage.Sets/src/mage/sets/starwars/SecurityDroid.java create mode 100644 Mage.Sets/src/mage/sets/starwars/SenatorBailOrgana.java create mode 100644 Mage.Sets/src/mage/sets/starwars/SenatorLottDod.java create mode 100644 Mage.Sets/src/mage/sets/starwars/SenatorOnacondaFarr.java create mode 100644 Mage.Sets/src/mage/sets/starwars/SenatorPadmeAmidala.java create mode 100644 Mage.Sets/src/mage/sets/starwars/SenatorPasselArgente.java create mode 100644 Mage.Sets/src/mage/sets/starwars/ShaakHerd.java create mode 100644 Mage.Sets/src/mage/sets/starwars/ShadowTrooper.java create mode 100644 Mage.Sets/src/mage/sets/starwars/ShockTrooper.java create mode 100644 Mage.Sets/src/mage/sets/starwars/ShowOfDominance.java create mode 100644 Mage.Sets/src/mage/sets/starwars/SithAssassin.java create mode 100644 Mage.Sets/src/mage/sets/starwars/SithCitadel.java create mode 100644 Mage.Sets/src/mage/sets/starwars/SithEvoker.java create mode 100644 Mage.Sets/src/mage/sets/starwars/SithHolocron.java create mode 100644 Mage.Sets/src/mage/sets/starwars/SithInquisitor.java create mode 100644 Mage.Sets/src/mage/sets/starwars/SithLord.java create mode 100644 Mage.Sets/src/mage/sets/starwars/SithMagic.java create mode 100644 Mage.Sets/src/mage/sets/starwars/SithManipulator.java create mode 100644 Mage.Sets/src/mage/sets/starwars/SithMarauder.java create mode 100644 Mage.Sets/src/mage/sets/starwars/SithMindseer.java create mode 100644 Mage.Sets/src/mage/sets/starwars/SithRavager.java create mode 100644 Mage.Sets/src/mage/sets/starwars/SithRuins.java create mode 100644 Mage.Sets/src/mage/sets/starwars/SithSorcerer.java create mode 100644 Mage.Sets/src/mage/sets/starwars/SithThoughtseeker.java create mode 100644 Mage.Sets/src/mage/sets/starwars/SlaveI.java create mode 100644 Mage.Sets/src/mage/sets/starwars/SmashToSmithereens.java create mode 100644 Mage.Sets/src/mage/sets/starwars/SnowTrooper.java create mode 100644 Mage.Sets/src/mage/sets/starwars/SpeederTrooper.java create mode 100644 Mage.Sets/src/mage/sets/starwars/StarDestroyer.java create mode 100644 Mage.Sets/src/mage/sets/starwars/StrikeTeamCommando.java create mode 100644 Mage.Sets/src/mage/sets/starwars/SuperBattleDroid.java create mode 100644 Mage.Sets/src/mage/sets/starwars/SurpriseManeuver.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Swamp1.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Swamp2.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Swamp3.java create mode 100644 Mage.Sets/src/mage/sets/starwars/SwarmTheSkies.java create mode 100644 Mage.Sets/src/mage/sets/starwars/TIEBomber.java create mode 100644 Mage.Sets/src/mage/sets/starwars/TIEInterceptor.java create mode 100644 Mage.Sets/src/mage/sets/starwars/TankDroid.java create mode 100644 Mage.Sets/src/mage/sets/starwars/Terentatek.java create mode 100644 Mage.Sets/src/mage/sets/starwars/TheBattleOfEndor.java create mode 100644 Mage.Sets/src/mage/sets/starwars/TheBattleOfGeonosis.java create mode 100644 Mage.Sets/src/mage/sets/starwars/TheBattleOfHoth.java create mode 100644 Mage.Sets/src/mage/sets/starwars/TheBattleOfNaboo.java create mode 100644 Mage.Sets/src/mage/sets/starwars/TheBattleOfYavin.java create mode 100644 Mage.Sets/src/mage/sets/starwars/TheDeathStar.java create mode 100644 Mage.Sets/src/mage/sets/starwars/TradeFederationBattleship.java create mode 100644 Mage.Sets/src/mage/sets/starwars/TreacherousBountyHunter.java create mode 100644 Mage.Sets/src/mage/sets/starwars/TriFighter.java create mode 100644 Mage.Sets/src/mage/sets/starwars/TrooperArmor.java create mode 100644 Mage.Sets/src/mage/sets/starwars/TrooperCommando.java create mode 100644 Mage.Sets/src/mage/sets/starwars/TwilekSeductess.java create mode 100644 Mage.Sets/src/mage/sets/starwars/UgnaughtScrapWorker.java create mode 100644 Mage.Sets/src/mage/sets/starwars/UnderworldSlums.java create mode 100644 Mage.Sets/src/mage/sets/starwars/UnityOfTheDroids.java create mode 100644 Mage.Sets/src/mage/sets/starwars/UnrulySureshot.java create mode 100644 Mage.Sets/src/mage/sets/starwars/VWing.java create mode 100644 Mage.Sets/src/mage/sets/starwars/VaporSnag.java create mode 100644 Mage.Sets/src/mage/sets/starwars/WeequayBeastmaster.java create mode 100644 Mage.Sets/src/mage/sets/starwars/WildHolocron.java create mode 100644 Mage.Sets/src/mage/sets/starwars/WisdomOfTheJedi.java create mode 100644 Mage.Sets/src/mage/sets/starwars/WompRat.java create mode 100644 Mage.Sets/src/mage/sets/starwars/WookieeBountyHunter.java create mode 100644 Mage.Sets/src/mage/sets/starwars/WookieeMystic.java create mode 100644 Mage.Sets/src/mage/sets/starwars/WookieeRaidleader.java create mode 100644 Mage.Sets/src/mage/sets/starwars/XWing.java create mode 100644 Mage.Sets/src/mage/sets/starwars/YWing.java create mode 100644 Mage.Sets/src/mage/sets/starwars/YodaJediMaster.java create mode 100644 Mage.Sets/src/mage/sets/starwars/ZamWessel.java create mode 100644 Mage/src/main/java/mage/abilities/condition/common/HateCondition.java create mode 100644 Mage/src/main/java/mage/abilities/effects/common/counter/MoveCountersTargetsEffect.java create mode 100644 Mage/src/main/java/mage/abilities/keyword/BountyAbility.java create mode 100644 Mage/src/main/java/mage/abilities/keyword/MeditateAbility.java create mode 100644 Mage/src/main/java/mage/abilities/keyword/RepairAbility.java create mode 100644 Mage/src/main/java/mage/abilities/keyword/SpaceflightAbility.java create mode 100644 Mage/src/main/java/mage/game/permanent/token/DroidToken.java create mode 100644 Mage/src/main/java/mage/game/permanent/token/EwokToken.java create mode 100644 Mage/src/main/java/mage/game/permanent/token/TIEFighterToken.java create mode 100644 Mage/src/main/java/mage/game/permanent/token/TrooperToken.java create mode 100644 Mage/src/main/java/mage/watchers/common/NonCombatDamageWatcher.java diff --git a/Mage.Sets/src/mage/sets/StarWars.java b/Mage.Sets/src/mage/sets/StarWars.java new file mode 100644 index 0000000000..788b01c0d8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/StarWars.java @@ -0,0 +1,58 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets; + +import java.util.GregorianCalendar; +import mage.cards.ExpansionSet; +import mage.constants.SetType; + +/** + * + * @author Styxo + */ +public class StarWars extends ExpansionSet { + + private static final StarWars fINSTANCE = new StarWars(); + + public static StarWars getInstance() { + return fINSTANCE; + } + + private StarWars() { + super("Star Wars", "SWS", "mage.sets.starwars", new GregorianCalendar(2015, 12, 25).getTime(), SetType.CUSTOM_SET); + this.blockName = "Star Wars"; + this.hasBoosters = true; + this.hasBasicLands = true; + this.numBoosterLands = 1; + this.numBoosterCommon = 10; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 8; + } + +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/starwars/AAT1.java b/Mage.Sets/src/mage/sets/starwars/AAT1.java new file mode 100644 index 0000000000..f48d8a22b4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/AAT1.java @@ -0,0 +1,122 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DoIfCostPaid; +import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.effects.common.LoseLifeTargetEffect; +import mage.abilities.keyword.RepairAbility; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.target.TargetPlayer; + +/** + * + * @author Styxo + */ +public class AAT1 extends CardImpl { + + public AAT1(UUID ownerId) { + super(ownerId, 179, "AAT-1", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{1}{W}{U}{B}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Droid"); + this.subtype.add("Construct"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Whenever a repair counter is removed from a creature card your graveyard, you may pay {1}. If you do, target player loses 1 life and you gain 1 life. + DoIfCostPaid effect = new DoIfCostPaid(new LoseLifeTargetEffect(1), new GenericManaCost(1)); + Effect additionalEffect = new GainLifeEffect(1); + additionalEffect.setText("and you gain 1 life"); + effect.addEffect(additionalEffect); + Ability ability = new AAT1TriggeredAbility(effect); + ability.addTarget(new TargetPlayer()); + this.addAbility(ability); + + // Repair 4 + this.addAbility(new RepairAbility(4)); + } + + public AAT1(final AAT1 card) { + super(card); + } + + @Override + public AAT1 copy() { + return new AAT1(this); + } +} + +class AAT1TriggeredAbility extends TriggeredAbilityImpl { + + public AAT1TriggeredAbility(Effect effect) { + super(Zone.BATTLEFIELD, effect); + } + + public AAT1TriggeredAbility(AAT1TriggeredAbility ability) { + super(ability); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.COUNTER_REMOVED; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + Card card = game.getCard(event.getTargetId()); + if (event.getPlayerId().equals(game.getControllerId(sourceId)) + && card.getCardType().contains(CardType.CREATURE) + && game.getState().getZone(card.getId()) == Zone.GRAVEYARD + && event.getData().equals("repair")) { + return true; + } + return false; + } + + @Override + public String getRule() { + return "Whenever a repair counter is removed from a creature card in your graveyard " + super.getRule(); + } + + @Override + public AAT1TriggeredAbility copy() { + return new AAT1TriggeredAbility(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/ATST.java b/Mage.Sets/src/mage/sets/starwars/ATST.java new file mode 100644 index 0000000000..982a55fb93 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/ATST.java @@ -0,0 +1,75 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.continuous.BoostControlledEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; + +/** + * + * @author Styxo + */ +public class ATST extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Trooper creatures"); + + static { + filter.add(new SubtypePredicate("Trooper")); + } + + public ATST(UUID ownerId) { + super(ownerId, 128, "ATST", Rarity.RARE, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{5}{G}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Human"); + this.subtype.add("Trooper"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Trooper creatures you control get +3/+3. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(3, 3, Duration.WhileOnBattlefield, filter, false))); + + } + + public ATST(final ATST card) { + super(card); + } + + @Override + public ATST copy() { + return new ATST(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/AWing.java b/Mage.Sets/src/mage/sets/starwars/AWing.java new file mode 100644 index 0000000000..e305ddf96f --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/AWing.java @@ -0,0 +1,80 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.RemoveFromCombatSourceEffect; +import mage.abilities.effects.common.combat.AttacksIfAbleSourceEffect; +import mage.abilities.keyword.HasteAbility; +import mage.abilities.keyword.SpaceflightAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author Styxo + */ +public class AWing extends CardImpl { + + public AWing(UUID ownerId) { + super(ownerId, 96, "A-Wing", Rarity.NA/*UNCOMMON*/, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{2}{R}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Rebel"); + this.subtype.add("Starship"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Haste + this.addAbility(HasteAbility.getInstance()); + + // Spaceflight + this.addAbility(SpaceflightAbility.getInstance()); + + // {1}:Remove A-wing from combat. It must attack on your next combat if able. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new RemoveFromCombatSourceEffect(), new GenericManaCost(1)); + //ability.addEffect(new AttacksIfAbleSourceEffect(Duration.Custom)); + // NEEDS FIX + this.addAbility(ability); + } + + public AWing(final AWing card) { + super(card); + } + + @Override + public AWing copy() { + return new AWing(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/AcklayOfTheArena.java b/Mage.Sets/src/mage/sets/starwars/AcklayOfTheArena.java new file mode 100644 index 0000000000..d1c8369f2f --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/AcklayOfTheArena.java @@ -0,0 +1,73 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.BecomesMonstrousTriggeredAbility; +import mage.abilities.effects.common.FightTargetsEffect; +import mage.abilities.keyword.MonstrosityAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.common.TargetOpponentsCreaturePermanent; + +/** + * + * @author Styxo + */ +public class AcklayOfTheArena extends CardImpl { + + public AcklayOfTheArena(UUID ownerId) { + super(ownerId, 180, "Acklay of the Arena", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{1}{R}{G}{W}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Insect"); + this.subtype.add("Beast"); + this.power = new MageInt(5); + this.toughness = new MageInt(4); + + // {2}{R}{G}{W}: Monstrosity 1. + this.addAbility(new MonstrosityAbility("{2}{R}{G}{W}", 1)); + + // Whenever a creature you control becomes monstrous, it fights target creature an opponent controls. + Ability ability = new BecomesMonstrousTriggeredAbility(new FightTargetsEffect("it fights target creature an opponent controls")); + ability.addTarget(new TargetOpponentsCreaturePermanent()); + this.addAbility(ability); + + } + + public AcklayOfTheArena(final AcklayOfTheArena card) { + super(card); + } + + @Override + public AcklayOfTheArena copy() { + return new AcklayOfTheArena(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/AcquireTarget.java b/Mage.Sets/src/mage/sets/starwars/AcquireTarget.java new file mode 100644 index 0000000000..30be7d4c6e --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/AcquireTarget.java @@ -0,0 +1,77 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DrawCardTargetEffect; +import mage.abilities.effects.common.LoseLifeTargetEffect; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.counters.CounterType; +import mage.target.TargetPlayer; +import mage.target.common.TargetOpponentsCreaturePermanent; +import mage.target.targetpointer.SecondTargetPointer; + +/** + * + * @author Styxo + */ +public class AcquireTarget extends CardImpl { + + public AcquireTarget(UUID ownerId) { + super(ownerId, 64, "Acquire Target", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{2}{B}"); + this.expansionSetCode = "SWS"; + + // Target player draws two cards and loses 2 life. + this.getSpellAbility().addTarget(new TargetPlayer()); + this.getSpellAbility().addEffect(new DrawCardTargetEffect(2)); + Effect effect = new LoseLifeTargetEffect(2); + effect.setText("and loses 2 life"); + this.getSpellAbility().addEffect(effect); + + // Put a bounty counter on up to one target creature an opponent controls. + effect = new AddCountersTargetEffect(CounterType.BOUNTY.createInstance()); + effect.setTargetPointer(SecondTargetPointer.getInstance()); + effect.setText("Put a bounty counter on up to one target creature an opponent controls."); + this.getSpellAbility().addEffect(effect); + this.getSpellAbility().addTarget(new TargetOpponentsCreaturePermanent(0, 1)); + + } + + public AcquireTarget(final AcquireTarget card) { + super(card); + } + + @Override + public AcquireTarget copy() { + return new AcquireTarget(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/AdmiralAckbar.java b/Mage.Sets/src/mage/sets/starwars/AdmiralAckbar.java new file mode 100644 index 0000000000..4735ff30eb --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/AdmiralAckbar.java @@ -0,0 +1,136 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.AttacksWithCreaturesTriggeredAbility; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.CastSourceTriggeredAbility; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.UntapAllControllerEffect; +import mage.abilities.keyword.SpaceflightAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.token.Token; + +/** + * + * @author Styxo + */ +public class AdmiralAckbar extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Starship creatures"); + + static { + filter.add(new SubtypePredicate("Starship")); + } + + public AdmiralAckbar(UUID ownerId) { + super(ownerId, 34, "Admiral Ackbar", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{4}{U}{U}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Calamari"); + this.subtype.add("Rebel"); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // When you cast Admiral Ackbar, create two 2/3 blue Rebel Starship artifact creature tokens with spaceflight name B-Wing. + this.addAbility(new CastSourceTriggeredAbility(new CreateTokenEffect(new RebelStarshipToken(), 2), false)); + + // At the beggining of each upkeep, untap all starships you control. + this.addAbility(new BeginningOfUpkeepTriggeredAbility(new UntapAllControllerEffect(filter), TargetController.ANY, false)); + + // Whenever two or more Starship creatures you control attack, draw a card. + this.addAbility(new AttacksWithCreaturesTriggeredAbility(new DrawCardSourceControllerEffect(1), 2, filter)); + } + + public AdmiralAckbar(final AdmiralAckbar card) { + super(card); + } + + @Override + public AdmiralAckbar copy() { + return new AdmiralAckbar(this); + } +} + +class RebelStarshipToken extends Token { + + public RebelStarshipToken() { + super("B-Wing", "2/3 blue Rebel Starship artifact creature tokens with spaceflight name B-Wing", 2, 3); + this.setOriginalExpansionSetCode("SWS"); + cardType.add(CardType.CREATURE); + cardType.add(CardType.ARTIFACT); + abilities.add(SpaceflightAbility.getInstance()); + color.setBlue(true); + subtype.add("Rebel"); + subtype.add("Starship"); + } +} + +class AdmiralAckbarTriggeredAbility extends TriggeredAbilityImpl { + + public AdmiralAckbarTriggeredAbility(Effect effect) { + super(Zone.BATTLEFIELD, effect); + } + + public AdmiralAckbarTriggeredAbility(final AdmiralAckbarTriggeredAbility ability) { + super(ability); + } + + @Override + public AdmiralAckbarTriggeredAbility copy() { + return new AdmiralAckbarTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.DECLARED_ATTACKERS; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + return game.getCombat().getAttackers().size() >= 2 && game.getCombat().getAttackerId().equals(getControllerId()); + } + + @Override + public String getRule() { + return "Whenever two or more Starship creatures you control attack, draw a card" ; + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/AdroitHateflayer.java b/Mage.Sets/src/mage/sets/starwars/AdroitHateflayer.java new file mode 100644 index 0000000000..d5d7e27c7e --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/AdroitHateflayer.java @@ -0,0 +1,68 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.effects.common.LoseLifeOpponentsEffect; +import mage.abilities.keyword.MenaceAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class AdroitHateflayer extends CardImpl { + + public AdroitHateflayer(UUID ownerId) { + super(ownerId, 181, "Adroit Hateflayer", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{U}{B}{R}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Nautolan"); + this.subtype.add("Sith"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Menace + this.addAbility(new MenaceAbility()); + + // Whenever Adroit Hateflayer attacks, each opponent loses 2 life. + this.addAbility(new AttacksTriggeredAbility(new LoseLifeOpponentsEffect(2), false)); + } + + public AdroitHateflayer(final AdroitHateflayer card) { + super(card); + } + + @Override + public AdroitHateflayer copy() { + return new AdroitHateflayer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/AnakinSkywalker.java b/Mage.Sets/src/mage/sets/starwars/AnakinSkywalker.java new file mode 100644 index 0000000000..1f430aed08 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/AnakinSkywalker.java @@ -0,0 +1,147 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.ActivateAsSorceryActivatedAbility; +import mage.abilities.common.DiesCreatureTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.effects.ReplacementEffectImpl; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.keyword.TransformAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.permanent.AnotherPredicate; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.ZoneChangeEvent; +import mage.game.permanent.Permanent; +import mage.game.permanent.PermanentCard; +import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author Styxo + */ +public class AnakinSkywalker extends CardImpl { + + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another creature"); + + static { + filter.add(new AnotherPredicate()); + } + + public AnakinSkywalker(UUID ownerId) { + super(ownerId, 182, "Anakin Skywalker", Rarity.MYTHIC, new CardType[]{CardType.CREATURE}, "{3}{U}{B}{R}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Human"); + this.subtype.add("Sith"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + this.canTransform = true; + this.secondSideCard = new DarthVader(ownerId); + + // Whenever another creature dies, put a +1/+1 counter on Anakin Skywalker. + this.addAbility(new DiesCreatureTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false, true)); + + // Sacrifice another creature: Target creature gets -1/-1 until end of turn. Activate this ability only as a sorcery. + Ability ability = new ActivateAsSorceryActivatedAbility(Zone.BATTLEFIELD, new BoostTargetEffect(-1, -1, Duration.EndOfTurn), new SacrificeTargetCost(new TargetControlledCreaturePermanent(filter))); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + + // If Anakin Skywalker would die, regenerate and transform him instead. + this.addAbility(new TransformAbility()); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new AnakinSkywalkerEffect())); + + } + + public AnakinSkywalker(final AnakinSkywalker card) { + super(card); + } + + @Override + public AnakinSkywalker copy() { + return new AnakinSkywalker(this); + } +} + +class AnakinSkywalkerEffect extends ReplacementEffectImpl { + + AnakinSkywalkerEffect() { + super(Duration.WhileOnBattlefield, Outcome.Transform); + staticText = "If {this} would die, regenerate and transform him instead"; + } + + AnakinSkywalkerEffect(final AnakinSkywalkerEffect effect) { + super(effect); + } + + @Override + public boolean replaceEvent(GameEvent event, Ability source, Game game) { + Permanent permanent = game.getPermanent(event.getTargetId()); + if (permanent != null) { + permanent.regenerate(source.getSourceId(), game); + if (permanent.canTransform(game)) { + if (!permanent.isTransformed()) { + permanent.setTransformed(true); + game.informPlayers(((PermanentCard) permanent).getCard().getLogName() + " transforms into " + permanent.getSecondCardFace().getLogName()); + return true; + } + } + } + return false; + } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.ZONE_CHANGE; + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + return event.getTargetId().equals(source.getSourceId()) && ((ZoneChangeEvent) event).isDiesEvent(); + } + + @Override + public AnakinSkywalkerEffect copy() { + return new AnakinSkywalkerEffect(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/AncientHolocron.java b/Mage.Sets/src/mage/sets/starwars/AncientHolocron.java new file mode 100644 index 0000000000..92ca0560c2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/AncientHolocron.java @@ -0,0 +1,75 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.AddManaOfAnyColorEffect; +import mage.abilities.mana.ConditionalAnyColorManaAbility; +import mage.abilities.mana.SimpleManaAbility; +import mage.abilities.mana.conditional.ConditionalSpellManaBuilder; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.FilterSpell; +import mage.filter.predicate.mageobject.MulticoloredPredicate; + +/** + * + * @author Styxo + */ +public class AncientHolocron extends CardImpl { + + private static final FilterSpell filter = new FilterSpell("multicolored spells"); + + static { + filter.add(new MulticoloredPredicate()); + } + + public AncientHolocron(UUID ownerId) { + super(ownerId, 230, "Ancient Holocron", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT}, "{3}"); + this.expansionSetCode = "SWS"; + + // {T}: Add one mana of any color to your manapool. + this.addAbility(new SimpleManaAbility(Zone.BATTLEFIELD, new AddManaOfAnyColorEffect(1), new TapSourceCost())); + + // {T}: Add to mana of any color to your manapool. Spend this mana only to cast multicolored spells. + this.addAbility(new ConditionalAnyColorManaAbility(2, new ConditionalSpellManaBuilder(filter))); + + } + + public AncientHolocron(final AncientHolocron card) { + super(card); + } + + @Override + public AncientHolocron copy() { + return new AncientHolocron(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/AqualishBountyHunter.java b/Mage.Sets/src/mage/sets/starwars/AqualishBountyHunter.java new file mode 100644 index 0000000000..d58b69daef --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/AqualishBountyHunter.java @@ -0,0 +1,68 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.effects.common.discard.DiscardTargetEffect; +import mage.abilities.keyword.BountyAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.TargetPlayer; + +/** + * + * @author Styxo + */ +public class AqualishBountyHunter extends CardImpl { + + public AqualishBountyHunter(UUID ownerId) { + super(ownerId, 65, "Aqualish Bounty Hunter", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{4}{B}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Aqualish"); + this.subtype.add("Hunter"); + this.power = new MageInt(4); + this.toughness = new MageInt(3); + + // Bounty — Whenever a creature an opponent controls with a bounty counter on it dies, target player discards a card. + Ability ability = new BountyAbility(new DiscardTargetEffect(1)); + ability.addTarget(new TargetPlayer()); + this.addAbility(ability); + } + + public AqualishBountyHunter(final AqualishBountyHunter card) { + super(card); + } + + @Override + public AqualishBountyHunter copy() { + return new AqualishBountyHunter(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/Arrest.java b/Mage.Sets/src/mage/sets/starwars/Arrest.java new file mode 100644 index 0000000000..6b92b76051 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Arrest.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; + +/** + * + * @author Styxo + */ +public class Arrest extends mage.sets.mirrodin.Arrest { + + public Arrest(UUID ownerId) { + super(ownerId); + this.cardNumber = "2"; + this.expansionSetCode = "SWS"; + } + + public Arrest(final Arrest card) { + super(card); + } + + @Override + public Arrest copy() { + return new Arrest(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/AsajjVentress.java b/Mage.Sets/src/mage/sets/starwars/AsajjVentress.java new file mode 100644 index 0000000000..de6cebd5d1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/AsajjVentress.java @@ -0,0 +1,90 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.common.BecomesBlockedTriggeredAbility; +import mage.abilities.condition.common.HateCondition; +import mage.abilities.decorator.ConditionalTriggeredAbility; +import mage.abilities.dynamicvalue.common.BlockedCreatureCount; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.combat.BlocksIfAbleTargetEffect; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.keyword.DoubleStrikeAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.target.common.TargetCreaturePermanent; +import mage.watchers.common.NonCombatDamageWatcher; + +/** + * + * @author Styxo + */ +public class AsajjVentress extends CardImpl { + + public AsajjVentress(UUID ownerId) { + super(ownerId, 183, "Asajj Ventress", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{1}{U}{B}{R}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Dathomirian"); + this.subtype.add("Sith"); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + // Double Strike + this.addAbility(DoubleStrikeAbility.getInstance()); + + // When Asajj Ventress becomes blocked, she gets +1/+1 for each creature blocking her until end of turn. + BlockedCreatureCount value = new BlockedCreatureCount(); + Effect effect = new BoostSourceEffect(value, value, Duration.EndOfTurn, true); + effect.setText("she gets +1/+1 for each creature blocking her until end of turn"); + this.addAbility(new BecomesBlockedTriggeredAbility(effect, false)); + + // Hate — Whenever Asajj Ventress attacks, if an opponent lost life from a source other than combat damage this turn, target creature blocks this turn if able. + Ability ability = new ConditionalTriggeredAbility( + new AttacksTriggeredAbility(new BlocksIfAbleTargetEffect(Duration.EndOfTurn), false), + HateCondition.getInstance(), + "Hate — Whenever Asajj Ventress attacks, if an opponent lost life from a source other than combat damage this turn, target creature blocks this turn if able"); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability, new NonCombatDamageWatcher()); + } + + public AsajjVentress(final AsajjVentress card) { + super(card); + } + + @Override + public AsajjVentress copy() { + return new AsajjVentress(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/AurraSingBaneOfJedi.java b/Mage.Sets/src/mage/sets/starwars/AurraSingBaneOfJedi.java new file mode 100644 index 0000000000..bfae8fb503 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/AurraSingBaneOfJedi.java @@ -0,0 +1,195 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.HashSet; +import java.util.List; +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.LoyaltyAbility; +import mage.abilities.common.LeavesBattlefieldAllTriggeredAbility; +import mage.abilities.common.PlanswalkerEntersWithLoyalityCountersAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.DamageControllerEffect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.effects.common.GetEmblemTargetPlayerEffect; +import mage.abilities.effects.common.SetPlayerLifeAllEffect; +import mage.abilities.effects.common.discard.DiscardControllerEffect; +import mage.abilities.effects.common.discard.DiscardHandAllEffect; +import mage.cards.CardImpl; +import mage.choices.Choice; +import mage.choices.ChoiceImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.permanent.TokenPredicate; +import mage.game.Game; +import mage.game.command.Emblem; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.TargetPlayer; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author Styxo + */ +public class AurraSingBaneOfJedi extends CardImpl { + + public AurraSingBaneOfJedi(UUID ownerId) { + super(ownerId, 168, "Aurra Sing, Bane of Jedi", Rarity.MYTHIC, new CardType[]{CardType.PLANESWALKER}, "{2}{B}{R}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Aurra"); + + this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(3)); + + // +1:Aurra Sing deals 2 damage to target creature or 1 damage to you. + Ability ability = new LoyaltyAbility(new AurraSingBaneOfJediEffect(), +1); + ability.addTarget(new TargetCreaturePermanent(1)); + this.addAbility(ability); + + // -4:Target player gets an emblem wiht "Whenever a nontoken creature you control leave the battlefied, discard a card.". + ability = new LoyaltyAbility(new GetEmblemTargetPlayerEffect(new AurraSingBaneOfJediEmblem()), -4); + ability.addTarget(new TargetPlayer()); + this.addAbility(ability); + + // -6:Each player discards his or her hand and sacrificies all creatures he or she controls. Each player's life total becomes 1." + ability = new LoyaltyAbility(new DiscardHandAllEffect(), -6); + ability.addEffect(new SacrificeAllEffect()); + Effect effect = new SetPlayerLifeAllEffect(1, TargetController.ANY); + ability.addEffect(effect); + this.addAbility(ability); + } + + public AurraSingBaneOfJedi(final AurraSingBaneOfJedi card) { + super(card); + } + + @Override + public AurraSingBaneOfJedi copy() { + return new AurraSingBaneOfJedi(this); + } +} + +class AurraSingBaneOfJediEffect extends OneShotEffect { + + private static final HashSet choices = new HashSet<>(); + + static { + choices.add("Deal 2 damage to target creature"); + choices.add("Deal 1 damage to you"); + } + + public AurraSingBaneOfJediEffect() { + super(Outcome.Damage); + staticText = "{this} deals 2 damage to target creature or 1 damage to you"; + } + + public AurraSingBaneOfJediEffect(final AurraSingBaneOfJediEffect effect) { + super(effect); + } + + @Override + public AurraSingBaneOfJediEffect copy() { + return new AurraSingBaneOfJediEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + Choice choice = new ChoiceImpl(true); + choice.setMessage("Choose mode"); + choice.setChoices(choices); + while (!controller.choose(outcome, choice, game)) { + if (controller.canRespond()) { + return false; + } + } + + String chosen = choice.getChoice(); + switch (chosen) { + case "Deal 2 damage to target creature": + new DamageTargetEffect(2).apply(game, source); + break; + default: //"Deal 1 damage to you" + new DamageControllerEffect(1).apply(game, source); + break; + } + return true; + } + return false; + } +} + +class SacrificeAllEffect extends OneShotEffect { + + SacrificeAllEffect() { + super(Outcome.DestroyPermanent); + staticText = "and sacrificies all creatures he or she controls"; + } + + SacrificeAllEffect(final SacrificeAllEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + List permanents = game.getBattlefield().getActivePermanents(new FilterCreaturePermanent(), source.getControllerId(), source.getId(), game); + for (Permanent p : permanents) { + p.sacrifice(source.getSourceId(), game); + } + return true; + } + + @Override + public SacrificeAllEffect copy() { + return new SacrificeAllEffect(this); + } +} + +class AurraSingBaneOfJediEmblem extends Emblem { + + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("a nontoken creature you control"); + + static { + filter.add(Predicates.not(new TokenPredicate())); + } + + // Whenever a nontoken creature you control leave the battlefied, discard a card." + public AurraSingBaneOfJediEmblem() { + this.setName("Emblem - Aurra"); + getAbilities().add(new LeavesBattlefieldAllTriggeredAbility(Zone.COMMAND, new DiscardControllerEffect(1), filter, false)); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/BanthaHerd.java b/Mage.Sets/src/mage/sets/starwars/BanthaHerd.java new file mode 100644 index 0000000000..35f0dad8e8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/BanthaHerd.java @@ -0,0 +1,112 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.BecomesMonstrousSourceTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.keyword.MonstrosityAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.game.Game; +import mage.game.permanent.token.Token; +import mage.players.Player; + +/** + * + * @author Styxo + */ +public class BanthaHerd extends CardImpl { + + public BanthaHerd(UUID ownerId) { + super(ownerId, 3, "Bantha Herd", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{2}{W}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Beast"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // {X}{1}{W}{W}: Monstrosity X. + this.addAbility(new MonstrosityAbility("{X}{1}{W}{W}", Integer.MAX_VALUE)); + + // When Batha Herd becomes monstrous, create X 1/1 white Tusken Raider tokens. + this.addAbility(new BecomesMonstrousSourceTriggeredAbility(new BathaHerdEffect())); + } + + public BanthaHerd(final BanthaHerd card) { + super(card); + } + + @Override + public BanthaHerd copy() { + return new BanthaHerd(this); + } +} + +class BathaHerdEffect extends OneShotEffect { + + public BathaHerdEffect() { + super(Outcome.PutCreatureInPlay); + this.staticText = "create X 1/1 white Tusken Raider tokens"; + } + + public BathaHerdEffect(final BathaHerdEffect effect) { + super(effect); + } + + @Override + public BathaHerdEffect copy() { + return new BathaHerdEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + int xValue = ((BecomesMonstrousSourceTriggeredAbility) source).getMonstrosityValue(); + return new CreateTokenEffect(new TuskenRaiderToken(), xValue).apply(game, source); + } + return false; + } +} + +class TuskenRaiderToken extends Token { + + public TuskenRaiderToken() { + super("Tusken Raider", "white Tusken Raider creature token", 1, 1); + this.setOriginalExpansionSetCode("SWS"); + cardType.add(CardType.CREATURE); + color.setWhite(true); + subtype.add("Tusken"); + subtype.add("Raider"); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/BatheInBacta.java b/Mage.Sets/src/mage/sets/starwars/BatheInBacta.java new file mode 100644 index 0000000000..5d515a1bf3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/BatheInBacta.java @@ -0,0 +1,73 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.condition.InvertCondition; +import mage.abilities.condition.common.HateCondition; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.effects.common.GainLifeEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.watchers.common.NonCombatDamageWatcher; + +/** + * + * @author Styxo + */ +public class BatheInBacta extends CardImpl { + + public BatheInBacta(UUID ownerId) { + super(ownerId, 129, "Bathe in Bacta", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{1}{G}"); + this.expansionSetCode = "SWS"; + + // You gain 6 life. + this.getSpellAbility().addEffect(new ConditionalOneShotEffect( + new GainLifeEffect(6), + new InvertCondition(HateCondition.getInstance()), + "You gain 6 life")); + + // If you lost life from a source other than combat damage this turn, you gain 9 life instead. + this.getSpellAbility().addEffect(new ConditionalOneShotEffect( + new GainLifeEffect(9), + HateCondition.getInstance(), + "If you lost life from a source other than combat damage this turn, you gain 9 life instead")); + + this.getSpellAbility().addWatcher(new NonCombatDamageWatcher()); + } + + public BatheInBacta(final BatheInBacta card) { + super(card); + } + + @Override + public BatheInBacta copy() { + return new BatheInBacta(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/BattleTactics.java b/Mage.Sets/src/mage/sets/starwars/BattleTactics.java new file mode 100644 index 0000000000..d562eb8f78 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/BattleTactics.java @@ -0,0 +1,67 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.continuous.BoostControlledEffect; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.abilities.keyword.VigilanceAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class BattleTactics extends CardImpl { + + public BattleTactics(UUID ownerId) { + super(ownerId, 5, "Battle Tactics", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{1}{W}{W}"); + this.expansionSetCode = "SWS"; + + // Creatures you control get +2/+1 and gain vigilance until end of turn. + Effect effect = new BoostControlledEffect(2, 1, Duration.EndOfTurn); + effect.setText("Creatures you control get +2/+1"); + this.getSpellAbility().addEffect(effect); + effect = new GainAbilityControlledEffect(VigilanceAbility.getInstance(), Duration.EndOfTurn); + effect.setText("and gain vigilance until end of turn"); + this.getSpellAbility().addEffect(effect); + } + + public BattleTactics(final BattleTactics card) { + super(card); + } + + @Override + public BattleTactics copy() { + return new BattleTactics(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/BibFortuna.java b/Mage.Sets/src/mage/sets/starwars/BibFortuna.java new file mode 100644 index 0000000000..c784100e11 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/BibFortuna.java @@ -0,0 +1,75 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.DiesTriggeredAbility; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; +import mage.abilities.effects.common.ShuffleLibrarySourceEffect; +import mage.abilities.effects.common.search.SearchLibraryPutOnLibraryEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.common.TargetCardInLibrary; + +/** + * + * @author Styxo + */ +public class BibFortuna extends CardImpl { + + public BibFortuna(UUID ownerId) { + super(ownerId, 67, "Bib Fortuna", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{B}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Twi'lek"); + this.subtype.add("Advisor"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // When Bib Fortuna enters the battlefield search your library for a card then shuffle your library and put in on top. You lose 1 life. + Ability ability = new EntersBattlefieldTriggeredAbility(new SearchLibraryPutOnLibraryEffect(new TargetCardInLibrary()), false); + ability.addEffect(new LoseLifeSourceControllerEffect(1)); + this.addAbility(ability); + + // When Bib Fortuna dies shuffle your library. + this.addAbility(new DiesTriggeredAbility(new ShuffleLibrarySourceEffect())); + } + + public BibFortuna(final BibFortuna card) { + super(card); + } + + @Override + public BibFortuna copy() { + return new BibFortuna(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/BlackMarketDealer.java b/Mage.Sets/src/mage/sets/starwars/BlackMarketDealer.java new file mode 100644 index 0000000000..9c929f3e46 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/BlackMarketDealer.java @@ -0,0 +1,96 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.DiesCreatureTriggeredAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DrawCardTargetEffect; +import mage.abilities.effects.common.LoseLifeTargetEffect; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.abilities.keyword.BountyAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.counters.CounterType; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.filter.predicate.permanent.ControllerPredicate; +import mage.target.TargetPlayer; +import mage.target.common.TargetOpponentsCreaturePermanent; + +/** + * + * @author Styxo + */ +public class BlackMarketDealer extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a Rogue or Hunter creature you controle"); + + static { + + filter.add(new ControllerPredicate(TargetController.YOU)); + filter.add(Predicates.or(new SubtypePredicate("Rogue"), new SubtypePredicate("Hunter"))); + + } + + public BlackMarketDealer(UUID ownerId) { + super(ownerId, 68, "Black Market Dealer", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{B}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Human"); + this.subtype.add("Rogue"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Whenever a Rogue or Hunter creature you controle dies, put a bounty counter on target creature an opponent controls. + Ability ability = new DiesCreatureTriggeredAbility(new AddCountersTargetEffect(CounterType.BOUNTY.createInstance()), false, filter); + ability.addTarget(new TargetOpponentsCreaturePermanent()); + this.addAbility(ability); + + // Bounty — Whenever a creature an opponent controls with a bounty counter on it dies, target player loses 1 life and draws a card. + ability = new BountyAbility(new LoseLifeTargetEffect(1)); + Effect effect = new DrawCardTargetEffect(1); + effect.setText("and draws a card"); + ability.addEffect(effect); + ability.addTarget(new TargetPlayer()); + this.addAbility(ability); + } + + public BlackMarketDealer(final BlackMarketDealer card) { + super(card); + } + + @Override + public BlackMarketDealer copy() { + return new BlackMarketDealer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/BlindWorship.java b/Mage.Sets/src/mage/sets/starwars/BlindWorship.java new file mode 100644 index 0000000000..d6b8fe5d00 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/BlindWorship.java @@ -0,0 +1,88 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.dynamicvalue.common.SourcePermanentPowerCount; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.continuous.BoostControlledEffect; +import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; +import mage.abilities.keyword.EnchantAbility; +import mage.cards.CardImpl; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.AnotherPredicate; +import mage.target.TargetPermanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author Styxo + */ +public class BlindWorship extends CardImpl { + + public BlindWorship(UUID ownerId) { + super(ownerId, 184, "Blind Worship", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{2}{R}{G}{W}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Aura"); + + // Enchant creature + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.AddAbility)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + + // Enchanted creature has "Whenever this creature attacks, each other creature you control gets +X/+X until end of turn, where X is this creature's power." + DynamicValue xValue = new SourcePermanentPowerCount(); + Ability attachedAbility = new AttacksTriggeredAbility(new BoostControlledEffect(xValue, xValue, Duration.EndOfTurn, new FilterCreaturePermanent(), true), false); + Effect gainAbilityEffect = new GainAbilityAttachedEffect(attachedAbility, AttachmentType.AURA); + gainAbilityEffect.setText("Enchanted creature has \"Whenever this creature attacks, each other creature you control gets +X/+X until end of turn, where X is this creature's power\""); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, gainAbilityEffect)); + + } + + public BlindWorship(final BlindWorship card) { + super(card); + } + + @Override + public BlindWorship copy() { + return new BlindWorship(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/BobaFett.java b/Mage.Sets/src/mage/sets/starwars/BobaFett.java new file mode 100644 index 0000000000..788e14a6f6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/BobaFett.java @@ -0,0 +1,87 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.DrawDiscardControllerEffect; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.abilities.keyword.BountyAbility; +import mage.abilities.keyword.MenaceAbility; +import mage.abilities.keyword.DeathtouchAbility; +import mage.abilities.keyword.HasteAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.counters.CounterType; +import mage.target.common.TargetOpponentsCreaturePermanent; + +/** + * + * @author Styxo + */ +public class BobaFett extends CardImpl { + + public BobaFett(UUID ownerId) { + super(ownerId, 185, "Boba Fett", Rarity.MYTHIC, new CardType[]{CardType.CREATURE}, "{2}{B}{R}{G}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Human"); + this.subtype.add("Hunter"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Menace + this.addAbility(new MenaceAbility()); + + // Deathtouch + this.addAbility(DeathtouchAbility.getInstance()); + + // Haste + this.addAbility(HasteAbility.getInstance()); + + // When Boba Fett enters the battlefield, put a bounty counter on target creature an opponent controls. + Ability ability = new EntersBattlefieldTriggeredAbility(new AddCountersTargetEffect(CounterType.BOUNTY.createInstance())); + ability.addTarget(new TargetOpponentsCreaturePermanent()); + this.addAbility(ability); + + // Bounty — Whenever a creature an opponent controls with a bounty counter on it dies, you may draw two cards and discard two cards. + this.addAbility(new BountyAbility(new DrawDiscardControllerEffect(2, 2, true))); + } + + public BobaFett(final BobaFett card) { + super(card); + } + + @Override + public BobaFett copy() { + return new BobaFett(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/Bossk.java b/Mage.Sets/src/mage/sets/starwars/Bossk.java new file mode 100644 index 0000000000..aa3ec6dd4d --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Bossk.java @@ -0,0 +1,124 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect; +import mage.abilities.keyword.BountyAbility; +import mage.abilities.keyword.DeathtouchAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.filter.common.FilterBasicLandCard; +import mage.filter.common.FilterControlledLandPermanent; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import mage.target.common.TargetCardInLibrary; +import mage.target.common.TargetOpponentsCreaturePermanent; + +/** + * + * @author Styxo + */ +public class Bossk extends CardImpl { + + public Bossk(UUID ownerId) { + super(ownerId, 131, "Bossk", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{1}{G}{G}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Trandoshan"); + this.subtype.add("Hunter"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Deathtouch + this.addAbility(DeathtouchAbility.getInstance()); + + // Whenever a land enter the battlefield under your control, if you control five or more lands, put a bounty counter on target creature an opponet controls + this.addAbility(new BosskTriggeredAbility()); + + // Bounty — Whenever a creature an opponent controls with a bounty counter on it dies, you may search your library for a basic land card, reveal it, and put it in to your hand. If you do, shuffle your library. + this.addAbility(new BountyAbility(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(new FilterBasicLandCard()), true, true), true)); + } + + public Bossk(final Bossk card) { + super(card); + } + + @Override + public Bossk copy() { + return new Bossk(this); + } +} + +class BosskTriggeredAbility extends TriggeredAbilityImpl { + + BosskTriggeredAbility() { + super(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.BOUNTY.createInstance())); + this.addTarget(new TargetOpponentsCreaturePermanent()); + } + + BosskTriggeredAbility(BosskTriggeredAbility ability) { + super(ability); + } + + @Override + public boolean checkInterveningIfClause(Game game) { + return game.getBattlefield().count(new FilterControlledLandPermanent(), getSourceId(), getControllerId(), game) > 4; + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.ENTERS_THE_BATTLEFIELD; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + Permanent permanent = game.getPermanent(event.getTargetId()); + if (permanent != null && permanent.getCardType().contains(CardType.LAND) && permanent.getControllerId().equals(this.getControllerId())) { + return true; + } + return false; + } + + @Override + public BosskTriggeredAbility copy() { + return new BosskTriggeredAbility(this); + } + + @Override + public String getRule() { + return "Whenever a land enter the battlefield under your control, if you control five or more lands, put a bounty counter on target creature an opponet controls"; + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/BountyCollector.java b/Mage.Sets/src/mage/sets/starwars/BountyCollector.java new file mode 100644 index 0000000000..bc0bfea4fa --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/BountyCollector.java @@ -0,0 +1,75 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.UntapSourceEffect; +import mage.abilities.effects.common.UntapTargetEffect; +import mage.abilities.keyword.BountyAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.common.TargetLandPermanent; + +/** + * + * @author Styxo + */ +public class BountyCollector extends CardImpl { + + public BountyCollector(UUID ownerId) { + super(ownerId, 132, "Bounty Collector", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{G}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Quarren"); + this.subtype.add("Hunter"); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // {T}: Untap target land. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new UntapTargetEffect(), new TapSourceCost()); + ability.addTarget(new TargetLandPermanent()); + this.addAbility(ability); + + // Bounty — Whenever a creature an opponent controls with a bounty counter on it dies, untap Bounty Collector. + this.addAbility(new BountyAbility(new UntapSourceEffect())); + } + + public BountyCollector(final BountyCollector card) { + super(card); + } + + @Override + public BountyCollector copy() { + return new BountyCollector(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/BountySniper.java b/Mage.Sets/src/mage/sets/starwars/BountySniper.java new file mode 100644 index 0000000000..09e99d5e46 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/BountySniper.java @@ -0,0 +1,76 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.effects.common.UntapSourceEffect; +import mage.abilities.keyword.BountyAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author Styxo + */ +public class BountySniper extends CardImpl { + + public BountySniper(UUID ownerId) { + super(ownerId, 98, "Bounty Sniper", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{R}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Gand"); + this.subtype.add("Hunter"); + this.power = new MageInt(1); + this.toughness = new MageInt(3); + + // {T}: Bounty sniper deals 1 damage to target creature. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new TapSourceCost()); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + + // Bounty — Whenever a creature an opponent controls with a bounty counter on it dies, untap Bounty Sniper. + this.addAbility(new BountyAbility(new UntapSourceEffect())); + + } + + public BountySniper(final BountySniper card) { + super(card); + } + + @Override + public BountySniper copy() { + return new BountySniper(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/BountySpotter.java b/Mage.Sets/src/mage/sets/starwars/BountySpotter.java new file mode 100644 index 0000000000..4c687e4e00 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/BountySpotter.java @@ -0,0 +1,82 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.DontUntapInControllersUntapStepSourceEffect; +import mage.abilities.effects.common.UntapSourceEffect; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.abilities.keyword.BountyAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.target.common.TargetOpponentsCreaturePermanent; + +/** + * + * @author Styxo + */ +public class BountySpotter extends CardImpl { + + public BountySpotter(UUID ownerId) { + super(ownerId, 69, "Bounty Spotter", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{B}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Zabrak"); + this.subtype.add("Hunter"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Bounty Spotter doesn't untap during your untap step. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new DontUntapInControllersUntapStepSourceEffect())); + + // {T}: Put a bounty counter on target creature an opponent controls. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.BOUNTY.createInstance()), new TapSourceCost()); + ability.addTarget(new TargetOpponentsCreaturePermanent()); + this.addAbility(ability); + + // Bounty — Whenever a creature an opponent controls with a bounty counter on it dies, untap Bounty Spotter. + this.addAbility(new BountyAbility(new UntapSourceEffect())); + + } + + public BountySpotter(final BountySpotter card) { + super(card); + } + + @Override + public BountySpotter copy() { + return new BountySpotter(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/BullRancor.java b/Mage.Sets/src/mage/sets/starwars/BullRancor.java new file mode 100644 index 0000000000..08a99b62dc --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/BullRancor.java @@ -0,0 +1,76 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.MonstrousCondition; +import mage.abilities.decorator.ConditionalContinuousEffect; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.abilities.keyword.MenaceAbility; +import mage.abilities.keyword.MonstrosityAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author Styxo + */ +public class BullRancor extends CardImpl { + + public BullRancor(UUID ownerId) { + super(ownerId, 186, "Bull Rancor", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{3}{R}{G}{G}{W}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Beast"); + this.power = new MageInt(7); + this.toughness = new MageInt(7); + + // {3}{R}{G}{G}{W}: Monstrosity 3. + this.addAbility(new MonstrosityAbility("{3}{R}{G}{G}{W}", 3)); + + // As long as Bull Rancor is monstrous, creatures you control have menace. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( + new GainAbilityControlledEffect(new MenaceAbility(), Duration.WhileOnBattlefield), + MonstrousCondition.getInstance(), + "As long as Bull Rancor is monstrous, creatures you control have menace") + )); + } + + public BullRancor(final BullRancor card) { + super(card); + } + + @Override + public BullRancor copy() { + return new BullRancor(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/C3POAndR2D2.java b/Mage.Sets/src/mage/sets/starwars/C3POAndR2D2.java new file mode 100644 index 0000000000..39fab1bfc6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/C3POAndR2D2.java @@ -0,0 +1,75 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.LeavesBattlefieldTriggeredAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.keyword.RepairAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class C3POAndR2D2 extends CardImpl { + + public C3POAndR2D2(UUID ownerId) { + super(ownerId, 160, "C-3PO and R2D2", Rarity.RARE, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{2}{W}{U}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Droid"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // When C-3PO and R2D2 leaves the battlefield, you gain 4 life and draw a card. + Ability ability = new LeavesBattlefieldTriggeredAbility(new GainLifeEffect(4), false); + Effect effect = new DrawCardSourceControllerEffect(1); + effect.setText("and draw a card"); + ability.addEffect(effect); + this.addAbility(ability); + + // Repair 2 + this.addAbility(new RepairAbility(2)); + } + + public C3POAndR2D2(final C3POAndR2D2 card) { + super(card); + } + + @Override + public C3POAndR2D2 copy() { + return new C3POAndR2D2(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/CantinaBand.java b/Mage.Sets/src/mage/sets/starwars/CantinaBand.java new file mode 100644 index 0000000000..40e2416e1a --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/CantinaBand.java @@ -0,0 +1,80 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.TapTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author Styxo + */ +public class CantinaBand extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("nonartifact creature"); + + static { + filter.add(Predicates.not(new CardTypePredicate(CardType.ARTIFACT))); + } + + public CantinaBand(UUID ownerId) { + super(ownerId, 6, "Cantina Band", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{W}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Bith"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // {T}, {W}: Tap target nonartifact creature. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new TapTargetEffect(), new ManaCostsImpl("{W}")); + ability.addCost(new TapSourceCost()); + ability.addTarget(new TargetCreaturePermanent(filter)); + this.addAbility(ability); + } + + public CantinaBand(final CantinaBand card) { + super(card); + } + + @Override + public CantinaBand copy() { + return new CantinaBand(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/Capture.java b/Mage.Sets/src/mage/sets/starwars/Capture.java new file mode 100644 index 0000000000..a765a4333a --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Capture.java @@ -0,0 +1,71 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.effects.common.UntapTargetEffect; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.effects.common.continuous.GainControlTargetEffect; +import mage.abilities.keyword.HasteAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author Styxo + */ +public class Capture extends CardImpl { + + public Capture(UUID ownerId) { + super(ownerId, 99, "Capture", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{R}"); + this.expansionSetCode = "SWS"; + + // Gain control of target creature until end of turn. + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + this.getSpellAbility().addEffect(new GainControlTargetEffect(Duration.EndOfTurn)); + + // Untap that creature. + this.getSpellAbility().addEffect(new UntapTargetEffect()); + + // It gains haste until end of turn. + this.getSpellAbility().addEffect(new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn)); + + } + + public Capture(final Capture card) { + super(card); + } + + @Override + public Capture copy() { + return new Capture(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/CarboniteChamber.java b/Mage.Sets/src/mage/sets/starwars/CarboniteChamber.java new file mode 100644 index 0000000000..170eaf4926 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/CarboniteChamber.java @@ -0,0 +1,122 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.combat.CantBlockAttackActivateAttachedEffect; +import mage.abilities.effects.common.continuous.ControlEnchantedEffect; +import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; +import mage.abilities.effects.common.ruleModifying.CantHaveCountersSourceEffect; +import mage.abilities.keyword.EnchantAbility; +import mage.cards.CardImpl; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.target.TargetPermanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author Styxo + */ +public class CarboniteChamber extends CardImpl { + + public CarboniteChamber(UUID ownerId) { + super(ownerId, 161, "Carbonite Chamber", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}{U}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Aura"); + + // Enchant creature + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.AddAbility)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + + // When Carbonite Chamber enters the battlefield, remove all bounty counters from all creatures. + this.addAbility(new EntersBattlefieldTriggeredAbility(new RemoveAllCountersEffect())); + + // You control enchanted creature. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ControlEnchantedEffect())); + + // It can't have counters placed on it. + Ability attachedAbility = new SimpleStaticAbility(Zone.BATTLEFIELD, new CantHaveCountersSourceEffect()); + Effect effect = new GainAbilityAttachedEffect(attachedAbility, AttachmentType.AURA); + effect.setText("It can't have counters placed on it"); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); + + // Enchanted creature can't attack or block, and its activated abilities can't be activated. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBlockAttackActivateAttachedEffect())); + + } + + public CarboniteChamber(final CarboniteChamber card) { + super(card); + } + + @Override + public CarboniteChamber copy() { + return new CarboniteChamber(this); + } +} + +class RemoveAllCountersEffect extends OneShotEffect { + + public RemoveAllCountersEffect() { + super(Outcome.Detriment); + staticText = "remove all bounty counters from all creatures"; + } + + public RemoveAllCountersEffect(final RemoveAllCountersEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + for (Permanent permanent : game.getBattlefield().getActivePermanents(new FilterCreaturePermanent(), source.getControllerId(), source.getSourceId(), game)) { + permanent.getCounters(game).removeAllCounters("bounty"); + } + return true; + } + + @Override + public RemoveAllCountersEffect copy() { + return new RemoveAllCountersEffect(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/Chewbacca.java b/Mage.Sets/src/mage/sets/starwars/Chewbacca.java new file mode 100644 index 0000000000..738ac7a78f --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Chewbacca.java @@ -0,0 +1,82 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.AttacksOrBlocksTriggeredAbility; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.abilities.keyword.VigilanceAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.permanent.AnotherPredicate; +import mage.target.common.TargetControlledCreaturePermanent; + +/** + * + * @author Styxo + */ +public class Chewbacca extends CardImpl { + + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another target creature you control"); + + static { + filter.add(new AnotherPredicate()); + } + + public Chewbacca(UUID ownerId) { + super(ownerId, 187, "Chewbacca", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{2}{R}{G}{W}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Wookiee"); + this.subtype.add("Warrior"); + this.power = new MageInt(4); + this.toughness = new MageInt(5); + + // Vigilance + this.addAbility(VigilanceAbility.getInstance()); + + // Whenever Chewbacca attacks or blocks, another target creature you control gets +3/+3 until end of turn. + Ability ability = new AttacksOrBlocksTriggeredAbility(new BoostTargetEffect(3, 3, Duration.EndOfTurn), false); + ability.addTarget(new TargetControlledCreaturePermanent(filter)); + this.addAbility(ability); + } + + public Chewbacca(final Chewbacca card) { + super(card); + } + + @Override + public Chewbacca copy() { + return new Chewbacca(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/ChiefChirpa.java b/Mage.Sets/src/mage/sets/starwars/ChiefChirpa.java new file mode 100644 index 0000000000..e265a01e5a --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/ChiefChirpa.java @@ -0,0 +1,100 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.ObjectColor; +import mage.abilities.Ability; +import mage.abilities.common.BecomesMonstrousSourceTriggeredAbility; +import mage.abilities.common.DiesCreatureTriggeredAbility; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.abilities.keyword.MonstrosityAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.counters.CounterType; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.ColorPredicate; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.filter.predicate.permanent.AnotherPredicate; +import mage.filter.predicate.permanent.ControllerPredicate; +import mage.game.permanent.token.EwokToken; +import mage.target.common.TargetControlledCreaturePermanent; + +/** + * + * @author Styxo + */ +public class ChiefChirpa extends CardImpl { + + private static final FilterCreaturePermanent diedFilter = new FilterCreaturePermanent("a green creature you control"); + private static final FilterControlledCreaturePermanent ewokFilter = new FilterControlledCreaturePermanent("another target Ewok creature you control"); + + static { + diedFilter.add(new ColorPredicate(ObjectColor.GREEN)); + diedFilter.add(new ControllerPredicate(TargetController.YOU)); + + ewokFilter.add(new SubtypePredicate("Ewok")); + ewokFilter.add(new AnotherPredicate()); + } + + public ChiefChirpa(UUID ownerId) { + super(ownerId, 188, "Chief Chirpa", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{R}{G}{W}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Ewok"); + this.subtype.add("Warrior"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // {2}{R}{G}{W}: Monstrosity 2. + this.addAbility(new MonstrosityAbility("{2}{R}{G}{W}", 2)); + + // Whenever a green creature you control dies, you may put a +1/+1 counter on another target Ewok creature you control. + Ability ability = new DiesCreatureTriggeredAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance()), true, diedFilter); + ability.addTarget(new TargetControlledCreaturePermanent(ewokFilter)); + this.addAbility(ability); + + // When Chief Chirpa become monstrous, create three 1/1 green Ewok creature tokens. + this.addAbility(new BecomesMonstrousSourceTriggeredAbility(new CreateTokenEffect(new EwokToken(), 3))); + + } + + public ChiefChirpa(final ChiefChirpa card) { + super(card); + } + + @Override + public ChiefChirpa copy() { + return new ChiefChirpa(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/CloakingDevice.java b/Mage.Sets/src/mage/sets/starwars/CloakingDevice.java new file mode 100644 index 0000000000..9377022e3d --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/CloakingDevice.java @@ -0,0 +1,88 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.common.AttacksAttachedTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.LoseLifeDefendingPlayerEffect; +import mage.abilities.effects.common.combat.CantBeBlockedAttachedEffect; +import mage.abilities.keyword.EnchantAbility; +import mage.cards.CardImpl; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.Counter; +import mage.filter.FilterPermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.TargetPermanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author Styxo + */ +public class CloakingDevice extends CardImpl { + + public CloakingDevice(UUID ownerId) { + super(ownerId, 36, "Cloaking Device", Rarity.COMMON, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Aura"); + + // Enchant creature + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.AddAbility)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + + // Enchanted creature can't be blocked. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBeBlockedAttachedEffect(AttachmentType.AURA))); + + // Whenever enchanted creature attacks, defending player loses 1 life. + this.addAbility(new AttacksAttachedTriggeredAbility(new LoseLifeDefendingPlayerEffect(1, true), AttachmentType.AURA, false)); + + } + + public CloakingDevice(final CloakingDevice card) { + super(card); + } + + @Override + public CloakingDevice copy() { + return new CloakingDevice(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/CommanderCody.java b/Mage.Sets/src/mage/sets/starwars/CommanderCody.java new file mode 100644 index 0000000000..3639fb70b6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/CommanderCody.java @@ -0,0 +1,82 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.filter.predicate.permanent.TokenPredicate; +import mage.game.permanent.token.TrooperToken; + +/** + * + * @author Styxo + */ +public class CommanderCody extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("non-token Trooper creatures"); + + static { + filter.add(Predicates.not(new TokenPredicate())); + filter.add(new SubtypePredicate("Trooper")); + } + + public CommanderCody(UUID ownerId) { + super(ownerId, 189, "Commander Cody", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{W}{U}{B}{R}{G}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Human"); + this.subtype.add("Trooper"); + this.power = new MageInt(7); + this.toughness = new MageInt(7); + + // Non-token Trooper creatures you control have "At the beginning of your upkeep, create a 1/1 white Trooper creature token." + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(new BeginningOfUpkeepTriggeredAbility(new CreateTokenEffect(new TrooperToken()), TargetController.YOU, false), Duration.WhileOnBattlefield, filter, false))); + } + + public CommanderCody(final CommanderCody card) { + super(card); + } + + @Override + public CommanderCody copy() { + return new CommanderCody(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/Condemn.java b/Mage.Sets/src/mage/sets/starwars/Condemn.java new file mode 100644 index 0000000000..d02270ffef --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Condemn.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; + +/** + * + * @author Styxo + */ +public class Condemn extends mage.sets.tenthedition.Condemn { + + public Condemn(UUID ownerId) { + super(ownerId); + this.cardNumber = "7"; + this.expansionSetCode = "SWS"; + } + + public Condemn(final Condemn card) { + super(card); + } + + @Override + public Condemn copy() { + return new Condemn(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/CorellianCorvette.java b/Mage.Sets/src/mage/sets/starwars/CorellianCorvette.java new file mode 100644 index 0000000000..030310d4b0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/CorellianCorvette.java @@ -0,0 +1,67 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.DamageAsThoughNotBlockedAbility; +import mage.abilities.keyword.SpaceflightAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class CorellianCorvette extends CardImpl { + + public CorellianCorvette(UUID ownerId) { + super(ownerId, 133, "Corellian Corvette", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{3}{G}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Starship"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Spaceflight + this.addAbility(SpaceflightAbility.getInstance()); + + // You may have Corellian assign its combat damage as though it weren't blocked. + this.addAbility(DamageAsThoughNotBlockedAbility.getInstance()); + + } + + public CorellianCorvette(final CorellianCorvette card) { + super(card); + } + + @Override + public CorellianCorvette copy() { + return new CorellianCorvette(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/Crossfire.java b/Mage.Sets/src/mage/sets/starwars/Crossfire.java new file mode 100644 index 0000000000..c5e467e2a9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Crossfire.java @@ -0,0 +1,65 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DamageTargetControllerEffect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author Styxo + */ +public class Crossfire extends CardImpl { + + public Crossfire(UUID ownerId) { + super(ownerId, 100, "Crossfire", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{2}{R}{R}"); + this.expansionSetCode = "SWS"; + + // Crossfire deals 4 damge to target creature and 2 damage to that creature's controller. + this.getSpellAbility().addEffect(new DamageTargetEffect(4)); + Effect effect = new DamageTargetControllerEffect(2); + effect.setText("and 2 damage to that creature's controller"); + this.getSpellAbility().addEffect(effect); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + } + + public Crossfire(final Crossfire card) { + super(card); + } + + @Override + public Crossfire copy() { + return new Crossfire(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/CrueltyOfTheSith.java b/Mage.Sets/src/mage/sets/starwars/CrueltyOfTheSith.java new file mode 100644 index 0000000000..cdc1162286 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/CrueltyOfTheSith.java @@ -0,0 +1,89 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Mode; +import mage.abilities.effects.common.CounterTargetEffect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.effects.common.SacrificeEffect; +import mage.abilities.effects.common.discard.DiscardTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.FilterSpell; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.target.TargetPlayer; +import mage.target.TargetSpell; + +/** + * + * @author Styxo + */ +public class CrueltyOfTheSith extends CardImpl { + + private static final FilterSpell filterNoncreature = new FilterSpell("noncreature spell"); + + static { + filterNoncreature.add(Predicates.not(new CardTypePredicate(CardType.CREATURE))); + } + + public CrueltyOfTheSith(UUID ownerId) { + super(ownerId, 190, "Cruelty of the Sith", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{U}{B}{R}"); + this.expansionSetCode = "SWS"; + + // Choose one - Counter target noncreature spell. + this.getSpellAbility().addEffect(new CounterTargetEffect()); + this.getSpellAbility().addTarget(new TargetSpell(filterNoncreature)); + + // Target player sacrifices a creture. + Mode mode = new Mode(); + mode.getEffects().add(new SacrificeEffect(new FilterCreaturePermanent(), 1, "Target player")); + mode.getTargets().add(new TargetPlayer()); + this.getSpellAbility().addMode(mode); + + // Cruelty of the Sith deals 3 damage to target player. That player discards a card. + mode = new Mode(); + mode.getEffects().add(new DamageTargetEffect(3)); + mode.getEffects().add(new DiscardTargetEffect(1)); + mode.getTargets().add(new TargetPlayer()); + this.getSpellAbility().addMode(mode); + + } + + public CrueltyOfTheSith(final CrueltyOfTheSith card) { + super(card); + } + + @Override + public CrueltyOfTheSith copy() { + return new CrueltyOfTheSith(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/CunningAbduction.java b/Mage.Sets/src/mage/sets/starwars/CunningAbduction.java new file mode 100644 index 0000000000..01e4f3784f --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/CunningAbduction.java @@ -0,0 +1,213 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.effects.AsThoughEffectImpl; +import mage.abilities.effects.AsThoughManaEffect; +import mage.abilities.effects.ContinuousEffect; +import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.constants.AsThoughEffectType; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.ManaType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterNonlandCard; +import mage.game.Game; +import mage.players.ManaPoolItem; +import mage.players.Player; +import mage.target.TargetCard; +import mage.target.common.TargetOpponent; +import mage.target.targetpointer.FixedTarget; +import mage.util.CardUtil; + +/** + * + * @author Styxo + */ +public class CunningAbduction extends CardImpl { + + public CunningAbduction(UUID ownerId) { + super(ownerId, 165, "Cunning Abduction", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{1}{U}{B}"); + this.expansionSetCode = "SWS"; + + // Target opponent reveals his or her hand. You choose a nonland card from that player's hand and exile it. You may cast that card for as long as it remains exiled, and you may spend mana as though it were mana of any color to cast that spell. + this.getSpellAbility().addTarget(new TargetOpponent()); + this.getSpellAbility().addEffect(new CunningAbductionExileEffect()); + } + + public CunningAbduction(final CunningAbduction card) { + super(card); + } + + @Override + public CunningAbduction copy() { + return new CunningAbduction(this); + } +} + +class CunningAbductionExileEffect extends OneShotEffect { + + private static final FilterNonlandCard filter = new FilterNonlandCard(); + + public CunningAbductionExileEffect() { + super(Outcome.Benefit); + this.staticText = "Target opponent reveals his or her hand. You choose a nonland card from that player's hand and exile it. You may cast that card for as long as it remains exiled, and you may spend mana as though it were mana of any color to cast that spell"; + } + + public CunningAbductionExileEffect(final CunningAbductionExileEffect effect) { + super(effect); + } + + @Override + public CunningAbductionExileEffect copy() { + return new CunningAbductionExileEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player opponent = game.getPlayer(targetPointer.getFirst(game, source)); + MageObject sourceObject = game.getObject(source.getSourceId()); + if (opponent != null && sourceObject != null) { + opponent.revealCards(sourceObject.getName(), opponent.getHand(), game); + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + int cardsHand = opponent.getHand().count(filter, game); + Card card = null; + if (cardsHand > 0) { + TargetCard target = new TargetCard(Zone.HAND, filter); + if (controller.choose(Outcome.Benefit, opponent.getHand(), target, game)) { + card = opponent.getHand().get(target.getFirstTarget(), game); + } + } + if (card != null) { + // move card to exile + UUID exileId = CardUtil.getCardExileZoneId(game, source); + controller.moveCardToExileWithInfo(card, exileId, sourceObject.getIdName(), source.getSourceId(), game, Zone.HAND, true); + // allow to cast the card + ContinuousEffect effect = new CunningAbductionCastFromExileEffect(); + effect.setTargetPointer(new FixedTarget(card.getId())); + game.addEffect(effect, source); + // and you may spend mana as though it were mana of any color to cast it + effect = new CunningAbductionSpendAnyManaEffect(); + effect.setTargetPointer(new FixedTarget(card.getId())); + game.addEffect(effect, source); + } + return true; + } + } + return false; + } +} + +class CunningAbductionCastFromExileEffect extends AsThoughEffectImpl { + + public CunningAbductionCastFromExileEffect() { + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.Custom, Outcome.Benefit); + staticText = "You may cast that card for as long as it remains exiled, and you may spend mana as though it were mana of any color to cast that spell"; + } + + public CunningAbductionCastFromExileEffect(final CunningAbductionCastFromExileEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public CunningAbductionCastFromExileEffect copy() { + return new CunningAbductionCastFromExileEffect(this); + } + + @Override + public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) { + if (objectId.equals(getTargetPointer().getFirst(game, source))) { + if (affectedControllerId.equals(source.getControllerId())) { + return true; + } + } else if (((FixedTarget) getTargetPointer()).getTarget().equals(objectId)) { + // object has moved zone so effect can be discarted + this.discard(); + } + return false; + } +} + +class CunningAbductionSpendAnyManaEffect extends AsThoughEffectImpl implements AsThoughManaEffect { + + public CunningAbductionSpendAnyManaEffect() { + super(AsThoughEffectType.SPEND_OTHER_MANA, Duration.Custom, Outcome.Benefit); + staticText = "you may spend mana as though it were mana of any color to cast it"; + } + + public CunningAbductionSpendAnyManaEffect(final CunningAbductionSpendAnyManaEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public CunningAbductionSpendAnyManaEffect copy() { + return new CunningAbductionSpendAnyManaEffect(this); + } + + @Override + public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) { + if (objectId.equals(((FixedTarget) getTargetPointer()).getTarget()) + && game.getState().getZoneChangeCounter(objectId) <= ((FixedTarget) getTargetPointer()).getZoneChangeCounter() + 1) { + + if (affectedControllerId.equals(source.getControllerId())) { + // if the card moved from exile to spell the zone change counter is increased by 1 + if (game.getState().getZoneChangeCounter(objectId) == ((FixedTarget) getTargetPointer()).getZoneChangeCounter() + 1) { + return true; + } + } + + } else if (((FixedTarget) getTargetPointer()).getTarget().equals(objectId)) { + // object has moved zone so effect can be discarted + this.discard(); + } + return false; + } + + @Override + public ManaType getAsThoughManaType(ManaType manaType, ManaPoolItem mana, UUID affectedControllerId, Ability source, Game game) { + return mana.getFirstAvailable(); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/DagobahMawSlug.java b/Mage.Sets/src/mage/sets/starwars/DagobahMawSlug.java new file mode 100644 index 0000000000..515018903d --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/DagobahMawSlug.java @@ -0,0 +1,75 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.MonstrousCondition; +import mage.abilities.decorator.ConditionalContinuousEffect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.keyword.MonstrosityAbility; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author Styxo + */ +public class DagobahMawSlug extends CardImpl { + + public DagobahMawSlug(UUID ownerId) { + super(ownerId, 191, "Dagobah Maw Slug", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{R}{G}{W}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Slug"); + this.power = new MageInt(4); + this.toughness = new MageInt(3); + + // {6}{G}: Monstrosity 3. + this.addAbility(new MonstrosityAbility("{6}{G}", 3)); + + // As long as Dagobah Maw Slug is monstrous. it has trample. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( + new GainAbilitySourceEffect(TrampleAbility.getInstance()), + MonstrousCondition.getInstance(), + "As long as Dagobah Maw Slug is monstrous it has trample") + )); + } + + public DagobahMawSlug(final DagobahMawSlug card) { + super(card); + } + + @Override + public DagobahMawSlug copy() { + return new DagobahMawSlug(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/DarkApprenticeship.java b/Mage.Sets/src/mage/sets/starwars/DarkApprenticeship.java new file mode 100644 index 0000000000..e847285c31 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/DarkApprenticeship.java @@ -0,0 +1,70 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfEndStepTriggeredAbility; +import mage.abilities.condition.common.HateCondition; +import mage.abilities.decorator.ConditionalTriggeredAbility; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.target.TargetPlayer; +import mage.watchers.common.NonCombatDamageWatcher; + +/** + * + * @author Styxo + */ +public class DarkApprenticeship extends CardImpl { + + public DarkApprenticeship(UUID ownerId) { + super(ownerId, 101, "Dark Apprenticeship", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT}, "{1}{R}"); + this.expansionSetCode = "SWS"; + + // Hate — At the beggining of each end step, if an opponent lost life from source other than combat damage this turn, Dark Apprenticeship deals 2 damage to target player. + Ability ability = new ConditionalTriggeredAbility( + new BeginningOfEndStepTriggeredAbility(new DamageTargetEffect(2), TargetController.ANY, false), + HateCondition.getInstance(), + "Hate — At the beggining of each end step, if an opponent lost life from source other than combat damage this turn, Dark Apprenticeship deals 2 damage to target player."); + ability.addTarget(new TargetPlayer()); + this.addAbility(ability, new NonCombatDamageWatcher()); + } + + public DarkApprenticeship(final DarkApprenticeship card) { + super(card); + } + + @Override + public DarkApprenticeship copy() { + return new DarkApprenticeship(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/DarkDecision.java b/Mage.Sets/src/mage/sets/starwars/DarkDecision.java new file mode 100644 index 0000000000..a6df916a9b --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/DarkDecision.java @@ -0,0 +1,147 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.costs.common.PayLifeCost; +import mage.abilities.effects.AsThoughEffectImpl; +import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.constants.AsThoughEffectType; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterNonlandCard; +import mage.game.Game; +import mage.players.Player; +import mage.target.common.TargetCardInLibrary; + +/** + * + * @author Styxo + */ +public class DarkDecision extends CardImpl { + + public DarkDecision(UUID ownerId) { + super(ownerId, 169, "Dark Decision", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{B}{R}"); + this.expansionSetCode = "SWS"; + + // As an additional cost to cast Dark Decision, pay 1 life. + this.getSpellAbility().addCost(new PayLifeCost(1)); + + // Search the top 10 cards of your library for a nonland card, exile it, then shuffle your library. Until end of turn, you may cast that card. + this.getSpellAbility().addEffect(new DarkDecisionEffect()); + } + + public DarkDecision(final DarkDecision card) { + super(card); + } + + @Override + public DarkDecision copy() { + return new DarkDecision(this); + } +} + +class DarkDecisionEffect extends OneShotEffect { + + public DarkDecisionEffect() { + super(Outcome.DrawCard); + this.staticText = "Search the top 10 cards of your library for a nonland card, exile it, then shuffle your library. Until end of turn, you may cast that card"; + } + + public DarkDecisionEffect(final DarkDecisionEffect effect) { + super(effect); + } + + @Override + public DarkDecisionEffect copy() { + return new DarkDecisionEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + TargetCardInLibrary target = new TargetCardInLibrary(new FilterNonlandCard()); + target.setCardLimit(10); + if (controller.searchLibrary(target, game)) { + UUID targetId = target.getFirstTarget(); + Card card = controller.getLibrary().remove(targetId, game); + if (card != null) { + card.moveToExile(source.getSourceId(), "Dark Decision", source.getSourceId(), game); + game.addEffect(new DarkDecisionMayPlayExiledEffect(targetId), source); + } + controller.shuffleLibrary(source, game); + } + return true; + } + return false; + } + +} + +class DarkDecisionMayPlayExiledEffect extends AsThoughEffectImpl { + + public UUID card; + + public DarkDecisionMayPlayExiledEffect(UUID card) { + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); + this.card = card; + } + + public DarkDecisionMayPlayExiledEffect(final DarkDecisionMayPlayExiledEffect effect) { + super(effect); + this.card = effect.card; + } + + @Override + public DarkDecisionMayPlayExiledEffect copy() { + return new DarkDecisionMayPlayExiledEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public boolean applies(UUID sourceId, Ability source, UUID affectedControllerId, Game game) { + Card card = game.getCard(sourceId); + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null && card != null && game.getState().getZone(sourceId) == Zone.EXILED && this.card.equals(sourceId)) { + return true; + } + return false; + } + +} diff --git a/Mage.Sets/src/mage/sets/starwars/DarkTrooper.java b/Mage.Sets/src/mage/sets/starwars/DarkTrooper.java new file mode 100644 index 0000000000..61fbd02121 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/DarkTrooper.java @@ -0,0 +1,63 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.keyword.RepairAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class DarkTrooper extends CardImpl { + + public DarkTrooper(UUID ownerId) { + super(ownerId, 231, "Dark Trooper", Rarity.COMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{3}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Droid"); + this.subtype.add("Trooper"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Repair 4 + this.addAbility(new RepairAbility(4)); + } + + public DarkTrooper(final DarkTrooper card) { + super(card); + } + + @Override + public DarkTrooper copy() { + return new DarkTrooper(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/DarthMaul.java b/Mage.Sets/src/mage/sets/starwars/DarthMaul.java new file mode 100644 index 0000000000..76ee29f6a7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/DarthMaul.java @@ -0,0 +1,84 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.condition.common.HateCondition; +import mage.abilities.decorator.ConditionalTriggeredAbility; +import mage.abilities.effects.common.combat.CantBlockTargetEffect; +import mage.abilities.keyword.DoubleStrikeAbility; +import mage.abilities.keyword.HasteAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.target.common.TargetCreaturePermanent; +import mage.watchers.common.NonCombatDamageWatcher; + +/** + * + * @author Styxo + */ +public class DarthMaul extends CardImpl { + + public DarthMaul(UUID ownerId) { + super(ownerId, 170, "Darth Maul", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{1}{B}{R}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Zabrak"); + this.subtype.add("Sith"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Double strike + this.addAbility(DoubleStrikeAbility.getInstance()); + + // Haste + this.addAbility(HasteAbility.getInstance()); + + // Hate — Whenever Darth Maul attacks, if an opponent loses life from a source other than combat damage this turn, target creature can't block this turn. + Ability ability = new ConditionalTriggeredAbility( + new AttacksTriggeredAbility(new CantBlockTargetEffect(Duration.EndOfTurn), false), + HateCondition.getInstance(), + "Hate — Whenever Darth Maul attacks, if an opponent loses life from a source other than combat damage this turn, target creature can't block this turn."); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability, new NonCombatDamageWatcher()); + } + + public DarthMaul(final DarthMaul card) { + super(card); + } + + @Override + public DarthMaul copy() { + return new DarthMaul(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/DarthSidiousSithLord.java b/Mage.Sets/src/mage/sets/starwars/DarthSidiousSithLord.java new file mode 100644 index 0000000000..d013aeb0c0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/DarthSidiousSithLord.java @@ -0,0 +1,95 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.LoyaltyAbility; +import mage.abilities.common.PlanswalkerEntersWithLoyalityCountersAbility; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.effects.common.SacrificeEffect; +import mage.abilities.effects.common.continuous.GainControlTargetEffect; +import mage.abilities.effects.common.discard.DiscardTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.filter.FilterPermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.target.TargetPermanent; +import mage.target.TargetPlayer; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author Styxo + */ +public class DarthSidiousSithLord extends CardImpl { + + private static final FilterPermanent filter = new FilterPermanent("noncreature permanent"); + + static { + filter.add(Predicates.not(new CardTypePredicate(CardType.CREATURE))); + } + + public DarthSidiousSithLord(UUID ownerId) { + super(ownerId, 192, "Darth Sidious, Sith Lord", Rarity.MYTHIC, new CardType[]{CardType.PLANESWALKER}, "{3}{U}{B}{B}{R}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Sidious"); + + this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(5)); + + // +3: Destroy target noncreature permanent. + Ability ability = new LoyaltyAbility(new DestroyTargetEffect(), +3); + ability.addTarget(new TargetPermanent(filter)); + this.addAbility(ability); + + // -2: Gain control of target creature. + ability = new LoyaltyAbility(new GainControlTargetEffect(Duration.Custom), -2); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + + // -9: Darth Sidious deals 7 damage to target player. That player discards seven cards, then sacrificies seven permanents. + ability = new LoyaltyAbility(new DamageTargetEffect(7), -9); + ability.addTarget(new TargetPlayer()); + ability.addEffect(new DiscardTargetEffect(7)); + ability.addEffect(new SacrificeEffect(new FilterPermanent(), 7, "then")); + this.addAbility(ability); + } + + public DarthSidiousSithLord(final DarthSidiousSithLord card) { + super(card); + } + + @Override + public DarthSidiousSithLord copy() { + return new DarthSidiousSithLord(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/DarthTyranus.java b/Mage.Sets/src/mage/sets/starwars/DarthTyranus.java new file mode 100644 index 0000000000..724b45f2e4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/DarthTyranus.java @@ -0,0 +1,167 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.LoyaltyAbility; +import mage.abilities.common.PlanswalkerEntersWithLoyalityCountersAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.SearchEffect; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterArtifactCard; +import mage.filter.common.FilterControlledArtifactPermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.TargetPlayer; +import mage.target.common.TargetCardInLibrary; +import mage.target.common.TargetControlledPermanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author Styxo + */ +public class DarthTyranus extends CardImpl { + + public DarthTyranus(UUID ownerId) { + super(ownerId, 193, "Darth Tyranus", Rarity.MYTHIC, new CardType[]{CardType.PLANESWALKER}, "{1}{W}{U}{B}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Dooku"); + + this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(3)); + + // +1: Up to one target creature gets -6/-0 until your next turn. + Effect effect = new BoostTargetEffect(-6, 0, Duration.UntilYourNextTurn); + effect.setText("Up to one target creature gets -6/-0 until your next turn"); + Ability ability = new LoyaltyAbility(effect, 1); + ability.addTarget(new TargetCreaturePermanent(0, 1)); + this.addAbility(ability); + + // -3: Sacrifice an artifact. If you do, you may search your library for an artifact card and put that card onto the battlefield. Shuffle your library. + this.addAbility(new LoyaltyAbility(new TransmuteArtifactEffect(), -3)); + + // -6: Target player's life total becomes 5. Another target players's life total becomes 30. + ability = new LoyaltyAbility(new DarthTyranusEffect(), -6); + ability.addTarget(new TargetPlayer(2)); + this.addAbility(ability); + } + + public DarthTyranus(final DarthTyranus card) { + super(card); + } + + @Override + public DarthTyranus copy() { + return new DarthTyranus(this); + } +} + +class DarthTyranusEffect extends OneShotEffect { + + public DarthTyranusEffect() { + super(Outcome.Benefit); + staticText = "Target player's life total becomes 5. Another target players's life total becomes 30"; + } + + public DarthTyranusEffect(DarthTyranusEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player1 = game.getPlayer(targetPointer.getTargets(game, source).get(0)); + Player player2 = game.getPlayer(targetPointer.getTargets(game, source).get(1)); + if (player1 != null && player2 != null) { + player1.setLife(5, game); + player1.setLife(30, game); + return true; + } + return false; + } + + @Override + public DarthTyranusEffect copy() { + return new DarthTyranusEffect(this); + } +} + +class TransmuteArtifactEffect extends SearchEffect { + + public TransmuteArtifactEffect() { + super(new TargetCardInLibrary(new FilterArtifactCard()), Outcome.PutCardInPlay); + staticText = "Sacrifice an artifact. If you do, search your library for an artifact card and put that card onto the battlefield. Shuffle your library"; + } + + public TransmuteArtifactEffect(final TransmuteArtifactEffect effect) { + super(effect); + } + + @Override + public TransmuteArtifactEffect copy() { + return new TransmuteArtifactEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + boolean sacrifice = false; + TargetControlledPermanent targetArtifact = new TargetControlledPermanent(new FilterControlledArtifactPermanent()); + if (controller.chooseTarget(Outcome.Sacrifice, targetArtifact, source, game)) { + Permanent permanent = game.getPermanent(targetArtifact.getFirstTarget()); + if (permanent != null) { + sacrifice = permanent.sacrifice(source.getSourceId(), game); + } + } + if (sacrifice && controller.searchLibrary(target, game)) { + if (target.getTargets().size() > 0) { + for (UUID cardId : target.getTargets()) { + Card card = controller.getLibrary().getCard(cardId, game); + if (card != null) { + controller.moveCards(card, Zone.BATTLEFIELD, source, game); + controller.shuffleLibrary(source, game); + return true; + } + } + } + controller.shuffleLibrary(source, game); + } + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/DarthVader.java b/Mage.Sets/src/mage/sets/starwars/DarthVader.java new file mode 100644 index 0000000000..cb1d471a9b --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/DarthVader.java @@ -0,0 +1,131 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.Iterator; +import java.util.UUID; +import mage.MageInt; +import mage.MageObjectReference; +import mage.abilities.Ability; +import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.dynamicvalue.common.CountersSourceCount; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.abilities.keyword.MenaceAbility; +import mage.abilities.keyword.LifelinkAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Layer; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.SetTargetPointer; +import mage.constants.SubLayer; +import mage.counters.CounterType; +import mage.filter.common.FilterCreaturePermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; + +/** + * + * @author Styxo + */ +public class DarthVader extends CardImpl { + + public DarthVader(UUID ownerId) { + super(ownerId, 182, "Darth Vader", Rarity.MYTHIC, new CardType[]{CardType.CREATURE}, ""); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Human"); + this.subtype.add("Sith"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + this.color.setBlack(true); + + this.nightCard = true; + + // Menace + this.addAbility(new MenaceAbility()); + + // Lifelink + this.addAbility(LifelinkAbility.getInstance()); + + // Whenever Darth Vader attacks, creatures defending player controls get -1/-1 until end of turn for each +1/+1 counter on Darth Vader. + this.addAbility(new AttacksTriggeredAbility(new UnboostCreaturesDefendingPlayerEffect(), false, null, SetTargetPointer.PLAYER)); + } + + public DarthVader(final DarthVader card) { + super(card); + } + + @Override + public DarthVader copy() { + return new DarthVader(this); + } +} + +class UnboostCreaturesDefendingPlayerEffect extends ContinuousEffectImpl { + + public UnboostCreaturesDefendingPlayerEffect() { + super(Duration.EndOfTurn, Layer.PTChangingEffects_7, SubLayer.ModifyPT_7c, Outcome.UnboostCreature); + staticText = "creatures defending player controls get -1/-1 until end of turn for each +1/+1 counter on Darth Vader"; + } + + public UnboostCreaturesDefendingPlayerEffect(final UnboostCreaturesDefendingPlayerEffect effect) { + super(effect); + } + + @Override + public UnboostCreaturesDefendingPlayerEffect copy() { + return new UnboostCreaturesDefendingPlayerEffect(this); + } + + @Override + public void init(Ability source, Game game) { + super.init(source, game); + if (this.affectedObjectsSet) { + for (Permanent creature : game.getBattlefield().getAllActivePermanents(new FilterCreaturePermanent(), getTargetPointer().getFirst(game, source), game)) { + affectedObjectList.add(new MageObjectReference(creature, game)); + } + } + } + + @Override + public boolean apply(Game game, Ability source) { + for (Iterator it = affectedObjectList.iterator(); it.hasNext();) { + Permanent permanent = it.next().getPermanent(game); + if (permanent != null) { + int unboostCount = -1 * new CountersSourceCount(CounterType.P1P1).calculate(game, source, this); + permanent.addPower(unboostCount); + permanent.addToughness(unboostCount); + } else { + it.remove(); + } + } + return true; + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/DeathTrooper.java b/Mage.Sets/src/mage/sets/starwars/DeathTrooper.java new file mode 100644 index 0000000000..038551de10 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/DeathTrooper.java @@ -0,0 +1,76 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.abilities.keyword.DeathtouchAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; + +/** + * + * @author Styxo + */ +public class DeathTrooper extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Trooper creatures"); + + static { + filter.add(new SubtypePredicate("Trooper")); + } + + public DeathTrooper(UUID ownerId) { + super(ownerId, 70, "Death Trooper", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{B}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Zombie"); + this.subtype.add("Trooper"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Trooper creatures you control have deathtouch. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(DeathtouchAbility.getInstance(), Duration.WhileOnBattlefield, filter, false))); + + } + + public DeathTrooper(final DeathTrooper card) { + super(card); + } + + @Override + public DeathTrooper copy() { + return new DeathTrooper(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/DeployTheTroops.java b/Mage.Sets/src/mage/sets/starwars/DeployTheTroops.java new file mode 100644 index 0000000000..b345a21d02 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/DeployTheTroops.java @@ -0,0 +1,60 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.game.permanent.token.TrooperToken; + +/** + * + * @author Styxo + */ +public class DeployTheTroops extends CardImpl { + + public DeployTheTroops(UUID ownerId) { + super(ownerId, 8, "Deploy The Troops", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{4}{W}"); + this.expansionSetCode = "SWS"; + + // Create 3 1/1 white Trooper creature tokens. + this.getSpellAbility().addEffect(new CreateTokenEffect(new TrooperToken(), 3)); + + } + + public DeployTheTroops(final DeployTheTroops card) { + super(card); + } + + @Override + public DeployTheTroops copy() { + return new DeployTheTroops(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/DoomBlade.java b/Mage.Sets/src/mage/sets/starwars/DoomBlade.java new file mode 100644 index 0000000000..3f4738efb8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/DoomBlade.java @@ -0,0 +1,54 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class DoomBlade extends mage.sets.magic2010.DoomBlade { + + public DoomBlade(UUID ownerId) { + super(ownerId); + this.cardNumber = "71"; + this.expansionSetCode = "SWS"; + this.rarity = Rarity.UNCOMMON; + } + + public DoomBlade(final DoomBlade card) { + super(card); + } + + @Override + public DoomBlade copy() { + return new DoomBlade(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/DroidFactory.java b/Mage.Sets/src/mage/sets/starwars/DroidFactory.java new file mode 100644 index 0000000000..5818abd000 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/DroidFactory.java @@ -0,0 +1,105 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.ArrayList; +import java.util.UUID; +import mage.MageObject; +import mage.abilities.ActivatedAbilityImpl; +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect; +import mage.abilities.mana.ColorlessManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.filter.predicate.Predicate; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.filter.predicate.mageobject.SupertypePredicate; +import mage.target.common.TargetCardInLibrary; + +/** + * + * @author Styxo + */ +public class DroidFactory extends CardImpl { + + public DroidFactory(UUID ownerId) { + super(ownerId, 239, "Droid Factory", Rarity.COMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "SWS"; + + // {T}: Add {C} to your manapool. + this.addAbility(new ColorlessManaAbility()); + + // {T}, Sacrifice Droid Factor: Search your library for a basic Plains, Island or Swamp card and put it onto the battlefield tapped. Then shuffle your library. + this.addAbility(new DroidFactoryAbility()); + + } + + public DroidFactory(final DroidFactory card) { + super(card); + } + + @Override + public DroidFactory copy() { + return new DroidFactory(this); + } + + public class DroidFactoryAbility extends ActivatedAbilityImpl { + + public DroidFactoryAbility(DroidFactoryAbility ability) { + super(ability); + } + + public DroidFactoryAbility() { + super(Zone.BATTLEFIELD, null); + addCost(new TapSourceCost()); + addCost(new SacrificeSourceCost()); + FilterCard filter = new FilterCard("basic Plains, Island or Swamp"); + filter.add(new CardTypePredicate(CardType.LAND)); + ArrayList> subtypePredicates = new ArrayList<>(); + subtypePredicates.add(new SubtypePredicate("Swamp")); + subtypePredicates.add(new SubtypePredicate("Plains")); + subtypePredicates.add(new SubtypePredicate("Island")); + filter.add(Predicates.or(subtypePredicates)); + filter.add(new SupertypePredicate("Basic")); + TargetCardInLibrary target = new TargetCardInLibrary(filter); + addEffect(new SearchLibraryPutInPlayEffect(target, true, true, Outcome.PutLandInPlay)); + } + + @Override + public DroidFactoryAbility copy() { + return new DroidFactoryAbility(this); + } + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/DroidFoundry.java b/Mage.Sets/src/mage/sets/starwars/DroidFoundry.java new file mode 100644 index 0000000000..ab5fbcb26c --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/DroidFoundry.java @@ -0,0 +1,70 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.Mana; +import mage.abilities.common.EntersBattlefieldTappedAbility; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.AddManaToManaPoolSourceControllerEffect; +import mage.abilities.mana.BlackManaAbility; +import mage.abilities.mana.WhiteManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class DroidFoundry extends CardImpl { + + public DroidFoundry(UUID ownerId) { + super(ownerId, 240, "Droid Foundry", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "SWS"; + + // Droid Foundry enters the battlefield tapped. + this.addAbility(new EntersBattlefieldTappedAbility()); + + // When Droid Foundry enters the battlefield , add {U} to your mana pool. + this.addAbility(new EntersBattlefieldTriggeredAbility(new AddManaToManaPoolSourceControllerEffect(new Mana(0, 0, 1, 0, 0, 0, 0, 0)))); + + // {T}: Add {W} or {B} to you mana pool. + this.addAbility(new WhiteManaAbility()); + this.addAbility(new BlackManaAbility()); + } + + public DroidFoundry(final DroidFoundry card) { + super(card); + } + + @Override + public DroidFoundry copy() { + return new DroidFoundry(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/Droideka.java b/Mage.Sets/src/mage/sets/starwars/Droideka.java new file mode 100644 index 0000000000..d128f05e76 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Droideka.java @@ -0,0 +1,73 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.ChangeATargetOfTargetSpellAbilityToSourceEffect; +import mage.abilities.keyword.RepairAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.TargetStackObject; + +/** + * + * @author Styxo + */ +public class Droideka extends CardImpl { + + public Droideka(UUID ownerId) { + super(ownerId, 9, "Droideka", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{4}{W}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Droid"); + this.power = new MageInt(3); + this.toughness = new MageInt(6); + + // {2}{U}: Change a target of target spell or ability to Droideka. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ChangeATargetOfTargetSpellAbilityToSourceEffect(), new ManaCostsImpl("{2}{U}")); + ability.addTarget(new TargetStackObject()); + this.addAbility(ability); + + // Repair 3 + this.addAbility(new RepairAbility(3)); + } + + public Droideka(final Droideka card) { + super(card); + } + + @Override + public Droideka copy() { + return new Droideka(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/DroneHolocron.java b/Mage.Sets/src/mage/sets/starwars/DroneHolocron.java new file mode 100644 index 0000000000..fedc49a953 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/DroneHolocron.java @@ -0,0 +1,95 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.Cost; +import mage.abilities.costs.common.RemoveCountersSourceCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.mana.BlackManaAbility; +import mage.abilities.mana.BlueManaAbility; +import mage.abilities.mana.SimpleManaAbility; +import mage.abilities.mana.WhiteManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; + +/** + * + * @author Styxo + */ +public class DroneHolocron extends CardImpl { + + public DroneHolocron(UUID ownerId) { + super(ownerId, 232, "Drone Holocron", Rarity.COMMON, new CardType[]{CardType.ARTIFACT}, "{2}"); + this.expansionSetCode = "SWS"; + + // {T}: Put a charge counter on Wild Holocron. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.CHARGE.createInstance(1)), new TapSourceCost())); + + // {T}, Remove a charge counter from Wild Holocron: Add {W}, {U} or {B} to your mana pool. + Cost cost = new RemoveCountersSourceCost(CounterType.CHARGE.createInstance(1)); + Ability ability = new WhiteManaAbility(); + ability.addCost(cost); + this.addAbility(ability); + + ability = new BlueManaAbility(); + ability.addCost(cost); + this.addAbility(ability); + + ability = new BlackManaAbility(); + ability.addCost(cost); + this.addAbility(ability); + + // {T}, Remove two charge counters from Sith Holocron: Add WU or UB to your mana pool. + cost = new RemoveCountersSourceCost(CounterType.CHARGE.createInstance(2)); + + ability = new SimpleManaAbility(Zone.BATTLEFIELD, new Mana(0, 0, 1, 1, 0, 0, 0, 0), new TapSourceCost()); + ability.addCost(cost); + this.addAbility(ability); + + ability = new SimpleManaAbility(Zone.BATTLEFIELD, new Mana(0, 0, 1, 0, 1, 0, 0, 0), new TapSourceCost()); + ability.addCost(cost); + this.addAbility(ability); + } + + public DroneHolocron(final DroneHolocron card) { + super(card); + } + + @Override + public DroneHolocron copy() { + return new DroneHolocron(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/EMPBlast.java b/Mage.Sets/src/mage/sets/starwars/EMPBlast.java new file mode 100644 index 0000000000..8d1ae644e9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/EMPBlast.java @@ -0,0 +1,94 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.ExileTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.filter.common.FilterArtifactPermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.target.common.TargetArtifactPermanent; + +/** + * + * @author Styxo + */ +public class EMPBlast extends CardImpl { + + public EMPBlast(UUID ownerId) { + super(ownerId, 10, "EMP Blast", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{2}{W}"); + this.expansionSetCode = "SWS"; + + // Exile target artifact. + this.getSpellAbility().addEffect(new ExileTargetEffect()); + this.getSpellAbility().addTarget(new TargetArtifactPermanent()); + + // Tap all other artifacts. + this.getSpellAbility().addEffect(new EMPBlastEffect()); + } + + public EMPBlast(final EMPBlast card) { + super(card); + } + + @Override + public EMPBlast copy() { + return new EMPBlast(this); + } +} + +class EMPBlastEffect extends OneShotEffect { + + public EMPBlastEffect() { + super(Outcome.Tap); + this.staticText = "Tap all other artifacts"; + } + + public EMPBlastEffect(final EMPBlastEffect effect) { + super(effect); + } + + @Override + public EMPBlastEffect copy() { + return new EMPBlastEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + for (Permanent artifact : game.getBattlefield().getActivePermanents(new FilterArtifactPermanent(), source.getControllerId(), source.getSourceId(), game)) { + artifact.tap(game); + } + return true; + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/EchoBaseCommando.java b/Mage.Sets/src/mage/sets/starwars/EchoBaseCommando.java new file mode 100644 index 0000000000..ed9189037a --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/EchoBaseCommando.java @@ -0,0 +1,135 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.ActivatedAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.cost.CostModificationEffectImpl; +import mage.abilities.keyword.ProtectionAbility; +import mage.cards.CardImpl; +import mage.constants.AbilityType; +import mage.constants.CardType; +import mage.constants.CostModificationType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.Filter; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.filter.predicate.permanent.ControllerPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.util.CardUtil; + +/** + * + * @author Styxo + */ +public class EchoBaseCommando extends CardImpl { + + private static final Filter filter = new FilterPermanent("Beasts"); + + static { + filter.add(new SubtypePredicate("Beast")); + } + + public EchoBaseCommando(UUID ownerId) { + super(ownerId, 175, "Echo Base Commando", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{1}{G}{W}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Human"); + this.subtype.add("Rebel"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Protection from Beasts. + this.addAbility(new ProtectionAbility(filter)); + + // Activated abilities of creatures your opponent controls cost {2} more to activate. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new EchoBaseCommandoEffect())); + + } + + public EchoBaseCommando(final EchoBaseCommando card) { + super(card); + } + + @Override + public EchoBaseCommando copy() { + return new EchoBaseCommando(this); + } +} + +class EchoBaseCommandoEffect extends CostModificationEffectImpl { + + private static final String effectText = "Activated abilities of creatures your opponent controls cost {2} more to activate"; + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); + + static { + filter.add(new ControllerPredicate(TargetController.OPPONENT)); + } + + public EchoBaseCommandoEffect() { + super(Duration.WhileOnBattlefield, Outcome.Benefit, CostModificationType.INCREASE_COST); + staticText = effectText; + } + + public EchoBaseCommandoEffect(final EchoBaseCommandoEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source, Ability abilityToModify) { + if (game.getPlayer(abilityToModify.getControllerId()) != null) { + CardUtil.increaseCost(abilityToModify, 2); + return true; + } + return false; + } + + @Override + public boolean applies(Ability abilityToModify, Ability source, Game game) { + if (abilityToModify.getAbilityType().equals(AbilityType.ACTIVATED) || (abilityToModify.getAbilityType().equals(AbilityType.MANA) && (abilityToModify instanceof ActivatedAbility))) { + Permanent permanent = game.getPermanent(abilityToModify.getSourceId()); + if (permanent != null && filter.match(permanent, source.getSourceId(), source.getControllerId(), game)) { + return true; + } + } + return false; + } + + @Override + public EchoBaseCommandoEffect copy() { + return new EchoBaseCommandoEffect(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/EscapePod.java b/Mage.Sets/src/mage/sets/starwars/EscapePod.java new file mode 100644 index 0000000000..53d82bf6f0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/EscapePod.java @@ -0,0 +1,101 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.ReturnFromExileEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.target.common.TargetControlledCreaturePermanent; + +/** + * + * @author Styxo + */ +public class EscapePod extends CardImpl { + + public EscapePod(UUID ownerId) { + super(ownerId, 11, "Escape Pod", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{W}"); + this.expansionSetCode = "SWS"; + + // Exile target creature you control. Return that card to the battlefield under its owner's control at the beginning of the next end step. + this.getSpellAbility().addEffect(new EscapePodEffect()); + this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); + + } + + public EscapePod(final EscapePod card) { + super(card); + } + + @Override + public EscapePod copy() { + return new EscapePod(this); + } +} + +class EscapePodEffect extends OneShotEffect { + + public EscapePodEffect() { + super(Outcome.Detriment); + staticText = "Exile target creature you control. Return that card to the battlefield under its owner's control at the beginning of the next end step"; + } + + public EscapePodEffect(final EscapePodEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = game.getPermanent(source.getFirstTarget()); + MageObject sourceObject = game.getObject(source.getSourceId()); + if (permanent != null && sourceObject != null) { + if (permanent.moveToExile(source.getSourceId(), sourceObject.getIdName(), source.getSourceId(), game)) { + AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new ReturnFromExileEffect(source.getSourceId(), Zone.BATTLEFIELD, false)); + game.addDelayedTriggeredAbility(delayedAbility, source); + return true; + } + } + return false; + } + + @Override + public EscapePodEffect copy() { + return new EscapePodEffect(this); + } + +} diff --git a/Mage.Sets/src/mage/sets/starwars/EwokAmbush.java b/Mage.Sets/src/mage/sets/starwars/EwokAmbush.java new file mode 100644 index 0000000000..d628182b42 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/EwokAmbush.java @@ -0,0 +1,107 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.effects.ContinuousEffect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.keyword.HasteAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.game.permanent.token.EwokToken; +import mage.players.Player; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author Styxo + */ +public class EwokAmbush extends CardImpl { + + public EwokAmbush(UUID ownerId) { + super(ownerId, 134, "Ewok Ambush", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{2}{G}"); + this.expansionSetCode = "SWS"; + + // Create two 1/1 green Ewok creature tokens. Those tokens gain haste until end of turn. + this.getSpellAbility().addEffect(new EwokAmbushCreateTokenEffect()); + } + + public EwokAmbush(final EwokAmbush card) { + super(card); + } + + @Override + public EwokAmbush copy() { + return new EwokAmbush(this); + } +} + +class EwokAmbushCreateTokenEffect extends OneShotEffect { + + public EwokAmbushCreateTokenEffect() { + super(Outcome.PutCreatureInPlay); + this.staticText = "Create two 1/1 green Ewok creature tokens. Those tokens gain haste until end of turn"; + } + + public EwokAmbushCreateTokenEffect(final EwokAmbushCreateTokenEffect effect) { + super(effect); + } + + @Override + public EwokAmbushCreateTokenEffect copy() { + return new EwokAmbushCreateTokenEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + CreateTokenEffect effect = new CreateTokenEffect(new EwokToken(), 2); + effect.apply(game, source); + for (UUID tokenId : effect.getLastAddedTokenIds()) { + Permanent token = game.getPermanent(tokenId); + if (token != null) { + ContinuousEffect continuousEffect = new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn); + continuousEffect.setTargetPointer(new FixedTarget(tokenId)); + game.addEffect(continuousEffect, source); + } + } + + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/EwokFiredancers.java b/Mage.Sets/src/mage/sets/starwars/EwokFiredancers.java new file mode 100644 index 0000000000..b175d1cfc5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/EwokFiredancers.java @@ -0,0 +1,71 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author Styxo + */ +public class EwokFiredancers extends CardImpl { + + public EwokFiredancers(UUID ownerId) { + super(ownerId, 135, "Ewok Firedancers", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{G}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Ewok"); + this.subtype.add("Shaman"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Trample + this.addAbility(TrampleAbility.getInstance()); + + // {1}{R}: Ewok Firedancers gets +1/+0 until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 0, Duration.EndOfTurn), new ManaCostsImpl("{1}{R}"))); + } + + public EwokFiredancers(final EwokFiredancers card) { + super(card); + } + + @Override + public EwokFiredancers copy() { + return new EwokFiredancers(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/EwokVillage.java b/Mage.Sets/src/mage/sets/starwars/EwokVillage.java new file mode 100644 index 0000000000..7bf1a02212 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/EwokVillage.java @@ -0,0 +1,70 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.Mana; +import mage.abilities.common.EntersBattlefieldTappedAbility; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.AddManaToManaPoolSourceControllerEffect; +import mage.abilities.mana.RedManaAbility; +import mage.abilities.mana.WhiteManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class EwokVillage extends CardImpl { + + public EwokVillage(UUID ownerId) { + super(ownerId, 241, "Ewok Village", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "SWS"; + + // Ewok Village enters the battlefield tapped. + this.addAbility(new EntersBattlefieldTappedAbility()); + + // When Ewok Village enters the battlefield , add {G} to your mana pool. + this.addAbility(new EntersBattlefieldTriggeredAbility(new AddManaToManaPoolSourceControllerEffect(new Mana(0, 1, 0, 0, 0, 0, 0, 0)))); + + // {T}: Add {R} or {W} to you mana pool. + this.addAbility(new RedManaAbility()); + this.addAbility(new WhiteManaAbility()); + } + + public EwokVillage(final EwokVillage card) { + super(card); + } + + @Override + public EwokVillage copy() { + return new EwokVillage(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/Exogorth.java b/Mage.Sets/src/mage/sets/starwars/Exogorth.java new file mode 100644 index 0000000000..2586c26564 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Exogorth.java @@ -0,0 +1,105 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.RestrictionEffect; +import mage.abilities.keyword.FlashAbility; +import mage.abilities.keyword.SpaceflightAbility; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.permanent.Permanent; + +/** + * + * @author Styxo + */ +public class Exogorth extends CardImpl { + + public Exogorth(UUID ownerId) { + super(ownerId, 136, "Exogorth", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{5}{G}{G}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Slug"); + this.power = new MageInt(7); + this.toughness = new MageInt(7); + + // Flash + this.addAbility(FlashAbility.getInstance()); + + // Trample + this.addAbility(TrampleAbility.getInstance()); + + // Exogorth can block only creatures with spaceflight. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CanBlockOnlySpaceflightEffect())); + } + + public Exogorth(final Exogorth card) { + super(card); + } + + @Override + public Exogorth copy() { + return new Exogorth(this); + } +} + +class CanBlockOnlySpaceflightEffect extends RestrictionEffect { + + public CanBlockOnlySpaceflightEffect() { + super(Duration.EndOfTurn); + this.staticText = "{this} can block only creatures with spaceflight"; + } + + public CanBlockOnlySpaceflightEffect(final CanBlockOnlySpaceflightEffect effect) { + super(effect); + } + + @Override + public boolean applies(Permanent permanent, Ability source, Game game) { + return permanent.getId().equals(source.getSourceId()); + } + + @Override + public boolean canBlock(Permanent attacker, Permanent blocker, Ability source, Game game) { + return attacker.getAbilities().contains(SpaceflightAbility.getInstance()); + } + + @Override + public CanBlockOnlySpaceflightEffect copy() { + return new CanBlockOnlySpaceflightEffect(this); + } + +} diff --git a/Mage.Sets/src/mage/sets/starwars/Explore.java b/Mage.Sets/src/mage/sets/starwars/Explore.java new file mode 100644 index 0000000000..be790af14b --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Explore.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; + +/** + * + * @author Styxo + */ +public class Explore extends mage.sets.worldwake.Explore { + + public Explore(UUID ownerId) { + super(ownerId); + this.cardNumber = "137"; + this.expansionSetCode = "SWS"; + } + + public Explore(final Explore card) { + super(card); + } + + @Override + public Explore copy() { + return new Explore(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/FerocityOfTheUnderworld.java b/Mage.Sets/src/mage/sets/starwars/FerocityOfTheUnderworld.java new file mode 100644 index 0000000000..f8c0a40513 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/FerocityOfTheUnderworld.java @@ -0,0 +1,91 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Mode; +import mage.abilities.effects.common.CopyTargetSpellEffect; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.Filter; +import mage.filter.FilterSpell; +import mage.filter.common.FilterNonlandPermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.predicate.mageobject.ConvertedManaCostPredicate; +import mage.target.TargetSpell; +import mage.target.common.TargetCardInYourGraveyard; +import mage.target.common.TargetNonlandPermanent; + +/** + * + * @author Styxo + */ +public class FerocityOfTheUnderworld extends CardImpl { + + private static final FilterNonlandPermanent filterMode1 = new FilterNonlandPermanent("nonland permanent with converted mana cost 3 or less"); + private static final FilterSpell filterMode2 = new FilterSpell("instant or sorcery spell"); + + static { + filterMode1.add(new ConvertedManaCostPredicate(Filter.ComparisonType.LessThan, 4)); + filterMode2.add(Predicates.or(new CardTypePredicate(CardType.INSTANT), new CardTypePredicate(CardType.SORCERY))); + } + + public FerocityOfTheUnderworld(UUID ownerId) { + super(ownerId, 194, "Ferocity of the Underworld", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{B}{R}{G}"); + this.expansionSetCode = "SWS"; + + // Choose one - Destroy target nonland permanent with converted mana cost 3 or less. + this.getSpellAbility().addEffect(new DestroyTargetEffect()); + this.getSpellAbility().addTarget(new TargetNonlandPermanent(filterMode1)); + + // Copy target instant or sorcery spell. You may choose new targets for the copy. + Mode mode = new Mode(); + mode.getEffects().add(new CopyTargetSpellEffect()); + mode.getTargets().add(new TargetSpell(filterMode2)); + this.getSpellAbility().addMode(mode); + + // Return target card from your graveyard to your hand. + mode = new Mode(); + mode.getEffects().add(new ReturnFromGraveyardToHandTargetEffect()); + mode.getTargets().add(new TargetCardInYourGraveyard()); + this.getSpellAbility().addMode(mode); + } + + public FerocityOfTheUnderworld(final FerocityOfTheUnderworld card) { + super(card); + } + + @Override + public FerocityOfTheUnderworld copy() { + return new FerocityOfTheUnderworld(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/FlamesOfRemembrance.java b/Mage.Sets/src/mage/sets/starwars/FlamesOfRemembrance.java new file mode 100644 index 0000000000..e91b01a747 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/FlamesOfRemembrance.java @@ -0,0 +1,170 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.ExileFromGraveCost; +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.dynamicvalue.common.CountersSourceCount; +import mage.abilities.effects.AsThoughEffectImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.DoIfCostPaid; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.constants.AsThoughEffectType; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.game.Game; +import mage.players.Library; +import mage.players.Player; +import mage.target.common.TargetCardInYourGraveyard; + +/** + * + * @author Styxo + */ +public class FlamesOfRemembrance extends CardImpl { + + public FlamesOfRemembrance(UUID ownerId) { + super(ownerId, 102, "Flames of Remembrance", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{R}"); + this.expansionSetCode = "SWS"; + + // At the beggining of your upkeep, you may exile a card from your graveyard. If you do, put a charge counter on Flames of Remembrance. + this.addAbility(new BeginningOfUpkeepTriggeredAbility(new DoIfCostPaid(new AddCountersSourceEffect(CounterType.CHARGE.createInstance()), new ExileFromGraveCost(new TargetCardInYourGraveyard()), null, true), TargetController.YOU, false)); + + // Sacrifice Flames of Remembrance: Exile top X cards of your library, where X is the number of charge counters on Flames of Remembrance. Until end of turn you play cards exile this way. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new FlamesOfRemembranceExileEffect(new CountersSourceCount(CounterType.CHARGE)), new SacrificeSourceCost())); + } + + public FlamesOfRemembrance(final FlamesOfRemembrance card) { + super(card); + } + + @Override + public FlamesOfRemembrance copy() { + return new FlamesOfRemembrance(this); + } +} + +class FlamesOfRemembranceExileEffect extends OneShotEffect { + + private CountersSourceCount amount; + + public FlamesOfRemembranceExileEffect(CountersSourceCount amount) { + super(Outcome.Benefit); + this.amount = amount; + this.staticText = "Exile top X cards of your library, where X is the number of charge counters on Flames of Remembrance. Until end of turn you play cards exile this way"; + } + + public FlamesOfRemembranceExileEffect(final FlamesOfRemembranceExileEffect effect) { + super(effect); + this.amount = effect.amount; + } + + @Override + public FlamesOfRemembranceExileEffect copy() { + return new FlamesOfRemembranceExileEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + + Library library = controller.getLibrary(); + List cards = new ArrayList<>(); + int count = Math.min(amount.calculate(game, source, this), library.size()); + for (int i = 0; i < count; i++) { + Card card = library.removeFromTop(game); + if (card != null) { + cards.add(card); + } + } + if (cards.size() > 0) { + List cardsId = new ArrayList<>(); + for (Card card : cards) { + card.moveToExile(source.getSourceId(), "Flames of Remembrance", source.getSourceId(), game); + cardsId.add(card.getId()); + } + game.addEffect(new FlamesOfRemembranceMayPlayExiledEffect(cardsId), source); + } + return true; + } + return false; + } + +} + +class FlamesOfRemembranceMayPlayExiledEffect extends AsThoughEffectImpl { + + public List cards = new ArrayList<>(); + + public FlamesOfRemembranceMayPlayExiledEffect(List cards) { + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); + this.cards.addAll(cards); + } + + public FlamesOfRemembranceMayPlayExiledEffect(final FlamesOfRemembranceMayPlayExiledEffect effect) { + super(effect); + this.cards.addAll(effect.cards); + } + + @Override + public FlamesOfRemembranceMayPlayExiledEffect copy() { + return new FlamesOfRemembranceMayPlayExiledEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public boolean applies(UUID sourceId, Ability source, UUID affectedControllerId, Game game) { + Card card = game.getCard(sourceId); + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null && card != null && game.getState().getZone(sourceId) == Zone.EXILED) { + if (cards.contains(sourceId)) { + return true; + } + } + return false; + } + +} diff --git a/Mage.Sets/src/mage/sets/starwars/ForceAdept.java b/Mage.Sets/src/mage/sets/starwars/ForceAdept.java new file mode 100644 index 0000000000..93b0781cb7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/ForceAdept.java @@ -0,0 +1,124 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.keyword.FlashAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.AnotherPredicate; +import mage.filter.predicate.permanent.ControllerPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author Styxo + */ +public class ForceAdept extends CardImpl { + + private static final FilterControlledCreaturePermanent filter1 = new FilterControlledCreaturePermanent("another target creature you control"); + private static final FilterCreaturePermanent filter2 = new FilterCreaturePermanent("creature you don't control"); + + static { + filter1.add(new AnotherPredicate()); + filter2.add(new ControllerPredicate(TargetController.NOT_YOU)); + } + + public ForceAdept(UUID ownerId) { + super(ownerId, 195, "Force Adept", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{G}{U}{W}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Mirialan"); + this.subtype.add("Jedi"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Flash + this.addAbility(FlashAbility.getInstance()); + + // When Force Adept enters the battlefield, return another target creature you control and target creature you don't control to their owner's hands. + Ability ability = new EntersBattlefieldTriggeredAbility(new ForceAdeptEffect()); + this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent(filter1)); + this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter2)); + this.addAbility(ability); + } + + public ForceAdept(final ForceAdept card) { + super(card); + } + + @Override + public ForceAdept copy() { + return new ForceAdept(this); + } +} + +class ForceAdeptEffect extends OneShotEffect { + + public ForceAdeptEffect() { + super(Outcome.ReturnToHand); + this.staticText = "return another target creature you control and target creature you don't control to their owners' hands"; + } + + public ForceAdeptEffect(final ForceAdeptEffect effect) { + super(effect); + } + + @Override + public ForceAdeptEffect copy() { + return new ForceAdeptEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + boolean result = false; + + Permanent permanent = game.getPermanent(source.getFirstTarget()); + if (permanent != null) { + result |= permanent.moveToZone(Zone.HAND, source.getSourceId(), game, false); + } + permanent = game.getPermanent(source.getTargets().get(1).getFirstTarget()); + if (permanent != null) { + result |= permanent.moveToZone(Zone.HAND, source.getSourceId(), game, false); + } + + return result; + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/ForceChoke.java b/Mage.Sets/src/mage/sets/starwars/ForceChoke.java new file mode 100644 index 0000000000..ce5713cf17 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/ForceChoke.java @@ -0,0 +1,68 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.effects.common.CounterTargetEffect; +import mage.abilities.effects.common.LoseLifeTargetControllerEffect; +import mage.abilities.effects.keyword.ScryEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.TargetSpell; + +/** + * + * @author Styxo + */ +public class ForceChoke extends CardImpl { + + public ForceChoke(UUID ownerId) { + super(ownerId, 166, "Force Choke", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{3}{U}{B}"); + this.expansionSetCode = "SWS"; + + // Counter target spell. + this.getSpellAbility().addTarget(new TargetSpell()); + this.getSpellAbility().addEffect(new CounterTargetEffect()); + + // It controller loses 2 life. + this.getSpellAbility().addEffect(new LoseLifeTargetControllerEffect(2)); + + // Scry 2 + this.getSpellAbility().addEffect(new ScryEffect(2)); + } + + public ForceChoke(final ForceChoke card) { + super(card); + } + + @Override + public ForceChoke copy() { + return new ForceChoke(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/ForceDenial.java b/Mage.Sets/src/mage/sets/starwars/ForceDenial.java new file mode 100644 index 0000000000..6a6efa4916 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/ForceDenial.java @@ -0,0 +1,80 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.condition.InvertCondition; +import mage.abilities.condition.common.HateCondition; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.effects.common.CounterTargetEffect; +import mage.abilities.effects.common.CounterUnlessPaysEffect; +import mage.abilities.effects.keyword.ScryEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.TargetSpell; +import mage.watchers.common.NonCombatDamageWatcher; + +/** + * + * @author Styxo + */ +public class ForceDenial extends CardImpl { + + public ForceDenial(UUID ownerId) { + super(ownerId, 37, "Force Denial", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{1}{U}"); + this.expansionSetCode = "SWS"; + + // Counter target spell unless its controller pays {1}. + this.getSpellAbility().addEffect(new ConditionalOneShotEffect( + new CounterUnlessPaysEffect(new GenericManaCost(1)), + new InvertCondition(HateCondition.getInstance()), + "Counter target spell unless its controller pays {1}.")); + + // Hate — If an opponent lost life from a source other then combat damage this turn, counter that spell instead. + this.getSpellAbility().addEffect(new ConditionalOneShotEffect( + new CounterTargetEffect(), + HateCondition.getInstance(), + "
Hate - If an opponent lost life from a source other than combat damage this turn, counter that spell instead.")); + this.getSpellAbility().addTarget(new TargetSpell()); + this.getSpellAbility().addWatcher(new NonCombatDamageWatcher()); + + // Scry 1 + this.getSpellAbility().addEffect(new ScryEffect(1)); + } + + public ForceDenial(final ForceDenial card) { + super(card); + } + + @Override + public ForceDenial copy() { + return new ForceDenial(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/ForceDrain.java b/Mage.Sets/src/mage/sets/starwars/ForceDrain.java new file mode 100644 index 0000000000..122992486c --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/ForceDrain.java @@ -0,0 +1,66 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.effects.keyword.ScryEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.common.TargetCreatureOrPlayer; + +/** + * + * @author Styxo + */ +public class ForceDrain extends CardImpl { + + public ForceDrain(UUID ownerId) { + super(ownerId, 73, "Force Drain", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{2}{B}"); + this.expansionSetCode = "SWS"; + + // ForceDrain deals 2 damage to target creature or player, you gain 2 life. + this.getSpellAbility().addTarget(new TargetCreatureOrPlayer()); + this.getSpellAbility().addEffect(new DamageTargetEffect(2)); + this.getSpellAbility().addEffect(new GainLifeEffect(2)); + + // Scry 1 + this.getSpellAbility().addEffect(new ScryEffect(1)); + } + + public ForceDrain(final ForceDrain card) { + super(card); + } + + @Override + public ForceDrain copy() { + return new ForceDrain(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/ForceHealing.java b/Mage.Sets/src/mage/sets/starwars/ForceHealing.java new file mode 100644 index 0000000000..5190741a5a --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/ForceHealing.java @@ -0,0 +1,65 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.effects.common.PreventDamageToTargetEffect; +import mage.abilities.effects.keyword.ScryEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.target.common.TargetCreatureOrPlayer; + +/** + * + * @author Styxo + */ +public class ForceHealing extends CardImpl { + + public ForceHealing(UUID ownerId) { + super(ownerId, 12, "Force Healing", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{W}"); + this.expansionSetCode = "SWS"; + + // Prevent the next 4 damage that would be dealt to target creature or player this turn. + this.getSpellAbility().addEffect(new PreventDamageToTargetEffect(Duration.EndOfTurn, 4)); + this.getSpellAbility().addTarget(new TargetCreatureOrPlayer()); + + // Scry 1 + this.getSpellAbility().addEffect(new ScryEffect(1)); + } + + public ForceHealing(final ForceHealing card) { + super(card); + } + + @Override + public ForceHealing copy() { + return new ForceHealing(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/ForceLightning.java b/Mage.Sets/src/mage/sets/starwars/ForceLightning.java new file mode 100644 index 0000000000..ddf80ad22b --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/ForceLightning.java @@ -0,0 +1,100 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.dynamicvalue.common.ManacostVariableValue; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.game.Game; +import mage.players.Player; +import mage.target.common.TargetCreatureOrPlayer; + +/** + * + * @author Styxo + */ +public class ForceLightning extends CardImpl { + + public ForceLightning(UUID ownerId) { + super(ownerId, 103, "Force Lightning", Rarity.RARE, new CardType[]{CardType.INSTANT}, "{X}{R}{R}"); + this.expansionSetCode = "SWS"; + + // Force Lightning deals X damage to target creature or player. + this.getSpellAbility().addEffect(new DamageTargetEffect(new ManacostVariableValue())); + this.getSpellAbility().addTarget(new TargetCreatureOrPlayer()); + + // Scry X. + this.getSpellAbility().addEffect(new ForceLightningEffect()); + + } + + public ForceLightning(final ForceLightning card) { + super(card); + } + + @Override + public ForceLightning copy() { + return new ForceLightning(this); + } +} + +class ForceLightningEffect extends OneShotEffect { + + public ForceLightningEffect() { + super(Outcome.Benefit); + this.staticText = "Scry X"; + } + + public ForceLightningEffect(final ForceLightningEffect effect) { + super(effect); + } + + @Override + public ForceLightningEffect copy() { + return new ForceLightningEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + int x = source.getManaCostsToPay().getX(); + if (x > 0) { + return controller.scry(x, source, game); + } + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/ForceMastery.java b/Mage.Sets/src/mage/sets/starwars/ForceMastery.java new file mode 100644 index 0000000000..f13ad3b623 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/ForceMastery.java @@ -0,0 +1,106 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.cards.Cards; +import mage.cards.CardsImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; + +/** + * + * @author Styxo + */ +public class ForceMastery extends CardImpl { + + public ForceMastery(UUID ownerId) { + super(ownerId, 196, "Force Mastery", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{3}{G}{U}{W}"); + this.expansionSetCode = "SWS"; + + // At the beggining of your upkeep, reveal the top card of your library and put that card into your hand. You gain life equal to its converted mana cost. + this.addAbility(new BeginningOfUpkeepTriggeredAbility(new ForceMasteryEffect(), TargetController.YOU, false)); + + } + + public ForceMastery(final ForceMastery card) { + super(card); + } + + @Override + public ForceMastery copy() { + return new ForceMastery(this); + } +} + +class ForceMasteryEffect extends OneShotEffect { + + ForceMasteryEffect() { + super(Outcome.DrawCard); + this.staticText = "reveal the top card of your library and put that card into your hand. You gain life equal to its converted mana cost"; + } + + ForceMasteryEffect(final ForceMasteryEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + Permanent sourcePermanent = game.getPermanentOrLKIBattlefield(source.getSourceId()); + if (controller != null && sourcePermanent != null) { + if (controller.getLibrary().size() > 0) { + Card card = controller.getLibrary().removeFromTop(game); + if (card != null) { + Cards cards = new CardsImpl(card); + controller.revealCards(sourcePermanent.getIdName(), cards, game); + controller.moveCards(card, Zone.HAND, source, game); + controller.gainLife(card.getConvertedManaCost(), game); + } + return true; + } + } + return false; + } + + @Override + public ForceMasteryEffect copy() { + return new ForceMasteryEffect(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/ForcePull.java b/Mage.Sets/src/mage/sets/starwars/ForcePull.java new file mode 100644 index 0000000000..4609ecbdb8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/ForcePull.java @@ -0,0 +1,73 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.effects.keyword.ScryEffect; +import mage.abilities.keyword.SpaceflightAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author Styxo + */ +public class ForcePull extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with spaceflight"); + + static { + filter.add(new AbilityPredicate(SpaceflightAbility.class)); + } + + public ForcePull(UUID ownerId) { + super(ownerId, 138, "Force Pull", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{2}{G}"); + this.expansionSetCode = "SWS"; + + // Destroy targer creature with spaceflight. + this.getSpellAbility().addEffect(new DestroyTargetEffect()); + this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter)); + + // Scry 3 + this.getSpellAbility().addEffect(new ScryEffect(3)); + } + + public ForcePull(final ForcePull card) { + super(card); + } + + @Override + public ForcePull copy() { + return new ForcePull(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/ForcePush.java b/Mage.Sets/src/mage/sets/starwars/ForcePush.java new file mode 100644 index 0000000000..c98c57ee92 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/ForcePush.java @@ -0,0 +1,64 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.effects.common.PutOnLibraryTargetEffect; +import mage.abilities.effects.keyword.ScryEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author Styxo + */ +public class ForcePush extends CardImpl { + + public ForcePush(UUID ownerId) { + super(ownerId, 38, "Force Push", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{3}{U}"); + this.expansionSetCode = "SWS"; + + // Put target creature on top of its owner's library. + this.getSpellAbility().addEffect(new PutOnLibraryTargetEffect(true)); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + + // Scry 1 + this.getSpellAbility().addEffect(new ScryEffect(1)); + } + + public ForcePush(final ForcePush card) { + super(card); + } + + @Override + public ForcePush copy() { + return new ForcePush(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/ForceScream.java b/Mage.Sets/src/mage/sets/starwars/ForceScream.java new file mode 100644 index 0000000000..7d6e716eca --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/ForceScream.java @@ -0,0 +1,73 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.effects.common.DamageEverythingEffect; +import mage.abilities.effects.keyword.ScryEffect; +import mage.abilities.keyword.SpaceflightAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.AbilityPredicate; + +/** + * + * @author Styxo + */ +public class ForceScream extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature without spaceflight"); + + static { + filter.add(Predicates.not(new AbilityPredicate(SpaceflightAbility.class))); + + } + + public ForceScream(UUID ownerId) { + super(ownerId, 104, "Force Scream", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{2}{R}"); + this.expansionSetCode = "SWS"; + + // Force Spark deals 2 damage to each creature without spaceflight and each player. + this.getSpellAbility().addEffect(new DamageEverythingEffect(2, filter)); + + // Scry 1. + this.getSpellAbility().addEffect(new ScryEffect(1)); + } + + public ForceScream(final ForceScream card) { + super(card); + } + + @Override + public ForceScream copy() { + return new ForceScream(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/ForceSpark.java b/Mage.Sets/src/mage/sets/starwars/ForceSpark.java new file mode 100644 index 0000000000..49e82b7fb2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/ForceSpark.java @@ -0,0 +1,64 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.effects.keyword.ScryEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.common.TargetCreatureOrPlayer; + +/** + * + * @author Styxo + */ +public class ForceSpark extends CardImpl { + + public ForceSpark(UUID ownerId) { + super(ownerId, 105, "Force Spark", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{R}"); + this.expansionSetCode = "SWS"; + + // Force Spark deals 1 damage to target creature or player. + this.getSpellAbility().addEffect(new DamageTargetEffect(1)); + this.getSpellAbility().addTarget(new TargetCreatureOrPlayer()); + + // Scry 1. + this.getSpellAbility().addEffect(new ScryEffect(1)); + } + + public ForceSpark(final ForceSpark card) { + super(card); + } + + @Override + public ForceSpark copy() { + return new ForceSpark(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/Forest1.java b/Mage.Sets/src/mage/sets/starwars/Forest1.java new file mode 100644 index 0000000000..f8ad0bee30 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Forest1.java @@ -0,0 +1,51 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; + +/** + * + * @author Styxo + */ +public class Forest1 extends mage.cards.basiclands.Forest { + + public Forest1(UUID ownerId) { + super(ownerId, 264); + this.expansionSetCode = "SWS"; + } + + public Forest1(final Forest1 card) { + super(card); + } + + @Override + public Forest1 copy() { + return new Forest1(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/Forest2.java b/Mage.Sets/src/mage/sets/starwars/Forest2.java new file mode 100644 index 0000000000..96a73056ef --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Forest2.java @@ -0,0 +1,51 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; + +/** + * + * @author Styxo + */ +public class Forest2 extends mage.cards.basiclands.Forest { + + public Forest2(UUID ownerId) { + super(ownerId, 265); + this.expansionSetCode = "SWS"; + } + + public Forest2(final Forest2 card) { + super(card); + } + + @Override + public Forest2 copy() { + return new Forest2(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/Forest3.java b/Mage.Sets/src/mage/sets/starwars/Forest3.java new file mode 100644 index 0000000000..59837ace35 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Forest3.java @@ -0,0 +1,51 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; + +/** + * + * @author Styxo + */ +public class Forest3 extends mage.cards.basiclands.Forest { + + public Forest3(UUID ownerId) { + super(ownerId, 266); + this.expansionSetCode = "SWS"; + } + + public Forest3(final Forest3 card) { + super(card); + } + + @Override + public Forest3 copy() { + return new Forest3(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/FulfillContract.java b/Mage.Sets/src/mage/sets/starwars/FulfillContract.java new file mode 100644 index 0000000000..3c46e9d364 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/FulfillContract.java @@ -0,0 +1,69 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.counters.CounterType; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.CounterPredicate; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author Styxo + */ +public class FulfillContract extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with a bounty counter on it"); + + static { + filter.add(new CounterPredicate(CounterType.BOUNTY)); + } + + public FulfillContract(UUID ownerId) { + super(ownerId, 226, "Fulfill Contract", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{B/R}{B/R}"); + this.expansionSetCode = "SWS"; + + // Destroy target creature with a bounty counter on it. + this.getSpellAbility().addEffect(new DestroyTargetEffect()); + this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter)); + } + + public FulfillContract(final FulfillContract card) { + super(card); + } + + @Override + public FulfillContract copy() { + return new FulfillContract(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/GamorreanEnforcer.java b/Mage.Sets/src/mage/sets/starwars/GamorreanEnforcer.java new file mode 100644 index 0000000000..d7a0a08e6e --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/GamorreanEnforcer.java @@ -0,0 +1,73 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.abilities.keyword.HasteAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.counters.CounterType; +import mage.target.common.TargetOpponentsCreaturePermanent; + +/** + * + * @author Styxo + */ +public class GamorreanEnforcer extends CardImpl { + + public GamorreanEnforcer(UUID ownerId) { + super(ownerId, 106, "Gamorrean Enforcer", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{B}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Gamorrean"); + this.subtype.add("Warrior"); + this.power = new MageInt(3); + this.toughness = new MageInt(1); + + // Haste + this.addAbility(HasteAbility.getInstance()); + + // Whenever Gamorrean Enforcer deals combat damage to a player, put a bounty counter on target creature an opponent controls. + Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility(new AddCountersTargetEffect(CounterType.BOUNTY.createInstance()), false); + ability.addTarget(new TargetOpponentsCreaturePermanent()); + this.addAbility(ability); + } + + public GamorreanEnforcer(final GamorreanEnforcer card) { + super(card); + } + + @Override + public GamorreanEnforcer copy() { + return new GamorreanEnforcer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/GamorreanPrisonGuard.java b/Mage.Sets/src/mage/sets/starwars/GamorreanPrisonGuard.java new file mode 100644 index 0000000000..072e433df7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/GamorreanPrisonGuard.java @@ -0,0 +1,110 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.SetTargetPointer; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.ControllerPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; + +/** + * + * @author Styxo + */ +public class GamorreanPrisonGuard extends CardImpl { + + private static final FilterPermanent filter = new FilterCreaturePermanent("a creature"); + + static { + filter.add(new ControllerPredicate(TargetController.OPPONENT)); + } + + public GamorreanPrisonGuard(UUID ownerId) { + super(ownerId, 107, "Gamorrean Prison Guard", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{R}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Gamorrean"); + this.subtype.add("Warrior"); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // Whenever a creature enters the battlefield under an opponent's control, Gamorrean Prison Guard fights that creature. + this.addAbility(new EntersBattlefieldAllTriggeredAbility( + Zone.BATTLEFIELD, new GamorreanPrisonGuardEffect(), filter, false, SetTargetPointer.PERMANENT, "Whenever a creature enters the battlefield under an opponent's control, Gamorrean Prison Guard fights that creature.")); + + } + + public GamorreanPrisonGuard(final GamorreanPrisonGuard card) { + super(card); + } + + @Override + public GamorreanPrisonGuard copy() { + return new GamorreanPrisonGuard(this); + } +} + +class GamorreanPrisonGuardEffect extends OneShotEffect { + + public GamorreanPrisonGuardEffect() { + super(Outcome.Detriment); + } + + public GamorreanPrisonGuardEffect(final GamorreanPrisonGuardEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + Player you = game.getPlayer(source.getControllerId()); + Permanent thisCreature = game.getPermanent(source.getSourceId()); + Permanent opponentCreature = game.getPermanent(getTargetPointer().getFirst(game, source)); + if (you != null && thisCreature != null && opponentCreature != null) { + return thisCreature.fight(opponentCreature, source, game); + } + return false; + } + + @Override + public GamorreanPrisonGuardEffect copy() { + return new GamorreanPrisonGuardEffect(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/GeneralGrievous.java b/Mage.Sets/src/mage/sets/starwars/GeneralGrievous.java new file mode 100644 index 0000000000..e997450edd --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/GeneralGrievous.java @@ -0,0 +1,76 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.DiesCreatureTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.RemoveCountersSourceCost; +import mage.abilities.effects.common.ReturnToHandSourceEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.keyword.DoubleStrikeAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; + +/** + * + * @author Styxo + */ +public class GeneralGrievous extends CardImpl { + + public GeneralGrievous(UUID ownerId) { + super(ownerId, 197, "General Grievous", Rarity.MYTHIC, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{W}{U}{B}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Kaleesh"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Double Strike + this.addAbility(DoubleStrikeAbility.getInstance()); + + // Whenever another creature dies, you may put a +1/+1 counter on General Grievous. + this.addAbility(new DiesCreatureTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true, true)); + + // Remove two +1/+1 counters from General Grievous: Return General Grievous to its owner's hand. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandSourceEffect(), new RemoveCountersSourceCost(CounterType.P1P1.createInstance(2)))); + } + + public GeneralGrievous(final GeneralGrievous card) { + super(card); + } + + @Override + public GeneralGrievous copy() { + return new GeneralGrievous(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/GiftedInitiate.java b/Mage.Sets/src/mage/sets/starwars/GiftedInitiate.java new file mode 100644 index 0000000000..37f589975e --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/GiftedInitiate.java @@ -0,0 +1,77 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.TapSourceEffect; +import mage.abilities.effects.common.TapTargetEffect; +import mage.abilities.keyword.MeditateAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author Styxo + */ +public class GiftedInitiate extends CardImpl { + + public GiftedInitiate(UUID ownerId) { + super(ownerId, 13, "Gifted Initiate", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{W}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Human"); + this.subtype.add("Jedi"); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // When Gifted Initiate enters the battlefield, you may tap target creature and Gifted Initiate. + EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new TapTargetEffect(), true); + Effect effect = new TapSourceEffect(); + effect.setText("and {this}"); + ability.addEffect(effect); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + + // Meditate {1}{W} + this.addAbility(new MeditateAbility(new ManaCostsImpl("{1}{W}"))); + } + + public GiftedInitiate(final GiftedInitiate card) { + super(card); + } + + @Override + public GiftedInitiate copy() { + return new GiftedInitiate(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/GrandMoffTarkin.java b/Mage.Sets/src/mage/sets/starwars/GrandMoffTarkin.java new file mode 100644 index 0000000000..b85610fd38 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/GrandMoffTarkin.java @@ -0,0 +1,62 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class GrandMoffTarkin extends CardImpl { + + public GrandMoffTarkin(UUID ownerId) { + super(ownerId, 74, "Grand Moff Tarkin", Rarity.NA/*RARE*/, new CardType[]{CardType.CREATURE}, "{3}{B}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Human"); + this.subtype.add("Advisor"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // At the beggining of each upkeep, destroy target creature that player controls unless that player pays 2 life. If a player pays life this way, draw a card. + } + + public GrandMoffTarkin(final GrandMoffTarkin card) { + super(card); + } + + @Override + public GrandMoffTarkin copy() { + return new GrandMoffTarkin(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/GreaterKraytDragon.java b/Mage.Sets/src/mage/sets/starwars/GreaterKraytDragon.java new file mode 100644 index 0000000000..8e872e0a33 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/GreaterKraytDragon.java @@ -0,0 +1,75 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.BecomesMonstrousSourceTriggeredAbility; +import mage.abilities.dynamicvalue.common.CountersCount; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.keyword.MonstrosityAbility; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.counters.CounterType; +import mage.filter.common.FilterControlledCreaturePermanent; + +/** + * + * @author Styxo + */ +public class GreaterKraytDragon extends CardImpl { + + public GreaterKraytDragon(UUID ownerId) { + super(ownerId, 198, "Greater Krayt Dragon", Rarity.MYTHIC, new CardType[]{CardType.CREATURE}, "{3}{R}{G}{W}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Dragon"); + this.power = new MageInt(6); + this.toughness = new MageInt(7); + + // Trample + this.addAbility(TrampleAbility.getInstance()); + + // {X}{X}{R}{G}{W}: Monstrosity X. + this.addAbility(new MonstrosityAbility("{X}{X}{R}{G}{W}", Integer.MAX_VALUE)); + + // When Greater Krayt Dragon becomes monstrous, draw a card for each +1/+1 counter on creatures you control. + this.addAbility(new BecomesMonstrousSourceTriggeredAbility(new DrawCardSourceControllerEffect(new CountersCount(CounterType.P1P1, new FilterControlledCreaturePermanent())))); + + } + + public GreaterKraytDragon(final GreaterKraytDragon card) { + super(card); + } + + @Override + public GreaterKraytDragon copy() { + return new GreaterKraytDragon(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/Greedo.java b/Mage.Sets/src/mage/sets/starwars/Greedo.java new file mode 100644 index 0000000000..0e27ec4ba4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Greedo.java @@ -0,0 +1,89 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.DiesTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.continuous.GainAbilityAllEffect; +import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.filter.predicate.permanent.BlockedByIdPredicate; +import mage.filter.predicate.permanent.BlockingAttackerIdPredicate; +import mage.target.common.TargetCardInLibrary; + +/** + * + * @author Styxo + */ +public class Greedo extends CardImpl { + + private static final FilterCard filterCard = new FilterCard("Hunter or Rogue card"); + + static { + filterCard.add(Predicates.or(new SubtypePredicate("Rogue"), new SubtypePredicate("Hunter"))); + + } + + public Greedo(UUID ownerId) { + super(ownerId, 199, "Greedo", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{B}{R}{G}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Rodian"); + this.subtype.add("Hunter"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Creatures blocking or blocked by Greedo have first strike. + FilterCreaturePermanent filter = new FilterCreaturePermanent(); + filter.add(Predicates.or(new BlockedByIdPredicate(this.getId()), new BlockingAttackerIdPredicate(this.getId()))); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(FirstStrikeAbility.getInstance(), Duration.WhileOnBattlefield, filter, "Creatures blocking or blocked by {this} have first strike"))); + + // When Greedo dies, you may search your library for Hunter or Rogue card, reveal it, and put it into your hand. + this.addAbility(new DiesTriggeredAbility(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filterCard), true), true)); + } + + public Greedo(final Greedo card) { + super(card); + } + + @Override + public Greedo copy() { + return new Greedo(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/Gundark.java b/Mage.Sets/src/mage/sets/starwars/Gundark.java new file mode 100644 index 0000000000..3ff1ca292b --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Gundark.java @@ -0,0 +1,72 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.BecomesMonstrousSourceTriggeredAbility; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.keyword.HasteAbility; +import mage.abilities.keyword.MonstrosityAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class Gundark extends CardImpl { + + public Gundark(UUID ownerId) { + super(ownerId, 108, "Gundark", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{R}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Beast"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Haste + this.addAbility(HasteAbility.getInstance()); + + // {3}{R}{R}: Monstrosity 3. + this.addAbility(new MonstrosityAbility("{3}{R}{R}", 3)); + + // When Gundark becomes monstrous, it gets +2/+2 until end of turn. + this.addAbility(new BecomesMonstrousSourceTriggeredAbility(new BoostSourceEffect(2, 2, Duration.EndOfTurn))); + } + + public Gundark(final Gundark card) { + super(card); + } + + @Override + public Gundark copy() { + return new Gundark(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/GunganCaptain.java b/Mage.Sets/src/mage/sets/starwars/GunganCaptain.java new file mode 100644 index 0000000000..23c1512d27 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/GunganCaptain.java @@ -0,0 +1,68 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.DealsDamageToACreatureTriggeredAbility; +import mage.abilities.effects.common.DontUntapInControllersNextUntapStepTargetEffect; +import mage.abilities.effects.common.TapTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class GunganCaptain extends CardImpl { + + public GunganCaptain(UUID ownerId) { + super(ownerId, 39, "Gungan Captain", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{U}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Gungan"); + this.subtype.add("Warrior"); + this.power = new MageInt(1); + this.toughness = new MageInt(4); + + // Whenever Gungan Captain deals damage to a creture, tap that creature. That creature does not untap during it controlers untap step. + Ability ability = new DealsDamageToACreatureTriggeredAbility(new TapTargetEffect("that creature"), false, false, true); + ability.addEffect(new DontUntapInControllersNextUntapStepTargetEffect("That creature")); + this.addAbility(ability); + } + + public GunganCaptain(final GunganCaptain card) { + super(card); + } + + @Override + public GunganCaptain copy() { + return new GunganCaptain(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/HanSolo.java b/Mage.Sets/src/mage/sets/starwars/HanSolo.java new file mode 100644 index 0000000000..a0bce373c3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/HanSolo.java @@ -0,0 +1,92 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.BeginningOfCombatTriggeredAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.abilities.keyword.HasteAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.filter.predicate.permanent.ControllerPredicate; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author Styxo + */ +public class HanSolo extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Starship you control"); + + static { + filter.add(new SubtypePredicate("Starship")); + filter.add(new ControllerPredicate(TargetController.YOU)); + } + + public HanSolo(UUID ownerId) { + super(ownerId, 109, "Han Solo", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{3}{R}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Human"); + this.subtype.add("Rogue"); + this.power = new MageInt(4); + this.toughness = new MageInt(3); + + // First strike + this.addAbility(FirstStrikeAbility.getInstance()); + + // At the beggining of each combat, target starship gets +2/+2 and gains haste until end of turn. + Effect effect = new BoostTargetEffect(2, 2, Duration.EndOfTurn); + effect.setText("target Starship you control gets +2/+2"); + BeginningOfCombatTriggeredAbility ability = new BeginningOfCombatTriggeredAbility(effect, TargetController.ANY, false); + effect = new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn); + effect.setText("and gains haste until end of turn"); + ability.addEffect(effect); + ability.addTarget(new TargetCreaturePermanent(filter)); + this.addAbility(ability); + } + + public HanSolo(final HanSolo card) { + super(card); + } + + @Override + public HanSolo copy() { + return new HanSolo(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/HazardTrooper.java b/Mage.Sets/src/mage/sets/starwars/HazardTrooper.java new file mode 100644 index 0000000000..c82177b10f --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/HazardTrooper.java @@ -0,0 +1,77 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.abilities.keyword.IntimidateAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; + +/** + * + * @author Styxo + */ +public class HazardTrooper extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Trooper creatures"); + + static { + filter.add(new SubtypePredicate("Trooper")); + } + + public HazardTrooper(UUID ownerId) { + super(ownerId, 75, "Hazard Trooper", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{B}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Human"); + this.subtype.add("Zyborg"); + this.subtype.add("Trooper"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Trooper creatures you control have intimidate. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(IntimidateAbility.getInstance(), Duration.WhileOnBattlefield, filter, false))); + + } + + public HazardTrooper(final HazardTrooper card) { + super(card); + } + + @Override + public HazardTrooper copy() { + return new HazardTrooper(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/HeadHunting.java b/Mage.Sets/src/mage/sets/starwars/HeadHunting.java new file mode 100644 index 0000000000..f3acc4ef06 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/HeadHunting.java @@ -0,0 +1,69 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.LoseLifeOpponentsEffect; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.counters.CounterType; +import mage.target.common.TargetOpponentsCreaturePermanent; + +/** + * + * @author Styxo + */ +public class HeadHunting extends CardImpl { + + public HeadHunting(UUID ownerId) { + super(ownerId, 76, "Head Hunting", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{1}{B}"); + this.expansionSetCode = "SWS"; + + // Each opponent loses 1 life. + this.getSpellAbility().addEffect(new LoseLifeOpponentsEffect(1)); + + // Put a bounty counter on target creature an opponent controls. + this.getSpellAbility().addTarget(new TargetOpponentsCreaturePermanent()); + this.getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.BOUNTY.createInstance())); + + // Draw a card. + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); + } + + public HeadHunting(final HeadHunting card) { + super(card); + } + + @Override + public HeadHunting copy() { + return new HeadHunting(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/HeavyTrooper.java b/Mage.Sets/src/mage/sets/starwars/HeavyTrooper.java new file mode 100644 index 0000000000..78e0c3dad9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/HeavyTrooper.java @@ -0,0 +1,74 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.continuous.BoostControlledEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; + +/** + * + * @author Styxo + */ +public class HeavyTrooper extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Trooper creatures"); + + static { + filter.add(new SubtypePredicate("Trooper")); + } + + public HeavyTrooper(UUID ownerId) { + super(ownerId, 77, "Heavy Trooper", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{B}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Human"); + this.subtype.add("Trooper"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Trooper creatures you control get +0/+1. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(0, 1, Duration.WhileOnBattlefield, filter, false))); + } + + public HeavyTrooper(final HeavyTrooper card) { + super(card); + } + + @Override + public HeavyTrooper copy() { + return new HeavyTrooper(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/HotPursuit.java b/Mage.Sets/src/mage/sets/starwars/HotPursuit.java new file mode 100644 index 0000000000..edc26f277c --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/HotPursuit.java @@ -0,0 +1,79 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.continuous.BoostOpponentsEffect; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.abilities.keyword.BountyAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.CounterPredicate; +import mage.target.common.TargetOpponentsCreaturePermanent; + +/** + * + * @author Styxo + */ +public class HotPursuit extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Each creature with a bounty counter on it"); + + static { + filter.add(new CounterPredicate(CounterType.BOUNTY)); + } + + public HotPursuit(UUID ownerId) { + super(ownerId, 200, "Hot Pursuit", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{B}{R}{G}"); + this.expansionSetCode = "SWS"; + + // Each creature your opponent's control with a bounty counter on it gets -1/-1. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostOpponentsEffect(-1, -1, Duration.WhileOnBattlefield, filter))); + + // Bounty — Whenever a creature an opponent controls with a bounty counter on it dies, you may put a bounty counter on target creature an opponent controls. + Ability ability = new BountyAbility(new AddCountersTargetEffect(CounterType.BOUNTY.createInstance()), true); + ability.addTarget(new TargetOpponentsCreaturePermanent()); + this.addAbility(ability); + } + + public HotPursuit(final HotPursuit card) { + super(card); + } + + @Override + public HotPursuit copy() { + return new HotPursuit(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/HungryDragonsnake.java b/Mage.Sets/src/mage/sets/starwars/HungryDragonsnake.java new file mode 100644 index 0000000000..e176c3e457 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/HungryDragonsnake.java @@ -0,0 +1,73 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.filter.common.FilterCreaturePermanent; + +/** + * + * @author Styxo + */ +public class HungryDragonsnake extends CardImpl { + + String rule = "Whenever a creature enters the battlefield under an opponents's control, put a +1/+1 counter on {this}."; + + public HungryDragonsnake(UUID ownerId) { + super(ownerId, 139, "Hungry Dragonsnake", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{4}{G}{G}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Snake"); + this.subtype.add("Beast"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Trample + this.addAbility(TrampleAbility.getInstance()); + + // Whenever a creature enters the battlefield under an opponents's control, put a +1/+1 counter on Hungry Dragonsnake. + this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.P1P1.createInstance()), new FilterCreaturePermanent(), false, rule, false)); + } + + public HungryDragonsnake(final HungryDragonsnake card) { + super(card); + } + + @Override + public HungryDragonsnake copy() { + return new HungryDragonsnake(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/HuntToExtinction.java b/Mage.Sets/src/mage/sets/starwars/HuntToExtinction.java new file mode 100644 index 0000000000..e50578af38 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/HuntToExtinction.java @@ -0,0 +1,81 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.dynamicvalue.common.ManacostVariableValue; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DamageAllEffect; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.counters.CounterType; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.CounterPredicate; +import mage.target.common.TargetOpponentsCreaturePermanent; + +/** + * + * @author Styxo + */ +public class HuntToExtinction extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with a bounty counter on it"); + + static { + filter.add(new CounterPredicate(CounterType.BOUNTY)); + } + + public HuntToExtinction(UUID ownerId) { + super(ownerId, 201, "Hunt to Extinction", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{X}{B}{R}{G}"); + this.expansionSetCode = "SWS"; + + // Put a bounty counter on up to one target creature an opponent controls. + this.getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.BOUNTY.createInstance())); + this.getSpellAbility().addTarget(new TargetOpponentsCreaturePermanent(0, 1)); + + // Hunt to Extinction deals X damage to each creature. + this.getSpellAbility().addEffect(new DamageAllEffect(new ManacostVariableValue(), new FilterCreaturePermanent())); + + // Hunt to Exctinction deals an additional X damage to each creature with a bounty counter on it. + Effect effect = new DamageAllEffect(new ManacostVariableValue(), new FilterCreaturePermanent(filter)); + effect.setText("Hunt to Exctinction deals an additional X damage to each creature with a bounty counter on it"); + this.getSpellAbility().addEffect(effect); + + } + + public HuntToExtinction(final HuntToExtinction card) { + super(card); + } + + @Override + public HuntToExtinction copy() { + return new HuntToExtinction(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/HuttCrimeLord.java b/Mage.Sets/src/mage/sets/starwars/HuttCrimeLord.java new file mode 100644 index 0000000000..26cd086554 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/HuttCrimeLord.java @@ -0,0 +1,65 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.counters.CounterType; + +/** + * + * @author Styxo + */ +public class HuttCrimeLord extends CardImpl { + + public HuttCrimeLord(UUID ownerId) { + super(ownerId, 140, "Hutt Crime Lord", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{G}{G}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Hutt"); + this.subtype.add("Rogue"); + this.power = new MageInt(5); + this.toughness = new MageInt(5); + + // Hutt Crime Lord enters the battlefield with a bounty counter on it. + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.BOUNTY.createInstance()), "with a bounty counter on it")); + } + + public HuttCrimeLord(final HuttCrimeLord card) { + super(card); + } + + @Override + public HuttCrimeLord copy() { + return new HuttCrimeLord(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/HuttPalace.java b/Mage.Sets/src/mage/sets/starwars/HuttPalace.java new file mode 100644 index 0000000000..a4e444658c --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/HuttPalace.java @@ -0,0 +1,70 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.Mana; +import mage.abilities.common.EntersBattlefieldTappedAbility; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.AddManaToManaPoolSourceControllerEffect; +import mage.abilities.mana.BlackManaAbility; +import mage.abilities.mana.GreenManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class HuttPalace extends CardImpl { + + public HuttPalace(UUID ownerId) { + super(ownerId, 242, "Hutt Palace", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "SWS"; + + // Hutt Palace enters the battlefield tapped. + this.addAbility(new EntersBattlefieldTappedAbility()); + + // When Hutt Palace enters the battlefield , add {R} to your mana pool. + this.addAbility(new EntersBattlefieldTriggeredAbility(new AddManaToManaPoolSourceControllerEffect(new Mana(1, 0, 0, 0, 0, 0, 0, 0)))); + + // {T}: Add {B} or {G} to you mana pool. + this.addAbility(new BlackManaAbility()); + this.addAbility(new GreenManaAbility()); + } + + public HuttPalace(final HuttPalace card) { + super(card); + } + + @Override + public HuttPalace copy() { + return new HuttPalace(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/IG88B.java b/Mage.Sets/src/mage/sets/starwars/IG88B.java new file mode 100644 index 0000000000..bf09fdbdc5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/IG88B.java @@ -0,0 +1,114 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.LoseLifeTargetEffect; +import mage.abilities.keyword.DeathtouchAbility; +import mage.abilities.keyword.RepairAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.counters.CounterType; +import mage.filter.common.FilterCreaturePermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; + +/** + * + * @author Styxo + */ +public class IG88B extends CardImpl { + + public IG88B(UUID ownerId) { + super(ownerId, 78, "IG-88B", Rarity.RARE, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{2}{B}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Droid"); + this.subtype.add("Hunter"); + this.power = new MageInt(1); + this.toughness = new MageInt(4); + + // Deathtouch + this.addAbility(DeathtouchAbility.getInstance()); + + // Bounty — Whenever IF-88B deals combat damage to a player, that player loses life equal to the number of bounty counters on creatures he or she controls. + this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility( + new LoseLifeTargetEffect(new CountersOnDefendingPlayerCreaturesCount(CounterType.BOUNTY)), + false, + "Bounty — Whenever {this} deals combat damage to a player, that player loses life equal to the number of bounty counters on creatures he or she controls", + true) + ); + + // Repair 3 + this.addAbility(new RepairAbility(3)); + } + + public IG88B(final IG88B card) { + super(card); + } + + @Override + public IG88B copy() { + return new IG88B(this); + } +} + +class CountersOnDefendingPlayerCreaturesCount implements DynamicValue { + + private CounterType counterType; + + public CountersOnDefendingPlayerCreaturesCount(CounterType counterType) { + this.counterType = counterType; + } + + @Override + public int calculate(Game game, Ability sourceAbility, Effect effect) { + int count = 0; + UUID defender = game.getCombat().getDefendingPlayerId(sourceAbility.getSourceId(), game); + for (Permanent permanent : game.getBattlefield().getAllActivePermanents(new FilterCreaturePermanent(), defender, game)) { + count += permanent.getCounters(game).getCount(counterType); + } + return count; + } + + @Override + public CountersOnDefendingPlayerCreaturesCount copy() { + return new CountersOnDefendingPlayerCreaturesCount(counterType); + } + + @Override + public String getMessage() { + return "the number of " + counterType.getName() + " counters on creatures he or she controls"; + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/ImagesOfThePast.java b/Mage.Sets/src/mage/sets/starwars/ImagesOfThePast.java new file mode 100644 index 0000000000..4a5e2d6ba1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/ImagesOfThePast.java @@ -0,0 +1,103 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.List; +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreatureCard; +import mage.game.Game; +import mage.players.Player; +import mage.target.common.TargetCardInYourGraveyard; + +/** + * + * @author Styxo + */ +public class ImagesOfThePast extends CardImpl { + + public ImagesOfThePast(UUID ownerId) { + super(ownerId, 176, "Images of the Past", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{G}{W}"); + this.expansionSetCode = "SWS"; + + // Return up to two target creature cards from your graveyard to the battlefield, then exile those creatures. + this.getSpellAbility().addEffect(new ImagesOfThePastEffect()); + this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(0, 2, new FilterCreatureCard("creature cards from your graveyard"))); + + } + + public ImagesOfThePast(final ImagesOfThePast card) { + super(card); + } + + @Override + public ImagesOfThePast copy() { + return new ImagesOfThePast(this); + } +} + +class ImagesOfThePastEffect extends OneShotEffect { + + ImagesOfThePastEffect() { + super(Outcome.PutCreatureInPlay); + this.staticText = "Return up to two target creature cards from your graveyard to the battlefield, then exile those creatures"; + } + + ImagesOfThePastEffect(final ImagesOfThePastEffect effect) { + super(effect); + } + + @Override + public ImagesOfThePastEffect copy() { + return new ImagesOfThePastEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + if (player != null) { + List targets = source.getTargets().get(0).getTargets(); + for (UUID targetId : targets) { + Card card = game.getCard(targetId); + if (card != null) { + player.moveCards(card, Zone.BATTLEFIELD, source, game); + player.moveCards(card, Zone.EXILED, source, game); + } + } + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/ImperialGunner.java b/Mage.Sets/src/mage/sets/starwars/ImperialGunner.java new file mode 100644 index 0000000000..e951a74f07 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/ImperialGunner.java @@ -0,0 +1,80 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreatureOrPlayer; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.target.common.TargetCreatureOrPlayer; + +/** + * + * @author Styxo + */ +public class ImperialGunner extends CardImpl { + + private static final FilterCreatureOrPlayer filter = new FilterCreatureOrPlayer("target player or Starship creature"); + + static { + filter.getCreatureFilter().add(new SubtypePredicate("Starship")); + } + + public ImperialGunner(UUID ownerId) { + super(ownerId, 110, "Imperial Gunner", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{R}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Human"); + this.subtype.add("Soldier"); + this.power = new MageInt(1); + this.toughness = new MageInt(2); + + // {1},{T}:Imperial Gunner deals 1 damage to target player or Starship creature. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new ManaCostsImpl("{1}")); + ability.addTarget(new TargetCreatureOrPlayer(filter)); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + } + + public ImperialGunner(final ImperialGunner card) { + super(card); + } + + @Override + public ImperialGunner copy() { + return new ImperialGunner(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/ImperialSpy.java b/Mage.Sets/src/mage/sets/starwars/ImperialSpy.java new file mode 100644 index 0000000000..e52d2164e1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/ImperialSpy.java @@ -0,0 +1,72 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.LookLibraryTopCardTargetPlayerEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.TargetPlayer; + +/** + * + * @author Styxo + */ +public class ImperialSpy extends CardImpl { + + public ImperialSpy(UUID ownerId) { + super(ownerId, 40, "Imperial Spy", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{U}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Kubaz"); + this.subtype.add("Rogue"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // {1}{B},{T}: Look at the top card of target player's library. You may put that card into that player's graveyard. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new LookLibraryTopCardTargetPlayerEffect(1, true), new ManaCostsImpl("{1}{B}")); + ability.addCost(new TapSourceCost()); + ability.addTarget(new TargetPlayer()); + this.addAbility(ability); + } + + public ImperialSpy(final ImperialSpy card) { + super(card); + } + + @Override + public ImperialSpy copy() { + return new ImperialSpy(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/InsatiableRakghoul.java b/Mage.Sets/src/mage/sets/starwars/InsatiableRakghoul.java new file mode 100644 index 0000000000..3124a66f45 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/InsatiableRakghoul.java @@ -0,0 +1,136 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.effects.OneShotEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.WatcherScope; +import mage.counters.CounterType; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.ZoneChangeEvent; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.watchers.Watcher; + +/** + * + * @author Styxo + */ +public class InsatiableRakghoul extends CardImpl { + + public InsatiableRakghoul(UUID ownerId) { + super(ownerId, 79, "Insatiable Rakghoul", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{5}{B}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Zombie"); + this.subtype.add("Mutant"); + this.power = new MageInt(5); + this.toughness = new MageInt(6); + + // Insatiable Rakghoul enters the battlefield with a +1/+1 counter on it, if a non-artifact creature died this turn. + this.addAbility(new EntersBattlefieldAbility(new InsatiableRakghoulEffect(), false)); + } + + public InsatiableRakghoul(final InsatiableRakghoul card) { + super(card); + } + + @Override + public InsatiableRakghoul copy() { + return new InsatiableRakghoul(this); + } +} + +class InsatiableRakghoulEffect extends OneShotEffect { + + InsatiableRakghoulEffect() { + super(Outcome.BoostCreature); + staticText = "with a +1/+1 counter on it if a non-artifact creature died this turn"; + } + + InsatiableRakghoulEffect(final InsatiableRakghoulEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + if (player != null) { + NonArtifactCreaturesDiedWatcher watcher = (NonArtifactCreaturesDiedWatcher) game.getState().getWatchers().get("NonArtifactCreaturesDiedWatcher"); + if (watcher != null && watcher.conditionMet()) { + Permanent permanent = game.getPermanentEntering(source.getSourceId()); + if (permanent != null) { + permanent.addCounters(CounterType.P1P1.createInstance(1), game); + } + } + return true; + } + return false; + } + + @Override + public InsatiableRakghoulEffect copy() { + return new InsatiableRakghoulEffect(this); + } +} + +class NonArtifactCreaturesDiedWatcher extends Watcher { + + public NonArtifactCreaturesDiedWatcher() { + super("NonArtifactCreaturesDiedWatcher", WatcherScope.GAME); + } + + public NonArtifactCreaturesDiedWatcher(final NonArtifactCreaturesDiedWatcher watcher) { + super(watcher); + } + + @Override + public void watch(GameEvent event, Game game) { + if (event.getType() == GameEvent.EventType.ZONE_CHANGE) { + ZoneChangeEvent zEvent = (ZoneChangeEvent) event; + if (zEvent.isDiesEvent() && zEvent.getTarget() != null + && zEvent.getTarget().getCardType().contains(CardType.CREATURE) + && !zEvent.getTarget().getCardType().contains(CardType.ARTIFACT)) { + condition = true; + } + } + } + + @Override + public NonArtifactCreaturesDiedWatcher copy() { + return new NonArtifactCreaturesDiedWatcher(this); + } + +} diff --git a/Mage.Sets/src/mage/sets/starwars/Interrogation.java b/Mage.Sets/src/mage/sets/starwars/Interrogation.java new file mode 100644 index 0000000000..78b098ab9f --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Interrogation.java @@ -0,0 +1,100 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.costs.Cost; +import mage.abilities.costs.common.PayLifeCost; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.discard.DiscardTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.game.Game; +import mage.players.Player; +import mage.target.TargetPlayer; + +/** + * + * @author Styxo + */ +public class Interrogation extends CardImpl { + + public Interrogation(UUID ownerId) { + super(ownerId, 80, "Interrogation", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{1}{B}"); + this.expansionSetCode = "SWS"; + + // Target player discards a card. Then that player discards another card unless he or she pays 3 life. + this.getSpellAbility().addTarget(new TargetPlayer()); + this.getSpellAbility().addEffect(new DiscardTargetEffect(1)); + this.getSpellAbility().addEffect(new InterrogationEffect()); + } + + public Interrogation(final Interrogation card) { + super(card); + } + + @Override + public Interrogation copy() { + return new Interrogation(this); + } +} + +class InterrogationEffect extends OneShotEffect { + + InterrogationEffect() { + super(Outcome.Discard); + this.staticText = "Then that player discards another card unless he or she pays 3 life"; + } + + InterrogationEffect(final InterrogationEffect effect) { + super(effect); + } + + @Override + public InterrogationEffect copy() { + return new InterrogationEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(this.getTargetPointer().getFirst(game, source)); + if (player != null) { + Cost cost = new PayLifeCost(3); + if (!cost.canPay(source, source.getSourceId(), player.getId(), game) + || !player.chooseUse(Outcome.LoseLife, "Pay 3 life?", source, game) + || !cost.pay(source, game, source.getSourceId(), player.getId(), false, null)) { + player.discardOne(false, source, game); + } + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/IonCannon.java b/Mage.Sets/src/mage/sets/starwars/IonCannon.java new file mode 100644 index 0000000000..5d0f8866fb --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/IonCannon.java @@ -0,0 +1,75 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.continuous.LoseAbilityTargetEffect; +import mage.abilities.keyword.DefenderAbility; +import mage.abilities.keyword.SpaceflightAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.common.TargetOpponentsCreaturePermanent; + +/** + * + * @author Styxo + */ +public class IonCannon extends CardImpl { + + public IonCannon(UUID ownerId) { + super(ownerId, 14, "Ion Cannon", Rarity.COMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{3}{W}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Construct"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Defender + this.addAbility(DefenderAbility.getInstance()); + + // {T}: Target creature an opponent control loses spaceflight until end of turn. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new LoseAbilityTargetEffect(SpaceflightAbility.getInstance(), Duration.EndOfTurn), new TapSourceCost()); + ability.addTarget(new TargetOpponentsCreaturePermanent()); + this.addAbility(ability); + } + + public IonCannon(final IonCannon card) { + super(card); + } + + @Override + public IonCannon copy() { + return new IonCannon(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/IronFistOfTheEmpire.java b/Mage.Sets/src/mage/sets/starwars/IronFistOfTheEmpire.java new file mode 100644 index 0000000000..50598afe89 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/IronFistOfTheEmpire.java @@ -0,0 +1,86 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.TriggeredAbility; +import mage.abilities.common.BeginningOfEndStepTriggeredAbility; +import mage.abilities.condition.common.HateCondition; +import mage.abilities.decorator.ConditionalTriggeredAbility; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.game.permanent.token.Token; +import mage.watchers.common.NonCombatDamageWatcher; + +/** + * + * @author Styxo + */ +public class IronFistOfTheEmpire extends CardImpl { + + public IronFistOfTheEmpire(UUID ownerId) { + super(ownerId, 202, "Iron Fist of the Empire", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{U}{B}{R}"); + this.expansionSetCode = "SWS"; + + // Hate — At the beggining of each end step, if opponent lost life from a source other than combat damage this turn, you gain 1 life and create a 2/2 red Soldier creature token with first strike name Royal Guard. + TriggeredAbility triggeredAbility = new BeginningOfEndStepTriggeredAbility(new GainLifeEffect(1), TargetController.ANY, false); + triggeredAbility.addEffect(new CreateTokenEffect(new RoyalGuardToken())); + Ability ability = new ConditionalTriggeredAbility( + triggeredAbility, + HateCondition.getInstance(), + "Hate — At the beggining of each end step, if opponent lost life from a source other than combat damage this turn, you gain 1 life and create a 2/2 red Soldier creature token with first strike named Royal Guard."); + this.addAbility(ability, new NonCombatDamageWatcher()); + } + + public IronFistOfTheEmpire(final IronFistOfTheEmpire card) { + super(card); + } + + @Override + public IronFistOfTheEmpire copy() { + return new IronFistOfTheEmpire(this); + } +} + +class RoyalGuardToken extends Token { + + public RoyalGuardToken() { + super("Royal Guard", "2/2 red Soldier creature token with first strike named Royal Guard", 2, 2); + this.setOriginalExpansionSetCode("SWS"); + cardType.add(CardType.CREATURE); + color.setRed(true); + addAbility(FirstStrikeAbility.getInstance()); + subtype.add("Soldier"); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/IrresponsibleGambling.java b/Mage.Sets/src/mage/sets/starwars/IrresponsibleGambling.java new file mode 100644 index 0000000000..38dc3dc758 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/IrresponsibleGambling.java @@ -0,0 +1,62 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.costs.common.DiscardCardCost; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class IrresponsibleGambling extends CardImpl { + + public IrresponsibleGambling(UUID ownerId) { + super(ownerId, 111, "Irresponsible Gambling", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{R}"); + this.expansionSetCode = "SWS"; + + // As an additional cost to cast Irresponsible Gambling, discard a card at random. + this.getSpellAbility().addCost(new DiscardCardCost(true)); + + // Draw two cards. + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2)); + } + + public IrresponsibleGambling(final IrresponsibleGambling card) { + super(card); + } + + @Override + public IrresponsibleGambling copy() { + return new IrresponsibleGambling(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/Island1.java b/Mage.Sets/src/mage/sets/starwars/Island1.java new file mode 100644 index 0000000000..bfb08a54df --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Island1.java @@ -0,0 +1,51 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; + +/** + * + * @author Styxo + */ +public class Island1 extends mage.cards.basiclands.Island { + + public Island1(UUID ownerId) { + super(ownerId, 255); + this.expansionSetCode = "SWS"; + } + + public Island1(final Island1 card) { + super(card); + } + + @Override + public Island1 copy() { + return new Island1(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/Island2.java b/Mage.Sets/src/mage/sets/starwars/Island2.java new file mode 100644 index 0000000000..1cdef0ad81 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Island2.java @@ -0,0 +1,51 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; + +/** + * + * @author Styxo + */ +public class Island2 extends mage.cards.basiclands.Island { + + public Island2(UUID ownerId) { + super(ownerId, 256); + this.expansionSetCode = "SWS"; + } + + public Island2(final Island2 card) { + super(card); + } + + @Override + public Island2 copy() { + return new Island2(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/Island3.java b/Mage.Sets/src/mage/sets/starwars/Island3.java new file mode 100644 index 0000000000..eb95578c60 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Island3.java @@ -0,0 +1,51 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; + +/** + * + * @author Styxo + */ +public class Island3 extends mage.cards.basiclands.Island { + + public Island3(UUID ownerId) { + super(ownerId, 257); + this.expansionSetCode = "SWS"; + } + + public Island3(final Island3 card) { + super(card); + } + + @Override + public Island3 copy() { + return new Island3(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/IthorianInitiate.java b/Mage.Sets/src/mage/sets/starwars/IthorianInitiate.java new file mode 100644 index 0000000000..996c8e3bc8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/IthorianInitiate.java @@ -0,0 +1,71 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.keyword.MeditateAbility; +import mage.cards.CardImpl; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterBasicLandCard; +import mage.target.common.TargetCardInLibrary; + +/** + * + * @author Styxo + */ +public class IthorianInitiate extends CardImpl { + + public IthorianInitiate(UUID ownerId) { + super(ownerId, 141, "Ithorian Initiate", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{G}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Ithorian"); + this.subtype.add("Jedi"); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // When Ithorian Initiate enters the battlefield, you may search your library for a basic land, reveal it, and put it into your hand. If you do shuffle your library. + this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(new FilterBasicLandCard()), true, true), true)); + + // Meditate {1}{G} + this.addAbility(new MeditateAbility(new ManaCostsImpl("{1}{G}"))); + } + + public IthorianInitiate(final IthorianInitiate card) { + super(card); + } + + @Override + public IthorianInitiate copy() { + return new IthorianInitiate(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/JabbaTheHutt.java b/Mage.Sets/src/mage/sets/starwars/JabbaTheHutt.java new file mode 100644 index 0000000000..cb5d0c3519 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/JabbaTheHutt.java @@ -0,0 +1,144 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.ActivateAsSorceryActivatedAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.abilities.keyword.DefenderAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.TimingRule; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.filter.common.FilterOpponentsCreaturePermanent; +import mage.filter.predicate.permanent.CounterPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.game.permanent.token.Token; +import mage.players.Player; +import mage.target.common.TargetCreaturePermanent; +import mage.target.common.TargetOpponentsCreaturePermanent; + +/** + * + * @author Styxo + */ +public class JabbaTheHutt extends CardImpl { + + private static final FilterOpponentsCreaturePermanent filter = new FilterOpponentsCreaturePermanent("creature an opponent control with a bounty counter on it"); + + static { + filter.add(new CounterPredicate(CounterType.BOUNTY)); + } + + public JabbaTheHutt(UUID ownerId) { + super(ownerId, 203, "Jabba the Hutt", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{3}{B}{R}{G}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Hutt"); + this.subtype.add("Rogue"); + this.power = new MageInt(6); + this.toughness = new MageInt(6); + + // Defender + this.addAbility(DefenderAbility.getInstance()); + + // {T}: Put a bounty counter on target creature. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.BOUNTY.createInstance()), new TapSourceCost()); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + + // {R},{T}: Create a 4/4 red Hunter creature token tapped. It fights another target creature an opponent control with a bounty counter on it. Activate this ability only any time you could cast a sorcery. + ability = new ActivateAsSorceryActivatedAbility(Zone.BATTLEFIELD, new JabbaTheHuttEffect(), new ManaCostsImpl("R")); + ability.addCost(new TapSourceCost()); + ability.addTarget(new TargetOpponentsCreaturePermanent(filter)); + this.addAbility(ability); + } + + public JabbaTheHutt(final JabbaTheHutt card) { + super(card); + } + + @Override + public JabbaTheHutt copy() { + return new JabbaTheHutt(this); + } +} + +class HunterToken extends Token { + + public HunterToken() { + super("Hunter", "4/4 red Hunter creature token", 4, 4); + this.setOriginalExpansionSetCode("SWS"); + cardType.add(CardType.CREATURE); + color.setRed(true); + subtype.add("Hunter"); + } +} + +class JabbaTheHuttEffect extends OneShotEffect { + + public JabbaTheHuttEffect() { + super(Outcome.PutCreatureInPlay); + this.staticText = "Create a 4/4 red Hunter creature token tapped. It fights another target creature an opponent control with a bounty counter on it"; + } + + public JabbaTheHuttEffect(final JabbaTheHuttEffect effect) { + super(effect); + } + + @Override + public JabbaTheHuttEffect copy() { + return new JabbaTheHuttEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + CreateTokenEffect effect = new CreateTokenEffect(new HunterToken(), 1, true, false); + effect.apply(game, source); + Permanent token = game.getPermanent(effect.getLastAddedTokenIds().get(0)); + Permanent opponentCreature = game.getPermanent(getTargetPointer().getFirst(game, source)); + if (token != null && opponentCreature != null) { + return token.fight(opponentCreature, source, game); + } + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/JangoFett.java b/Mage.Sets/src/mage/sets/starwars/JangoFett.java new file mode 100644 index 0000000000..e3155a79e9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/JangoFett.java @@ -0,0 +1,81 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.abilities.keyword.IntimidateAbility; +import mage.abilities.keyword.HasteAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.counters.CounterType; +import mage.target.common.TargetOpponentsCreaturePermanent; + +/** + * + * @author Styxo + */ +public class JangoFett extends CardImpl { + + public JangoFett(UUID ownerId) { + super(ownerId, 112, "Jango Fett", Rarity.NA/*RARE*/, new CardType[]{CardType.CREATURE}, "{2}{R}{R}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Human"); + this.subtype.add("Hunter"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Intimidate + this.addAbility(IntimidateAbility.getInstance()); + + // Haste + this.addAbility(HasteAbility.getInstance()); + + // Whenever Jango Fett attacks, put a bounty counter on target creature an opponent controls. + Ability ability = new AttacksTriggeredAbility(new AddCountersTargetEffect(CounterType.BOUNTY.createInstance()), false); + ability.addTarget(new TargetOpponentsCreaturePermanent()); + this.addAbility(ability); + + // Whenever Jango Fett attacks, it deals X damage to defending player and target creature he or she controls, where X is the number of creature defending player controls with a bounty counter on them. + //this.addAbility(new JangoFettAbility()); + } + + public JangoFett(final JangoFett card) { + super(card); + } + + @Override + public JangoFett copy() { + return new JangoFett(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/JarJarBinks.java b/Mage.Sets/src/mage/sets/starwars/JarJarBinks.java new file mode 100644 index 0000000000..7d314f8994 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/JarJarBinks.java @@ -0,0 +1,208 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfCombatTriggeredAbility; +import mage.abilities.common.CantBlockAbility; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.ContinuousEffect; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.abilities.effects.OneShotEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Layer; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.SubLayer; +import mage.constants.TargetController; +import mage.filter.Filter; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.mageobject.PowerPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.Target; +import mage.target.TargetPermanent; +import mage.target.targetpointer.FixedTarget; +import mage.util.RandomUtil; + +/** + * + * @author Styxo + */ +public class JarJarBinks extends CardImpl { + + public JarJarBinks(UUID ownerId) { + super(ownerId, 41, "Jar Jar Binks", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{2}{U}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Gungan"); + this.power = new MageInt(0); + this.toughness = new MageInt(1); + + // Jar jar Binks can't block. + this.addAbility(new CantBlockAbility()); + + // When Jar Jar Binks enter the battlefield, an opponent gains control of it. + this.addAbility(new EntersBattlefieldTriggeredAbility(new JarJarBinksEffect())); + + // At the beggining of combat on your turn, tap the creature you control with the highest power. If two or more creatures are tied for the greatest power, you choose one of them. + this.addAbility(new BeginningOfCombatTriggeredAbility(new JarJarBinksTapEffect(), TargetController.YOU, false)); + } + + public JarJarBinks(final JarJarBinks card) { + super(card); + } + + @Override + public JarJarBinks copy() { + return new JarJarBinks(this); + } +} + +class JarJarBinksEffect extends OneShotEffect { + + public JarJarBinksEffect() { + super(Outcome.GainControl); + this.staticText = "an opponent gains control of it"; + } + + public JarJarBinksEffect(final JarJarBinksEffect effect) { + super(effect); + } + + @Override + public JarJarBinksEffect copy() { + return new JarJarBinksEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent jarJar = (Permanent) source.getSourceObjectIfItStillExists(game); + List list = new ArrayList(game.getOpponents(source.getControllerId())); + UUID player = list.get(RandomUtil.nextInt(list.size())); + if (player != null && jarJar != null) { + ContinuousEffect effect = new JarJarBinksGainControlSourceEffect(); + effect.setTargetPointer(new FixedTarget(player)); + game.addEffect(effect, source); + game.informPlayers(jarJar.getName() + " is now controlled by " + game.getPlayer(player).getLogName()); + return true; + } + return false; + } +} + +class JarJarBinksGainControlSourceEffect extends ContinuousEffectImpl { + + public JarJarBinksGainControlSourceEffect() { + super(Duration.Custom, Layer.ControlChangingEffects_2, SubLayer.NA, Outcome.GainControl); + } + + public JarJarBinksGainControlSourceEffect(final JarJarBinksGainControlSourceEffect effect) { + super(effect); + } + + @Override + public JarJarBinksGainControlSourceEffect copy() { + return new JarJarBinksGainControlSourceEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + UUID targetOpponent = getTargetPointer().getFirst(game, source); + Permanent permanent = game.getPermanent(source.getSourceId()); + if (permanent != null && targetOpponent != null) { + permanent.changeControllerId(targetOpponent, game); + } else { + // no valid target exists, effect can be discarded + discard(); + } + return true; + } +} + +class JarJarBinksTapEffect extends OneShotEffect { + + public JarJarBinksTapEffect() { + super(Outcome.Tap); + this.staticText = "tap the creature you control with the highest power. If two or more creatures are tied for the greatest power, you choose one of them"; + } + + public JarJarBinksTapEffect(final JarJarBinksTapEffect effect) { + super(effect); + } + + @Override + public JarJarBinksTapEffect copy() { + return new JarJarBinksTapEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + Permanent sourcePermanent = game.getPermanentOrLKIBattlefield(source.getSourceId()); + if (controller != null && sourcePermanent != null) { + int highestPower = Integer.MIN_VALUE; + boolean multipleExist = false; + Permanent permanentToTap = null; + for (Permanent permanent : game.getBattlefield().getActivePermanents(new FilterControlledCreaturePermanent(), source.getControllerId(), game)) { + if (permanent.getPower().getValue() > highestPower) { + permanentToTap = permanent; + highestPower = permanent.getPower().getValue(); + multipleExist = false; + } else if (permanent.getPower().getValue() == highestPower) { + multipleExist = true; + } + } + if (multipleExist) { + FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("one of the creatures with the highest power"); + filter.add(new PowerPredicate(Filter.ComparisonType.Equal, highestPower)); + Target target = new TargetPermanent(filter); + target.setNotTarget(true); + if (target.canChoose(source.getSourceId(), source.getControllerId(), game)) { + if (controller.choose(outcome, target, source.getSourceId(), game)) { + permanentToTap = game.getPermanent(target.getFirstTarget()); + } + } + } + if (permanentToTap != null) { + game.informPlayers(new StringBuilder(sourcePermanent.getName()).append(" chosen creature: ").append(permanentToTap.getName()).toString()); + return permanentToTap.tap(game); + } + return true; + } + + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/JarKaiBattleStance.java b/Mage.Sets/src/mage/sets/starwars/JarKaiBattleStance.java new file mode 100644 index 0000000000..ae6b442a61 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/JarKaiBattleStance.java @@ -0,0 +1,74 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.Arrays; +import java.util.UUID; +import mage.abilities.condition.LockedInCondition; +import mage.abilities.condition.common.SourceHasSubtypeCondition; +import mage.abilities.decorator.ConditionalContinuousEffect; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.keyword.DoubleStrikeAbility; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author Styxo + */ +public class JarKaiBattleStance extends CardImpl { + + public JarKaiBattleStance(UUID ownerId) { + super(ownerId, 113, "Jar'Kai Battle Stance", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{1}{R}"); + this.expansionSetCode = "SWS"; + + // Target creature gains double strike until end of turn. + this.getSpellAbility().addEffect(new GainAbilityTargetEffect(DoubleStrikeAbility.getInstance(), Duration.EndOfTurn)); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + + // If that creature is a Jedi or Sith, it also gains trample until end of turn. + this.getSpellAbility().addEffect(new ConditionalContinuousEffect( + new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn), + new LockedInCondition(new SourceHasSubtypeCondition(Arrays.asList("Jedi", "Sith"))), + "If that creature is a Jedi or Sith, it also gains trample until end of turn")); + + } + + public JarKaiBattleStance(final JarKaiBattleStance card) { + super(card); + } + + @Override + public JarKaiBattleStance copy() { + return new JarKaiBattleStance(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/JediBattleHealer.java b/Mage.Sets/src/mage/sets/starwars/JediBattleHealer.java new file mode 100644 index 0000000000..e1c00f08f0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/JediBattleHealer.java @@ -0,0 +1,73 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.keyword.LifelinkAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.keyword.MeditateAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class JediBattleHealer extends CardImpl { + + public JediBattleHealer(UUID ownerId) { + super(ownerId, 15, "Jedi Battle Healer", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{W}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Mirialan"); + this.subtype.add("Jedi"); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // Lifelink + this.addAbility(LifelinkAbility.getInstance()); + + // When Jedi Battle Healer enters the battlefield, you gain 3 life. + this.addAbility(new EntersBattlefieldTriggeredAbility(new GainLifeEffect(3))); + + // Meditate {1}{W} + this.addAbility(new MeditateAbility(new ManaCostsImpl("{1}{W}"))); + } + + public JediBattleHealer(final JediBattleHealer card) { + super(card); + } + + @Override + public JediBattleHealer copy() { + return new JediBattleHealer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/JediBattleMage.java b/Mage.Sets/src/mage/sets/starwars/JediBattleMage.java new file mode 100644 index 0000000000..82ac57af77 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/JediBattleMage.java @@ -0,0 +1,74 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.DontUntapInControllersNextUntapStepTargetEffect; +import mage.abilities.effects.common.TapTargetEffect; +import mage.abilities.keyword.MeditateAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.common.TargetOpponentsCreaturePermanent; + +/** + * + * @author Styxo + */ +public class JediBattleMage extends CardImpl { + + public JediBattleMage(UUID ownerId) { + super(ownerId, 42, "Jedi Battle Mage", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{U}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Human"); + this.subtype.add("Jedi"); + this.power = new MageInt(2); + this.toughness = new MageInt(4); + + // When Jedi Battle Mage enters the battlefield, tap target creature an opponent controls. That creature doesn't untap during its controles's next untap step. + EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new TapTargetEffect()); + ability.addEffect(new DontUntapInControllersNextUntapStepTargetEffect("That creature")); + ability.addTarget(new TargetOpponentsCreaturePermanent()); + this.addAbility(ability); + + // Meditate {1}{U} + this.addAbility(new MeditateAbility(new ManaCostsImpl("{1}{U}"))); + } + + public JediBattleMage(final JediBattleMage card) { + super(card); + } + + @Override + public JediBattleMage copy() { + return new JediBattleMage(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/JediBattleSage.java b/Mage.Sets/src/mage/sets/starwars/JediBattleSage.java new file mode 100644 index 0000000000..2a8276d48e --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/JediBattleSage.java @@ -0,0 +1,77 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.keyword.FlashAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.abilities.keyword.MeditateAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author Styxo + */ +public class JediBattleSage extends CardImpl { + + public JediBattleSage(UUID ownerId) { + super(ownerId, 142, "Jedi Battle Sage", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{G}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Human"); + this.subtype.add("Jedi"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Flash + this.addAbility(FlashAbility.getInstance()); + + // When Jedi Battle Sage enters the battlefield, target creature gets +2/+2 until end of turn. + EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new BoostTargetEffect(2, 2, Duration.EndOfTurn)); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + + // Meditate {1}{G} + this.addAbility(new MeditateAbility(new ManaCostsImpl("{1}{G}"))); + } + + public JediBattleSage(final JediBattleSage card) { + super(card); + } + + @Override + public JediBattleSage copy() { + return new JediBattleSage(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/JediEnclave.java b/Mage.Sets/src/mage/sets/starwars/JediEnclave.java new file mode 100644 index 0000000000..703e7b6f90 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/JediEnclave.java @@ -0,0 +1,105 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.ArrayList; +import java.util.UUID; +import mage.MageObject; +import mage.abilities.ActivatedAbilityImpl; +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect; +import mage.abilities.mana.ColorlessManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.filter.predicate.Predicate; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.filter.predicate.mageobject.SupertypePredicate; +import mage.target.common.TargetCardInLibrary; + +/** + * + * @author Styxo + */ +public class JediEnclave extends CardImpl { + + public JediEnclave(UUID ownerId) { + super(ownerId, 243, "Jedi Enclave", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "SWS"; + + // Add {C} to your manapool. + this.addAbility(new ColorlessManaAbility()); + + // {T}, Sacrifice Jedi Enclave: Search your library for a basic Forest, Plains or Island card and put it onto the battlefield tapped. Then shuffle your library. + this.addAbility(new JediEnclaveAbility()); + + } + + public JediEnclave(final JediEnclave card) { + super(card); + } + + @Override + public JediEnclave copy() { + return new JediEnclave(this); + } + + public class JediEnclaveAbility extends ActivatedAbilityImpl { + + public JediEnclaveAbility(JediEnclaveAbility ability) { + super(ability); + } + + public JediEnclaveAbility() { + super(Zone.BATTLEFIELD, null); + addCost(new TapSourceCost()); + addCost(new SacrificeSourceCost()); + FilterCard filter = new FilterCard("basic Forest, Plains or Island"); + filter.add(new CardTypePredicate(CardType.LAND)); + ArrayList> subtypePredicates = new ArrayList<>(); + subtypePredicates.add(new SubtypePredicate("Forest")); + subtypePredicates.add(new SubtypePredicate("Plains")); + subtypePredicates.add(new SubtypePredicate("Island")); + filter.add(Predicates.or(subtypePredicates)); + filter.add(new SupertypePredicate("Basic")); + TargetCardInLibrary target = new TargetCardInLibrary(filter); + addEffect(new SearchLibraryPutInPlayEffect(target, true, true, Outcome.PutLandInPlay)); + } + + @Override + public JediEnclaveAbility copy() { + return new JediEnclaveAbility(this); + } + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/JediHolocron.java b/Mage.Sets/src/mage/sets/starwars/JediHolocron.java new file mode 100644 index 0000000000..03b89c260c --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/JediHolocron.java @@ -0,0 +1,95 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.Cost; +import mage.abilities.costs.common.RemoveCountersSourceCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.mana.BlueManaAbility; +import mage.abilities.mana.GreenManaAbility; +import mage.abilities.mana.SimpleManaAbility; +import mage.abilities.mana.WhiteManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; + +/** + * + * @author Styxo + */ +public class JediHolocron extends CardImpl { + + public JediHolocron(UUID ownerId) { + super(ownerId, 233, "Jedi Holocron", Rarity.COMMON, new CardType[]{CardType.ARTIFACT}, "{2}"); + this.expansionSetCode = "SWS"; + + // {T}: Put a charge counter on Wild Holocron. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.CHARGE.createInstance(1)), new TapSourceCost())); + + // {T}, Remove a charge counter from Wild Holocron: Add {G}, {W} or {U} to your mana pool. + Cost cost = new RemoveCountersSourceCost(CounterType.CHARGE.createInstance(1)); + Ability ability = new GreenManaAbility(); + ability.addCost(cost); + this.addAbility(ability); + + ability = new WhiteManaAbility(); + ability.addCost(cost); + this.addAbility(ability); + + ability = new BlueManaAbility(); + ability.addCost(cost); + this.addAbility(ability); + + // {T}, Remove two charge counters from Sith Holocron: Add GW or WU to your mana pool. + cost = new RemoveCountersSourceCost(CounterType.CHARGE.createInstance(2)); + + ability = new SimpleManaAbility(Zone.BATTLEFIELD, new Mana(0, 1, 0, 1, 0, 0, 0, 0), new TapSourceCost()); + ability.addCost(cost); + this.addAbility(ability); + + ability = new SimpleManaAbility(Zone.BATTLEFIELD, new Mana(0, 0, 1, 1, 0, 0, 0, 0), new TapSourceCost()); + ability.addCost(cost); + this.addAbility(ability); + } + + public JediHolocron(final JediHolocron card) { + super(card); + } + + @Override + public JediHolocron copy() { + return new JediHolocron(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/JediInquirer.java b/Mage.Sets/src/mage/sets/starwars/JediInquirer.java new file mode 100644 index 0000000000..0dff5a7814 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/JediInquirer.java @@ -0,0 +1,72 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.LeavesBattlefieldTriggeredAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.keyword.MeditateAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.common.TargetEnchantmentPermanent; + +/** + * + * @author Styxo + */ +public class JediInquirer extends CardImpl { + + public JediInquirer(UUID ownerId) { + super(ownerId, 16, "Jedi Inquirer", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{W}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Human"); + this.subtype.add("Jedi"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // When Jedi Inquirer enters the battlefield, you may destroy target enchantment. + LeavesBattlefieldTriggeredAbility ability = new LeavesBattlefieldTriggeredAbility(new DestroyTargetEffect(), true); + ability.addTarget(new TargetEnchantmentPermanent()); + this.addAbility(ability); + + // Meditate {1}{W} + this.addAbility(new MeditateAbility(new ManaCostsImpl("{1}{W}"))); + } + + public JediInquirer(final JediInquirer card) { + super(card); + } + + @Override + public JediInquirer copy() { + return new JediInquirer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/JediInstructor.java b/Mage.Sets/src/mage/sets/starwars/JediInstructor.java new file mode 100644 index 0000000000..642917d34d --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/JediInstructor.java @@ -0,0 +1,81 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.abilities.keyword.MeditateAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.counters.CounterType; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.AnotherPredicate; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author Styxo + */ +public class JediInstructor extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("another target creature"); + + static { + filter.add(new AnotherPredicate()); + } + + public JediInstructor(UUID ownerId) { + super(ownerId, 17, "Jedi Instructor", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{4}{W}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Twi'lek"); + this.subtype.add("Jedi"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // When Jedi Instructor enters the battlefield, you may put a +1/+1 counter on another target creature. + EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance()), true); + ability.addTarget(new TargetCreaturePermanent(filter)); + this.addAbility(ability); + + // Meditate {1}{W} + this.addAbility(new MeditateAbility(new ManaCostsImpl("{1}{W}"))); + } + + public JediInstructor(final JediInstructor card) { + super(card); + } + + @Override + public JediInstructor copy() { + return new JediInstructor(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/JediKnight.java b/Mage.Sets/src/mage/sets/starwars/JediKnight.java new file mode 100644 index 0000000000..c2b879e39b --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/JediKnight.java @@ -0,0 +1,82 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.keyword.MeditateAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.filter.common.FilterNonlandPermanent; +import mage.filter.predicate.permanent.ControllerPredicate; +import mage.target.common.TargetNonlandPermanent; + +/** + * + * @author Styxo + */ +public class JediKnight extends CardImpl { + + private static final FilterNonlandPermanent filter = new FilterNonlandPermanent("nonland permanent you don't contro"); + + static { + filter.add(new ControllerPredicate(TargetController.NOT_YOU)); + } + + public JediKnight(UUID ownerId) { + super(ownerId, 204, "Jedi Knight", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{G}{U}{W}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Human"); + this.subtype.add("Jedi"); + this.subtype.add("Knight"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // When Jedi Knight enters the battlefield, return another target nonland permanent you don't control to its owner's hands. + EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect()); + ability.addTarget(new TargetNonlandPermanent(filter)); + this.addAbility(ability); + + // Meditate {1}{U} + this.addAbility(new MeditateAbility(new ManaCostsImpl("{1}{U}"))); + } + + public JediKnight(final JediKnight card) { + super(card); + } + + @Override + public JediKnight copy() { + return new JediKnight(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/JediMindTrick.java b/Mage.Sets/src/mage/sets/starwars/JediMindTrick.java new file mode 100644 index 0000000000..b7f65b1200 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/JediMindTrick.java @@ -0,0 +1,61 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.effects.common.turn.ControlTargetPlayerNextTurnEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.TargetPlayer; + +/** + * + * @author Styxo + */ +public class JediMindTrick extends CardImpl { + + public JediMindTrick(UUID ownerId) { + super(ownerId, 43, "Jedi Mind Trick", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{7}{U}"); + this.expansionSetCode = "SWS"; + + // You control target player during that player's next turn. + this.getSpellAbility().addEffect(new ControlTargetPlayerNextTurnEffect()); + this.getSpellAbility().addTarget(new TargetPlayer()); + + } + + public JediMindTrick(final JediMindTrick card) { + super(card); + } + + @Override + public JediMindTrick copy() { + return new JediMindTrick(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/JediReflex.java b/Mage.Sets/src/mage/sets/starwars/JediReflex.java new file mode 100644 index 0000000000..9885c9e2d8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/JediReflex.java @@ -0,0 +1,78 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.UntapTargetEffect; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.effects.keyword.ScryEffect; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author Styxo + */ +public class JediReflex extends CardImpl { + + public JediReflex(UUID ownerId) { + super(ownerId, 18, "Jedi Reflex", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{1}{W}"); + this.expansionSetCode = "SWS"; + + // Untap target creature. It gets +1/+0 and gains first strike until end of turn. + this.getSpellAbility().addEffect(new UntapTargetEffect()); + + Effect effect = new BoostTargetEffect(1, 0, Duration.EndOfTurn); + effect.setText("It gets +1/+0"); + this.getSpellAbility().addEffect(effect); + + effect = new GainAbilityTargetEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn); + effect.setText("and gains first strike until end of turn"); + this.getSpellAbility().addEffect(effect); + + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + + // Scry 1 + this.getSpellAbility().addEffect(new ScryEffect(1)); + } + + public JediReflex(final JediReflex card) { + super(card); + } + + @Override + public JediReflex copy() { + return new JediReflex(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/JediStarfighter.java b/Mage.Sets/src/mage/sets/starwars/JediStarfighter.java new file mode 100644 index 0000000000..693001821b --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/JediStarfighter.java @@ -0,0 +1,88 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.keyword.SpaceflightAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.keyword.MeditateAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.filter.predicate.permanent.ControllerPredicate; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author Styxo + */ +public class JediStarfighter extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Jedi creatures you control"); + + static { + filter.add(new SubtypePredicate("Jedi")); + filter.add(new ControllerPredicate(TargetController.YOU)); + } + + public JediStarfighter(UUID ownerId) { + super(ownerId, 19, "Jedi Starfighter", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{2}{W}{W}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Jedi"); + this.subtype.add("Starship"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Spaceflight + this.addAbility(SpaceflightAbility.getInstance()); + + // When Jedi Starfighter enters the battlefield, up to two Jedi creatures you control gain spaceflight until end of turn. + EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new GainAbilityTargetEffect(SpaceflightAbility.getInstance(), Duration.EndOfTurn)); + ability.addTarget(new TargetCreaturePermanent(0, 2, filter, true)); + this.addAbility(ability); + + // Meditate {1}{W} + this.addAbility(new MeditateAbility(new ManaCostsImpl("{1}{W}"))); + } + + public JediStarfighter(final JediStarfighter card) { + super(card); + } + + @Override + public JediStarfighter copy() { + return new JediStarfighter(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/JediTemple.java b/Mage.Sets/src/mage/sets/starwars/JediTemple.java new file mode 100644 index 0000000000..a674004c1d --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/JediTemple.java @@ -0,0 +1,71 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.Mana; +import mage.abilities.common.EntersBattlefieldTappedAbility; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.AddManaToManaPoolSourceControllerEffect; +import mage.abilities.mana.BlueManaAbility; +import mage.abilities.mana.GreenManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class JediTemple extends CardImpl { + + public JediTemple(UUID ownerId) { + super(ownerId, 244, "Jedi Temple", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "SWS"; + + // Jedi Temple enters the battlefield tapped. + this.addAbility(new EntersBattlefieldTappedAbility()); + + // When Jedi Temple enters the battlefield , add {W} to your mana pool. + this.addAbility(new EntersBattlefieldTriggeredAbility(new AddManaToManaPoolSourceControllerEffect(new Mana(0, 0, 0, 1, 0, 0, 0, 0)))); + + // {T}: Add {G} or {U} to you mana pool. + this.addAbility(new GreenManaAbility()); + this.addAbility(new BlueManaAbility()); + + } + + public JediTemple(final JediTemple card) { + super(card); + } + + @Override + public JediTemple copy() { + return new JediTemple(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/JediTraining.java b/Mage.Sets/src/mage/sets/starwars/JediTraining.java new file mode 100644 index 0000000000..0e0f3718e8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/JediTraining.java @@ -0,0 +1,117 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.cost.AbilitiesCostReductionControllerEffect; +import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect; +import mage.abilities.effects.keyword.ScryEffect; +import mage.abilities.keyword.MeditateAbility; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; + +/** + * + * @author Styxo + */ +public class JediTraining extends CardImpl { + + protected static final FilterCard filter = new FilterCard("Jedi spells"); + + static { + filter.add(new SubtypePredicate("Jedi")); + } + + public JediTraining(UUID ownerId) { + super(ownerId, 44, "Jedi Training", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT}, "{2}{U}"); + this.expansionSetCode = "SWS"; + + // Jedi spells you cast cost {1} less to cast. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1))); + + // Meditate costs you pay cost {1} less. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new AbilitiesCostReductionControllerEffect(MeditateAbility.class, "Meditate"))); + + // Whenever a Jedi creature you control meditates, scry 1. + this.addAbility(new JediTrainingTriggeredAbility()); + } + + public JediTraining(final JediTraining card) { + super(card); + } + + @Override + public JediTraining copy() { + return new JediTraining(this); + } +} + +class JediTrainingTriggeredAbility extends TriggeredAbilityImpl { + + public JediTrainingTriggeredAbility() { + super(Zone.BATTLEFIELD, new ScryEffect(1)); + } + + public JediTrainingTriggeredAbility(final JediTrainingTriggeredAbility ability) { + super(ability); + } + + @Override + public JediTrainingTriggeredAbility copy() { + return new JediTrainingTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == EventType.MEDITATED; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + Card source = game.getPermanentOrLKIBattlefield(event.getSourceId()); + game.informPlayers("3 " + source.getLogName()); + if (event.getPlayerId().equals(getControllerId()) && source != null && JediTraining.filter.match(source, game)) { + return true; + } + return false; + } + + public String getRule() { + return "Whenever a Jedi creature you control meditates, scry 1"; + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/JumpTrooper.java b/Mage.Sets/src/mage/sets/starwars/JumpTrooper.java new file mode 100644 index 0000000000..dc3907368d --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/JumpTrooper.java @@ -0,0 +1,128 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.CounterUnlessPaysEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterCreatureCard; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import mage.target.TargetStackObject; + +/** + * + * @author Styxo + */ +public class JumpTrooper extends CardImpl { + + private static final FilterCreatureCard filter = new FilterCreatureCard("Trooper creatures"); + + static { + filter.add(new SubtypePredicate("Trooper")); + } + + public JumpTrooper(UUID ownerId) { + super(ownerId, 45, "Jump Trooper", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{U}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Human"); + this.subtype.add("Trooper"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Whenever a Trooper creature you control becomes the target of a spell or ability an opponent controls, counter that spell or abitlity unless its controller pays {2}. + this.addAbility(new JumpTrooperTriggeredAbility(new CounterUnlessPaysEffect(new GenericManaCost(2)))); + + } + + public JumpTrooper(final JumpTrooper card) { + super(card); + } + + @Override + public JumpTrooper copy() { + return new JumpTrooper(this); + } +} + +class JumpTrooperTriggeredAbility extends TriggeredAbilityImpl { + + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Trooper creature you control"); + + static { + filter.add(new SubtypePredicate("Trooper")); + } + + public JumpTrooperTriggeredAbility(Effect effect) { + super(Zone.BATTLEFIELD, effect); + } + + public JumpTrooperTriggeredAbility(final JumpTrooperTriggeredAbility ability) { + super(ability); + } + + @Override + public JumpTrooperTriggeredAbility copy() { + return new JumpTrooperTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.TARGETED; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (game.getOpponents(this.controllerId).contains(event.getPlayerId())) { + Permanent creature = game.getPermanent(event.getTargetId()); + if (creature != null && filter.match(creature, getSourceId(), getControllerId(), game)) { + this.getTargets().clear(); + TargetStackObject target = new TargetStackObject(); + target.add(event.getSourceId(), game); + this.addTarget(target); + return true; + } + } + return false; + } + + @Override + public String getRule() { + return "Whenever a Trooper creature you control becomes the target of a spell or ability an opponent controls, counter that spell or ability unless its controller pays {2}."; + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/JungleVillage.java b/Mage.Sets/src/mage/sets/starwars/JungleVillage.java new file mode 100644 index 0000000000..aab8add127 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/JungleVillage.java @@ -0,0 +1,105 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.ArrayList; +import java.util.UUID; +import mage.MageObject; +import mage.abilities.ActivatedAbilityImpl; +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect; +import mage.abilities.mana.ColorlessManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.filter.predicate.Predicate; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.filter.predicate.mageobject.SupertypePredicate; +import mage.target.common.TargetCardInLibrary; + +/** + * + * @author Styxo + */ +public class JungleVillage extends CardImpl { + + public JungleVillage(UUID ownerId) { + super(ownerId, 245, "Jungle Village", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "SWS"; + + // Add {C} to your manapool. + this.addAbility(new ColorlessManaAbility()); + + // {T}, Sacrifice Jungle Village: Search your library for a basic Mountain, Forest or Plains card and put it onto the battlefield tapped. Then shuffle your library. + this.addAbility(new JungleVillageAbility()); + + } + + public JungleVillage(final JungleVillage card) { + super(card); + } + + @Override + public JungleVillage copy() { + return new JungleVillage(this); + } + + public class JungleVillageAbility extends ActivatedAbilityImpl { + + public JungleVillageAbility(JungleVillageAbility ability) { + super(ability); + } + + public JungleVillageAbility() { + super(Zone.BATTLEFIELD, null); + addCost(new TapSourceCost()); + addCost(new SacrificeSourceCost()); + FilterCard filter = new FilterCard("basic Mountain, Forest or Plains"); + filter.add(new CardTypePredicate(CardType.LAND)); + ArrayList> subtypePredicates = new ArrayList<>(); + subtypePredicates.add(new SubtypePredicate("Plains")); + subtypePredicates.add(new SubtypePredicate("Mountain")); + subtypePredicates.add(new SubtypePredicate("Forest")); + filter.add(Predicates.or(subtypePredicates)); + filter.add(new SupertypePredicate("Basic")); + TargetCardInLibrary target = new TargetCardInLibrary(filter); + addEffect(new SearchLibraryPutInPlayEffect(target, true, true, Outcome.PutLandInPlay)); + } + + @Override + public JungleVillageAbility copy() { + return new JungleVillageAbility(this); + } + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/KaminoCloningFacility.java b/Mage.Sets/src/mage/sets/starwars/KaminoCloningFacility.java new file mode 100644 index 0000000000..04ccdf1c7f --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/KaminoCloningFacility.java @@ -0,0 +1,83 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.mana.ColorlessManaAbility; +import mage.abilities.mana.ConditionalAnyColorManaAbility; +import mage.abilities.mana.conditional.ConditionalSpellManaBuilder; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.FilterSpell; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.game.permanent.token.TrooperToken; + +/** + * + * @author Styxo + */ +public class KaminoCloningFacility extends CardImpl { + + private static final FilterSpell FILTER = new FilterSpell("a Trooper spell"); + + static { + FILTER.add(new SubtypePredicate("Trooper")); + } + + public KaminoCloningFacility(UUID ownerId) { + super(ownerId, 246, "Kamino Cloning Facility", Rarity.RARE, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "SWS"; + + // {T}: Add {C} to your mana pool. + this.addAbility(new ColorlessManaAbility()); + + // {T} Add one mana of any color to your mana pool. Spend this mana only to cast a Trooper spell. + this.addAbility(new ConditionalAnyColorManaAbility(new TapSourceCost(), 1, new ConditionalSpellManaBuilder(FILTER), true)); + + // {5}, {T}: Put a 1/1 white Trooper creature tokens onto the battlefield. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new TrooperToken(), 1), new ManaCostsImpl("{5}")); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + } + + public KaminoCloningFacility(final KaminoCloningFacility card) { + super(card); + } + + @Override + public KaminoCloningFacility copy() { + return new KaminoCloningFacility(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/KiAdiMundi.java b/Mage.Sets/src/mage/sets/starwars/KiAdiMundi.java new file mode 100644 index 0000000000..8857af530f --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/KiAdiMundi.java @@ -0,0 +1,82 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.counter.AddCountersAllEffect; +import mage.abilities.keyword.MeditateAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.counters.CounterType; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.AnotherPredicate; +import mage.filter.predicate.permanent.ControllerPredicate; + +/** + * + * @author Styxo + */ +public class KiAdiMundi extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("other creature you control"); + + static { + filter.add(new AnotherPredicate()); + filter.add(new ControllerPredicate(TargetController.YOU)); + } + + public KiAdiMundi(UUID ownerId) { + super(ownerId, 143, "Ki-Adi-Mundi", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{3}{G}{G}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Cerean"); + this.subtype.add("Jedi"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // When Ki-Adi-Mundi enters the battlefield, put a +1/+1 counter on each other creatures you control. + this.addAbility(new EntersBattlefieldTriggeredAbility(new AddCountersAllEffect(CounterType.P1P1.createInstance(), filter))); + + // Meditate {1}{G} + this.addAbility(new MeditateAbility(new ManaCostsImpl("{1}{G}"))); + } + + public KiAdiMundi(final KiAdiMundi card) { + super(card); + } + + @Override + public KiAdiMundi copy() { + return new KiAdiMundi(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/LAATGunship.java b/Mage.Sets/src/mage/sets/starwars/LAATGunship.java new file mode 100644 index 0000000000..be1cd48efa --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/LAATGunship.java @@ -0,0 +1,74 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.keyword.SpaceflightAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.game.permanent.token.TrooperToken; + +/** + * + * @author Styxo + */ +public class LAATGunship extends CardImpl { + + public LAATGunship(UUID ownerId) { + super(ownerId, 20, "LAAT Gunship", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{3}{W}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Starship"); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + // When LAAT Gunship attacks, put a 1/1 white Trooper creature token on to battlefield tapped and attacking. + this.addAbility(new AttacksTriggeredAbility(new CreateTokenEffect(new TrooperToken(), 1, true, true), false)); + + // {W}: LAAT Gunship attacks gains spaceflight until the end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilitySourceEffect(SpaceflightAbility.getInstance(), Duration.EndOfTurn), new ManaCostsImpl("{W}"))); + + } + + public LAATGunship(final LAATGunship card) { + super(card); + } + + @Override + public LAATGunship copy() { + return new LAATGunship(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/LandoCalrissian.java b/Mage.Sets/src/mage/sets/starwars/LandoCalrissian.java new file mode 100644 index 0000000000..11b86e5d98 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/LandoCalrissian.java @@ -0,0 +1,92 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.BeginningOfCombatTriggeredAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.abilities.keyword.VigilanceAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.filter.predicate.permanent.ControllerPredicate; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author Styxo + */ +public class LandoCalrissian extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Starship you control"); + + static { + filter.add(new SubtypePredicate("Starship")); + filter.add(new ControllerPredicate(TargetController.YOU)); + } + + public LandoCalrissian(UUID ownerId) { + super(ownerId, 21, "Lando Calrissian", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{3}{W}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Human"); + this.subtype.add("Rogue"); + this.power = new MageInt(4); + this.toughness = new MageInt(3); + + // First Strike + this.addAbility(FirstStrikeAbility.getInstance()); + + // At the beggining of each combat, target Starship you control gets +2/+2 and gains vigilance until end of turn. + Effect effect = new BoostTargetEffect(2, 2, Duration.EndOfTurn); + effect.setText("target Starship you control gets +2/+2"); + BeginningOfCombatTriggeredAbility ability = new BeginningOfCombatTriggeredAbility(effect, TargetController.ANY, false); + effect = new GainAbilityTargetEffect(VigilanceAbility.getInstance(), Duration.EndOfTurn); + effect.setText("and gains vigilance until end of turn"); + ability.addEffect(effect); + ability.addTarget(new TargetCreaturePermanent(filter)); + this.addAbility(ability); + } + + public LandoCalrissian(final LandoCalrissian card) { + super(card); + } + + @Override + public LandoCalrissian copy() { + return new LandoCalrissian(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/LegacyOfTheBeloved.java b/Mage.Sets/src/mage/sets/starwars/LegacyOfTheBeloved.java new file mode 100644 index 0000000000..26e9a23eb5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/LegacyOfTheBeloved.java @@ -0,0 +1,118 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.cards.CardsImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.Filter; +import mage.filter.common.FilterCreatureCard; +import mage.filter.predicate.mageobject.ConvertedManaCostPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.common.TargetCardInLibrary; +import mage.target.common.TargetControlledCreaturePermanent; + +/** + * + * @author Styxo + */ +public class LegacyOfTheBeloved extends CardImpl { + + public LegacyOfTheBeloved(UUID ownerId) { + super(ownerId, 144, "Legacy of the Beloved", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{3}{G}{G}"); + this.expansionSetCode = "SWS"; + + // As an additional cost to cast Legacy of the Beloved, sacrifice a creature. + this.getSpellAbility().addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent())); + + // Search you library for up to two creatures cards that each have a lower converted mana cost that sacrificied creature's converted mana cost, reveal them and put them onto the battlefield, then shuffle you library. + this.getSpellAbility().addEffect(new LegacyOfTheBelovedEffect()); + } + + public LegacyOfTheBeloved(final LegacyOfTheBeloved card) { + super(card); + } + + @Override + public LegacyOfTheBeloved copy() { + return new LegacyOfTheBeloved(this); + } +} + +class LegacyOfTheBelovedEffect extends OneShotEffect { + + private static final FilterCreatureCard filter = new FilterCreatureCard("up to two creatures cards that each have a lower converted mana cost that sacrificied creature's converted mana cost"); + + public LegacyOfTheBelovedEffect() { + super(Outcome.DrawCard); + this.staticText = "Search you library for up to two creatures cards that each have a lower converted mana cost that sacrificied creature's converted mana cost, reveal them and put them onto the battlefield, then shuffle you library"; + } + + public LegacyOfTheBelovedEffect(final LegacyOfTheBelovedEffect effect) { + super(effect); + } + + @Override + public LegacyOfTheBelovedEffect copy() { + return new LegacyOfTheBelovedEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Card sourceCard = game.getCard(source.getSourceId()); + if (sourceCard != null) { + for (Object cost : source.getCosts()) { + if (cost instanceof SacrificeTargetCost) { + Permanent p = (Permanent) game.getLastKnownInformation(((SacrificeTargetCost) cost).getPermanents().get(0).getId(), Zone.BATTLEFIELD); + if (p != null) { + filter.add(new ConvertedManaCostPredicate(Filter.ComparisonType.LessThan, p.getConvertedManaCost())); + TargetCardInLibrary target = new TargetCardInLibrary(0, 2, filter); + Player player = game.getPlayer(source.getControllerId()); + if (player != null && player.searchLibrary(target, game)) { + player.moveCards(new CardsImpl(target.getTargets()).getCards(game), Zone.BATTLEFIELD, source, game, false, false, false, null); + player.shuffleLibrary(source, game); + return true; + } + } + } + } + } + return false; + } + +} diff --git a/Mage.Sets/src/mage/sets/starwars/LightningBolt.java b/Mage.Sets/src/mage/sets/starwars/LightningBolt.java new file mode 100644 index 0000000000..d3b89801b5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/LightningBolt.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; + +/** + * + * @author Styxo + */ +public class LightningBolt extends mage.sets.magic2010.LightningBolt { + + public LightningBolt(UUID ownerId) { + super(ownerId); + this.cardNumber = "114"; + this.expansionSetCode = "SWS"; + } + + public LightningBolt(final LightningBolt card) { + super(card); + } + + @Override + public LightningBolt copy() { + return new LightningBolt(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/Lightsaber.java b/Mage.Sets/src/mage/sets/starwars/Lightsaber.java new file mode 100644 index 0000000000..a4b5ff38ba --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Lightsaber.java @@ -0,0 +1,89 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.InfoEffect; +import mage.abilities.effects.common.continuous.BoostEquippedEffect; +import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; +import mage.abilities.keyword.EquipAbility; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.cards.CardImpl; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.util.CardUtil; + +/** + * + * @author Styxo + */ +public class Lightsaber extends CardImpl { + + public Lightsaber(UUID ownerId) { + super(ownerId, 234, "Lightsaber", Rarity.COMMON, new CardType[]{CardType.ARTIFACT}, "{1}"); + this.expansionSetCode = "SWS"; + + // Equip 3 + this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(3))); + + // Equiped creature gets +1/+0 and has firsttrike + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(1, 0))); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(FirstStrikeAbility.getInstance(), AttachmentType.EQUIPMENT))); + + // Lightsaber's equip ability costs {1} if it targets a Jedi or Sith. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new InfoEffect("{this}'s equip ability costs {1} if it targets a Jedi or Sith"))); + + } + + @Override + public void adjustCosts(Ability ability, Game game) { + if (ability instanceof EquipAbility) { + Permanent targetCreature = game.getPermanent(ability.getTargets().getFirstTarget()); + if (targetCreature != null && (targetCreature.getSubtype(game).contains("Sith") || targetCreature.getSubtype(game).contains("Jedi"))) { + CardUtil.increaseCost(ability, 1 - ability.getManaCostsToPay().convertedManaCost()); + } + } + } + + public Lightsaber(final Lightsaber card) { + super(card); + } + + @Override + public Lightsaber copy() { + return new Lightsaber(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/LoyalTauntaun.java b/Mage.Sets/src/mage/sets/starwars/LoyalTauntaun.java new file mode 100644 index 0000000000..79c00029f9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/LoyalTauntaun.java @@ -0,0 +1,80 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.RegenerateTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author Styxo + */ +public class LoyalTauntaun extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("nonartifact creature"); + + static { + filter.add(Predicates.not(new CardTypePredicate(CardType.ARTIFACT))); + } + + public LoyalTauntaun(UUID ownerId) { + super(ownerId, 22, "Loyal Tauntaun", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{W}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Beast"); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // {1}{G}, sacrifice Loyal Tauntaun: Regenerate target nonartifact creature. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new RegenerateTargetEffect(), new ManaCostsImpl("{1}{G}")); + ability.addCost(new SacrificeSourceCost()); + ability.addTarget(new TargetCreaturePermanent(filter)); + this.addAbility(ability); + } + + public LoyalTauntaun(final LoyalTauntaun card) { + super(card); + } + + @Override + public LoyalTauntaun copy() { + return new LoyalTauntaun(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/LukeSkywalker.java b/Mage.Sets/src/mage/sets/starwars/LukeSkywalker.java new file mode 100644 index 0000000000..2d2fb38e92 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/LukeSkywalker.java @@ -0,0 +1,134 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.Cost; +import mage.abilities.costs.CostImpl; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.keyword.HexproofAbility; +import mage.abilities.keyword.LifelinkAbility; +import mage.abilities.keyword.VigilanceAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.permanent.AnotherPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; + +/** + * + * @author Styxo + */ +public class LukeSkywalker extends CardImpl { + + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another creature"); + + static { + filter.add(new AnotherPredicate()); + } + + public LukeSkywalker(UUID ownerId) { + super(ownerId, 205, "Luke Skywalker", Rarity.MYTHIC, new CardType[]{CardType.CREATURE}, "{G}{W}{U}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Human"); + this.subtype.add("Jedi"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Lifelink + this.addAbility(LifelinkAbility.getInstance()); + + // Vigilance + this.addAbility(VigilanceAbility.getInstance()); + + // Whenever another creature enters the battlefield under your conrol, put a +1/+1 counter on Luke Skywalker. + this.addAbility(new EntersBattlefieldAllTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), new FilterControlledCreaturePermanent(filter))); + + // Remove all +1/+1 counters from Luke Skywalker: Luke gains hexproof until end of turn. Activate this ability only if at least one +1/+1 counter is removed this way. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilitySourceEffect(HexproofAbility.getInstance(), Duration.EndOfTurn), new LukeSkywalkerCost())); + } + + public LukeSkywalker(final LukeSkywalker card) { + super(card); + } + + @Override + public LukeSkywalker copy() { + return new LukeSkywalker(this); + } +} + +class LukeSkywalkerCost extends CostImpl { + + public LukeSkywalkerCost() { + super(); + this.text = "Remove all +1/+1 counters from {this}"; + } + + public LukeSkywalkerCost(LukeSkywalkerCost cost) { + super(cost); + } + + @Override + public boolean canPay(Ability ability, UUID sourceId, UUID controllerId, Game game) { + Permanent permanent = game.getPermanent(ability.getSourceId()); + if (permanent != null) { + return (permanent.getCounters(game).getCount(CounterType.P1P1)) > 0; + } + return false; + } + + @Override + public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) { + Permanent permanent = game.getPermanent(ability.getSourceId()); + if (permanent != null) { + int countersCount = permanent.getCounters(game).getCount(CounterType.P1P1); + permanent.removeCounters(CounterType.P1P1.createInstance(countersCount), game); + this.paid = true; + return true; + } + return false; + } + + @Override + public LukeSkywalkerCost copy() { + return new LukeSkywalkerCost(this); + } + +} diff --git a/Mage.Sets/src/mage/sets/starwars/MaceWindu.java b/Mage.Sets/src/mage/sets/starwars/MaceWindu.java new file mode 100644 index 0000000000..1dc6618170 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/MaceWindu.java @@ -0,0 +1,86 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.keyword.FlashAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.keyword.MeditateAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.filter.common.FilterSpellOrPermanent; +import mage.filter.predicate.permanent.ControllerPredicate; +import mage.target.common.TargetSpellOrPermanent; + +/** + * + * @author Styxo + */ +public class MaceWindu extends CardImpl { + + private static final FilterSpellOrPermanent filter = new FilterSpellOrPermanent("spell or creature you don't control"); + + static { + filter.add(new ControllerPredicate(TargetController.NOT_YOU)); + } + + public MaceWindu(UUID ownerId) { + super(ownerId, 46, "Mace Windu", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{3}{U}{U}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Human"); + this.subtype.add("Jedi"); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // Flash + this.addAbility(FlashAbility.getInstance()); + + // When Mace Windu enters the battlefield, return target spell or creature you don't control to its owner's hand. + EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect()); + ability.addTarget(new TargetSpellOrPermanent(1, 1, filter, false)); + this.addAbility(ability); + + // Meditate {1}{U} + this.addAbility(new MeditateAbility(new ManaCostsImpl("{1}{U}"))); + } + + public MaceWindu(final MaceWindu card) { + super(card); + } + + @Override + public MaceWindu copy() { + return new MaceWindu(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/MaintenanceDroid.java b/Mage.Sets/src/mage/sets/starwars/MaintenanceDroid.java new file mode 100644 index 0000000000..56e2babc88 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/MaintenanceDroid.java @@ -0,0 +1,164 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.HashSet; +import java.util.UUID; +import mage.MageInt; +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.abilities.effects.common.counter.RemoveCounterTargetEffect; +import mage.abilities.keyword.RepairAbility; +import mage.cards.CardImpl; +import mage.choices.Choice; +import mage.choices.ChoiceImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.filter.FilterCard; +import mage.filter.predicate.Predicate; +import mage.game.Game; +import mage.players.Player; +import mage.target.common.TargetCardInYourGraveyard; + +/** + * + * @author Styxo + */ +public class MaintenanceDroid extends CardImpl { + + private static final FilterCard filter = new FilterCard("target card you own with a repair counter on it"); + + static { + filter.add(new CounterPredicate(CounterType.REPAIR)); + } + + public MaintenanceDroid(UUID ownerId) { + super(ownerId, 162, "Maintenance Droid", Rarity.COMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{W}{U}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Droid"); + this.power = new MageInt(1); + this.toughness = new MageInt(2); + + // {T}: Choose target card you own with a repair counter on it. You may remove a repair counter from it or put another repair counter on it. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MaintenanceDroidEffect(), new TapSourceCost()); + ability.addTarget(new TargetCardInYourGraveyard(filter)); + this.addAbility(ability); + + // Repair 4 + this.addAbility(new RepairAbility(4)); + } + + public MaintenanceDroid(final MaintenanceDroid card) { + super(card); + } + + @Override + public MaintenanceDroid copy() { + return new MaintenanceDroid(this); + } +} + +class MaintenanceDroidEffect extends OneShotEffect { + + private static final HashSet choices = new HashSet<>(); + + static { + choices.add("Remove a repair counter"); + choices.add("Add another repair counter"); + } + + public MaintenanceDroidEffect() { + super(Outcome.BoostCreature); + staticText = "Choose target card you own with a repair counter on it. You may remove a repair counter from it or put another repair counter on it"; + } + + public MaintenanceDroidEffect(final MaintenanceDroidEffect effect) { + super(effect); + } + + @Override + public MaintenanceDroidEffect copy() { + return new MaintenanceDroidEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + Choice choice = new ChoiceImpl(true); + choice.setMessage("Choose mode"); + choice.setChoices(choices); + while (!controller.choose(outcome, choice, game)) { + if (controller.canRespond()) { + return false; + } + } + + String chosen = choice.getChoice(); + switch (chosen) { + case "Remove a repair counter": + new RemoveCounterTargetEffect(CounterType.REPAIR.createInstance()).apply(game, source); + break; + default: //"Add another repair counter" + new AddCountersTargetEffect(CounterType.REPAIR.createInstance()).apply(game, source); + break; + } + return true; + + } + + return false; + } + +} + +class CounterPredicate implements Predicate { + + private final CounterType counter; + + public CounterPredicate(CounterType counter) { + this.counter = counter; + } + + @Override + public boolean apply(MageObject input, Game game) { + return game.getCard(input.getId()).getCounters(game).getCount(counter) > 0; + } + + @Override + public String toString() { + return "CounterType(" + counter.getName() + ')'; + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/MaintenanceHangar.java b/Mage.Sets/src/mage/sets/starwars/MaintenanceHangar.java new file mode 100644 index 0000000000..2ac91f688d --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/MaintenanceHangar.java @@ -0,0 +1,169 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.Set; +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.abilities.keyword.RepairAbility; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Layer; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.SubLayer; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.filter.FilterCard; +import mage.filter.common.FilterCreatureCard; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.game.Game; +import mage.players.Player; + +/** + * + * @author Styxo + */ +public class MaintenanceHangar extends CardImpl { + + private static final FilterCreaturePermanent filterPermanent = new FilterCreaturePermanent("Starship creatures"); + + static { + filterPermanent.add(new SubtypePredicate("Starship")); + } + + public MaintenanceHangar(UUID ownerId) { + super(ownerId, 23, "Maintenance Hangar", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT}, "{2}{W}"); + this.expansionSetCode = "SWS"; + + // At the beggining of your upkeep, remove an additional repair counter from each card in your graveyard. + this.addAbility(new BeginningOfUpkeepTriggeredAbility(new RemoveCounterMaintenanceHangarEffect(), TargetController.YOU, false)); + + // Starship creatures you control and starship creatures in your graveyard have Repair 6. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(new RepairAbility(6), Duration.WhileOnBattlefield, filterPermanent))); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new MaintenanceHangarEffect())); + + } + + public MaintenanceHangar(final MaintenanceHangar card) { + super(card); + } + + @Override + public MaintenanceHangar copy() { + return new MaintenanceHangar(this); + } +} + +class RemoveCounterMaintenanceHangarEffect extends OneShotEffect { + + private static final FilterCard filterCard = new FilterCard("each card"); + + static { + filterCard.add(new CounterPredicate(CounterType.REPAIR)); + } + + public RemoveCounterMaintenanceHangarEffect() { + super(Outcome.Detriment); + staticText = "remove an additional repair counter from each card in your graveyard"; + } + + public RemoveCounterMaintenanceHangarEffect(final RemoveCounterMaintenanceHangarEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + Set cards = controller.getGraveyard().getCards(filterCard, game); + for (Card card : cards) { + if (card != null) { + card.removeCounters("repair", 1, game); + } + } + return true; + } + return false; + } + + @Override + public RemoveCounterMaintenanceHangarEffect copy() { + return new RemoveCounterMaintenanceHangarEffect(this); + } +} + +class MaintenanceHangarEffect extends ContinuousEffectImpl { + + private static final FilterCreatureCard filterCard = new FilterCreatureCard("Starship creatures"); + + static { + filterCard.add(new SubtypePredicate("Starship")); + } + + public MaintenanceHangarEffect() { + super(Duration.WhileOnBattlefield, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.AddAbility); + this.staticText = "Starship creatures in your graveyard have Repair 6"; + } + + public MaintenanceHangarEffect(final MaintenanceHangarEffect effect) { + super(effect); + } + + @Override + public MaintenanceHangarEffect copy() { + return new MaintenanceHangarEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + Set cards = controller.getGraveyard().getCards(filterCard, game); + for (Card card : cards) { + if (card != null) { + RepairAbility ability = new RepairAbility(6); + ability.setSourceId(card.getId()); + ability.setControllerId(card.getOwnerId()); + game.getState().addOtherAbility(card, ability); + } + } + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/MantellianSavrip.java b/Mage.Sets/src/mage/sets/starwars/MantellianSavrip.java new file mode 100644 index 0000000000..baa3d8496a --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/MantellianSavrip.java @@ -0,0 +1,101 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.RestrictionEffect; +import mage.abilities.keyword.MonstrosityAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.permanent.Permanent; + +/** + * + * @author Styxo + */ +public class MantellianSavrip extends CardImpl { + + public MantellianSavrip(UUID ownerId) { + super(ownerId, 145, "Mantellian Savrip", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{G}{G}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Mantellian"); + this.subtype.add("Berserker"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // {5}{G}{G}: Monstrosity 3. + this.addAbility(new MonstrosityAbility("{5}{G}{G}", 3)); + + // Creatures with power less than Mantellian Savrip's power can't block it. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new MantellianSavripRestrictionEffect())); + + } + + public MantellianSavrip(final MantellianSavrip card) { + super(card); + } + + @Override + public MantellianSavrip copy() { + return new MantellianSavrip(this); + } +} + +class MantellianSavripRestrictionEffect extends RestrictionEffect { + + public MantellianSavripRestrictionEffect() { + super(Duration.WhileOnBattlefield); + staticText = "Creatures with power less than {this}'s power can't block it"; + } + + public MantellianSavripRestrictionEffect(final MantellianSavripRestrictionEffect effect) { + super(effect); + } + + @Override + public boolean applies(Permanent permanent, Ability source, Game game) { + return permanent.getId().equals(source.getSourceId()); + } + + @Override + public boolean canBeBlocked(Permanent attacker, Permanent blocker, Ability source, Game game) { + return (blocker.getPower().getValue() >= attacker.getPower().getValue()); + } + + @Override + public MantellianSavripRestrictionEffect copy() { + return new MantellianSavripRestrictionEffect(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/MarchOfTheDroids.java b/Mage.Sets/src/mage/sets/starwars/MarchOfTheDroids.java new file mode 100644 index 0000000000..67df7a128a --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/MarchOfTheDroids.java @@ -0,0 +1,60 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class MarchOfTheDroids extends CardImpl { + + public MarchOfTheDroids(UUID ownerId) { + super(ownerId, 206, "March of the Droids", Rarity.NA/*RARE*/, new CardType[]{CardType.SORCERY}, "{W}{U}{B}"); + this.expansionSetCode = "SWS"; + + // Remove all repair counters from each exiled card you own. You may cast each card with repair counter removed this way without paying its mana cost until end of turn. + + // Draw a card. + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); + } + + public MarchOfTheDroids(final MarchOfTheDroids card) { + super(card); + } + + @Override + public MarchOfTheDroids copy() { + return new MarchOfTheDroids(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/MightOfTheWild.java b/Mage.Sets/src/mage/sets/starwars/MightOfTheWild.java new file mode 100644 index 0000000000..ec42279e9d --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/MightOfTheWild.java @@ -0,0 +1,90 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Mode; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.effects.common.combat.CantBlockAllEffect; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.abilities.keyword.IndestructibleAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.filter.Filter; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.predicate.mageobject.PowerPredicate; +import mage.target.TargetPermanent; + +/** + * + * @author Styxo + */ +public class MightOfTheWild extends CardImpl { + + private static final FilterCreaturePermanent filterMode1 = new FilterCreaturePermanent("Creatures with power 3 or less"); + private static final FilterPermanent filterMode2 = new FilterPermanent("artifact or enchantment"); + + static { + filterMode1.add(new PowerPredicate(Filter.ComparisonType.LessThan, 4)); + filterMode2.add(Predicates.or(new CardTypePredicate(CardType.ARTIFACT), new CardTypePredicate(CardType.ENCHANTMENT))); + } + + public MightOfTheWild(UUID ownerId) { + super(ownerId, 207, "Might of the Wild", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{R}{G}{W}"); + this.expansionSetCode = "SWS"; + + // Choose one - Creatures with power 3 or less can't block this turn. + this.getSpellAbility().addEffect(new CantBlockAllEffect(filterMode1, Duration.EndOfTurn)); + + // Destroy target artifact or enchantment. + Mode mode = new Mode(); + mode.getEffects().add(new DestroyTargetEffect()); + mode.getTargets().add(new TargetPermanent(filterMode2)); + this.getSpellAbility().addMode(mode); + + // Creatures you control gain indestructible this turn. + mode = new Mode(); + mode.getEffects().add(new GainAbilityControlledEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn, new FilterControlledCreaturePermanent("creatures you control"))); + this.getSpellAbility().addMode(mode); + } + + public MightOfTheWild(final MightOfTheWild card) { + super(card); + } + + @Override + public MightOfTheWild copy() { + return new MightOfTheWild(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/MillenniumFalcon.java b/Mage.Sets/src/mage/sets/starwars/MillenniumFalcon.java new file mode 100644 index 0000000000..6a8489755c --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/MillenniumFalcon.java @@ -0,0 +1,75 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.abilities.keyword.FlashAbility; +import mage.abilities.keyword.HexproofAbility; +import mage.abilities.keyword.SpaceflightAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.filter.common.FilterCreaturePermanent; + +/** + * + * @author Styxo + */ +public class MillenniumFalcon extends CardImpl { + + public MillenniumFalcon(UUID ownerId) { + super(ownerId, 146, "Millennium Falcon", Rarity.RARE, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{3}{G}{G}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Starship"); + this.power = new MageInt(5); + this.toughness = new MageInt(4); + + // Flash + this.addAbility(FlashAbility.getInstance()); + + // Spaceflight + this.addAbility(SpaceflightAbility.getInstance()); + + // When Millennium Falcon enters the battlefield, creatures you control gain hexproof until end of turn. + this.addAbility(new EntersBattlefieldTriggeredAbility(new GainAbilityControlledEffect(HexproofAbility.getInstance(), Duration.EndOfTurn, new FilterCreaturePermanent("creatures")))); + } + + public MillenniumFalcon(final MillenniumFalcon card) { + super(card); + } + + @Override + public MillenniumFalcon copy() { + return new MillenniumFalcon(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/MiracolousRecovery.java b/Mage.Sets/src/mage/sets/starwars/MiracolousRecovery.java new file mode 100644 index 0000000000..9f8955b3bc --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/MiracolousRecovery.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; + +/** + * + * @author Styxo + */ +public class MiracolousRecovery extends mage.sets.visions.MiraculousRecovery { + + public MiracolousRecovery(UUID ownerId) { + super(ownerId); + this.cardNumber = "24"; + this.expansionSetCode = "SWS"; + } + + public MiracolousRecovery(final MiracolousRecovery card) { + super(card); + } + + @Override + public MiracolousRecovery copy() { + return new MiracolousRecovery(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/MoistureFarm.java b/Mage.Sets/src/mage/sets/starwars/MoistureFarm.java new file mode 100644 index 0000000000..5de0baf6ff --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/MoistureFarm.java @@ -0,0 +1,75 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.RemoveCountersSourceCost; +import mage.abilities.costs.common.RemoveVariableCountersSourceCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.AddManaOfAnyColorEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.mana.ColorlessManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; + +/** + * + * @author Styxo + */ +public class MoistureFarm extends CardImpl { + + public MoistureFarm(UUID ownerId) { + super(ownerId, 247, "Moisture Farm", Rarity.RARE, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "SWS"; + + // {T}: Add {C} to your mana pool. + this.addAbility(new ColorlessManaAbility()); + + // {T}: Put a storage counter on Moisture Farm. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.CHARGE.createInstance()), new TapSourceCost())); + + // {T}, Remove a storage counter from Moisture Farm: Add one mana of any color to your mana pool. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddManaOfAnyColorEffect(1), new TapSourceCost()); + ability.addCost(new RemoveCountersSourceCost(CounterType.CHARGE.createInstance())); + this.addAbility(ability); + } + + public MoistureFarm(final MoistureFarm card) { + super(card); + } + + @Override + public MoistureFarm copy() { + return new MoistureFarm(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/MonCalamariCruiser.java b/Mage.Sets/src/mage/sets/starwars/MonCalamariCruiser.java new file mode 100644 index 0000000000..99501a3952 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/MonCalamariCruiser.java @@ -0,0 +1,68 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.keyword.SpaceflightAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class MonCalamariCruiser extends CardImpl { + + public MonCalamariCruiser(UUID ownerId) { + super(ownerId, 47, "Mon Calamari Cruiser", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{3}{U}{U}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Starship"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Spaceflight + this.addAbility(SpaceflightAbility.getInstance()); + + // Whenever Mon Calamari Cruiser deals combat damage to a player, you may draw a card. + this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new DrawCardSourceControllerEffect(1), true)); + + } + + public MonCalamariCruiser(final MonCalamariCruiser card) { + super(card); + } + + @Override + public MonCalamariCruiser copy() { + return new MonCalamariCruiser(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/MonCalamariInitiate.java b/Mage.Sets/src/mage/sets/starwars/MonCalamariInitiate.java new file mode 100644 index 0000000000..fee4d69e93 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/MonCalamariInitiate.java @@ -0,0 +1,69 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.keyword.MeditateAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class MonCalamariInitiate extends CardImpl { + + public MonCalamariInitiate(UUID ownerId) { + super(ownerId, 48, "Mon Calamari Initiate", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{U}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Calamari"); + this.subtype.add("Jedi"); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + // When Mon Calamari Initiate enters the battlefield, draw a card. + this.addAbility(new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1))); + + // Meditate {1}{U} + this.addAbility(new MeditateAbility(new ManaCostsImpl("{1}{U}"))); + } + + public MonCalamariInitiate(final MonCalamariInitiate card) { + super(card); + } + + @Override + public MonCalamariInitiate copy() { + return new MonCalamariInitiate(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/Mountain1.java b/Mage.Sets/src/mage/sets/starwars/Mountain1.java new file mode 100644 index 0000000000..c4517b1550 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Mountain1.java @@ -0,0 +1,51 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; + +/** + * + * @author Styxo + */ +public class Mountain1 extends mage.cards.basiclands.Mountain { + + public Mountain1(UUID ownerId) { + super(ownerId, 261); + this.expansionSetCode = "SWS"; + } + + public Mountain1(final Mountain1 card) { + super(card); + } + + @Override + public Mountain1 copy() { + return new Mountain1(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/Mountain2.java b/Mage.Sets/src/mage/sets/starwars/Mountain2.java new file mode 100644 index 0000000000..f9c8f88cc4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Mountain2.java @@ -0,0 +1,51 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; + +/** + * + * @author Styxo + */ +public class Mountain2 extends mage.cards.basiclands.Mountain { + + public Mountain2(UUID ownerId) { + super(ownerId, 262); + this.expansionSetCode = "SWS"; + } + + public Mountain2(final Mountain2 card) { + super(card); + } + + @Override + public Mountain2 copy() { + return new Mountain2(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/Mountain3.java b/Mage.Sets/src/mage/sets/starwars/Mountain3.java new file mode 100644 index 0000000000..6cb42dd805 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Mountain3.java @@ -0,0 +1,51 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; + +/** + * + * @author Styxo + */ +public class Mountain3 extends mage.cards.basiclands.Mountain { + + public Mountain3(UUID ownerId) { + super(ownerId, 263); + this.expansionSetCode = "SWS"; + } + + public Mountain3(final Mountain3 card) { + super(card); + } + + @Override + public Mountain3 copy() { + return new Mountain3(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/N1Starfighter.java b/Mage.Sets/src/mage/sets/starwars/N1Starfighter.java new file mode 100644 index 0000000000..1a04f988a1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/N1Starfighter.java @@ -0,0 +1,86 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DoIfCostPaid; +import mage.abilities.effects.common.ExileTargetForSourceEffect; +import mage.abilities.effects.common.ReturnToBattlefieldUnderYourControlTargetEffect; +import mage.abilities.keyword.SpaceflightAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.permanent.AnotherPredicate; +import mage.target.common.TargetControlledCreaturePermanent; + +/** + * + * @author Styxo + */ +public class N1Starfighter extends CardImpl { + + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another creature you control"); + + static { + filter.add(new AnotherPredicate()); + } + + public N1Starfighter(UUID ownerId) { + super(ownerId, 224, "N-1 Starfighter", Rarity.COMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{1}{W/U}{W/U}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Starship"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Spaceflight + this.addAbility(SpaceflightAbility.getInstance()); + + // Whenever N-1 Starfighter deals combat damage to a player, you may pay {1}. If you do, exile another creature you control, then return that card to the battlefield under its owner's control. + Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility(new DoIfCostPaid(new ExileTargetForSourceEffect(), new GenericManaCost(1)), true); + Effect effect = new ReturnToBattlefieldUnderYourControlTargetEffect(true); + effect.setText(", then return the card to the battlefield under their owner's control"); + ability.addEffect(effect); + ability.addTarget(new TargetControlledCreaturePermanent(filter)); + this.addAbility(ability); + } + + public N1Starfighter(final N1Starfighter card) { + super(card); + } + + @Override + public N1Starfighter copy() { + return new N1Starfighter(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/NeophyteHateflayer.java b/Mage.Sets/src/mage/sets/starwars/NeophyteHateflayer.java new file mode 100644 index 0000000000..0843faf59e --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/NeophyteHateflayer.java @@ -0,0 +1,70 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.PayLifeCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.LoseLifeOpponentsEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author Styxo + */ +public class NeophyteHateflayer extends CardImpl { + + public NeophyteHateflayer(UUID ownerId) { + super(ownerId, 81, "Neophyte Hateflayer", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{B}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Human"); + this.subtype.add("Sith"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // {T}, Pay 2 life: Each opponent loses 1 life. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new LoseLifeOpponentsEffect(1), new TapSourceCost()); + ability.addCost(new PayLifeCost(2)); + this.addAbility(ability); + } + + public NeophyteHateflayer(final NeophyteHateflayer card) { + super(card); + } + + @Override + public NeophyteHateflayer copy() { + return new NeophyteHateflayer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/NerfHerder.java b/Mage.Sets/src/mage/sets/starwars/NerfHerder.java new file mode 100644 index 0000000000..18d82e8bf6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/NerfHerder.java @@ -0,0 +1,81 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.abilities.effects.common.cost.AbilitiesCostReductionControllerEffect; +import mage.abilities.keyword.MonstrosityAbility; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.CounterPredicate; + +/** + * + * @author Styxo + */ +public class NerfHerder extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Each creature with a +1/+1 counter on it"); + + static { + filter.add(new CounterPredicate(CounterType.P1P1)); + } + + public NerfHerder(UUID ownerId) { + super(ownerId, 147, "Nerf Herder", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{G}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Human"); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // Monstrosity abilities you activate cost {1} less to activate. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new AbilitiesCostReductionControllerEffect(MonstrosityAbility.class, "Monstrosity"))); + + // Each creature you control with a +1/+1 counter on it has trample. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.WhileOnBattlefield, filter))); + + } + + public NerfHerder(final NerfHerder card) { + super(card); + } + + @Override + public NerfHerder copy() { + return new NerfHerder(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/NexuStalker.java b/Mage.Sets/src/mage/sets/starwars/NexuStalker.java new file mode 100644 index 0000000000..7a3379097e --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/NexuStalker.java @@ -0,0 +1,80 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.BecomesMonstrousSourceTriggeredAbility; +import mage.abilities.effects.common.combat.MustBeBlockedByTargetSourceEffect; +import mage.abilities.keyword.HexproofAbility; +import mage.abilities.keyword.DeathtouchAbility; +import mage.abilities.keyword.MonstrosityAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author Styxo + */ +public class NexuStalker extends CardImpl { + + public NexuStalker(UUID ownerId) { + super(ownerId, 148, "Nexu Stalker", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{G}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Beast"); + this.power = new MageInt(1); + this.toughness = new MageInt(2); + + // Hexproof + this.addAbility(HexproofAbility.getInstance()); + + // Deathtouch + this.addAbility(DeathtouchAbility.getInstance()); + + // {2}{G}: Monstrosity 1. + this.addAbility(new MonstrosityAbility("{2}{G}", 1)); + + // When Nexu Stalker becomes monstrous, target creature blocks it this turn if able. + Ability ability = new BecomesMonstrousSourceTriggeredAbility(new MustBeBlockedByTargetSourceEffect(Duration.EndOfTurn)); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + } + + public NexuStalker(final NexuStalker card) { + super(card); + } + + @Override + public NexuStalker copy() { + return new NexuStalker(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/Nightspider.java b/Mage.Sets/src/mage/sets/starwars/Nightspider.java new file mode 100644 index 0000000000..0380c0446c --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Nightspider.java @@ -0,0 +1,62 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.keyword.DeathtouchAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class Nightspider extends CardImpl { + + public Nightspider(UUID ownerId) { + super(ownerId, 149, "Nightspider", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{G}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Insect"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Deathtouch + this.addAbility(DeathtouchAbility.getInstance()); + } + + public Nightspider(final Nightspider card) { + super(card); + } + + @Override + public Nightspider copy() { + return new Nightspider(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/NoContest.java b/Mage.Sets/src/mage/sets/starwars/NoContest.java new file mode 100644 index 0000000000..e36b74bbf9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/NoContest.java @@ -0,0 +1,63 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.effects.common.FightTargetsEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author Styxo + */ +public class NoContest extends CardImpl { + + public NoContest(UUID ownerId) { + super(ownerId, 150, "No Contest", Rarity.NA/*COMMON*/, new CardType[]{CardType.INSTANT}, "{G}"); + this.expansionSetCode = "SWS"; + + // Target creature you control fights target creature with power less than its power. + this.getSpellAbility().addEffect(new FightTargetsEffect()); + this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + // NEEDS FILTER + } + + public NoContest(final NoContest card) { + super(card); + } + + @Override + public NoContest copy() { + return new NoContest(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/NoviceBountyHunter.java b/Mage.Sets/src/mage/sets/starwars/NoviceBountyHunter.java new file mode 100644 index 0000000000..a133a17272 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/NoviceBountyHunter.java @@ -0,0 +1,68 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.keyword.BountyAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.TargetPlayer; + +/** + * + * @author Styxo + */ +public class NoviceBountyHunter extends CardImpl { + + public NoviceBountyHunter(UUID ownerId) { + super(ownerId, 115, "Novice Bounty Hunter", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{R}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Human"); + this.subtype.add("Hunter"); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // Bounty — Whenever a creature an opponent controls with a bounty counter on it dies, Novice Bounty Hunter deals 2 damge to target player. + Ability ability = new BountyAbility(new DamageTargetEffect(2)); + ability.addTarget(new TargetPlayer()); + this.addAbility(ability); + } + + public NoviceBountyHunter(final NoviceBountyHunter card) { + super(card); + } + + @Override + public NoviceBountyHunter copy() { + return new NoviceBountyHunter(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/NuteGunray.java b/Mage.Sets/src/mage/sets/starwars/NuteGunray.java new file mode 100644 index 0000000000..9d49e293a9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/NuteGunray.java @@ -0,0 +1,91 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.DoIfCostPaid; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterArtifactPermanent; +import mage.filter.common.FilterControlledArtifactPermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.permanent.TokenPredicate; +import mage.game.permanent.token.DroidToken; +import mage.target.common.TargetControlledPermanent; + +/** + * + * @author Styxo + */ +public class NuteGunray extends CardImpl { + + private static final FilterControlledArtifactPermanent filter = new FilterControlledArtifactPermanent("non-token artifact"); + + static { + filter.add(Predicates.not(new TokenPredicate())); + } + + public NuteGunray(UUID ownerId) { + super(ownerId, 208, "Nute Gunray", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{1}{W}{U}{B}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Neimidian"); + this.subtype.add("Advisor"); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // Whenever an artifact enters the battlefield under your control, you may pay {1}. If you do, draw a card. + this.addAbility(new EntersBattlefieldControlledTriggeredAbility(new DoIfCostPaid(new DrawCardSourceControllerEffect(1), new GenericManaCost(1)), new FilterArtifactPermanent())); + + // {1}{T}, Sacrifice a non-token artifact: Create a 1/1 colorless Battle Droid artifact creature token. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new DroidToken()), new GenericManaCost(1)); + ability.addCost(new TapSourceCost()); + ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(1, 1, filter, false))); + this.addAbility(ability); + } + + public NuteGunray(final NuteGunray card) { + super(card); + } + + @Override + public NuteGunray copy() { + return new NuteGunray(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/ObiWanKenobi.java b/Mage.Sets/src/mage/sets/starwars/ObiWanKenobi.java new file mode 100644 index 0000000000..6ee53f72f0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/ObiWanKenobi.java @@ -0,0 +1,113 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.LoyaltyAbility; +import mage.abilities.common.PlanswalkerEntersWithLoyalityCountersAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.GetEmblemEffect; +import mage.abilities.effects.common.TapTargetEffect; +import mage.abilities.effects.common.continuous.BoostControlledEffect; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.effects.common.continuous.GainProtectionFromColorTargetEffect; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.abilities.keyword.LifelinkAbility; +import mage.abilities.keyword.VigilanceAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.game.command.Emblem; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author Styxo + */ +public class ObiWanKenobi extends CardImpl { + + public ObiWanKenobi(UUID ownerId) { + super(ownerId, 163, "Obi-Wan Kenobi", Rarity.MYTHIC, new CardType[]{CardType.PLANESWALKER}, "{3}{W}{U}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Obi-Wan"); + + this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(5)); + + // +1:Up to one target creature you control gains vigilance and protection from color of your choice until end of turn. + Effect effect = new GainAbilityTargetEffect(VigilanceAbility.getInstance(), Duration.EndOfTurn); + effect.setText("Up to one target creature you control gains vigilance"); + Ability ability = new LoyaltyAbility(effect, +1); + effect = new GainProtectionFromColorTargetEffect(Duration.EndOfTurn); + effect.setText("and protection from color of your choice until end of turn"); + ability.addEffect(effect); + ability.addTarget(new TargetCreaturePermanent(0, 1)); + this.addAbility(ability); + + // -1:Tap up to three target creatures. + ability = new LoyaltyAbility(new TapTargetEffect(), -1); + ability.addTarget(new TargetCreaturePermanent(0, 3)); + this.addAbility(ability); + + // -7:You get emblem with "Creatures you control get +1/+1 and have vigilance, first strike, and lifelink." + this.addAbility(new LoyaltyAbility(new GetEmblemEffect(new ObiWanKenobiEmblem()), -7)); + + } + + public ObiWanKenobi(final ObiWanKenobi card) { + super(card); + } + + @Override + public ObiWanKenobi copy() { + return new ObiWanKenobi(this); + } +} + +class ObiWanKenobiEmblem extends Emblem { + + // Creatures you control get +1/+1 and have vigilance, first strike, and lifelink + public ObiWanKenobiEmblem() { + this.setName("Emblem - Obi-Wan"); + Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield)); + Effect effect = new GainAbilityControlledEffect(VigilanceAbility.getInstance(), Duration.WhileOnBattlefield); + effect.setText("and have vigilance,"); + ability.addEffect(effect); + effect = new GainAbilityControlledEffect(FirstStrikeAbility.getInstance(), Duration.WhileOnBattlefield); + effect.setText("first strike,"); + ability.addEffect(effect); + effect = new GainAbilityControlledEffect(LifelinkAbility.getInstance(), Duration.WhileOnBattlefield); + effect.setText("and lifelink."); + ability.addEffect(effect); + getAbilities().add(ability); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/OrbitalBombardment.java b/Mage.Sets/src/mage/sets/starwars/OrbitalBombardment.java new file mode 100644 index 0000000000..873228929f --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/OrbitalBombardment.java @@ -0,0 +1,67 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.effects.common.DestroyAllEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.SubtypePredicate; + +/** + * + * @author Styxo + */ +public class OrbitalBombardment extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("non-Starship creatures"); + + static { + filter.add(Predicates.not(new SubtypePredicate("Starship"))); + } + + public OrbitalBombardment(UUID ownerId) { + super(ownerId, 25, "Orbital Bombardment", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{3}{W}{W}"); + this.expansionSetCode = "SWS"; + + // Destroy all non-Starship creatuers. + getSpellAbility().getEffects().add(new DestroyAllEffect(new FilterCreaturePermanent(filter))); + } + + public OrbitalBombardment(final OrbitalBombardment card) { + super(card); + } + + @Override + public OrbitalBombardment copy() { + return new OrbitalBombardment(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/Order66.java b/Mage.Sets/src/mage/sets/starwars/Order66.java new file mode 100644 index 0000000000..dc1edc2062 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Order66.java @@ -0,0 +1,71 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.effects.common.DestroyAllEffect; +import mage.abilities.effects.common.counter.AddCountersAllEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.counters.CounterType; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.ControllerPredicate; + +/** + * + * @author Styxo + */ +public class Order66 extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature you don't control"); + + static { + filter.add(new ControllerPredicate(TargetController.NOT_YOU)); + } + + public Order66(UUID ownerId) { + super(ownerId, 82, "Order 66", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{7}{B}{B}"); + this.expansionSetCode = "SWS"; + + // Put a bounty counter on each creature you don't control, then destroy all creatures you don't control. + this.getSpellAbility().addEffect(new AddCountersAllEffect(CounterType.BOUNTY.createInstance(), filter)); + this.getSpellAbility().addEffect(new DestroyAllEffect(filter)); + + } + + public Order66(final Order66 card) { + super(card); + } + + @Override + public Order66 copy() { + return new Order66(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/OrtolanKeyboardist.java b/Mage.Sets/src/mage/sets/starwars/OrtolanKeyboardist.java new file mode 100644 index 0000000000..215664615d --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/OrtolanKeyboardist.java @@ -0,0 +1,66 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.DrawDiscardControllerEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author Styxo + */ +public class OrtolanKeyboardist extends CardImpl { + + public OrtolanKeyboardist(UUID ownerId) { + super(ownerId, 49, "Ortolan Keyboardist", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{U}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Ortolan"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // {T}: Draw a card then discard a card. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawDiscardControllerEffect(), new TapSourceCost())); + + } + + public OrtolanKeyboardist(final OrtolanKeyboardist card) { + super(card); + } + + @Override + public OrtolanKeyboardist copy() { + return new OrtolanKeyboardist(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/OuterRimSlaver.java b/Mage.Sets/src/mage/sets/starwars/OuterRimSlaver.java new file mode 100644 index 0000000000..a099ed462e --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/OuterRimSlaver.java @@ -0,0 +1,78 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.FightTargetsEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.permanent.AnotherPredicate; +import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetOpponentsCreaturePermanent; + +/** + * + * @author Styxo + */ +public class OuterRimSlaver extends CardImpl { + + private static final FilterControlledCreaturePermanent controlledCreature = new FilterControlledCreaturePermanent("another target creature you control"); + + static { + controlledCreature.add(new AnotherPredicate()); + } + + public OuterRimSlaver(UUID ownerId) { + super(ownerId, 209, "Outer Rim Slaver", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{B}{R}{G}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Trandoshan"); + this.subtype.add("Hunter"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // When Outer Rim Slaver enters the battlefield, you may have another target creature you control fight target creature an opponent controls. + Ability ability = new EntersBattlefieldTriggeredAbility(new FightTargetsEffect("another target creature you control fight target creature an opponent controls"), true); + ability.addTarget(new TargetControlledCreaturePermanent(controlledCreature)); + ability.addTarget(new TargetOpponentsCreaturePermanent()); + this.addAbility(ability); + } + + public OuterRimSlaver(final OuterRimSlaver card) { + super(card); + } + + @Override + public OuterRimSlaver copy() { + return new OuterRimSlaver(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/OutlawHolocron.java b/Mage.Sets/src/mage/sets/starwars/OutlawHolocron.java new file mode 100644 index 0000000000..587f8f7bd8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/OutlawHolocron.java @@ -0,0 +1,95 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.Cost; +import mage.abilities.costs.common.RemoveCountersSourceCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.mana.BlackManaAbility; +import mage.abilities.mana.GreenManaAbility; +import mage.abilities.mana.RedManaAbility; +import mage.abilities.mana.SimpleManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; + +/** + * + * @author Styxo + */ +public class OutlawHolocron extends CardImpl { + + public OutlawHolocron(UUID ownerId) { + super(ownerId, 235, "Outlaw Holocron", Rarity.COMMON, new CardType[]{CardType.ARTIFACT}, "{2}"); + this.expansionSetCode = "SWS"; + + // {T}: Put a charge counter on Outlaw Holocron. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.CHARGE.createInstance(1)), new TapSourceCost())); + + // {T}, Remove a charge counter from Outlaw Holocron: Add {B}, {R} or {G} to your mana pool. + Cost cost = new RemoveCountersSourceCost(CounterType.CHARGE.createInstance(1)); + Ability ability = new BlackManaAbility(); + ability.addCost(cost); + this.addAbility(ability); + + ability = new RedManaAbility(); + ability.addCost(cost); + this.addAbility(ability); + + ability = new GreenManaAbility(); + ability.addCost(cost); + this.addAbility(ability); + + // {T}, Remove two charge counters from Outlaw Holocron: Add BR or RG to your mana pool.cost = new RemoveCountersSourceCost(CounterType.CHARGE.createInstance(2)); + cost = new RemoveCountersSourceCost(CounterType.CHARGE.createInstance(2)); + + ability = new SimpleManaAbility(Zone.BATTLEFIELD, new Mana(1, 0, 0, 0, 1, 0, 0, 0), new TapSourceCost()); + ability.addCost(cost); + this.addAbility(ability); + + ability = new SimpleManaAbility(Zone.BATTLEFIELD, new Mana(1, 1, 0, 0, 0, 0, 0, 0), new TapSourceCost()); + ability.addCost(cost); + this.addAbility(ability); + } + + public OutlawHolocron(final OutlawHolocron card) { + super(card); + } + + @Override + public OutlawHolocron copy() { + return new OutlawHolocron(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/PersonalEnergyField.java b/Mage.Sets/src/mage/sets/starwars/PersonalEnergyField.java new file mode 100644 index 0000000000..5a88b7a368 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/PersonalEnergyField.java @@ -0,0 +1,106 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Mode; +import mage.abilities.effects.common.CounterTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.FilterSpell; +import mage.filter.predicate.ObjectPlayer; +import mage.filter.predicate.ObjectPlayerPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.game.stack.StackObject; +import mage.target.Target; +import mage.target.TargetSpell; + +/** + * + * @author Styxo + */ +public class PersonalEnergyField extends CardImpl { + + private final static FilterSpell filter = new FilterSpell("spell that targets you or a permanent you control"); + + static { + filter.add(new PersonalEnergyFieldPredicate()); + } + + public PersonalEnergyField(UUID ownerId) { + super(ownerId, 50, "Personal Energy Field", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{U}"); + this.expansionSetCode = "SWS"; + + // Counter target spell that targets you or a permanent you control. + this.getSpellAbility().addEffect(new CounterTargetEffect()); + this.getSpellAbility().addTarget(new TargetSpell(filter)); + } + + public PersonalEnergyField(final PersonalEnergyField card) { + super(card); + } + + @Override + public PersonalEnergyField copy() { + return new PersonalEnergyField(this); + } +} + +class PersonalEnergyFieldPredicate implements ObjectPlayerPredicate> { + + @Override + public boolean apply(ObjectPlayer input, Game game) { + UUID controllerId = input.getPlayerId(); + if (controllerId == null) { + return false; + } + + for (UUID modeId : input.getObject().getStackAbility().getModes().getSelectedModes()) { + Mode mode = input.getObject().getStackAbility().getModes().get(modeId); + for (Target target : mode.getTargets()) { + for (UUID targetId : target.getTargets()) { + if (controllerId.equals(targetId)) { + return true; + } + Permanent permanent = game.getPermanent(targetId); + if (permanent != null && controllerId.equals(permanent.getControllerId())) { + return true; + } + } + } + } + return false; + } + + @Override + public String toString() { + return "spell that targets you or a permanent you control"; + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/Plain1.java b/Mage.Sets/src/mage/sets/starwars/Plain1.java new file mode 100644 index 0000000000..f64b974ebb --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Plain1.java @@ -0,0 +1,51 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; + +/** + * + * @author Styxo + */ +public class Plain1 extends mage.cards.basiclands.Plains { + + public Plain1(UUID ownerId) { + super(ownerId, 252); + this.expansionSetCode = "SWS"; + } + + public Plain1(final Plain1 card) { + super(card); + } + + @Override + public Plain1 copy() { + return new Plain1(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/Plain2.java b/Mage.Sets/src/mage/sets/starwars/Plain2.java new file mode 100644 index 0000000000..e94f9277db --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Plain2.java @@ -0,0 +1,51 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; + +/** + * + * @author Styxo + */ +public class Plain2 extends mage.cards.basiclands.Plains { + + public Plain2(UUID ownerId) { + super(ownerId, 253); + this.expansionSetCode = "SWS"; + } + + public Plain2(final Plain2 card) { + super(card); + } + + @Override + public Plain2 copy() { + return new Plain2(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/Plain3.java b/Mage.Sets/src/mage/sets/starwars/Plain3.java new file mode 100644 index 0000000000..c15743fb27 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Plain3.java @@ -0,0 +1,51 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; + +/** + * + * @author Styxo + */ +public class Plain3 extends mage.cards.basiclands.Plains { + + public Plain3(UUID ownerId) { + super(ownerId, 254); + this.expansionSetCode = "SWS"; + } + + public Plain3(final Plain3 card) { + super(card); + } + + @Override + public Plain3 copy() { + return new Plain3(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/PloKoon.java b/Mage.Sets/src/mage/sets/starwars/PloKoon.java new file mode 100644 index 0000000000..16e327415d --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/PloKoon.java @@ -0,0 +1,71 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.ActivateAbilitiesAnyTimeYouCouldCastInstantEffect; +import mage.abilities.keyword.MeditateAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author Styxo + */ +public class PloKoon extends CardImpl { + + public PloKoon(UUID ownerId) { + super(ownerId, 26, "Plo Koon", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{3}{W}{W}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("KelDor"); + this.subtype.add("Jedi"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // You may activate meditate abilities any time you could cast an instant. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ActivateAbilitiesAnyTimeYouCouldCastInstantEffect(MeditateAbility.class, "meditate abilities"))); + + // Meditate {1}{W} + this.addAbility(new MeditateAbility(new ManaCostsImpl("{1}{W}"))); + } + + public PloKoon(final PloKoon card) { + super(card); + } + + @Override + public PloKoon copy() { + return new PloKoon(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/PrecipiceOfMortis.java b/Mage.Sets/src/mage/sets/starwars/PrecipiceOfMortis.java new file mode 100644 index 0000000000..2f97f0ed8d --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/PrecipiceOfMortis.java @@ -0,0 +1,117 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.Mode; +import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.keyword.MeditateAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.game.stack.StackAbility; +import mage.players.Player; +import mage.target.common.TargetTriggeredAbility; + +/** + * + * @author Styxo + */ +public class PrecipiceOfMortis extends CardImpl { + + protected static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("creature with meditate"); + + static { + filter.add(new AbilityPredicate(MeditateAbility.class)); + } + + public PrecipiceOfMortis(UUID ownerId) { + super(ownerId, 210, "Precipice of Mortis", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{G}{U}{W}"); + this.expansionSetCode = "SWS"; + + // Whenever a creature with meditate enters the battlefield under your control, you may copy target triggered ability you control. You may choose new targets for that ability. + Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new PrecipiceOfMortisEffect(), filter, true); + ability.addTarget(new TargetTriggeredAbility()); + this.addAbility(ability); + } + + public PrecipiceOfMortis(final PrecipiceOfMortis card) { + super(card); + } + + @Override + public PrecipiceOfMortis copy() { + return new PrecipiceOfMortis(this); + } +} + +class PrecipiceOfMortisEffect extends OneShotEffect { + + public PrecipiceOfMortisEffect() { + super(Outcome.Copy); + } + + public PrecipiceOfMortisEffect(final PrecipiceOfMortisEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + StackAbility stackAbility = (StackAbility) game.getStack().getStackObject(targetPointer.getFirst(game, source)); + if (stackAbility != null) { + Player controller = game.getPlayer(source.getControllerId()); + Permanent sourcePermanent = game.getPermanent(source.getSourceId()); + if (controller != null && sourcePermanent != null) { + stackAbility.createCopyOnStack(game, source, source.getControllerId(), true); + return true; + } + } + return false; + + } + + @Override + public PrecipiceOfMortisEffect copy() { + return new PrecipiceOfMortisEffect(this); + } + + @Override + public String getText(Mode mode) { + StringBuilder sb = new StringBuilder(); + sb.append("copy ").append(mode.getTargets().get(0).getTargetName()).append(". You may choose new targets for that ability"); + return sb.toString(); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/PredatorsStrike.java b/Mage.Sets/src/mage/sets/starwars/PredatorsStrike.java new file mode 100644 index 0000000000..d65103f12e --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/PredatorsStrike.java @@ -0,0 +1,56 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ + +package mage.sets.starwars; + +import java.util.UUID; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class PredatorsStrike extends mage.sets.mirrodin.PredatorsStrike { + + public PredatorsStrike(UUID ownerId) { + super(ownerId); + this.cardNumber = "151"; + this.expansionSetCode = "SWS"; + } + + public PredatorsStrike(final PredatorsStrike card) { + super(card); + } + + @Override + public PredatorsStrike copy() { + return new PredatorsStrike(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/Preordain.java b/Mage.Sets/src/mage/sets/starwars/Preordain.java new file mode 100644 index 0000000000..5be3288525 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Preordain.java @@ -0,0 +1,55 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class Preordain extends mage.sets.magic2011.Preordain { + + public Preordain(UUID ownerId) { + super(ownerId); + this.cardNumber = "33"; + this.expansionSetCode = "SWS"; + this.rarity = Rarity.UNCOMMON; + + } + + public Preordain(final Preordain card) { + super(card); + } + + @Override + public Preordain copy() { + return new Preordain(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/PrimalInstict.java b/Mage.Sets/src/mage/sets/starwars/PrimalInstict.java new file mode 100644 index 0000000000..5d169b35ed --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/PrimalInstict.java @@ -0,0 +1,100 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.counters.CounterType; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author Styxo + */ +public class PrimalInstict extends CardImpl { + + public PrimalInstict(UUID ownerId) { + super(ownerId, 172, "Primal Instict", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{1}{R}{G}"); + this.expansionSetCode = "SWS"; + + // Put a +1/+1 counter on target creature, then double the number of +1/+1 counters on that creature. + this.getSpellAbility().addEffect(new PrimalInstictEffect()); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + } + + public PrimalInstict(final PrimalInstict card) { + super(card); + } + + @Override + public PrimalInstict copy() { + return new PrimalInstict(this); + } +} + +class PrimalInstictEffect extends OneShotEffect { + + public PrimalInstictEffect() { + super(Outcome.BoostCreature); + staticText = "Put a +1/+1 counter on target creature, then double the number of +1/+1 counters on that creature."; + } + + public PrimalInstictEffect(PrimalInstictEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + Permanent target = game.getPermanent(getTargetPointer().getFirst(game, source)); + if (target != null) { + target.addCounters(CounterType.P1P1.createInstance(), game); + int addCounterCount = target.getCounters(game).getCount(CounterType.P1P1); + game.informPlayers("Counters " + addCounterCount); + target.addCounters(CounterType.P1P1.createInstance(addCounterCount), game); + return true; + } + } + return false; + } + + @Override + public PrimalInstictEffect copy() { + return new PrimalInstictEffect(this); + } + +} diff --git a/Mage.Sets/src/mage/sets/starwars/PrincessLeia.java b/Mage.Sets/src/mage/sets/starwars/PrincessLeia.java new file mode 100644 index 0000000000..62535c370a --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/PrincessLeia.java @@ -0,0 +1,106 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.continuous.BoostControlledEffect; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.filter.predicate.permanent.AnotherPredicate; +import mage.game.permanent.token.Token; + +/** + * + * @author Styxo + */ +public class PrincessLeia extends CardImpl { + + private static final FilterControlledCreaturePermanent filter1 = new FilterControlledCreaturePermanent("other Rebel creature you control"); + private static final FilterCreaturePermanent filter2 = new FilterCreaturePermanent("Rebel creature you control"); + + static { + SubtypePredicate rebel = new SubtypePredicate("Rebel"); + filter1.add(new AnotherPredicate()); + filter1.add(rebel); + filter2.add(rebel); + } + + public PrincessLeia(UUID ownerId) { + super(ownerId, 211, "Princess Leia", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{3}{G}{U}{W}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Human"); + this.subtype.add("Rebel"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // When Princess Leia enters the battlefield, create three 1/1 white Rebel creature tokens. + this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new RebelToken(), 3))); + + // Princess Leia gets +1/+1 for each other Rebel creature you control. + DynamicValue count = new PermanentsOnBattlefieldCount(filter1); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostSourceEffect(count, count, Duration.WhileOnBattlefield))); + + // Other Rebel creatures you control get +1/+1. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, filter2, true))); + + } + + public PrincessLeia(final PrincessLeia card) { + super(card); + } + + @Override + public PrincessLeia copy() { + return new PrincessLeia(this); + } +} + +class RebelToken extends Token { + + public RebelToken() { + super("Rebel", "1/1 white Rebel creature token", 1, 1); + this.setOriginalExpansionSetCode("SWS"); + cardType.add(CardType.CREATURE); + color.setWhite(true); + subtype.add("Rebel"); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/ProbeDroid.java b/Mage.Sets/src/mage/sets/starwars/ProbeDroid.java new file mode 100644 index 0000000000..21c46a64b6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/ProbeDroid.java @@ -0,0 +1,72 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.LookAtTargetPlayerHandEffect; +import mage.abilities.keyword.RepairAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.TargetPlayer; + +/** + * + * @author Styxo + */ +public class ProbeDroid extends CardImpl { + + public ProbeDroid(UUID ownerId) { + super(ownerId, 51, "Probe Droid", Rarity.COMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{1}{U}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Droid"); + this.subtype.add("Scout"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // When Probe Droid enters the battlefield, target player reveals his or her hand. + Ability ability = new EntersBattlefieldTriggeredAbility(new LookAtTargetPlayerHandEffect()); + ability.addTarget(new TargetPlayer()); + this.addAbility(ability); + + // Repair 3 + this.addAbility(new RepairAbility(3)); + } + + public ProbeDroid(final ProbeDroid card) { + super(card); + } + + @Override + public ProbeDroid copy() { + return new ProbeDroid(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/PublicArrangement.java b/Mage.Sets/src/mage/sets/starwars/PublicArrangement.java new file mode 100644 index 0000000000..6d14100e4e --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/PublicArrangement.java @@ -0,0 +1,107 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.abilities.keyword.BountyAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.counters.CounterType; +import mage.game.Game; +import mage.players.Player; +import mage.players.PlayerList; +import mage.target.common.TargetOpponentsCreaturePermanent; + +/** + * + * @author Styxo + */ +public class PublicArrangement extends CardImpl { + + public PublicArrangement(UUID ownerId) { + super(ownerId, 83, "Public Arrangement", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}"); + this.expansionSetCode = "SWS"; + + // When Public Arrangement enters the battlefield, put a bounty counter on up to two target creatures your opponents control. + Ability ability = new EntersBattlefieldTriggeredAbility(new AddCountersTargetEffect(CounterType.BOUNTY.createInstance())); + ability.addTarget(new TargetOpponentsCreaturePermanent(0, 2)); + this.addAbility(ability); + + // Bounty — Whenever a creature an opponent controls with a bounty counter on it dies, that creature's controler loses 2 life. Each other player gains 2 life. + this.addAbility(new BountyAbility(new PublicArrangementEffect(), false, true)); + } + + public PublicArrangement(final PublicArrangement card) { + super(card); + } + + @Override + public PublicArrangement copy() { + return new PublicArrangement(this); + } +} + +class PublicArrangementEffect extends OneShotEffect { + + public PublicArrangementEffect() { + super(Outcome.LoseLife); + staticText = "that creature's controler loses 2 life. Each other player gains 2 life"; + } + + public PublicArrangementEffect(final PublicArrangementEffect effect) { + super(effect); + } + + @Override + public PublicArrangementEffect copy() { + return new PublicArrangementEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + UUID controller = game.getControllerId(source.getFirstTarget()); + if (controller != null) { + game.getPlayer(controller).loseLife(2, game); + for (UUID playerId : game.getOpponents(controller)) { + Player player = game.getPlayer(playerId); + if (player != null) { + player.gainLife(2, game); + } + } + return true; + } + return false; + } + +} diff --git a/Mage.Sets/src/mage/sets/starwars/QuiGonJinn.java b/Mage.Sets/src/mage/sets/starwars/QuiGonJinn.java new file mode 100644 index 0000000000..b66f27f740 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/QuiGonJinn.java @@ -0,0 +1,93 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.AttacksAloneTriggeredAbility; +import mage.abilities.common.LeavesBattlefieldTriggeredAbility; +import mage.abilities.keyword.VigilanceAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.ExileTargetEffect; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.keyword.LifelinkAbility; +import mage.abilities.keyword.MeditateAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.target.common.TargetCardInGraveyard; + +/** + * + * @author Styxo + */ +public class QuiGonJinn extends CardImpl { + + public QuiGonJinn(UUID ownerId) { + super(ownerId, 212, "Qui-Gon Jinn", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{2}{G}{U}{W}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Human"); + this.subtype.add("Jedi"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Vigilance + this.addAbility(VigilanceAbility.getInstance()); + + // When Qui-Gon Jinn attacks alone, it gets +2/+2 and lifelink until end of turn. + Effect effect = new BoostSourceEffect(2, 2, Duration.EndOfTurn); + effect.setText("it gets +2/+2"); + Ability abitity = new AttacksAloneTriggeredAbility(effect); + effect = new GainAbilitySourceEffect(LifelinkAbility.getInstance()); + effect.setText("and lifelink until end of turn"); + abitity.addEffect(effect); + this.addAbility(abitity); + + // When Qui-Gon Jinn leaves the battlefield, you may exile target card from a graveyard. + abitity = new LeavesBattlefieldTriggeredAbility(new ExileTargetEffect(), true); + abitity.addTarget(new TargetCardInGraveyard()); + this.addAbility(abitity); + + // Meditate {1}{W} + this.addAbility(new MeditateAbility(new ManaCostsImpl("{1}{W}"))); + } + + public QuiGonJinn(final QuiGonJinn card) { + super(card); + } + + @Override + public QuiGonJinn copy() { + return new QuiGonJinn(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/RagingReek.java b/Mage.Sets/src/mage/sets/starwars/RagingReek.java new file mode 100644 index 0000000000..b0d77fb924 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/RagingReek.java @@ -0,0 +1,66 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.AttacksEachTurnStaticAbility; +import mage.abilities.keyword.MonstrosityAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class RagingReek extends CardImpl { + + public RagingReek(UUID ownerId) { + super(ownerId, 116, "Raging Reek", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{4}{R}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Beast"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Raging Reek attacks each turn if able. + this.addAbility(new AttacksEachTurnStaticAbility()); + + //{4}{R}{R}: Monstrosity 2 + this.addAbility(new MonstrosityAbility("{4}{R}{R}", 2)); + } + + public RagingReek(final RagingReek card) { + super(card); + } + + @Override + public RagingReek copy() { + return new RagingReek(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/RallyingFire.java b/Mage.Sets/src/mage/sets/starwars/RallyingFire.java new file mode 100644 index 0000000000..6dad4c3dec --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/RallyingFire.java @@ -0,0 +1,60 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.effects.common.continuous.BoostControlledEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class RallyingFire extends CardImpl { + + public RallyingFire(UUID ownerId) { + super(ownerId, 117, "Rallying Fire", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{2}{R}"); + this.expansionSetCode = "SWS"; + + // Creatures you control get +2/+0 until end of turn. + this.getSpellAbility().addEffect(new BoostControlledEffect(2, 0, Duration.EndOfTurn)); + + } + + public RallyingFire(final RallyingFire card) { + super(card); + } + + @Override + public RallyingFire copy() { + return new RallyingFire(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/RavenousWampa.java b/Mage.Sets/src/mage/sets/starwars/RavenousWampa.java new file mode 100644 index 0000000000..2f8e55f8e4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/RavenousWampa.java @@ -0,0 +1,117 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.BecomesMonstrousSourceTriggeredAbility; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.keyword.MonstrosityAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.permanent.AnotherPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.common.TargetControlledCreaturePermanent; + +/** + * + * @author Styxo + */ +public class RavenousWampa extends CardImpl { + + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another creature"); + + static { + filter.add(new AnotherPredicate()); + } + + public RavenousWampa(UUID ownerId) { + super(ownerId, 229, "Ravenous Wampa", Rarity.NA/*UNCOMMON*/, new CardType[]{CardType.CREATURE}, "{2}{R/W}{R/W}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Beast"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // {1}{G}, Sacrifice another creature: Monstrosity 2. + Ability ability = new MonstrosityAbility("{1}{G}", 2); + ability.addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(filter))); + this.addAbility(ability); + + // When Ravenous Wampa becomes monstrous, you gain life equal to the sacrificied creature's toughness. + this.addAbility(new BecomesMonstrousSourceTriggeredAbility(new RavenousWampaEffect())); + } + + public RavenousWampa(final RavenousWampa card) { + super(card); + } + + @Override + public RavenousWampa copy() { + return new RavenousWampa(this); + } +} + +class RavenousWampaEffect extends OneShotEffect { + + public RavenousWampaEffect() { + super(Outcome.GainLife); + this.staticText = "you gain life equal to the sacrificied creature's toughness"; + } + + public RavenousWampaEffect(final RavenousWampaEffect effect) { + super(effect); + } + + @Override + public RavenousWampaEffect copy() { + return new RavenousWampaEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + // NEED TO GET SACKED PERMANENT + Permanent p = null; + if (p != null) { + Player player = game.getPlayer(source.getControllerId()); + if (player != null) { + player.gainLife(p.getToughness().getValue(), game); + return true; + } + + } + return false; + + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/Regression.java b/Mage.Sets/src/mage/sets/starwars/Regression.java new file mode 100644 index 0000000000..838b4eb0bd --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Regression.java @@ -0,0 +1,69 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.effects.common.ShuffleIntoLibraryTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.FilterPermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.target.TargetPermanent; + +/** + * + * @author Styxo + */ +public class Regression extends CardImpl { + + private static final FilterPermanent filter = new FilterPermanent("artifact or enchantment"); + + static { + filter.add(Predicates.or(new CardTypePredicate(CardType.ARTIFACT), new CardTypePredicate(CardType.ENCHANTMENT))); + } + + public Regression(UUID ownerId) { + super(ownerId, 152, "Regression", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{1}{G}"); + this.expansionSetCode = "SWS"; + + // Choose target artifact or enchantment. Its owner shuffles it into his or her library. + this.getSpellAbility().addEffect(new ShuffleIntoLibraryTargetEffect()); + this.getSpellAbility().addTarget(new TargetPermanent(1, 1, filter, true)); + } + + public Regression(final Regression card) { + super(card); + } + + @Override + public Regression copy() { + return new Regression(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/RepublicFrigate.java b/Mage.Sets/src/mage/sets/starwars/RepublicFrigate.java new file mode 100644 index 0000000000..5b4d7c5158 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/RepublicFrigate.java @@ -0,0 +1,62 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.keyword.SpaceflightAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class RepublicFrigate extends CardImpl { + + public RepublicFrigate(UUID ownerId) { + super(ownerId, 52, "Republic Frigate", Rarity.COMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{3}{U}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Starship"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Spaceflight + this.addAbility(SpaceflightAbility.getInstance()); + } + + public RepublicFrigate(final RepublicFrigate card) { + super(card); + } + + @Override + public RepublicFrigate copy() { + return new RepublicFrigate(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/Repurpose.java b/Mage.Sets/src/mage/sets/starwars/Repurpose.java new file mode 100644 index 0000000000..5e868ad9c5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Repurpose.java @@ -0,0 +1,72 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterCreatureCard; +import mage.target.common.TargetCardInYourGraveyard; +import mage.target.common.TargetCreaturePermanent; +import mage.target.targetpointer.SecondTargetPointer; + +/** + * + * @author Styxo + */ +public class Repurpose extends CardImpl { + + public Repurpose(UUID ownerId) { + super(ownerId, 84, "Repurpose", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{3}{B}{B}"); + this.expansionSetCode = "SWS"; + + // Destroy target creature. + this.getSpellAbility().addEffect(new DestroyTargetEffect()); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + + // Return up to one target creature card from graveyard to your hand. + Effect effect = new ReturnFromGraveyardToHandTargetEffect(); + effect.setTargetPointer(SecondTargetPointer.getInstance()); + effect.setText("Return up to one target creature card from graveyard to your hand."); + this.getSpellAbility().addEffect(effect); + this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(0, 1, new FilterCreatureCard("creature card from your graveyard"))); + } + + public Repurpose(final Repurpose card) { + super(card); + } + + @Override + public Repurpose copy() { + return new Repurpose(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/Revenge.java b/Mage.Sets/src/mage/sets/starwars/Revenge.java new file mode 100644 index 0000000000..d8374b4d42 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Revenge.java @@ -0,0 +1,139 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.condition.Condition; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.effects.ContinuousEffect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.FightTargetsEffect; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetOpponentsCreaturePermanent; +import mage.target.targetpointer.FixedTarget; +import mage.watchers.common.PlayerLostLifeWatcher; + +/** + * + * @author Styxo + */ +public class Revenge extends CardImpl { + + public Revenge(UUID ownerId) { + super(ownerId, 118, "Revenge", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{1}{R}"); + this.expansionSetCode = "SWS"; + + // Target creature you control fights target creature an opponent controls. + this.getSpellAbility().addEffect(new FightTargetsEffect()); + this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); + this.getSpellAbility().addTarget(new TargetOpponentsCreaturePermanent()); + + // If you lost life this turn, that creature you control gets +4/+0 until end of turn. + this.getSpellAbility().addEffect(new ConditionalOneShotEffect( + new RevengeEffect(), + LostLifeCondition.getInstance(), + "If you lost life this turn, that creature you control gets +4/+0 until end of turn")); + + this.getSpellAbility().addWatcher(new PlayerLostLifeWatcher()); + + } + + public Revenge(final Revenge card) { + super(card); + } + + @Override + public Revenge copy() { + return new Revenge(this); + } +} + +class LostLifeCondition implements Condition { + + private static LostLifeCondition fInstance = null; + + public static Condition getInstance() { + if (fInstance == null) { + fInstance = new LostLifeCondition(); + } + return fInstance; + } + + private LostLifeCondition() { + } + + @Override + public boolean apply(Game game, Ability source) { + PlayerLostLifeWatcher watcher = (PlayerLostLifeWatcher) game.getState().getWatchers().get("PlayerLostLifeWatcher"); + UUID player = source.getControllerId(); + if (watcher != null && player != null) { + return watcher.getLiveLost(player) > 0; + } + return false; + } + +} + +class RevengeEffect extends OneShotEffect { + + public RevengeEffect() { + super(Outcome.BoostCreature); + } + + public RevengeEffect(final RevengeEffect effect) { + super(effect); + } + + @Override + public RevengeEffect copy() { + return new RevengeEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent target = game.getPermanent(targetPointer.getFirst(game, source)); + if (target != null && target.getCardType().contains(CardType.CREATURE)) { + ContinuousEffect effect = new BoostTargetEffect(4, 0, Duration.EndOfTurn); + effect.setTargetPointer(new FixedTarget(target.getId())); + game.addEffect(effect, source); + return true; + } + + return false; + } + +} diff --git a/Mage.Sets/src/mage/sets/starwars/RidingRonto.java b/Mage.Sets/src/mage/sets/starwars/RidingRonto.java new file mode 100644 index 0000000000..90b1d02669 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/RidingRonto.java @@ -0,0 +1,66 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.keyword.MonstrosityAbility; +import mage.abilities.keyword.VigilanceAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class RidingRonto extends CardImpl { + + public RidingRonto(UUID ownerId) { + super(ownerId, 27, "Riding Ronto", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{W}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Beast"); + this.power = new MageInt(2); + this.toughness = new MageInt(4); + + // Vigilance + this.addAbility(VigilanceAbility.getInstance()); + + // {3}{W}{W}: Monstrosity 3. + this.addAbility(new MonstrosityAbility("{3}{W}{W}", 3)); + } + + public RidingRonto(final RidingRonto card) { + super(card); + } + + @Override + public RidingRonto copy() { + return new RidingRonto(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/RocketTrooper.java b/Mage.Sets/src/mage/sets/starwars/RocketTrooper.java new file mode 100644 index 0000000000..558fe8e3f3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/RocketTrooper.java @@ -0,0 +1,88 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.game.permanent.token.TrooperToken; +import mage.target.common.TargetCreatureOrPlayer; + +/** + * + * @author Styxo + */ +public class RocketTrooper extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Trooper creatures"); + + static { + filter.add(new SubtypePredicate("Trooper")); + } + + public RocketTrooper(UUID ownerId) { + super(ownerId, 119, "Rocket Trooper", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{1}{R}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Human"); + this.subtype.add("Trooper"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Trooper creatures you control have "Whenever this creature enters the battlefield, it deals 1 damage to target creature or player". + Effect effect = new DamageTargetEffect(1); + effect.setText("Whenever this creature enters the battlefield, it deals 1 damage to target creature or player"); + Ability ability = new EntersBattlefieldTriggeredAbility(effect, false, true); + ability.addTarget(new TargetCreatureOrPlayer()); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(ability, Duration.Custom, filter, false))); + + } + + public RocketTrooper(final RocketTrooper card) { + super(card); + } + + @Override + public RocketTrooper copy() { + return new RocketTrooper(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/RoguesPassage.java b/Mage.Sets/src/mage/sets/starwars/RoguesPassage.java new file mode 100644 index 0000000000..373c9059ac --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/RoguesPassage.java @@ -0,0 +1,30 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.sets.starwars; + +import java.util.UUID; + +/** + * + * @author Styxo + */ +public class RoguesPassage extends mage.sets.returntoravnica.RoguesPassage { + + public RoguesPassage(UUID ownerId) { + super(ownerId); + this.cardNumber = "248"; + this.expansionSetCode = "SWS"; + } + + public RoguesPassage(final RoguesPassage card) { + super(card); + } + + @Override + public RoguesPassage copy() { + return new RoguesPassage(this); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/starwars/RuleOfTwo.java b/Mage.Sets/src/mage/sets/starwars/RuleOfTwo.java new file mode 100644 index 0000000000..034a84220c --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/RuleOfTwo.java @@ -0,0 +1,83 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.CreatureCountCondition; +import mage.abilities.decorator.ConditionalContinuousEffect; +import mage.abilities.effects.ContinuousEffect; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.continuous.BoostControlledEffect; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.abilities.keyword.DeathtouchAbility; +import mage.abilities.keyword.LifelinkAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; + +/** + * + * @author Styxo + */ +public class RuleOfTwo extends CardImpl { + + public RuleOfTwo(UUID ownerId) { + super(ownerId, 85, "Rule of two", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT}, "{3}{B}{B}"); + this.expansionSetCode = "SWS"; + + // As long as you control exatly two creatures, those creatures get +2/+0 and have deathtouch and lifelink. + ContinuousEffect boostEffect = new BoostControlledEffect(2, 0, Duration.WhileOnBattlefield); + Effect effect = new ConditionalContinuousEffect(boostEffect, new CreatureCountCondition(2, TargetController.YOU), + "As long as you control exactly two creatures, those creatures get +2/+0"); + Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect); + ContinuousEffect deathtouchEffect = new GainAbilityControlledEffect(DeathtouchAbility.getInstance(), Duration.WhileOnBattlefield, new FilterCreaturePermanent()); + effect = new ConditionalContinuousEffect(deathtouchEffect, new CreatureCountCondition(2, TargetController.YOU), + "and have deathtouch"); + ability.addEffect(effect); + ContinuousEffect lifelinkEffect = new GainAbilityControlledEffect(LifelinkAbility.getInstance(), Duration.WhileOnBattlefield, new FilterCreaturePermanent()); + effect = new ConditionalContinuousEffect(lifelinkEffect, new CreatureCountCondition(2, TargetController.YOU), + "and lifelink"); + ability.addEffect(effect); + this.addAbility(ability); + } + + public RuleOfTwo(final RuleOfTwo card) { + super(card); + } + + @Override + public RuleOfTwo copy() { + return new RuleOfTwo(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/Rumination.java b/Mage.Sets/src/mage/sets/starwars/Rumination.java new file mode 100644 index 0000000000..d7508b0a38 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Rumination.java @@ -0,0 +1,105 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.game.Game; +import mage.players.Player; +import mage.target.common.TargetCardInHand; + +/** + * + * @author Styxo + */ +public class Rumination extends CardImpl { + + public Rumination(UUID ownerId) { + super(ownerId, 53, "Rumination", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{2}{U}"); + this.expansionSetCode = "SWS"; + + // Draw three cards, then put a card from your hand on top of your library. + this.getSpellAbility().addEffect(new RuminationEffect()); + } + + public Rumination(final Rumination card) { + super(card); + } + + @Override + public Rumination copy() { + return new Rumination(this); + } + + class RuminationEffect extends OneShotEffect { + + public RuminationEffect() { + super(Outcome.DrawCard); + staticText = "Draw three cards, then put a card from your hand on top of your library."; + } + + public RuminationEffect(final RuminationEffect effect) { + super(effect); + } + + @Override + public RuminationEffect copy() { + return new RuminationEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + if (player != null) { + player.drawCards(3, game); + putOnLibrary(player, source, game); + return true; + } + return false; + } + + private boolean putOnLibrary(Player player, Ability source, Game game) { + TargetCardInHand target = new TargetCardInHand(); + if (target.canChoose(source.getSourceId(), player.getId(), game)) { + player.chooseTarget(Outcome.ReturnToHand, target, source, game); + Card card = player.getHand().get(target.getFirstTarget(), game); + if (card != null) { + return player.moveCardToLibraryWithInfo(card, source.getSourceId(), game, Zone.HAND, true, false); + } + } + return false; + } + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/RumorMonger.java b/Mage.Sets/src/mage/sets/starwars/RumorMonger.java new file mode 100644 index 0000000000..1bb80670fd --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/RumorMonger.java @@ -0,0 +1,76 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.abilities.effects.common.counter.MoveCountersTargetsEffect; +import mage.abilities.keyword.BountyAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.counters.CounterType; +import mage.target.common.TargetOpponentsCreaturePermanent; + +/** + * + * @author Styxo + */ +public class RumorMonger extends CardImpl { + + public RumorMonger(UUID ownerId) { + super(ownerId, 213, "Rumor Monger", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{B}{R}{G}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Arcona"); + this.subtype.add("Hunter"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // When Rumor Monger enters the battlefield, put a bounty counter on up to two target creatures an opponent controls. + Ability ability = new EntersBattlefieldTriggeredAbility(new AddCountersTargetEffect(CounterType.BOUNTY.createInstance())); + ability.addTarget(new TargetOpponentsCreaturePermanent(0, 2)); + this.addAbility(ability); + + // Bounty — Whenever a creature an opponent controls with a bounty counter on it dies, you may move a bounty counter from one target creature to another target creatute. + ability = new BountyAbility(new MoveCountersTargetsEffect(CounterType.BOUNTY, 1), false); + ability.addTarget(new TargetOpponentsCreaturePermanent(2)); + this.addAbility(ability); + } + + public RumorMonger(final RumorMonger card) { + super(card); + } + + @Override + public RumorMonger copy() { + return new RumorMonger(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/SabaccGame.java b/Mage.Sets/src/mage/sets/starwars/SabaccGame.java new file mode 100644 index 0000000000..ce45571524 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/SabaccGame.java @@ -0,0 +1,62 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class SabaccGame extends CardImpl { + + public SabaccGame(UUID ownerId) { + super(ownerId, 54, "Sabacc Game", Rarity.NA/*UNCOMMON*/, new CardType[]{CardType.SORCERY}, "{1}{U}"); + this.expansionSetCode = "SWS"; + + // Almost the same as unimplemented Mogg Assassin from Exodus + + /* + * Choose target permanent an opponent controls. That opponent choosers a permanent you control. + * Flip a coin. If you win the flip, gain control of the permanent you chose. + * If you lose the flip, your opponent gains control of the permanent they chose. + */ +} + + public SabaccGame(final SabaccGame card) { + super(card); + } + + @Override + public SabaccGame copy() { + return new SabaccGame(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/SalvageSquad.java b/Mage.Sets/src/mage/sets/starwars/SalvageSquad.java new file mode 100644 index 0000000000..055164a01f --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/SalvageSquad.java @@ -0,0 +1,68 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.effects.common.DoIfCostPaid; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterControlledArtifactPermanent; +import mage.target.common.TargetControlledPermanent; + +/** + * + * @author Styxo + */ +public class SalvageSquad extends CardImpl { + + public SalvageSquad(UUID ownerId) { + super(ownerId, 214, "Salvage Squad", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{W}{U}{B}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Jawa"); + this.subtype.add("Artificier"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // When you Salvage Squad enters the battlefied, you may sacrifice an artifcat. If you do, draw two cards. + this.addAbility(new EntersBattlefieldTriggeredAbility(new DoIfCostPaid(new DrawCardSourceControllerEffect(2), new SacrificeTargetCost(new TargetControlledPermanent(new FilterControlledArtifactPermanent()))))); + } + + public SalvageSquad(final SalvageSquad card) { + super(card); + } + + @Override + public SalvageSquad copy() { + return new SalvageSquad(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/SandTrooper.java b/Mage.Sets/src/mage/sets/starwars/SandTrooper.java new file mode 100644 index 0000000000..e477e9b53a --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/SandTrooper.java @@ -0,0 +1,76 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.abilities.keyword.VigilanceAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; + +/** + * + * @author Styxo + */ +public class SandTrooper extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Trooper creatures"); + + static { + filter.add(new SubtypePredicate("Trooper")); + } + + public SandTrooper(UUID ownerId) { + super(ownerId, 28, "Sand Trooper", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{W}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Human"); + this.subtype.add("Trooper"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Trooper creatures you control have vigilance. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(VigilanceAbility.getInstance(), Duration.WhileOnBattlefield, filter, false))); + + } + + public SandTrooper(final SandTrooper card) { + super(card); + } + + @Override + public SandTrooper copy() { + return new SandTrooper(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/SarlaccPit.java b/Mage.Sets/src/mage/sets/starwars/SarlaccPit.java new file mode 100644 index 0000000000..e6795e952a --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/SarlaccPit.java @@ -0,0 +1,93 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.BecomesMonstrousSourceTriggeredAbility; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.effects.common.continuous.LoseAbilitySourceEffect; +import mage.abilities.keyword.DeathtouchAbility; +import mage.abilities.keyword.DefenderAbility; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.abilities.keyword.HexproofAbility; +import mage.abilities.keyword.MonstrosityAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterControlledLandPermanent; +import mage.target.common.TargetControlledPermanent; + +/** + * + * @author Styxo + */ +public class SarlaccPit extends CardImpl { + + public SarlaccPit(UUID ownerId) { + super(ownerId, 173, "Sarlacc Pit", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{R}{G}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Beast"); + this.power = new MageInt(0); + this.toughness = new MageInt(4); + + // Defender + this.addAbility(DefenderAbility.getInstance()); + + // Hexproof + this.addAbility(HexproofAbility.getInstance()); + + // {R}{G}, Sacrifice a land: Monstrosity 1. + Ability ability = new MonstrosityAbility("{R}{G}", 1); + ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(new FilterControlledLandPermanent("a land")))); + this.addAbility(ability); + + // When Sarlacc Pit becomes monstrous, it loses hexproof and gains first strike and deathtouch. + ability = new BecomesMonstrousSourceTriggeredAbility(new LoseAbilitySourceEffect(HexproofAbility.getInstance())); + Effect effect = new GainAbilitySourceEffect(FirstStrikeAbility.getInstance()); + effect.setText("and gains first strike"); + ability.addEffect(effect); + effect = new GainAbilitySourceEffect(DeathtouchAbility.getInstance()); + effect.setText("and deathtouch"); + ability.addEffect(effect); + + this.addAbility(ability); + } + + public SarlaccPit(final SarlaccPit card) { + super(card); + } + + @Override + public SarlaccPit copy() { + return new SarlaccPit(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/ScoutThePerimeter.java b/Mage.Sets/src/mage/sets/starwars/ScoutThePerimeter.java new file mode 100644 index 0000000000..8b8b3e6bee --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/ScoutThePerimeter.java @@ -0,0 +1,70 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.counters.CounterType; +import mage.filter.common.FilterLandCard; +import mage.target.common.TargetCardInLibrary; +import mage.target.common.TargetOpponentsCreaturePermanent; + +/** + * + * @author Styxo + */ +public class ScoutThePerimeter extends CardImpl { + + public ScoutThePerimeter(UUID ownerId) { + super(ownerId, 153, "Scout the Perimeter", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{2}{G}"); + this.expansionSetCode = "SWS"; + + // Search your library for a land card, put it onto the battlefield tapped, then suffle your library. + this.getSpellAbility().addEffect(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(new FilterLandCard()), true, true)); + + // Put a bounty counter on up to one target creature an opponent controls. + Effect effect = new AddCountersTargetEffect(CounterType.BOUNTY.createInstance()); + effect.setText("Put a bounty counter on up to one target creature an opponent controls"); + this.getSpellAbility().addEffect(effect); + this.getSpellAbility().addTarget(new TargetOpponentsCreaturePermanent(0, 1)); + } + + public ScoutThePerimeter(final ScoutThePerimeter card) { + super(card); + } + + @Override + public ScoutThePerimeter copy() { + return new ScoutThePerimeter(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/ScoutTrooper.java b/Mage.Sets/src/mage/sets/starwars/ScoutTrooper.java new file mode 100644 index 0000000000..9ebfe33993 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/ScoutTrooper.java @@ -0,0 +1,76 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.continuous.BoostControlledEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; + +/** + * + * @author Styxo + */ +public class ScoutTrooper extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Trooper creatures"); + + static { + filter.add(new SubtypePredicate("Trooper")); + } + + public ScoutTrooper(UUID ownerId) { + super(ownerId, 154, "Scout Trooper", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{G}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Human"); + this.subtype.add("Trooper"); + this.subtype.add("Scout"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Trooper creatures you control get +1/+1. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, filter, false))); + + } + + public ScoutTrooper(final ScoutTrooper card) { + super(card); + } + + @Override + public ScoutTrooper copy() { + return new ScoutTrooper(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/SecurityDroid.java b/Mage.Sets/src/mage/sets/starwars/SecurityDroid.java new file mode 100644 index 0000000000..7d23511520 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/SecurityDroid.java @@ -0,0 +1,68 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.keyword.RepairAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.game.permanent.token.DroidToken; + +/** + * + * @author Styxo + */ +public class SecurityDroid extends CardImpl { + + public SecurityDroid(UUID ownerId) { + super(ownerId, 29, "Security Droid", Rarity.COMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{1}{W}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Droid"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // When Security Droid enters the battlefield, create a 1/1 colorless Droid creature token. + this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new DroidToken(), 1), false)); + + // Repair 3 + this.addAbility(new RepairAbility(3)); + } + + public SecurityDroid(final SecurityDroid card) { + super(card); + } + + @Override + public SecurityDroid copy() { + return new SecurityDroid(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/SenatorBailOrgana.java b/Mage.Sets/src/mage/sets/starwars/SenatorBailOrgana.java new file mode 100644 index 0000000000..8f04e07785 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/SenatorBailOrgana.java @@ -0,0 +1,75 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; +import mage.abilities.decorator.ConditionalContinuousEffect; +import mage.abilities.effects.common.continuous.BoostControlledEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterControlledCreaturePermanent; + +/** + * + * @author Styxo + */ +public class SenatorBailOrgana extends CardImpl { + + public SenatorBailOrgana(UUID ownerId) { + super(ownerId, 177, "Senator Bail Organa", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{G}{W}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Human"); + this.subtype.add("Advisor"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // As long as you control four or more creatures, creatures you control get +1/+1. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( + new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield), + new PermanentsOnTheBattlefieldCondition(new FilterControlledCreaturePermanent(), PermanentsOnTheBattlefieldCondition.CountType.MORE_THAN, 3), + "As long as you control four or more creatures, creatures you control get +1/+1") + )); + + } + + public SenatorBailOrgana(final SenatorBailOrgana card) { + super(card); + } + + @Override + public SenatorBailOrgana copy() { + return new SenatorBailOrgana(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/SenatorLottDod.java b/Mage.Sets/src/mage/sets/starwars/SenatorLottDod.java new file mode 100644 index 0000000000..e6b8ac2e7f --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/SenatorLottDod.java @@ -0,0 +1,167 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.Mode; +import mage.abilities.SpellAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.cost.CostModificationEffectImpl; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.CostModificationType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.Target; +import mage.util.CardUtil; + +/** + * + * @author Styxo + */ +public class SenatorLottDod extends CardImpl { + + public SenatorLottDod(UUID ownerId) { + super(ownerId, 167, "Senator Lott Dod", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{U}{B}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Neimoidian"); + this.subtype.add("Advisor"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Spells your opponents cast that target you cost {2} more to cast. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SenatorLottDodSpellsTargetingYouCostReductionEffect())); + + // Spell your opponents cast that target a creature you control cost {1} more to cast. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SenatorLottDodSpellsTargetingCreatureCostReductionEffect())); + + } + + public SenatorLottDod(final SenatorLottDod card) { + super(card); + } + + @Override + public SenatorLottDod copy() { + return new SenatorLottDod(this); + } +} + +class SenatorLottDodSpellsTargetingCreatureCostReductionEffect extends CostModificationEffectImpl { + + public SenatorLottDodSpellsTargetingCreatureCostReductionEffect() { + super(Duration.WhileOnBattlefield, Outcome.Benefit, CostModificationType.INCREASE_COST); + this.staticText = "Spell your opponents cast that target a creature you control cost {1} more to cast."; + } + + protected SenatorLottDodSpellsTargetingCreatureCostReductionEffect(SenatorLottDodSpellsTargetingCreatureCostReductionEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source, Ability abilityToModify) { + CardUtil.increaseCost(abilityToModify, 1); + return true; + } + + @Override + public boolean applies(Ability abilityToModify, Ability source, Game game) { + if (abilityToModify instanceof SpellAbility) { + if (game.getOpponents(source.getControllerId()).contains(abilityToModify.getControllerId())) { + for (UUID modeId : abilityToModify.getModes().getSelectedModes()) { + Mode mode = abilityToModify.getModes().get(modeId); + for (Target target : mode.getTargets()) { + for (UUID targetUUID : target.getTargets()) { + Permanent permanent = game.getPermanent(targetUUID); + if (permanent != null && permanent.getControllerId().equals(source.getControllerId())) { + return true; + } + } + } + } + } + } + return false; + } + + @Override + public SenatorLottDodSpellsTargetingCreatureCostReductionEffect copy() { + return new SenatorLottDodSpellsTargetingCreatureCostReductionEffect(this); + } +} + +class SenatorLottDodSpellsTargetingYouCostReductionEffect extends CostModificationEffectImpl { + + public SenatorLottDodSpellsTargetingYouCostReductionEffect() { + super(Duration.WhileOnBattlefield, Outcome.Benefit, CostModificationType.INCREASE_COST); + this.staticText = "Spells your opponents cast that target you cost {2} more to cast."; + } + + protected SenatorLottDodSpellsTargetingYouCostReductionEffect(SenatorLottDodSpellsTargetingYouCostReductionEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source, Ability abilityToModify) { + CardUtil.increaseCost(abilityToModify, 2); + return true; + } + + @Override + public boolean applies(Ability abilityToModify, Ability source, Game game) { + if (abilityToModify instanceof SpellAbility) { + if (game.getOpponents(source.getControllerId()).contains(abilityToModify.getControllerId())) { + for (UUID modeId : abilityToModify.getModes().getSelectedModes()) { + Mode mode = abilityToModify.getModes().get(modeId); + for (Target target : mode.getTargets()) { + for (UUID targetUUID : target.getTargets()) { + Player player = game.getPlayer(targetUUID); + if (player != null && player.getId().equals(source.getControllerId())) { + return true; + } + } + } + } + } + } + return false; + } + + @Override + public SenatorLottDodSpellsTargetingYouCostReductionEffect copy() { + return new SenatorLottDodSpellsTargetingYouCostReductionEffect(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/SenatorOnacondaFarr.java b/Mage.Sets/src/mage/sets/starwars/SenatorOnacondaFarr.java new file mode 100644 index 0000000000..c61bdb185b --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/SenatorOnacondaFarr.java @@ -0,0 +1,71 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfCombatTriggeredAbility; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.target.common.TargetControlledCreaturePermanent; + +/** + * + * @author Styxo + */ +public class SenatorOnacondaFarr extends CardImpl { + + public SenatorOnacondaFarr(UUID ownerId) { + super(ownerId, 174, "Senator Onaconda Farr", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{R}{G}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Rodian"); + this.subtype.add("Advisor"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // At the beggining of each combat, target creature you control gets +1/+1 until end of turn. + Ability ability = new BeginningOfCombatTriggeredAbility(new BoostTargetEffect(1, 1, Duration.EndOfTurn), TargetController.ANY, false); + ability.addTarget(new TargetControlledCreaturePermanent()); + this.addAbility(ability); + } + + public SenatorOnacondaFarr(final SenatorOnacondaFarr card) { + super(card); + } + + @Override + public SenatorOnacondaFarr copy() { + return new SenatorOnacondaFarr(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/SenatorPadmeAmidala.java b/Mage.Sets/src/mage/sets/starwars/SenatorPadmeAmidala.java new file mode 100644 index 0000000000..042602bb55 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/SenatorPadmeAmidala.java @@ -0,0 +1,66 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.DrawCardControllerTriggeredAbility; +import mage.abilities.effects.common.GainLifeEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class SenatorPadmeAmidala extends CardImpl { + + public SenatorPadmeAmidala(UUID ownerId) { + super(ownerId, 164, "Senator Padme Amidala", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{W}{U}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Human"); + this.subtype.add("Advisor"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Whenever you draw a card, you gain 1 life. + this.addAbility(new DrawCardControllerTriggeredAbility(new GainLifeEffect(1), false)); + + } + + public SenatorPadmeAmidala(final SenatorPadmeAmidala card) { + super(card); + } + + @Override + public SenatorPadmeAmidala copy() { + return new SenatorPadmeAmidala(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/SenatorPasselArgente.java b/Mage.Sets/src/mage/sets/starwars/SenatorPasselArgente.java new file mode 100644 index 0000000000..a3a6f1952b --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/SenatorPasselArgente.java @@ -0,0 +1,65 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.DiesCreatureTriggeredAbility; +import mage.abilities.effects.common.LoseLifeOpponentsEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class SenatorPasselArgente extends CardImpl { + + public SenatorPasselArgente(UUID ownerId) { + super(ownerId, 171, "Senator Passel Argente", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{B}{R}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Koorivar"); + this.subtype.add("Advisor"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Whenever a creature dies, each opponent loses 1 life. + this.addAbility(new DiesCreatureTriggeredAbility(new LoseLifeOpponentsEffect(1), false)); + } + + public SenatorPasselArgente(final SenatorPasselArgente card) { + super(card); + } + + @Override + public SenatorPasselArgente copy() { + return new SenatorPasselArgente(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/ShaakHerd.java b/Mage.Sets/src/mage/sets/starwars/ShaakHerd.java new file mode 100644 index 0000000000..bbf5c08455 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/ShaakHerd.java @@ -0,0 +1,67 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.DiesTriggeredAbility; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.common.TargetCardInYourGraveyard; + +/** + * + * @author Styxo + */ +public class ShaakHerd extends CardImpl { + + public ShaakHerd(UUID ownerId) { + super(ownerId, 155, "Shaak Herd", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{G}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Beast"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // When Shaak Herd dies, you may return another target creature card from your graveyard to your hand. + Ability ability = new DiesTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect(), true); + ability.addTarget(new TargetCardInYourGraveyard()); + this.addAbility(ability); + } + + public ShaakHerd(final ShaakHerd card) { + super(card); + } + + @Override + public ShaakHerd copy() { + return new ShaakHerd(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/ShadowTrooper.java b/Mage.Sets/src/mage/sets/starwars/ShadowTrooper.java new file mode 100644 index 0000000000..a0e1c3cb55 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/ShadowTrooper.java @@ -0,0 +1,79 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.continuous.CastAsThoughItHadFlashAllEffect; +import mage.abilities.keyword.FlashAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreatureCard; +import mage.filter.predicate.mageobject.SubtypePredicate; + +/** + * + * @author Styxo + */ +public class ShadowTrooper extends CardImpl { + + private static final FilterCreatureCard filter = new FilterCreatureCard("Trooper creatures"); + + static { + filter.add(new SubtypePredicate("Trooper")); + } + + public ShadowTrooper(UUID ownerId) { + super(ownerId, 55, "Shadow Trooper", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{U}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Human"); + this.subtype.add("Trooper"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Flash + this.addAbility(FlashAbility.getInstance()); + + // You may cast Trooper creature cards as though they had flash. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CastAsThoughItHadFlashAllEffect(Duration.WhileOnBattlefield, filter))); + + } + + public ShadowTrooper(final ShadowTrooper card) { + super(card); + } + + @Override + public ShadowTrooper copy() { + return new ShadowTrooper(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/ShockTrooper.java b/Mage.Sets/src/mage/sets/starwars/ShockTrooper.java new file mode 100644 index 0000000000..f4ec26a4e0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/ShockTrooper.java @@ -0,0 +1,75 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.continuous.BoostControlledEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; + +/** + * + * @author Styxo + */ +public class ShockTrooper extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Trooper creatures"); + + static { + filter.add(new SubtypePredicate("Trooper")); + } + + public ShockTrooper(UUID ownerId) { + super(ownerId, 120, "Shock Trooper", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{R}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Human"); + this.subtype.add("Trooper"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Trooper creatures you control get +2/+0. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(2, 0, Duration.WhileOnBattlefield, filter, false))); + + } + + public ShockTrooper(final ShockTrooper card) { + super(card); + } + + @Override + public ShockTrooper copy() { + return new ShockTrooper(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/ShowOfDominance.java b/Mage.Sets/src/mage/sets/starwars/ShowOfDominance.java new file mode 100644 index 0000000000..c042a2430c --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/ShowOfDominance.java @@ -0,0 +1,137 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.effects.ContinuousEffect; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.counters.CounterType; +import mage.filter.Filter; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.PowerPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.Target; +import mage.target.TargetPermanent; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author Styxo + */ +public class ShowOfDominance extends CardImpl { + + public ShowOfDominance(UUID ownerId) { + super(ownerId, 156, "Show of Dominance", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{3}{G}"); + this.expansionSetCode = "SWS"; + + // Put four +1/+1 counters on the creature with the highest power. If two or more creatures are tied for the greatest power, you choose one of them. That creature gains trample. + this.getSpellAbility().addEffect(new ShowOfDominanceEffect()); + } + + public ShowOfDominance(final ShowOfDominance card) { + super(card); + } + + @Override + public ShowOfDominance copy() { + return new ShowOfDominance(this); + } +} + +class ShowOfDominanceEffect extends OneShotEffect { + + public ShowOfDominanceEffect() { + super(Outcome.BoostCreature); + this.staticText = "Put four +1/+1 counters on the creature with the highest power. If two or more creatures are tied for the greatest power, you choose one of them. That creature gains trample until end of turn"; + } + + public ShowOfDominanceEffect(final ShowOfDominanceEffect effect) { + super(effect); + } + + @Override + public ShowOfDominanceEffect copy() { + return new ShowOfDominanceEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + int highestPower = Integer.MIN_VALUE; + Permanent selectedCreature = null; + for (Permanent permanent : game.getBattlefield().getActivePermanents(new FilterCreaturePermanent(), controller.getId(), game)) { + if (highestPower < permanent.getPower().getValue()) { + highestPower = permanent.getPower().getValue(); + selectedCreature = permanent; + } else if (highestPower == permanent.getPower().getValue()) { + highestPower = permanent.getToughness().getValue(); + selectedCreature = null; + } + } + if (highestPower != Integer.MIN_VALUE) { + if (selectedCreature == null) { + FilterPermanent filter = new FilterCreaturePermanent("creature with power " + highestPower); + filter.add(new PowerPredicate(Filter.ComparisonType.Equal, highestPower)); + Target target = new TargetPermanent(1, 1, filter, true); + if (controller.chooseTarget(outcome, target, source, game)) { + selectedCreature = game.getPermanent(target.getFirstTarget()); + } + } + if (selectedCreature != null) { + FixedTarget target = new FixedTarget(selectedCreature.getId()); + + Effect effect = new AddCountersTargetEffect(CounterType.P1P1.createInstance(4)); + effect.setTargetPointer(target); + effect.apply(game, source); + + ContinuousEffect continuousEffect = new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn); + continuousEffect.setTargetPointer(target); + game.addEffect(continuousEffect, source); + return true; + } + } + return true; + } + return false; + } + +} diff --git a/Mage.Sets/src/mage/sets/starwars/SithAssassin.java b/Mage.Sets/src/mage/sets/starwars/SithAssassin.java new file mode 100644 index 0000000000..402d667975 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/SithAssassin.java @@ -0,0 +1,84 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.ObjectColor; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.condition.common.HateCondition; +import mage.abilities.decorator.ConditionalTriggeredAbility; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.ColorPredicate; +import mage.target.common.TargetCreaturePermanent; +import mage.watchers.common.NonCombatDamageWatcher; + +/** + * + * @author Styxo + */ +public class SithAssassin extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("nonblack creature"); + + static { + filter.add(Predicates.not(new ColorPredicate(ObjectColor.BLACK))); + } + + public SithAssassin(UUID ownerId) { + super(ownerId, 86, "Sith Assassin", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{B}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Pureblood"); + this.subtype.add("Sith"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Hate — When Sith Assassin enters the battlefield, if opponent lost life from source other than combat damage this turn, destroy target nonblack creature. + Ability ability = new ConditionalTriggeredAbility( + new EntersBattlefieldTriggeredAbility(new DestroyTargetEffect()), + HateCondition.getInstance(), + "Hate - When {this} enters the battlefield, if an opponent lost life from a source other than combat damage this turn, destroy target nonblack creature."); + ability.addTarget(new TargetCreaturePermanent(filter)); + this.addAbility(ability, new NonCombatDamageWatcher()); + } + + public SithAssassin(final SithAssassin card) { + super(card); + } + + @Override + public SithAssassin copy() { + return new SithAssassin(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/SithCitadel.java b/Mage.Sets/src/mage/sets/starwars/SithCitadel.java new file mode 100644 index 0000000000..4f06d13737 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/SithCitadel.java @@ -0,0 +1,71 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.Mana; +import mage.abilities.common.EntersBattlefieldTappedAbility; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.AddManaToManaPoolSourceControllerEffect; +import mage.abilities.mana.BlueManaAbility; +import mage.abilities.mana.RedManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class SithCitadel extends CardImpl { + + public SithCitadel(UUID ownerId) { + super(ownerId, 249, "Sith Citadel", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "SWS"; + + // Sith Citadel enters the battlefield tapped. + this.addAbility(new EntersBattlefieldTappedAbility()); + + // When Sith Citadel enters the battlefield , add {B} to your mana pool. + this.addAbility(new EntersBattlefieldTriggeredAbility(new AddManaToManaPoolSourceControllerEffect(new Mana(0, 0, 0, 0, 1, 0, 0, 0)))); + + // {T}: Add {U} or {R} to you mana pool. + this.addAbility(new BlueManaAbility()); + this.addAbility(new RedManaAbility()); + + } + + public SithCitadel(final SithCitadel card) { + super(card); + } + + @Override + public SithCitadel copy() { + return new SithCitadel(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/SithEvoker.java b/Mage.Sets/src/mage/sets/starwars/SithEvoker.java new file mode 100644 index 0000000000..f74f079945 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/SithEvoker.java @@ -0,0 +1,146 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.HashSet; +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.GainLifeEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.choices.Choice; +import mage.choices.ChoiceImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.common.TargetControlledCreaturePermanent; + +/** + * + * @author Styxo + */ +public class SithEvoker extends CardImpl { + + public SithEvoker(UUID ownerId) { + super(ownerId, 87, "Sith Evoker", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{B}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Chiss"); + this.subtype.add("Sith"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // {T}, {2}, Sacrifice a creature: You gain life equal to that creature's power or toughness. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SithEvokerEffect(), new ManaCostsImpl("{2}")); + ability.addCost(new TapSourceCost()); + ability.addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(new FilterControlledCreaturePermanent("a creature")))); + + this.addAbility(ability); + } + + public SithEvoker(final SithEvoker card) { + super(card); + } + + @Override + public SithEvoker copy() { + return new SithEvoker(this); + } +} + +class SithEvokerEffect extends OneShotEffect { + + private static final HashSet choices = new HashSet<>(); + + static { + choices.add("Gain life equal to creature's power"); + choices.add("Gain life equal to creature's toughness"); + } + + public SithEvokerEffect() { + super(Outcome.GainLife); + staticText = "You gain life equal to that creature's power or toughness"; + } + + public SithEvokerEffect(final SithEvokerEffect effect) { + super(effect); + } + + @Override + public SithEvokerEffect copy() { + return new SithEvokerEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + Choice choice = new ChoiceImpl(true); + choice.setMessage("Choose mode"); + choice.setChoices(choices); + while (!controller.choose(outcome, choice, game)) { + if (controller.canRespond()) { + return false; + } + } + + Card sourceCard = game.getCard(source.getSourceId()); + if (sourceCard != null) { + for (Object cost : source.getCosts()) { + if (cost instanceof SacrificeTargetCost) { + Permanent p = (Permanent) game.getLastKnownInformation(((SacrificeTargetCost) cost).getPermanents().get(0).getId(), Zone.BATTLEFIELD); + if (p != null) { + String chosen = choice.getChoice(); + switch (chosen) { + case "Gain life equal to creature's power": + new GainLifeEffect(p.getPower().getValue()).apply(game, source); + break; + default: //"Gain life equal to creature's toughness" + new GainLifeEffect(p.getToughness().getValue()).apply(game, source); + break; + } + return true; + } + } + } + } + + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/SithHolocron.java b/Mage.Sets/src/mage/sets/starwars/SithHolocron.java new file mode 100644 index 0000000000..066db4d85c --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/SithHolocron.java @@ -0,0 +1,95 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.Cost; +import mage.abilities.costs.common.RemoveCountersSourceCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.mana.BlackManaAbility; +import mage.abilities.mana.BlueManaAbility; +import mage.abilities.mana.RedManaAbility; +import mage.abilities.mana.SimpleManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; + +/** + * + * @author Styxo + */ +public class SithHolocron extends CardImpl { + + public SithHolocron(UUID ownerId) { + super(ownerId, 236, "Sith Holocron", Rarity.COMMON, new CardType[]{CardType.ARTIFACT}, "{2}"); + this.expansionSetCode = "SWS"; + + // {T}: Put a charge counter on Sith Holocron. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.CHARGE.createInstance(1)), new TapSourceCost())); + + // {T}, Remove a charge counter from Sith Holocron: Add {U}, {B} or {R} to your mana pool. + Cost cost = new RemoveCountersSourceCost(CounterType.CHARGE.createInstance(1)); + Ability ability = new BlueManaAbility(); + ability.addCost(cost); + this.addAbility(ability); + + ability = new BlackManaAbility(); + ability.addCost(cost); + this.addAbility(ability); + + ability = new RedManaAbility(); + ability.addCost(cost); + this.addAbility(ability); + + // {T}, Remove two charge counters from Sith Holocron: Add UB or BR to your mana pool. + cost = new RemoveCountersSourceCost(CounterType.CHARGE.createInstance(2)); + + ability = new SimpleManaAbility(Zone.BATTLEFIELD, new Mana(0, 0, 1, 0, 1, 0, 0, 0), new TapSourceCost()); + ability.addCost(cost); + this.addAbility(ability); + + ability = new SimpleManaAbility(Zone.BATTLEFIELD, new Mana(1, 0, 0, 0, 1, 0, 0, 0), new TapSourceCost()); + ability.addCost(cost); + this.addAbility(ability); + } + + public SithHolocron(final SithHolocron card) { + super(card); + } + + @Override + public SithHolocron copy() { + return new SithHolocron(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/SithInquisitor.java b/Mage.Sets/src/mage/sets/starwars/SithInquisitor.java new file mode 100644 index 0000000000..ef25ce0676 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/SithInquisitor.java @@ -0,0 +1,74 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.condition.common.HateCondition; +import mage.abilities.decorator.ConditionalTriggeredAbility; +import mage.abilities.effects.common.discard.DiscardTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.common.TargetOpponent; +import mage.watchers.common.NonCombatDamageWatcher; + +/** + * + * @author Styxo + */ +public class SithInquisitor extends CardImpl { + + public SithInquisitor(UUID ownerId) { + super(ownerId, 88, "Sith Inquisitor", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{B}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Human"); + this.subtype.add("Sith"); + this.power = new MageInt(5); + this.toughness = new MageInt(1); + + // Hate — When Sith Assassin enters the battlefield, if opponent lost life from source other than combat damage this turn, target player discard a card at random. + Ability ability = new ConditionalTriggeredAbility( + new EntersBattlefieldTriggeredAbility(new DiscardTargetEffect(1, true)), + HateCondition.getInstance(), + "Hate — When {this} enters the battlefield, if an opponent lost life from a source other then combat damage this turn, target player discard a card at random."); + ability.addTarget(new TargetOpponent()); + this.addAbility(ability, new NonCombatDamageWatcher()); + } + + public SithInquisitor(final SithInquisitor card) { + super(card); + } + + @Override + public SithInquisitor copy() { + return new SithInquisitor(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/SithLord.java b/Mage.Sets/src/mage/sets/starwars/SithLord.java new file mode 100644 index 0000000000..1def778cb5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/SithLord.java @@ -0,0 +1,106 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.dynamicvalue.common.OpponentsLostLifeCount; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.keyword.MenaceAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.counters.CounterType; +import mage.game.Game; +import mage.game.permanent.Permanent; + +/** + * + * @author Styxo + */ +public class SithLord extends CardImpl { + + private static final String rule = "with X +1/+1 counters on it, where X is the total life lost by your opponents this turn"; + + public SithLord(UUID ownerId) { + super(ownerId, 89, "Sith Lord", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{2}{B}{B}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Human"); + this.subtype.add("Sith"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Menace + this.addAbility(new MenaceAbility()); + + // Sith Lord enters the battlefield with X +1/+1 counters on it, where X is the total life lost by your opponents this turn. + this.addAbility(new EntersBattlefieldAbility(new SithLordEffect(), rule)); + } + + public SithLord(final SithLord card) { + super(card); + } + + @Override + public SithLord copy() { + return new SithLord(this); + } + + class SithLordEffect extends OneShotEffect { + + SithLordEffect() { + super(Outcome.BoostCreature); + } + + SithLordEffect(final SithLordEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = game.getPermanentEntering(source.getSourceId()); + if (permanent != null) { + int oll = new OpponentsLostLifeCount().calculate(game, source, this); + if (oll > 0) { + permanent.addCounters(CounterType.P1P1.createInstance(oll), game); + } + return true; + } + return false; + } + + @Override + public SithLordEffect copy() { + return new SithLordEffect(this); + } + } + +} diff --git a/Mage.Sets/src/mage/sets/starwars/SithMagic.java b/Mage.Sets/src/mage/sets/starwars/SithMagic.java new file mode 100644 index 0000000000..15271aaf38 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/SithMagic.java @@ -0,0 +1,184 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.DelayedTriggeredAbility; +import mage.abilities.TriggeredAbility; +import mage.abilities.common.BeginningOfCombatTriggeredAbility; +import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; +import mage.abilities.condition.common.HateCondition; +import mage.abilities.decorator.ConditionalTriggeredAbility; +import mage.abilities.effects.ContinuousEffect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.ReplacementEffectImpl; +import mage.abilities.effects.common.ExileTargetEffect; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.keyword.HasteAbility; +import mage.abilities.keyword.LifelinkAbility; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.common.FilterCreatureCard; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.ZoneChangeEvent; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.common.TargetCardInGraveyard; +import mage.target.targetpointer.FixedTarget; +import mage.watchers.common.NonCombatDamageWatcher; + +/** + * + * @author Styxo + */ +public class SithMagic extends CardImpl { + + public SithMagic(UUID ownerId) { + super(ownerId, 215, "Sith Magic", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{U}{B}{R}"); + this.expansionSetCode = "SWS"; + + // Hate — At the beggining of each combat, if opponent lost life from a source other than combat damage this turn, you may return target card from a graveyard to the battlefield under your control. It gains lifelink and haste. Exile it at the beginning of the next end step or if it would leave the battlefield. + TriggeredAbility triggeredAbility = new BeginningOfCombatTriggeredAbility(new SithMagicEffect(), TargetController.ANY, true); + triggeredAbility.addEffect(new SithMagicReplacementEffect()); + Ability ability = new ConditionalTriggeredAbility( + triggeredAbility, + HateCondition.getInstance(), + "Hate — At the beggining of each combat, if opponent lost life from a source other than combat damage this turn, you may return target card from a graveyard to the battlefield under your control. It gains lifelink and haste. Exile it at the beginning of the next end step or if it would leave the battlefield."); + ability.addTarget(new TargetCardInGraveyard(new FilterCreatureCard())); + this.addAbility(ability, new NonCombatDamageWatcher()); + } + + public SithMagic(final SithMagic card) { + super(card); + } + + @Override + public SithMagic copy() { + return new SithMagic(this); + } +} + +class SithMagicEffect extends OneShotEffect { + + public SithMagicEffect() { + super(Outcome.PutCreatureInPlay); + staticText = "return target card from a graveyard to the battlefield under your control. It gains lifelink and haste. Exile it at the beginning of the next end step or if it would leave the battlefield"; + } + + public SithMagicEffect(final SithMagicEffect effect) { + super(effect); + } + + @Override + public SithMagicEffect copy() { + return new SithMagicEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Card card = game.getCard(this.getTargetPointer().getFirst(game, source)); + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null && card != null) { + if (controller.moveCards(card, Zone.BATTLEFIELD, source, game)) { + Permanent creature = game.getPermanent(card.getId()); + if (creature != null) { + // gains haste + ContinuousEffect effect = new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.Custom); + effect.setTargetPointer(new FixedTarget(creature, game)); + game.addEffect(effect, source); + // gains lifelink + effect = new GainAbilityTargetEffect(LifelinkAbility.getInstance(), Duration.Custom); + effect.setTargetPointer(new FixedTarget(creature, game)); + game.addEffect(effect, source); + // Exile at begin of next end step + ExileTargetEffect exileEffect = new ExileTargetEffect(null, null, Zone.BATTLEFIELD); + exileEffect.setTargetPointer(new FixedTarget(creature, game)); + DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect); + game.addDelayedTriggeredAbility(delayedAbility, source); + } + } + return true; + } + return false; + } +} + +class SithMagicReplacementEffect extends ReplacementEffectImpl { + + SithMagicReplacementEffect() { + super(Duration.EndOfTurn, Outcome.Exile); + staticText = "or if it would leave the battlefield"; + } + + SithMagicReplacementEffect(final SithMagicReplacementEffect effect) { + super(effect); + } + + @Override + public SithMagicReplacementEffect copy() { + return new SithMagicReplacementEffect(this); + } + + @Override + public boolean replaceEvent(GameEvent event, Ability source, Game game) { + Permanent permanent = game.getPermanent(source.getFirstTarget()); + Player controller = game.getPlayer(source.getControllerId()); + if (permanent != null && controller != null) { + controller.moveCardToExileWithInfo(permanent, null, null, source.getSourceId(), game, Zone.BATTLEFIELD, true); + } + return true; + } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.ZONE_CHANGE; + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + if (event.getTargetId().equals(source.getFirstTarget()) + && ((ZoneChangeEvent) event).getFromZone().equals(Zone.BATTLEFIELD) + && !((ZoneChangeEvent) event).getToZone().equals(Zone.EXILED)) { + return true; + } + return false; + } + + @Override + public boolean apply(Game game, Ability source) { + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/SithManipulator.java b/Mage.Sets/src/mage/sets/starwars/SithManipulator.java new file mode 100644 index 0000000000..3d0dc7950a --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/SithManipulator.java @@ -0,0 +1,85 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.condition.InvertCondition; +import mage.abilities.condition.common.HateCondition; +import mage.abilities.decorator.ConditionalTriggeredAbility; +import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnToLibraryPermanentEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.common.TargetCreaturePermanent; +import mage.watchers.common.NonCombatDamageWatcher; + +/** + * + * @author Styxo + */ +public class SithManipulator extends CardImpl { + + public SithManipulator(UUID ownerId) { + super(ownerId, 56, "Sith Manipulator", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{U}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Human"); + this.subtype.add("Sith"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // When Sith Manipulator enters the battlefield, return target creature to its owner's hand. + Ability ability = new ConditionalTriggeredAbility( + new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect()), + new InvertCondition(HateCondition.getInstance()), + "When Sith Manipulator enters the battlefield, return target creature to its owner's hand"); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability, new NonCombatDamageWatcher()); + + // Hate — If opponent lost life from source other than combat damage this turn, put that card on top of its owner's library instead. + ability = new ConditionalTriggeredAbility( + new EntersBattlefieldTriggeredAbility(new ReturnToLibraryPermanentEffect(true)), + HateCondition.getInstance(), + "Hate — If opponent lost life from source other than combat damage this turn, put that card on top of its owner's library instead"); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability, new NonCombatDamageWatcher()); + + } + + public SithManipulator(final SithManipulator card) { + super(card); + } + + @Override + public SithManipulator copy() { + return new SithManipulator(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/SithMarauder.java b/Mage.Sets/src/mage/sets/starwars/SithMarauder.java new file mode 100644 index 0000000000..fec99e871b --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/SithMarauder.java @@ -0,0 +1,74 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.condition.common.HateCondition; +import mage.abilities.decorator.ConditionalTriggeredAbility; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.common.TargetCreatureOrPlayer; +import mage.watchers.common.NonCombatDamageWatcher; + +/** + * + * @author Styxo + */ +public class SithMarauder extends CardImpl { + + public SithMarauder(UUID ownerId) { + super(ownerId, 121, "Sith Marauder", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{R}{R}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Human"); + this.subtype.add("Sith"); + this.power = new MageInt(5); + this.toughness = new MageInt(4); + + // Hate — When Sith Marauder enters the battlefield, if opponent lost life from source other than combat damage this turn, Sith Marauder deals 3 damage to target creature or player. + Ability ability = new ConditionalTriggeredAbility( + new EntersBattlefieldTriggeredAbility(new DamageTargetEffect(3)), + HateCondition.getInstance(), + "Hate — When {this} enters the battlefield, if an opponent lost life from a source other than combat damage this turn, {this} deals 3 damage to target creature or player"); + ability.addTarget(new TargetCreatureOrPlayer()); + this.addAbility(ability, new NonCombatDamageWatcher()); + } + + public SithMarauder(final SithMarauder card) { + super(card); + } + + @Override + public SithMarauder copy() { + return new SithMarauder(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/SithMindseer.java b/Mage.Sets/src/mage/sets/starwars/SithMindseer.java new file mode 100644 index 0000000000..24ad4377e3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/SithMindseer.java @@ -0,0 +1,76 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.condition.common.HateCondition; +import mage.abilities.decorator.ConditionalTriggeredAbility; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.continuous.GainControlTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.target.common.TargetCreaturePermanent; +import mage.watchers.common.NonCombatDamageWatcher; + +/** + * + * @author Styxo + */ +public class SithMindseer extends CardImpl { + + public SithMindseer(UUID ownerId) { + super(ownerId, 216, "Sith Mindseer", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{U}{B}{R}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Human"); + this.subtype.add("Sith"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Hate — When Sith Mindseer enters the battlefield, if an opponent loses life from a source other than combat damage, gain control of target creature for as long as Sith Mindseer remains on the battlefield. + Ability ability = new ConditionalTriggeredAbility( + new EntersBattlefieldTriggeredAbility(new GainControlTargetEffect(Duration.WhileOnBattlefield)), + HateCondition.getInstance(), + "Hate — When Sith Mindseer enters the battlefield, if an opponent loses life from a source other than combat damage, gain control of target creature for as long as Sith Mindseer remains on the battlefield."); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability, new NonCombatDamageWatcher()); + } + + public SithMindseer(final SithMindseer card) { + super(card); + } + + @Override + public SithMindseer copy() { + return new SithMindseer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/SithRavager.java b/Mage.Sets/src/mage/sets/starwars/SithRavager.java new file mode 100644 index 0000000000..401cea1e3f --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/SithRavager.java @@ -0,0 +1,118 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.keyword.HasteAbility; +import mage.abilities.keyword.TrampleAbility; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.DamagedPlayerEvent; +import mage.game.events.GameEvent; + +/** + * + * @author Styxo + */ +public class SithRavager extends CardImpl { + + public SithRavager(UUID ownerId) { + super(ownerId, 122, "Sith Ravager", Rarity.NA/*COMMON*/, new CardType[]{CardType.CREATURE}, "{3}{R}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Human"); + this.subtype.add("Sith"); + this.power = new MageInt(4); + this.toughness = new MageInt(2); + + // Hate — Whenever an opponent loses life from a source other than combat damage, Sith Ravager gains haste and trample until end of turn. + this.addAbility(new LostNonCombatLifeTriggeredAbility()); + } + + public SithRavager(final SithRavager card) { + super(card); + } + + @Override + public SithRavager copy() { + return new SithRavager(this); + } + + public class LostNonCombatLifeTriggeredAbility extends TriggeredAbilityImpl { + + public LostNonCombatLifeTriggeredAbility() { + super(Zone.BATTLEFIELD, new GainAbilitySourceEffect(HasteAbility.getInstance(), Duration.EndOfTurn), false); + addEffect(new GainAbilitySourceEffect(TrampleAbility.getInstance(), Duration.EndOfTurn)); + } + + public LostNonCombatLifeTriggeredAbility(final LostNonCombatLifeTriggeredAbility ability) { + super(ability); + } + + @Override + public LostNonCombatLifeTriggeredAbility copy() { + return new LostNonCombatLifeTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.DAMAGED_PLAYER + || event.getType() == GameEvent.EventType.LOST_LIFE; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + // ON DAMAGE TRIGGER TWICE + if (event.getType() == GameEvent.EventType.LOST_LIFE) { + game.informPlayers("LOST LIFE TRIGGER"); + } + if (event.getType() == GameEvent.EventType.DAMAGED_PLAYER) { + game.informPlayers("DAMAGED PLAYER TRIGGER " + ((DamagedPlayerEvent) event).isCombatDamage()); + } + + if (event.getType() == GameEvent.EventType.DAMAGED_PLAYER) { + return !((DamagedPlayerEvent) event).isCombatDamage() && game.getOpponents(game.getControllerId(sourceId)).contains(event.getPlayerId()); + } else if (event.getType() == GameEvent.EventType.LOST_LIFE) { + return game.getOpponents(game.getControllerId(sourceId)).contains(event.getPlayerId()); + } + return false; + } + + @Override + public String getRule() { + return "Hate — Whenever an opponent loses life from a source other than combat damage, Sith Ravager gains haste and trample until end of turn"; + } + + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/SithRuins.java b/Mage.Sets/src/mage/sets/starwars/SithRuins.java new file mode 100644 index 0000000000..49a99f322d --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/SithRuins.java @@ -0,0 +1,105 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.ArrayList; +import java.util.UUID; +import mage.MageObject; +import mage.abilities.ActivatedAbilityImpl; +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect; +import mage.abilities.mana.ColorlessManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.filter.predicate.Predicate; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.filter.predicate.mageobject.SupertypePredicate; +import mage.target.common.TargetCardInLibrary; + +/** + * + * @author Styxo + */ +public class SithRuins extends CardImpl { + + public SithRuins(UUID ownerId) { + super(ownerId, 250, "Sith Ruins", Rarity.COMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "SWS"; + + // {T}: Add {C} to your manapool. + this.addAbility(new ColorlessManaAbility()); + + // {T}, Sacrifice Sith Ruins: Search your library for a basic Island, Swamp or Mountain card and put it onto the battlefield tapped. Then shuffle your library. + this.addAbility(new SithRuinsAbility()); + + } + + public SithRuins(final SithRuins card) { + super(card); + } + + @Override + public SithRuins copy() { + return new SithRuins(this); + } + + public class SithRuinsAbility extends ActivatedAbilityImpl { + + public SithRuinsAbility(SithRuinsAbility ability) { + super(ability); + } + + public SithRuinsAbility() { + super(Zone.BATTLEFIELD, null); + addCost(new TapSourceCost()); + addCost(new SacrificeSourceCost()); + FilterCard filter = new FilterCard("basic Island, Swamp or Mountain"); + filter.add(new CardTypePredicate(CardType.LAND)); + ArrayList> subtypePredicates = new ArrayList<>(); + subtypePredicates.add(new SubtypePredicate("Swamp")); + subtypePredicates.add(new SubtypePredicate("Mountain")); + subtypePredicates.add(new SubtypePredicate("Island")); + filter.add(Predicates.or(subtypePredicates)); + filter.add(new SupertypePredicate("Basic")); + TargetCardInLibrary target = new TargetCardInLibrary(filter); + addEffect(new SearchLibraryPutInPlayEffect(target, true, true, Outcome.PutLandInPlay)); + } + + @Override + public SithRuinsAbility copy() { + return new SithRuinsAbility(this); + } + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/SithSorcerer.java b/Mage.Sets/src/mage/sets/starwars/SithSorcerer.java new file mode 100644 index 0000000000..1e36b75d56 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/SithSorcerer.java @@ -0,0 +1,77 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.condition.common.HateCondition; +import mage.abilities.decorator.ConditionalTriggeredAbility; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.keyword.ScryEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.watchers.common.NonCombatDamageWatcher; + +/** + * + * @author Styxo + */ +public class SithSorcerer extends CardImpl { + + public SithSorcerer(UUID ownerId) { + super(ownerId, 57, "Sith Sorcerer", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{U}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Human"); + this.subtype.add("Sith"); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // When Sith Sorcerer enters the battlefield, scry 2. + this.addAbility(new EntersBattlefieldTriggeredAbility(new ScryEffect(2))); + + // Hate — When Sith Assassin enters the battlefield, if opponent lost life from source other than combat damage this turn, draw a card. + Ability ability = new ConditionalTriggeredAbility( + new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1)), + HateCondition.getInstance(), + "Hate — When {this} enters the battlefield, if an opponent lost life from a source other than combat damage this turn, draw a card."); + this.addAbility(ability, new NonCombatDamageWatcher()); + + } + + public SithSorcerer(final SithSorcerer card) { + super(card); + } + + @Override + public SithSorcerer copy() { + return new SithSorcerer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/SithThoughtseeker.java b/Mage.Sets/src/mage/sets/starwars/SithThoughtseeker.java new file mode 100644 index 0000000000..38536255e8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/SithThoughtseeker.java @@ -0,0 +1,75 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.condition.common.HateCondition; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.decorator.ConditionalActivatedAbility; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.cards.CardImpl; +import mage.constants.AbilityWord; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author Styxo + */ +public class SithThoughtseeker extends CardImpl { + + public SithThoughtseeker(UUID ownerId) { + super(ownerId, 90, "Sith Thoughtseeker", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{B}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Human"); + this.subtype.add("Sith"); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // Hate — {2}{U}: Draw a card. Activate this ability only if an opponent lost life from source other than combat damage this turn. + Ability ability = new ConditionalActivatedAbility( + Zone.BATTLEFIELD, + new DrawCardSourceControllerEffect(1), + new ManaCostsImpl<>("{2}{U}"), + HateCondition.getInstance()); + ability.setAbilityWord(AbilityWord.HATE); + this.addAbility(ability); + } + + public SithThoughtseeker(final SithThoughtseeker card) { + super(card); + } + + @Override + public SithThoughtseeker copy() { + return new SithThoughtseeker(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/SlaveI.java b/Mage.Sets/src/mage/sets/starwars/SlaveI.java new file mode 100644 index 0000000000..0bd8d582b4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/SlaveI.java @@ -0,0 +1,74 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.DiesAndDealtDamageThisTurnTriggeredAbility; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.abilities.keyword.SpaceflightAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.counters.CounterType; + +/** + * + * @author Styxo + */ +public class SlaveI extends CardImpl { + + public SlaveI(UUID ownerId) { + super(ownerId, 217, "Slave I", Rarity.RARE, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{B}{R}{G}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Starship"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // First strike + this.addAbility(FirstStrikeAbility.getInstance()); + + // Spaceflight + this.addAbility(SpaceflightAbility.getInstance()); + + // Whenever a creature dealt damage by Slave I this turn dies, put two +1/+1 counters on Slave I. + this.addAbility(new DiesAndDealtDamageThisTurnTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(2)), false)); + + } + + public SlaveI(final SlaveI card) { + super(card); + } + + @Override + public SlaveI copy() { + return new SlaveI(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/SmashToSmithereens.java b/Mage.Sets/src/mage/sets/starwars/SmashToSmithereens.java new file mode 100644 index 0000000000..3fb5efcaa2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/SmashToSmithereens.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; + +/** + * + * @author Styxo + */ +public class SmashToSmithereens extends mage.sets.magicorigins.SmashToSmithereens { + + public SmashToSmithereens(UUID ownerId) { + super(ownerId); + this.cardNumber = "123"; + this.expansionSetCode = "SWS"; + } + + public SmashToSmithereens(final SmashToSmithereens card) { + super(card); + } + + @Override + public SmashToSmithereens copy() { + return new SmashToSmithereens(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/SnowTrooper.java b/Mage.Sets/src/mage/sets/starwars/SnowTrooper.java new file mode 100644 index 0000000000..d6c9a53d85 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/SnowTrooper.java @@ -0,0 +1,76 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; + +/** + * + * @author Styxo + */ +public class SnowTrooper extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Trooper creatures"); + + static { + filter.add(new SubtypePredicate("Trooper")); + } + + public SnowTrooper(UUID ownerId) { + super(ownerId, 30, "Snow Trooper", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{W}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Human"); + this.subtype.add("Trooper"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Trooper creatures you control have firststrike. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(FirstStrikeAbility.getInstance(), Duration.WhileOnBattlefield, filter, false))); + + } + + public SnowTrooper(final SnowTrooper card) { + super(card); + } + + @Override + public SnowTrooper copy() { + return new SnowTrooper(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/SpeederTrooper.java b/Mage.Sets/src/mage/sets/starwars/SpeederTrooper.java new file mode 100644 index 0000000000..a0cc6722be --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/SpeederTrooper.java @@ -0,0 +1,76 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.abilities.keyword.HasteAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; + +/** + * + * @author Styxo + */ +public class SpeederTrooper extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Trooper creatures"); + + static { + filter.add(new SubtypePredicate("Trooper")); + } + + public SpeederTrooper(UUID ownerId) { + super(ownerId, 124, "Speeder Trooper", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{R}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Human"); + this.subtype.add("Trooper"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Trooper creatures you control have haste. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(HasteAbility.getInstance(), Duration.WhileOnBattlefield, filter, false))); + + } + + public SpeederTrooper(final SpeederTrooper card) { + super(card); + } + + @Override + public SpeederTrooper copy() { + return new SpeederTrooper(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/StarDestroyer.java b/Mage.Sets/src/mage/sets/starwars/StarDestroyer.java new file mode 100644 index 0000000000..c3f8c8a4c0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/StarDestroyer.java @@ -0,0 +1,98 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.effects.common.TapTargetEffect; +import mage.abilities.keyword.SpaceflightAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreatureOrPlayer; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.game.permanent.token.TIEFighterToken; +import mage.target.common.TargetCreatureOrPlayer; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author Styxo + */ +public class StarDestroyer extends CardImpl { + + private static final FilterCreaturePermanent filter1 = new FilterCreaturePermanent("artifact creature"); + private static final FilterCreatureOrPlayer filter3 = new FilterCreatureOrPlayer("non-Starship creature or player"); + + static { + filter1.add(new CardTypePredicate(CardType.ARTIFACT)); + filter3.getCreatureFilter().add(Predicates.not(new SubtypePredicate("Starship"))); + } + + public StarDestroyer(UUID ownerId) { + super(ownerId, 218, "Star Destroyer", Rarity.RARE, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{4}{U}{B}{R}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Starship"); + this.power = new MageInt(6); + this.toughness = new MageInt(6); + + // Spaceflight + this.addAbility(SpaceflightAbility.getInstance()); + + // {2}{U}: Tap target artifact creature. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new TapTargetEffect(), new ManaCostsImpl("{2}{U}")); + ability.addTarget(new TargetCreaturePermanent(filter1)); + this.addAbility(ability); + + // {2}{B}: Create a 1/1 black Starship artifact creature token with spaceflight named TIE Fighter. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new TIEFighterToken()), new ManaCostsImpl("{2}{B}"))); + + // {2}{R}: Star Destroyer deals 2 damge to target non-Starship creature or player. + ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2), new ManaCostsImpl("{2}{R}")); + ability.addTarget(new TargetCreatureOrPlayer(filter3)); + this.addAbility(ability); + } + + public StarDestroyer(final StarDestroyer card) { + super(card); + } + + @Override + public StarDestroyer copy() { + return new StarDestroyer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/StrikeTeamCommando.java b/Mage.Sets/src/mage/sets/starwars/StrikeTeamCommando.java new file mode 100644 index 0000000000..129cb70280 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/StrikeTeamCommando.java @@ -0,0 +1,80 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.keyword.SpaceflightAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterArtifactPermanent; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.target.common.TargetArtifactPermanent; + +/** + * + * @author Styxo + */ +public class StrikeTeamCommando extends CardImpl { + + private static final FilterArtifactPermanent filter = new FilterArtifactPermanent("artifact without spaceflight"); + + static { + filter.add(Predicates.not(new AbilityPredicate(SpaceflightAbility.class))); + } + + public StrikeTeamCommando(UUID ownerId) { + super(ownerId, 228, "Strike Team Commando", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{G/W}{G/W}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Human"); + this.subtype.add("Rebel"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // When Strike Team Commando enters the battlefield, you may destroy target artifact without spaceflight. + Ability ability = new EntersBattlefieldTriggeredAbility(new DestroyTargetEffect(), true); + ability.addTarget(new TargetArtifactPermanent(filter)); + this.addAbility(ability); + + } + + public StrikeTeamCommando(final StrikeTeamCommando card) { + super(card); + } + + @Override + public StrikeTeamCommando copy() { + return new StrikeTeamCommando(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/SuperBattleDroid.java b/Mage.Sets/src/mage/sets/starwars/SuperBattleDroid.java new file mode 100644 index 0000000000..a4d7425b7f --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/SuperBattleDroid.java @@ -0,0 +1,62 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.keyword.RepairAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class SuperBattleDroid extends CardImpl { + + public SuperBattleDroid(UUID ownerId) { + super(ownerId, 58, "Super Battle Droid", Rarity.COMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{5}{U}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Droid"); + this.power = new MageInt(4); + this.toughness = new MageInt(5); + + // Repair 2 + this.addAbility(new RepairAbility(2)); + } + + public SuperBattleDroid(final SuperBattleDroid card) { + super(card); + } + + @Override + public SuperBattleDroid copy() { + return new SuperBattleDroid(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/SurpriseManeuver.java b/Mage.Sets/src/mage/sets/starwars/SurpriseManeuver.java new file mode 100644 index 0000000000..2d81c74c02 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/SurpriseManeuver.java @@ -0,0 +1,66 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.effects.common.UntapTargetEffect; +import mage.abilities.effects.common.continuous.BoostOpponentsEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.target.common.TargetControlledCreaturePermanent; + +/** + * + * @author Styxo + */ +public class SurpriseManeuver extends CardImpl { + + public SurpriseManeuver(UUID ownerId) { + super(ownerId, 59, "Surprise Maneuver", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{2}{U}"); + this.expansionSetCode = "SWS"; + + // Untap up to two target creatures you control. + this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent(0, 2)); + this.getSpellAbility().addEffect(new UntapTargetEffect()); + + // Creatures your opponents control get -1/-0 until end of turn. + this.getSpellAbility().addEffect(new BoostOpponentsEffect(-1, 0, Duration.EndOfTurn)); + + } + + public SurpriseManeuver(final SurpriseManeuver card) { + super(card); + } + + @Override + public SurpriseManeuver copy() { + return new SurpriseManeuver(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/Swamp1.java b/Mage.Sets/src/mage/sets/starwars/Swamp1.java new file mode 100644 index 0000000000..419a2df36b --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Swamp1.java @@ -0,0 +1,51 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; + +/** + * + * @author Styxo + */ +public class Swamp1 extends mage.cards.basiclands.Swamp { + + public Swamp1(UUID ownerId) { + super(ownerId, 258); + this.expansionSetCode = "SWS"; + } + + public Swamp1(final Swamp1 card) { + super(card); + } + + @Override + public Swamp1 copy() { + return new Swamp1(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/Swamp2.java b/Mage.Sets/src/mage/sets/starwars/Swamp2.java new file mode 100644 index 0000000000..4cf62c1191 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Swamp2.java @@ -0,0 +1,51 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; + +/** + * + * @author Styxo + */ +public class Swamp2 extends mage.cards.basiclands.Swamp { + + public Swamp2(UUID ownerId) { + super(ownerId, 259); + this.expansionSetCode = "SWS"; + } + + public Swamp2(final Swamp2 card) { + super(card); + } + + @Override + public Swamp2 copy() { + return new Swamp2(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/Swamp3.java b/Mage.Sets/src/mage/sets/starwars/Swamp3.java new file mode 100644 index 0000000000..3d4b9e2f22 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Swamp3.java @@ -0,0 +1,51 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; + +/** + * + * @author Styxo + */ +public class Swamp3 extends mage.cards.basiclands.Swamp { + + public Swamp3(UUID ownerId) { + super(ownerId, 260); + this.expansionSetCode = "SWS"; + } + + public Swamp3(final Swamp3 card) { + super(card); + } + + @Override + public Swamp3 copy() { + return new Swamp3(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/SwarmTheSkies.java b/Mage.Sets/src/mage/sets/starwars/SwarmTheSkies.java new file mode 100644 index 0000000000..60e1f6b49d --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/SwarmTheSkies.java @@ -0,0 +1,59 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.game.permanent.token.TIEFighterToken; + +/** + * + * @author Styxo + */ +public class SwarmTheSkies extends CardImpl { + + public SwarmTheSkies(UUID ownerId) { + super(ownerId, 91, "Swarm the Skies", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{3}{B}"); + this.expansionSetCode = "SWS"; + + // Create three 1/1 black Starship artifact creature tokens with Spaceflight named TIE Fighter. + this.getSpellAbility().addEffect(new CreateTokenEffect(new TIEFighterToken(), 3)); + } + + public SwarmTheSkies(final SwarmTheSkies card) { + super(card); + } + + @Override + public SwarmTheSkies copy() { + return new SwarmTheSkies(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/TIEBomber.java b/Mage.Sets/src/mage/sets/starwars/TIEBomber.java new file mode 100644 index 0000000000..c0d41e0ec3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/TIEBomber.java @@ -0,0 +1,72 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.LoseAbilitySourceEffect; +import mage.abilities.keyword.SpaceflightAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author Styxo + */ +public class TIEBomber extends CardImpl { + + public TIEBomber(UUID ownerId) { + super(ownerId, 92, "TIE Bomber", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{2}{B}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Starship"); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + // Spaceflight + this.addAbility(SpaceflightAbility.getInstance()); + + // {1}: TIE Bomber loses Spaceflight until end od turn. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new LoseAbilitySourceEffect(SpaceflightAbility.getInstance(), Duration.EndOfTurn), new ManaCostsImpl("{1}")); + this.addAbility(ability); + } + + public TIEBomber(final TIEBomber card) { + super(card); + } + + @Override + public TIEBomber copy() { + return new TIEBomber(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/TIEInterceptor.java b/Mage.Sets/src/mage/sets/starwars/TIEInterceptor.java new file mode 100644 index 0000000000..78c88f510f --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/TIEInterceptor.java @@ -0,0 +1,100 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.keyword.SpaceflightAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.game.Game; +import mage.players.Player; + +/** + * + * @author Styxo + */ +public class TIEInterceptor extends CardImpl { + + public TIEInterceptor(UUID ownerId) { + super(ownerId, 93, "TIE Interceptor", Rarity.COMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{2}{B}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Starship"); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + // Spaceflight + this.addAbility(SpaceflightAbility.getInstance()); + + // Whenever TIE Interceptor attacks, each opponent loses 2 life. + this.addAbility(new AttacksTriggeredAbility(new TIEInterceptorEffect(), false)); + } + + public TIEInterceptor(final TIEInterceptor card) { + super(card); + } + + @Override + public TIEInterceptor copy() { + return new TIEInterceptor(this); + } +} + +class TIEInterceptorEffect extends OneShotEffect { + + TIEInterceptorEffect() { + super(Outcome.Damage); + staticText = "each opponent loses 2 life"; + } + + TIEInterceptorEffect(final TIEInterceptorEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + for (UUID opponentId : game.getOpponents(source.getControllerId())) { + Player opponent = game.getPlayer(opponentId); + if (opponent != null) { + opponent.loseLife(2, game); + } + } + return true; + } + + @Override + public TIEInterceptorEffect copy() { + return new TIEInterceptorEffect(this); + + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/TankDroid.java b/Mage.Sets/src/mage/sets/starwars/TankDroid.java new file mode 100644 index 0000000000..6034c117f8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/TankDroid.java @@ -0,0 +1,72 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.AttacksOrBlocksTriggeredAbility; +import mage.abilities.common.EntersBattlefieldOrDiesSourceTriggeredAbility; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.keyword.RepairAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.game.permanent.token.DroidToken; + +/** + * + * @author Styxo + */ +public class TankDroid extends CardImpl { + + public TankDroid(UUID ownerId) { + super(ownerId, 219, "Tank Droid", Rarity.RARE, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{4}{W}{U}{B}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Droid"); + this.power = new MageInt(5); + this.toughness = new MageInt(5); + + // Whenever Tank Droid enters the battlefield, attacks, blocks or dies, create a 1/1 colorless Droid token creature. + Ability ability = new AttacksOrBlocksTriggeredAbility(new CreateTokenEffect(new DroidToken()), false); + this.addAbility(ability); + ability = new EntersBattlefieldOrDiesSourceTriggeredAbility(new CreateTokenEffect(new DroidToken()), false); + this.addAbility(ability); + // Repair 3 + this.addAbility(new RepairAbility(3)); + } + + public TankDroid(final TankDroid card) { + super(card); + } + + @Override + public TankDroid copy() { + return new TankDroid(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/Terentatek.java b/Mage.Sets/src/mage/sets/starwars/Terentatek.java new file mode 100644 index 0000000000..f32df0b340 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/Terentatek.java @@ -0,0 +1,150 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.RestrictionEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterControlledPermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.watchers.common.NonCombatDamageWatcher; + +/** + * + * @author Styxo + */ +public class Terentatek extends CardImpl { + + public Terentatek(UUID ownerId) { + super(ownerId, 125, "Terentatek", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{R}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Beast"); + this.power = new MageInt(4); + this.toughness = new MageInt(3); + + // Terentatek can't attack or block unless you control a Sith. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new Terentatek1RestrictionEffect())); + + // Hate — If an opponent lost life from source other than combat damage this turn, Terentatek may attack as though you controlled a Sith. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new Terentatek2RestrictionEffect()), new NonCombatDamageWatcher()); + + } + + public Terentatek(final Terentatek card) { + super(card); + } + + @Override + public Terentatek copy() { + return new Terentatek(this); + } +} + +class Terentatek1RestrictionEffect extends RestrictionEffect { + + private static final FilterControlledPermanent filter = new FilterControlledPermanent("Sith"); + + static { + filter.add(new SubtypePredicate("Sith")); + } + + public Terentatek1RestrictionEffect() { + super(Duration.WhileOnBattlefield); + staticText = "{this} can't attack or block unless you control a Sith"; + } + + public Terentatek1RestrictionEffect(final Terentatek1RestrictionEffect effect) { + super(effect); + } + + @Override + public Terentatek1RestrictionEffect copy() { + return new Terentatek1RestrictionEffect(this); + } + + @Override + public boolean canAttack(Game game) { + return false; + } + + @Override + public boolean canBlock(Permanent attacker, Permanent blocker, Ability source, Game game) { + return false; + } + + @Override + public boolean applies(Permanent permanent, Ability source, Game game) { + if (permanent.getId().equals(source.getSourceId())) { + if (game.getBattlefield().count(filter, source.getSourceId(), source.getControllerId(), game) > 0) { + return false; + } + return true; + } + return false; + } +} + +class Terentatek2RestrictionEffect extends RestrictionEffect { + + public Terentatek2RestrictionEffect() { + super(Duration.WhileOnBattlefield); + staticText = "Hate — If an opponent lost life from source other than combat damage this turn, {this} may attack as though you controlled a Sith."; + } + + public Terentatek2RestrictionEffect(final Terentatek2RestrictionEffect effect) { + super(effect); + } + + @Override + public Terentatek2RestrictionEffect copy() { + return new Terentatek2RestrictionEffect(this); + } + + @Override + public boolean canAttack(Game game) { + return true; + } + + @Override + public boolean applies(Permanent permanent, Ability source, Game game) { + if (permanent.getId().equals(source.getSourceId())) { + NonCombatDamageWatcher watcher = (NonCombatDamageWatcher) game.getState().getWatchers().get("NonCombatDamageWatcher"); + return watcher != null && watcher.opponentsBeenDealtNonCombatDamage(source.getControllerId()); + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/TheBattleOfEndor.java b/Mage.Sets/src/mage/sets/starwars/TheBattleOfEndor.java new file mode 100644 index 0000000000..0de22752d5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/TheBattleOfEndor.java @@ -0,0 +1,115 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.dynamicvalue.common.ManacostVariableValue; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.continuous.GainAbilityAllEffect; +import mage.abilities.keyword.HasteAbility; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.counters.CounterType; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.game.permanent.token.EwokToken; +import mage.players.Player; + +/** + * + * @author Styxo + */ +public class TheBattleOfEndor extends CardImpl { + + public TheBattleOfEndor(UUID ownerId) { + super(ownerId, 130, "The Battle of Endor", Rarity.MYTHIC, new CardType[]{CardType.SORCERY}, "{X}{X}{G}{G}{G}"); + this.expansionSetCode = "SWS"; + + // Create X 1/1 green Ewok creature tokens. + this.getSpellAbility().addEffect(new CreateTokenEffect(new EwokToken(), new ManacostVariableValue())); + + // Put X +1/+1 counters on each creature you control. + this.getSpellAbility().addEffect(new TheBattleOfEndorEffect()); + + // Creatures you control gain trample and haste until end of turn. + Effect effect = new GainAbilityAllEffect(TrampleAbility.getInstance(), Duration.EndOfTurn, new FilterControlledCreaturePermanent()); + effect.setText("Creatures you control gain trample"); + this.getSpellAbility().addEffect(effect); + effect = new GainAbilityAllEffect(HasteAbility.getInstance(), Duration.EndOfTurn, new FilterControlledCreaturePermanent()); + effect.setText("and haste until end of turn"); + this.getSpellAbility().addEffect(effect); + + } + + public TheBattleOfEndor(final TheBattleOfEndor card) { + super(card); + } + + @Override + public TheBattleOfEndor copy() { + return new TheBattleOfEndor(this); + } +} + +class TheBattleOfEndorEffect extends OneShotEffect { + + TheBattleOfEndorEffect() { + super(Outcome.Benefit); + staticText = "Put X +1/+1 counters on each creature you control"; + } + + TheBattleOfEndorEffect(TheBattleOfEndorEffect effect) { + super(effect); + } + + @Override + public TheBattleOfEndorEffect copy() { + return new TheBattleOfEndorEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + for (Permanent permanent : game.getBattlefield().getActivePermanents(new FilterControlledCreaturePermanent(), source.getControllerId(), source.getSourceId(), game)) { + permanent.addCounters(CounterType.P1P1.createInstance(source.getManaCostsToPay().getX()), game); + } + return true; + } + return false; + } + +} diff --git a/Mage.Sets/src/mage/sets/starwars/TheBattleOfGeonosis.java b/Mage.Sets/src/mage/sets/starwars/TheBattleOfGeonosis.java new file mode 100644 index 0000000000..97857c22b2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/TheBattleOfGeonosis.java @@ -0,0 +1,83 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.dynamicvalue.common.ManacostVariableValue; +import mage.abilities.dynamicvalue.common.StaticValue; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DamageAllEffect; +import mage.abilities.effects.common.DamagePlayersEffect; +import mage.abilities.effects.common.continuous.BoostControlledEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.ControllerPredicate; + +/** + * + * @author Styxo + */ +public class TheBattleOfGeonosis extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature you don't control"); + + static { + filter.add(new ControllerPredicate(TargetController.NOT_YOU)); + } + + public TheBattleOfGeonosis(UUID ownerId) { + super(ownerId, 97, "The Battle of Geonosis", Rarity.MYTHIC, new CardType[]{CardType.SORCERY}, "{X}{X}{R}{R}"); + this.expansionSetCode = "SWS"; + + // The Battle of Geonosis deals X damage to each opponent and each creature you don't control. + Effect effect = new DamagePlayersEffect(Outcome.Damage, new ManacostVariableValue(), TargetController.OPPONENT); + effect.setText("The Battle of Geonosis deals X damage to each opponent"); + this.getSpellAbility().addEffect(effect); + effect = new DamageAllEffect(new ManacostVariableValue(), filter); + effect.setText("and each creature you don't control"); + this.getSpellAbility().addEffect(effect); + + // Creatures you control get +X/+0 until end of turn. + this.getSpellAbility().addEffect(new BoostControlledEffect(new ManacostVariableValue(), new StaticValue(0), Duration.EndOfTurn)); + + } + + public TheBattleOfGeonosis(final TheBattleOfGeonosis card) { + super(card); + } + + @Override + public TheBattleOfGeonosis copy() { + return new TheBattleOfGeonosis(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/TheBattleOfHoth.java b/Mage.Sets/src/mage/sets/starwars/TheBattleOfHoth.java new file mode 100644 index 0000000000..4e63c65fa8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/TheBattleOfHoth.java @@ -0,0 +1,75 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.common.DiesTriggeredAbility; +import mage.abilities.dynamicvalue.common.ManacostVariableValue; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.game.permanent.token.Token; +import mage.game.permanent.token.TrooperToken; + +/** + * + * @author Styxo + */ +public class TheBattleOfHoth extends CardImpl { + + public TheBattleOfHoth(UUID ownerId) { + super(ownerId, 4, "The Battle of Hoth", Rarity.MYTHIC, new CardType[]{CardType.SORCERY}, "{X}{X}{W}{W}{W}"); + this.expansionSetCode = "SWS"; + + // Create X 5/5 white artifact AT-AT creature tokens wiht "When this creature dies, create two 1/1 white Trooper creature tokens." + this.getSpellAbility().addEffect(new CreateTokenEffect(new ATATToken(), new ManacostVariableValue())); + } + + public TheBattleOfHoth(final TheBattleOfHoth card) { + super(card); + } + + @Override + public TheBattleOfHoth copy() { + return new TheBattleOfHoth(this); + } +} + +class ATATToken extends Token { + + public ATATToken() { + super("AT-AT", "5/5 white artifact AT-AT creature tokens with \"When this creature dies, create two 1/1 white Trooper creature tokens.\"", 5, 5); + this.setOriginalExpansionSetCode("SWS"); + cardType.add(CardType.CREATURE); + cardType.add(CardType.ARTIFACT); + color.setWhite(true); + addAbility(new DiesTriggeredAbility(new CreateTokenEffect(new TrooperToken(), 2))); + subtype.add("AT-AT"); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/TheBattleOfNaboo.java b/Mage.Sets/src/mage/sets/starwars/TheBattleOfNaboo.java new file mode 100644 index 0000000000..6f9b7166d4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/TheBattleOfNaboo.java @@ -0,0 +1,107 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.game.Game; +import mage.players.Player; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author Styxo + */ +public class TheBattleOfNaboo extends CardImpl { + + public TheBattleOfNaboo(UUID ownerId) { + super(ownerId, 35, "The Battle of Naboo", Rarity.MYTHIC, new CardType[]{CardType.SORCERY}, "{X}{X}{U}{U}"); + this.expansionSetCode = "SWS"; + + // Return X target creatures to their owner's hands. Draw twice that many cards. + Effect effect = new ReturnToHandTargetEffect(); + effect.setText("Return X target creatures to their owner's hands"); + this.getSpellAbility().addEffect(effect); + this.getSpellAbility().addEffect(new TheBattleOfNabooEffect()); + + } + + @Override + public void adjustTargets(Ability ability, Game game) { + ability.getTargets().clear(); + ability.addTarget(new TargetCreaturePermanent(ability.getManaCostsToPay().getX())); + } + + public TheBattleOfNaboo(final TheBattleOfNaboo card) { + super(card); + } + + @Override + public TheBattleOfNaboo copy() { + return new TheBattleOfNaboo(this); + } +} + +class TheBattleOfNabooEffect extends OneShotEffect { + + public TheBattleOfNabooEffect() { + super(Outcome.DrawCard); + staticText = "Draw twice that many cards"; + } + + public TheBattleOfNabooEffect(final TheBattleOfNabooEffect effect) { + super(effect); + } + + @Override + public TheBattleOfNabooEffect copy() { + return new TheBattleOfNabooEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + if (player != null) { + int x = source.getManaCostsToPay().getX(); + if (x > 0) { + player.drawCards(2 * x, game); + } + return true; + + } + return false; + } + +} diff --git a/Mage.Sets/src/mage/sets/starwars/TheBattleOfYavin.java b/Mage.Sets/src/mage/sets/starwars/TheBattleOfYavin.java new file mode 100644 index 0000000000..cf3f70bb2e --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/TheBattleOfYavin.java @@ -0,0 +1,128 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.LinkedList; +import java.util.List; +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.dynamicvalue.common.ManacostVariableValue; +import mage.abilities.effects.OneShotEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.filter.common.FilterNonlandPermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.common.TargetOpponent; + +/** + * + * @author Styxo + */ +public class TheBattleOfYavin extends CardImpl { + + public TheBattleOfYavin(UUID ownerId) { + super(ownerId, 66, "The Battle of Yavin", Rarity.MYTHIC, new CardType[]{CardType.SORCERY}, "{X}{B}{B}"); + this.expansionSetCode = "SWS"; + + // For each nonland permanent target opponent controls, that player sacrificies it unless he or she pays X life. + this.getSpellAbility().addEffect(new TheBattleOfYavinEffect()); + this.getSpellAbility().addTarget(new TargetOpponent()); + + } + + public TheBattleOfYavin(final TheBattleOfYavin card) { + super(card); + } + + @Override + public TheBattleOfYavin copy() { + return new TheBattleOfYavin(this); + } +} + +class TheBattleOfYavinEffect extends OneShotEffect { + + public TheBattleOfYavinEffect() { + super(Outcome.Sacrifice); + this.staticText = "For each nonland permanent target opponent controls, that player sacrificies it unless he or she pays X life"; + } + + public TheBattleOfYavinEffect(final TheBattleOfYavinEffect effect) { + super(effect); + } + + @Override + public TheBattleOfYavinEffect copy() { + return new TheBattleOfYavinEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player opponent = game.getPlayer(source.getTargets().getFirstTarget()); + if (opponent == null) { + return false; + } + + int amount = (new ManacostVariableValue()).calculate(game, source, this); + if (amount > 0) { + LinkedList sacrifices = new LinkedList(); + + FilterNonlandPermanent filter = new FilterNonlandPermanent(); + List permanents = game.getBattlefield().getAllActivePermanents(filter, opponent.getId(), game); + + int lifePaid = 0; + int playerLife = opponent.getLife(); + for (Permanent permanent : permanents) { + String message = "Pay " + amount + " life? If you don't, " + permanent.getName() + " will be sacrificed."; + if (playerLife - amount - lifePaid >= 0 && opponent != null && opponent.chooseUse(Outcome.Neutral, message, source, game)) { + game.informPlayers(opponent.getLogName() + " pays " + amount + " life. He will not sacrifice " + permanent.getName()); + lifePaid += amount; + } else { + game.informPlayers(opponent.getLogName() + " will sacrifice " + permanent.getName()); + sacrifices.add(permanent); + } + } + + if (lifePaid > 0) { + Player player = game.getPlayer(opponent.getId()); + if (player != null) { + player.loseLife(lifePaid, game); + } + } + + for (Permanent permanent : sacrifices) { + permanent.sacrifice(source.getSourceId(), game); + } + } + return true; + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/TheDeathStar.java b/Mage.Sets/src/mage/sets/starwars/TheDeathStar.java new file mode 100644 index 0000000000..44ec4678de --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/TheDeathStar.java @@ -0,0 +1,91 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.RemoveCountersSourceCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.effects.common.LoseGameTargetPlayerEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.mana.ColorlessManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.target.TargetPermanent; +import mage.target.TargetPlayer; + +/** + * + * @author Styxo + */ +public class TheDeathStar extends CardImpl { + + public TheDeathStar(UUID ownerId) { + super(ownerId, 1, "The Death Star", Rarity.MYTHIC, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + + // {T}: Add {C} to your mana pool. + this.addAbility(new ColorlessManaAbility()); + + // {2},{T}: Put a charge counter on The Death Star. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.CHARGE.createInstance()), new GenericManaCost(2)); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + + // {T}, Remove three charge counters from The Death Star: Destroy target permanent. + ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DestroyTargetEffect(), new TapSourceCost()); + ability.addCost(new RemoveCountersSourceCost(CounterType.CHARGE.createInstance(3))); + ability.addTarget(new TargetPermanent()); + this.addAbility(ability); + + // {T}, Remove ten charge counters from The Death Star: Destroy target player. + Effect effect = new LoseGameTargetPlayerEffect(); + effect.setText("Destroy target player"); + ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new TapSourceCost()); + ability.addCost(new RemoveCountersSourceCost(CounterType.CHARGE.createInstance(10))); + ability.addTarget(new TargetPlayer()); + this.addAbility(ability); + } + + public TheDeathStar(final TheDeathStar card) { + super(card); + } + + @Override + public TheDeathStar copy() { + return new TheDeathStar(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/TradeFederationBattleship.java b/Mage.Sets/src/mage/sets/starwars/TradeFederationBattleship.java new file mode 100644 index 0000000000..cf3befd879 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/TradeFederationBattleship.java @@ -0,0 +1,95 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.common.RemoveCountersSourceCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.continuous.BoostControlledEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.keyword.SpaceflightAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.game.permanent.token.DroidToken; + +/** + * + * @author Styxo + */ +public class TradeFederationBattleship extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Droid creatures"); + + static { + filter.add(new SubtypePredicate("Droid")); + } + + public TradeFederationBattleship(UUID ownerId) { + super(ownerId, 220, "Trade Federation Battleship", Rarity.RARE, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{3}{W}{U}{B}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Starship"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Spaceflight + this.addAbility(SpaceflightAbility.getInstance()); + + // Droid creatures you control get +1/+1 + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, filter, false))); + + // Trade Federation Battleship enters the battlefield with three charge counters on it. + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.CHARGE.createInstance(3), true), + "with three charge counters on it")); + + // {T}, Remove a charge counter forom Trade Federation Battleship: Create two 1/1 colorless Droid artifact token cretures. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new DroidToken(), 2), new TapSourceCost()); + ability.addCost(new RemoveCountersSourceCost(CounterType.CHARGE.createInstance())); + this.addAbility(ability); + } + + public TradeFederationBattleship(final TradeFederationBattleship card) { + super(card); + } + + @Override + public TradeFederationBattleship copy() { + return new TradeFederationBattleship(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/TreacherousBountyHunter.java b/Mage.Sets/src/mage/sets/starwars/TreacherousBountyHunter.java new file mode 100644 index 0000000000..352bf7c361 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/TreacherousBountyHunter.java @@ -0,0 +1,106 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.condition.common.PermanentHasCounterCondition; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.SacrificeControllerEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.counters.CounterType; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterOpponentsCreaturePermanent; +import mage.game.Game; +import mage.players.Player; + +/** + * + * @author Styxo + */ +public class TreacherousBountyHunter extends CardImpl { + + public TreacherousBountyHunter(UUID ownerId) { + super(ownerId, 94, "Treacherous Bounty Hunter", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{B}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Rodian"); + this.subtype.add("Hunter"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // When Treacherous Bounty Hunter enters the battlefield, sacrifice a creature unless an opponet controls a creature with a bounty counter on it. + this.addAbility(new EntersBattlefieldTriggeredAbility(new TreacherousBountyHunterSacrificeUnlessConditionEffect())); + + } + + public TreacherousBountyHunter(final TreacherousBountyHunter card) { + super(card); + } + + @Override + public TreacherousBountyHunter copy() { + return new TreacherousBountyHunter(this); + } +} + +class TreacherousBountyHunterSacrificeUnlessConditionEffect extends OneShotEffect { + + public TreacherousBountyHunterSacrificeUnlessConditionEffect() { + super(Outcome.Sacrifice); + staticText = "sacrifice a creature unless an opponet controls a creature with a bounty counter on it"; + } + + public TreacherousBountyHunterSacrificeUnlessConditionEffect(final TreacherousBountyHunterSacrificeUnlessConditionEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + if (player != null) { + if (new PermanentHasCounterCondition(CounterType.BOUNTY, 0, new FilterOpponentsCreaturePermanent(), PermanentHasCounterCondition.CountType.MORE_THAN).apply(game, source)) { + return true; + } + Effect effect = new SacrificeControllerEffect(new FilterControlledCreaturePermanent(), 1, ""); + effect.apply(game, source); + return true; + } + return false; + } + + @Override + public TreacherousBountyHunterSacrificeUnlessConditionEffect copy() { + return new TreacherousBountyHunterSacrificeUnlessConditionEffect(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/TriFighter.java b/Mage.Sets/src/mage/sets/starwars/TriFighter.java new file mode 100644 index 0000000000..9dd9a7b8eb --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/TriFighter.java @@ -0,0 +1,67 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.keyword.SpaceflightAbility; +import mage.abilities.keyword.RepairAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class TriFighter extends CardImpl { + + public TriFighter(UUID ownerId) { + super(ownerId, 225, "Tri-Fighter", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{2}{U/B}{U/B}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Droid"); + this.subtype.add("Starship"); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + // Spaceflight + this.addAbility(SpaceflightAbility.getInstance()); + + // Repair 3 + this.addAbility(new RepairAbility(3)); + } + + public TriFighter(final TriFighter card) { + super(card); + } + + @Override + public TriFighter copy() { + return new TriFighter(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/TrooperArmor.java b/Mage.Sets/src/mage/sets/starwars/TrooperArmor.java new file mode 100644 index 0000000000..8166fed8fb --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/TrooperArmor.java @@ -0,0 +1,71 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.continuous.AddCardSubtypeAttachedEffect; +import mage.abilities.effects.common.continuous.BoostEquippedEffect; +import mage.abilities.keyword.EquipAbility; +import mage.cards.CardImpl; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author Styxo + */ +public class TrooperArmor extends CardImpl { + + public TrooperArmor(UUID ownerId) { + super(ownerId, 237, "Trooper Armor", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT}, "{2}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Equipment"); + + // Equiped creature gets +1/+1 and is a Trooper in addition to its other types. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(1, 1))); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new AddCardSubtypeAttachedEffect("Trooper", Duration.WhileOnBattlefield, AttachmentType.EQUIPMENT))); + + // Equip {2} + this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(2))); + } + + public TrooperArmor(final TrooperArmor card) { + super(card); + } + + @Override + public TrooperArmor copy() { + return new TrooperArmor(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/TrooperCommando.java b/Mage.Sets/src/mage/sets/starwars/TrooperCommando.java new file mode 100644 index 0000000000..7e40b71661 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/TrooperCommando.java @@ -0,0 +1,76 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; + +/** + * + * @author Styxo + */ +public class TrooperCommando extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Trooper creatures"); + + static { + filter.add(new SubtypePredicate("Trooper")); + } + + public TrooperCommando(UUID ownerId) { + super(ownerId, 157, "Trooper Commando", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{G}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Human"); + this.subtype.add("Trooper"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Trooper creatures you control have trample. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.WhileOnBattlefield, filter, false))); + + } + + public TrooperCommando(final TrooperCommando card) { + super(card); + } + + @Override + public TrooperCommando copy() { + return new TrooperCommando(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/TwilekSeductess.java b/Mage.Sets/src/mage/sets/starwars/TwilekSeductess.java new file mode 100644 index 0000000000..a3a96d2e6d --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/TwilekSeductess.java @@ -0,0 +1,63 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.keyword.ProvokeAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class TwilekSeductess extends CardImpl { + + public TwilekSeductess(UUID ownerId) { + super(ownerId, 158, "Twi'lek Seductess", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{G}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Twi'lek"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Whenever Twi'lek Seductess attacks, you may have target creature defending player controls untap and block it if able. + this.addAbility(new ProvokeAbility()); + + } + + public TwilekSeductess(final TwilekSeductess card) { + super(card); + } + + @Override + public TwilekSeductess copy() { + return new TwilekSeductess(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/UgnaughtScrapWorker.java b/Mage.Sets/src/mage/sets/starwars/UgnaughtScrapWorker.java new file mode 100644 index 0000000000..02b8467dca --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/UgnaughtScrapWorker.java @@ -0,0 +1,73 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.filter.predicate.mageobject.SubtypePredicate; + +/** + * + * @author Styxo + */ +public class UgnaughtScrapWorker extends CardImpl { + + private static final FilterCard filter = new FilterCard("Droid spells"); + + static { + filter.add(new SubtypePredicate("Droid")); + } + + public UgnaughtScrapWorker(UUID ownerId) { + super(ownerId, 60, "Ugnaught Scrap Worker", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{U}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Ugnaught"); + this.subtype.add("Artificier"); + this.power = new MageInt(1); + this.toughness = new MageInt(2); + + // Droid spell cost {1} less to cast. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1))); + } + + public UgnaughtScrapWorker(final UgnaughtScrapWorker card) { + super(card); + } + + @Override + public UgnaughtScrapWorker copy() { + return new UgnaughtScrapWorker(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/UnderworldSlums.java b/Mage.Sets/src/mage/sets/starwars/UnderworldSlums.java new file mode 100644 index 0000000000..57ebeafdaa --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/UnderworldSlums.java @@ -0,0 +1,105 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.ArrayList; +import java.util.UUID; +import mage.MageObject; +import mage.abilities.ActivatedAbilityImpl; +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect; +import mage.abilities.mana.ColorlessManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.filter.predicate.Predicate; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.filter.predicate.mageobject.SupertypePredicate; +import mage.target.common.TargetCardInLibrary; + +/** + * + * @author Styxo + */ +public class UnderworldSlums extends CardImpl { + + public UnderworldSlums(UUID ownerId) { + super(ownerId, 251, "Underworld Slums", Rarity.COMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "SWS"; + + // {T}: Add {C} to your manapool. + this.addAbility(new ColorlessManaAbility()); + + // {T}, Sacrifice Underworld Slums: Search your library for a basic Swamp, Mountain or Forest card and put it onto the battlefield tapped. Then shuffle your library. + this.addAbility(new UnderworldSlumsAbility()); + + } + + public UnderworldSlums(final UnderworldSlums card) { + super(card); + } + + @Override + public UnderworldSlums copy() { + return new UnderworldSlums(this); + } + + public class UnderworldSlumsAbility extends ActivatedAbilityImpl { + + public UnderworldSlumsAbility(UnderworldSlumsAbility ability) { + super(ability); + } + + public UnderworldSlumsAbility() { + super(Zone.BATTLEFIELD, null); + addCost(new TapSourceCost()); + addCost(new SacrificeSourceCost()); + FilterCard filter = new FilterCard("basic Swamp, Mountain or Forest"); + filter.add(new CardTypePredicate(CardType.LAND)); + ArrayList> subtypePredicates = new ArrayList<>(); + subtypePredicates.add(new SubtypePredicate("Swamp")); + subtypePredicates.add(new SubtypePredicate("Mountain")); + subtypePredicates.add(new SubtypePredicate("Forest")); + filter.add(Predicates.or(subtypePredicates)); + filter.add(new SupertypePredicate("Basic")); + TargetCardInLibrary target = new TargetCardInLibrary(filter); + addEffect(new SearchLibraryPutInPlayEffect(target, true, true, Outcome.PutLandInPlay)); + } + + @Override + public UnderworldSlumsAbility copy() { + return new UnderworldSlumsAbility(this); + } + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/UnityOfTheDroids.java b/Mage.Sets/src/mage/sets/starwars/UnityOfTheDroids.java new file mode 100644 index 0000000000..099f087273 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/UnityOfTheDroids.java @@ -0,0 +1,90 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Mode; +import mage.abilities.dynamicvalue.common.StaticValue; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.effects.common.LookLibraryAndPickControllerEffect; +import mage.abilities.effects.common.PreventDamageToTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author Styxo + */ +public class UnityOfTheDroids extends CardImpl { + + private static final FilterCreaturePermanent artifactCreatureFilter = new FilterCreaturePermanent("artifact creature"); + private static final FilterCreaturePermanent nonArtifactCreatureFilter = new FilterCreaturePermanent("nonartifact creature"); + + static { + artifactCreatureFilter.add(new CardTypePredicate(CardType.ARTIFACT)); + nonArtifactCreatureFilter.add(Predicates.not(new CardTypePredicate(CardType.ARTIFACT))); + + } + + public UnityOfTheDroids(UUID ownerId) { + super(ownerId, 221, "Unity of the Droids", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{W}{U}{B}"); + this.expansionSetCode = "SWS"; + + // Choose one - Prevent all damage that would be dealt to target artifact creature this turn. + this.getSpellAbility().addEffect(new PreventDamageToTargetEffect(Duration.EndOfTurn)); + this.getSpellAbility().addTarget(new TargetCreaturePermanent(artifactCreatureFilter)); + + // Look at the top four cards of your library. Put one of them into your hand and the rest into your graveyard. + Mode mode = new Mode(); + mode.getEffects().add(new LookLibraryAndPickControllerEffect(new StaticValue(4), false, new StaticValue(1), new FilterCard(), Zone.GRAVEYARD, false, false)); + this.getSpellAbility().addMode(mode); + + // Destroy target nonartifact creature. + mode = new Mode(); + mode.getEffects().add(new DestroyTargetEffect()); + mode.getTargets().add(new TargetCreaturePermanent(nonArtifactCreatureFilter)); + this.getSpellAbility().addMode(mode); + } + + public UnityOfTheDroids(final UnityOfTheDroids card) { + super(card); + } + + @Override + public UnityOfTheDroids copy() { + return new UnityOfTheDroids(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/UnrulySureshot.java b/Mage.Sets/src/mage/sets/starwars/UnrulySureshot.java new file mode 100644 index 0000000000..2f7553a40f --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/UnrulySureshot.java @@ -0,0 +1,87 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.CounterPredicate; +import mage.target.common.TargetCreaturePermanent; +import mage.target.common.TargetOpponentsCreaturePermanent; + +/** + * + * @author Styxo + */ +public class UnrulySureshot extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with a bounty counter on it"); + + static { + filter.add(new CounterPredicate(CounterType.BOUNTY)); + } + + public UnrulySureshot(UUID ownerId) { + super(ownerId, 95, "Unruly Sureshot", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{4}{B}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Human"); + this.subtype.add("Hunter"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // When Unruly Sureshot enters the battlefield, put a bounty counter on target creature an opponent controls. + Ability ability = new EntersBattlefieldTriggeredAbility(new AddCountersTargetEffect(CounterType.BOUNTY.createInstance())); + ability.addTarget(new TargetOpponentsCreaturePermanent()); + this.addAbility(ability); + + // {3}{R}: Unruly Sureshot deals 2 damage to target creature with a bounty counter on it. + ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2), new ManaCostsImpl("{3}{R}")); + ability.addTarget(new TargetCreaturePermanent(filter)); + this.addAbility(ability); + } + + public UnrulySureshot(final UnrulySureshot card) { + super(card); + } + + @Override + public UnrulySureshot copy() { + return new UnrulySureshot(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/VWing.java b/Mage.Sets/src/mage/sets/starwars/VWing.java new file mode 100644 index 0000000000..822530caf4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/VWing.java @@ -0,0 +1,66 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.keyword.HasteAbility; +import mage.abilities.keyword.SpaceflightAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class VWing extends CardImpl { + + public VWing(UUID ownerId) { + super(ownerId, 126, "V-Wing", Rarity.COMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{1}{R}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Starship"); + this.power = new MageInt(1); + this.toughness = new MageInt(2); + + // Haste + this.addAbility(HasteAbility.getInstance()); + + // Spaceflight + this.addAbility(SpaceflightAbility.getInstance()); + } + + public VWing(final VWing card) { + super(card); + } + + @Override + public VWing copy() { + return new VWing(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/VaporSnag.java b/Mage.Sets/src/mage/sets/starwars/VaporSnag.java new file mode 100644 index 0000000000..3d1d83bcc4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/VaporSnag.java @@ -0,0 +1,53 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; + +/** + * + * @author Styxo + */ +public class VaporSnag extends mage.sets.newphyrexia.VaporSnag { + + public VaporSnag(UUID ownerId) { + super(ownerId); + this.cardNumber = "61"; + this.expansionSetCode = "SWS"; + + } + + public VaporSnag(final VaporSnag card) { + super(card); + } + + @Override + public VaporSnag copy() { + return new VaporSnag(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/WeequayBeastmaster.java b/Mage.Sets/src/mage/sets/starwars/WeequayBeastmaster.java new file mode 100644 index 0000000000..a80c9f15ba --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/WeequayBeastmaster.java @@ -0,0 +1,72 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.BecomesMonstrousTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.cost.AbilitiesCostReductionControllerEffect; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.abilities.keyword.MonstrosityAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; + +/** + * + * @author Styxo + */ +public class WeequayBeastmaster extends CardImpl { + + public WeequayBeastmaster(UUID ownerId) { + super(ownerId, 127, "Weequay Beastmaster", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{R}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Weequay"); + this.subtype.add("Shaman"); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // Monstrosity abilities you activate cost {1} less to activate. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new AbilitiesCostReductionControllerEffect(MonstrosityAbility.class, "Monstrosity"))); + + // Whenever a creature you control becomes monstrous, put an additional +1/+1 counter on that creature. + this.addAbility(new BecomesMonstrousTriggeredAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance()))); + } + + public WeequayBeastmaster(final WeequayBeastmaster card) { + super(card); + } + + @Override + public WeequayBeastmaster copy() { + return new WeequayBeastmaster(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/WildHolocron.java b/Mage.Sets/src/mage/sets/starwars/WildHolocron.java new file mode 100644 index 0000000000..2dcd9eec0a --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/WildHolocron.java @@ -0,0 +1,95 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.Cost; +import mage.abilities.costs.common.RemoveCountersSourceCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.mana.GreenManaAbility; +import mage.abilities.mana.RedManaAbility; +import mage.abilities.mana.SimpleManaAbility; +import mage.abilities.mana.WhiteManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; + +/** + * + * @author Styxo + */ +public class WildHolocron extends CardImpl { + + public WildHolocron(UUID ownerId) { + super(ownerId, 238, "Wild Holocron", Rarity.COMMON, new CardType[]{CardType.ARTIFACT}, "{2}"); + this.expansionSetCode = "SWS"; + + // {T}: Put a charge counter on Wild Holocron. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.CHARGE.createInstance(1)), new TapSourceCost())); + + // {T}, Remove a charge counter from Wild Holocron: Add {R}, {G} or {W} to your mana pool. + Cost cost = new RemoveCountersSourceCost(CounterType.CHARGE.createInstance(1)); + Ability ability = new RedManaAbility(); + ability.addCost(cost); + this.addAbility(ability); + + ability = new GreenManaAbility(); + ability.addCost(cost); + this.addAbility(ability); + + ability = new WhiteManaAbility(); + ability.addCost(cost); + this.addAbility(ability); + + // {T}, Remove two charge counters from Sith Holocron: Add RG or GW to your mana pool. + cost = new RemoveCountersSourceCost(CounterType.CHARGE.createInstance(2)); + + ability = new SimpleManaAbility(Zone.BATTLEFIELD, new Mana(1, 1, 0, 0, 0, 0, 0, 0), new TapSourceCost()); + ability.addCost(cost); + this.addAbility(ability); + + ability = new SimpleManaAbility(Zone.BATTLEFIELD, new Mana(0, 1, 0, 1, 0, 0, 0, 0), new TapSourceCost()); + ability.addCost(cost); + this.addAbility(ability); + } + + public WildHolocron(final WildHolocron card) { + super(card); + } + + @Override + public WildHolocron copy() { + return new WildHolocron(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/WisdomOfTheJedi.java b/Mage.Sets/src/mage/sets/starwars/WisdomOfTheJedi.java new file mode 100644 index 0000000000..7d03a0c33c --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/WisdomOfTheJedi.java @@ -0,0 +1,93 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Mode; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.CounterTargetEffect; +import mage.abilities.effects.common.PreventAllDamageToPlayersEffect; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.abilities.effects.common.continuous.GainProtectionFromColorTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.filter.Filter; +import mage.filter.FilterSpell; +import mage.filter.predicate.mageobject.ConvertedManaCostPredicate; +import mage.target.TargetSpell; +import mage.target.common.TargetControlledCreaturePermanent; + +/** + * + * @author Styxo + */ +public class WisdomOfTheJedi extends CardImpl { + + private static final FilterSpell filterSpell = new FilterSpell("spell with converted mana cost of 3 or less"); + + static { + filterSpell.add(new ConvertedManaCostPredicate(Filter.ComparisonType.LessThan, 4)); + } + + public WisdomOfTheJedi(UUID ownerId) { + super(ownerId, 222, "Wisdom of the Jedi", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{G}{W}{U}"); + this.expansionSetCode = "SWS"; + + // Choose one - Prevent all damage that would be dealt to players this turn. + this.getSpellAbility().addEffect(new PreventAllDamageToPlayersEffect(Duration.EndOfTurn, false)); + + // Target creature you control gets +1/+1 and protection from the color of your choice until end of turn. + Mode mode = new Mode(); + Effect effect = new BoostTargetEffect(1, 1, Duration.EndOfTurn); + effect.setText("Target creature you control gets +1/+1"); + mode.getEffects().add(effect); + effect = new GainProtectionFromColorTargetEffect(Duration.EndOfTurn); + effect.setText("and protection from the color of your choice until end of turn"); + mode.getEffects().add(effect); + mode.getTargets().add(new TargetControlledCreaturePermanent()); + this.getSpellAbility().addMode(mode); + + // Counter target spell with converted mana cost of 3 or less. + mode = new Mode(); + mode.getEffects().add(new CounterTargetEffect()); + mode.getTargets().add(new TargetSpell(filterSpell)); + this.getSpellAbility().addMode(mode); + + } + + public WisdomOfTheJedi(final WisdomOfTheJedi card) { + super(card); + } + + @Override + public WisdomOfTheJedi copy() { + return new WisdomOfTheJedi(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/WompRat.java b/Mage.Sets/src/mage/sets/starwars/WompRat.java new file mode 100644 index 0000000000..7cc2df15b9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/WompRat.java @@ -0,0 +1,69 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.BecomesMonstrousSourceTriggeredAbility; +import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.keyword.MonstrosityAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class WompRat extends CardImpl { + + public WompRat(UUID ownerId) { + super(ownerId, 31, "Womp Rat", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{W}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Rat"); + this.subtype.add("Beast"); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + // {4}{W}: Monstrosity 1 + this.addAbility(new MonstrosityAbility("{4}{W}", 1)); + + // When Womp Rat becomes monstrous you gain two life. + this.addAbility(new BecomesMonstrousSourceTriggeredAbility(new GainLifeEffect(2))); + } + + public WompRat(final WompRat card) { + super(card); + } + + @Override + public WompRat copy() { + return new WompRat(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/WookieeBountyHunter.java b/Mage.Sets/src/mage/sets/starwars/WookieeBountyHunter.java new file mode 100644 index 0000000000..815e84bd0c --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/WookieeBountyHunter.java @@ -0,0 +1,64 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.keyword.BountyAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class WookieeBountyHunter extends CardImpl { + + public WookieeBountyHunter(UUID ownerId) { + super(ownerId, 159, "Wookiee Bounty Hunter", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{4}{G}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Wookiee"); + this.subtype.add("Hunter"); + this.power = new MageInt(4); + this.toughness = new MageInt(5); + + // Bounty — Whenever a creature an opponent controls with a bounty counter on it dies, you gain 3 life. + this.addAbility(new BountyAbility(new GainLifeEffect(3))); + } + + public WookieeBountyHunter(final WookieeBountyHunter card) { + super(card); + } + + @Override + public WookieeBountyHunter copy() { + return new WookieeBountyHunter(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/WookieeMystic.java b/Mage.Sets/src/mage/sets/starwars/WookieeMystic.java new file mode 100644 index 0000000000..c45fa9a185 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/WookieeMystic.java @@ -0,0 +1,164 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; +import mage.MageInt; +import mage.MageObject; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.BasicManaEffect; +import mage.abilities.effects.common.ManaEffect; +import mage.abilities.mana.SimpleManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.WatcherScope; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.ZoneChangeEvent; +import mage.game.permanent.Permanent; +import mage.game.stack.Spell; +import mage.watchers.Watcher; + +/** + * + * @author Styxo + */ +public class WookieeMystic extends CardImpl { + + public WookieeMystic(UUID ownerId) { + super(ownerId, 223, "Wookiee Mystic", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{R}{G}{W}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Wookiee"); + this.subtype.add("Shaman"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // {T}: Add {R}, {G} or {W} to your mana pool. If that mana is spent on a creature spell, it enters the battlefield with a +1/+1 counter on it. + Mana mana = Mana.RedMana(1); + mana.setFlag(true); + ManaEffect effect = new BasicManaEffect(mana); + effect.setText("Add {R} to your mana pool. If that mana is spent on a creature spell, it enters the battlefield with a +1/+1 counter on it"); + Ability ability = new SimpleManaAbility(Zone.BATTLEFIELD, effect, new TapSourceCost()); + this.addAbility(ability, new WookieeMysticWatcher(ability)); + + mana = Mana.GreenMana(1); + mana.setFlag(true); + effect = new BasicManaEffect(mana); + effect.setText("Add {G} to your mana pool. If that mana is spent on a creature spell, it enters the battlefield with a +1/+1 counter on it"); + ability = new SimpleManaAbility(Zone.BATTLEFIELD, effect, new TapSourceCost()); + this.addAbility(ability, new WookieeMysticWatcher(ability)); + + mana = Mana.WhiteMana(1); + mana.setFlag(true); + effect = new BasicManaEffect(mana); + effect.setText("Add {W} to your mana pool. If that mana is spent on a creature spell, it enters the battlefield with a +1/+1 counter on it"); + ability = new SimpleManaAbility(Zone.BATTLEFIELD, effect, new TapSourceCost()); + this.addAbility(ability, new WookieeMysticWatcher(ability)); + } + + public WookieeMystic(final WookieeMystic card) { + super(card); + } + + @Override + public WookieeMystic copy() { + return new WookieeMystic(this); + } +} + +class WookieeMysticWatcher extends Watcher { + + private final Ability source; + private final List creatures = new ArrayList<>(); + + WookieeMysticWatcher(Ability source) { + super("HallOfTheBanditLordWatcher", WatcherScope.CARD); + this.source = source; + } + + WookieeMysticWatcher(final WookieeMysticWatcher watcher) { + super(watcher); + this.creatures.addAll(watcher.creatures); + this.source = watcher.source; + } + + @Override + public WookieeMysticWatcher copy() { + return new WookieeMysticWatcher(this); + } + + @Override + public void watch(GameEvent event, Game game) { + if (event.getType() == GameEvent.EventType.MANA_PAYED) { + MageObject target = game.getObject(event.getTargetId()); + if (event.getSourceId() != null + && event.getSourceId().equals(this.getSourceId()) + && target != null && target.getCardType().contains(CardType.CREATURE) + && event.getFlag()) { + if (target instanceof Spell) { + this.creatures.add(((Spell) target).getCard().getId()); + } + } + } + if (event.getType() == GameEvent.EventType.COUNTERED) { + if (creatures.contains(event.getTargetId())) { + creatures.remove(event.getSourceId()); + } + } + if (event.getType() == GameEvent.EventType.ZONE_CHANGE) { + if (creatures.contains(event.getSourceId())) { + ZoneChangeEvent zEvent = (ZoneChangeEvent) event; + // spell was e.g. exiled and goes again to stack, so previous cast has not resolved. + if (zEvent.getToZone() == Zone.STACK) { + creatures.remove(event.getSourceId()); + } + } + } + if (event.getType() == GameEvent.EventType.ENTERS_THE_BATTLEFIELD) { + if (creatures.contains(event.getSourceId())) { + Permanent creature = game.getPermanent(event.getSourceId()); + creature.addCounters(CounterType.P1P1.createInstance(), game); + creatures.remove(event.getSourceId()); + } + } + } + + @Override + public void reset() { + super.reset(); + creatures.clear(); + } + +} diff --git a/Mage.Sets/src/mage/sets/starwars/WookieeRaidleader.java b/Mage.Sets/src/mage/sets/starwars/WookieeRaidleader.java new file mode 100644 index 0000000000..70fb38bc69 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/WookieeRaidleader.java @@ -0,0 +1,79 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.AnotherPredicate; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author Styxo + */ +public class WookieeRaidleader extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("another target creature"); + + static { + filter.add(new AnotherPredicate()); + } + + public WookieeRaidleader(UUID ownerId) { + super(ownerId, 227, "Wookiee Raidleader", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{R/G}{R/G}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Wookiee"); + this.subtype.add("Warrior"); + this.power = new MageInt(3); + this.toughness = new MageInt(4); + + // Whenever Wookiee Raidleader attacks, antoher target creature gains trample until end of turn + Ability ability = new AttacksTriggeredAbility(new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn), false); + ability.addTarget(new TargetCreaturePermanent(filter)); + this.addAbility(ability); + + } + + public WookieeRaidleader(final WookieeRaidleader card) { + super(card); + } + + @Override + public WookieeRaidleader copy() { + return new WookieeRaidleader(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/XWing.java b/Mage.Sets/src/mage/sets/starwars/XWing.java new file mode 100644 index 0000000000..9d028d4f62 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/XWing.java @@ -0,0 +1,73 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.keyword.SpaceflightAbility; +import mage.abilities.keyword.VigilanceAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author Styxo + */ +public class XWing extends CardImpl { + + public XWing(UUID ownerId) { + super(ownerId, 32, "X-Wing", Rarity.COMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{2}{W}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Rebel"); + this.subtype.add("Starship"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Spaceflight + this.addAbility(SpaceflightAbility.getInstance()); + + // {1}{W}: X-Wing gains viginlance until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilitySourceEffect(VigilanceAbility.getInstance(), Duration.EndOfTurn), new ManaCostsImpl("{1}{W}"))); + + } + + public XWing(final XWing card) { + super(card); + } + + @Override + public XWing copy() { + return new XWing(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/YWing.java b/Mage.Sets/src/mage/sets/starwars/YWing.java new file mode 100644 index 0000000000..9c4f8fe68b --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/YWing.java @@ -0,0 +1,82 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.CantBlockAbility; +import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; +import mage.abilities.effects.common.DontUntapInControllersNextUntapStepTargetEffect; +import mage.abilities.effects.common.TapTargetEffect; +import mage.abilities.keyword.SpaceflightAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.ControllerPredicate; +import mage.target.common.TargetCreaturePermanent; +import mage.target.common.TargetOpponentsCreaturePermanent; + +/** + * + * @author Styxo + */ +public class YWing extends CardImpl { + + public YWing(UUID ownerId) { + super(ownerId, 62, "Y-Wing", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{2}{U}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Rebel"); + this.subtype.add("Starship"); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // Spaceflight + this.addAbility(SpaceflightAbility.getInstance()); + + // Y-Wing can't block + this.addAbility(new CantBlockAbility()); + + // Whenever Y-Wing can't deals combat damage to a player, tap target creature an opponent controls. It doesn't untap during its controller's next untap step. + Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility(new TapTargetEffect("target creature an opponent controls."), false); + ability.addTarget(new TargetOpponentsCreaturePermanent()); + ability.addEffect(new DontUntapInControllersNextUntapStepTargetEffect(" It")); + this.addAbility(ability); + } + + public YWing(final YWing card) { + super(card); + } + + @Override + public YWing copy() { + return new YWing(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/YodaJediMaster.java b/Mage.Sets/src/mage/sets/starwars/YodaJediMaster.java new file mode 100644 index 0000000000..874ba15067 --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/YodaJediMaster.java @@ -0,0 +1,149 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.LoyaltyAbility; +import mage.abilities.common.PlanswalkerEntersWithLoyalityCountersAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; +import mage.abilities.dynamicvalue.common.StaticValue; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.GetEmblemEffect; +import mage.abilities.effects.common.LookLibraryAndPickControllerEffect; +import mage.abilities.effects.common.ReturnFromExileEffect; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.abilities.effects.common.continuous.GainAbilityControllerEffect; +import mage.abilities.keyword.HexproofAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.filter.FilterPermanent; +import mage.filter.predicate.other.OwnerPredicate; +import mage.filter.predicate.permanent.AnotherPredicate; +import mage.game.Game; +import mage.game.command.Emblem; +import mage.game.permanent.Permanent; +import mage.target.TargetPermanent; + +/** + * + * @author Styxo + */ +public class YodaJediMaster extends CardImpl { + + private static final FilterPermanent filter = new FilterPermanent("another target permanent you own"); + + static { + filter.add(new AnotherPredicate()); + filter.add(new OwnerPredicate(TargetController.YOU)); + } + + public YodaJediMaster(UUID ownerId) { + super(ownerId, 178, "Yoda, Jedi Master", Rarity.MYTHIC, new CardType[]{CardType.PLANESWALKER}, "{1}{G}{U}"); + this.expansionSetCode = "SWS"; + this.subtype.add("Yoda"); + + this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(3)); + + // +1: Look at the top two cards of your library. Put one on the bottom of your library. + this.addAbility(new LoyaltyAbility(new LookLibraryAndPickControllerEffect(new StaticValue(2), false, new StaticValue(1), new FilterCard(), Zone.LIBRARY, false, false), 1)); + + // 0: Exile another target permanent you own. Return that card to the battlefield under your control at the beggining of your next end step. + Ability ability = new LoyaltyAbility(new YodaJediMasterEffect(), 0); + ability.addTarget(new TargetPermanent(filter)); + this.addAbility(ability); + + // -7: You get an emblem with "Hexproof, you and your creatures have." + this.addAbility(new LoyaltyAbility(new GetEmblemEffect(new YodaEmblem()), -7)); + + } + + public YodaJediMaster(final YodaJediMaster card) { + super(card); + } + + @Override + public YodaJediMaster copy() { + return new YodaJediMaster(this); + } +} + +class YodaJediMasterEffect extends OneShotEffect { + + public YodaJediMasterEffect() { + super(Outcome.Detriment); + staticText = "Exile another target permanent you own. Return that card to the battlefield under your control at the beggining of your next end step"; + } + + public YodaJediMasterEffect(final YodaJediMasterEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = game.getPermanent(getTargetPointer().getFirst(game, source)); + Permanent sourcePermanent = game.getPermanentOrLKIBattlefield(source.getSourceId()); + if (permanent != null && sourcePermanent != null) { + if (permanent.moveToExile(source.getSourceId(), sourcePermanent.getName(), source.getSourceId(), game)) { + //create delayed triggered ability + AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new ReturnFromExileEffect(source.getSourceId(), Zone.BATTLEFIELD)); + game.addDelayedTriggeredAbility(delayedAbility, source); + return true; + } + } + return false; + } + + @Override + public YodaJediMasterEffect copy() { + return new YodaJediMasterEffect(this); + } +} + +class YodaEmblem extends Emblem { + + // You get an emblem with "Hexproof, you and your creatures have." + public YodaEmblem() { + this.setName("Emblem - Yoda"); + Effect effect = new GainAbilityControlledEffect(HexproofAbility.getInstance(), Duration.WhileOnBattlefield); + effect.setText("Hexproof,"); + Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect); + effect = new GainAbilityControllerEffect(HexproofAbility.getInstance(), Duration.WhileOnBattlefield); + effect.setText(" you and your creatures have"); + ability.addEffect(effect); + getAbilities().add(ability); + } +} diff --git a/Mage.Sets/src/mage/sets/starwars/ZamWessel.java b/Mage.Sets/src/mage/sets/starwars/ZamWessel.java new file mode 100644 index 0000000000..25cc3e826a --- /dev/null +++ b/Mage.Sets/src/mage/sets/starwars/ZamWessel.java @@ -0,0 +1,63 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.starwars; + +import java.util.UUID; +import mage.MageInt; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author Styxo + */ +public class ZamWessel extends CardImpl { + + public ZamWessel(UUID ownerId) { + super(ownerId, 63, "Zam Wessel", Rarity.NA/*RARE*/, new CardType[]{CardType.CREATURE}, "{2}{U}{U}"); + this.expansionSetCode = "SWS"; + this.supertype.add("Legendary"); + this.subtype.add("Shapeshifter"); + this.subtype.add("Hunter"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // + // When you cast Zam Wessel, target opponent reveals his or her hand. You may choose a creature card from it and have Zam Wessel enter the battlefield as a copy of that creature card. + } + + public ZamWessel(final ZamWessel card) { + super(card); + } + + @Override + public ZamWessel copy() { + return new ZamWessel(this); + } +} diff --git a/Mage/src/main/java/mage/abilities/condition/common/HateCondition.java b/Mage/src/main/java/mage/abilities/condition/common/HateCondition.java new file mode 100644 index 0000000000..3d48784480 --- /dev/null +++ b/Mage/src/main/java/mage/abilities/condition/common/HateCondition.java @@ -0,0 +1,65 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.abilities.condition.common; + +import mage.abilities.Ability; +import mage.abilities.condition.Condition; +import mage.game.Game; +import mage.watchers.common.NonCombatDamageWatcher; + +/** + * Describes condition when an opponent has been dealt any amount of non-combat + * damage + * + * @author Styxo + */ +public class HateCondition implements Condition { + + private static HateCondition fInstance = null; + + public static Condition getInstance() { + if (fInstance == null) { + fInstance = new HateCondition(); + } + return fInstance; + } + + private HateCondition() { + } + + @Override + public boolean apply(Game game, Ability source) { + NonCombatDamageWatcher watcher = (NonCombatDamageWatcher) game.getState().getWatchers().get("NonCombatDamageWatcher"); + return watcher != null && watcher.opponentsBeenDealtNonCombatDamage(source.getControllerId()); + } + + @Override + public String toString() { + return "if an opponent lost life from source other than combat damage this turn"; + } +} diff --git a/Mage/src/main/java/mage/abilities/effects/common/counter/MoveCountersTargetsEffect.java b/Mage/src/main/java/mage/abilities/effects/common/counter/MoveCountersTargetsEffect.java new file mode 100644 index 0000000000..775777223c --- /dev/null +++ b/Mage/src/main/java/mage/abilities/effects/common/counter/MoveCountersTargetsEffect.java @@ -0,0 +1,104 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.abilities.effects.common.counter; + +import mage.abilities.Ability; +import mage.abilities.Mode; +import mage.abilities.effects.OneShotEffect; +import mage.constants.Outcome; +import mage.counters.CounterType; +import mage.game.Game; +import mage.game.permanent.Permanent; + +/** + * + * @author Styxo + */ +public class MoveCountersTargetsEffect extends OneShotEffect { + + private final CounterType counterType; + private final int amount; + + public MoveCountersTargetsEffect(CounterType counterType, int amount) { + super(Outcome.Detriment); + this.counterType = counterType; + this.amount = amount; + + } + + public MoveCountersTargetsEffect(final MoveCountersTargetsEffect effect) { + super(effect); + this.counterType = effect.counterType; + this.amount = effect.amount; + } + + @Override + public MoveCountersTargetsEffect copy() { + return new MoveCountersTargetsEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent removeTargetCreature = game.getPermanent(targetPointer.getTargets(game, source).get(0)); + Permanent addTargetCreature = game.getPermanent(targetPointer.getTargets(game, source).get(1)); + if (removeTargetCreature != null && addTargetCreature != null && removeTargetCreature.getCounters(game).getCount(counterType) >= amount) { + removeTargetCreature.removeCounters(counterType.createInstance(amount), game); + addTargetCreature.addCounters(counterType.createInstance(amount), game); + if (!game.isSimulation()) { + game.informPlayers("Moved " + amount + " " + counterType.getName() + " counter" + (amount > 1 ? "s" : "") + " from " + removeTargetCreature.getLogName() + " to " + addTargetCreature.getLogName()); + } + return true; + } + return false; + } + + @Override + public String getText(Mode mode) { + if (!staticText.isEmpty()) { + return staticText; + } + + StringBuilder sb = new StringBuilder("move "); + if (amount > 1) { + sb.append(amount); + } else { + sb.append("a"); + } + sb.append(" "); + sb.append(counterType.getName()); + sb.append(" counter"); + if (amount > 1) { + sb.append("s "); + } else { + sb.append(" "); + } + sb.append("from one target creature to another target creature"); + + return sb.toString(); + } +} diff --git a/Mage/src/main/java/mage/abilities/keyword/BountyAbility.java b/Mage/src/main/java/mage/abilities/keyword/BountyAbility.java new file mode 100644 index 0000000000..e41e160ec7 --- /dev/null +++ b/Mage/src/main/java/mage/abilities/keyword/BountyAbility.java @@ -0,0 +1,55 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.abilities.keyword; + +import mage.abilities.common.DiesCreatureTriggeredAbility; +import mage.abilities.effects.Effect; +import mage.constants.TargetController; +import mage.counters.CounterType; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.ControllerPredicate; +import mage.filter.predicate.permanent.CounterPredicate; + +/** + * + * @author Styxo + */ +public class BountyAbility extends DiesCreatureTriggeredAbility { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls with a bounty counter on it"); + + static { + filter.add(new ControllerPredicate(TargetController.OPPONENT)); + filter.add(new CounterPredicate(CounterType.BOUNTY)); + } + + public BountyAbility(Effect effect) { + super(effect, false, filter); + } + + public BountyAbility(Effect effect, boolean optional) { + super(effect, optional, filter); + } + + public BountyAbility(Effect effect, boolean optional, boolean setTargetPointer) { + super(effect, optional, filter, setTargetPointer); + } + + public BountyAbility(final BountyAbility ability) { + super(ability); + } + + @Override + public BountyAbility copy() { + return new BountyAbility(this); + } + + @Override + public String getRule() { + return "Bounty — " + super.getRule(); + } + +} diff --git a/Mage/src/main/java/mage/abilities/keyword/MeditateAbility.java b/Mage/src/main/java/mage/abilities/keyword/MeditateAbility.java new file mode 100644 index 0000000000..4c1eabcd93 --- /dev/null +++ b/Mage/src/main/java/mage/abilities/keyword/MeditateAbility.java @@ -0,0 +1,106 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.abilities.keyword; + +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.ActivatedAbilityImpl; +import mage.abilities.costs.Cost; +import mage.abilities.effects.OneShotEffect; +import mage.constants.Outcome; +import mage.constants.TimingRule; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.game.permanent.Permanent; +import mage.players.Player; + +/** + * + * @author Styxo + */ +public class MeditateAbility extends ActivatedAbilityImpl { + + public MeditateAbility(Cost cost) { + super(Zone.BATTLEFIELD, new ReturnToHandEffect(), cost); + this.timing = TimingRule.SORCERY; + } + + public MeditateAbility(final MeditateAbility ability) { + super(ability); + } + + @Override + public MeditateAbility copy() { + return new MeditateAbility(this); + } + + @Override + public String getRule() { + StringBuilder sb = new StringBuilder("Meditate ").append(manaCosts.getText()); + sb.append(" (Return this creature to its owner's hand. Meditate only as a sorcery.)"); + return sb.toString(); + } + +} + +class ReturnToHandEffect extends OneShotEffect { + + public ReturnToHandEffect() { + super(Outcome.ReturnToHand); + } + + public ReturnToHandEffect(final ReturnToHandEffect effect) { + super(effect); + } + + @Override + public ReturnToHandEffect copy() { + return new ReturnToHandEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + MageObject mageObject = source.getSourceObjectIfItStillExists(game); + if (mageObject != null) { + Permanent permanent = game.getPermanent(source.getSourceId()); + if (permanent != null) { + boolean ret = controller.moveCards(permanent, Zone.HAND, source, game); + if (ret) { + game.fireEvent(new GameEvent(EventType.MEDITATED, source.getSourceId(), source.getSourceId(), controller.getId())); + } + return ret; + } + } + } + return false; + } +} diff --git a/Mage/src/main/java/mage/abilities/keyword/RepairAbility.java b/Mage/src/main/java/mage/abilities/keyword/RepairAbility.java new file mode 100644 index 0000000000..5a962a96b8 --- /dev/null +++ b/Mage/src/main/java/mage/abilities/keyword/RepairAbility.java @@ -0,0 +1,146 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.abilities.keyword; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.DiesTriggeredAbility; +import mage.abilities.condition.common.SourceHasCounterCondition; +import mage.abilities.decorator.ConditionalTriggeredAbility; +import mage.abilities.dynamicvalue.common.StaticValue; +import mage.abilities.effects.AsThoughEffectImpl; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.effects.common.counter.RemoveCounterSourceEffect; +import mage.cards.Card; +import mage.constants.AsThoughEffectType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.game.Game; +import mage.game.events.GameEvent; + +/** + * + * @author Styxo + */ +public class RepairAbility extends DiesTriggeredAbility { + + private String ruleText; + + public RepairAbility(int count) { + super(new AddCountersSourceEffect(CounterType.REPAIR.createInstance(), new StaticValue(count), false, true)); + addSubAbility(new RepairBeginningOfUpkeepTriggeredAbility()); + addSubAbility(new RepairCastFromGraveyardTriggeredAbility()); + + StringBuilder sb = new StringBuilder("Repair "); + sb.append(count) + .append(" (When this creature dies, put ") + .append(count) + .append(" repair counters on it. At the beggining of your upkeep, remove a repair counter. Whenever the last is removed, you may cast it from graveyard until end of turn.)"); + ruleText = sb.toString(); + } + + public RepairAbility(final RepairAbility ability) { + super(ability); + this.ruleText = ability.ruleText; + } + + @Override + public String getRule() { + return ruleText; + } + +} + +class RepairCastFromGraveyardEffect extends AsThoughEffectImpl { + + public RepairCastFromGraveyardEffect() { + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); + staticText = "You may cast it from graveyard until end of turn"; + } + + public RepairCastFromGraveyardEffect(final RepairCastFromGraveyardEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public RepairCastFromGraveyardEffect copy() { + return new RepairCastFromGraveyardEffect(this); + } + + @Override + public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) { + return source.getControllerId().equals(affectedControllerId); + } +} + +class RepairCastFromGraveyardTriggeredAbility extends TriggeredAbilityImpl { + + public RepairCastFromGraveyardTriggeredAbility() { + super(Zone.GRAVEYARD, new RepairCastFromGraveyardEffect()); + setRuleVisible(false); + } + + public RepairCastFromGraveyardTriggeredAbility(RepairCastFromGraveyardTriggeredAbility ability) { + super(ability); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.COUNTER_REMOVED; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getTargetId().equals(getSourceId())) { + Card card = game.getCard(getSourceId()); + if (card != null && game.getState().getZone(card.getId()) == Zone.GRAVEYARD + && card.getCounters(game).getCount(CounterType.REPAIR) == 0) { + return true; + } + } + return false; + } + + @Override + public String getRule() { + return "Whenever the last repair counter is removed, you may cast {this} from your graveyard until end of turn"; + } + + @Override + public RepairCastFromGraveyardTriggeredAbility copy() { + return new RepairCastFromGraveyardTriggeredAbility(this); + } +} + +class RepairBeginningOfUpkeepTriggeredAbility extends ConditionalTriggeredAbility { + + public RepairBeginningOfUpkeepTriggeredAbility() { + super(new BeginningOfUpkeepTriggeredAbility(Zone.GRAVEYARD, new RemoveCounterSourceEffect(CounterType.REPAIR.createInstance()), TargetController.YOU, false), + new SourceHasCounterCondition(CounterType.REPAIR), + "At the beginning of your upkeep, remove a repair counter from {this}"); + this.setRuleVisible(false); + + } + + public RepairBeginningOfUpkeepTriggeredAbility(final RepairBeginningOfUpkeepTriggeredAbility effect) { + super(effect); + } + + @Override + public RepairBeginningOfUpkeepTriggeredAbility copy() { + return new RepairBeginningOfUpkeepTriggeredAbility(this); + } +} diff --git a/Mage/src/main/java/mage/abilities/keyword/SpaceflightAbility.java b/Mage/src/main/java/mage/abilities/keyword/SpaceflightAbility.java new file mode 100644 index 0000000000..e77bc80e0d --- /dev/null +++ b/Mage/src/main/java/mage/abilities/keyword/SpaceflightAbility.java @@ -0,0 +1,102 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.abilities.keyword; + +import mage.constants.Duration; +import mage.abilities.Ability; +import mage.abilities.EvasionAbility; +import mage.abilities.MageSingleton; +import mage.abilities.effects.RestrictionEffect; +import mage.game.Game; +import mage.game.permanent.Permanent; + +import java.io.ObjectStreamException; + +/** + * + * @author Styxo + */ +public class SpaceflightAbility extends EvasionAbility implements MageSingleton { + + private static final SpaceflightAbility fINSTANCE = new SpaceflightAbility(); + + private Object readResolve() throws ObjectStreamException { + return fINSTANCE; + } + + public static SpaceflightAbility getInstance() { + return fINSTANCE; + } + + private SpaceflightAbility() { + this.addEffect(new SpaceFlightEffect()); + } + + @Override + public String getRule() { + return "Spaceflight"; + } + + @Override + public SpaceflightAbility copy() { + return fINSTANCE; + } + +} + +class SpaceFlightEffect extends RestrictionEffect implements MageSingleton { + + public SpaceFlightEffect() { + super(Duration.EndOfGame); + } + + public SpaceFlightEffect(final SpaceFlightEffect effect) { + super(effect); + } + + @Override + public boolean applies(Permanent permanent, Ability source, Game game) { + return permanent.getAbilities().containsKey(SpaceflightAbility.getInstance().getId()); + } + + @Override + public boolean canBlock(Permanent attacker, Permanent blocker, Ability source, Game game) { + return attacker.getAbilities().containsKey(SpaceflightAbility.getInstance().getId()); + } + + @Override + public boolean canBeBlocked(Permanent attacker, Permanent blocker, Ability source, Game game) { + return blocker.getAbilities().containsKey(SpaceflightAbility.getInstance().getId()); + } + + @Override + public SpaceFlightEffect copy() { + return new SpaceFlightEffect(this); + } + +} diff --git a/Mage/src/main/java/mage/constants/AbilityWord.java b/Mage/src/main/java/mage/constants/AbilityWord.java index b076e77e4d..7de396d86d 100644 --- a/Mage/src/main/java/mage/constants/AbilityWord.java +++ b/Mage/src/main/java/mage/constants/AbilityWord.java @@ -46,6 +46,7 @@ public enum AbilityWord { FEROCIOUS("Ferocious"), FORMIDABLE("Formidable"), GRANDEUR("Grandeur"), + HATE("Hate"), HELLBENT("Hellbent"), HEROIC("Heroic"), IMPRINT("Imprint"), diff --git a/Mage/src/main/java/mage/counters/CounterType.java b/Mage/src/main/java/mage/counters/CounterType.java index dca963a223..876a5200db 100644 --- a/Mage/src/main/java/mage/counters/CounterType.java +++ b/Mage/src/main/java/mage/counters/CounterType.java @@ -94,6 +94,7 @@ public enum CounterType { POLYP("polyp"), POISON("poison"), PRESSURE("pressure"), + REPAIR("repair"), QUEST("quest"), SCREAM("scream"), SHELL("shell"), diff --git a/Mage/src/main/java/mage/game/events/GameEvent.java b/Mage/src/main/java/mage/game/events/GameEvent.java index e94d1cbd70..7debe26452 100644 --- a/Mage/src/main/java/mage/game/events/GameEvent.java +++ b/Mage/src/main/java/mage/game/events/GameEvent.java @@ -217,6 +217,7 @@ public class GameEvent implements Serializable { TRANSFORM, TRANSFORMED, BECOMES_MONSTROUS, BECOMES_RENOWNED, + MEDITATED, PHASE_OUT, PHASED_OUT, PHASE_IN, PHASED_IN, TURNFACEUP, TURNEDFACEUP, diff --git a/Mage/src/main/java/mage/game/permanent/token/DroidToken.java b/Mage/src/main/java/mage/game/permanent/token/DroidToken.java new file mode 100644 index 0000000000..5cac7577df --- /dev/null +++ b/Mage/src/main/java/mage/game/permanent/token/DroidToken.java @@ -0,0 +1,51 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.game.permanent.token; + +import java.util.Arrays; +import mage.MageInt; +import mage.constants.CardType; + +/** + * + * @author Styxo + */ +public class DroidToken extends Token { + + public DroidToken() { + super("Droid", "1/1 colorless Droid creature token"); + availableImageSetCodes.addAll(Arrays.asList("SWS")); + + cardType.add(CardType.CREATURE); + cardType.add(CardType.ARTIFACT); + subtype.add("Droid"); + + power = new MageInt(1); + toughness = new MageInt(1); + } +} diff --git a/Mage/src/main/java/mage/game/permanent/token/EwokToken.java b/Mage/src/main/java/mage/game/permanent/token/EwokToken.java new file mode 100644 index 0000000000..fbdaf99040 --- /dev/null +++ b/Mage/src/main/java/mage/game/permanent/token/EwokToken.java @@ -0,0 +1,47 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.game.permanent.token; + +import java.util.Arrays; +import mage.constants.CardType; + +/** + * + * @author Styxo + */ +public class EwokToken extends Token { + + public EwokToken() { + super("Ewok", "1/1 green Ewok creature tokens", 1, 1); + availableImageSetCodes.addAll(Arrays.asList("SWS")); + + cardType.add(CardType.CREATURE); + subtype.add("Ewok"); + color.setGreen(true); + } +} diff --git a/Mage/src/main/java/mage/game/permanent/token/TIEFighterToken.java b/Mage/src/main/java/mage/game/permanent/token/TIEFighterToken.java new file mode 100644 index 0000000000..2d091f6f15 --- /dev/null +++ b/Mage/src/main/java/mage/game/permanent/token/TIEFighterToken.java @@ -0,0 +1,26 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.game.permanent.token; + +import mage.abilities.keyword.SpaceflightAbility; +import mage.constants.CardType; + +/** + * + * @author Styxo + */ +public class TIEFighterToken extends Token { + + public TIEFighterToken() { + super("TIE Fighter", "1/1 black Starship artifact creature tokens with Spaceflight named TIE Fighter", 1, 1); + this.setOriginalExpansionSetCode("SWS"); + cardType.add(CardType.CREATURE); + cardType.add(CardType.ARTIFACT); + color.setBlack(true); + addAbility(SpaceflightAbility.getInstance()); + subtype.add("Starship"); + } +} diff --git a/Mage/src/main/java/mage/game/permanent/token/TrooperToken.java b/Mage/src/main/java/mage/game/permanent/token/TrooperToken.java new file mode 100644 index 0000000000..6f72120ed0 --- /dev/null +++ b/Mage/src/main/java/mage/game/permanent/token/TrooperToken.java @@ -0,0 +1,51 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.game.permanent.token; + +import java.util.Arrays; +import mage.MageInt; +import mage.constants.CardType; + +/** + * + * @author Styxo + */ +public class TrooperToken extends Token { + + public TrooperToken() { + super("Trooper", "1/1 white Trooper creature token"); + availableImageSetCodes.addAll(Arrays.asList("SWS")); + + cardType.add(CardType.CREATURE); + subtype.add("Trooper"); + + color.setWhite(true); + power = new MageInt(1); + toughness = new MageInt(1); + } +} diff --git a/Mage/src/main/java/mage/watchers/common/NonCombatDamageWatcher.java b/Mage/src/main/java/mage/watchers/common/NonCombatDamageWatcher.java new file mode 100644 index 0000000000..2cceb1f54e --- /dev/null +++ b/Mage/src/main/java/mage/watchers/common/NonCombatDamageWatcher.java @@ -0,0 +1,89 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.watchers.common; + +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; +import mage.constants.WatcherScope; +import mage.game.Game; +import mage.game.events.DamagedPlayerEvent; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.watchers.Watcher; + +/* + * + * @author Styxo + */ +public class NonCombatDamageWatcher extends Watcher { + + private final Set playersBeenDealtNonCombatDamage = new HashSet<>(); + + public NonCombatDamageWatcher() { + super("NonCombatDamageWatcher", WatcherScope.GAME); + } + + public NonCombatDamageWatcher(final NonCombatDamageWatcher watcher) { + super(watcher); + } + + @Override + public void watch(GameEvent event, Game game) { + if (event.getType() == GameEvent.EventType.LOST_LIFE) { + UUID playerId = event.getPlayerId(); + if (playerId != null) { + playersBeenDealtNonCombatDamage.add(playerId); + } + } else if (event.getType() == EventType.DAMAGED_PLAYER) { + DamagedPlayerEvent dEvent = (DamagedPlayerEvent) event; + if (!dEvent.isCombatDamage()) { + UUID playerId = event.getPlayerId(); + if (playerId != null) { + playersBeenDealtNonCombatDamage.add(playerId); + } + } + } + } + + public boolean opponentsBeenDealtNonCombatDamage(UUID playerId) { + return (!playersBeenDealtNonCombatDamage.contains(playerId) && playersBeenDealtNonCombatDamage.size() > 0) + || (playersBeenDealtNonCombatDamage.contains(playerId) && playersBeenDealtNonCombatDamage.size() > 1); + } + + @Override + public void reset() { + super.reset(); + playersBeenDealtNonCombatDamage.clear(); + } + + @Override + public NonCombatDamageWatcher copy() { + return new NonCombatDamageWatcher(this); + } +}