dovin-0.2: src/Solutions/RavnicaAllegiancePre2.hs
module Solutions.RavnicaAllegiancePre2 where
import Dovin.V2
import Dovin.Prelude
import Data.List (delete)
import Control.Lens
import Debug.Trace
solution :: GameMonad ()
solution = do
step "Initial Setup" $ do
setLife Opponent 7
withLocation Play $ do
addLands 3 "Blood Crypt"
addLands 3 "Overgrown Tomb"
withAttribute flying $ addCreature (3, 3) "Mausoleum Harpy"
withAttribute defender $ addCreature (4, 3) "Piston-Fist Cyclops"
withAttribute defender $ addCreature (0, 2) "Dragon Egg"
addEnchantment "Rhythm of the Wild 1"
addEnchantment "Rhythm of the Wild 2"
withLocation Hand $ do
addInstant "Ancient Animus"
addCreature (2, 2) "Growth-Chamber Guardian 1"
withLocation Deck $ do
addCreature (2, 2) "Growth-Chamber Guardian 2"
as Opponent $ do
withLocation Play $ do
withAttribute doublestrike $ addCreature (3, 3) "Goring Ceratops"
withAttribute firststrike $ addCreature (3, 3) "Goblin Chainwhirler 1"
withAttribute firststrike $ addCreature (3, 3) "Goblin Chainwhirler 2"
step "Cast Guardian, get haste/+1 from Rhythm triggers" $ do
tapForMana "G" "Overgrown Tomb 1"
tapForMana "R" "Blood Crypt 1"
cast "1G" "Growth-Chamber Guardian 1" >> resolveTop
trigger "Haste" "Rhythm of the Wild 1"
trigger "+1/+1" "Rhythm of the Wild 2"
resolveTop
modifyCardDeprecated "Growth-Chamber Guardian 1" cardPlusOneCounters (+ 1)
trigger "Search" "Growth-Chamber Guardian 1"
resolveTop
move (Active, Deck) (Active, Hand) "Growth-Chamber Guardian 2"
resolveTop
gainAttribute haste "Growth-Chamber Guardian 1"
step "Cast second Guardian, same haste/+1 combo (decline search)" $ do
tapForMana "G" "Overgrown Tomb 2"
tapForMana "R" "Blood Crypt 2"
cast "1G" "Growth-Chamber Guardian 2" >> resolveTop
trigger "Haste" "Rhythm of the Wild 1"
trigger "+1/+1" "Rhythm of the Wild 2"
resolveTop
modifyCardDeprecated "Growth-Chamber Guardian 2" cardPlusOneCounters (+ 1)
trigger "Search" "Growth-Chamber Guardian 1"
resolveTop
resolveTop
gainAttribute haste "Growth-Chamber Guardian 2"
step "Cast Animus on Egg. Enables Piston-Fist, triggers Harpy" $ do
tapForMana "G" "Overgrown Tomb 3"
tapForMana "R" "Blood Crypt 3"
cast "1G" "Ancient Animus" >> resolveTop
target "Dragon Egg"
loseAttribute defender "Piston-Fist Cyclops"
fight "Dragon Egg" "Goring Ceratops"
trigger "Make Dragon" "Dragon Egg"
trigger "+1/+1" "Mausoleum Harpy"
resolveHarpyTrigger
resolveTop
withLocation Play $ do
withAttributes [token, flying, summoned] $ addCreature (2, 2) "Dragon"
step "Attack with all except dragon" $ do
attackWith
[ "Mausoleum Harpy"
, "Piston-Fist Cyclops"
, "Growth-Chamber Guardian 1"
, "Growth-Chamber Guardian 2"
]
fork "Opponent doesn't block one ground attacker, damage is lethal" $ do
step "First-strike damage" $ do
combatDamage ["Goring Ceratops"] "Piston-Fist Cyclops"
combatDamage ["Goblin Chainwhirler 1"] "Growth-Chamber Guardian 1"
step "Death triggers for harpy" $ do
trigger "Cyclops" "Mausoleum Harpy"
trigger "Guardian 1" "Mausoleum Harpy"
resolveTop >> modifyStrength (1, 1) "Mausoleum Harpy"
resolveTop >> modifyStrength (1, 1) "Mausoleum Harpy"
step "Regular damage" $ do
combatDamage [] "Mausoleum Harpy"
combatDamage [] "Growth-Chamber Guardian 2"
validateLife (-2) Opponent
step "First-strike damage" $ do
combatDamage ["Goring Ceratops"] "Piston-Fist Cyclops"
combatDamage ["Goblin Chainwhirler 1"] "Growth-Chamber Guardian 1"
combatDamage ["Goblin Chainwhirler 2"] "Growth-Chamber Guardian 2"
step "Death triggers for harpy" $ do
trigger "Cyclops" "Mausoleum Harpy"
trigger "Guardian 1" "Mausoleum Harpy"
trigger "Guardian 2" "Mausoleum Harpy"
resolveTop >> modifyStrength (1, 1) "Mausoleum Harpy"
resolveTop >> modifyStrength (1, 1) "Mausoleum Harpy"
resolveTop >> modifyStrength (1, 1) "Mausoleum Harpy"
step "Regular damage" $ do
combatDamage [] "Mausoleum Harpy"
validateLife 0 Opponent
formatter step = attributes <> case view stepNumber step of
1 -> boardFormatter
5 -> cardFormatter
"attacking creatures"
(matchLocation (Active, Play)
<> matchAttribute attacking
)
_ -> mempty
resolveHarpyTrigger = do
resolveTop
modifyCardDeprecated "Mausoleum Harpy" cardPlusOneCounters (+ 1)
attributes = attributeFormatter $ do
attribute "life" $ countLife Opponent
attribute "mana" $ countCards $ matchAttribute land <> missingAttribute tapped
attribute "harpy" $
view cardStrength <$> requireCard "Mausoleum Harpy" mempty
blocked = "blocked"