(Arne Babenhauserheide)
2016-01-08: add critical rolls to d6 add critical rolls to d6
diff --git a/examples/d6.w b/examples/d6.w
--- a/examples/d6.w
+++ b/examples/d6.w
@@ -4,24 +4,37 @@
define-module : examples d6
. #:export : roll check
+use-modules : srfi srfi-1
+
; basic d6 rules, implemented in guile
define : roll
. "Roll one ± d6"
- let : : die '(-5 -3 -1 2 4 6)
- list-ref die : random 6 : random-state-from-platform
-
+ let*
+ : eyes '(-5 -3 -1 2 4 6)
+ d6 : lambda () : list-ref eyes : random 6 : random-state-from-platform
+ let rolling : : rolled : cons (d6) '()
+ cond
+ : = 1 (length rolled)
+ if : not : member (first rolled) '(-5, 6)
+ first rolled
+ rolling : cons (d6) rolled
+ : not : equal? (first rolled) (second rolled)
+ apply + : cdr rolled
+ else
+ rolling : cons (d6) rolled
+
+
+
define : check skill target effect-threshold
. "Check whether a given skill-roll succeeds and provide a margin of success."
let : : result : + skill : roll
if : > result target
- if : < effect-threshold : - result target
- . 1
- . #t
+ floor/ {result - target} effect-threshold
. #f
display : check 12 9 3
newline
display : roll
+newline
-