From 08c258de5172adca244a39d459368404dcbefbd2 Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Fri, 1 Sep 2023 12:17:50 +0200 Subject: [PATCH 1/3] Clean up --- .../src/main/java/forge/ai/simulation/GameStateEvaluator.java | 1 - .../src/main/java/forge/game/ability/effects/DigEffect.java | 4 +--- .../staticability/StaticAbilityActivateAbilityAsIfHaste.java | 2 +- .../StaticAbilityAssignCombatDamageAsUnblocked.java | 2 +- .../forge/game/staticability/StaticAbilityCantBeCopied.java | 2 +- .../game/staticability/StaticAbilityCantBecomeMonarch.java | 3 ++- .../game/staticability/StaticAbilityIgnoreLegendRule.java | 2 +- .../forge/game/staticability/StaticAbilityUnspentMana.java | 2 +- forge-gui/src/main/java/forge/gui/card/CardScriptInfo.java | 2 +- 9 files changed, 9 insertions(+), 11 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/simulation/GameStateEvaluator.java b/forge-ai/src/main/java/forge/ai/simulation/GameStateEvaluator.java index ce4965686f5..0d7f5939e29 100644 --- a/forge-ai/src/main/java/forge/ai/simulation/GameStateEvaluator.java +++ b/forge-ai/src/main/java/forge/ai/simulation/GameStateEvaluator.java @@ -210,7 +210,6 @@ public class GameStateEvaluator { // excess mana is valued less than getting enough to use everything value += max(0, max_total - statistics.maxCost) * 5; - return value; } diff --git a/forge-game/src/main/java/forge/game/ability/effects/DigEffect.java b/forge-game/src/main/java/forge/game/ability/effects/DigEffect.java index 283aa222cd7..442b52a6c4f 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/DigEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/DigEffect.java @@ -362,16 +362,14 @@ public class DigEffect extends SpellAbilityEffect { if (p == chooser) { // the digger can still see all the dug cards when choosing chooser.getController().tempShowCards(top); } - List chosen = new ArrayList<>(); int max = anyNumber ? valid.size() : Math.min(valid.size(), destZone1ChangeNum); int min = (anyNumber || optional) ? 0 : max; if (max > 0) { // if max is 0 don't make a choice - chosen = chooser.getController().chooseEntitiesForEffect(valid, min, max, delayedReveal, sa, prompt, p, null); + movedCards.addAll(chooser.getController().chooseEntitiesForEffect(valid, min, max, delayedReveal, sa, prompt, p, null)); } chooser.getController().endTempShowCards(); - movedCards.addAll(chosen); } if (!changeValid.isEmpty() && !sa.hasParam("ExileFaceDown") && !sa.hasParam("NoReveal")) { diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityActivateAbilityAsIfHaste.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityActivateAbilityAsIfHaste.java index c52ac164de3..c56434d00e8 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityActivateAbilityAsIfHaste.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityActivateAbilityAsIfHaste.java @@ -43,7 +43,7 @@ public class StaticAbilityActivateAbilityAsIfHaste { return false; } - public static boolean applyCanActivateAbility(final StaticAbility stAb, final Card card) { + private static boolean applyCanActivateAbility(final StaticAbility stAb, final Card card) { if (!stAb.matchesValidParam("ValidCard", card)) { return false; } diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityAssignCombatDamageAsUnblocked.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityAssignCombatDamageAsUnblocked.java index 856a424cabf..4451a54f1d0 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityAssignCombatDamageAsUnblocked.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityAssignCombatDamageAsUnblocked.java @@ -38,7 +38,7 @@ public class StaticAbilityAssignCombatDamageAsUnblocked { return false; } - public static boolean applyAssignCombatDamageAsUnblocked(final StaticAbility stAb, final Card card) { + private static boolean applyAssignCombatDamageAsUnblocked(final StaticAbility stAb, final Card card) { if (!stAb.matchesValidParam("ValidCard", card)) { return false; } diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantBeCopied.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantBeCopied.java index 1863c7663ea..ba5cea32f2f 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantBeCopied.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantBeCopied.java @@ -43,7 +43,7 @@ public class StaticAbilityCantBeCopied { return false; } - public static boolean cantBeCopiedCheck(final StaticAbility stAb, final Card card) { + private static boolean cantBeCopiedCheck(final StaticAbility stAb, final Card card) { if (stAb.matchesValidParam("ValidCard", card)) { return true; } diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantBecomeMonarch.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantBecomeMonarch.java index a820939040c..dcd0151375e 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantBecomeMonarch.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantBecomeMonarch.java @@ -23,7 +23,8 @@ public class StaticAbilityCantBecomeMonarch { } return false; } - public static boolean applyCantBecomeMonarchAbility(final StaticAbility stAb, final Player player) { + + private static boolean applyCantBecomeMonarchAbility(final StaticAbility stAb, final Player player) { if (!stAb.matchesValidParam("ValidPlayer", player)) { return false; } diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityIgnoreLegendRule.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityIgnoreLegendRule.java index 17aa48973d0..dea0a861e7a 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityIgnoreLegendRule.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityIgnoreLegendRule.java @@ -24,7 +24,7 @@ public class StaticAbilityIgnoreLegendRule { return false; } - public static boolean applyIgnoreLegendRuleAbility(final StaticAbility stAb, final Card card) { + private static boolean applyIgnoreLegendRuleAbility(final StaticAbility stAb, final Card card) { if (!stAb.matchesValidParam("ValidCard", card)) { return false; } diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityUnspentMana.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityUnspentMana.java index 52d7b66685e..da8a601d2e4 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityUnspentMana.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityUnspentMana.java @@ -30,7 +30,7 @@ public class StaticAbilityUnspentMana { return result; } - public static void applyUnspentManaAbility(final StaticAbility stAb, final Player player, Set result) { + private static void applyUnspentManaAbility(final StaticAbility stAb, final Player player, Set result) { if (!stAb.matchesValidParam("ValidPlayer", player)) { return; } diff --git a/forge-gui/src/main/java/forge/gui/card/CardScriptInfo.java b/forge-gui/src/main/java/forge/gui/card/CardScriptInfo.java index cdc07d49dbf..f97d2e9384e 100644 --- a/forge-gui/src/main/java/forge/gui/card/CardScriptInfo.java +++ b/forge-gui/src/main/java/forge/gui/card/CardScriptInfo.java @@ -76,7 +76,7 @@ public final class CardScriptInfo { ForgeConstants.USER_CUSTOM_CARDS_DIR + File.separator + String.valueOf(filename.charAt(0)), ForgeConstants.USER_CUSTOM_CARDS_DIR, }; - + for (String folder : folders) { final File file = new File(folder + File.separator + filename); if (file.exists()) { From 11c64a62166088f49111ef0f73187ea883f2afd7 Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Fri, 1 Sep 2023 12:19:42 +0200 Subject: [PATCH 2/3] fix specialize faces on regular cards --- forge-core/src/main/java/forge/card/CardRules.java | 5 +++++ .../java/forge/game/ability/effects/TokenEffectBase.java | 3 +++ forge-game/src/main/java/forge/game/card/Card.java | 2 +- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/forge-core/src/main/java/forge/card/CardRules.java b/forge-core/src/main/java/forge/card/CardRules.java index a199b31349e..29a31ad0b79 100644 --- a/forge-core/src/main/java/forge/card/CardRules.java +++ b/forge-core/src/main/java/forge/card/CardRules.java @@ -395,6 +395,11 @@ public final class CardRules implements ICardCharacteristics { this.curFace = 0; this.faces[0] = null; this.faces[1] = null; + this.faces[2] = null; + this.faces[3] = null; + this.faces[4] = null; + this.faces[5] = null; + this.faces[6] = null; this.handLife = null; this.altMode = CardSplitType.None; diff --git a/forge-game/src/main/java/forge/game/ability/effects/TokenEffectBase.java b/forge-game/src/main/java/forge/game/ability/effects/TokenEffectBase.java index 6b1f6ecbce6..ca8453d2875 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/TokenEffectBase.java +++ b/forge-game/src/main/java/forge/game/ability/effects/TokenEffectBase.java @@ -38,6 +38,9 @@ public abstract class TokenEffectBase extends SpellAbilityEffect { protected TokenCreateTable createTokenTable(Iterable players, String[] tokenScripts, final int finalAmount, final SpellAbility sa) { TokenCreateTable tokenTable = new TokenCreateTable(); for (final Player owner : players) { + if (!owner.isInGame()) { + continue; + } for (String script : tokenScripts) { final Card result = TokenInfo.getProtoType(script, sa, owner); diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index d67698da625..98c7ca8f3e3 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -6377,7 +6377,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars { } public final boolean canBeControlledBy(final Player newController) { - return !(hasKeyword("Other players can't gain control of CARDNAME.") && !getController().equals(newController)); + return newController.isInGame() && !(hasKeyword("Other players can't gain control of CARDNAME.") && !getController().equals(newController)); } @Override From 3801813aa0cc9f0d9da172a98ec547e73b6d4ee7 Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Fri, 1 Sep 2023 12:20:18 +0200 Subject: [PATCH 3/3] battle support --- .../forge/toolbox/imaging/FCardImageRenderer.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/forge-gui-desktop/src/main/java/forge/toolbox/imaging/FCardImageRenderer.java b/forge-gui-desktop/src/main/java/forge/toolbox/imaging/FCardImageRenderer.java index fb206283ff7..8892060c065 100644 --- a/forge-gui-desktop/src/main/java/forge/toolbox/imaging/FCardImageRenderer.java +++ b/forge-gui-desktop/src/main/java/forge/toolbox/imaging/FCardImageRenderer.java @@ -184,7 +184,7 @@ public class FCardImageRenderer { if (!card.isSplitCard() && !card.isFlipCard()) { final CardStateView state = card.getState(card.isAdventureCard() ? false : altState); if ((state.isCreature() && !state.getKeywordKey().contains("Level up")) - || state.isPlaneswalker() || state.isVehicle()) + || state.isPlaneswalker() || state.isBattle() || state.isVehicle()) hasPTBox = true; } if (hasPTBox) { @@ -294,7 +294,7 @@ public class FCardImageRenderer { int headerHeight = NAME_SIZE + 2 * HEADER_PADDING; int typeBoxHeight = TYPE_SIZE + 2 * TYPE_PADDING; int ptBoxHeight = 0; - if (state.isCreature() || state.isPlaneswalker() || state.isVehicle()) { + if (state.isCreature() || state.isPlaneswalker() | state.isBattle() || state.isVehicle()) { //if P/T box needed, make room for it ptBoxHeight = headerHeight; } @@ -839,6 +839,12 @@ public class FCardImageRenderer { TEXT_COLOR = Color.WHITE; pieces.add(String.valueOf(state.getLoyalty())); } + else if (state.isBattle()) { + Color [] pwColor = { Color.BLACK }; + colors = pwColor; + TEXT_COLOR = Color.WHITE; + pieces.add(String.valueOf(state.getDefense())); + } else if (state.isVehicle()) { Color [] vhColor = { new Color(128, 96, 64) }; colors = vhColor; @@ -865,7 +871,7 @@ public class FCardImageRenderer { int arcWidth = h / 3; fillRoundColorBackground(g, colors, x, y, w, h, arcWidth, h); g.setStroke(new BasicStroke(BOX_LINE_THICKNESS)); - g.setColor(state.isPlaneswalker() ? Color.WHITE : Color.BLACK); + g.setColor(state.isPlaneswalker() || state.isBattle() ? Color.WHITE : Color.BLACK); g.drawRoundRect(x, y, w, h, arcWidth, h); x += (PT_BOX_WIDTH - totalPieceWidth) / 2;