werewolf 1.5.0.0 → 1.5.1.0
raw patch · 28 files changed
+178/−79 lines, 28 filesdep ~optparse-applicative
Dependency ranges changed: optparse-applicative
Files
- CHANGELOG.md +10/−0
- README.md +3/−1
- app/Game/Werewolf/Message/Command.hs +28/−21
- app/Game/Werewolf/Message/Engine.hs +71/−47
- app/Werewolf/Options.hs +8/−0
- src/Game/Werewolf/Variant.hs +18/−4
- variant/no-role-knowledge-or-reveal/command/choose/player-shot.txt +1/−0
- variant/no-role-knowledge-or-reveal/command/ping/nocturnal-role-pinged.txt +1/−0
- variant/no-role-knowledge-or-reveal/command/ping/werewolves-pinged.txt +1/−0
- variant/no-role-knowledge-or-reveal/command/quit/caller-quit.txt +1/−0
- variant/no-role-knowledge-or-reveal/command/status/current-nocturnal-turn.txt +1/−0
- variant/no-role-knowledge-or-reveal/command/status/dead-players.txt +1/−0
- variant/no-role-knowledge-or-reveal/description.txt +1/−0
- variant/no-role-knowledge-or-reveal/engine/general/player-booted.txt +1/−0
- variant/no-role-knowledge-or-reveal/engine/general/spiteful-villager-killed.txt +1/−0
- variant/no-role-knowledge-or-reveal/engine/lynching/player-lynched.txt +1/−0
- variant/no-role-knowledge-or-reveal/engine/lynching/saint-lynched.txt +1/−0
- variant/no-role-knowledge-or-reveal/engine/lynching/werewolf-lynched.txt +1/−0
- variant/no-role-knowledge-or-reveal/engine/new-game/roles-in-game.txt +1/−0
- variant/no-role-knowledge-or-reveal/engine/sunrise/player-devoured.txt +1/−0
- variant/no-role-knowledge-or-reveal/engine/sunrise/player-poisoned.txt +1/−0
- variant/no-role-knowledge-or-reveal/engine/sunrise/player-turned-to-stone.txt +1/−0
- variant/no-role-knowledge-or-reveal/name.txt +1/−0
- variant/no-role-knowledge/description.txt +1/−1
- variant/no-role-reveal/description.txt +1/−1
- variant/spiteful-village/description.txt +1/−1
- variant/standard/description.txt +1/−1
- werewolf.cabal +19/−2
CHANGELOG.md view
@@ -7,6 +7,16 @@ ### Upcoming +### v1.5.1.0++*Minor*++* Added the No Role Knowledge Or Reveal variant. ([#226](https://github.com/hjwylde/werewolf/issues/226))++*Revisions*++* Bump optparse-applicative max version constraint. ([#256](https://github.com/hjwylde/werewolf/issues/256))+ ### v1.5.0.0 *Major*
README.md view
@@ -93,7 +93,9 @@ * Standard * No role knowledge (players are not informed of the roles in play at the start of a game)-* No role reveal (player roles are not revealed upon death)+* No role knowledge or reveal (players are not informed of the roles in play at the start of a game,+ nor each others roles upon death)+* No role reveal (players are not informed of each others roles upon death) * Spiteful village (the default Villager role becomes the Spiteful Villager) ### Installing
app/Game/Werewolf/Message/Command.hs view
@@ -63,16 +63,18 @@ import Game.Werewolf.Game import Game.Werewolf.Player import Game.Werewolf.Response-import Game.Werewolf.Role hiding (name)-import Game.Werewolf.Variant hiding (name)-import Game.Werewolf.Variant.NoRoleKnowledge.Command as NoRoleKnowledge-import Game.Werewolf.Variant.NoRoleReveal.Command as NoRoleReveal-import Game.Werewolf.Variant.Standard.Command as Standard+import Game.Werewolf.Role hiding (name)+import Game.Werewolf.Variant hiding (name)+import Game.Werewolf.Variant.NoRoleKnowledge.Command as NoRoleKnowledge+import Game.Werewolf.Variant.NoRoleKnowledgeOrReveal.Command as NoRoleKnowledgeOrReveal+import Game.Werewolf.Variant.NoRoleReveal.Command as NoRoleReveal+import Game.Werewolf.Variant.Standard.Command as Standard playerQuitMessage :: Player -> Game -> Message playerQuitMessage player game- | has (variant . noRoleReveal) game = publicMessage $ NoRoleReveal.callerQuitText player- | otherwise = publicMessage $ Standard.callerQuitText player+ | has (variant . noRoleKnowledgeOrReveal) game = publicMessage $ NoRoleKnowledgeOrReveal.callerQuitText player+ | has (variant . noRoleReveal) game = publicMessage $ NoRoleReveal.callerQuitText player+ | otherwise = publicMessage $ Standard.callerQuitText player playerVotedToBootMessage :: Player -> Player -> Message playerVotedToBootMessage caller = publicMessage . callerVotedBootText caller@@ -82,8 +84,9 @@ playerShotMessage :: Player -> Game -> Message playerShotMessage player game- | has (variant . noRoleReveal) game = publicMessage $ NoRoleReveal.playerShotText player- | otherwise = publicMessage $ Standard.playerShotText player+ | has (variant . noRoleKnowledgeOrReveal) game = publicMessage $ NoRoleKnowledgeOrReveal.playerShotText player+ | has (variant . noRoleReveal) game = publicMessage $ NoRoleReveal.playerShotText player+ | otherwise = publicMessage $ Standard.playerShotText player gameEndedMessage :: Text -> Message gameEndedMessage = publicMessage . gameEndedText@@ -173,9 +176,10 @@ pingNocturnalRoleMessage :: Role -> Game -> Message pingNocturnalRoleMessage role game- | has (variant . noRoleKnowledge) game = publicMessage $ NoRoleKnowledge.nocturnalRolePingedText role- | has (variant . noRoleReveal) game = publicMessage $ NoRoleReveal.nocturnalRolePingedText role- | otherwise = publicMessage $ Standard.nocturnalRolePingedText role+ | has (variant . noRoleKnowledge) game = publicMessage $ NoRoleKnowledge.nocturnalRolePingedText role+ | has (variant . noRoleKnowledgeOrReveal) game = publicMessage $ NoRoleKnowledgeOrReveal.nocturnalRolePingedText role+ | has (variant . noRoleReveal) game = publicMessage $ NoRoleReveal.nocturnalRolePingedText role+ | otherwise = publicMessage $ Standard.nocturnalRolePingedText role pingPlayerMessage :: Text -> Message pingPlayerMessage to = privateMessage to playerPingedText@@ -185,9 +189,10 @@ pingWerewolvesMessage :: Game -> Message pingWerewolvesMessage game- | has (variant . noRoleKnowledge) game = publicMessage NoRoleKnowledge.werewolvesPingedText- | has (variant . noRoleReveal) game = publicMessage NoRoleReveal.werewolvesPingedText- | otherwise = publicMessage Standard.werewolvesPingedText+ | has (variant . noRoleKnowledge) game = publicMessage NoRoleKnowledge.werewolvesPingedText+ | has (variant . noRoleKnowledgeOrReveal) game = publicMessage NoRoleKnowledgeOrReveal.werewolvesPingedText+ | has (variant . noRoleReveal) game = publicMessage NoRoleReveal.werewolvesPingedText+ | otherwise = publicMessage Standard.werewolvesPingedText deadRaisedMessages :: Game -> [Message] deadRaisedMessages game =@@ -207,9 +212,10 @@ currentNocturnalTurnMessage :: Text -> Game -> Message currentNocturnalTurnMessage to game- | has (variant . noRoleKnowledge) game = privateMessage to $ NoRoleKnowledge.currentNocturnalTurnText game- | has (variant . noRoleReveal) game = privateMessage to $ NoRoleReveal.currentNocturnalTurnText game- | otherwise = privateMessage to $ Standard.currentNocturnalTurnText game+ | has (variant . noRoleKnowledge) game = privateMessage to $ NoRoleKnowledge.currentNocturnalTurnText game+ | has (variant . noRoleKnowledgeOrReveal) game = privateMessage to $ NoRoleKnowledgeOrReveal.currentNocturnalTurnText game+ | has (variant . noRoleReveal) game = privateMessage to $ NoRoleReveal.currentNocturnalTurnText game+ | otherwise = privateMessage to $ Standard.currentNocturnalTurnText game gameIsOverMessage :: Text -> Message gameIsOverMessage to = privateMessage to gameOverText@@ -222,9 +228,10 @@ where alivePlayersText' = alivePlayersText game deadPlayersText'- | hasn't (players . traverse . dead) game = T.empty- | has (variant . noRoleReveal) game = NoRoleReveal.deadPlayersText game- | otherwise = Standard.deadPlayersText game+ | hasn't (players . traverse . dead) game = T.empty+ | has (variant . noRoleKnowledgeOrReveal) game = NoRoleKnowledgeOrReveal.deadPlayersText game+ | has (variant . noRoleReveal) game = NoRoleReveal.deadPlayersText game+ | otherwise = Standard.deadPlayersText game playerRescindedVoteMessage :: Text -> Player -> Message playerRescindedVoteMessage to = privateMessage to . callerRescindedVoteText
app/Game/Werewolf/Message/Engine.hs view
@@ -34,16 +34,18 @@ import Game.Werewolf.Game import Game.Werewolf.Player import Game.Werewolf.Response-import Game.Werewolf.Role hiding (name)-import Game.Werewolf.Variant hiding (name)-import Game.Werewolf.Variant.NoRoleKnowledge.Engine as NoRoleKnowledge-import Game.Werewolf.Variant.NoRoleReveal.Engine as NoRoleReveal-import Game.Werewolf.Variant.Standard.Engine as Standard+import Game.Werewolf.Role hiding (name)+import Game.Werewolf.Variant hiding (name)+import Game.Werewolf.Variant.NoRoleKnowledge.Engine as NoRoleKnowledge+import Game.Werewolf.Variant.NoRoleKnowledgeOrReveal.Engine as NoRoleKnowledgeOrReveal+import Game.Werewolf.Variant.NoRoleReveal.Engine as NoRoleReveal+import Game.Werewolf.Variant.Standard.Engine as Standard playerBootedMessage :: Player -> Game -> Message playerBootedMessage player game- | has (variant . noRoleReveal) game = publicMessage $ NoRoleReveal.playerBootedText player- | otherwise = publicMessage $ Standard.playerBootedText player+ | has (variant . noRoleKnowledgeOrReveal) game = publicMessage $ NoRoleKnowledgeOrReveal.playerBootedText player+ | has (variant . noRoleReveal) game = publicMessage $ NoRoleReveal.playerBootedText player+ | otherwise = publicMessage $ Standard.playerBootedText player gameOverMessages :: Game -> [Message] gameOverMessages game@@ -154,8 +156,9 @@ rolesInGameMessage :: Maybe Text -> Game -> Message rolesInGameMessage mTo game- | has (variant . noRoleKnowledge) game = Message mTo $ NoRoleKnowledge.rolesInGameText game- | otherwise = Message mTo $ Standard.rolesInGameText game+ | has (variant . noRoleKnowledge) game = Message mTo $ NoRoleKnowledge.rolesInGameText game+ | has (variant . noRoleKnowledgeOrReveal) game = Message mTo $ NoRoleKnowledgeOrReveal.rolesInGameText game+ | otherwise = Message mTo $ Standard.rolesInGameText game newPlayerMessage :: Player -> Message newPlayerMessage player = privateMessage (player ^. name) $ newPlayerText player@@ -168,8 +171,9 @@ spitefulVillagerKilledMessage :: Text -> Game -> Message spitefulVillagerKilledMessage to game- | has (variant . noRoleReveal) game = privateMessage to $ NoRoleReveal.spitefulVillagerKilledText game- | otherwise = privateMessage to $ Standard.spitefulVillagerKilledText game+ | has (variant . noRoleKnowledgeOrReveal) game = privateMessage to $ NoRoleKnowledgeOrReveal.spitefulVillagerKilledText game+ | has (variant . noRoleReveal) game = privateMessage to $ NoRoleReveal.spitefulVillagerKilledText game+ | otherwise = privateMessage to $ Standard.spitefulVillagerKilledText game trueVillagerMessage :: Game -> Message trueVillagerMessage = publicMessage . trueVillagerText@@ -214,44 +218,52 @@ necromancersTurnMessages :: Text -> Game -> [Message] necromancersTurnMessages to game- | has (variant . noRoleKnowledge) game =+ | has (variant . noRoleKnowledge) game = [ privateMessage to necromancersTurnPrivateText ]- | has (variant . noRoleReveal) game =+ | has (variant . noRoleKnowledgeOrReveal) game = [ privateMessage to necromancersTurnPrivateText ]- | otherwise =+ | has (variant . noRoleReveal) game =+ [ privateMessage to necromancersTurnPrivateText ]+ | otherwise = [ publicMessage necromancersTurnPublicText , privateMessage to necromancersTurnPrivateText ] oraclesTurnMessages :: Text -> Game -> [Message] oraclesTurnMessages to game- | has (variant . noRoleKnowledge) game =+ | has (variant . noRoleKnowledge) game = [ privateMessage to oraclesTurnPrivateText ]- | has (variant . noRoleReveal) game =+ | has (variant . noRoleKnowledgeOrReveal) game = [ privateMessage to oraclesTurnPrivateText ]- | otherwise =+ | has (variant . noRoleReveal) game =+ [ privateMessage to oraclesTurnPrivateText ]+ | otherwise = [ publicMessage oraclesTurnPublicText , privateMessage to oraclesTurnPrivateText ] orphansTurnMessages :: Text -> Game -> [Message] orphansTurnMessages to game- | has (variant . noRoleKnowledge) game =+ | has (variant . noRoleKnowledge) game = [ privateMessage to orphansTurnPrivateText ]- | has (variant . noRoleReveal) game =+ | has (variant . noRoleKnowledgeOrReveal) game = [ privateMessage to orphansTurnPrivateText ]- | otherwise =+ | has (variant . noRoleReveal) game =+ [ privateMessage to orphansTurnPrivateText ]+ | otherwise = [ publicMessage orphansTurnPublicText , privateMessage to orphansTurnPrivateText ] protectorsTurnMessages :: Text -> Game -> [Message] protectorsTurnMessages to game- | has (variant . noRoleKnowledge) game =+ | has (variant . noRoleKnowledge) game = [ privateMessage to protectorsTurnPrivateText ]- | has (variant . noRoleReveal) game =+ | has (variant . noRoleKnowledgeOrReveal) game = [ privateMessage to protectorsTurnPrivateText ]- | otherwise =+ | has (variant . noRoleReveal) game =+ [ privateMessage to protectorsTurnPrivateText ]+ | otherwise = [ publicMessage protectorsTurnPublicText , privateMessage to protectorsTurnPrivateText ]@@ -261,20 +273,23 @@ seersTurnMessages :: Text -> Game -> [Message] seersTurnMessages to game- | has (variant . noRoleKnowledge) game =+ | has (variant . noRoleKnowledge) game = [ privateMessage to seersTurnPrivateText ]- | has (variant . noRoleReveal) game =+ | has (variant . noRoleKnowledgeOrReveal) game = [ privateMessage to seersTurnPrivateText ]- | otherwise =+ | has (variant . noRoleReveal) game =+ [ privateMessage to seersTurnPrivateText ]+ | otherwise = [ publicMessage seersTurnPublicText , privateMessage to seersTurnPrivateText ] villageDrunksTurnMessages :: Game -> [Message] villageDrunksTurnMessages game- | has (variant . noRoleKnowledge) game = []- | has (variant . noRoleReveal) game = []- | otherwise = [publicMessage villageDrunksTurnText]+ | has (variant . noRoleKnowledge) game = []+ | has (variant . noRoleKnowledgeOrReveal) game = []+ | has (variant . noRoleReveal) game = []+ | otherwise = [publicMessage villageDrunksTurnText] sunriseMessage :: Message sunriseMessage = publicMessage sunriseText@@ -295,11 +310,13 @@ werewolvesTurnMessages :: [Text] -> Game -> [Message] werewolvesTurnMessages tos game- | has (variant . noRoleKnowledge) game =+ | has (variant . noRoleKnowledge) game = groupMessages tos werewolvesTurnPrivateText- | has (variant . noRoleReveal) game =+ | has (variant . noRoleKnowledgeOrReveal) game = groupMessages tos werewolvesTurnPrivateText- | otherwise =+ | has (variant . noRoleReveal) game =+ groupMessages tos werewolvesTurnPrivateText+ | otherwise = publicMessage werewolvesTurnPublicText : groupMessages tos werewolvesTurnPrivateText @@ -313,9 +330,10 @@ where to = game ^?! players . witches . name wakeUpMessages- | has (variant . noRoleKnowledge) game = []- | has (variant . noRoleReveal) game = []- | otherwise = [publicMessage witchsTurnText]+ | has (variant . noRoleKnowledge) game = []+ | has (variant . noRoleKnowledgeOrReveal) game = []+ | has (variant . noRoleReveal) game = []+ | otherwise = [publicMessage witchsTurnText] passMessage = privateMessage to passText healMessages | game ^. healUsed = []@@ -356,18 +374,21 @@ werewolfLynchedMessage :: Player -> Game -> Message werewolfLynchedMessage player game- | has (variant . noRoleReveal) game = publicMessage $ NoRoleReveal.playerLynchedText player- | otherwise = publicMessage $ Standard.werewolfLynchedText player+ | has (variant . noRoleKnowledgeOrReveal) game = publicMessage $ NoRoleKnowledgeOrReveal.playerLynchedText player+ | has (variant . noRoleReveal) game = publicMessage $ NoRoleReveal.playerLynchedText player+ | otherwise = publicMessage $ Standard.werewolfLynchedText player playerLynchedMessage :: Player -> Game -> Message playerLynchedMessage player game- | has (variant . noRoleReveal) game = publicMessage $ NoRoleReveal.playerLynchedText player- | otherwise = publicMessage $ Standard.playerLynchedText player+ | has (variant . noRoleKnowledgeOrReveal) game = publicMessage $ NoRoleKnowledgeOrReveal.playerLynchedText player+ | has (variant . noRoleReveal) game = publicMessage $ NoRoleReveal.playerLynchedText player+ | otherwise = publicMessage $ Standard.playerLynchedText player saintLynchedMessage :: [Player] -> Game -> Message saintLynchedMessage voters game- | has (variant . noRoleReveal) game = publicMessage $ NoRoleReveal.saintLynchedText voters- | otherwise = publicMessage $ Standard.saintLynchedText voters+ | has (variant . noRoleKnowledgeOrReveal) game = publicMessage $ NoRoleKnowledgeOrReveal.saintLynchedText voters+ | has (variant . noRoleReveal) game = publicMessage $ NoRoleReveal.saintLynchedText voters+ | otherwise = publicMessage $ Standard.saintLynchedText voters scapegoatLynchedMessage :: Game -> Message scapegoatLynchedMessage = publicMessage . scapegoatLynchedText@@ -380,16 +401,18 @@ playerDevouredMessage :: Player -> Game -> Message playerDevouredMessage player game- | has (variant . noRoleReveal) game = publicMessage $ NoRoleReveal.playerDevouredText player- | otherwise = publicMessage $ Standard.playerDevouredText player+ | has (variant . noRoleKnowledgeOrReveal) game = publicMessage $ NoRoleKnowledgeOrReveal.playerDevouredText player+ | has (variant . noRoleReveal) game = publicMessage $ NoRoleReveal.playerDevouredText player+ | otherwise = publicMessage $ Standard.playerDevouredText player playerDivinedMessage :: Text -> Player -> Message playerDivinedMessage to = privateMessage to . playerDivinedText playerPoisonedMessage :: Player -> Game -> Message playerPoisonedMessage player game- | has (variant . noRoleReveal) game = publicMessage $ NoRoleReveal.playerPoisonedText player- | otherwise = publicMessage $ Standard.playerPoisonedText player+ | has (variant . noRoleKnowledgeOrReveal) game = publicMessage $ NoRoleKnowledgeOrReveal.playerPoisonedText player+ | has (variant . noRoleReveal) game = publicMessage $ NoRoleReveal.playerPoisonedText player+ | otherwise = publicMessage $ Standard.playerPoisonedText player playerSeenMessage :: Text -> Player -> Message playerSeenMessage to player@@ -399,8 +422,9 @@ playerTurnedToStoneMessage :: Player -> Game -> Message playerTurnedToStoneMessage player game- | has (variant . noRoleReveal) game = publicMessage $ NoRoleReveal.playerTurnedToStoneText player- | otherwise = publicMessage $ Standard.playerTurnedToStoneText player+ | has (variant . noRoleKnowledgeOrReveal) game = publicMessage $ NoRoleKnowledgeOrReveal.playerTurnedToStoneText player+ | has (variant . noRoleReveal) game = publicMessage $ NoRoleReveal.playerTurnedToStoneText player+ | otherwise = publicMessage $ Standard.playerTurnedToStoneText player villageDrunkJoinedVillageMessage :: Text -> Message villageDrunkJoinedVillageMessage to = privateMessage to villageDrunkJoinedVillageText
app/Werewolf/Options.hs view
@@ -9,6 +9,7 @@ Optparse utilities. -} +{-# LANGUAGE CPP #-} {-# LANGUAGE OverloadedStrings #-} module Werewolf.Options (@@ -21,6 +22,9 @@ import Control.Lens +#if MIN_VERSION_optparse_applicative(0,13,0)+import Data.Monoid+#endif import Data.Text (Text) import qualified Data.Text as T import Data.Version (showVersion)@@ -74,7 +78,11 @@ -- | The default preferences. -- Limits the help output to 100 columns. werewolfPrefs :: ParserPrefs+#if MIN_VERSION_optparse_applicative(0,13,0)+werewolfPrefs = prefs $ columns 100 <> showHelpOnEmpty+#else werewolfPrefs = prefs $ columns 100+#endif -- | An optparse parser of a werewolf command. werewolfInfo :: ParserInfo Options
src/Game/Werewolf/Variant.hs view
@@ -22,10 +22,11 @@ -- ** Instances allVariants, - standardVariant, noRoleKnowledgeVariant, noRoleRevealVariant, spitefulVillageVariant,+ standardVariant, noRoleKnowledgeVariant, noRoleKnowledgeOrRevealVariant, noRoleRevealVariant,+ spitefulVillageVariant, -- ** Traversals- standard, noRoleKnowledge, noRoleReveal, spitefulVillage,+ standard, noRoleKnowledge, noRoleKnowledgeOrReveal, noRoleReveal, spitefulVillage, ) where import Control.Lens@@ -53,6 +54,7 @@ allVariants = [ standardVariant , noRoleKnowledgeVariant+ , noRoleKnowledgeOrRevealVariant , noRoleRevealVariant , spitefulVillageVariant ]@@ -71,6 +73,13 @@ , _description = T.strip [iFile|variant/no-role-knowledge/description.txt|] } +noRoleKnowledgeOrRevealVariant :: Variant+noRoleKnowledgeOrRevealVariant = Variant+ { _tag = "no-role-knowledge-or-reveal"+ , _name = T.strip [iFile|variant/no-role-knowledge-or-reveal/name.txt|]+ , _description = T.strip [iFile|variant/no-role-knowledge-or-reveal/description.txt|]+ }+ noRoleRevealVariant :: Variant noRoleRevealVariant = Variant { _tag = "no-role-reveal"@@ -93,7 +102,6 @@ standard :: Traversal' Variant () standard = only standardVariant - -- | The traversal of 'noRoleKnowledge' 'Variant's. -- -- @@@ -102,6 +110,13 @@ noRoleKnowledge :: Traversal' Variant () noRoleKnowledge = only noRoleKnowledgeVariant +-- | The traversal of 'noRoleKnowledgeOrReveal' 'Variant's.+--+-- @+-- 'noRoleKnowledgeOrReveal' = 'only' 'noRoleKnowledgeOrRevealVariant'+-- @+noRoleKnowledgeOrReveal :: Traversal' Variant ()+noRoleKnowledgeOrReveal = only noRoleKnowledgeOrRevealVariant -- | The traversal of 'noRoleReveal' 'Variant's. --@@ -110,7 +125,6 @@ -- @ noRoleReveal :: Traversal' Variant () noRoleReveal = only noRoleRevealVariant- -- | The traversal of 'spitefulVillage' 'Variant's. --
+ variant/no-role-knowledge-or-reveal/command/choose/player-shot.txt view
@@ -0,0 +1,1 @@+#{humanise player} slumps down to the ground, hands clutching at their chest while blood slips between their fingers and pools around them.
+ variant/no-role-knowledge-or-reveal/command/ping/nocturnal-role-pinged.txt view
@@ -0,0 +1,1 @@+Waiting on the nocturnal players...
+ variant/no-role-knowledge-or-reveal/command/ping/werewolves-pinged.txt view
@@ -0,0 +1,1 @@+Waiting on the nocturnal players...
+ variant/no-role-knowledge-or-reveal/command/quit/caller-quit.txt view
@@ -0,0 +1,1 @@+#{humanise caller} has quit!
+ variant/no-role-knowledge-or-reveal/command/status/current-nocturnal-turn.txt view
@@ -0,0 +1,1 @@+It's currently night.
+ variant/no-role-knowledge-or-reveal/command/status/dead-players.txt view
@@ -0,0 +1,1 @@+The following players are dead: #{humanise $ map humanisePlayerWithRoleIfKnown (game ^.. players . traverse . dead)}.
+ variant/no-role-knowledge-or-reveal/description.txt view
@@ -0,0 +1,1 @@+Players are not informed of the roles in play at the start of a game, nor each others roles upon death. Further, nocturnal player turns are obscured.
+ variant/no-role-knowledge-or-reveal/engine/general/player-booted.txt view
@@ -0,0 +1,1 @@+#{humanise player} has been booted from the game!
+ variant/no-role-knowledge-or-reveal/engine/general/spiteful-villager-killed.txt view
@@ -0,0 +1,1 @@+Being ethereal seldom has it's benefits. Perhaps however this knowledge of the townsfolks' natures will bring you some joy in the afterlife: #{humanisePlayersWithRoles $ game ^. players}.
+ variant/no-role-knowledge-or-reveal/engine/lynching/player-lynched.txt view
@@ -0,0 +1,1 @@+#{humanise player} is tied up to a pyre and set alight. Eventually the screams start to die and nothing is left but their charred corpse.
+ variant/no-role-knowledge-or-reveal/engine/lynching/saint-lynched.txt view
@@ -0,0 +1,1 @@+Furious with the village for murdering them, God enacts revenge upon those responsible: #{humanise voters}.
+ variant/no-role-knowledge-or-reveal/engine/lynching/werewolf-lynched.txt view
@@ -0,0 +1,1 @@+#{humanise werewolf} is tied up to a pyre and set alight. Eventually the screams start to die and nothing is left but their charred corpse.
+ variant/no-role-knowledge-or-reveal/engine/new-game/roles-in-game.txt view
@@ -0,0 +1,1 @@+The roles in play have a total balance of #{T.pack $ show totalBalance}.
+ variant/no-role-knowledge-or-reveal/engine/sunrise/player-devoured.txt view
@@ -0,0 +1,1 @@+As you open them you notice a door broken down and #{humanise player}'s guts half devoured and spilling out over the cobblestones.
+ variant/no-role-knowledge-or-reveal/engine/sunrise/player-poisoned.txt view
@@ -0,0 +1,1 @@+Upon further discovery, it looks like the #{humanise witchRole} struck in the night. #{humanise player} is hanging over the side of their bed, poisoned.
+ variant/no-role-knowledge-or-reveal/engine/sunrise/player-turned-to-stone.txt view
@@ -0,0 +1,1 @@+Next to them you see a stone statue, cold to the touch. #{humanise player} must have looked into the eyes of the #{humanise medusaRole} at the very end.
+ variant/no-role-knowledge-or-reveal/name.txt view
@@ -0,0 +1,1 @@+No role knowledge or reveal
variant/no-role-knowledge/description.txt view
@@ -1,1 +1,1 @@-In "No role knowledge", players are not informed of the roles in play at the start of a game. Further, nocturnal player turns are obscured.+Players are not informed of the roles in play at the start of a game. Further, nocturnal player turns are obscured.
variant/no-role-reveal/description.txt view
@@ -1,1 +1,1 @@-In "No role reveal", players are not informed of each others roles upon death. Further, nocturnal player turns are obscured.+Players are not informed of each others roles upon death. Further, nocturnal player turns are obscured.
variant/spiteful-village/description.txt view
@@ -1,1 +1,1 @@-In "Spiteful village", the default Villager role becomes the #{humanise spitefulVillagerRole}.+The default Villager role becomes the #{humanise spitefulVillagerRole}.
variant/standard/description.txt view
@@ -1,1 +1,1 @@-The Standard variant; everything plays out as normal.+Everything plays out as normal.
werewolf.cabal view
@@ -1,5 +1,5 @@ name: werewolf-version: 1.5.0.0+version: 1.5.1.0 author: Henry J. Wylde maintainer: public@hjwylde.com@@ -27,6 +27,23 @@ variant/no-role-knowledge/command/ping/werewolves-pinged.txt variant/no-role-knowledge/command/status/current-nocturnal-turn.txt variant/no-role-knowledge/engine/new-game/roles-in-game.txt+ variant/no-role-knowledge-or-reveal/description.txt+ variant/no-role-knowledge-or-reveal/name.txt+ variant/no-role-knowledge-or-reveal/command/choose/player-shot.txt+ variant/no-role-knowledge-or-reveal/command/ping/nocturnal-role-pinged.txt+ variant/no-role-knowledge-or-reveal/command/ping/werewolves-pinged.txt+ variant/no-role-knowledge-or-reveal/command/quit/caller-quit.txt+ variant/no-role-knowledge-or-reveal/command/status/current-nocturnal-turn.txt+ variant/no-role-knowledge-or-reveal/command/status/dead-players.txt+ variant/no-role-knowledge-or-reveal/engine/general/player-booted.txt+ variant/no-role-knowledge-or-reveal/engine/general/spiteful-villager-killed.txt+ variant/no-role-knowledge-or-reveal/engine/lynching/player-lynched.txt+ variant/no-role-knowledge-or-reveal/engine/lynching/saint-lynched.txt+ variant/no-role-knowledge-or-reveal/engine/lynching/werewolf-lynched.txt+ variant/no-role-knowledge-or-reveal/engine/new-game/roles-in-game.txt+ variant/no-role-knowledge-or-reveal/engine/sunrise/player-devoured.txt+ variant/no-role-knowledge-or-reveal/engine/sunrise/player-poisoned.txt+ variant/no-role-knowledge-or-reveal/engine/sunrise/player-turned-to-stone.txt variant/no-role-reveal/description.txt variant/no-role-reveal/name.txt variant/no-role-reveal/command/choose/player-shot.txt@@ -339,7 +356,7 @@ lens >= 4.12 && < 4.15, MonadRandom == 0.4.*, mtl == 2.2.*,- optparse-applicative >= 0.11 && < 0.13,+ optparse-applicative >= 0.11 && < 0.14, random-shuffle, text == 1.2.*, transformers >= 0.4 && < 0.6,