diff --git a/forge-game/src/main/java/forge/game/card/CardView.java b/forge-game/src/main/java/forge/game/card/CardView.java index 316553768b1..6fffd4d1af1 100644 --- a/forge-game/src/main/java/forge/game/card/CardView.java +++ b/forge-game/src/main/java/forge/game/card/CardView.java @@ -1468,6 +1468,8 @@ public class CardView extends GameEntityView { public boolean hasFear() { return get(TrackableProperty.HasFear); } public boolean hasHexproof() { return get(TrackableProperty.HasHexproof); } public boolean hasHorsemanship() { return get(TrackableProperty.HasHorsemanship); } + public boolean hasWard() { return get(TrackableProperty.HasWard); } + public boolean hasWither() { return get(TrackableProperty.HasWither); } public boolean hasIndestructible() { return get(TrackableProperty.HasIndestructible); } public boolean hasIntimidate() { return get(TrackableProperty.HasIntimidate); } public boolean hasLifelink() { return get(TrackableProperty.HasLifelink); } @@ -1542,6 +1544,8 @@ public class CardView extends GameEntityView { set(TrackableProperty.HasFear, c.hasKeyword(Keyword.FEAR, state)); set(TrackableProperty.HasHexproof, c.hasKeyword(Keyword.HEXPROOF, state)); set(TrackableProperty.HasHorsemanship, c.hasKeyword(Keyword.HORSEMANSHIP, state)); + set(TrackableProperty.HasWard, c.hasKeyword(Keyword.WARD, state)); + set(TrackableProperty.HasWither, c.hasKeyword(Keyword.WITHER, state)); set(TrackableProperty.HasIndestructible, c.hasKeyword(Keyword.INDESTRUCTIBLE, state)); set(TrackableProperty.HasIntimidate, c.hasKeyword(Keyword.INTIMIDATE, state)); set(TrackableProperty.HasLifelink, c.hasKeyword(Keyword.LIFELINK, state)); diff --git a/forge-game/src/main/java/forge/trackable/TrackableProperty.java b/forge-game/src/main/java/forge/trackable/TrackableProperty.java index cec193e500d..2f5f3c8d4da 100644 --- a/forge-game/src/main/java/forge/trackable/TrackableProperty.java +++ b/forge-game/src/main/java/forge/trackable/TrackableProperty.java @@ -172,6 +172,8 @@ public enum TrackableProperty { HasHaste(TrackableTypes.BooleanType), HasInfect(TrackableTypes.BooleanType), HasStorm(TrackableTypes.BooleanType), + HasWard(TrackableTypes.BooleanType), + HasWither(TrackableTypes.BooleanType), YouMayLook(TrackableTypes.BooleanType), OpponentMayLook(TrackableTypes.BooleanType), BlockAdditional(TrackableTypes.IntegerType), diff --git a/forge-gui-desktop/src/main/java/forge/toolbox/CardFaceSymbols.java b/forge-gui-desktop/src/main/java/forge/toolbox/CardFaceSymbols.java index 99decf9b692..5f0537774fb 100644 --- a/forge-gui-desktop/src/main/java/forge/toolbox/CardFaceSymbols.java +++ b/forge-gui-desktop/src/main/java/forge/toolbox/CardFaceSymbols.java @@ -113,6 +113,8 @@ public class CardFaceSymbols { MANA_IMAGES.put("shadow", FSkin.getImage(FSkinProp.IMG_ABILITY_SHADOW)); MANA_IMAGES.put("shroud", FSkin.getImage(FSkinProp.IMG_ABILITY_SHROUD)); MANA_IMAGES.put("trample", FSkin.getImage(FSkinProp.IMG_ABILITY_TRAMPLE)); + MANA_IMAGES.put("ward", FSkin.getImage(FSkinProp.IMG_ABILITY_WARD)); + MANA_IMAGES.put("wither", FSkin.getImage(FSkinProp.IMG_ABILITY_WITHER)); MANA_IMAGES.put("vigilance", FSkin.getImage(FSkinProp.IMG_ABILITY_VIGILANCE)); //hexproof from MANA_IMAGES.put("hexproofR", FSkin.getImage(FSkinProp.IMG_ABILITY_HEXPROOF_R)); 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 b5899e44317..044c2c49759 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 @@ -664,6 +664,14 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl CardFaceSymbols.drawAbilitySymbol("lifelink", g, abiX, abiY, abiScale, abiScale); abiY += abiSpace; } + if (card.getCurrentState().hasWard()) { + CardFaceSymbols.drawAbilitySymbol("ward", g, abiX, abiY, abiScale, abiScale); + abiY += abiSpace; + } + if (card.getCurrentState().hasWither()) { + CardFaceSymbols.drawAbilitySymbol("wither", g, abiX, abiY, abiScale, abiScale); + abiY += abiSpace; + } if (card.getCurrentState().hasDefender()) { CardFaceSymbols.drawAbilitySymbol("defender", g, abiX, abiY, abiScale, abiScale); abiY += abiSpace; diff --git a/forge-gui-mobile/src/forge/assets/FSkinImage.java b/forge-gui-mobile/src/forge/assets/FSkinImage.java index ac206daf0e9..9fe0ba7efa3 100644 --- a/forge-gui-mobile/src/forge/assets/FSkinImage.java +++ b/forge-gui-mobile/src/forge/assets/FSkinImage.java @@ -373,6 +373,8 @@ public enum FSkinImage implements FSkinImageInterface { IMG_ABILITY_SHADOW (FSkinProp.IMG_ABILITY_SHADOW), IMG_ABILITY_SHROUD (FSkinProp.IMG_ABILITY_SHROUD), IMG_ABILITY_TRAMPLE (FSkinProp.IMG_ABILITY_TRAMPLE), + IMG_ABILITY_WARD (FSkinProp.IMG_ABILITY_WARD), + IMG_ABILITY_WITHER (FSkinProp.IMG_ABILITY_WITHER), IMG_ABILITY_VIGILANCE (FSkinProp.IMG_ABILITY_VIGILANCE), //HEXPROOF FROM IMG_ABILITY_HEXPROOF_R (FSkinProp.IMG_ABILITY_HEXPROOF_R), diff --git a/forge-gui-mobile/src/forge/assets/FSkinImageImpl.java b/forge-gui-mobile/src/forge/assets/FSkinImageImpl.java index 162f7cd1ffd..1d317fa1551 100644 --- a/forge-gui-mobile/src/forge/assets/FSkinImageImpl.java +++ b/forge-gui-mobile/src/forge/assets/FSkinImageImpl.java @@ -47,7 +47,7 @@ public class FSkinImageImpl implements FSkinImageInterface { } } if (texture != null) { - if (!(type == FSkinProp.PropType.IMAGE || type == FSkinProp.PropType.ICON || type == FSkinProp.PropType.MANAICONS)) { //just return region for preferred file if not icons file + if (!(type == FSkinProp.PropType.ABILITY || type == FSkinProp.PropType.IMAGE || type == FSkinProp.PropType.ICON || type == FSkinProp.PropType.MANAICONS)) { //just return region for preferred file if not icons file textureRegion = new TextureRegion(texture, x, y, w, h); return; } diff --git a/forge-gui-mobile/src/forge/card/CardFaceSymbols.java b/forge-gui-mobile/src/forge/card/CardFaceSymbols.java index 73057adcad8..3bc6a89672a 100644 --- a/forge-gui-mobile/src/forge/card/CardFaceSymbols.java +++ b/forge-gui-mobile/src/forge/card/CardFaceSymbols.java @@ -95,6 +95,8 @@ public class CardFaceSymbols { Forge.getAssets().manaImages().put("shadow", FSkinImage.IMG_ABILITY_SHADOW); Forge.getAssets().manaImages().put("shroud", FSkinImage.IMG_ABILITY_SHROUD); Forge.getAssets().manaImages().put("trample", FSkinImage.IMG_ABILITY_TRAMPLE); + Forge.getAssets().manaImages().put("ward", FSkinImage.IMG_ABILITY_WARD); + Forge.getAssets().manaImages().put("wither", FSkinImage.IMG_ABILITY_WITHER); Forge.getAssets().manaImages().put("vigilance", FSkinImage.IMG_ABILITY_VIGILANCE); //hexproof from Forge.getAssets().manaImages().put("hexproofR", FSkinImage.IMG_ABILITY_HEXPROOF_R); diff --git a/forge-gui-mobile/src/forge/card/CardRenderer.java b/forge-gui-mobile/src/forge/card/CardRenderer.java index e1cf0cd9d16..7425b1bd24d 100644 --- a/forge-gui-mobile/src/forge/card/CardRenderer.java +++ b/forge-gui-mobile/src/forge/card/CardRenderer.java @@ -1076,6 +1076,24 @@ public class CardRenderer { abiY += abiSpace; abiCount += 1; } + if (card.getCurrentState().hasWard()) { + if (abiCount > 5) { + abiY = cy + (abiSpace * (abiCount - 6)); + abiX = cx + ((cw * 2) / 1.92f); + } + CardFaceSymbols.drawSymbol("ward", g, abiX, abiY, abiScale, abiScale); + abiY += abiSpace; + abiCount += 1; + } + if (card.getCurrentState().hasWither()) { + if (abiCount > 5) { + abiY = cy + (abiSpace * (abiCount - 6)); + abiX = cx + ((cw * 2) / 1.92f); + } + CardFaceSymbols.drawSymbol("wither", g, abiX, abiY, abiScale, abiScale); + abiY += abiSpace; + abiCount += 1; + } if (card.getCurrentState().hasDefender()) { if (abiCount > 5) { abiY = cy + (abiSpace * (abiCount - 6)); diff --git a/forge-gui/res/skins/default/sprite_ability.png b/forge-gui/res/skins/default/sprite_ability.png index 079a0111362..f747c769214 100644 Binary files a/forge-gui/res/skins/default/sprite_ability.png and b/forge-gui/res/skins/default/sprite_ability.png differ diff --git a/forge-gui/src/main/java/forge/localinstance/skin/FSkinProp.java b/forge-gui/src/main/java/forge/localinstance/skin/FSkinProp.java index 20cca23e606..60e40042258 100644 --- a/forge-gui/src/main/java/forge/localinstance/skin/FSkinProp.java +++ b/forge-gui/src/main/java/forge/localinstance/skin/FSkinProp.java @@ -526,6 +526,8 @@ public enum FSkinProp { IMG_ABILITY_SHADOW (new int[] {84, 576, 80, 80}, PropType.ABILITY), IMG_ABILITY_SHROUD (new int[] {330, 330, 80, 80}, PropType.ABILITY), IMG_ABILITY_TRAMPLE (new int[] {412, 330, 80, 80}, PropType.ABILITY), + IMG_ABILITY_WARD (new int[] {84, 658, 80, 80}, PropType.ABILITY), + IMG_ABILITY_WITHER (new int[] {2, 658, 80, 80}, PropType.ABILITY), IMG_ABILITY_VIGILANCE (new int[] {2, 412, 80, 80}, PropType.ABILITY), //Hexproof From IMG_ABILITY_HEXPROOF_R (new int[] {2, 494, 80, 80}, PropType.ABILITY),