OK let's take a step back. Basically, Fading Suns is a "roll under" system. You have to: - reroll the d20 for as long as you get a crit success (i.e. which is when you roll the "goal", or 19 whichever is lower), summing the scores until failure - reroll the d20 once when get you a natural 20, to know if it's going to be an auto failure (if your 2nd roll is under or equal to the goal) or a critical failure (if it is above) Note this is relative to FS v2.75, the latest official version. The new version coming up by Ulysses Spiele later this year on Kickstarter uses a different system. I have this roll template which works and implements this and more (e.g. includes special case when the goal is > 20): <rolltemplate class="sheet-rolltemplate-fs-GoalRoll"> <div class="fs-container"> {{#rollGreater() bonus_malus -1}} {{#skillName}} <div class="fs-header"><h1>{{characteristicName-i18n}} + {{skillName-i18n}} +{{bonus_malus}}</h1></div> {{/skillName}} {{^skillName}} <div class="fs-header"><h1>{{characteristicName-i18n}} +{{bonus_malus}}</h1></div> {{/skillName}} {{/rollGreater() bonus_malus -1}} {{#^rollGreater() bonus_malus -1}} {{#skillName}} <div class="fs-header"><h1>{{characteristicName-i18n}} + {{skillName-i18n}} {{bonus_malus}}</h1></div> {{/skillName}} {{^skillName}} <div class="fs-header"><h1>{{characteristicName-i18n}} {{bonus_malus}}</h1></div> {{/skillName}} {{/^rollGreater() bonus_malus -1}} <div class="arrow-container"><div class="arrow-right"></div></div> {{#^rollGreater() roll cappedgoal}} {{#critFailureConfirm}} <span class="success actualroll">{{roll}}</span><span> | {{goal}}. </span><span class="success" data-i18n="noncritical_failure">Non-critical failure.</span> {{/critFailureConfirm}} {{^critFailureConfirm}} {{#rollWasCrit() roll}} <span class="critsuccess actualroll">{{roll}}</span><span> | {{goal}}. </span><span class="critsuccess" data-i18n="critical_success">Critical Success!</span> {{/rollWasCrit() roll}} {{#^rollWasCrit() roll}} <span class="success actualroll">{{roll}}</span><span> | {{goal}}. </span><span class="success" data-i18n="success">Success!</span> {{/^rollWasCrit() roll}} {{#rollTotal() roll 1}} <span class="success">0</span> {{/rollTotal() roll 1}} {{#rollBetween() roll 2 3}} <span class="success">1</span> {{/rollBetween() roll 2 3}} {{#rollBetween() roll 4 5}} <span class="success">2</span> {{/rollBetween() roll 4 5}} {{#rollBetween() roll 6 7}} <span class="success">3</span> {{/rollBetween() roll 6 7}} {{#rollBetween() roll 8 9}} <span class="success">4</span> {{/rollBetween() roll 8 9}} {{#rollBetween() roll 10 11}} <span class="success">5</span> {{/rollBetween() roll 10 11}} {{#rollBetween() roll 12 13}} <span class="success">6</span> {{/rollBetween() roll 12 13}} {{#rollBetween() roll 14 15}} <span class="success">7</span> {{/rollBetween() roll 14 15}} {{#rollBetween() roll 16 17}} <span class="success">8</span> {{/rollBetween() roll 16 17}} {{#rollBetween() roll 18 19}} <span class="success">9</span> {{/rollBetween() roll 18 19}} {{#above20pv}} <span class="success"> + {{above20pv}}</span> {{/above20pv}} <span class="success"> <span data-i18n="victory_points">VP</span></span> {{#rollWasCrit() roll}} {{#skillName}} <div>[<span data-i18n="roll_again">Roll again</span>](!fs_critSuccessConfirm,{{characterName}},{{bonus_malus}},{{characteristicName}},{{skillName}})</div> {{/skillName}} {{^skillName}} <div>[<span data-i18n="roll_again">Roll again</span>](!fs_critSuccessConfirm,{{characterName}},{{bonus_malus}},{{characteristicName}},null)</div> {{/skillName}} {{/rollWasCrit() roll}} {{/critFailureConfirm}} {{/^rollGreater() roll cappedgoal}} {{#rollGreater() roll cappedgoal}} {{#critSuccessConfirm}} <span class="failure actualroll">{{roll}}</span><span> | {{goal}}. </span><span class="failure" data-i18n="failure">Fin.</span> {{/critSuccessConfirm}} {{^critSuccessConfirm}} {{#critFailureConfirm}} <span class="critfailure actualroll">{{roll}}</span><span> | {{goal}}. </span><span class="critfailure" data-i18n="critical_failure">Critical failure.</span> {{/critFailureConfirm}} {{^critFailureConfirm}} {{#rollWasFumble() roll}} <span class="critfailure actualroll">{{roll}}</span><span> | {{goal}}. </span><span class="critfailure" data-i18n="critical_failure_q">Critical failure?</span> {{#skillName}} <div>[<span data-i18n="confirm">Confirm</span>](!fs_critFailureConfirm,{{characterName}},{{bonus_malus}},{{characteristicName}},{{skillName}})</div> {{/skillName}} {{^skillName}} <div>[<span data-i18n="confirm">Confirm</span>](!fs_critFailureConfirm,{{characterName}},{{bonus_malus}},{{characteristicName}},null)</div> {{/skillName}} {{/rollWasFumble() roll}} {{#^rollWasFumble() roll}} <span class="failure actualroll">{{roll}}</span><span> | {{goal}}. </span><span class="failure" data-i18n="failure">Failure!</span> {{/^rollWasFumble() roll}} {{/critFailureConfirm}} {{/critSuccessConfirm}} {{/rollGreater() roll cappedgoal}} </div> </rolltemplate> Roll buttons next to character characteristics call this template like this (example here is: strength): &{template:fs-GoalRoll} {{characterName=@{character_name}}} {{characteristicName=strength}} {{characteristicName-i18n=^{strength}}} {{bonus_malus=[[?{Bonus/Malus|0}]]}} {{goal=[[@{strength}+[[?{Bonus/Malus|0}]]]]}} {{cappedgoal=[[{@{strength}+[[?{Bonus/Malus|0}]],19}kl1]]}} {{above20pv=[[@{strength}+?{Bonus/Malus|0}-20]]}} {{roll=[[1d20cs[[{@{strength}+[[?{Bonus/Malus|0}]],19}kl1]]cf20]]}} Roll buttons next to character skills call it like this (example here is: survival): &{template:fs-GoalRoll} {{characterName=@{character_name}}} {{characteristicName=@{selected_characteristic}}} {{characteristicName-i18n=^{@{selected_characteristic}}}} {{skillName=survival}} {{skillName-i18n=^{survival}}} {{bonus_malus=[[?{Bonus/Malus|0}]]}} {{goal=[[@{selected_characteristic_value}+@{survival}+[[?{Bonus/Malus|0}]]]]}} {{cappedgoal=[[{@{selected_characteristic_value}+@{survival}+[[?{Bonus/Malus|0}]],19}kl1]]}} {{above20pv=[[@{selected_characteristic_value}+@{survival}+?{Bonus/Malus|0}-20]]}} {{roll=[[1d20cs[[{@{selected_characteristic_value}+@{survival}+[[?{Bonus/Malus|0}]],19}kl1]]cf20]]}} As you can see there are 4 API button commands (starting with !fs_) in the rolltemplate, they are there as a shortcut to call the same rolltemplate, with exact same list of parameter key/values, except for: - {{roll}} which is going to be a new roll (with same 'cappedgoal') - an additional {{critSuccessConfirm=[[1]]}} or {{critFailureConfirm=[[1]]}} parameter It's these 4 calls I am trying to replace to make the sheet non-Pro friendly. My only alternative, if not possible, is going to be to show these 4 buttons in Pro-creator games only, thus degrading the experience in non-Pro games (via a sheet config parameter (sheet.json), I imagine ; not entirely sure how to do this yet, but I'm sure I can find examples).