I've got an easy one for you. I'm almost entirely new to coding (my first experience being relatively complex command blocks in minecraft, then upgrading to making relatively simple datapacks) and I wanted to create a custom character sheet for my friend who adapted the V20 system to be significantly simplified, as to make it easier for him to make better balanced enemies. As I've played in no fewer than a dozen systems, and remember how at least half of them work (which is unusual, apparently?) I thought I'd try my hand at making his thing better, enter C risis o f C onquest: K ryssom. Yes, I know I have a childish sense of humour, and no I'm not changing it. Thanks to Chat GPT, I had a decent launchpoint to get started. I'm garbage at coding, but give me an example of correct format and a list of common terms within scripts, and I can adapt it, like how one can adapt dough into bread. I struggle with the ingredients, but once I've got them... well, now we're cooking! Due to how the system works, you roll 1d10! to hit (I've got the modifiers covered), then you have 1 die of damage, with your attack modifiers increasing the die size (5 dice in V20 would be +5 to hit, and then would be 1d5 damage), but since we're using exploding criticals, I thought it would be much more interesting if we had an extra die for each crit, ergo rolling 31 (10 10 6) or 29 (10 10 4) would give you 3d5 damage. The native way to do this in macros is: floor($[[1.computed]]/10) This will get the die roll result and divide by 10, simple enough. The way to do this with an API is: !setattr --name Secret Hub --silent --Roll Result|[[1d10!/10]] A bit more complicated for a workaround. Each time the macro in question is used, it will instead get the Roll Result attribute from the Secret Hub character sheet, process the macro, and then with this on its own line afterward, it will change the value of Roll Result. Both of these have their fatal flaws, of course. For the first one, computed values HATE being in nested brackets for some reason beyond me. And for the second, APIs aren't omni-user friendly. Only a paid subscription can use them, and so most of Roll20's userbase wouldn't get the seamless experience of It Just Works . I've done a few iterations with Chat GPT for the sheetworker script at the end of the HTML, and this is the best I've gotten: <script type="text/worker"> function rollDice() { var totalRoll = 0; while (true) { var rollResult = Math.floor(Math.random() * 10) + 1; totalRoll += rollResult; if (rollResult !== 10) { break; } } var resultElement = document.querySelector('input[name="attr_roll_check"]'); resultElement.value = totalRoll; return(totalRoll); } </script> Of course, I have no idea what I'm doing. Me working on a script is like a computer processing data. I can tell you what the words mean, but I can't tell you how they're supposed to make you feel. This is another work-around where the scriptworker detects a button on the sheet being pressed, then iterates 1d10! entirely within itself, and then saves the value in the destination before the button does its calculations. If this is processed after the triggering command just like with the API example, then it at least can store the value for the next roll in the hidden attribute. Am I being a smart idiot again? Is there an easier way to do this? Will I just have to accept using the macro example? Find out next time on Dragonball Z!