represent the cost of a quest with a MultiSet rather than an action
This commit is contained in:
parent
3256684266
commit
dce2ecbab8
|
|
@ -173,7 +173,9 @@ completeQuest = do
|
|||
let choices = map (\(i,q) -> (q ^. questTitle, (i, q))) availQuests
|
||||
(i, quest) <- solicitChoice "Complete one quest:" $ nubOn fst choices
|
||||
activePlayerState . playerIncompleteQuests %= deleteAt i
|
||||
quest ^. questCost
|
||||
tavern <- use $ activePlayerState . playerTavern
|
||||
guard $ ((quest ^. questCost) `MS.isSubsetOf` tavern)
|
||||
activePlayerState . playerTavern %= (`MS.difference` (quest ^. questCost))
|
||||
name <- use activePlayerName
|
||||
broadcast $ name ++ " completed the " ++ (quest ^. questTitle) ++ " quest."
|
||||
quest ^. questReward
|
||||
|
|
@ -191,8 +193,10 @@ chooseAndCompleteQuest bonusAction = do
|
|||
case doQuest of
|
||||
True -> do
|
||||
incompleteQuests <- use (activePlayerState . playerIncompleteQuests)
|
||||
guard . not . or $ map ((== Mandatory) . view questType) incompleteQuests
|
||||
quest ^. questCost
|
||||
guard . and $ map ((/= Mandatory) . view questType) incompleteQuests
|
||||
tavern <- use $ activePlayerState . playerTavern
|
||||
guard $ ((quest ^. questCost) `MS.isSubsetOf` tavern)
|
||||
activePlayerState . playerTavern %= (`MS.difference` (quest ^. questCost))
|
||||
name <- use $ activePlayerName
|
||||
broadcast $ name ++ " completed the " ++ (quest ^. questTitle) ++ " quest."
|
||||
quest ^. questReward
|
||||
|
|
@ -295,10 +299,10 @@ playIntrigue = do
|
|||
return ()
|
||||
|
||||
returnAgent :: GameAction
|
||||
returnAgent = return () -- TODO
|
||||
returnAgent = fail "TODO - not implemented"
|
||||
|
||||
returnAgentFromHarbor :: GameAction
|
||||
returnAgentFromHarbor = return () -- TODO
|
||||
returnAgentFromHarbor = fail "TODO - not implemented"
|
||||
|
||||
assignAgentToBuilding :: Traversal' WaterdeepState BuildingState -> Waterdeep ()
|
||||
assignAgentToBuilding bt = do
|
||||
|
|
@ -322,37 +326,37 @@ assignAgentToHarbor t = do
|
|||
broadcast $ name ++ " assigned an agent to Waterdeep Harbor."
|
||||
playIntrigue
|
||||
|
||||
findAssignableBuildings :: WaterdeepState -> [(String, Waterdeep ())]
|
||||
findAssignableBuildings w = execWriter $ do
|
||||
forM_ (w ^. gameBuildings . to IM.keys) $ \i -> do
|
||||
let t :: Traversal' WaterdeepState BuildingState
|
||||
t = gameBuildings . intAt i . traverse
|
||||
let b = fromJust $ firstOf t w
|
||||
tell [(b ^. building . buildingTitle, assignAgentToBuilding t)]
|
||||
let harbor = getFirst $ flip F.foldMap [1,2,3] $ \i -> First $
|
||||
let t :: Traversal' WaterdeepState [PlayerID]
|
||||
t = gameWaterdeepHarbor . intAt i . traverse
|
||||
agents = fromJust $ firstOf t w
|
||||
in if null agents then Just (assignAgentToHarbor t) else Nothing
|
||||
case harbor of
|
||||
Just f -> tell [("Waterdeep Harbor", f)]
|
||||
Nothing -> return ()
|
||||
|
||||
assignAgent :: GameAction
|
||||
assignAgent = do
|
||||
agents <- use (activePlayerState . playerAgentsInPool)
|
||||
guard (agents > 0)
|
||||
w <- get
|
||||
let buildings = execWriter $ do
|
||||
forM_ (w ^. gameBuildings . to IM.keys) $ \i -> do
|
||||
let t :: Traversal' WaterdeepState BuildingState
|
||||
t = gameBuildings . intAt i . traverse
|
||||
when (anyOf (t . buildingAgents) null w) $ do
|
||||
let title = fromJust $ firstOf (t.building.buildingTitle) w
|
||||
tell [(title, assignAgentToBuilding t)]
|
||||
let harbor = getFirst $ flip F.foldMap [1,2,3] $ \i -> First $
|
||||
let t :: Traversal' WaterdeepState [PlayerID]
|
||||
t = gameWaterdeepHarbor . intAt i . traverse
|
||||
in if (anyOf t null w)
|
||||
then Just (assignAgentToHarbor t)
|
||||
else Nothing
|
||||
case harbor of
|
||||
Just f -> tell [("Waterdeep Harbor", f)]
|
||||
Nothing -> return ()
|
||||
buildings <- findAssignableBuildings <$> get
|
||||
join $ solicitChoice "Assign one agent to:" $ nubOn fst buildings
|
||||
|
||||
assignAgentToBuildersHall :: GameAction
|
||||
assignAgentToBuildersHall = return () -- TODO
|
||||
assignAgentToBuildersHall = fail "TODO - not implemented"
|
||||
|
||||
assignAgentToOpponentsSpace :: GameAction
|
||||
assignAgentToOpponentsSpace = return () -- TODO
|
||||
assignAgentToOpponentsSpace = fail "TODO - not implemented"
|
||||
|
||||
useOpponentsSpace :: GameAction
|
||||
useOpponentsSpace = return () -- TODO
|
||||
useOpponentsSpace = fail "TODO - not implemented"
|
||||
|
||||
gainLieutenant :: GameAction
|
||||
gainLieutenant = do
|
||||
|
|
|
|||
|
|
@ -26,9 +26,7 @@ defaultIntrigueDeck = concat $ map (uncurry replicate) $
|
|||
Quest { _questType = Mandatory
|
||||
, _questTitle = "Repel Drow Invaders"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 1 [Cleric]
|
||||
returnResources 2 [Rogue]
|
||||
, _questCost = MS.fromList [Cleric, Rogue, Rogue]
|
||||
, _questReward = scorePoints 2
|
||||
, _questPlotActions = []
|
||||
})
|
||||
|
|
@ -36,9 +34,7 @@ defaultIntrigueDeck = concat $ map (uncurry replicate) $
|
|||
Quest { _questType = Mandatory
|
||||
, _questTitle = "Fend Off Bandits"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 2 [Fighter]
|
||||
returnResources 2 [Wizard]
|
||||
, _questCost = MS.fromList [Fighter, Fighter, Wizard]
|
||||
, _questReward = scorePoints 2
|
||||
, _questPlotActions = []
|
||||
})
|
||||
|
|
@ -46,10 +42,7 @@ defaultIntrigueDeck = concat $ map (uncurry replicate) $
|
|||
Quest { _questType = Mandatory
|
||||
, _questTitle = "Foil the Zhentarim"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 1 [Fighter]
|
||||
returnResources 1 [Rogue]
|
||||
returnResources 1 [Wizard]
|
||||
, _questCost = MS.fromList [Fighter, Rogue, Wizard]
|
||||
, _questReward = scorePoints 2
|
||||
, _questPlotActions = []
|
||||
})
|
||||
|
|
@ -57,10 +50,7 @@ defaultIntrigueDeck = concat $ map (uncurry replicate) $
|
|||
Quest { _questType = Mandatory
|
||||
, _questTitle = "Stamp Out Cultists"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 1 [Cleric]
|
||||
returnResources 1 [Fighter]
|
||||
returnResources 1 [Rogue]
|
||||
, _questCost = MS.fromList [Cleric, Fighter, Rogue]
|
||||
, _questReward = scorePoints 2
|
||||
, _questPlotActions = []
|
||||
})
|
||||
|
|
@ -68,10 +58,7 @@ defaultIntrigueDeck = concat $ map (uncurry replicate) $
|
|||
Quest { _questType = Mandatory
|
||||
, _questTitle = "Placate Angry Merchants"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 1 [Cleric]
|
||||
returnResources 1 [Fighter]
|
||||
returnResources 1 [Wizard]
|
||||
, _questCost = MS.fromList [Cleric, Fighter, Wizard]
|
||||
, _questReward = scorePoints 4
|
||||
, _questPlotActions = []
|
||||
})
|
||||
|
|
@ -79,9 +66,7 @@ defaultIntrigueDeck = concat $ map (uncurry replicate) $
|
|||
Quest { _questType = Mandatory
|
||||
, _questTitle = "Quell Riots"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 2 [Cleric]
|
||||
returnResources 1 [Fighter]
|
||||
, _questCost = MS.fromList [Cleric, Cleric, Fighter]
|
||||
, _questReward = scorePoints 4
|
||||
, _questPlotActions = []
|
||||
})
|
||||
|
|
|
|||
|
|
@ -24,10 +24,7 @@ defaultQuestDeck =
|
|||
[ Quest { _questType = Piety
|
||||
, _questTitle = "Recruit Paladins for Tyr"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 2 [Cleric]
|
||||
returnResources 4 [Fighter]
|
||||
returnResources 4 [Gold]
|
||||
, _questCost = MS.fromOccurList [(Cleric, 2), (Fighter, 4), (Gold, 4)]
|
||||
, _questReward = do
|
||||
scorePoints 10
|
||||
takeResources 3 [Cleric]
|
||||
|
|
@ -36,11 +33,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Piety
|
||||
, _questTitle = "Defend the Tower of Luck"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 2 [Cleric]
|
||||
returnResources 1 [Fighter]
|
||||
returnResources 1 [Rogue]
|
||||
returnResources 1 [Wizard]
|
||||
, _questCost = MS.fromOccurList [(Cleric, 2), (Fighter, 1), (Rogue, 1), (Wizard, 1)]
|
||||
, _questReward = do
|
||||
takeResources 1 [Cleric,Fighter,Rogue,Wizard]
|
||||
, _questPlotActions =
|
||||
|
|
@ -49,10 +42,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Piety
|
||||
, _questTitle = "Protect the House of Wonder"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 2 [Cleric]
|
||||
returnResources 1 [Fighter]
|
||||
returnResources 2 [Gold]
|
||||
, _questCost = MS.fromOccurList [(Cleric, 2), (Fighter, 1), (Gold, 2)]
|
||||
, _questReward = do
|
||||
scorePoints 8
|
||||
, _questPlotActions =
|
||||
|
|
@ -61,9 +51,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Piety
|
||||
, _questTitle = "Produce a Miracle for the Masses"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 2 [Cleric]
|
||||
returnResources 4 [Gold]
|
||||
, _questCost = MS.fromOccurList [(Cleric, 2), (Gold, 4)]
|
||||
, _questReward = do
|
||||
scorePoints 5
|
||||
, _questPlotActions =
|
||||
|
|
@ -75,9 +63,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Piety
|
||||
, _questTitle = "Convert a Noble to Lathander"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 2 [Cleric]
|
||||
returnResources 1 [Fighter]
|
||||
, _questCost = MS.fromOccurList [(Cleric, 2), (Fighter, 1)]
|
||||
, _questReward = do
|
||||
scorePoints 8
|
||||
chooseQuest
|
||||
|
|
@ -86,10 +72,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Piety
|
||||
, _questTitle = "Heal Fallen Gray Hand Soldiers"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 2 [Cleric]
|
||||
returnResources 1 [Wizard]
|
||||
returnResources 4 [Gold]
|
||||
, _questCost = MS.fromOccurList [(Cleric, 2), (Wizard, 1), (Gold, 4)]
|
||||
, _questReward = do
|
||||
scorePoints 6
|
||||
takeResources 6 [Fighter]
|
||||
|
|
@ -98,9 +81,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Piety
|
||||
, _questTitle = "Create a Shrine to Oghma"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 5 [Cleric]
|
||||
returnResources 2 [Gold]
|
||||
, _questCost = MS.fromOccurList [(Cleric, 5), (Gold, 2)]
|
||||
, _questReward = do
|
||||
scorePoints 25
|
||||
, _questPlotActions = []
|
||||
|
|
@ -108,10 +89,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Piety
|
||||
, _questTitle = "Seal Gate to Cyric's Realm"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 2 [Cleric]
|
||||
returnResources 3 [Rogue]
|
||||
returnResources 4 [Gold]
|
||||
, _questCost = MS.fromOccurList [(Cleric, 2), (Rogue, 3), (Gold, 4)]
|
||||
, _questReward = do
|
||||
scorePoints 20
|
||||
, _questPlotActions = []
|
||||
|
|
@ -119,10 +97,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Piety
|
||||
, _questTitle = "Perform the Penance of Duty"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 2 [Cleric]
|
||||
returnResources 2 [Fighter]
|
||||
returnResources 4 [Gold]
|
||||
, _questCost = MS.fromOccurList [(Cleric, 2), (Fighter, 2), (Gold, 4)]
|
||||
, _questReward = do
|
||||
scorePoints 12
|
||||
takeResources 1 [Cleric]
|
||||
|
|
@ -132,9 +107,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Piety
|
||||
, _questTitle = "Form an Alliance with the Rashemi"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 2 [Cleric]
|
||||
returnResources 1 [Wizard]
|
||||
, _questCost = MS.fromOccurList [(Cleric, 2), (Wizard, 1)]
|
||||
, _questReward = do
|
||||
scorePoints 10
|
||||
chooseQuest
|
||||
|
|
@ -143,10 +116,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Piety
|
||||
, _questTitle = "Eliminate Vampire Coven"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 2 [Cleric]
|
||||
returnResources 2 [Fighter]
|
||||
returnResources 1 [Rogue]
|
||||
, _questCost = MS.fromOccurList [(Cleric, 2), (Fighter, 2), (Rogue, 1)]
|
||||
, _questReward = do
|
||||
scorePoints 11
|
||||
takeResources 4 [Gold]
|
||||
|
|
@ -155,10 +125,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Piety
|
||||
, _questTitle = "Discover Hidden Temple of Lolth"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 2 [Cleric]
|
||||
returnResources 1 [Fighter]
|
||||
returnResources 1 [Rogue]
|
||||
, _questCost = MS.fromOccurList [(Cleric, 2), (Fighter, 1), (Rogue, 1)]
|
||||
, _questReward = do
|
||||
scorePoints 10
|
||||
chooseQuest
|
||||
|
|
@ -167,11 +134,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Warfare
|
||||
, _questTitle = "Deliver Weapons to Selûne's Temple"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 4 [Fighter]
|
||||
returnResources 1 [Rogue]
|
||||
returnResources 1 [Wizard]
|
||||
returnResources 2 [Gold]
|
||||
, _questCost = MS.fromOccurList [(Fighter, 4), (Rogue, 1), (Wizard, 1), (Gold, 2)]
|
||||
, _questReward = do
|
||||
scorePoints 9
|
||||
takeResources 2 [Cleric]
|
||||
|
|
@ -180,9 +143,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Warfare
|
||||
, _questTitle = "Raid Orc Stronghold"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 4 [Fighter]
|
||||
returnResources 2 [Rogue]
|
||||
, _questCost = MS.fromOccurList [(Fighter, 4), (Rogue, 2)]
|
||||
, _questReward = do
|
||||
scorePoints 8
|
||||
takeResources 4 [Gold]
|
||||
|
|
@ -191,9 +152,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Warfare
|
||||
, _questTitle = "Bolster City Guard"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 9 [Fighter]
|
||||
returnResources 2 [Rogue]
|
||||
, _questCost = MS.fromOccurList [(Fighter, 9), (Rogue, 2)]
|
||||
, _questReward = do
|
||||
scorePoints 25
|
||||
, _questPlotActions = []
|
||||
|
|
@ -201,11 +160,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Warfare
|
||||
, _questTitle = "Recruit Lieutenant"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 1 [Cleric]
|
||||
returnResources 5 [Fighter]
|
||||
returnResources 1 [Rogue]
|
||||
returnResources 1 [Wizard]
|
||||
, _questCost = MS.fromOccurList [(Cleric, 1), (Fighter, 5), (Rogue, 1), (Wizard, 1)]
|
||||
, _questReward = do
|
||||
noAction
|
||||
, _questPlotActions =
|
||||
|
|
@ -214,9 +169,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Warfare
|
||||
, _questTitle = "Train Bladesingers"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 3 [Fighter]
|
||||
returnResources 1 [Wizard]
|
||||
, _questCost = MS.fromOccurList [(Fighter, 3), (Wizard, 1)]
|
||||
, _questReward = do
|
||||
scorePoints 4
|
||||
takeResources 1 [Fighter]
|
||||
|
|
@ -226,10 +179,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Warfare
|
||||
, _questTitle = "Repel Seawraiths"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 1 [Cleric]
|
||||
returnResources 4 [Fighter]
|
||||
returnResources 1 [Wizard]
|
||||
, _questCost = MS.fromOccurList [(Cleric, 1), (Fighter, 4), (Wizard, 1)]
|
||||
, _questReward = do
|
||||
scorePoints 15
|
||||
takeResources 2 [Gold]
|
||||
|
|
@ -238,9 +188,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Warfare
|
||||
, _questTitle = "Bolster Griffon Cavalry"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 4 [Fighter]
|
||||
returnResources 4 [Gold]
|
||||
, _questCost = MS.fromOccurList [(Fighter, 4), (Gold, 4)]
|
||||
, _questReward = do
|
||||
scorePoints 6
|
||||
, _questPlotActions =
|
||||
|
|
@ -250,10 +198,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Warfare
|
||||
, _questTitle = "Deliver an Ultimatum"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 4 [Fighter]
|
||||
returnResources 1 [Rogue]
|
||||
returnResources 1 [Wizard]
|
||||
, _questCost = MS.fromOccurList [(Fighter, 4), (Rogue, 1), (Wizard, 1)]
|
||||
, _questReward = do
|
||||
scorePoints 11
|
||||
takeResources 4 [Gold]
|
||||
|
|
@ -262,10 +207,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Warfare
|
||||
, _questTitle = "Ambush Artor Morlin"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 1 [Cleric]
|
||||
returnResources 3 [Fighter]
|
||||
returnResources 1 [Rogue]
|
||||
, _questCost = MS.fromOccurList [(Cleric, 1), (Fighter, 3), (Rogue, 1)]
|
||||
, _questReward = do
|
||||
scorePoints 8
|
||||
takeResources 4 [Gold]
|
||||
|
|
@ -274,9 +216,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Warfare
|
||||
, _questTitle = "Quell Mercenary Uprising"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 1 [Cleric]
|
||||
returnResources 4 [Fighter]
|
||||
, _questCost = MS.fromOccurList [(Cleric, 1), (Fighter, 4)]
|
||||
, _questReward = do
|
||||
scorePoints 8
|
||||
takeResources 4 [Gold]
|
||||
|
|
@ -286,11 +226,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Warfare
|
||||
, _questTitle = "Confront the Xanathar"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 1 [Cleric]
|
||||
returnResources 4 [Fighter]
|
||||
returnResources 2 [Rogue]
|
||||
returnResources 1 [Wizard]
|
||||
, _questCost = MS.fromOccurList [(Cleric, 1), (Fighter, 4), (Rogue, 2), (Wizard, 1)]
|
||||
, _questReward = do
|
||||
scorePoints 20
|
||||
takeResources 2 [Gold]
|
||||
|
|
@ -299,11 +235,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Warfare
|
||||
, _questTitle = "Defeat Uprising from Undermountain"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 1 [Cleric]
|
||||
returnResources 3 [Fighter]
|
||||
returnResources 1 [Rogue]
|
||||
returnResources 2 [Gold]
|
||||
, _questCost = MS.fromOccurList [(Cleric, 1), (Fighter, 3), (Rogue, 1), (Gold, 2)]
|
||||
, _questReward = do
|
||||
scorePoints 11
|
||||
takeResources 2 [Fighter]
|
||||
|
|
@ -312,10 +244,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Skullduggery
|
||||
, _questTitle = "Place a Sleeper Agent in Skullport"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 1 [Fighter]
|
||||
returnResources 4 [Rogue]
|
||||
returnResources 1 [Wizard]
|
||||
, _questCost = MS.fromOccurList [(Fighter, 1), (Rogue, 4), (Wizard, 1)]
|
||||
, _questReward = do
|
||||
noAction
|
||||
, _questPlotActions =
|
||||
|
|
@ -324,10 +253,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Skullduggery
|
||||
, _questTitle = "Establish Shadow Thieves' Guild"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 1 [Fighter]
|
||||
returnResources 8 [Rogue]
|
||||
returnResources 1 [Wizard]
|
||||
, _questCost = MS.fromOccurList [(Fighter, 1), (Rogue, 8), (Wizard, 1)]
|
||||
, _questReward = do
|
||||
scorePoints 25
|
||||
, _questPlotActions = []
|
||||
|
|
@ -335,10 +261,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Skullduggery
|
||||
, _questTitle = "Build a Reputation in Skullport"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 1 [Fighter]
|
||||
returnResources 3 [Rogue]
|
||||
returnResources 4 [Gold]
|
||||
, _questCost = MS.fromOccurList [(Fighter, 1), (Rogue, 3), (Gold, 4)]
|
||||
, _questReward = do
|
||||
scorePoints 10
|
||||
drawIntrigue
|
||||
|
|
@ -347,10 +270,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Skullduggery
|
||||
, _questTitle = "Fence Goods for Duke of Darkness"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 1 [Fighter]
|
||||
returnResources 3 [Rogue]
|
||||
returnResources 4 [Gold]
|
||||
, _questCost = MS.fromOccurList [(Fighter, 1), (Rogue, 3), (Gold, 4)]
|
||||
, _questReward = do
|
||||
scorePoints 6
|
||||
, _questPlotActions =
|
||||
|
|
@ -359,11 +279,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Skullduggery
|
||||
, _questTitle = "Raid on Undermountain"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 1 [Cleric]
|
||||
returnResources 2 [Fighter]
|
||||
returnResources 4 [Rogue]
|
||||
returnResources 1 [Wizard]
|
||||
, _questCost = MS.fromOccurList [(Cleric, 1), (Fighter, 2), (Rogue, 4), (Wizard, 1)]
|
||||
, _questReward = do
|
||||
scorePoints 20
|
||||
takeResources 2 [Gold]
|
||||
|
|
@ -372,10 +288,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Skullduggery
|
||||
, _questTitle = "Steal from House Adarbrent"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 1 [Fighter]
|
||||
returnResources 4 [Rogue]
|
||||
returnResources 1 [Wizard]
|
||||
, _questCost = MS.fromOccurList [(Fighter, 1), (Rogue, 4), (Wizard, 1)]
|
||||
, _questReward = do
|
||||
scorePoints 10
|
||||
takeResources 6 [Gold]
|
||||
|
|
@ -384,10 +297,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Skullduggery
|
||||
, _questTitle = "Prison Break"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 4 [Rogue]
|
||||
returnResources 2 [Wizard]
|
||||
returnResources 2 [Gold]
|
||||
, _questCost = MS.fromOccurList [(Rogue, 4), (Wizard, 2), (Gold, 2)]
|
||||
, _questReward = do
|
||||
scorePoints 14
|
||||
takeResources 2 [Fighter]
|
||||
|
|
@ -397,11 +307,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Skullduggery
|
||||
, _questTitle = "Take Over Rival Organization"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 1 [Fighter]
|
||||
returnResources 2 [Rogue]
|
||||
returnResources 1 [Wizard]
|
||||
returnResources 6 [Gold]
|
||||
, _questCost = MS.fromOccurList [(Fighter, 1), (Rogue, 2), (Wizard, 1), (Gold, 6)]
|
||||
, _questReward = do
|
||||
scorePoints 10
|
||||
takeResources 4 [Rogue]
|
||||
|
|
@ -411,9 +317,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Skullduggery
|
||||
, _questTitle = "Procure Stolen Goods"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 3 [Rogue]
|
||||
returnResources 6 [Gold]
|
||||
, _questCost = MS.fromOccurList [(Rogue, 3), (Gold, 6)]
|
||||
, _questReward = do
|
||||
scorePoints 8
|
||||
drawIntrigue
|
||||
|
|
@ -423,10 +327,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Skullduggery
|
||||
, _questTitle = "Establish Harpers Safe House"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 2 [Fighter]
|
||||
returnResources 3 [Rogue]
|
||||
returnResources 2 [Gold]
|
||||
, _questCost = MS.fromOccurList [(Fighter, 2), (Rogue, 3), (Gold, 2)]
|
||||
, _questReward = do
|
||||
scorePoints 8
|
||||
forEachControlledBuilding $
|
||||
|
|
@ -436,9 +337,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Skullduggery
|
||||
, _questTitle = "Expose Cult Corruption"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 1 [Cleric]
|
||||
returnResources 4 [Rogue]
|
||||
, _questCost = MS.fromOccurList [(Cleric, 1), (Rogue, 4)]
|
||||
, _questReward = do
|
||||
scorePoints 4
|
||||
takeResources 2 [Cleric]
|
||||
|
|
@ -447,9 +346,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Skullduggery
|
||||
, _questTitle = "Install a Spy in Castle Waterdeep"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 4 [Rogue]
|
||||
returnResources 4 [Gold]
|
||||
, _questCost = MS.fromOccurList [(Rogue, 4), (Gold, 4)]
|
||||
, _questReward = do
|
||||
scorePoints 8
|
||||
, _questPlotActions =
|
||||
|
|
@ -458,12 +355,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Arcana
|
||||
, _questTitle = "Expose Red Wizards' Spies"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 1 [Cleric]
|
||||
returnResources 1 [Fighter]
|
||||
returnResources 2 [Rogue]
|
||||
returnResources 2 [Wizard]
|
||||
returnResources 2 [Gold]
|
||||
, _questCost = MS.fromOccurList [(Cleric, 1), (Fighter, 1), (Rogue, 2), (Wizard, 2), (Gold, 2)]
|
||||
, _questReward = do
|
||||
scorePoints 20
|
||||
drawIntrigue
|
||||
|
|
@ -472,10 +364,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Arcana
|
||||
, _questTitle = "Host Festival for Sune"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 2 [Fighter]
|
||||
returnResources 2 [Wizard]
|
||||
returnResources 4 [Gold]
|
||||
, _questCost = MS.fromOccurList [(Fighter, 2), (Wizard, 2), (Gold, 4)]
|
||||
, _questReward = do
|
||||
scorePoints 9
|
||||
takeResources 2 [Cleric]
|
||||
|
|
@ -484,10 +373,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Arcana
|
||||
, _questTitle = "Steal Spellbook from Silverhand"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 1 [Fighter]
|
||||
returnResources 2 [Rogue]
|
||||
returnResources 2 [Wizard]
|
||||
, _questCost = MS.fromOccurList [(Fighter, 1), (Rogue, 2), (Wizard, 2)]
|
||||
, _questReward = do
|
||||
scorePoints 7
|
||||
drawIntrigue
|
||||
|
|
@ -498,11 +384,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Arcana
|
||||
, _questTitle = "Recruit for Blackstaff Academy"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 1 [Fighter]
|
||||
returnResources 1 [Rogue]
|
||||
returnResources 2 [Wizard]
|
||||
returnResources 4 [Gold]
|
||||
, _questCost = MS.fromOccurList [(Fighter, 1), (Rogue, 1), (Wizard, 2), (Gold, 4)]
|
||||
, _questReward = do
|
||||
scorePoints 6
|
||||
takeResources 3 [Wizard]
|
||||
|
|
@ -511,10 +393,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Arcana
|
||||
, _questTitle = "Retrieve Ancient Artifacts"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 2 [Fighter]
|
||||
returnResources 1 [Rogue]
|
||||
returnResources 2 [Wizard]
|
||||
, _questCost = MS.fromOccurList [(Fighter, 2), (Rogue, 1), (Wizard, 2)]
|
||||
, _questReward = do
|
||||
scorePoints 11
|
||||
takeResources 4 [Gold]
|
||||
|
|
@ -523,9 +402,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Arcana
|
||||
, _questTitle = "Recover the Magister's Orb"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 3 [Rogue]
|
||||
returnResources 2 [Wizard]
|
||||
, _questCost = MS.fromOccurList [(Rogue, 3), (Wizard, 2)]
|
||||
, _questReward = do
|
||||
scorePoints 6
|
||||
enableAssignOnceToOpponentsSpace
|
||||
|
|
@ -535,9 +412,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Arcana
|
||||
, _questTitle = "Study the Illusk Arch"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 1 [Cleric]
|
||||
returnResources 2 [Wizard]
|
||||
, _questCost = MS.fromOccurList [(Cleric, 1), (Wizard, 2)]
|
||||
, _questReward = do
|
||||
scorePoints 8
|
||||
, _questPlotActions =
|
||||
|
|
@ -546,10 +421,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Arcana
|
||||
, _questTitle = "Explore Ahghairon's Tower"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 1 [Fighter]
|
||||
returnResources 2 [Wizard]
|
||||
returnResources 2 [Gold]
|
||||
, _questCost = MS.fromOccurList [(Fighter, 1), (Wizard, 2), (Gold, 2)]
|
||||
, _questReward = do
|
||||
scorePoints 6
|
||||
, _questPlotActions =
|
||||
|
|
@ -558,9 +430,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Arcana
|
||||
, _questTitle = "Infiltrate Halaster's Circle"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 5 [Wizard]
|
||||
returnResources 2 [Gold]
|
||||
, _questCost = MS.fromOccurList [(Wizard, 5), (Gold, 2)]
|
||||
, _questReward = do
|
||||
scorePoints 25
|
||||
, _questPlotActions = []
|
||||
|
|
@ -568,9 +438,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Arcana
|
||||
, _questTitle = "Domesticate Owlbears"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 1 [Cleric]
|
||||
returnResources 2 [Wizard]
|
||||
, _questCost = MS.fromOccurList [(Cleric, 1), (Wizard, 2)]
|
||||
, _questReward = do
|
||||
scorePoints 8
|
||||
takeResources 1 [Fighter]
|
||||
|
|
@ -580,10 +448,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Arcana
|
||||
, _questTitle = "Investigate Aberrant Infestation"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 1 [Cleric]
|
||||
returnResources 1 [Fighter]
|
||||
returnResources 2 [Wizard]
|
||||
, _questCost = MS.fromOccurList [(Cleric, 1), (Fighter, 1), (Wizard, 2)]
|
||||
, _questReward = do
|
||||
scorePoints 13
|
||||
drawIntrigue
|
||||
|
|
@ -592,9 +457,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Arcana
|
||||
, _questTitle = "Research Chronomancy"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 2 [Wizard]
|
||||
returnResources 4 [Gold]
|
||||
, _questCost = MS.fromOccurList [(Wizard, 2), (Gold, 4)]
|
||||
, _questReward = do
|
||||
scorePoints 4
|
||||
takeResources 1 [Wizard]
|
||||
|
|
@ -604,10 +467,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Commerce
|
||||
, _questTitle = "Infiltrate Builder's Hall"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 2 [Fighter]
|
||||
returnResources 2 [Rogue]
|
||||
returnResources 4 [Gold]
|
||||
, _questCost = MS.fromOccurList [(Fighter, 2), (Rogue, 2), (Gold, 4)]
|
||||
, _questReward = do
|
||||
scorePoints 6
|
||||
, _questPlotActions =
|
||||
|
|
@ -616,10 +476,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Commerce
|
||||
, _questTitle = "Loot the Crypt of Chauntea"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 1 [Cleric]
|
||||
returnResources 3 [Rogue]
|
||||
returnResources 2 [Gold]
|
||||
, _questCost = MS.fromOccurList [(Cleric, 1), (Rogue, 3), (Gold, 2)]
|
||||
, _questReward = do
|
||||
scorePoints 7
|
||||
drawIntrigue
|
||||
|
|
@ -629,12 +486,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Commerce
|
||||
, _questTitle = "Impersonate Adarbrent Noble"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 1 [Cleric]
|
||||
returnResources 2 [Fighter]
|
||||
returnResources 2 [Rogue]
|
||||
returnResources 1 [Wizard]
|
||||
returnResources 4 [Gold]
|
||||
, _questCost = MS.fromOccurList [(Cleric, 1), (Fighter, 2), (Rogue, 2), (Wizard, 1), (Gold, 4)]
|
||||
, _questReward = do
|
||||
scorePoints 18
|
||||
drawIntrigue
|
||||
|
|
@ -644,11 +496,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Commerce
|
||||
, _questTitle = "Safeguard Eltorchul Mage"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 1 [Fighter]
|
||||
returnResources 1 [Rogue]
|
||||
returnResources 1 [Wizard]
|
||||
returnResources 4 [Gold]
|
||||
, _questCost = MS.fromOccurList [(Fighter, 1), (Rogue, 1), (Wizard, 1), (Gold, 4)]
|
||||
, _questReward = do
|
||||
scorePoints 4
|
||||
takeResources 2 [Wizard]
|
||||
|
|
@ -657,11 +505,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Commerce
|
||||
, _questTitle = "Thin the City Watch"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 1 [Cleric]
|
||||
returnResources 1 [Fighter]
|
||||
returnResources 1 [Rogue]
|
||||
returnResources 4 [Gold]
|
||||
, _questCost = MS.fromOccurList [(Cleric, 1), (Fighter, 1), (Rogue, 1), (Gold, 4)]
|
||||
, _questReward = do
|
||||
scorePoints 9
|
||||
takeResources 4 [Rogue]
|
||||
|
|
@ -670,10 +514,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Commerce
|
||||
, _questTitle = "Bribe the Shipwrights"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 4 [Rogue]
|
||||
returnResources 1 [Wizard]
|
||||
returnResources 4 [Gold]
|
||||
, _questCost = MS.fromOccurList [(Rogue, 4), (Wizard, 1), (Gold, 4)]
|
||||
, _questReward = do
|
||||
scorePoints 10
|
||||
, _questPlotActions =
|
||||
|
|
@ -682,10 +523,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Commerce
|
||||
, _questTitle = "Lure Artisans of Mirabar"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 1 [Cleric]
|
||||
returnResources 1 [Fighter]
|
||||
returnResources 1 [Rogue]
|
||||
, _questCost = MS.fromOccurList [(Cleric, 1), (Fighter, 1), (Rogue, 1)]
|
||||
, _questReward = do
|
||||
scorePoints 4
|
||||
chooseFreeBuilding
|
||||
|
|
@ -694,9 +532,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Commerce
|
||||
, _questTitle = "Placate the Walking Statue"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 2 [Cleric]
|
||||
returnResources 2 [Rogue]
|
||||
, _questCost = MS.fromOccurList [(Cleric, 2), (Rogue, 2)]
|
||||
, _questReward = do
|
||||
scorePoints 10
|
||||
drawFreeBuilding
|
||||
|
|
@ -705,10 +541,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Commerce
|
||||
, _questTitle = "Establish New Merchant Guild"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 1 [Cleric]
|
||||
returnResources 2 [Fighter]
|
||||
returnResources 4 [Gold]
|
||||
, _questCost = MS.fromOccurList [(Cleric, 1), (Fighter, 2), (Gold, 4)]
|
||||
, _questReward = do
|
||||
scorePoints 8
|
||||
, _questPlotActions =
|
||||
|
|
@ -717,11 +550,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Commerce
|
||||
, _questTitle = "Send Aid to the Harpers"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 1 [Cleric]
|
||||
returnResources 1 [Fighter]
|
||||
returnResources 1 [Rogue]
|
||||
returnResources 4 [Gold]
|
||||
, _questCost = MS.fromOccurList [(Cleric, 1), (Fighter, 1), (Rogue, 1), (Gold, 4)]
|
||||
, _questReward = do
|
||||
scorePoints 15
|
||||
forOneOpponent $ takeResources 4 [Gold]
|
||||
|
|
@ -730,11 +559,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Commerce
|
||||
, _questTitle = "Ally with House Thann"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 1 [Cleric]
|
||||
returnResources 3 [Rogue]
|
||||
returnResources 1 [Wizard]
|
||||
returnResources 8 [Gold]
|
||||
, _questCost = MS.fromOccurList [(Cleric, 1), (Rogue, 3), (Wizard, 1), (Gold, 8)]
|
||||
, _questReward = do
|
||||
scorePoints 25
|
||||
, _questPlotActions = []
|
||||
|
|
@ -742,10 +567,7 @@ defaultQuestDeck =
|
|||
, Quest { _questType = Commerce
|
||||
, _questTitle = "Spy on the House of Light"
|
||||
, _questQuote = ""
|
||||
, _questCost = do
|
||||
returnResources 3 [Fighter]
|
||||
returnResources 2 [Rogue]
|
||||
returnResources 2 [Gold]
|
||||
, _questCost = MS.fromOccurList [(Fighter, 3), (Rogue, 2), (Gold, 2)]
|
||||
, _questReward = do
|
||||
scorePoints 6
|
||||
takeResources 6 [Gold]
|
||||
|
|
|
|||
|
|
@ -158,7 +158,7 @@ data Quest =
|
|||
{ _questType :: QuestType
|
||||
, _questTitle :: String
|
||||
, _questQuote :: String
|
||||
, _questCost :: GameAction
|
||||
, _questCost :: MS.MultiSet Resource
|
||||
, _questReward :: GameAction
|
||||
, _questPlotActions :: [(PlotCondition, GameAction)]
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue