This is pretty straightforward with the Metascript Toolbox installed... Plugger (one of the metascripts in the toolbox) has a function for getDiceByVal, which would get the dice from a given roll that satisfied certain requirements (like being <= 2), and presenting them in a handful of different ways (counting them, listing them, etc.). So the simplest rewrite of the above "Bonus Blast" macro would be something like: !&{template:default} {{name=Bonus Blasting}}{{Roll=[[{?{Number of dice rolled|0}d6+2d6}k2+@{selected|Blasting}]]}} {{All Dice={&eval}getDiceByVal(--$[[0]] -->0 --all --list|" "){&/eval} }}{{Low=**{&eval}getDiceByVal($[[0]] <=2 all count){&/eval}**}} {{High=**{&eval}getDiceByVal($[[0]] >=5 all count){&/eval}** }} {&simple} That might produce something like: This would represent the Roll line as ALREADY having applied the "keep high 2" mechanic (more on that in a minute), and it would show all of the dice as they were rolled, as well as a line presenting the total of all of the <=2 dice (the "Low" line) and all of the >=5 dice (the "High" line). Incidentally, you can get that "All Dice" line sorted if you sorted your initial roll, but I'll leave that up to you since that wasn't a parameter of your original ask. ...but if you leave the camera rolling... You could combine the Bonus/Penalty versions of the macro into a single command if you didn't mind having all of the information presented. The benefit is that you'd cut the number of macros you have to maintain in half. That would look like: !&{template:default} {{name=Blasting}}[[?{Number of dice rolled|0}d6+2d6+@{selected|Blasting}]]{{Base Roll=({&eval})getDiceByVal(--$[[0]] -->0 --all --list|" ")({&/eval})}} {{Bonus Result= {&r}{({&eval})getDiceByVal(--$[[0]] -->0 --all --list|,)({&/eval})}k2{&/r} }} {{Penalty Result= {&r}{({&eval})getDiceByVal(--$[[0]] -->0 --all --list|,)({&/eval})}kl2{&/r} }} {{Low=**{&eval}getDiceByVal($[[0]] <=2 all count){&/eval}**}} {{High=**{&eval}getDiceByVal($[[0]] >=5 all count){&/eval}** }} {&simple} This would produce something like: Here, we present the set of all dice in the "Base Roll" field, so that our ACTUAL results (of the keep-high-2 and keep-low-2 mechanics of the Bonus/Penalty framework) in the "Bonus Result" and "Penalty Result" lines. The player would have to apply the correct result based on the situation -- do they have Bonus dice? Or do they have Penalty dice? This version preserves the count of Low/High dice, as well. ...but if you leave the camera rolling... In the above version, you're still having to maintain at least 1 command macro for each modifier skill/attribute/whatever this system calls the modifiers. If you're fine maintaining that number of macros and/or you intend to display the options as a chat menu , you can stop here. But if you wanted to get this down to a single command, you could use other metascripts to make the player choose the attribute. The downside of this is that you'd have to employ a query, and not everyone wants to answer a question every time they want to make a roll. Not to mention you are already prompting them for the number of extra dice to roll. So there's definitely a tradeoff. Also, you could do this already with a query for the modifier, but that would force you (the command designer) to rename the template output so that it could no longer say "Blasting" or "Astral Carp Tossing" for those individual modifier/actions. Instead, it would have to say something generic for all outputs. Like: "Output" But, if you wanted to pursue the idea, the Toolbox offers a way to use a single query (which you'd already be introducing with a generically titled template output) for multiple different implementations -- like using it in one place to retrieve the numeric modifier for the roll, but in another for populating the title of the template with the textual name of the modifier (i.e., "Blasting"). This, too, is beyond the scope of your original ask, so I won't go into the details of working that one up, but I can show it if it is something you'd be interested in.