# Dice Notation¶

*Dice notation* is nearly fully understood by pydice.

*xdice* is case insensitive.

## Dice¶

Patterns describes here can be passed to the Dice.parse() class method, and will then return the corresponding Dice object.

See Wikipedia for a complete definition.

### Bases¶

Die rolls are given in the form AdX. A (amount) and X (sides) are variables, separated by the letter “d”, which stands for die or dice.

A is the number of dice to be rolled (1 if omitted).

X is the number of faces of each die.

For example, if a game would call for a roll of d4 or 1d4 this would mean, “roll one 4-sided die.” 3d6 would mean, “roll three six-sided dice”

### Default values¶

If the A value is omitted, it is assumed to be a 1.

If the X value is omitted, it is assumed to be a 20. This behavior can be modified trough the class property Dice.DEFAULT_SIDES.

### D% Notation¶

The `D%`

notation is allowed, and read as `D100`

.

### Selective results¶

The `AdX`

pattern can be followed by `Ln`

and/or `Hn`

(‘L’ and ‘H’
respectively stand for lowest and highest).

In this case, the lowest/highest n scores will be discard when the dice will be rolled.

> Eg: `3D6L1`

will roll three 6-sided dice, and drop the lowest, while `3D6H1`

will roll three 6-sided dice, and drop the highest.

Notes:

- If no number follow the ‘L’ or ‘H’, it is assumed to be a 1.
- ‘L’ and ‘H’ can be combined inside a single pattern, but ‘L’ must precede ‘H’:
`6D6L1H2`

### Exploding dice¶

Append an `X`

or a `!`

to a pattern to make the dice ‘explode’.
‘Explode’ means each maximal score will trigger a new roll.
The resulting score will be add to the results.

For example, if `3d6!`

give `[6,3,2]`

, one more die will be rolled (because 6 is the max value)
The final result could be `[6,3,2,4]`

.

### Fudge dice¶

Use the `XdF`

notation to use fudge dice.

## Patterns¶

Patterns describes here can be passed to the Pattern.parse() class method.

`AdX`

notations can be used in more complex expressions.

Any mathematical expression is allowed:

```
>> 1d10+1d5+1
>> 1d20-6
>> 1d6*2
>> 2d20//4
>> 1d6*(1d4**2)
```

Following builtin python functions are also allowed: `abs`

, `max`

,
`min`

. That mean you can parse patterns like `max(1d6+1, 2d4)`

.

### Repeat¶

The `Rn(AdX)`

notation can be used to roll n times the `AdX`

command.

For example, the pattern `R3(2d6+2)`

will roll `2d6+2`

three times: `(2d6+2)+(2d6+2)+(2d6+2)`

## Examples¶

`1d6`

> Roll a 6-sided die`1d6+3`

> Roll a 6-sided die, then add 3`2*(1d6+3)`

> Roll a 6-sided die, add 3, then multiply by 2`3d6L2`

> Roll three 6-sided dice, and drop the two lowest.`R2(1d6+3)`

> Similar to`1d6+3+1d6+3`

`1d%`

> Similar to`1d100`

`d6`

> Similar to`1d6`

`min(1d6+10,3d6)`

> Keep the minimal score between`1d6+10`

and`3d6`