Qdr /

# Description

Formulas are the core of Quick Dice Roller.

Formulas are used to instruct Quick Dice Roller on what kind of roll we want, and can be as simple as "`1d6`" (roll a six sided dice) or a bit more complex, like "`max(1d6, 1d8)`" (get the highest result between a six sided dice and an eight sided dice) and even more complex to fit your needs.

# Values

A value is the basic information usable in QDR Formulas. It can be expressed as a number (like "`10`") or can be the result of an operation (like "`3 + 5`"), or the result of a function (like "`max(d6,d6)`").

A value can hold up to three decimal values, but all the decimals are truncated in the final result (i.e. the formula "`(2/3)+0.5`" returns `1` and the formula "`rup((2/3)+0.5)`" will obviously return `2`).

Each value in QDR is composed by a numeric (shown as the numeric result) and a label (shown as the extended result).

Let’s take in example the addition. It take two operands (right and left) that are two distinct values and generates a new value whose numeric is the sum of the numerics of the operands, and the label is the concatenation of the operands' labels separated by "` + `". Thus, the formula "`3 + 2`" will sum two values: first value is composed by the numeric `3` and the label "`3`", second value is composed by the numeric `2` and the label "`2`". The result of the addition will be a new value composed by the numeric `5` and the label "`3 + 2`".

Functions and operators works with numerics and labels and each one generates a new value, whose numeric and label depends on the operation performed by the operator or the function.

# Operators

Quick Dice Roller support the main four operators (`+`,`*`,`-`,`/`) as well as the special `d` operator.

The output of such operators is a value with the numeric equal to the numeric result of the operation, and the label equal to the labels of the two operators separated by the operator (i.e. "`3*2`").

## Dice operator

The special `d` operator is used to roll dice. As most of you already know, "`2d6`" means roll two times a six faced die, and add all the results together.

The `d` operator has the highest priority, and is evaluated before any other operator, thus "`2d6*3`" means add the result of two six sided dice and then multiply it by 3.

The output of the `d` operator is a value with the numeric equal to the numeric result of the roll, and the label equal to the numeric result surrounded by square brackets (i.e. "`*3`").

### Special cases

If the number of dice to roll is less or equal to `0`, then no dice are rolled at all. If the number of faces is less or equal to `1`, then a single sided dice (i.e. a dice that will always return `1`) is rolled.

### Naming conventions

It is possible to use `t` (swedish tärning) or `w` (deutch würfel) as alternative of `d`.

# Parentheses

Parentheses are used to specify the order of the computation.

As said, the `d` operator is computed before of the `*` operator, and the latter is computed before of the `+` operator. So, the formula "`2d6*3+4`" means roll two six sided dice, add the result together, multiply it by 3 and then add 4.

Using parentheses it is possible to modify that order: whatever is put between them is computed before of the operators outside them. I.e. the formula "`2d(6*(3+4))`" means add together 3 and 4, multiply the result by 6 and then roll two dice with a number of faces equal to the result. Or, in other words, roll two 42 sided dice and add the result together.

# Named Values

Named Values are values that can be referenced by a name and can be changed prior of each evaluation of the formula.

Named Values can be created, deleted and updated using their special interface (swipe right to left to access it). The short name (Label) of the Named Values can be used in formulas. The current value of Named Values will be used in place of their short name when evaluating formulas.

Example: let's assume we created a Named Value with the short name "`lvl`". We can now create the formula "`(lvl)d6`" that roll as many six sided dice as the current value of the Named Value "`lvl`". Changing the value of "`lvl`" will lead to a different amount of dice rolled.

# Functions

Functions are used to perform complex rolls, like exploding die, dice pool, roll & keep and so on.

Functions are composed by their name followed by a set of parameters enclosed in parentheses, and each parameter is separated by a comma. A typical example is "`rak(1d6,4,3)`" and its meaning is as follows: use the function with name rak with three parameters. First parameter is "`1d6`", second parameter is "`4`" and third parameter is "`3`".

Each parameter of a function can be any formula, even another function, like "`max(rak(1d6,4,3),5+2)`" which give the highest value between the result of "`rak(1d6,4,3)`" and "`5+2`".

To get the complete list of available functions, check the Function Reference page.