diff --git a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java index aef03c9bd6b..9c6e84c1dce 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -81,7 +81,7 @@ public class AbilityUtils { c = sa.getRootAbility().getOriginalHost(); } else if (defined.equals("EffectSource")) { - if (hostCard.getType().hasSubtype("Effect")) { + if (hostCard.isEmblem() || hostCard.getType().hasSubtype("Effect")) { c = AbilityUtils.findEffectRoot(hostCard); } } @@ -296,7 +296,7 @@ public class AbilityUtils { private static Card findEffectRoot(Card startCard) { Card cc = startCard.getEffectSource(); if (cc != null) { - if (cc.getType().hasSubtype("Effect")) { + if (cc.isEmblem() || cc.getType().hasSubtype("Effect")) { return findEffectRoot(cc); } return cc; diff --git a/forge-game/src/main/java/forge/game/ability/effects/EffectEffect.java b/forge-game/src/main/java/forge/game/ability/effects/EffectEffect.java index 0476b34b5c5..7337f780314 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/EffectEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/EffectEffect.java @@ -2,6 +2,7 @@ package forge.game.ability.effects; import forge.GameCommand; import forge.ImageKeys; +import forge.card.CardType; import forge.game.Game; import forge.game.ability.AbilityFactory; import forge.game.ability.AbilityUtils; @@ -109,10 +110,29 @@ public class EffectEffect extends SpellAbilityEffect { final Player controller = sa.hasParam("EffectOwner") ? ownerEff : sa.getActivatingPlayer(); final Card eff = new Card(game.nextCardId(), game); eff.setName(name); - eff.addType("Effect"); // Or Emblem + // if name includes emplem then it should be one + eff.addType(name.endsWith("emblem") ? "Emblem" : "Effect"); + // add Planeswalker types into Emblem for fun + if (name.endsWith("emblem") && hostCard.isPlaneswalker()) { + for (final String type : hostCard.getType().getSubtypes()) { + if (CardType.isAPlaneswalkerType(type)) { + eff.addType(type); + } + } + } eff.setToken(true); // Set token to true, so when leaving play it gets nuked eff.setOwner(controller); - eff.setImageKey(sa.hasParam("Image") ? ImageKeys.getTokenKey(sa.getParam("Image")) : hostCard.getImageKey()); + + String image; + if (sa.hasParam("Image")) { + image = ImageKeys.getTokenKey(sa.getParam("Image")); + } else if (name.endsWith("emblem")) { // try to get the image from name + image = ImageKeys.getTokenKey(name.replace(",", "").replace(" ", "_").toLowerCase()); + } else { // use host image + image = hostCard.getImageKey(); + } + + eff.setImageKey(image); eff.setColor(hostCard.determineColor().getColor()); eff.setImmutable(true); eff.setEffectSource(hostCard); diff --git a/forge-gui-desktop/src/main/java/forge/view/arcane/CardPanel.java b/forge-gui-desktop/src/main/java/forge/view/arcane/CardPanel.java index 7ada2367408..2021549dd98 100644 --- a/forge-gui-desktop/src/main/java/forge/view/arcane/CardPanel.java +++ b/forge-gui-desktop/src/main/java/forge/view/arcane/CardPanel.java @@ -253,7 +253,7 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl final CardStateView state = getCard().getCurrentState(); final CardEdition ed = FModel.getMagicDb().getEditions().get(state.getSetCode()); boolean colorIsSet = false; - if (state.getType().hasStringType("Effect")) { + if (state.getType().isEmblem() || state.getType().hasStringType("Effect")) { // Effects are drawn with orange border g2d.setColor(Color.ORANGE); colorIsSet = true; diff --git a/forge-gui/src/main/java/forge/card/CardDetailUtil.java b/forge-gui/src/main/java/forge/card/CardDetailUtil.java index 9d4af5086ba..dd0f663dba7 100644 --- a/forge-gui/src/main/java/forge/card/CardDetailUtil.java +++ b/forge-gui/src/main/java/forge/card/CardDetailUtil.java @@ -205,7 +205,7 @@ public class CardDetailUtil { String curColors = ""; // do not show current colors for temp effect cards, emblems and the like - if (state.getType().hasSubtype("Effect")) { + if (state.getType().isEmblem() || state.getType().hasSubtype("Effect")) { return ""; }