about summary refs log tree commit diff
path: root/src/Xanthous/Random.hs
diff options
context:
space:
mode:
authorGriffin Smith <root@gws.fyi>2020-05-11T00·26-0400
committerGriffin Smith <root@gws.fyi>2020-05-11T00·26-0400
commitce3730ba3a5831e590dd9cc037649eb49e2f0804 (patch)
tree80af1801baedcc8543521ddfed048fb0fc304ee8 /src/Xanthous/Random.hs
parentb64dd08c6ec5f68539c6b4159b10d960e8e96bc3 (diff)
Small chance of hurting self when punching
When attacking monsters with bare fists, there is a small chance (8%,
right now) of causing 1 point of self-damage
Diffstat (limited to 'src/Xanthous/Random.hs')
-rw-r--r--src/Xanthous/Random.hs15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/Xanthous/Random.hs b/src/Xanthous/Random.hs
index 3cb0b068d3..41c80ab73c 100644
--- a/src/Xanthous/Random.hs
+++ b/src/Xanthous/Random.hs
@@ -9,6 +9,7 @@ module Xanthous.Random
   , evenlyWeighted
   , weightedBy
   , subRand
+  , chance
   ) where
 --------------------------------------------------------------------------------
 import Xanthous.Prelude
@@ -85,3 +86,17 @@ instance (Num w, Ord w, Distribution Uniform w, Excludable w) => Choose (Weighte
 
 subRand :: MonadRandom m => Rand StdGen a -> m a
 subRand sub = evalRand sub . mkStdGen <$> getRandom
+
+-- | Has a @n@ chance of returning 'True'
+--
+-- eg, chance 0.5 will return 'True' half the time
+chance
+  :: (Num w, Ord w, Distribution Uniform w, Excludable w, MonadRandom m)
+  => w
+  -> m Bool
+chance n = choose $ weightedBy (bool 1 (n * 2)) bools
+
+--------------------------------------------------------------------------------
+
+bools :: NonEmpty Bool
+bools = True :| [False]