diff --git a/src/main/java/forge/Card.java b/src/main/java/forge/Card.java index 58eb441c0f3..783018d9d57 100644 --- a/src/main/java/forge/Card.java +++ b/src/main/java/forge/Card.java @@ -1880,16 +1880,11 @@ public class Card extends GameEntity implements Comparable { } if(this.isCommander) { - sb.append(this.getOwner().getName() + "'s Commander\r\n"); - for(Player p : getOwner().getGame().getPlayers()) { - if(p.equals(getOwner())) - continue; - - Map map = p.getCommanderDamage(); - if(map.containsKey(this)) { - sb.append("Damage to " + p.getName() + ": "+ map.get(this) + "\r\n"); - } - } + sb.append(getOwner() + "'s Commander\r\n\r\n"); + } + if(this.getName().equals("Commander effect")) + { + sb.append(CardFactoryUtil.getCommanderInfo(getOwner())); } sb.append(this.getAbilityText()); diff --git a/src/main/java/forge/card/cardfactory/CardFactory.java b/src/main/java/forge/card/cardfactory/CardFactory.java index f27f7696de3..df7be878d6d 100644 --- a/src/main/java/forge/card/cardfactory/CardFactory.java +++ b/src/main/java/forge/card/cardfactory/CardFactory.java @@ -141,6 +141,7 @@ public class CardFactory { out.addImprinted(o); } out.setCommander(in.isCommander()); + /* if(out.isCommander()) { out.addStaticAbility("Mode$ RaiseCost | Amount$ CommanderCostRaise | Type$ Spell | ValidCard$ Card.Self+wasCastFromCommand | EffectZone$ All | AffectedZone$ Stack"); @@ -150,7 +151,7 @@ public class CardFactory { out.addSpellAbility(sa); } - + */ return out; } diff --git a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java index 121643b1ddf..fad0b2980eb 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java @@ -2040,7 +2040,7 @@ public class CardFactoryUtil { card.addSpellAbility(AbilityFactory.getAbility(rawAbility, card)); } } - + /* public static final void addCommanderAbilities(final Card cmd) { ReplacementEffect re = ReplacementHandler.parseReplacement( "Event$ Moved | Destination$ Graveyard,Exile | ValidCard$ Card.Self | Secondary$ True | Optional$ True | OptionalDecider$ You | ReplaceWith$ CommanderMoveReplacement | " + @@ -2059,6 +2059,21 @@ public class CardFactoryUtil { cmd.addIntrinsicAbility("SP$ PermanentCreature | SorcerySpeed$ True | ActivationZone$ Command | SubAbility$ DBCommanderIncCast | Cost$ " + cmdManaCost); cmd.addStaticAbility("Mode$ RaiseCost | Amount$ CommanderCostRaise | Type$ Spell | ValidCard$ Card.Self+wasCastFromCommand | EffectZone$ All | AffectedZone$ Stack"); } + */ + public static final String getCommanderInfo(final Player originPlayer ) { + StringBuilder sb = new StringBuilder(); + for(Player p : originPlayer.getGame().getPlayers()) { + if(p.equals(originPlayer)) + continue; + + Map map = p.getCommanderDamage(); + if(map.containsKey(originPlayer.getCommander())) { + sb.append("Commander Damage to " + p.getName() + ": "+ map.get(originPlayer.getCommander()) + "\r\n"); + } + } + + return sb.toString(); + } /** *

diff --git a/src/main/java/forge/game/GameNew.java b/src/main/java/forge/game/GameNew.java index 2c9eeecb76d..08750e9b538 100644 --- a/src/main/java/forge/game/GameNew.java +++ b/src/main/java/forge/game/GameNew.java @@ -19,8 +19,11 @@ import forge.Card; import forge.CardLists; import forge.CardPredicates; import forge.GameLogEntryType; +import forge.ImageCache; import forge.card.CardDb; import forge.card.cardfactory.CardFactoryUtil; +import forge.card.replacement.ReplacementEffect; +import forge.card.replacement.ReplacementHandler; import forge.card.trigger.Trigger; import forge.card.trigger.TriggerHandler; import forge.deck.CardPool; @@ -101,7 +104,26 @@ public class GameNew { com.add(cmd); player.setCommander(cmd); - CardFactoryUtil.addCommanderAbilities(cmd); + final Card eff = new Card(player.getGame().nextCardId()); + eff.setName("Commander effect"); + eff.addType("Effect"); + eff.setToken(true); + eff.setOwner(player); + eff.setColor(cmd.getColor()); + eff.setImmutable(true); + + eff.setSVar("CommanderMoveReplacement", "DB$ ChangeZone | Origin$ Battlefield,Graveyard,Exile,Library | Destination$ Command | Defined$ ReplacedCard"); + eff.setSVar("DBCommanderIncCast","DB$ StoreSVar | SVar$ CommanderCostRaise | Type$ CountSVar | Expression$ CommanderCostRaise/Plus.2"); + eff.setSVar("CommanderCostRaise","Number$0"); + + Trigger t = TriggerHandler.parseTrigger("Mode$ SpellCast | Static$ True | ValidCard$ Card.YouOwn+IsCommander+wasCastFromCommand | Execute$ DBCommanderIncCast", eff, true); + eff.addTrigger(t); + ReplacementEffect r = ReplacementHandler.parseReplacement("Event$ Moved | Destination$ Graveyard,Exile | ValidCard$ Card.IsCommander+YouOwn | Secondary$ True | Optional$ True | OptionalDecider$ You | ReplaceWith$ CommanderMoveReplacement | Description$ If a commander would be put into its owner's graveyard or exile from anywhere, that player may put it into the command zone instead.", eff, true); + eff.addReplacementEffect(r); + eff.addStaticAbility("Mode$ Continuous | EffectZone$ Command | AddKeyword$ May be played | Affected$ Card.YouOwn+IsCommander | AffectedZone$ Command"); + eff.addStaticAbility("Mode$ RaiseCost | EffectZone$ Command | Amount$ CommanderCostRaise | Type$ Spell | ValidCard$ Card.YouOwn+IsCommander+wasCastFromCommand | EffectZone$ All | AffectedZone$ Stack"); + + player.getZone(ZoneType.Command).add(eff); } } diff --git a/src/main/java/forge/gui/match/views/VPlayers.java b/src/main/java/forge/gui/match/views/VPlayers.java index 5de66c195b8..babfcad7738 100644 --- a/src/main/java/forge/gui/match/views/VPlayers.java +++ b/src/main/java/forge/gui/match/views/VPlayers.java @@ -29,7 +29,9 @@ import javax.swing.border.MatteBorder; import net.miginfocom.swing.MigLayout; import forge.Card; import forge.Singletons; +import forge.card.cardfactory.CardFactoryUtil; import forge.game.Game; +import forge.game.GameType; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.gui.framework.DragCell; @@ -90,10 +92,11 @@ public enum VPlayers implements IVDoc { final InfoLabel prevention = new InfoLabel(); final InfoLabel keywords = new InfoLabel(); final InfoLabel antes = new InfoLabel(); - this.infoLBLs.put(p, new JLabel[] { name, life, hand, draw, prevention, keywords, antes }); + final InfoLabel cmd = new InfoLabel(); + this.infoLBLs.put(p, new JLabel[] { name, life, hand, draw, prevention, keywords, antes, cmd }); // Set border on bottom label, and larger font on player name - antes.setBorder(new MatteBorder(0, 0, 1, 0, FSkin.getColor(FSkin.Colors.CLR_BORDERS))); + cmd.setBorder(new MatteBorder(0, 0, 1, 0, FSkin.getColor(FSkin.Colors.CLR_BORDERS))); name.setText(p.getName()); } } @@ -170,6 +173,9 @@ public enum VPlayers implements IVDoc { } temp[6].setText(sb.toString()); } + if(p0.getGame().getType() == GameType.Commander) { + temp[7].setText(CardFactoryUtil.getCommanderInfo(p0)); + } } }