From 73c40b620b998ff31f863f10a3992aa5775ca51a Mon Sep 17 00:00:00 2001 From: Fulgur14 <54345051+Fulgur14@users.noreply.github.com> Date: Wed, 9 Oct 2024 20:54:39 +0200 Subject: [PATCH 1/8] Room scripts (#6253) --- .../res/cardsfolder/upcoming/anthropede.txt | 11 ++++++++++ .../upcoming/bottomless_pool_locker_room.txt | 16 ++++++++++++++ .../upcoming/charred_foyer_warped_space.txt | 18 +++++++++++++++ .../upcoming/cramped_vents_access_room.txt | 16 ++++++++++++++ .../cardsfolder/upcoming/creeping_peeper.txt | 6 +++++ .../upcoming/dazzling_theater_prop_room.txt | 14 ++++++++++++ .../upcoming/defiled_crypt_cadaver_lab.txt | 17 ++++++++++++++ .../upcoming/derelict_attic_widows_walk.txt | 17 ++++++++++++++ .../upcoming/funeral_room_awakening_hall.txt | 17 ++++++++++++++ .../grand_entryway_elegant_rotunda.txt | 16 ++++++++++++++ .../upcoming/greenhouse_rickety_gazebo.txt | 18 +++++++++++++++ .../upcoming/intruding_soulrager.txt | 9 ++++++++ .../upcoming/keys_to_the_house.txt | 6 +++++ .../cardsfolder/upcoming/marina_vendrell.txt | 9 ++++++++ .../upcoming/secret_arcade_dusty_parlor.txt | 16 ++++++++++++++ .../upcoming/spiked_corridor_torture_pit.txt | 16 ++++++++++++++ .../upcoming/unholy_annex_ritual_chamber.txt | 22 +++++++++++++++++++ .../res/tokenscripts/b_6_6_demon_flying.txt | 7 ++++++ 18 files changed, 251 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/anthropede.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/bottomless_pool_locker_room.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/charred_foyer_warped_space.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/cramped_vents_access_room.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/creeping_peeper.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/dazzling_theater_prop_room.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/defiled_crypt_cadaver_lab.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/derelict_attic_widows_walk.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/funeral_room_awakening_hall.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/grand_entryway_elegant_rotunda.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/greenhouse_rickety_gazebo.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/intruding_soulrager.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/keys_to_the_house.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/marina_vendrell.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/secret_arcade_dusty_parlor.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/spiked_corridor_torture_pit.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/unholy_annex_ritual_chamber.txt create mode 100644 forge-gui/res/tokenscripts/b_6_6_demon_flying.txt diff --git a/forge-gui/res/cardsfolder/upcoming/anthropede.txt b/forge-gui/res/cardsfolder/upcoming/anthropede.txt new file mode 100644 index 00000000000..d2bc81c3f04 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/anthropede.txt @@ -0,0 +1,11 @@ +Name:Anthropede +ManaCost:3 G +Types:Creature Insect +PT:3/4 +K:Reach +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChoice | TriggerDescription$ When CARDNAME enters, you may discard a card or pay {2}. When you do, destroy target Room. +SVar:TrigChoice:DB$ GenericChoice | Choices$ PayDiscard,Pay2 +SVar:Pay2:DB$ ImmediateTrigger | UnlessCost$ 2 | UnlessPayer$ You | UnlessSwitched$ True | Execute$ TrigDestroy | SpellDescription$ pay {2}: When you do, destroy target Room. +SVar:PayDiscard:DB$ ImmediateTrigger | UnlessCost$ Discard<1/Card> | UnlessPayer$ You | UnlessSwitched$ True | Execute$ TrigDestroy | SpellDescription$ discard a card: When you do, destroy target Room. +SVar:TrigDestroy:DB$ Destroy | ValidTgts$ Room | TgtPrompt$ Select target Room +Oracle:Reach\nWhen Anthropede enters, you may discard a card or pay {2}. When you do, destroy target Room. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/bottomless_pool_locker_room.txt b/forge-gui/res/cardsfolder/upcoming/bottomless_pool_locker_room.txt new file mode 100644 index 00000000000..1309547a77f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/bottomless_pool_locker_room.txt @@ -0,0 +1,16 @@ +Name:Bottomless Pool +ManaCost:U +Types:Enchantment Room +T:Mode$ UnlockDoor | ValidPlayer$ You | ValidCard$ Card.Self | ThisDoor$ True | Execute$ TrigReturn | TriggerDescription$ When you unlock this door, return up to one target creature to its owner's hand. +SVar:TrigReturn:DB$ ChangeZone | ValidTgts$ Creature | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select up to one target creature | Origin$ Battlefield | Destination$ Hand +AlternateMode:Split +Oracle:(You may cast either half. That door unlocks on the battlefield. As a sorcery, you may pay the mana cost of a locked door to unlock it.)\nWhen you unlock this door, return up to one target creature to its owner's hand. + +ALTERNATE + +Name:Locker Room +ManaCost:4 U +Types:Enchantment Room +T:Mode$ DamageDoneOnce | CombatDamage$ True | ValidSource$ Creature.YouCtrl | TriggerZones$ Battlefield | ValidTarget$ Player | Execute$ TrigDraw | TriggerDescription$ Whenever one or more creatures you control deal combat damage to a player, draw a card. +SVar:TrigDraw:DB$ Draw +Oracle:(You may cast either half. That door unlocks on the battlefield. As a sorcery, you may pay the mana cost of a locked door to unlock it.)\nWhenever one or more creatures you control deal combat damage to a player, draw a card. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/charred_foyer_warped_space.txt b/forge-gui/res/cardsfolder/upcoming/charred_foyer_warped_space.txt new file mode 100644 index 00000000000..fa5c20b80e1 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/charred_foyer_warped_space.txt @@ -0,0 +1,18 @@ +Name:Charred Foyer +ManaCost:3 R +Types:Enchantment Room +T:Mode$ Phase | Phase$ Upkeep | TriggerZones$ Battlefield | ValidPlayer$ You | Execute$ TrigDig | TriggerDescription$ At the beginning of your upkeep, exile the top card of your library. You may play that card this turn. +SVar:TrigDig:DB$ Dig | Defined$ You | DigNum$ 1 | ChangeNum$ All | DestinationZone$ Exile | RememberChanged$ True | SubAbility$ DBEffect +SVar:DBEffect:DB$ Effect | RememberObjects$ RememberedCard | StaticAbilities$ MayPlay | SubAbility$ DBCleanup | ExileOnMoved$ Exile +SVar:MayPlay:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ You may play the exiled card this turn. +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +AlternateMode:Split +Oracle:(You may cast either half. That door unlocks on the battlefield. As a sorcery, you may pay the mana cost of a locked door to unlock it.)\nAt the beginning of your upkeep, exile the top card of your library. You may play that card this turn. + +ALTERNATE + +Name:Warped Space +ManaCost:4 R R +Types:Enchantment Room +S:Mode$ Continuous | MayPlay$ True | MayPlayAltManaCost$ 0 | MayPlayLimit$ 1 | MayPlayDontGrantZonePermissions$ True | Affected$ Card.YouCtrl+nonLand | AffectedZone$ Exile| Description$ Once each turn, you may pay {0} rather than pay the mana cost for a spell you cast from exile. +Oracle:(You may cast either half. That door unlocks on the battlefield. As a sorcery, you may pay the mana cost of a locked door to unlock it.)\nOnce each turn, you may pay {0} rather than pay the mana cost for a spell you cast from exile. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/cramped_vents_access_room.txt b/forge-gui/res/cardsfolder/upcoming/cramped_vents_access_room.txt new file mode 100644 index 00000000000..bae123ca17b --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/cramped_vents_access_room.txt @@ -0,0 +1,16 @@ +Name:Cramped Vents +ManaCost:3 B +Types:Enchantment Room +T:Mode$ UnlockDoor | ValidPlayer$ You | ValidCard$ Card.Self | ThisDoor$ True | Execute$ TrigDealDamage | TriggerDescription$ When you unlock this door, this Room deals 6 damage to target creature an opponent controls. You gain life equal to the excess damage dealt this way. +SVar:TrigDealDamage:DB$ DealDamage | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Select target creature an opponent controls | NumDmg$ 6 | ExcessSVar$ Excess | SubAbility$ DBGainLife +SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ Excess +AlternateMode:Split +Oracle:(You may cast either half. That door unlocks on the battlefield. As a sorcery, you may pay the mana cost of a locked door to unlock it.)\nWhen you unlock this door, this Room deals 6 damage to target creature an opponent controls. You gain life equal to the excess damage dealt this way. + +ALTERNATE + +Name:Access Maze +ManaCost:5 B B +Types:Enchantment Room +S:Mode$ Continuous | Condition$ PlayerTurn | Affected$ Card.YouCtrl+nonLand | MayPlayLimit$ 1 | MayPlay$ True | MayPlayAltManaCost$ PayLife | MayPlayDontGrantZonePermissions$ True | AffectedZone$ Hand | Description$ Once during each of your turns, you may cast a spell from your hand by paying life equal to its mana value rather than paying its mana cost. +Oracle:(You may cast either half. That door unlocks on the battlefield. As a sorcery, you may pay the mana cost of a locked door to unlock it.)\nOnce during each of your turns, you may cast a spell from your hand by paying life equal to its mana value rather than paying its mana cost. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/creeping_peeper.txt b/forge-gui/res/cardsfolder/upcoming/creeping_peeper.txt new file mode 100644 index 00000000000..08c24d5284d --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/creeping_peeper.txt @@ -0,0 +1,6 @@ +Name:Creeping Peeper +ManaCost:1 U +Types:Creature Eye +PT:2/1 +A:AB$ Mana | Cost$ T | Produced$ U | Amount$ 1 | RestrictValid$ Spell.Enchantment,Static.Unlock,Static.isTurnFaceUp | SpellDescription$ Add {U}. Spend this mana only to cast an enchantment spell, unlock a door, or turn a permanent face up. +Oracle:{T}: Add {U}. Spend this mana only to cast an enchantment spell, unlock a door, or turn a permanent face up. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/dazzling_theater_prop_room.txt b/forge-gui/res/cardsfolder/upcoming/dazzling_theater_prop_room.txt new file mode 100644 index 00000000000..623721a6ea9 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/dazzling_theater_prop_room.txt @@ -0,0 +1,14 @@ +Name:Dazzling Theater +ManaCost:3 W +Types:Enchantment Room +S:Mode$ Continuous | Affected$ Card.Creature+YouCtrl+wasCast | AffectedZone$ Stack | AddKeyword$ Convoke | Description$ Creature spells you cast have convoke. (Your creatures can help cast those spells. Each creature you tap while casting a creature spell pays for {1} or one mana of that creature's color.) +AlternateMode:Split +Oracle:(You may cast either half. That door unlocks on the battlefield. As a sorcery, you may pay the mana cost of a locked door to unlock it.)\nCreature spells you cast have convoke. (Your creatures can help cast those spells. Each creature you tap while casting a creature spell pays for {1} or one mana of that creature's color.) + +ALTERNATE + +Name:Prop Room +ManaCost:2 W +Types:Enchantment Room +S:Mode$ Continuous | Affected$ Creature.YouCtrl | AddHiddenKeyword$ CARDNAME untaps during each other player's untap step. | Description$ Untap each creature you control during each other player's untap step. +Oracle:(You may cast either half. That door unlocks on the battlefield. As a sorcery, you may pay the mana cost of a locked door to unlock it.)\nUntap each creature you control during each other player's untap step. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/defiled_crypt_cadaver_lab.txt b/forge-gui/res/cardsfolder/upcoming/defiled_crypt_cadaver_lab.txt new file mode 100644 index 00000000000..701b4f99e3f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/defiled_crypt_cadaver_lab.txt @@ -0,0 +1,17 @@ +Name:Defiled Crypt +ManaCost:3 B +Types:Enchantment Room +T:Mode$ ChangesZoneAll | ValidCards$ Card.YouOwn | Origin$ Graveyard | Destination$ Any | TriggerZones$ Battlefield | Execute$ TrigToken | ActivationLimit$ 1 | TriggerDescription$ Whenever one or more cards leave your graveyard, create a 2/2 black Horror enchantment creature token. This ability triggers only once each turn. +SVar:TrigToken:DB$ Token | TokenScript$ b_2_2_e_horror +AlternateMode:Split +DeckHas:Ability$Token +Oracle:(You may cast either half. That door unlocks on the battlefield. As a sorcery, you may pay the mana cost of a locked door to unlock it.)\nWhenever one or more cards leave your graveyard, create a 2/2 black Horror enchantment creature token. This ability triggers only once each turn. + +ALTERNATE + +Name:Cadaver Lab +ManaCost:B +Types:Enchantment Room +T:Mode$ UnlockDoor | ValidPlayer$ You | ValidCard$ Card.Self | ThisDoor$ True | Execute$ TrigChangeZone | TriggerDescription$ When you unlock this door, return target creature card from your graveyard to your hand. +SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select up to one target creature | Origin$ Battlefield | Destination$ Hand +Oracle:(You may cast either half. That door unlocks on the battlefield. As a sorcery, you may pay the mana cost of a locked door to unlock it.)\nWhen you unlock this door, return target creature card from your graveyard to your hand. diff --git a/forge-gui/res/cardsfolder/upcoming/derelict_attic_widows_walk.txt b/forge-gui/res/cardsfolder/upcoming/derelict_attic_widows_walk.txt new file mode 100644 index 00000000000..551b51499c2 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/derelict_attic_widows_walk.txt @@ -0,0 +1,17 @@ +Name:Derelict Attic +ManaCost:2 B +Types:Enchantment Room +T:Mode$ UnlockDoor | ValidPlayer$ You | ValidCard$ Card.Self | ThisDoor$ True | Execute$ TrigDraw | TriggerDescription$ When you unlock this door, you draw two cards and you lose 2 life. +SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ 2 | SubAbility$ DBLoseLife +SVar:DBLoseLife:DB$ LoseLife | LifeAmount$ 2 +AlternateMode:Split +Oracle:(You may cast either half. That door unlocks on the battlefield. As a sorcery, you may pay the mana cost of a locked door to unlock it.)\nWhen you unlock this door, you draw two cards and you lose 2 life. + +ALTERNATE + +Name:Widow's Walk +ManaCost:3 B +Types:Enchantment Room +T:Mode$ Attacks | ValidCard$ Creature.YouCtrl | Alone$ True | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Whenever a creature you control attacks alone, it gets +1/+0 and gains deathtouch until end of turn. +SVar:TrigPump:DB$ Pump | Defined$ TriggeredAttackerLKICopy | NumAtt$ +1 | KW$ Deathtouch +Oracle:(You may cast either half. That door unlocks on the battlefield. As a sorcery, you may pay the mana cost of a locked door to unlock it.)\nWhenever a creature you control attacks alone, it gets +1/+0 and gains deathtouch until end of turn. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/funeral_room_awakening_hall.txt b/forge-gui/res/cardsfolder/upcoming/funeral_room_awakening_hall.txt new file mode 100644 index 00000000000..8bb0e95bde3 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/funeral_room_awakening_hall.txt @@ -0,0 +1,17 @@ +Name:Funeral Room +ManaCost:2 B +Types:Enchantment Room +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigLoseLife | TriggerDescription$ Whenever a creature you control dies, each opponent loses 1 life and you gain 1 life. +SVar:TrigLoseLife:DB$ LoseLife | Defined$ Player.Opponent | LifeAmount$ 1 | SubAbility$ DBGainLife +SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 1 +AlternateMode:Split +Oracle:(You may cast either half. That door unlocks on the battlefield. As a sorcery, you may pay the mana cost of a locked door to unlock it.)\nWhenever a creature you control dies, each opponent loses 1 life and you gain 1 life. + +ALTERNATE + +Name:Awakening Hall +ManaCost:6 B B +Types:Enchantment Room +T:Mode$ UnlockDoor | ValidPlayer$ You | ValidCard$ Card.Self | ThisDoor$ True | Execute$ TrigChangeZone | TriggerDescription$ When you unlock this door, return all creature cards from your graveyard to the battlefield. +SVar:TrigChangeZone:DB$ ChangeZoneAll | ChangeType$ Creature.YouOwn | Origin$ Graveyard | Destination$ Battlefield +Oracle:(You may cast either half. That door unlocks on the battlefield. As a sorcery, you may pay the mana cost of a locked door to unlock it.)\nWhen you unlock this door, return all creature cards from your graveyard to the battlefield. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/grand_entryway_elegant_rotunda.txt b/forge-gui/res/cardsfolder/upcoming/grand_entryway_elegant_rotunda.txt new file mode 100644 index 00000000000..9b071dcf5c6 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/grand_entryway_elegant_rotunda.txt @@ -0,0 +1,16 @@ +Name:Grand Entryway +ManaCost:1 W +Types:Enchantment Room +T:Mode$ UnlockDoor | ValidPlayer$ You | ValidCard$ Card.Self | ThisDoor$ True | Execute$ TrigToken | TriggerDescription$ When you unlock this door, create a 1/1 white Glimmer enchantment creature token. +SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ w_1_1_e_glimmer | TokenOwner$ You +AlternateMode:Split +Oracle:(You may cast either half. That door unlocks on the battlefield. As a sorcery, you may pay the mana cost of a locked door to unlock it.)\nWhen you unlock this door, create a 1/1 white Glimmer enchantment creature token. + +ALTERNATE + +Name:Elegant Rotunda +ManaCost:2 W +Types:Enchantment Room +T:Mode$ UnlockDoor | ValidPlayer$ You | ValidCard$ Card.Self | ThisDoor$ True | Execute$ TrigPutCounter | TriggerDescription$ When you unlock this door, put a +1/+1 counter on each of up to two target creatures. +SVar:TrigPutCounter:DB$ PutCounter | CounterNum$ 1 | CounterType$ P1P1 | TargetMin$ 0 | TargetMax$ 2 | ValidTgts$ Creature | TgtPrompt$ Select up to 2 target creatures +Oracle:(You may cast either half. That door unlocks on the battlefield. As a sorcery, you may pay the mana cost of a locked door to unlock it.)\nWhen you unlock this door, put a +1/+1 counter on each of up to two target creatures. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/greenhouse_rickety_gazebo.txt b/forge-gui/res/cardsfolder/upcoming/greenhouse_rickety_gazebo.txt new file mode 100644 index 00000000000..0a7537cdff5 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/greenhouse_rickety_gazebo.txt @@ -0,0 +1,18 @@ +Name:Greenhouse +ManaCost:2 G +Types:Enchantment Room +S:Mode$ Continuous | Affected$ Land.YouCtrl | AddAbility$ AnyMana | Description$ Lands you control have "{T}: Add one mana of any color." +SVar:AnyMana:AB$ Mana | Cost$ T | Produced$ Any | Amount$ 1 | SpellDescription$ Add one mana of any color. +AlternateMode:Split +Oracle:(You may cast either half. That door unlocks on the battlefield. As a sorcery, you may pay the mana cost of a locked door to unlock it.)\nLands you control have "{T}: Add one mana of any color." + +ALTERNATE + +Name:Rickety Gazebo +ManaCost:3 G +Types:Enchantment Room +T:Mode$ UnlockDoor | ValidPlayer$ You | ValidCard$ Card.Self | ThisDoor$ True | Execute$ TrigMill | TriggerDescription$ When you unlock this door, mill four cards, then return up to two permanent cards from among them to your hand. +SVar:TrigMill:DB$ Mill | NumCards$ 4 | Defined$ You | RememberMilled$ True | SubAbility$ DBChangeZone +SVar:DBChangeZone:DB$ ChangeZone | Hidden$ True | Origin$ Graveyard,Exile | Destination$ Hand | ChangeType$ Permanent.IsRemembered | ChangeNum$ 2 | SelectPrompt$ You may select a permanent card milled this way | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +Oracle:(You may cast either half. That door unlocks on the battlefield. As a sorcery, you may pay the mana cost of a locked door to unlock it.)\nWhen you unlock this door, mill four cards, then return up to two permanent cards from among them to your hand. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/intruding_soulrager.txt b/forge-gui/res/cardsfolder/upcoming/intruding_soulrager.txt new file mode 100644 index 00000000000..d93545a1275 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/intruding_soulrager.txt @@ -0,0 +1,9 @@ +Name:Intruding Soulrager +ManaCost:U R +Types:Creature Spirit +PT:2/2 +K:Vigilance +A:AB$ DealDamage | Cost$ T Sac<1/Room> | NumDmg$ 2 | Defined$ Opponent | SubAbility$ DBDraw | SpellDescription$ CARDNAME deals 2 damage to each opponent. Draw a card. +SVar:DBDraw:DB$ Draw +DeckNeeds:Type$Room +Oracle:Vigilance\n{T}, Sacrifice a Room: Intruding Soulrager deals 2 damage to each opponent. Draw a card. diff --git a/forge-gui/res/cardsfolder/upcoming/keys_to_the_house.txt b/forge-gui/res/cardsfolder/upcoming/keys_to_the_house.txt new file mode 100644 index 00000000000..76ce843920f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/keys_to_the_house.txt @@ -0,0 +1,6 @@ +Name:Keys to the House +ManaCost:1 +Types:Artifact +A:AB$ ChangeZone | Cost$ 1 T Sac<1/CARDNAME> | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. +A:AB$ UnlockDoor | Cost$ 3 T Sac<1/CARDNAME> | Mode$ LockOrUnlock | ValidTgts$ Room.YouCtrl | TgtPrompt$ Choose target Room you control | SorcerySpeed$ True | SpellDescription$ Lock or unlock a door of target Room you control. Activate only as a sorcery. +Oracle:{1}, {T}, Sacrifice Keys to the House: Search your library for a basic land card, reveal it, put it into your hand, then shuffle.\n{3}, {T}, Sacrifice Keys to the House: Lock or unlock a door of target Room you control. Activate only as a sorcery. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/marina_vendrell.txt b/forge-gui/res/cardsfolder/upcoming/marina_vendrell.txt new file mode 100644 index 00000000000..b72f821fd90 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/marina_vendrell.txt @@ -0,0 +1,9 @@ +Name:Marina Vendrell +ManaCost:W U B R G +Types:Legendary Creature Human Warlock +PT:3/5 +K:Flying +T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigDig | TriggerDescription$ When CARDNAME enters, reveal the top seven cards of your library. Put all enchantment cards from among them into your hand and the rest on the bottom of your library in a random order. +SVar:TrigDig:DB$ Dig | DigNum$ 7 | Reveal$ True | ChangeNum$ All | ChangeValid$ Enchantment | RestRandomOrder$ True +A:AB$ UnlockDoor | Cost$ T | Mode$ LockOrUnlock | ValidTgts$ Room.YouCtrl | TgtPrompt$ Choose target Room you control | SorcerySpeed$ True | SpellDescription$ Lock or unlock a door of target Room you control. Activate only as a sorcery. +Oracle:When Marina Vendrell enters, reveal the top seven cards of your library. Put all enchantment cards from among them into your hand and the rest on the bottom of your library in a random order.\n{T}: Lock or unlock a door of target Room you control. Activate only as a sorcery. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/secret_arcade_dusty_parlor.txt b/forge-gui/res/cardsfolder/upcoming/secret_arcade_dusty_parlor.txt new file mode 100644 index 00000000000..63aac3a38e4 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/secret_arcade_dusty_parlor.txt @@ -0,0 +1,16 @@ +Name:Secret Arcade +ManaCost:4 W +Types:Enchantment Room +S:Mode$ Continuous | Affected$ Permanent.nonLand+YouCtrl | AffectedZone$ Battlefield,Stack | AddType$ Enchantment | Description$ Nonland permanents you control and permanent spells you control are enchantments in addition to their other types. +AlternateMode:Split +Oracle:(You may cast either half. That door unlocks on the battlefield. As a sorcery, you may pay the mana cost of a locked door to unlock it.)\nNonland permanents you control and permanent spells you control are enchantments in addition to their other types. + +ALTERNATE + +Name:Dusty Parlor +ManaCost:2 W +Types:Enchantment Room +T:Mode$ SpellCast | ValidCard$ Enchantment | ValidActivatingPlayer$ You | Execute$ TrigPutCounter | TriggerZones$ Battlefield | TriggerDescription$ Whenever you cast an enchantment spell, put a number of +1/+1 counters equal to that spell's mana value on up to one target creature. +SVar:TrigPutCounter:DB$ PutCounter | ValidTgts$ Creature | TgtPrompt$ Select up to one target creature | TargetMin$ 0 | TargetMax$ 1 | CounterType$ P1P1 | CounterNum$ X +SVar:X:TriggeredStackInstance$CardManaCostLKI +Oracle:(You may cast either half. That door unlocks on the battlefield. As a sorcery, you may pay the mana cost of a locked door to unlock it.)\nWhenever you cast an enchantment spell, put a number of +1/+1 counters equal to that spell's mana value on up to one target creature. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/spiked_corridor_torture_pit.txt b/forge-gui/res/cardsfolder/upcoming/spiked_corridor_torture_pit.txt new file mode 100644 index 00000000000..84cbcb02732 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/spiked_corridor_torture_pit.txt @@ -0,0 +1,16 @@ +Name:Spiked Corridor +ManaCost:3 R +Types:Enchantment Room +T:Mode$ UnlockDoor | ValidPlayer$ You | ValidCard$ Card.Self | ThisDoor$ True | Execute$ TrigToken | TriggerDescription$ When you unlock this door, create three 1/1 red Devil creature tokens with "When this creature dies, it deals 1 damage to any target." +SVar:TrigToken:DB$ Token | TokenAmount$ 3 | TokenScript$ r_1_1_devil_burn | TokenOwner$ You +AlternateMode:Split +Oracle:(You may cast either half. That door unlocks on the battlefield. As a sorcery, you may pay the mana cost of a locked door to unlock it.)\nWhen you unlock this door, create three 1/1 red Devil creature tokens with "When this creature dies, it deals 1 damage to any target." + +ALTERNATE + +Name:Torture Pit +ManaCost:3 R +Types:Enchantment Room +R:Event$ DamageDone | ActiveZones$ Battlefield | ValidSource$ Card.YouCtrl,Emblem.YouCtrl | ValidTarget$ Opponent | IsCombat$ False | ReplaceWith$ DamageReplace | Description$ If a source you control would deal noncombat damage to an opponent, it deals that much damage plus 2 instead. +SVar:DamageReplace:DB$ ReplaceEffect | VarName$ DamageAmount | VarValue$ ReplaceCount$DamageAmount/Plus.2 +Oracle:(You may cast either half. That door unlocks on the battlefield. As a sorcery, you may pay the mana cost of a locked door to unlock it.)\nIf a source you control would deal noncombat damage to an opponent, it deals that much damage plus 2 instead. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/unholy_annex_ritual_chamber.txt b/forge-gui/res/cardsfolder/upcoming/unholy_annex_ritual_chamber.txt new file mode 100644 index 00000000000..0d44ef2a5e8 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/unholy_annex_ritual_chamber.txt @@ -0,0 +1,22 @@ +Name:Unholy Annex +ManaCost:2 B +Types:Enchantment Room +T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigDraw | TriggerDescription$ At the beginning of your end step, draw a card. If you control a Demon, each opponent loses 2 life and you gain 2 life. Otherwise, you lose 2 life. +SVar:TrigDraw:DB$ Draw | SubAbility$ DBBranch +SVar:TrigBranch:DB$ Branch | BranchConditionSVar$ X | BranchConditionSVarCompare$ GT0 | TrueSubAbility$ DBLoseLife1 | FalseSubAbility$ DBLoseLife2 +SVar:DBLoseLife1:DB$ LoseLife | Defined$ Player.Opponent | LifeAmount$ 2 | SubAbility$ DBGainLife +SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 2 +SVar:DBLoseLife2:DB$ LoseLife | Defined$ You | LifeAmount$ 2 +SVar:X:Count$Valid Demon.YouCtrl +DeckHas:Ability$LifeGain +AlternateMode:Split +Oracle:(You may cast either half. That door unlocks on the battlefield. As a sorcery, you may pay the mana cost of a locked door to unlock it.)\nAt the beginning of your end step, draw a card. If you control a Demon, each opponent loses 2 life and you gain 2 life. Otherwise, you lose 2 life. + +ALTERNATE + +Name:Ritual Chamber +ManaCost:3 B B +Types:Enchantment Room +T:Mode$ UnlockDoor | ValidPlayer$ You | ValidCard$ Card.Self | ThisDoor$ True | Execute$ TrigToken | TriggerDescription$ When you unlock this door, create a 6/6 black Demon creature token with flying. +SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ b_6_6_demon_flying | TokenOwner$ You +Oracle:(You may cast either half. That door unlocks on the battlefield. As a sorcery, you may pay the mana cost of a locked door to unlock it.)\nWhen you unlock this door, create a 6/6 black Demon creature token with flying. diff --git a/forge-gui/res/tokenscripts/b_6_6_demon_flying.txt b/forge-gui/res/tokenscripts/b_6_6_demon_flying.txt new file mode 100644 index 00000000000..91b356a91c2 --- /dev/null +++ b/forge-gui/res/tokenscripts/b_6_6_demon_flying.txt @@ -0,0 +1,7 @@ +Name:Demon Token +ManaCost:no cost +Types:Creature Demon +Colors:black +PT:6/6 +K:Flying +Oracle:Flying \ No newline at end of file From 5f022923b040d5ac03088fc57b2cf1e435aca44c Mon Sep 17 00:00:00 2001 From: TwentyToedToad Date: Wed, 9 Oct 2024 14:39:20 -0500 Subject: [PATCH 2/8] Add Running Is Useless (#6261) --- forge-gui/res/cardsfolder/upcoming/running_is_useless.txt | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/running_is_useless.txt diff --git a/forge-gui/res/cardsfolder/upcoming/running_is_useless.txt b/forge-gui/res/cardsfolder/upcoming/running_is_useless.txt new file mode 100644 index 00000000000..6294deb7009 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/running_is_useless.txt @@ -0,0 +1,7 @@ +Name:Running Is Useless +ManaCost:no cost +Types:Scheme +T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ DBDestroy | TriggerZones$ Command | TriggerDescription$ When you set this scheme in motion, choose any number of creatures with different mana values. Destroy those creatures. +SVar:DBDestroy:DB$ Destroy | ValidTgts$ Creature | TargetsWithDifferentCMC$ True | TargetMax$ AmountToChoose | TargetMin$ 0 | TgtPrompt$ Choose any number of creatures with different mana values. +SVar:AmountToChoose:Count$Valid Creature +Oracle:When you set this scheme in motion, choose any number of creatures with different mana values. Destroy those creatures. From 1bd54d2ca0d816827b5817331c4ccf306ef9be5c Mon Sep 17 00:00:00 2001 From: TwentyToedToad Date: Wed, 9 Oct 2024 15:27:33 -0500 Subject: [PATCH 3/8] Add Mine Is the Only Truth (#6259) --- .../src/main/java/forge/game/ability/AbilityUtils.java | 4 ++++ forge-game/src/main/java/forge/game/player/Player.java | 9 +++++++++ .../res/cardsfolder/upcoming/mine_is_the_only_truth.txt | 9 +++++++++ 3 files changed, 22 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/mine_is_the_only_truth.txt diff --git a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java index 2de0c3815ee..64f3894e67b 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -2304,6 +2304,10 @@ public class AbilityUtils { return doXMath(player.getNumDrawnThisTurn(), expr, c, ctb); } + if (sq[0].equals("YouDrewLastTurn")) { + return doXMath(player.getNumDrawnLastTurn(), expr, c, ctb); + } + if (sq[0].equals("YouRollThisTurn")) { return doXMath(player.getNumRollsThisTurn(), expr, c, ctb); } 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 b8b65ff8dc4..02d9db748e2 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -105,6 +105,7 @@ public class Player extends GameEntity implements Comparable { private int numPowerSurgeLands; private int numLibrarySearchedOwn; //The number of times this player has searched his library private int numDrawnThisTurn; + private int numDrawnLastTurn; private int numDrawnThisDrawStep; private int numRollsThisTurn; private int numExploredThisTurn; @@ -1444,6 +1445,10 @@ public class Player extends GameEntity implements Comparable { return numDrawnThisTurn; } + public final int getNumDrawnLastTurn() { + return numDrawnLastTurn; + } + public final int numDrawnThisDrawStep() { return numDrawnThisDrawStep; } @@ -2256,6 +2261,9 @@ public class Player extends GameEntity implements Comparable { public final void setLandsPlayedLastTurn(int num) { landsPlayedLastTurn = num; } + public final void setNumDrawnLastTurn(int num) { + numDrawnLastTurn= num; + } public final int getInvestigateNumThisTurn() { return investigatedThisTurn; @@ -2475,6 +2483,7 @@ public class Player extends GameEntity implements Comparable { for (final PlayerZone pz : zones.values()) { pz.resetCardsAddedThisTurn(); } + setNumDrawnLastTurn(getNumDrawnThisTurn()); resetNumDrawnThisTurn(); resetNumRollsThisTurn(); resetNumExploredThisTurn(); diff --git a/forge-gui/res/cardsfolder/upcoming/mine_is_the_only_truth.txt b/forge-gui/res/cardsfolder/upcoming/mine_is_the_only_truth.txt new file mode 100644 index 00000000000..66bf855680f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/mine_is_the_only_truth.txt @@ -0,0 +1,9 @@ +Name:Mine Is the Only Truth +ManaCost:no cost +Types:Ongoing Scheme +T:Mode$ SpellCast | ValidCard$ Card | ValidActivatingPlayer$ Player | TriggerZones$ Command | Execute$ TrigDrawCard | TriggerDescription$ Whenever a player casts a spell, you draw a card. +SVar:TrigDrawCard:DB$ Draw | Defined$ You | NumCards$ 1 +T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Command | CheckSVar$ DrewLastTurn | Execute$ DBAbandon | TriggerDescription$ At the beginning of your upkeep, if you drew a card last turn, abandon this scheme. +SVar:DBAbandon:DB$ Abandon +SVar:DrewLastTurn:Count$YouDrewLastTurn +Oracle:(An ongoing scheme remains face up until it’s abandoned.)\nWhenever a player casts a spell, you draw a card.\nAt the beginning of your upkeep, if you drew a card last turn, abandon this scheme. From 6f9cb7c74d23ba903d12ee0e610b8a8ad61b3f7f Mon Sep 17 00:00:00 2001 From: tool4ever Date: Thu, 10 Oct 2024 08:34:41 +0200 Subject: [PATCH 4/8] Fix Summary Dismissal (#6263) --- .../src/main/java/forge/game/ability/AbilityUtils.java | 2 +- .../a/ajani_nacatl_pariah_ajani_nacatl_avenger.txt | 5 +++-- forge-gui/res/cardsfolder/c/cryptex.txt | 2 +- forge-gui/res/cardsfolder/d/disappear.txt | 2 +- forge-gui/res/cardsfolder/k/keldon_firebombers.txt | 2 +- forge-gui/res/cardsfolder/r/ruhan_of_the_fomori.txt | 2 +- forge-gui/res/cardsfolder/t/the_five_doctors.txt | 2 +- forge-gui/res/cardsfolder/t/twist_allegiance.txt | 2 +- forge-gui/res/cardsfolder/upcoming/i_am_never_alone.txt | 2 +- 9 files changed, 11 insertions(+), 10 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java index 64f3894e67b..4336da4c160 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -1296,7 +1296,7 @@ public class AbilityUtils { } } } else if (defined.startsWith("ValidStack")) { - String valid = changedDef.split(" ", 2)[1]; + String[] valid = changedDef.split(" ", 2)[1].split(","); for (SpellAbilityStackInstance stackInstance : game.getStack()) { SpellAbility instanceSA = stackInstance.getSpellAbility(); if (instanceSA != null && instanceSA.isValid(valid, player, card, sa)) { diff --git a/forge-gui/res/cardsfolder/a/ajani_nacatl_pariah_ajani_nacatl_avenger.txt b/forge-gui/res/cardsfolder/a/ajani_nacatl_pariah_ajani_nacatl_avenger.txt index aa92355bb34..adfb30c3f67 100644 --- a/forge-gui/res/cardsfolder/a/ajani_nacatl_pariah_ajani_nacatl_avenger.txt +++ b/forge-gui/res/cardsfolder/a/ajani_nacatl_pariah_ajani_nacatl_avenger.txt @@ -21,10 +21,11 @@ Types:Legendary Planeswalker Ajani Loyalty:3 A:AB$ PutCounterAll | Cost$ AddCounter<2/LOYALTY> | ValidCards$ Cat.YouCtrl | CounterType$ P1P1 | CounterNum$ 1 | Planeswalker$ True | SpellDescription$ Put a +1/+1 counter on each Cat you control. A:AB$ Token | Cost$ AddCounter<0/LOYALTY> | TokenAmount$ 1 | TokenScript$ w_2_1_cat_warrior | TokenOwner$ You | RememberOriginalTokens$ True | SubAbility$ DBImmediateTrig1 | Planeswalker$ True | SpellDescription$ Create a 2/1 white Cat Warrior creature token. When you do, if you control a red permanent other than CARDNAME, he deals damage equal to the number of creatures you control to any target. -SVar:DBImmediateTrig1:DB$ ImmediateTrigger | TriggerAmount$ Remembered$Amount | ConditionPresent$ Permanent.Red+YouCtrl+Other | Execute$ TrigDamage | TriggerDescription$ When you do, if you control a red permanent other than CARDNAME, he deals damage equal to the number of creatures you control to any target. -SVar:TrigDamage:DB$ DealDamage | NumDmg$ X | ValidTgts$ Any | ConditionPresent$ Permanent.Red+YouCtrl+Other | SubAbility$ DBCleanup | TgtPrompt$ Select any valid target | SpellDescription$ CARDNAME deals damage equal to the number of creatures you control to any target. +SVar:DBImmediateTrig1:DB$ ImmediateTrigger | TriggerAmount$ Remembered$Amount | ConditionPresent$ Permanent.Red+YouCtrl+Other | Execute$ TrigDamage | SubAbility$ DBCleanup2 | TriggerDescription$ When you do, if you control a red permanent other than CARDNAME, he deals damage equal to the number of creatures you control to any target. +SVar:TrigDamage:DB$ DealDamage | NumDmg$ X | ValidTgts$ Any | ConditionPresent$ Permanent.Red+YouCtrl+Other | TgtPrompt$ Select any valid target | SpellDescription$ CARDNAME deals damage equal to the number of creatures you control to any target. SVar:X:Count$Valid Creature.YouCtrl A:AB$ ChooseCard | Cost$ SubCounter<4/LOYALTY> | Planeswalker$ True | Ultimate$ True | Defined$ Opponent | Choices$ Permanent.nonLand | ChooseEach$ Artifact & Creature & Enchantment & Planeswalker | ControlledByPlayer$ Chooser | Mandatory$ True | Reveal$ True | SubAbility$ SacAllOthers | StackDescription$ SpellDescription | SpellDescription$ Each opponent chooses an artifact, a creature, an enchantment, and a planeswalker from among the nonland permanents they control, then sacrifices the rest. SVar:SacAllOthers:DB$ SacrificeAll | ValidCards$ Permanent.nonLand+OppCtrl+nonChosenCard | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True +SVar:DBCleanup2:DB$ Cleanup | ClearRemembered$ True Oracle:[+2]: Put a +1/+1 counter on each Cat you control.\n[0]: Create a 2/1 white Cat Warrior creature token. When you do, if you control a red permanent other than Ajani, Nacatl Avenger, he deals damage equal to the number of creatures you control to any target.\n[-4]: Each opponent chooses an artifact, a creature, an enchantment and a planeswalker from among the nonland permanents they control, then sacrifices the rest. diff --git a/forge-gui/res/cardsfolder/c/cryptex.txt b/forge-gui/res/cardsfolder/c/cryptex.txt index 8877f77d147..e4721174905 100644 --- a/forge-gui/res/cardsfolder/c/cryptex.txt +++ b/forge-gui/res/cardsfolder/c/cryptex.txt @@ -4,7 +4,7 @@ Types:Artifact A:AB$ Mana | Cost$ T CollectEvidence<3> | Produced$ Any | SubAbility$ DBPutCounter | SpellDescription$ Add one mana of any color. Put an unlock counter on CARDNAME. (To collect evidence 3, exile cards with total mana value 3 or greater from your graveyard.) SVar:DBPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ UNLOCK A:AB$ Surveil | Cost$ Sac<1/CARDNAME> | Amount$ 3 | SubAbility$ DBDraw | IsPresent$ Card.Self+counters_GE5_UNLOCK | SpellDescription$ Surveil 3, then draw three cards. Activate only if CARDNAME has five or more unlock counters on it. -SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ 3 | SubAbility$ DBGainLife +SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ 3 DeckHints:Ability$Graveyard|Mill|Discard|Dredge DeckHas:Ability$Counters|Sacrifice|Surveil Oracle:{T}, Collect evidence 3: Add one mana of any color. Put an unlock counter on Cryptex. (To collect evidence 3, exile cards with total mana value 3 or greater from your graveyard.)\nSacrifice Cryptex: Surveil 3, then draw three cards. Activate only if Cryptex has five or more unlock counters on it. diff --git a/forge-gui/res/cardsfolder/d/disappear.txt b/forge-gui/res/cardsfolder/d/disappear.txt index 970cb058ad0..a7c55de7b24 100644 --- a/forge-gui/res/cardsfolder/d/disappear.txt +++ b/forge-gui/res/cardsfolder/d/disappear.txt @@ -3,6 +3,6 @@ ManaCost:2 U U Types:Enchantment Aura K:Enchant creature A:SP$ Attach | Cost$ 2 U U | ValidTgts$ Creature | AILogic$ Curse -A:AB$ ChangeZone | Cost$ U | Defined$ EnchantedAndSelf | Origin$ Battlefield | Destination$ Hand | SubAbility$ DBBounce | SpellDescription$ Return enchanted creature and CARDNAME to their owners' hands. +A:AB$ ChangeZone | Cost$ U | Defined$ EnchantedAndSelf | Origin$ Battlefield | Destination$ Hand | SpellDescription$ Return enchanted creature and CARDNAME to their owners' hands. SVar:NonStackingAttachEffect:True Oracle:Enchant creature\n{U}: Return enchanted creature and Disappear to their owners' hands. diff --git a/forge-gui/res/cardsfolder/k/keldon_firebombers.txt b/forge-gui/res/cardsfolder/k/keldon_firebombers.txt index f390aa28f7a..65386a1582d 100644 --- a/forge-gui/res/cardsfolder/k/keldon_firebombers.txt +++ b/forge-gui/res/cardsfolder/k/keldon_firebombers.txt @@ -4,7 +4,7 @@ Types:Creature Human Soldier PT:3/3 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChooseThree | TriggerDescription$ When CARDNAME enters, each player sacrifices all lands they control except for three. SVar:TrigChooseThree:DB$ ChooseCard | Defined$ Player | Choices$ Land | ControlledByPlayer$ Chooser | Amount$ 3 | ChoiceTitle$ Choose three lands to keep | Mandatory$ True | Reveal$ True | SubAbility$ SacAllOthers -SVar:DBSacrificeAll:DB$ SacrificeAll | ValidCards$ Land.nonChosenCard | SubAbility$ DBCleanup +SVar:DBAllOthers:DB$ SacrificeAll | ValidCards$ Land.nonChosenCard | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True DeckHas:Ability$Sacrifice Oracle:When Keldon Firebombers enters, each player sacrifices all lands they control except for three. diff --git a/forge-gui/res/cardsfolder/r/ruhan_of_the_fomori.txt b/forge-gui/res/cardsfolder/r/ruhan_of_the_fomori.txt index fcf4447c8dd..a432cbeef57 100644 --- a/forge-gui/res/cardsfolder/r/ruhan_of_the_fomori.txt +++ b/forge-gui/res/cardsfolder/r/ruhan_of_the_fomori.txt @@ -3,7 +3,7 @@ ManaCost:1 U R W Types:Legendary Creature Giant Warrior PT:7/7 T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | Execute$ TrigChoose | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of combat on your turn, choose an opponent at random. CARDNAME attacks that player this combat if able. -SVar:TrigChoose:DB$ ChoosePlayer | Defined$ You | Choices$ Player.Opponent | Random$ True | SubAbility$ DBPEffect +SVar:TrigChoose:DB$ ChoosePlayer | Defined$ You | Choices$ Player.Opponent | Random$ True | SubAbility$ DBEffect SVar:DBEffect:DB$ Effect | RememberObjects$ Self | ExileOnMoved$ Battlefield | StaticAbilities$ AttackChosen | Duration$ UntilEndOfCombat SVar:AttackChosen:Mode$ MustAttack | ValidCreature$ Card.IsRemembered | MustAttack$ ChosenPlayer | Description$ EFFECTSOURCE attacks that player this combat if able. Oracle:At the beginning of combat on your turn, choose an opponent at random. Ruhan of the Fomori attacks that player this combat if able. diff --git a/forge-gui/res/cardsfolder/t/the_five_doctors.txt b/forge-gui/res/cardsfolder/t/the_five_doctors.txt index 3087a2cbae4..c993937b27d 100644 --- a/forge-gui/res/cardsfolder/t/the_five_doctors.txt +++ b/forge-gui/res/cardsfolder/t/the_five_doctors.txt @@ -2,7 +2,7 @@ Name:The Five Doctors ManaCost:5 G Types:Sorcery K:Kicker:5 -A:SP$ ChangeZone | Origin$ Library | OriginAlternative$ Graveyard | Destination$ Hand | DestinationAlternative$ Battlefield | DestAltSVar$ MANDATORY Count$TimesKicked | ChangeType$ Doctor | ChangeNum$ 5 | SubAbility$ DBChangeZone | SpellDescription$ Search your library and/or graveyard for up to five Doctor cards, reveal them, and put them into your hand. If you search your library this way, shuffle. If this spell was kicked, put those cards onto the battlefield instead of putting them into your hand. +A:SP$ ChangeZone | Origin$ Library | OriginAlternative$ Graveyard | Destination$ Hand | DestinationAlternative$ Battlefield | DestAltSVar$ MANDATORY Count$TimesKicked | ChangeType$ Doctor | ChangeNum$ 5 | SpellDescription$ Search your library and/or graveyard for up to five Doctor cards, reveal them, and put them into your hand. If you search your library this way, shuffle. If this spell was kicked, put those cards onto the battlefield instead of putting them into your hand. DeckNeeds:Type$Doctor DeckHas:Ability$Graveyard Oracle:Kicker {5} (You may pay an additional {5} as you cast this spell.)\nSearch your library and/or graveyard for up to five Doctor cards, reveal them, and put them into your hand. If you search your library this way, shuffle. If this spell was kicked, put those cards onto the battlefield instead of putting them into your hand. diff --git a/forge-gui/res/cardsfolder/t/twist_allegiance.txt b/forge-gui/res/cardsfolder/t/twist_allegiance.txt index d00a897aa40..2a0ea092b00 100644 --- a/forge-gui/res/cardsfolder/t/twist_allegiance.txt +++ b/forge-gui/res/cardsfolder/t/twist_allegiance.txt @@ -3,7 +3,7 @@ ManaCost:6 R Types:Sorcery A:SP$ GainControl | ValidTgts$ Opponent | AllValid$ Creature.TargetedPlayerCtrl | NewController$ You | LoseControl$ EOT | RememberControlled$ True | StackDescription$ REP You_{p:You} & target opponent_{p:Targeted} | SubAbility$ DBGainCtrlOpp | SpellDescription$ You and target opponent each gain control of all creatures the other controls until end of turn. Untap those creatures. Those creatures gain haste until end of turn. SVar:DBGainCtrlOpp:DB$ GainControl | AllValid$ Creature.IsNotRemembered+YouCtrl | NewController$ Targeted | LoseControl$ EOT | RememberControlled$ True | StackDescription$ None | SubAbility$ DBUntapAll -SVar:DBDUntapAll:DB$ UntapAll | ValidCards$ Creature.IsRemembered | SubAbility$ DBPumpAll +SVar:DBUntapAll:DB$ UntapAll | ValidCards$ Creature.IsRemembered | SubAbility$ DBPumpAll SVar:PumpAll:DB$ PumpAll | ValidCards$ Creature.IsRemembered | KW$ Haste | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/upcoming/i_am_never_alone.txt b/forge-gui/res/cardsfolder/upcoming/i_am_never_alone.txt index b437d994887..d63e9f57cdc 100644 --- a/forge-gui/res/cardsfolder/upcoming/i_am_never_alone.txt +++ b/forge-gui/res/cardsfolder/upcoming/i_am_never_alone.txt @@ -3,4 +3,4 @@ ManaCost:no cost Types:Scheme T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ DBCopyCommander | TriggerZones$ Command | TriggerDescription$ When you set this scheme in motion, create a token that's a copy of your commander, except it's not legendary. SVar:DBCopyCommander:DB$ CopyPermanent | Choices$ Card.IsCommander+YouOwn | Defined$ ValidAll Card.IsCommander+YouOwn | ChoiceTitle$ Choose a commander you own | NonLegendary$ True -Oracle:When you set this scheme in motion, create a token that's a copy of your commander, except it's not legendary.\n"This is but a pale shadow of my true form. Cower before it, and despair." +Oracle:When you set this scheme in motion, create a token that's a copy of your commander, except it's not legendary. From b2513288738710a03539930e27a44451e851814a Mon Sep 17 00:00:00 2001 From: TwentyToedToad Date: Thu, 10 Oct 2024 02:13:11 -0500 Subject: [PATCH 5/8] Added Your Plans Mean Nothing (#6262) * Added Your Plans Mean Nothing Tested with teammates to ensure that if a teammate is targeted they do not get to draw cards but they do discard their hand. * Update your_plans_mean_nothing.txt --- .../upcoming/your_plans_mean_nothing.txt | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/your_plans_mean_nothing.txt diff --git a/forge-gui/res/cardsfolder/upcoming/your_plans_mean_nothing.txt b/forge-gui/res/cardsfolder/upcoming/your_plans_mean_nothing.txt new file mode 100644 index 00000000000..ccce13c7ba8 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/your_plans_mean_nothing.txt @@ -0,0 +1,13 @@ +Name:Your Plans Mean Nothing +ManaCost:no cost +Types:Scheme +T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ DBChoosePlayer | TriggerZones$ Command | TriggerDescription$ When you set this scheme in motion, any number of target players each discard their hands. Each opponent draws cards equal to the number of cards that player discarded minus one. Then if you discarded a card this way, draw seven cards. +SVar:DBChoosePlayer:DB$ Pump | ValidTgts$ Player | TargetMin$ 0 | TargetMax$ PlayerCount | TgtPrompt$ Choose any number of players | SubAbility$ DBRepeat +SVar:DBRepeat:DB$ RepeatEach | RepeatPlayers$ Targeted | RepeatSubAbility$ DBDiscard | SubAbility$ DBYouDraw | SpellDescription$ Each opponent draws cards equal to the number of cards that player discarded minus one. Then if you discarded a card this way, draw seven cards. +SVar:DBDiscard:DB$ Discard | Defined$ Remembered | Mode$ Hand | RememberDiscarded$ True | SubAbility$ DBDraw +SVar:DBDraw:DB$ Draw | NumCards$ X | Defined$ Player.Opponent+IsRemembered +SVar:DBYouDraw:DB$ Draw | Defined$ You | NumCards$ 7 | ConditionDefined$ Remembered | ConditionPresent$ Card.YouOwn | SubAbility$ DBClearRemembered +SVar:DBClearRemembered:DB$ Cleanup | ClearRemembered$ True +SVar:PlayerCount:PlayerCountPlayers$Amount +SVar:X:Remembered$Valid Card.RememberedPlayerOwn/Minus.1 +Oracle:When you set this scheme in motion, any number of target players each discard their hands. Each opponent draws cards equal to the number of cards that player discarded minus one. Then if you discarded a card this way, draw seven cards. From 96d065189ba44d9fc06d4852b940bc8244400689 Mon Sep 17 00:00:00 2001 From: TwentyToedToad Date: Thu, 10 Oct 2024 02:13:19 -0500 Subject: [PATCH 6/8] Add Demonic Covenant and supporting changes (#6257) * Add Demonic Covenant and supporting changes * Updated changes * Update demonic_covenant.txt * Addressing PR comments --------- Co-authored-by: loperjchris --- .../src/main/java/forge/card/CardType.java | 18 +++++++++++++++++- .../src/main/java/forge/card/CardTypeView.java | 1 + .../src/main/java/forge/game/GameAction.java | 6 ++++++ .../src/main/java/forge/game/card/Card.java | 7 +++++++ .../java/forge/game/card/CardPredicates.java | 4 ++++ .../java/forge/game/card/CardProperty.java | 5 +++++ .../cardsfolder/upcoming/demonic_covenant.txt | 14 ++++++++++++++ 7 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 forge-gui/res/cardsfolder/upcoming/demonic_covenant.txt diff --git a/forge-core/src/main/java/forge/card/CardType.java b/forge-core/src/main/java/forge/card/CardType.java index cbfdcb23600..a424f6cdb7a 100644 --- a/forge-core/src/main/java/forge/card/CardType.java +++ b/forge-core/src/main/java/forge/card/CardType.java @@ -779,7 +779,6 @@ public final class CardType implements Comparable, CardTypeView { if (ctOther == null) { return false; } - for (final CoreType type : getCoreTypes()) { if (ctOther.hasType(type)) { return true; @@ -788,6 +787,23 @@ public final class CardType implements Comparable, CardTypeView { return false; } + public boolean sharesAllCardTypesWith(final CardTypeView ctOther) { + if (ctOther == null) { + return false; + } + for (final CoreType type : getCoreTypes()) { + if (!ctOther.hasType(type)) { + return false; + } + } + for (final CoreType type : ctOther.getCoreTypes()) { + if (!this.hasType(type)) { + return false; + } + } + return true; + } + public boolean sharesSubtypeWith(final CardTypeView ctOther) { if (ctOther == null) { return false; diff --git a/forge-core/src/main/java/forge/card/CardTypeView.java b/forge-core/src/main/java/forge/card/CardTypeView.java index 762f87ee287..68abc61ad6c 100644 --- a/forge-core/src/main/java/forge/card/CardTypeView.java +++ b/forge-core/src/main/java/forge/card/CardTypeView.java @@ -30,6 +30,7 @@ public interface CardTypeView extends Iterable, Serializable { public boolean sharesLandTypeWith(final CardTypeView ctOther); public boolean sharesPermanentTypeWith(final CardTypeView ctOther); public boolean sharesCardTypeWith(final CardTypeView ctOther); + public boolean sharesAllCardTypesWith(final CardTypeView ctOther); boolean isPermanent(); boolean isCreature(); diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index df8fc772c4b..6b75fb6b610 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -1870,6 +1870,8 @@ public class GameAction { public final CardCollection sacrifice(final Iterable list, final SpellAbility source, final boolean effect, Map params) { Multimap lki = MultimapBuilder.hashKeys().arrayListValues().build(); + final boolean showRevealDialog = source != null && source.hasParam("ShowSacrificedCards"); + CardCollection result = new CardCollection(); for (Card c : list) { if (c == null) { @@ -1890,6 +1892,10 @@ public class GameAction { if (changed != null) { result.add(changed); } + if (showRevealDialog) { + final String message = Localizer.getInstance().getMessage("lblSacrifice"); + game.getAction().reveal(result, ZoneType.Graveyard, c.getOwner(), false, message, false); + } } for (Map.Entry> e : lki.asMap().entrySet()) { // Run triggers 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 0117e037d0c..c02d8ed1bc0 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -6088,6 +6088,13 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr return getType().sharesCardTypeWith(c1.getType()); } + public final boolean sharesAllCardTypesWith(final Card c1) { + if (c1 == null) { + return false; + } + return getType().sharesAllCardTypesWith(c1.getType()); + } + public final boolean sharesControllerWith(final Card c1) { return c1 != null && getController().equals(c1.getController()); } diff --git a/forge-game/src/main/java/forge/game/card/CardPredicates.java b/forge-game/src/main/java/forge/game/card/CardPredicates.java index 5e2289da035..89d8a0ac29c 100644 --- a/forge-game/src/main/java/forge/game/card/CardPredicates.java +++ b/forge-game/src/main/java/forge/game/card/CardPredicates.java @@ -114,6 +114,10 @@ public final class CardPredicates { return c -> c.sharesCardTypeWith(card); } + public static Predicate sharesAllCardTypesWith(final Card card) { + return c -> c.sharesAllCardTypesWith(card); + } + public static Predicate sharesCreatureTypeWith(final Card card) { return c -> c.sharesCreatureTypeWith(card); } diff --git a/forge-game/src/main/java/forge/game/card/CardProperty.java b/forge-game/src/main/java/forge/game/card/CardProperty.java index 0e66f45d82c..ec524a22bbf 100644 --- a/forge-game/src/main/java/forge/game/card/CardProperty.java +++ b/forge-game/src/main/java/forge/game/card/CardProperty.java @@ -847,6 +847,11 @@ public class CardProperty { } } } + } else if (property.startsWith("sharesAllCardTypesWithOther")) { + final String restriction = property.split("sharesAllCardTypesWithOther ")[1]; + CardCollection list = AbilityUtils.getDefinedCards(source, restriction, spellAbility); + list.remove(card); + return Iterables.any(list, CardPredicates.sharesAllCardTypesWith(card)); } else if (property.startsWith("sharesLandTypeWith")) { final String restriction = property.split("sharesLandTypeWith ")[1]; if (!Iterables.any(AbilityUtils.getDefinedCards(source, restriction, spellAbility), CardPredicates.sharesLandTypeWith(card))) { diff --git a/forge-gui/res/cardsfolder/upcoming/demonic_covenant.txt b/forge-gui/res/cardsfolder/upcoming/demonic_covenant.txt new file mode 100644 index 00000000000..36e9729e563 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/demonic_covenant.txt @@ -0,0 +1,14 @@ +Name:Demonic Covenant +ManaCost:4 B B +Types:Kindred Enchantment Demon +T:Mode$ AttackersDeclaredOneTarget | AttackedTarget$ Player | ValidAttackers$ Creature.Demon+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigDrawAndDamage | TriggerDescription$ Whenever one or more Demons you control attack a player, you draw a card and lose 1 life. +SVar:TrigDrawAndDamage:DB$ Draw | SubAbility$ DBLoseLife +SVar:DBLoseLife:DB$ LoseLife | LifeAmount$ 1 +T:Mode$ Phase | Phase$ End of Turn | TriggerZones$ Battlefield | Execute$ TrigCreateAndMill | TriggerDescription$ At the beginning of your end step, create a 5/5 black Demon creature token with flying, then mill two cards. If two cards that share all their card types were milled this way, sacrifice CARDNAME. +SVar:TrigCreateAndMill:DB$ Token | TokenAmount$ 1 | TokenScript$ b_5_5_demon_flying | TokenOwner$ You | SubAbility$ DBMill +SVar:DBMill:DB$ Mill | NumCards$ 2 | RememberMilled$ True | ShowMilledCards$ True | SubAbility$ DBSacrifice +SVar:DBSacrifice:DB$ Sacrifice | SacValid$ Self | ShowSacrificedCards$ True | ConditionCheckSVar$ MilledSharesAllTypes | ConditionSVarCompare$ GE2 | SubAbility$ Cleanup +SVar:MilledSharesAllTypes:Remembered$Valid Card.sharesAllCardTypesWithOther Remembered +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +DeckHas:Ability$Token|Mill|Sacrifice +Oracle:Whenever one or more Demons you control attack a player, you draw a card and lose 1 life.\nAt the beginning of your end step, create a 5/5 black Demon creature token with flying, then mill two cards. If two cards that share all their card types were milled this way, sacrifice Demonic Covenant. From cca7db56547135e8081a7b0b675f8bb1238a90ea Mon Sep 17 00:00:00 2001 From: TwentyToedToad Date: Thu, 10 Oct 2024 02:16:39 -0500 Subject: [PATCH 7/8] Add Rendmaw Creaking Nest and supporting changes (#6265) * Add Rendmaw Creaking Nest, supporting property numTypes, and black 2/2 bird flying token * Updated accoring to PR requests * Update rendmaw_creaking_nest.txt * Added landplayed trigger --------- Co-authored-by: loperjchris --- .../src/main/java/forge/game/card/CardProperty.java | 10 +++++----- .../cardsfolder/upcoming/rendmaw_creaking_nest.txt | 13 +++++++++++++ forge-gui/res/tokenscripts/b_2_2_bird_flying.txt | 7 +++++++ 3 files changed, 25 insertions(+), 5 deletions(-) create mode 100644 forge-gui/res/cardsfolder/upcoming/rendmaw_creaking_nest.txt create mode 100644 forge-gui/res/tokenscripts/b_2_2_bird_flying.txt diff --git a/forge-game/src/main/java/forge/game/card/CardProperty.java b/forge-game/src/main/java/forge/game/card/CardProperty.java index ec524a22bbf..ca64d93b010 100644 --- a/forge-game/src/main/java/forge/game/card/CardProperty.java +++ b/forge-game/src/main/java/forge/game/card/CardProperty.java @@ -35,10 +35,7 @@ import forge.util.collect.FCollectionView; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.Pair; -import java.util.Collections; -import java.util.List; -import java.util.Objects; -import java.util.Set; +import java.util.*; public class CardProperty { @@ -1508,7 +1505,7 @@ public class CardProperty { } } else if (property.startsWith("power") || property.startsWith("toughness") || property.startsWith("cmc") || property.startsWith("totalPT") || property.startsWith("numColors") - || property.startsWith("basePower") || property.startsWith("baseToughness")) { + || property.startsWith("basePower") || property.startsWith("baseToughness") || property.startsWith("numTypes")) { int x; int y = 0; String rhs = ""; @@ -1534,6 +1531,9 @@ public class CardProperty { } else if (property.startsWith("numColors")) { rhs = property.substring(11); y = card.getColor().countColors(); + } else if (property.startsWith("numTypes")) { + rhs = property.substring(10); + y = Iterables.size(card.getType().getCoreTypes()); } x = AbilityUtils.calculateAmount(source, rhs, spellAbility); diff --git a/forge-gui/res/cardsfolder/upcoming/rendmaw_creaking_nest.txt b/forge-gui/res/cardsfolder/upcoming/rendmaw_creaking_nest.txt new file mode 100644 index 00000000000..9a15c07735a --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/rendmaw_creaking_nest.txt @@ -0,0 +1,13 @@ +Name:Rendmaw, Creaking Nest +ManaCost:3 B G +Types:Legendary Artifact Creature Scarecrow +PT:5/5 +K:Menace +K:Reach +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBTokens | TriggerDescription$ When CARDNAME enters and whenever you play a card with two or more card types, each player creates a tapped 2/2 black Bird creature token with flying. The tokens are goaded for the rest of the game. +T:Mode$ SpellCast | ValidCard$ Card.numTypesGE2 | Execute$ DBTokens | Secondary$ True | TriggerDescription$ When CARDNAME enters and whenever you play a card with two or more card types, each player creates a tapped 2/2 black Bird creature token with flying. The tokens are goaded for the rest of the game. +T:Mode$ LandPlayed | ValidCard$ Land.numTypesGE2 | Execute$ DBTokens | Secondary$ True | TriggerDescription$ When CARDNAME enters and whenever you play a card with two or more card types, each player creates a tapped 2/2 black Bird creature token with flying. The tokens are goaded for the rest of the game. +SVar:DBTokens:DB$ Token | TokenAmount$ 1 | TokenScript$ b_2_2_bird_flying | TokenTapped$ True | TokenOwner$ Player | RememberTokens$ True | SubAbility$ DBGoad +SVar:DBGoad:DB$ Goad | Defined$ Remembered | Duration$ Permanent | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +Oracle:Menace, reach\nWhen Rendmaw, Creaking Nest enters and whenever you play a card with two or more card types, each player creates a tapped 2/2 black Bird creature token with flying. The tokens are goaded for the rest of the game. (They attack each combat if able and attack a player other than you if able.) \ No newline at end of file diff --git a/forge-gui/res/tokenscripts/b_2_2_bird_flying.txt b/forge-gui/res/tokenscripts/b_2_2_bird_flying.txt new file mode 100644 index 00000000000..63589430a5e --- /dev/null +++ b/forge-gui/res/tokenscripts/b_2_2_bird_flying.txt @@ -0,0 +1,7 @@ +Name:Bird Token +ManaCost:no cost +Types:Creature Bird +Colors:black +PT:2/2 +K:Flying +Oracle:Flying From fddab97eeaa1c3a585374869b0912eb6fa83e3aa Mon Sep 17 00:00:00 2001 From: Agetian Date: Thu, 10 Oct 2024 10:28:38 +0300 Subject: [PATCH 8/8] - Added puzzle PS_DSK1. (#6269) --- forge-gui/res/puzzle/PS_DSK1.pzl | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 forge-gui/res/puzzle/PS_DSK1.pzl diff --git a/forge-gui/res/puzzle/PS_DSK1.pzl b/forge-gui/res/puzzle/PS_DSK1.pzl new file mode 100644 index 00000000000..41cf5951ffe --- /dev/null +++ b/forge-gui/res/puzzle/PS_DSK1.pzl @@ -0,0 +1,16 @@ +[metadata] +Name:Possibility Storm - Duskmourn: House of Horror #01 +URL:https://i2.wp.com/www.possibilitystorm.com/wp-content/uploads/2024/09/latest-1-scaled.jpg?ssl=1 +Goal:Win +Turns:1 +Difficulty:Uncommon +Description:Win this turn. Ensure your solution satisfies all possible blocking conditions. Good luck! +[state] +turn=1 +activeplayer=p0 +activephase=MAIN1 +p0life=20 +p0hand=Pyroclasm;Screaming Nemesis;Nahiri's Sacrifice +p0battlefield=Fear of Being Hunted;Diversion Specialist;Chainsaw|Counters:REV=1;Mountain;Mountain;Mountain;Mountain;Mountain +p1life=8 +p1battlefield=Shadow-Rite Priest;Resurrected Cultist;Grasping Longneck