*Converted Commander rules to an effect. (Fixes being unable to cast an Akroma, Angel of Fury commander face down)

This commit is contained in:
Hellfish
2013-09-16 06:14:46 +00:00
parent 727920679c
commit eee4322173
5 changed files with 54 additions and 15 deletions

View File

@@ -1880,16 +1880,11 @@ public class Card extends GameEntity implements Comparable<Card> {
}
if(this.isCommander)
{
sb.append(this.getOwner().getName() + "'s Commander\r\n");
for(Player p : getOwner().getGame().getPlayers()) {
if(p.equals(getOwner()))
continue;
Map<Card,Integer> 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());

View File

@@ -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;
}

View File

@@ -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<Card,Integer> map = p.getCommanderDamage();
if(map.containsKey(originPlayer.getCommander())) {
sb.append("Commander Damage to " + p.getName() + ": "+ map.get(originPlayer.getCommander()) + "\r\n");
}
}
return sb.toString();
}
/**
* <p>

View File

@@ -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);
}
}

View File

@@ -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<CPlayers> {
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<CPlayers> {
}
temp[6].setText(sb.toString());
}
if(p0.getGame().getType() == GameType.Commander) {
temp[7].setText(CardFactoryUtil.getCommanderInfo(p0));
}
}
}