diff --git a/Mage.Common/src/mage/view/CardView.java b/Mage.Common/src/mage/view/CardView.java index 1474749aa6c..7cef8b191a8 100644 --- a/Mage.Common/src/mage/view/CardView.java +++ b/Mage.Common/src/mage/view/CardView.java @@ -37,6 +37,7 @@ import mage.ObjectColor; import mage.Constants.CardType; import mage.Constants.Rarity; import mage.cards.Card; +import mage.counters.CounterType; import mage.counters.Counters; import mage.game.permanent.Permanent; import mage.game.permanent.PermanentToken; @@ -81,11 +82,11 @@ public class CardView implements Serializable { if (card instanceof Permanent) { this.power = Integer.toString(card.getPower().getValue()); this.toughness = Integer.toString(card.getToughness().getValue()); - this.loyalty = Integer.toString(card.getLoyalty().getValue()); + this.loyalty = Integer.toString(((Permanent) card).getCounters().getCount(CounterType.LOYALTY)); } else { this.power = card.getPower().toString(); this.toughness = card.getToughness().toString(); - this.loyalty = card.getLoyalty().toString(); + this.loyalty = ""; } this.cardTypes = card.getCardType(); this.subTypes = card.getSubtype(); @@ -123,7 +124,7 @@ public class CardView implements Serializable { this.rules = token.getAbilities().getRules(this.name); this.power = token.getPower().toString(); this.toughness = token.getToughness().toString(); - this.loyalty = token.getLoyalty().toString(); + this.loyalty = ""; this.cardTypes = token.getCardType(); this.subTypes = token.getSubtype(); this.superTypes = token.getSupertype(); diff --git a/Mage.Common/src/mage/view/StackAbilityView.java b/Mage.Common/src/mage/view/StackAbilityView.java index c6ae2b0f3bd..96739f610a9 100644 --- a/Mage.Common/src/mage/view/StackAbilityView.java +++ b/Mage.Common/src/mage/view/StackAbilityView.java @@ -51,7 +51,7 @@ public class StackAbilityView extends CardView { rules.add(ability.getRule(sourceName)); this.power = ability.getPower().toString(); this.toughness = ability.getToughness().toString(); - this.loyalty = ability.getLoyalty().toString(); + this.loyalty = ""; this.cardTypes = ability.getCardType(); this.subTypes = ability.getSubtype(); this.superTypes = ability.getSupertype(); diff --git a/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/simulators/CombatSimulator.java b/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/simulators/CombatSimulator.java index 5dc07676f6b..ab08749fcdc 100644 --- a/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/simulators/CombatSimulator.java +++ b/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/simulators/CombatSimulator.java @@ -35,6 +35,8 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.UUID; + +import mage.counters.CounterType; import mage.game.Game; import mage.game.combat.CombatGroup; import mage.game.permanent.Permanent; @@ -66,7 +68,7 @@ public class CombatSimulator implements Serializable { } else { Permanent permanent = game.getPermanent(defenderId); - simCombat.planeswalkerLoyalty.put(defenderId, permanent.getLoyalty().getValue()); + simCombat.planeswalkerLoyalty.put(defenderId, permanent.getCounters().getCount(CounterType.LOYALTY)); } } return simCombat; diff --git a/Mage.Sets/src/mage/sets/magic2010/AjaniGoldmane.java b/Mage.Sets/src/mage/sets/magic2010/AjaniGoldmane.java index 4528e641f6b..a68e7a590ff 100644 --- a/Mage.Sets/src/mage/sets/magic2010/AjaniGoldmane.java +++ b/Mage.Sets/src/mage/sets/magic2010/AjaniGoldmane.java @@ -39,15 +39,19 @@ import mage.Constants.Zone; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.LoyaltyAbility; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.ContinuousEffectImpl; import mage.abilities.effects.Effects; import mage.abilities.effects.common.continious.GainAbilityControlledEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.effects.common.counter.AddPlusOneCountersControlledEffect; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.keyword.VigilanceAbility; import mage.cards.CardImpl; +import mage.counters.CounterType; import mage.filter.common.FilterCreaturePermanent; import mage.game.Game; import mage.game.permanent.Permanent; @@ -65,7 +69,7 @@ public class AjaniGoldmane extends CardImpl { this.expansionSetCode = "M10"; this.subtype.add("Ajani"); this.color.setWhite(true); - this.loyalty = new MageInt(4); + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.LOYALTY.createInstance(4)), "")); this.addAbility(new LoyaltyAbility(new GainLifeEffect(2), 1)); diff --git a/Mage.Sets/src/mage/sets/magic2010/ChandraNalaar.java b/Mage.Sets/src/mage/sets/magic2010/ChandraNalaar.java index 7de3a6a0ea6..ae2957fb7b5 100644 --- a/Mage.Sets/src/mage/sets/magic2010/ChandraNalaar.java +++ b/Mage.Sets/src/mage/sets/magic2010/ChandraNalaar.java @@ -33,11 +33,14 @@ import mage.Constants.CardType; import mage.Constants.Rarity; import mage.MageInt; import mage.abilities.LoyaltyAbility; +import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.effects.Effects; import mage.abilities.effects.common.DamageAllControlledTargetEffect; import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.DamageXTargetEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.cards.CardImpl; +import mage.counters.CounterType; import mage.filter.common.FilterCreaturePermanent; import mage.target.TargetPlayer; import mage.target.common.TargetCreaturePermanent; @@ -53,7 +56,8 @@ public class ChandraNalaar extends CardImpl { this.expansionSetCode = "M10"; this.subtype.add("Chandra "); this.color.setRed(true); - this.loyalty = new MageInt(6); + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.LOYALTY.createInstance(6)), "")); + LoyaltyAbility ability1 = new LoyaltyAbility(new DamageTargetEffect(1), 1); ability1.addTarget(new TargetPlayer()); diff --git a/Mage.Sets/src/mage/sets/magic2010/GarrukWildspeaker.java b/Mage.Sets/src/mage/sets/magic2010/GarrukWildspeaker.java index 4ef8e72d2c2..daae0490a6e 100644 --- a/Mage.Sets/src/mage/sets/magic2010/GarrukWildspeaker.java +++ b/Mage.Sets/src/mage/sets/magic2010/GarrukWildspeaker.java @@ -34,13 +34,16 @@ import mage.Constants.Duration; import mage.Constants.Rarity; import mage.MageInt; import mage.abilities.LoyaltyAbility; +import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.effects.Effects; import mage.abilities.effects.common.continious.BoostControlledEffect; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.continious.GainAbilityControlledEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.effects.common.UntapTargetEffect; import mage.abilities.keyword.TrampleAbility; import mage.cards.CardImpl; +import mage.counters.CounterType; import mage.filter.common.FilterCreaturePermanent; import mage.game.permanent.token.BeastToken; import mage.target.common.TargetLandPermanent; @@ -58,7 +61,8 @@ public class GarrukWildspeaker extends CardImpl { this.expansionSetCode = "M10"; this.subtype.add("Garruk"); this.color.setGreen(true); - this.loyalty = new MageInt(3); + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.LOYALTY.createInstance(3)), "")); + LoyaltyAbility ability1 = new LoyaltyAbility(new UntapTargetEffect(), 1); ability1.addTarget(new TargetLandPermanent(2)); diff --git a/Mage.Sets/src/mage/sets/magic2010/JaceBeleren.java b/Mage.Sets/src/mage/sets/magic2010/JaceBeleren.java index ff564adb4e5..91d2877835e 100644 --- a/Mage.Sets/src/mage/sets/magic2010/JaceBeleren.java +++ b/Mage.Sets/src/mage/sets/magic2010/JaceBeleren.java @@ -33,10 +33,13 @@ import mage.Constants.CardType; import mage.Constants.Rarity; import mage.MageInt; import mage.abilities.LoyaltyAbility; +import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.effects.common.DrawCardAllEffect; import mage.abilities.effects.common.DrawCardTargetEffect; import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.cards.CardImpl; +import mage.counters.CounterType; import mage.target.TargetPlayer; /** @@ -50,7 +53,8 @@ public class JaceBeleren extends CardImpl { this.expansionSetCode = "M10"; this.subtype.add("Jace"); this.color.setBlue(true); - this.loyalty = new MageInt(3); + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.LOYALTY.createInstance(3)), "")); + this.addAbility(new LoyaltyAbility(new DrawCardAllEffect(1), 2)); diff --git a/Mage.Sets/src/mage/sets/magic2010/LilianaVess.java b/Mage.Sets/src/mage/sets/magic2010/LilianaVess.java index d8eea7e0d68..2720d0d6ce8 100644 --- a/Mage.Sets/src/mage/sets/magic2010/LilianaVess.java +++ b/Mage.Sets/src/mage/sets/magic2010/LilianaVess.java @@ -36,11 +36,14 @@ import mage.Constants.Zone; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.LoyaltyAbility; +import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DiscardTargetEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.effects.common.search.SearchLibraryPutOnLibraryEffect; import mage.cards.Card; import mage.cards.CardImpl; +import mage.counters.CounterType; import mage.game.Game; import mage.players.Player; import mage.target.TargetPlayer; @@ -57,7 +60,7 @@ public class LilianaVess extends CardImpl { this.expansionSetCode = "M10"; this.subtype.add("Liliana"); this.color.setBlack(true); - this.loyalty = new MageInt(5); + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.LOYALTY.createInstance(5)), "")); LoyaltyAbility ability1 = new LoyaltyAbility(new DiscardTargetEffect(1), 1); ability1.addTarget(new TargetPlayer()); diff --git a/Mage.Sets/src/mage/sets/riseoftheeldrazi/GideonJura.java b/Mage.Sets/src/mage/sets/riseoftheeldrazi/GideonJura.java index e85f5bf4179..1d0cc8601a0 100644 --- a/Mage.Sets/src/mage/sets/riseoftheeldrazi/GideonJura.java +++ b/Mage.Sets/src/mage/sets/riseoftheeldrazi/GideonJura.java @@ -36,11 +36,14 @@ import mage.Constants.TurnPhase; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.LoyaltyAbility; +import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.effects.RequirementEffect; import mage.abilities.effects.common.continious.BecomesCreatureSourceEOTEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.effects.common.PreventAllDamageSourceEffect; import mage.cards.CardImpl; +import mage.counters.CounterType; import mage.filter.common.FilterCreaturePermanent; import mage.game.Game; import mage.game.permanent.Permanent; @@ -66,7 +69,7 @@ public class GideonJura extends CardImpl { this.expansionSetCode = "ROE"; this.subtype.add("Gideon"); this.color.setWhite(true); - this.loyalty = new MageInt(6); + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.LOYALTY.createInstance(6)), "")); LoyaltyAbility ability1 = new LoyaltyAbility(new GideonJuraEffect(), 2); ability1.addTarget(new TargetOpponent()); diff --git a/Mage.Sets/src/mage/sets/riseoftheeldrazi/SarkhantheMad.java b/Mage.Sets/src/mage/sets/riseoftheeldrazi/SarkhantheMad.java index 3d4f3dc0ea2..07c1453af69 100644 --- a/Mage.Sets/src/mage/sets/riseoftheeldrazi/SarkhantheMad.java +++ b/Mage.Sets/src/mage/sets/riseoftheeldrazi/SarkhantheMad.java @@ -36,11 +36,14 @@ import mage.Constants.Zone; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.LoyaltyAbility; +import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.Cards; import mage.cards.CardsImpl; +import mage.counters.CounterType; import mage.filter.common.FilterControlledPermanent; import mage.game.Game; import mage.game.permanent.Permanent; @@ -60,7 +63,7 @@ public class SarkhantheMad extends CardImpl { super(ownerId, 214, "Sarkhan the Mad", Rarity.MYTHIC, new CardType[]{CardType.PLANESWALKER}, "{3}{B}{R}"); this.expansionSetCode = "ROE"; this.subtype.add("Sarkhan"); - this.loyalty = new MageInt(7); + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.LOYALTY.createInstance(7)), "")); this.color.setBlack(true); this.color.setRed(true); diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/ElspethTirel.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/ElspethTirel.java index 069549ed152..8c28328cafb 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/ElspethTirel.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/ElspethTirel.java @@ -36,9 +36,12 @@ import mage.Constants.Rarity; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.LoyaltyAbility; +import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.cards.CardImpl; +import mage.counters.CounterType; import mage.filter.common.FilterCreaturePermanent; import mage.game.Game; import mage.game.permanent.Permanent; @@ -57,7 +60,9 @@ public class ElspethTirel extends CardImpl { this.expansionSetCode = "SOM"; this.subtype.add("Elspeth"); this.color.setWhite(true); - this.loyalty = new MageInt(4); + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.LOYALTY.createInstance(4)), "")); + + this.addAbility(new LoyaltyAbility(new ElspethTirelFirstEffect(), 2)); this.addAbility(new LoyaltyAbility(new CreateTokenEffect(new SoldierToken(), 3), -2)); this.addAbility(new LoyaltyAbility(new ElspethTirelThirdEffect(), -5)); diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/KothoftheHammer.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/KothoftheHammer.java index 186db635b7c..e75b1939b62 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/KothoftheHammer.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/KothoftheHammer.java @@ -38,6 +38,7 @@ import mage.Constants.Zone; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.LoyaltyAbility; +import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.effects.ContinuousEffectImpl; @@ -45,7 +46,9 @@ import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.ManaEffect; import mage.abilities.effects.common.UntapTargetEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.cards.CardImpl; +import mage.counters.CounterType; import mage.filter.Filter; import mage.filter.common.FilterLandPermanent; import mage.game.Game; @@ -70,7 +73,8 @@ public class KothoftheHammer extends CardImpl { this.expansionSetCode = "SOM"; this.subtype.add("Koth"); this.color.setRed(true); - this.loyalty = new MageInt(3); + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.LOYALTY.createInstance(3)), "")); + Ability ability = new LoyaltyAbility(new UntapTargetEffect(), 1); ability.addEffect(new KothoftheHammerFirstEffect()); ability.addTarget(new TargetLandPermanent(filter)); diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/QuicksilverGargantuan.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/QuicksilverGargantuan.java index 6f353188f9e..a1599ea38cf 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/QuicksilverGargantuan.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/QuicksilverGargantuan.java @@ -107,7 +107,7 @@ public class QuicksilverGargantuan extends CardImpl { for (Ability ability : card.getAbilities()) { permanent.addAbility(ability); } - permanent.getLoyalty().setValue(card.getLoyalty().getValue()); + //permanent.getLoyalty().setValue(card.getLoyalty().getValue()); permanent.setArt(card.getArt()); return true; diff --git a/Mage.Sets/src/mage/sets/shardsofalara/AjaniVengeant.java b/Mage.Sets/src/mage/sets/shardsofalara/AjaniVengeant.java index 6b04c455061..c3921a1ed0b 100644 --- a/Mage.Sets/src/mage/sets/shardsofalara/AjaniVengeant.java +++ b/Mage.Sets/src/mage/sets/shardsofalara/AjaniVengeant.java @@ -33,12 +33,15 @@ import mage.Constants.CardType; import mage.Constants.Rarity; import mage.MageInt; import mage.abilities.LoyaltyAbility; +import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.effects.Effects; import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.DestroyAllControlledTargetEffect; import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.effects.common.SkipNextUntapTargetEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.cards.CardImpl; +import mage.counters.CounterType; import mage.filter.FilterPermanent; import mage.target.TargetPermanent; import mage.target.TargetPlayer; @@ -56,7 +59,8 @@ public class AjaniVengeant extends CardImpl { this.subtype.add("Ajani"); this.color.setRed(true); this.color.setWhite(true); - this.loyalty = new MageInt(3); + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.LOYALTY.createInstance(3)), "")); + LoyaltyAbility ability1 = new LoyaltyAbility(new SkipNextUntapTargetEffect(), 1); ability1.addTarget(new TargetPermanent()); diff --git a/Mage.Sets/src/mage/sets/shardsofalara/ElspethKnightErrant.java b/Mage.Sets/src/mage/sets/shardsofalara/ElspethKnightErrant.java index 92f9f977c8f..0fbef6e4e44 100644 --- a/Mage.Sets/src/mage/sets/shardsofalara/ElspethKnightErrant.java +++ b/Mage.Sets/src/mage/sets/shardsofalara/ElspethKnightErrant.java @@ -38,14 +38,17 @@ import mage.Constants.SubLayer; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.LoyaltyAbility; +import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.effects.ContinuousEffectImpl; import mage.abilities.effects.Effects; import mage.abilities.effects.common.continious.BoostTargetEffect; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.continious.GainAbilityTargetEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.IndestructibleAbility; import mage.cards.CardImpl; +import mage.counters.CounterType; import mage.filter.Filter.ComparisonScope; import mage.filter.FilterPermanent; import mage.game.Game; @@ -66,7 +69,7 @@ public class ElspethKnightErrant extends CardImpl { this.expansionSetCode = "ALA"; this.subtype.add("Elspeth"); this.color.setWhite(true); - this.loyalty = new MageInt(4); + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.LOYALTY.createInstance(4)), "")); this.addAbility(new LoyaltyAbility(new CreateTokenEffect(soldierToken), 1)); diff --git a/Mage.Sets/src/mage/sets/shardsofalara/SarkhanVol.java b/Mage.Sets/src/mage/sets/shardsofalara/SarkhanVol.java index 067bd59b2b5..0c76f2ed986 100644 --- a/Mage.Sets/src/mage/sets/shardsofalara/SarkhanVol.java +++ b/Mage.Sets/src/mage/sets/shardsofalara/SarkhanVol.java @@ -34,14 +34,17 @@ import mage.Constants.Duration; import mage.Constants.Rarity; import mage.MageInt; import mage.abilities.LoyaltyAbility; +import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.effects.Effects; import mage.abilities.effects.common.continious.*; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.continious.GainAbilityControlledEffect; import mage.abilities.effects.common.continious.GainControlTargetEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.effects.common.UntapTargetEffect; import mage.abilities.keyword.HasteAbility; import mage.cards.CardImpl; +import mage.counters.CounterType; import mage.filter.common.FilterCreaturePermanent; import mage.game.permanent.token.DragonToken; import mage.target.common.TargetCreaturePermanent; @@ -60,7 +63,7 @@ public class SarkhanVol extends CardImpl { this.subtype.add("Sarkhan"); this.color.setRed(true); this.color.setGreen(true); - this.loyalty = new MageInt(4); + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.LOYALTY.createInstance(4)), "")); Effects effects1 = new Effects(); effects1.add(new BoostControlledEffect(1, 1, Duration.EndOfTurn)); diff --git a/Mage.Sets/src/mage/sets/worldwake/JaceTheMindSculptor.java b/Mage.Sets/src/mage/sets/worldwake/JaceTheMindSculptor.java index b6e92dad132..6dd27972b91 100644 --- a/Mage.Sets/src/mage/sets/worldwake/JaceTheMindSculptor.java +++ b/Mage.Sets/src/mage/sets/worldwake/JaceTheMindSculptor.java @@ -36,12 +36,15 @@ import mage.Constants.Zone; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.LoyaltyAbility; +import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.Cards; import mage.cards.CardsImpl; +import mage.counters.CounterType; import mage.game.ExileZone; import mage.game.Game; import mage.players.Player; @@ -61,7 +64,8 @@ public class JaceTheMindSculptor extends CardImpl { this.expansionSetCode = "WWK"; this.subtype.add("Jace"); this.color.setBlue(true); - this.loyalty = new MageInt(3); + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.LOYALTY.createInstance(3)), "")); + LoyaltyAbility ability1 = new LoyaltyAbility(new JaceTheMindSculptorEffect1(), 2); ability1.addTarget(new TargetPlayer()); diff --git a/Mage.Sets/src/mage/sets/zendikar/NissaRevane.java b/Mage.Sets/src/mage/sets/zendikar/NissaRevane.java index ac89d6a35e5..542ba9c4f74 100644 --- a/Mage.Sets/src/mage/sets/zendikar/NissaRevane.java +++ b/Mage.Sets/src/mage/sets/zendikar/NissaRevane.java @@ -34,9 +34,12 @@ import mage.Constants.Rarity; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.LoyaltyAbility; +import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect; import mage.cards.CardImpl; +import mage.counters.CounterType; import mage.filter.FilterCard; import mage.filter.common.FilterControlledCreaturePermanent; import mage.game.Game; @@ -63,7 +66,7 @@ public class NissaRevane extends CardImpl { super(ownerId, 170, "Nissa Revane", Rarity.MYTHIC, new CardType[]{ CardType.PLANESWALKER }, "{2}{G}{G}"); this.expansionSetCode = "ZEN"; this.subtype.add("Nissa"); - this.loyalty = new MageInt(2); + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.LOYALTY.createInstance(2)), "")); this.color.setGreen(true); diff --git a/Mage.Sets/src/mage/sets/zendikar/VampireHexmage.java b/Mage.Sets/src/mage/sets/zendikar/VampireHexmage.java index 4deacbe0876..32b04660c91 100644 --- a/Mage.Sets/src/mage/sets/zendikar/VampireHexmage.java +++ b/Mage.Sets/src/mage/sets/zendikar/VampireHexmage.java @@ -28,6 +28,7 @@ package mage.sets.zendikar; import java.util.UUID; + import mage.Constants.CardType; import mage.Constants.Outcome; import mage.Constants.Rarity; @@ -94,19 +95,15 @@ class VampireHexmageEffect extends OneShotEffect { Permanent permanent = game.getPermanent(target.getFirstTarget()); - if ( permanent != null ) { - String[ ] counterNames = permanent.getCounters().keySet().toArray(new String[0]); + if (permanent != null) { + String[] counterNames = permanent.getCounters().keySet().toArray(new String[0]); - if ( permanent.getLoyalty() != null ) { - permanent.getLoyalty().setValue(0); - } + for (String counterName : counterNames) { + permanent.getCounters().remove(counterName); + } - for ( String counterName : counterNames ) { - permanent.getCounters().remove(counterName); - } - - return true; - } + return true; + } return false; } diff --git a/Mage/src/mage/MageObject.java b/Mage/src/mage/MageObject.java index 63035c2f67f..3f25755ec05 100644 --- a/Mage/src/mage/MageObject.java +++ b/Mage/src/mage/MageObject.java @@ -25,7 +25,6 @@ public interface MageObject extends MageItem, Serializable { public MageInt getPower(); public MageInt getToughness(); - public MageInt getLoyalty(); public void adjustCosts(Ability ability, Game game); diff --git a/Mage/src/mage/MageObjectImpl.java b/Mage/src/mage/MageObjectImpl.java index c70261a9f92..eb81d2736fc 100644 --- a/Mage/src/mage/MageObjectImpl.java +++ b/Mage/src/mage/MageObjectImpl.java @@ -31,14 +31,16 @@ package mage; import java.util.ArrayList; import java.util.List; import java.util.UUID; -import mage.Constants.CardType; +import mage.Constants.CardType; import mage.abilities.Abilities; import mage.abilities.AbilitiesImpl; import mage.abilities.Ability; import mage.abilities.costs.mana.ManaCost; import mage.abilities.costs.mana.ManaCosts; import mage.abilities.costs.mana.ManaCostsImpl; +import mage.counters.Counter; +import mage.counters.common.LoyaltyCounter; import mage.game.Game; public abstract class MageObjectImpl> implements MageObject { @@ -55,7 +57,6 @@ public abstract class MageObjectImpl> implements Mag protected String text; protected MageInt power; protected MageInt toughness; - protected MageInt loyalty; @Override public abstract T copy(); @@ -68,7 +69,6 @@ public abstract class MageObjectImpl> implements Mag objectId = id; power = new MageInt(0); toughness = new MageInt(0); - loyalty = new MageInt(0); color = new ObjectColor(); manaCost = new ManaCostsImpl(""); abilities = new AbilitiesImpl(); @@ -82,7 +82,6 @@ public abstract class MageObjectImpl> implements Mag color = object.color.copy(); power = object.power.copy(); toughness = object.toughness.copy(); - loyalty = object.loyalty.copy(); abilities = object.abilities.copy(); for (CardType cType: object.cardType) { cardType.add(cType); @@ -140,11 +139,6 @@ public abstract class MageObjectImpl> implements Mag return toughness; } - @Override - public MageInt getLoyalty() { - return loyalty; - } - @Override public ObjectColor getColor() { return color; diff --git a/Mage/src/mage/abilities/costs/common/PayLoyaltyCost.java b/Mage/src/mage/abilities/costs/common/PayLoyaltyCost.java index bbe47c19a3c..ddfda7f9ac9 100644 --- a/Mage/src/mage/abilities/costs/common/PayLoyaltyCost.java +++ b/Mage/src/mage/abilities/costs/common/PayLoyaltyCost.java @@ -30,6 +30,7 @@ package mage.abilities.costs.common; import java.util.UUID; import mage.abilities.costs.CostImpl; +import mage.counters.CounterType; import mage.game.Game; import mage.game.permanent.Permanent; @@ -54,7 +55,7 @@ public class PayLoyaltyCost extends CostImpl { @Override public boolean canPay(UUID sourceId, UUID controllerId, Game game) { Permanent planeswalker = game.getPermanent(sourceId); - if (planeswalker.getLoyalty().getValue() + amount >= 0 && !planeswalker.isLoyaltyUsed()) + if (planeswalker.getCounters().getCount(CounterType.LOYALTY) + amount >= 0 && !planeswalker.isLoyaltyUsed()) return true; return false; } @@ -62,8 +63,12 @@ public class PayLoyaltyCost extends CostImpl { @Override public boolean pay(Game game, UUID sourceId, UUID controllerId, boolean noMana) { Permanent planeswalker = game.getPermanent(sourceId); - if (planeswalker.getLoyalty().getValue() + amount >= 0 && !planeswalker.isLoyaltyUsed()) { - planeswalker.getLoyalty().boostValue(amount); + if (planeswalker.getCounters().getCount(CounterType.LOYALTY) + amount >= 0 && !planeswalker.isLoyaltyUsed()) { + if (amount > 0) { + planeswalker.getCounters().addCounter(CounterType.LOYALTY.createInstance(amount)); + } else if (amount < 0) { + planeswalker.getCounters().removeCounter(CounterType.LOYALTY, Math.abs(amount)); + } planeswalker.setLoyaltyUsed(true); this.paid = true; } diff --git a/Mage/src/mage/abilities/costs/common/PayVariableLoyaltyCost.java b/Mage/src/mage/abilities/costs/common/PayVariableLoyaltyCost.java index 313832b7071..be25b7ecc01 100644 --- a/Mage/src/mage/abilities/costs/common/PayVariableLoyaltyCost.java +++ b/Mage/src/mage/abilities/costs/common/PayVariableLoyaltyCost.java @@ -31,6 +31,7 @@ package mage.abilities.costs.common; import java.util.UUID; import mage.abilities.costs.CostImpl; import mage.abilities.costs.VariableCost; +import mage.counters.CounterType; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; @@ -62,8 +63,12 @@ public class PayVariableLoyaltyCost extends CostImpl imp public boolean pay(Game game, UUID sourceId, UUID controllerId, boolean noMana) { Permanent planeswalker = game.getPermanent(sourceId); Player player = game.getPlayer(planeswalker.getControllerId()); - this.amountPaid = player.getAmount(0, planeswalker.getLoyalty().getValue(), "", game); - planeswalker.getLoyalty().boostValue(-amountPaid); + this.amountPaid = player.getAmount(0, planeswalker.getCounters().getCount(CounterType.LOYALTY), "Choose X", game); + if (this.amountPaid> 0) { + planeswalker.getCounters().removeCounter(CounterType.LOYALTY, this.amountPaid); + } else if (this.amountPaid < 0) { + planeswalker.getCounters().addCounter(CounterType.LOYALTY.createInstance(Math.abs(this.amountPaid))); + } planeswalker.setLoyaltyUsed(true); this.paid = true; return paid; diff --git a/Mage/src/mage/abilities/effects/common/CopyEffect.java b/Mage/src/mage/abilities/effects/common/CopyEffect.java index a47de285053..49596af0d79 100644 --- a/Mage/src/mage/abilities/effects/common/CopyEffect.java +++ b/Mage/src/mage/abilities/effects/common/CopyEffect.java @@ -80,7 +80,7 @@ public class CopyEffect extends ContinuousEffectImpl { } permanent.getPower().setValue(card.getPower().getValue()); permanent.getToughness().setValue(card.getToughness().getValue()); - permanent.getLoyalty().setValue(card.getLoyalty().getValue()); + //permanent.getLoyalty().setValue(card.getLoyalty().getValue()); permanent.setArt(card.getArt()); return true; diff --git a/Mage/src/mage/abilities/effects/common/counter/AddCountersSourceEffect.java b/Mage/src/mage/abilities/effects/common/counter/AddCountersSourceEffect.java index 1231893d5e9..af8599bcc55 100644 --- a/Mage/src/mage/abilities/effects/common/counter/AddCountersSourceEffect.java +++ b/Mage/src/mage/abilities/effects/common/counter/AddCountersSourceEffect.java @@ -54,13 +54,15 @@ public class AddCountersSourceEffect extends OneShotEffect { + + public LoyaltyCounter() { + super("Loyalty"); + this.count = 1; + } + + public LoyaltyCounter(int amount) { + super("Loyalty"); + this.count = amount; + } +} diff --git a/Mage/src/mage/game/GameImpl.java b/Mage/src/mage/game/GameImpl.java index e06f82cea2f..7e4322b1301 100644 --- a/Mage/src/mage/game/GameImpl.java +++ b/Mage/src/mage/game/GameImpl.java @@ -630,7 +630,7 @@ public abstract class GameImpl> implements Game, Serializa } //20091005 - 704.5i for (Permanent perm: getBattlefield().getAllActivePermanents(CardType.PLANESWALKER)) { - if (perm.getLoyalty().getValue() == 0) { + if (perm.getCounters().getCount(CounterType.LOYALTY) == 0) { if (perm.moveToZone(Zone.GRAVEYARD, null, this, false)) return true; } diff --git a/Mage/src/mage/game/permanent/PermanentCard.java b/Mage/src/mage/game/permanent/PermanentCard.java index bfd47a74b21..12d61ca89b4 100644 --- a/Mage/src/mage/game/permanent/PermanentCard.java +++ b/Mage/src/mage/game/permanent/PermanentCard.java @@ -66,9 +66,9 @@ public class PermanentCard extends PermanentImpl { protected void init(Card card) { copyFromCard(card); - if (card.getCardType().contains(CardType.PLANESWALKER)) { + /*if (card.getCardType().contains(CardType.PLANESWALKER)) { this.loyalty = new MageInt(card.getLoyalty().getValue()); - } + }*/ if (card instanceof LevelerCard) { levelerRules = ((LevelerCard)card).getRules(); } diff --git a/Mage/src/mage/game/permanent/PermanentImpl.java b/Mage/src/mage/game/permanent/PermanentImpl.java index e88618c75b4..cb2aae8533a 100644 --- a/Mage/src/mage/game/permanent/PermanentImpl.java +++ b/Mage/src/mage/game/permanent/PermanentImpl.java @@ -456,10 +456,11 @@ public abstract class PermanentImpl> extends CardImpl if (!game.replaceEvent(event)) { int actualDamage = event.getAmount(); if (actualDamage > 0) { - if (event.getAmount() > this.loyalty.getValue()) { - actualDamage = this.loyalty.getValue(); + int countersToRemove = actualDamage; + if (countersToRemove > getCounters().getCount(CounterType.LOYALTY)) { + countersToRemove = getCounters().getCount(CounterType.LOYALTY); } - this.loyalty.boostValue(-actualDamage); + getCounters().removeCounter(CounterType.LOYALTY, countersToRemove); game.fireEvent(new DamagedPlaneswalkerEvent(objectId, sourceId, controllerId, actualDamage, combat)); return actualDamage; } diff --git a/Mage/src/mage/game/stack/Spell.java b/Mage/src/mage/game/stack/Spell.java index 646316997f6..e202a195ba6 100644 --- a/Mage/src/mage/game/stack/Spell.java +++ b/Mage/src/mage/game/stack/Spell.java @@ -224,11 +224,6 @@ public class Spell> implements StackObject, Card { return card.getToughness(); } - @Override - public MageInt getLoyalty() { - return card.getLoyalty(); - } - @Override public UUID getId() { return ability.getId(); diff --git a/Mage/src/mage/game/stack/StackAbility.java b/Mage/src/mage/game/stack/StackAbility.java index c90e763b648..55f9f27ffb3 100644 --- a/Mage/src/mage/game/stack/StackAbility.java +++ b/Mage/src/mage/game/stack/StackAbility.java @@ -147,11 +147,6 @@ public class StackAbility implements StackObject, Ability { return MageInt.EmptyMageInt; } - @Override - public MageInt getLoyalty() { - return MageInt.EmptyMageInt; - } - @Override public Zone getZone() { return this.ability.getZone();