module Solutions.GuildsOfRavnica1 where
import Control.Monad (forM_)
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
5
CardLocation -> GameMonad () -> GameMonad ()
withLocation (Player
Active, Location
Hand)
(GameMonad () -> GameMonad ()) -> GameMonad () -> GameMonad ()
forall a b. (a -> b) -> a -> b
$ [String] -> GameMonad () -> GameMonad ()
withAttributes [String
flying, String
mentor]
(GameMonad () -> GameMonad ()) -> GameMonad () -> GameMonad ()
forall a b. (a -> b) -> a -> b
$ (Int, Int) -> String -> GameMonad ()
addCreature (Int
2, Int
5) String
"Aurelia, Exemplar of Justice"
CardLocation -> GameMonad () -> GameMonad ()
withLocation (Player
Active, Location
Play) (GameMonad () -> GameMonad ()) -> GameMonad () -> GameMonad ()
forall a b. (a -> b) -> a -> b
$ do
String -> GameMonad () -> GameMonad ()
withAttribute String
mentor (GameMonad () -> GameMonad ()) -> GameMonad () -> GameMonad ()
forall a b. (a -> b) -> a -> b
$ do
(Int, Int) -> String -> GameMonad ()
addCreature (Int
3, Int
1) String
"Blade Instructor"
(Int, Int) -> String -> GameMonad ()
addCreature (Int
1, Int
1) String
"Goblin Banneret"
(Int, Int) -> String -> GameMonad ()
addCreature (Int
4, Int
2) String
"Barging Sergeant"
Int -> String -> GameMonad ()
addPlaneswalker Int
5 String
"Angrath, the Flame-Chained"
Int -> String -> GameMonad ()
addLands Int
4 String
"Sacred Foundry"
Int -> String -> GameMonad ()
addLands Int
4 String
"Dragonskull Summit"
String -> GameMonad () -> GameMonad ()
forall a. String -> GameMonad a -> GameMonad a
step String
"Cast Aurelia" (GameMonad () -> GameMonad ()) -> GameMonad () -> GameMonad ()
forall a b. (a -> b) -> a -> b
$ do
String -> String -> GameMonad ()
tapForMana String
"R" String
"Sacred Foundry 1"
String -> String -> GameMonad ()
tapForMana String
"W" String
"Sacred Foundry 2"
String -> String -> GameMonad ()
tapForMana String
"W" String
"Sacred Foundry 3"
String -> String -> GameMonad ()
tapForMana String
"W" String
"Sacred Foundry 4"
String -> String -> GameMonad ()
cast String
"2RW" String
"Aurelia, Exemplar of Justice"
String -> GameMonad ()
resolve String
"Aurelia, Exemplar of Justice"
String -> GameMonad () -> GameMonad ()
forall a. String -> GameMonad a -> GameMonad a
step String
"Angrath gain control, targeting Aurelia" (GameMonad () -> GameMonad ()) -> GameMonad () -> GameMonad ()
forall a b. (a -> b) -> a -> b
$ do
String -> Int -> String -> GameMonad ()
activatePlaneswalker String
"" (-Int
3) String
"Angrath, the Flame-Chained" GameMonad () -> GameMonad () -> GameMonad ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> GameMonad ()
resolveTop
String -> GameMonad ()
target String
"Aurelia, Exemplar of Justice"
String -> String -> GameMonad ()
gainAttribute String
"haste" String
"Aurelia, Exemplar of Justice"
String -> GameMonad () -> GameMonad ()
forall a. String -> GameMonad a -> GameMonad a
step String
"Activate Goblin Banneret" (GameMonad () -> GameMonad ()) -> GameMonad () -> GameMonad ()
forall a b. (a -> b) -> a -> b
$ do
[Int] -> (Int -> GameMonad ()) -> GameMonad ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
t a -> (a -> m b) -> m ()
forM_ [Int
1..Int
2] ((Int -> GameMonad ()) -> GameMonad ())
-> (Int -> GameMonad ()) -> GameMonad ()
forall a b. (a -> b) -> a -> b
$ \Int
n -> String -> String -> GameMonad ()
tapForMana String
"R" (Int -> String -> String
numbered Int
n String
"Dragonskull Summit")
String -> String -> GameMonad ()
activate String
"R1" String
"Goblin Banneret"
(Int, Int) -> String -> GameMonad ()
modifyStrength (Int
2, Int
0) String
"Goblin Banneret"
String -> GameMonad () -> GameMonad ()
forall a. String -> GameMonad a -> GameMonad a
step String
"Begin combat, put Aurelia's trigger on Banneret" (GameMonad () -> GameMonad ()) -> GameMonad () -> GameMonad ()
forall a b. (a -> b) -> a -> b
$ do
String -> GameMonad ()
trigger String
"Aurelia, Exemplar of Justice"
(Int, Int) -> String -> GameMonad ()
modifyStrength (Int
2, Int
0) String
"Goblin Banneret"
String -> GameMonad () -> GameMonad ()
forall a. String -> GameMonad a -> GameMonad a
step String
"Attack with everything, stacking Mentor triggers on to Aurelia" (GameMonad () -> GameMonad ()) -> GameMonad () -> GameMonad ()
forall a b. (a -> b) -> a -> b
$ do
[String] -> GameMonad ()
attackWith
[ String
"Aurelia, Exemplar of Justice"
, String
"Blade Instructor"
, String
"Goblin Banneret"
, String
"Barging Sergeant"
]
String -> String -> GameMonad ()
triggerMentor String
"Aurelia, Exemplar of Justice" String
"Goblin Banneret"
String -> String -> GameMonad ()
triggerMentor String
"Aurelia, Exemplar of Justice" String
"Barging Sergeant"
String -> String -> GameMonad ()
triggerMentor String
"Aurelia, Exemplar of Justice" String
"Blade Instructor"
String -> String -> GameMonad ()
resolveMentor String
"Aurelia, Exemplar of Justice" String
"Blade Instructor"
String -> String -> GameMonad ()
resolveMentor String
"Aurelia, Exemplar of Justice" String
"Barging Sergeant"
String -> String -> GameMonad ()
resolveMentor String
"Aurelia, Exemplar of Justice" String
"Goblin Banneret"
[String] -> String -> GameMonad ()
combatDamage [] String
"Aurelia, Exemplar of Justice"
Player -> Int -> GameMonad ()
validateLife Player
Opponent Int
0
formatter :: p -> Formatter
formatter p
_ = Formatter
boardFormatter