m-chrzan.xyz
aboutsummaryrefslogtreecommitdiff
path: root/src/dice.js
diff options
context:
space:
mode:
authorMarcin Chrzanowski <marcin.j.chrzanowski@gmail.com>2017-08-30 16:30:23 -0400
committerMarcin Chrzanowski <marcin.j.chrzanowski@gmail.com>2017-08-30 16:30:23 -0400
commit5b77a409c912f7251da8c170bd4a3aa8826d989b (patch)
tree0b3131a6a1c87b7a3af3537d4d548392866bb812 /src/dice.js
parent7efea0582dda35cd7dc0c370ef3b56c84b2f2291 (diff)
Implement again under
Diffstat (limited to 'src/dice.js')
-rw-r--r--src/dice.js37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/dice.js b/src/dice.js
index e96aca9..e580c9d 100644
--- a/src/dice.js
+++ b/src/dice.js
@@ -162,6 +162,42 @@ const again = (die1, die2) => {
}
}
+const againUnder = (die1, die2) => {
+ return () => {
+ const againOn = roll(die1)
+ let rolls = []
+ let rollAgain = []
+
+ const rollDie = (die) => {
+ const roll = die()
+
+ if (roll <= againOn) {
+ rollAgain.push(die)
+ }
+
+ let returnedOriginal = false
+ rolls.push(() => {
+ if (!returnedOriginal) {
+ returnedOriginal = true
+ return roll
+ } else {
+ return die()
+ }
+ })
+ }
+
+ die2().forEach(rollDie)
+
+ while (rollAgain.length > 0) {
+ const oldRollAgain = rollAgain
+ rollAgain = []
+ oldRollAgain.forEach(rollDie)
+ }
+
+ return rolls
+ }
+}
+
const threshold = (die1, die2) => {
return () => {
const cutoff = roll(die1)
@@ -193,4 +229,5 @@ exports.explodeUnder = explodeUnder
exports.keepHigh = keepHigh
exports.keepLow = keepLow
exports.again = again
+exports.againUnder = againUnder
exports.threshold = threshold