represent the cost of a quest with a MultiSet rather than an action

This commit is contained in:
Jesse D. McDonald 2014-05-13 00:02:35 -05:00
parent 3256684266
commit dce2ecbab8
4 changed files with 96 additions and 285 deletions

View File

@ -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

View File

@ -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 = []
})

View File

@ -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]

View File

@ -158,7 +158,7 @@ data Quest =
{ _questType :: QuestType
, _questTitle :: String
, _questQuote :: String
, _questCost :: GameAction
, _questCost :: MS.MultiSet Resource
, _questReward :: GameAction
, _questPlotActions :: [(PlotCondition, GameAction)]
}