rollcli 0.3.0

A command-line dice roller for tabletop RPGs with advantage/disadvantage and probability estimation
Documentation

roll

A command-line dice roller for tabletop RPGs. Supports standard dice notation, advantage/disadvantage, keep-highest/lowest, exact probability computation, and named presets.

Usage

roll <expression> [options]
roll --repl
roll --save <name> <expression>
roll --list
roll --delete <name>

Dice expressions

Expression Meaning
2d10+4 Roll 2d10, add 4
d20 Roll a single d20
adv d20+5 Roll d20 with advantage (take higher), add 5
dis d20-1 Roll d20 with disadvantage (take lower), subtract 1
2d6+1d4+3 Multiple dice groups with a flat bonus
4d6kh3 Roll 4d6, keep the highest 3 (D&D ability scores)
4d6kl1 Roll 4d6, keep the lowest 1

Rolling multiple times

Use -n / --times to roll the same expression several times at once:

roll 2d6+3 -n 5
# #1: 2d6+3 => [4, 2] (+3) = 9
# #2: 2d6+3 => [6, 1] (+3) = 10
# ...

Theoretical statistics

Use --stats to print the theoretical min, max, and mean alongside any output:

roll 2d6+3 --stats
# 2d6+3 => [5, 3] (+3) = 11
#   [min=5, max=15, mean=10.00]

Probability estimation

Use --prob to calculate the chance of rolling at least a given value. For simple expressions (no advantage/disadvantage, no keep), the result is computed exactly via polynomial convolution; otherwise it falls back to Monte Carlo simulation:

roll d20 --prob 15
# P(1d20 >= 15) = 30.0000% (exact)

roll adv d20 --prob 15
# P(adv 1d20 >= 15) = 50.97% (509700 / 1000000 sims)

The number of simulations defaults to 1,000,000 and can be changed with --sims.

Distribution histogram

Use --dist to see the full probability distribution as an ASCII histogram. Cannot be combined with --prob.

roll 2d6 --dist
# Distribution for 2d6 (1000000 simulations):
#  2 |  2.8% ███
#  3 |  5.5% ██████
#  ...

Interactive REPL

Use --repl to drop into an interactive session where you can type expressions one per line without re-invoking the binary:

roll --repl
# Roll REPL — type a dice expression or 'quit' to exit.
# > adv d20+5
# adv 1d20+5 => [18] vs [7] (+5) = 23
# > 4d6kh3
# 4d6kh3 => [6, 5, 3] = 14
# > quit

Named presets

Save frequently-used expressions as named presets stored in ~/.config/roll/presets.toml:

roll --save attack "adv d20+7"
# Saved preset 'attack' = 'adv d20+7'.

roll --list
# Saved presets:
#   attack = adv d20+7

roll attack
# adv 1d20+7 => [17] vs [9] (+7) = 24

roll --delete attack
# Deleted preset 'attack'.

Preset names are resolved case-insensitively before the input is parsed as a dice expression. Any roll option (--times, --stats, --prob, --dist) works normally with presets.

Building

cargo build --release

License

MIT