I have mocked something up that can do this using the Metascript Toolbox set of scripts. You can find the Metascript Toolbox in the 1-click. Once the scripts are installed, open the character that you want to be able to do this with. I named mine "MuleCharacter," but you can replace every instance of that name in the command line with the name of your character. Also, since I didn't know the game system you mentioned, I just used names like "ThisSkill" and "ThatSkill". You'll want to replace those (and flesh out the list with all of the skills you want to use), but that will make more sense in a minute. Go to the Attributes & Abilities tab on MuleCharacter (or your character, if you are doing the name replacement) and create 3 Abilities. Name them: CarriedTotal CarriedTotalFirstRoll CarriedTotalRollN Open CarriedTotal, and enter four lines for each skill you want to use with this die-rolling mechanic. These are the lines for "ThisSkill": StartingDice=4 RemainingDice=0 RunningTotal=0 TargetNumber=0 The StartingDice value is the only variable that needs a non-zero value. This line represents the number of d6 the character has for the skill "ThisSkill". For now, we'll hard-code it to something (I arbitrarily chose 4). Later, this could be expanded to read the value from an attribute on your character. Save CarriedTotal and close it, then open CarriedTotalFirstRoll . Enter this text and save it: !{{(^) set.MuleCharacter.CarriedTotal.CurrentSkill=?{Skill|ThisSkill|ThatSkill}/set set.MuleCharacter.CarriedTotal.TargetNumber=?{Target Number?|0}/set set.MuleCharacter.CarriedTotal.StartingDice=?{Starting Dice|1|2|3|4|5|6|7|8|9|10}/set set.MuleCharacter.CarriedTotal.RemainingDice=?{Starting Dice}/set set.MuleCharacter.CarriedTotal.RunningTotal=0/set {^&template:default} ({)name=?{Skill} Incremental Rolls(}) {\\^&global ([GlobNewTotal] [\\^][\\^] get^.MuleCharacter.CarriedTotal.RunningTotal/get + $^[^[0^]^].value \\^]\\^]) ([GlobRemainingDice] {^&math get^.MuleCharacter.CarriedTotal.RemainingDice/get - 1}) ([GlobTargetNumber] ?{Target Number?}) ([GlobPreviousTotal] [\\^][\\^]get^.MuleCharacter.CarriedTotal.RunningTotal/get\\^]\\^]) ([GlobStartingDice] get^.MuleCharacter.CarriedTotal.StartingDice/get) } ({)Target=GlobTargetNumber(}) ({)Previous Total=GlobPreviousTotal(}) ({)This Roll=[^[^1d6^]^](}) ({)----------(}) ({)New Total=**GlobNewTotal** (}) {\\^& if GlobNewTotal >= GlobTargetNumber} ({)Target Number Reached!=GlobRemainingDice Pushes Earned(}) {\\^&else} {\\^&if GlobRemainingDice > 0} ({)Dice Left=GlobRemainingDice / GlobStartingDice(}) ({) [Roll 1d6](~MuleCharacter|CarriedTotalRollN)(}) {\\^&else} ({)No More Dice!=Target number not reached.(}) {\\^&end} {\\^&end} {\\^&if GlobRemainingDice >= 0} set^\\\.MuleCharacter.CarriedTotal.RemainingDice=GlobRemainingDice/set set^\\\.MuleCharacter.CarriedTotal.RunningTotal=$[^[^0^]^].value/set{\\^&end} }} Finally, open CarriedTotalRollN and enter the following text, then save and close it: !&{template:default} {{name=get.MuleCharacter.CarriedTotal.CurrentSkill/get Incremental Rolls}} {\&global ([GlobNewTotal] [\][\]get.MuleCharacter.CarriedTotal.RunningTotal/get + $[[0]].value \]\]) ([GlobRemainingDice] {&math get.MuleCharacter.CarriedTotal.RemainingDice/get - 1}) ([GlobTargetNumber] get.MuleCharacter.CarriedTotal.TargetNumber/get) ([GlobPreviousTotal] [\][\]get.MuleCharacter.CarriedTotal.RunningTotal/get\]\]) ([GlobStartingDice] get.MuleCharacter.CarriedTotal.StartingDice/get) } {{Target=GlobTargetNumber}} {{Previous Total=GlobPreviousTotal}} {{This Roll=[[1d6]]}} {{----------}} {{New Total=**GlobNewTotal** }} {\\& if GlobNewTotal.value >= GlobTargetNumber} {{Target Number Reached!=GlobRemainingDice Pushes Earned}} {\\&else} {\\&if GlobRemainingDice > 0} {{Dice Left=GlobRemainingDice / GlobStartingDice}} {{ [Roll 1d6](~MuleCharacter|CarriedTotalRollN)}} {\\&else} {{No More Dice!=Target number not reached.}} {\\&end} {\\&end} {\\&if GlobRemainingDice >= 0} set\\\.MuleCharacter.CarriedTotal.RemainingDice=GlobRemainingDice/set set\\\.MuleCharacter.CarriedTotal.RunningTotal=get.MuleCharacter.CarriedTotal.RunningTotal/get + $[[0]].value/set{\\&end} {&simple} Usage Run the CarriedTotalFirstRoll ability (you can make it a token action or add it to your bar, or click it from the sheet). The display will tell you whether you made your Target Number. If so, it will report how many pushes were earned. If the Target Number was not met and there are still more d6 available to roll, you'll have a button to run the next command (and roll the next d6). The Output After running the first command (and entering 5 for the number of starting dice, "ThisSkill" for the skill, and 15 for the Target Number), you should see something like this: You can see that I rolled a 5 with my first d6, and now have a total of 5. I have 4 out of 5 dice left, so I click the button to continue: In fact, I had to roll 2 additional times before I reached the Target Number of 15. With 1 die left, it tells me that I not only reached the Target Number, but I also earned 1 push. Each of these intermediate steps show the previous total as well as the current/new total counting the most recent 1d6 roll. If I do not make the Target Number within the number of dice I have, I will instead see a message noting that I failed: What is Happening The CarriedTotal ability is acting as a mule table, where we can store information. Here we are going to store our starting number of d6, how many d6 we have left, our previous total (actually the numbers that create the total), and our Target Number for the try. The CarriedTotalFirstRoll and CarriedTotalRollN abilities then make rolls and perform the necessary functions to track the values (reducing the remaining dice by 1, concatenating the latest-rolled-value to the values already rolled, etc.) There's a lot more in terms of metascript interplay going on that I can get into, but I'll wait to see if you actually want that part to be explained before I subject you to the deeper ends of the metascipt pool. =D Expanding and Making It Your Own Obviously, you're going to want to make this your own, if you decide to implement it. As mentioned, change "MuleCharacter" to whatever character will house the abilities you create. Change the ?{Skill} roll query in the CarriedTotalFirstRoll ability (the second line) to be a list of skills that fit your game (removing "ThisSkill" and "ThatSkill" and adding the ones that come from your game system) Ideally, you would be pulling the number of d6 in your pool from some attribute on your character sheet. If so, you will likely want to tie that retrieval to the ?{Skill} query (i.e., if you note this is "Sleuthing", then your sheet would ideally have a Sleuthing attribute set to the value of d6). If your ?{Skill} query contains the actual names of the attributes, then you can use the query return in a Fetch construction (another metascipt) to get the value: @(MuleCharacter.?{Skill}) You would use that to set both the StartingDice and RemainingDice variables in the CarriedTotalFirstRoll ability. If you can't see how, I can help. Also, since we use the ?{Skill} query to present the title of the templated output, you might be "prettifying" the attribute name (i.e., listing the skill as "This Skill" rather than "ThisSkill", as it appears on the sheet). In that case, we can still translate it and make it work. Also-also, if the attribute actually says something like "4d6" rather than "4"... we can work with that, too, but you'll just have to share the state of things before I can tell you exactly what we need to do. Basically, this is just a proof of concept that something like what you're looking for is possible, but as there are many different ways your game could diverge from any assumptions I would make, I'll hold off getting too specific about any of the changes until you post back.