werewolf 0.3.1.3 → 0.3.2.0
raw patch · 5 files changed
+47/−26 lines, 5 files
Files
- CHANGELOG.md +11/−0
- app/Werewolf/Commands/Help.hs +16/−17
- app/Werewolf/Options.hs +6/−1
- src/Game/Werewolf/Response.hs +13/−7
- werewolf.cabal +1/−1
CHANGELOG.md view
@@ -2,6 +2,17 @@ #### Upcoming +#### v0.3.2.0++*Minor*++* Added a "Whom would you like to lynch?" message during the Villagers' turn. ([#25](https://github.com/hjwylde/werewolf/issues/25))+* Allowed lowercase roles for `--extra-roles` in the `start` command. ([#33](https://github.com/hjwylde/werewolf/issues/33))++*Revisions*++* Shrunk some of the help text to make it more readable. ([#25](https://github.com/hjwylde/werewolf/issues/25))+ #### v0.3.1.3 *Revisions*
app/Werewolf/Commands/Help.hs view
@@ -46,7 +46,7 @@ messages = map (privateMessage [callerName]) descriptionMessages } handle callerName (Options (Just Roles)) = exitWith success {- messages = map (\role -> privateMessage [callerName] $ T.unlines [+ messages = map (\role -> privateMessage [callerName] $ T.intercalate "\n" [ T.snoc (role ^. Role.name) ':', role ^. description, role ^. advice@@ -61,24 +61,19 @@ commandsMessages :: [Text] commandsMessages = map (T.intercalate "\n") [[- "End: end the current game",- "Usage: end",+ "end", "- Ends the current game." ], [- "Quit: quit the current game",- "Usage: quit",+ "quit", "- Quit the current game." ], [- "See: see a player's allegiance",- "Usage: see PLAYER",+ "see PLAYER", "- See a player's allegiance. A Seer may determine a player's allegiance once per day." ], [- "Start: start a new game",- "Usage: start [--extra-roles ROLE,...] PLAYER ...",+ "start [--extra-roles ROLE,...] PLAYER ...", "- Starts a new game with the given players and extra roles. A game requires at least 7 players." ], [- "Vote: vote against a player",- "Usage: vote PLAYER",+ "vote PLAYER", T.unwords [ "- Vote against a player.", "A townsperson may vote at daytime to lynch someone",@@ -138,11 +133,15 @@ helpMessages :: [Text] helpMessages = map (T.intercalate "\n") [[- "Usage: help COMMAND"+ "help commands",+ "- Print the in-game commands." ], [- "Available commands:",- " commands - print the in-game commands",- " description - print the game description",- " rules - print the game rules",- " roles - print the roles and their description"+ "help description",+ "- Print the game description."+ ], [+ "help roles",+ "- Print the roles and their description."+ ], [+ "help rules",+ "- Print the game rules." ]]
app/Werewolf/Options.hs view
@@ -19,6 +19,7 @@ werewolfPrefs, werewolfInfo, werewolf, ) where +import Data.Char import Data.List.Extra import Data.Text (Text) import qualified Data.Text as T@@ -108,7 +109,7 @@ start :: Parser Command start = fmap Start $ Start.Options- <$> fmap (map T.pack . wordsBy (',' ==)) (strOption $ mconcat [+ <$> fmap (map (T.pack . capitalise) . wordsBy (',' ==)) (strOption $ mconcat [ long "extra-roles", metavar "ROLE,...", value [], help "Specify the extra roles to include"@@ -117,3 +118,7 @@ vote :: Parser Command vote = Vote . Vote.Options . T.pack <$> strArgument (metavar "PLAYER")++capitalise :: String -> String+capitalise [] = []+capitalise (head:tail) = toUpper head : map toLower tail
src/Game/Werewolf/Response.hs view
@@ -147,8 +147,8 @@ newPlayerMessage :: [Player] -> Player -> Message newPlayerMessage players player- | isWerewolf player = privateMessage [player ^. name] $ T.unlines [T.concat ["You're a Werewolf", packMessage], player ^. role . description]- | otherwise = privateMessage [player ^. name] $ T.unlines [T.concat ["You're a ", player ^. role . Role.name, "."], player ^. role . description]+ | isWerewolf player = privateMessage [player ^. name] $ T.intercalate "\n" [T.concat ["You're a Werewolf", packMessage], player ^. role . description]+ | otherwise = privateMessage [player ^. name] $ T.intercalate "\n" [T.concat ["You're a ", player ^. role . Role.name, "."], player ^. role . description] where packMessage | length (filterWerewolves players) <= 1 = "."@@ -156,7 +156,7 @@ turnMessages :: Turn -> [Player] -> [Message] turnMessages Seers players = seersTurnMessages $ filter isSeer players-turnMessages Villagers _ = [villagersTurnMessage]+turnMessages Villagers players = villagersTurnMessage players turnMessages Werewolves players = werewolvesTurnMessages $ filter isWerewolf players turnMessages NoOne _ = [] @@ -171,13 +171,19 @@ playerQuitMessage player = publicMessage $ T.unwords [player ^. name, "the", player ^. role . Role.name, "has quit!"] seersTurnMessages :: [Player] -> [Message]-seersTurnMessages seers = publicMessage "The Seers wake up.":privateMessage (map _name seers) "Who's allegiance would you like to see?":[]+seersTurnMessages seers = [+ publicMessage "The Seers wake up.",+ privateMessage (map _name seers) "Whose allegiance would you like to see?"+ ] playerSeenMessage :: Text -> Player -> Message playerSeenMessage seerName target = privateMessage [seerName] $ T.concat [target ^. name, " is aligned with the ", T.pack . show $ target ^. role . allegiance, "."] -villagersTurnMessage :: Message-villagersTurnMessage = publicMessage "The sun rises. Everybody wakes up and opens their eyes..."+villagersTurnMessage :: [Player] -> [Message]+villagersTurnMessage players = [+ publicMessage "The sun rises. Everybody wakes up and opens their eyes...",+ privateMessage (map _name players) "Whom would you like to lynch?"+ ] playerMadeLynchVoteMessage :: Text -> Text -> Message playerMadeLynchVoteMessage voterName targetName = publicMessage $ T.concat [voterName, " voted to lynch ", targetName, "."]@@ -200,7 +206,7 @@ werewolvesTurnMessages :: [Player] -> [Message] werewolvesTurnMessages werewolves = [ publicMessage "The Werewolves wake up, recognise one another and choose a new victim.",- privateMessage (map _name werewolves) "Who would you like to devour?"+ privateMessage (map _name werewolves) "Whom would you like to devour?" ] playerMadeDevourVoteMessage :: [Text] -> Text -> Text -> Message
werewolf.cabal view
@@ -1,5 +1,5 @@ name: werewolf-version: 0.3.1.3+version: 0.3.2.0 author: Henry J. Wylde maintainer: public@hjwylde.com