Roll20 macro language is not exactly a paragon of clarity. Here's a tip for those instances where you're creating a macro (or ability) and roll queries threaten to overwhelm your ability to parse the macro in your head. First of all, "!" is not actually a trigger for API scripts. "!" means "don't send anything on this line into the chat box." API script commands commonly start with "!" because you usually don't want to see the command itself appear in the chat. Next, it is, I feel, a somewhat underappreciated fact that when you want to use the result of a roll query multiple times in a single macro, you only need to specify any arguments for the roll query once. Any other instances can just have the name of the roll query. Combine these two things, and you realize you can put all the roll queries at the beginning of a macro, hidden from the chat by "!", and then only use the name-only versions in the actually displayed part of the macro. Put the roll queries in the order you want them asked of the user. Here's a somewhat silly example. It also takes advantage of the fact that you can close a roll template element on the following line. (I can't get it to post as code. The entire message turns into code. Sorry.) ! ?{Range| Point Blank, +0 | Short, -1 | Medium, -2 | Long, -4 | Extreme, -8} ! ?{Target Size| Tiny, -2 | Small, -1 | Medium, +0 | Large, +1 | Huge, +2} ! ?{Damage| Weak, 1d6 | Average, 2d6 | Strong, 3d6} ! ?{Damage Modifier| -1 | +0 | +1} ! &{template:default} {{name=Somewhat Silly Example }} {{Range Modifier=?{Range} }} {{Target Size=?{Target Size} }} {{Damage Modifier=?{Damage Modifier} }} {{Chance to hit=[[ 10 [base score] ?{Range} [range] ?{Target Size} [size] ]] }} {{Roll=[[ 1d20 [roll] + ?{Damage Modifier} [damage modifier] ]] }} {{Damage if hit=[[ ?{Damage} ]] }}