diff --git a/forge-game/src/main/java/forge/game/spellability/Spell.java b/forge-game/src/main/java/forge/game/spellability/Spell.java
index 3c6c94f0394..04c0323de72 100644
--- a/forge-game/src/main/java/forge/game/spellability/Spell.java
+++ b/forge-game/src/main/java/forge/game/spellability/Spell.java
@@ -44,6 +44,12 @@ public abstract class Spell extends SpellAbility implements java.io.Serializable
/** Constant serialVersionUID=-7930920571482203460L. */
private static final long serialVersionUID = -7930920571482203460L;
+ private static boolean performanceMode = false;
+
+ public static void setPerformanceMode(boolean performanceMode){
+ Spell.performanceMode=performanceMode;
+ }
+
private boolean castFaceDown = false;
/**
@@ -116,14 +122,14 @@ public abstract class Spell extends SpellAbility implements java.io.Serializable
lkicheck = true;
}
- if (lkicheck) {
+ if (!Spell.performanceMode && lkicheck) {
game.getAction().checkStaticAbilities(false, Sets.newHashSet(card), new CardCollection(card));
}
flash = card.withFlash(activator);
// reset static abilities
- if (lkicheck) {
+ if (!Spell.performanceMode && lkicheck) {
game.getAction().checkStaticAbilities(false);
}
diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/settings/CSubmenuPreferences.java b/forge-gui-desktop/src/main/java/forge/screens/home/settings/CSubmenuPreferences.java
index ce2281920f5..ef7276a47b3 100644
--- a/forge-gui-desktop/src/main/java/forge/screens/home/settings/CSubmenuPreferences.java
+++ b/forge-gui-desktop/src/main/java/forge/screens/home/settings/CSubmenuPreferences.java
@@ -100,6 +100,7 @@ public enum CSubmenuPreferences implements ICDoc {
lstControls.add(Pair.of(view.getCbSmallDeckViewer(), FPref.UI_SMALL_DECK_VIEWER));
lstControls.add(Pair.of(view.getCbRandomArtInPools(), FPref.UI_RANDOM_ART_IN_POOLS));
lstControls.add(Pair.of(view.getCbEnforceDeckLegality(), FPref.ENFORCE_DECK_LEGALITY));
+ lstControls.add(Pair.of(view.getCbPerformanceMode(), FPref.PERFORMANCE_MODE));
lstControls.add(Pair.of(view.getCbCloneImgSource(), FPref.UI_CLONE_MODE_SOURCE));
lstControls.add(Pair.of(view.getCbRemoveSmall(), FPref.DECKGEN_NOSMALL));
lstControls.add(Pair.of(view.getCbCardBased(), FPref.DECKGEN_CARDBASED));
diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/settings/VSubmenuPreferences.java b/forge-gui-desktop/src/main/java/forge/screens/home/settings/VSubmenuPreferences.java
index 7fe08183eb2..3c3c2b37d65 100644
--- a/forge-gui-desktop/src/main/java/forge/screens/home/settings/VSubmenuPreferences.java
+++ b/forge-gui-desktop/src/main/java/forge/screens/home/settings/VSubmenuPreferences.java
@@ -68,6 +68,7 @@ public enum VSubmenuPreferences implements IVSubmenu {
private final JCheckBox cbLoadHistoricFormats = new OptionsCheckBox("Load Historic Formats");
private final JCheckBox cbWorkshopSyntax = new OptionsCheckBox("Workshop Syntax Checker");
private final JCheckBox cbEnforceDeckLegality = new OptionsCheckBox("Deck Conformance");
+ private final JCheckBox cbPerformanceMode = new OptionsCheckBox("Performance Mode");
private final JCheckBox cbImageFetcher = new OptionsCheckBox("Automatically Download Missing Card Art");
private final JCheckBox cbCloneImgSource = new OptionsCheckBox("Clones Use Original Card Art");
private final JCheckBox cbScaleLarger = new OptionsCheckBox("Scale Image Larger");
@@ -171,6 +172,9 @@ public enum VSubmenuPreferences implements IVSubmenu {
pnlPrefs.add(cbEnforceDeckLegality, titleConstraints);
pnlPrefs.add(new NoteLabel("Enforces deck legality relevant to each environment (minimum deck sizes, max card count etc)."), descriptionConstraints);
+ pnlPrefs.add(cbPerformanceMode, titleConstraints);
+ pnlPrefs.add(new NoteLabel("Disables additional static abilities checks to speed up the game engine. (Warning: breaks some 'as if had flash' scenarios when casting cards owned by opponents)."), descriptionConstraints);
+
pnlPrefs.add(cbCloneImgSource, titleConstraints);
pnlPrefs.add(new NoteLabel("When enabled clones will use their original art instead of the cloned card's art."), descriptionConstraints);
@@ -632,6 +636,11 @@ public enum VSubmenuPreferences implements IVSubmenu {
return cbEnforceDeckLegality;
}
+ /** @return {@link javax.swing.JCheckBox} */
+ public JCheckBox getCbPerformanceMode() {
+ return cbPerformanceMode;
+ }
+
/** @return {@link javax.swing.JCheckBox} */
public JCheckBox getCbCloneImgSource() {
return cbCloneImgSource;
diff --git a/forge-gui-mobile/src/forge/screens/settings/SettingsPage.java b/forge-gui-mobile/src/forge/screens/settings/SettingsPage.java
index 2523ad9a144..5204f333eed 100644
--- a/forge-gui-mobile/src/forge/screens/settings/SettingsPage.java
+++ b/forge-gui-mobile/src/forge/screens/settings/SettingsPage.java
@@ -113,6 +113,10 @@ public class SettingsPage extends TabPage {
"Deck Conformance",
"Enforces deck legality relevant to each environment (minimum deck sizes, max card count etc)."),
1);
+ lstSettings.addItem(new BooleanSetting(FPref.PERFORMANCE_MODE,
+ "Performance Mode",
+ "Disables additional static abilities checks to speed up the game engine. (Warning: breaks some 'as if had flash' scenarios when casting cards owned by opponents)."),
+ 1);
lstSettings.addItem(new BooleanSetting(FPref.UI_CLONE_MODE_SOURCE,
"Clones Use Original Card Art",
"When enabled clones will use their original art instead of the cloned card's art."),
diff --git a/forge-gui/src/main/java/forge/model/FModel.java b/forge-gui/src/main/java/forge/model/FModel.java
index 460873b37f1..8318d5992db 100644
--- a/forge-gui/src/main/java/forge/model/FModel.java
+++ b/forge-gui/src/main/java/forge/model/FModel.java
@@ -32,6 +32,7 @@ import forge.deck.io.DeckPreferences;
import forge.game.GameFormat;
import forge.game.GameType;
import forge.game.card.CardUtil;
+import forge.game.spellability.Spell;
import forge.gauntlet.GauntletData;
import forge.interfaces.IProgressBar;
import forge.itemmanager.ItemManagerConfig;
@@ -184,6 +185,8 @@ public final class FModel {
standardWorlds.putAll(customWorlds);
worlds = new StorageBase<>("Quest worlds", null, standardWorlds);
+ Spell.setPerformanceMode(preferences.getPrefBoolean(FPref.PERFORMANCE_MODE));
+
loadDynamicGamedata();
if (progressBar != null) {
diff --git a/forge-gui/src/main/java/forge/properties/ForgePreferences.java b/forge-gui/src/main/java/forge/properties/ForgePreferences.java
index a2d95ee682e..96add1638de 100644
--- a/forge-gui/src/main/java/forge/properties/ForgePreferences.java
+++ b/forge-gui/src/main/java/forge/properties/ForgePreferences.java
@@ -153,6 +153,7 @@ public class ForgePreferences extends PreferencesStore {
SUBMENU_UTILITIES ("false"),
ENFORCE_DECK_LEGALITY ("true"),
+ PERFORMANCE_MODE ("false"),
DEV_MODE_ENABLED ("false"),
DEV_WORKSHOP_SYNTAX ("false"),