Hey Steve. Welcome to the wonderful world of script usage. In no time you'll go from using them to writing them... and then it's really a slippery slope to episodes of "lost time" as you carry out your infernal contracts with the eldritch javascript gods. For now, a couple of things you should know: PowerCards is no longer being developed, and usage has really slipped. That's because Kurt (one of the last supporters of it) wrote a more modern (and full-throated procedural) version of it called "ScriptCards". So if you're looking to pick up a script like that, I would suggest ScriptCards , instead. Many more people use it, it's more powerful, and it's under current development/support as Kurt will periodically release an updated version. Another set of scripts (or type of script) to be aware of are metascripts. I wrote the Metascript Toolbox scripts, which basically provide expanded functionality to other/standard scripts and/or to simple chat messages. The difference between metascripts and standard scripts is basically the order of execution: metascripts will execute first, followed by standard scripts. If you really want to understand how scripts and metascripts function in the Roll20 space, you can watch the first 15 minutes of this video (the rest is specifically on metascripts, since most people don't know about those, so you can watch that part, too... but the beginning is where the explanation of regular scripts happens). I'm mentioning all of this just as a general baseline to help you ease into script usage. No sense learning a script that isn't supported, only to discover that fact later and have to start the learning process over with a different script to do the same thing you'd been doing plus that one thing that it couldn't do that made you search out a script that COULD do that thing. ScriptCards Solution (well, ok... with a little Metascript help) If I were to approach this from ScriptCards, what you're asking for would look something like: !script {{ --#title|@(speaker.player_name) d100 Check --=theRoll|1d100 --=theTarget|?{Target Number|50} --+Target Number|[$theTarget] --+Roll|[$theRoll]. --?[$theRoll] -le [$theTarget]|Success|Failure --:Done| --X| --:Success| --+Result|SUCCESS --^Done| --:Failure| --?[$theRoll] -lt 100|[ --+Result|FAILURE --]|[ --+Result|FUMBLE --]| --^Done| }} Note that I DID USE a metascript construction in there (to get the speaker name). ScriptCards might have a way to get the player name from the message, but I'm not that fluent in it. This method (using a metascript construction within the command line intended for another script) is how the metascripts expand the functionality of standard scripts. Here is what that output might look like: Metascript Toolbox Solution If I were to approach this from the Toolbox, it would use a template. I'll use the default template since I don't know what character sheet you're using in your game (character sheets are the source of templates, but the default template is available in every game). !&{template:default} {{name=@(speaker.player_name) d100 Check}} {{Target Number=?{Target Number|50}}} {{Roll=[[1d100]]}} {{Result={&if $[[0]] = 100}FUMBLE{&elseif $[[0]] <= ?{Target Number} }SUCCESS{&else}FAILURE{&end} }} {&simple} The template look will depend on what sheet you're using and whether you're in dark mode or not. This is what it looks like in a game with the 2024 sheet enabled and dark mode: Both approaches have... a LOT... more options and capability, so if you're looking to expand and need more help, post back. I'm not the most maven-y of ScriptCards mavens, but there are plenty of people here who are!