Character Vault
Any Concept / Any System
Compendium
Your System Come To Life
Roll20 for Android
Streamlined for your Tablet
Roll20 for iPad
Streamlined for your Tablet

Personal tools

Order of Operations

From Roll20 Wiki

Revision as of 12:40, 13 April 2021 by Andreas J. (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Main Page: Complete_Guide_to_Macros_&_Rolls

Order of Operations here refers to the order in which Roll20's dice engine processes the different dice syntax and macros, which is useful to know when creating more complex macros. Normal Math Order of Operations is processed towards the end of the process.

While the Roll20 dice engine does support basic math and functions such as floor() and ceil(), it is first and foremost a dice engine, and so it has its own order of operations. This means that putting parentheses inside of your dice formula will not always affect the outcome of the roll (for example, you can't force a variable to be interpreted before a macro). Here is the Roll20 Order of Operations:

  1. Abilities are expanded (meaning the definition of the ability is placed in the formula anywhere that ability appears; e.g. %{character name|ability_name} becomes /r 1d4).
  2. Macros are expanded (e.g. #macro-name becomes /r 1d4).
  3. Attribute calls are resolved. (e.g. @{attribute_name} becomes 4)
  4. Steps 1-3 are repeated up to 99 levels deep, or there are no longer any expansions required.
  5. Roll queries are executed up to 99 levels deep (the player making the roll is asked to provide a value for each query, and that value is substituted in where the roll query appears in the formula). Html entities within roll queries are parsed once after each roll query (e.g. } becomes }, but } becomes })
  6. Inline rolls are executed, starting with the most deeply nested inline roll working upward. The overall result of the inline roll is substituted in place where it appeared in the formula.
  7. The remaining roll is executed: first, dice are rolled for any dice (e.g. 2d6 is rolled; including any special dice such as dropped or exploding), then the result of that roll is substituted into the formula.
  8. Mathematical functions like floor() and ceil() are executed.
  9. The entire remaining formula is evaluated, including observing proper Math Order of Operations (parentheses first, then multiplication/division, then addition/subtraction).
  10. Html entities/replacements are processed once more
  11. The message is sent to q Text Chat as well as the API sandbox.


Thank you to Scott C. for additional testing in this matter!

Examples

(todo)