diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -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*
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -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
diff --git a/app/Game/Werewolf/Message/Command.hs b/app/Game/Werewolf/Message/Command.hs
--- a/app/Game/Werewolf/Message/Command.hs
+++ b/app/Game/Werewolf/Message/Command.hs
@@ -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
diff --git a/app/Game/Werewolf/Message/Engine.hs b/app/Game/Werewolf/Message/Engine.hs
--- a/app/Game/Werewolf/Message/Engine.hs
+++ b/app/Game/Werewolf/Message/Engine.hs
@@ -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
diff --git a/app/Werewolf/Options.hs b/app/Werewolf/Options.hs
--- a/app/Werewolf/Options.hs
+++ b/app/Werewolf/Options.hs
@@ -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
diff --git a/src/Game/Werewolf/Variant.hs b/src/Game/Werewolf/Variant.hs
--- a/src/Game/Werewolf/Variant.hs
+++ b/src/Game/Werewolf/Variant.hs
@@ -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.
 --
diff --git a/variant/no-role-knowledge-or-reveal/command/choose/player-shot.txt b/variant/no-role-knowledge-or-reveal/command/choose/player-shot.txt
new file mode 100644
--- /dev/null
+++ b/variant/no-role-knowledge-or-reveal/command/choose/player-shot.txt
@@ -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.
diff --git a/variant/no-role-knowledge-or-reveal/command/ping/nocturnal-role-pinged.txt b/variant/no-role-knowledge-or-reveal/command/ping/nocturnal-role-pinged.txt
new file mode 100644
--- /dev/null
+++ b/variant/no-role-knowledge-or-reveal/command/ping/nocturnal-role-pinged.txt
@@ -0,0 +1,1 @@
+Waiting on the nocturnal players...
diff --git a/variant/no-role-knowledge-or-reveal/command/ping/werewolves-pinged.txt b/variant/no-role-knowledge-or-reveal/command/ping/werewolves-pinged.txt
new file mode 100644
--- /dev/null
+++ b/variant/no-role-knowledge-or-reveal/command/ping/werewolves-pinged.txt
@@ -0,0 +1,1 @@
+Waiting on the nocturnal players...
diff --git a/variant/no-role-knowledge-or-reveal/command/quit/caller-quit.txt b/variant/no-role-knowledge-or-reveal/command/quit/caller-quit.txt
new file mode 100644
--- /dev/null
+++ b/variant/no-role-knowledge-or-reveal/command/quit/caller-quit.txt
@@ -0,0 +1,1 @@
+#{humanise caller} has quit!
diff --git a/variant/no-role-knowledge-or-reveal/command/status/current-nocturnal-turn.txt b/variant/no-role-knowledge-or-reveal/command/status/current-nocturnal-turn.txt
new file mode 100644
--- /dev/null
+++ b/variant/no-role-knowledge-or-reveal/command/status/current-nocturnal-turn.txt
@@ -0,0 +1,1 @@
+It's currently night.
diff --git a/variant/no-role-knowledge-or-reveal/command/status/dead-players.txt b/variant/no-role-knowledge-or-reveal/command/status/dead-players.txt
new file mode 100644
--- /dev/null
+++ b/variant/no-role-knowledge-or-reveal/command/status/dead-players.txt
@@ -0,0 +1,1 @@
+The following players are dead: #{humanise $ map humanisePlayerWithRoleIfKnown (game ^..  players . traverse . dead)}.
diff --git a/variant/no-role-knowledge-or-reveal/description.txt b/variant/no-role-knowledge-or-reveal/description.txt
new file mode 100644
--- /dev/null
+++ b/variant/no-role-knowledge-or-reveal/description.txt
@@ -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.
diff --git a/variant/no-role-knowledge-or-reveal/engine/general/player-booted.txt b/variant/no-role-knowledge-or-reveal/engine/general/player-booted.txt
new file mode 100644
--- /dev/null
+++ b/variant/no-role-knowledge-or-reveal/engine/general/player-booted.txt
@@ -0,0 +1,1 @@
+#{humanise player} has been booted from the game!
diff --git a/variant/no-role-knowledge-or-reveal/engine/general/spiteful-villager-killed.txt b/variant/no-role-knowledge-or-reveal/engine/general/spiteful-villager-killed.txt
new file mode 100644
--- /dev/null
+++ b/variant/no-role-knowledge-or-reveal/engine/general/spiteful-villager-killed.txt
@@ -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}.
diff --git a/variant/no-role-knowledge-or-reveal/engine/lynching/player-lynched.txt b/variant/no-role-knowledge-or-reveal/engine/lynching/player-lynched.txt
new file mode 100644
--- /dev/null
+++ b/variant/no-role-knowledge-or-reveal/engine/lynching/player-lynched.txt
@@ -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.
diff --git a/variant/no-role-knowledge-or-reveal/engine/lynching/saint-lynched.txt b/variant/no-role-knowledge-or-reveal/engine/lynching/saint-lynched.txt
new file mode 100644
--- /dev/null
+++ b/variant/no-role-knowledge-or-reveal/engine/lynching/saint-lynched.txt
@@ -0,0 +1,1 @@
+Furious with the village for murdering them, God enacts revenge upon those responsible: #{humanise voters}.
diff --git a/variant/no-role-knowledge-or-reveal/engine/lynching/werewolf-lynched.txt b/variant/no-role-knowledge-or-reveal/engine/lynching/werewolf-lynched.txt
new file mode 100644
--- /dev/null
+++ b/variant/no-role-knowledge-or-reveal/engine/lynching/werewolf-lynched.txt
@@ -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.
diff --git a/variant/no-role-knowledge-or-reveal/engine/new-game/roles-in-game.txt b/variant/no-role-knowledge-or-reveal/engine/new-game/roles-in-game.txt
new file mode 100644
--- /dev/null
+++ b/variant/no-role-knowledge-or-reveal/engine/new-game/roles-in-game.txt
@@ -0,0 +1,1 @@
+The roles in play have a total balance of #{T.pack $ show totalBalance}.
diff --git a/variant/no-role-knowledge-or-reveal/engine/sunrise/player-devoured.txt b/variant/no-role-knowledge-or-reveal/engine/sunrise/player-devoured.txt
new file mode 100644
--- /dev/null
+++ b/variant/no-role-knowledge-or-reveal/engine/sunrise/player-devoured.txt
@@ -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.
diff --git a/variant/no-role-knowledge-or-reveal/engine/sunrise/player-poisoned.txt b/variant/no-role-knowledge-or-reveal/engine/sunrise/player-poisoned.txt
new file mode 100644
--- /dev/null
+++ b/variant/no-role-knowledge-or-reveal/engine/sunrise/player-poisoned.txt
@@ -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.
diff --git a/variant/no-role-knowledge-or-reveal/engine/sunrise/player-turned-to-stone.txt b/variant/no-role-knowledge-or-reveal/engine/sunrise/player-turned-to-stone.txt
new file mode 100644
--- /dev/null
+++ b/variant/no-role-knowledge-or-reveal/engine/sunrise/player-turned-to-stone.txt
@@ -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.
diff --git a/variant/no-role-knowledge-or-reveal/name.txt b/variant/no-role-knowledge-or-reveal/name.txt
new file mode 100644
--- /dev/null
+++ b/variant/no-role-knowledge-or-reveal/name.txt
@@ -0,0 +1,1 @@
+No role knowledge or reveal
diff --git a/variant/no-role-knowledge/description.txt b/variant/no-role-knowledge/description.txt
--- a/variant/no-role-knowledge/description.txt
+++ b/variant/no-role-knowledge/description.txt
@@ -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.
diff --git a/variant/no-role-reveal/description.txt b/variant/no-role-reveal/description.txt
--- a/variant/no-role-reveal/description.txt
+++ b/variant/no-role-reveal/description.txt
@@ -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.
diff --git a/variant/spiteful-village/description.txt b/variant/spiteful-village/description.txt
--- a/variant/spiteful-village/description.txt
+++ b/variant/spiteful-village/description.txt
@@ -1,1 +1,1 @@
-In "Spiteful village", the default Villager role becomes the #{humanise spitefulVillagerRole}.
+The default Villager role becomes the #{humanise spitefulVillagerRole}.
diff --git a/variant/standard/description.txt b/variant/standard/description.txt
--- a/variant/standard/description.txt
+++ b/variant/standard/description.txt
@@ -1,1 +1,1 @@
-The Standard variant; everything plays out as normal.
+Everything plays out as normal.
diff --git a/werewolf.cabal b/werewolf.cabal
--- a/werewolf.cabal
+++ b/werewolf.cabal
@@ -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,
