From 692951280f3e63cf1f335dcefe49ba22c032907a Mon Sep 17 00:00:00 2001 From: Northmoc Date: Sat, 23 Jul 2022 14:18:55 -0400 Subject: [PATCH 01/14] guildsworn_prowler.txt --- forge-gui/res/cardsfolder/upcoming/guildsworn_prowler.txt | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/guildsworn_prowler.txt diff --git a/forge-gui/res/cardsfolder/upcoming/guildsworn_prowler.txt b/forge-gui/res/cardsfolder/upcoming/guildsworn_prowler.txt new file mode 100644 index 00000000000..70060ab91d8 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/guildsworn_prowler.txt @@ -0,0 +1,8 @@ +Name:Guildsworn Prowler +ManaCost:1 B +Types:Creature Tiefling Rogue Assassin +PT:2/1 +K:Deathtouch +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self+notblocking | Execute$ TrigDraw | TriggerDescription$ When CARDNAME dies, if it wasn't blocking, draw a card. +SVar:TrigDraw:DB$ Draw +Oracle:Deathtouch\nWhen Guildsworn Prowler dies, if it wasn't blocking, draw a card. From 16e1c4f0d8684c0a688cb2b41482514315afb42f Mon Sep 17 00:00:00 2001 From: Northmoc Date: Sat, 23 Jul 2022 14:23:30 -0400 Subject: [PATCH 02/14] intellect_devourer.txt --- .../res/cardsfolder/upcoming/intellect_devourer.txt | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/intellect_devourer.txt diff --git a/forge-gui/res/cardsfolder/upcoming/intellect_devourer.txt b/forge-gui/res/cardsfolder/upcoming/intellect_devourer.txt new file mode 100644 index 00000000000..3917f412c96 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/intellect_devourer.txt @@ -0,0 +1,12 @@ +Name:Intellect Devourer +ManaCost:3 B +Types:Creature Horror +PT:2/4 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigExile | TriggerDescription$ Devour Intellect — When CARDNAME enters the battlefield, each opponent exiles a card from their hand until CARDNAME leaves the battlefield. +SVar:TrigExile:DB$ ChangeZone | Origin$ Hand | Destination$ Exile | ChangeType$ Card | DefinedPlayer$ Opponent | Mandatory$ True | ChangeType$ Card | Hidden$ True | Duration$ UntilHostLeavesPlay | IsCurse$ True | RememberChanged$ True +S:Mode$ Continuous | MayPlay$ True | MayPlayIgnoreColor$ True | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ Body Thief — You may play lands and cast spells from among cards exiled with CARDNAME. If you cast a spell this way, you may spend mana as though it were mana of any color to cast it. +T:Mode$ ChangesZone | Origin$ Exile | Destination$ Any | Static$ True | ValidCard$ Card.IsRemembered | Execute$ DBForget +SVar:DBForget:DB$ Pump | Defined$ TriggeredCard | ForgetObjects$ TriggeredCard +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | Static$ True | ValidCard$ Card.Self | Execute$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +Oracle:Devour Intellect — When Intellect Devourer enters the battlefield, each opponent exiles a card from their hand until Intellect Devourer leaves the battlefield.\nBody Thief — You may play lands and cast spells from among cards exiled with Intellect Devourer. If you cast a spell this way, you may spend mana as though it were mana of any color to cast it. From 2fa0b01448ae5256a56b301526910924db763841 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Sat, 23 Jul 2022 14:27:59 -0400 Subject: [PATCH 03/14] inspiring_leader.txt --- forge-gui/res/cardsfolder/upcoming/inspiring_leader.txt | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/inspiring_leader.txt diff --git a/forge-gui/res/cardsfolder/upcoming/inspiring_leader.txt b/forge-gui/res/cardsfolder/upcoming/inspiring_leader.txt new file mode 100644 index 00000000000..4b46c0166bb --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/inspiring_leader.txt @@ -0,0 +1,8 @@ +Name:Inspiring Leader +ManaCost:2 W +Types:Legendary Enchantment Background +S:Mode$ Continuous | Affected$ Creature.IsCommander+YouOwn | AddStaticAbility$ BuffTokens | Description$ Commander creatures you own have "Creature tokens you control get +2/+2." +SVar:BuffTokens:Mode$ Continuous | Affected$ Creature.token+YouCtrl | AddPower$ 2 | AddToughness$ 2 | Description$ Creature tokens you control get +2/+2. +DeckNeeds:Ability$Token +AI:RemoveDeck:NonCommander +Oracle:Commander creatures you own have "Creature tokens you control get +2/+2." From 30dbfd695ab2daf44dd773c728a37bf8d022d8fd Mon Sep 17 00:00:00 2001 From: Northmoc Date: Sat, 23 Jul 2022 14:43:03 -0400 Subject: [PATCH 04/14] from_the_catacombs.txt --- .../res/cardsfolder/upcoming/from_the_catacombs.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/from_the_catacombs.txt diff --git a/forge-gui/res/cardsfolder/upcoming/from_the_catacombs.txt b/forge-gui/res/cardsfolder/upcoming/from_the_catacombs.txt new file mode 100644 index 00000000000..f7eb694a53b --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/from_the_catacombs.txt @@ -0,0 +1,10 @@ +Name:From the Catacombs +ManaCost:3 B B +Types:Sorcery +A:SP$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | RememberChanged$ True | GainControl$ True | TgtPrompt$ Select target creature card in a graveyard | ValidTgts$ Creature | WithCountersType$ CORPSE | LeaveBattlefield$ Exile | SubAbility$ DBInitiative | SpellDescription$ Put target creature card from a graveyard onto the battlefield under your control with a corpse counter on it. If that creature would leave the battlefield, exile it instead of putting it anywhere else. +SVar:DBInitiative:DB$ TakeInitiative | SpellDescription$ You take the initiative. +K:Escape:3 B B ExileFromGrave<5/Card.Other/other> +SVar:AIPreference:ExileFromGraveCost$Card.YouOwn+Other+inZoneGraveyard +DeckHas:Ability$Graveyard +DeckHints:Ability$Discard +Oracle:Put target creature card from a graveyard onto the battlefield under your control with a corpse counter on it. If that creature would leave the battlefield, exile it instead of putting it anywhere else.\nYou take the initiative.\nEscape—{3}{B}{B}, Exile five other cards from your graveyard. (You may cast this card from your graveyard for its escape cost.) From e61101e9310b0c5c050beefd8690a82391f37217 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Sat, 23 Jul 2022 14:50:39 -0400 Subject: [PATCH 05/14] horn_of_valhalla_ysgards_call.txt --- .../horn_of_valhalla_ysgards_call.txt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/horn_of_valhalla_ysgards_call.txt diff --git a/forge-gui/res/cardsfolder/upcoming/horn_of_valhalla_ysgards_call.txt b/forge-gui/res/cardsfolder/upcoming/horn_of_valhalla_ysgards_call.txt new file mode 100644 index 00000000000..54a8c619f2b --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/horn_of_valhalla_ysgards_call.txt @@ -0,0 +1,19 @@ +Name:Horn of Valhalla +ManaCost:1 W +Types:Artifact Equipment +S:Mode$ Continuous | Affected$ Card.EquippedBy | AddPower$ X | AddToughness$ X | Description$ Equipped creature gets +1/+1 for each creature you control. +SVar:X:Count$Valid Creature.YouCtrl +SVar:BuffedBy:Creature +K:Equip:3 +AlternateMode:Adventure +Oracle:Equipped creature gets +1/+1 for each creature you control.\nEquip {3} + +ALTERNATE + +Name:Ysgard's Call +ManaCost:X W W +Types:Sorcery Adventure +A:SP$ Token | TokenAmount$ X | TokenScript$ w_1_1_soldier | SpellDescription$ Create X 1/1 white Soldier creature tokens. (Then exile this card. You may cast the artifact later from exile.) +SVar:X:Count$xPaid +DeckHas:Ability$Token & Type$Soldier +Oracle:Create X 1/1 white Soldier creature tokens. (Then exile this card. You may cast the artifact later from exile.) From 7ca51f3c3cacc0713beb6c24c4a7af9b321b2108 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Sat, 23 Jul 2022 14:54:08 -0400 Subject: [PATCH 06/14] nalfeshnee.txt some AI hints --- forge-gui/res/cardsfolder/upcoming/nalfeshnee.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/forge-gui/res/cardsfolder/upcoming/nalfeshnee.txt b/forge-gui/res/cardsfolder/upcoming/nalfeshnee.txt index cb932101111..dac9e9bc45a 100644 --- a/forge-gui/res/cardsfolder/upcoming/nalfeshnee.txt +++ b/forge-gui/res/cardsfolder/upcoming/nalfeshnee.txt @@ -10,5 +10,6 @@ SVar:EOTSac:Mode$ Phase | Phase$ End of Turn | Execute$ TrigSac | TriggerDescrip SVar:TrigSac:DB$ Sacrifice SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True DeckHas:Ability$Token|Sacrifice +DeckHints:Type$Adventure & Keyword$Foretell AI:RemoveDeck:Random Oracle:Flying/nWhenever you cast a spell from exile, copy it. You may choose new targets for the copy. If it's a permanent spell, the copy gains haste and "At the beginning of the end step, sacrifice this permanent." (A copy of a permanent spell becomes a token.) From e8806920d4780442e5182e8c399b5d1aeb1f96d7 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Sun, 24 Jul 2022 00:52:54 -0400 Subject: [PATCH 07/14] PlayerFactoryUtil minor fix --- .../src/main/java/forge/game/player/PlayerFactoryUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-game/src/main/java/forge/game/player/PlayerFactoryUtil.java b/forge-game/src/main/java/forge/game/player/PlayerFactoryUtil.java index ebfe3ae327b..79a80192a10 100644 --- a/forge-game/src/main/java/forge/game/player/PlayerFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/player/PlayerFactoryUtil.java @@ -53,7 +53,7 @@ public class PlayerFactoryUtil { if (keyword.startsWith("Protection:")) { final String[] kws = keyword.split(":"); if (kws.length > 3) { - effect += "| Exceptions$ " + kws[3]; + effect += " | Exceptions$ " + kws[3]; } } inst.addStaticAbility(StaticAbility.create(effect, card, card.getCurrentState(), false)); From 773bd38a5fd4fa38cf8150729d08425576fd50de Mon Sep 17 00:00:00 2001 From: Northmoc Date: Sun, 24 Jul 2022 00:54:14 -0400 Subject: [PATCH 08/14] PumpEffect.resolve clarify parse of DefinedKW for Protection from specific players --- .../forge/game/ability/effects/PumpEffect.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java b/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java index 9a2b1e323b3..01e0890a7a3 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java @@ -297,6 +297,7 @@ public class PumpEffect extends SpellAbilityEffect { if (sa.hasParam("DefinedKW")) { String defined = sa.getParam("DefinedKW"); String replaced = ""; + String name = ""; if (defined.equals("ChosenType")) { replaced = host.getChosenType(); } else if (defined.equals("ActivatorName")) { @@ -307,12 +308,28 @@ public class PumpEffect extends SpellAbilityEffect { PlayerCollection players = AbilityUtils.getDefinedPlayers(host, defined, sa); if (players.isEmpty()) return; replaced = "PlayerUID_" + players.get(0).getId(); + name = players.get(0).getName(); } else if (defined.equals("ChosenColor")) { String color = host.getChosenColor(); replaced = color.substring(0, 1).toUpperCase() + color.substring(1); } for (int i = 0; i < keywords.size(); i++) { keywords.set(i, TextUtil.fastReplace(keywords.get(i), defined, replaced)); + if (keywords.get(i).startsWith("Protection:") && !name.equals("")) { + List parts = Arrays.asList(keywords.get(i).split(":")); + String desc = parts.get(2); + if (desc.contains("PlayerUID")) { + parts.set(2, TextUtil.fastReplace(desc, replaced, name)); + StringBuilder mod = new StringBuilder(); + for (int n = 0; n < parts.size(); n++) { + mod.append(parts.get(n)); + if (n + 1 < parts.size()) { + mod.append(":"); + } + } + keywords.set(i, mod.toString()); + } + } } } if (sa.hasParam("DefinedLandwalk")) { From 4da6f5039df18a289d13c0598716bd2359070594 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Sun, 24 Jul 2022 00:58:23 -0400 Subject: [PATCH 09/14] Player.updateKeywordCardAbilityText improve Protection keyword parsing --- .../src/main/java/forge/game/player/Player.java | 11 +++++++++++ 1 file changed, 11 insertions(+) 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 e6c7dc253a7..6377c5dab0c 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -3232,6 +3232,17 @@ public class Player extends GameEntity implements Comparable { this.updateZoneForView(com); } public String trimKeywords(String keywordTexts) { + if (keywordTexts.contains("Protection:")) { + List lines = Arrays.asList(keywordTexts.split("\n")); + for (int i = 0; i < lines.size(); i++) { + if (lines.get(i).startsWith("Protection:")) { + List parts = Arrays.asList(lines.get(i).split(":")); + if (parts.size() > 2) { + keywordTexts = TextUtil.fastReplace(keywordTexts, lines.get(i), parts.get(2)); + } + } + } + } keywordTexts = TextUtil.fastReplace(keywordTexts,":Card.named", " from "); keywordTexts = TextUtil.fastReplace(keywordTexts, ":Card.Black:", " from "); keywordTexts = TextUtil.fastReplace(keywordTexts, ":Card.Blue:", " from "); From 36e1a8a5a3b45d75370cd6bc5a2b6307da7bd702 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Sun, 24 Jul 2022 00:59:06 -0400 Subject: [PATCH 10/14] noble_heritage.txt --- .../res/cardsfolder/upcoming/noble_heritage.txt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/noble_heritage.txt diff --git a/forge-gui/res/cardsfolder/upcoming/noble_heritage.txt b/forge-gui/res/cardsfolder/upcoming/noble_heritage.txt new file mode 100644 index 00000000000..63cc0487d15 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/noble_heritage.txt @@ -0,0 +1,14 @@ +Name:Noble Heritage +ManaCost:1 W +Types:Legendary Enchantment Background +S:Mode$ Continuous | Affected$ Creature.IsCommander+YouOwn | AddTrigger$ ETB & Upkeep | Description$ Commander creatures you own have "When this creature enters the battlefield and at the beginning of your upkeep, each player may put two +1/+1 counters on a creature they control. For each opponent who does, you gain protection from that player until your next turn." (You can't be targeted, dealt damage, or enchanted by anything controlled by that player.) +SVar:ETB:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChoose | TriggerDescription$ When this creature enters the battlefield and at the beginning of your upkeep, each player may put two +1/+1 counters on a creature they control. For each opponent who does, you gain protection from that player until your next turn. +SVar:Upkeep:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigChoose | Secondary$ True | TriggerDescription$ When this creature enters the battlefield and at the beginning of your upkeep, each player may put two +1/+1 counters on a creature they control. For each opponent who does, you gain protection from that player until your next turn. +SVar:TrigChoose:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ DBChoice | SubAbility$ DBPutCounter +SVar:DBChoice:DB$ ChooseCard | Defined$ Player.IsRemembered | Amount$ 1 | MinAmount$ 0 | Choices$ Creature.RememberedPlayerCtrl | RememberChosen$ True +SVar:DBPutCounter:DB$ PutCounterAll | ValidCards$ Creature.IsRemembered | CounterType$ P1P1 | CounterNum$ 2 | SubAbility$ DBRememberPlayer +SVar:DBRememberPlayer:DB$ Pump | RememberObjects$ RememberedController | SubAbility$ DBRepeatEach +SVar:DBRepeatEach:DB$ RepeatEach | RepeatPlayers$ Opponent.IsRemembered | RepeatSubAbility$ DBPump | SubAbility$ DBCleanup +SVar:DBPump:DB$ Pump | Defined$ You | KW$ Protection:Player.RememberedPlayer:Protection from RememberedPlayer | DefinedKW$ RememberedPlayer | Duration$ UntilYourNextTurn +SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True | ClearRemembered$ True +Oracle:Commander creatures you own have "When this creature enters the battlefield and at the beginning of your upkeep, each player may put two +1/+1 counters on a creature they control. For each opponent who does, you gain protection from that player until your next turn." (You can't be targeted, dealt damage, or enchanted by anything controlled by that player.) From 0c3375c36a55ac204c8f4f7d46f0d4df59b7bcaa Mon Sep 17 00:00:00 2001 From: Northmoc Date: Sun, 24 Jul 2022 00:59:23 -0400 Subject: [PATCH 11/14] eon_frolicker.txt update --- forge-gui/res/cardsfolder/e/eon_frolicker.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/forge-gui/res/cardsfolder/e/eon_frolicker.txt b/forge-gui/res/cardsfolder/e/eon_frolicker.txt index 9a6c95b234a..5be74799b70 100644 --- a/forge-gui/res/cardsfolder/e/eon_frolicker.txt +++ b/forge-gui/res/cardsfolder/e/eon_frolicker.txt @@ -5,6 +5,6 @@ PT:5/5 K:Flying T:Mode$ ChangesZone | ValidCard$ Card.wasCast+Self | Destination$ Battlefield | Execute$ DBAddTurn | TriggerDescription$ When CARDNAME enters the battlefield, if you cast it, target opponent takes an extra turn after this one. Until your next turn, you and planeswalkers you control gain protection from that player. (You and planeswalkers you control can't be targeted, dealt damage, or enchanted by anything controlled by that player.) SVar:DBAddTurn:DB$ AddTurn | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | NumTurns$ 1 | SubAbility$ DBPump -SVar:DBPump:DB$ Pump | Defined$ You | KW$ Protection:Player.TargetedPlayer:Protection from the target opponent | DefinedKW$ TargetedPlayer | Duration$ UntilYourNextTurn | SubAbility$ DBPumpWalkers -SVar:DBPumpWalkers:DB$ Pump | Defined$ Valid Planeswalker.YouCtrl | KW$ Protection:Player.TargetedPlayer:Protection from the target opponent | DefinedKW$ TargetedPlayer | Duration$ UntilYourNextTurn +SVar:DBPump:DB$ Pump | Defined$ You | KW$ Protection:Player.TargetedPlayer:Protection from TargetedPlayer | DefinedKW$ TargetedPlayer | Duration$ UntilYourNextTurn | SubAbility$ DBPumpWalkers +SVar:DBPumpWalkers:DB$ Pump | Defined$ Valid Planeswalker.YouCtrl | KW$ Protection:Player.TargetedPlayer:Protection from TargetedPlayer | DefinedKW$ TargetedPlayer | Duration$ UntilYourNextTurn Oracle:Flying\nWhen Eon Frolicker enters the battlefield, if you cast it, target opponent takes an extra turn after this one. Until your next turn, you and planeswalkers you control gain protection from that player. (You and planeswalkers you control can't be targeted, dealt damage, or enchanted by anything controlled by that player.) From df2341fc66007d7132f2689476537eb13836392f Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Sun, 24 Jul 2022 21:01:12 +0200 Subject: [PATCH 12/14] Fix Spectra Ward preventing attaching more aura (indirectly) --- forge-game/src/main/java/forge/game/card/CardFactoryUtil.java | 3 +++ .../java/forge/game/staticability/StaticAbilityCantAttach.java | 2 +- forge-gui/res/cardsfolder/b/benevolent_blessing.txt | 2 +- forge-gui/res/cardsfolder/c/confound.txt | 2 +- forge-gui/res/cardsfolder/e/emissary_of_grudges.txt | 2 +- forge-gui/res/cardsfolder/h/hindering_light.txt | 2 +- forge-gui/res/cardsfolder/h/hydromorph_guardian.txt | 2 +- forge-gui/res/cardsfolder/h/hydromorph_gull.txt | 2 +- 8 files changed, 10 insertions(+), 7 deletions(-) diff --git a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java index 738eeabf985..0d68aae35db 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -3630,6 +3630,9 @@ public class CardFactoryUtil { if (kws.length > 3) { effect += "| Exceptions$ " + kws[3]; } + if (kws.length > 4) { + effect += " | ExceptionSBA$ True"; + } } effect += " | Description$ " + desc; inst.addStaticAbility(StaticAbility.create(effect, state.getCard(), state, intrinsic)); diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantAttach.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantAttach.java index bf030ec20c0..4b361cc95b7 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantAttach.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantAttach.java @@ -44,7 +44,7 @@ public class StaticAbilityCantAttach { } } - if (checkSBA && stAb.hasParam("Exceptions") && stAb.matchesValidParam("Exceptions", card)) { + if ((checkSBA || !stAb.hasParam("ExceptionSBA")) && stAb.hasParam("Exceptions") && stAb.matchesValidParam("Exceptions", card)) { return false; } diff --git a/forge-gui/res/cardsfolder/b/benevolent_blessing.txt b/forge-gui/res/cardsfolder/b/benevolent_blessing.txt index 2df041866fb..be0c40f2e54 100644 --- a/forge-gui/res/cardsfolder/b/benevolent_blessing.txt +++ b/forge-gui/res/cardsfolder/b/benevolent_blessing.txt @@ -6,5 +6,5 @@ K:Enchant creature K:ETBReplacement:Other:ChooseColor SVar:ChooseColor:DB$ ChooseColor | Defined$ You | AILogic$ MostProminentInHumanDeck | SpellDescription$ As CARDNAME enters the battlefield, choose a color. A:SP$ Attach | Cost$ 1 W | ValidTgts$ Creature | AILogic$ Pump -S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ Protection:Card.ChosenColor:Protection from chosenColor:Aura.YouCtrl,Equipment.YouCtrl | Description$ Enchanted creature has protection from the chosen color. This effect doesn't remove Auras and Equipment you control that are already attached to it. +S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ Protection:Card.ChosenColor:Protection from chosenColor:Aura.YouCtrl,Equipment.YouCtrl:SBA | Description$ Enchanted creature has protection from the chosen color. This effect doesn't remove Auras and Equipment you control that are already attached to it. Oracle:Flash\nEnchant creature\nAs Benevolent Blessing enters the battlefield, choose a color.\nEnchanted creature has protection from the chosen color. This effect doesn't remove Auras and Equipment you control that are already attached to it. diff --git a/forge-gui/res/cardsfolder/c/confound.txt b/forge-gui/res/cardsfolder/c/confound.txt index 4196573f79b..5011cd9f63c 100644 --- a/forge-gui/res/cardsfolder/c/confound.txt +++ b/forge-gui/res/cardsfolder/c/confound.txt @@ -1,6 +1,6 @@ Name:Confound ManaCost:1 U Types:Instant -A:SP$ Counter | Cost$ 1 U | TargetType$ Spell | TgtPrompt$ Select target spell | ValidTgts$ Card | TargetValidTargeting$ Creature | SubAbility$ DBDraw | SpellDescription$ Counter target spell that targets a creature. Draw a card. +A:SP$ Counter | Cost$ 1 U | TargetType$ Spell | TgtPrompt$ Select target spell | ValidTgts$ Card | TargetValidTargeting$ Creature.inZoneBattlefield | SubAbility$ DBDraw | SpellDescription$ Counter target spell that targets a creature. Draw a card. SVar:DBDraw:DB$ Draw | NumCards$ 1 Oracle:Counter target spell that targets a creature.\nDraw a card. diff --git a/forge-gui/res/cardsfolder/e/emissary_of_grudges.txt b/forge-gui/res/cardsfolder/e/emissary_of_grudges.txt index f9f084c2ae5..bf2b642de5f 100644 --- a/forge-gui/res/cardsfolder/e/emissary_of_grudges.txt +++ b/forge-gui/res/cardsfolder/e/emissary_of_grudges.txt @@ -6,5 +6,5 @@ K:Flying K:Haste K:ETBReplacement:Other:ChooseP SVar:ChooseP:DB$ ChoosePlayer | Defined$ You | Choices$ Player.Opponent | ChoiceTitle$ Choose an opponent | Secretly$ True | SpellDescription$ As CARDNAME enters the battlefield, secretly choose an opponent. -A:AB$ ChangeTargets | Cost$ RevealChosenPlayer | TargetType$ Spell,Activated,Triggered | ValidTgts$ Card | ConditionTargetValidTargeting$ Permanent.YouCtrl,You | ConditionPlayerDefined$ TargetedController | ConditionPlayerContains$ Player.Chosen | GameActivationLimit$ 1 | SpellDescription$ Choose new targets for target spell or ability if it's controlled by the chosen player and if it targets you or a permanent you control. Activate only once. +A:AB$ ChangeTargets | Cost$ RevealChosenPlayer | TargetType$ Spell,Activated,Triggered | ValidTgts$ Card | ConditionTargetValidTargeting$ Permanent.YouCtrl+inZoneBattlefield,You | ConditionPlayerDefined$ TargetedController | ConditionPlayerContains$ Player.Chosen | GameActivationLimit$ 1 | SpellDescription$ Choose new targets for target spell or ability if it's controlled by the chosen player and if it targets you or a permanent you control. Activate only once. Oracle:Flying, haste\nAs Emissary of Grudges enters the battlefield, secretly choose an opponent.\nReveal the player you chose: Choose new targets for target spell or ability if it's controlled by the chosen player and if it targets you or a permanent you control. Activate only once. diff --git a/forge-gui/res/cardsfolder/h/hindering_light.txt b/forge-gui/res/cardsfolder/h/hindering_light.txt index 6580287564d..b80c0739fed 100644 --- a/forge-gui/res/cardsfolder/h/hindering_light.txt +++ b/forge-gui/res/cardsfolder/h/hindering_light.txt @@ -1,6 +1,6 @@ Name:Hindering Light ManaCost:W U Types:Instant -A:SP$ Counter | Cost$ W U | TargetType$ Spell | TgtPrompt$ Select target spell | ValidTgts$ Card | TargetValidTargeting$ Permanent.YouCtrl,You | SpellDescription$ Counter target spell that targets you or a permanent you control. Draw a card. | SubAbility$ DB +A:SP$ Counter | Cost$ W U | TargetType$ Spell | TgtPrompt$ Select target spell | ValidTgts$ Card | TargetValidTargeting$ Permanent.YouCtrl+inZoneBattlefield,You | SpellDescription$ Counter target spell that targets you or a permanent you control. Draw a card. | SubAbility$ DB SVar:DB:DB$ Draw | NumCards$ 1 Oracle:Counter target spell that targets you or a permanent you control.\nDraw a card. diff --git a/forge-gui/res/cardsfolder/h/hydromorph_guardian.txt b/forge-gui/res/cardsfolder/h/hydromorph_guardian.txt index 6a2f1a932e4..11751fee9f8 100644 --- a/forge-gui/res/cardsfolder/h/hydromorph_guardian.txt +++ b/forge-gui/res/cardsfolder/h/hydromorph_guardian.txt @@ -2,6 +2,6 @@ Name:Hydromorph Guardian ManaCost:2 U Types:Creature Elemental PT:2/2 -A:AB$ Counter | Cost$ U Sac<1/CARDNAME> | TargetType$ Spell | TgtPrompt$ Select target spell | ValidTgts$ Card | TargetValidTargeting$ Creature.YouCtrl | SpellDescription$ Counter target spell that targets a creature you control. +A:AB$ Counter | Cost$ U Sac<1/CARDNAME> | TargetType$ Spell | TgtPrompt$ Select target spell | ValidTgts$ Card | TargetValidTargeting$ Creature.YouCtrl+inZoneBattlefield | SpellDescription$ Counter target spell that targets a creature you control. AI:RemoveDeck:All Oracle:{U}, Sacrifice Hydromorph Guardian: Counter target spell that targets a creature you control. diff --git a/forge-gui/res/cardsfolder/h/hydromorph_gull.txt b/forge-gui/res/cardsfolder/h/hydromorph_gull.txt index 83649346853..e8da62c5d19 100644 --- a/forge-gui/res/cardsfolder/h/hydromorph_gull.txt +++ b/forge-gui/res/cardsfolder/h/hydromorph_gull.txt @@ -3,6 +3,6 @@ ManaCost:3 U U Types:Creature Elemental Bird PT:3/3 K:Flying -A:AB$ Counter | Cost$ U Sac<1/CARDNAME> | TargetType$ Spell | TgtPrompt$ Select target spell | ValidTgts$ Card | TargetValidTargeting$ Creature.YouCtrl | SpellDescription$ Counter target spell that targets a creature you control. +A:AB$ Counter | Cost$ U Sac<1/CARDNAME> | TargetType$ Spell | TgtPrompt$ Select target spell | ValidTgts$ Card | TargetValidTargeting$ Creature.YouCtrl+inZoneBattlefield | SpellDescription$ Counter target spell that targets a creature you control. AI:RemoveDeck:All Oracle:Flying\n{U}, Sacrifice Hydromorph Gull: Counter target spell that targets a creature you control. From 0e79ddf8d88cc5f1cf97c6ccb35759fb3fe1b74e Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Mon, 25 Jul 2022 07:00:48 +0800 Subject: [PATCH 13/14] fix check imagekey --- forge-gui-mobile/src/forge/assets/ImageCache.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/forge-gui-mobile/src/forge/assets/ImageCache.java b/forge-gui-mobile/src/forge/assets/ImageCache.java index ae54183c34f..320e4a98551 100644 --- a/forge-gui-mobile/src/forge/assets/ImageCache.java +++ b/forge-gui-mobile/src/forge/assets/ImageCache.java @@ -229,7 +229,10 @@ public class ImageCache { if (card != null) imageKey = altState ? card.getCardAltImageKey() : card.getCardImageKey(); if (StringUtils.isBlank(imageKey)) { - return defaultImage; + if (useDefaultIfNotFound) + return defaultImage; + else + return null; } } From bc8388ba3b158fb272903b8e40bbefceb1525962 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Mon, 25 Jul 2022 07:49:11 +0800 Subject: [PATCH 14/14] Update MANUAL.txt --- forge-gui/MANUAL.txt | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/forge-gui/MANUAL.txt b/forge-gui/MANUAL.txt index 783763bd3d3..39dfb57d59c 100644 --- a/forge-gui/MANUAL.txt +++ b/forge-gui/MANUAL.txt @@ -24,7 +24,7 @@ User data files, like decks, saved gauntlets, and card pictures, are now stored userDir=$HOME/.forge/ cacheDir=$HOME/.cache/forge/ -The appdata directory is hidden by default in Win7. Open a Windows Explorer window (or double-click on My Computer] and in the address field type "%appdata%/forge/" (without the quotes). If that doesn't work, type "%appdata"/roaming/forge". +The appdata directory is hidden by default in Windows 7 and above versions. Open a Windows Explorer window (or double-click on My Computer] and in the address field type "%appdata%/forge/" (without the quotes). If that doesn't work, type "%appdata"/roaming/forge". cardPicsDir is defined as /pics/cards/ by default. If you wish to use a non-default directory, please see the forge.profile.preferences.example file located in the Forge installation directory root. You can use this file to, for example, share the card pics directory with another program, such as Magic Workstation. @@ -108,8 +108,9 @@ If you're trying to run Forge for the first time, but it doesn't open up, you ca - Current versions of Forge no longer include a launcher script for Mac OS, proceed to step three. 3) Run Forge -- On Windows, just type "forge.exe", Enter -- On Linux, just type "forge.sh", Enter +- On Windows, just type "forge.exe", Enter (If you have Java 8 installed, use forge-java8.exe) + if you want to run mobile/adventure instead of the desktop interface, type "forge-adventure.exe", Enter (If you have Java 8 installed, use forge-adventure-java8.exe) +- On Linux, just type "forge.sh", Enter (if you want to run mobile/adventure interface use forge-adventure.sh) - Launch the Forge application bundle by double clicking on the program named "Forge.app". Now you will probably see some sort of Error in the console. the first few lines contain a message that might help you. If you can't fix the problem yourself, please take the complete output and report your problem on the Forum. @@ -124,9 +125,7 @@ if you're running Windows 7, make sure you're running the program as an admin, o Java Issues: ------------ -Forge is likely to be compatible with Java 7 at this time. Some people have used forge with Java 7 and have not reported any problems that are related to Java 7. If you would like to upgrade to Java 7 and have held off because of Forge then you may upgrade as we do not think that it will cause an incompatibility type of problem. We will continue to try to maintain compatibility with Java 6 for the foreseeable future. - -Forge requires Java 6 and will not run if you have an earlier version of Java. You will need to update to Java 6. +Forge requires Java 8 as minimum installed and will not run if you have an earlier version of Java. You will need to update to Java 8. (Java 11 is recommended) Card Picture Issues: @@ -148,11 +147,7 @@ This should save enough bandwidth that everyone will be able to download the new Reporting Bugs: --------------- -To report a bug with an official beta release, please follow the instructions at http://www.slightlymagic.net/wiki/Forge#I_think_I_found_a_bug_in_Forge._What_do_I_do.3F . - -To report a bug (1) with an alpha test, (2) with a nightly build, (3) with something compiled from the official Forge software repository, or (4) with the leading edge (formerly "SVN Bug Reports"), please do not submit your bugs to the forum. Instead, please follow the instructions at http://www.slightlymagic.net/wiki/How_to_File_a_Bug_Report_with_Mantis. - -Forge will now allow you to upload a crash report to the Forge forum at CCGH. +If you haven't join Forge discord server, you can join at https://discord.gg/3v9JCVr, to report bugs in the help channel. A new very hard tier category in Quest mode: @@ -511,6 +506,10 @@ We have a forge forum topic at the Collectible Card Games Headquarters web site http://www.slightlymagic.net/forum/viewtopic.php?f=26&t=8570 +Much better to join Forge discord server as most Devs are active here: + +https://discord.gg/3v9JCVr + Notes about the second Quest World, Jamuraa: -------------------------------------------- @@ -1551,7 +1550,7 @@ Desktop Forge UI has been updated a little bit. In the deck editor, the +/- butt - Android Updates - Some work went into porting the remaining features from desktop version of the game to mobile Forge. In particular, it is now possible to start a match against a particular opponent in Sealed Deck and Booster Draft modes in addition to the gauntlet mode which is still default. The work to enable quest draft tournaments in mobile Forge is ongoing and should not be considered complete at the moment, draft tournaments in quest mode are still not fully functional in mobile Forge and you will not be able to complete a draft tournament yet. -The mobile port of Forge now features an option "Battlefield Texture Filtering" which smoothes out card art on the battlefield. This can help make the graphics smoother on larger tablet screens (e.g. 12") or when connected to an external monitor. This option, however, comes with a performance penalty and may blur the card art too much on smaller screens. It is disabled by default. +The mobile port of Forge now features an option "Battlefield Texture Filtering" which smoothes out card art on the battlefield. This can help make the graphics smoother on larger tablet screens (e.g. 12") or when connected to an external monitor. This option, however, comes with a performance penalty and may blur the card art too much on smaller screens. If you have 3GB RAM or less, disabling this option is recommended (as of Forge 1.6.53 and above versions). v1.5.59 Changes ===============