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 d5b8815ecf1..753b99333cf 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -1629,7 +1629,7 @@ public class Card extends GameEntity implements Comparable { } } if (keyword.startsWith("CantBeCounteredBy") || keyword.startsWith("Panharmonicon") - || keyword.startsWith("Dieharmonicon")) { + || keyword.startsWith("Dieharmonicon") || keyword.startsWith("Shrineharmonicon")) { final String[] p = keyword.split(":"); sbLong.append(p[2]).append("\r\n"); } else if (keyword.startsWith("etbCounter")) { @@ -4192,6 +4192,7 @@ public class Card extends GameEntity implements Comparable { public final boolean isFortification() { return getType().hasSubtype("Fortification"); } public final boolean isCurse() { return getType().hasSubtype("Curse"); } public final boolean isAura() { return getType().hasSubtype("Aura"); } + public final boolean isShrine() { return getType().hasSubtype("Shrine"); } public final boolean isAttachment() { return isAura() || isEquipment() || isFortification(); } public final boolean isHistoric() {return getType().isLegendary() || isArtifact() || getType().hasSubtype("Saga");} diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java b/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java index f5ec0661a96..b8a03d637a2 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java @@ -26,6 +26,7 @@ import forge.game.ability.AbilityKey; import forge.game.ability.effects.CharmEffect; import forge.game.card.Card; import forge.game.card.CardLists; +import forge.game.card.CardPredicates; import forge.game.card.CardUtil; import forge.game.card.CardZoneTable; import forge.game.keyword.KeywordInterface; @@ -618,10 +619,29 @@ public class TriggerHandler { private int handlePanharmonicon(final Trigger t, final Map runParams, final Player p) { Card host = t.getHostCard(); + int n = 0; + + // Sanctum of All + if (host.isShrine() && host.isInZone(ZoneType.Battlefield) && p.equals(host.getController())) { + int shrineCount = CardLists.count(p.getCardsIn(ZoneType.Battlefield), CardPredicates.isType("Shrine")); + if (shrineCount >= 6) { + for (final Card ck : p.getCardsIn(ZoneType.Battlefield)) { + for (final KeywordInterface ki : ck.getKeywords()) { + final String kw = ki.getOriginal(); + if (kw.startsWith("Shrineharmonicon")) { + final String valid = kw.split(":")[1]; + if (host.isValid(valid.split(","), p, ck, null)) { + n++; + } + } + } + } + } + } // not a changesZone trigger or changesZoneAll if (t.getMode() != TriggerType.ChangesZone && t.getMode() != TriggerType.ChangesZoneAll) { - return 0; + return n; } // leave battlefield trigger, might be dying @@ -636,7 +656,6 @@ public class TriggerHandler { return 0; } - int n = 0; if (t.getMode() == TriggerType.ChangesZone) { // iterate over all cards final List lastCards = CardLists.filterControlledBy(p.getGame().getLastStateBattlefield(), p); diff --git a/forge-gui/res/cardsfolder/upcoming/sanctum_of_all.txt b/forge-gui/res/cardsfolder/upcoming/sanctum_of_all.txt new file mode 100644 index 00000000000..8174b7f0f28 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/sanctum_of_all.txt @@ -0,0 +1,8 @@ +Name:Sanctum of All +ManaCost:W U B R G +Types:Legendary Enchantment Shrine +T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigSearch | TriggerDescription$ At the beginning of your upkeep, you may search your library and/or graveyard for a Shrine card and put it onto the battlefield. If you search your library this way, shuffle it. +SVar:TrigSearch:DB$ ChangeZone | Origin$ Library | OriginChoice$ True | OriginAlternative$ Graveyard | AlternativeMessage$ Would you like to search your library with this ability? If you do, your library will be shuffled. | Destination$ Battlefield | ChangeType$ Card.Shrine +K:Shrineharmonicon:Shrine.Other+YouCtrl:If an ability of another Shrine you control triggers while you control six or more Shrines, that ability triggers an additional time. +DeckHints:Type$Shrine +Oracle:At the beginning of your upkeep, you may search your library and/or graveyard for a Shrine card and put it onto the battlefield. If you search your library this way, shuffle it.\nIf an ability of another Shrine you control triggers while you control six or more Shrines, that ability triggers an additional time. diff --git a/forge-gui/res/languages/de-DE.properties b/forge-gui/res/languages/de-DE.properties index f6f72d59c80..4e4572dfd63 100644 --- a/forge-gui/res/languages/de-DE.properties +++ b/forge-gui/res/languages/de-DE.properties @@ -85,6 +85,7 @@ cbRandomArtInPools=zufällige Kartenbilder in erzeugten Kartensammlungen cbEnableSounds=Ton aktiviert cbEnableMusic=Musik aktiviert cbAltSoundSystem=Nutze alternatives Sound-System +cbSROptimize=Optimize UI for screen readers cbUiForTouchScreen=Verbessere Oberfläche für Touchscreens cbTimedTargOverlay=Aktiviere Zielpfeiloptimierung cbCompactMainMenu=Nutze kompakteres Seitenmenü @@ -180,6 +181,7 @@ SoundOptions=Sound Optionen nlEnableSounds=Geräusche während des Spiels nlEnableMusic=Hintergrundmusik während des Spiels nlAltSoundSystem=Nutze alternatives Sound-System (nur nutzen, wenn es Probleme mit fehlenden Geräuschen gibt) +nlSrOptimize=Set various options to make FOrge work better with screen readers KeyboardShortcuts=Tastenkombinationen #VSubmenuAchievements.java lblAchievements=Errungenschaften diff --git a/forge-gui/res/languages/es-ES.properties b/forge-gui/res/languages/es-ES.properties index 743905e6ff6..39069cb97a2 100644 --- a/forge-gui/res/languages/es-ES.properties +++ b/forge-gui/res/languages/es-ES.properties @@ -85,6 +85,7 @@ cbRandomArtInPools=Aleatorizar Arte de la Carta en los pools que se generen cbEnableSounds=Activar sonidos cbEnableMusic=Activar música cbAltSoundSystem=Utilizar el sistema de sonido alternativo +cbSROptimize=Optimize UI for screen readers cbUiForTouchScreen=Mejorar la interfaz de usuario para pantallas táctiles cbTimedTargOverlay=Habilitar optimización de superposición de capas cbCompactMainMenu=Usar el menú de la barra lateral principal compacta @@ -180,6 +181,7 @@ SoundOptions=Opciones de Sonido nlEnableSounds=Habilitar efectos de sonido durante el juego nlEnableMusic=Habilitar música de fondo durante el juego nlAltSoundSystem=Use el sistema de sonido alternativo (solo use si tiene problemas con el sonido que no se reproduce o desaparece) +nlSrOptimize=Set various options to make FOrge work better with screen readers KeyboardShortcuts=Atajos de teclado #VSubmenuAchievements.java lblAchievements=Logros diff --git a/forge-gui/res/languages/it-IT.properties b/forge-gui/res/languages/it-IT.properties index a3efc93420f..9a966cfa6c8 100644 --- a/forge-gui/res/languages/it-IT.properties +++ b/forge-gui/res/languages/it-IT.properties @@ -85,6 +85,7 @@ cbRandomArtInPools=Randomizza l''arte della carta nei pool di carte generati cbEnableSounds=Abilita suoni cbEnableMusic=Abilita musica cbAltSoundSystem=Usa un sistema audio alternativo +cbSROptimize=Optimize UI for screen readers cbUiForTouchScreen=Migliora l''interfaccia utente per i touchscreen cbTimedTargOverlay=Abilita ottimizzazione overlay di targeting cbCompactMainMenu=Usa il menu principale della barra laterale compatta @@ -180,6 +181,7 @@ SoundOptions=Opzioni audio nlEnableSounds=Abilita gli effetti sonori durante il gioco nlEnableMusic=Abilita la musica di sottofondo durante il gioco nlAltSoundSystem=Utilizza il sistema audio alternativo (utilizza solo se hai problemi con l''audio che non viene riprodotto o che scompare) +nlSrOptimize=Set various options to make FOrge work better with screen readers KeyboardShortcuts=Tasti rapidi #VSubmenuAchievements.java lblAchievements=realizzazioni diff --git a/forge-gui/res/languages/zh-CN.properties b/forge-gui/res/languages/zh-CN.properties index 663e853870a..57426d0e4b5 100644 --- a/forge-gui/res/languages/zh-CN.properties +++ b/forge-gui/res/languages/zh-CN.properties @@ -86,6 +86,7 @@ cbEnableSounds=启用音效 cbEnableMusic=启用背景音乐 cbAltSoundSystem=使用备用音效系统 cbUiForTouchScreen=触摸屏UI增强 +cbSROptimize=为屏幕阅读器启用UI优化 cbTimedTargOverlay=启用定位叠加优化 cbCompactMainMenu=使用紧凑的主侧边栏菜单 cbDetailedPaymentDesc=在付费提示中详细描述咒语 @@ -180,6 +181,7 @@ SoundOptions=声音选项 nlEnableSounds=在游戏中启用声音效果 nlEnableMusic=在游戏中启用背景音乐 nlAltSoundSystem=使用备用音效系统(仅在声音消失的情况使用) +nlSrOptimize=使屏幕阅读器能更好的在forge上使用 KeyboardShortcuts=键盘快捷键 #VSubmenuAchievements.java lblAchievements=成就