diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index c505c7f04f9..5e00330c620 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -2187,8 +2187,8 @@ public class GameAction { if (e.getValue() <= 0) { continue; } + e.setValue(Integer.valueOf(e.getKey().addDamageAfterPrevention(e.getValue(), sourceLKI, isCombat, counterTable))); sum += e.getValue(); - e.getKey().addDamageAfterPrevention(e.getValue(), sourceLKI, isCombat, counterTable); } if (sourceLKI.hasKeyword(Keyword.LIFELINK)) { 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 445d03088ed..e34e1b33c9e 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 @@ -9,6 +9,7 @@ import com.google.common.collect.Lists; import forge.GameCommand; import forge.ImageKeys; +import forge.card.CardRarity; import forge.game.Game; import forge.game.GameObject; import forge.game.ability.AbilityFactory; @@ -123,6 +124,8 @@ public class EffectEffect extends SpellAbilityEffect { } String image; + String set = hostCard.getSetCode().toLowerCase(); + StringBuilder imageSet = new StringBuilder(); if (sa.hasParam("Image")) { image = ImageKeys.getTokenKey(sa.getParam("Image")); } else if (name.startsWith("Emblem")) { // try to get the image from name @@ -135,11 +138,17 @@ public class EffectEffect extends SpellAbilityEffect { } else { // use host image image = hostCard.getImageKey(); } + imageSet.append(image).append("_").append(set); + image = imageSet.toString(); for (Player controller : effectOwner) { final Card eff = createEffect(sa, controller, name, image); eff.setSetCode(sa.getHostCard().getSetCode()); - eff.setRarity(sa.getHostCard().getRarity()); + if (name.startsWith("Emblem")) { + eff.setRarity(CardRarity.Common); + } else { + eff.setRarity(sa.getHostCard().getRarity()); + } // Abilities and triggers work the same as they do for Token // Grant abilities diff --git a/forge-game/src/main/java/forge/game/player/Player.java b/forge-game/src/main/java/forge/game/player/Player.java index b19b3fb8138..67a1fc2a26f 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -653,8 +653,7 @@ public class Player extends GameEntity implements Comparable { loseLife(Math.min(amount, life - 7)); } else if (hasKeyword("DamageLifeThreshold:1") && life <= amount) { loseLife(Math.min(amount, life - 1)); - } - else { + } else { // rule 118.2. Damage dealt to a player normally causes that player to lose that much life. loseLife(amount); } diff --git a/forge-gui-desktop/src/main/java/forge/util/SwingImageFetcher.java b/forge-gui-desktop/src/main/java/forge/util/SwingImageFetcher.java index 85643483aa7..54d36b41d91 100644 --- a/forge-gui-desktop/src/main/java/forge/util/SwingImageFetcher.java +++ b/forge-gui-desktop/src/main/java/forge/util/SwingImageFetcher.java @@ -88,6 +88,19 @@ public class SwingImageFetcher extends ImageFetcher { break; } catch (IOException e) { System.err.println("Failed to download card [" + destPath + "] image: " + e.getMessage()); + if (urlToDownload.contains("tokens")) { + int setIndex = urlToDownload.lastIndexOf('_'); + int typeIndex = urlToDownload.lastIndexOf('.'); + String setlessFilename = urlToDownload.substring(0, setIndex); + String extension = urlToDownload.substring(typeIndex); + urlToDownload = setlessFilename+extension; + try { + doFetch(tofullBorder(urlToDownload)); + break; + } catch (IOException t) { + System.err.println("Failed to download setless token [" + destPath + "]: " + e.getMessage()); + } + } } } } diff --git a/forge-gui-mobile/src/forge/util/LibGDXImageFetcher.java b/forge-gui-mobile/src/forge/util/LibGDXImageFetcher.java index 7ed53b0ce69..b07265a7e70 100644 --- a/forge-gui-mobile/src/forge/util/LibGDXImageFetcher.java +++ b/forge-gui-mobile/src/forge/util/LibGDXImageFetcher.java @@ -76,6 +76,19 @@ public class LibGDXImageFetcher extends ImageFetcher { break; } catch (IOException e) { System.out.println("Failed to download card [" + destPath + "] image: " + e.getMessage()); + if (urlToDownload.contains("tokens")) { + int setIndex = urlToDownload.lastIndexOf('_'); + int typeIndex = urlToDownload.lastIndexOf('.'); + String setlessFilename = urlToDownload.substring(0, setIndex); + String extension = urlToDownload.substring(typeIndex); + urlToDownload = setlessFilename+extension; + try { + doFetch(tofullBorder(urlToDownload)); + break; + } catch (IOException t) { + System.out.println("Failed to download setless token [" + destPath + "]: " + e.getMessage()); + } + } } } } diff --git a/forge-gui/res/cardsfolder/e/essence_sliver.txt b/forge-gui/res/cardsfolder/e/essence_sliver.txt index f9ccfab9c93..7c10253c7d8 100644 --- a/forge-gui/res/cardsfolder/e/essence_sliver.txt +++ b/forge-gui/res/cardsfolder/e/essence_sliver.txt @@ -3,7 +3,7 @@ ManaCost:3 W Types:Creature Sliver PT:3/3 T:Mode$ DamageDealtOnce | ValidSource$ Sliver | Execute$ TrigGain | TriggerZones$ Battlefield | TriggerDescription$ Whenever a Sliver deals damage, its controller gains that much life. -SVar:TrigGain:DB$GainLife | Defined$ TriggeredSourceController | LifeAmount$ X +SVar:TrigGain:DB$ GainLife | Defined$ TriggeredSourceController | LifeAmount$ X SVar:X:TriggerCount$DamageAmount SVar:PlayMain1:TRUE SVar:HasCombatEffect:TRUE