Difference between revisions of "Order of Operations"
From Roll20 Wiki
Andreas J. (Talk | contribs) m |
Andreas J. (Talk | contribs) m (update links) |
||
Line 5: | Line 5: | ||
</noinclude>While the Roll20 dice engine does support basic math and [[Dice_Reference#Math_Operators_and_Functions|functions]] such as <code>floor()</code> and <code>ceil()</code>, 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: | </noinclude>While the Roll20 dice engine does support basic math and [[Dice_Reference#Math_Operators_and_Functions|functions]] such as <code>floor()</code> and <code>ceil()</code>, 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. '''[[ | + | :1. '''[[Character#Abilities|Abilities]]''' are expanded (meaning the definition of the ability is placed in the formula anywhere that ability appears; e.g. <code>%{character name|ability_name}</code> becomes <code>/r 1d4</code>). |
:2. '''[[Macros]]''' are expanded (e.g. <code>#macro-name</code> becomes <code>/r 1d4</code>). | :2. '''[[Macros]]''' are expanded (e.g. <code>#macro-name</code> becomes <code>/r 1d4</code>). | ||
:3. '''[[Complete_Guide_to_Macros_%26_Rolls#Character_Attributes|Attribute calls]]''' are resolved. (e.g. <code>@{attribute_name}</code> becomes <code>4</code>) | :3. '''[[Complete_Guide_to_Macros_%26_Rolls#Character_Attributes|Attribute calls]]''' are resolved. (e.g. <code>@{attribute_name}</code> becomes <code>4</code>) | ||
:4. '''Steps 1-3''' are repeated up to 99 levels deep,''' or there are no longer any expansions required. | :4. '''Steps 1-3''' are repeated up to 99 levels deep,''' or there are no longer any expansions required. | ||
− | :5. '''[[ | + | :5. '''[[Roll Query|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). |
− | ::5b. [[ | + | ::5b. [[HTML Entities]] within roll queries are parsed once after each roll query (e.g. <code>&#125;</code> becomes <code>}</code>, but <code>&amp;#125;</code> becomes <code>&#125;</code>) |
: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.<br> | :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.<br> | ||
:7. '''The remaining roll is executed''': first, dice are rolled for any dice (e.g. <code>2d6</code> is rolled; including any special dice such as dropped or exploding), then the result of that roll is substituted into the formula.<br> | :7. '''The remaining roll is executed''': first, dice are rolled for any dice (e.g. <code>2d6</code> is rolled; including any special dice such as dropped or exploding), then the result of that roll is substituted into the formula.<br> | ||
:8. '''[[Dice_Reference#Math_Operators_and_Functions|Mathematical functions]]''' like <code>floor()</code> and <code>ceil()</code> are executed.<br> | :8. '''[[Dice_Reference#Math_Operators_and_Functions|Mathematical functions]]''' like <code>floor()</code> and <code>ceil()</code> are executed.<br> | ||
:9. The '''entire remaining formula is evaluated''', including observing proper [https://www.basic-mathematics.com/order-of-operations.html Math Order of Operations] (parentheses first, then multiplication/division, then addition/subtraction).<br> | :9. The '''entire remaining formula is evaluated''', including observing proper [https://www.basic-mathematics.com/order-of-operations.html Math Order of Operations] (parentheses first, then multiplication/division, then addition/subtraction).<br> | ||
− | :10. '''[[ | + | :10. '''[[HTML Entities]]''' are processed once more<br> |
− | ::* ('''NEW''')[[ | + | ::* ('''NEW''')[[Custom Roll Parsing]] comes before '''or''' after HTML entities are processed. ''(needs verifying)'' |
:11. The '''message is sent to {{Text Chat}}''' as well as the [[API:Sandbox Model|API sandbox]]. | :11. The '''message is sent to {{Text Chat}}''' as well as the [[API:Sandbox Model|API sandbox]]. | ||
Revision as of 18:52, 30 November 2021
Page Updated: 2021-11-30 |
This article is a stub. |
Main Page: Complete Guide to Macros & Rolls
Macro Creation
- Complete Guide to Macros & Rolls
- q Text Chat
- Dice Reference
- Order of Operations
- Macros
- Token Reference
- Character Reference
- Roll Templates
- Roll Table
Advanced
Misc.
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}
becomes4
) - 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).
- 5b. HTML Entities within roll queries are parsed once after each roll query (e.g.
}
becomes}
, but&#125;
becomes}
)
- 5b. HTML Entities within roll queries are parsed once after each roll query (e.g.
- 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()
andceil()
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 are processed once more
- (NEW)Custom Roll Parsing comes before or after HTML entities are processed. (needs verifying)
- 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)