I had forgotten the purposes of the various random functions in MathOps, so forgive that I initially referenced the randb() function. That is the "random between", which we won't use. We'll need either the randa() function (the "random among"), or the randib() function (the "random integer between"), depending on how you build it. So, here are a couple of options of the command line you would need to use to have the token switch to any other side than the first. The first requires TokenMod and MathOps to be installed: !token-mod --set currentside|{&math randa(2,3,4)} Notes: that will affect the selected token. It will also only swap between faces 2, 3, and 4. If the token happens to have more than 4 sides, you won't get the higher numbered ones unless you alter the command line to include them. For a better option in that case, read on. The next option requires TokenMod, MathOps, ZeroFrame, and Fetch (v2.0.8, pending in the one-click or at my repo , now), as well as the supporting scripts that get installed from the one-click: !token-mod --set currentside|{&math randa(2,@(selected.sidecount)+1)} Notes: this one also affects the selected token. However this time, we take into account the total number of sides on the token at the time the command is run. (We add 1 because of how javascript generates random numbers -- inclusive of the lower boundary, but not including the upper boundary). Since we have an upper and a lower range, we'll use the randib() function instead of the randa() function. This version of the command line is a little more hands-off, since you don't have to update it if the number of sides of the token changes... or if you want to use the same command for a token that has 4 sides, then use it on a token that has 15 sides. It will still work... you just have to select the token you want to affect. Notes 2: You can change the Fetch syntax to refer to a token by name or ID instead of "selected". Using this in conjunction with a TokenMod --ids argument can change the above command to work with a different token than the one you have selected. You could, for example, build it to target a single token no matter what you have selected (using the exact ID of a token). Or you could build them both to refer to a @{target} statement, so that both Fetch and TokenMod would now look to read and affect the token you clicked on as a part of the targeting resolution. The last option requires all of the scripts mentioned in the previous version (including the latest Fetch), as well as SelectManager: !forselected(^) token-mod --set currentside|{^&math randa(2,@^(selected.sidecount)+1)} {&select Obelisk*} Notes: This would be a good form if you had a number of these tokens that you wanted to affect, and they all needed to change at the same time, but each to a random value. TokenMod can change multiple tokens at once, but without the forselected iteration, the tokens would all be set to the same side. In this case, I'm imagining that all of these multi-face tokens are named some version of "Obelisk01", "Obelisk02", etc. The select statement will get all of the tokens answering that wildcard formation on the current page, and feed them into a forselected iteration sending a unique TokenMod command to each to get your new side showing. The above options get you settled on a random side from the token. For the sound, that would be a Roll20AM or SimpleSound implementation that you can easily pair with any of the above. Those are not my forte, but someone else should be able to chime in to help get you the correct command line to play the sound you want. That sound-playing command line can be paired with one of the above command lines (in succession) to get both to fire... though sometimes there is a bug where Roll20 drops a command line. If you find that is an issue for you, we can get around that with ZeroFrame quite simply. Just post back with your finished command line (with both the TokenMod command and the sound command) and I'll show you the modification to make.