mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 02:38:02 +00:00
*Converted Commander rules to an effect. (Fixes being unable to cast an Akroma, Angel of Fury commander face down)
This commit is contained in:
@@ -1880,16 +1880,11 @@ public class Card extends GameEntity implements Comparable<Card> {
|
|||||||
}
|
}
|
||||||
if(this.isCommander)
|
if(this.isCommander)
|
||||||
{
|
{
|
||||||
sb.append(this.getOwner().getName() + "'s Commander\r\n");
|
sb.append(getOwner() + "'s Commander\r\n\r\n");
|
||||||
for(Player p : getOwner().getGame().getPlayers()) {
|
}
|
||||||
if(p.equals(getOwner()))
|
if(this.getName().equals("Commander effect"))
|
||||||
continue;
|
{
|
||||||
|
sb.append(CardFactoryUtil.getCommanderInfo(getOwner()));
|
||||||
Map<Card,Integer> map = p.getCommanderDamage();
|
|
||||||
if(map.containsKey(this)) {
|
|
||||||
sb.append("Damage to " + p.getName() + ": "+ map.get(this) + "\r\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
sb.append(this.getAbilityText());
|
sb.append(this.getAbilityText());
|
||||||
|
|
||||||
|
|||||||
@@ -141,6 +141,7 @@ public class CardFactory {
|
|||||||
out.addImprinted(o);
|
out.addImprinted(o);
|
||||||
}
|
}
|
||||||
out.setCommander(in.isCommander());
|
out.setCommander(in.isCommander());
|
||||||
|
/*
|
||||||
if(out.isCommander())
|
if(out.isCommander())
|
||||||
{
|
{
|
||||||
out.addStaticAbility("Mode$ RaiseCost | Amount$ CommanderCostRaise | Type$ Spell | ValidCard$ Card.Self+wasCastFromCommand | EffectZone$ All | AffectedZone$ Stack");
|
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);
|
out.addSpellAbility(sa);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
return out;
|
return out;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2040,7 +2040,7 @@ public class CardFactoryUtil {
|
|||||||
card.addSpellAbility(AbilityFactory.getAbility(rawAbility, card));
|
card.addSpellAbility(AbilityFactory.getAbility(rawAbility, card));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
public static final void addCommanderAbilities(final Card cmd) {
|
public static final void addCommanderAbilities(final Card cmd) {
|
||||||
ReplacementEffect re = ReplacementHandler.parseReplacement(
|
ReplacementEffect re = ReplacementHandler.parseReplacement(
|
||||||
"Event$ Moved | Destination$ Graveyard,Exile | ValidCard$ Card.Self | Secondary$ True | Optional$ True | OptionalDecider$ You | ReplaceWith$ CommanderMoveReplacement | " +
|
"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.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");
|
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>
|
* <p>
|
||||||
|
|||||||
@@ -19,8 +19,11 @@ import forge.Card;
|
|||||||
import forge.CardLists;
|
import forge.CardLists;
|
||||||
import forge.CardPredicates;
|
import forge.CardPredicates;
|
||||||
import forge.GameLogEntryType;
|
import forge.GameLogEntryType;
|
||||||
|
import forge.ImageCache;
|
||||||
import forge.card.CardDb;
|
import forge.card.CardDb;
|
||||||
import forge.card.cardfactory.CardFactoryUtil;
|
import forge.card.cardfactory.CardFactoryUtil;
|
||||||
|
import forge.card.replacement.ReplacementEffect;
|
||||||
|
import forge.card.replacement.ReplacementHandler;
|
||||||
import forge.card.trigger.Trigger;
|
import forge.card.trigger.Trigger;
|
||||||
import forge.card.trigger.TriggerHandler;
|
import forge.card.trigger.TriggerHandler;
|
||||||
import forge.deck.CardPool;
|
import forge.deck.CardPool;
|
||||||
@@ -101,7 +104,26 @@ public class GameNew {
|
|||||||
com.add(cmd);
|
com.add(cmd);
|
||||||
player.setCommander(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);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,9 @@ import javax.swing.border.MatteBorder;
|
|||||||
import net.miginfocom.swing.MigLayout;
|
import net.miginfocom.swing.MigLayout;
|
||||||
import forge.Card;
|
import forge.Card;
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
|
import forge.card.cardfactory.CardFactoryUtil;
|
||||||
import forge.game.Game;
|
import forge.game.Game;
|
||||||
|
import forge.game.GameType;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.framework.DragCell;
|
import forge.gui.framework.DragCell;
|
||||||
@@ -90,10 +92,11 @@ public enum VPlayers implements IVDoc<CPlayers> {
|
|||||||
final InfoLabel prevention = new InfoLabel();
|
final InfoLabel prevention = new InfoLabel();
|
||||||
final InfoLabel keywords = new InfoLabel();
|
final InfoLabel keywords = new InfoLabel();
|
||||||
final InfoLabel antes = 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
|
// 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());
|
name.setText(p.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -170,6 +173,9 @@ public enum VPlayers implements IVDoc<CPlayers> {
|
|||||||
}
|
}
|
||||||
temp[6].setText(sb.toString());
|
temp[6].setText(sb.toString());
|
||||||
}
|
}
|
||||||
|
if(p0.getGame().getType() == GameType.Commander) {
|
||||||
|
temp[7].setText(CardFactoryUtil.getCommanderInfo(p0));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user