module Solutions.GuildsOfRavnicaPre2 where import Dovin.V1 solution :: GameMonad () solution :: GameMonad () solution = do String -> GameMonad () -> GameMonad () forall a. String -> GameMonad a -> GameMonad a step String "Initial state" (GameMonad () -> GameMonad ()) -> GameMonad () -> GameMonad () forall a b. (a -> b) -> a -> b $ do Player -> GameMonad () -> GameMonad () as Player Opponent (GameMonad () -> GameMonad ()) -> GameMonad () -> GameMonad () forall a b. (a -> b) -> a -> b $ Int -> GameMonad () setLife Int 9 CardLocation -> GameMonad () -> GameMonad () withLocation (Player Active, Location Hand) (GameMonad () -> GameMonad ()) -> GameMonad () -> GameMonad () forall a b. (a -> b) -> a -> b $ do (Int, Int) -> String -> GameMonad () addCreature (Int 1, Int 1) String "Ochran Assassin" (Int, Int) -> String -> GameMonad () addCreature (Int 2, Int 2) String "Rhizome Lurcher" CardLocation -> GameMonad () -> GameMonad () withLocation (Player Active, Location Play) (GameMonad () -> GameMonad ()) -> GameMonad () -> GameMonad () forall a b. (a -> b) -> a -> b $ do (Int, Int) -> String -> GameMonad () addCreature (Int 1, Int 1) String "Torch Courier" String -> GameMonad () -> GameMonad () withAttribute String flying (GameMonad () -> GameMonad ()) -> GameMonad () -> GameMonad () forall a b. (a -> b) -> a -> b $ (Int, Int) -> String -> GameMonad () addCreature (Int 3, Int 2) String "Whisper Agent" (Int, Int) -> String -> GameMonad () addCreature (Int 2, Int 2) String "Whisper, Blood Liturgist" Int -> String -> GameMonad () addLands Int 3 String "Dragonskull Summit" Int -> String -> GameMonad () addLands Int 4 String "Woodland Cemetery" CardLocation -> GameMonad () -> GameMonad () withLocation (Player Active, Location Graveyard) (GameMonad () -> GameMonad ()) -> GameMonad () -> GameMonad () forall a b. (a -> b) -> a -> b $ do (Int, Int) -> String -> GameMonad () addCreature (Int 2, Int 2) String "Devkarin Dissident" (Int, Int) -> String -> GameMonad () addCreature (Int 4, Int 3) String "Underrealm Lich" (Int, Int) -> String -> GameMonad () addCreature (Int 3, Int 4) String "Golgari Findbroker" (Int, Int) -> String -> GameMonad () addCreature (Int 2, Int 2) String "Erstwhile Trooper" (Int, Int) -> String -> GameMonad () addCreature (Int 5, Int 4) String "Bone Dragon" String -> GameMonad () -> GameMonad () forall a. String -> GameMonad a -> GameMonad a step String "Play Ochran Assassin, haste with Torch Courier" (GameMonad () -> GameMonad ()) -> GameMonad () -> GameMonad () forall a b. (a -> b) -> a -> b $ do String -> String -> GameMonad () tapForMana String "G" String "Woodland Cemetery 1" String -> String -> GameMonad () tapForMana String "B" String "Woodland Cemetery 2" String -> String -> GameMonad () tapForMana String "R" String "Dragonskull Summit 1" String -> String -> GameMonad () cast String "1BG" String "Ochran Assassin" String -> GameMonad () resolve String "Ochran Assassin" String -> String -> GameMonad () activate String "" String "Torch Courier" String -> GameMonad () sacrifice String "Torch Courier" String -> String -> GameMonad () gainAttribute String "haste" String "Ochran Assassin" String -> GameMonad () -> GameMonad () forall a. String -> GameMonad a -> GameMonad a step String "Sac Whisper to get Torch Courier back" (GameMonad () -> GameMonad ()) -> GameMonad () -> GameMonad () forall a b. (a -> b) -> a -> b $ do String -> GameMonad () tap String "Whisper, Blood Liturgist" String -> GameMonad () sacrifice String "Whisper Agent" String -> GameMonad () sacrifice String "Whisper, Blood Liturgist" Location -> String -> GameMonad () moveTo Location Play String "Torch Courier" String -> GameMonad () -> GameMonad () forall a. String -> GameMonad a -> GameMonad a step String "Play Rhizome Lurcher, haste with Torch Courier" (GameMonad () -> GameMonad ()) -> GameMonad () -> GameMonad () forall a b. (a -> b) -> a -> b $ do String -> String -> GameMonad () tapForMana String "G" String "Woodland Cemetery 3" String -> String -> GameMonad () tapForMana String "B" String "Woodland Cemetery 4" String -> String -> GameMonad () tapForMana String "R" String "Dragonskull Summit 2" String -> String -> GameMonad () tapForMana String "R" String "Dragonskull Summit 3" String -> String -> GameMonad () cast String "2BG" String "Rhizome Lurcher" String -> GameMonad () resolve String "Rhizome Lurcher" CardMatcher -> (String -> GameMonad ()) -> GameMonad () forCards (CardLocation -> CardMatcher matchLocation (Player Active, Location Graveyard) CardMatcher -> CardMatcher -> CardMatcher forall a. Semigroup a => a -> a -> a <> String -> CardMatcher matchAttribute String "creature") (GameMonad () -> String -> GameMonad () forall a b. a -> b -> a const (GameMonad () -> String -> GameMonad ()) -> GameMonad () -> String -> GameMonad () forall a b. (a -> b) -> a -> b $ (Int, Int) -> String -> GameMonad () modifyStrength (Int 1, Int 1) String "Rhizome Lurcher") String -> String -> GameMonad () activate String "" String "Torch Courier" String -> GameMonad () sacrifice String "Torch Courier" String -> String -> GameMonad () gainAttribute String "haste" String "Rhizome Lurcher" String -> GameMonad () -> GameMonad () forall a. String -> GameMonad a -> GameMonad a step String "Attack with Lurcher and Assasin, everyone blocks Assasin" (GameMonad () -> GameMonad ()) -> GameMonad () -> GameMonad () forall a b. (a -> b) -> a -> b $ do [String] -> GameMonad () attackWith [String "Rhizome Lurcher", String "Ochran Assassin"] String -> String -> GameMonad () gainAttribute String "blocked" String "Ochran Assassin" [String] -> String -> GameMonad () combatDamage [] String "Rhizome Lurcher" Player -> Int -> GameMonad () validateLife Player Opponent Int 0 formatter :: p -> Formatter formatter p _ = Formatter boardFormatter